diff -Nru mame-0.250+dfsg.1/3rdparty/lua-zlib/lua_zlib.c mame-0.251+dfsg.1/3rdparty/lua-zlib/lua_zlib.c --- mame-0.250+dfsg.1/3rdparty/lua-zlib/lua_zlib.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/3rdparty/lua-zlib/lua_zlib.c 2022-12-29 14:20:09.000000000 +0000 @@ -392,7 +392,7 @@ SETLITERAL("_COPYRIGHT", "Copyright (c) 2009-2010 Brian Maher"); SETLITERAL("_DESCRIPTION", "Yet another binding to the zlib library"); - SETLITERAL("_VERSION", "lua-zlib $Id: b619258c75f480717fad20c113c3b1a35f888ce0 $ (tag: mame0250)"); + SETLITERAL("_VERSION", "lua-zlib $Id: b619258c75f480717fad20c113c3b1a35f888ce0 $ (tag: mame0251)"); /* Expose this to lua so we can do a test: */ SETINT("_TEST_BUFSIZ", LUAL_BUFFERSIZE); diff -Nru mame-0.250+dfsg.1/android-project/app/src/main/AndroidManifest.xml mame-0.251+dfsg.1/android-project/app/src/main/AndroidManifest.xml --- mame-0.250+dfsg.1/android-project/app/src/main/AndroidManifest.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/android-project/app/src/main/AndroidManifest.xml 2022-12-29 14:20:09.000000000 +0000 @@ -4,8 +4,8 @@ --> diff -Nru mame-0.250+dfsg.1/CONTRIBUTING.md mame-0.251+dfsg.1/CONTRIBUTING.md --- mame-0.250+dfsg.1/CONTRIBUTING.md 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/CONTRIBUTING.md 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,4 @@ +Contributing to MAME +==================== + +Please see the guidelines for [Contributing to MAME](https://docs.mamedev.org/contributing/) on our documentation web site. diff -Nru mame-0.250+dfsg.1/debian/changelog mame-0.251+dfsg.1/debian/changelog --- mame-0.250+dfsg.1/debian/changelog 2022-11-30 10:19:02.000000000 +0000 +++ mame-0.251+dfsg.1/debian/changelog 2022-12-30 17:08:54.000000000 +0000 @@ -1,4 +1,10 @@ -mame (0.250+dfsg.1-0ubuntu1~ppa1~bionic1) bionic; urgency=medium +mame (0.251+dfsg.1-0ubuntu1~ppa1~bionic1) bionic; urgency=medium + + * New upstream release. + + -- Cesare Falco Fri, 30 Dec 2022 18:08:54 +0100 + +mame (0.250+dfsg.1-1) unstable; urgency=medium * New upstream release. * Updated dependencies to libasio >= 1.20. diff -Nru mame-0.250+dfsg.1/docs/CONTRIBUTING.md mame-0.251+dfsg.1/docs/CONTRIBUTING.md --- mame-0.250+dfsg.1/docs/CONTRIBUTING.md 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/docs/CONTRIBUTING.md 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ - diff -Nru mame-0.250+dfsg.1/docs/source/conf.py mame-0.251+dfsg.1/docs/source/conf.py --- mame-0.250+dfsg.1/docs/source/conf.py 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/docs/source/conf.py 2022-12-29 14:20:09.000000000 +0000 @@ -63,9 +63,9 @@ # built documents. # # The short X.Y version. -version = '0.250' +version = '0.251' # The full version, including alpha/beta/rc tags. -release = '0.250' +release = '0.251' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff -Nru mame-0.250+dfsg.1/docs/source/contributing/cxx.rst mame-0.251+dfsg.1/docs/source/contributing/cxx.rst --- mame-0.250+dfsg.1/docs/source/contributing/cxx.rst 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/docs/source/contributing/cxx.rst 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,573 @@ +.. _contributing-cxx: + +C++ Coding Guidelines +===================== + +.. contents:: :local: + + +.. _contributing-cxx-intro: + +Introduction +------------ + +**In terms of coding conventions, the style present within an existing +source file should be favoured over the standards found below.** + +When a new source file is being created, the following coding +conventions should be observed if creating a new file within the MAME +core (``src/emu`` and ``src/lib``). If the source file is outside the +core, deference can be given to a contributor’s preferred style, +although it is strongly encouraged to code with the understanding that +the file may need to be comprehensible by more than one person as time +marches forward. + + +.. _contributing-cxx-definitions: + +Definitions +----------- + +Snake case + All lowercase letters with words separated by underscores: + ``this_is_snake_case`` +Screaming snake case + All uppercase letters with words separated by underscores: + ``SCREAMING_SNAKE_CASE`` +Camel case: + Lowercase initial letter, first letter of each subsequent word + capitalised, with no separators between words: ``exampleCamelCase`` +Llama case: + Uppercase initial letter, first letter of each subsequent word + capitalised, with no separators between words: ``LlamaCaseSample`` + + +.. _contributing-cxx-fileformat: + +Source file format +------------------ + +MAME C++ source files are encoded as UTF-8 text, assuming fixed-width +characters, with tab stops at four-space intervals. Source files should +end with a terminating end-of-line. Any valid printable Unicode text is +permitted in comments. Outside comments and strings, only the printable +ASCII subset of Unicode is permitted. + +The ``srcclean`` tool is used to enforce file format rules before each +release. You can build this tool and apply it to the files you modify +before opening a pull request to avoid conflicts or surprising changes +later. + + +.. _contributing-cxx-naming: + +Naming conventions +------------------ + +Preprocessor macros + Macro names should use screaming snake case. Macros are always + global and name conflicts can cause confusing errors – think + carefully about what macros really need to be in headers and name + them carefully. +Include guards + Include guard macros should begin with ``MAME_``, and end with a + capitalised version of the file name, with separators replaced by + underscores. +Constants + Constants should use screaming snake case, whether they are constant + globals, constant data members, enumerators or preprocessor + constants. +Functions + Free functions names should use snake case. (There are some utility + function that were previously implemented as preprocessor macros + that still use screaming snake case.) +Classes + Class names should use snake case. Abstract class names should end + in ``_base``. Public member functions (including static member + functions) should use snake case. +Device classes + Concrete driver ``driver_device`` implementation names + conventionally end in ``_state``, while other concrete device class + names end in ``_device``. Concrete ``device_interface`` names + conventionally begin with ``device_`` and end with ``_interface``. +Device types + Device types should use screaming snake case. Remember that device + types are names in the global namespace, so choose explicit, + unambiguous names. +Enumerations + The enumeration name should use snake case. The enumerators should + use screaming snake case. +Template parameters + Template parameters should use llama case (both type and value + parameters). + +Identifiers containing two consecutive underscores or starting with an +underscore followed by an uppercase letter are always reserved and +should not be used. + +Type names and other identifiers with a leading underscore should be +avoided within the global namespace, as they are explicitly reserved +according to the C++ standard. Additionally, identifiers suffixed with +``_t`` should be avoided within the global namespace, as they are also +reserved according to POSIX standards. While MAME violates this policy +occasionally – most notably with ``device_t`` – it’s considered to be an +unfortunate legacy decision that should be avoided in any new code. + + +.. _contributing-cxx-literals: + +Variables and literals +---------------------- + +Octal literals are discouraged from use outside of specific cases. They +lack the obvious letter-based prefixes found in hexadecimal and binary +literals, and therefore can be difficult to distinguish at a glance from +a decimal literal to coders who are unfamiliar with octal notation. + +Lower-case hexadecimal literals are preferred, e.g. ``0xbadc0de`` rather +than ``0xBADC0DE``. For clarity, try not to exceed the bit width of the +variable which will be used to store it. + +Binary literals have rarely been used in the MAME source code due to the +``0b`` prefix not being standardised until C++14, but there is no policy +to avoid their use. + +Integer suffix notation should be used when specifying 64-bit literals, +but is not strictly required in other cases. It can, however, clarify +the intended use of a given literal at a glance. Uppercase long integer +literal suffixes should be used to avoid confusion with the digit 1, +e.g. ``7LL`` rather than ``7ll``. + +Digit grouping should be used for longer numeric literals, as it aids in +recognising order of magnitude or bit field positions at a glance. +Decimal literals should use groups of three digits, and hexadecimal +literals should use groups of four digits, outside of specific +situations where different grouping would be easier to understand, e.g. +``4'433'619`` or ``0xfff8'1fff``. + +Types that do not have a specifically defined size should be avoided if +they are to be registered with MAME’s save-state system, as it harms +portability. In general, this means avoiding the use of ``int`` for +these members. + +It's encouraged, but not required, for class data members to be prefixed +with ``m_`` for non-static instance members and ``s_`` for static +members. This does not apply to nested classes or structs. + + +.. _contributing-cxx-braceindent: + +Bracing and indentation +----------------------- + +Tabs are used for initial indentation of lines, with one tab used per +nested scope level. Statements split across multiple lines should be +indented by two tabs. Spaces are used for alignment at other places +within a line. + +Either K&R or Allman-style bracing is preferred. There is no specific +preference for bracing on single-line statements, although bracing +should be consistent for a given ``if/else`` block, as shown: + +.. code-block:: C++ + + if (x == 0) + { + return; + } + else + { + call_some_function(); + x--; + } + +When using a series of ``if``/``else`` or ``if``/``else if``/``else`` +blocks with comments at the top indentation level, avoid extraneous +newlines. The use of additional newlines may lead to ``else if`` or +``else`` blocks being missed due to the newlines pushing the blocks +outside the visible editor height: + +.. code-block:: C++ + + // Early-out if our hypothetical counter has run out. + if (x == 0) + { + return; + } + // We should do something if the counter is running. + else + { + call_some_function(); + x--; + } + +Indentation for ``case`` statements inside a ``switch`` body can either +be on the same level as the ``switch`` statement or inward by one level. +There is no specific style which is used across all core files, although +indenting by one level appears to be used most often. + + +.. _contributing-cxx-spacing: + +Spacing +------- + +Consistent single-spacing between binary operators, variables, and +literals is strongly preferred. The following examples exhibit +reasonably consistent spacing: + +.. code-block:: C++ + + uint8_t foo = (((bar + baz) + 3) & 7) << 1; + uint8_t foo = ((bar << 1) + baz) & 0x0e; + uint8_t foo = bar ? baz : 5; + +The following examples exhibit extremes in either direction, although +having extra spaces is less difficult to read than having too few: + +.. code-block:: C++ + + uint8_t foo = ( ( ( bar + baz ) + 3 ) & 7 ) << 1; + uint8_t foo = ((bar<<1)+baz)&0x0e; + uint8_t foo = (bar?baz:5); + +A space should be used between a fundamental C++ statement and its +opening parenthesis, e.g.: + +.. code-block:: C++ + + switch (value) ... + if (a != b) ... + for (int i = 0; i < foo; i++) ... + + +.. _contributing-cxx-scoping: + +Scoping +------- + +Variables should be scoped as narrowly as is reasonably possible. There +are many instances of C89-style local variable declaration in the MAME +codebase, but this is largely a hold-over from MAME’s early days, which +pre-date the C99 specification. + +The following two snippets exhibit the legacy style of local variable +declaration, followed by the more modern and preferred style: + +.. code-block:: C++ + + void example_device::some_function() + { + int i; + uint8_t data; + + for (i = 0; i < std::size(m_buffer); i++) + { + data = m_buffer[i]; + if (data) + { + some_other_function(data); + } + } + } + +.. code-block:: C++ + + void example_device::some_function() + { + for (int i = 0; i < std::size(m_buffer); i++) + { + const uint8_t data = m_buffer[i]; + if (data) + { + some_other_function(data); + } + } + } + +Enumerated values, structs, and classes used only by one specific device +should be declared within the device's class itself. This avoids +pollution of the global namespace and makes the device-specific use of +them more obvious at a glance. + + +.. _contributing-cxx-const: + +Const Correctness +----------------- + +Const-correctness has not historically been a strict requirement of code +that goes into MAME, but there’s increasing value in it as the amount of +code refactoring increases and technical debt decreases. + +When writing new code, it’s worth taking the time to determine if a +local variable can be declared ``const``. Similarly, it's encouraged to +consider which member functions of a new class can be ``const`` +qualified. + +In a similar vein, arrays of constants should be declared ``constexpr`` +and should use screaming snake case, as outlined towards the top of this +document. Lastly, arrays of C-style strings should be declared as both +a const array of const strings, as so: + +.. code-block:: C++ + + static const char *const EXAMPLE_NAMES[4] = + { + "1-bit", + "2-bit", + "4-bit", + "Invalid" + }; + + +.. _contributing-cxx-comments: + +Comments +-------- + +While ``/* ANSI C comments */`` are often found in the codebase, there +has been a gradual shift towards ``// C++-style comments`` for +single-line comments. This is very much a guideline, and coders are +encouraged to use whichever style is most comfortable. + +Unless specifically quoting content from a machine or ancillary +materials, comments should be in English so as to match the predominant +language that the MAME team shares worldwide. + +Commented-out code should typically be removed prior to authoring a pull +request, as it has a tendency to rot due to the fast-moving nature of +MAME’s core API. If there is a desire known beforehand for the code to +eventually be included, it should be bookended in ``if (0)`` or +``if (false)``, as code removed through a preprocessor macro will rot at +the same rate. + + +.. _contributing-cxx-helpers: + +MAME-Specific Helpers +--------------------- + +When at all possible, use helper functions and macros for bit +manipulation operations. + +The ``BIT(value, bit)`` helper can be used to extract the state of a bit +at a given position from an integer value. The resulting value will be +aligned to the least significant bit position, i.e. will be either 0 or +1. + +An overload of the same function, ``BIT(value, bit, width)`` can be used +to extract a bit field of a specified width from an integer value, +starting at the specified bit position. The result will also be +right-justified and will be of the same type as the incoming value. + +There are, additionally, a number of helpers for functionality such as +counting leading zeroes/ones, population count, and signed/unsigned +integer multiplication and division for both 32-bit and 64-bit results. +Not all of these helpers have wide use in the MAME codebase, but using +them in new code is strongly preferred when that code is performance- +critical, as they utilise inline assembly or compiler intrinsics per- +platform when available. + +``count_leading_zeros_32/64(T value)`` + Accepts an unsigned 32/64-bit value and returns an unsigned 8-bit + value containing the number of consecutive zeros starting from the + most significant bit. +``count_leading_ones_32/64(T value)`` + Same functionality as above, but examining consecutive one-bits. +``population_count_32/64(T value)`` + Accepts an unsigned 32/64-bit value and returns the number of + one-bits found, i.e. the Hamming weight of the value. +``rotl_32/64(T value, int shift)`` + Performs a circular/barrel left shift of an unsigned 32/64-bit value + with the specified shift value. The shift value will be masked to + the valid bit range for a 32-bit or 64-bit value. +``rotr_32/64(T value, int shift)`` + Same functionality as above, but with a right shift. + +For documentation on helpers related to multiplication and division, +refer to ``src/osd/eminline.h``. + + +.. _contributing-cxx-logging: + +Logging +------- + +MAME has multiple logging function for different purposes. Two of the +most frequently used logging functions are ``logerror`` and +``osd_printf_verbose``: + +* Devices inherit a ``logerror`` member function. This automatically + includes the fully-qualified tag of the invoking device in log + messages. Output is sent to MAME’s debugger’s rotating log buffer if + the debugger is enabled. If the + :ref:`-log option ` is enabled, it’s also + written to the file ``error.log`` in the working directory. If the + :ref:`-oslog option ` is enabled, it’s + additionally sent to the OS diagnostic output (the host debugger + diagnostic log on Windows if a host debugger is attached, or standard + error otherwise). +* The output of the ``osd_printf_verbose`` function is sent to standard + error if the :ref:`-verbose option ` is + enabled. + +The ``osd_printf_verbose`` function should be used for logging that is +useful for diagnosing user issues, while ``logerror`` should be used for +messages more relevant to developers (either developing MAME itself, or +developing software for emulated systems using MAME’s debugger). + +For debug logging, a channel-based logging system exists via the header +``logmacro.h``. It can be used as a generic logging system as follows, +without needing to make use of its ability to mask out specific +channels: + +.. code-block:: C++ + + // All other headers in the .cpp file should be above this line. + #define VERBOSE (1) + #include "logmacro.h" + ... + void some_device::some_reg_write(u8 data) + { + LOG("%s: some_reg_write: %02x\n", machine().describe_context(), data); + } + +The above example also makes use of a helper function which is available +in all derivatives of ``device_t``: ``machine().describe_context()``. +This function will return a string that describes the emulation context +in which the function is being run. This includes the fully-qualified +tag of the currently executing device (if any). If the relevant device +implements ``device_state_interface``, it will also include the current +program-counter value reported by the device. + +For more fine-grained control, specific bit masks can be defined and +used via the ``LOGMASKED`` macro: + +.. code-block:: C++ + + // All other headers in the .cpp file should be above this line. + #define LOG_FOO (1 << 1U) + #define LOG_BAR (1 << 2U) + + #define VERBOSE (LOG_FOO | LOG_BAR) + #include "logmacro.h" + ... + void some_device::some_reg_write(u8 data) + { + LOGMASKED(LOG_FOO, "some_reg_write: %02x\n", data); + } + + void some_device::another_reg_write(u8 data) + { + LOGMASKED(LOG_BAR, "another_reg_write: %02x\n", data); + } + +Note that the least significant bit position for user-supplied masks is +1, as bit position 0 is reserved for ``LOG_GENERAL``. + +By default, ``LOG`` and ``LOGMASKED`` will use the device-supplied +``logerror`` function. However, this can be redirected as desired. The +most common use case would be to direct output to the standard output +instead, which can be accomplished by explicitly defining +``LOG_OUTPUT_FUNC`` as so: + +.. code-block:: C++ + + #define LOG_OUTPUT_FUNC osd_printf_info + +A developer should always ensure that ``VERBOSE`` is set to 0 and that +any definition of ``LOG_OUTPUT_FUNC`` is commented out prior to opening +a pull request. + + +.. _contributing-cxx-structure: + +Structural organization +----------------------- + +All C++ source files must begin with a two comments listing the +distribution license and copyright holders in a standard format. +Licenses are specified by their SPDX short identifier if available. +Here is an example of the standard format: + +.. code-block:: C++ + + // license:BSD-3-Clause + // copyright-holders:David Haywood, Tomasz Slanina + +Header includes should generally be grouped from most-dependent to +least-dependent, and sorted alphabetically within said groups: + +* The project prefix header, ``emu.h``, must be the first thing in a + translation unit +* Local project headers (i.e. headers found in the same source + directory) +* Headers in ``src/devices`` +* Headers in ``src/emu`` +* Headers in ``src/lib/formats`` +* Headers in ``src/lib/util`` +* Headers from the OSD layer +* C++ standard library headers +* C standard library headers +* OS-specific headers +* Layout headers + +Finally, task-specific headers such as ``logmacro.h`` - described in the +previous section - should be included last. A practical example +follows: + +.. code-block:: C++ + + #include "emu.h" + + #include "cpu/m68000/m68000.h" + #include "machine/mc68328.h" + #include "machine/ram.h" + #include "sound/dac.h" + #include "video/mc68328lcd.h" + #include "video/sed1375.h" + + #include "emupal.h" + #include "screen.h" + #include "speaker.h" + + #include "pilot1k.lh" + + #define VERBOSE (0) + #include "logmacro.h" + +In most cases, the class declaration for a system driver should be +within the corresponding source file along with the implementation. In +such cases, the class declaration and all contents of the source file, +excluding the ``GAME``, ``COMP``, or ``CONS`` macro, should be enclosed +in an anonymous namespace (this produces better compiler diagnostics, +allows more aggressive optimisation, reduces the chance of duplicate +symbols, and reduces linking time). + +Within a class declaration, there should be one section for each member +access level (``public``, ``protected`` and ``private``) if practical. +This may not be possible in cases where private constants and/or types +need to be declared before public members. Members should use the least +public access level necessary. Overridden virtual member functions +should generally use the same access level as the corresponding member +function in the base class. + +Class member declarations should be grouped to aid understanding: + +* Within a member access level section, constants, types, data members, + instance member functions and static member functions should be + grouped. +* In device classes, configuration member functions should be grouped + separately from live signal member functions. +* Overridden virtual member functions should be grouped according to the + base classes they are inherited from. + +For classes with multiple overloaded constructors, constructor +delegation should be used where possible to avoid repeated member +initialiser lists. + +Constants which are used by a device or machine driver should be in the +form of explicitly-sized enumerated values within the class declaration, +or be relegated to ``#define`` macros within the source file. This +helps avoid polluting the preprocessor. diff -Nru mame-0.250+dfsg.1/docs/source/contributing/index.rst mame-0.251+dfsg.1/docs/source/contributing/index.rst --- mame-0.250+dfsg.1/docs/source/contributing/index.rst 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/docs/source/contributing/index.rst 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,144 @@ +.. _contributing: + +Contributing to MAME +==================== + +So you want to contribute to MAME but aren’t sure where to start? Well +the great news is that there’s always plenty to do for people with a +variety of skill sets. + + +.. _contributing-testing: + +Testing and reporting bugs +-------------------------- + +One thing MAME can always do with is more testing and bug reports. If +you’re familiar with a system that MAME emulates and notice something +wrong, or if you find a bug in MAME’s user interface, you can head over +to `MAME Testers `_ and, assuming it isn’t +already reported, register an account and open an issue. Be sure to +read the `FAQ `_ and +`rules `_ first to ensure you start +out on the right foot. Please note that MAME Testers only accepts +user-facing bugs in tagged release versions. + +For other kinds of issues, we have +`GitHub Issues `_. There’s a +bit more leeway here. For example we accept developer-facing issues +(e.g. bugs in internal APIs, or build system inadequacies), feature +requests, and major regressions before they make it into a released +version. Please respect the fact that the issue tracker is *not* a +discussion or support forum, it’s only for reporting reproducible +issues. Don’t open issues to ask questions or request support. Also, +keep in mind that the ``master`` branch is unstable. If the current +revision doesn’t compile at all or is completely broken, we’re probably +already aware of it and don’t need issues opened for that. Wait a while +and see if there’s an update. You might want to comment on the commit +in question with the compiler error message, particularly if you’re +compiling in an unorthodox but supported configuration. + +When opening an issue, remember to provide as much information as +possible to help others understand, reproduce, and diagnose the issue. +Things that are helpful to include: + +* The incorrect behaviour, and expected or correct behaviour. Be + specific: just saying it “doesn’t work” usually isn’t enough detail. +* Environment details, including your operating system, CPU + architecture, system locale, and display language, if applicable. For + video output bugs, note your video hardware (GPU), driver version, and + the MAME video output module you’re using. For input handling bugs, + include the input peripherals and MAME input modules you’re using. +* The exact version of MAME you’re using, including a git commit digest + if it isn’t a tagged release version, and any non-standard build + options. +* The exact system and software being emulated (may not be applicable + for issues with parts of MAME’s UI, like the system selection menu). + Include things like the selected BIOS version, and emulated peripheral + (slot device) configuration. +* Steps to reproduce the issue. Assume the person reading is familiar + with MAME itself, but not necessarily familiar with the emulated + system and software in question. For emulation issues, input + recordings and/or saved state files for reproducing the issue can be + invaluable. +* An original reference for the correct behaviour. If you have access + to the original hardware for the emulated system, it helps to make a + recording of the correct behaviour for comparison. + + +.. _contributing-code: + +Contributing to MAME’s source code +---------------------------------- + +MAME itself is written in C++, but that isn’t the sum total of the +source code. The source code also includes: + +* The documentation hosted on this site (and also included in releases + as a PDF), written in + `reStructuredText `_ + markup. +* The supplied :ref:`plugins `, written in + `Lua 5.3 `_. +* Internal layouts for emulated machines that need to display more than + a simple video screen. These are an XML application + :ref:`described here `. +* The software lists, describing known software media for systems that + MAME emulates. MAME software lists are an XML application. +* The user interface translations, in GNU gettext PO format. They can + be edited with a good text editor, or a dedicated tool like + `Poedit `_. + +Our primary source code repository is +`hosted on GitHub `_. We prefer to +receive source code contributions in the form of +`pull requests `_. You’ll need +to learn the basics of git distributed version control and familiarise +yourself with the git tools. The basic process for creating a pull +request is as follows: + +* Sign up for an account on GitHub. +* Create a fork of the mamedev/mame repository. +* Create a new branch off the ``master`` branch in your forked + repository. +* Clone your forked repository, and check out your new branch. +* Make your changes, and build and test them locally. +* Commit your changes, and push your branch to GitHub. +* Optionally enable GitHub Actions for your forked repository, allowing + your changes to be built on Windows, macOS and Linux. +* Open a pull request to merge your changes into the ``master`` branch + in the mamedev/mame repository. + +Please keep the following in mind (note that not all points are relevant +to all kinds of changes): + +* Make your commit messages descriptive. Please include what the change + affects, and what it’s supposed to achieve. A person reading the + commit log shouldn’t need to resort to examining the diff to get a + basic idea of what a commit is supposed to do. The default commit + messages provided by GitHub are completely useless, as they don’t give + any indication of what a change is supposed to do. +* Test your changes. Ensure that a full build of MAME completes, and + that the code you changed works. It’s a good idea to build with + ``DEBUG=1`` to check that assertions compile and don’t trigger. +* Use an enlightening pull request title and description. The title + should give a one-line summary of what the overall change affects and + what it’s supposed to do. The description should contain more detail. + Don’t leave the description empty and describe the change in comments, + as this makes searching and filtering more difficult. +* Be aware that GitHub Actions has opaque resource limits. It isn’t + clear when you’re close to the limits, and we’ve had contributors + banned from GitHub Actions for violating the limits. Even if you + appeal the ban, they still won’t tell you what the actual limits are, + justifying this by saying that if you know the limits, you can take + steps to evade them. If you enable GitHub Actions, consider not + pushing individual commits if you don’t need them to be automatically + built, or cancelling workflow runs when you don’t need the results. + +We have guidelines for specific parts of the source: + +.. toctree:: + :titlesonly: + + cxx + softlist diff -Nru mame-0.250+dfsg.1/docs/source/contributing/softlist.rst mame-0.251+dfsg.1/docs/source/contributing/softlist.rst --- mame-0.250+dfsg.1/docs/source/contributing/softlist.rst 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/docs/source/contributing/softlist.rst 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,175 @@ +.. _contributing-softlist: + +Guidelines for Software Lists +============================= + +.. contents:: :local: + + +.. _contributing-softlist-intro: + +Introduction +------------ + +MAME’s software lists describe known software media for emulated +systems in a form that can be used to identify media image files for +known software, verify media image file integrity, and load media +image files for emulation. Software lists are implemented as XML +files in the ``hash`` folder. The XML structure is described in the +file ``hash/softwarelist.dtd``. + +Philosophically, software list items should represent the original +media, rather than a specific dump of the media. Ideally, it should be +possible for anyone with the media to dump it and produce the same image +file. Of course, this isn’t always possible in practice – in particular +it’s problematic for inherently analog media, like home computer +software stored on audio tape cassettes. + +MAME strives to document the best available media images. It is not our +intention to propagate corrupted, truncated, defaced, watermarked, or +otherwise bad media images. Where possible, file structures matching +the original media structure are preferred. For example we prefer +individual files for separate ROM chips in cartridge media, and we use +disk images rather than archives of files extracted from the original +disks. + + +.. _contributing-softlist-itempart: + +Items and parts +--------------- + +A software list is a collection of *items* and each item may have +multiple *parts*. An item represents a piece of software, as +distributed as a complete package. A part represents a single piece of +media within the package. Parts can be mounted individually in +emulated media devices. For example a piece of software distributed on +three floppy disks will be a single item, while each floppy disk will be +one part within that item. + +Sometimes, logically separate parts of a single physical piece of media +are represented as separate parts within a software item. For example +each side of an audio tape cassette is represented as a separate part. +However individual ROM chips within a cartridge may be separate files, +but they are *not* separate parts, as the cartridge is mounted as a +whole. + +Each item is a ``software`` element. The ``software`` element may have +the following attributes: + +name (required) + The short name identifying the item. This is used for file names, + command line arguments, database keys, URL fragments, and many other + purposes. It should be terse but still recognisable. It must be + unique within the software list. Valid characters are lowercase + English letters, decimal digits and underscores. The maximum + allowed length is sixteen characters. +cloneof (optional) + The short name of the parent item if the item is a clone. The + parent must be within the same software list – parent/clone + relationships spanning multiple software lists are not supported. +supported (optional) + One of the values ``yes`` (fully usable in emulation), ``no`` (not + usable in emulation), or ``partial`` (usable in emulation with + limitations). If the attribute is not present, it is equivalent to + ``yes``. Examples of partially supported software include games + that are playable with graphical glitches, and office software where + some but not all functionality works. + +Each part is a ``part`` element within the ``software`` element. The +``part`` element must have the following attributes: + +name (required) + The short name identifying the part. This is used for command line + arguments, database keys, URL fragments, and many other purposes. + It must be unique within the item. It is also used as the display + name if a separate display name is not provided. Valid characters + are lowercase English letters, decimal digits and underscores. The + maximum allowed length is sixteen characters. +interface (required) + This attribute is used to identify suitable emulated media devices + for mounting the software part. Applicable values depend on the + emulated system. + + +.. _contributing-softlist-metadata: + +Metadata +-------- + +Software lists support various kinds of metadata. All software list +items require the following metadata elements to be present: + +description + This is the primary display name for the software item. It should + be the original name of the software, transliterated into English + Latin script if necessary. It must be unique within the software + list. If extra text besides the title itself is required for + disambiguation, use lowercase outside of proper nouns, initialisms + and verbatim quotes. +year + The year of release or copyright year for the software. If unknown, + use an estimate with a question mark. Items can be filtered by year + in the software selection menu. +publisher + The publisher of the software. This may be the same as the + developer if the software was self-published. Items can be filtered + by published in the software selection menu. + +Most user-visible software item metadata is provided using ``info`` +elements. Each ``info`` element must have a ``name`` attribute and a +``value`` attribute. The ``name`` attribute identifies the type of +metadata, and the ``value`` attribute is the metadata value itself. +Note that ``name`` attributes do not need to be unique within an item. +Multiple ``info`` elements with the same ``name`` may be present if +appropriate. This is frequently seen for software sold using different +titles in different regions. + +MAME displays metadata from ``info`` elements in the software selection +menu. The following ``name`` attributes are recognised specifically, +and can show localised names: + +alt_title + Used for alternate titles. Examples are different tiles used in + different languages, scripts or regions, or different titles used + on the title screen and packaging. MAME searches alternate titles + as well as the description. +author + Author of the software. Items can be filtered by author in the + software selection menu. +barcode + Barcode number identifying the software package (typically an EAN). +developer + Developer responsible for implementing the software. Items can be + filtered by developer in the software selection menu. +distributor + Party responsible for distributing the software to retailers (or + customers in the case of direct sales). Items can be filtered by + distributor in the software selection menu. +install + Installation instructions. +isbn + ISBN for software included with a commercial book. +oem + Original equipment manufacturer, typically used with customised + versions of software distributed by a hardware vendor. +original_publisher + The original publisher, for items representing software re-released + by a different publisher. +partno + Distributor’s part number for the software. +pcb + Printed circuit board identifier, typically for cartridge media. +programmer + Programmer who wrote the code for the software. +release + Fine-grained release date for the software, if known. Use + YYYYMMDD format with no punctuation. If only the month is know, + use “xx” for the day digits. For example ``199103xx`` or + ``19940729``. +serial + Number identifying the software within a series of releases. +usage + Usage instructions. +version + Version number of the software. diff -Nru mame-0.250+dfsg.1/docs/source/index.rst mame-0.251+dfsg.1/docs/source/index.rst --- mame-0.250+dfsg.1/docs/source/index.rst 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/docs/source/index.rst 2022-12-29 14:20:09.000000000 +0000 @@ -28,6 +28,7 @@ debugger/index tools/index + contributing/index techspecs/index security diff -Nru mame-0.250+dfsg.1/docs/source/techspecs/index.rst mame-0.251+dfsg.1/docs/source/techspecs/index.rst --- mame-0.250+dfsg.1/docs/source/techspecs/index.rst 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/docs/source/techspecs/index.rst 2022-12-29 14:20:09.000000000 +0000 @@ -5,19 +5,19 @@ MAME’s source or working on scripts that run within the MAME framework. .. toctree:: - :titlesonly: + :titlesonly: - naming - layout_files - layout_script - object_finders - device_memory_interface - device_rom_interface - device_disasm_interface - memory - floppy - nscsi - luaengine - luareference - m6502 - poly_manager + naming + layout_files + layout_script + object_finders + device_memory_interface + device_rom_interface + device_disasm_interface + memory + floppy + nscsi + luaengine + luareference + m6502 + poly_manager diff -Nru mame-0.250+dfsg.1/docs/source/techspecs/luareference.rst mame-0.251+dfsg.1/docs/source/techspecs/luareference.rst --- mame-0.250+dfsg.1/docs/source/techspecs/luareference.rst 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/docs/source/techspecs/luareference.rst 2022-12-29 14:20:09.000000000 +0000 @@ -615,10 +615,6 @@ A string indicating the rotation applied to all screens in the system after the screen orientation specified in the machine configuration is applied. Will be one of ``"rot0"``, ``"rot90"``, ``"rot180"`` or ``"rot270"``. -driver.type (read-only) - A string providing a system type. Will be one of ``"arcade"``, - ``"console"``, ``"computer"`` or ``"other"``. This is for informational - purposes only, and may not be supported in the future. driver.not_working (read-only) A Boolean indicating whether the system is marked as not working. driver.supports_save (read-only) diff -Nru mame-0.250+dfsg.1/docs/source/techspecs/naming.rst mame-0.251+dfsg.1/docs/source/techspecs/naming.rst --- mame-0.250+dfsg.1/docs/source/techspecs/naming.rst 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/docs/source/techspecs/naming.rst 2022-12-29 14:20:09.000000000 +0000 @@ -1,3 +1,5 @@ +.. _naming: + MAME Naming Conventions ======================= @@ -13,25 +15,6 @@ naming conventions for various elements. -.. _naming-definitions: - -Definitions ------------ - -Snake case - All lowercase letters with words separated by underscores: - ``this_is_snake_case`` -Screaming snake case - All uppercase letters with words separated by underscores: - ``SCREAMING_SNAKE_CASE`` -Camel case: - Lowercase initial letter, first letter of each subsequent word - capitalised, with no separators between words: ``exampleCamelCase`` -Llama case: - Uppercase initial letter, first letter of each subsequent word - capitalised, with no separators between words: ``LlamaCaseSample`` - - .. _naming-transliteration: Transliteration @@ -108,39 +91,5 @@ C++ naming conventions ---------------------- -Preprocessor macros - Macro names should use screaming snake case. Macros are always - global and name conflicts can cause confusing errors – think - carefully about what macros really need to be in headers and name - them carefully. -Include guards - Include guard macros should begin with ``MAME_``, and end with a - capitalised version of the file name, withe separators replaced by - underscores. -Constants - Constants should use screaming snake case, whether they are constant - globals, constant data members, enumerators or preprocessor - constants. -Functions - Free functions names should use snake case. (There are some utility - function that were previously implemented as preprocessor macros - that still use screaming snake case.) -Classes - Class names should use snake case. Abstract class names should end - in ``_base``. Public member functions (including static member - functions) should use snake case. -Device classes - Concrete driver ``driver_device`` implementation names - conventionally end in ``_state``, while other concrete device class - names end in ``_device``. Concrete ``device_interface`` names - conventionally begin with ``device_`` and end with ``_interface``. -Device types - Device types should use screaming snake case. Remember that device - types are names in the global namespace, so choose explicit, - unambiguous names. -Enumerations - The enumeration name should use snake case. The enumerators should - use screaming snake case. -Template parameters - Template parameters should use llama case (both type and value - parameters). +For C++ naming conventions, see the relevant section in the C++ +Coding Guidelines: :ref:`contributing-cxx-naming` diff -Nru mame-0.250+dfsg.1/hash/32x.xml mame-0.251+dfsg.1/hash/32x.xml --- mame-0.250+dfsg.1/hash/32x.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/32x.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/a2600_cass.xml mame-0.251+dfsg.1/hash/a2600_cass.xml --- mame-0.250+dfsg.1/hash/a2600_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/a2600_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/a5200.xml mame-0.251+dfsg.1/hash/a5200.xml --- mame-0.250+dfsg.1/hash/a5200.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/a5200.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/a800_flop.xml mame-0.251+dfsg.1/hash/a800_flop.xml --- mame-0.250+dfsg.1/hash/a800_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/a800_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ 1983 OSS @@ -644,7 +644,7 @@ - Animated Puzzle (Prototype) + Animated Puzzle (prototype) 1984 Atari @@ -670,7 +670,7 @@ - Ant Eater (Earlier Version) + Ant Eater (earlier version) 1982 Romox @@ -683,7 +683,7 @@ - Arex (Pirate) + Arex (pirate) 1983 Adventure International - Astro Chase (Re-Badge) + Astro Chase (re-badged) 1983 Parker Brothers @@ -829,7 +829,7 @@ - Atari BASIC Programming Language (Rev. C) + Atari BASIC Programming Language (rev. C) 1986 Atari @@ -842,7 +842,7 @@ - Atari BASIC Programming Language (Rev. B) + Atari BASIC Programming Language (rev. B) 1983 Atari @@ -855,7 +855,7 @@ - Atari BASIC Programming Language (Rev. A) + Atari BASIC Programming Language (rev. A) 1979 Atari @@ -881,7 +881,7 @@ - Atari LOGO Computing Language (Fra) + Atari LOGO Computing Language (France) 1983 Atari @@ -933,7 +933,7 @@ - AtariWriter (Rev. C) + AtariWriter (rev. C) 1984 Atari @@ -946,7 +946,7 @@ - AtariWriter (Rev. B) + AtariWriter (rev. B) 1982 Atari @@ -959,7 +959,7 @@ - AtariWriter (Rev. A) + AtariWriter (rev. A) @@ -975,7 +975,7 @@ - AtariTexte (Fra) + AtariTexte (France) 1984 Atari @@ -988,7 +988,7 @@ - AtariTexte (Fra, Prototype) + AtariTexte (France, prototype) 1984 Atari @@ -1001,7 +1001,7 @@ - AtariSchreiber (Ger) + AtariSchreiber (Germany) 1982 Atari @@ -1132,7 +1132,7 @@ - Basic XL Programming Language v1.02 (Alt) + Basic XL Programming Language v1.02 (alt) 1983 OSS @@ -1185,7 +1185,7 @@ - BearJam (Fixed) + BearJam (fixed) 1983 Chalkboard @@ -1201,7 +1201,7 @@ - Berzerk (Prototype) + Berzerk (prototype) 1983 Atari @@ -1240,7 +1240,7 @@ - Blaster (Prototype) + Blaster (prototype) 1984 Williams @@ -1315,7 +1315,7 @@ - Bounty Bob Strikes Back! (Alt) + Bounty Bob Strikes Back! (alt) 1984 Big Five Software - Carnival Massacre (Earlier Version) + Carnival Massacre (earlier version) 1983 Thorn EMI @@ -1439,7 +1439,7 @@ - Cartridge dla Turbo 2000 v1.0 (Alt) + Cartridge dla Turbo 2000 v1.0 (alt) 1991 DOMAIN SOFT @@ -1566,7 +1566,7 @@ - Centipede (Prototype) + Centipede (prototype) 1981 Atari @@ -1578,7 +1578,7 @@ - Checkbook (Prototype) + Checkbook (prototype) 1980 Atari - Des Chiffres et des Lettres (Fra) + Des Chiffres et des Lettres (France) 1983 Atari France @@ -1635,7 +1635,7 @@ - Des Chiffres et des Lettres (Fra, Alt) + Des Chiffres et des Lettres (France, alt) 1983 Atari France @@ -1726,7 +1726,7 @@ - CPS Super SALT 400/800/XL Diagnostic (Rev. A) + CPS Super SALT 400/800/XL Diagnostic (rev. A) 1983 Atari @@ -1809,7 +1809,7 @@ - Cosmic Tunnels (Prototype) + Cosmic Tunnels (prototype) 1983 Datamost @@ -1834,7 +1834,7 @@ - Crystal Castles (Prototype) + Crystal Castles (prototype) 1984 Atari @@ -1846,7 +1846,7 @@ - Crystal Raiders (Reproduction) + Crystal Raiders (reproduction) 2001 Video 61 / Mastertronic @@ -1871,7 +1871,7 @@ - Danger Ranger (Pirate) + Danger Ranger (pirate) 1984 Microdeal @@ -1928,7 +1928,7 @@ - Defender Rev. 2 + Defender (rev. 2) 1982 Atari @@ -1985,7 +1985,7 @@ - Destiny: The Cruiser (Prototype) + Destiny: The Cruiser (prototype) 198? Adventure International - Diamond Graphic OS v1.0 (Earlier Release) + Diamond Graphic OS v1.0 (earlier release) 1988 Reeve Software @@ -2083,7 +2083,7 @@ - Dig Dug (Earlier Release) + Dig Dug (earlier release) 1982 Atari @@ -2137,7 +2137,7 @@ - Direct Access (Alt) + Direct Access (alt) 1984 Citibank @@ -2192,7 +2192,7 @@ - DynaKillers (Reproduction) + DynaKillers (reproduction) 1999 Video 61 / GMG @@ -2266,7 +2266,7 @@ - Educational System Master Cartridge (Re-Badged) + Educational System Master Cartridge (re-badged) 1983 Dorsett Educational Systems - Excelsor (Pirate) + Excelsor (pirate) 1986 Players @@ -2450,7 +2450,7 @@ - Final Legacy (Text Menu Version) + Final Legacy (text menu version) 1984 Atari @@ -2463,7 +2463,7 @@ - Final Legacy (Graphic Menu Version) + Final Legacy (graphic menu version) 1984 Atari @@ -2476,7 +2476,7 @@ - The Legacy (Prototype) + The Legacy (prototype) 1984 Atari @@ -2818,7 +2818,7 @@ - InstaDOS (Pirate) + InstaDOS (pirate) 2002 Sunmark @@ -2964,7 +2964,7 @@ - Jr. Pac-Man (Reproduction) + Jr. Pac-Man (reproduction) 1997 Video 61 / Atari @@ -3028,7 +3028,7 @@ - K-Razy Kritters (Re-Badged) + K-Razy Kritters (re-badged) 1982 CBS Software - K-Razy Shout Out (Re-Badged) + K-Razy Shout Out (re-badged) 1982 CBS Software @@ -3118,7 +3118,7 @@ - Kangaroo (Prototype) + Kangaroo (prototype) 1983 Atari @@ -3201,7 +3201,7 @@ - Laser Gates (Pirate) + Laser Gates (pirate) 1984 Imagic - Leo's 'Lectric Paintbrush (Fixed) + Leo's 'Lectric Paintbrush (fixed) 1983 Chalkboard @@ -3263,7 +3263,7 @@ - Letter Perfect (40 Column Version) + Letter Perfect (40 column version) 1981 LJK @@ -3276,7 +3276,7 @@ - Letter Perfect (40 Column Version, Alt) + Letter Perfect (40 column version, alt) 1981 LJK @@ -3289,7 +3289,7 @@ - Letter Perfect (80 Column Version) + Letter Perfect (80 column version) 1981 LJK @@ -3303,7 +3303,7 @@ - Letter Tutor (Prototype) + Letter Tutor (prototype) 1984 Atari @@ -3317,7 +3317,7 @@ - Lifespan (Prototype) + Lifespan (prototype) 1983 Roklan @@ -3370,7 +3370,7 @@ - LogicMaster (Fixed) + LogicMaster (fixed) 1983 Chalkboard @@ -3454,7 +3454,7 @@ - Mega Cartridge 01 (Spa, Pirate) + Mega Cartridge 01 (Spain, pirate) 2004 Willysoft - Mega Cartridge 02 (Spa, Pirate) + Mega Cartridge 02 (Spain, pirate) 2004 Willysoft - Mega Cartridge 03 (Spa, Pirate) + Mega Cartridge 03 (Spain, pirate) 2004 Willysoft - Mega Cartridge 04 (Spa, Pirate) + Mega Cartridge 04 (Spain, pirate) 2004 Willysoft - Mega Cartridge 05 (Spa, Pirate) + Mega Cartridge 05 (Spain, pirate) 2004 Willysoft - Mega Cartridge 06 (Spa, Pirate) + Mega Cartridge 06 (Spain, pirate) 2004 Willysoft - Mega Cartridge 07 (Spa, Pirate) + Mega Cartridge 07 (Spain, pirate) 2004 Willysoft - Mega Cartridge 08 (Spa, Pirate) + Mega Cartridge 08 (Spain, pirate) 2004 Willysoft - Mega Cartridge 09 (Spa, Pirate) + Mega Cartridge 09 (Spain, pirate) 2004 Willysoft - Mega Cartridge 10 (Spa, Pirate) + Mega Cartridge 10 (Spain, pirate) 2004 Willysoft - Mega Cartridge 11 (Spa, Pirate) + Mega Cartridge 11 (Spain, pirate) 2004 Willysoft - Mega Cartridge 12 (Spa, Pirate) + Mega Cartridge 12 (Spain, pirate) 2004 Willysoft - Mega Cartridge 13 (Spa, Pirate) + Mega Cartridge 13 (Spain, pirate) 2004 Willysoft - Mega Cartridge 14 (Spa, Pirate) + Mega Cartridge 14 (Spain, pirate) 2004 Willysoft - Mega Cartridge 15 (Pirate) + Mega Cartridge 15 (pirate) 2004 Willysoft - Meteor (Pirate) + Meteor (pirate) 198? Germ-Soft - McDonald's Pac-Mac (Beta 2) + McDonald's Pac-Mac (beta 2) 1983 Parker Brothers @@ -3813,7 +3813,7 @@ - McDonald's Pac-Mac (Beta 1) + McDonald's Pac-Mac (beta 1) 1983 Parker Brothers @@ -3881,7 +3881,7 @@ - Microcalc XE v2.2 (Mex) + Microcalc XE v2.2 (Mexico) 19?? Grupo SITSA @@ -3947,7 +3947,7 @@ - MicroMaestro (Fixed) + MicroMaestro (fixed) 1983 Chalkboard @@ -3977,7 +3977,7 @@ - Millipede (Prototype) + Millipede (prototype) 1983 Atari @@ -4001,7 +4001,7 @@ - Miner 2049er (Earlier Release) + Miner 2049er (earlier release) 1982 Big Five Software @@ -4028,7 +4028,7 @@ - Missile Command+ (Hack) + Missile Command+ (hack) 2006 Atari @@ -4069,7 +4069,7 @@ - Montezuma's Revenge (Prototype) + Montezuma's Revenge (prototype) 1984 Parker Brothers @@ -4081,7 +4081,7 @@ - Moogles (Pirate) + Moogles (pirate) 1983 Sirius @@ -4133,7 +4133,7 @@ - Mr. Do!'s Castle (Prototype) + Mr. Do!'s Castle (prototype) 1984 Parker Brothers @@ -4185,7 +4185,7 @@ - Ms. Pac-Man (Green Cherry Version) + Ms. Pac-Man (Green Cherry version) 1983 @@ -4200,7 +4200,7 @@ - Multi Fischa (Mex) + Multi Fischa (Mexico) 1985 Grupo SITSA @@ -4225,7 +4225,7 @@ - MyDOS v3.116 (Pirate) + MyDOS v3.116 (pirate) 1985 Wordmark @@ -4275,7 +4275,7 @@ - Orc Attack (Alt) + Orc Attack (alt) 1983 Thorn EMI @@ -4314,7 +4314,7 @@ - Paddle Jitter Test (Rev. C) + Paddle Jitter Test (rev. C) 1982 Atari @@ -4339,7 +4339,7 @@ - Explorer (Prototype) + Explorer (prototype) 1984 Activision @@ -4499,7 +4499,7 @@ - Rack 'em Up! (Re-Badged) + Rack 'em Up! (re-badged) 1983 Roklan @@ -4524,7 +4524,7 @@ - Popeye (Euro) + Popeye (Europe) 1983 Parker Brothers @@ -4589,7 +4589,7 @@ - Preppie (Reproduction) + Preppie (reproduction) 2001 Video 61 / Adventure International @@ -4605,7 +4605,7 @@ - Prevue (Rev. 06) + Prevue (rev. 06) 1991 Prevue Networks @@ -4641,7 +4641,7 @@ - Prisma 1 (Spa, Pirate) + Prisma 1 (Spain, pirate) 199? Prismasoft - Prisma 2 (Spa, Pirate) + Prisma 2 (Spain, pirate) 199? Prismasoft - Prisma 3 (Spa, Pirate) + Prisma 3 (Spain, pirate) 1992 Prismasoft @@ -4687,7 +4687,7 @@ - Prisma 4 (Spa, Pirate) + Prisma 4 (Spain, pirate) 1992 Prismasoft @@ -4699,7 +4699,7 @@ - Prisma 5 (Spa, Pirate) + Prisma 5 (Spain, pirate) 1992 Prismasoft @@ -4711,7 +4711,7 @@ - Prisma 6 (Spa, Pirate) + Prisma 6 (Spain, pirate) 1992 Prismasoft @@ -4723,7 +4723,7 @@ - Prisma Super 15-2 (Spa, Pirate) + Prisma Super 15-2 (Spain, pirate) 1992 Prismasoft @@ -4850,7 +4850,7 @@ - Risk (Prototype) + Risk (prototype) 1983 Parker Brothers @@ -4901,7 +4901,7 @@ - Satan's Hollow (Unreleased) + Satan's Hollow (unreleased) 1982 CBS Software @@ -5057,7 +5057,7 @@ - SmartDOS v6.1D (Pirate) + SmartDOS v6.1D (pirate) 1984 Rana Systems @@ -5464,7 +5464,7 @@ - Star Trux (Prototype) + Star Trux (prototype) 1982 Atari @@ -5503,7 +5503,7 @@ - Stargate (Prototype) + Stargate (prototype) 1984 Atari @@ -5613,7 +5613,7 @@ - Super Pac-Man (Prototype) + Super Pac-Man (prototype) 1984 Atari @@ -5679,7 +5679,7 @@ - Superman III (Prototype) + Superman III (prototype) 1983 Atari - The Last Starfighter (Prototype) + The Last Starfighter (prototype) 1984 Atari @@ -5884,7 +5884,7 @@ - The Monkey Wrench II (Alt) + The Monkey Wrench II (alt) 1983 Eastern House @@ -5972,7 +5972,7 @@ - Turbo Cartridge C1 (Spa, Pirate) + Turbo Cartridge C1 (Spain, pirate) 19?? Turbosoft @@ -5984,7 +5984,7 @@ - Turbo Cartridge C2 (Spa, Pirate) + Turbo Cartridge C2 (Spain, pirate) 19?? Turbosoft @@ -5996,7 +5996,7 @@ - Turbo Cartridge C3 (Spa, Pirate) + Turbo Cartridge C3 (Spain, pirate) 19?? Turbosoft @@ -6008,7 +6008,7 @@ - Turbo Cartridge C4 (Spa, Pirate) + Turbo Cartridge C4 (Spain, pirate) 19?? Turbosoft @@ -6020,7 +6020,7 @@ - Turbo Cartridge C5 (Spa, Pirate) + Turbo Cartridge C5 (Spain, pirate) 19?? Turbosoft @@ -6032,7 +6032,7 @@ - Turbo Cartridge C6 (Spa, Pirate) + Turbo Cartridge C6 (Spain, pirate) 19?? Turbosoft @@ -6044,7 +6044,7 @@ - Turbo Cartridge D1 (Spa, Pirate) + Turbo Cartridge D1 (Spain, pirate) 19?? Turbosoft @@ -6056,7 +6056,7 @@ - Turbo Cartridge D2 (Spa, Pirate) + Turbo Cartridge D2 (Spain, pirate) 19?? Turbosoft @@ -6068,7 +6068,7 @@ - Turbo Cartridge D3 (Spa, Pirate) + Turbo Cartridge D3 (Spain, pirate) 19?? Turbosoft @@ -6080,7 +6080,7 @@ - Turbo Cartridge D4 (Spa, Pirate) + Turbo Cartridge D4 (Spain, pirate) 19?? Turbosoft @@ -6093,7 +6093,7 @@ - Turbo Cartridge D5 (Spa, Pirate) + Turbo Cartridge D5 (Spain, pirate) 19?? Turbosoft @@ -6105,7 +6105,7 @@ - Turbo Cartridge D6 (Spa, Pirate) + Turbo Cartridge D6 (Spain, pirate) 19?? Turbosoft @@ -6117,7 +6117,7 @@ - Turbo Cartridge D7 (Spa, Pirate) + Turbo Cartridge D7 (Spain, pirate) 19?? Turbosoft @@ -6129,7 +6129,7 @@ - Turbo Cartridge D8 (Spa, Pirate) + Turbo Cartridge D8 (Spain, pirate) 19?? Turbosoft @@ -6141,7 +6141,7 @@ - Turbo Cartridge E1 (Spa, Pirate) + Turbo Cartridge E1 (Spain, pirate) 19?? Turbosoft @@ -6153,7 +6153,7 @@ - Turbo Cartridge E2 (Spa, Pirate) + Turbo Cartridge E2 (Spain, pirate) 19?? Turbosoft @@ -6165,7 +6165,7 @@ - Turbo Cartridge X1 (Spa, Pirate) + Turbo Cartridge X1 (Spain, pirate) 19?? Turbosoft @@ -6177,7 +6177,7 @@ - Turbo Cartridge X2 (Spa, Pirate) + Turbo Cartridge X2 (Spain, pirate) 19?? Turbosoft @@ -6302,7 +6302,7 @@ - Up Up and Away (Prototype) + Up Up and Away (prototype) 1983 Ringblack Software @@ -6365,7 +6365,7 @@ - Weltraumkolonie (Ger) + Weltraumkolonie (Germany) 1984 Spinnaker / Ravensburger diff -Nru mame-0.250+dfsg.1/hash/abc1600_flop.xml mame-0.251+dfsg.1/hash/abc1600_flop.xml --- mame-0.250+dfsg.1/hash/abc1600_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/abc1600_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/abc800_hdd.xml mame-0.251+dfsg.1/hash/abc800_hdd.xml --- mame-0.250+dfsg.1/hash/abc800_hdd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/abc800_hdd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/abc800.xml mame-0.251+dfsg.1/hash/abc800.xml --- mame-0.250+dfsg.1/hash/abc800.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/abc800.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/abc806.xml mame-0.251+dfsg.1/hash/abc806.xml --- mame-0.250+dfsg.1/hash/abc806.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/abc806.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/abc80_cass.xml mame-0.251+dfsg.1/hash/abc80_cass.xml --- mame-0.250+dfsg.1/hash/abc80_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/abc80_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/abc80_flop.xml mame-0.251+dfsg.1/hash/abc80_flop.xml --- mame-0.250+dfsg.1/hash/abc80_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/abc80_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/acrnsys_flop.xml mame-0.251+dfsg.1/hash/acrnsys_flop.xml --- mame-0.250+dfsg.1/hash/acrnsys_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/acrnsys_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/acrnsys_rom.xml mame-0.251+dfsg.1/hash/acrnsys_rom.xml --- mame-0.250+dfsg.1/hash/acrnsys_rom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/acrnsys_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/adam_cart.xml mame-0.251+dfsg.1/hash/adam_cart.xml --- mame-0.250+dfsg.1/hash/adam_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/adam_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/adam_cass.xml mame-0.251+dfsg.1/hash/adam_cass.xml --- mame-0.250+dfsg.1/hash/adam_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/adam_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/adam_flop.xml mame-0.251+dfsg.1/hash/adam_flop.xml --- mame-0.250+dfsg.1/hash/adam_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/adam_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/advantage.xml mame-0.251+dfsg.1/hash/advantage.xml --- mame-0.250+dfsg.1/hash/advantage.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/advantage.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/advision.xml mame-0.251+dfsg.1/hash/advision.xml --- mame-0.250+dfsg.1/hash/advision.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/advision.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/aim65_cart.xml mame-0.251+dfsg.1/hash/aim65_cart.xml --- mame-0.250+dfsg.1/hash/aim65_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/aim65_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/aleste.xml mame-0.251+dfsg.1/hash/aleste.xml --- mame-0.250+dfsg.1/hash/aleste.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/aleste.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/alice32.xml mame-0.251+dfsg.1/hash/alice32.xml --- mame-0.250+dfsg.1/hash/alice32.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/alice32.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/alphasmart_kapps.xml mame-0.251+dfsg.1/hash/alphasmart_kapps.xml --- mame-0.250+dfsg.1/hash/alphasmart_kapps.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/alphasmart_kapps.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,5 +1,8 @@ + diff -Nru mame-0.250+dfsg.1/hash/alphatro_cart.xml mame-0.251+dfsg.1/hash/alphatro_cart.xml --- mame-0.250+dfsg.1/hash/alphatro_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/alphatro_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/alphatro_flop.xml mame-0.251+dfsg.1/hash/alphatro_flop.xml --- mame-0.250+dfsg.1/hash/alphatro_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/alphatro_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/altos5.xml mame-0.251+dfsg.1/hash/altos5.xml --- mame-0.250+dfsg.1/hash/altos5.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/altos5.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/altos8600.xml mame-0.251+dfsg.1/hash/altos8600.xml --- mame-0.250+dfsg.1/hash/altos8600.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/altos8600.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/amiga_a1000.xml mame-0.251+dfsg.1/hash/amiga_a1000.xml --- mame-0.250+dfsg.1/hash/amiga_a1000.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/amiga_a1000.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/amiga_a3000.xml mame-0.251+dfsg.1/hash/amiga_a3000.xml --- mame-0.250+dfsg.1/hash/amiga_a3000.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/amiga_a3000.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/amiga_demos.xml mame-0.251+dfsg.1/hash/amiga_demos.xml --- mame-0.250+dfsg.1/hash/amiga_demos.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/amiga_demos.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/amiga_hdd.xml mame-0.251+dfsg.1/hash/amiga_hdd.xml --- mame-0.250+dfsg.1/hash/amiga_hdd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/amiga_hdd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ampro.xml mame-0.251+dfsg.1/hash/ampro.xml --- mame-0.250+dfsg.1/hash/ampro.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ampro.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/apc.xml mame-0.251+dfsg.1/hash/apc.xml --- mame-0.250+dfsg.1/hash/apc.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/apc.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/apexc_cyl.xml mame-0.251+dfsg.1/hash/apexc_cyl.xml --- mame-0.250+dfsg.1/hash/apexc_cyl.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/apexc_cyl.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/apfm1000.xml mame-0.251+dfsg.1/hash/apfm1000.xml --- mame-0.250+dfsg.1/hash/apfm1000.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/apfm1000.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/apogee.xml mame-0.251+dfsg.1/hash/apogee.xml --- mame-0.250+dfsg.1/hash/apogee.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/apogee.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/apollo_ctape.xml mame-0.251+dfsg.1/hash/apollo_ctape.xml --- mame-0.250+dfsg.1/hash/apollo_ctape.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/apollo_ctape.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -41,7 +41,7 @@ Apple I Basic (Alt) 1976 - apple computer inc + Apple Computer Inc. @@ -53,7 +53,7 @@ Abandoned Farmhouse Adventure 2012 - jeff trantor + Jeff Trantor @@ -65,7 +65,7 @@ Applesoft Lite 2008 - vince briel + Vince Briel @@ -77,7 +77,7 @@ Apple 30th 2006 - dave schmenk + Dave Schmenk @@ -113,7 +113,7 @@ Dis-Assembler 1976 - apple computer inc + Apple Computer Inc. @@ -126,7 +126,7 @@ Extended Monitor 1977 - apple computer inc + Apple Computer Inc. @@ -139,7 +139,7 @@ Life 1976 - apple computer inc + Apple Computer Inc. @@ -151,7 +151,7 @@ Lunar Lander 1976 - apple computer inc + Apple Computer Inc. @@ -164,7 +164,7 @@ Mastermind 1976 - apple computer inc + Apple Computer Inc. @@ -177,7 +177,7 @@ Microchess 19?? - <unknown> + Peter Jennings @@ -201,7 +201,7 @@ TypingTutor 2011 - jeremy rand + Jeremy Rand @@ -228,7 +228,7 @@ Apple I Enhanced Checkers 2011 - corey cohen + Corey Cohen @@ -240,7 +240,7 @@ Blackjack 1976 - apple computer inc + Apple Computer Inc. @@ -385,7 +385,7 @@ HiLo 1976 - wendell sander + Wendell Sander @@ -397,7 +397,7 @@ Lunar Lander (ASCII Graphics) 2012 - corey cohen + Corey Cohen @@ -444,7 +444,7 @@ Apple Startrek 1976 - apple computer inc + Apple Computer Inc. @@ -458,7 +458,7 @@ Star Trek 2003 2003 - vince briel + Vince Briel @@ -482,7 +482,7 @@ TREK II 1977 - apple computer inc + Apple Computer Inc. @@ -495,7 +495,7 @@ WordCross 1976 - wendell sander + Wendell Sander diff -Nru mame-0.250+dfsg.1/hash/apple2_cass.xml mame-0.251+dfsg.1/hash/apple2_cass.xml --- mame-0.250+dfsg.1/hash/apple2_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/apple2_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/apple2_flop_clcracked.xml mame-0.251+dfsg.1/hash/apple2_flop_clcracked.xml --- mame-0.250+dfsg.1/hash/apple2_flop_clcracked.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/apple2_flop_clcracked.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/apple2_flop_misc.xml mame-0.251+dfsg.1/hash/apple2_flop_misc.xml --- mame-0.250+dfsg.1/hash/apple2_flop_misc.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/apple2_flop_misc.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -723,6 +723,18 @@ + + Aleph Baiters + 1983 + Gesher Educational Affiliates + + + + + + + + Alter Ego 1985 @@ -2677,6 +2689,18 @@ + + Borders + 1983 + Gesher Educational Affiliates + + + + + + + + Both Barrels 19?? @@ -4931,6 +4955,43 @@ + + The Georgia Variations + 1984 + Gesher Educational Affiliates + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + G.I. Joe 1985 @@ -5413,6 +5474,18 @@ + + + Nosh Kosh + 1983 + Gesher Educational Affiliates + + + + + + + Olympic Decathalon diff -Nru mame-0.250+dfsg.1/hash/apple2_flop_orig.xml mame-0.251+dfsg.1/hash/apple2_flop_orig.xml --- mame-0.250+dfsg.1/hash/apple2_flop_orig.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/apple2_flop_orig.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -4195,7 +4195,7 @@ The Print Shop Color 1986 - Brøderbund software + Brøderbund Software diff -Nru mame-0.250+dfsg.1/hash/apple2gs_flop_clcracked.xml mame-0.251+dfsg.1/hash/apple2gs_flop_clcracked.xml --- mame-0.250+dfsg.1/hash/apple2gs_flop_clcracked.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/apple2gs_flop_clcracked.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -13,7 +13,7 @@ - + @@ -485,7 +485,7 @@ - + diff -Nru mame-0.250+dfsg.1/hash/apple2gs_flop_misc.xml mame-0.251+dfsg.1/hash/apple2gs_flop_misc.xml --- mame-0.250+dfsg.1/hash/apple2gs_flop_misc.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/apple2gs_flop_misc.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/apple2gs_flop_orig.xml mame-0.251+dfsg.1/hash/apple2gs_flop_orig.xml --- mame-0.250+dfsg.1/hash/apple2gs_flop_orig.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/apple2gs_flop_orig.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/apple3.xml mame-0.251+dfsg.1/hash/apple3.xml --- mame-0.250+dfsg.1/hash/apple3.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/apple3.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/applix_flop.xml mame-0.251+dfsg.1/hash/applix_flop.xml --- mame-0.250+dfsg.1/hash/applix_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/applix_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/apricot_flop.xml mame-0.251+dfsg.1/hash/apricot_flop.xml --- mame-0.250+dfsg.1/hash/apricot_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/apricot_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/apxen_flop.xml mame-0.251+dfsg.1/hash/apxen_flop.xml --- mame-0.250+dfsg.1/hash/apxen_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/apxen_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/aquarius_cart.xml mame-0.251+dfsg.1/hash/aquarius_cart.xml --- mame-0.250+dfsg.1/hash/aquarius_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/aquarius_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -293,6 +293,18 @@ + + + Doomsday Defender + 2022 + Cronosoft + + + + + + + Ed-On diff -Nru mame-0.250+dfsg.1/hash/arb.xml mame-0.251+dfsg.1/hash/arb.xml --- mame-0.250+dfsg.1/hash/arb.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/arb.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/arcadia.xml mame-0.251+dfsg.1/hash/arcadia.xml --- mame-0.250+dfsg.1/hash/arcadia.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/arcadia.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/archimedes_hdd.xml mame-0.251+dfsg.1/hash/archimedes_hdd.xml --- mame-0.250+dfsg.1/hash/archimedes_hdd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/archimedes_hdd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/archimedes_rom.xml mame-0.251+dfsg.1/hash/archimedes_rom.xml --- mame-0.250+dfsg.1/hash/archimedes_rom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/archimedes_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/archimedes.xml mame-0.251+dfsg.1/hash/archimedes.xml --- mame-0.250+dfsg.1/hash/archimedes.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/archimedes.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/astrocde.xml mame-0.251+dfsg.1/hash/astrocde.xml --- mame-0.250+dfsg.1/hash/astrocde.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/astrocde.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/atom_cass.xml mame-0.251+dfsg.1/hash/atom_cass.xml --- mame-0.250+dfsg.1/hash/atom_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/atom_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/atom_flop.xml mame-0.251+dfsg.1/hash/atom_flop.xml --- mame-0.250+dfsg.1/hash/atom_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/atom_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/aussiebyte.xml mame-0.251+dfsg.1/hash/aussiebyte.xml --- mame-0.250+dfsg.1/hash/aussiebyte.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/aussiebyte.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/b2m.xml mame-0.251+dfsg.1/hash/b2m.xml --- mame-0.250+dfsg.1/hash/b2m.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/b2m.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/basf7100.xml mame-0.251+dfsg.1/hash/basf7100.xml --- mame-0.250+dfsg.1/hash/basf7100.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/basf7100.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/bbcbc.xml mame-0.251+dfsg.1/hash/bbcbc.xml --- mame-0.250+dfsg.1/hash/bbcbc.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/bbcbc.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/bbcb_flop_orig.xml mame-0.251+dfsg.1/hash/bbcb_flop_orig.xml --- mame-0.250+dfsg.1/hash/bbcb_flop_orig.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/bbcb_flop_orig.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/bbc_flop_6502.xml mame-0.251+dfsg.1/hash/bbc_flop_6502.xml --- mame-0.250+dfsg.1/hash/bbc_flop_6502.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/bbc_flop_6502.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/bbc_flop_arm.xml mame-0.251+dfsg.1/hash/bbc_flop_arm.xml --- mame-0.250+dfsg.1/hash/bbc_flop_arm.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/bbc_flop_arm.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/bbc_flop_torch.xml mame-0.251+dfsg.1/hash/bbc_flop_torch.xml --- mame-0.250+dfsg.1/hash/bbc_flop_torch.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/bbc_flop_torch.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/bbc_flop_z80.xml mame-0.251+dfsg.1/hash/bbc_flop_z80.xml --- mame-0.250+dfsg.1/hash/bbc_flop_z80.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/bbc_flop_z80.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/bbcm_cart.xml mame-0.251+dfsg.1/hash/bbcm_cart.xml --- mame-0.250+dfsg.1/hash/bbcm_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/bbcm_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -1229,6 +1229,7 @@ AMT-1 Terminal 1.04 1983 ICS Electronics + @@ -1240,6 +1241,7 @@ AMTOR MkII 3.05 1986 P.J.Harris + @@ -1311,7 +1313,7 @@ AMX MAX Desktop 1986 Advanced Memory Systems - + @@ -3824,6 +3826,7 @@ Diagram II 1987 Pineapple Software + @@ -4741,7 +4744,7 @@ MEWsoft - + @@ -4802,6 +4805,18 @@ + + FBBS 3.0 + 1986 + <unknown> + + + + + + + + File-Plus 1984 @@ -5231,6 +5246,7 @@ GoMMC Tools 0.72 2005 John Kortink + @@ -5242,6 +5258,7 @@ GoMMC Tools 0.80 2005 John Kortink + @@ -5253,6 +5270,7 @@ GoMMC Tools 1.03 2007 John Kortink + @@ -6778,6 +6796,19 @@ + + Palesar RAM Manager 1.04 + 1986 + Palesar + + + + + + + + + Memex Chameleon 256K 2.00 1986 @@ -6890,6 +6921,22 @@ + + Meta Assembler 3.45A + 1986 + Crash Barrier + + + + + + + + + + + + Micro-C 1.0 1987 @@ -7065,6 +7112,32 @@ + + MMFS 1.52 + 2022 + Dave Banks + + + + + + + + + + + MMFS Turbo 1.52 + 2022 + Dave Banks + + + + + + + + + Instant Mini Office II 1986 @@ -8755,6 +8828,50 @@ + + Kevin's Rip-off ROM 1.00 + 1985 + <unknown> + + + + + + + + + Ripper V1 + 1985 + DickSoft + + + + + + + + + Ripper V1 (Disk Menu) + 1985 + DickSoft + + + + + + + + + Ripper V1 (13 Commands) + 1985 + DickSoft + + + + + + + ROMAS 3.00 1985 @@ -8953,6 +9070,17 @@ + + Sci 1.34 + 1988 + Chessfield Software + + + + + + + Sciways 2.01 1985 @@ -9363,6 +9491,17 @@ + + Speech Synthesis 0.01 + 1984 + Acorn + + + + + + + Speech 1985 @@ -9510,6 +9649,17 @@ + + SSMP 2.00 + 1987 + University of Cambridge + + + + + + + StarBASE 2.00 (Keyteam) 1984 @@ -10727,9 +10877,9 @@ - TNC2-3 Driver + AMRAC TNC2-3 Driver 1987 - Amrac + Siskin Software @@ -10983,6 +11133,7 @@ Turbo MMC 0.A1 2009 IFEL + @@ -10994,6 +11145,7 @@ Turbo MMC 0.A3 2009 IFEL + @@ -11768,11 +11920,21 @@ + + ViewFiler 0.2 + 1984 + Acornsoft + + + + + + + ViewStore 0.5 1985 Acornsoft - @@ -11839,6 +12001,18 @@ + + View Trilogy + 1985 + Acornsoft + + + + + + + + VideoNuLA 1.02 2017 @@ -11893,6 +12067,17 @@ + + + VT Clock 1.16 + 1984 + BBC + + + + + + The Wapping Editor 1.30 diff -Nru mame-0.250+dfsg.1/hash/bdesignm_design_cart.xml mame-0.251+dfsg.1/hash/bdesignm_design_cart.xml --- mame-0.250+dfsg.1/hash/bdesignm_design_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/bdesignm_design_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/bkrankp_cart.xml mame-0.251+dfsg.1/hash/bkrankp_cart.xml --- mame-0.250+dfsg.1/hash/bkrankp_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/bkrankp_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/buzztime_cart.xml mame-0.251+dfsg.1/hash/buzztime_cart.xml --- mame-0.250+dfsg.1/hash/buzztime_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/buzztime_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/bw12.xml mame-0.251+dfsg.1/hash/bw12.xml --- mame-0.250+dfsg.1/hash/bw12.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/bw12.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/bw14.xml mame-0.251+dfsg.1/hash/bw14.xml --- mame-0.250+dfsg.1/hash/bw14.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/bw14.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/bw2.xml mame-0.251+dfsg.1/hash/bw2.xml --- mame-0.250+dfsg.1/hash/bw2.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/bw2.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/bx256hp_flop.xml mame-0.251+dfsg.1/hash/bx256hp_flop.xml --- mame-0.250+dfsg.1/hash/bx256hp_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/bx256hp_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/c128_cart.xml mame-0.251+dfsg.1/hash/c128_cart.xml --- mame-0.250+dfsg.1/hash/c128_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/c128_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/c128_rom.xml mame-0.251+dfsg.1/hash/c128_rom.xml --- mame-0.250+dfsg.1/hash/c128_rom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/c128_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/c2color_cart.xml mame-0.251+dfsg.1/hash/c2color_cart.xml --- mame-0.250+dfsg.1/hash/c2color_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/c2color_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/c64_cart.xml mame-0.251+dfsg.1/hash/c64_cart.xml --- mame-0.250+dfsg.1/hash/c64_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/c64_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/c64_cass.xml mame-0.251+dfsg.1/hash/c64_cass.xml --- mame-0.250+dfsg.1/hash/c64_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/c64_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/c64_flop_orig.xml mame-0.251+dfsg.1/hash/c64_flop_orig.xml --- mame-0.250+dfsg.1/hash/c64_flop_orig.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/c64_flop_orig.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/c65_flop.xml mame-0.251+dfsg.1/hash/c65_flop.xml --- mame-0.250+dfsg.1/hash/c65_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/c65_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/camplynx_cass.xml mame-0.251+dfsg.1/hash/camplynx_cass.xml --- mame-0.250+dfsg.1/hash/camplynx_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/camplynx_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/camplynx_flop.xml mame-0.251+dfsg.1/hash/camplynx_flop.xml --- mame-0.250+dfsg.1/hash/camplynx_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/camplynx_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/cbm2_cart.xml mame-0.251+dfsg.1/hash/cbm2_cart.xml --- mame-0.250+dfsg.1/hash/cbm2_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/cbm2_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/cbm2_flop.xml mame-0.251+dfsg.1/hash/cbm2_flop.xml --- mame-0.250+dfsg.1/hash/cbm2_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/cbm2_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/cbm8096_flop.xml mame-0.251+dfsg.1/hash/cbm8096_flop.xml --- mame-0.250+dfsg.1/hash/cbm8096_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/cbm8096_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/cbm8296_flop.xml mame-0.251+dfsg.1/hash/cbm8296_flop.xml --- mame-0.250+dfsg.1/hash/cbm8296_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/cbm8296_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/cc40_cart.xml mame-0.251+dfsg.1/hash/cc40_cart.xml --- mame-0.250+dfsg.1/hash/cc40_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/cc40_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/cdi.xml mame-0.251+dfsg.1/hash/cdi.xml --- mame-0.250+dfsg.1/hash/cdi.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/cdi.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -41,7 +41,7 @@ --> - The 7th Guest (Euro) + The 7th Guest (Europe) 1994 Philips @@ -74,7 +74,7 @@ --> - The 7th Guest (Euro, alt) + The 7th Guest (Europe, alt) 1994 Philips @@ -163,7 +163,7 @@ --> - A Great Day at the Races (Euro) + A Great Day at the Races (Europe) 1993 Philips @@ -196,7 +196,7 @@ --> - L'Affaire Morlov (Euro)[CD-i-PC] + L'Affaire Morlov (Europe)[CD-i-PC] 1996 Titus @@ -260,7 +260,7 @@ --> - Arcade Classics (Euro) + Arcade Classics (Europe) 1996 Namco ~ Philips @@ -292,7 +292,7 @@ --> - Astérix - Caesar's Challenge v3.9 (Euro) + Astérix - Caesar's Challenge v3.9 (Europe) 1995 Pathe ~ Philips @@ -388,7 +388,7 @@ --> - Atlantis - The Last Resort v1.11 (Euro) + Atlantis - The Last Resort v1.11 (Europe) 1996 Philips @@ -421,7 +421,7 @@ --> - Backgammon (Euro, USA) + Backgammon (Europe, USA) 1992 Philips @@ -437,7 +437,7 @@ --> - Battleship (Euro, USA) + Battleship (Europe, USA) 1991 Philips @@ -453,7 +453,7 @@ --> - Brain Dead 13 v1.07 (Euro) + Brain Dead 13 v1.07 (Europe) 1997 Philips @@ -470,7 +470,7 @@ --> - BURN-CYCLE (Euro) + BURN-CYCLE (Europe) 1994 Philips @@ -550,7 +550,7 @@ --> - Caesars World of Boxing (Euro) + Caesars World of Boxing (Europe) 1993 Philips @@ -601,7 +601,7 @@ --> - Caesars World of Gambling (Euro, USA) + Caesars World of Gambling (Europe, USA) 1992 Philips @@ -617,7 +617,7 @@ --> - CD Shoot (Euro) + CD Shoot (Europe) 1992 Philips @@ -666,7 +666,7 @@ --> - Chaos Control v1.15 (Euro) + Chaos Control v1.15 (Europe) 1995 Philips @@ -734,7 +734,7 @@ --> - Christmas Country (Euro) + Christmas Country (Europe) 1996 Creative Media @@ -751,7 +751,7 @@ --> - Christmas Crisis (Euro) + Christmas Crisis (Europe) 1995 DIMA ~ Philips @@ -768,7 +768,7 @@ --> - Cluedo (Euro) + Cluedo (Europe) 1994 Philips @@ -802,7 +802,7 @@ --> - Cluedo - The Mysteries Continue (Euro) + Cluedo - The Mysteries Continue (Europe) 1995 Philips @@ -819,7 +819,7 @@ --> - Connect Four v1 (Euro, USA) + Connect Four v1 (Europe, USA) 1991 Philips @@ -837,7 +837,7 @@ --> - Creature Shock (Euro) + Creature Shock (Europe) 1996 Philips ~ Virgin @@ -859,7 +859,7 @@ --> - Dark Castle (Euro, USA) + Dark Castle (Europe, USA) 1992 Philips @@ -875,7 +875,7 @@ --> - Defender of the Crown (Euro, USA) + Defender of the Crown (Europe, USA) 1992 Philips @@ -891,7 +891,7 @@ --> - Do you Remember the '60's (Euro) + Do you Remember the '60's (Europe) 1996 Philips @@ -923,7 +923,7 @@ --> - Dragon's Lair (Euro) + Dragon's Lair (Europe) 1994 Philips @@ -957,7 +957,7 @@ --> - Dragon's Lair II - Time Warp (Euro) + Dragon's Lair II - Time Warp (Europe) 1994 Philips @@ -1009,7 +1009,7 @@ --> - Drug Wars (Euro) + Drug Wars (Europe) 1996 Philips @@ -1026,7 +1026,7 @@ --> - Earth Command - The Future of Our World is in Your Hands v1.05 (Euro) + Earth Command - The Future of Our World is in Your Hands v1.05 (Europe) 1994 Philips @@ -1122,7 +1122,7 @@ --> - Escape from CyberCity (Euro, USA) + Escape from CyberCity (Europe, USA) 1992 Philips @@ -1138,7 +1138,7 @@ --> - Family Games I (Euro) + Family Games I (Europe) 1995 Philips @@ -1154,7 +1154,7 @@ --> - Family Games II - Junk Food Jive (Euro) + Family Games II - Junk Food Jive (Europe) 1995 Philips @@ -1170,7 +1170,7 @@ --> - Flashback (Euro) + Flashback (Europe) 1995 Philips @@ -1202,7 +1202,7 @@ --> - Golden Oldies I (Euro) + Golden Oldies I (Europe) 1997 SPC Vision @@ -1218,7 +1218,7 @@ --> - Golden Oldies II (Euro) + Golden Oldies II (Europe) 1997 SPC Vision @@ -1267,7 +1267,7 @@ --> - Hotel Mario (Euro) + Hotel Mario (Europe) 1994 Philips @@ -1299,7 +1299,7 @@ --> - Inca (Euro) + Inca (Europe) 1993 Coktel Vision ~ Philips @@ -1316,7 +1316,7 @@ --> - Inca (Euro)[FPD Testing - Phase 1] + Inca (Europe)[FPD Testing - Phase 1] 1993 Coktel Vision ~ Philips @@ -1332,7 +1332,7 @@ --> - Inca (Euro, alt 1) + Inca (Europe, alt 1) 1994 Coktel Vision ~ Philips @@ -1349,7 +1349,7 @@ --> - Inca (Euro, alt 2) + Inca (Europe, alt 2) 1994 Coktel Vision ~ Philips @@ -1365,7 +1365,7 @@ --> - International Tennis Open (Euro, USA) + International Tennis Open (Europe, USA) 1993 Pathe ~ Philips @@ -1445,7 +1445,7 @@ --> - International Tennis Open v3.03 (Euro)[2 players] + International Tennis Open v3.03 (Europe)[2 players] 1994 Pathe ~ Philips @@ -1541,7 +1541,7 @@ --> - Kether v3.11 (Euro) + Kether v3.11 (Europe) 1994 Philips @@ -1557,7 +1557,7 @@ --> - Kether v3.09 (Euro) + Kether v3.09 (Europe) 1993 Philips @@ -1573,7 +1573,7 @@ --> - Kether v3.09 (Euro, alt) + Kether v3.09 (Europe, alt) 1993 Philips @@ -1653,7 +1653,7 @@ --> - Kingdom - Shadoan (Euro) + Kingdom - Shadoan (Europe) 1996 Philips @@ -1703,7 +1703,7 @@ --> - Labyrinth of Crete (Euro) + Labyrinth of Crete (Europe) 1995 Philips @@ -1754,7 +1754,7 @@ --> - The Last Bounty Hunter (Euro) + The Last Bounty Hunter (Europe) 1996 Philips @@ -1770,7 +1770,7 @@ --> - Lemmings (Euro) + Lemmings (Europe) 1994 Philips @@ -1802,7 +1802,7 @@ --> - Link - The Faces of Evil (Euro) + Link - The Faces of Evil (Europe) 1993 Philips @@ -1883,7 +1883,7 @@ --> - Litil Divil (Euro) + Litil Divil (Europe) 1994 Philips @@ -1933,7 +1933,7 @@ --> - Lost Eden (Euro) + Lost Eden (Europe) 1995 Philips @@ -1984,7 +1984,7 @@ --> - The Lost Ride (Euro) + The Lost Ride (Europe) 1998 Philips @@ -2001,7 +2001,7 @@ --> - Mad Dog II - The Lost Gold (Euro) + Mad Dog II - The Lost Gold (Europe) 1995 Philips @@ -2035,7 +2035,7 @@ --> - Mad Dog McCree (Euro) + Mad Dog McCree (Europe) 1994 Philips @@ -2104,7 +2104,7 @@ --> - Making the Grade v0.90 (Euro, pre-release) + Making the Grade v0.90 (Europe, pre-release) 1994 Philips @@ -2123,7 +2123,7 @@ --> - Marco Polo (Euro) + Marco Polo (Europe) 1995 Philips @@ -2171,7 +2171,7 @@ --> - Master Labyrinth v1.06 (Euro) + Master Labyrinth v1.06 (Europe) 1995 Pack-In Video @@ -2188,7 +2188,7 @@ --> - Mega Maze v1.06 (Euro) + Mega Maze v1.06 (Europe) 1994 Philips @@ -2220,7 +2220,7 @@ --> - Merlin's Apprentice v1.1 (Euro) + Merlin's Apprentice v1.1 (Europe) 1995 Philips @@ -2252,7 +2252,7 @@ --> - Micro Machines (Euro) + Micro Machines (Europe) 1995 Philips @@ -2268,7 +2268,7 @@ --> - Micro Machines (Euro, demo) + Micro Machines (Europe, demo) 1995 Philips @@ -2284,7 +2284,7 @@ --> - Mutant Rampage - Bodyslam (Euro) + Mutant Rampage - Bodyslam (Europe) 1994 Philips @@ -2318,7 +2318,7 @@ --> - Myst (Euro) + Myst (Europe) 1996 Philips @@ -2334,7 +2334,7 @@ --> - Mystic Midway - Phantom Express (Euro) + Mystic Midway - Phantom Express (Europe) 1993 Philips @@ -2350,7 +2350,7 @@ --> - Mystic Midway - Rest in Pieces (Euro, USA) + Mystic Midway - Rest in Pieces (Europe, USA) 1992 Philips @@ -2382,7 +2382,7 @@ --> - NFL Football Trivia Challenge '94-'95 Edition (Euro) + NFL Football Trivia Challenge '94-'95 Edition (Europe) 1994 Philips @@ -2414,7 +2414,7 @@ --> - NFL Hall of Fame Football (Euro) + NFL Hall of Fame Football (Europe) 1994 Philips @@ -2431,7 +2431,7 @@ --> - Othello (Euro) + Othello (Europe) 1993 Philips @@ -2447,7 +2447,7 @@ --> - Pac-Panic (Euro) + Pac-Panic (Europe) 1995 Namco ~ Philips @@ -2463,7 +2463,7 @@ --> - The Palm Springs Open (Euro, USA) + The Palm Springs Open (Europe, USA) 1991 Philips @@ -2577,7 +2577,7 @@ --> - Power Hitter (Euro) + Power Hitter (Europe) 1992 Philips @@ -2627,7 +2627,7 @@ --> - Rise of the Robots (Euro) + Rise of the Robots (Europe) 1995 Philips @@ -2678,7 +2678,7 @@ --> - Scotland Yard - Interactive v1.03 (Euro) + Scotland Yard - Interactive v1.03 (Europe) 1994 Philips @@ -2726,7 +2726,7 @@ --> - Secret Mission v1.03 (Euro) + Secret Mission v1.03 (Europe) 1996 Philips @@ -2774,7 +2774,7 @@ --> - Shaolin's Road (Euro) + Shaolin's Road (Europe) 1995 Philips @@ -2790,7 +2790,7 @@ --> - Space Ace (Euro) + Space Ace (Europe) 1994 Philips @@ -2840,7 +2840,7 @@ --> - Striker Pro (Euro) + Striker Pro (Europe) 1994 Philips @@ -2872,7 +2872,7 @@ --> - Strip Poker Live (Euro) + Strip Poker Live (Europe) 1995 Green Pig Production @@ -2904,7 +2904,7 @@ --> - Tangram - The Ultimate Chinese Game (Euro) + Tangram - The Ultimate Chinese Game (Europe) 1992 Philips @@ -2920,7 +2920,7 @@ --> - Tetris (Euro, USA) + Tetris (Europe, USA) 1992 Philips @@ -2936,7 +2936,7 @@ --> - Tetsuo Gaiden (Euro) + Tetsuo Gaiden (Europe) 1997 New Frontier @@ -2974,7 +2974,7 @@ --> - Thunder in Paradise (Euro) + Thunder in Paradise (Europe) 1995 Philips @@ -3057,7 +3057,7 @@ --> - The Ultimate Noah's Ark (Euro) + The Ultimate Noah's Ark (Europe) 1994 Philips @@ -3089,7 +3089,7 @@ --> - Ultra CD-i Soccer (Euro) + Ultra CD-i Soccer (Europe) 1997 Philips @@ -3106,7 +3106,7 @@ --> - Vegas Girls (Euro) + Vegas Girls (Europe) 1995 Status @@ -3139,7 +3139,7 @@ --> - Video Speedway - The Ultimate Racing Experience (Euro) + Video Speedway - The Ultimate Racing Experience (Europe) 1993 Philips @@ -3188,7 +3188,7 @@ --> - Voyeur ...Don't Get Caught (Euro) + Voyeur ...Don't Get Caught (Europe) 1993 Philips @@ -3275,7 +3275,7 @@ --> - The Wacky World of Minature Golf - With Eugene Levy (Euro) + The Wacky World of Minature Golf - With Eugene Levy (Europe) 1993 Philips @@ -3307,7 +3307,7 @@ --> - Whack a Bubble (Euro) + Whack a Bubble (Europe) 1997 New Frontier @@ -3323,7 +3323,7 @@ --> - Who Shot Johnny Rock (Euro) + Who Shot Johnny Rock (Europe) 1995 Philips @@ -3357,7 +3357,7 @@ --> - Wimbledon Challenge - The Official Wimbledon Quiz Game (Euro) + Wimbledon Challenge - The Official Wimbledon Quiz Game (Europe) 1993 Philips @@ -3373,7 +3373,7 @@ --> - Wordplay (Euro) + Wordplay (Europe) 1994 Philips @@ -3389,7 +3389,7 @@ --> - World Cup Golf (Euro) + World Cup Golf (Europe) 1995 Philips @@ -3423,7 +3423,7 @@ --> - Zelda - The Wand of Gamelon (Euro) + Zelda - The Wand of Gamelon (Europe) 1993 Philips @@ -3503,7 +3503,7 @@ --> - Zelda's Adventure (Euro) + Zelda's Adventure (Europe) 1995 Philips @@ -3519,7 +3519,7 @@ --> - Zenith (Euro) + Zenith (Europe) 1997 Philips @@ -3535,7 +3535,7 @@ --> - Zombie Dinos from Planet Zeltoid (Euro) + Zombie Dinos from Planet Zeltoid (Europe) 1992 Philips @@ -3618,7 +3618,7 @@ --> - 1995 - All the News and Views (Euro) + 1995 - All the News and Views (Europe) 1995 Philips @@ -3635,7 +3635,7 @@ --> - A Child is Born v1.0 (Euro) + A Child is Born v1.0 (Europe) 1993 Philips @@ -3684,7 +3684,7 @@ --> - A Night in Nylon City (Euro) + A Night in Nylon City (Europe) 1995 ICDI ~ Sofidoc @@ -3701,7 +3701,7 @@ --> - A Visit To Sesame Street - Letters (Euro, USA) + A Visit To Sesame Street - Letters (Europe, USA) 1992 Philips @@ -4318,7 +4318,7 @@ --> - Andrew Lloyd Webber - The Premiere Collection Encore (Euro) + Andrew Lloyd Webber - The Premiere Collection Encore (Europe) 1993 Philips ~ PolyGram @@ -4352,7 +4352,7 @@ --> - Anne Willan presents The Food of France (Euro) + Anne Willan presents The Food of France (Europe) 1992 Philips @@ -4384,7 +4384,7 @@ --> - Around Atlanta - The Olympic City (Euro) + Around Atlanta - The Olympic City (Europe) 1996 Philips @@ -4417,7 +4417,7 @@ --> - The Art of the Czars - St. Petersburg and the Treasures of the Hermitage (Euro, USA) + The Art of the Czars - St. Petersburg and the Treasures of the Hermitage (Europe, USA) 1992 Philips @@ -4449,7 +4449,7 @@ --> - Audio-Video Products '92-'93 on CD-Interactive v2 (Euro) + Audio-Video Products '92-'93 on CD-Interactive v2 (Europe) 1992 Philips @@ -4724,7 +4724,7 @@ --> - Bryan Adams - Waking up the Neighbours (Euro) + Bryan Adams - Waking up the Neighbours (Europe) 1992 Philips @@ -4750,7 +4750,7 @@ --> - BURN-CYCLE - The Music (Euro)[CD-Audio] + BURN-CYCLE - The Music (Europe)[CD-Audio] 1994 Philips @@ -4799,7 +4799,7 @@ --> - Cartoon Carnival (Euro, USA) + Cartoon Carnival (Europe, USA) 1994 Philips @@ -5013,7 +5013,7 @@ --> - CD-Online - Issue 01 - Internet on TV (Euro) + CD-Online - Issue 01 - Internet on TV (Europe) 1995 CD-Online @@ -5030,7 +5030,7 @@ --> - CD-Online - Issue 02 - The Internet Game Issue (Euro) + CD-Online - Issue 02 - The Internet Game Issue (Europe) 1996 CD-Online @@ -5047,7 +5047,7 @@ --> - CD-Online Disc 97-10 (Euro) + CD-Online Disc 97-10 (Europe) 1997 CD-Online @@ -5064,7 +5064,7 @@ --> - CDI 450 - Tutorial Disc (Euro) + CDI 450 - Tutorial Disc (Europe) 1994 Philips @@ -5080,7 +5080,7 @@ --> - CDI 470 - Tutorial Disc (Euro) + CDI 470 - Tutorial Disc (Europe) 1995 Philips @@ -5147,7 +5147,7 @@ --> - Cistercian Architecture (Euro) + Cistercian Architecture (Europe) 1994 Philips @@ -5163,7 +5163,7 @@ --> - Classical Jukebox (Euro, USA) + Classical Jukebox (Europe, USA) 1991 Philips @@ -5179,7 +5179,7 @@ --> - Comprendre le CD-I - Understanding CD-I (Euro) + Comprendre le CD-I - Understanding CD-I (Europe) 1995 Philips @@ -5195,7 +5195,7 @@ --> - Compton's Interactive Encyclopedia (Euro) + Compton's Interactive Encyclopedia (Europe) 1995 Compton's NewMedia @@ -5212,7 +5212,7 @@ --> - Compton's Interactive Encyclopedia - CD-Interactive (Euro) + Compton's Interactive Encyclopedia - CD-Interactive (Europe) 1992 Compton's NewMedia @@ -5244,7 +5244,7 @@ --> - The Concise Oxford Dictionary & Oxford Thesaurus (Euro) + The Concise Oxford Dictionary & Oxford Thesaurus (Europe) 1995 Oxford University Press ~ Philips @@ -5337,7 +5337,7 @@ --> - The Crayon Factory (Euro) + The Crayon Factory (Europe) 1995 Philips @@ -5369,7 +5369,7 @@ --> - Create your own Caricature with Spitting Image (Euro) + Create your own Caricature with Spitting Image (Europe) 1992 Philips @@ -5386,7 +5386,7 @@ --> - Create your own Caricature with Spitting Image (Euro, alt) + Create your own Caricature with Spitting Image (Europe, alt) 1992 Philips @@ -5618,7 +5618,7 @@ --> - Dutch Masters of the Seventeenth Century (Euro) + Dutch Masters of the Seventeenth Century (Europe) 1992 Philips @@ -5650,7 +5650,7 @@ --> - E-Z Play Today Keyboard - Now Anyone Can Learn To Play Keyboard! (Euro) + E-Z Play Today Keyboard - Now Anyone Can Learn To Play Keyboard! (Europe) 1994 Philips @@ -5715,7 +5715,7 @@ --> - Encyclopaedia Hachette (Euro) + Encyclopaedia Hachette (Europe) 1994 Philips @@ -5749,7 +5749,7 @@ --> - Eric Clapton - The Cream Of Eric Clapton (Euro) + Eric Clapton - The Cream Of Eric Clapton (Europe) 1994 Philips ~ PolyGram @@ -5787,7 +5787,7 @@ --> - European Party (Euro) + European Party (Europe) 1994 Giunti Multimedia ~ Philips @@ -5835,7 +5835,7 @@ --> - Face Kitchen (Euro) + Face Kitchen (Europe) 1992 Philips @@ -5909,7 +5909,7 @@ --> - Fish TV - Living Screens (Euro) + Fish TV - Living Screens (Europe) 1997 Daedalus @@ -5925,7 +5925,7 @@ --> - Flintstones & Jetsons - Timewarp (Euro) + Flintstones & Jetsons - Timewarp (Europe) 1994 Philips @@ -6039,7 +6039,7 @@ --> - The Full Swing (Euro) + The Full Swing (Europe) 1993 Xdra @@ -6071,7 +6071,7 @@ --> - Gateshead 1900 - A Guide to Tyneside 100 Years Ago (Euro) + Gateshead 1900 - A Guide to Tyneside 100 Years Ago (Europe) 1995 Xdra @@ -6089,7 +6089,7 @@ --> - Getting Ahead - Making Time (Euro) + Getting Ahead - Making Time (Europe) 1994 Temple Millar Multimedia ~ Xdra @@ -6199,7 +6199,7 @@ --> - Golf Tips - Customised Golf Instruction (Euro) + Golf Tips - Customised Golf Instruction (Europe) 1993 Xdra @@ -6232,7 +6232,7 @@ --> - Grand Prix Special (Euro) + Grand Prix Special (Europe) 1994 Xdra @@ -6248,7 +6248,7 @@ --> - Great American Golf 2 (Euro) + Great American Golf 2 (Europe) 1994 Xdra @@ -6265,7 +6265,7 @@ --> - Great British Golf - Middle Ages - 1940 (Euro) + Great British Golf - Middle Ages - 1940 (Europe) 1992 Philips @@ -6396,7 +6396,7 @@ --> - Haunted House (Euro) + Haunted House (Europe) 1996 Philips @@ -6732,7 +6732,7 @@ --> - Imagination in Motion - A New Era in 3D Chill Out Video (Euro) + Imagination in Motion - A New Era in 3D Chill Out Video (Europe) 1996 AIMS Multimedia @@ -6935,7 +6935,7 @@ --> - The Joy of Sex v3.03 (Euro) + The Joy of Sex v3.03 (Europe) 1993 Philips @@ -6968,7 +6968,7 @@ --> - Karaoke Klassics 1 - Family Favorites (Euro) + Karaoke Klassics 1 - Family Favorites (Europe) 1993 Philips @@ -6984,7 +6984,7 @@ --> - Karaoke Klassics 2 - Greatest Love Duets Volume 1 (Euro) + Karaoke Klassics 2 - Greatest Love Duets Volume 1 (Europe) 1993 Philips @@ -7000,7 +7000,7 @@ --> - Karaoke Klassics 3 - Male Standards Volume 1 (Euro) + Karaoke Klassics 3 - Male Standards Volume 1 (Europe) 1993 Philips @@ -7016,7 +7016,7 @@ --> - Karaoke Klassics 4 - Contemporary Pop Female Volume 1 (Euro) + Karaoke Klassics 4 - Contemporary Pop Female Volume 1 (Europe) 1993 Philips @@ -7032,7 +7032,7 @@ --> - Karaoke Klassics 5 - Special Occasions (Euro) + Karaoke Klassics 5 - Special Occasions (Europe) 1994 Philips @@ -7048,7 +7048,7 @@ --> - Kathy Smith - Personal Trainer (Euro) + Kathy Smith - Personal Trainer (Europe) 1995 Philips @@ -7084,7 +7084,7 @@ --> - Keep The Faith - An Evening with Bon Jovi (Euro) + Keep The Faith - An Evening with Bon Jovi (Europe) 1993 Philips ~ PolyGram @@ -7153,7 +7153,7 @@ --> - Kiss v1.07 (Euro) + Kiss v1.07 (Europe) 1994 Philips @@ -7237,7 +7237,7 @@ --> - Language Director - Deutsch Level 1 (Euro) + Language Director - Deutsch Level 1 (Europe) 1993 Philips @@ -7268,7 +7268,7 @@ --> - Language Director - Deutsch Level 2 (Euro) + Language Director - Deutsch Level 2 (Europe) 1993 Philips @@ -7299,7 +7299,7 @@ --> - Language Director - Deutsch Level 3 (Euro) + Language Director - Deutsch Level 3 (Europe) 1994 Philips @@ -7330,7 +7330,7 @@ --> - Language Director - English Level 1 (Euro) + Language Director - English Level 1 (Europe) 1993 Philips @@ -7361,7 +7361,7 @@ --> - Language Director - English Level 2 (Euro) + Language Director - English Level 2 (Europe) 1993 Philips @@ -7392,7 +7392,7 @@ --> - Language Director - Espanol Level 1 (Euro) + Language Director - Espanol Level 1 (Europe) 1994 Philips @@ -7423,7 +7423,7 @@ --> - Language Director - Français Level 1 (Euro) + Language Director - Français Level 1 (Europe) 1993 Philips @@ -7454,7 +7454,7 @@ --> - Language Director - Français Level 2 (Euro) + Language Director - Français Level 2 (Europe) 1993 Philips @@ -7485,7 +7485,7 @@ --> - Language Director - Français Level 3 (Euro) + Language Director - Français Level 3 (Europe) 1994 Philips @@ -7512,7 +7512,7 @@ --> - Live Without Monty Python (Euro) + Live Without Monty Python (Europe) 1994 Philips @@ -7548,7 +7548,7 @@ --> - Loving for a Lifetime (Euro) + Loving for a Lifetime (Europe) 1994 Extraware ~ Interlance ~ Meteor Film @@ -7691,7 +7691,7 @@ --> - Max Magic (Euro) + Max Magic (Europe) 1994 Philips @@ -7707,7 +7707,7 @@ --> - Max Magic (Euro, alt) + Max Magic (Europe, alt) 1994 Philips @@ -7755,7 +7755,7 @@ --> - Mercer Mayer's Little Monster at School (Euro) + Mercer Mayer's Little Monster at School (Europe) 1994 Philips @@ -7819,7 +7819,7 @@ --> - Monty Python's Invasion from the Planet Skyron (Euro) + Monty Python's Invasion from the Planet Skyron (Europe) 1995 Philips @@ -7836,7 +7836,7 @@ --> - Monty Python's More Naughty Bits (Euro) + Monty Python's More Naughty Bits (Europe) 1994 Philips @@ -7954,7 +7954,7 @@ --> - Muzzy - Learn French the Fun Way (Euro) + Muzzy - Learn French the Fun Way (Europe) 1994 Philips @@ -8038,7 +8038,7 @@ --> - NFL 100 Greatest Touchdowns (Euro) + NFL 100 Greatest Touchdowns (Europe) 1996 Philips @@ -8102,7 +8102,7 @@ --> - Number Factory (Euro) + Number Factory (Europe) 1995 Philips @@ -8164,7 +8164,7 @@ --> - Opera Imaginaire (Euro) + Opera Imaginaire (Europe) 1995 Pascavision @@ -8180,7 +8180,7 @@ --> - Origami (Euro) + Origami (Europe) 1993 Philips @@ -8196,7 +8196,7 @@ --> - P.A.W.S. - Personal Automated Wagging System (Euro) + P.A.W.S. - Personal Automated Wagging System (Europe) 1998 Philips @@ -8244,7 +8244,7 @@ --> - Pathways - Interactive Reading for 4-7 Year Old's (Euro) + Pathways - Interactive Reading for 4-7 Year Old's (Europe) 1996 Philips @@ -8276,7 +8276,7 @@ --> - Pegasus (Euro, USA) + Pegasus (Europe, USA) 1992 Philips @@ -8377,7 +8377,7 @@ --> - Photo CD Demo Disc v3.0 (Euro)[1993-03] + Photo CD Demo Disc v3.0 (Europe)[1993-03] 1993 Philips @@ -8393,7 +8393,7 @@ --> - Photo CD Demo Disc v3.2 (Euro)[1995-11] + Photo CD Demo Disc v3.2 (Europe)[1995-11] 1995 Philips @@ -8459,7 +8459,7 @@ --> - Portrait of a City - Venice (Euro) + Portrait of a City - Venice (Europe) 1992 Philips @@ -8491,7 +8491,7 @@ --> - Private Lesson Series - Classical Guitar - A Beginner's Guide (Euro, USA) + Private Lesson Series - Classical Guitar - A Beginner's Guide (Europe, USA) 1992 Philips @@ -8523,7 +8523,7 @@ --> - Private Lesson Series - Rock Guitar - A Beginner's Guide (Euro) + Private Lesson Series - Rock Guitar - A Beginner's Guide (Europe) 1992 Philips @@ -8608,7 +8608,7 @@ --> - Queen - Greatest Flix I & II (Euro) + Queen - Greatest Flix I & II (Europe) 1994 Queen Films @@ -8631,7 +8631,7 @@ --> - Quel est donc cet Oiseau - Nature on CDI (France) ~ What's that Bird (Euro) + Quel est donc cet Oiseau - Nature on CDI (France) ~ What's that Bird (Europe) 1992 Philips @@ -9060,7 +9060,7 @@ --> - Rio '88 - Tina Turner (Euro) + Rio '88 - Tina Turner (Europe) 19?? Philips ~ PolyGram @@ -9098,7 +9098,7 @@ --> - Routes to Reading (Euro) + Routes to Reading (Europe) 1995 Philips @@ -9245,7 +9245,7 @@ --> - Santa Claus' Mice (Euro) + Santa Claus' Mice (Europe) 1992 Philips @@ -9277,7 +9277,7 @@ --> - Sciamo con Alberto Tomba - Let's Go Skiing With Alberto Tomba (Euro) + Sciamo con Alberto Tomba - Let's Go Skiing With Alberto Tomba (Europe) 1994 Philips @@ -9295,7 +9295,7 @@ --> - Sciamo con Alberto Tomba - Let's Go Skiing With Alberto Tomba (Euro, alt) + Sciamo con Alberto Tomba - Let's Go Skiing With Alberto Tomba (Europe, alt) 1994 Philips @@ -9346,7 +9346,7 @@ --> - Shipwreck v3.03 (Euro) + Shipwreck v3.03 (Europe) 1993 Philips @@ -9394,7 +9394,7 @@ --> - Solar System (Euro) + Solar System (Europe) 1995 Philips @@ -9410,7 +9410,7 @@ --> - Soundtrap v3.04 (Euro) + Soundtrap v3.04 (Europe) 1994 Philips @@ -9426,7 +9426,7 @@ --> - Space Safari (Euro) + Space Safari (Europe) 1995 Philips @@ -9458,7 +9458,7 @@ --> - Stickybear Family Fun Games (Euro) + Stickybear Family Fun Games (Europe) 1995 Philips @@ -9506,7 +9506,7 @@ --> - Stickybear Preschool (Euro) + Stickybear Preschool (Europe) 1994 Philips @@ -9554,7 +9554,7 @@ --> - Sting - Ten Summoner's Tales (Euro) + Sting - Ten Summoner's Tales (Europe) 1994 Philips @@ -9651,7 +9651,7 @@ --> - Surf City (Euro) + Surf City (Europe) 1994 Philips @@ -9746,7 +9746,7 @@ --> - Thumbelina (Euro) + Thumbelina (Europe) 1995 Philips @@ -9827,7 +9827,7 @@ --> - Tim & Bear at the Airport (Euro) + Tim & Bear at the Airport (Europe) 1995 Philips @@ -9843,7 +9843,7 @@ --> - Tim & Bear at the Movies (Euro) + Tim & Bear at the Movies (Europe) 1995 Philips @@ -9957,7 +9957,7 @@ --> - Time-Life - Astrology (Euro, USA) + Time-Life - Astrology (Europe, USA) 1993 Philips @@ -10104,7 +10104,7 @@ --> - Total Euro 96 (Euro) + Total Euro 96 (Europe) 1996 Philips @@ -10237,7 +10237,7 @@ --> - USA '94 - World Cup (Euro, German / French / Dutch) + USA '94 - World Cup (Europe, German / French / Dutch) 1994 Philips @@ -10255,7 +10255,7 @@ --> - USA '94 - World Cup (Euro, English / Spanish / Italian) + USA '94 - World Cup (Europe, English / Spanish / Italian) 1994 Philips @@ -10273,7 +10273,7 @@ --> - USA '94 - World Cup (Euro, English / Spanish / Italian, alt) + USA '94 - World Cup (Europe, English / Spanish / Italian, alt) 1994 Philips @@ -10340,7 +10340,7 @@ --> - Video CD - Music Sampler (Euro) + Video CD - Music Sampler (Europe) 1995 Philips ~ PolyGram @@ -10421,7 +10421,7 @@ --> - Windows on Chinese Civilization - The Forbidden City (Euro) + Windows on Chinese Civilization - The Forbidden City (Europe) 1995 Philips @@ -10437,7 +10437,7 @@ --> - Wines of France (Euro) + Wines of France (Europe) 1995 Philips @@ -10485,7 +10485,7 @@ --> - The World of Impressionism (Euro, USA) + The World of Impressionism (Europe, USA) 1992 Philips @@ -10619,7 +10619,7 @@ --> - Xplora 1 - Peter Gabriel's Secret World (Euro) + Xplora 1 - Peter Gabriel's Secret World (Europe) 1995 Philips @@ -10636,7 +10636,7 @@ --> - Yearn 2 Learn - Peanuts (Euro) + Yearn 2 Learn - Peanuts (Europe) 1994 Philips @@ -10652,7 +10652,7 @@ --> - You Can Do It All With Philips CD-i - A Title Sampler v1.0 (Euro)[Oct 1992] + You Can Do It All With Philips CD-i - A Title Sampler v1.0 (Europe)[Oct 1992] 1992 Philips @@ -10774,7 +10774,7 @@ - Alien Gate (Euro) + Alien Gate (Europe) 1992 The Vision Factory @@ -10907,7 +10907,7 @@ Note: This is a later release that added Windows 3.1 playback software. --> - Getting Ahead - Making Time (Euro, reprint) + Getting Ahead - Making Time (Europe, reprint) 1995 XDRA Ltd. ~ Temple Millar Multimedia diff -Nru mame-0.250+dfsg.1/hash/cdtv.xml mame-0.251+dfsg.1/hash/cdtv.xml --- mame-0.250+dfsg.1/hash/cdtv.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/cdtv.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/cgenie_cass.xml mame-0.251+dfsg.1/hash/cgenie_cass.xml --- mame-0.250+dfsg.1/hash/cgenie_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/cgenie_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -2,7 +2,7 @@ diff -Nru mame-0.250+dfsg.1/hash/channelf.xml mame-0.251+dfsg.1/hash/channelf.xml --- mame-0.250+dfsg.1/hash/channelf.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/channelf.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/chip8_quik.xml mame-0.251+dfsg.1/hash/chip8_quik.xml --- mame-0.250+dfsg.1/hash/chip8_quik.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/chip8_quik.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/clipper_flop.xml mame-0.251+dfsg.1/hash/clipper_flop.xml --- mame-0.250+dfsg.1/hash/clipper_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/clipper_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/coco_cart.xml mame-0.251+dfsg.1/hash/coco_cart.xml --- mame-0.250+dfsg.1/hash/coco_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/coco_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/coleco.xml mame-0.251+dfsg.1/hash/coleco.xml --- mame-0.250+dfsg.1/hash/coleco.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/coleco.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -552,30 +552,6 @@ - - Dr. Seuss's Fix-Up the Mix-Up Puzzle (prototype, rev r) - 1984 - Coleco / CBS - - - - - - - - - - - Dr. Seuss's Fix-Up the Mix-Up Puzzle Graphics Demo - 1984 - Coleco / CBS - - - - - - - Evolution @@ -2684,6 +2660,30 @@ + + Dr. Seuss's Fix-Up the Mix-Up Puzzle (prototype, rev r) + 1984 + Coleco / CBS + + + + + + + + + + + Dr. Seuss's Fix-Up the Mix-Up Puzzle Graphics Demo + 1984 + Coleco / CBS + + + + + + + Dragon's Lair (prototype, 0416) 1984 @@ -2724,6 +2724,18 @@ + + Frogger II: Threedeep! (prototype, 19840615) + 1984 + Parker Brothers + + + + + + + + Joust (prototype) @@ -2870,6 +2882,19 @@ + + + Star Wars: The Arcade Game (prototype, 19840412) + 1984 + Parker Brothers + + + + + + + + diff -Nru mame-0.250+dfsg.1/hash/compclr2_flop.xml mame-0.251+dfsg.1/hash/compclr2_flop.xml --- mame-0.250+dfsg.1/hash/compclr2_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/compclr2_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/compis.xml mame-0.251+dfsg.1/hash/compis.xml --- mame-0.250+dfsg.1/hash/compis.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/compis.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/conchess_plymate.xml mame-0.251+dfsg.1/hash/conchess_plymate.xml --- mame-0.250+dfsg.1/hash/conchess_plymate.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/conchess_plymate.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/conchess_standard.xml mame-0.251+dfsg.1/hash/conchess_standard.xml --- mame-0.250+dfsg.1/hash/conchess_standard.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/conchess_standard.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/copera.xml mame-0.251+dfsg.1/hash/copera.xml --- mame-0.250+dfsg.1/hash/copera.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/copera.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ - 1000 Bornes (Fra, Re-release) + 1000 Bornes (France, re-release) 1990 Novtech @@ -189,7 +189,7 @@ - 1000 Bornes (Fra) + 1000 Bornes (France) 1985 Free Game Blot @@ -203,7 +203,7 @@ - 1001 BC - A Mediterranean Odyssey (Fra) + 1001 BC - A Mediterranean Odyssey (France) 1986 Ere Informatique @@ -216,7 +216,7 @@ - 1001 BC - A Mediterranean Odyssey (Fra, Unprotected?) + 1001 BC - A Mediterranean Odyssey (France, unprotected?) 1986 Ere Informatique @@ -229,7 +229,7 @@ - 1001 BC - A Mediterranean Odyssey (Fra, Unprotected, Alt) + 1001 BC - A Mediterranean Odyssey (France, unprotected, alt) 1986 Ere Informatique @@ -242,7 +242,7 @@ - 1001 BC - A Mediterranean Odyssey (Fra, Unprotected, Alt 2) + 1001 BC - A Mediterranean Odyssey (France, unprotected, alt 2) 1986 Ere Informatique @@ -269,7 +269,7 @@ - 10th Frame (UK, Unprotected?) + 10th Frame (UK, unprotected?) 1986 U.S. Gold @@ -282,7 +282,7 @@ - 10th Frame (UK, Cracked by Redpoint) + 10th Frame (UK, cracked by Redpoint) 1986 U.S. Gold @@ -308,7 +308,7 @@ - Les 13 Paires (Fra) + Les 13 Paires (France) 1989 Jacques Pepin @@ -321,7 +321,7 @@ - 1815 (Fra) + 1815 (France) 1985 Cobra Soft @@ -334,7 +334,7 @@ - 1942 (UK, Spa) + 1942 (UK, Spain) 1986 Elite Systems @@ -361,7 +361,7 @@ - 1943 (UK, Unprotected?) + 1943 (UK, unprotected?) 1988 Go! ~ Capcom @@ -374,7 +374,7 @@ - 1943 (UK, Cracked by Exocet) + 1943 (UK, cracked by Exocet) 1988 Go! ~ Capcom @@ -388,7 +388,7 @@ - 1st Division Manager (UK, Cracked by The Equalizor) + 1st Division Manager (UK, cracked by The Equalizor) 1992 Codemasters @@ -444,7 +444,7 @@ - 20000 Lieues Sous Les Mers (Fra) + 20000 Lieues Sous Les Mers (France) 1988 Coktel Vision @@ -553,7 +553,7 @@ - 3-D Voicechess (Fra) + 3-D Voicechess (France) 1985 CP Software @@ -592,7 +592,7 @@ - 3D Fight (Fra) + 3D Fight (France) 1985 Loriciels @@ -660,7 +660,7 @@ - 3D Snakes (Fra) + 3D Snakes (France) 19?? L.M.C @@ -674,7 +674,7 @@ - 3D Snakes II (Fra) + 3D Snakes II (France) 19?? L.M.C @@ -759,7 +759,7 @@ - 3D-4 En Ligne-3D (Fra) + 3D-4 En Ligne-3D (France) 19?? Daniel Audiffren @@ -787,7 +787,7 @@ - 3D-Sub (Fra) + 3D-Sub (France) 1985 Loriciels @@ -815,7 +815,7 @@ - Les 4 Saisons de l'Écrit - Version CE-CM (Fra) + Les 4 Saisons de l'Écrit - Version CE-CM (France) 1989 Generation 5 @@ -833,7 +833,7 @@ - Les 4 Saisons de l'Écrit - Version ? (Fra) + Les 4 Saisons de l'Écrit - Version ? (France) 1989 Generation 5 @@ -889,7 +889,7 @@ - Le 5eme Axe (Fra) + Le 5eme Axe (France) 1985 Loriciels @@ -970,7 +970,7 @@ - A 320 (Fra) + A 320 (France) 1988 Loriciels @@ -1019,7 +1019,7 @@ - A la Conquete de l'Orthographe (Ce1-Ce2) (Fra) + A la Conquete de l'Orthographe (Ce1-Ce2) (France) 1991 Generation 5 @@ -1037,7 +1037,7 @@ - A la Conquete de l'Orthographe (Cm1-Cm2) (Fra) + A la Conquete de l'Orthographe (Cm1-Cm2) (France) 1991 Generation 5 @@ -1055,7 +1055,7 @@ - A la Decouverte de l'Homme (Fra) + A la Decouverte de l'Homme (France) 19?? Coktel Vision @@ -1074,7 +1074,7 @@ - À la Découverte de la Terre (Fra) + À la Découverte de la Terre (France) 1988 Coktel Vision @@ -1105,7 +1105,7 @@ - A la Pursuite de Carmen Sandiego dans le Monde (Fra) + A la Pursuite de Carmen Sandiego dans le Monde (France) 1990 Brøderbund France @@ -1162,7 +1162,7 @@ - A la Recherche du Nautilus (Fra) + A la Recherche du Nautilus (France) 1992 Megafree? @@ -1329,7 +1329,7 @@ - A View to a Kill (Fra) + A View to a Kill (France) 1985 Domark @@ -1396,7 +1396,7 @@ - Abalone (Fra) + Abalone (France) 19?? <unknown> @@ -1427,7 +1427,7 @@ - Abracadabra et les Voleurs de Temps (Fra) + Abracadabra et les Voleurs de Temps (France) 1988 Carraz Editions @@ -1452,7 +1452,7 @@ - Absurdity (Fra) + Absurdity (France) 1985 Cobra Soft @@ -1510,7 +1510,7 @@ - Academy (Fra) + Academy (France) 1987 CRL Group @@ -1769,7 +1769,7 @@ - Adi Environnement 3eme (Fra) + Adi Environnement 3eme (France) 1991 Coktel Vision @@ -1788,7 +1788,7 @@ - Adi Anglais 3eme (Fra) + Adi Anglais 3eme (France) 1991 Coktel Vision @@ -1808,7 +1808,7 @@ - Adi Mathematiques 3eme (Fra) + Adi Mathematiques 3eme (France) 1991 Coktel Vision @@ -1827,7 +1827,7 @@ - Adi Environnement 4eme (Fra) + Adi Environnement 4eme (France) 1991 Coktel Vision @@ -1847,7 +1847,7 @@ - Adi Mathematiques 5eme (Fra) + Adi Mathematiques 5eme (France) 1991 Coktel Vision @@ -1867,7 +1867,7 @@ - Adi Mathematiques 6eme (Fra) + Adi Mathematiques 6eme (France) 1991 Coktel Vision @@ -1907,7 +1907,7 @@ - Adi Francais Ce2 (Fra) + Adi Francais Ce2 (France) 1991 Coktel Vision @@ -1967,7 +1967,7 @@ - Adi Francais Cm1 (Fra) + Adi Francais Cm1 (France) 1991 Coktel Vision @@ -1987,7 +1987,7 @@ - Adi Environnement Cm2 (Fra) + Adi Environnement Cm2 (France) 1991 Coktel Vision @@ -2007,7 +2007,7 @@ - Adi Mathematiques Cm2 (Fra) + Adi Mathematiques Cm2 (France) 1991 Coktel Vision @@ -2027,7 +2027,7 @@ - Adi Francais Cm2 (Fra) + Adi Francais Cm2 (France) 1991 Coktel Vision @@ -2156,7 +2156,7 @@ - Advanced Destroyer Simulation (Fra) + Advanced Destroyer Simulation (France) 1990 Loriciels @@ -2283,7 +2283,7 @@ - Une Affaire en Or (Fra) + Une Affaire en Or (France) 1985 Free Game Blot @@ -2296,7 +2296,7 @@ - L'Affaire Ravenhood (Fra) + L'Affaire Ravenhood (France) 1993 <unknown> @@ -2314,7 +2314,7 @@ - L'Affaire Santa Fe (Fra) + L'Affaire Santa Fe (France) 1988 Infogrames @@ -2350,7 +2350,7 @@ - L'Affaire Sydney (Fra) + L'Affaire Sydney (France) 1986 Infogrames @@ -2402,7 +2402,7 @@ - L'Affaire Vera Cruz (Fra) + L'Affaire Vera Cruz (France) 1985 Infogrames @@ -2629,7 +2629,7 @@ - L'Aigle d'Or (Fra) + L'Aigle d'Or (France) 1986 Loriciels @@ -2642,7 +2642,7 @@ - L'Aigle d'Or - Le Retour (Fra) + L'Aigle d'Or - Le Retour (France) 1991 Loriciels @@ -2787,7 +2787,7 @@ - Algebre (Fra) + Algebre (France) 1986 Vifi International @@ -2800,7 +2800,7 @@ - Algebre (Fra, Cracked) + Algebre (France, cracked) 1986 Vifi International @@ -2828,7 +2828,7 @@ - Ali-Baba (Fra) + Ali-Baba (France) 19?? 3 Pouces Software @@ -3109,7 +3109,7 @@ - Alive (Fra) + Alive (France) 1991 Lankhor @@ -3155,7 +3155,7 @@ - Alphajet (Fra) + Alphajet (France) 19?? Felix Mortalena @@ -3168,7 +3168,7 @@ - Alphakhor (Fra) + Alphakhor (France) 1989 Loriciels @@ -3351,7 +3351,7 @@ - Amelie Minuit (Fra) + Amelie Minuit (France) 1985 Ere Informatique @@ -3471,7 +3471,7 @@ - Amscom (Fra) + Amscom (France) 1986 Cobra Soft @@ -3497,7 +3497,7 @@ - AmsGolf (Fra) + AmsGolf (France) 1984 Amsoft @@ -3580,7 +3580,7 @@ - Amsterm (Fra) + Amsterm (France) 1985 Cobra Soft @@ -3593,7 +3593,7 @@ - Amstra-Dames (Fra) + Amstra-Dames (France) 1985 Cobra Soft @@ -3633,7 +3633,7 @@ - Amstroid (Fra) + Amstroid (France) 1985 Sprites @@ -3678,7 +3678,7 @@ - Anatomie (Fra) + Anatomie (France) 1986 Core @@ -3761,7 +3761,7 @@ - Andy Capp (Fra) + Andy Capp (France) 1987 Mirrorsoft @@ -3813,7 +3813,7 @@ - Anglais (Fra) + Anglais (France) 19?? <unknown> @@ -3826,7 +3826,7 @@ - Anglais - 4ème & 3ème (Fra) + Anglais - 4ème & 3ème (France) 1989 Micro C @@ -3844,7 +3844,7 @@ - Anglais - 6ème & 5ème (Fra) + Anglais - 6ème & 5ème (France) 1992 Micro C @@ -3862,7 +3862,7 @@ - Anglais College 4ème / 3ème (Fra) + Anglais College 4ème / 3ème (France) 1988 Cedic Nathan @@ -3885,7 +3885,7 @@ - Anglais College 6ème / 5ème (Fra) + Anglais College 6ème / 5ème (France) 1988 Cedic Nathan @@ -3921,7 +3921,7 @@ - Anglais Primaire (Fra) + Anglais Primaire (France) 1989 Micro C @@ -4002,7 +4002,7 @@ - Animal / Vègètal / Minèral (Fra) + Animal / Vègètal / Minèral (France) 1984 Amsoft @@ -4028,7 +4028,7 @@ - Animalier (Fra) + Animalier (France) 1986 Ere Informatique @@ -4061,7 +4061,7 @@ - Strip Poker Anime Par Sylvia (Fra) + Strip Poker Anime Par Sylvia (France) 1985 Knight Soft @@ -4126,7 +4126,7 @@ - Annals of Rome (Fra) + Annals of Rome (France) 1986 Pss @@ -4139,7 +4139,7 @@ - L'Anneau de Zengara (Fra) + L'Anneau de Zengara (France) 1987 UBI Soft @@ -4175,7 +4175,7 @@ - L'Anniversaire de Bobby (Fra) + L'Anniversaire de Bobby (France) 1988 Carraz Editions @@ -4307,7 +4307,7 @@ - L'Antre de Gork (Fra) + L'Antre de Gork (France) 1986 Excalibur @@ -4398,7 +4398,7 @@ - Apprends-Moi à Ecrire 2 (Fra) + Apprends-Moi à Ecrire 2 (France) 1986 Cedic Nathan @@ -4411,7 +4411,7 @@ - Apprends-Moi à Lire 2 (Fra) + Apprends-Moi à Lire 2 (France) 1986 Cedic Nathan @@ -4448,7 +4448,7 @@ - L'Apprenti Sorcier (Fra) + L'Apprenti Sorcier (France) 1985 Amsoft @@ -4461,7 +4461,7 @@ - Apprentissage des Nombres (Fra) + Apprentissage des Nombres (France) 1985 Cobra Soft @@ -4526,7 +4526,7 @@ - Aquanaute (Fra) + Aquanaute (France) 1988 Fil @@ -4588,7 +4588,7 @@ - Arbre Genealogique (Fra) + Arbre Genealogique (France) 19?? <unknown> @@ -4692,7 +4692,7 @@ - Arcadian's Revenge (Fra) + Arcadian's Revenge (France) 19?? Roland A. Waddilove @@ -4788,7 +4788,7 @@ - Arcturus (Fra) + Arcturus (France) 1984 Visions Software Factory @@ -4853,7 +4853,7 @@ - Ariane (Fra) + Ariane (France) 1985 O. Marolles @@ -4867,7 +4867,7 @@ - Arkanium (Fra) + Arkanium (France) 1988 Eric Cubizolle @@ -4971,7 +4971,7 @@ - Arkanoid 3 (Fra) + Arkanoid 3 (France) 1993 Hydris @@ -5143,7 +5143,7 @@ - L'Art de la Guerre (Fra) + L'Art de la Guerre (France) 1991 Broderbund France @@ -5180,7 +5180,7 @@ - Arthur. (Fra) + Arthur. (France) 19?? Christian Rolland @@ -5232,7 +5232,7 @@ - Asphalt (Fra) + Asphalt (France) 1986 UBI Soft @@ -5250,7 +5250,7 @@ - Asphyxie (Fra) + Asphyxie (France) 1985 Ludo's Software Distribution @@ -5317,7 +5317,7 @@ - Assimil - Le Nouvel Anglais (Fra) + Assimil - Le Nouvel Anglais (France) 1986 Ere Informatique @@ -5346,7 +5346,7 @@ - Associe (Fra) + Associe (France) 1989 Carraz Editions @@ -5373,7 +5373,7 @@ - Asterix Chez Rahazade (Fra) + Asterix Chez Rahazade (France) 1988 Coktel Vision @@ -5427,7 +5427,7 @@ - Asterix et la Potion Magique (Fra) + Asterix et la Potion Magique (France) 1986 Coktel Vision @@ -5521,7 +5521,7 @@ - Astro - 1.0 (Fra) + Astro - 1.0 (France) 1985 Core @@ -5601,7 +5601,7 @@ - Astrologie (Fra) + Astrologie (France) 19?? <unknown> @@ -5632,7 +5632,7 @@ - Atahualpa (Fra) + Atahualpa (France) 1985 Transoft @@ -5753,7 +5753,7 @@ - Atlas Geographique (Fra) + Atlas Geographique (France) 19?? <unknown> @@ -5833,7 +5833,7 @@ - Atomic Driver (Fra) + Atomic Driver (France) 1988 Loriciels @@ -5846,7 +5846,7 @@ - Atomic Fiction (Fra) + Atomic Fiction (France) 1987 Chip @@ -5859,7 +5859,7 @@ - Atomik (Fra) + Atomik (France) 1988 Fil @@ -5988,7 +5988,7 @@ - Attentat (Fra) + Attentat (France) 1986 Rainbow Production @@ -6021,7 +6021,7 @@ - Au Boulot ! (Fra) + Au Boulot ! (France) 1990 CPC @@ -6034,7 +6034,7 @@ - Au Nom de l'Hermine (Fra) + Au Nom de l'Hermine (France) 1987 Coktel Vision @@ -6083,7 +6083,7 @@ - Au Revoir Monty (Fra) + Au Revoir Monty (France) 1987 Gremlin Graphics Software @@ -6155,7 +6155,7 @@ - Automec (Fra) + Automec (France) 1985 Loriciels @@ -6168,7 +6168,7 @@ - L'Autre Aventure (Fra) + L'Autre Aventure (France) 1987 Genisoft @@ -6240,7 +6240,7 @@ - Aventures au Chateau (Fra) + Aventures au Chateau (France) 1985 Micro Application @@ -6253,7 +6253,7 @@ - Les Aventures de Pepito au Mexique (Fra) + Les Aventures de Pepito au Mexique (France) 1991 Microids @@ -6340,7 +6340,7 @@ - Les Aventures de Jack Burton (Fra) + Les Aventures de Jack Burton (France) 1987 Electric Dreams @@ -6394,7 +6394,7 @@ - Le Crepuscule du Naja (Fra) + Le Crepuscule du Naja (France) 1987 Chip @@ -6433,7 +6433,7 @@ - Cyrus II Chess (Fra) + Cyrus II Chess (France) 1985 Amsoft @@ -6587,7 +6587,7 @@ - L'Ange de Cristal (Fra) + L'Ange de Cristal (France) 1988 Ere Informatique @@ -6655,7 +6655,7 @@ - L'Ardoise Magique (Fra) + L'Ardoise Magique (France) 1984 Amsoft @@ -6793,7 +6793,7 @@ - Le Malefice des Atlantes (Fra) + Le Malefice des Atlantes (France) 1987 Chip @@ -6819,7 +6819,7 @@ - Menace sur l'Arctique (Fra) + Menace sur l'Arctique (France) 1987 Chip @@ -6860,7 +6860,7 @@ - Arsene Lupin (Fra) + Arsene Lupin (France) 1985 <unknown> @@ -6954,7 +6954,7 @@ - L'Armure Sacree d'Antiriad (Fra) + L'Armure Sacree d'Antiriad (France) 1986 Palace Software @@ -6993,7 +6993,7 @@ - Le Septieme Continent (Fra) + Le Septieme Continent (France) 1987 <unknown> @@ -7062,7 +7062,7 @@ - Le Talisman d'Osiris (Fra) + Le Talisman d'Osiris (France) 1987 Chip @@ -7115,7 +7115,7 @@ - Les Aventures de Moktar (Fra) + Les Aventures de Moktar (France) 1992 Titus @@ -7141,7 +7141,7 @@ - Traitement Bzzz (Fra) + Traitement Bzzz (France) 1987 Chip @@ -7357,7 +7357,7 @@ - 002 Agent Double (Fra) + 002 Agent Double (France) 1990 Amstar & CPC @@ -7388,7 +7388,7 @@ - 13 Colors (Fra) + 13 Colors (France) 1992 CPC Infos @@ -7400,7 +7400,7 @@ - 1914 (Fra) + 1914 (France) 1987 Amstar @@ -7413,7 +7413,7 @@ - 20000 Pieux Sous Les Mers (Fra) + 20000 Pieux Sous Les Mers (France) 1989 Micro Mag @@ -7426,7 +7426,7 @@ - 3D Chateau (Fra) + 3D Chateau (France) 1986 Amstrad Magazine @@ -7439,7 +7439,7 @@ - 3D Madness (Fra) + 3D Madness (France) 1988 AM-Mag @@ -7491,7 +7491,7 @@ - 3D Morpion (Fra) + 3D Morpion (France) 1985 Hebdogiciel @@ -7530,7 +7530,7 @@ - A Fond la Caisse (Fra) + A Fond la Caisse (France) 1989 Amstar & CPC @@ -7544,7 +7544,7 @@ - A la Recherche du Roi Richard (Fra) + A la Recherche du Roi Richard (France) 1990 Tilt @@ -7558,7 +7558,7 @@ - A-P-I-D (Fra) + A-P-I-D (France) 1986 Amstrad Magazine @@ -7571,7 +7571,7 @@ - ABC (Fra) + ABC (France) 1986 CPC @@ -7584,7 +7584,7 @@ - Acapulco (Fra) + Acapulco (France) 1985 Micro 7 @@ -7611,7 +7611,7 @@ - Africa (Fra) + Africa (France) 1986 Les Cahiers d'Amstrad Magazine @@ -7624,7 +7624,7 @@ - L'Age de Pierre (Fra) + L'Age de Pierre (France) 1985 Hebdogiciel @@ -7663,7 +7663,7 @@ - Aiguillages (Fra) + Aiguillages (France) 1986 Microstrad @@ -7676,7 +7676,7 @@ - Alca (Fra) + Alca (France) 1987 CPC @@ -7728,7 +7728,7 @@ - Aligator (Fra) + Aligator (France) 1988 AM-Mag @@ -7741,7 +7741,7 @@ - Alinka (Fra) + Alinka (France) 1991 Amstrad Cent Pour Cent @@ -7754,7 +7754,7 @@ - Alpha Bug (Fra) + Alpha Bug (France) 1986 Hebdogiciel @@ -7768,7 +7768,7 @@ - Alpha-Strip (Fra) + Alpha-Strip (France) 1988 CPC @@ -7831,7 +7831,7 @@ - Amspoker (Fra) + Amspoker (France) 1986 Amstrad Magazine @@ -7845,7 +7845,7 @@ - Amster Mind (Fra) + Amster Mind (France) 1986 Amstrad Magazine @@ -7911,7 +7911,7 @@ - Amstrad Mind (Fra) + Amstrad Mind (France) 1985 Tilt @@ -7937,7 +7937,7 @@ - Amthello (Fra) + Amthello (France) 1984 Amstrad Computer User @@ -7989,7 +7989,7 @@ - Angoisse (Fra) + Angoisse (France) 1986 Hebdogiciel @@ -8015,7 +8015,7 @@ - Appman (Fra) + Appman (France) 1988 AM-Mag @@ -8029,7 +8029,7 @@ - Archibald (Fra) + Archibald (France) 1988 Amstar @@ -8043,7 +8043,7 @@ - Arsene Lapin (Fra) + Arsene Lapin (France) 1990 CPC @@ -8055,7 +8055,7 @@ - L'As du Volant (Fra) + L'As du Volant (France) 1985 Microstrad @@ -8069,7 +8069,7 @@ - Les ASCII Attaquent (Fra) + Les ASCII Attaquent (France) 1985 Tilt @@ -8132,7 +8132,7 @@ - Astronomie Planetaire (Fra) + Astronomie Planetaire (France) 1987 CPC @@ -8158,7 +8158,7 @@ - ATC (Fra) + ATC (France) 1990 Amstrad Cent Pour Cent @@ -8184,7 +8184,7 @@ - Attentif (Fra) + Attentif (France) 1986 CPC @@ -8198,7 +8198,7 @@ - Atterrissage (Fra) + Atterrissage (France) 1984 Amstrad Jeux D'Action @@ -8212,7 +8212,7 @@ - Auto-Choc (Fra) + Auto-Choc (France) 1987 CPC @@ -8225,7 +8225,7 @@ - Autoquizzer (Fra) + Autoquizzer (France) 1986 Logistrad @@ -8251,7 +8251,7 @@ - Autoroute (Fra) + Autoroute (France) 1985 Super Jeux Amstrad - 50 programmes de jeux en Basic @@ -8306,7 +8306,7 @@ - Boulder Crash (Fra) + Boulder Crash (France) 1987 Amstar @@ -8346,7 +8346,7 @@ - Casse-Briques (Fra) + Casse-Briques (France) 1985 Hebdogiciel @@ -8361,7 +8361,7 @@ - Un Certain Regard sur le Systeme Solaire (Fra) + Un Certain Regard sur le Systeme Solaire (France) 1987 Amstrad Magazine @@ -8375,7 +8375,7 @@ - Trois Oeufs (Fra) + Trois Oeufs (France) 1991 CPC Infos @@ -8470,7 +8470,7 @@ - B.A.T. (Fra) + B.A.T. (France) 1991 Ubi Soft @@ -9022,7 +9022,7 @@ - Back to the Golden Age (Fra) + Back to the Golden Age (France) 1991 Ubi Soft @@ -9075,7 +9075,7 @@ - Bacterik Dream (Fra) + Bacterik Dream (France) 1987 Chip @@ -9099,7 +9099,7 @@ - Bactron (Fra) + Bactron (France) 1986 Loriciel @@ -9199,7 +9199,7 @@ - Bad Max (Fra) + Bad Max (France) 1985 Transoft @@ -9295,7 +9295,7 @@ - Balade A Cologne (Fra) + Balade A Cologne (France) 1989 Coktel Vision @@ -10233,7 +10233,7 @@ - The Bard's Tale (Fra) + The Bard's Tale (France) 1988 Electronic Arts @@ -10945,7 +10945,7 @@ - La Bataille d'Angleterre (Fra) + La Bataille d'Angleterre (France) 1985 P.S.S. @@ -11261,7 +11261,7 @@ - Bataille Pour Midway (Fra) + Bataille Pour Midway (France) 1985 P.S.S. @@ -12389,7 +12389,7 @@ - BIAT (Fra) + BIAT (France) 1988 MicroFutur @@ -12418,7 +12418,7 @@ - Biff (UK, Alt) + Biff (UK, alt) 1992 Beyond Belief @@ -12430,7 +12430,7 @@ - Big Band (Fra) + Big Band (France) 1986 SoftHawk @@ -52603,7 +52603,7 @@ - Macadam Bumper (Fra) + Macadam Bumper (France, alt 3) 1985 <unknown> @@ -52615,7 +52615,7 @@ - Macadam Bumper (Spa) + Macadam Bumper (Spain) 1985 <unknown> @@ -107358,7 +107358,7 @@ - Macadam Bumper (Fra, Alt) + Macadam Bumper (France, alt) 19?? <unknown> @@ -111201,9 +111201,9 @@ - Barbarian Part 2 (Georgessoft) + Barbarian Part 2 1988 - <unknown> + Georgessoft @@ -111213,9 +111213,9 @@ - Barbarian Part 2 (Georgessoft)[a] + Barbarian Part 2 (alt) 1988 - <unknown> + Georgessoft @@ -111225,9 +111225,9 @@ - Barbarian Part 3 (Des Soft) + Barbarian Part 3 1988 - <unknown> + Des Soft @@ -111573,9 +111573,9 @@ - Binky (Neil Kolban) + Binky 1985 - <unknown> + Neil Kolban @@ -111585,9 +111585,9 @@ - Binky (Neil Kolban)[a] + Binky (alt) 1985 - <unknown> + Neil Kolban @@ -111608,35 +111608,26 @@ + + - Black Land v1.1 (demo) (Bollaware)(de)(Disk 1 of 3) + Black Land v1.1 (demo) (de) 1995 - <unknown> + Bollaware + - - - - - Black Land v1.1 (demo) (Bollaware)(de)(Disk 2 of 3) - 1995 - <unknown> - + + - - - - - Black Land v1.1 (demo) (Bollaware)(de)(Disk 3 of 3) - 1995 - <unknown> - + + @@ -111669,9 +111660,9 @@ - Block Invaders (2002)(Richard Wilson) + Block Invaders (2002) 19?? - <unknown> + Richard Wilson @@ -111681,9 +111672,9 @@ - Block Invaders (2002)(Richard Wilson)[a] + Block Invaders (2002)(alt) 19?? - <unknown> + Richard Wilson @@ -113169,9 +113160,9 @@ - Continental Circus (Virgin Mastertronic) + Continental Circus 1989 - <unknown> + Virgin Mastertronic @@ -113181,9 +113172,9 @@ - Continental Circus (Virgin Mastertronic)[a] + Continental Circus (alt) 1989 - <unknown> + Virgin Mastertronic @@ -113193,9 +113184,9 @@ - Contraption (Audiogenic Software) + Contraption 1985 - <unknown> + Audiogenic Software @@ -113205,9 +113196,9 @@ - Convoy Raider (Gremlin Graphics Software)[cr ACE] + Convoy Raider (cracked by ACE) 1987 - <unknown> + Gremlin Graphics Software @@ -113217,9 +113208,9 @@ - Convoy Raider (Gremlin Graphics Software)[cr Chan-Chan] + Convoy Raider (cracked by Chan-Chan) 1987 - <unknown> + Gremlin Graphics Software @@ -113337,9 +113328,9 @@ - CORE - Cybernetic Organism Recovery Expedition (A & F Software) + CORE - Cybernetic Organism Recovery Expedition 1986 - <unknown> + A & F Software @@ -113409,9 +113400,9 @@ - Corsarios (Opera Soft) + Corsarios 1988 - <unknown> + Opera Soft @@ -113421,9 +113412,9 @@ - Corsarios (Opera Soft)[cr The Spanish Hacker & Steel Mc Kraken][t] + Corsarios [cr The Spanish Hacker & Steel Mc Kraken][t] 1988 - <unknown> + Opera Soft @@ -113457,9 +113448,9 @@ - Cosmic Shock Absurber (Martech Games) + Cosmic Shock Absurber 1987 - <unknown> + Martech Games @@ -113493,9 +113484,9 @@ - Costa Capers (Firebird Software) + Costa Capers 1985 - <unknown> + Firebird Software @@ -113589,9 +113580,9 @@ - The Covenant (PSS) + The Covenant 1985 - <unknown> + PSS @@ -113601,9 +113592,9 @@ - The Covenant (PSS)[a] + The Covenant (alt) 1985 - <unknown> + PSS @@ -113613,9 +113604,9 @@ - Cowboy Kidz (Byte-Back)[cr CBS] + Cowboy Kidz (cracked by CBS) 1990 - <unknown> + Byte-Back @@ -113637,9 +113628,9 @@ - CPC Disk-Master v1.1 (Bollaware) + CPC Disk-Master v1.1 1997 - <unknown> + Bollaware @@ -113708,47 +113699,33 @@ + + + - CPM Plus v1.0 (Amstrad)(Disk 1 of 4)[cpm version] + CPM Plus v1.0 [cpm version] 1985 - <unknown> + Amstrad + - - - - - CPM Plus v1.0 (Amstrad)(Disk 2 of 4)[cpm version] - 1985 - <unknown> - + + - - - - - CPM Plus v1.0 (Amstrad)(Disk 3 of 4)[cpm version] - 1985 - <unknown> - + + - - - - - CPM Plus v1.0 (Amstrad)(Disk 4 of 4)[cpm version] - 1985 - <unknown> - + + @@ -113984,6 +113961,7 @@ + Crash Garrett (ERE Informatique)(fr)(Disk 1 of 2) 1987 @@ -113993,14 +113971,7 @@ - - - - - Crash Garrett (ERE Informatique)(fr)(Disk 2 of 2) - 1987 - <unknown> - + @@ -114057,9 +114028,9 @@ - Crazy Cars II (Titus) + Crazy Cars II 1989 - <unknown> + Titus @@ -114069,9 +114040,9 @@ - Crazy Cars II (Titus)[a] + Crazy Cars II (alt) 1989 - <unknown> + Titus @@ -114081,9 +114052,9 @@ - Crazy Cars II (Titus)[cr The 3 Amigos] + Crazy Cars II (cracked by The 3 Amigos) 1989 - <unknown> + Titus @@ -114285,9 +114256,9 @@ - Cricket Captain (Allanson Computing) + Cricket Captain 1985 - <unknown> + Allanson Computing @@ -114297,9 +114268,9 @@ - Cricket Captain (Allanson Computing)[a] + Cricket Captain (alt) 1985 - <unknown> + Allanson Computing @@ -114405,9 +114376,9 @@ - Croco Meeting Demo 3 (Logon System) + Croco Meeting Demo 3 1991 - <unknown> + Logon System @@ -114417,9 +114388,9 @@ - Croco Meeting Demo 4 (Logon System) + Croco Meeting Demo 4 1992 - <unknown> + Logon System @@ -114429,9 +114400,9 @@ - Croco Meeting Demo 4 (Logon System)[a] + Croco Meeting Demo 4 (alt) 1992 - <unknown> + Logon System @@ -114537,9 +114508,9 @@ - Crystal Castles (US Gold) + Crystal Castles 1986 - <unknown> + US Gold @@ -114549,9 +114520,9 @@ - Crystal Castles (US Gold)[a] + Crystal Castles (alt) 1986 - <unknown> + US Gold @@ -114573,9 +114544,9 @@ - Crystal Theft (Wicca Soft) + Crystal Theft 1984 - <unknown> + Wicca Soft @@ -114765,9 +114736,9 @@ - Cyberball - Footballer in the 21st Century (Domark) + Cyberball - Footballer in the 21st Century 1990 - <unknown> + Domark @@ -114777,9 +114748,9 @@ - Cyberball - Footballer in the 21st Century (Domark)[a] + Cyberball - Footballer in the 21st Century (alt) 1990 - <unknown> + Domark @@ -115209,9 +115180,9 @@ - Danger Street (Chip) + Danger Street 1987 - <unknown> + Chip @@ -115221,9 +115192,9 @@ - Danger Street (Chip)[a] + Danger Street (alt) 1987 - <unknown> + Chip @@ -115233,9 +115204,9 @@ - Danger! Adventurer at Work! (WoW Software) + Danger! Adventurer at Work! 1991 - <unknown> + WoW Software @@ -115269,9 +115240,9 @@ - Dark Fusion (Gremlin Graphics Software) + Dark Fusion 1988 - <unknown> + Gremlin Graphics Software @@ -115281,9 +115252,9 @@ - Dark Power (Black System) + Dark Power 1989 - <unknown> + Black System @@ -115293,9 +115264,9 @@ - Dark Power (Black System)[a] + Dark Power (alt) 1989 - <unknown> + Black System @@ -115305,9 +115276,9 @@ - Dark Sceptre (Firebird Software) + Dark Sceptre 1987 - <unknown> + Firebird Software @@ -115317,9 +115288,9 @@ - Dark Side (Incentive Software) + Dark Side 1988 - <unknown> + Incentive Software @@ -115401,9 +115372,9 @@ - Dash (H. Meiler) + Dash 19?? - <unknown> + H. Meiler @@ -115413,9 +115384,9 @@ - Dash (H. Meiler)[a] + Dash (alt) 19?? - <unknown> + H. Meiler @@ -115437,9 +115408,9 @@ - Dawnssley (Top Ten Software) + Dawnssley 1987 - <unknown> + Top Ten Software @@ -115449,9 +115420,9 @@ - Daybase (Amsoft) + Daybase 1985 - <unknown> + Amsoft @@ -115569,9 +115540,9 @@ - Death Wish 3 (Gremlin Graphics Software) + Death Wish 3 1987 - <unknown> + Gremlin Graphics Software @@ -115581,9 +115552,9 @@ - Death Wish 3 (Gremlin Graphics Software)[a] + Death Wish 3 (alt) 1987 - <unknown> + Gremlin Graphics Software @@ -115605,9 +115576,9 @@ - Deathsville (Bubblebus Software) + Deathsville 1986 - <unknown> + Bubblebus Software @@ -115629,9 +115600,9 @@ - The Deep (US Gold)[cr Jose & Jorge] + The Deep (cracked by Jose & Jorge) 1989 - <unknown> + US Gold @@ -115641,9 +115612,9 @@ - Defcom (Quicksilva)[cr Redpoint] + Defcom (cracked by Redpoint) 1986 - <unknown> + Quicksilva @@ -115653,9 +115624,9 @@ - Defcom 1 (Iber Soft)[cr Steel McKracken] + Defcom 1 (craked by Steel McKracken) 1989 - <unknown> + Iber Soft @@ -115665,9 +115636,9 @@ - Defend or Die (Alligata Software) + Defend or Die 1985 - <unknown> + Alligata Software @@ -116385,9 +116356,9 @@ - Demon's Revenge (Firebird Software) + Demon's Revenge 1988 - <unknown> + Firebird Software @@ -116493,9 +116464,9 @@ - Desolator (US Gold) + Desolator 1986 - <unknown> + US Gold @@ -116505,9 +116476,9 @@ - Desolator (US Gold)[cr NPS] + Desolator (cracked by NPS) 1986 - <unknown> + US Gold @@ -116589,9 +116560,9 @@ - Devil Highway (L.M.C. Software) + Devil Highway 1987 - <unknown> + L.M.C. Software @@ -116841,9 +116812,9 @@ - Digital Orgasm (Symbiosis) + Digital Orgasm 19?? - <unknown> + Symbiosis @@ -116937,9 +116908,9 @@ - Disc Demon (Beebugsoft) + Disc Demon 19?? - <unknown> + Beebugsoft @@ -116973,9 +116944,9 @@ - Discbase v1.0 (Greyhound Software) + Discbase v1.0 1988 - <unknown> + Greyhound Software @@ -117069,9 +117040,9 @@ - Dive-Dive-Dive (Tynesoft) + Dive-Dive-Dive 1987 - <unknown> + Tynesoft @@ -117345,9 +117316,9 @@ - Doctor Who and the Mines of Terror (Micro Power) + Doctor Who and the Mines of Terror 1986 - <unknown> + Micro Power @@ -117357,9 +117328,9 @@ - Doctor Who and the Mines of Terror (Micro Power)[a] + Doctor Who and the Mines of Terror (alt) 1986 - <unknown> + Micro Power @@ -117381,9 +117352,9 @@ - Dogfight 2187 (Starlight Software) + Dogfight 2187 1987 - <unknown> + Starlight Software @@ -117393,9 +117364,9 @@ - Dogfight 2187 (Starlight Software)[a] + Dogfight 2187 (alt) 1987 - <unknown> + Starlight Software @@ -117405,9 +117376,9 @@ - Dogsbody to the Rescue (Bug-Byte Software) + Dogsbody to the Rescue 1985 - <unknown> + Bug-Byte Software @@ -117477,9 +117448,9 @@ - Don't Panic (Firebird Software) + Don't Panic 1985 - <unknown> + Firebird Software @@ -117489,9 +117460,9 @@ - Don't Panic (Firebird Software)[a] + Don't Panic (alt) 1985 - <unknown> + Firebird Software @@ -117525,9 +117496,9 @@ - Donkey Kong (Ocean Software) + Donkey Kong 1986 - <unknown> + Ocean Software @@ -117537,9 +117508,9 @@ - Donkey Kong (Ocean Software)[a] + Donkey Kong (alt) 1986 - <unknown> + Ocean Software @@ -117549,9 +117520,9 @@ - Doodle Bug (Players Software)[cr Snopsoft] + Doodle Bug (cracked by Snopsoft) 1987 - <unknown> + Players Software @@ -117573,9 +117544,9 @@ - Doomsdark's Revenge (Beyond Software) + Doomsdark's Revenge 1985 - <unknown> + Beyond Software @@ -117585,9 +117556,9 @@ - Doomsday Blues (ERE Informatique) + Doomsday Blues 1985 - <unknown> + ERE Informatique @@ -117597,9 +117568,9 @@ - Doomsday Blues (ERE Informatique)[a] + Doomsday Blues (alt) 1985 - <unknown> + ERE Informatique @@ -117609,9 +117580,9 @@ - Doors of Doom (Amsoft) + Doors of Doom 1985 - <unknown> + Amsoft @@ -117621,9 +117592,9 @@ - Doppleganger (Alligata Software) + Doppleganger 1985 - <unknown> + Alligata Software @@ -117993,9 +117964,9 @@ - Dragon's Lair (Software Projects) + Dragon's Lair 1986 - <unknown> + Software Projects @@ -118003,26 +117974,26 @@ - + - Dragon's Lair (Software Projects)[a2] + Dragon's Lair (alt) 1986 - <unknown> + Software Projects - + - + - Dragon's Lair (Software Projects)[a] + Dragon's Lair (alt 2) 1986 - <unknown> + Software Projects - + @@ -118293,9 +118264,9 @@ - Duet - Commando '87 (Elite Systems) + Duet - Commando '87 1987 - <unknown> + Elite Systems @@ -118305,9 +118276,9 @@ - Duet - Commando '87 (Elite Systems)[a] + Duet - Commando '87 (alt) 1987 - <unknown> + Elite Systems @@ -118317,9 +118288,9 @@ - Dun Darach (Gargoyle Games) + Dun Darach 1985 - <unknown> + Gargoyle Games @@ -118329,9 +118300,9 @@ - Dungeons, Amethysts, Alchemists (Atlantis Software) + Dungeons, Amethysts, Alchemists 1987 - <unknown> + Atlantis Software @@ -118365,9 +118336,9 @@ - Dynamic Duo (Firebird Software) + Dynamic Duo 1989 - <unknown> + Firebird Software @@ -118377,9 +118348,9 @@ - Dynamic Duo (Firebird Software)[a] + Dynamic Duo (alt) 1989 - <unknown> + Firebird Software @@ -118388,47 +118359,33 @@ + + + - Dynamite (Ocean Software)(Disk 1 of 2 Side A) + Dynamite 1990 - <unknown> - + Ocean Software + + - - - - - Dynamite (Ocean Software)(Disk 1 of 2 Side B) - 1990 - <unknown> - + + - - - - - Dynamite (Ocean Software)(Disk 2 of 2 Side A) - 1990 - <unknown> - + + - - - - - Dynamite (Ocean Software)(Disk 2 of 2 Side B) - 1990 - <unknown> - + + @@ -118437,9 +118394,9 @@ - Dynamite Dan (Mirrorsoft) + Dynamite Dan 1985 - <unknown> + Mirrorsoft @@ -118449,9 +118406,9 @@ - Dynamite Dan (Mirrorsoft)[a] + Dynamite Dan (alt) 1985 - <unknown> + Mirrorsoft @@ -118461,9 +118418,9 @@ - Dynamite Dan II - Dr. Blitzen and the Islands of Arcanum (Mirrorsoft) + Dynamite Dan II - Dr. Blitzen and the Islands of Arcanum 1986 - <unknown> + Mirrorsoft @@ -118473,9 +118430,9 @@ - Dynamite Dan II - Dr. Blitzen and the Islands of Arcanum (Mirrorsoft)[a] + Dynamite Dan II - Dr. Blitzen and the Islands of Arcanum (alt) 1986 - <unknown> + Mirrorsoft @@ -118689,9 +118646,9 @@ - Electric Wonderland (ERE Informatique) + Electric Wonderland 1986 - <unknown> + ERE Informatique @@ -118701,9 +118658,9 @@ - Electro Freddy (Amsoft) + Electro Freddy 1984 - <unknown> + Amsoft @@ -118713,9 +118670,9 @@ - Electro Freddy (Amsoft)[a] + Electro Freddy (alt) 1984 - <unknown> + Amsoft @@ -118737,9 +118694,9 @@ - Elevator Action (Quicksilva) + Elevator Action 1987 - <unknown> + Quicksilva @@ -118749,9 +118706,9 @@ - Elevator Action (Quicksilva)[a] + Elevator Action (alt) 1987 - <unknown> + Quicksilva @@ -118941,9 +118898,9 @@ - End Zone (Alternative Software) + End Zone 1989 - <unknown> + Alternative Software @@ -118953,9 +118910,9 @@ - End Zone (Alternative Software)[a] + End Zone (alt) 1989 - <unknown> + Alternative Software @@ -118965,9 +118922,9 @@ - Endurance (CRL Group) + Endurance 1986 - <unknown> + CRL Group @@ -118977,9 +118934,9 @@ - Endurance (CRL Group)[a] + Endurance (alt) 1986 - <unknown> + CRL Group @@ -118989,9 +118946,9 @@ - Enduro Racer (Activision) + Enduro Racer 1987 - <unknown> + Activision @@ -119001,9 +118958,9 @@ - Enduro Racer (Activision)[a] + Enduro Racer (alt) 1987 - <unknown> + Activision @@ -119661,9 +119618,9 @@ - F-15 Strike Eagle (Microprose Software) + F-15 Strike Eagle 1986 - <unknown> + Microprose Software @@ -119673,9 +119630,9 @@ - F-15 Strike Eagle (Microprose Software)[a] + F-15 Strike Eagle (alt) 1986 - <unknown> + Microprose Software @@ -119793,9 +119750,9 @@ - The Famous Five - Five on a Treasure Island (Enigma Variations) + The Famous Five - Five on a Treasure Island 1990 - <unknown> + Enigma Variations @@ -119805,9 +119762,9 @@ - The Famous Five - Five on a Treasure Island (Enigma Variations)[a] + The Famous Five - Five on a Treasure Island (alt) 1990 - <unknown> + Enigma Variations @@ -119817,9 +119774,9 @@ - Fantasia Diamond (Hewson Consultants) + Fantasia Diamond 1984 - <unknown> + Hewson Consultants @@ -119829,9 +119786,9 @@ - The Fantastic Voyage (Amsoft) + The Fantastic Voyage 1985 - <unknown> + Amsoft @@ -120309,9 +120266,9 @@ - Firetrap (Electric Dreams Software) + Firetrap 1987 - <unknown> + Electric Dreams Software @@ -120321,9 +120278,9 @@ - Firetrap (Electric Dreams Software)[a] + Firetrap (alt) 1987 - <unknown> + Electric Dreams Software @@ -120333,9 +120290,9 @@ - Firetrap (Electric Dreams Software)[cr ACS] + Firetrap (cracked by ACS) 1987 - <unknown> + Electric Dreams Software @@ -120345,9 +120302,9 @@ - Firetrap (Electric Dreams Software)[t +2] + Firetrap [t +2] 1987 - <unknown> + Electric Dreams Software @@ -120501,9 +120458,9 @@ - Five-a-Side Soccer (Mastertronic Added Dimension) + Five-a-Side Soccer 1986 - <unknown> + Mastertronic Added Dimension @@ -120513,9 +120470,9 @@ - Five-a-Side Soccer (Mastertronic Added Dimension)[a] + Five-a-Side Soccer (alt) 1986 - <unknown> + Mastertronic Added Dimension @@ -121089,9 +121046,9 @@ - Frank Bruno's Boxing (Elite Systems) + Frank Bruno's Boxing 1985 - <unknown> + Elite Systems @@ -121099,26 +121056,26 @@ - + - Frank Bruno's Boxing (Elite Systems)[a2] + Frank Bruno's Boxing (alt) 1985 - <unknown> + Elite Systems - + - + - Frank Bruno's Boxing (Elite Systems)[a] + Frank Bruno's Boxing (alt 2) 1985 - <unknown> + Elite Systems - + @@ -121269,9 +121226,9 @@ - Freedom Fighter (The Power House) + Freedom Fighter 1988 - <unknown> + The Power House @@ -121281,9 +121238,9 @@ - Freedom Fighter (The Power House)[a] + Freedom Fighter (alt) 1988 - <unknown> + The Power House @@ -121293,9 +121250,9 @@ - Fres Attack (Bollaware)(de) + Fres Attack (de) 19?? - <unknown> + Bollaware @@ -121305,9 +121262,9 @@ - Fres Man (Spiderware)(de) + Fres Man (de) 19?? - <unknown> + Spiderware @@ -121317,9 +121274,9 @@ - Frestris (Bollaware)[cr NPS] + Frestris (cracked by NPS) 1995 - <unknown> + Bollaware @@ -121329,9 +121286,9 @@ - Friday the 13th (Domark) + Friday the 13th 1986 - <unknown> + Domark @@ -121497,9 +121454,9 @@ - Fuck Double A (Speedy) + Fuck Double A 1987 - <unknown> + Speedy @@ -121509,9 +121466,9 @@ - Fuck Double A (Speedy)[a] + Fuck Double A (alt) 1987 - <unknown> + Speedy @@ -121593,9 +121550,9 @@ - The Fury (Martech Games) + The Fury 1988 - <unknown> + Martech Games @@ -121605,9 +121562,9 @@ - The Fury (Martech Games)[a] + The Fury (alt) 1988 - <unknown> + Martech Games @@ -121845,9 +121802,9 @@ - Galaxia (Kuma Computers) + Galaxia 1984 - <unknown> + Kuma Computers @@ -121857,9 +121814,9 @@ - Galaxia (Kuma Computers)[a] + Galaxia (alt) 1984 - <unknown> + Kuma Computers @@ -121905,9 +121862,9 @@ - Galaxy Force (Activision) + Galaxy Force 1989 - <unknown> + Activision @@ -121917,9 +121874,9 @@ - Galaxy Force (Activision)[a] + Galaxy Force (alt) 1989 - <unknown> + Activision @@ -121929,9 +121886,9 @@ - Galaxy Force (Activision)[cr Cafes Kid Crackers] + Galaxy Force (cracked by Cafes Kid Crackers) 1989 - <unknown> + Activision @@ -121941,9 +121898,9 @@ - Galaxy Force (Activision)[cr Two Mag][t Two Mag] + Galaxy Force [cr Two Mag][t Two Mag] 1989 - <unknown> + Activision @@ -121977,9 +121934,9 @@ - Gallitron (Mastertronic) + Gallitron 1987 - <unknown> + Mastertronic @@ -121989,9 +121946,9 @@ - Gallitron (Mastertronic)[a] + Gallitron (alt) 1987 - <unknown> + Mastertronic @@ -122001,9 +121958,9 @@ - The Game of Dragons (Amsoft) + The Game of Dragons 1985 - <unknown> + Amsoft @@ -122060,47 +122017,39 @@ + - The Games - Summer Edition (US Gold)(Disk 1 of 2) + The Games - Summer Edition 1989 - <unknown> + US Gold + + + + + + + + - The Games - Summer Edition (US Gold)(Disk 1 of 2)[cr NPS] + The Games - Summer Edition (cracked by NPS) 1989 - <unknown> + US Gold + - - - - - The Games - Summer Edition (US Gold)(Disk 2 of 2) - 1989 - <unknown> - - - - - - - - - - The Games - Summer Edition (US Gold)(Disk 2 of 2)[cr NPS] - 1989 - <unknown> - + + @@ -122109,9 +122058,9 @@ - The Games - Winter Edition (US Gold)[cr GPA] + The Games - Winter Edition (cracked by GPA) 1988 - <unknown> + US Gold @@ -122133,9 +122082,9 @@ - Garfield - Winter's Tail (The Edge Software) + Garfield - Winter's Tail 1990 - <unknown> + The Edge Software @@ -122145,9 +122094,9 @@ - Garfield - Winter's Tail (The Edge Software)[a] + Garfield - Winter's Tail (alt 2) 1990 - <unknown> + The Edge Software @@ -122157,9 +122106,9 @@ - Gary Lineker's Hot-Shot! (Gremlin Graphics Software) + Gary Lineker's Hot-Shot! 1988 - <unknown> + Gremlin Graphics Software @@ -122169,9 +122118,9 @@ - Gary Lineker's Super Skills (Gremlin Graphics Software)[cr Futuresoft] + Gary Lineker's Super Skills (cracked by Futuresoft) 1988 - <unknown> + Gremlin Graphics Software @@ -122181,9 +122130,9 @@ - Gary Lineker's Super Star Soccer (Gremlin Graphics Software) + Gary Lineker's Super Star Soccer 1987 - <unknown> + Gremlin Graphics Software @@ -122361,9 +122310,9 @@ - Gazza's Super Soccer (Empire Software) + Gazza's Super Soccer 1990 - <unknown> + Empire Software @@ -122373,9 +122322,9 @@ - Gazza's Super Soccer (Empire Software)[a] + Gazza's Super Soccer (alt) 1990 - <unknown> + Empire Software @@ -122396,6 +122345,8 @@ + + Les Geants d'Arcade 2 (Disk 1 of 3) 19?? @@ -122405,26 +122356,12 @@ - - - - - Les Geants d'Arcade 2 (Disk 2 of 3) - 19?? - <unknown> - + - - - - - Les Geants d'Arcade 2 (Disk 3 of 3) - 19?? - <unknown> - + @@ -122432,23 +122369,19 @@ + - Gemini Wing (Virgin Mastertronic)(Disk 1 of 2)[cr Ozzard] + Gemini Wing (cracked by Ozzard) 1989 - <unknown> + Virgin Mastertronic + - - - - - Gemini Wing (Virgin Mastertronic)(Disk 2 of 2)[cr Ozzard] - 1989 - <unknown> - + + @@ -122505,9 +122438,9 @@ - Geoff Capes Strongman (Martech Games) + Geoff Capes Strongman 1985 - <unknown> + Martech Games @@ -122517,9 +122450,9 @@ - Geoff Capes Strongman (Martech Games)[a] + Geoff Capes Strongman (alt) 1985 - <unknown> + Martech Games @@ -122529,9 +122462,9 @@ - GFL Championship Football (Gamestar) + GFL Championship Football 1987 - <unknown> + Gamestar @@ -122541,9 +122474,9 @@ - Ghengis Kahn (Ocean Software)[cr The Spanish Hacker] + Ghengis Kahn (cracked by The Spanish Hacker) 1991 - <unknown> + Ocean Software @@ -122553,9 +122486,9 @@ - Ghost 'n Goblins (Elite Systems) + Ghost 'n Goblins 1986 - <unknown> + Elite Systems @@ -122565,9 +122498,9 @@ - Ghost 'n Goblins (Elite Systems)[a] + Ghost 'n Goblins (alt) 1986 - <unknown> + Elite Systems @@ -122612,23 +122545,19 @@ + Ghostbusters II (Activision)(Disk 1 of 2) 1989 <unknown> + - - - - - Ghostbusters II (Activision)(Disk 2 of 2) - 1989 - <unknown> - + + @@ -122637,9 +122566,9 @@ - Ghostbusters II (Activision)[cr TNB Crackers][t] + Ghostbusters II [cr TNB Crackers][t] 1989 - <unknown> + Activision @@ -122649,9 +122578,9 @@ - Ghostbusters II (Activision)[cr XOR][t XOR] + Ghostbusters II [cr XOR][t XOR] 1989 - <unknown> + Activision @@ -122888,23 +122817,19 @@ + - Gold Hits (US Gold)(Disk 1 of 2) + Gold Hits 19?? - <unknown> + US Gold + - - - - - Gold Hits (US Gold)(Disk 2 of 2) - 19?? - <unknown> - + + @@ -122913,9 +122838,9 @@ - Gold Hunter (Stone Software) + Gold Hunter 1987 - <unknown> + Stone Software @@ -122925,9 +122850,9 @@ - Gold Hunter (Stone Software)[a] + Gold Hunter (alt) 1987 - <unknown> + Stone Software @@ -122936,47 +122861,39 @@ + - Golden Axe (Virgin Games)(Disk 1 of 2)[cr CBS] + Golden Axe (cracked by CBS) 1990 - <unknown> + Virgin Games + - - - - - Golden Axe (Virgin Games)(Disk 1 of 2)[cr XOR][t XOR] - 1990 - <unknown> - + + - + - - - Golden Axe (Virgin Games)(Disk 2 of 2)[cr CBS] + + + + Golden Axe [cr XOR][t XOR] 1990 - <unknown> + Virgin Games + - + - - - - - Golden Axe (Virgin Games)(Disk 2 of 2)[cr XOR][t XOR] - 1990 - <unknown> - + + @@ -123237,9 +123154,9 @@ - Graham Gooch's Test Cricket (Audiogenic Software) + Graham Gooch's Test Cricket 1986 - <unknown> + Audiogenic Software @@ -123249,9 +123166,9 @@ - Graham Gooch's Test Cricket (Audiogenic Software)[a] + Graham Gooch's Test Cricket (alt) 1986 - <unknown> + Audiogenic Software @@ -123297,9 +123214,9 @@ - Grand Prix 500cc 2 (Microids) + Grand Prix 500cc 2 1991 - <unknown> + Microids @@ -123309,9 +123226,9 @@ - Grand Prix 500cc 2 (Microids, Alt) + Grand Prix 500cc 2 (alt) 1991 - <unknown> + Microids @@ -123321,9 +123238,9 @@ - Grand Prix 500cc 2 (Microids)[a2] + Grand Prix 500cc 2 (alt 2) 1991 - <unknown> + Microids @@ -123333,9 +123250,9 @@ - Grand Prix 500cc 2 (Microids)[a] + Grand Prix 500cc 2 (alt 3) 1991 - <unknown> + Microids @@ -123345,9 +123262,9 @@ - Grand Prix Circuit (Accolade) + Grand Prix Circuit 1990 - <unknown> + Accolade @@ -123357,9 +123274,9 @@ - Grand Prix Driver (Britannia Software) + Grand Prix Driver 1984 - <unknown> + Britannia Software @@ -123369,9 +123286,9 @@ - Grand Prix Simulator (Codemasters) + Grand Prix Simulator 1987 - <unknown> + Codemasters @@ -123381,9 +123298,9 @@ - Grand Prix Simulator 2 (Codemasters) + Grand Prix Simulator 2 1989 - <unknown> + Codemasters @@ -123405,9 +123322,9 @@ - Grange Hill (Argus Press Software) + Grange Hill 1987 - <unknown> + Argus Press Software @@ -123417,9 +123334,9 @@ - Grange Hill (Argus Press Software)[a] + Grange Hill (alt) 1987 - <unknown> + Argus Press Software @@ -123429,9 +123346,9 @@ - Graphic Adventure Creator (Incentive Software) + Graphic Adventure Creator 1985 - <unknown> + Incentive Software @@ -123465,9 +123382,9 @@ - Great Courts (Ubi Soft)[a2] + Great Courts 1989 - <unknown> + Ubi Soft @@ -123477,9 +123394,9 @@ - Great Courts (Ubi Soft)[a] + Great Courts (alt) 1989 - <unknown> + Ubi Soft @@ -123489,9 +123406,9 @@ - The Great Escape (Ocean Software) + The Great Escape 1986 - <unknown> + Ocean Software @@ -123585,9 +123502,9 @@ - Green Beret (Imagine Software) + Green Beret 1986 - <unknown> + Imagine Software @@ -123597,9 +123514,9 @@ - Green Beret (Imagine Software)[a] + Green Beret (alt) 1986 - <unknown> + Imagine Software @@ -123609,9 +123526,9 @@ - Green Beret (Imagine Software)[cr NPS] + Green Beret (cracked by NPS) 1986 - <unknown> + Imagine Software @@ -123621,9 +123538,9 @@ - Gregory Loses his Clock (Mastertronic) + Gregory Loses his Clock 1985 - <unknown> + Mastertronic @@ -123633,9 +123550,9 @@ - Grell and Falla (Codemasters) + Grell and Falla 1992 - <unknown> + Codemasters @@ -123645,9 +123562,9 @@ - Grell and Falla (Codemasters)[cr GPA] + Grell and Falla (cracked by GPA) 1992 - <unknown> + Codemasters @@ -124161,9 +124078,9 @@ - Gutter (ERE Informatique) + Gutter 1985 - <unknown> + ERE Informatique @@ -124173,9 +124090,9 @@ - Gutter (ERE Informatique)[a] + Gutter (alt) 1985 - <unknown> + ERE Informatique @@ -124233,9 +124150,9 @@ - Hagar (Black System) + Hagar 1989 - <unknown> + Black System @@ -124245,9 +124162,9 @@ - Hagar (Black System)[a] + Hagar (alt) 1989 - <unknown> + Black System @@ -124544,23 +124461,17 @@ + - Harry & Harry - Mission Torpedo (ERE Informatique)(fr)(Disk 1 of 2) + Harry & Harry - Mission Torpedo (fr) 1986 - <unknown> + ERE Informatique - - - - - Harry & Harry - Mission Torpedo (ERE Informatique)(fr)(Disk 2 of 2) - 1986 - <unknown> - + @@ -124569,9 +124480,9 @@ - Harvey Headbanger (Firebird Software) + Harvey Headbanger 1986 - <unknown> + Firebird Software @@ -124581,9 +124492,9 @@ - Harvey Headbanger (Firebird Software)[a] + Harvey Headbanger (alt) 1986 - <unknown> + Firebird Software @@ -124629,9 +124540,9 @@ - Havoc (Players Premier Software) + Havoc 1990 - <unknown> + Players Premier Software @@ -124641,9 +124552,9 @@ - Havoc (Players Premier Software)[a] + Havoc (alt) 1990 - <unknown> + Players Premier Software @@ -124652,23 +124563,17 @@ + - Hawaii (Transoft)(fr)(Disk 1 of 2) + Hawaii (fr) 1987 - <unknown> + Transoft - - - - - Hawaii (Transoft)(fr)(Disk 2 of 2) - 1987 - <unknown> - + @@ -124881,9 +124786,9 @@ - Hero of the Golden Talisman (Mastertronic Added Dimension) + Hero of the Golden Talisman 1986 - <unknown> + Mastertronic Added Dimension @@ -124893,9 +124798,9 @@ - Hero of the Golden Talisman (Mastertronic Added Dimension)[a] + Hero of the Golden Talisman (alt) 1986 - <unknown> + Mastertronic Added Dimension @@ -125481,9 +125386,9 @@ - House of Usher (Anirog Software) + House of Usher 1984 - <unknown> + Anirog Software @@ -125493,9 +125398,9 @@ - House of Usher (Anirog Software)[a] + House of Usher (alt) 1984 - <unknown> + Anirog Software @@ -125505,9 +125410,9 @@ - How to be a Complete Bastard (Virgin Games) + How to be a Complete Bastard 1987 - <unknown> + Virgin Games @@ -125517,9 +125422,9 @@ - How to be a Hero (Mastertronic Added Dimension) + How to be a Hero 1987 - <unknown> + Mastertronic Added Dimension @@ -125649,9 +125554,9 @@ - Hunchback - The Adventure (Ocean Software) + Hunchback - The Adventure 1986 - <unknown> + Ocean Software @@ -125661,9 +125566,9 @@ - Hunchback - The Adventure (Ocean Software)[a] + Hunchback - The Adventure (alt) 1986 - <unknown> + Ocean Software @@ -125673,9 +125578,9 @@ - Hunchback II - Quasimodo's Revenge (Ocean Software) + Hunchback II - Quasimodo's Revenge 1985 - <unknown> + Ocean Software @@ -125985,9 +125890,9 @@ - Ian Botham's Test Match (Tynesoft) + Ian Botham's Test Match 1985 - <unknown> + Tynesoft @@ -125997,9 +125902,9 @@ - Ian Botham's Test Match (Tynesoft)[a] + Ian Botham's Test Match (alt) 1985 - <unknown> + Tynesoft @@ -126092,23 +125997,17 @@ + - III Guerra Mundial (Pactum)(es)(Disk 1 of 2) + III Guerra Mundial (es) 1989 - <unknown> + Pactum - - - - - III Guerra Mundial (Pactum)(es)(Disk 2 of 2) - 1989 - <unknown> - + @@ -126117,9 +126016,9 @@ - Ikari Warriors (Elite Systems) + Ikari Warriors 1988 - <unknown> + Elite Systems @@ -126129,9 +126028,9 @@ - Ikari Warriors (Elite Systems)[a] + Ikari Warriors (alt) 1988 - <unknown> + Elite Systems @@ -126141,9 +126040,9 @@ - Ikari Warriors (Elite Systems)[t +2] + Ikari Warriors [t +2] 1988 - <unknown> + Elite Systems @@ -126357,9 +126256,9 @@ - Impossible Mission (US Gold) + Impossible Mission 1985 - <unknown> + US Gold @@ -126369,9 +126268,9 @@ - Impossible Mission (US Gold)[a] + Impossible Mission (alt) 1985 - <unknown> + US Gold @@ -126381,9 +126280,9 @@ - Impossible Mission II (US Gold) + Impossible Mission II 1988 - <unknown> + US Gold @@ -126451,7 +126350,7 @@ - Indiana Jones and the Last Crusade (US Gold) + Indiana Jones and the Last Crusade 1989 US Gold @@ -126463,7 +126362,7 @@ - Indiana Jones and the Last Crusade (US Gold)[cr XOR][t +2 XOR] + Indiana Jones and the Last Crusade [cr XOR][t +2 XOR] 1989 US Gold @@ -126476,7 +126375,7 @@ - Indiana Jones and the Temple of Doom (US Gold)[a] + Indiana Jones and the Temple of Doom (alt) 1985 US Gold @@ -126489,7 +126388,7 @@ - Indiana Jones and the Temple of Doom (US Gold)[cr NPS][t NPS] + Indiana Jones and the Temple of Doom [cr NPS][t NPS] 1985 US Gold @@ -126501,9 +126400,9 @@ - Indoor Bowling (Alligata Software) + Indoor Bowling 1987 - <unknown> + Alligata Software @@ -126513,9 +126412,9 @@ - Indoor Soccer (Magnificent 7 Software)[cr Redpoint] + Indoor Soccer (cracked by Redpoint) 1986 - <unknown> + Magnificent 7 Software @@ -126525,9 +126424,9 @@ - Indoor Sports (Advance Software) + Indoor Sports 1987 - <unknown> + Advance Software @@ -126536,23 +126435,17 @@ + - Inertie (Ubi Soft)(fr)(Disk 1 of 2) + Inertie (fr) 1987 - <unknown> + Ubi Soft - - - - - Inertie (Ubi Soft)(fr)(Disk 2 of 2) - 1987 - <unknown> - + @@ -126561,9 +126454,9 @@ - Inertie (Ubi Soft)[cr NPS][t +3 NPS] + Inertie [cr NPS][t +3 NPS] 1987 - <unknown> + Ubi Soft @@ -126657,9 +126550,9 @@ - Infodroid (Denton Designs) + Infodroid 1986 - <unknown> + Denton Designs @@ -126669,9 +126562,9 @@ - Infodroid (Denton Designs)[a] + Infodroid (alt) 1986 - <unknown> + Denton Designs @@ -127678,9 +127571,9 @@ - James Debug - Le Grand Saut (Coktel Vision)[cr XOR][t XOR] + James Debug - Le Grand Saut [cr XOR][t XOR] 1987 - <unknown> + Coktel Vision @@ -127690,9 +127583,9 @@ - James Debug - Mystere de l'Ile Perdue (Coktel Vision) + James Debug - Mystere de l'Ile Perdue 1986 - <unknown> + Coktel Vision @@ -127702,9 +127595,9 @@ - James Debug - Mystere de l'Ile Perdue (Coktel Vision)[a] + James Debug - Mystere de l'Ile Perdue (alt) 1986 - <unknown> + Coktel Vision @@ -128026,9 +127919,9 @@ - Joe Blade (Players Software) + Joe Blade 1987 - <unknown> + Players Software @@ -128038,9 +127931,9 @@ - Joe Blade II (Players Software) + Joe Blade II 1988 - <unknown> + Players Software @@ -128050,9 +127943,9 @@ - Joe Blade II (Players Software)[a] + Joe Blade II (alt) 1988 - <unknown> + Players Software @@ -128062,9 +127955,9 @@ - Joe Blade III (Players Premier Software) + Joe Blade III 1989 - <unknown> + Players Premier Software @@ -128074,9 +127967,9 @@ - Joe Blade III (Players Premier Software)[cr NPS][t NPS] + Joe Blade III [cr NPS][t NPS] 1989 - <unknown> + Players Premier Software @@ -128602,9 +128495,9 @@ - Killapede (Players Software) + Killapede 1986 - <unknown> + Players Software @@ -128614,9 +128507,9 @@ - Killapede (Players Software)[a] + Killapede (alt) 1986 - <unknown> + Players Software @@ -128625,23 +128518,19 @@ + - Killed Until Dead (US Gold)(Disk 1 of 2) + Killed Until Dead 1987 - <unknown> + US Gold + - - - - - Killed Until Dead (US Gold)(Disk 2 of 2) - 1987 - <unknown> - + + @@ -128674,9 +128563,9 @@ - Killer Cobra (Peter Wiseman) + Killer Cobra 1987 - <unknown> + Peter Wiseman @@ -128686,9 +128575,9 @@ - Killer Cobra (Peter Wiseman)[a] + Killer Cobra (alt) 1987 - <unknown> + Peter Wiseman @@ -128698,9 +128587,9 @@ - Killer Gorilla (Micro Power) + Killer Gorilla 1984 - <unknown> + Micro Power @@ -128710,9 +128599,9 @@ - Killer Ring (Reaktor) + Killer Ring 1987 - <unknown> + Reaktor @@ -128722,9 +128611,9 @@ - Killer Ring (Reaktor)[a] + Killer Ring (alt) 1987 - <unknown> + Reaktor @@ -128746,9 +128635,9 @@ - Kiloroid (2002)(Richard Wilson) + Kiloroid (2002) 19?? - <unknown> + Richard Wilson @@ -128758,9 +128647,9 @@ - Kiloroid (2002)(Richard Wilson)[a] + Kiloroid (2002)(alt) 19?? - <unknown> + Richard Wilson @@ -129046,23 +128935,19 @@ + - Knight Orc (Rainbird Software)(Disk 1 of 2) + Knight Orc 1987 - <unknown> + Rainbird Software + - - - - - Knight Orc (Rainbird Software)(Disk 2 of 2) - 1987 - <unknown> - + + @@ -129071,9 +128956,9 @@ - Knight Rider (Ocean Software) + Knight Rider 1986 - <unknown> + Ocean Software @@ -129083,9 +128968,9 @@ - Knight Rider (Ocean Software)[a] + Knight Rider (alt) 1986 - <unknown> + Ocean Software @@ -129191,9 +129076,9 @@ - Konami's Ping Pong (Imagine Software) + Konami's Ping Pong 1986 - <unknown> + Imagine Software @@ -129201,26 +129086,26 @@ - + - Konami's Ping Pong (Imagine Software)[a2] + Konami's Ping Pong (alt) 1986 - <unknown> + Imagine Software - + - + - Konami's Ping Pong (Imagine Software)[a] + Konami's Ping Pong (alt 2) 1986 - <unknown> + Imagine Software - + @@ -129756,9 +129641,9 @@ - Leaderboard Tournament (US Gold) + Leaderboard Tournament 1987 - <unknown> + US Gold @@ -129766,26 +129651,26 @@ - + - Leaderboard Tournament (US Gold)[a2] + Leaderboard Tournament (alt) 1987 - <unknown> + US Gold - + - + - Leaderboard Tournament (US Gold)[a] + Leaderboard Tournament (alt 2) 1987 - <unknown> + US Gold - + @@ -130488,9 +130373,9 @@ - The Lost Phirious - The Planets (Vidipix) + The Lost Phirious - The Planets 1986 - <unknown> + Vidipix @@ -130500,9 +130385,9 @@ - Lotus Esprit Turbo Challenge (Gremlin Graphics Software) + Lotus Esprit Turbo Challenge 1990 - <unknown> + Gremlin Graphics Software @@ -130512,9 +130397,9 @@ - Lotus Esprit Turbo Challenge (Gremlin Graphics Software)[a] + Lotus Esprit Turbo Challenge (alt) 1990 - <unknown> + Gremlin Graphics Software @@ -130535,23 +130420,17 @@ + - Lucky Luke - Nitroglycerine (Coktel Vision)(es)(Disk 1 of 2)[cpm version] + Lucky Luke - Nitroglycerine (Spain)[cpm version] 1987 - <unknown> + Coktel Vision - - - - - Lucky Luke - Nitroglycerine (Coktel Vision)(es)(Disk 2 of 2)[cpm version] - 1987 - <unknown> - + @@ -130559,23 +130438,17 @@ + - Lucky Luke - Nitroglycerine (Coktel Vision)(fr)(Disk 1 of 2)[cpm version] + Lucky Luke - Nitroglycerine (France)[cpm version] 1987 - <unknown> + Coktel Vision - - - - - Lucky Luke - Nitroglycerine (Coktel Vision)(fr)(Disk 2 of 2)[cpm version] - 1987 - <unknown> - + @@ -130620,9 +130493,9 @@ - Macadam Bumper (PSS)(fr) + Macadam Bumper (France) 1985 - <unknown> + PSS @@ -130632,9 +130505,9 @@ - Macadam Bumper (PSS) + Macadam Bumper 1985 - <unknown> + PSS @@ -130644,9 +130517,9 @@ - Macadam Bumper (PSS)[a] + Macadam Bumper (alt) 1985 - <unknown> + PSS @@ -130824,9 +130697,9 @@ - Mag Max - Robo Centurion (Imagine Software) + Mag Max - Robo Centurion 1987 - <unknown> + Imagine Software @@ -130836,9 +130709,9 @@ - Maggot Splat (J. Charlesworth) + Maggot Splat 19?? - <unknown> + J. Charlesworth @@ -130848,9 +130721,9 @@ - Maggot Splat (J. Charlesworth)[a] + Maggot Splat (alt) 19?? - <unknown> + J. Charlesworth @@ -131328,9 +131201,9 @@ - Marble Madness Construction Set (Melbourne House) + Marble Madness Construction Set 1986 - <unknown> + Melbourne House @@ -131340,9 +131213,9 @@ - Marble Madness Construction Set (Melbourne House)[a] + Marble Madness Construction Set (alt) 1986 - <unknown> + Melbourne House @@ -131352,9 +131225,9 @@ - Marble Madness Deluxe Edition (Melbourne House) + Marble Madness Deluxe Edition 1986 - <unknown> + Melbourne House @@ -131364,9 +131237,9 @@ - Marble Madness Deluxe Edition (Melbourne House)[a] + Marble Madness Deluxe Edition (alt) 1986 - <unknown> + Melbourne House @@ -131388,9 +131261,9 @@ - Mario Bros (Ocean Software) + Mario Bros 1987 - <unknown> + Ocean Software @@ -131400,9 +131273,9 @@ - Mario Bros (Ocean Software)[a] + Mario Bros (alt) 1987 - <unknown> + Ocean Software @@ -131712,9 +131585,9 @@ - Match Day (Ocean Software) + Match Day 1985 - <unknown> + Ocean Software @@ -131724,9 +131597,9 @@ - Match Day (Ocean Software)[a] + Match Day (alt) 1985 - <unknown> + Ocean Software @@ -131736,9 +131609,9 @@ - Match Day II (Ocean Software) + Match Day II 1987 - <unknown> + Ocean Software @@ -131748,9 +131621,9 @@ - Match Day II (Ocean Software)[a] + Match Day II (alt) 1987 - <unknown> + Ocean Software @@ -171831,7 +171704,7 @@ - Macadam Bumper (Fra, Alt 2) + Macadam Bumper (France, alt 2) 1985 <unknown> @@ -194091,7 +193964,7 @@ - Continental Circus + Continental Circus (alt 2) 19?? <unknown> @@ -195171,7 +195044,7 @@ - Dark Fusion + Dark Fusion (alt) 19?? <unknown> @@ -195183,7 +195056,7 @@ - Dark Side + Dark Side (alt) 19?? <unknown> @@ -195567,7 +195440,7 @@ - Deathsville + Deathsville (alt) 19?? <unknown> @@ -197127,7 +197000,7 @@ - Donkey Kong + Donkey Kong (alt 2) 19?? <unknown> @@ -197703,7 +197576,7 @@ - Dragon's Lair + Dragon's Lair (alt 3) 19?? <unknown> @@ -198999,7 +198872,7 @@ - Fantasia Diamond + Fantasia Diamond (alt) 19?? <unknown> @@ -199299,7 +199172,7 @@ - Firetrap + Firetrap (alt 2) 19?? <unknown> @@ -199971,7 +199844,7 @@ - Galaxy Force + Galaxy Force (alt 2) 19?? <unknown> @@ -200007,7 +199880,7 @@ - Garfield - Winter's Tail + Garfield - Winter's Tail (alt) 19?? <unknown> @@ -200775,7 +200648,7 @@ - Grand Prix Circuit + Grand Prix Circuit (alt) 19?? <unknown> @@ -202155,7 +202028,7 @@ - Impossible Mission + Impossible Mission (alt 2) 19?? <unknown> @@ -202215,7 +202088,7 @@ - Indiana Jones and the Last Crusade + Indiana Jones and the Last Crusade (alt) 1989 US Gold @@ -204571,7 +204444,7 @@ - Lotus Esprit Turbo Challenge + Lotus Esprit Turbo Challenge (alt 2) 19?? <unknown> @@ -204727,7 +204600,7 @@ - Macadam Bumper + Macadam Bumper (alt 2) 19?? <unknown> diff -Nru mame-0.250+dfsg.1/hash/crvision.xml mame-0.251+dfsg.1/hash/crvision.xml --- mame-0.250+dfsg.1/hash/crvision.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/crvision.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/dai_cass.xml mame-0.251+dfsg.1/hash/dai_cass.xml --- mame-0.250+dfsg.1/hash/dai_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/dai_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/database.xml mame-0.251+dfsg.1/hash/database.xml --- mame-0.250+dfsg.1/hash/database.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/database.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/dc.xml mame-0.251+dfsg.1/hash/dc.xml --- mame-0.250+dfsg.1/hash/dc.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/dc.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/dgnbeta_flop.xml mame-0.251+dfsg.1/hash/dgnbeta_flop.xml --- mame-0.250+dfsg.1/hash/dgnbeta_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/dgnbeta_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/digiblast_cart.xml mame-0.251+dfsg.1/hash/digiblast_cart.xml --- mame-0.250+dfsg.1/hash/digiblast_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/digiblast_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,13 +1,13 @@ - + Sonic X 1 (Italy / Spain) diff -Nru mame-0.250+dfsg.1/hash/digilog320.xml mame-0.251+dfsg.1/hash/digilog320.xml --- mame-0.250+dfsg.1/hash/digilog320.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/digilog320.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ - + diff -Nru mame-0.250+dfsg.1/hash/dim68k.xml mame-0.251+dfsg.1/hash/dim68k.xml --- mame-0.250+dfsg.1/hash/dim68k.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/dim68k.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/dps1.xml mame-0.251+dfsg.1/hash/dps1.xml --- mame-0.250+dfsg.1/hash/dps1.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/dps1.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/dragon_cart.xml mame-0.251+dfsg.1/hash/dragon_cart.xml --- mame-0.250+dfsg.1/hash/dragon_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/dragon_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/easy_karaoke_cart.xml mame-0.251+dfsg.1/hash/easy_karaoke_cart.xml --- mame-0.250+dfsg.1/hash/easy_karaoke_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/easy_karaoke_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ec1841.xml mame-0.251+dfsg.1/hash/ec1841.xml --- mame-0.250+dfsg.1/hash/ec1841.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ec1841.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/einstein_rom.xml mame-0.251+dfsg.1/hash/einstein_rom.xml --- mame-0.250+dfsg.1/hash/einstein_rom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/einstein_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/einstein.xml mame-0.251+dfsg.1/hash/einstein.xml --- mame-0.250+dfsg.1/hash/einstein.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/einstein.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ekara_japan_a.xml mame-0.251+dfsg.1/hash/ekara_japan_a.xml --- mame-0.250+dfsg.1/hash/ekara_japan_a.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ekara_japan_a.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ - A-1 Pichi Pichi Pitch vol.1 (Japan) + A-1 Mermaid Melody Pichi Pichi Pitch vol.1 (Japan) 2003 Takara - + @@ -40,11 +40,24 @@ + + A-2 Mermaid Melody Pichi Pichi Pitch vol.2 (Japan) + 2003 + Takara + + + + + + + + + - A-3 Pichi Pichi Pitch vol.3 (Japan) + A-3 Mermaid Melody Pichi Pichi Pitch vol.3 (Japan) 2004 Takara - + diff -Nru mame-0.250+dfsg.1/hash/ekara_japan_bh.xml mame-0.251+dfsg.1/hash/ekara_japan_bh.xml --- mame-0.250+dfsg.1/hash/ekara_japan_bh.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ekara_japan_bh.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ekara_japan_d.xml mame-0.251+dfsg.1/hash/ekara_japan_d.xml --- mame-0.250+dfsg.1/hash/ekara_japan_d.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ekara_japan_d.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ekara_japan_gk.xml mame-0.251+dfsg.1/hash/ekara_japan_gk.xml --- mame-0.250+dfsg.1/hash/ekara_japan_gk.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ekara_japan_gk.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ekara_japan_g.xml mame-0.251+dfsg.1/hash/ekara_japan_g.xml --- mame-0.250+dfsg.1/hash/ekara_japan_g.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ekara_japan_g.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ekara_japan.xml mame-0.251+dfsg.1/hash/ekara_japan.xml --- mame-0.250+dfsg.1/hash/ekara_japan.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ekara_japan.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ekara_pal.xml mame-0.251+dfsg.1/hash/ekara_pal.xml --- mame-0.250+dfsg.1/hash/ekara_pal.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ekara_pal.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ekara_us.xml mame-0.251+dfsg.1/hash/ekara_us.xml --- mame-0.250+dfsg.1/hash/ekara_us.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ekara_us.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/electron_cart.xml mame-0.251+dfsg.1/hash/electron_cart.xml --- mame-0.250+dfsg.1/hash/electron_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/electron_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/electron_rom.xml mame-0.251+dfsg.1/hash/electron_rom.xml --- mame-0.250+dfsg.1/hash/electron_rom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/electron_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/entex_sag.xml mame-0.251+dfsg.1/hash/entex_sag.xml --- mame-0.250+dfsg.1/hash/entex_sag.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/entex_sag.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ep64_cass.xml mame-0.251+dfsg.1/hash/ep64_cass.xml --- mame-0.250+dfsg.1/hash/ep64_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ep64_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ep64_flop.xml mame-0.251+dfsg.1/hash/ep64_flop.xml --- mame-0.250+dfsg.1/hash/ep64_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ep64_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/epson_cpm.xml mame-0.251+dfsg.1/hash/epson_cpm.xml --- mame-0.250+dfsg.1/hash/epson_cpm.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/epson_cpm.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/eti660_quik.xml mame-0.251+dfsg.1/hash/eti660_quik.xml --- mame-0.250+dfsg.1/hash/eti660_quik.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/eti660_quik.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/evio.xml mame-0.251+dfsg.1/hash/evio.xml --- mame-0.250+dfsg.1/hash/evio.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/evio.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/excalibur64.xml mame-0.251+dfsg.1/hash/excalibur64.xml --- mame-0.250+dfsg.1/hash/excalibur64.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/excalibur64.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/exl100.xml mame-0.251+dfsg.1/hash/exl100.xml --- mame-0.250+dfsg.1/hash/exl100.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/exl100.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/famibox.xml mame-0.251+dfsg.1/hash/famibox.xml --- mame-0.250+dfsg.1/hash/famibox.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/famibox.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/famicom_cass.xml mame-0.251+dfsg.1/hash/famicom_cass.xml --- mame-0.250+dfsg.1/hash/famicom_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/famicom_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/famicom_flop.xml mame-0.251+dfsg.1/hash/famicom_flop.xml --- mame-0.250+dfsg.1/hash/famicom_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/famicom_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/fidel_msc.xml mame-0.251+dfsg.1/hash/fidel_msc.xml --- mame-0.250+dfsg.1/hash/fidel_msc.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/fidel_msc.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/fidel_scc.xml mame-0.251+dfsg.1/hash/fidel_scc.xml --- mame-0.250+dfsg.1/hash/fidel_scc.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/fidel_scc.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/fm77av.xml mame-0.251+dfsg.1/hash/fm77av.xml --- mame-0.250+dfsg.1/hash/fm77av.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/fm77av.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/fmtowns_cd.xml mame-0.251+dfsg.1/hash/fmtowns_cd.xml --- mame-0.250+dfsg.1/hash/fmtowns_cd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/fmtowns_cd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -2092,7 +2092,7 @@ - + @@ -4549,7 +4549,7 @@ - + @@ -9645,7 +9645,7 @@ - + diff -Nru mame-0.250+dfsg.1/hash/fmtowns_flop_cracked.xml mame-0.251+dfsg.1/hash/fmtowns_flop_cracked.xml --- mame-0.250+dfsg.1/hash/fmtowns_flop_cracked.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/fmtowns_flop_cracked.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/fmtowns_flop_misc.xml mame-0.251+dfsg.1/hash/fmtowns_flop_misc.xml --- mame-0.250+dfsg.1/hash/fmtowns_flop_misc.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/fmtowns_flop_misc.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/fmtowns_flop_orig.xml mame-0.251+dfsg.1/hash/fmtowns_flop_orig.xml --- mame-0.250+dfsg.1/hash/fmtowns_flop_orig.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/fmtowns_flop_orig.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/galaxy.xml mame-0.251+dfsg.1/hash/galaxy.xml --- mame-0.250+dfsg.1/hash/galaxy.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/galaxy.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/gamate.xml mame-0.251+dfsg.1/hash/gamate.xml --- mame-0.250+dfsg.1/hash/gamate.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/gamate.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/gameking.xml mame-0.251+dfsg.1/hash/gameking.xml --- mame-0.250+dfsg.1/hash/gameking.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/gameking.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/gba_ereader.xml mame-0.251+dfsg.1/hash/gba_ereader.xml --- mame-0.250+dfsg.1/hash/gba_ereader.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/gba_ereader.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/gbcolor.xml mame-0.251+dfsg.1/hash/gbcolor.xml --- mame-0.250+dfsg.1/hash/gbcolor.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/gbcolor.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/gimix.xml mame-0.251+dfsg.1/hash/gimix.xml --- mame-0.250+dfsg.1/hash/gimix.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/gimix.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/gj4000.xml mame-0.251+dfsg.1/hash/gj4000.xml --- mame-0.250+dfsg.1/hash/gj4000.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/gj4000.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/gjmovie.xml mame-0.251+dfsg.1/hash/gjmovie.xml --- mame-0.250+dfsg.1/hash/gjmovie.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/gjmovie.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/gjrstar.xml mame-0.251+dfsg.1/hash/gjrstar.xml --- mame-0.250+dfsg.1/hash/gjrstar.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/gjrstar.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/gl2000.xml mame-0.251+dfsg.1/hash/gl2000.xml --- mame-0.250+dfsg.1/hash/gl2000.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/gl2000.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/gl6000sl.xml mame-0.251+dfsg.1/hash/gl6000sl.xml --- mame-0.250+dfsg.1/hash/gl6000sl.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/gl6000sl.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/glcolor.xml mame-0.251+dfsg.1/hash/glcolor.xml --- mame-0.250+dfsg.1/hash/glcolor.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/glcolor.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/glcx.xml mame-0.251+dfsg.1/hash/glcx.xml --- mame-0.250+dfsg.1/hash/glcx.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/glcx.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/gln.xml mame-0.251+dfsg.1/hash/gln.xml --- mame-0.250+dfsg.1/hash/gln.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/gln.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/gls.xml mame-0.251+dfsg.1/hash/gls.xml --- mame-0.250+dfsg.1/hash/gls.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/gls.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/gmaster.xml mame-0.251+dfsg.1/hash/gmaster.xml --- mame-0.250+dfsg.1/hash/gmaster.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/gmaster.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/guab.xml mame-0.251+dfsg.1/hash/guab.xml --- mame-0.250+dfsg.1/hash/guab.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/guab.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/gx4000.xml mame-0.251+dfsg.1/hash/gx4000.xml --- mame-0.250+dfsg.1/hash/gx4000.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/gx4000.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/h21.xml mame-0.251+dfsg.1/hash/h21.xml --- mame-0.250+dfsg.1/hash/h21.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/h21.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/horizon.xml mame-0.251+dfsg.1/hash/horizon.xml --- mame-0.250+dfsg.1/hash/horizon.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/horizon.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/hp85_rom.xml mame-0.251+dfsg.1/hash/hp85_rom.xml --- mame-0.250+dfsg.1/hash/hp85_rom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/hp85_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/hp86_rom.xml mame-0.251+dfsg.1/hash/hp86_rom.xml --- mame-0.250+dfsg.1/hash/hp86_rom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/hp86_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/hp9825b_rom.xml mame-0.251+dfsg.1/hash/hp9825b_rom.xml --- mame-0.250+dfsg.1/hash/hp9825b_rom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/hp9825b_rom.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ - - - - - - - 9885 ROM for 9825 - 1976 - Hewlett-Packard - - - - - - - - - - 9885/9895 ROM for 9825 - 1980 - Hewlett-Packard - - - - - - - - - - SSS mass storage ROM - 1984 - Structured Software Systems - - - - - - - - - - Matrix ROM for 9825 - 1976 - Hewlett-Packard - - - - - - - - diff -Nru mame-0.250+dfsg.1/hash/hp9825_rom.xml mame-0.251+dfsg.1/hash/hp9825_rom.xml --- mame-0.250+dfsg.1/hash/hp9825_rom.xml 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/hash/hp9825_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,161 @@ + + + + + + + String/Advanced programming ROM for 9825 + 1976 + Hewlett-Packard + + + + + + + + + + + + + + Matrix ROM for 9825 + 1976 + Hewlett-Packard + + + + + + + + + + 9862 Plotter/Gen I/O ROM for 9825 + 1976 + Hewlett-Packard + + + + + + + + + + + + + + General/extended I/O ROM for 9825 + 1976 + Hewlett-Packard + + + + + + + + + + + + + + General/extended I/O/9862 plotter ROM for 9825 + 1976 + Hewlett-Packard + + + + + + + + + + + + + + + + + Plotter/Gen I/O ROM for 9825 + 1976 + Hewlett-Packard + + + + + + + + + + + + + + General/extended I/O/plotter ROM for 9825 + 1976 + Hewlett-Packard + + + + + + + + + + + + + + + + + 9885 ROM for 9825 + 1976 + Hewlett-Packard + + + + + + + + + + 9885/9895 ROM for 9825 + 1980 + Hewlett-Packard + + + + + + + + + + + SSS mass storage ROM + 1984 + Structured Software Systems + + + + + + + + diff -Nru mame-0.250+dfsg.1/hash/hp9831_rom.xml mame-0.251+dfsg.1/hash/hp9831_rom.xml --- mame-0.250+dfsg.1/hash/hp9831_rom.xml 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/hash/hp9831_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,35 @@ + + + + + + + Mass storage ROM for 9831 + 1977 + Hewlett-Packard + + + + + + + + + + Matrix/plotter ROM for 9831 + 1977 + Hewlett-Packard + + + + + + + + + diff -Nru mame-0.250+dfsg.1/hash/hp9835a_rom.xml mame-0.251+dfsg.1/hash/hp9835a_rom.xml --- mame-0.250+dfsg.1/hash/hp9835a_rom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/hp9835a_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/hp9845a_rom.xml mame-0.251+dfsg.1/hash/hp9845a_rom.xml --- mame-0.250+dfsg.1/hash/hp9845a_rom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/hp9845a_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/hp9845b_rom.xml mame-0.251+dfsg.1/hash/hp9845b_rom.xml --- mame-0.250+dfsg.1/hash/hp9845b_rom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/hp9845b_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/hp9k3xx_cdrom.xml mame-0.251+dfsg.1/hash/hp9k3xx_cdrom.xml --- mame-0.250+dfsg.1/hash/hp9k3xx_cdrom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/hp9k3xx_cdrom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/hp9k3xx_flop.xml mame-0.251+dfsg.1/hash/hp9k3xx_flop.xml --- mame-0.250+dfsg.1/hash/hp9k3xx_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/hp9k3xx_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/hp9k3xx_hdd.xml mame-0.251+dfsg.1/hash/hp9k3xx_hdd.xml --- mame-0.250+dfsg.1/hash/hp9k3xx_hdd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/hp9k3xx_hdd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/hp_ipc_rom.xml mame-0.251+dfsg.1/hash/hp_ipc_rom.xml --- mame-0.250+dfsg.1/hash/hp_ipc_rom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/hp_ipc_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/hp_ipc.xml mame-0.251+dfsg.1/hash/hp_ipc.xml --- mame-0.250+dfsg.1/hash/hp_ipc.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/hp_ipc.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ht68k.xml mame-0.251+dfsg.1/hash/ht68k.xml --- mame-0.250+dfsg.1/hash/ht68k.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ht68k.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/hx20_rom.xml mame-0.251+dfsg.1/hash/hx20_rom.xml --- mame-0.250+dfsg.1/hash/hx20_rom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/hx20_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/hyperscan_card.xml mame-0.251+dfsg.1/hash/hyperscan_card.xml --- mame-0.250+dfsg.1/hash/hyperscan_card.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/hyperscan_card.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/i7000_card.xml mame-0.251+dfsg.1/hash/i7000_card.xml --- mame-0.250+dfsg.1/hash/i7000_card.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/i7000_card.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ibm5150_cass.xml mame-0.251+dfsg.1/hash/ibm5150_cass.xml --- mame-0.250+dfsg.1/hash/ibm5150_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ibm5150_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ibm5150_hdd.xml mame-0.251+dfsg.1/hash/ibm5150_hdd.xml --- mame-0.250+dfsg.1/hash/ibm5150_hdd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ibm5150_hdd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ibm5150.xml mame-0.251+dfsg.1/hash/ibm5150.xml --- mame-0.250+dfsg.1/hash/ibm5150.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ibm5150.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ + @@ -193,20 +194,27 @@ Archon - The Light and the Dark 1984 Electronic Arts + + - - + Archon - The Light and the Dark (alt) 1984 Electronic Arts + @@ -216,11 +224,13 @@ - Astro-Dodge 1982 Digital Marketing Corporation + @@ -290,10 +300,13 @@ - + Big Top (cracked) 1983 Funtastic + @@ -389,6 +402,9 @@ Boulder Dash I & II 1985 Electronic Arts + @@ -448,11 +464,14 @@ - BurgerTime 1983 Mattel Electronics + @@ -582,7 +601,7 @@ - + Crypto Cube 1983 DesignWare @@ -1073,15 +1092,18 @@ - Hard Hat Mack (cracked) 1984 Electronic Arts + - + @@ -1176,6 +1198,9 @@ Inca 1985 Hayden Software + @@ -1263,6 +1288,7 @@ + King's Quest (PC Booter release, cracked) 1984 @@ -1312,7 +1338,7 @@ - + Kobayashi Naru 1987 Mastertronic @@ -1361,6 +1387,7 @@ + Lock On 1987 @@ -1374,6 +1401,7 @@ + @@ -1712,10 +1740,14 @@ - + Oil's Well 1984 Sierra + @@ -2567,7 +2599,7 @@ - Zaxxon + Zaxxon (cracked) 1984 Sega @@ -2639,7 +2671,7 @@ - Zyll + Zyll (cracked) 1984 IBM @@ -2650,12 +2682,14 @@ - - Bad Dudes (5.25") 1988 Data East + @@ -2675,6 +2709,9 @@ Bad Dudes (3.5") 1988 Data East + @@ -2861,6 +2898,30 @@ + + Bombuzal + 1989 + Image Works + + + + + + + + + + + + + + + + + + + + Bodyworks - An Adventure in Anatomy 1991 @@ -3425,14 +3486,21 @@ - + Olivetti Prodest PC1 - Per Cominciare 1987 Olivetti Prodest + - + @@ -3471,7 +3539,7 @@ - + PC Globe 3.0 1990 PC Globe, Inc @@ -3502,7 +3570,7 @@ - + PC Globe 4.0 1990 PC Globe, Inc @@ -3533,7 +3601,7 @@ - + PC Globe 5.04 1992 PC Globe, Inc @@ -3549,7 +3617,7 @@ - + PC Globe 5.0 (Spanish) 1992 Broderbund @@ -4014,9 +4082,11 @@ VisiCalc (VC-156Y0-IBM) 1981 Personal Software + - @@ -5281,6 +5351,7 @@ Concurrent DOS XM 6.0 (5.25") 1987 Digital Research + @@ -5903,23 +5974,28 @@ - + + MS-DOS (Version 3.2) (alt) 1985 Microsoft + - + - + - + @@ -6345,15 +6421,22 @@ - - Olivetti Prodest PC1 MS-DOS 3.20 / GW BASIC / Lode Runner + + + Olivetti Prodest PC1 MS-DOS 3.20 / GW BASIC / Lode Runner / Tetris 1987 Olivetti Prodest + + - + @@ -6410,8 +6493,12 @@ IBM Personal Computer DOS (Version 1.10, Master diskette) 1982 IBM + - + @@ -6428,11 +6515,16 @@ - + IBM Personal Computer DOS (Version 1.10) (Master diskette, alt) 1982 IBM + + @@ -6588,20 +6680,24 @@ - + IBM Personal Computer DOS (Version 3.00, alternate) 1984 IBM + - + - + @@ -6669,11 +6765,13 @@ - IBM Personal Computer DOS (Version 3.20, 5.25", 1986-02-21, alt) 1986 IBM + @@ -7088,11 +7186,15 @@ - Thoroughbred/OS 6.6.2-6 1987 Concept Omega + @@ -7387,6 +7489,9 @@ Mouse Software Test/Demo 1987 Mouse Systems + @@ -7412,6 +7517,10 @@ Olivetti Prodest PC1 HDU Install 1988 Olivetti Prodest + @@ -7425,8 +7534,12 @@ Olivetti Prodest PC1 Mouse Driver 1988 Olivetti Prodest + + @@ -7438,7 +7551,9 @@ SICOS Mouse 1990 SICOS - + @@ -7497,10 +7612,13 @@ - + 2400 A.D. (set 1) 1987 Origin + @@ -7711,12 +7829,17 @@ - - + + ABC's Wide World of Sports Boxing 1991 Data East - + + @@ -7734,6 +7857,7 @@ Academy - Tau Ceti 2 1987 CRL Group + @@ -7782,6 +7906,10 @@ Action Service (5.25") 1988 Infogrames + @@ -8373,12 +8501,16 @@ - + Ancient Land of Ys 1989 - Kyodia Software Marketing + Kyodai Software Marketing + - + + @@ -8398,9 +8530,12 @@ - Arcade Blockbusters! (Ghosts'n Goblins & Sarge) + Arcade Blockbusters! 1991 - Capcom + Capcom / Hi-Tech Expressions + @@ -8419,6 +8554,29 @@ + + Arcade Hits + 1991 + Hi-Tech Expressions + + + + + + + + + + + + + + + Arctic Adventure 1991 @@ -8577,11 +8735,14 @@ - Back to the Future Part III 1991 Mirrorsoft + @@ -8766,12 +8927,17 @@ - Batman: The Movie 1990 Ocean Software / Data East + @@ -9066,6 +9232,9 @@ Bobo 1988 Infogrames + @@ -9089,6 +9258,11 @@ Boulder Dash Construction Kit 1987 Epyx + @@ -9277,16 +9451,17 @@ California Pro Golf - 1988 + 1989 Mastertronic + - + - + @@ -9296,6 +9471,9 @@ Captain Blood 1988 Ere Informatique + @@ -10387,14 +10565,17 @@ - Dragons of Flame 1989 SSI + + @@ -10543,12 +10724,16 @@ - - + + Dyna Blaster 1992 Ubi Soft + + @@ -11623,8 +11808,7 @@ - - + International Soccer Challenge (Virtual Reality Vol. 1 compilation) 1990 Elite @@ -11668,12 +11852,13 @@ + - Italy '90 Soccer + Italy '90 Soccer (Italy) 1989 Simulmondo - + @@ -11767,6 +11952,7 @@ JetFighter I: The Adventure 1991 Velocity + @@ -11896,6 +12082,9 @@ Keith Van Eron's Pro Soccer (5.25") 1990 MicroProse + @@ -11908,6 +12097,9 @@ Keith Van Eron's Pro Soccer (3.5") 1990 MicroProse + @@ -11932,6 +12124,7 @@ King's Quest (DOS release) 1987 Sierra On-Line + @@ -12503,9 +12696,8 @@ - - - Lombard RAC Rally (5.25") + + Lombard RAC Rally (5.25", France) 1989 Mandarin Software @@ -12523,7 +12715,8 @@ - + + Lombard RAC Rally (3.5") 1989 Mandarin Software @@ -13075,9 +13268,9 @@ - Mega Man + Mega Man (5.25") 1990 - Capcom + Hi-Tech Expressions @@ -13085,10 +13278,21 @@ + + Mega Man (3.5") + 1990 + Hi-Tech Expressions + + + + + + + Mega Man III (5.25") 1992 - Hi Tech Expressions + Hi-Tech Expressions @@ -13104,7 +13308,7 @@ Mega Man III (3.5") 1992 - Hi Tech Expressions + Hi-Tech Expressions @@ -13152,11 +13356,13 @@ - Midwinter 1990 MicroProse + @@ -13447,9 +13653,12 @@ Olivetti Prodest PC1 Games Collection 1 1987 Olivetti Prodest + - + @@ -13459,9 +13668,12 @@ Olivetti Prodest PC1 Games Collection 6 1987 Olivetti Prodest + - + @@ -13591,11 +13803,13 @@ - Paperboy (3.5") 1988 Mindscape + @@ -13744,11 +13958,13 @@ - Pit-Fighter (The Hit Squad release) 1991 The Hit Squad + @@ -13792,6 +14008,19 @@ + + Pole Position + 1988 + Thunder Mountain + + + + + + + + + Police Quest II - The Vengeance (5.25", v1.002.011) 1989 @@ -14180,11 +14409,13 @@ - Purple Saturn Day 1989 Epyx + @@ -15039,7 +15270,15 @@ The Software Toolworks Game Pack 3 1993 The Software Toolworks + + @@ -15492,6 +15731,7 @@ Street Fighting Man 1989 Mastertronic + @@ -15504,6 +15744,23 @@ + + Street Fighting Man (alt) + 1989 + Mastertronic + + + + + + + + + + + + + 4D Sports Driving (5.25", Euro) 1991 @@ -15794,6 +16051,96 @@ + + Teenage Mutant Hero Turtles (5.25") + 1990 + Ultra Games + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Teenage Mutant Hero Turtles (Spain, 5.25") + 1990 + MCM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Teenage Mutant Hero Turtles (Spain, 3.5") + 1990 + MCM + + + + + + + + + + + + + + + + + Temple of Death (PC Disk Quarterly #9) 1991 @@ -15967,6 +16314,11 @@ Turbo Driver 1987 France Image Logiciel + + @@ -15975,11 +16327,13 @@ - + + Turbo Out Run (5.25") 1990 Sega + @@ -15997,11 +16351,12 @@ - + Turbo Out Run (3.5") 1990 Sega + @@ -16267,11 +16622,13 @@ - Wizzardz & War Lordz 1985 Ram-Tek + @@ -16501,6 +16858,68 @@ + + Zeliard (5.25") + 1990 + Sierra On-Line + + + + + + + + + + + + + + + + + + + + + + + Zeliard (3.5") + 1990 + Sierra On-Line + + + + + + + + + + + + + + + Zeliard (3.5", v2.0) + 1991 + Sierra On-Line + + + + + + + + + + + + + + Zombi @@ -16543,10 +16962,15 @@ - + 8088 MPH (Final Version) 2015 Hornet + CRTC + DESiRE + @@ -16554,7 +16978,7 @@ - + 8088 MPH (Revision 2015 Party version) 2015 Hornet + CRTC + DESiRE diff -Nru mame-0.250+dfsg.1/hash/ibm5170_cdrom.xml mame-0.251+dfsg.1/hash/ibm5170_cdrom.xml --- mame-0.250+dfsg.1/hash/ibm5170_cdrom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ibm5170_cdrom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -64,14 +64,65 @@ + + + + + 5 Plus One: Pack 10 - The Blues Brothers + 1994 + Prism Leisure Corporation PLC + + + + + + + + + + + + + + + + 5 Plus One: Pack 25 - TV Sports Football + 1994 + Prism Leisure Corporation PLC + + + + + + + + + + + - - 5 Plus One - Super Tetris (Compilation) + + 5 Plus One: Pack 34 - Super Tetris 1996 Prism Leisure Corporation PLC + + + @@ -155,9 +206,15 @@ - Activision's Atari 2600 Action Pack (Megapak 8) (Multi 5) + Activision's Atari 2600 Action Pack (Megapak 8 release) 1997 Megamedia + + + @@ -256,7 +313,7 @@ - Afterlife (US v1.1) + Afterlife (USA, v1.1) 1996 LucasArts @@ -404,7 +461,7 @@ L384 9614 05921024 B51103-30 M1S4 IFPI6100 --> - Alien Odyssey (US) + Alien Odyssey (USA) 1995 Philips / Argonaut Software LTD @@ -917,6 +974,25 @@ + + + + + The Bitmap Brothers Compilation + 1995 + Renegade Software + CD-ROM includes: "Cadaver", "Cadaver: The Payoff", "Gods", "Magic Pockets", "Speedball 2", "Xenon 2" + + + + + + + + + + + @@ -925,6 +1001,10 @@ 1994 Interplay + + + + @@ -1877,6 +1957,25 @@ + + + + + Delphine Classic Collection - Adventure + 1994 + Kixx + CD-ROM includes: "Another World", "Cruise for a Corpse", "Flashback", "Future Wars", "Operation Stealth" + + + + + + + + + + + @@ -2169,6 +2268,255 @@ + + + + + Hocus Pocus (Europe) + 1995 + Kixx XL + + + + + + + + + + + + + + + + + + Hocus Pocus (Germany) + 1994 + Apogee Software + + + + + + + + + + + + + + + + + + Hocus Pocus (Germany, shareware) + 1994 + Apogee Software + + + + + + + + + + + + + + + + + + Hocus Pocus (Spain) + 1997 + Apogee Software + + + + + + + + + + + + + + + + + + Hocus Pocus (USA) + 1995 + Apogee Software + + + + + + + + + + + + + + + + + + Hocus Pocus (USA, rerelease) + 1995 + Apogee Software + + + + + + + + + + + + + + + + + + Hocus Pocus (USA, rerelease, alt) + 1995 + Apogee Software + + + + + + + + + + + + + + + + + + Hocus Pocus (USA, mail order release) + 1997 + Apogee Software + + + + + + + + + + + + + + + + + + + + + id Anthology (rev 1) + 1996 + id Software + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id Anthology + 1996 + id Software + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Zool: Ninja of the "Nth" Dimension + 1996 + Gremlin Interactive + + + + + + + + + + + + + + + + + Zool 2 + 1994 + Gremlin Interactive + + + + + + + + + + Zyclunt diff -Nru mame-0.250+dfsg.1/hash/ibm5170_hdd.xml mame-0.251+dfsg.1/hash/ibm5170_hdd.xml --- mame-0.250+dfsg.1/hash/ibm5170_hdd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ibm5170_hdd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ibm6580.xml mame-0.251+dfsg.1/hash/ibm6580.xml --- mame-0.250+dfsg.1/hash/ibm6580.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ibm6580.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ibmpcjr_cart.xml mame-0.251+dfsg.1/hash/ibmpcjr_cart.xml --- mame-0.250+dfsg.1/hash/ibmpcjr_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ibmpcjr_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -87,6 +102,9 @@ Turbo Pascal 3.02A 1985 Borland Inc. + @@ -96,10 +114,14 @@ - + ZBasic 4.02 1987 Zedcor, Inc. + @@ -110,10 +132,15 @@ - + King's Quest 1984 Sierra + @@ -121,10 +148,15 @@ - + Touchdown Football 1984 Imagic + diff -Nru mame-0.250+dfsg.1/hash/icanguit.xml mame-0.251+dfsg.1/hash/icanguit.xml --- mame-0.250+dfsg.1/hash/icanguit.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/icanguit.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/interact.xml mame-0.251+dfsg.1/hash/interact.xml --- mame-0.250+dfsg.1/hash/interact.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/interact.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/intvecs.xml mame-0.251+dfsg.1/hash/intvecs.xml --- mame-0.250+dfsg.1/hash/intvecs.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/intvecs.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/intv.hsi mame-0.251+dfsg.1/hash/intv.hsi --- mame-0.250+dfsg.1/hash/intv.hsi 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/intv.hsi 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/hash/intv.xml mame-0.251+dfsg.1/hash/intv.xml --- mame-0.250+dfsg.1/hash/intv.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/intv.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/iq151_cart.xml mame-0.251+dfsg.1/hash/iq151_cart.xml --- mame-0.250+dfsg.1/hash/iq151_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/iq151_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/iq151_flop.xml mame-0.251+dfsg.1/hash/iq151_flop.xml --- mame-0.250+dfsg.1/hash/iq151_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/iq151_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ique.xml mame-0.251+dfsg.1/hash/ique.xml --- mame-0.250+dfsg.1/hash/ique.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ique.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/iqunlim_cart.xml mame-0.251+dfsg.1/hash/iqunlim_cart.xml --- mame-0.250+dfsg.1/hash/iqunlim_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/iqunlim_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/jakks_gamekey_dy.xml mame-0.251+dfsg.1/hash/jakks_gamekey_dy.xml --- mame-0.250+dfsg.1/hash/jakks_gamekey_dy.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/jakks_gamekey_dy.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/jakks_gamekey_mv.xml mame-0.251+dfsg.1/hash/jakks_gamekey_mv.xml --- mame-0.250+dfsg.1/hash/jakks_gamekey_mv.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/jakks_gamekey_mv.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/jakks_gamekey_nk.xml mame-0.251+dfsg.1/hash/jakks_gamekey_nk.xml --- mame-0.250+dfsg.1/hash/jakks_gamekey_nk.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/jakks_gamekey_nk.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/jakks_gamekey_nm.xml mame-0.251+dfsg.1/hash/jakks_gamekey_nm.xml --- mame-0.250+dfsg.1/hash/jakks_gamekey_nm.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/jakks_gamekey_nm.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/jakks_gamekey_sw.xml mame-0.251+dfsg.1/hash/jakks_gamekey_sw.xml --- mame-0.250+dfsg.1/hash/jakks_gamekey_sw.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/jakks_gamekey_sw.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/jazz.xml mame-0.251+dfsg.1/hash/jazz.xml --- mame-0.250+dfsg.1/hash/jazz.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/jazz.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/jb3000_flop.xml mame-0.251+dfsg.1/hash/jb3000_flop.xml --- mame-0.250+dfsg.1/hash/jb3000_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/jb3000_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/jpopira_jp.xml mame-0.251+dfsg.1/hash/jpopira_jp.xml --- mame-0.250+dfsg.1/hash/jpopira_jp.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/jpopira_jp.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/juku.xml mame-0.251+dfsg.1/hash/juku.xml --- mame-0.250+dfsg.1/hash/juku.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/juku.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/jupace_cass.xml mame-0.251+dfsg.1/hash/jupace_cass.xml --- mame-0.250+dfsg.1/hash/jupace_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/jupace_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/kaypro.xml mame-0.251+dfsg.1/hash/kaypro.xml --- mame-0.250+dfsg.1/hash/kaypro.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/kaypro.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/kc_cart.xml mame-0.251+dfsg.1/hash/kc_cart.xml --- mame-0.250+dfsg.1/hash/kc_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/kc_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/kc_cass.xml mame-0.251+dfsg.1/hash/kc_cass.xml --- mame-0.250+dfsg.1/hash/kc_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/kc_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/korvet_flop.xml mame-0.251+dfsg.1/hash/korvet_flop.xml --- mame-0.250+dfsg.1/hash/korvet_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/korvet_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/kpython2.xml mame-0.251+dfsg.1/hash/kpython2.xml --- mame-0.250+dfsg.1/hash/kpython2.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/kpython2.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/lanteach.xml mame-0.251+dfsg.1/hash/lanteach.xml --- mame-0.250+dfsg.1/hash/lanteach.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/lanteach.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/lantrans.xml mame-0.251+dfsg.1/hash/lantrans.xml --- mame-0.250+dfsg.1/hash/lantrans.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/lantrans.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/laser2001_cart.xml mame-0.251+dfsg.1/hash/laser2001_cart.xml --- mame-0.250+dfsg.1/hash/laser2001_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/laser2001_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/laser2001_flop.xml mame-0.251+dfsg.1/hash/laser2001_flop.xml --- mame-0.250+dfsg.1/hash/laser2001_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/laser2001_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/leapfrog_didj_cart.xml mame-0.251+dfsg.1/hash/leapfrog_didj_cart.xml --- mame-0.250+dfsg.1/hash/leapfrog_didj_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/leapfrog_didj_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ - + diff -Nru mame-0.250+dfsg.1/hash/leapfrog_leappad_cart.xml mame-0.251+dfsg.1/hash/leapfrog_leappad_cart.xml --- mame-0.250+dfsg.1/hash/leapfrog_leappad_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/leapfrog_leappad_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/leapfrog_ltleappad_cart.xml mame-0.251+dfsg.1/hash/leapfrog_ltleappad_cart.xml --- mame-0.250+dfsg.1/hash/leapfrog_ltleappad_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/leapfrog_ltleappad_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/leapfrog_mfleappad_cart.xml mame-0.251+dfsg.1/hash/leapfrog_mfleappad_cart.xml --- mame-0.250+dfsg.1/hash/leapfrog_mfleappad_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/leapfrog_mfleappad_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/leapfrog_zippity_cart.xml mame-0.251+dfsg.1/hash/leapfrog_zippity_cart.xml --- mame-0.250+dfsg.1/hash/leapfrog_zippity_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/leapfrog_zippity_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ + diff -Nru mame-0.250+dfsg.1/hash/leapster.xml mame-0.251+dfsg.1/hash/leapster.xml --- mame-0.250+dfsg.1/hash/leapster.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/leapster.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/lisa.xml mame-0.251+dfsg.1/hash/lisa.xml --- mame-0.250+dfsg.1/hash/lisa.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/lisa.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/lk3000.xml mame-0.251+dfsg.1/hash/lk3000.xml --- mame-0.250+dfsg.1/hash/lk3000.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/lk3000.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/lynx.xml mame-0.251+dfsg.1/hash/lynx.xml --- mame-0.250+dfsg.1/hash/lynx.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/lynx.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/m24.xml mame-0.251+dfsg.1/hash/m24.xml --- mame-0.250+dfsg.1/hash/m24.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/m24.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/m5_cart.xml mame-0.251+dfsg.1/hash/m5_cart.xml --- mame-0.250+dfsg.1/hash/m5_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/m5_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mac_flop.xml mame-0.251+dfsg.1/hash/mac_flop.xml --- mame-0.250+dfsg.1/hash/mac_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mac_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mac_hdd.xml mame-0.251+dfsg.1/hash/mac_hdd.xml --- mame-0.250+dfsg.1/hash/mac_hdd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mac_hdd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mac_hdflop.xml mame-0.251+dfsg.1/hash/mac_hdflop.xml --- mame-0.250+dfsg.1/hash/mac_hdflop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mac_hdflop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mbc200.xml mame-0.251+dfsg.1/hash/mbc200.xml --- mame-0.250+dfsg.1/hash/mbc200.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mbc200.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mbc55x.xml mame-0.251+dfsg.1/hash/mbc55x.xml --- mame-0.250+dfsg.1/hash/mbc55x.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mbc55x.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mbee_cart.xml mame-0.251+dfsg.1/hash/mbee_cart.xml --- mame-0.250+dfsg.1/hash/mbee_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mbee_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mc1502_flop.xml mame-0.251+dfsg.1/hash/mc1502_flop.xml --- mame-0.250+dfsg.1/hash/mc1502_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mc1502_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/md2_flop.xml mame-0.251+dfsg.1/hash/md2_flop.xml --- mame-0.250+dfsg.1/hash/md2_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/md2_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/megacdj.xml mame-0.251+dfsg.1/hash/megacdj.xml --- mame-0.250+dfsg.1/hash/megacdj.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/megacdj.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/megacd.xml mame-0.251+dfsg.1/hash/megacd.xml --- mame-0.250+dfsg.1/hash/megacd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/megacd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/megadriv.xml mame-0.251+dfsg.1/hash/megadriv.xml --- mame-0.250+dfsg.1/hash/megadriv.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/megadriv.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ - + @@ -1861,14 +1862,14 @@ - - - - - - - - + + + + + + + + @@ -2414,7 +2415,7 @@ - + @@ -2432,7 +2433,7 @@ - + @@ -2586,7 +2587,7 @@ - + @@ -2604,7 +2605,7 @@ - + @@ -2859,7 +2860,7 @@ - + @@ -3188,13 +3189,10 @@ - + Fun 'N Games (Europe) 1993 Sony Imagesoft - @@ -3242,7 +3240,7 @@ - + Galaxy Force II (World, rev. B) 1991 @@ -3250,6 +3248,7 @@ + @@ -4172,13 +4171,10 @@ - + Jimmy White's Whirlwind Snooker (Europe) 1991 Virgin Games - @@ -4657,13 +4653,10 @@ - + Lemmings 2 - The Tribes (Europe) 1994 Psygnosis - @@ -4756,7 +4749,7 @@ - + @@ -4983,7 +4976,7 @@ - + @@ -5015,7 +5008,7 @@ - + @@ -5517,7 +5510,7 @@ - + @@ -5543,7 +5536,7 @@ - + @@ -5808,7 +5801,7 @@ - + @@ -6427,7 +6420,7 @@ - + @@ -6495,7 +6488,7 @@ - + @@ -6603,7 +6596,7 @@ - + @@ -6704,7 +6697,7 @@ - + @@ -6869,7 +6862,7 @@ - + @@ -6969,7 +6962,7 @@ - + @@ -7078,7 +7071,7 @@ - + @@ -7096,7 +7089,7 @@ - + @@ -7114,7 +7107,7 @@ - + @@ -7132,7 +7125,7 @@ - + @@ -7178,7 +7171,7 @@ - + @@ -7263,13 +7256,10 @@ - + Shanghai II - Dragon's Eye (USA) 1994 Activision - @@ -7292,7 +7282,7 @@ - + @@ -7545,7 +7535,7 @@ - + @@ -7898,7 +7888,7 @@ - + @@ -7916,7 +7906,7 @@ - + @@ -8009,7 +7999,7 @@ - + @@ -8425,7 +8415,7 @@ - + @@ -8825,7 +8815,7 @@ - + @@ -8920,7 +8910,7 @@ - + @@ -9103,7 +9093,7 @@ - + @@ -9139,7 +9129,7 @@ - + @@ -9545,7 +9535,7 @@ - + @@ -10006,7 +9996,7 @@ - + @@ -10598,6 +10588,7 @@ + @@ -12285,7 +12276,6 @@ Sega @@ -13594,6 +13584,7 @@ Columns III - Revenge of Columns (USA) 1993 Vic Tokai + @@ -16853,10 +16844,13 @@ + Galaxy Force II (World) 1991 Sega + + @@ -18123,13 +18117,10 @@ - + Janou Touryuumon (Japan) 1993 Sega - @@ -19019,13 +19010,10 @@ - + Lemmings 2 - The Tribes (USA) 1994 Psygnosis - @@ -19236,13 +19224,10 @@ - + Lord Monarch - Tokoton Sentou Densetsu (Japan) 1994 Sega - @@ -19623,13 +19608,10 @@ - + Marble Madness (Japan) 1993 Tengen - @@ -19906,7 +19888,7 @@ - Rockman Mega World (Japan) + Rockman Mega World (Japan, SRAM) 1994 Capcom @@ -19922,23 +19904,18 @@ - - Rockman Mega World (Japan, alt) + + Rockman Mega World (Japan, EEPROM) 1994 Capcom - - + - - @@ -22327,13 +22304,10 @@ - + Nobunaga no Yabou - Haouden (Japan) 1994 Koei - @@ -22347,13 +22321,10 @@ - + Nobunaga's Ambition (USA) 1993 Koei - @@ -22364,13 +22335,10 @@ - + Nobunaga no Yabou - Zenkokuban (Japan) 1993 Koei - @@ -24541,13 +24509,10 @@ - + Richard Scarry's BusyTown (USA) 1994 Sega - @@ -26224,7 +26189,7 @@ - + @@ -26237,7 +26202,7 @@ - + @@ -26250,7 +26215,7 @@ - + @@ -26263,7 +26228,7 @@ - + @@ -26276,7 +26241,7 @@ - + @@ -26289,7 +26254,7 @@ - + @@ -26302,7 +26267,7 @@ - + @@ -30485,14 +30450,12 @@ - + Wacky Worlds (USA) 1994 Sega - - + + @@ -33673,7 +33636,7 @@ - + diff -Nru mame-0.250+dfsg.1/hash/megaduck.xml mame-0.251+dfsg.1/hash/megaduck.xml --- mame-0.250+dfsg.1/hash/megaduck.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/megaduck.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/megapc.xml mame-0.251+dfsg.1/hash/megapc.xml --- mame-0.250+dfsg.1/hash/megapc.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/megapc.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/megatech.xml mame-0.251+dfsg.1/hash/megatech.xml --- mame-0.250+dfsg.1/hash/megatech.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/megatech.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mephisto_mm2.xml mame-0.251+dfsg.1/hash/mephisto_mm2.xml --- mame-0.250+dfsg.1/hash/mephisto_mm2.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mephisto_mm2.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mephisto_mm4.xml mame-0.251+dfsg.1/hash/mephisto_mm4.xml --- mame-0.250+dfsg.1/hash/mephisto_mm4.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mephisto_mm4.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mephisto_mm5.xml mame-0.251+dfsg.1/hash/mephisto_mm5.xml --- mame-0.250+dfsg.1/hash/mephisto_mm5.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mephisto_mm5.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mephisto_smondial2.xml mame-0.251+dfsg.1/hash/mephisto_smondial2.xml --- mame-0.250+dfsg.1/hash/mephisto_smondial2.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mephisto_smondial2.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/microvision.xml mame-0.251+dfsg.1/hash/microvision.xml --- mame-0.250+dfsg.1/hash/microvision.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/microvision.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mikro80.xml mame-0.251+dfsg.1/hash/mikro80.xml --- mame-0.250+dfsg.1/hash/mikro80.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mikro80.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mikrosha_cass.xml mame-0.251+dfsg.1/hash/mikrosha_cass.xml --- mame-0.250+dfsg.1/hash/mikrosha_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mikrosha_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mindset_flop.xml mame-0.251+dfsg.1/hash/mindset_flop.xml --- mame-0.250+dfsg.1/hash/mindset_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mindset_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/misterx.xml mame-0.251+dfsg.1/hash/misterx.xml --- mame-0.250+dfsg.1/hash/misterx.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/misterx.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mk14_quik.xml mame-0.251+dfsg.1/hash/mk14_quik.xml --- mame-0.250+dfsg.1/hash/mk14_quik.xml 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mk14_quik.xml 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,51 @@ + + + + + + + + Falling Man + 1979 + Practical Electronics + + + + + + + + + + + + Invaders + 2022 + Realtime + + + + + + + + + + + + Pong + 2022 + Milan Humpolik + + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/hash/mm1_flop.xml mame-0.251+dfsg.1/hash/mm1_flop.xml --- mame-0.250+dfsg.1/hash/mm1_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mm1_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mo5_cass.xml mame-0.251+dfsg.1/hash/mo5_cass.xml --- mame-0.250+dfsg.1/hash/mo5_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mo5_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mo5_flop.xml mame-0.251+dfsg.1/hash/mo5_flop.xml --- mame-0.250+dfsg.1/hash/mo5_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mo5_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -14,7 +14,7 @@ 1985 Microsoft - + @@ -26,7 +26,7 @@ 1985 Microsoft - + @@ -38,7 +38,7 @@ 1985 Microsoft - + @@ -50,7 +50,7 @@ 1986 Triel - + @@ -62,7 +62,7 @@ 1985 France Image Logiciel (FIL) - + @@ -74,7 +74,7 @@ 1985 JD Productique - + @@ -87,7 +87,7 @@ 2012 DCsoft? - + @@ -99,12 +99,12 @@ 198? <hack> - + - + @@ -117,7 +117,7 @@ 2008 DCsoft - + @@ -131,7 +131,7 @@ 2008 DCsoft - + @@ -145,25 +145,25 @@ Thomson - E. Forler - + - + - + - + @@ -176,7 +176,7 @@ 198? <unknown> - + @@ -189,7 +189,7 @@ Microsoft - + @@ -214,7 +214,7 @@ 1986 Thomson - + @@ -227,7 +227,7 @@ 1985 CNDP - + @@ -239,7 +239,7 @@ 2015 DCsoft - + @@ -251,7 +251,7 @@ 2015 DCsoft - + @@ -263,7 +263,7 @@ 2015 DCsoft - + @@ -276,7 +276,7 @@ 2013 DCsoft - + @@ -289,7 +289,7 @@ ERE Informatique - + @@ -303,7 +303,7 @@ 2015 dcmoto.free.fr - + @@ -315,7 +315,7 @@ 2015 dcmoto.free.fr - + @@ -327,7 +327,7 @@ 2015 dcmoto.free.fr - + @@ -343,7 +343,7 @@ Titus Software - + @@ -357,7 +357,7 @@ Titus Software - + @@ -371,7 +371,7 @@ Titus Software - + @@ -383,7 +383,7 @@ 1985 Loriciels - + @@ -395,7 +395,7 @@ 1985 Loriciels - + @@ -407,7 +407,7 @@ 198? Sayasupacrew - + @@ -419,7 +419,7 @@ 198? Sayasupacrew - + @@ -431,7 +431,7 @@ 1986 Sybex - + @@ -443,13 +443,13 @@ 2015 DSSoft - + - + @@ -462,7 +462,7 @@ 2015 DSSoft - + @@ -477,7 +477,7 @@ 2015 Puls - + @@ -490,7 +490,7 @@ 2015 Puls - + @@ -504,7 +504,7 @@ 1986 Coktel Vision - + @@ -516,7 +516,7 @@ 1988 Coktel Vision - + @@ -528,7 +528,7 @@ 1987 CFAPI - + @@ -540,7 +540,7 @@ 1985 Cedic/Nathan - + @@ -552,7 +552,7 @@ 1988 Coktel Vision - + @@ -566,7 +566,7 @@ 1985 Loriciels - + @@ -578,7 +578,7 @@ 1985 Loriciels - + @@ -590,7 +590,7 @@ 1985 Infogrames - + @@ -602,7 +602,7 @@ 1987 France Image Logiciel (FIL) - + @@ -614,7 +614,7 @@ 1985 Cobrasoft - + @@ -626,7 +626,7 @@ 1987 France Image Logiciel (FIL) - + @@ -638,7 +638,7 @@ 1987 Titus Software - + @@ -650,7 +650,7 @@ 1985 TO TEK International - + @@ -662,7 +662,7 @@ 1985 TO TEK International - + @@ -674,7 +674,7 @@ 1987 SoftBook - + @@ -686,7 +686,7 @@ 1984 Loriciels - + @@ -698,7 +698,7 @@ 1985 Loriciels - + @@ -710,7 +710,7 @@ 1987 Coktel Vision - + @@ -722,7 +722,7 @@ 1987 France Image Logiciel (FIL) - + @@ -734,7 +734,7 @@ 1984 Infogrames - + @@ -746,7 +746,7 @@ 1984 Loriciels - + @@ -758,7 +758,7 @@ 1987 France Image Logiciel (FIL) - + @@ -770,7 +770,7 @@ 1985 Shift-Edition - + @@ -782,7 +782,7 @@ 1987 France Image Logiciel (FIL) - + @@ -794,7 +794,7 @@ 1986 Loriciels - + @@ -806,7 +806,7 @@ 1986 Infogrames - + @@ -814,11 +814,11 @@ - James Debug - Le Grand Saut - 1987 + James Debug - Le Grand Saut (disk hack) + 2015 Coktel Vision - + @@ -830,7 +830,7 @@ 1986 DCsoft - + @@ -842,7 +842,7 @@ 1986 DCsoft - + @@ -855,7 +855,7 @@ Infogrames - + @@ -868,7 +868,7 @@ Infogrames - + @@ -880,7 +880,7 @@ 1986 Infogrames - + @@ -892,7 +892,7 @@ 1984 Coktel Vision - + @@ -904,7 +904,7 @@ 1986 Loriciels - + @@ -916,7 +916,7 @@ 1986 Loriciels - + @@ -928,7 +928,7 @@ 1986 France Image Logiciel (FIL) - + @@ -940,7 +940,7 @@ 1986 Infogrames - + @@ -952,7 +952,7 @@ 1985 Answare - + @@ -964,7 +964,7 @@ 1986 Infogrames - + @@ -976,7 +976,7 @@ 1985 France Image Logiciel (FIL) - + @@ -988,7 +988,7 @@ 1988 France Image Logiciel (FIL) - + diff -Nru mame-0.250+dfsg.1/hash/mo5_qd.xml mame-0.251+dfsg.1/hash/mo5_qd.xml --- mame-0.250+dfsg.1/hash/mo5_qd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mo5_qd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mo6_cass.xml mame-0.251+dfsg.1/hash/mo6_cass.xml --- mame-0.250+dfsg.1/hash/mo6_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mo6_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mo6_flop.xml mame-0.251+dfsg.1/hash/mo6_flop.xml --- mame-0.250+dfsg.1/hash/mo6_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mo6_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -14,7 +14,7 @@ 1987 Loriciels - + @@ -30,7 +30,7 @@ Microids - + @@ -44,7 +44,7 @@ Microids - + @@ -58,7 +58,7 @@ <unknown> - + @@ -72,7 +72,7 @@ <unknown> - + @@ -86,7 +86,7 @@ <unknown> - + @@ -99,12 +99,12 @@ 1988 Loriciels - + - + @@ -117,7 +117,7 @@ 1988 Loriciels - + @@ -130,13 +130,13 @@ 1988 Microids - + - + @@ -151,7 +151,7 @@ Microids - + @@ -164,7 +164,7 @@ 1988 Microids - + @@ -178,13 +178,13 @@ 2014 6502man - + - + @@ -197,7 +197,7 @@ 2014 6502man - + @@ -210,7 +210,7 @@ 2014 6502man - + @@ -223,7 +223,7 @@ 2016 OliverP - + @@ -235,25 +235,25 @@ 2014 6502man - + - + - + - + @@ -266,13 +266,13 @@ 2014 6502man - + - + @@ -285,7 +285,7 @@ 2014 6502man - + @@ -300,7 +300,7 @@ 1987 Chip - + @@ -313,7 +313,7 @@ 1987 Chip - + @@ -326,7 +326,7 @@ 1987 Chip - + @@ -340,7 +340,7 @@ Microids - + @@ -353,7 +353,7 @@ 198? Chip - + @@ -366,7 +366,7 @@ 198? Chip - + @@ -379,7 +379,7 @@ 198? Chip - + @@ -393,7 +393,7 @@ Microids - + @@ -406,7 +406,7 @@ 1987 Chip - + @@ -419,7 +419,7 @@ 1987 Chip - + @@ -432,7 +432,7 @@ 1987 Chip - + @@ -445,7 +445,7 @@ 1987 Chip - + @@ -458,7 +458,7 @@ 1987 Chip - + @@ -472,7 +472,7 @@ Microids - + @@ -486,7 +486,7 @@ Microids - + @@ -500,7 +500,7 @@ Microids - + @@ -513,7 +513,7 @@ 1987 Microids - + @@ -527,7 +527,7 @@ 1987 Microids - + @@ -540,7 +540,7 @@ 1986 Chip - + @@ -553,7 +553,7 @@ 1986 Chip - + @@ -566,7 +566,7 @@ 1987 Chip - + @@ -580,7 +580,7 @@ 1987 Chip - + @@ -593,7 +593,7 @@ 1987 Chip - + @@ -605,7 +605,7 @@ 1986 Cedic/Nathan - + @@ -617,7 +617,7 @@ 198? France Image Logiciel (FIL) - + diff -Nru mame-0.250+dfsg.1/hash/mobigo_cart.xml mame-0.251+dfsg.1/hash/mobigo_cart.xml --- mame-0.250+dfsg.1/hash/mobigo_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mobigo_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/monon_color.xml mame-0.251+dfsg.1/hash/monon_color.xml --- mame-0.250+dfsg.1/hash/monon_color.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/monon_color.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ + + + + + + + FORTH-I/88 + 1985 + Multitech + + + + + + + + + + + VIP-I/88 + 1985 + Multitech + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/hash/mpu1000.xml mame-0.251+dfsg.1/hash/mpu1000.xml --- mame-0.250+dfsg.1/hash/mpu1000.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mpu1000.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mpz80.xml mame-0.251+dfsg.1/hash/mpz80.xml --- mame-0.250+dfsg.1/hash/mpz80.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mpz80.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/msx1_bee_card.xml mame-0.251+dfsg.1/hash/msx1_bee_card.xml --- mame-0.250+dfsg.1/hash/msx1_bee_card.xml 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/hash/msx1_bee_card.xml 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,153 @@ + + + + + + + + + Bomber Man Special (Japan) + 1986 + Hudson Soft + + + + + + + + + + + Jet Set Willy + 1985 + Hudson Soft + + + + + + + + + + + Pooyan (Japan) + 1985 + Hudson Soft + + + + + + + + + + + Star Force (Japan) + 1985 + Hudson Soft + + + + + + + + + + + Star Force (Japan, alt) + 1985 + Hudson Soft + + + + + + + + + + + Star Soldier (Japan) + 1986 + Hudson Soft + + + + + + + + + + + Star Soldier (Japan, alt) + 1986 + Hudson Soft + + + + + + + + + + + Takahashi Meijin no Boukenjima (Japan) + 1986 + Hudson Soft + + + + + + + + + + + Takahashi Meijin no Boukenjima (Japan, alt) + 1986 + Hudson Soft + + + + + + + + + + + Yakyuu Kyou (Japan) + 1985 + Hudson Soft + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/hash/msx1_cart.xml mame-0.251+dfsg.1/hash/msx1_cart.xml --- mame-0.250+dfsg.1/hash/msx1_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/msx1_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -316,7 +316,7 @@ - 1942 (Jpn) + 1942 (Japan) 1986 ASCII @@ -324,14 +324,14 @@ - + - Animal Land - Satsujin Jiken (Jpn) + Animal Land - Satsujin Jiken (Japan) 1987 Enix @@ -341,14 +341,14 @@ - + - Aoki Ookami to Shiroki Mejika - Genghis Khan (Jpn) + Aoki Ookami to Shiroki Mejika - Genghis Khan (Japan) 1986 Koei @@ -359,7 +359,7 @@ - + @@ -368,7 +368,7 @@ - The Black Onyx II - Search For The Fire Crystal (Jpn) + The Black Onyx II - Search For The Fire Crystal (Japan) 1986 ASCII @@ -377,13 +377,13 @@ - + - Borfes to 5-nin no Akuma - An Adventure Story (Jpn) + Borfes to 5-nin no Akuma - An Adventure Story (Japan) 1987 Xtal Soft @@ -392,13 +392,13 @@ - + - Daiva Story 4: Asura's Bloodfeud (Jpn) + Daiva Story 4: Asura's Bloodfeud (Japan) 1987 T&E Soft @@ -408,13 +408,13 @@ - + - Digital Devil Monogatari - Megami Tensei (Jpn) + Digital Devil Monogatari - Megami Tensei (Japan) 1987 Nihon Telenet @@ -423,13 +423,13 @@ - + - Dragon Quest (Jpn) + Dragon Quest (Japan) 1986 Enix @@ -439,13 +439,13 @@ - + - Dragon Quest II - Akuryou no Kamigami (Jpn) + Dragon Quest II - Akuryou no Kamigami (Japan) 1987 Enix @@ -455,13 +455,13 @@ - + - Dragon Slayer IV - Drasle Family (Jpn) + Dragon Slayer IV - Drasle Family (Japan) 1987 Nihon Falcom @@ -471,13 +471,13 @@ - + - Dungeon Hunter (Jpn) + Dungeon Hunter (Japan) 1989 ASCII @@ -486,13 +486,13 @@ - + - Fantasy Zone (Jpn) + Fantasy Zone (Japan) 1986 Pony Canyon @@ -502,14 +502,14 @@ - + - Final Zone (Jpn) + Final Zone (Japan) 1986 Nihon Telenet @@ -518,13 +518,13 @@ - + - Flight Simulator - Gyorai Kougeki (Jpn) + Flight Simulator - Gyorai Kougeki (Japan) 1988 subLOGIC @@ -534,13 +534,13 @@ - + - Gall Force - Defense of Chaos (Jpn) + Gall Force - Defense of Chaos (Japan) 1986 Sony @@ -550,13 +550,13 @@ - + - Gambler Jikochuushinha (Jpn) + Gambler Jikochuushinha (Japan) 1988 Game Arts @@ -565,13 +565,13 @@ - + - Gate of Labyrinth (Jpn) + Gate of Labyrinth (Japan) 1987 Dempa @@ -580,13 +580,13 @@ - + - Golvellius (Jpn) + Golvellius (Japan) 1987 Compile @@ -596,14 +596,14 @@ - + - Haja no Fuuin (Jpn) + Haja no Fuuin (Japan) 1987 Kogado @@ -612,13 +612,13 @@ - + - Hydlide II - Shine of Darkness (Jpn) + Hydlide II - Shine of Darkness (Japan) 1986 T&E Soft @@ -629,7 +629,7 @@ - + @@ -637,7 +637,7 @@ - Hydlide 3 - The Space Memories (Jpn) + Hydlide 3 - The Space Memories (Japan) 1987 T&E Soft @@ -647,14 +647,14 @@ - + - Jagur (Jpn) + Jagur (Japan) 1987 Hudson Soft @@ -664,13 +664,13 @@ - + - Japanese MSX-Write (Jpn) + Japanese MSX-Write (Japan) 1986 ASCII @@ -679,7 +679,7 @@ - + @@ -688,7 +688,7 @@ - Karuizawa Yuukai Annai (Jpn) + Karuizawa Yuukai Annai (Japan) 1985 Enix @@ -698,13 +698,13 @@ - + - King's Knight (Jpn) + King's Knight (Japan) 1986 Square @@ -713,14 +713,14 @@ - + - Märchen Veil I (Jpn) + Märchen Veil I (Japan) 1987 System Sacom @@ -729,13 +729,13 @@ - + - Mirai (Jpn) + Mirai (Japan) 1987 Xain Soft @@ -745,13 +745,13 @@ - + - MSX Eiwa Jiten (Jpn) + MSX Eiwa Jiten (Japan) 1989 Hi-Score Software @@ -760,14 +760,14 @@ - + - MSX-FAN Fandom Library 1 (Jpn) + MSX-FAN Fandom Library 1 (Japan) 1988 Tecnopolis @@ -776,14 +776,14 @@ - + - MSX-FAN Fandom Library 2 (Jpn) + MSX-FAN Fandom Library 2 (Japan) 1988 Tecnopolis @@ -792,14 +792,14 @@ - + - MSX-FAN Fandom Library 3 (Jpn) + MSX-FAN Fandom Library 3 (Japan) 1988 Tecnopolis @@ -809,13 +809,13 @@ - + - Mugen Senshi Valis (Jpn) + Mugen Senshi Valis (Japan) 1986 Nihon Telenet @@ -824,13 +824,13 @@ - + - Nobunaga no Yabou - Zenkokuban (Jpn) + Nobunaga no Yabou - Zenkokuban (Japan) 1987 Koei @@ -840,7 +840,7 @@ - + @@ -848,7 +848,7 @@ - Relics (Jpn) + Relics (Japan) 1986 Bothtec @@ -858,13 +858,13 @@ - + - Romancia (Jpn) + Romancia (Japan) 1987 Nihon Falcom @@ -874,7 +874,7 @@ - + @@ -887,7 +887,7 @@ kept for now until finding out what those bytes affect... --> - R-Type (Jpn) + R-Type (Japan) 1988 Irem @@ -896,7 +896,7 @@ - + @@ -904,7 +904,7 @@ - R-Type (Jpn, Alt) + R-Type (Japan, alt) 1988 Irem @@ -912,14 +912,14 @@ - + - Sangokushi (Jpn) + Sangokushi (Japan) 1986 Koei @@ -929,14 +929,14 @@ - + - Sangokushi (Jpn, Alt) + Sangokushi (Japan, alt) 1986 Koei @@ -947,14 +947,14 @@ - + - Senjou no Ookami (Jpn) + Senjou no Ookami (Japan) 1987 ASCII @@ -963,14 +963,14 @@ - + - Shougun (Jpn) + Shougun (Japan) 1987 Nihon Dexter @@ -980,7 +980,7 @@ - + @@ -988,7 +988,7 @@ - Super Laydock - Mission Striker (Jpn) + Super Laydock - Mission Striker (Japan) 1987 T&E Soft @@ -998,7 +998,7 @@ - + @@ -1014,14 +1014,14 @@ - + --> - Super Pierrot (Jpn) + Super Pierrot (Japan) 1987 Nidecom @@ -1031,7 +1031,7 @@ - + @@ -1047,7 +1047,7 @@ - + @@ -1064,7 +1064,7 @@ - + @@ -1073,7 +1073,7 @@ - Tsumego 120 (Jpn) + Tsumego 120 (Japan) 1987 Champion Soft @@ -1082,13 +1082,13 @@ - + - Vaxol (Jpn) + Vaxol (Japan) 1987 Heart Soft @@ -1098,13 +1098,13 @@ - + - Wing Man 2 - Kitakura no Fukkatsu (Jpn) + Wing Man 2 - Kitakura no Fukkatsu (Japan) 1987 Enix @@ -1113,13 +1113,13 @@ - + - Xanadu - Dragon Slayer II (Jpn) + Xanadu - Dragon Slayer II (Japan) 1987 Nihon Falcom @@ -1129,7 +1129,7 @@ - + @@ -1137,7 +1137,7 @@ - Young Sherlock - Doyle no Isan (Jpn) + Young Sherlock - Doyle no Isan (Japan) 1985 Pack-In-Video @@ -1147,7 +1147,7 @@ - + @@ -1158,114 +1158,114 @@ - 10-Yard Fight (Jpn) + 10-Yard Fight (Japan) 1986 Irem - + - 10-Yard Fight (Jpn, Alt) + 10-Yard Fight (Japan, alt) 1986 Irem - + - 1942 (Jpn, Alt) + 1942 (Japan, alt) 1986 ASCII - + - 1942 (Kor) + 1942 (Korea) 1987 Zemina - + - 3-D Golf Simulation (Jpn) + 3-D Golf Simulation (Japan) 1983 T&E Soft - + - 3-D Golf Simulation (Jpn, Alt) + 3-D Golf Simulation (Japan, alt) 1983 T&E Soft - + - 3-D Golf Simulation - High Speed (Jpn) + 3-D Golf Simulation - High Speed (Japan) 1984 T&E Soft - + - 3D Tennis (Jpn) + 3D Tennis (Japan) 1983 ASCII - + - A Life Planet - M36 - Mother Brain has been aliving (Jpn) + A Life Planet - M36 - Mother Brain has been aliving (Japan) 1987 Pixel @@ -1273,119 +1273,119 @@ - + - A Na Za - Kaleidoscope Special (Jpn) + A Na Za - Kaleidoscope Special (Japan) 1987 GA-Yume / HOT・B - + - A.E. (Jpn) + A.E. (Japan) 1982 Toshiba EMI - + - A1 Spirit - The Way to Formula-1 (Jpn) + A1 Spirit - The Way to Formula-1 (Japan) 1987 Panasoft - + - Actman (Jpn) + Actman (Japan) 1985 ASCII - + - Actman (Jpn, Alt) + Actman (Japan, alt) 1985 ASCII - + - Adven' Chuta! (Jpn) + Adven' Chuta! (Japan) 1983 MIA - + - Albatross (Jpn) + Albatross (Japan) 1986 Nihon Telenet - + - Albatross (Jpn, Alt) + Albatross (Japan, alt) 1986 Nihon Telenet - + - Alcazar - The Forgotten Fortress (Jpn) + Alcazar - The Forgotten Fortress (Japan) 1985 Pony Canyon - + @@ -1394,84 +1394,84 @@ - Alcazar - The Forgotten Fortress (Jpn, Alt) + Alcazar - The Forgotten Fortress (Japan, alt) 1985 Pony Canyon - + - Alibaba and 40 Thieves (Jpn) + Alibaba and 40 Thieves (Japan) 1984 Sony - + - Alibaba and 40 Thieves (Jpn, Alt) + Alibaba and 40 Thieves (Japan, alt) 1984 Sony - + - Alibaba and 40 Thieves (Jpn, Alt 2) + Alibaba and 40 Thieves (Japan, alt 2) 1984 Sony - + - Alien 8 (Jpn) + Alien 8 (Japan) 1987 Jaleco - + - Alien 8 (Jpn, Hacked?) + Alien 8 (Japan, hacked?) 1985 A.C.G. - + - Aliens - Alien 2 (Jpn) + Aliens - Alien 2 (Japan) 1987 Square @@ -1479,13 +1479,13 @@ - + - Aliens - Alien 2 (Jpn, Alt) + Aliens - Alien 2 (Japan, alt) 1987 Square @@ -1493,13 +1493,13 @@ - + - Aliens - Alien 2 (Jpn, Alt 2) + Aliens - Alien 2 (Japan, alt 2) 1987 Square @@ -1507,359 +1507,359 @@ - + - αRoid (Jpn) + αRoid (Japan) 1986 Pony Canyon - + - αRoid (Jpn, Alt) + αRoid (Japan, alt) 1986 Pony Canyon - + - αRoid (Kor) + αRoid (Korea) 198? Zemina - + - αSquadron (Jpn) + αSquadron (Japan) 1984 Sony - + - American Truck (Jpn) + American Truck (Japan) 1985 Nihon Telenet - + - American Truck (Jpn, Alt) + American Truck (Japan, alt) 1985 Nihon Telenet - + - American Truck (Jpn, Alt 2) + American Truck (Japan, alt 2) 1985 Nihon Telenet - + - American Truck (Kor) + American Truck (Korea) 198? Zemina - + - Angelo (Jpn) + Angelo (Japan) 1984 ASCII - + - Angelo (Jpn, Alt) + Angelo (Japan, alt) 1984 ASCII - + - Antarctic Adventure (Euro) + Antarctic Adventure (Europe) 1984 Konami - + - Antarctic Adventure (Euro, Alt) + Antarctic Adventure (Europe, alt) 1984 Konami - + - Antarctic Adventure (Jpn) + Antarctic Adventure (Japan) 1984 Konami - + - Antarctic Adventure (Kor) + Antarctic Adventure (Korea) 19?? Prosoft - + - Anty (Jpn) + Anty (Japan) 1984 ASCII - + - Anty (Jpn, Alt) + Anty (Japan, alt) 1984 ASCII - + - Aqua Polis SOS (Jpn) + Aqua Polis SOS (Japan) 1983 Paxon - + - Aquattack (Jpn) + Aquattack (Japan) 1984 Toshiba EMI - + - Aramo (Jpn) + Aramo (Japan) 1986 Sein Soft - + - Arkanoid (Euro?) + Arkanoid (Europe?) 1986 Taito ~ Imagine - + - Arkanoid (Euro?, Alt) + Arkanoid (Europe?, alt) 1986 Taito ~ Imagine - + - Arkanoid (Jpn) + Arkanoid (Japan) 1986 Taito - + - Arkanoid (Jpn, Alt) + Arkanoid (Japan, alt) 1986 Taito - + - Arkanoid (Kor) + Arkanoid (Korea) 198? Zemina - + - Astro Marine Corps (Spa) + Astro Marine Corps (Spain) 1989 Dinamic Software? - + - Athletic Ball (Jpn) + Athletic Ball (Japan) 1984 ASCII - + - Athletic Land (Jpn) + Athletic Land (Japan) 1984 Konami - + - Athletic Land (Jpn, Alt) + Athletic Land (Japan, alt) 1984 Konami - + - Athletic Land (Jpn, Prototype) + Athletic Land (Japan, prototype) 1984 Konami - + @@ -1868,224 +1868,212 @@ - Attack Four - VolleyBall (Jpn) + Attack Four - VolleyBall (Japan) 1986 Pax Softonica - + - B.C.'s Quest (Jpn) + B.C.'s Quest (Japan) 1985 Toshiba EMI - + - B.C.'s Quest (Jpn, Alt) + B.C.'s Quest (Japan, alt) 1985 Toshiba EMI - + - Back to the Future (Jpn) + Back to the Future (Japan) 1986 Pony Canyon - + - Back to the Future (Jpn, Alt) + Back to the Future (Japan, alt) 1986 Pony Canyon - - - - - - - - Backgammon (Euro) - 1984 - Electric Software - - - + - Back Gammon (Jpn) + Back Gammon (Japan) 1984 Sony - + - Back Gammon (Jpn, Alt) + Back Gammon (Japan, alt) 1984 Sony - + - Balance (Jpn) + Balance (Japan) 1985 HAL Kenkyuujo - + - Balance (Jpn, Alt) + Balance (Japan, alt) 1985 HAL Kenkyuujo - + - Balance (Jpn, Alt 2) + Balance (Japan, alt 2) 1985 HAL Kenkyuujo - + - Balance (Jpn, Alt 3) + Balance (Japan, alt 3) 1985 HAL Kenkyuujo - + - Balance (Jpn, Alt 4) + Balance (Japan, alt 4) 1985 HAL Kenkyuujo - + - Banana (Jpn) + Banana (Japan) 19?? Studio GEN - + - Bank Panic (Jpn) + Bank Panic (Japan) 1986 Pony Canyon - + - Bank Panic (Jpn, Alt) + Bank Panic (Japan, alt) 1986 Pony Canyon - + - Bank Panic (Kor) + Bank Panic (Korea) 19?? Prosoft - + - Basic Nyuumon (Jpn) + Basic Nyuumon (Japan) 1984 Casio @@ -2099,7 +2087,7 @@ - BASIC Nyuumon II - Programming-hen (Jpn) + BASIC Nyuumon II - Programming-hen (Japan) 1985 Casio @@ -2112,7 +2100,7 @@ - Batman (Jpn) + Batman (Japan) 1987 Pack-In-Video @@ -2120,112 +2108,112 @@ - + - Batten Tanuki no Daibouken (Jpn, v1.03) + Batten Tanuki no Daibouken (Japan, v1.03) 1986 Tecno Soft - + - Batten Tanuki no Daibouken (Jpn) + Batten Tanuki no Daibouken (Japan) 1986 Tecno Soft - + - Batten Tanuki no Daibouken (Jpn, Alt) + Batten Tanuki no Daibouken (Japan, alt) 1986 Tecno Soft - + - Battle Cross (Jpn) + Battle Cross (Japan) 1984 Sony - + - Battleship Clapton II (Jpn) + Battleship Clapton II (Japan) 1984 T&E Soft - + - Battleship Clapton II (Jpn, Alt) + Battleship Clapton II (Japan, alt) 1984 T&E Soft - + - Beach-Head (Euro) + Beach-Head (Europe) 19?? Access Software? - + - Beam Rider (Jpn) + Beam Rider (Japan) 1984 Pony Canyon - + @@ -2235,82 +2223,82 @@ - Becky (Jpn) + Becky (Japan) 1983 MIA - + - Becky (Jpn, Alt) + Becky (Japan, alt) 1983 MIA - + - Becky (Jpn, Alt 2) + Becky (Japan, alt 2) 1983 MIA - + - Bee & Flower (Jpn) + Bee & Flower (Japan) 1983 Reizon - + - Bee & Flower (Jpn, Alt) + Bee & Flower (Japan, alt) 1983 Reizon - + - Bee & Flower (Jpn, Alt 2) + Bee & Flower (Japan, alt 2) 1983 Reizon - + - Beginner's BASIC I (Euro?) + Beginner's BASIC I (Europe?) 1985 Casio @@ -2322,13 +2310,13 @@ - The Black Onyx (Jpn) + The Black Onyx (Japan) 1985 ASCII - + @@ -2337,118 +2325,118 @@ - Blagger MSX (Jpn) + Blagger MSX (Japan) 1984 MicroCabin - + - Block Hole (Kor) + Block Hole (Korea) 1990 Zemina - + - Blockade Runner (Jpn) + Blockade Runner (Japan) 1985 Toshiba EMI - + - Boggy '84 (Jpn) + Boggy '84 (Japan) 1984 Nihon Columbia - + - Boggy '84 (Jpn, Alt) + Boggy '84 (Japan, alt) 1984 Nihon Columbia - + - Boggy '84 (Jpn, Alt 2) + Boggy '84 (Japan, alt 2) 1984 Nihon Columbia - + - Boing Boing (Spa) + Boing Boing (Spain) 1985 Sony Spain - + - Bokosuka Wars (Jpn) + Bokosuka Wars (Japan) 1984 ASCII - + - Bokosuka Wars (Jpn, Alt) + Bokosuka Wars (Japan, alt) 1984 ASCII - + - Bomber King (Jpn) + Bomber King (Japan) 1988 Hudson Soft @@ -2457,275 +2445,261 @@ - + - Bomber Man (Jpn) + Bomber Man (Japan) 1983 Hudson Soft - + - Bomber Man (Kor) + Bomber Man (Korea) 1986 Korea Soft Bank - + - Bomber Man (Kor, Alt) + Bomber Man (Korea, alt) 1986 Korea Soft Bank - - - - - - - - Bomber Man Special (Jpn) - 1986 - Hudson Soft - - - - - + - Boogie Woogi Jungle (Jpn) + Boogie Woogi Jungle (Japan) 1983 Ample Software - + - Boogie Woogi Jungle (Jpn, Alt) + Boogie Woogi Jungle (Japan, alt) 1983 Ample Software - + - Boogie Woogi Jungle (Jpn, Alt 2) + Boogie Woogi Jungle (Japan, alt 2) 1983 Ample Software - + - Boomerang (Jpn) + Boomerang (Japan) 1984 ASCII - + - Boomerang (Jpn, Alt) + Boomerang (Japan, alt) 1984 ASCII - + - Star Destroyer Bosconian (Jpn) + Star Destroyer Bosconian (Japan) 1984 Namcot - + - Star Destroyer Bosconian (Jpn, Alt) + Star Destroyer Bosconian (Japan, alt) 1984 Namcot - + - Star Destroyer Bosconian (Jpn, Alt 2) + Star Destroyer Bosconian (Japan, alt 2) 1984 Namcot - + - Bouken Roman - Dota (Jpn) + Bouken Roman - Dota (Japan) 1986 System Soft - + - Bouken Roman - Dota (Jpn, Alt) + Bouken Roman - Dota (Japan, alt) 1986 System Soft - + - Boulder Dash (Jpn) + Boulder Dash (Japan) 1985 Comptiq - + - The Brain (Jpn) + The Brain (Japan) 1983 ASCII - + - Break In (Jpn) + Break In (Japan) 1987 Jaleco - + - Break Out (Jpn) + Break Out (Japan) 1983 ASCII - + - Brother Adventure - Hyeongje Moheom (Kor) + Brother Adventure - Hyeongje Moheom (Korea) 1987 Zemina - + - Brother Adventure - Hyeongje Moheom (Kor, Alt) + Brother Adventure - Hyeongje Moheom (Korea, alt) 1987 Zemina - + - Bruce Lee (Jpn) + Bruce Lee (Japan) 1985 Comptiq - + - Burgertime (Jpn) + Burgertime (Japan) 1986 Dempa @@ -2737,507 +2711,507 @@ - Bull to Mighty Kiki Ippatsu (Jpn) + Bull to Mighty Kiki Ippatsu (Japan) 1986 HAL Kenkyuujo - + - Butam Pants (Jpn) + Butam Pants (Japan) 1983 HAL Kenkyuujo - + - Butam Pants (Jpn, Alt) + Butam Pants (Japan, alt) 1983 HAL Kenkyuujo - + - Butam Pants (Jpn, Alt 2) + Butam Pants (Japan, alt 2) 1983 HAL Kenkyuujo - + - C_So! (Jpn) + C_So! (Japan) 1985 Pony Canyon - + - C_So! (Kor) + C_So! (Korea) 198? Zemina - + - Cannon Turbo (Jpn) + Cannon Turbo (Japan) 198? Brother Kougyou - + - Cabbage Patch Kids (Jpn) + Cabbage Patch Kids (Japan) 1984 Konami - + - Cabbage Patch Kids (Jpn, Older?) + Cabbage Patch Kids (Japan, older?) 1983 Konami? - + - Cabbage Patch Kids (Kor) + Cabbage Patch Kids (Korea) 198? Zemina - + - Candoo Ninja (Jpn) + Candoo Ninja (Japan) 1984 ASCII - + - Candoo Ninja (Jpn, Alt) + Candoo Ninja (Japan, alt) 1984 ASCII - + - Cannon Ball (Jpn) + Cannon Ball (Japan) 1983 Hudson Soft - + - Cannon Ball (Jpn, Alt) + Cannon Ball (Japan, alt) 1983 Hudson Soft - + - Captain Chef (Jpn) + Captain Chef (Japan) 1984 Nihon Columbia - + - Car Fighter (Jpn) + Car Fighter (Japan) 1985 Casio - + - Car Jamboree (Jpn) + Car Jamboree (Japan) 1984 Sony - + - Car Jamboree (Jpn, Alt) + Car Jamboree (Japan, alt) 1984 Sony - + - Car-Race (Jpn) + Car-Race (Japan) 1983 Ample Software - + - Car-Race (Jpn, Alt) + Car-Race (Japan, alt) 1983 Ample Software - + - Car-Race (Jpn, Alt 2) + Car-Race (Japan, alt 2) 1983 Ample Software - + - Casio Worldopen (Jpn) + Casio Worldopen (Japan) 1985 Casio - + - Casio Worldopen (Kor) + Casio Worldopen (Korea) 1986 Boram Soft - + - The Castle (Jpn) + The Castle (Japan) 1985 ASCII - + - The Castle (Kor) + The Castle (Korea) 1987 Static Soft - + - Castle Excellent (Jpn) + Castle Excellent (Japan) 1986 ASCII - + - Castle Excellent (Jpn, Alt) + Castle Excellent (Japan, alt) 1986 ASCII - + - Chack'n Pop (Jpn) + Chack'n Pop (Japan) 1984 Taito - + - Chack'n Pop (Jpn, Alt) + Chack'n Pop (Japan, alt) 1984 Taito - + - Challenge Derby (Jpn) + Challenge Derby (Japan) 1985 Pony Canyon - + - Champion Boxing (Jpn) + Champion Boxing (Japan) 1985 Pony Canyon - + - Champion Ice Hockey (Jpn) + Champion Ice Hockey (Japan) 1986 Pony Canyon - + - Champion Kendou (Jpn) + Champion Kendou (Japan) 1986 Pony Canyon - + - Champion Kendou (Jpn, Alt) + Champion Kendou (Japan, alt) 1986 Pony Canyon - + - Champion Pro Wrestling (Jpn) + Champion Pro Wrestling (Japan) 1985 Pony Canyon - + - Champion Pro Wrestling (Jpn, Alt) + Champion Pro Wrestling (Japan, alt) 1985 Pony Canyon - + - Champion Pro Wrestling (Jpn, Alt 2) + Champion Pro Wrestling (Japan, alt 2) 1985 Pony Canyon - + - Champion Soccer (Jpn) + Champion Soccer (Japan) 1985 Pony Canyon - + - Championship Lode Runner (Jpn) + Championship Lode Runner (Japan) 1985 Sony - + - Championship Lode Runner (Kor, Bad?) + Championship Lode Runner (Korea, bad?) 19?? Prosoft - + - Championship Lode Runner (Kor, Bad 2?) + Championship Lode Runner (Korea, bad 2?) 19?? Prosoft @@ -3248,402 +3222,402 @@ - Checkers in Tan Tan Tanuki (Jpn) + Checkers in Tan Tan Tanuki (Japan) 1985 Pony Canyon - + - Chess (Jpn) + Chess (Japan) 1984 Sony - + - Choplifter (Jpn) + Choplifter (Japan) 1985 Sony - + - Choplifter (Jpn, Alt) + Choplifter (Japan, alt) 1985 Sony - + - Choplifter (Jpn, Alt 2) + Choplifter (Japan, alt 2) 1985 Sony - + - Choro Q (Jpn) + Choro Q (Japan) 1984 Taito - + - Choro Q (Jpn, Alt) + Choro Q (Japan, alt) 1984 Taito - + - Choro Q (Kor) + Choro Q (Korea) 19?? Prosoft - + - Chuugaku Hisshuu Eibunpou 1 (Jpn) + Chuugaku Hisshuu Eibunpou 1 (Japan) 1984 Stratford Computer Center - + - Circus Charlie (Jpn) + Circus Charlie (Japan) 1984 Konami - + - City Connection (Jpn) + City Connection (Japan) 1986 Nihon Dexter - + - City Connection (Jpn, Alt) + City Connection (Japan, alt) 1986 Nihon Dexter - + - Coaster Race (Jpn) + Coaster Race (Japan) 1986 Sony - + - Coaster Race (Jpn, Alt) + Coaster Race (Japan, alt) 1986 Sony - + - Coaster Race (Jpn, Alt 2) + Coaster Race (Japan, alt 2) 1986 Sony - + - Color Ball (Jpn) + Color Ball (Japan) 1984 Hudson Soft - + - Color Ball (Jpn, Alt) + Color Ball (Japan, alt) 1984 Hudson Soft - + - Color Ball (Jpn, Alt 2) + Color Ball (Japan, alt 2) 1984 Hudson Soft - + - Come On! Picot (Jpn) + Come On! Picot (Japan) 1986 Pony Canyon - + - Comecocos (Spa) + Comecocos (Spain) 198? Idealogic - + - Comet Tail (Jpn) + Comet Tail (Japan) 1983 ASCII - + - Comic Bakery (Jpn) + Comic Bakery (Japan) 1984 Konami - + - Comic Bakery (Jpn, Alt) + Comic Bakery (Japan, alt) 1984 Konami - + - Comic Bakery (Jpn, Alt 2) + Comic Bakery (Japan, alt 2) 1984 Konami - + - Computer Billiards (Jpn) + Computer Billiards (Japan) 1983 Sony - + - Computer Nyuumon (Jpn) + Computer Nyuumon (Japan) 1985 Casio - + - Othello (Jpn, Sony) + Othello (Japan, Sony) 1984 Sony - + - Othello (Jpn, Sony, Alt) + Othello (Japan, Sony, alt) 1984 Sony - + - Computer Pachinko (Jpn) + Computer Pachinko (Japan) 1984 Sony - + - Con-Dori (Jpn) + Con-Dori (Japan) 1983 Cross Talk - + - Con-Dori (Jpn, Alt) + Con-Dori (Japan, alt) 1983 Cross Talk - + - Con-Dori (Jpn, Alt 2) + Con-Dori (Japan, alt 2) 1983 Cross Talk - + @@ -3652,92 +3626,92 @@ There is a cartridge version released by Al Alamiah, but it is likely not this one. Marked as bad dump. --> - Confused? (Euro) + Confused? (Europe) 198? Eaglesoft - + - Cosmo (Jpn) + Cosmo (Japan) 1984 ASCII - + - Cosmo (Jpn, Alt) + Cosmo (Japan, alt) 1984 ASCII - + - Cosmo-Explorer (Jpn) + Cosmo-Explorer (Japan) 1985 Sony - + - Cosmo-Explorer (Jpn, Alt) + Cosmo-Explorer (Japan, alt) 1985 Sony - + - Courageous Perseus (Jpn) + Courageous Perseus (Japan) 1985 Cosmos Computer - + - Courageous Perseus (Jpn, Alt) + Courageous Perseus (Japan, alt) 1985 Cosmos Computer - + - Craze (Jpn) + Craze (Japan) 1988 Heart Soft @@ -3746,36 +3720,36 @@ - + - Crazy Bullet (Jpn) + Crazy Bullet (Japan) 1983 ASCII - + - Crazy Cars (Euro) + Crazy Cars (Europe) 1988 Titus - + - Crazy Train (Jpn) + Crazy Train (Japan) 1983 Sony @@ -3783,7 +3757,7 @@ - + @@ -3796,7 +3770,7 @@ - Crazy Train (Jpn, Alt) + Crazy Train (Japan, alt) 1983 Sony @@ -3804,7 +3778,7 @@ - + @@ -3817,7 +3791,7 @@ - Cross Blaim (Jpn) + Cross Blaim (Japan) 1986 dB-Soft @@ -3826,263 +3800,263 @@ - + - Crusader (Jpn) + Crusader (Japan) 1985 Pony Canyon - + - Crusader (Jpn, Alt) + Crusader (Japan, alt) 1985 Pony Canyon - + - Crusader (Jpn, Alt 2) + Crusader (Japan, alt 2) 1985 Pony Canyon - + - Crusader (Kor) + Crusader (Korea) 198? Clover - + - Cyborg Z (Kor) + Cyborg Z (Korea) 1991 Zemina - + - D-Day (Jpn) + D-Day (Japan) 1984 Toshiba - + - D-Day (Jpn, Alt) + D-Day (Japan, alt) 1984 Toshiba - + - D-Day (Jpn, Alt 2) + D-Day (Japan, alt 2) 1984 Toshiba - + - D-Day (Jpn, Alt 3) + D-Day (Japan, alt 3) 1984 Toshiba - + - D-Day (Kor) + D-Day (Korea) 198? San Ho - + - Dai Shougai Keiba (Jpn) + Dai Shougai Keiba (Japan) 1984 Casio - + - Dai Dassou (Jpn) + Dai Dassou (Japan) 1985 Carry Lab - + - The Dam Busters (Euro?) + The Dam Busters (Europe?) 1985 Comptiq - + - The Dam Busters (Jpn) + The Dam Busters (Japan) 1985 Comptiq - + - Danger X4 (Jpn) + Danger X4 (Japan) 1984 ASCII - + - Danger X4 (Jpn, Alt) + Danger X4 (Japan, alt) 1984 ASCII - + - Danger X4 (Jpn, Alt 2) + Danger X4 (Japan, alt 2) 1984 ASCII - + - David II (Jpn) + David II (Japan) 1984 ASCII - + - David II (Kor) + David II (Korea) 198? Zemina - + - Dawn Patrol (Jpn) + Dawn Patrol (Japan) 1986 Pony Canyon - + - Decathlon (Jpn) + Decathlon (Japan) 1984 Pony Canyon - + @@ -4091,7 +4065,7 @@ - Deep Dungeon (Jpn) + Deep Dungeon (Japan) 1988 ScapTrust @@ -4099,7 +4073,7 @@ - + @@ -4107,7 +4081,7 @@ - Deep Dungeon II - Yuushi no Monshou (Jpn) + Deep Dungeon II - Yuushi no Monshou (Japan) 1988 ScapTrust @@ -4115,7 +4089,7 @@ - + @@ -4123,7 +4097,7 @@ - The Demon Crystal (Jpn) + The Demon Crystal (Japan) 1986 Dempa @@ -4135,47 +4109,47 @@ - D.H. - Devil's Heaven (Jpn) + D.H. - Devil's Heaven (Japan) 1984 General - + - Dig Dug (Jpn) + Dig Dug (Japan) 1984 Namcot - + - Dig Dug (Jpn, Alt) + Dig Dug (Japan, alt) 1984 Namcot - + - Digital Devil Monogatari - Megami Tensei (Jpn, Alt) + Digital Devil Monogatari - Megami Tensei (Japan, alt) 1987 Nihon Telenet @@ -4183,103 +4157,103 @@ - + - Doki Doki Penguin Land (Jpn) + Doki Doki Penguin Land (Japan) 1985 Pony Canyon - + - Doki Doki Penguin Land (Jpn, Alt) + Doki Doki Penguin Land (Japan, alt) 1985 Pony Canyon - + - Doordoor (Jpn) + Doordoor (Japan) 1985 Enix - + - Dorodon (Jpn) + Dorodon (Japan) 1984 Sony - + - Double Dragon (Kor) + Double Dragon (Korea) 1989 Zemina - + - Dragon Attack (Jpn) + Dragon Attack (Japan) 1983 HAL Kenkyuujo - + - Dragon Attack (Jpn, Alt) + Dragon Attack (Japan, alt) 1983 HAL Kenkyuujo - + - Dragon Quest II (Jpn, Alt) + Dragon Quest II (Japan, alt) 1987 Enix @@ -4288,76 +4262,76 @@ - + - Dragon Slayer (Jpn) + Dragon Slayer (Japan) 1985 Square - + - Drainer (Jpn) + Drainer (Japan) 1987 Victor - + - Dungeon Master (Jpn) + Dungeon Master (Japan) 1986 ASCII - + - Dunk Shot (Jpn) + Dunk Shot (Japan) 1986 HAL Kenkyuujo - + - Dunk Shot (Jpn, Alt) + Dunk Shot (Japan, alt) 1986 HAL Kenkyuujo - + - Dynamite Bowl (Jpn) + Dynamite Bowl (Japan) 1988 Toshiba EMI @@ -4365,279 +4339,279 @@ - + - E.I. - Exa Innova (Jpn) + E.I. - Exa Innova (Japan) 1983 Sony - + - E.I. - Exa Innova (Jpn, Alt) + E.I. - Exa Innova (Japan, alt) 1983 Sony - + - Eagles 5 (Kor) + Eagles 5 (Korea) 1990 Zemina - + - Eagle Fighter (Jpn) + Eagle Fighter (Japan) 1985 Casio - + - Eagle Fighter (Jpn, Alt) + Eagle Fighter (Japan, alt) 1985 Casio - + - Eggerland Mystery (Jpn) + Eggerland Mystery (Japan) 1985 HAL Kenkyuujo - + - Elevator Action (Jpn) + Elevator Action (Japan) 1985 Nidecom - + - Erika (Jpn) + Erika (Japan) 1987 Jast - + - Exchanger (Jpn) + Exchanger (Japan) 1984 ASCII - + - Exchanger (Jpn, Alt) + Exchanger (Japan, alt) 1984 ASCII - + - Exerion (Jpn) + Exerion (Japan) 1984 Jaleco - + - Exerion (Jpn, Alt) + Exerion (Japan, alt) 1984 Jaleco - + - Exerion (Jpn, Alt 2) + Exerion (Japan, alt 2) 1984 Jaleco - + - Exerion (Kor) + Exerion (Korea) 198? Zemina - + - Exerion II - Zorni (Jpn) + Exerion II - Zorni (Japan) 1985 Toshiba EMI - + - Exerion II - Zorni (Jpn, Alt) + Exerion II - Zorni (Japan, alt) 1985 Toshiba EMI - + - Exoide-Z (Jpn) + Exoide-Z (Japan) 1986 Casio - + - Exoide-Z (Jpn, Alt) + Exoide-Z (Japan, alt) 1986 Casio - + - Exoide-Z (Jpn, Alt 2) + Exoide-Z (Japan, alt 2) 1986 Casio - + - Exoide-Z Area 5 (Jpn) + Exoide-Z Area 5 (Japan) 1986 Casio - + - Exoide-Z Area 5 (Kor) + Exoide-Z Area 5 (Korea) 198? Zemina - + - F-1 Spirit - The Way to Formula-1 (Jpn) + F-1 Spirit - The Way to Formula-1 (Japan) 1987 Konami @@ -4646,13 +4620,13 @@ - + - F-1 Spirit - The Way to Formula-1 (Jpn, Alt) + F-1 Spirit - The Way to Formula-1 (Japan, alt) 1987 Konami @@ -4661,86 +4635,86 @@ - + - F-1 Spirit - The Way to Formula-1 (Kor) + F-1 Spirit - The Way to Formula-1 (Korea) 19?? Zemina - + - F16 Fighting Falcon (Jpn) + F16 Fighting Falcon (Japan) 1985 ASCII - + - FA Tetris (Kor) + FA Tetris (Korea) 1989 FA Soft - + - FA Tetris (Kor, Alt) + FA Tetris (Korea, alt) 1989 FA Soft - + - FA Tetris (Kor, Alt 2) + FA Tetris (Korea, alt 2) 1989 FA Soft - + - Fairy (Jpn) + Fairy (Japan) 1985 ASCII - + - The Fairyland Story (Jpn) + The Fairyland Story (Japan) 1987 Hot-B @@ -4748,13 +4722,13 @@ - + - The Fairyland Story (Jpn, Alt) + The Fairyland Story (Japan, alt) 1987 Hot-B @@ -4762,503 +4736,503 @@ - + - Fantasy Zone (Kor) + Fantasy Zone (Korea) 19?? Zemina - + - Fathom (Jpn) + Fathom (Japan) 1985 Toshiba EMI - + - Final Justice (Jpn) + Final Justice (Japan) 1985 Pony Canyon - + - Final Justice (Jpn, Alt) + Final Justice (Japan, alt) 1985 Pony Canyon - + - Final Justice (Jpn, Alt 2) + Final Justice (Japan, alt 2) 1985 Pony Canyon - + - Final Mahjong (Jpn) + Final Mahjong (Japan) 1983 MIA - + - Final Zone (Kor) + Final Zone (Korea) 19?? Zemina - + - Fire Rescue (Jpn) + Fire Rescue (Japan) 1984 Hudson Soft - + - Fire Rescue (Jpn, Alt) + Fire Rescue (Japan, alt) 1984 Hudson Soft - + - Flappy (Jpn) + Flappy (Japan) 1985 dB-Soft - + - Flappy (Jpn, Alt) + Flappy (Japan, alt) 1985 dB-Soft - + - Flappy - Limited 85 (Jpn) + Flappy - Limited 85 (Japan) 1985 dB-Soft - + - Flashpoint (Kor) + Flashpoint (Korea) 1991 Zemina - + - Flashpoint (Kor, Alt) + Flashpoint (Korea, alt) 1991 Zemina - + - Flash Splash (Jpn) + Flash Splash (Japan) 1984 Toshiba EMI - + - Flicky (Jpn) + Flicky (Japan) 1986 Micronet - + - Flight Deck (Jpn) + Flight Deck (Japan) 1986 Pony Canyon - + - Flight Deck (Jpn, Alt) + Flight Deck (Japan, alt) 1986 Pony Canyon - + - Flipper Slipper (Jpn) + Flipper Slipper (Japan) 1983 ASCII - + - Flipper Slipper (Jpn, Alt) + Flipper Slipper (Japan, alt) 1983 ASCII - + - Formation Z (Jpn) + Formation Z (Japan) 1985 Nihon Dexter - + - Formation Z (Jpn, Alt) + Formation Z (Japan, alt) 1985 Nihon Dexter - + - Frogger (Jpn) + Frogger (Japan) 1983 Konami - + - Frogger (Jpn, Alt) + Frogger (Japan, alt) 1983 Konami - + - Front Line (Jpn) + Front Line (Japan) 1984 Taito - + - Front Line (Jpn, Alt) + Front Line (Japan, alt) 1984 Taito - + - Front Line (Jpn, Alt 2) + Front Line (Japan, alt 2) 1984 Taito - + - Fruit Search (Jpn) + Fruit Search (Japan) 1983 HAL Kenkyuujo - + - Fruit Search (Jpn, Alt) + Fruit Search (Japan, alt) 1983 HAL Kenkyuujo - + - Funky Mouse (Jpn) + Funky Mouse (Japan) 1984 ASCII - + - Futbol (Spa) + Futbol (Spain) 1985 Indescomp - + - Galaga (Jpn) + Galaga (Japan) 1984 Namcot - + - Galaga (Jpn, Alt) + Galaga (Japan, alt) 1984 Namcot - + - Galaga (Jpn, Alt 2) + Galaga (Japan, alt 2) 1984 Namcot - + - Galaga (Jpn, Alt 3) + Galaga (Japan, alt 3) 1984 Namcot - + - Galaga (Kor) + Galaga (Korea) 198? San Ho - + - Galaxian (Jpn) + Galaxian (Japan) 1984 Namcot - + - Galaxian (Jpn, Alt) + Galaxian (Japan, alt) 1984 Namcot - + - Galaxian (Jpn, Alt 2) + Galaxian (Japan, alt 2) 1984 Namcot - + - Gall Force - Defense of Chaos (Jpn, Alt) + Gall Force - Defense of Chaos (Japan, alt) 1986 Sony @@ -5267,13 +5241,13 @@ - + - Gall Force - Defense of Chaos (Jpn, Alt 2) + Gall Force - Defense of Chaos (Japan, alt 2) 1986 Sony @@ -5282,453 +5256,453 @@ - + - Game Land (Jpn) + Game Land (Japan) 1984 Casio - + - Game World - 126 Games (Kor) + Game World - 126 Games (Korea) 19?? Zemina - + - Game World - 126 Games (Kor, Hacked?) + Game World - 126 Games (Korea, hacked?) 19?? Zemina - + - Game World - 30 Games (Kor) + Game World - 30 Games (Korea) 19?? Zemina - + - Game World - 64 Games (Kor) + Game World - 64 Games (Korea) 19?? Zemina - + - Game World - 80 Games (Kor) + Game World - 80 Games (Korea) 19?? Zemina - + - Game World - 80 Games (Kor, Hacked?) + Game World - 80 Games (Korea, hacked?) 19?? Zemina - + - Game World - 90 Games (Kor) + Game World - 90 Games (Korea) 19?? Zemina - + - Game World - 90 Games (Kor, Alt?) + Game World - 90 Games (Korea, alt?) 19?? Zemina - + - Gang Master (Jpn) + Gang Master (Japan) 1983 ASCII - + - Ghostbusters (Jpn) + Ghostbusters (Japan) 1984 Pony Canyon - + - Glider (Jpn) + Glider (Japan) 1985 ZAP - + - Glider (Jpn, Alt) + Glider (Japan, alt) 1985 ZAP - + - Godzilla (Jpn) + Godzilla (Japan) 1984 Bandai - + - Godzilla (Jpn, Hacked?) + Godzilla (Japan, hacked?) 1984 Bandai - + - Godzilla-kun (Jpn) + Godzilla-kun (Japan) 1985 Toho - + - Godzilla-kun (Jpn, Alt) + Godzilla-kun (Japan, alt) 1985 Toho - + - Gokiburi Daisakusen (Jpn) + Gokiburi Daisakusen (Japan) 1983 Magicsoft - + - Golf Game (Jpn) + Golf Game (Japan) 1983 ASCII - + - Gomoku Narabe (Jpn) + Gomoku Narabe (Japan) 1984 Toshiba EMI - + - Gomoku Narabe (Jpn, Alt) + Gomoku Narabe (Japan, alt) 1984 Toshiba EMI - + - The Goonies (Jpn) + The Goonies (Japan) 1986 Konami - + - The Goonies (Jpn, Alt) + The Goonies (Japan, alt) 1986 Konami - + - The Goonies (Jpn, Alt 2) + The Goonies (Japan, alt 2) 1986 Konami - + - GP World (Jpn) + GP World (Japan) 1985 Pony Canyon - + - Green Beret (Euro) + Green Beret (Europe) 1986 Konami - + - Green Beret (Euro, Alt) + Green Beret (Europe, alt) 1986 Konami - + - Green Beret (Kor) + Green Beret (Korea) 1987 Zemina - + - Grog's Revenge (Jpn) + Grog's Revenge (Japan) 1985 Comptiq - + - Grog's Revenge (Jpn, Alt) + Grog's Revenge (Japan, alt) 1985 Comptiq - + - Guardic (Jpn) + Guardic (Japan) 1986 Compile - + - Guardic (Jpn, Alt) + Guardic (Japan, alt) 1986 Compile - + - Gulkave (Jpn) + Gulkave (Japan) 1986 Pony Canyon - + - Gulkave (Jpn, Alt) + Gulkave (Japan, alt) 1986 Pony Canyon - + - Gulkave (Kor) + Gulkave (Korea) 198? ProSoft - + @@ -5739,82 +5713,82 @@ Prosoft - + - Gun Fright (Jpn) + Gun Fright (Japan) 1986 Jaleco - + - Gun Fright (Jpn, Hacked?) + Gun Fright (Japan, hacked?) 1985 A.C.G. - + - Gunjin Shogi Gunshin Mars (Jpn) + Gunjin Shogi Gunshin Mars (Japan) 1986 Toshiba EMI - + - Gyrodine (Jpn) + Gyrodine (Japan) 1986 Nidecom - + - Gyrodine (Kor) + Gyrodine (Korea) 198? Zemina - + - H.E.R.O. (Jpn) + H.E.R.O. (Japan) 1984 Pony Canyon - + @@ -5823,267 +5797,267 @@ - Hanafuda (Jpn) + Hanafuda (Japan) 1985 Toshiba EMI - + - MSX Hanafuda Koi Koi (Jpn) + MSX Hanafuda Koi Koi (Japan) 1984 ASCII - + - Hang-On (Jpn) + Hang-On (Japan) 1986 Pony Canyon - + - Hang-On (Jpn, Alt) + Hang-On (Japan, alt) 1986 Pony Canyon - + - Hang-On (Jpn, Alt 2) + Hang-On (Japan, alt 2) 1986 Pony Canyon - + - Harapeko Pakkun (Jpn) + Harapeko Pakkun (Japan) 1984 ASCII - + - Heavy Boxing (Jpn) + Heavy Boxing (Japan) 1983 HAL Kenkyuujo - + - Heavy Boxing (Jpn, Alt) + Heavy Boxing (Japan, alt) 1983 HAL Kenkyuujo - + - Heavy Boxing (Kor) + Heavy Boxing (Korea) 198? Zemina - + - The Heist (Jpn) + The Heist (Japan) 1985 Comptiq - + - Helitank (Jpn) + Helitank (Japan) 1984 ASCII - + - High Way Star (Jpn) + High Way Star (Japan) 1983 ASCII - + - High Way Star (Kor) + High Way Star (Korea) 1983 Qnix - + - Hisha (Jpn) + Hisha (Japan) 1985 MicroCabin - + - Hitsuji Yaai (Jpn) + Hitsuji Yaai (Japan) 1984 Hudson Soft - + - Hole in One (Jpn) + Hole in One (Japan) 1984 HAL Kenkyuujo - + - Hole in One (Jpn, Alt) + Hole in One (Japan, alt) 1984 HAL Kenkyuujo - + - Hole in One (Jpn, Alt 2) + Hole in One (Japan, alt 2) 1984 HAL Kenkyuujo - + - Hole in One (Jpn, Alt 3) + Hole in One (Japan, alt 3) 1984 HAL Kenkyuujo - + - Hole in One Professional (Jpn) + Hole in One Professional (Japan) 1985 HAL Kenkyuujo - + - Hole in One Professional (Jpn, Alt) + Hole in One Professional (Japan, alt) 1985 HAL Kenkyuujo - + @@ -6092,45 +6066,45 @@ There is a cartridge version released by Al Alamiah --> - Hopper (Euro) + Hopper (Europe) 1986 Eaglesoft - + - Hudson 3D Golf (Jpn) + Hudson 3D Golf (Japan) 1984 Hudson Soft - + - Hudson 3D Golf (Jpn, Alt) + Hudson 3D Golf (Japan, alt) 1984 Hudson Soft - + - Hurry Fox MSX Special (Jpn) + Hurry Fox MSX Special (Japan) 1986 MicroCabin @@ -6139,7 +6113,7 @@ - + @@ -6148,7 +6122,7 @@ - Hurry Fox - Yuki no Maou hen (Jpn) + Hurry Fox - Yuki no Maou hen (Japan) 1985 MicroCabin @@ -6156,51 +6130,51 @@ - + - Hustle! Chumy (Jpn) + Hustle! Chumy (Japan) 1984 General - + - Hustle! Chumy (Jpn, Alt) + Hustle! Chumy (Japan, alt) 1984 General - + - Hydlide (Jpn) + Hydlide (Japan) 1985 T&E Soft - + - Hydlide II - Shine of Darkness (Jpn, Alt) + Hydlide II - Shine of Darkness (Japan, alt) 1986 T&E Soft @@ -6209,7 +6183,7 @@ - + @@ -6217,256 +6191,256 @@ - Hydlide 3 - The Space Memories (Kor) + Hydlide 3 - The Space Memories (Korea) 1987 Zemina - + - Hyper Olympic 1 (Jpn) + Hyper Olympic 1 (Japan) 1984 Konami - + - Hyper Olympic 1 (Kor) + Hyper Olympic 1 (Korea) 198? Zemina - + - Hyper Olympic 2 (Jpn) + Hyper Olympic 2 (Japan) 1984 Konami - + - Hyper Rally (Jpn) + Hyper Rally (Japan) 1985 Konami - + - Hyper Rally (Jpn, Alt) + Hyper Rally (Japan, alt) 1985 Konami - + - Hyper Rally (Jpn, Alt 2) + Hyper Rally (Japan, alt 2) 1985 Konami - + - Hyper Rally (Jpn, Alt 3) + Hyper Rally (Japan, alt 3) 1985 Konami - + - Hyper Sports 1 (Jpn) + Hyper Sports 1 (Japan) 1984 Konami - + - Hyper Sports 1 (Jpn, Alt) + Hyper Sports 1 (Japan, alt) 1984 Konami - + - Hyper Sports 2 (Jpn) + Hyper Sports 2 (Japan) 1984 Konami - + - Hyper Sports 2 (Kor) + Hyper Sports 2 (Korea) 198? Topia - + - Hyper Sports 3 (Jpn) + Hyper Sports 3 (Japan) 1985 Konami - + - Hyper Sports 3 (Jpn, Alt) + Hyper Sports 3 (Japan, alt) 1985 Konami - + - Hyper Sports 3 (Jpn, Alt 2) + Hyper Sports 3 (Japan, alt 2) 1985 Konami - + - Ice World (Jpn) + Ice World (Japan) 1985 Casio - + - Iga Ninpouchou (Jpn) + Iga Ninpouchou (Japan) 1985 Casio - + - Iga Ninpouchou - Mangetsujou no Tatakai (Jpn) + Iga Ninpouchou - Mangetsujou no Tatakai (Japan) 1986 Casio - + - Indian no Bouken (Jpn) + Indian no Bouken (Japan) 1983 Hudson Soft - + - Iligks (Jpn) + Iligks (Japan) 1984 ASCII - + @@ -6479,112 +6453,112 @@ - + - Theseus - Iligks I (Jpn) + Theseus - Iligks I (Japan) 1984 ASCII - + - Theseus - Iligks I (Jpn, Alt) + Theseus - Iligks I (Japan, alt) 1984 ASCII - + - Theseus - Iligks I (Kor) + Theseus - Iligks I (Korea) 198? Zemina - + - Issunboushi no Donnamondai (Jpn) + Issunboushi no Donnamondai (Japan) 1987 Casio - + - Issunboushi no Donnamondai (Jpn, Alt) + Issunboushi no Donnamondai (Japan, alt) 1987 Casio - + - Issunboushi no Donnamondai (Jpn, Hacked?) + Issunboushi no Donnamondai (Japan, hacked?) 1987 Angel? - + - J.P. Winkle (Jpn) + J.P. Winkle (Japan) 1986 ASCII ~ MSX Magazine - + - J.P. Winkle (Kor) + J.P. Winkle (Korea) 198? Zemina - + - Jagur (Jpn, Alt) + Jagur (Japan, alt) 1987 Hudson Soft @@ -6593,139 +6567,139 @@ - + - Janka (Jpn) + Janka (Japan) 1985 ASCII - + - Janyuu (Jpn) + Janyuu (Japan) 1987 Technosoft - + - Jet Set Willy (Jpn) + Jet Set Willy (Japan) 1985 Hudson Soft - + - Jet Set Willy (Jpn, Alt) + Jet Set Willy (Japan, alt) 1985 Hudson Soft - + - Jigsaw Set (Jpn) + Jigsaw Set (Japan) 1983 MIA - + - Jissen - 4-nin Mahjong (Jpn) + Jissen - 4-nin Mahjong (Japan) 1984 Sony - + - Jong Friend (Jpn) + Jong Friend (Japan) 1984 Nidecom - + - Jong Kyo (Jpn) + Jong Kyo (Japan) 1983 Hudson Soft - + - Jump (Jpn) + Jump (Japan) 1985 ASCII - + - Jump Coaster (Jpn) + Jump Coaster (Japan) 1984 Nihon Columbia - + - Juno First (Jpn) + Juno First (Japan) 1983 Sony @@ -6733,7 +6707,7 @@ - + @@ -6746,56 +6720,56 @@ - Keyboard Master (Prototype) + Keyboard Master (prototype) 1984 Konami - + - + - Kage no Densetsu - The Legend of Kage (Jpn) + Kage no Densetsu - The Legend of Kage (Japan) 1986 Taito - + - Karamaru - Chindou Chuu (Jpn) + Karamaru - Chindou Chuu (Japan) 1985 HAL Kenkyuujo - + - Keystone Kapers (Jpn) + Keystone Kapers (Japan) 1984 Pony Canyon - + @@ -6804,71 +6778,71 @@ - Kick It (Jpn) + Kick It (Japan) 1986 HAL Kenkyuujo - + - Kick It (Jpn, Alt) + Kick It (Japan, alt) 1986 HAL Kenkyuujo - + - Kinasai (Jpn) + Kinasai (Japan) 1984 <unknown> - + - King & Balloon (Jpn) + King & Balloon (Japan) 1984 Namcot - + - King & Balloon (Jpn, Alt) + King & Balloon (Japan, alt) 1984 Namcot - + - King's Knight (Jpn, Alt) + King's Knight (Japan, alt) 1986 Square @@ -6876,13 +6850,13 @@ - + - King's Knight (Jpn, Alt 2) + King's Knight (Japan, alt 2) 1986 Square @@ -6890,78 +6864,78 @@ - + - King's Valley (Euro, Jpn) + King's Valley (Europe, Japan) 1985 Konami - + - King's Valley (Euro, Jpn, Alt) + King's Valley (Europe, Japan, alt) 1985 Konami - + - King's Valley (Euro, Jpn, Alt 2) + King's Valley (Europe, Japan, alt 2) 1985 Konami - + - King's Valley (Euro, Jpn, Alt 3) + King's Valley (Europe, Japan, alt 3) 1985 Konami - + - King's Valley (Euro, Jpn, Alt 4) + King's Valley (Europe, Japan, alt 4) 1985 Konami - + - King's Valley II (Euro) ~ Ouke no Tani - El Giza no Fuuin (Jpn) + King's Valley II (Europe) ~ Ouke no Tani - El Giza no Fuuin (Japan) 1988 Konami @@ -6970,115 +6944,115 @@ - + - Kinnikuman - Colosseum Deathmatch (Jpn) + Kinnikuman - Colosseum Deathmatch (Japan) 1985 Bandai - + - Kinnikuman - Colosseum Deathmatch (Jpn, Alt) + Kinnikuman - Colosseum Deathmatch (Japan, alt) 1985 Bandai - + - Kinnikuman - Colosseum Deathmatch (Kor) + Kinnikuman - Colosseum Deathmatch (Korea) 198? San Ho - + - Knight Lore (Jpn) + Knight Lore (Japan) 1986 Nihon Dexter - + - Knightmare - Majou Densetsu (Jpn) + Knightmare - Majou Densetsu (Japan) 1986 Konami - + - Knightmare - Majou Densetsu (Jpn, Alt) + Knightmare - Majou Densetsu (Japan, alt) 1986 Konami - + - Knightmare - Majou Densetsu (Jpn, Alt 2) + Knightmare - Majou Densetsu (Japan, alt 2) 1986 Konami - + - Knightmare - Majou Densetsu (Kor) + Knightmare - Majou Densetsu (Korea) 198? Zemina - + - Knightmare II - The Maze of Galious (Jpn) + Knightmare II - The Maze of Galious (Japan) 1987 Konami @@ -7087,26 +7061,26 @@ - + - Knightmare II - The Maze of Galious (Kor) + Knightmare II - The Maze of Galious (Korea) 1987 Zemina - + - Knightmare III - Shalom (Jpn) + Knightmare III - Shalom (Japan) 1987 Konami @@ -7115,13 +7089,13 @@ - + - Knither Special (Jpn) + Knither Special (Japan) 1987 Dempa @@ -7129,480 +7103,467 @@ - + - Knuckle Joe (Kor) + Knuckle Joe (Korea) 1989 Prosoft - + - Koedoli (Kor) + Koedoli (Korea) 1988 Aproman - + - Konami's Baseball (Jpn) + Konami's Baseball (Japan) 1985 Konami - + - Konami's Baseball (Jpn, Alt) + Konami's Baseball (Japan, alt) 1985 Konami - + - Konami's Billiards (Euro) + Konami's Billiards (Europe) 1984 Konami - + - Konami's Boxing (Jpn) + Konami's Boxing (Japan) 1985 Konami - + - Konami's Boxing (Jpn, Alt) + Konami's Boxing (Japan, alt) 1985 Konami - + - Konami's Boxing (Jpn, Alt 2) + Konami's Boxing (Japan, alt 2) 1985 Konami - + - Konami's Football (Euro) + Konami's Football (Europe) 1985 Konami - + - Konami's Football (Euro, Alt) + Konami's Football (Europe, alt) 1985 Konami - + - Konami's Football (Euro, Alt 2) + Konami's Football (Europe, alt 2) 1985 Konami - + - Konami's Golf (Jpn) + Konami's Golf (Japan) 1985 Konami - + - Konami's Golf (Jpn, Alt) + Konami's Golf (Japan, alt) 1985 Konami - + - Konami's Golf (Jpn, Alt 2) + Konami's Golf (Japan, alt 2) 1985 Konami - + - Mahjong Dojo (Jpn) + Mahjong Dojo (Japan) 1984 Konami - + - Konami's Ping-Pong (Jpn) + Konami's Ping-Pong (Japan) 1985 Konami - + - Konami's Ping-Pong (Jpn, Alt) + Konami's Ping-Pong (Japan, alt) 1985 Konami - + - Konami's Ping-Pong (Jpn, Alt 2) + Konami's Ping-Pong (Japan, alt 2) 1985 Konami - + - Konami's Ping-Pong (Jpn, Alt 3) + Konami's Ping-Pong (Japan, alt 3) 1985 Konami - + - Konami's Ping-Pong (Kor) + Konami's Ping-Pong (Korea) 198? Zemina - + - Konami's Soccer (Jpn) + Konami's Soccer (Japan) 1985 Konami - + - Konami's Soccer (Jpn, Alt) + Konami's Soccer (Japan, alt) 1985 Konami - + - Konami's Soccer (Jpn, Alt 2) + Konami's Soccer (Japan, alt 2) 1985 Konami - + - Konami's Soccer (Jpn, Alt 3) + Konami's Soccer (Japan, alt 3) 1985 Konami - + - Konami's Tennis (Jpn) + Konami's Tennis (Japan) 1985 Konami - + - Konami's Tennis (Jpn, Alt) + Konami's Tennis (Japan, alt) 1985 Konami - + - Konami's Tennis (Kor) + Konami's Tennis (Korea) 19?? Prosoft - + - Koneko no Daibouken - Chibi-chan ga Iku (Jpn) + Koneko no Daibouken - Chibi-chan ga Iku (Japan) 1986 Casio - + - Kung Fu Master (Jpn) + Kung Fu Master (Japan) 1983 ASCII - + - Kung Fu Master (Jpn, Alt) + Kung Fu Master (Japan, alt) 1983 ASCII - + - Kung Fu Master (Jpn, Alt 2) + Kung Fu Master (Japan, alt 2) 1983 ASCII - + - Kung-Fu Taikun (Jpn) + Kung-Fu Taikun (Japan) 1985 Toshiba EMI - + - Kung-Fu Taikun (Jpn, Alt) + Kung-Fu Taikun (Japan, alt) 1985 Toshiba EMI - + - Kung-Fu Taikun (Kor) + Kung-Fu Taikun (Korea) 198? Zemina - + - Ladder Building (Jpn) + Ladder Building (Japan) 1983 ASCII - + - Laptick 2 (Jpn) + Laptick 2 (Japan) 1986 dB-Soft - - - - - - - - Le Mans 2 (Euro) - 1984 - Electric Software - - - - + - Legendly Knight - Daemaseong (Kor) + Legendly Knight - Daemaseong (Korea) 1988 Topia @@ -7610,13 +7571,13 @@ - + - Legendly Knight - Daemaseong (Kor, Alt) + Legendly Knight - Daemaseong (Korea, alt) 1988 Topia @@ -7624,207 +7585,207 @@ - + - The Light Corridor (Euro) + The Light Corridor (Europe) 1990 Infogrames - + - Lode Runner (Jpn) + Lode Runner (Japan) 1983 Sony - + - Lode Runner (Jpn, Alt) + Lode Runner (Japan, alt) 1983 Sony - + - Lode Runner II (Jpn) + Lode Runner II (Japan) 1985 Sony - + - Lord Over (Jpn) + Lord Over (Japan) 1984 ASCII - + - Lot Lot (Jpn) + Lot Lot (Japan) 1985 Tokuma Shoten - + - Lunar Ball (Jpn) + Lunar Ball (Japan) 1985 Pony Canyon - + - Machinegun Joe vs The Mafia (Jpn) + Machinegun Joe vs The Mafia (Japan) 1984 Hudson Soft - + - Choujikuu Yousai Macross (Jpn) + Choujikuu Yousai Macross (Japan) 1985 Bothtec - + - Choujikuu Yousai Macross (Jpn, Alt) + Choujikuu Yousai Macross (Japan, alt) 1985 Bothtec - + - Magical Kid Wiz (Jpn) + Magical Kid Wiz (Japan) 1986 Sony - + - Magical Kid Wiz (Jpn, Alt) + Magical Kid Wiz (Japan, alt) 1986 Sony - + - Magical Kid Wiz (Jpn, Alt 2) + Magical Kid Wiz (Japan, alt 2) 1986 Sony - + - Magical Tree (Jpn) + Magical Tree (Japan) 1985 Konami - + - Magical Tree (Jpn, Alt) + Magical Tree (Japan, alt) 1985 Konami - + - Magnum Kiki Ippatsu - Empire City 1931 (Jpn) + Magnum Kiki Ippatsu - Empire City 1931 (Japan) 1988 Toshiba EMI @@ -7833,13 +7794,13 @@ - + - Magnum Kiki Ippatsu - Empire City 1931 (Jpn, Alt) + Magnum Kiki Ippatsu - Empire City 1931 (Japan, alt) 1988 Toshiba EMI @@ -7848,167 +7809,167 @@ - + - Manes (Jpn) + Manes (Japan) 1984 ASCII - + - Manes (Jpn, Alt) + Manes (Japan, alt) 1984 ASCII - + - Manes (Jpn, Alt 2) + Manes (Japan, alt 2) 1984 ASCII - + - Mappy (Jpn) + Mappy (Japan) 1984 Namcot - + - Mappy (Jpn, Alt) + Mappy (Japan, alt) 1984 Namcot - + - Mappy (Jpn, Alt 2) + Mappy (Japan, alt 2) 1984 Namcot - + - Marine Battle (Jpn) + Marine Battle (Japan) 1983 ASCII - + - Mashou no Yakata - Gabalin (Jpn) + Mashou no Yakata - Gabalin (Japan) 1987 Pony Canyon - + - Mashou no Yakata - Gabalin (Jpn, Alt) + Mashou no Yakata - Gabalin (Japan, alt) 1987 Pony Canyon - + - Megalopolis SOS (Jpn) + Megalopolis SOS (Japan) 1983 Paxon - + - Megalopolis SOS (Jpn, Alt) + Megalopolis SOS (Japan, alt) 1983 Paxon - + - Megalopolis SOS (Jpn, Alt 2) + Megalopolis SOS (Japan, alt 2) 1983 Paxon - + - Meikyuu Shinwa (Jpn) + Meikyuu Shinwa (Japan) 1986 HAL Kenkyuujo @@ -8017,13 +7978,13 @@ - + - Meikyuu Shinwa (Jpn, Alt) + Meikyuu Shinwa (Japan, alt) 1986 HAL Kenkyuujo @@ -8032,101 +7993,101 @@ - + - Midnight Brothers (Jpn) + Midnight Brothers (Japan) 1986 Sony - + - Midnight Brothers (Jpn, Alt) + Midnight Brothers (Japan, alt) 1986 Sony - + - Midnight Building (Jpn) + Midnight Building (Japan) 1983 ASCII - + - Midway (Jpn) + Midway (Japan) 1983 Magicsoft - + - Mil Caras (Spa) + Mil Caras (Spain) 1985 Sony Spain - + - Mini Golf (Jpn) + Mini Golf (Japan) 1985 Namcot - + - Mini Golf (Jpn, Alt) + Mini Golf (Japan, alt) 1985 Namcot - + - Mitsume ga Tooru - The Three-Eyed One Comes Here (Jpn) + Mitsume ga Tooru - The Three-Eyed One Comes Here (Japan) 1989 Natsume @@ -8135,106 +8096,106 @@ - + - Moai no Hihou (Jpn) + Moai no Hihou (Japan) 1986 Casio - + - Moai no Hihou (Kor) + Moai no Hihou (Korea) 1986? Static Soft - + - Mobile Planet Suthirus - Approach from the Westgate (Jpn) + Mobile Planet Suthirus - Approach from the Westgate (Japan) 1986 HAL Kenkyuujo - + - Mobile-Suit Gundam - Last Shooting (Jpn) + Mobile-Suit Gundam - Last Shooting (Japan) 1984 Bandai - + - Mobile-Suit Gundam - Last Shooting (Jpn, Alt) + Mobile-Suit Gundam - Last Shooting (Japan, alt) 1984 Bandai - + - Mobile-Suit Gundam - Last Shooting (Kor) + Mobile-Suit Gundam - Last Shooting (Korea) 198? Zemina - + - Mokari Makka? Bochibochi Denna! (Jpn) + Mokari Makka? Bochibochi Denna! (Japan) 1986 Leben Pro - + - Mole (Jpn) + Mole (Japan) 1983 ASCII - + @@ -8246,218 +8207,218 @@ <unknown> - + - Mole Mole 2 (Jpn) + Mole Mole 2 (Japan) 1987 Victor - + - Monkey Academy (Jpn) + Monkey Academy (Japan) 1984 Konami - + - Monkey Academy (Jpn, Alt) + Monkey Academy (Japan, alt) 1984 Konami - + - Monkey Academy (Jpn, Alt 2) + Monkey Academy (Japan, alt 2) 1984 Konami - + - Monkey Academy (Jpn, Alt 3) + Monkey Academy (Japan, alt 3) 1984 Konami - + - Monster's Fair (Jpn) + Monster's Fair (Japan) 1986 Toho - + - Moon Landing (Jpn) + Moon Landing (Japan) 1983 ASCII - + - Moon Patrol (Jpn) + Moon Patrol (Japan) 1984 Dempa - + - Moon Patrol (Kor) + Moon Patrol (Korea) 19?? Prosoft - + - Moonsweeper (Jpn) + Moonsweeper (Japan) 1985 Toshiba EMI - + - Mopiranger (Jpn) + Mopiranger (Japan) 1985 Konami - + - Mopiranger (Jpn, Alt) + Mopiranger (Japan, alt) 1985 Konami - + - Mopiranger (Jpn, Alt 2) + Mopiranger (Japan, alt 2) 1985 Konami - + - Mopiranger (Jpn, Alt 3) + Mopiranger (Japan, alt 3) 1985 Konami - + - Mopiranger (Jpn, Alt 4) + Mopiranger (Japan, alt 4) 1985 Konami - + - Mopiranger (Kor) + Mopiranger (Korea) 198? Zemina - + - Morita Kazuo no Othello (Jpn) + Morita Kazuo no Othello (Japan) 1986 Toshiba EMI @@ -8470,307 +8431,307 @@ - Mouser (Jpn) + Mouser (Japan) 1983 Sony - + - Mr. Chin (Jpn) + Mr. Chin (Japan) 1984 HAL Kenkyuujo - + - Mr. Chin (Kor) + Mr. Chin (Korea) 198? Zemina - + - Mr. Do (Jpn) + Mr. Do (Japan) 1984 Nihon Columbia - + - Mr. Do (Kor) + Mr. Do (Korea) 198? Zemina - + - Mr. Do! vs Unicorns (Jpn) + Mr. Do! vs Unicorns (Japan) 1984 Sony - + - Mr. Do's Wild Ride (Jpn) + Mr. Do's Wild Ride (Japan) 1985 Nihon Columbia - + - Mr. Do's Wild Ride (Jpn, Hacked?) + Mr. Do's Wild Ride (Japan, hacked?) 1985 Angel? - + - MSX 21 (Jpn) + MSX 21 (Japan) 1983 ASCII - + - MSX Baseball (Jpn) + MSX Baseball (Japan) 1984 Panasoft - + - MSX Baseball (Jpn, Alt) + MSX Baseball (Japan, alt) 1984 Panasoft - + - MSX Baseball II National (Jpn) + MSX Baseball II National (Japan) 1986 Panasoft - + - MSX Derby (Jpn) + MSX Derby (Japan) 1983 ASCII - + - MSX Rugby (Jpn) + MSX Rugby (Japan) 1985 Panasoft - + - MSX Shogi Game (Jpn) + MSX Shogi Game (Japan) 1984 Sony - + - MSX Soccer (Jpn) + MSX Soccer (Japan) 1985 Panasoft - + - MSX Soccer (Jpn, Alt) + MSX Soccer (Japan, alt) 1985 Panasoft - + - MSX Soccer (Kor) + MSX Soccer (Korea) 198? Zemina - + - MSX Soukoban (Jpn) + MSX Soukoban (Japan) 1984 ASCII - + - MSX Soukoban (Jpn, Alt) + MSX Soukoban (Japan, alt) 1984 ASCII - + - MSX Soukoban (Jpn, Alt 2) + MSX Soukoban (Japan, alt 2) 1984 ASCII - + - Soukoban (Kor) + Soukoban (Korea) 1984? Qnix - + - Mugen Senshi Valis (Kor) + Mugen Senshi Valis (Korea) 1987 Zemina - + - Nausicaä (Jpn) + Nausicaä (Japan) 1984 Technopolis Soft - + - Nemesis (Euro) ~ Gradius (Jpn) + Nemesis (Europe) ~ Gradius (Japan) 1986 Konami @@ -8779,13 +8740,13 @@ - + - Nemesis (Euro) ~ Gradius (Jpn) (Alt) + Nemesis (Europe) ~ Gradius (Japan) (alt) 1986 Konami @@ -8794,13 +8755,13 @@ - + - Nemesis 2 (Euro) ~ Gradius 2 (Jpn) + Nemesis 2 (Europe) ~ Gradius 2 (Japan) 1987 Konami @@ -8809,13 +8770,13 @@ - + - Nemesis 2 (Euro) ~ Gradius 2 (Jpn) (Alt) + Nemesis 2 (Europe) ~ Gradius 2 (Japan) (alt) 1987 Konami @@ -8824,13 +8785,13 @@ - + - Nemesis 2 (Euro) ~ Gradius 2 (Jpn) (Prototype) + Nemesis 2 (Europe) ~ Gradius 2 (Japan) (prototype) 1987 Konami @@ -8838,13 +8799,13 @@ - + - Nemesis 2 (Euro) ~ Gradius 2 (Jpn) (Demo) + Nemesis 2 (Europe) ~ Gradius 2 (Japan) (demo) 1987 Konami @@ -8852,13 +8813,13 @@ - + - Nemesis 3 - The Eve of Destruction (Euro) ~ Gopher no Yabou - Episode II (Jpn) + Nemesis 3 - The Eve of Destruction (Europe) ~ Gopher no Yabou - Episode II (Japan) 1988 Konami @@ -8867,13 +8828,13 @@ - + - Nemesis 3 - The Eve of Destruction (Euro) ~ Gopher no Yabou - Episode II (Jpn) (Alt) + Nemesis 3 - The Eve of Destruction (Europe) ~ Gopher no Yabou - Episode II (Japan) (alt) 1988 Konami @@ -8882,13 +8843,13 @@ - + - Nemesis 3 - The Eve of Destruction (Euro) ~ Gopher no Yabou - Episode II (Jpn) (Alt 2) + Nemesis 3 - The Eve of Destruction (Europe) ~ Gopher no Yabou - Episode II (Japan) (alt 2) 1988 Konami @@ -8897,441 +8858,441 @@ - + - Nessen Koushien (Jpn) + Nessen Koushien (Japan) 1984 Casio - + - New Boggle Boggle (Kor) + New Boggle Boggle (Korea) 1988 Zemina - + - New Boggle Boggle (Kor, Alt) + New Boggle Boggle (Korea, alt) 1988 Zemina - + - New Boggle Boggle (Kor, Alt 2) + New Boggle Boggle (Korea, alt 2) 1988 Zemina - + - Night Shade (Jpn) + Night Shade (Japan) 1986 Nihon Dexter - + - Ninja II (Kor) + Ninja II (Korea) 198? Zemina - + - Ninja Jajamaru-kun (Jpn) + Ninja Jajamaru-kun (Japan) 1986 Jaleco - + - Ninja Jajamaru-kun (Kor) + Ninja Jajamaru-kun (Korea) 19?? Prosoft - + - Ninja Princess (Jpn) + Ninja Princess (Japan) 1986 Pony Canyon - + - Ninja Princess (Jpn, Alt) + Ninja Princess (Japan, alt) 1986 Pony Canyon - + - Ninja-kun (Jpn) + Ninja-kun (Japan) 1983 Toshiba - + - Ninja-kun - Majou no Bouken (Jpn) + Ninja-kun - Majou no Bouken (Japan) 1985 Nihon Dexter - + - Ninjya Kage (Jpn) + Ninjya Kage (Japan) 1984 Hudson Soft - + - Ninjya Kage (Jpn, Alt) + Ninjya Kage (Japan, alt) 1984 Hudson Soft - + - Nuts & Milk (Jpn) + Nuts & Milk (Japan) 1983 Hudson Soft - + - Miku to Shiori no Nyan Nyan Pro Wres (Jpn) + Miku to Shiori no Nyan Nyan Pro Wres (Japan) 1986 Victor - + - Nyorols (Jpn) + Nyorols (Japan) 1983 MIA - + - O'Mac Farmer (Jpn) + O'Mac Farmer (Japan) 1983 ASCII - + - Oil's Well (Jpn) + Oil's Well (Japan) 1985 Comptiq - + - Oil's Well (Jpn, Alt) + Oil's Well (Japan, alt) 1985 Comptiq - + - Okami no Su - Golgo 13 Adventure Game (Jpn) + Okami no Su - Golgo 13 Adventure Game (Japan) 1984 Pony Canyon - + - Othello (Jpn, Pony Canyon) + Othello (Japan, Pony Canyon) 1985 Pony Canyon - + - Oyoide Tango (Jpn) + Oyoide Tango (Japan) 1985 HAL Kenkyuujo - + - Pac-Man (Jpn) + Pac-Man (Japan) 1984 Namcot - + - Pac-Man (Jpn, Alt) + Pac-Man (Japan, alt) 1984 Namcot - + - Pac-Man (Jpn, Alt 2) + Pac-Man (Japan, alt 2) 1984 Namcot - + - Pac-Man (Kor) + Pac-Man (Korea) 198? Clover - + - Pachi Com (Jpn) + Pachi Com (Japan) 1985 Toshiba EMI - + - Pachi Com (Kor) + Pachi Com (Korea) 1986 Boram Soft - + - Pachinko-U.F.O. (Jpn) + Pachinko-U.F.O. (Japan) 1984 Casio - + - Pai Panic (Jpn) + Pai Panic (Japan) 1983 ASCII - + - Pairs (Jpn) + Pairs (Japan) 1983 ASCII - + - Pairs (Jpn, Alt) + Pairs (Japan, alt) 1983 ASCII - + - Panther (Jpn) + Panther (Japan) 1986 Irem - + - Parodius - Tako wa Chikyuu wo Sukuu (Jpn) + Parodius - Tako wa Chikyuu wo Sukuu (Japan) 1988 Konami @@ -9340,13 +9301,13 @@ - + - Parodius - Tako wa Chikyuu wo Sukuu (Jpn, Alt) + Parodius - Tako wa Chikyuu wo Sukuu (Japan, alt) 1988 Konami @@ -9355,33 +9316,33 @@ - + - Pass Ball (Jpn) + Pass Ball (Japan) 1983 ASCII - + - Pastfinder (Jpn) + Pastfinder (Japan) 1984 Pony Canyon - + @@ -9391,59 +9352,59 @@ - Pay Load (Jpn) + Pay Load (Japan) 1985 Sony - + - Pay Load (Jpn, Alt) + Pay Load (Japan, alt) 1985 Sony - + - Peetan (Jpn) + Peetan (Japan) 1984 Nihon Columbia - + - Pegasus (Jpn) + Pegasus (Japan) 1986 Victor - + - Penguin Adventure (Euro) ~ Yume Tairiku Adventure (Jpn) + Penguin Adventure (Europe) ~ Yume Tairiku Adventure (Japan) 1986 Konami @@ -9452,261 +9413,261 @@ - + - Yume Tairiku Adventure (Kor, Zemina) + Yume Tairiku Adventure (Korea, Zemina) 1987 Zemina - + - Yume Tairiku Adventure (Kor, Screen Software) + Yume Tairiku Adventure (Korea, Screen Software) 1988 Screen Software - + - Penguin-kun Wars (Jpn) + Penguin-kun Wars (Japan) 1985 ASCII - + - Penguin-kun Wars (Kor) + Penguin-kun Wars (Korea) 19?? Prosoft - + - Pico Pico (Jpn) + Pico Pico (Japan) 1983 Microcabin - + - Picture Puzzle (Jpn) + Picture Puzzle (Japan) 1983 HAL Kenkyuujo - + - Picture Puzzle (Jpn, Alt) + Picture Puzzle (Japan, alt) 1983 HAL Kenkyuujo - + - Pillbox (Jpn) + Pillbox (Japan) 1983 Magicsoft - + - Pillbox (Jpn, Alt) + Pillbox (Japan, alt) 1983 Magicsoft - + - Pinball Blaster (Euro) + Pinball Blaster (Europe) 1988 Eurosoft - + - Pine Applin (Jpn) + Pine Applin (Japan) 1984 ZAP - + - Pine Applin (Jpn, Alt) + Pine Applin (Japan, alt) 1984 ZAP - + - Pingball Maker (Jpn) + Pingball Maker (Japan) 1985 Nihon Columbia - + - Pinky Chase (Jpn) + Pinky Chase (Japan) 1984 Nihon Columbia - + - Pipi (Jpn) + Pipi (Japan) 1985 Nihon Dexter - + - Pippols (Jpn) + Pippols (Japan) 1985 Konami - + - Pippols (Jpn, Alt) + Pippols (Japan, alt) 1985 Konami - + - Pippols (Jpn, Alt 2) + Pippols (Japan, alt 2) 1985 Konami - + - Pippols (Jpn, Alt 3) + Pippols (Japan, alt 3) 1985 Konami - + - Pitfall II - Lost Caverns (Jpn) + Pitfall II - Lost Caverns (Japan) 1984 Pony Canyon - + @@ -9715,14 +9676,14 @@ - Pitfall II - Lost Caverns (Jpn, Alt) + Pitfall II - Lost Caverns (Japan, alt) 1984 Pony Canyon - + @@ -9731,14 +9692,14 @@ - Pitfall! (Jpn) + Pitfall! (Japan) 1984 Pony Canyon - + @@ -9747,14 +9708,14 @@ - Pitfall! (Jpn, Alt) + Pitfall! (Japan, alt) 1984 Pony Canyon - + @@ -9763,14 +9724,14 @@ - Pitfall! (Jpn, Alt 2) + Pitfall! (Japan, alt 2) 1984 Pony Canyon - + @@ -9780,151 +9741,137 @@ - Play Ball (Jpn) + Play Ball (Japan) 1986 Sony - + - + - Point X Senryou Sakusen - S.F.3.D. Original - Operation Thanksgiving (Jpn) + Point X Senryou Sakusen - S.F.3.D. Original - Operation Thanksgiving (Japan) 1986 Victor - + - The Police Story (Jpn) + The Police Story (Japan) 1986 Pony Canyon - + - The Police Story (Jpn, Alt) + The Police Story (Japan, alt) 1986 Pony Canyon - - - - - - - - Pooyan (Jpn) - 1985 - Hudson Soft - - - - - + - - Poppaq the Fish (Jpn) + + Poppaq the Fish (Japan) 1984 ASCII - + - Poppaq the Fish (Kor) + Poppaq the Fish (Korea) 1986 Boram Soft - + - The Price of Magik (Euro) + The Price of Magik (Europe) 1986 Level 9 Computing - + - Professional Baseball (Jpn) + Professional Baseball (Japan) 1986 Technopolis Soft - + - Professional Mahjong (Jpn) + Professional Mahjong (Japan) 1985 Chat Noir - + - The Protector (Jpn) + The Protector (Japan) 1985 Pony Canyon - + - Psychic War - Cosmic Soldier 2 (Jpn) + Psychic War - Cosmic Soldier 2 (Japan) 1987 Kogado @@ -9932,7 +9879,7 @@ - + @@ -9945,298 +9892,298 @@ Zemina - + - Puzzle Panic (Jpn) + Puzzle Panic (Japan) 1986 System Soft - + - Pyramid Warp (Jpn) + Pyramid Warp (Japan) 1983 T&E Soft - + - Q*bert (Jpn) + Q*bert (Japan) 1986 Konami - + - Q*bert (Jpn, Alt) + Q*bert (Japan, alt) 1986 Konami - + - Queen's Golf (Jpn) + Queen's Golf (Japan) 1984 ASCII - + - Queen's Golf (Jpn, Alt) + Queen's Golf (Japan, alt) 1984 ASCII - + - Queen's Golf (Jpn, Hacked?) + Queen's Golf (Japan, hacked?) 1984 ASCII - + - Raid on Bungeling Bay (Jpn) + Raid on Bungeling Bay (Japan) 1984 Sony - + - Rally-X (Jpn) + Rally-X (Japan) 1984 Namcot - + - Rally-X (Jpn, Alt) + Rally-X (Japan, alt) 1984 Namcot - + - Rally-X (Jpn, Alt 2) + Rally-X (Japan, alt 2) 1984 Namcot - + - Rally-X (Kor) + Rally-X (Korea) 198? Zemina - + - Rambo (Jpn) + Rambo (Japan) 1985 Pack-In-Video - + - Rambo (Jpn, Alt) + Rambo (Japan, alt) 1985 Pack-In-Video - + - Rambo (Jpn, Alt 2) + Rambo (Japan, alt 2) 1985 Pack-In-Video - + - Rambo (Jpn, Alt 3) + Rambo (Japan, alt 3) 1985 Pack-In-Video - + - Real Tennis (Jpn) + Real Tennis (Japan) 1983 Takara - + - Red Zone (Jpn) + Red Zone (Japan) 1985 ASCII - + - Red Zone (Jpn, Alt) + Red Zone (Japan, alt) 1985 ASCII - + - Renju & Ojama Dogs (Jpn) + Renju & Ojama Dogs (Japan) 1985 Pony Canyon - + - Rise Out from Dungeons (Jpn) + Rise Out from Dungeons (Japan) 1983 ASCII - + - Rise Out from Dungeons (Jpn, Alt) + Rise Out from Dungeons (Japan, alt) 1983 ASCII - + - River Raid (Jpn) + River Raid (Japan) 1985 Pony Canyon - + @@ -10245,33 +10192,33 @@ - Road Fighter (Jpn) + Road Fighter (Japan) 1985 Konami - + - Road Fighter (Jpn, Alt) + Road Fighter (Japan, alt) 1985 Konami - + - Robo Wres (Jpn) + Robo Wres (Japan) 1987 Micronet @@ -10279,7 +10226,7 @@ - + @@ -10291,42 +10238,42 @@ - + - Robofrog (Jpn) + Robofrog (Japan) 1985 ASCII - + - Robofrog (Jpn, Alt) + Robofrog (Japan, alt) 1985 ASCII - + - Rock'n Bolt (Jpn) + Rock'n Bolt (Japan) 1985 Pony Canyon - + @@ -10343,74 +10290,74 @@ - + --> + - Roger Rubbish (Euro) + Roger Rubbish (Europe) 1985 Spectravideo - + - Roger Rubbish (Euro, Alt) + Roger Rubbish (Europe, alt) 1985 Spectravideo - + - Roller Ball (Jpn) + Roller Ball (Japan) 1984 HAL Kenkyuujo - + - Roller Ball (Jpn, Alt) + Roller Ball (Japan, alt) 1984 HAL Kenkyuujo - + - Rotors (Jpn) + Rotors (Japan) 1984 ASCII - + - Salamander (Jpn) + Salamander (Japan) 1987 Konami @@ -10419,27 +10366,27 @@ - + - Salamander - Operation X (Kor) + Salamander - Operation X (Korea) 1988 Zemina - + - Sangokushi (Jpn, Alt 2) + Sangokushi (Japan, alt 2) 1986 Koei @@ -10448,381 +10395,381 @@ - + - Sasa (Jpn) + Sasa (Japan) 1984 ASCII - + - Sasa (Jpn, Alt) + Sasa (Japan, alt) 1984 ASCII - + - Saurusland (Jpn) + Saurusland (Japan) 1983 Nihon Columbia - + - Scarlet 7 - The Mightiest Women (Jpn) + Scarlet 7 - The Mightiest Women (Japan) 1986 Toshiba EMI - + - Scion (Jpn) + Scion (Japan) 1985 Sony - + - Scope On - Fight in Space (Jpn) + Scope On - Fight in Space (Japan) 1983 ASCII - + - Scramble Eggs (Jpn) + Scramble Eggs (Japan) 1983 Ample Software - + - Sea Hunter (Euro) + Sea Hunter (Europe) 1984 DynaData? - + - Seiken Achou (Jpn) + Seiken Achou (Japan) 1985 ASCII - + - Seiken Achou (Jpn, Alt) + Seiken Achou (Japan, alt) 1985 ASCII - + - Seiken Achou (Kor) + Seiken Achou (Korea) 198? Clover - + - Senjyo (Jpn) + Senjyo (Japan) 1984 Sony - + - Senjyo (Jpn, Alt) + Senjyo (Japan, alt) 1984 Sony - + - Sewer Sam (Jpn) + Sewer Sam (Japan) 1984 Toshiba EMI - + - Shougi (Jpn, Pony Canyon) + Shougi (Japan, Pony Canyon) 1986 Pony Canyon - + - Shougi (Jpn, MicroCabin) + Shougi (Japan, MicroCabin) 1985 MicroCabin - + - Shougi Meijin (Jpn) + Shougi Meijin (Japan) 1985 Toshiba EMI - + - Shout Match (Jpn) + Shout Match (Japan) 1987 Victor - + - Sinbad - Nanatsu no Bouken (Jpn) + Sinbad - Nanatsu no Bouken (Japan) 1986 Casio - + - Ski Command (Jpn) + Ski Command (Japan) 1985 Casio - + - Ski Command (Jpn, Alt) + Ski Command (Japan, alt) 1985 Casio - + - Ski Command (Kor, Aproman) + Ski Command (Korea, Aproman) 198? Aproman - + - Ski Command (Kor, ProSoft) + Ski Command (Korea, ProSoft) 198? ProSoft - + - Skooter (Jpn) + Skooter (Japan) 1988 Pony Canyon - + - Skooter (Jpn, Alt) + Skooter (Japan, alt) 1988 Pony Canyon - + - Skygaldo (Jpn) + Skygaldo (Japan) 1986 Magical Zoo - + - Sky Jaguar (Jpn) + Sky Jaguar (Japan) 1984 Konami - + - Sky Jaguar (Kor) + Sky Jaguar (Korea) 198? Zemina - + - Slapshot (Spa) + Slapshot (Spain) 1985 Sony Spain - + - Snake It (Euro) + Snake It (Europe) 1986? Eaglesoft - + - Sofia (Jpn) + Sofia (Japan) 1988 Dempa @@ -10830,52 +10777,52 @@ - + - Space Camp (Jpn) + Space Camp (Japan) 1986 Pack-In-Video - + - Space Camp (Jpn, Alt) + Space Camp (Japan, alt) 1986 Pack-In-Video - + - Space Invaders (Jpn) + Space Invaders (Japan) 1985 Nidecom - + - Space Maze Attack (Jpn) + Space Maze Attack (Japan) 1983 HAL Kenkyuujo @@ -10883,13 +10830,13 @@ - + - Space Maze Attack (Jpn, Alt) + Space Maze Attack (Japan, alt) 1983 HAL Kenkyuujo @@ -10897,39 +10844,39 @@ - + - Space Maze Attack (Jpn, Alt 2) + Space Maze Attack (Japan, alt 2) 1983 HAL Kenkyuujo - + - Space Trouble (Jpn) + Space Trouble (Japan) 1984 HAL Kenkyuujo - + - Sparkie (Jpn) + Sparkie (Japan) 1983 Sony @@ -10937,7 +10884,7 @@ - + @@ -10950,348 +10897,294 @@ - Spelunker (Jpn) + Spelunker (Japan) 1986 Irem - + - Spelunker (Jpn, Alt) + Spelunker (Japan, alt) 1986 Irem - + - The Spider (Jpn) + The Spider (Japan) 1984 Hudson Soft - + - Square Dancer (Jpn) + Square Dancer (Japan) 1984 Toshiba EMI - + - Squish'em (Jpn) + Squish'em (Japan) 1984 ASCII - + - Squish'em (Jpn, Alt) + Squish'em (Japan, alt) 1984 ASCII - + - Star Blazer (Jpn) + Star Blazer (Japan) 1985 Sony - + - Star Blazer (Jpn, Alt) + Star Blazer (Japan, alt) 1985 Sony - + - Star Blazer (Jpn, Alt 2) + Star Blazer (Japan, alt 2) 1985 Sony - + - Star Command (Jpn) + Star Command (Japan) 1983 ASCII - - - - - - - Star Force (Jpn) - 1985 - Hudson Soft - - - - - - - - - - - Star Force (Jpn, Alt) - 1985 - Hudson Soft - - - - - - - - - - - - Star Soldier (Jpn) - 1986 - Hudson Soft - - - - - - - - - - - - Star Soldier (Jpn, Alt) - 1986 - Hudson Soft - - - - - + - Star Trap (Jpn) + Star Trap (Japan) 1987 Jast - + - Starship Simulator (Jpn) + Starship Simulator (Japan) 1984 ASCII - + - Starship Simulator (Jpn, Alt) + Starship Simulator (Japan, alt) 1984 ASCII - + - Step Up (Jpn) + Step Up (Japan) 1983 HAL Kenkyuujo - + - Step Up (Jpn, Alt) + Step Up (Japan, alt) 1983 HAL Kenkyuujo - + - Step Up (Kor) + Step Up (Korea) 198? Zemina - + - Stepper (Jpn) + Stepper (Japan) 1985 ASCII - + - Kenja no Ishi - The Stone of Wisdom (Jpn) + Kenja no Ishi - The Stone of Wisdom (Japan) 1986 Casio - + - Strange Loop (Jpn) + Strange Loop (Japan) 1987 Nihon Dexter - + - Street Master (Kor) + Street Master (Korea) 1992 Zemina - + - Suparobo (Jpn) + Suparobo (Japan) 1984 ASCII - + - Super Billiards (Jpn) + Super Billiards (Japan) 1983 HAL Kenkyuujo - + - Super Bioman 4 (Kor) + Super Bioman 4 (Korea) 199? Zemina - + - Super Boy 3 (Kor) + Super Boy 3 (Korea) 1991 Zemina @@ -11299,13 +11192,13 @@ - + - Super Boy 3 (Kor, Alt) + Super Boy 3 (Korea, alt) 1991 Zemina @@ -11313,81 +11206,81 @@ - + - Super Boy I (Kor) + Super Boy I (Korea) 1989 Zemina - + - Super Boy II. (Kor) + Super Boy II. (Korea) 1989 Zemina - + - Super Boy II. (Kor, Alt) + Super Boy II. (Korea, alt) 1989 Zemina - + - Super Bubble Bobble (Kor) + Super Bubble Bobble (Korea) 1989 Zemina - + - Super Cobra (Jpn) + Super Cobra (Japan) 1983 Konami - + - Super Cobra (Jpn, Alt) + Super Cobra (Japan, alt) 1983 Konami - + @@ -11395,72 +11288,72 @@ - Super Columns (Kor) + Super Columns (Korea) 1990 Hi-Com - + - Super Cross Force (Euro) + Super Cross Force (Europe) 1983 Spectravideo - + - Super Drinker (Jpn) + Super Drinker (Japan) 1983 Ample Software - + - Super Golf (Jpn) + Super Golf (Japan) 1984 Sony - + - Super Laydock - Mission Striker (Kor) + Super Laydock - Mission Striker (Korea) 1988 Zemina - + - Super Pachinko (Jpn) + Super Pachinko (Japan) 1985 Nihon Columbia - + @@ -11472,457 +11365,457 @@ - + - Super Snake (Jpn) + Super Snake (Japan) 1983 HAL Kenkyuujo - + - Super Snake (Jpn, Alt) + Super Snake (Japan, alt) 1983 HAL Kenkyuujo - + - Super Snake (Jpn, Alt 2) + Super Snake (Japan, alt 2) 1983 HAL Kenkyuujo - + - Super Soccer (Jpn) + Super Soccer (Japan) 1985 Sony - + - MSX Super Tennis (Jpn) + MSX Super Tennis (Japan) 1984 Sony - + - Supertripper (Spa) + Supertripper (Spain) 1985 Sony Spain - + - Sweet Acorn (Jpn) + Sweet Acorn (Japan) 1984 Taito - + - Sweet Acorn (Jpn, Alt) + Sweet Acorn (Japan, alt) 1984 Taito - + - Swing (Jpn) + Swing (Japan) 1985 Pony Canyon - + - Swing (Jpn, Alt) + Swing (Japan, alt) 1985 Pony Canyon - + - Takahashi Meijin no Boukenjima (Jpn) + Takahashi Meijin no Boukenjima (Japan) 1986 Hudson Soft - + - Takahashi Meijin no Boukenjima (Jpn, Alt) + Takahashi Meijin no Boukenjima (Japan, alt) 1986 Hudson Soft - + - Takahashi Meijin no Boukenjima (Kor, Star Frontiers) + Takahashi Meijin no Boukenjima (Korea, Star Frontiers) 1988 Star Frontiers - + - Takahashi Meijin no Boukenjima (Kor, Zemina) + Takahashi Meijin no Boukenjima (Korea, Zemina) 198? Zemina - + - Takeru Densetsu (Jpn) + Takeru Densetsu (Japan) 1987 Brother Kougyou - + - Tanigawa Kouji no Shougi Shinan (Jpn) + Tanigawa Kouji no Shougi Shinan (Japan) 1986 Pony Canyon - + - Tank Battalion (Jpn) + Tank Battalion (Japan) 1984 Namcot - + - Tatica (Jpn) + Tatica (Japan) 1985 ASCII - + - Tawara-kun (Jpn) + Tawara-kun (Japan) 1984 ASCII - + - Tawara-kun (Jpn, Alt) + Tawara-kun (Japan, alt) 1984 ASCII - + - Tawara-kun (Jpn, Alt 2) + Tawara-kun (Japan, alt 2) 1984 ASCII - + - Tear of Nile (Jpn) + Tear of Nile (Japan) 1986 Victor - + - Telebunnie (Jpn) + Telebunnie (Japan) 1984 ASCII - + - Telebunnie (Jpn, Alt) + Telebunnie (Japan, alt) 1984 ASCII - + - Tensai Rabbian Daifunsen (Jpn) + Tensai Rabbian Daifunsen (Japan) 1986 Toshiba EMI - + - Tenshi-tachi no Gogo (Jpn) + Tenshi-tachi no Gogo (Japan) 1987 Jast - + - Tetra Horror (Jpn) + Tetra Horror (Japan) 1983 ASCII - + - Tetra Horror (Jpn, Alt) + Tetra Horror (Japan, alt) 1983 ASCII - + - Tetris (Kor) + Tetris (Korea) 19?? Zemina - + - Tetris (Kor, Alt) + Tetris (Korea, alt) 198? Zemina - + - Tetris II (Kor) + Tetris II (Korea) 1989 Prosoft - + - Tetsuman (Jpn) + Tetsuman (Japan) 1985 HAL Kenkyuujo - + - Tetsuman (Jpn, Alt) + Tetsuman (Japan, alt) 1985 HAL Kenkyuujo - + - Thexder (Jpn) + Thexder (Japan) 1986 Game Arts? - + - Thexder (Jpn, Alt) + Thexder (Japan, alt) 1986 Game Arts? - + - Thexder (Jpn, Alt 2) + Thexder (Japan, alt 2) 1986 Game Arts? - + - The Three Dragon Story (Kor) + The Three Dragon Story (Korea) 1989 Zemina @@ -11934,555 +11827,555 @@ - Thunder Ball (Jpn) + Thunder Ball (Japan) 1985 ASCII - + - Thunder Ball (Jpn, Alt) + Thunder Ball (Japan, alt) 1985 ASCII - + - Thunderbolt (Jpn) + Thunderbolt (Japan) 1986 Pixel - + - Thunderbolt (Jpn, Alt) + Thunderbolt (Japan, alt) 1986 Pixel - + - Thunderbolt (Jpn, Alt 2) + Thunderbolt (Japan, alt 2) 1986 Pixel - + - Time Pilot (Jpn) + Time Pilot (Japan) 1983 Konami - + - Time Pilot (Jpn, Alt) + Time Pilot (Japan, alt) 1983 Konami - + - Ti Ti! Pang Pang! (Kor) + Ti Ti! Pang Pang! (Korea) 1989 Aproman - + - Top Roller! (Jpn) + Top Roller! (Japan) 1984 Jaleco - + - Topple Zip (Jpn) + Topple Zip (Japan) 1986 Bothtec - + - The Tower of Druaga (Jpn) + The Tower of Druaga (Japan) 1986 Namcot - + - Track & Field 1 (Euro) + Track & Field 1 (Europe) 1984 Konami - + - Track & Field 2 (Euro) + Track & Field 2 (Europe) 1984 Konami - + - Traffic (Jpn) + Traffic (Japan) 1986 Sony - + - Traffic (Jpn, Alt) + Traffic (Japan, alt) 1986 Sony - + - Trial Ski (Jpn) + Trial Ski (Japan) 1984 ASCII - + - Trick Boy (Jpn) + Trick Boy (Japan) 1984 T&E Soft - + - Triton (Jpn) + Triton (Japan) 1986 Sein Soft - + - Trump Aid (Jpn) + Trump Aid (Japan) 1986 Toshiba EMI - + - Turboat (Jpn) + Turboat (Japan) 1984 ASCII - + - Turmoil (Jpn) + Turmoil (Japan) 1984 ASCII - + - Turmoil (Kor) + Turmoil (Korea) 1984? Qnix - + - Twin Bee (Jpn) + Twin Bee (Japan) 1986 Konami - + - Twin Bee (Jpn, Alt) + Twin Bee (Japan, alt) 1986 Konami - + - Twin Bee (Jpn, Alt 2) + Twin Bee (Japan, alt 2) 1986 Konami - + - Twin Bee (Jpn, Alt 3) + Twin Bee (Japan, alt 3) 1986 Konami - + - Twin Hammer (Euro) + Twin Hammer (Europe) 1989 Best - + - TZR - GrandPrix Rider (Jpn) + TZR - GrandPrix Rider (Japan) 1986 ASCII - + - Ultraman (Jpn) + Ultraman (Japan) 1984 Bandai - + - Venus Fire (Jpn) + Venus Fire (Japan) 1987 Victor - + - Video Hustler (Jpn) + Video Hustler (Japan) 1984 Konami - + - Video Hustler (Jpn, Alt) + Video Hustler (Japan, alt) 1984 Konami - + - Vifam (Jpn) + Vifam (Japan) 1984 Bandai - + - Vifam (Jpn, Alt) + Vifam (Japan, alt) 1984 Bandai - + - Vigilante (Kor) + Vigilante (Korea) 1990 Clover - + - Volguard (Jpn) + Volguard (Japan) 1985 dB-Soft - + - Warp & Warp (Jpn) + Warp & Warp (Japan) 1984 Namcot - + - Warp & Warp (Kor) + Warp & Warp (Korea) 198? Zemina - + - Warrior (Jpn) + Warrior (Japan) 1983 ASCII - + - Warroid (Jpn) + Warroid (Japan) 1985 ASCII - + - Warroid (Jpn, Alt) + Warroid (Japan, alt) 1985 ASCII - + - Water Driver (Jpn) + Water Driver (Japan) 1984 Colpax? - + - Wedding Bells (Jpn) + Wedding Bells (Japan) 1984 Nihon Columbia - + - Wedding Bells (Jpn, Alt) + Wedding Bells (Japan, alt) 1984 Nihon Columbia - + - Wonsiin (Kor) + Wonsiin (Korea) 1991 Zemina @@ -12490,45 +12383,44 @@ - + - Wrangler (Spa) + Wrangler (Spain) 1985 Sony Spain - + - - The Wreck (Euro) + The Wreck (Europe) 1984 Electric Software - + - + - Xanadu - Dragon Slayer II (Kor) + Xanadu - Dragon Slayer II (Korea) 1987 Zemina - + @@ -12540,322 +12432,322 @@ - + - Xyzolog (Jpn) + Xyzolog (Japan) 1984 Nidecom - + - Xyzolog (Jpn, Alt) + Xyzolog (Japan, alt) 1984 Nidecom - + - Yab Yum (Ned) + Yab Yum (Netherlands) 19?? <unknown> - + - + - Yakyu Kyo (Jpn) + Yakyu Kyo (Japan) 1985 Hudson Soft - + - Yami no Ryuuou - Hades no Monshou (Jpn) + Yami no Ryuuou - Hades no Monshou (Japan) 1986 Casio - + - Yami no Ryuuou - Hades no Monshou (Jpn, Alt) + Yami no Ryuuou - Hades no Monshou (Japan, alt) 1986 Casio - + - Yellow Submarine (Jpn) + Yellow Submarine (Japan) 1987 Brother Kougyou - + - Yie Ar Kung-Fu (Jpn) + Yie Ar Kung-Fu (Japan) 1985 Konami - + - Yie Ar Kung-Fu (Jpn, Alt) + Yie Ar Kung-Fu (Japan, alt) 1985 Konami - + - Yie Ar Kung-Fu (Kor) + Yie Ar Kung-Fu (Korea) 198? <unknown> - + - Yie Ar Kung-Fu II - The Emperor Yie-Gah (Jpn) + Yie Ar Kung-Fu II - The Emperor Yie-Gah (Japan) 1985 Konami - + - Yie Ar Kung-Fu II - The Emperor Yie-Gah (Jpn, Alt) + Yie Ar Kung-Fu II - The Emperor Yie-Gah (Japan, alt) 1985 Konami - + - Yie Ar Kung-Fu II - The Emperor Yie-Gah (Jpn, Alt 2) + Yie Ar Kung-Fu II - The Emperor Yie-Gah (Japan, alt 2) 1985 Konami - + - Youkai Tantei Chima Chima (Jpn) + Youkai Tantei Chima Chima (Japan) 1985 Bothtec - + - Youkai Yashiki (Jpn) + Youkai Yashiki (Japan) 1986 Casio - + - Chou Senshi Zaider - Battle of Peguss (Jpn) + Chou Senshi Zaider - Battle of Peguss (Japan) 1986 Cosmos Computer - + - Chou Senshi Zaider - Battle of Peguss (Jpn, Alt) + Chou Senshi Zaider - Battle of Peguss (Japan, alt) 1986 Cosmos Computer - + - Zanac 2nd Version (Jpn) + Zanac 2nd Version (Japan) 1987 Pony Canyon - + - Zanac 2nd Version (Jpn, Alt) + Zanac 2nd Version (Japan, alt) 1987 Pony Canyon - + - Zanac (Jpn) + Zanac (Japan) 1986 Pony Canyon - + - Zanac (Jpn, Alt) + Zanac (Japan, alt) 1986 Pony Canyon - + - Zaxxon (Jpn) + Zaxxon (Japan) 1985 Pony Canyon - + - Zaxxon (Jpn, Alt) + Zaxxon (Japan, alt) 1985 Pony Canyon - + - Zemmix Baduk Gyosil (Kor) + Zemmix Baduk Gyosil (Korea) 19?? <unknown> - + - Zenji (Jpn) + Zenji (Japan) 1984 Pony Canyon - + @@ -12864,64 +12756,64 @@ - Zexas Limited (Jpn) + Zexas Limited (Japan) 1985 dB-Soft - + - Zexas Limited (Jpn, Alt) + Zexas Limited (Japan, alt) 1985 dB-Soft - + - Zexas Limited (Jpn, Alt 2) + Zexas Limited (Japan, alt 2) 1985 dB-Soft - + - Zoom 909 (Jpn) + Zoom 909 (Japan) 1986 Pony Canyon - + - Zoom 909 (Kor) + Zoom 909 (Korea) 19?? Prosoft - + @@ -12929,12 +12821,12 @@ - Mars II (Jpn) + Mars II (Japan) 1990 Nagi-P Soft - + @@ -12948,23 +12840,23 @@ - Cheese (Jpn) + Cheese (Japan) 1984 Nihon Electronics - + - The Designer's Pencil (Euro) + The Designer's Pencil (Europe) 1984 Activision? - + @@ -12973,38 +12865,38 @@ - Dr. Copy (Jpn) + Dr. Copy (Japan) 1987 Emiiru? - + - Eddy 2 (Jpn) + Eddy 2 (Japan) 1984 HAL Kenkyuujo - + - Eddy 2 (Jpn, Alt) + Eddy 2 (Japan, alt) 1984 HAL Kenkyuujo - + @@ -13016,32 +12908,32 @@ - + - Family Automation Language Community (Jpn) + Family Automation Language Community (Japan) 1984 Sony - + - Farm Kit (Euro) + Farm Kit (Europe) 1986 Sony - + @@ -13054,7 +12946,7 @@ - + @@ -13062,23 +12954,23 @@ - Game Master (Euro) + Game Master (Europe) 1985 Konami - + - Game Master (Euro, Alt) + Game Master (Europe, alt) 1985 Konami - + @@ -13089,52 +12981,52 @@ Sony - + - Home Calc (Jpn) + Home Calc (Japan) 1984 Matsushita - + - Home Writer (Jpn) + Home Writer (Japan) 1984 Sony - + - Joytelop (Jpn) + Joytelop (Japan) 1985 Victor - + - Kakikukekon (Jpn) + Kakikukekon (Japan) 1985 Casio @@ -13142,26 +13034,26 @@ - + - The Keiba (Jpn) + The Keiba (Japan) 1986 Champion Soft - + - ShinyoSizer - Konami's Synthesizer (Jpn) + ShinyoSizer - Konami's Synthesizer (Japan) 1986 Konami @@ -13169,39 +13061,39 @@ - + - Konami no Game wo 10-bai Tanoshimu Cartridge (Jpn) + Konami no Game wo 10-bai Tanoshimu Cartridge (Japan) 1985 Konami - + - Konami no Game wo 10-bai Tanoshimu Cartridge (Jpn, Alt) + Konami no Game wo 10-bai Tanoshimu Cartridge (Japan, alt) 1985 Konami - + - Konami no Shin 10-bai Cartridge (Jpn) + Konami no Shin 10-bai Cartridge (Japan) 1987 Konami @@ -13210,7 +13102,7 @@ - + @@ -13218,7 +13110,7 @@ - Konami no Shin 10-bai Cartridge (Jpn, Alt) + Konami no Shin 10-bai Cartridge (Japan, alt) 1987 Konami @@ -13227,7 +13119,7 @@ - + @@ -13235,46 +13127,46 @@ - The Links - NGA II - Network Game Adapter II (Jpn) + The Links - NGA II - Network Game Adapter II (Japan) 198? Nihon Telenet - + - The Links - NGA II - Network Game Adapter II (Jpn, Alt) + The Links - NGA II - Network Game Adapter II (Japan, alt) 198? Nihon Telenet - + - The Links - NGA - Network Game Adapter (Jpn) + The Links - NGA - Network Game Adapter (Japan) 198? Nihon Telenet - + - MSX-Aid (Jpn) + MSX-Aid (Japan) 1986 ASCII - + @@ -13361,69 +13253,69 @@ - MT-Base (Ned, Cracked) + MT-Base (Netherlands, cracked) 1987 Micro Technology - + - Music Editor - MUE (Jpn) + Music Editor - MUE (Japan) 1984 HAL Kenkyuujo - + - Music Harmonizer 3 (Jpn) + Music Harmonizer 3 (Japan) 1984 MCS - + - Music Studio G7 (Jpn) + Music Studio G7 (Japan) 1985 Sony - + - Musiwriter - PSG (Jpn) + Musiwriter - PSG (Japan) 1984 MCS - + - New Horizon - English Course 1 (Jpn) + New Horizon - English Course 1 (Japan) 1987 Tokyo Shoseki @@ -13431,152 +13323,152 @@ - + - Nihon-Shi Nenpyou (Jpn) + Nihon-Shi Nenpyou (Japan) 1987 Stratford Computer Center - + - Pasokon Sakkyokka (Jpn) + Pasokon Sakkyokka (Japan) 1983 ASCII - + - Psychedelia (Euro) + Psychedelia (Europe) 19?? <unknown> - + - Real Time Sequencer DMS1 (Euro?) + Real Time Sequencer DMS1 (Europe?) 19?? Digital Music Systems - + - Simple ASM 1.0 (Jpn) + Simple ASM 1.0 (Japan) 1984 Coral - + - Service Floppy Disk Drive Test (Euro?) + Service Floppy Disk Drive Test (Europe?) 19?? Philips - + - Service Test Cart MSX1 (Euro?) + Service Test Cart MSX1 (Europe?) 19?? Philips - + - Spread Sheet (Euro) + Spread Sheet (Europe) 1984 Computermates - + - Super Monitor (Jpn, v1.2) + Super Monitor (Japan, v1.2) 1985 Emiiru? - + - Super Monitor (Jpn, v1.1) + Super Monitor (Japan, v1.1) 1985 Emiiru? - + - Super Synth (Jpn) + Super Synth (Japan) 1984 Victor - + - Super Synth (Jpn, Alt) + Super Synth (Japan, alt) 1984 Victor - + @@ -13587,18 +13479,18 @@ Gradiente - + - Zen Assembler (Euro) + Zen Assembler (Europe) 1986 Kuma Computers? - + @@ -13607,230 +13499,230 @@ - Yamaha DX7 Voicing Program YRM-103 (Jpn) + Yamaha DX7 Voicing Program YRM-103 (Japan) 198? Yamaha - + - Yamaha DX7 Voicing Program YRM-103 (Jpn, Alt) + Yamaha DX7 Voicing Program YRM-103 (Japan, alt) 198? Yamaha - + - Yamaha DX7 Voicing Program II YRM-304 (Jpn) + Yamaha DX7 Voicing Program II YRM-304 (Japan) 198? Yamaha - + - Yamaha DX9 Voicing Program YRM-105 (Jpn) + Yamaha DX9 Voicing Program YRM-105 (Japan) 198? Yamaha - + - Yamaha DX21 Voicing Program YRM-305 (Jpn) + Yamaha DX21 Voicing Program YRM-305 (Japan) 198? Yamaha - + - Yamaha FB-01 Voicing Program YRM-506 (Jpn) + Yamaha FB-01 Voicing Program YRM-506 (Japan) 1985 Yamaha - + - Yamaha FM Auto Arranger CMP-01 (Jpn) + Yamaha FM Auto Arranger CMP-01 (Japan) 198? Yamaha - + - Yamaha FM Music Composer YRM-101 (Jpn) + Yamaha FM Music Composer YRM-101 (Japan) 1984 Yamaha - + - Yamaha FM Music Composer YRM-101 (Jpn, Alt) + Yamaha FM Music Composer YRM-101 (Japan, alt) 1984 Yamaha - + - Yamaha FM Music Composer II YRM-501 (Jpn) + Yamaha FM Music Composer II YRM-501 (Japan) 1984 Yamaha - + - Yamaha FM Music Macro YRM-104 (Jpn) + Yamaha FM Music Macro YRM-104 (Japan) 1984 Yamaha - + - Yamaha FM Music Macro II YRM-504 (Jpn) + Yamaha FM Music Macro II YRM-504 (Japan) 198? Yamaha - + - Yamaha FM Voicing Program (Jpn) + Yamaha FM Voicing Program (Japan) 1985 Yamaha - + - Yamaha FM Voicing Program YRM-102 (Jpn) + Yamaha FM Voicing Program YRM-102 (Japan) 198? Yamaha - + - Yamaha FM Voicing Program II YRM-502 (Jpn) + Yamaha FM Voicing Program II YRM-502 (Japan) 198? Yamaha - + - Yamaha MIDI Macro (Jpn) + Yamaha MIDI Macro (Japan) 1986 Yamaha - + - Yamaha MIDI Macro & Monitor YRM-303 (Jpn) + Yamaha MIDI Macro & Monitor YRM-303 (Japan) 198? Yamaha - + - Yamaha MIDI Recorder YRM-301 (Jpn) + Yamaha MIDI Recorder YRM-301 (Japan) 198? Yamaha - + - Yamaha Play Card System UPA-01 (Jpn) + Yamaha Play Card System UPA-01 (Japan) 1985 Yamaha - + - Yamaha Rhythm Editor YRM-302 (Jpn) + Yamaha Rhythm Editor YRM-302 (Japan) 198? Yamaha - + @@ -13839,18 +13731,18 @@ - MSX Basic-kun Plus 2.0 (Jpn) + MSX Basic-kun Plus 2.0 (Japan) 1988 ASCII - + - Panasonic FS-CA1 MSX-Audio + BASIC (Jpn) + Panasonic FS-CA1 MSX-Audio + BASIC (Japan) 1988 Panasonic @@ -13864,7 +13756,7 @@ 36d47cf70618fdb460f97a8ceb75013ec4529063 - A dump made using an eeprom reader. This dump differs one bit with the dump above (offset 8a49, bit 3) By looking the code it is not yet possible to say which one is 100% correct, so marking it as baddump for the moment. --> - + @@ -13880,7 +13772,7 @@ - + @@ -13893,7 +13785,7 @@ - + - National FS-SR022 Bunsetsu Henkan Jisho (Jpn) + National FS-SR022 Bunsetsu Henkan Jisho (Japan) 1985 Matsushita @@ -13935,7 +13827,7 @@ - + - + @@ -14549,20 +14441,20 @@ - + - Ibn Maleck (Arab, Alt) + Ibn Maleck (Arab, alt) 1985 Al Alamiah - + @@ -14575,20 +14467,20 @@ - + - Ibn Sina 1 (Arab, Alt) + Ibn Sina 1 (Arab, alt) 1985 Al Alamiah - + @@ -14601,7 +14493,7 @@ - + @@ -14614,7 +14506,7 @@ - + @@ -14627,7 +14519,7 @@ - + @@ -14640,33 +14532,33 @@ - + - Islam Built on Five (Arab, Alt) + Islam Built on Five (Arab, alt) 1986 Al Alamiah - + - Islam Built on Five (Arab, Alt 2) + Islam Built on Five (Arab, alt 2) 1986 Al Alamiah - + @@ -14678,7 +14570,7 @@ - + @@ -14691,20 +14583,20 @@ - + - Koufi (Arab, Alt) + Koufi (Arab, alt) 1984 Al Alamiah - + @@ -14717,7 +14609,7 @@ - + @@ -14730,7 +14622,7 @@ - + @@ -14743,7 +14635,7 @@ - + @@ -14756,7 +14648,7 @@ - + @@ -14769,20 +14661,20 @@ - + - Magic Touch (Arab, Alt) + Magic Touch (Arab, alt) 1985 Al Alamiah - + @@ -14795,7 +14687,7 @@ - + @@ -14808,7 +14700,7 @@ - + @@ -14821,7 +14713,7 @@ - + @@ -14834,20 +14726,20 @@ - + - Magnetics (Arab, Alt) + Magnetics (Arab, alt) 1986 Al Alamiah - + @@ -14860,20 +14752,20 @@ - + - Memory (Arab, Alt) + Memory (Arab, alt) 1984 Al Alamiah - + @@ -14886,20 +14778,20 @@ - + - Multiply & Divide (Arab, Alt) + Multiply & Divide (Arab, alt) 1986 Al Alamiah - + @@ -14914,7 +14806,7 @@ - + @@ -14927,20 +14819,20 @@ - + - My Clock (Arab, Alt) + My Clock (Arab, alt) 1987 Al Alamiah - + @@ -14953,7 +14845,7 @@ - + @@ -14966,20 +14858,20 @@ - + - Number & Target (Arab, Alt) + Number & Target (Arab, alt) 1986 Al Alamiah - + @@ -14992,7 +14884,7 @@ - + @@ -15005,20 +14897,20 @@ - + - Our Arabic World (Arab, Alt) + Our Arabic World (Arab, alt) 1987 Al Alamiah - + @@ -15031,20 +14923,20 @@ - + - Periodic Table (Arab, Al Alamiah, Alt) + Periodic Table (Arab, Al Alamiah, alt) 1985 Al Alamiah - + @@ -15059,7 +14951,7 @@ - + @@ -15072,7 +14964,7 @@ - + @@ -15085,7 +14977,7 @@ - + @@ -15098,7 +14990,7 @@ - + @@ -15111,7 +15003,7 @@ - + @@ -15124,7 +15016,7 @@ - + @@ -15139,7 +15031,7 @@ - + @@ -15154,7 +15046,7 @@ - + @@ -15169,7 +15061,7 @@ - + @@ -15182,7 +15074,7 @@ - + @@ -15195,7 +15087,7 @@ - + @@ -15208,7 +15100,7 @@ - + @@ -15221,7 +15113,7 @@ - + @@ -15234,7 +15126,7 @@ - + @@ -15247,7 +15139,7 @@ - + @@ -15260,7 +15152,7 @@ - + @@ -15273,7 +15165,7 @@ - + @@ -15286,7 +15178,7 @@ - + @@ -15299,7 +15191,7 @@ - + @@ -15312,7 +15204,7 @@ - + @@ -15325,7 +15217,7 @@ - + @@ -15338,7 +15230,7 @@ - + @@ -15351,20 +15243,20 @@ - + - Who? (Arab, Alt) + Who? (Arab, alt) 1987 Al Alamiah - + @@ -15377,7 +15269,7 @@ - + @@ -15390,7 +15282,7 @@ - + @@ -15403,33 +15295,33 @@ - + - Voyage to Mecca (Arab, Alt) + Voyage to Mecca (Arab, alt) 1985 Al Alamiah - + - Voyage to Mecca (Arab, Alt 2) + Voyage to Mecca (Arab, alt 2) 1985 Al Alamiah - + @@ -15442,7 +15334,7 @@ - + @@ -15455,7 +15347,7 @@ - + @@ -15467,7 +15359,7 @@ - + @@ -15482,7 +15374,7 @@ - + @@ -15495,7 +15387,7 @@ - + @@ -15510,7 +15402,7 @@ - + @@ -15525,19 +15417,19 @@ - + - A'lamona (Arab, Alt) + A'lamona (Arab, alt) 1985 Barq - + @@ -15548,18 +15440,18 @@ Barq - + - Aladdin (Arab, Alt) + Aladdin (Arab, alt) 1986 Barq - + @@ -15570,7 +15462,7 @@ Barq - + @@ -15581,18 +15473,18 @@ Barq - + - Baba Sanfour (Arab, Alt) + Baba Sanfour (Arab, alt) 1987 Barq - + @@ -15603,7 +15495,7 @@ Barq - + @@ -15614,7 +15506,7 @@ Barq - + @@ -15626,7 +15518,7 @@ - + @@ -15637,18 +15529,18 @@ Barq - + - Fraction (Arab, Alt) + Fraction (Arab, alt) 1987 Barq - + @@ -15659,7 +15551,7 @@ Barq - + @@ -15670,7 +15562,7 @@ Barq - + @@ -15681,7 +15573,7 @@ Barq - + @@ -15693,19 +15585,19 @@ - + - Instructor (Arab, Alt) + Instructor (Arab, alt) 1985 Barq - + @@ -15716,7 +15608,7 @@ Barq - + @@ -15727,18 +15619,18 @@ Barq - + - Meaning (Arab, Alt) + Meaning (Arab, alt) 1986 Barq - + @@ -15749,7 +15641,7 @@ Barq - + @@ -15760,7 +15652,7 @@ Barq - + @@ -15771,18 +15663,18 @@ Barq - + - Our Homeland (Arab, Alt) + Our Homeland (Arab, alt) 1987 Barq - + @@ -15793,7 +15685,7 @@ Barq - + @@ -15804,7 +15696,7 @@ Barq - + @@ -15815,7 +15707,7 @@ Barq - + @@ -15826,18 +15718,18 @@ Barq - + - Shater Hassan (Arab, Barq, Alt) + Shater Hassan (Arab, Barq, alt) 1987 Barq - + @@ -15848,7 +15740,7 @@ Barq - + @@ -15859,18 +15751,18 @@ Barq - + - Sky Wolf (Arab, Alt) + Sky Wolf (Arab, alt) 1987 Barq - + @@ -15881,7 +15773,7 @@ Barq - + @@ -15892,7 +15784,7 @@ Barq - + @@ -15903,7 +15795,7 @@ Barq - + @@ -15914,7 +15806,7 @@ Barq - + @@ -15943,7 +15835,7 @@ Methali - + @@ -15954,7 +15846,7 @@ Methali - + @@ -15965,7 +15857,7 @@ Methali - + @@ -15976,7 +15868,7 @@ Methali - + @@ -15987,7 +15879,7 @@ Methali - + @@ -15998,7 +15890,7 @@ Methali - + @@ -16009,7 +15901,7 @@ Methali - + @@ -16020,7 +15912,7 @@ Methali - + @@ -16031,7 +15923,7 @@ Methali - + @@ -16042,7 +15934,7 @@ Methali - + @@ -16053,7 +15945,7 @@ Methali - + @@ -16064,7 +15956,7 @@ Methali - + @@ -16075,7 +15967,7 @@ Methali - + @@ -16086,7 +15978,7 @@ Methali - + @@ -16097,7 +15989,7 @@ Methali - + @@ -16108,7 +16000,7 @@ Methali - + @@ -16119,7 +16011,7 @@ Methali - + @@ -16130,7 +16022,7 @@ Methali - + @@ -16141,7 +16033,7 @@ Methali - + @@ -16152,7 +16044,7 @@ Methali - + @@ -16163,7 +16055,7 @@ Methali - + @@ -16174,7 +16066,7 @@ Methali - + @@ -16185,7 +16077,7 @@ Methali - + @@ -16196,7 +16088,7 @@ Methali - + @@ -16207,7 +16099,7 @@ Methali - + @@ -16218,7 +16110,7 @@ Methali - + @@ -16229,7 +16121,7 @@ Methali - + @@ -16380,7 +16272,7 @@ - + @@ -16394,7 +16286,7 @@ - + @@ -16409,7 +16301,7 @@ - + @@ -16570,7 +16462,7 @@ - + @@ -16584,7 +16476,7 @@ - + @@ -16598,7 +16490,7 @@ - + diff -Nru mame-0.250+dfsg.1/hash/msx1_cass.xml mame-0.251+dfsg.1/hash/msx1_cass.xml --- mame-0.250+dfsg.1/hash/msx1_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/msx1_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -47,7 +47,7 @@ - Albatross - Extended Course 1 (Jpn) + Albatross - Extended Course 1 (Japan) 1986 Nihon Telenet @@ -61,7 +61,7 @@ - Albatross - Extended Course 2 (Jpn) + Albatross - Extended Course 2 (Japan) 1986 Nihon Telenet @@ -77,7 +77,7 @@ - Toshiba Home Computer HX-10 Sample Program (Euro) + Toshiba Home Computer HX-10 Sample Program (Europe) 1984? Toshiba @@ -92,7 +92,7 @@ - Genius (Jpn) + Genius (Japan) 1987 ポプコム(POPCOM) @@ -109,7 +109,7 @@ - 007 - The Living Daylights (Euro) + 007 - The Living Daylights (Europe) 1987 Domark @@ -122,7 +122,7 @@ - 007 - The Living Daylights (Euro, Alt) + 007 - The Living Daylights (Europe, alt) 1987 Domark @@ -135,7 +135,7 @@ - 007 Agente Especial (Spa) + 007 Agente Especial (Spain) 1985 Monser @@ -148,7 +148,7 @@ - 10th Frame (Euro) + 10th Frame (Europe) 1986 U.S. Gold @@ -161,7 +161,7 @@ - 180 (Euro) + 180 (Europe) 1987 Mastertronic Added Dimension @@ -174,7 +174,7 @@ - 3D Golf Simulation (Jpn) + 3D Golf Simulation (Japan) 1984 T&E Soft @@ -187,7 +187,7 @@ - 4x4 Off-Road Racing (Euro) + 4x4 Off-Road Racing (Europe) 1988 U.S. Gold @@ -207,7 +207,7 @@ - 4x4 Off-Road Racing (Euro, Alt) + 4x4 Off-Road Racing (Europe, alt) 1988 U.S. Gold @@ -227,7 +227,7 @@ - 6 in Een (Ned) + 6 in Een (Netherlands) 1986 Philips @@ -240,7 +240,7 @@ - 7 Card Stud (Euro) + 7 Card Stud (Europe) 1986 Martech Games @@ -253,7 +253,7 @@ - 7 Card Stud (Euro, Alt) + 7 Card Stud (Europe, alt) 1986 Martech Games @@ -266,7 +266,7 @@ - 737 Flight Simulator (Euro) + 737 Flight Simulator (Europe) 1984 Mirrorsoft @@ -279,7 +279,7 @@ - 737 Flight Simulator (Euro, Alt) + 737 Flight Simulator (Europe, alt) 1984 Mirrorsoft @@ -292,7 +292,7 @@ - 747 400b Flight Simulator (Euro) + 747 400b Flight Simulator (Europe) 1988 Eurosoft @@ -304,7 +304,7 @@ - The A-Team (Spa) + The A-Team (Spain) 198? Zafiro Software Division @@ -324,7 +324,7 @@ - Aaargh! (Spa) + Aaargh! (Spain) 1989 Dro Soft @@ -337,7 +337,7 @@ - Aaargh! (Spa, Alt) + Aaargh! (Spain, alt) 1989 Dro Soft @@ -350,7 +350,7 @@ - Aackobase II (Euro) + Aackobase II (Europe) 1985 Aackosoft @@ -363,7 +363,7 @@ - Aackobase II (Euro, Alt) + Aackobase II (Europe, alt) 1985 Aackosoft @@ -376,7 +376,7 @@ - Aackodraw & Paint (Euro) + Aackodraw & Paint (Europe) 1985 Aackosoft @@ -389,7 +389,7 @@ - La Abadia del Crimen (Spa) + La Abadia del Crimen (Spain) 1988 Opera Soft @@ -402,7 +402,7 @@ - La Abeja Sabia - Seriaciones (Spa) + La Abeja Sabia - Seriaciones (Spain) 1986 Anaya Multimedia @@ -416,7 +416,7 @@ - La Abeja Sabia - Analisis: Forma y Color (Spa) + La Abeja Sabia - Analisis: Forma y Color (Spain) 1986 Anaya Multimedia @@ -430,7 +430,7 @@ - Abracadabra (Spa) + Abracadabra (Spain) 1988 Proein Soft Line @@ -450,7 +450,7 @@ - Abu Simbel Profanation (Spa) + Abu Simbel Profanation (Spain) 1986 Dinamic Software @@ -463,7 +463,7 @@ - Abu Simbel Profanation (Spa, Alt) + Abu Simbel Profanation (Spain, alt) 1986 Dinamic Software @@ -476,7 +476,7 @@ - Abu Simbel Profanation (Spa, Alt 2) + Abu Simbel Profanation (Spain, alt 2) 1986 Dinamic Software @@ -489,7 +489,7 @@ - Abu Simbel Profanation (Spa, Alt Loader) + Abu Simbel Profanation (Spain, alt loader) 1986 Dinamic Software @@ -502,7 +502,7 @@ - Ace of Aces (Euro) + Ace of Aces (Europe) 1986 U.S. Gold @@ -515,7 +515,7 @@ - Addictaball (Euro) + Addictaball (Europe) 1988 Alligata Software @@ -528,7 +528,7 @@ - Adel (Spa) + Adel (Spain) 1986 Mind Games España @@ -541,7 +541,7 @@ - African Trail Simulator (Spa) + African Trail Simulator (Spain) 1990 Positive @@ -554,7 +554,7 @@ - African Trail Simulator (Spa, Alt) + African Trail Simulator (Spain, alt) 1990 Positive @@ -567,7 +567,7 @@ - After the War (Spa) + After the War (Spain) 1989 Dinamic Software @@ -587,7 +587,7 @@ - Afterburner (Euro) + Afterburner (Europe) 1988 Activision @@ -607,7 +607,7 @@ - Afteroids (Spa) + Afteroids (Spain) 1988 Zigurat Software @@ -620,7 +620,7 @@ - Afteroids (Spa, Alt) + Afteroids (Spain, alt) 1988 Zigurat Software @@ -633,7 +633,7 @@ - Ale Hop! (Spa) + Ale Hop! (Spain) 1988 Topo Soft @@ -646,7 +646,7 @@ - Alfamat (Spa) + Alfamat (Spain) 1985 Anaya Multimedia @@ -659,7 +659,7 @@ - Alien 8 (Euro) + Alien 8 (Europe) 1985 Ultimate Play The Game @@ -672,7 +672,7 @@ - Alien Syndrome (Spa) + Alien Syndrome (Spain) 1988 Dro Soft @@ -692,7 +692,7 @@ - Aliens (Euro) + Aliens (Europe) 1987 Mr. Micro @@ -705,7 +705,7 @@ - Almanaque (Spa) + Almanaque (Spain) 1986 Load 'n' Run @@ -718,7 +718,7 @@ - Alpha Blaster (Euro, Aackosoft, 1st Edition) + Alpha Blaster (Europe, Aackosoft, 1st Edition) 1984 Aackosoft @@ -731,7 +731,7 @@ - Alpha Blaster (Euro, Aackosoft) + Alpha Blaster (Europe, Aackosoft) 1984 Aackosoft @@ -744,7 +744,7 @@ - Alpha Blaster (Euro, Aackosoft, Alt) + Alpha Blaster (Europe, Aackosoft, alt) 1984 Aackosoft @@ -757,7 +757,7 @@ - Alpha Blaster (Euro, Eaglesoft) + Alpha Blaster (Europe, Eaglesoft) 1987 Eaglesoft @@ -770,7 +770,7 @@ - Alpha Blaster (Euro, Eaglesoft, Alt) + Alpha Blaster (Europe, Eaglesoft, alt) 1987 Eaglesoft @@ -783,7 +783,7 @@ - Altered Beast (Euro) + Altered Beast (Europe) 1988 Activision @@ -803,7 +803,7 @@ - Amaurote (Euro) + Amaurote (Europe) 1987 Mastertronic Added Dimension @@ -816,7 +816,7 @@ - Amo del Mundo (Spa) + Amo del Mundo (Spain) 1990 Positive @@ -829,7 +829,7 @@ - Amoto's Puf (Spa) + Amoto's Puf (Spain) 1988 SPE @@ -842,7 +842,7 @@ - Ananas (Euro) + Ananas (Europe) 1989 Eurosoft @@ -856,7 +856,7 @@ - Angel Nieto Pole 500cc (Spa) + Angel Nieto Pole 500cc (Spain) 1990 Opera Soft @@ -869,7 +869,7 @@ - Angleball (Euro) + Angleball (Europe) 1987 Mastertronic Added Dimension @@ -973,7 +973,7 @@ - ArcticFox (Spa) + ArcticFox (Spain) 1989 Dro Soft @@ -986,7 +986,7 @@ - Aritmo (Spa) + Aritmo (Spain) 1985 DIMensionNEW @@ -999,7 +999,7 @@ - Arkanoid (Euro?) + Arkanoid (Europe?) 1986 Taito @@ -1012,7 +1012,7 @@ - Arkos I (Spa) + Arkos I (Spain) 1988 Zigurat Software @@ -1025,7 +1025,7 @@ - Arkos II (Spa) + Arkos II (Spain) 1988 Zigurat Software @@ -1038,7 +1038,7 @@ - Arkos III (Spa) + Arkos III (Spain) 1988 Zigurat Software @@ -1051,7 +1051,7 @@ - Army Moves (Euro) + Army Moves (Europe) 1987 Dinamic Software @@ -1071,7 +1071,7 @@ - Army Moves (Spa) + Army Moves (Spain) 1987 Dinamic Software @@ -1091,7 +1091,7 @@ - Arquimedes XXI (Spa) + Arquimedes XXI (Spain) 1986 Dinamic Software @@ -1104,7 +1104,7 @@ - Arquimedes XXI (Spa, Alt Loader) + Arquimedes XXI (Spain, alt loader) 1986 Dinamic Software @@ -1117,7 +1117,7 @@ - Aspar GP Master (Euro) + Aspar GP Master (Europe) 1989 Dinamic Software @@ -1130,7 +1130,7 @@ - Aspar GP Master (Spa) + Aspar GP Master (Spain) 1988 Dinamic Software @@ -1143,7 +1143,7 @@ - Aspar GP Master (Spa, Alt) + Aspar GP Master (Spain, alt) 1988 Dinamic Software @@ -1156,7 +1156,7 @@ - Aspar GP Master (Spa, Alt 2) + Aspar GP Master (Spain, alt 2) 1988 Dinamic Software @@ -1169,7 +1169,7 @@ - Aspar GP Master (Spa, Alt 3) + Aspar GP Master (Spain, alt 3) 1988 Dinamic Software @@ -1182,7 +1182,7 @@ - Astro Blaster (Euro) + Astro Blaster (Europe) 1988 Eurosoft @@ -1195,7 +1195,7 @@ - Astro Blaster (Euro, Alt) + Astro Blaster (Europe, alt) 1988 Eurosoft @@ -1208,7 +1208,7 @@ - Astro Blaster (Euro, Alt 2) + Astro Blaster (Europe, alt 2) 1988 Eurosoft @@ -1221,7 +1221,7 @@ - Astro Marine Corps (Spa) + Astro Marine Corps (Spain) 1989 Dinamic Software @@ -1241,7 +1241,7 @@ - Astro Marine Corps (Spa, Alt) + Astro Marine Corps (Spain, alt) 1989 Dinamic Software @@ -1261,7 +1261,7 @@ - Astro Plumber (Euro) + Astro Plumber (Europe) 1986 Blue Ribbon Software @@ -1274,7 +1274,7 @@ - Astronauta (Spa) + Astronauta (Spain) 1986 Load 'n' Run @@ -1288,7 +1288,7 @@ - Attacked (Euro) + Attacked (Europe) 198? Tynesoft @@ -1301,7 +1301,7 @@ - Auf Wiedersehen Monty (Euro) + Auf Wiedersehen Monty (Europe) 1987 Gremlin Graphics @@ -1314,7 +1314,7 @@ - Avenger (Euro) + Avenger (Europe) 1986 Gremlin Graphics @@ -1327,7 +1327,7 @@ - Avenger (Spa) + Avenger (Spain) 1986 Erbe Software @@ -1340,7 +1340,7 @@ - La Aventura Espacial (Spa) + La Aventura Espacial (Spain) 1990 Aventuras AD @@ -1360,7 +1360,7 @@ - La Aventura Original (Spa) + La Aventura Original (Spain) 1989 Aventuras AD @@ -1380,7 +1380,7 @@ - Averno (Spa) + Averno (Spain) 1989 Proein Soft Line @@ -1393,7 +1393,7 @@ - B.C.'s Quest for Tires II - Grog's Revenge (Euro, U.S. Gold) + B.C.'s Quest for Tires II - Grog's Revenge (Europe, U.S. Gold) 1985 U.S. Gold @@ -1406,7 +1406,7 @@ - B.C.'s Quest for Tires II - Grog's Revenge (Euro, U.S. Gold, Alt) + B.C.'s Quest for Tires II - Grog's Revenge (Europe, U.S. Gold, alt) 1985 U.S. Gold @@ -1419,7 +1419,7 @@ - B.C.'s Quest for Tires II - Grog's Revenge (Euro, Eaglesoft) + B.C.'s Quest for Tires II - Grog's Revenge (Europe, Eaglesoft) 1987 Eaglesoft @@ -1432,7 +1432,7 @@ - Backgammon (Euro) + Backgammon (Europe) 1984 Electric Software @@ -1445,7 +1445,7 @@ - Barbarian (Euro) + Barbarian (Europe) 1988 Mastertronic @@ -1458,7 +1458,7 @@ - Barbarian II - The Dungeon of Drax (Spa) + Barbarian II - The Dungeon of Drax (Spain) 1988 Erbe Software @@ -1471,7 +1471,7 @@ - Barn Stormer (Euro) + Barn Stormer (Europe) 1985 Electric Software @@ -1484,7 +1484,7 @@ - Base de Datos (Spa, DIMensionNEW) + Base de Datos (Spain, DIMensionNEW) 1985 DIMensionNEW @@ -1497,7 +1497,7 @@ - Base de Datos (Spa, Toshiba) + Base de Datos (Spain, Toshiba) 198? Toshiba @@ -1510,7 +1510,7 @@ - Batalla Espacial (Spa) + Batalla Espacial (Spain) 198? Grupo de Trabajo Software @@ -1524,7 +1524,7 @@ - Batman (Euro) + Batman (Europe) 1986 Ocean Software @@ -1537,7 +1537,7 @@ - Batman (Euro, Alt) + Batman (Europe, alt) 1986 Ocean Software @@ -1550,7 +1550,7 @@ - Batman (Spa) + Batman (Spain) 1986 Erbe Software @@ -1563,7 +1563,7 @@ - Batman - The Movie (Euro) + Batman - The Movie (Europe) 1989 Ocean Software @@ -1583,7 +1583,7 @@ - La Battaglia delle Ardenne (Ita) + La Battaglia delle Ardenne (Italy) 198? Philips Italy @@ -1596,7 +1596,7 @@ - Battle Chopper (Euro) + Battle Chopper (Europe) 1985 Methodic Solutions @@ -1609,7 +1609,7 @@ - Battle Ship Clapton II (Jpn?) + Battle Ship Clapton II (Japan?) 1984 Toshiba @@ -1622,7 +1622,7 @@ - Beach-Head (Euro) + Beach-Head (Europe) 1985 U.S. Gold @@ -1635,7 +1635,7 @@ - Beamrider (Euro) + Beamrider (Europe) 1984 Activision @@ -1648,7 +1648,7 @@ - Bestial Warrior (Spa) + Bestial Warrior (Spain) 1989 Dinamic Software @@ -1661,7 +1661,7 @@ - Bestial Warrior (Spa, Alt) + Bestial Warrior (Spain, alt) 1989 Dinamic Software @@ -1674,7 +1674,7 @@ - Bit Byter (Euro) + Bit Byter (Europe) 198? Spectravideo @@ -1687,7 +1687,7 @@ - The Black Bass (Jpn) + The Black Bass (Japan) 1986 Hot-B @@ -1700,7 +1700,7 @@ - Blackbeard (Spa) + Blackbeard (Spain) 1988 Topo Soft @@ -1713,7 +1713,7 @@ - Blackjack (Spa) + Blackjack (Spain) 1985 DIMensionNEW @@ -1726,7 +1726,7 @@ - Blagger (Euro) + Blagger (Europe) 1984 Alligata Software @@ -1739,7 +1739,7 @@ - Blasteroids (Euro) + Blasteroids (Europe) 1987 Image Works @@ -1752,7 +1752,7 @@ - Blocker (Spa) + Blocker (Spain) 198? Grupo de Trabajo Software @@ -1765,7 +1765,7 @@ - Bloody (Spa) + Bloody (Spain) 1987 P.J. Software @@ -1778,7 +1778,7 @@ - Blow Up (Euro) + Blow Up (Europe) 1988 Eurosoft @@ -1791,7 +1791,7 @@ - Blow Up (Euro, Alt) + Blow Up (Europe, alt) 1988 Eurosoft @@ -1804,7 +1804,7 @@ - BMX Simulator (Euro) + BMX Simulator (Europe) 1987 Codemasters @@ -1817,7 +1817,7 @@ - Boardello (Euro) + Boardello (Europe) 1985 Bubble Bus Software @@ -1830,7 +1830,7 @@ - Boardello (Euro, Alt) + Boardello (Europe, alt) 1985 Bubble Bus Software @@ -1843,7 +1843,7 @@ - Booga-Boo the Flea (Euro) + Booga-Boo the Flea (Europe) 1986 Quicksilva @@ -1856,7 +1856,7 @@ - Booga-Boo the Flea (Euro, Alt) + Booga-Boo the Flea (Europe, alt) 1986 Quicksilva @@ -1869,7 +1869,7 @@ - Boom (Euro, Aackosoft) + Boom (Europe, Aackosoft) 1986 Aackosoft @@ -1882,7 +1882,7 @@ - Boom (Euro, Eurosoft) + Boom (Europe, Eurosoft) 1988 Eurosoft @@ -1895,7 +1895,7 @@ - Booty (Euro) + Booty (Europe) 1988 Eurosoft @@ -1908,7 +1908,7 @@ - Bop! (Euro) + Bop! (Europe) 1986 Bug-Byte Software @@ -1921,7 +1921,7 @@ - Bouken Roman - Dota (Euro) + Bouken Roman - Dota (Europe) 1986 Eaglesoft @@ -1934,7 +1934,7 @@ - Boulder Dash (Euro) + Boulder Dash (Europe) 1985 Databyte @@ -1947,7 +1947,7 @@ - Boulder Dash (Euro, Alt) + Boulder Dash (Europe, alt) 1985 Databyte @@ -1960,7 +1960,7 @@ - Boulder Dash II - Rockford's Riot (Euro) + Boulder Dash II - Rockford's Riot (Europe) 1986 Databyte @@ -1973,7 +1973,7 @@ - Boulder Dash II - Rockford's Riot (Euro, Alt) + Boulder Dash II - Rockford's Riot (Europe, alt) 1986 Databyte @@ -1986,7 +1986,7 @@ - Bounce (Euro) + Bounce (Europe) 1987 Methodic Solutions @@ -1999,7 +1999,7 @@ - Bounder (Euro) + Bounder (Europe) 1987 Gremlin Graphics @@ -2012,7 +2012,7 @@ - Bounder (Euro, Alt) + Bounder (Europe, alt) 1987 Gremlin Graphics @@ -2025,7 +2025,7 @@ - Break In (Euro) + Break In (Europe) 1987 Eaglesoft @@ -2038,7 +2038,7 @@ - Break In (Euro, Alt) + Break In (Europe, alt) 1987 Eaglesoft @@ -2051,7 +2051,7 @@ - Break Out! (Jpn) + Break Out! (Japan) 1985 Toshiba @@ -2064,7 +2064,7 @@ - Break Out! (Jpn, Alt) + Break Out! (Japan, alt) 1985 Toshiba @@ -2077,7 +2077,7 @@ - Break Out! (Jpn, Alt 2) + Break Out! (Japan, alt 2) 1985 Toshiba @@ -2090,7 +2090,7 @@ - Breaker Breaker (Euro) + Breaker Breaker (Europe) 1988 Eurosoft @@ -2103,7 +2103,7 @@ - Breaker Breaker (Euro, Alt) + Breaker Breaker (Europe, alt) 1988 Eurosoft @@ -2116,7 +2116,7 @@ - Brian Jacks Superstar Challenge (Euro) + Brian Jacks Superstar Challenge (Europe) 1985 Martech Games @@ -2136,7 +2136,7 @@ - Brian Jacks Superstar Challenge (Euro, Alt) + Brian Jacks Superstar Challenge (Europe, alt) 1985 Martech Games @@ -2156,7 +2156,7 @@ - Bronx (Spa) + Bronx (Spain) 1989 Animagic @@ -2169,7 +2169,7 @@ - Bruce Lee (Jpn) + Bruce Lee (Japan) 1985 Comptiq @@ -2182,7 +2182,7 @@ - Bubbler (Euro) + Bubbler (Europe) 1987 Ultimate Play The Game @@ -2195,7 +2195,7 @@ - Buck Rogers - Planet of Zoom (Jpn) + Buck Rogers - Planet of Zoom (Japan) 1983 Sega @@ -2208,7 +2208,7 @@ - Budokan (Spa) + Budokan (Spain) 1991 Dro Soft @@ -2240,7 +2240,7 @@ - Buggy Ranger (Spa) + Buggy Ranger (Spain) 1990 Dinamic Software @@ -2253,7 +2253,7 @@ - Bumpy (Fra) + Bumpy (France) 1989 Loriciels @@ -2266,7 +2266,7 @@ - Bumpy (Fra, Alt) + Bumpy (France, alt) 1989 Loriciels @@ -2279,7 +2279,7 @@ - Bumpy (Spa) + Bumpy (Spain) 198? Grupo de Trabajo Software @@ -2292,7 +2292,7 @@ - Buran (Spa) + Buran (Spain) 1990 OMK Software @@ -2305,7 +2305,7 @@ - Buster Block (Euro) + Buster Block (Europe) 1985 Kuma Computers @@ -2318,7 +2318,7 @@ - Buzz Off! (Euro) + Buzz Off! (Europe) 1984 Electric Software @@ -2331,7 +2331,7 @@ - Buzz Off! (Euro, Alt) + Buzz Off! (Europe, alt) 1984 Electric Software @@ -2344,7 +2344,7 @@ - Buzz Off! (Euro, Alt Loader) + Buzz Off! (Europe, alt loader) 1984 Electric Software @@ -2357,7 +2357,7 @@ - Bytebusters (Euro) + Bytebusters (Europe) 1984 Aackosoft @@ -2370,7 +2370,7 @@ - Calculator New (Spa) + Calculator New (Spain) 1985 DIMensionNEW @@ -2383,7 +2383,7 @@ - El Caldero Magico (Spa) + El Caldero Magico (Spain) 1986 Grupo de Trabajo Software @@ -2396,7 +2396,7 @@ - California Games (Euro) + California Games (Europe) 1987 U.S. Gold @@ -2416,7 +2416,7 @@ - Camelot Warriors (Spa) + Camelot Warriors (Spain) 1986 Dinamic Software @@ -2429,7 +2429,7 @@ - Camelot Warriors (Alt Loader) + Camelot Warriors (alt loader) 1986 Dinamic Software @@ -2442,7 +2442,7 @@ - Camelot Warriors (Alt Loader, Alt) + Camelot Warriors (alt loader, alt) 1986 Dinamic Software @@ -2455,7 +2455,7 @@ - Can of Worms (Euro) + Can of Worms (Europe) 1986 Livewire Software @@ -2467,7 +2467,7 @@ - Capitan Sevilla (Euro) + Capitan Sevilla (Europe) 1988 Winner Software @@ -2487,7 +2487,7 @@ - Capitan Sevilla (Spa) + Capitan Sevilla (Spain) 1988 Dinamic Software @@ -2507,7 +2507,7 @@ - Capitán Trueno (Spa) + Capitán Trueno (Spain) 1989 Dinamic Software @@ -2527,7 +2527,7 @@ - Carlos Sainz - Campeonato del Mundo (Spa) + Carlos Sainz - Campeonato del Mundo (Spain) 1990 Zigurat Software @@ -2540,7 +2540,7 @@ - La Casa Maldita (Spa) + La Casa Maldita (Spain) 1986 Load 'n' Run @@ -2553,7 +2553,7 @@ - Casanova (Spa) + Casanova (Spain) 1989 Iber Soft @@ -2566,7 +2566,7 @@ - Castle Combat (Euro) + Castle Combat (Europe) 1985 Spectravideo @@ -2579,7 +2579,7 @@ - Cavern of Death (Spa) + Cavern of Death (Spain) 1987 Dro Soft @@ -2592,7 +2592,7 @@ - Caza (Spa) + Caza (Spain) 1986 Load 'n' Run @@ -2605,7 +2605,7 @@ - Chack 'n Pop (Jpn?) + Chack 'n Pop (Japan?) 1984 Taito @@ -2619,7 +2619,7 @@ - Champ (Euro) + Champ (Europe) 1984 PSS @@ -2632,7 +2632,7 @@ - Champions (Jpn, Hacked) + Champions (Japan, hacked) 1984 Pony @@ -2644,7 +2644,7 @@ - Chase H.Q. (Euro) + Chase H.Q. (Europe) 1988 Ocean Software @@ -2665,7 +2665,7 @@ - Chase H.Q. (Euro, Alt) + Chase H.Q. (Europe, alt) 1988 Ocean Software @@ -2685,7 +2685,7 @@ - Checkmate! - First Moves in Chess (Jpn) + Checkmate! - First Moves in Chess (Japan) 1985 Toshiba @@ -2699,7 +2699,7 @@ - Checkmate! - First Moves in Chess (Jpn, Alt) + Checkmate! - First Moves in Chess (Japan, alt) 1985 Toshiba @@ -2712,7 +2712,7 @@ - Checkmate! - First Moves in Chess (Jpn, Alt 2) + Checkmate! - First Moves in Chess (Japan, alt 2) 1985 Toshiba @@ -2725,7 +2725,7 @@ - Chess Player (Euro) + Chess Player (Europe) 1988 Eurosoft @@ -2738,7 +2738,7 @@ - The Chessmaster 2000 (Spa, Hacked by Martos) + The Chessmaster 2000 (Spain, hacked by Martos) 1990 Dro Soft @@ -2750,7 +2750,7 @@ - Chicago 30's (Spa) + Chicago 30's (Spain) 1988 Topo Soft @@ -2763,7 +2763,7 @@ - Chicken Chase (Euro) + Chicken Chase (Europe) 1986 Bug-Byte Software @@ -2776,7 +2776,7 @@ - Chiller (Euro) + Chiller (Europe) 1985 Mastertronic @@ -2789,7 +2789,7 @@ - Chiller (Euro, Alt) + Chiller (Europe, alt) 1985 Mastertronic @@ -2802,7 +2802,7 @@ - Chiller (Euro, Alt 2) + Chiller (Europe, alt 2) 1985 Mastertronic @@ -2815,7 +2815,7 @@ - Chiller (Euro, Alt 3) + Chiller (Europe, alt 3) 1985 Mastertronic @@ -2828,7 +2828,7 @@ - Chiller (Euro, Alt 4) + Chiller (Europe, alt 4) 1985 Mastertronic @@ -2841,7 +2841,7 @@ - Chiller (Euro, Alt 5) + Chiller (Europe, alt 5) 1985 Mastertronic @@ -2854,7 +2854,7 @@ - Chopper (Euro) + Chopper (Europe) 1986 Eaglesoft @@ -2867,7 +2867,7 @@ - Chopper (Euro, Alt) + Chopper (Europe, alt) 1986 Eaglesoft @@ -2880,7 +2880,7 @@ - Chopper One (Euro) + Chopper One (Europe) 1988 Eurosoft @@ -2893,7 +2893,7 @@ - Choro Q (Jpn?) + Choro Q (Japan?) 1984 Taito @@ -2907,7 +2907,7 @@ - Choy-Lee-Fut Kung-Fu Warrior (Spa) + Choy-Lee-Fut Kung-Fu Warrior (Spain) 1990 Positive @@ -2920,7 +2920,7 @@ - Choy-Lee-Fut Kung-Fu Warrior (Spa, Alt) + Choy-Lee-Fut Kung-Fu Warrior (Spain, alt) 1990 Positive @@ -2933,7 +2933,7 @@ - Chuck Yeager's Advanced Flight Trainer (Spa) + Chuck Yeager's Advanced Flight Trainer (Spain) 1989 Dro Soft @@ -2946,7 +2946,7 @@ - Chuckie Egg (Euro, A&F Software) + Chuckie Egg (Europe, A&F Software) 1984 A&F Software @@ -2959,7 +2959,7 @@ - Chuckie Egg (Euro, A&F Software, Alt) + Chuckie Egg (Europe, A&F Software, alt) 1984 A&F Software @@ -2972,7 +2972,7 @@ - Chuckie Egg (Euro, A&F Software, Alt 2) + Chuckie Egg (Europe, A&F Software, alt 2) 1984 A&F Software @@ -2985,7 +2985,7 @@ - Chuckie Egg (Euro, A&F Software, Alt 3) + Chuckie Egg (Europe, A&F Software, alt 3) 1984 A&F Software @@ -2998,7 +2998,7 @@ - Chuckie Egg (Euro, Aackosoft) + Chuckie Egg (Europe, Aackosoft) 1985 Aackosoft @@ -3011,7 +3011,7 @@ - Ci-U-Than Trilogy I - La Diosa de Cozumel (Spa) + Ci-U-Than Trilogy I - La Diosa de Cozumel (Spain) 1990 Aventuras AD @@ -3031,7 +3031,7 @@ - Ci-U-Than Trilogy I - La Diosa de Cozumel (Spa, Alt) + Ci-U-Than Trilogy I - La Diosa de Cozumel (Spain, alt) 1990 Aventuras AD @@ -3051,7 +3051,7 @@ - Ci-U-Than Trilogy II - Los Templos Sagrados (Spa) + Ci-U-Than Trilogy II - Los Templos Sagrados (Spain) 1991 Aventuras AD @@ -3071,7 +3071,7 @@ - Ci-U-Than Trilogy III - Chichen Itza (Spa) + Ci-U-Than Trilogy III - Chichen Itza (Spain) 1992 Aventuras AD @@ -3091,7 +3091,7 @@ - El Cid (Spa) + El Cid (Spain) 1987 Dro Soft @@ -3104,7 +3104,7 @@ - City Connection (Euro) + City Connection (Europe) 1987 Eaglesoft @@ -3117,7 +3117,7 @@ - City Connection (Jpn) + City Connection (Japan) 1986 Jaleco @@ -3130,7 +3130,7 @@ - Cobra's Arc (Spa) + Cobra's Arc (Spain) 1986 Dinamic Software @@ -3143,7 +3143,7 @@ - Coco Castle (Euro) + Coco Castle (Europe) 1984 Kuma Computers @@ -3171,7 +3171,7 @@ - Coliseum (Spa) + Coliseum (Spain) 1988 Topo Soft @@ -3184,7 +3184,7 @@ - Colony (Euro) + Colony (Europe) 1987 Bulldog @@ -3197,7 +3197,7 @@ - Colossus 4 Chess (Euro) + Colossus 4 Chess (Europe) 1986 CDS Microsystems @@ -3210,7 +3210,7 @@ - Colt 36 (Spa) + Colt 36 (Spain) 1987 Topo Soft @@ -3223,7 +3223,7 @@ - Comando Quatro (Spa) + Comando Quatro (Spain) 1989 Zigurat Software @@ -3236,7 +3236,7 @@ - Comando Tracer (Spa) + Comando Tracer (Spain) 1989 Dinamic Software @@ -3249,7 +3249,7 @@ - Comando Tracer (Spa, Alt) + Comando Tracer (Spain, alt) 1989 Dinamic Software @@ -3262,7 +3262,7 @@ - Comecocos (Spa) + Comecocos (Spain) 198? Idealogic @@ -3275,7 +3275,7 @@ - Cometa Halley (Spa) + Cometa Halley (Spain) 1985 Sony @@ -3288,7 +3288,7 @@ - Compor - Procesador de Textos (Spa) + Compor - Procesador de Textos (Spain) 198? Philips Spain @@ -3301,7 +3301,7 @@ - Compra y Vende (Spa) + Compra y Vende (Spain) 1985 Idealogic @@ -3314,7 +3314,7 @@ - Computadora Adivina (Spa) + Computadora Adivina (Spain) 1985 Sony @@ -3327,7 +3327,7 @@ - Confused? (Euro) + Confused? (Europe) 1986 Eaglesoft @@ -3340,7 +3340,7 @@ - Confused? (Euro, Alt) + Confused? (Europe, alt) 1986 Eaglesoft @@ -3353,7 +3353,7 @@ - Congo (Euro) + Congo (Europe) 1986 Livewire Software @@ -3366,7 +3366,7 @@ - Congo Bongo (Jpn?) + Congo Bongo (Japan?) 1983 Sega @@ -3379,7 +3379,7 @@ - Contabilidad (Spa) + Contabilidad (Spain) 1985 Sony Spain @@ -3392,7 +3392,7 @@ - Contabilidad 1 (Spa) + Contabilidad 1 (Spain) 1988 Mind Games España @@ -3405,7 +3405,7 @@ - Contabilidad 1 (Spa, Alt) + Contabilidad 1 (Spain, alt) 1988 Mind Games España @@ -3431,7 +3431,7 @@ - Contabilidad 2 (Spa, Alt) + Contabilidad 2 (Spain, alt) 1988 Mind Games España @@ -3457,7 +3457,7 @@ - Contabilidad Domestica (Spa) + Contabilidad Domestica (Spain) 1985 DIMensionNEW @@ -3485,7 +3485,7 @@ - Continental Circus (Euro) + Continental Circus (Europe) 1989 Virgin Mastertronic @@ -3505,7 +3505,7 @@ - Contract Bridge (Euro) + Contract Bridge (Europe) 1984 Alligata Software @@ -3518,7 +3518,7 @@ - Corsarios (Spa) + Corsarios (Spain) 1989 Opera Soft @@ -3538,7 +3538,7 @@ - Cosa Nostra (Spa) + Cosa Nostra (Spain) 1986 Opera Soft @@ -3551,7 +3551,7 @@ - Cosmic Sheriff (Spa) + Cosmic Sheriff (Spain) 1989 Dinamic Software @@ -3564,7 +3564,7 @@ - Cosmic Shock Absorber (Euro) + Cosmic Shock Absorber (Europe) 1986 Martech Games @@ -3577,7 +3577,7 @@ - Cosmos (Spa) + Cosmos (Spain) 1985 Sony @@ -3590,7 +3590,7 @@ - Crazy Golf (Euro) + Crazy Golf (Europe) 1984 Mr. Micro @@ -3603,7 +3603,7 @@ - Crusader (Euro) + Crusader (Europe) 1987 Eaglesoft @@ -3616,7 +3616,7 @@ - Crusader (Euro, Alt) + Crusader (Europe, alt) 1987 Eaglesoft @@ -3629,7 +3629,7 @@ - Cubik - Cubo de Rubik (Spa) + Cubik - Cubo de Rubik (Spain) 1985 Monser @@ -3642,7 +3642,7 @@ - Cubit (Euro) + Cubit (Europe) 1986 Mr. Micro @@ -3655,7 +3655,7 @@ - Cubit (Euro, Alt) + Cubit (Europe, alt) 1986 Mr. Micro @@ -3668,7 +3668,7 @@ - Curro Jimenez (Spa) + Curro Jimenez (Spain) 1989 Zigurat Software @@ -3681,7 +3681,7 @@ - Curso de BASIC (Spa) + Curso de BASIC (Spain) 1985 Sony @@ -3701,7 +3701,7 @@ - Curso de MSX Basic Toshiba Home computer HX-10 (Spa) + Curso de MSX Basic Toshiba Home computer HX-10 (Spain) 198? EMSA @@ -3714,7 +3714,7 @@ - Cyberbig (Spa) + Cyberbig (Spain) 1989 Animagic @@ -3727,7 +3727,7 @@ - Cyberun (Euro) + Cyberun (Europe) 1985 Ultimate Play The Game @@ -3740,7 +3740,7 @@ - Daidasso - Great Escape (Jpn) + Daidasso - Great Escape (Japan) 1985 Carry Lab @@ -3753,7 +3753,7 @@ - The Dam Busters (Spa) + The Dam Busters (Spain) 1985 Erbe Software @@ -3766,7 +3766,7 @@ - Damas (Spa) + Damas (Spain) 1985 DIMensionNEW @@ -3779,7 +3779,7 @@ - Danger Mouse in the Black Forest Chateau (Euro) + Danger Mouse in the Black Forest Chateau (Europe) 1986 Alternative Software @@ -3799,7 +3799,7 @@ - Darkwood Manor (Euro) + Darkwood Manor (Europe) 198? Kuma Computers @@ -3812,7 +3812,7 @@ - Darkwood Manor (Euro, Alt) + Darkwood Manor (Europe, alt) 198? Kuma Computers @@ -3825,7 +3825,7 @@ - Darts (Euro) + Darts (Europe) 1987 Blue Ribbon Software @@ -3884,7 +3884,7 @@ - Databa (Euro?) + Databa (Europe?) 198? Philips @@ -3897,7 +3897,7 @@ - Dawn Patrol (Euro) + Dawn Patrol (Europe) 1987 Eaglesoft @@ -3910,7 +3910,7 @@ - Death Valley Gold Rush (Euro) + Death Valley Gold Rush (Europe) 1985 Kuma Computers @@ -3923,7 +3923,7 @@ - Death Wish 3 (Euro) + Death Wish 3 (Europe) 1987 Gremlin Graphics @@ -3936,7 +3936,7 @@ - Decathlon (Euro) + Decathlon (Europe) 1984 Activision @@ -3949,7 +3949,7 @@ - Defcom 1 (Spa) + Defcom 1 (Spain) 1989 Iber Soft @@ -3969,7 +3969,7 @@ - De Demo (Ned) + De Demo (Netherlands) 1985 Philips @@ -3982,7 +3982,7 @@ - Demonia (Fra) + Demonia (France) 1986 Microids @@ -3995,7 +3995,7 @@ - Desolator (Euro) + Desolator (Europe) 1986 Gremlin Graphics @@ -4008,7 +4008,7 @@ - Desolator (Euro, Alt) + Desolator (Europe, alt) 1986 Gremlin Graphics @@ -4021,7 +4021,7 @@ - Desperado (Spa) + Desperado (Spain) 1987 Topo Soft @@ -4041,7 +4041,7 @@ - Desperado 2 (Spa) + Desperado 2 (Spain) 1991 Topo Soft @@ -4054,7 +4054,7 @@ - Desperado 2 (Spa, Alt) + Desperado 2 (Spain, alt) 1991 Topo Soft @@ -4067,7 +4067,7 @@ - Destroyer (Spa) + Destroyer (Spain) 1986 Mind Games España @@ -4080,7 +4080,7 @@ - Deus Ex Machina (Spa) + Deus Ex Machina (Spain) 1985 Mind Games España @@ -4100,7 +4100,7 @@ - Dezeni Land (Jpn) + Dezeni Land (Japan) 1984 Hudson Soft @@ -4126,7 +4126,7 @@ - Dieet (Ned) + Dieet (Netherlands) 1986 Philips @@ -4146,7 +4146,7 @@ - Dieet (Ned, Alt) + Dieet (Netherlands, alt) 1986 Philips @@ -4166,7 +4166,7 @@ - Dig Dug (Euro) + Dig Dug (Europe) 1984 Bug-Byte Software @@ -4179,7 +4179,7 @@ - Dim-Calc (Spa) + Dim-Calc (Spain) 1985 DIMensionNEW @@ -4192,7 +4192,7 @@ - Dimension Omega (Spa) + Dimension Omega (Spain) 1989 Positive @@ -4212,7 +4212,7 @@ - Disc Warrior (Euro) + Disc Warrior (Europe) 1984 Alligata Software @@ -4225,7 +4225,7 @@ - Disc Warrior (Euro, Alt) + Disc Warrior (Europe, alt) 1984 Alligata Software @@ -4238,7 +4238,7 @@ - Disc Warrior (Euro, Alt Loader) + Disc Warrior (Europe, alt loader) 1984 Alligata Software @@ -4251,7 +4251,7 @@ - Discovery (Euro) + Discovery (Europe) 1988 Eurosoft @@ -4264,7 +4264,7 @@ - Discovery (Euro, Alt) + Discovery (Europe, alt) 1988 Eurosoft @@ -4277,7 +4277,7 @@ - Discovery (Euro, Alt 2) + Discovery (Europe, alt 2) 1988 Eurosoft @@ -4290,7 +4290,7 @@ - Diseñador de Graficos (Spa) + Diseñador de Graficos (Spain) 1985 Advance @@ -4303,7 +4303,7 @@ - Dizzy Balloon (Spa) + Dizzy Balloon (Spain) 1985 Philips @@ -4316,7 +4316,7 @@ - Dizzy Dice (Euro) + Dizzy Dice (Europe) 1988 Players Software @@ -4329,7 +4329,7 @@ - Dog Fighter (Euro) + Dog Fighter (Europe) 1986 Kuma Computers @@ -4342,7 +4342,7 @@ - Dog Fighter (Jpn) + Dog Fighter (Japan) 1986 Sony @@ -4365,13 +4365,13 @@ - + - Domino (Spa) + Domino (Spain) 1985 DIMensionNEW @@ -4384,7 +4384,7 @@ - Domino (Spa, Alt) + Domino (Spain, alt) 1985 DIMensionNEW @@ -4397,7 +4397,7 @@ - Don Quijote (Spa) + Don Quijote (Spain) 1987 Dinamic Software @@ -4417,7 +4417,7 @@ - Donkey Kong (Euro) + Donkey Kong (Europe) 1986 Ocean Software @@ -4430,7 +4430,7 @@ - Donkey Kong (Euro, Alt) + Donkey Kong (Europe, alt) 1986 Ocean Software @@ -4443,7 +4443,7 @@ - Donkey Kong (Spa) + Donkey Kong (Spain) 1986 Erbe Software @@ -4456,7 +4456,7 @@ - Double Dragon (Spa) + Double Dragon (Spain) 1988 Dro Soft @@ -4476,7 +4476,7 @@ - Double Dragon II - The Revenge (Spa) + Double Dragon II - The Revenge (Spain) 1990 Dro Soft @@ -4489,7 +4489,7 @@ - Dr. Jackle and Mr. Wide (Euro) + Dr. Jackle and Mr. Wide (Europe) 1987 Bulldog @@ -4502,7 +4502,7 @@ - Dr. Jackle and Mr. Wide (Euro, Alt) + Dr. Jackle and Mr. Wide (Europe, alt) 1987 Bulldog @@ -4515,7 +4515,7 @@ - Dracula (Spa) + Dracula (Spain) 1986 Grupo de Trabajo Software @@ -4528,7 +4528,7 @@ - Dragon Ninja (Euro) + Dragon Ninja (Europe) 1988 Imagine Software @@ -4541,7 +4541,7 @@ - Dragon Ninja (Euro, 2 Sides) + Dragon Ninja (Europe, 2 sides) 1988 Imagine Software @@ -4561,7 +4561,7 @@ - Dragon Slayer (Jpn) + Dragon Slayer (Japan) 1985 Square @@ -4574,7 +4574,7 @@ - Drazen Petrovic Basket (Spa) + Drazen Petrovic Basket (Spain) 1989 Topo Soft @@ -4587,7 +4587,7 @@ - Driller Tanks (Spa) + Driller Tanks (Spain) 198? Sony Spain @@ -4601,7 +4601,7 @@ - Drome (Euro) + Drome (Europe) 1987 Eaglesoft @@ -4614,7 +4614,7 @@ - Drome (Euro, Alt) + Drome (Europe, alt) 1987 Eaglesoft @@ -4627,7 +4627,7 @@ - Drome (Euro, Alt 2) + Drome (Europe, alt 2) 1987 Eaglesoft @@ -4640,7 +4640,7 @@ - Drome (Euro, Alt 3) + Drome (Europe, alt 3) 1987 Eaglesoft @@ -4653,7 +4653,7 @@ - Duck Out (Spa) + Duck Out (Spain) 1989 Dro Soft @@ -4666,7 +4666,7 @@ - Dustin (Spa) + Dustin (Spain) 1987 Dinamic Software @@ -4679,7 +4679,7 @@ - Dynamite Dan (Euro) + Dynamite Dan (Europe) 1986 Mirrorsoft @@ -4692,7 +4692,7 @@ - Eddie Kidd Jump Challenge (Euro) + Eddie Kidd Jump Challenge (Europe) 1985 Martech Games @@ -4705,7 +4705,7 @@ - Eddie Kidd Jump Challenge (Euro, Alt) + Eddie Kidd Jump Challenge (Europe, alt) 1985 Martech Games @@ -4718,7 +4718,7 @@ - Elidon (Euro) + Elidon (Europe) 1986 Aackosoft @@ -4731,7 +4731,7 @@ - Elidon (Euro, Alt) + Elidon (Europe, alt) 1986 Aackosoft @@ -4744,7 +4744,7 @@ - Elidon (Euro, Alt 2) + Elidon (Europe, alt 2) 1986 Aackosoft @@ -4757,7 +4757,7 @@ - Elite (Euro, Hacked by Martos) + Elite (Europe, hacked by Martos) 1987 Firebird Software @@ -4770,7 +4770,7 @@ - Emilio Butragueno Futbol (Spa) + Emilio Butragueno Futbol (Spain) 1988 Topo Soft - Ocean Software @@ -4783,7 +4783,7 @@ - Emilio Butragueño II (Spa) + Emilio Butragueño II (Spain) 1989 Erbe Software - Ocean Software @@ -4803,7 +4803,7 @@ - Emilio Sanchez Vicario Grand Slam (Spa) + Emilio Sanchez Vicario Grand Slam (Spain) 1989 Zigurat Software @@ -4816,7 +4816,7 @@ - En Ruta (Spa) + En Ruta (Spain) 1985 Microgesa @@ -4829,7 +4829,7 @@ - Enchanted (Spa) + Enchanted (Spain) 1989 Positive @@ -4842,7 +4842,7 @@ - European Games (Euro) + European Games (Europe) 1987 Tynesoft @@ -4855,7 +4855,7 @@ - European Games (Euro, 2 Sides) + European Games (Europe, 2 sides) 1987 Tynesoft @@ -4875,7 +4875,7 @@ - European Games (Euro, 2 Sides, Alt) + European Games (Europe, 2 sides, alt) 1987 Tynesoft @@ -4895,7 +4895,7 @@ - Excite 4-ri Mahjong (Jpn) + Excite 4-ri Mahjong (Japan) 1984 Tecno Soft @@ -4908,7 +4908,7 @@ - Exerion (Euro) + Exerion (Europe) 1987 Eaglesoft @@ -4921,7 +4921,7 @@ - Exerion II - Zorni (Euro) + Exerion II - Zorni (Europe) 1987 Eaglesoft @@ -4934,7 +4934,7 @@ - Exploding Atoms (Jpn) + Exploding Atoms (Japan) 1985 Sanyo @@ -4947,7 +4947,7 @@ - Exploding Atoms (Jpn, Alt) + Exploding Atoms (Japan, alt) 1985 Sanyo @@ -4960,7 +4960,7 @@ - Exploding Atoms (Jpn, Alt 2) + Exploding Atoms (Japan, alt 2) 1985 Sanyo @@ -4973,7 +4973,7 @@ - Exterminator (Euro) + Exterminator (Europe) 1987 Eaglesoft @@ -4986,7 +4986,7 @@ - Fall Out (Jpn) + Fall Out (Japan) 1984 Policy @@ -4999,7 +4999,7 @@ - Fanky Punky (Spa) + Fanky Punky (Spain) 1987 P.J. Software @@ -5012,7 +5012,7 @@ - Fanky Punky (Spa, Alt) + Fanky Punky (Spain, alt) 1987 P.J. Software @@ -5025,7 +5025,7 @@ - Fernando Martin Basket Master (Spa) + Fernando Martin Basket Master (Spain) 1987 Dinamic Software @@ -5038,7 +5038,7 @@ - Fernando Martin Basket Master - Executive Version (Euro) + Fernando Martin Basket Master - Executive Version (Europe) 1987 Dinamic Software @@ -5051,7 +5051,7 @@ - Fernando Martin Basket Master - Executive Version (Spa) + Fernando Martin Basket Master - Executive Version (Spain) 1987 Dinamic Software @@ -5064,7 +5064,7 @@ - Fernando Martin Basket Master - Executive Version (Spa, Alt) + Fernando Martin Basket Master - Executive Version (Spain, alt) 1987 Dinamic Software @@ -5077,7 +5077,7 @@ - Feud (Euro) + Feud (Europe) 1987 Bulldog @@ -5090,7 +5090,7 @@ - Fharanx (Jpn) + Fharanx (Japan) 1985 Enix @@ -5103,7 +5103,7 @@ - Fin Pack (Euro) + Fin Pack (Europe) 1986 Aackosoft @@ -5116,7 +5116,7 @@ - Fin Pack (Euro, Alt) + Fin Pack (Europe, alt) 1986 Aackosoft @@ -5129,7 +5129,7 @@ - Final Countdown (Euro) + Final Countdown (Europe) 1988 Methodic Solutions @@ -5142,7 +5142,7 @@ - Finders Keepers (Euro) + Finders Keepers (Europe) 1986 Mastertronic @@ -5155,7 +5155,7 @@ - Finders Keepers (Euro, 64K) + Finders Keepers (Europe, 64K) 1986 Mastertronic @@ -5168,7 +5168,7 @@ - Fire Fox (Spa) + Fire Fox (Spain) 198? Onaki @@ -5181,7 +5181,7 @@ - Fire Rescue (Euro) + Fire Rescue (Europe) 1984 Kuma Computers @@ -5194,7 +5194,7 @@ - Fire Rescue (Euro, Alt) + Fire Rescue (Europe, alt) 1984 Kuma Computers @@ -5207,7 +5207,7 @@ - Firehawk (Euro) + Firehawk (Europe) 1987 Players Software @@ -5220,7 +5220,7 @@ - Firehawk (Euro, Alt) + Firehawk (Europe, alt) 1987 Players Software @@ -5233,7 +5233,7 @@ - First Steps with the Mr. Men (Euro) + First Steps with the Mr. Men (Europe) 1985 Mirrorsoft @@ -5246,7 +5246,7 @@ - Fisica I - Magnitudes (Spa) + Fisica I - Magnitudes (Spain) 1986 Sony @@ -5259,7 +5259,7 @@ - Fisica II - Movimientos (Spa) + Fisica II - Movimientos (Spain) 1986 Sony @@ -5272,7 +5272,7 @@ - Flash Gordon (Euro) + Flash Gordon (Europe) 1987 Mastertronic Added Dimension @@ -5285,7 +5285,7 @@ - Les Flics (Euro, Bad Dump?) + Les Flics (Europe, bad dump?) 1985 PSS @@ -5298,7 +5298,7 @@ - Les Flics (Euro, Bad Dump?, Alt) + Les Flics (Europe, bad dump?, alt) 1985 PSS @@ -5311,7 +5311,7 @@ - Flight Deck II (Euro) + Flight Deck II (Europe) 1986 Aackosoft @@ -5324,7 +5324,7 @@ - Flight Path 737 (Euro) + Flight Path 737 (Europe) 1985 Anirog Software @@ -5337,7 +5337,7 @@ - The Flintstones (Euro) + The Flintstones (Europe) 1988 Grandslam Entertainments @@ -5376,7 +5376,7 @@ - Football Manager - World Cup Edition (Spa) + Football Manager - World Cup Edition (Spain) 1990 Addictive Games @@ -5389,7 +5389,7 @@ - Footballer of the Year (Euro, Hacked by Martos) + Footballer of the Year (Europe, hacked by Martos) 1987 Gremlin Graphics @@ -5402,7 +5402,7 @@ - Forbidden Fruit (Spa) + Forbidden Fruit (Spain) 1985 Mind Games España @@ -5415,7 +5415,7 @@ - Formation Z (Euro) + Formation Z (Europe) 1987 Eaglesoft @@ -5428,7 +5428,7 @@ - Formula 1 Simulator (Euro) + Formula 1 Simulator (Europe) 1985 Mastertronic @@ -5441,7 +5441,7 @@ - Formula 1 Simulator (Euro, Alt) + Formula 1 Simulator (Europe, alt) 1985 Mastertronic @@ -5468,7 +5468,7 @@ - Freddy Hardest (Spa) + Freddy Hardest (Spain) 1987 Dinamic Software @@ -5488,7 +5488,7 @@ - Freddy Hardest (Spa, Alt) + Freddy Hardest (Spain, alt) 1987 Dinamic Software @@ -5508,7 +5508,7 @@ - Freddy Hardest (Spa, Alt 2) + Freddy Hardest (Spain, alt 2) 1987 Dinamic Software @@ -5549,7 +5549,7 @@ - Freddy Hardest in South Manhattan (Spa) + Freddy Hardest in South Manhattan (Spain) 1989 Dinamic Software @@ -5562,7 +5562,7 @@ - French is Fun (Euro) + French is Fun (Europe) 1984 CDS Microsystems @@ -5575,7 +5575,7 @@ - Frog (Spa) + Frog (Spain) 1985 Advance @@ -5588,7 +5588,7 @@ - Fruit Machine (Euro) + Fruit Machine (Europe) 1985 DK'Tronics @@ -5601,7 +5601,7 @@ - Fruit Panic (Spa) + Fruit Panic (Spain) 198? Philips Spain @@ -5614,7 +5614,7 @@ - Fruit Panic (Spa, Alt Loader) + Fruit Panic (Spain, alt loader) 198? Philips Spain @@ -5627,7 +5627,7 @@ - Future Knight (Euro) + Future Knight (Europe) 1986 Gremlin Graphics @@ -5640,7 +5640,7 @@ - Future Knight (Spa) + Future Knight (Spain) 1986 Erbe Software @@ -5653,7 +5653,7 @@ - Galaga (Euro) + Galaga (Europe) 1984 Bug-Byte Software @@ -5666,7 +5666,7 @@ - Galaxian (Euro) + Galaxian (Europe) 1984 Bug-Byte Software @@ -5679,7 +5679,7 @@ - Game Over (Euro) + Game Over (Europe) 1988 Dinamic Software @@ -5699,7 +5699,7 @@ - Game Over (Spa) + Game Over (Spain) 1988 Dinamic Software @@ -5719,7 +5719,7 @@ - Game Over II (Spa) + Game Over II (Spain) 1988 Dinamic Software @@ -5739,7 +5739,7 @@ - Games Designer (Euro) + Games Designer (Europe) 1985 Quicksilva @@ -5752,7 +5752,7 @@ - The Games - Winter Edition (Euro) + The Games - Winter Edition (Europe) 1988 U.S. Gold @@ -5772,7 +5772,7 @@ - Gang Man (Euro) + Gang Man (Europe) 1988 Armati Software @@ -5785,7 +5785,7 @@ - Gang Man (Jpn) + Gang Man (Japan) 1983 Hudson Soft @@ -5798,7 +5798,7 @@ - Gang Man (Jpn, Alt) + Gang Man (Japan, alt) 1983 Hudson Soft @@ -5811,7 +5811,7 @@ - Gauntlet (Euro) + Gauntlet (Europe) 1986 U.S. Gold @@ -5831,7 +5831,7 @@ - Gauntlet (Euro, Alt) + Gauntlet (Europe, alt) 1986 U.S. Gold @@ -5851,7 +5851,7 @@ - Gemini Wing (Euro) + Gemini Wing (Europe) 1989 Virgin Mastertronic @@ -5884,7 +5884,7 @@ - Genghis Khan (Euro) + Genghis Khan (Europe) 1991 Positive @@ -5897,7 +5897,7 @@ - Geo - Figuras planas y volumenes (Spa) + Geo - Figuras planas y volumenes (Spain) 198? Mind Games España @@ -5910,7 +5910,7 @@ - Geografia de España (Spa) + Geografia de España (Spain) 1985 Advance @@ -5923,7 +5923,7 @@ - El Gerente (Spa) + El Gerente (Spain) 1984 DIMensionNEW @@ -5936,7 +5936,7 @@ - El Gerente (Spa, Alt) + El Gerente (Spain, alt) 1984 DIMensionNEW @@ -5949,7 +5949,7 @@ - La Geste d'Artillac (Fra) + La Geste d'Artillac (France) 1985 Infogrames @@ -5975,7 +5975,7 @@ - Gestion Familiar (Spa) + Gestion Familiar (Spain) 1986 Load 'n' Run @@ -5988,7 +5988,7 @@ - Ghost (Spa) + Ghost (Spain) 1989 Mind Games España @@ -6001,7 +6001,7 @@ - Ghostbusters (Euro) + Ghostbusters (Europe) 1985 Activision @@ -6014,7 +6014,7 @@ - Ghostbusters II (Euro) + Ghostbusters II (Europe) 1989 Activision @@ -6027,7 +6027,7 @@ - Gilbert - Escape from Drill (Euro, 64K) + Gilbert - Escape from Drill (Europe, 64K) 1989 Alternative Software @@ -6040,7 +6040,7 @@ - Glass (Spa) + Glass (Spain) 1985 Quicksilva @@ -6053,7 +6053,7 @@ - Golden Basket (Spa, Hacked Protection) + Golden Basket (Spain, hacked protection) 1990 Opera Soft @@ -6066,7 +6066,7 @@ - Golden Basket (Spa) + Golden Basket (Spain) 1990 Opera Soft @@ -6079,7 +6079,7 @@ - Gonzzalezz (Spa) + Gonzzalezz (Spain) 1989 Opera Soft @@ -6099,7 +6099,7 @@ - Goody (Spa) + Goody (Spain) 1987 Opera Soft @@ -6112,7 +6112,7 @@ - Goody (Spa, Alt) + Goody (Spain, alt) 1987 Opera Soft @@ -6125,7 +6125,7 @@ - Graficas de Gestion (Spa) + Graficas de Gestion (Spain) 1985 DIMensionNEW @@ -6138,7 +6138,7 @@ - Gramatica I - Vocabulario (Spa) + Gramatica I - Vocabulario (Spain) 198? Mind Games España @@ -6151,7 +6151,7 @@ - Gramatica II - Verbos (Spa) + Gramatica II - Verbos (Spain) 198? Mind Games España @@ -6164,7 +6164,7 @@ - Gramatica II - Verbos (Spa, Alt) + Gramatica II - Verbos (Spain, alt) 198? Mind Games España @@ -6177,7 +6177,7 @@ - Gramatica III - Frases (Spa) + Gramatica III - Frases (Spain) 198? Mind Games España @@ -6190,7 +6190,7 @@ - Gremlins 2 - La Nueva Generacion (Spa) + Gremlins 2 - La Nueva Generacion (Spain) 1990 Topo Soft @@ -6203,7 +6203,7 @@ - Grid Trap (Euro) + Grid Trap (Europe) 1985 Livewire Software @@ -6216,7 +6216,7 @@ - Grid Trap (Euro, Alt) + Grid Trap (Europe, alt) 1985 Livewire Software @@ -6229,7 +6229,7 @@ - Guillermo Tell (Spa) + Guillermo Tell (Spain) 1989 Opera Soft @@ -6242,7 +6242,7 @@ - Gunfright (Euro) + Gunfright (Europe) 1985 Ultimate Play The Game @@ -6255,7 +6255,7 @@ - Gunfright (Euro, Alt) + Gunfright (Europe, alt) 1985 Ultimate Play The Game @@ -6268,7 +6268,7 @@ - Gunsmoke (Euro) + Gunsmoke (Europe) 1987 Go! @@ -6289,7 +6289,7 @@ - Gusano (Spa) + Gusano (Spain) 1985 Advance @@ -6302,7 +6302,7 @@ - Gusano (Spa, Alt Loader) + Gusano (Spain, alt loader) 1985 Advance @@ -6315,7 +6315,7 @@ - Guttblaster (Euro) + Guttblaster (Europe) 1988 Eurosoft @@ -6328,7 +6328,7 @@ - Guttblaster (Euro, Alt) + Guttblaster (Europe, alt) 1988 Eurosoft @@ -6341,7 +6341,7 @@ - Gyro Adventure (Jpn, Hacked by Martos) + Gyro Adventure (Japan, hacked by Martos) 1984 Nippon Columbia - Colpax - Universal @@ -6354,7 +6354,7 @@ - H.E.R.O. (Euro) + H.E.R.O. (Europe) 1984 Activision @@ -6367,7 +6367,7 @@ - Habilit (Spa) + Habilit (Spain) 1988 Iber Soft @@ -6380,7 +6380,7 @@ - Hammer Boy (Spa) + Hammer Boy (Spain) 1991 Dinamic Software @@ -6400,7 +6400,7 @@ - Happy Fret (Jpn) + Happy Fret (Japan) 1985 Micro Cabin @@ -6413,7 +6413,7 @@ - Happy Fret (Jpn, Alt) + Happy Fret (Japan, alt) 1985 Micro Cabin @@ -6426,7 +6426,7 @@ - Hard Boiled (Euro) + Hard Boiled (Europe) 1987 Methodic Solutions @@ -6439,7 +6439,7 @@ - Hard Boiled (Euro, Alt) + Hard Boiled (Europe, alt) 1987 Methodic Solutions @@ -6452,7 +6452,7 @@ - Harvey Smith's Showjumper (Euro, Hacked Protection) + Harvey Smith's Showjumper (Europe, hacked protection) 1985 Software Projects @@ -6465,7 +6465,7 @@ - Harvey Smith's Showjumper (Euro) + Harvey Smith's Showjumper (Europe) 1985 Software Projects @@ -6478,7 +6478,7 @@ - Haunted House (Euro) + Haunted House (Europe) 1988 Eurosoft @@ -6491,7 +6491,7 @@ - Haunted House (Euro, Alt) + Haunted House (Europe, alt) 1988 Eurosoft @@ -6504,7 +6504,7 @@ - Head Alignment Kit (Euro) + Head Alignment Kit (Europe) 1985 Aackosoft @@ -6517,7 +6517,7 @@ - Head Alignment Kit (Euro, Alt) + Head Alignment Kit (Europe, alt) 1985 Aackosoft @@ -6530,7 +6530,7 @@ - Head Over Heels (Euro) + Head Over Heels (Europe) 1987 Ocean Software @@ -6543,7 +6543,7 @@ - Head Over Heels (Euro, Alt) + Head Over Heels (Europe, alt) 1987 Ocean Software @@ -6556,7 +6556,7 @@ - Head Over Heels (Spa) + Head Over Heels (Spain) 1987 Erbe Software @@ -6569,7 +6569,7 @@ - Heat Seeker - Missil (Spa) + Heat Seeker - Missil (Spain) 1986 Mind Games España @@ -6582,7 +6582,7 @@ - The Heist (Euro) + The Heist (Europe) 1985 Aackosoft @@ -6595,7 +6595,7 @@ - Hercules - Slayer of the Damned (Euro) + Hercules - Slayer of the Damned (Europe) 1988 Gremlin Graphics @@ -6608,7 +6608,7 @@ - Here & There with the Mr. Men (Euro) + Here & There with the Mr. Men (Europe) 1985 Mirrorsoft @@ -6621,7 +6621,7 @@ - La Herencia (Spa) + La Herencia (Spain) 1987 Infogrames @@ -6641,7 +6641,7 @@ - Highway Encounter (Spa) + Highway Encounter (Spain) 1985 Dinamic Software @@ -6654,7 +6654,7 @@ - HiSoft Devpac GENS (Euro) + HiSoft Devpac GENS (Europe) 1984 HiSoft @@ -6667,7 +6667,7 @@ - HiSoft Devpac - Ensamblador, Desensamblador GENS (Spa) + HiSoft Devpac - Ensamblador, Desensamblador GENS (Spain) 1984 Sony Spain @@ -6680,7 +6680,7 @@ - HiSoft Devpac MONS (Euro) + HiSoft Devpac MONS (Europe) 1984 HiSoft @@ -6693,7 +6693,7 @@ - HiSoft Pascal (Euro) + HiSoft Pascal (Europe) 1984 HiSoft @@ -6706,7 +6706,7 @@ - Hopper (Euro) + Hopper (Europe) 1986 Eaglesoft @@ -6719,7 +6719,7 @@ - Carreras De Caballos (Spa) + Carreras De Caballos (Spain) 1983 SIL @@ -6732,7 +6732,7 @@ - Hostages (Spa, Hacked by Martos) + Hostages (Spain, hacked by Martos) 1990 Erbe Software @@ -6745,7 +6745,7 @@ - Hot Shoe (Euro) + Hot Shoe (Europe) 1984 Longman Software @@ -6758,7 +6758,7 @@ - Howard the Duck (Euro) + Howard the Duck (Europe) 1987 Activision @@ -6771,7 +6771,7 @@ - Humphrey (Euro, Mr. Micro) + Humphrey (Europe, Mr. Micro) 1984 Mr. Micro @@ -6784,7 +6784,7 @@ - Humphrey (Euro, Mr. Micro, Alt) + Humphrey (Europe, Mr. Micro, alt) 1984 Mr. Micro @@ -6797,7 +6797,7 @@ - Humphrey (Spa, Zigurat Software) + Humphrey (Spain, Zigurat Software) 1988 Zigurat Software @@ -6810,7 +6810,7 @@ - Humphrey (Spa, Zigurat Software, Alt) + Humphrey (Spain, Zigurat Software, alt) 1988 Zigurat Software @@ -6823,7 +6823,7 @@ - Hunchback (Euro) + Hunchback (Europe) 1984 Ocean Software @@ -6836,7 +6836,7 @@ - Hunchback (Euro, Alt) + Hunchback (Europe, alt) 1984 Ocean Software @@ -6849,7 +6849,7 @@ - Hundra (Spa) + Hundra (Spain) 1988 Dinamic Software @@ -6862,7 +6862,7 @@ - Hundra (Spa, Alt) + Hundra (Spain, alt) 1988 Dinamic Software @@ -6875,7 +6875,7 @@ - The Hunt for Red October (Euro) + The Hunt for Red October (Europe) 1988 Grandslam Entertainments @@ -6888,7 +6888,7 @@ - Hurry Fox - Yuki no Maou hen (Jpn) + Hurry Fox - Yuki no Maou hen (Japan) 1985 Micro Cabin @@ -6901,7 +6901,7 @@ - Hustler (Euro) + Hustler (Europe) 1984 Bubble Bus Software @@ -6914,7 +6914,7 @@ - Hydlide (Jpn) + Hydlide (Japan) 1985 T&E Soft @@ -6927,7 +6927,7 @@ - Hydlide (Jpn, Alt) + Hydlide (Japan, alt) 1985 T&E Soft @@ -6940,7 +6940,7 @@ - Hypsys (Euro) + Hypsys (Europe) 1989 Techno Arts @@ -6960,7 +6960,7 @@ - Hypsys (Euro, Alt) + Hypsys (Europe, alt) 1989 Techno Arts @@ -6980,7 +6980,7 @@ - Ice (Euro) + Ice (Europe) 1986 Eaglesoft @@ -6993,7 +6993,7 @@ - The Ice King (Euro) + The Ice King (Europe) 1986 CDS Micro Systems @@ -7006,7 +7006,7 @@ - Ice-Breaker (Spa) + Ice-Breaker (Spain) 1990 Topo Soft @@ -7019,7 +7019,7 @@ - IdeaType - Instructor Mecanografico (Spa) + IdeaType - Instructor Mecanografico (Spain) 1985 Idealogic @@ -7039,7 +7039,7 @@ - Igloo (Spa) + Igloo (Spain) 1985 Garbi Soft @@ -7052,7 +7052,7 @@ - Illusions (Fra) + Illusions (France) 1985 Nice Ideas @@ -7065,7 +7065,7 @@ - Inca (Euro) + Inca (Europe) 1987 Eaglesoft @@ -7078,7 +7078,7 @@ - Inca (Euro, Alt) + Inca (Europe, alt) 1987 Eaglesoft @@ -7091,7 +7091,7 @@ - Indiana Jones and the Last Crusade (Spa) + Indiana Jones and the Last Crusade (Spain) 1989 Erbe Software @@ -7112,7 +7112,7 @@ - Indiana Jones and the Last Crusade (Spa, Alt) + Indiana Jones and the Last Crusade (Spain, alt) 1989 Erbe Software @@ -7133,7 +7133,7 @@ - Indiana Jones and the Temple of Doom (Euro) + Indiana Jones and the Temple of Doom (Europe) 1987 U.S. Gold @@ -7146,7 +7146,7 @@ - Informatica y BASIC MSX (Spa) + Informatica y BASIC MSX (Spain) 198? ATV @@ -7298,7 +7298,7 @@ - International Karate (Euro) + International Karate (Europe) 1986 Endurance Games @@ -7311,7 +7311,7 @@ - International Karate (Euro, Alt) + International Karate (Europe, alt) 1986 Endurance Games @@ -7324,7 +7324,7 @@ - International Karate (Euro, Alt 2) + International Karate (Europe, alt 2) 1986 Endurance Games @@ -7337,7 +7337,7 @@ - Intrepido (Spa) + Intrepido (Spain) 1988 Mind Games España @@ -7350,7 +7350,7 @@ - Introduzione al Basic MSX Toshiba (Ita) + Introduzione al Basic MSX Toshiba (Italy) 198? Leoni Informatica Milano @@ -7363,7 +7363,7 @@ - Invaders (Euro) + Invaders (Europe) 1986 Livewire Software @@ -7376,7 +7376,7 @@ - Invasion (Euro, 64K) + Invasion (Europe, 64K) 1987 Bulldog @@ -7389,7 +7389,7 @@ - Invasion (Euro, 64K, Alt) + Invasion (Europe, 64K, alt) 1987 Bulldog @@ -7402,7 +7402,7 @@ - Invierte y Gana (Spa) + Invierte y Gana (Spain) 1986 DIMensionNEW @@ -7415,7 +7415,7 @@ - Iron of the War (Spa) + Iron of the War (Spain) 198? Mind Games España @@ -7428,7 +7428,7 @@ - Jabato (Spa) + Jabato (Spain) 1989 Aventuras AD @@ -7448,7 +7448,7 @@ - Jack the Nipper (Euro) + Jack the Nipper (Europe) 1986 Gremlin Graphics @@ -7461,7 +7461,7 @@ - Jack the Nipper (Euro, Alt) + Jack the Nipper (Europe, alt) 1986 Gremlin Graphics @@ -7474,7 +7474,7 @@ - Jack the Nipper II - In Coconut Capers (Euro) + Jack the Nipper II - In Coconut Capers (Europe) 1987 Gremlin Graphics @@ -7487,7 +7487,7 @@ - Jackson City (Spa) + Jackson City (Spain) 1990 G.LL. Software @@ -7500,7 +7500,7 @@ - Jai Alai (Spa) + Jai Alai (Spain) 1991 Opera Soft @@ -7513,7 +7513,7 @@ - Jaws (Spa?) + Jaws (Spain?) 1989 A.M.H. @@ -7526,7 +7526,7 @@ - Jet Bomber (Euro) + Jet Bomber (Europe) 1985 Aackosoft @@ -7539,7 +7539,7 @@ - Jet Bomber (Euro, Alt) + Jet Bomber (Europe, alt) 1985 Aackosoft @@ -7552,7 +7552,7 @@ - Jet Fighter (Euro, Aackosoft) + Jet Fighter (Europe, Aackosoft) 1985 Aackosoft @@ -7565,7 +7565,7 @@ - Jet Fighter (Euro, Eurosoft) + Jet Fighter (Europe, Eurosoft) 1988 Eurosoft @@ -7578,7 +7578,7 @@ - Jet Fighter (Euro, Eurosoft, Alt) + Jet Fighter (Europe, Eurosoft, alt) 1988 Eurosoft @@ -7591,7 +7591,7 @@ - Jet Fighter (Euro, Eurosoft, Alt 2) + Jet Fighter (Europe, Eurosoft, alt 2) 1988 Eurosoft @@ -7604,7 +7604,7 @@ - Jet Set Willy (Euro) + Jet Set Willy (Europe) 1984 Software Projects @@ -7618,7 +7618,7 @@ - Jet Set Willy II - The Final Frontier (Euro, Hacked Protection) + Jet Set Willy II - The Final Frontier (Europe, hacked protection) 1985 Software Projects @@ -7631,7 +7631,7 @@ - Jet Set Willy II - The Final Frontier (Euro) + Jet Set Willy II - The Final Frontier (Europe) 1985 Software Projects @@ -7644,7 +7644,7 @@ - Jewels of Darkness (Euro) + Jewels of Darkness (Europe) 1986 Level 9 Computing @@ -7670,7 +7670,7 @@ - Jewels of Darkness (Euro, Alt) + Jewels of Darkness (Europe, alt) 1986 Level 9 Computing @@ -7696,7 +7696,7 @@ - Joe Blade (Euro) + Joe Blade (Europe) 1989 Players Software @@ -7709,7 +7709,7 @@ - Johny Comomolo in 3-2-1 Fire (Spa) + Johny Comomolo in 3-2-1 Fire (Spain) 1986 Dro Soft @@ -7722,7 +7722,7 @@ - Johny Comomolo in 3-2-1 Fire (Spa, Alt) + Johny Comomolo in 3-2-1 Fire (Spain, alt) 1986 Dro Soft @@ -7735,7 +7735,7 @@ - Journey to the Centre of the Earth (Euro) + Journey to the Centre of the Earth (Europe) 1985 Bug-Byte Software @@ -7789,7 +7789,7 @@ - Jumping Jack (Euro) + Jumping Jack (Europe) 1986 Livewire Software @@ -7802,7 +7802,7 @@ - Jungle Warrior (Spa) + Jungle Warrior (Spain) 1990 Zigurat Software @@ -7815,7 +7815,7 @@ - K'set - Issue 01 (Spa) + K'set - Issue 01 (Spain) 1985 Ediciones y Textos @@ -7835,7 +7835,7 @@ - K'set - Issue 02 (Spa) + K'set - Issue 02 (Spain) 1985 Ediciones y Textos @@ -7855,7 +7855,7 @@ - Karateka (Spa) + Karateka (Spain) 1986 Dro Soft @@ -7875,7 +7875,7 @@ - Ke Rulen los Petas (Spa) + Ke Rulen los Petas (Spain) 1989 Iber Soft @@ -7888,7 +7888,7 @@ - Ke Rulen los Petas (Spa, Alt Loader, Bad?) + Ke Rulen los Petas (Spain, alt loader, bad?) 1989 Iber Soft @@ -7901,7 +7901,7 @@ - Khazzad-Dum (Spa) + Khazzad-Dum (Spain) 1989 System 4 @@ -7914,7 +7914,7 @@ - King & Balloon (Euro) + King & Balloon (Europe) 1988 Bug-Byte Software @@ -7927,7 +7927,7 @@ - King Leonard (Spa) + King Leonard (Spain) 1986 Mind Games España @@ -7940,7 +7940,7 @@ - King Size - 50 Games in One Pack (Euro) + King Size - 50 Games in One Pack (Europe) 1986 Robtek Software @@ -7960,7 +7960,7 @@ - Klax (Euro) + Klax (Europe) 1990 Domark @@ -7973,7 +7973,7 @@ - Knight Ghost (Spa) + Knight Ghost (Spain) 1987 Dro Soft @@ -7986,7 +7986,7 @@ - Knight Lore (Euro) + Knight Lore (Europe) 1985 Ultimate Play The Game @@ -7999,7 +7999,7 @@ - Knight Orc (Euro, Hacked Protection) + Knight Orc (Europe, hacked protection) 1987 Rainbird Software @@ -8025,7 +8025,7 @@ - Knight Orc (Euro) + Knight Orc (Europe) 1987 Rainbird Software @@ -8051,7 +8051,7 @@ - Knight Orc (Euro, Hacked Protection 2) + Knight Orc (Europe, hacked protection 2) 1987 Rainbird Software @@ -8077,7 +8077,7 @@ - Knight Tyme (Euro) + Knight Tyme (Europe) 1986 Mastertronic Added Dimension @@ -8090,7 +8090,7 @@ - Knockout (Euro) + Knockout (Europe) 1985 Alligata Software @@ -8103,7 +8103,7 @@ - Kong (Euro) + Kong (Europe) 1988 Eurosoft @@ -8116,7 +8116,7 @@ - Kong's Revenge (Spa) + Kong's Revenge (Spain) 1991 Zigurat Software @@ -8136,7 +8136,7 @@ - Krakout (Euro) + Krakout (Europe) 1987 Gremlin Graphics @@ -8149,7 +8149,7 @@ - Krakout (Euro, Alt) + Krakout (Europe, alt) 1987 Gremlin Graphics @@ -8162,7 +8162,7 @@ - Krom - El Guerrero Invencible (Spa) + Krom - El Guerrero Invencible (Spain) 1989 OMK Software @@ -8175,7 +8175,7 @@ - Krypton (Spa) + Krypton (Spain) 1986 Manhattan Transfer @@ -8188,7 +8188,7 @@ - Kubus (Euro) + Kubus (Europe) 1985 Kuma Computers @@ -8201,7 +8201,7 @@ - Kuma Forth (Euro) + Kuma Forth (Europe) 1984 Kuma Computers @@ -8214,7 +8214,7 @@ - Kuma Forth (Euro, Alt) + Kuma Forth (Europe, alt) 1984 Kuma Computers @@ -8227,7 +8227,7 @@ - Kuma Logo (Euro) + Kuma Logo (Europe) 1984 Kuma Computers @@ -8240,7 +8240,7 @@ - Kuma Logo (Euro, Alt) + Kuma Logo (Europe, alt) 1984 Kuma Computers @@ -8253,7 +8253,7 @@ - The Inheritance (Euro) + The Inheritance (Europe) 1987 Infogrames @@ -8273,7 +8273,7 @@ - Laberinto (Spa) + Laberinto (Spain) 1985 Advance @@ -8286,7 +8286,7 @@ - Lady Safary (Spa) + Lady Safary (Spain) 1988 OMK Software @@ -8299,7 +8299,7 @@ - Last Dungeon (Spa) + Last Dungeon (Spain) 198? Grupo de Trabajo Software @@ -8312,7 +8312,7 @@ - The Last Mission (Spa) + The Last Mission (Spain) 1987 Opera Soft @@ -8325,7 +8325,7 @@ - Lazer Bykes (Euro) + Lazer Bykes (Europe) 1985 PSS @@ -8338,7 +8338,7 @@ - Lazer Bykes (Euro, Alt) + Lazer Bykes (Europe, alt) 1985 PSS @@ -8351,7 +8351,7 @@ - Lazer Bykes (Euro, Alt 2) + Lazer Bykes (Europe, alt 2) 1985 PSS @@ -8364,7 +8364,7 @@ - Lazy Jones (Euro) + Lazy Jones (Europe) 1985 Terminal Software @@ -8377,7 +8377,7 @@ - Lazy Jones (Euro, Alt) + Lazy Jones (Europe, alt) 1985 Terminal Software @@ -8390,7 +8390,7 @@ - Lazy Jones (Euro, Alt 2) + Lazy Jones (Europe, alt 2) 1985 Terminal Software @@ -8403,7 +8403,7 @@ - Le Mans (Euro) + Le Mans (Europe) 1984 Electric Software @@ -8416,7 +8416,7 @@ - Le Mans (Euro, Alt) + Le Mans (Europe, alt) 1984 Electric Software @@ -8429,7 +8429,7 @@ - Legend (Spa) + Legend (Spain) 1988 Iber Soft @@ -8442,7 +8442,7 @@ - Legends (Spa) + Legends (Spain) 198? Mind Games España @@ -8455,7 +8455,7 @@ - Legends of Star Arthur - Planet Mephius (Jpn) + Legends of Star Arthur - Planet Mephius (Japan) 1985 T&E Soft @@ -8516,7 +8516,7 @@ - Licantropo (Spa) + Licantropo (Spain) 1986 Onaki @@ -8529,7 +8529,7 @@ - Licence to Kill (Euro) + Licence to Kill (Europe) 1989 Domark @@ -8555,7 +8555,7 @@ - Life in the Fast Lane (Euro) + Life in the Fast Lane (Europe) 1987 Methodic Solutions @@ -8568,7 +8568,7 @@ - The Light Corridor (Euro) + The Light Corridor (Europe) 1990 Infogrames @@ -8581,7 +8581,7 @@ - Listings 1 (Ned) + Listings 1 (Netherlands) 1985 Salasan @@ -8594,7 +8594,7 @@ - Listings 2 (Ned) + Listings 2 (Netherlands) 1985 Salasan @@ -8607,7 +8607,7 @@ - Livingstone Supongo (Spa) + Livingstone Supongo (Spain) 1986 Opera Soft @@ -8620,7 +8620,7 @@ - Livingstone Supongo (Spa, Alt Loader) + Livingstone Supongo (Spain, alt loader) 1986 Opera Soft @@ -8633,7 +8633,7 @@ - Livingstone II (Euro) + Livingstone II (Europe) 1989 Opera Soft @@ -8653,7 +8653,7 @@ - Lizard (Jpn) + Lizard (Japan) 1985 Micro Cabin @@ -8666,7 +8666,7 @@ - Lorna (Spa) + Lorna (Spain) 1990 Topo Soft @@ -8679,7 +8679,7 @@ - Loteria Primitiva (Spa) + Loteria Primitiva (Spain) 198? Manhattan Transfer @@ -8693,7 +8693,7 @@ - Loteria Primitiva (Spa, Alt) + Loteria Primitiva (Spain, alt) 198? Manhattan Transfer @@ -8720,7 +8720,7 @@ - M-Droid (Euro) + M-Droid (Europe) 198? Blue Ribbon Software @@ -8733,7 +8733,7 @@ - M-Droid (Euro, Alt) + M-Droid (Europe, alt) 198? Blue Ribbon Software @@ -8746,7 +8746,7 @@ - Mac Attack (Euro) + Mac Attack (Europe) 1986 Eaglesoft @@ -8759,7 +8759,7 @@ - Macadam Bumper (Euro) + Macadam Bumper (Europe) 1985 Players Software @@ -8772,7 +8772,7 @@ - Macadam Bumper (Euro, Alt) + Macadam Bumper (Europe, alt) 1985 Players Software @@ -8785,7 +8785,7 @@ - Macadam Bumper (Euro, Alt 2) + Macadam Bumper (Europe, alt 2) 1985 Players Software @@ -8798,7 +8798,7 @@ - Macross Countdown (Euro) + Macross Countdown (Europe) 198? Eaglesoft @@ -8824,7 +8824,7 @@ - Mad Mix 2 - En el Castillo de los Fantasmas (Spa) + Mad Mix 2 - En el Castillo de los Fantasmas (Spain) 1990 Topo Soft @@ -8837,7 +8837,7 @@ - Mad Mix Game (Spa) + Mad Mix Game (Spain) 1988 Topo Soft @@ -8850,7 +8850,7 @@ - Made in Spain - 5 Estrellas (Spa) + Made in Spain - 5 Estrellas (Spain) 1985 Zigurat Software @@ -8863,7 +8863,7 @@ - Magic Johnson's Basketball (Spa) + Magic Johnson's Basketball (Spain) 1990 Dro Soft @@ -8876,7 +8876,7 @@ - Magic Pinball (Spa) + Magic Pinball (Spain) 1987 OMK Software @@ -8889,7 +8889,7 @@ - Maltese Joe's Pool Challenge (Euro) + Maltese Joe's Pool Challenge (Europe) 1989 Firebird Software @@ -8902,7 +8902,7 @@ - Mambo (Spa) + Mambo (Spain) 1989 Positive @@ -8915,7 +8915,7 @@ - Mambo (Spa, Alt) + Mambo (Spain, alt) 1989 Positive @@ -8928,7 +8928,7 @@ - Mandragore (Fra) + Mandragore (France) 1986 Infogrames @@ -8954,7 +8954,7 @@ - Mandragore (Fra, Alt) + Mandragore (France, alt) 1986 Infogrames @@ -8980,7 +8980,7 @@ - Manes (Jpn) + Manes (Japan) 1984 ASCII @@ -8993,7 +8993,7 @@ - Manic Miner (Euro) + Manic Miner (Europe) 1984 Software Projects @@ -9006,7 +9006,7 @@ - Manic Miner (Euro, Alt) + Manic Miner (Europe, alt) 1984 Software Projects @@ -9019,7 +9019,7 @@ - Map Game (Spa) + Map Game (Spain) 1985 Erbe Software @@ -9032,7 +9032,7 @@ - Mappy (Euro) + Mappy (Europe) 1984 Bug-Byte Software @@ -9045,7 +9045,7 @@ - Marcianos (Spa) + Marcianos (Spain) 1986 Manhattan Transfer @@ -9059,7 +9059,7 @@ - Martianoids (Euro) + Martianoids (Europe) 1987 Ultimate Play The Game @@ -9072,7 +9072,7 @@ - Mask II (Euro) + Mask II (Europe) 1987 Gremlin Graphics @@ -9085,7 +9085,7 @@ - Mask III - Venom Strikes Back (Euro) + Mask III - Venom Strikes Back (Europe) 1988 Gremlin Graphics @@ -9098,7 +9098,7 @@ - Master Chess (Euro) + Master Chess (Europe) 1987 Mastertronic @@ -9111,7 +9111,7 @@ - Master Chess (Euro, Alt) + Master Chess (Europe, alt) 1987 Mastertronic @@ -9124,7 +9124,7 @@ - Master of the Lamps (Euro) + Master of the Lamps (Europe) 1985 Activision @@ -9137,7 +9137,7 @@ - Master Voice (Euro) + Master Voice (Europe) 1985 Aackosoft @@ -9150,7 +9150,7 @@ - Match Day II (Euro) + Match Day II (Europe) 1987 Ocean Software @@ -9163,7 +9163,7 @@ - Maths Invaders (Euro) + Maths Invaders (Europe) 1985 Aackosoft @@ -9176,7 +9176,7 @@ - Maths Invaders (Euro, Alt) + Maths Invaders (Europe, alt) 1985 Aackosoft @@ -9189,7 +9189,7 @@ - Maxima (Euro) + Maxima (Europe) 1984 PSS @@ -9202,7 +9202,7 @@ - Maxima (Euro, Alt) + Maxima (Europe, alt) 1984 PSS @@ -9215,7 +9215,7 @@ - Mayhem (Euro) + Mayhem (Europe) 1985 Mr. Micro @@ -9228,7 +9228,7 @@ - Maze Master (Euro) + Maze Master (Europe) 1988 Eurosoft @@ -9241,7 +9241,7 @@ - Maze Max (Fra) + Maze Max (France) 1985 Loriciels @@ -9254,7 +9254,7 @@ - Mazes Unlimited (Euro) + Mazes Unlimited (Europe) 1986 Eaglesoft @@ -9267,7 +9267,7 @@ - Maziacs (Euro) + Maziacs (Europe) 1985 DK'Tronics @@ -9280,7 +9280,7 @@ - Mean Streets (Euro) + Mean Streets (Europe) 198? Kuma Computers @@ -9293,7 +9293,7 @@ - Mecom (Spa) + Mecom (Spain) 1988 Iber Soft @@ -9307,7 +9307,7 @@ - Mega Chess (Spa) + Mega Chess (Spain) 1988 Iber Soft @@ -9321,7 +9321,7 @@ - Meganova (Spa) + Meganova (Spain) 1988 Dinamic Software @@ -9334,7 +9334,7 @@ - Meganova (Spa, 2 Sides) + Meganova (Spain, 2 sides) 1988 Dinamic Software @@ -9353,7 +9353,7 @@ - Megaphoenix (Euro) + Megaphoenix (Europe) 1991 Dinamic Software @@ -9366,7 +9366,7 @@ - Mejor Software - Issue 01 - Guss en la Atlantida (Spa) + Mejor Software - Issue 01 - Guss en la Atlantida (Spain) 198? Creativos Editoriales @@ -9379,7 +9379,7 @@ - Mejor Software - Issue 01 - Guss en la Atlantida (Spa, Alt) + Mejor Software - Issue 01 - Guss en la Atlantida (Spain, alt) 198? Creativos Editoriales @@ -9392,7 +9392,7 @@ - Memory - C.04 (Ned) + Memory - C.04 (Netherlands) 1985 Computer Users Club @@ -9405,7 +9405,7 @@ - Merlin (Spa) + Merlin (Spain) 1987 Mind Games España @@ -9418,7 +9418,7 @@ - Metropolis (Spa) + Metropolis (Spain) 1989 Topo Soft @@ -9431,7 +9431,7 @@ - Michel Futbol Master (Euro) + Michel Futbol Master (Europe) 1989 Dinamic Software @@ -9451,7 +9451,7 @@ - Michel Futbol Master (Spa) + Michel Futbol Master (Spain) 1989 Dinamic Software @@ -9471,7 +9471,7 @@ - Mike Gunner (Spa) + Mike Gunner (Spain) 1988 Dinamic Software @@ -9484,7 +9484,7 @@ - Milk Race (Euro) + Milk Race (Europe) 1987 Mastertronic @@ -9497,7 +9497,7 @@ - Milk Race (Euro, Alt) + Milk Race (Europe, alt) 1987 Mastertronic @@ -9510,7 +9510,7 @@ - Miner Machine (Euro) + Miner Machine (Europe) 1987 Eaglesoft @@ -9523,7 +9523,7 @@ - Miner Machine (Euro, Alt) + Miner Machine (Europe, alt) 1987 Eaglesoft @@ -9536,7 +9536,7 @@ - Miner Machine (Euro, Alt 2) + Miner Machine (Europe, alt 2) 1987 Eaglesoft @@ -9549,7 +9549,7 @@ - Mini-Golf (Spa) + Mini-Golf (Spain) 1984 Advance @@ -9562,7 +9562,7 @@ - Mision en España (Spa) + Mision en España (Spain) 1986 Mind Games España @@ -9575,7 +9575,7 @@ - Mision Rescate (Spa) + Mision Rescate (Spain) 1986 Anaya Multimedia @@ -9588,7 +9588,7 @@ - El Misterio del Nilo (Spa) + El Misterio del Nilo (Spain) 1987 Zigurat Software @@ -9601,7 +9601,7 @@ - El Misterio del Nilo (Spa, Alt) + El Misterio del Nilo (Spain, alt) 1987 Zigurat Software @@ -9614,7 +9614,7 @@ - Molecule Man (Euro) + Molecule Man (Europe) 1986 Mastertronic @@ -9627,7 +9627,7 @@ - Molecule Man (Euro, Alt) + Molecule Man (Europe, alt) 1986 Mastertronic @@ -9640,7 +9640,7 @@ - Monopoly (Euro) + Monopoly (Europe) 1986 Leisure Genius @@ -9653,7 +9653,7 @@ - Moon Rider (Euro) + Moon Rider (Europe) 1986 Eaglesoft @@ -9666,7 +9666,7 @@ - Moonwalker - The Computer Game (Euro) + Moonwalker - The Computer Game (Europe) 1989 U.S. Gold @@ -9679,7 +9679,7 @@ - Moonwalker - The Computer Game (Euro, Alt) + Moonwalker - The Computer Game (Europe, alt) 1989 U.S. Gold @@ -9692,7 +9692,7 @@ - Mortadelo y Filemon (Spa) + Mortadelo y Filemon (Spain) 1988 Dro Soft @@ -9705,7 +9705,7 @@ - Mortadelo y Filemón II - Mortadelo y Filemon en Caceria de Pollos (Spa) + Mortadelo y Filemón II - Mortadelo y Filemon en Caceria de Pollos (Spain) 1990 Dro Soft @@ -9726,7 +9726,7 @@ - The Most Amazing Memory Game (Spa) + The Most Amazing Memory Game (Spain) 1986 Idealogic @@ -9739,7 +9739,7 @@ - Mot (Spa) + Mot (Spain) 1989 Opera Soft @@ -9771,7 +9771,7 @@ - El Motorista Sideral (Spa) + El Motorista Sideral (Spain) 1986 Anaya Multimedia @@ -9784,7 +9784,7 @@ - Mountain Bike Racer (Euro) + Mountain Bike Racer (Europe) 1990 Positive @@ -9797,7 +9797,7 @@ - Mountain Bike Racer (Spa) + Mountain Bike Racer (Spain) 1990 Positive @@ -9810,7 +9810,7 @@ - Mountain Bike Racer (Spa, Alt) + Mountain Bike Racer (Spain, alt) 1990 Positive @@ -9823,7 +9823,7 @@ - Mr. Wong's Loopy Laundry (Euro) + Mr. Wong's Loopy Laundry (Europe) 1984 Artic Computing @@ -9836,7 +9836,7 @@ - Mr. Wong's Loopy Laundry (Euro, Alt) + Mr. Wong's Loopy Laundry (Europe, alt) 1984 Artic Computing @@ -9849,7 +9849,7 @@ - MSX Screendump (Ned) + MSX Screendump (Netherlands) 1986 Philips @@ -9862,7 +9862,7 @@ - MSX Screendump (Ned, Alt) + MSX Screendump (Netherlands, alt) 1986 Philips @@ -9875,7 +9875,7 @@ - Mundial de Futbol (Spa) + Mundial de Futbol (Spain) 1990 Opera Soft @@ -9895,7 +9895,7 @@ - Mundiales de Futbol (Spa) + Mundiales de Futbol (Spain) 198? Onaki @@ -9908,7 +9908,7 @@ - El Mundo Perdido (Spa) + El Mundo Perdido (Spain) 1988 Topo Soft @@ -9935,7 +9935,7 @@ - Musica en Juego II - Figuras (Spa) + Musica en Juego II - Figuras (Spain) 1986 Sony @@ -9948,7 +9948,7 @@ - Mutan Zone (Spa) + Mutan Zone (Spain) 1989 Opera Soft @@ -9968,7 +9968,7 @@ - Mutan Zone (Spa, Alt) + Mutan Zone (Spain, alt) 1989 Opera Soft @@ -9988,7 +9988,7 @@ - Mutant Monty (Euro) + Mutant Monty (Europe) 1985 Artic Computing @@ -10001,7 +10001,7 @@ - Mystery House (Jpn) + Mystery House (Japan) 1983 Micro Cabin @@ -10014,7 +10014,7 @@ - Mystery House II (Jpn) + Mystery House II (Japan) 1984 Micro Cabin @@ -10027,7 +10027,7 @@ - Mystical (Euro) + Mystical (Europe) 1991 Infogrames @@ -10047,7 +10047,7 @@ - Mythos (Euro) + Mythos (Europe) 1990 Opera Soft @@ -10060,7 +10060,7 @@ - Mythos (Euro, Alt) + Mythos (Europe, alt) 1990 Opera Soft @@ -10073,7 +10073,7 @@ - Narco Police (Euro) + Narco Police (Europe) 1990 Dinamic Software @@ -10093,7 +10093,7 @@ - Narco Police (Euro, Alt) + Narco Police (Europe, alt) 1990 Dinamic Software @@ -10113,7 +10113,7 @@ - Navy Moves (Euro) + Navy Moves (Europe) 1988 Dinamic Software @@ -10133,7 +10133,7 @@ - Navy Moves (Spa) + Navy Moves (Spain) 1988 Dinamic Software @@ -10153,7 +10153,7 @@ - Navy Moves (Spa, Alt) + Navy Moves (Spain, alt) 1988 Dinamic Software @@ -10173,7 +10173,7 @@ - Night Flight (Jpn) + Night Flight (Japan) 1982 Colpax @@ -10186,7 +10186,7 @@ - Nightshade (Euro) + Nightshade (Europe) 1985 Ultimate Play The Game @@ -10199,7 +10199,7 @@ - Ninja Jajamaru-kun (Euro) + Ninja Jajamaru-kun (Europe) 1987 Eaglesoft @@ -10213,7 +10213,7 @@ - Nonamed (Spa) + Nonamed (Spain) 1986 Dinamic Software @@ -10226,7 +10226,7 @@ - Nonamed (Spa, Alt) + Nonamed (Spain, alt) 1986 Dinamic Software @@ -10240,7 +10240,7 @@ - Nonamed (Spa, Alt 2) + Nonamed (Spain, alt 2) 1986 Dinamic Software @@ -10253,7 +10253,7 @@ - North & South (Euro) + North & South (Europe) 1991 Infogrames @@ -10285,7 +10285,7 @@ - North Sea Bullion Adventure (Euro) + North Sea Bullion Adventure (Europe) 1985 Kuma Computers @@ -10298,7 +10298,7 @@ - North Sea Helicopter (Euro) + North Sea Helicopter (Europe) 1987 Aackosoft @@ -10311,7 +10311,7 @@ - Nuclear Bowls (Spa) + Nuclear Bowls (Spain) 1986 Zigurat Software @@ -10324,7 +10324,7 @@ - Number Painter (Spa) + Number Painter (Spain) 198? Sony Spain @@ -10338,7 +10338,7 @@ - Oberon 69 (Spa) + Oberon 69 (Spain) 1990 G.LL. Software @@ -10351,7 +10351,7 @@ - Obliterator (Spa) + Obliterator (Spain) 1989 Dro Soft @@ -10364,7 +10364,7 @@ - Ocean Conqueror (Euro) + Ocean Conqueror (Europe) 1987 Mastertronic @@ -10377,7 +10377,7 @@ - Octagon Squad (Euro) + Octagon Squad (Europe) 1986 Mastertronic @@ -10390,7 +10390,7 @@ - Octagon Squad (Euro, Alt) + Octagon Squad (Europe, alt) 1986 Mastertronic @@ -10403,7 +10403,7 @@ - Octagon Squad (Euro, Alt 2) + Octagon Squad (Europe, alt 2) 1986 Mastertronic @@ -10416,7 +10416,7 @@ - Oh Mummy!! (Euro) + Oh Mummy!! (Europe) 1984 Longman Software @@ -10429,7 +10429,7 @@ - Oh Shit! (Euro) + Oh Shit! (Europe) 1986 Aackosoft @@ -10442,7 +10442,7 @@ - Oh Shit! (Euro, Alt) + Oh Shit! (Europe, alt) 1986 Aackosoft @@ -10455,7 +10455,7 @@ - Oil's Well (Euro) + Oil's Well (Europe) 1985 Eaglesoft @@ -10468,7 +10468,7 @@ - Ole! (Euro) + Ole! (Europe) 1986 Bug-Byte Software @@ -10481,7 +10481,7 @@ - Operation Wolf (Euro) + Operation Wolf (Europe) 1988 Ocean Software @@ -10494,7 +10494,7 @@ - Operation Wolf (Euro, 2 Sides) + Operation Wolf (Europe, 2 sides) 1988 Ocean Software @@ -10514,7 +10514,7 @@ - Operation Wolf (Euro, 2 Sides, Alt) + Operation Wolf (Europe, 2 sides, alt) 1988 Ocean Software @@ -10534,7 +10534,7 @@ - Ormuz (Spa) + Ormuz (Spain) 1988 Iber Soft @@ -10548,7 +10548,7 @@ - Ormuz (Spa, Alt) + Ormuz (Spain, alt) 1988 Iber Soft @@ -10561,7 +10561,7 @@ - Ougon no Haka (Jpn) + Ougon no Haka (Japan) 1984 Magical Zoo @@ -10574,7 +10574,7 @@ - Out Run (Euro) + Out Run (Europe) 1988 U.S. Gold @@ -10587,7 +10587,7 @@ - Out Run (Euro, Alt) + Out Run (Europe, alt) 1988 U.S. Gold @@ -10600,7 +10600,7 @@ - Out Run (Euro, Alt Loader) + Out Run (Europe, alt loader) 1988 U.S. Gold @@ -10613,7 +10613,7 @@ - Out Run (Euro, Alt Loader 2) + Out Run (Europe, alt loader 2) 1988 U.S. Gold @@ -10626,7 +10626,7 @@ - Outroyd (Jpn) + Outroyd (Japan) 1985 Magical Zoo @@ -10639,7 +10639,7 @@ - Outroyd (Jpn, Alt Loader) + Outroyd (Japan, alt loader) 1985 Magical Zoo @@ -10652,7 +10652,7 @@ - Pac-Land (Euro) + Pac-Land (Europe) 1988 Grandslam Entertainments @@ -10665,7 +10665,7 @@ - Pac-Man (Euro) + Pac-Man (Europe) 1984 Bug-Byte Software @@ -10678,7 +10678,7 @@ - Pac-Mania (Euro) + Pac-Mania (Europe) 1988 Grandslam Entertainments @@ -10691,7 +10691,7 @@ - Paises de America (Spa) + Paises de America (Spain) 1984 Sony @@ -10704,7 +10704,7 @@ - Paises de Asia (Spa) + Paises de Asia (Spain) 1984 Sony @@ -10717,7 +10717,7 @@ - Panel Panic (Euro) + Panel Panic (Europe) 1986 Eaglesoft @@ -10730,7 +10730,7 @@ - Panel Panic (Euro, Alt) + Panel Panic (Europe, alt) 1986 Eaglesoft @@ -10756,7 +10756,7 @@ - Panique (Euro) + Panique (Europe) 1986 Eaglesoft @@ -10769,7 +10769,7 @@ - Panzer Attack (Euro) + Panzer Attack (Europe) 1985 MC Lothlorien @@ -10782,7 +10782,7 @@ - Panzer Attack (Euro, Alt) + Panzer Attack (Europe, alt) 1985 MC Lothlorien @@ -10795,7 +10795,7 @@ - Paris-Dakar (Spa) + Paris-Dakar (Spain) 1988 Zigurat Software @@ -10808,7 +10808,7 @@ - Passing Shot (Euro) + Passing Shot (Europe) 1989 Image Works @@ -10821,7 +10821,7 @@ - Pastfinder (Euro) + Pastfinder (Europe) 1984 Activision @@ -10834,7 +10834,7 @@ - Patagoras Software Educativo - Reflexion de la Luz - Espejos Planos (Spa) + Patagoras Software Educativo - Reflexion de la Luz - Espejos Planos (Spain) 1985 Ediciones SM @@ -10847,7 +10847,7 @@ - El Payaso Explorador 1 (Spa) + El Payaso Explorador 1 (Spain) 1986 Sony Spain @@ -10861,7 +10861,7 @@ - El Payaso Explorador 2 (Spa) + El Payaso Explorador 2 (Spain) 1986 Anaya Multimedia @@ -10874,7 +10874,7 @@ - Pentagram (Euro) + Pentagram (Europe) 1986 Ultimate Play The Game @@ -10887,7 +10887,7 @@ - Pepe Saltarin (Spa) + Pepe Saltarin (Spain) 1986 Grupo de Trabajo Software @@ -10900,7 +10900,7 @@ - Pepe Saltarin (Spa, Alt) + Pepe Saltarin (Spain, alt) 1986 Grupo de Trabajo Software @@ -10913,7 +10913,7 @@ - Perico Delgado Maillot Amarillo (Spa) + Perico Delgado Maillot Amarillo (Spain) 1989 Topo Soft @@ -10947,7 +10947,7 @@ - PERT (Spa) + PERT (Spain) 1986 DIMensionNEW @@ -10960,7 +10960,7 @@ - El Pescador Espacial (Spa) + El Pescador Espacial (Spain) 1986 Anaya Multimedia @@ -10973,7 +10973,7 @@ - Peter Beardsley's International Football (Euro) + Peter Beardsley's International Football (Europe) 1988 Grandslam Entertainments @@ -10986,7 +10986,7 @@ - Phantis (Spa) + Phantis (Spain) 1987 Dinamic Software @@ -11006,7 +11006,7 @@ - Phantis (Spa, Alt) + Phantis (Spain, alt) 1987 Dinamic Software @@ -11026,7 +11026,7 @@ - Phantomas 2 (Spa) + Phantomas 2 (Spain) 1987 Dinamic Software @@ -11039,7 +11039,7 @@ - Pharaoh's Revenge (Euro) + Pharaoh's Revenge (Europe) 1988 Eurosoft @@ -11052,7 +11052,7 @@ - Pharaoh's Revenge (Euro, Alt) + Pharaoh's Revenge (Europe, alt) 1988 Eurosoft @@ -11079,7 +11079,7 @@ - PhFile (Spa) + PhFile (Spain) 198? Philips @@ -11092,7 +11092,7 @@ - Pico Pico (Jpn) + Pico Pico (Japan) 1983 Micro Cabin @@ -11105,7 +11105,7 @@ - Pico Pico (Jpn, Alt) + Pico Pico (Japan, alt) 1983 Micro Cabin @@ -11118,7 +11118,7 @@ - Pinball Blaster (Euro) + Pinball Blaster (Europe) 1988 Eurosoft @@ -11131,7 +11131,7 @@ - Pinball Blaster (Euro, Alt) + Pinball Blaster (Europe, alt) 1988 Eurosoft @@ -11144,7 +11144,7 @@ - Pink Panther (Spa) + Pink Panther (Spain) 1988 Dro Soft @@ -11157,7 +11157,7 @@ - Pitfall II - Lost Caverns (Euro) + Pitfall II - Lost Caverns (Europe) 1985 Activision @@ -11170,7 +11170,7 @@ - Playhouse Strippoker (Euro) + Playhouse Strippoker (Europe) 1988 Eurosoft @@ -11183,7 +11183,7 @@ - El Poder Oscuro (Spa) + El Poder Oscuro (Spain) 1988 Zigurat Software @@ -11196,7 +11196,7 @@ - Polar Star (Jpn) + Polar Star (Japan) 1984 Micro Cabin @@ -11209,7 +11209,7 @@ - Polar Star (Jpn, Alt Loader) + Polar Star (Japan, alt loader) 1984 Micro Cabin @@ -11222,7 +11222,7 @@ - Poli Diaz (Spa) + Poli Diaz (Spain) 1990 Opera Soft @@ -11236,7 +11236,7 @@ - Police Academy (Euro) + Police Academy (Europe) 1986 Eaglesoft @@ -11249,7 +11249,7 @@ - Police Academy II (Euro) + Police Academy II (Europe) 1987 Methodic Solutions @@ -11262,7 +11262,7 @@ - Poogaboo (Spa, Hacked Protection) + Poogaboo (Spain, hacked protection) 1991 Opera Soft @@ -11275,7 +11275,7 @@ - Poogaboo (Spa) + Poogaboo (Spain) 1991 Opera Soft @@ -11288,7 +11288,7 @@ - Poogaboo (Spa, Alt) + Poogaboo (Spain, alt) 1991 Opera Soft @@ -11301,7 +11301,7 @@ - Post Mortem (Spa) + Post Mortem (Spain) 1988 Iber Soft @@ -11314,7 +11314,7 @@ - Power and Magic (Spa) + Power and Magic (Spain) 1990 Zigurat Software @@ -11328,7 +11328,7 @@ - Power and Magic (Spa, Alt) + Power and Magic (Spain, alt) 1990 Zigurat Software @@ -11341,7 +11341,7 @@ - Power Drift (Euro) + Power Drift (Europe) 1989 Activision @@ -11361,7 +11361,7 @@ - Previsiones (Spa) + Previsiones (Spain) 1986 Load 'n' Run @@ -11374,7 +11374,7 @@ - El Principe y el Dragon (Spa) + El Principe y el Dragon (Spain) 1985 Advance @@ -11387,7 +11387,7 @@ - Pro Yakyuu Super Simulation (Jpn) + Pro Yakyuu Super Simulation (Japan) 1984 JDS @@ -11400,7 +11400,7 @@ - Professional Snooker Simulator (Euro) + Professional Snooker Simulator (Europe) 1987 Codemasters @@ -11413,7 +11413,7 @@ - Professional Tennis Simulator (Spa?) + Professional Tennis Simulator (Spain?) 1990 Dinamic Software @@ -11427,7 +11427,7 @@ - Jackie Chan in Project A (Jpn) + Jackie Chan in Project A (Japan) 1984 Pony @@ -11440,7 +11440,7 @@ - The Protector (Euro) + The Protector (Europe) 1987 Eaglesoft @@ -11453,7 +11453,7 @@ - The Protector (Euro, Alt) + The Protector (Europe, alt) 1987 Eaglesoft @@ -11466,7 +11466,7 @@ - Psychedelia (Euro) + Psychedelia (Europe) 1984 Aackosoft @@ -11479,7 +11479,7 @@ - Psycho Pig U.X.B. (Euro) + Psycho Pig U.X.B. (Europe) 1988 U.S. Gold @@ -11492,7 +11492,7 @@ - Punchy (Euro) + Punchy (Europe) 1984 Mr. Micro @@ -11505,7 +11505,7 @@ - Punchy (Euro, Alt) + Punchy (Europe, alt) 1984 Mr. Micro @@ -11518,7 +11518,7 @@ - Pyramid Warp (Jpn) + Pyramid Warp (Japan) 1983 T&E Soft @@ -11531,7 +11531,7 @@ - Quebert (Euro) + Quebert (Europe) 1988 Eurosoft @@ -11544,7 +11544,7 @@ - Quebert (Euro, Alt) + Quebert (Europe, alt) 1988 Eurosoft @@ -11557,7 +11557,7 @@ - Quebert (Euro, Alt 2) + Quebert (Europe, alt 2) 1988 Eurosoft @@ -11570,7 +11570,7 @@ - Queen's Golf (Jpn) + Queen's Golf (Japan) 1984 ASCII @@ -11618,7 +11618,7 @@ - R.A.M. (Spa) + R.A.M. (Spain) 1990 Topo Soft @@ -11631,7 +11631,7 @@ - Race City (Spa) + Race City (Spain) 1988 Iber Soft @@ -11644,7 +11644,7 @@ - Rally-X (Euro) + Rally-X (Europe) 1984 Bug-Byte Software @@ -11657,7 +11657,7 @@ - Rambo III (Euro) + Rambo III (Europe) 1988 Ocean Software @@ -11670,7 +11670,7 @@ - Rambo III (Euro, 2 Sides) + Rambo III (Europe, 2 sides) 1988 Ocean Software @@ -11690,7 +11690,7 @@ - Rambo III (Euro, 2 Sides, Alt) + Rambo III (Europe, 2 sides, alt) 1988 Ocean Software @@ -11710,7 +11710,7 @@ - The Rampart (Spa) + The Rampart (Spain) 1988 Iber Soft @@ -11723,7 +11723,7 @@ - RasterScan (Euro) + RasterScan (Europe) 1987 Mastertronic @@ -11736,7 +11736,7 @@ - RasterScan (Euro, Alt) + RasterScan (Europe, alt) 1987 Mastertronic @@ -11749,7 +11749,7 @@ - Rath-Tha (Spa) + Rath-Tha (Spain) 1989 Positive @@ -11762,7 +11762,7 @@ - Red Dawn (Euro) + Red Dawn (Europe) 1988 Eurosoft @@ -11775,7 +11775,7 @@ - Red Dawn (Euro, Alt) + Red Dawn (Europe, alt) 1988 Eurosoft @@ -11788,7 +11788,7 @@ - Reflex (Euro) + Reflex (Europe) 1987 Players Software @@ -11808,7 +11808,7 @@ - Reflex (Euro, Alt) + Reflex (Europe, alt) 1987 Players Software @@ -11828,7 +11828,7 @@ - Reflex (Euro, Alt 2) + Reflex (Europe, alt 2) 1987 Players Software @@ -11848,7 +11848,7 @@ - Relics (Jpn) + Relics (Japan) 1986 Bothtec @@ -11868,7 +11868,7 @@ - Renegade III - The Final Chapter (Euro) + Renegade III - The Final Chapter (Europe) 1989 Imagine Software @@ -11881,7 +11881,7 @@ - Rescate Atlántida (Spa) + Rescate Atlántida (Spain) 1989 Dinamic Software @@ -11894,7 +11894,7 @@ - Rescate Atlántida (Spa, 2 Sides) + Rescate Atlántida (Spain, 2 sides) 1989 Dinamic Software @@ -11914,7 +11914,7 @@ - Rescate en el Golfo (Spa, Hacked Protection) + Rescate en el Golfo (Spain, hacked protection) 1990 Opera Soft @@ -11934,7 +11934,7 @@ - Rescate en el Golfo (Spa, Hacked Protection 2) + Rescate en el Golfo (Spain, hacked protection 2) 1990 Opera Soft @@ -11954,7 +11954,7 @@ - Rescate en el Golfo (Spa) + Rescate en el Golfo (Spain) 1990 Opera Soft @@ -11974,7 +11974,7 @@ - Risky Holding (Spa) + Risky Holding (Spain) 1986 DIMensionNEW @@ -11987,7 +11987,7 @@ - River Raid (Euro) + River Raid (Europe) 1984 Activision @@ -12000,7 +12000,7 @@ - Robocop (Euro) + Robocop (Europe) 1988 Ocean Software @@ -12020,7 +12020,7 @@ - Robocop (Euro, Alt) + Robocop (Europe, alt) 1988 Ocean Software @@ -12040,7 +12040,7 @@ - Robot Wars (Euro) + Robot Wars (Europe) 1986 Eaglesoft @@ -12053,7 +12053,7 @@ - Roboy (Euro) + Roboy (Europe) 1987 Methodic Solutions @@ -12066,7 +12066,7 @@ - Rock 'n Roller (Spa) + Rock 'n Roller (Spain) 1988 Topo Soft @@ -12079,7 +12079,7 @@ - Rocket Roger (Euro) + Rocket Roger (Europe) 1987 Alligata Software @@ -12092,7 +12092,7 @@ - Rocket Roger (Euro, Alt) + Rocket Roger (Europe, alt) 1987 Alligata Software @@ -12105,7 +12105,7 @@ - Rocky (Spa) + Rocky (Spain) 1985 Dinamic Software @@ -12118,7 +12118,7 @@ - Rocky (Spa, Alt) + Rocky (Spain, alt) 1985 Dinamic Software @@ -12131,7 +12131,7 @@ - Roma - La Conquista del Imperio (Spa) + Roma - La Conquista del Imperio (Spain) 1986 Idealogic @@ -12144,7 +12144,7 @@ - RSC Ensamblador (Spa) + RSC Ensamblador (Spain) 198? Manhattan Transfer @@ -12157,7 +12157,7 @@ - RSC Ensamblador (Spa, Alt) + RSC Ensamblador (Spain, alt) 198? Manhattan Transfer @@ -12170,7 +12170,7 @@ - Runner (Fra) + Runner (France) 1986 Loriciels @@ -12183,7 +12183,7 @@ - The Running Man (Spa?) + The Running Man (Spain?) 1989 Grandslam Entertainments @@ -12203,7 +12203,7 @@ - Sabotaje (Spa) + Sabotaje (Spain) 1988 P.J. Software @@ -12216,7 +12216,7 @@ - Sabotaje (Spa, Alt) + Sabotaje (Spain, alt) 1988 P.J. Software @@ -12229,7 +12229,7 @@ - Sabrina (Spa) + Sabrina (Spain) 1989 Iber Soft @@ -12242,7 +12242,7 @@ - Saint Dragon (Spa) + Saint Dragon (Spain) 1990 Dro Soft @@ -12262,7 +12262,7 @@ - Salvage (Euro) + Salvage (Europe) 1986 Livewire Software @@ -12275,7 +12275,7 @@ - Samantha Fox Strip Poker (Euro) + Samantha Fox Strip Poker (Europe) 1986 Martech Games @@ -12288,7 +12288,7 @@ - Samantha Fox Strip Poker (Euro, Alt) + Samantha Fox Strip Poker (Europe, alt) 1986 Martech Games @@ -12301,7 +12301,7 @@ - Satan (Euro) + Satan (Europe) 1989 Dinamic Software @@ -12321,7 +12321,7 @@ - Satan (Spa) + Satan (Spain) 1989 Dinamic Software @@ -12341,7 +12341,7 @@ - Satan (Spa, Alt) + Satan (Spain, alt) 1989 Dinamic Software @@ -12361,7 +12361,7 @@ - Scentipede (Euro) + Scentipede (Europe) 1986 Eaglesoft @@ -12374,7 +12374,7 @@ - Science Fiction (Euro) + Science Fiction (Europe) 1986 Eaglesoft @@ -12387,7 +12387,7 @@ - Score 3020 (Spa) + Score 3020 (Spain) 1988 Topo Soft @@ -12400,7 +12400,7 @@ - Scramble Spirits (Euro) + Scramble Spirits (Europe) 1990 Grandslam Entertainments @@ -12420,7 +12420,7 @@ - Scramble Spirits (Euro, Alt) + Scramble Spirits (Europe, alt) 1990 Grandslam Entertainments @@ -12440,7 +12440,7 @@ - Sea King (Euro) + Sea King (Europe) 1986 Players Software @@ -12453,7 +12453,7 @@ - El Secreto de la Piramide (Spa) + El Secreto de la Piramide (Spain) 198? Manhattan Transfer @@ -12466,7 +12466,7 @@ - Senda Salvaje (Spa) + Senda Salvaje (Spain) 1990 Zigurat Software @@ -12486,7 +12486,7 @@ - Shark Hunter (Euro) + Shark Hunter (Europe) 1984 Electric Software @@ -12499,7 +12499,7 @@ - Shinobi (Euro) + Shinobi (Europe) 1989 Virgin Games @@ -12532,7 +12532,7 @@ - Shnax (Euro) + Shnax (Europe) 1985 Kuma Computers @@ -12545,7 +12545,7 @@ - Shup - Trebol (Spa) + Shup - Trebol (Spain) 1986 Mind Games España @@ -12558,7 +12558,7 @@ - Silent Shadow (Euro?) + Silent Shadow (Europe?) 1988 Topo Soft @@ -12571,7 +12571,7 @@ - Silfi (Spa) + Silfi (Spain) 1988 Iber Soft @@ -12584,7 +12584,7 @@ - Silicon Dreams (Euro) + Silicon Dreams (Europe) 1986 Level 9 Computing @@ -12610,7 +12610,7 @@ - Silicon Dreams (Euro, Alt) + Silicon Dreams (Europe, alt) 1986 Level 9 Computing @@ -12636,7 +12636,7 @@ - Silicon Dreams (Euro, Alt 2) + Silicon Dreams (Europe, alt 2) 1984? Level 9 Computing @@ -12662,7 +12662,7 @@ - Silicon Dreams (Euro, Alt 3) + Silicon Dreams (Europe, alt 3) 1984? Level 9 Computing @@ -12688,7 +12688,7 @@ - Simulador Profesional de Tenis (Spa) + Simulador Profesional de Tenis (Spain) 1990 Dinamic Software @@ -12701,7 +12701,7 @@ - Sir Fred (Spa) + Sir Fred (Spain) 1986 Zigurat Software @@ -12714,7 +12714,7 @@ - Sirwood (Spa) + Sirwood (Spain) 1990 Opera Soft @@ -12746,7 +12746,7 @@ - Sirwood (Spa, Alt) + Sirwood (Spain, alt) 1990 Opera Soft @@ -12778,7 +12778,7 @@ - Sito Pons 500cc Grand Prix (Spa) + Sito Pons 500cc Grand Prix (Spain) 1990 Zigurat Software @@ -12791,7 +12791,7 @@ - Skate Dragon (Spa) + Skate Dragon (Spain) 1986 Idealogic @@ -12804,7 +12804,7 @@ - Skate Dragon (Spa, Alt) + Skate Dragon (Spain, alt) 1986 Idealogic @@ -12817,7 +12817,7 @@ - Skooter (Euro) + Skooter (Europe) 1987 Eaglesoft @@ -12830,7 +12830,7 @@ - Skramble (Euro) + Skramble (Europe) 1985 Aackosoft @@ -12843,7 +12843,7 @@ - Skull Exilon (Spa) + Skull Exilon (Spain) 1988 Iber Soft @@ -12857,7 +12857,7 @@ - Sky Diver (Jpn) + Sky Diver (Japan) 1984 Hudson Soft @@ -12870,7 +12870,7 @@ - Sky Vision (Euro) + Sky Vision (Europe) 1987 Eaglesoft @@ -12883,7 +12883,7 @@ - Sky War (Spa) + Sky War (Spain) 1988 OMK Software @@ -12896,7 +12896,7 @@ - Skyhawk (Euro) + Skyhawk (Europe) 1986 Bug-Byte Software @@ -12922,7 +12922,7 @@ - Slapshot (Euro) + Slapshot (Europe) 1985 Anirog Software @@ -12935,7 +12935,7 @@ - Smack Wacker (Euro) + Smack Wacker (Europe) 1986 Eaglesoft @@ -12948,7 +12948,7 @@ - Smaily (Spa) + Smaily (Spain) 1990 Zigurat Software @@ -12961,7 +12961,7 @@ - Smash (Euro) + Smash (Europe) 1984 Spectravideo @@ -12974,7 +12974,7 @@ - Snake It (Euro) + Snake It (Europe) 1986 Eaglesoft @@ -12987,7 +12987,7 @@ - The Snowman (Euro) + The Snowman (Europe) 1984 Quicksilva @@ -13073,7 +13073,7 @@ - Sol Negro (Spa) + Sol Negro (Spain) 1989 Opera Soft @@ -13093,7 +13093,7 @@ - Sol Negro (Spa, Alt) + Sol Negro (Spain, alt) 1989 Opera Soft @@ -13113,7 +13113,7 @@ - Sol Negro (Spa, Alt 2) + Sol Negro (Spain, alt 2) 1989 Opera Soft @@ -13133,7 +13133,7 @@ - Soldier of Light (Spa) + Soldier of Light (Spain) 1989 Dro Soft @@ -13146,7 +13146,7 @@ - Solo (Spa) + Solo (Spain) 1989 Opera Soft @@ -13159,7 +13159,7 @@ - Sootland (Spa) + Sootland (Spain) 1988 Zafiro Software Division @@ -13179,7 +13179,7 @@ - Sorcery (Euro) + Sorcery (Europe) 1985 Virgin Games @@ -13192,7 +13192,7 @@ - Sorcery (Euro, Alt) + Sorcery (Europe, alt) 1985 Virgin Games @@ -13205,7 +13205,7 @@ - Soul of a Robot (Euro) + Soul of a Robot (Europe) 1987 Mastertronic @@ -13218,7 +13218,7 @@ - Soviet (Euro?) + Soviet (Europe?) 1990 Opera Soft @@ -13238,7 +13238,7 @@ - Space Busters (Euro, Eaglesoft) + Space Busters (Europe, Eaglesoft) 1986 Eaglesoft @@ -13251,7 +13251,7 @@ - Space Busters (Euro, Aackosoft) + Space Busters (Europe, Aackosoft) 1985 Aackosoft @@ -13264,7 +13264,7 @@ - Space Rescue (Euro) + Space Rescue (Europe) 1988 Eurosoft @@ -13277,7 +13277,7 @@ - Space Rescue (Euro, Alt) + Space Rescue (Europe, alt) 1988 Eurosoft @@ -13290,7 +13290,7 @@ - Space Rescue (Euro, Alt 2) + Space Rescue (Europe, alt 2) 1988 Eurosoft @@ -13303,7 +13303,7 @@ - Space Shuttle - A Journey into Space (Euro) + Space Shuttle - A Journey into Space (Europe) 1986 Activision @@ -13316,7 +13316,7 @@ - Space Smugglers (Spa) + Space Smugglers (Spain) 1989 MHT Ingenieros @@ -13329,7 +13329,7 @@ - Space Walk (Euro) + Space Walk (Europe) 1985 Mastertronic @@ -13355,7 +13355,7 @@ - Special Operations (Euro) + Special Operations (Europe) 1985 MC Lothlorien @@ -13368,7 +13368,7 @@ - Special Operations (Euro, Alt) + Special Operations (Europe, alt) 1985 MC Lothlorien @@ -13381,7 +13381,7 @@ - Speed King (Euro) + Speed King (Europe) 1986 Mastertronic @@ -13394,7 +13394,7 @@ - Speed King (Euro, Alt) + Speed King (Europe, alt) 1986 Mastertronic @@ -13407,7 +13407,7 @@ - Speed King (Euro, Alt 2) + Speed King (Europe, alt 2) 1986 Mastertronic @@ -13420,7 +13420,7 @@ - Speedboat Racer (Euro) + Speedboat Racer (Europe) 1987 Methodic Solutions @@ -13433,7 +13433,7 @@ - Spirits (Spa) + Spirits (Spain) 1987 Topo Soft @@ -13446,7 +13446,7 @@ - Spitfire '40 (Euro) + Spitfire '40 (Europe) 1986 Mirrorsoft @@ -13459,7 +13459,7 @@ - Splash (Spa) + Splash (Spain) 1986 Mind Games España @@ -13472,7 +13472,7 @@ - Spy Story (Euro) + Spy Story (Europe) 1986 Aackosoft @@ -13485,7 +13485,7 @@ - Spy Story (Euro, Alt) + Spy Story (Europe, alt) 1986 Aackosoft @@ -13498,7 +13498,7 @@ - Spy vs Spy II - The Island Caper (Euro) + Spy vs Spy II - The Island Caper (Europe) 1987 Databyte @@ -13511,7 +13511,7 @@ - Spy vs Spy II - The Island Caper (Euro, Alt) + Spy vs Spy II - The Island Caper (Europe, alt) 1987 Databyte @@ -13524,7 +13524,7 @@ - Star Bowls (Spa) + Star Bowls (Spain) 1991 Zigurat Software @@ -13537,7 +13537,7 @@ - Star Fighter (Euro) + Star Fighter (Europe) 1986 Eaglesoft @@ -13550,7 +13550,7 @@ - Star Runner (Spa) + Star Runner (Spain) 1986 Manhattan Transfer @@ -13563,7 +13563,7 @@ - Star Runner (Spa, Alt) + Star Runner (Spain, alt) 1986 Manhattan Transfer @@ -13598,7 +13598,7 @@ - Star Wars (Euro) + Star Wars (Europe) 1986 Eaglesoft @@ -13611,7 +13611,7 @@ - Star Wars (Euro, Alt) + Star Wars (Europe, alt) 1986 Eaglesoft @@ -13624,7 +13624,7 @@ - Starbuggy (Euro) + Starbuggy (Europe) 1988 Eurosoft @@ -13637,7 +13637,7 @@ - Starbyte (Spa) + Starbyte (Spain) 1987 Mister Chip @@ -13650,7 +13650,7 @@ - Stardust (Spa) + Stardust (Spain) 1987 Topo Soft @@ -13663,7 +13663,7 @@ - Starquake (Euro) + Starquake (Europe) 1986 Bubble Bus Software @@ -13676,7 +13676,7 @@ - Starquake (Euro, Alt) + Starquake (Europe, alt) 1986 Bubble Bus Software @@ -13751,7 +13751,7 @@ - Steve Davis Snooker (Euro) + Steve Davis Snooker (Europe) 1985 CDS Microsystems @@ -13764,7 +13764,7 @@ - Stop Ball (Spa) + Stop Ball (Spain) 1987 Dro Soft @@ -13777,7 +13777,7 @@ - Storm - Una's Lair (Euro) + Storm - Una's Lair (Europe) 1986 Mastertronic @@ -13790,7 +13790,7 @@ - Storm - Una's Lair (Euro, Alt) + Storm - Una's Lair (Europe, alt) 1986 Mastertronic @@ -13803,7 +13803,7 @@ - Stormbringer (Euro) + Stormbringer (Europe) 1987 Mastertronic Added Dimension @@ -13816,7 +13816,7 @@ - Streaker (Euro) + Streaker (Europe) 1987 Bulldog @@ -13829,7 +13829,7 @@ - Strip Poker II+ (Euro) + Strip Poker II+ (Europe) 1988 Anco Software @@ -13842,7 +13842,7 @@ - Strip Poker II+ (Euro, 2 Sides) + Strip Poker II+ (Europe, 2 sides) 1988 Anco Software @@ -13862,7 +13862,7 @@ - Super Chess (Euro) + Super Chess (Europe) 1984 Kuma Computers @@ -13876,7 +13876,7 @@ - Super Chess (Euro, Alt) + Super Chess (Europe, alt) 1984 Kuma Computers @@ -13889,7 +13889,7 @@ - Super Cross Force (Euro) + Super Cross Force (Europe) 1983 Spectravideo @@ -13902,7 +13902,7 @@ - Super Sapiens (Spa) + Super Sapiens (Spain) 1989 P.J. Software? @@ -13915,7 +13915,7 @@ - Super Sprites (Spa) + Super Sprites (Spain) 1986 Idealogic @@ -13928,7 +13928,7 @@ - Superbowl (Euro) + Superbowl (Europe) 1985 Budgie Budget Software @@ -13941,7 +13941,7 @@ - Superkarateka (Spa) + Superkarateka (Spain) 198? Onaki @@ -13954,7 +13954,7 @@ - Survivor (Spa) + Survivor (Spain) 1987 Topo Soft @@ -13967,7 +13967,7 @@ - Survivors (Euro) + Survivors (Europe) 1986 Atlantis Software @@ -13980,7 +13980,7 @@ - SWIV (Spa) + SWIV (Spain) 1991 Dro Soft @@ -14000,7 +14000,7 @@ - SWIV (Spa, Alt) + SWIV (Spain, alt) 1991 Dro Soft @@ -14020,7 +14020,7 @@ - Tai-Pan (Euro) + Tai-Pan (Europe) 1987 Ocean Software @@ -14040,7 +14040,7 @@ - Tank Battalion (Euro) + Tank Battalion (Europe) 1984 Bug-Byte Software @@ -14053,7 +14053,7 @@ - Target Plus (Spa) + Target Plus (Spain) 1988 Dinamic Software @@ -14066,7 +14066,7 @@ - Tasword (Spa) + Tasword (Spain) 1985 Sony @@ -14079,7 +14079,7 @@ - Tawara (Jpn) + Tawara (Japan) 1984 ASCII @@ -14092,7 +14092,7 @@ - Teenage Mutant Hero Turtles (Euro, Hacked Protection) + Teenage Mutant Hero Turtles (Europe, hacked protection) 1990 MCM Software @@ -14105,7 +14105,7 @@ - Teenage Mutant Hero Turtles (Euro) + Teenage Mutant Hero Turtles (Europe) 1990 MCM Software @@ -14118,7 +14118,7 @@ - Temptations (Spa) + Temptations (Spain) 1988 Topo Soft @@ -14131,7 +14131,7 @@ - Tension (Spa) + Tension (Spain) 1988 System 4 @@ -14144,7 +14144,7 @@ - Terminus - Prison Planet (Euro) + Terminus - Prison Planet (Europe) 1987 Mastertronic Added Dimension @@ -14157,7 +14157,7 @@ - Terramex (Euro) + Terramex (Europe) 1988 Grandslam Entertainments @@ -14170,7 +14170,7 @@ - Terrorpods (Spa) + Terrorpods (Spain) 1989 Dro Soft @@ -14183,7 +14183,7 @@ - Test de Adaptacion (Spa) + Test de Adaptacion (Spain) 1984 DIMensionNEW @@ -14196,7 +14196,7 @@ - Test de Capacidad de Concentracion (Spa) + Test de Capacidad de Concentracion (Spain) 1984 DIMensionNEW @@ -14209,7 +14209,7 @@ - Test de Caracter (Spa) + Test de Caracter (Spain) 1984 DIMensionNEW @@ -14222,7 +14222,7 @@ - Test Drive II - The Duel (Spa) + Test Drive II - The Duel (Spain) 1989 Dro Soft @@ -14235,7 +14235,7 @@ - Test Drive II - The Duel (Spa, Alt) + Test Drive II - The Duel (Spain, alt) 1989 Dro Soft @@ -14248,7 +14248,7 @@ - Tetris (Euro) + Tetris (Europe) 1987 Mirrorsoft @@ -14261,7 +14261,7 @@ - Thexder (Euro) + Thexder (Europe) 1986 Eaglesoft @@ -14274,7 +14274,7 @@ - Thing Bounces Back (Euro) + Thing Bounces Back (Europe) 1987 Gremlin Graphics @@ -14287,7 +14287,7 @@ - Thor (Spa) + Thor (Spain) 1988 Proein Soft Line @@ -14300,7 +14300,7 @@ - Thunder Blade (Euro) + Thunder Blade (Europe) 1988 U.S. Gold @@ -14320,7 +14320,7 @@ - Thunderbirds (Euro) + Thunderbirds (Europe) 1989 Grandslam Entertainments @@ -14352,7 +14352,7 @@ - Time and Magik II - Red Moon (Euro) + Time and Magik II - Red Moon (Europe) 1985 Level 9 Computing @@ -14365,7 +14365,7 @@ - Time Bandits (Euro) + Time Bandits (Europe) 1984 PSS @@ -14378,7 +14378,7 @@ - Time Bandits (Euro, Alt) + Time Bandits (Europe, alt) 1984 PSS @@ -14391,7 +14391,7 @@ - Time Bomb (Euro) + Time Bomb (Europe) 1987 Methodic Solutions @@ -14404,7 +14404,7 @@ - Time Curb (Euro) + Time Curb (Europe) 1986 Aackosoft @@ -14417,7 +14417,7 @@ - Time Curb (Euro, Alt) + Time Curb (Europe, alt) 1986 Aackosoft @@ -14430,7 +14430,7 @@ - Time Out (Spa) + Time Out (Spain) 1988 Zafiro Software Division @@ -14443,7 +14443,7 @@ - Time Rider (Euro) + Time Rider (Europe) 1988 Eurosoft @@ -14456,7 +14456,7 @@ - Time Rider (Euro, Alt) + Time Rider (Europe, alt) 1988 Eurosoft @@ -14469,7 +14469,7 @@ - Time Scanner (Euro) + Time Scanner (Europe) 1989 Activision @@ -14482,7 +14482,7 @@ - Time Trax (Euro) + Time Trax (Europe) 1986 Bug-Byte Software @@ -14495,7 +14495,7 @@ - Time Trax (Euro, Alt) + Time Trax (Europe, alt) 1986 Bug-Byte Software @@ -14508,7 +14508,7 @@ - Titanic (Spa) + Titanic (Spain) 1988 Topo Soft @@ -14528,7 +14528,7 @@ - Toi Acid Game (Spa) + Toi Acid Game (Spain) 1989 Iber Soft @@ -14560,7 +14560,7 @@ - Tokyo Gang (Spa) + Tokyo Gang (Spain) 1990 G.LL. Software @@ -14573,7 +14573,7 @@ - Tokyo Nampa Street (Jpn) + Tokyo Nampa Street (Japan) 1986 Enix @@ -14605,7 +14605,7 @@ - Tom & Jerry (Spa) + Tom & Jerry (Spain) 1989 Erbe Software @@ -14618,7 +14618,7 @@ - Toobin' (Euro) + Toobin' (Europe) 1989 Domark @@ -14631,7 +14631,7 @@ - Toobin' (Euro, Alt) + Toobin' (Europe, alt) 1989 Domark @@ -14644,7 +14644,7 @@ - Top Roller (Euro) + Top Roller (Europe) 198? Eaglesoft @@ -14657,7 +14657,7 @@ - Tour 91 (Spa) + Tour 91 (Spain) 1991 Topo Soft @@ -14677,7 +14677,7 @@ - Trailblazer (Euro) + Trailblazer (Europe) 1986 Gremlin Graphics @@ -14690,7 +14690,7 @@ - Trailblazer (Euro, Alt Loader) + Trailblazer (Europe, alt loader) 1986 Gremlin Graphics @@ -14703,7 +14703,7 @@ - Trantor - The Last Stormtrooper (Euro) + Trantor - The Last Stormtrooper (Europe) 1987 Go! @@ -14716,7 +14716,7 @@ - Trantor - The Last Stormtrooper (Euro, Alt) + Trantor - The Last Stormtrooper (Europe, alt) 1987 Go! @@ -14729,7 +14729,7 @@ - Trantor - The Last Stormtrooper (Euro, Alt 2) + Trantor - The Last Stormtrooper (Europe, alt 2) 1987 Go! @@ -14742,7 +14742,7 @@ - Tras el Unicornio (Spa) + Tras el Unicornio (Spain) 1987 Azimut Soft @@ -14755,7 +14755,7 @@ - Las Tres Luces de Glaurung (Spa) + Las Tres Luces de Glaurung (Spain) 1986 Erbe Software @@ -14768,7 +14768,7 @@ - Trick Boy (Jpn) + Trick Boy (Japan) 1984 T&E Soft @@ -14781,7 +14781,7 @@ - Triple Comando (Spa) + Triple Comando (Spain) 1988 Dro Soft @@ -14801,7 +14801,7 @@ - Tritorn (Jpn) + Tritorn (Japan) 1986 Xain @@ -14814,7 +14814,7 @@ - Trivial Pursuit (Spa) + Trivial Pursuit (Spain) 1986 Domark @@ -14834,7 +14834,7 @@ - TT Racer (Euro) + TT Racer (Europe) 1987 Methodic Solutions @@ -14847,7 +14847,7 @@ - TT Racer (Euro, Alt) + TT Racer (Europe, alt) 1987 Methodic Solutions @@ -14860,7 +14860,7 @@ - Tuareg (Spa) + Tuareg (Spain) 1988 Topo Soft @@ -14873,7 +14873,7 @@ - El Tunel del Tiempo (Spa) + El Tunel del Tiempo (Spain) 1986 Mind Games España @@ -14886,7 +14886,7 @@ - Turbo Girl (Spa) + Turbo Girl (Spain) 1988 Dinamic Software @@ -14899,7 +14899,7 @@ - Turbo Girl (Spa, Alt) + Turbo Girl (Spain, alt) 1988 Dinamic Software @@ -14912,7 +14912,7 @@ - Turbo Girl (Spa, Alt 2) + Turbo Girl (Spain, alt 2) 1988 Dinamic Software @@ -14925,7 +14925,7 @@ - Turmoil (Euro) + Turmoil (Europe) 1986 Bug-Byte Software @@ -14938,7 +14938,7 @@ - Turmoil (Euro, Alt) + Turmoil (Europe, alt) 1986 Bug-Byte Software @@ -14951,7 +14951,7 @@ - Tutor (Spa) + Tutor (Spain) 1985 Sony @@ -14971,7 +14971,7 @@ - Introducing the Sanyo MPC-100 Micro (Euro) + Introducing the Sanyo MPC-100 Micro (Europe) 1985 Sanyo @@ -14985,7 +14985,7 @@ - U-Boot (Spa) + U-Boot (Spain) 1985 Manhattan Transfer @@ -14998,7 +14998,7 @@ - U-Boot (Spa, Alt) + U-Boot (Spain, alt) 1985 Manhattan Transfer @@ -15011,7 +15011,7 @@ - Uchi Mata (Euro) + Uchi Mata (Europe) 1987 Martech Games @@ -15024,7 +15024,7 @@ - Uchi Mata (Euro, Alt Loader) + Uchi Mata (Europe, alt loader) 1987 Martech Games @@ -15037,7 +15037,7 @@ - Ulises (Spa?) + Ulises (Spain?) 1989 Opera Soft @@ -15050,7 +15050,7 @@ - Ultra Chess (Euro) + Ultra Chess (Europe) 1985 Aackosoft @@ -15063,7 +15063,7 @@ - Ultra Chess (Euro, Alt) + Ultra Chess (Europe, alt) 1985 Aackosoft @@ -15076,7 +15076,7 @@ - Underground (Spa) + Underground (Spain) 1988 System 4 @@ -15089,7 +15089,7 @@ - The Untouchables (Spa) + The Untouchables (Spain) 1989 Erbe Software @@ -15109,7 +15109,7 @@ - The Untouchables (Spa, Alt) + The Untouchables (Spain, alt) 1989 Erbe Software @@ -15129,7 +15129,7 @@ - Vacuumania (Euro) + Vacuumania (Europe) 1984 PSS @@ -15142,7 +15142,7 @@ - Vacuumania (Euro, Alt) + Vacuumania (Europe, alt) 1984 PSS @@ -15155,7 +15155,7 @@ - Valkyr (Euro) + Valkyr (Europe) 1985 Gremlin Graphics @@ -15168,7 +15168,7 @@ - Vampire (Spa) + Vampire (Spain) 1987 Manhattan Transfer @@ -15181,7 +15181,7 @@ - Vampire's Empire (Spa) + Vampire's Empire (Spain) 1988 Dro Soft @@ -15193,7 +15193,7 @@ - Vampire's Empire (Spa, Alt) + Vampire's Empire (Spain, alt) 1988 Dro Soft @@ -15205,7 +15205,7 @@ - La Venganza de Johny Comomolo (Spa) + La Venganza de Johny Comomolo (Spain) 1986 Dro Soft @@ -15218,7 +15218,7 @@ - La Venganza de Johny Comomolo (Spa, Alt) + La Venganza de Johny Comomolo (Spain, alt) 1986 Dro Soft @@ -15231,7 +15231,7 @@ - La Venganza de Johny Comomolo (Spa, Alt 2) + La Venganza de Johny Comomolo (Spain, alt 2) 1986 Dro Soft @@ -15244,7 +15244,7 @@ - L'Affaire Vera Cruz (Fra) + L'Affaire Vera Cruz (France) 1986 Infogrames @@ -15257,7 +15257,7 @@ - Vestron (Euro) + Vestron (Europe) 1986 Players Software @@ -15270,7 +15270,7 @@ - Vestron (Euro, Alt) + Vestron (Europe, alt) 1986 Players Software @@ -15283,7 +15283,7 @@ - Viaje al Centro de la Tierra (Spa) + Viaje al Centro de la Tierra (Spain) 1989 Topo Soft @@ -15309,7 +15309,7 @@ - Viaje por la C.E.E. (Spa) + Viaje por la C.E.E. (Spain) 1986 Mind Games España @@ -15322,7 +15322,7 @@ - Vicious Viper (Euro) + Vicious Viper (Europe) 1985 Sanyo @@ -15335,7 +15335,7 @@ - Vicious Viper (Euro, Alt) + Vicious Viper (Europe, alt) 1985 Sanyo @@ -15348,7 +15348,7 @@ - Vicious Viper (Euro, Alt 2) + Vicious Viper (Europe, alt 2) 1985 Sanyo @@ -15361,7 +15361,7 @@ - Video Poker (Euro) + Video Poker (Europe) 1986 Mastertronic @@ -15374,7 +15374,7 @@ - A View to a Kill (Euro) + A View to a Kill (Europe) 1986 Domark @@ -15387,7 +15387,7 @@ - A View to a Kill (Euro, Alt) + A View to a Kill (Europe, alt) 1986 Domark @@ -15400,7 +15400,7 @@ - Visitor - Bazar Catalunya (Spa) + Visitor - Bazar Catalunya (Spain) 1988 Mind Games España @@ -15413,7 +15413,7 @@ - Void Runner (Euro) + Void Runner (Europe) 1987 Mastertronic @@ -15426,7 +15426,7 @@ - Volguard (Jpn) + Volguard (Japan) 1985 dB-Soft @@ -15439,7 +15439,7 @@ - Vortex Raider (Euro) + Vortex Raider (Europe) 1988 Eurosoft @@ -15452,7 +15452,7 @@ - Vortex Raider (Euro, Alt) + Vortex Raider (Europe, alt) 1988 Eurosoft @@ -15465,7 +15465,7 @@ - The Wall (Spa) + The Wall (Spain) 1987 Erbe Software @@ -15478,7 +15478,7 @@ - Wallball (Euro) + Wallball (Europe) 198? Tynesoft @@ -15491,7 +15491,7 @@ - Wallball (Euro, Alt) + Wallball (Europe, alt) 198? Tynesoft @@ -15504,7 +15504,7 @@ - Wamp Cola (Spa) + Wamp Cola (Spain) 1988 Iber Soft @@ -15517,7 +15517,7 @@ - War Chess (Spa) + War Chess (Spain) 1986 Idealogic @@ -15530,7 +15530,7 @@ - War in Middle Earth (Spa) + War in Middle Earth (Spain) 1989 Dro Soft @@ -15543,7 +15543,7 @@ - Warp & Warp (Euro) + Warp & Warp (Europe) 1984 Bug-Byte Software @@ -15556,7 +15556,7 @@ - The Way of the Tiger (Euro) + The Way of the Tiger (Europe) 1986 Gremlin Graphics @@ -15588,7 +15588,7 @@ - WEC Le Mans (Euro) + WEC Le Mans (Europe) 1988 Imagine Software @@ -15601,7 +15601,7 @@ - WEC Le Mans (Euro, Alt) + WEC Le Mans (Europe, alt) 1988 Imagine Software @@ -15614,7 +15614,7 @@ - Wells & Fargo (Spa) + Wells & Fargo (Spain) 1988 Topo Soft @@ -15627,7 +15627,7 @@ - West Bank (Spa) + West Bank (Spain) 1989 Dinamic Software @@ -15640,7 +15640,7 @@ - West Bank (Spa, Alt) + West Bank (Spain, alt) 1989 Dinamic Software @@ -15653,7 +15653,7 @@ - Who Dares Wins 2 (Euro) + Who Dares Wins 2 (Europe) 1986 Alligata Software @@ -15679,7 +15679,7 @@ - Whopper Chase (Spa) + Whopper Chase (Spain) 1987 Erbe Software @@ -15692,7 +15692,7 @@ - Wing Man (Jpn) + Wing Man (Japan) 1985 Enix @@ -15724,7 +15724,7 @@ - Winter Events (Euro) + Winter Events (Europe) 1987 Anco Software @@ -15737,7 +15737,7 @@ - Winter Events (Euro, 2 Sides?) + Winter Events (Europe, 2 sides?) 1987 Anco Software @@ -15757,7 +15757,7 @@ - Winter Games (Euro) + Winter Games (Europe) 1986 U.S. Gold @@ -15777,7 +15777,7 @@ - Winter Games (Euro, Alt) + Winter Games (Europe, alt) 1986 U.S. Gold @@ -15797,7 +15797,7 @@ - Winter Olympics (Euro) + Winter Olympics (Europe) 1986 Tynesoft @@ -15817,7 +15817,7 @@ - Winterhawk (Euro) + Winterhawk (Europe) 1988 Eurosoft @@ -15830,7 +15830,7 @@ - Winterhawk (Euro, Alt) + Winterhawk (Europe, alt) 1988 Eurosoft @@ -15843,7 +15843,7 @@ - Wizard's Lair (Euro) + Wizard's Lair (Europe) 1986 Bubble Bus Software @@ -15856,7 +15856,7 @@ - Wizard's Lair (Euro, Alt) + Wizard's Lair (Europe, alt) 1986 Bubble Bus Software @@ -15869,7 +15869,7 @@ - Word Pro (Euro, v2.60) + Word Pro (Europe, v2.60) 1985 Kuma Computers @@ -15882,7 +15882,7 @@ - World Cup Italia 90 (Spa) + World Cup Italia 90 (Spain) 1989 Dro Soft @@ -15895,7 +15895,7 @@ - World Cup Soccer (Euro) + World Cup Soccer (Europe) 1986 Eaglesoft @@ -15908,7 +15908,7 @@ - World Cup Soccer (Euro, Alt) + World Cup Soccer (Europe, alt) 1986 Eaglesoft @@ -15921,7 +15921,7 @@ - World Games (Euro) + World Games (Europe) 1987 U.S. Gold @@ -15941,7 +15941,7 @@ - Xenon (Spa) + Xenon (Spain) 1988 Dro Soft @@ -15954,7 +15954,7 @@ - Xybots (Euro) + Xybots (Europe) 1989 Domark @@ -15967,7 +15967,7 @@ - Xybots (Euro, Alt) + Xybots (Europe, alt) 1989 Domark @@ -15980,7 +15980,7 @@ - Xyzolog (Euro) + Xyzolog (Europe) 1985 Electric Software @@ -15993,7 +15993,7 @@ - Xyzolog (Euro, Alt) + Xyzolog (Europe, alt) 1985 Electric Software @@ -16006,7 +16006,7 @@ - Yo Calculo (Spa) + Yo Calculo (Spain) 1986 Anaya Multimedia @@ -16019,7 +16019,7 @@ - Zakil Wood (Euro) + Zakil Wood (Europe) 1985 Mr. Micro @@ -16032,7 +16032,7 @@ - Zanac (Ned) + Zanac (Netherlands) 1987 Eaglesoft @@ -16045,7 +16045,7 @@ - Zarth (Jpn) + Zarth (Japan) 1985 Enix @@ -16065,7 +16065,7 @@ - Zaxxon (Euro) + Zaxxon (Europe) 1985 Electric Software @@ -16078,7 +16078,7 @@ - Zexas (Jpn) + Zexas (Japan) 1984 dB-Soft @@ -16091,7 +16091,7 @@ - Zipi y Zape (Spa) + Zipi y Zape (Spain) 1989 Dro Soft @@ -16109,7 +16109,7 @@ - Zoids - The Battle Begins (Euro) + Zoids - The Battle Begins (Europe) 1985 Martech Games @@ -16122,7 +16122,7 @@ - Zona 0 (Spa) + Zona 0 (Spain) 1991 Topo Soft @@ -16135,7 +16135,7 @@ - Zond (Spa) + Zond (Spain) 1988 Iber Soft @@ -16150,7 +16150,7 @@ - Zoot (Euro) + Zoot (Europe) 1986 Bug-Byte Software @@ -16166,7 +16166,7 @@ - M-TYPE (Jpn) + M-TYPE (Japan) 1989 <doujin> @@ -16179,7 +16179,7 @@ - Resurection (Spa?) + Resurection (Spain?) 2013 <homebrew> @@ -16192,7 +16192,7 @@ - Chitei Daibouken (Jpn) + Chitei Daibouken (Japan) 1987 <doujin> @@ -16211,7 +16211,7 @@ - Juegue con su MSX - Issue 01 - Carr 2000 (Spa) + Juegue con su MSX - Issue 01 - Carr 2000 (Spain) 198? Grupo de Trabajo Software @@ -16224,7 +16224,7 @@ - Juegue con su MSX - Issue 01 - Carr 2000 (Spa, Alt) + Juegue con su MSX - Issue 01 - Carr 2000 (Spain, alt) 198? Grupo de Trabajo Software @@ -16286,7 +16286,7 @@ - MSX Computer Magazine - Issue 06 (Ita) + MSX Computer Magazine - Issue 06 (Italy) 1986 Elettronica 2000 @@ -16299,7 +16299,7 @@ - MSX Computer Magazine - Issue 12 (Ned) + MSX Computer Magazine - Issue 12 (Netherlands) 1986 Aktu @@ -16312,7 +16312,7 @@ - MSX Computer Magazine - Issue 13 (Ned) + MSX Computer Magazine - Issue 13 (Netherlands) 1986 Aktu @@ -16325,7 +16325,7 @@ - MSX Computer Magazine - Issue 16 (Ned) + MSX Computer Magazine - Issue 16 (Netherlands) 1987 Aktu @@ -16338,7 +16338,7 @@ - MSX Computer Magazine - Issue 16 (Ned, Alt) + MSX Computer Magazine - Issue 16 (Netherlands, alt) 1987 Aktu @@ -16351,7 +16351,7 @@ - MSX Computer Magazine - Issue 19 (Ita) + MSX Computer Magazine - Issue 19 (Italy) 1987 Elettronica 2000 @@ -16364,7 +16364,7 @@ - MSX Games Vol 01 - El Pinguino (Spa) + MSX Games Vol 01 - El Pinguino (Spain) 1986 Grupo de Trabajo Software @@ -16377,7 +16377,7 @@ - MSX Games Vol 02 - Bob 007 (Infiltrado) (Spa) + MSX Games Vol 02 - Bob 007 (Infiltrado) (Spain) 1986 Grupo de Trabajo Software @@ -16390,7 +16390,7 @@ - MSX Games Vol 02 - Bob 007 (Infiltrado) (Spa, Alt) + MSX Games Vol 02 - Bob 007 (Infiltrado) (Spain, alt) 1986 Grupo de Trabajo Software @@ -16403,7 +16403,7 @@ - MSX Games Vol 04 - Xider (Spa) + MSX Games Vol 04 - Xider (Spain) 198? Grupo de Trabajo Software @@ -16449,7 +16449,7 @@ - MSX Magazine - Issue 01 (Ita) + MSX Magazine - Issue 01 (Italy) 1987 <unknown> @@ -16462,7 +16462,7 @@ - MSX Soft Magazine - Issue 01 - Musica (Spa) + MSX Soft Magazine - Issue 01 - Musica (Spain) 1985 Monser @@ -16475,7 +16475,7 @@ - MSX Soft Magazine - Issue 04 - Tragamanzanas (Spa) + MSX Soft Magazine - Issue 04 - Tragamanzanas (Spain) 1985 Monser @@ -16505,7 +16505,7 @@ - MSX Soft Magazine - Issue 08 - Rana Sideral (Spa) + MSX Soft Magazine - Issue 08 - Rana Sideral (Spain) 1985 Monser @@ -16544,7 +16544,7 @@ - MSX Soft Magazine - Issue 10 - F-16 (Spa) + MSX Soft Magazine - Issue 10 - F-16 (Spain) 198? Monser @@ -16577,7 +16577,7 @@ - MSX Software - Issue 05 (Spa) + MSX Software - Issue 05 (Spain) 1986 Grupo de Trabajo Software @@ -16597,7 +16597,7 @@ - MSX Software - Issue 10 (Spa) + MSX Software - Issue 10 (Spain) 1986 Grupo de Trabajo Software @@ -16617,7 +16617,7 @@ - MSX Software - Issue 12 - Phantom Ataca (Spa) + MSX Software - Issue 12 - Phantom Ataca (Spain) 1986 Grupo de Trabajo Software @@ -16630,7 +16630,7 @@ - MSX Software - Issue 12 - Phantom Ataca (Spa, Alt) + MSX Software - Issue 12 - Phantom Ataca (Spain, alt) 1986 Grupo de Trabajo Software @@ -16656,7 +16656,7 @@ - MSX Software - Issue 19 - Super Baby (Spa) + MSX Software - Issue 19 - Super Baby (Spain) 1986 Grupo de Trabajo Software @@ -16669,7 +16669,7 @@ - MSX Software - Issue 20 - Death House (Spa) + MSX Software - Issue 20 - Death House (Spain) 1986 Grupo de Trabajo Software @@ -16682,7 +16682,7 @@ - New Games MSX - Issue 18 (Ita) + New Games MSX - Issue 18 (Italy) 1988 Edigamma @@ -16695,7 +16695,7 @@ - New Games MSX - Issue 23 (Ita) + New Games MSX - Issue 23 (Italy) 1988 Edigamma @@ -16715,7 +16715,7 @@ - New Program MSX - Issue 17 (Ita) + New Program MSX - Issue 17 (Italy) 1989 S.I.P.E. @@ -16728,7 +16728,7 @@ - New Video Games - Issue 05 (Ita) + New Video Games - Issue 05 (Italy) 1986 <unknown> @@ -16741,7 +16741,7 @@ - Settimana Games - Issue 01 (Ita) + Settimana Games - Issue 01 (Italy) 1989 Edigamma @@ -16754,7 +16754,7 @@ - Settimana Games - Issue 04 (Ita) + Settimana Games - Issue 04 (Italy) 1989 Edigamma @@ -16767,7 +16767,7 @@ - Settimana Games - Issue 06 (Ita) + Settimana Games - Issue 06 (Italy) 1989 Edigamma @@ -16780,7 +16780,7 @@ - Settimana Games - Issue 10 (Ita) + Settimana Games - Issue 10 (Italy) 1989 Edigamma @@ -16793,7 +16793,7 @@ - Settimana Games - Issue 11 (Ita) + Settimana Games - Issue 11 (Italy) 1989 Edigamma @@ -16806,7 +16806,7 @@ - Settimana Games - Issue 12 (Ita) + Settimana Games - Issue 12 (Italy) 1989 Edigamma @@ -16819,7 +16819,7 @@ - Super MSX - Issue 01 (Ita) + Super MSX - Issue 01 (Italy) 1985 J. Soft @@ -16832,7 +16832,7 @@ - Super MSX - Issue 02 (Ita) + Super MSX - Issue 02 (Italy) 1985 J. Soft @@ -16845,7 +16845,7 @@ - Super MSX - Issue 04 (Ita) + Super MSX - Issue 04 (Italy) 1985 J. Soft diff -Nru mame-0.250+dfsg.1/hash/msx1_flop_525.xml mame-0.251+dfsg.1/hash/msx1_flop_525.xml --- mame-0.250+dfsg.1/hash/msx1_flop_525.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/msx1_flop_525.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ - - - + @@ -64,7 +52,7 @@ Microsoft - + @@ -75,73 +63,66 @@ Microsoft - - - - - - - MSX-DOS (USA) - 1983 - Microsoft - - - + - MSX-DOS Ayuda (Spa) + MSX-DOS Ayuda (Spain) 1989 Philips - + + - MSX-DOS Ayuda (Spa, Alt) + MSX-DOS Ayuda (Spain, alt) 1989 Philips - + + - MSX-DOS Hulp (Ned) + MSX-DOS Hulp (Netherlands) 1989 Philips - + + - MSX-DOS Hulp (Ned, Alt) + MSX-DOS Hulp (Netherlands, alt) 1989 Philips - + + - MSX-DOS Tools (Bra, v2.1) + MSX-DOS Tools (Brazil, v2.1) 1984 Nemesis Informatica - + @@ -160,1354 +141,1506 @@ - 5 Ball (Jpn) + 5 Ball (Japan) 198? Nyan - + + - Aacko Draw & Paint (Ned) + Aacko Draw & Paint (Netherlands) 1985 Eaglesoft + - + + + - Adonis (Jpn) + Adonis (Japan) 1988 MSX Magazine - + - Alpine Ski (Euro) + Alpine Ski (Netherlands) 1987 Methodic Solutions + - + + - Astro Blaster (Euro) + Astro Blaster (Europe, cracked) 1988 Eurosoft + - - + + - Battle Chopper (Euro) + Battle Chopper (Netherlands) 1985 Methodic Solutions + - + + - Beach-Head (Euro) + Beach-Head (Europe) 1985 Eaglesoft + - + + - Blow-Up (Euro) + Blow-Up (Europe) 1988 Eurosoft + - + + - - Blow-Up (Euro, Alt) + + + Blow-Up (Europe, alt) 1988 Eurosoft + - + - Booty (Euro) + Booty (Europe) 1988 Eurosoft + - + + - Breaker Breaker (Euro) + Breaker Breaker (Europe) 1988 Eurosoft + + - + + - Burgerkill (Euro) + Burgerkill (Europe, cracked) 1988 Eurosoft + - - - - - - - Burgerkill (Euro, Alt) - 1988 - Eurosoft - - - + + Catch That Girl - 198? + 1986 WB-Soft - + - Cetus (Euro) + Cetus (Europe) 1986 Tynesoft - + + - Chess Player (Euro) + Chess Player (Europe, cracked) 1988 Eurosoft + - + + - Choujikuu Yousai Macross (Jpn) - 1985 - Bothtec + Choujikuu Yousai Macross (Europe) + 1987 + Eaglesoft + - + + - Come On! Picot (Euro) + Come On! Picot (Europe) 1986 Eaglesoft + - + + - Confused? (Euro) + Confused? (Europe) 1986 Eaglesoft + - + + - Crusader (Euro) - 1985 + Crusader (Europe) + 1987 Eaglesoft + - + + - Curso de BASIC (Spa) + Curso de BASIC (Spain) 1985 Sony Spain + - + + - Curso de Ingles (Spa) + Curso de Inglés (Spain) 1984 Plus Data - + + - Cyrus II Chess (Euro) + Cyrus II Chess (United Kingdom) 1986 Alligata Software - + + + - Darts (UK, Orpheus) + Darts (United Kingdom, Orpheus) 1984 Orpheus - + - - Dawn Patrol (Euro) + + + Dawn Patrol (Europe) 1986 Eaglesoft + - + + - Delta BASIC (Ned) + Delta BASIC (Netherlands) 1987 Filosoft + - + + - Devil Hunter (Jpn) + Devil Hunter (Japan) 1990 MSX Magazine + - + - Dr. Archie (Euro) + Dr. Archie (Europe) 1989 Eurosoft - + + + - Draughts (UK) + Draughts (United Kingdom) 1985 Orpheus - + - - Elidon (UK) + + + + + Elidon (United Kingdom) 1985 Orpheus - + - Elite (UK) + Elite (United Kingdom) 1987 Firebird Software - + - Elite (UK, Alt) + Elite (United Kingdom, alt) 1987 Firebird Software - + - Exterminator (Euro) + Exterminator (Europe) 1987 Eaglesoft + - + + - F-15 Strike Eagle (Jpn?) + F-15 Strike Eagle (Japan?) 1987 Microprose - + + - Flight Deck (Ned) + Flight Deck (Netherlands) 1984 Aackosoft + + - + + - Galactic Mercenaries (Fra) + Galactic Mercenaries (France) 1985 Infogrames + - + - Galactic Mercenaries (Fra, Alt) + Galactic Mercenaries (France, alt) 1985 Infogrames + - + - Galactic Mercenaries (Fra, Alt 2) + Galactic Mercenaries (France, alt 2) 1985 Infogrames + - + - Green Beret (Jpn) + Green Beret (Europe) 1986 Konami + - + + - Gutt Blaster (Euro) + Gutt Blaster (Europe) 1988 Eurosoft + + - + + - Hard Boiled (Ned) + Hard Boiled (Netherlands) 1987 Methodic Solutions + - + + - Haunted House (Ned) + Haunted House (Netherlands) 1988 Eurosoft + + - + + + - Hercule (Fra) + Hercule (France) 1984 Infogrames - + - L'Heritage - Panique a Las Vegas (Fra)[needs MSX-DOS] + L'Heritage - Panique a Las Vegas (France) 1987 Infogrames + - + + - Hype (Ned, Hacked) + Hype (Netherlands, hacked) 1987 Methodic Solutions + - + + - Illusions (Fra) + Illusions (France) 1985 Nice Ideas - + + - Inca I (Ned) + Inca I (Netherlands) 1987 Eaglesoft + - + + - Indy 500 (Ned) + Indy 500 (Netherlands) 1986 Methodic Solutions + - + + - Jet Fighter (Ned) + Jet Fighter (Netherlands, cracked) 1988 Eurosoft + - + + + - King's Valley Plus (Jpn, Hacked) + King's Valley Plus (Japan, hacked) 1985 Konami + - + - Konami Game Collection Vol. 1 (Jpn) + Konami Game Collection 1: Action Series (Japan) 1988 Konami + + - + - + - + - + - Konami Game Collection Vol. 2 (Jpn) + Konami Game Collection 2: Sports Series 1 (Japan) 1988 Konami + + - + - Konami Game Collection Vol. 3 (Jpn) + Konami Game Collection 3: Shooting Series (Japan) 1988 Konami + + - + - Konami Game Collection Vol. 4 (Jpn) + Konami Game Collection 4: Sports Series 2 (Japan) 1988 Konami + + - + - Ladra no Densetsu (Jpn) + Ladra no Densetsu (Japan) 1988 MSX Magazine + - + - Ladra no Densetsu (Jpn, Alt) + Ladra no Densetsu (Japan, alt) 1988 MSX Magazine + - + - Ladra no Densetsu (Jpn, Alt 2) + Ladra no Densetsu (Japan, alt 2) 1988 MSX Magazine + - + - Laserfight! (Jpn) + Laserfight! (Japan) 1989 MSX Magazine - + - - A Lenda da Gávea (Bra) + + + A Lenda da Gávea (Brazil) 1988 Pro Kit - + + - Life in the Fast Lane (Ned) + Life in the Fast Lane (Netherlands) 1987 Methodic Solutions + - + + + - Life in the Fast Lane (Ned, Alt) + Life in the Fast Lane (Netherlands, alt) 1987 Methodic Solutions + - + + + - The Light Corridor (Fra, Trained) + The Light Corridor (France, trained) 1990 Infogrames - + - Livingstone Supongo (Spa) + Livingstone Supongo (Spain) 1986 Opera Soft - + + + - Livingstone Supongo (Spa, Alt) + Livingstone Supongo (Spain, alt) 1986 Opera Soft - + + - Lode Runner (Jpn) + Lode Runner (Japan) 1984 Sony + - + + - Mayor Pistoletov - Pervaya Seriya: "Koshchey" (Rus) + Mayor Pistoletov - Pervaya Seriya: "Koshchey" (Russia) 1988 Crazysoft + - + + - Pistoletov na Zavode - Vtoraya Seriya (Rus) + Pistoletov na Zavode - Vtoraya Seriya (Russia) 1988 Crazysoft + - + + + - Mayor Pistoletov + Pistoletov na Zavode (Rus) + Mayor Pistoletov + Pistoletov na Zavode (Russia) 1988 Crazysoft + - + - Maze Master (Ned) + Maze Master (Netherlands) 1988 Eurosoft + - + + - Meurtres sur l'Atlantique (Fra) + Meurtres sur l'Atlantique (France) 1986 Infogrames - + + + - Murder on the Atlantic (Ger?) + Murder on the Atlantic (Germany?) 1986 Infogrames - + - Missile Command (Ned) + Missile Command (Netherlands) 1988 Eurosoft + - + + + - De Nachtwacht (Ned) + De Nachtwacht (Netherlands) 1986 Radarsoft - + + + - De Nachtwacht (Ned, Alt) + De Nachtwacht (Netherlands, alt) 1986 Radarsoft - + - Navy Moves (Spa) + Navy Moves (Spain) 1988 Dinamic Software + - + + - Navy Moves (Spa, Hacked) + Navy Moves (Spain, hacked) 1988 Dinamic Software + - + - North Sea Helicopter (Ned) + North Sea Helicopter (Netherlands, hacked) 1987 Aackosoft + - + + - Ougon no Haka (Jpn) + Ougon no Haka (Japan) 1984 MagicalZoo + + - + - - Out Run (Ned) + + + Out Run (Netherlands) 1988 U.S. Gold + - + + - Penguin (Ned) + Penguin (Netherlands, cracked) 1988 Eurosoft + - + + - Penguin (Ned, Alt) + Penguin (Netherlands, cracked, alt) 1988 Eurosoft + - + + - Pharaoh's Revenge (Ned) + Pharaoh's Revenge (Netherlands) 1988 Eurosoft - + - Pinball Blaster (Ned) + Pinball Blaster (Netherlands) 1988 Eurosoft + + - + + - Playhouse Strippoker (Ned) + Playhouse Strippoker (Netherlands) 1988 Eurosoft + - - - - - - - Playhouse Strippoker (Ned, Alt) - 1988 - Eurosoft - - - + + - Police Academy II (Ned) + Police Academy II (Netherlands) 1987 Methodic Solutions + - + + - - Print-X-Press (UK) + + + Print-X-Press (United Kingdom) 1986 Anglosoft - + - The Protector (Jpn) + The Protector (Netherlands) 1985 - Pony Canyon + Eaglesoft + - + + - Pyro-Man (Fra) + Pyro-Man (France) 1985 Nice Ideas - + + - - Quebert (Ned) + + + Quebert (Netherlands) 1988 Eurosoft + - + - - Régate - La Coupe de L'America (Fra) + + + Régate - La Coupe de L'America (France) 1986 Philips + - + + - - Régate - La Coupe de L'America (Fra, Alt) + + + Régate - La Coupe de L'America (France, alt) 1986 Philips - + + - Rescate Atlántida (Spa) + Rescate Atlántida (Spain) 1989 Dinamic Software - + - Rescate Atlantida (Spa, Alt) + Rescate Atlántida (Spain, alt) 1989 Dinamic Software - + - Robot Wars (Ned) + Robot Wars (Netherlands) 1986 Eaglesoft + - + + - Roboy (Ned) + Roboy (Netherlands) 1987 Eaglesoft - + + - Sailor's Delight (Ned, Cracked) + Sailor's Delight (Netherlands, cracked) 1987 Eaglesoft + + - + + - Scentipede (Ned) + Scentipede (Netherlands) 1986 Aackosoft + - + + - Search and Rescue (Ned) + Search and Rescue (Netherlands, cracked) 1988 Eurosoft - + + - Skooter (Ned) + Skooter (Netherlands) 1987 Eaglesoft + - + + + - Smash Out (Jpn) + Smash Out (Japan) 19?? Mitsubishi Electronics - + - Space Rescue (Ned) + Space Rescue (Netherlands) 1988 Eurosoft + - + + - Space Walk (Euro?) - 1985 - Mastertronic - - - - - - - - - Space Walk (Euro?, Alt) + Space Walk (Europe) 1987 Mastertronic Added Dimension - + + - Spy vs Spy II - The Island Caper (Ned) + Spy vs Spy II - The Island Caper (Netherlands) 1987 Aackosoft + - + + - Starbuggy (Ned) + Starbuggy (Netherlands, cracked) 1988 Eurosoft + + - + + + - Strike Force Harrier (Euro?) + Strike Force Harrier (Europe?) 1988 Mirrorsoft - + - Super Game Collection (Jpn) + Super Game Collection (Japan) 1985 Sony + + - + - - Teenage Mutant Hero Turtles (UK, Cracked) + + + Teenage Mutant Hero Turtles (United Kingdom, cracked) 1990 Image Works - + + - - Teenage Mutant Hero Turtles (UK, Hacked) + + + Teenage Mutant Hero Turtles (United Kingdom, hacked) 1990 Image Works - - - - - - - Terramex (Euro?) - 1988 - Grandslam Entertainments - - - + + - Thundercats (UK)[h MSX Files] + Thundercats (United Kingdom, hacked) 1987 Elite Systems - + - - Time Bomb (Ned) + + + Time Bomb (Netherlands) 1987 Methodic Solutions + - + + - Time Curb (Ned) + Time Curb (Netherlands) 1986 Aackosoft + - + + + Triversi (UK) 1986 Orpheus - + - TT Racer (Ned) + TT Racer (Netherlands) 1987 Methodic Solutions + - + + + - Les Voitures dans Autoroute (Fra) + Les Voitures dans Autoroute (France) 1985 Infogrames - + - Vozvrashcheniye na Zemlyu (Rus) + Vozvrashcheniye na Zemlyu (Russia) 1988 Crazysoft + - + + - Vozvrashcheniye na Zemlyu (Rus, Alt) + Vozvrashcheniye na Zemlyu (Russia, alt) 1988 Crazysoft + - + - - Vortex Raider (Ned) + + + Vortex Raider (Netherlands) 1988 Eurosoft + - + + - Wallball + Attacked (UK) + Wallball + Attacked (United Kingdom) 19?? Tynesoft - + - Zorax (Bra) + Zorax (Brazil) 1990 Discovery Informática - + + @@ -1525,25 +1658,30 @@ - Dungeon Mystery II (Ned, Cracked) + Dungeon Mystery II (Netherlands, cracked) 1987 <coverdisk> + - + + + - Dungeon Mystery II (Ned, Cracked, Alt) + Dungeon Mystery II (Netherlands, cracked, alt) 1987 <coverdisk> + - + + @@ -1558,290 +1696,308 @@ - Amazing Nurse B (Jpn) + Amazing Nurse B (Japan) 2010 <doujin> - + + - Bomb Jack (Bra) + Bomb Jack (Brazil, Sega MyCard conversion) 2004 <homebrew> - + + - Colosseum III - Deluxe Pack (Jpn) + Colosseum III - Deluxe Pack (Japan) 2002 <doujin> - + + - Cyuji Games (Jpn) + Cyuji Games (Japan) 1997 <doujin> - + - DOOMO (Jpn) + DOOMO (Japan) 2012 <doujin> - + - Eikosan (Jpn) + Eikosan (Japan) 2013 <doujin> - + + - Fuuun Sengoku Kokorozashi (Jpn) + Fuuun Sengoku Kokorozashi (Japan) 200? <doujin> - + - GreyColleague (Jpn) + GreyColleague (Japan) 1991 <doujin> - + + - Home Baseball (Jpn) + Home Baseball (Japan) 2009 <doujin> + - + - - The Island of the Oracle (Spa?, v0.91) + + + + The Island of the Oracle (Spain?, v0.91) 2012 <homebrew> - + - Mamono Quest II (Jpn) + Mamono Quest II (Japan) 1989? <doujin> - + + - Mini RPG 1 (UK?) + Mini RPG 1 (United Kngdom?) 19?? <homebrew> + - + + + - Mino Soft's Game Collection (Jpn) + Mino Soft's Game Collection (Japan) 199? <doujin> - + - No Fuss (Ned) + No Fuss (Netherlands) 1991 <homebrew> - + - No Fuss (Ned, Alt) + No Fuss (Netherlands, alt) 1991 <homebrew> - + + - Resurection (Spa?) + Resurection (Spain?) 2013 <homebrew> + - + + - SCA - Score Attacker (Jpn) + SCA - Score Attacker (Japan) 2009 <doujin> - + + - Silgon Hagen Game Collection (UK?) + Silgon Hagen Game Collection (United Kingdom?) 2000? <homebrew> - + - - Squeek - The Story of a Ninny (Ned, Cracked) + + + Squeek - The Story of a Ninny (Netherlands, cracked) 1991 <homebrew> - + - Tamako (Jpn) + Tamako (Japan) 2012 <doujin> - + - Choukousou Kagura Tenoble (Jpn) + Choukousou Kagura Tenoble (Japan) 2013 <doujin> - + - Twin Fleaz (UK) + Twin Fleaz (United Kingdom) 2000 <homebrew> + - + - Vulgardry (Jpn) + Vulgardry (Japan) 2012 <doujin> - + - Yn (Jpn) + Yn (Japan) 2013 <doujin> - + @@ -1857,2195 +2013,2047 @@ --> - 3D Knockout! (Euro) + 3D Knockout! (Europe, disk conversion) 19?? <tape2disk hack> - + - 3D Water Driver (Jpn) + 3D Water Driver (Japan, disk conversion) 19?? <tape2disk hack> - - + - Aardrijkskunde (Ned) + Aardrijkskunde (Netherlands, disk conversion) 19?? <tape2disk hack> - + - + - La Abeja Sabia (Spa) + La Abeja Sabia (Spain, disk conversion) 19?? <tape2disk hack> - - - - - - - Alcazar - The Forgotten Fortress (Euro) - 19?? - <tape2disk hack> - - - + - Amida (Jpn) + Amida (Japan, disk conversion) 19?? <tape2disk hack> - + - Antares (Spa) + Antares (Spain, disk conversion) 19?? <tape2disk hack> - + - Antares (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - The Apeman Strikes Again (Euro) + Antares (Spain, disk conversion, alt) 19?? <tape2disk hack> - + - - Bernard in the City (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Arkos I + II + III (Spa, Trained) - 19?? - <tape2disk hack> + + + The Apeman Strikes Again (Netherlands) + 198? + Eaglesoft + - + + - Astro Rocks (Euro) + Astro Rocks (Europe, disk conversion) 19?? <tape2disk hack> - + - The Astrowulards (Spa) + The Astrowulards (Spain, disk conversion) 19?? <tape2disk hack> - + - The Astrowulards (Spa, Alt) + The Astrowulards (Spain, disk conversion, alt) 19?? <tape2disk hack> - + - Attack of the Killer Tomatoes (Euro) + Attack of the Killer Tomatoes (Europe, disk conversion) 19?? <tape2disk hack> - + - Attack of the Killer Tomatoes (Euro, Alt) + Attack of the Killer Tomatoes (Europe, disk conversion, alt) 19?? <tape2disk hack> - + - Av. Paulista (Bra) + Av. Paulista (Brazil, disk conversion) 19?? <tape2disk hack> - + - Av. Paulista (Bra, Alt) + Av. Paulista (Brazil, disk conversion, alt) 19?? <tape2disk hack> - + - BallBlazer (Jpn) + BallBlazer (Japan, disk conversion) 19?? <tape2disk hack> - - - - - - - BallBlazer (Jpn, Alt) - 19?? - <tape2disk hack> - - - + - Ballyhoo (Euro) + Ballyhoo (Europe, disk conversion) 19?? <tape2disk hack> - + - Bank Street Writer (Jpn) + Bank Street Writer (Japan, disk conversion) 19?? <cart2disk hack> + - + - Barnabasket (Spa) + Barnabasket (Spain, disk conversion) 19?? <tape2disk hack> - + - Battle for Midway (Euro) + Battle for Midway (Europe, disk conversion) 19?? <tape2disk hack> - + - Battle for Midway (Euro, Alt) + Battle for Midway (Europe, disk conversion, alt) 19?? <tape2disk hack> - + - El Bingo (Spa) + El Bingo (Spain, disk conversion) 19?? <cart2disk hack> - + - BlackJack (Spa) + BlackJack (Spain, disk conversion) 19?? <cart2disk hack> - + - BlackJack (Spa, Alt) + BlackJack (Spain, disk conversion, alt) 19?? <cart2disk hack> - + - BMX Rekencross (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Boom! (Euro) + BMX Rekencross (Netherlands, disk conversion) 19?? <tape2disk hack> - + - Brick Breaker (Spa) + Brick Breaker (Spain, disk conversion) 19?? <tape2disk hack> - + - Bridge (Fra) + Bridge (France, disk conversion) 19?? <tape2disk hack> - + - Brisca (Spa) + La Brisca (Spain, disk conversion) 19?? <tape2disk hack> - + - Brisca (Spa, Alt) + La Brisca (Spain, disk conversion, alt) 19?? <tape2disk hack> - + - Super Doors (Jpn) + Super Doors (Japan, disk conversion) 19?? <tape2disk hack> - - - - - - - Captain Cosmo (Jpn) - 19?? - <cart2disk hack> - - - + - El Castillo de Godless (Spa) + El Castillo de Godless (Spain, disk conversion) 19?? <tape2disk hack> - + - Chubby Gristle (UK) + Chubby Gristle (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Ciencias de la Naturaleza - 5 E.G.B. (Spa) + Ciencias de la Naturaleza - 5 E.G.B. (Spain, disk conversion) 19?? <tape2disk hack> - + - Ciencias de la Naturaleza - 7 E.G.B. (Spa) + Ciencias de la Naturaleza - 7 E.G.B. (Spain, disk conversion) 19?? <tape2disk hack> - + - Ciencias de la Naturaleza - 8 E.G.B. (Spa) + Ciencias de la Naturaleza - 8 E.G.B. (Spain, disk conversion) 19?? <tape2disk hack> - + - Classic Adventure (UK) + Classic Adventure (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Cluedo (UK) + Cluedo (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Coconuts (Spa) + Coconuts (Spain, disk conversion) 19?? <tape2disk hack> - + - Columbia (Spa) - 19?? - <cart2disk hack> - - - - - - - - - Computer Chess (Jpn) + Simulador Columbia (Spain, disk conversion) 19?? <cart2disk hack> - + + - Computer Othello (Jpn) + Computer Othello (Japan, disk conversion) 19?? <cart2disk hack> - + - Computer Scrabble (UK) + Computer Scrabble (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Cosme Estible (Spa) + Cosme Estible (Spain, disk conversion) 19?? <tape2disk hack> - + - Cosme Estible (Spa, Alt) + Cosme Estible (Spain, disk conversion, alt) 19?? <tape2disk hack> - + - Cosmo Traveler (Jpn) + Cosmo Traveler (Japan, disk conversion) 19?? <tape2disk hack> - + - Cribbage (UK) + Cribbage (United Kingdom, disk conversion) 19?? <tape2disk hack> + - + - El Cuerpo Humano - Sistema Circulatorio (Spa, Cracked) + El Cuerpo Humano - Sistema Circulatorio (Spain, disk conversion, cracked) 19?? <tape2disk hack> + - + - El Cuerpo Humano - Sistema Digestivo (Spa, Cracked) + El Cuerpo Humano - Sistema Digestivo (Spain, disk conversion, cracked) 19?? <tape2disk hack> + - + - El Cuerpo Humano - Sistema Reproductor (Spa) + El Cuerpo Humano - Sistema Reproductor (Spain, disk conversion) 19?? <tape2disk hack> - + - El Descubrimiento de America (Spa) + El Descubrimiento de América (Spain, disk conversion) 19?? <tape2disk hack> - + - Detective Orson Welles (Spa) + Detective Orson Welles (Spain, disk conversion) 19?? <tape2disk hack> - + - The Devil's Castle (Spa) + The Devil's Castle (Spain, disk conversion) 19?? <tape2disk hack> + - + - Diamond Luis I (Jpn) + Diamond Luis I (Japan, disk conversion) 19?? - <cart2disk hack> + <tape2disk hack> - + - Diamond Mine II (UK) + Diamond Mine II (United Kingdom, disk conversion) 19?? <tape2disk hack> - - - - - - - Diamond Mine II (UK, Alt) - 19?? - <tape2disk hack> - - - + - Docteur Galaxie (Fra) + Docteur Galaxie (France, disk conversion) 19?? <tape2disk hack> - + - DonPan (Jpn) + DonPan (Japan, disk conversion) 19?? <tape2disk hack> - + - Eagle (Spa) + Eagle (Spain, disk conversion) 19?? <tape2disk hack> - + - Eat It (Ned) + Eat It (Netherlands, disk conversion) 19?? <tape2disk hack> - + - Eggy (Jpn) + Eggy (Japan, disk conversion) 19?? <tape2disk hack> + - + - Emerald Isle (UK) + Emerald Isle (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - La Espada Sagrada (Spa, Cracked) + La Espada Sagrada (Spain, disk conversion, cracked) 19?? <tape2disk hack> - + - La Espada Sagrada (Spa, Cracked, Alt) + La Espada Sagrada (Spain, disk conversion, cracked, alt) 19?? <tape2disk hack> - + - La Espada Sagrada (Spa, Cracked, Alt 2) + La Espada Sagrada (Spain, disk conversion, cracked, alt 2) 19?? <tape2disk hack> - + - Eye (UK) + Eye (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Eye (UK, Alt) + Eye (United Kingdom, disk conversion, alt) 19?? <tape2disk hack> - + - Fe y Vida - 8 E.G.B. (Spa) + Fe y Vida - 8 E.G.B. (Spain, disk conversion) 19?? <tape2disk hack> - + - Fighting Rider (Jpn) + Fighting Rider (Japan, disk conversion) 19?? <cart2disk hack> - + - Final War (Spa) + Final War (Spain, disk conversion) 19?? <tape2disk hack> - + - Final War (Spa, Alt) + Final War (Spain, disk conversion, alt) 19?? <tape2disk hack> - + - Fire Star (Spa) + Fire Star (Spain, disk conversion) 19?? <tape2disk hack> - + - Fire Warrior (Spa) + Fire Warrior (Spain, disk conversion) 19?? <tape2disk hack> - + - Flop Chop (Spa) + Flop Chop (Spain, disk conversion) 19?? <tape2disk hack> - + - Fly-Boat (Fra) + Fly-Boat (France, disk conversion) 19?? <tape2disk hack> - + - Football Manager (Spa) + Football Manager (Europe, disk conversion) 19?? <tape2disk hack> - + - Forajidos (Spa) + Forajidos (Spain, disk conversion) 19?? <tape2disk hack> - + - Frog (Ned) - 19?? - <tape2disk hack> + Frog (Netherlands, cracked) + 1988 + Eurosoft + + - + - - Fruity Frank (UK) + + + Fruity Frank (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Fun Words (UK) + Fun Words 1-4 (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Fun Words (UK, Alt) + Fun Words (United Kingdom, disk conversion, alt) 19?? <tape2disk hack> - + - Fuzzball (Ned) - 19?? - <tape2disk hack> + Fuzzball (Netherlands) + 1986 + Eaglesoft + + - + + - Fuzzball (Ned, Alt) + Fuzzball (Netherlands, alt) 19?? - <tape2disk hack> + Eaglesoft + + - + + + - Fuzzball (Ned, Alt 2) + Fuzzball (Netherlands, alt 2) 19?? - <tape2disk hack> + Eaglesoft + + - + + - Galaxia (UK) + Galaxia (United Kingdom, disk conversion) 19?? <tape2disk hack> + - + - Globiblood (Spa) + Globi-Blod (Spain, disk conversion) 19?? <tape2disk hack> - + - Graphic Artist (Jpn) + Graphic Artist (Japan, disk conversion) 19?? <cart2disk hack> - + - Hades (Spa, Hacked) + Hades (Spain, disk conversion, hacked) 19?? <tape2disk hack> - + - Hiper Tronic (Spa) + Hiper Tronic (Spain, disk conversion) 19?? <tape2disk hack> - + - Hiper Tronic (Spa, Alt) + Hiper Tronic (Spain, disk conversion, alt) 19?? <tape2disk hack> - + - Hiyoko Fighter (Jpn) + Hiyoko Fighter (Japan, disk conversion) 19?? <tape2disk hack> - + - - The Hobbit (UK) + + + The Hobbit (United Kingdom, disk conversion) 19?? <tape2disk hack> + - + - Hollywood Hijinx (UK?) + Hollywood Hijinx (United Kingdom?, disk conversion) 19?? <tape2disk hack> - + - Hunter Killer (UK) + Hunter Killer (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Hyper Viper (UK) + Hyper Viper (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Hyperball (Spa, Cracked) + Hyperball (Spain, disk conversion, cracked) 19?? <tape2disk hack> - + - Indoor Race (Spa) + Indoor Race (Spain, disk conversion) 19?? <tape2disk hack> + - + - Infernal Miner (Fra) + Infernal Miner (France, disk conversion) 19?? <tape2disk hack> - + - Los Inhumanos (Spa) + Los Inhumanos (Spain, disk conversion) 19?? <tape2disk hack> - + - Je Compte (Fra) + Je Compte! (France, disk conversion) 19?? <tape2disk hack> - + - Jetalfs Strikes Back (UK) + Jetalf Strikes Back (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Jony y el Trono del Jaguar (Spa) + Jony y el Trono del Jaguar (Spain, disk conversion) 19?? <tape2disk hack> - + - Juega... Pero Seguro (Spa) + Juega... Pero Seguro (Spain, disk conversion) 19?? <tape2disk hack> - + - Jump Jet (Bra) + Jump Jet (Brazil, disk conversion) 19?? <tape2disk hack> - + - Kaeru Shooter (Jpn) + Kaeru Shooter (Japan, disk conversion) 19?? <tape2disk hack> - + - Kick It (Ned) + Kick It (Netherlands, disk conversion) 19?? <tape2disk hack> - + - Killer Station (Jpn) + Killer Station (Japan, disk conversion) 19?? <tape2disk hack> - + - Leucocyt (Ned) + Leucocyt (Netherlands, disk conversion) 19?? <tape2disk hack> - + - Liberator (Spa, Cracked) + Liberator (Spain, disk conversion, cracked) 19?? <tape2disk hack> - + - Liberator (Spa, Cracked, Alt) + Liberator (Spain, disk conversion, cracked, alt) 19?? <tape2disk hack> - + - Lonesome Tank (Jpn) + Lonesome Tank (Japan, disk conversion) 19?? <tape2disk hack> - + - Loto (Spa) + Loto (Spain, disk conversion) 19?? <tape2disk hack> - - - - - - - MJ-05 (Jpn) - 19?? - <tape2disk hack> - - - + - - MJ-05 (Jpn, Alt) + + + MJ-05 (Japan, disk conversion) 19?? <tape2disk hack> - + - MSX Artist (UK) + MSX Artist (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Mach 3 (Spa) + Mach 3 (Spain, disk conversion) 19?? <tape2disk hack> - + - El Mago Volador (Spa) + El Mago Volador (Spain, disk conversion) 19?? <tape2disk hack> - + - Manchester United (UK)[cr Damian Roman] + Manchester United (United Kingdom, disk conversion, cracked) 19?? <tape2disk hack> + - + - Meaning of Life (Ned) - 19?? - <tape2disk hack> + Meaning of Life (Netherlands) + 1986 + Eaglesoft + - + + - Miki Va a Esquiar (Spa) + Miki Va a Esquiar (Spain, disk conversion) 19?? <tape2disk hack> - + - Minder (UK) + Minder (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Motorbike Madness (UK) + Motorbike Madness (United Kingdom, disk conversion) 19?? <tape2disk hack> + - + - Multipuzzle (Spa) + Multipuzzle (Spain, disk conversion) 19?? <tape2disk hack> - + - The Munsters (UK) + The Munsters (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - The Munsters (UK, Alt) + The Munsters (United Kingdom, disk conversion, alt) 19?? <tape2disk hack> - + - Musica en Juego I - Solfeo (Spa) + Musica en Juego I - Solfeo (Spain, disk conversion) 19?? <tape2disk hack> - + - Noughts & Crosses (UK) + Noughts & Crosses (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Noughts & Crosses (UK, Alt) + Noughts & Crosses (United Kingdom, disk conversion, alt) 19?? <tape2disk hack> - + - - Odyssey-K + + + Odyssey-K (disk conversion) 19?? <tape2disk hack> - + - Oh No! (Euro) + Oh No! (Europe, disk conversion) 19?? <tape2disk hack> - + - Palet (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Pasteman Pat - Billboard (UK) - 19?? - <tape2disk hack> - - - - - - - - - Patrullera XH-63 (Spa) + Palet (Netherlands, disk conversion) 19?? <tape2disk hack> - + - - Patrullera XH-63 (Spa, Alt) + + + Pasteman Pat - Billboard (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Paises del Mundo I - Africa (Spa) + Paises del Mundo I - Africa (Spain, disk conversion) 19?? <tape2disk hack> - + - Paises del Mundo I - Europa (Spa) + Paises del Mundo I - Europa (Spain, disk conversion) 19?? <tape2disk hack> - + - Paises del Mundo II - America (Spa) + Paises del Mundo II - America (Spain, disk conversion) 19?? <tape2disk hack> - + - - Paises del Mundo II - Asia (Spa) + + Paises del Mundo II - Asia (Spain, disk conversion) 19?? <tape2disk hack> - + - Pelota Vasca (Spa) + Pelota Vasca (Spain, disk conversion) 19?? <tape2disk hack> - + - Pelota Vasca (Spa, Alt) + Pelota Vasca (Spain, disk conversion, alt) 19?? <tape2disk hack> - + - Piso Zero (Spa) + Piso Zero (Spain, disk conversion, cracked) 19?? <tape2disk hack> - + - - Profesion Detective (Spa) + + + Profesion Detective (Spain, disk conversion) 19?? <tape2disk hack> + - + - - Profesion Detective (Spa, Alt) + + + Profesion Detective (Spain, disk conversion, alt) 19?? <tape2disk hack> + - + - Puddles - Exercices avec Formes (Fra) + Puddles - Exercices avec Formes (France, disk conversion) 19?? <tape2disk hack> - + - Punch & Judy (UK) + Punch & Judy (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Quasar (UK) + Quasar (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - - Queen's Golf Joy Pack (Jpn) + + + Queen's Golf Joy Pack (Japan, disk conversion) 19?? <tape2disk hack> + - + - Railway (Jpn) + Railway (Japan, disk conversion) 19?? <cart2disk hack> - + - Rath-Tha (Spa) + Rath-Tha (Spain, disk conversion) 19?? <tape2disk hack> - - - - - - - Rath-Tha (Spa, Alt) - 19?? - <tape2disk hack> - - - + - Rex Hard (Spa) + Rex Hard (Spain, disk conversion) 19?? <tape2disk hack> - + + - Rex Hard (Spa, Alt) + Rex Hard (Spain, disk conversion, alt) 19?? <tape2disk hack> - + - Road Wars (UK) + Road Wars (United Kingdom, disk conversion) 19?? <tape2disk hack> + - + - Safari X (Jpn) + Safari X (Japan, disk conversion) 19?? <tape2disk hack> - - - - - - - Safari X (Jpn, Alt) - 19?? - <tape2disk hack> - - - + - Sajedrez (Spa) + Sajedrez (Spain, disk conversion) 19?? <tape2disk hack> - + - Sajedrez (Spa, Alt) + Sajedrez (Spain, disk conversion, alt) 19?? <tape2disk hack> - + - Sea Battle (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Senda Salvaje (Spa, Trained) + Sea Battle (Spain, disk conversion) 19?? <tape2disk hack> - + - Shop Boy (Spa) + Shop Boy (Spain, disk conversion) 19?? <tape2disk hack> - + - Small Jones (Ita) + Small Jones (Italy, disk conversion) 19?? <tape2disk hack> - - - - - - - Sokoban (Jpn) - 19?? - <cart2disk hack> - - - + - Space Shot (Spa) + Space Shot (Spain, disk conversion) 19?? <tape2disk hack> - + - Spooks & Ladders (UK) + Spooks & Ladders (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - De Sprinter (Ned) + De Sprinter (Netherlands, disk conversion) 19?? <tape2disk hack> - + - De Sprinter (Ned, Alt) + De Sprinter (Netherlands, disk conversion, alt) 19?? <tape2disk hack> - + + - De Sprinter (Ned, Alt 2) + De Sprinter (Netherlands, disk conversion, alt 2) 19?? <tape2disk hack> - + - Star Avenger (UK) + Star Avenger (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Star Seeker (UK) + Star Seeker (United Kingdom, disk conversion) 19?? <tape2disk hack> + - + - Star Trek - Strategic Operations Simulator (Jpn) + Star Trek - Strategic Operations Simulator (Japan, disk conversion) 19?? <cart2disk hack> - + + - Submarine Shooter (Jpn) + Submarine Shooter (Japan, disk conversion) 19?? <tape2disk hack> + - + - Super Baby (Jpn) + Super Baby (Japan, disk conversion) 19?? <tape2disk hack> - + - Supermind (UK) + Supermind (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Tarot (Fra) + Tarot (France, disk conversion) 19?? <tape2disk hack> - + - Time and Magik I - Lords of Time (UK) + Time and Magik I - Lords of Time (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Time and Magik II - Red Moon (UK) + Time and Magik II - Red Moon (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Time and Magik III - The Price of Magik (UK) + Time and Magik III - The Price of Magik (United Kingdom, disk conversion) 19?? <tape2disk hack> + - + - Topografie Nederland (Ned) - 19?? - <tape2disk hack> + Topografie Nederland (Netherlands) + 1986 + Aackosoft + - - - - - - - Topografie Nederland (Ned, Alt) - 19?? - <tape2disk hack> - - - + + - Trashman (UK) + Trashman (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Trashman (UK, Alt) + Trashman (United Kingdom, disk conversion, alt) 19?? <tape2disk hack> - + - Trigger (Spa, Cracked) + Trigger (Spain, disk conversion, cracked) 19?? <tape2disk hack> - + - Tuma 7 (Spa) + Tuma 7 (Spain, disk conversion) 19?? <tape2disk hack> - + - Turbo 5000 (Ned) + Turbo 5000 (Netherlands, disk conversion) 19?? <cart2disk hack> - + - Vera Cruz (UK?) - 19?? - <tape2disk hack> - - - - - - - - - Viaje Espacial (Spa) + Vera Cruz (United Kingdom?, disk conversion) 19?? <tape2disk hack> + - + - Xetra (Spa) + Xetra (Spain, disk conversion) 19?? <tape2disk hack> - + - Y'ahtzee (Spa) + Y'ahtzee (Spain, disk conversion) 19?? <tape2disk hack> - - - - - - - Zaider - Battle of Peguss (Jpn) - 19?? - <cart2disk hack> - - - + - Zeta 2000 (Jpn) + Zeta 2000 (Japan, disk conversion) 19?? <tape2disk hack> - + - Zipper (UK) + Zipper (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Zork I - The Great Underground Empire (UK) + Zork I - The Great Underground Empire (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Zork II - The Wizard of Frobozz (UK) + Zork II - The Wizard of Frobozz (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - Zork III - The Dungeon Master (UK) + Zork III - The Dungeon Master (United Kingdom, disk conversion) 19?? <tape2disk hack> - + @@ -4060,11021 +4068,817 @@ --> - - 007 - Agente Especial (Spa) + + 3D Golf Simulation - High Speed Edition (Japan, disk conversion?, hacked?) 19?? <tape2disk hack> - + - - 007 - The Living Daylights (Euro, Trained +2) + + 737 Flight Simulator (Spain, disk conversion?) 19?? <tape2disk hack> - + - - 10 Yard Fight (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - 10th Frame (Euro) - 19?? - <tape2disk hack> - - - - - - - - - 10th Frame (Euro, Alt) - 19?? - <tape2disk hack> - - - - - - - - - 180 (Euro) - 19?? - <tape2disk hack> - - - - - - - - - 1942 (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - 3D Golf Simulation - High Speed Edition (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Maltese Joe's Pool Challenge (Euro) - 19?? - <tape2disk hack> - - - - - - - - - 4x4 Off-Road Racing (Euro) - 19?? - <tape2disk hack> - - - - - - - - - 4x4 Off-Road Racing (Euro, Alt) - 19?? - <tape2disk hack> - - - - - - - - - 7 Card Stud (Euro) - 19?? - <tape2disk hack> - - - - - - - - - 737 Flight Simulator (Spa) - 19?? - <tape2disk hack> - - - - - - - - - 747 400b Flight Simulator (Euro) - 19?? - <tape2disk hack> - - - - - - - - - The A-Team (Spa) - 19?? - <tape2disk hack> - - - - - - - - - The A-Team (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - A-na-za - Kaleidoscope Special (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - A.E. (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - La Abadia del Crimen (Spa) - 19?? - <tape2disk hack> - - - - - - - - - La Abadia del Crimen (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - La Abadia del Crimen (Spa, Alt 2) - 19?? - <tape2disk hack> - - - - - - - - - La Abadia del Crimen (Spa, Alt 3) - 19?? - <tape2disk hack> - - - - - - - - - Abracadabra (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Abu Simbel Profanation (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Abu Simbel Profanation (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Ace of Aces (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Actman (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Addictaball (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Adel (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Adven' Chuta! (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - African Trail Simulator (Spa) - 19?? - <tape2disk hack> - - - - - - - - - African Trail Simulator (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - After the War (Spa) - 19?? - <tape2disk hack> - - - - - - - - - After the War (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - After the War (Spa, Alt 2) - 19?? - <tape2disk hack> - - - - - - - - - Afterburner (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Afterburner (Euro, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Afteroids (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Afteroids (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Albatross (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Ale Hop! (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Ale Hop! (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Alfamat (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Alibaba and 40 Thieves - 19?? - <cart2disk hack> - - - - - - - - - Alien 8 (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Alien Syndrome (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Aliens (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Aliens - Alien 2 (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Aliens - Alien 2 (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Aliens - Alien 2 (Jpn, Alt 2) - 19?? - <cart2disk hack> - - - - - - - - - Alpha Blaster (Euro) - 19?? - <tape2disk hack> - - - - - - - - - - αRoid (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - - Alpha Squadron (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Amaurote (Euro) - 19?? - <tape2disk hack> - - - - - - - - - American Truck (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Amo del Mundo (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Amo del Mundo (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Amoto's Puf (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Angel Nieto Pole 500cc (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Angel Nieto Pole 500cc (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Angelo (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Angleball (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Anty (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Aprendiendo Ingles 2 - Bernard goes to Mars (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Aramo (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - ArcticFox (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Arkanoid (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Arkos I (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Arkos II (Spa, Trained) - 19?? - <tape2disk hack> - - - - - - - - - Army Moves (Spa, Trained) - 19?? - <tape2disk hack> - - - - - - - - - Arquimedes XXI (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Arquimedes XXI (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Aspar GP Master (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Astro Marine Corps (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Astro Plumber (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Athletic Ball (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Athletic Land (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - - Attacked (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Auf Wiedersehen Monty (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Auf Wiedersehen Monty (Euro, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Avenger (Euro) - 19?? - <tape2disk hack> - - - - - - - - - La Aventura Espacial (Spa) - 19?? - <tape2disk hack> - - - - - - - - - La Aventura Espacial (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - La Aventura Original (Spa) - 19?? - <tape2disk hack> - - - - - - - - - La Aventura Original (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Averno (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Averno (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - B.C.'s Quest for Tires (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - B.C.'s Quest for Tires II - Grog's Revenge (Euro) - 19?? - <tape2disk hack> - - - - - - - - - - Ruote e Cavenicoli (Ita) - 19?? - <tape2disk hack> - - - - - - - - - Back to the Future (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Backgammon (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Backgammon (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Balance (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Banana (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Bank Panic (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Barbarian (Euro, Trained) - 19?? - <tape2disk hack> - - - - - - - - - Batman - 19?? - <tape2disk hack> - - - - - - - - - Batten Tanuki no Daibouken (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Battle Cross (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Battleship Clapton II (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Beamrider (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Bee & Flower - 19?? - <cart2disk hack> - - - - - - - - - Bestial Warrior (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Bestial Warrior (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - The Black Onyx (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - - - - - - - - Blackbeard (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Blackbeard (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Blagger (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Blasteroids (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Blockade Runner (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Bloody (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Bloody (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - BMX Simulator (Euro) - 19?? - <tape2disk hack> - - - - - - - - - BMX Simulator (Euro, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Boardello (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Boggy '84 (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Boing Boing (Spa) - 19?? - <cart2disk hack> - - - - - - - - - Bokosuka Wars (Jpn, Hacked) - 19?? - <cart2disk hack> - - - - - - - - - Bomber Man 3D (Jpn) - 1984 - Hudson Soft - - - - - - - - - Bomber Man Special (Jpn) - 1986 - Hudson Soft - - - - - - - - - Booga-Boo (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Booga-Boo (Euro, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Boogie Woogi Jungle (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Boomerang (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Bop! (Euro) - 19?? - <tape2disk hack> - - - - - - - - - - Bouken Roman - Dota (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Boulder Dash (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Boulder Dash II - Rockford's Riot (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Bounce (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Bouncing Block (Spa) - 19?? - <cart2disk hack> - - - - - - - - - Bouncing Block (Spa, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Bounder (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Bousou Tokkyuu SOS - Stop the Express (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Break In (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Brian Jacks Superstar Challenge (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Bruce Lee (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Bubbler (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Buck Rogers - Planet of Zoom (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Buggy Ranger (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Buggy Ranger (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Bumpy (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Buran (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Bull to Mighty Kiki Ippatsu (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Buster Block (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Butam Pants (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Buzz Off! (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Bytebusters (Euro) - 19?? - <tape2disk hack> - - - - - - - - - C_So! (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Cabbage Patch Kids (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - California Games (Euro) - 19?? - <tape2disk hack> - - - - - - - - - California Games (Euro, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Camelot Warriors (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Can of Worms (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Candoo Ninja (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Cannon Ball (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Cannon Fighter (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Capitan Sevilla (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Capitan Sevilla (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Capitan Trueno (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Capitan Trueno (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Captain Chef (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Casanova (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Casanova (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Castle Combat (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Castle Excellent (Jpn, Trained by Damian Roman) - 19?? - <cart2disk hack> - - - - - - - - - The Castle (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Cavern of Death (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Chack'n Pop (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Champ (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Champion Boxing (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Champion Kendou (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Champion Pro Wrestling (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Champion Soccer (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Champions (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Championship Lode Runner (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Chase H.Q. (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Checkers in Tan Tan Tanuki (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Checkmate! - First Moves in Chess (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Cheese (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - The Chess Game (Euro) - 19?? - <cart2disk hack> - - - - - - - - - The Chess Game (Euro, Alt) - 19?? - <cart2disk hack> - - - - - - - - - The Chessmaster 2000 (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Chicago 30's (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Chicago 30's (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Chicago 30's (Spa, Alt 2) - 19?? - <tape2disk hack> - - - - - - - - - Chicken Chase (UK) - 19?? - <tape2disk hack> - - - - - - - - - Chiller (UK) - 19?? - <tape2disk hack> - - - - - - - - - Choplifter (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Chopper (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Choro Q (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Choy-Lee-Fut Kung-Fu Warrior (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Chuck Yeager's Advanced Flight Trainer (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Chuckie Egg (UK) - 19?? - <tape2disk hack> - - - - - - - - - El Cid (Spa) - 19?? - <tape2disk hack> - - - - - - - - - El Cid (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Circus Charlie (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - City Connection (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Coaster Race (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Cobra's Arc (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Cobra's Arc (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Coco Castle (UK) - 19?? - <tape2disk hack> - - - - - - - - - Coliseum (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Coliseum (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Colony - 19?? - <tape2disk hack> - - - - - - - - - Colony (Alt) - 19?? - <tape2disk hack> - - - - - - - - - Color Ball (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Colossus 4 Chess (UK) - 19?? - <tape2disk hack> - - - - - - - - - Colt 36 (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Comando Quatro (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Comando Tracer (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Comando Tracer (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Comecocos (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Comet Tail (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Comic Bakery (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Computer Billiards (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Computer Pachinko (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Con-Dori (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Congo Bongo (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Contract Bridge (UK) - 19?? - <tape2disk hack> - - - - - - - - - Corsarios (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Corsarios (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Cosa Nostra (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Cosa Nostra (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Cosmic Sheriff (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Cosmic Shock Absorber (UK) - 19?? - <tape2disk hack> - - - - - - - - - Cosmo-Explorer (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Cosmos (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Courageous Perseus (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Craze (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Craze (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Crazy Bullet (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Crazy Cars (UK) - 19?? - <cart2disk hack> - - - - - - - - - Crazy Train (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Crazy Train (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Cross Blaim (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Cross Blaim (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Cubik - Cubo de Rubik (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Cubit (UK) - 19?? - <tape2disk hack> - - - - - - - - - Cubit (UK, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Curro Jimenez (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Curro Jimenez (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Cyberbig (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Cyberbig (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Cyberun (UK) - 19?? - <tape2disk hack> - - - - - - - - - D-Day (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Daiva Story 4: Asura's Bloodfeud (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - - Daiva Story 4: Asura's Bloodfeud (Jpn, Alt 2) - 19?? - <cart2disk hack> - - - - - - - - - - Daiva Story 4: Asura's Bloodfeud (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - - The Dam Busters (UK) - 19?? - <tape2disk hack> - - - - - - - - - Damas (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Danger X4 (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Darts (UK, Blue Ribbon) - 19?? - <tape2disk hack> - - - - - - - - - David II (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Death Wish 3 (UK) - 19?? - <tape2disk hack> - - - - - - - - - Decathlon (UK) - 19?? - <tape2disk hack> - - - - - - - - - Defcom 1 (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Defcom 1 (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - The Demon Crystal (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - The Demon Crystal (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Demonia (Fra) - 19?? - <tape2disk hack> - - - - - - - - - Demonia (Fra, Alt) - 19?? - <tape2disk hack> - - - - - - - - - The Designer's Pencil (US) - 19?? - <cart2disk hack> - - - - - - - - - Desolator (UK) - 19?? - <tape2disk hack> - - - - - - - - - Desperado (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Desperado (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Desperado (Spa, Alt 2) - 19?? - <tape2disk hack> - - - - - - - - - Destroyer (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Destroyer (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Deus Ex Machina (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Dig Dug (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Dip Dip (Spa) - 19?? - <cart2disk hack> - - - - - - - - - Disc Warrior (UK) - 19?? - <tape2disk hack> - - - - - - - - - Discovery (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Dizzy Ball (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Dizzy Dice (UK) - 19?? - <tape2disk hack> - - - - - - - - - Dog Fighter (UK) - 19?? - <tape2disk hack> - - - - - - - - - Dog Fighter (UK, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Doki Doki Penguin Land (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Domino (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Domino (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Don Quijote (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Don Quijote (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Donkey Kong (Spa) - 19?? - <tape2disk hack> - - - - - - - - - DoorDoor (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Dorodon (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Double Dragon (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Dr. Jackle and Mr. Wide (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Dragon Attack (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Dragon Ninja (UK) - 19?? - <tape2disk hack> - - - - - - - - - Dragon Quest (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Dragon Quest II (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Dragon Quest II (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Dragon Slayer (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Drazen Petrovic Basket (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Drazen Petrovic Basket (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Driller Tanks (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Driller Tanks (Jpn)[a] - 19?? - <tape2disk hack> - - - - - - - - - Drome (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Dungeon Master (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Dunk Shot (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Dustin (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Dustin (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Dynamite Dan (UK) - 19?? - <tape2disk hack> - - - - - - - - - E.I. - Exa Innova (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Eagle Fighter (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Eddie Kidd Jump Challenge (UK) - 19?? - <tape2disk hack> - - - - - - - - - Eddie Kidd Jump Challenge (UK, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Eddy II (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Eggerland Mystery (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Meikyuu Shinwa (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Meikyuu Shinwa (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Elevator Action (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Emilio Butragueno Futbol (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Emilio Butragueno Futbol II (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Emilio Sanchez Vicario Grand Slam (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Enchanted (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Eric and the Floaters (Euro) - 19?? - <cart2disk hack> - - - - - - - - - European Games (UK) - 19?? - <tape2disk hack> - - - - - - - - - Exchanger (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Exerion (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Exerion II - Zorni (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Exoide-Z (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - F-1 Spirit - The Way to Formula 1 (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - F16 Fighting Falcon (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Fairy (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - The Fairyland Story (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - The Fairyland Story (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Fanky Punky (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Fantasy Zone (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Fantasy Zone (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Fernando Martin Basket Master (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Fernando Martin Basket Master (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Fernando Martin Basket Master - Executive Version (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Fernando Martin Basket Master - Executive Version (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Fernando Martin Basket Master - Executive (Spa)[Martos] - 19?? - <tape2disk hack> - - - - - - - - - Feud (UK) - 19?? - <tape2disk hack> - - - - - - - - - Final Justice (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Final Zone (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Final Zone (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Finders Keepers (UK) - 19?? - <tape2disk hack> - - - - - - - - - Fire Rescue (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - First Steps with the Mr. Men (UK) - 19?? - <tape2disk hack> - - - - - - - - - Flappy (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Flappy - Limited 85 (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Flappy Limited 85 (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Flash Gordon - 19?? - <tape2disk hack> - - - - - - - - - Flash Splash (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Les Flics (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Flicky (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Flight Deck II (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Flight Path 737 (UK) - 19?? - <tape2disk hack> - - - - - - - - - Flight Simulator (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - The Flintstones (UK) - 19?? - <tape2disk hack> - - - - - - - - - Flipper Slipper (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Foot Volley (UK) - 19?? - <tape2disk hack> - - - - - - - - - Football Manager - World Cup Edition (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Footballer of the Year (UK) - 19?? - <tape2disk hack> - - - - - - - - - Forbidden Fruit (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Formation Z (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Formula 1 Simulator (UK) - 19?? - <tape2disk hack> - - - - - - - - - Freddy Hardest (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Freddy Hardest (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Freddy Hardest in South Manhattan (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Frogger (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Front Line (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Fruit Machine (UK) - 19?? - <tape2disk hack> - - - - - - - - - Fruit Panic (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Fruit Search (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Funky Mouse (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Futbol (Spa) - 19?? - <cart2disk hack> - - - - - - - - - Future Knight (UK) - 19?? - <tape2disk hack> - - - - - - - - - Future Knight (UK)[a] - 19?? - <tape2disk hack> - - - - - - - - - GP World (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Galaga (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Galaxian (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Gall Force - Defense of Chaos (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Gall Force - Defense of Chaos (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Gall Force - Defense of Chaos (Jpn, Alt 2) - 19?? - <cart2disk hack> - - - - - - - - - Game Over (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Game Over (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - The Games - Winter Edition (UK) - 19?? - <tape2disk hack> - - - - - - - - - Games, The - Winter Edition (UK, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Games Designer (UK) - 19?? - <tape2disk hack> - - - - - - - - - Gangman (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Gauntlet (UK) - 19?? - <tape2disk hack> - - - - - - - - - Genghis Khan (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Genghis Khan (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Genghis Khan (Spa, Alt 2) - 19?? - <tape2disk hack> - - - - - - - - - El Gerente (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Ghostbusters (UK) - 19?? - <tape2disk hack> - - - - - - - - - Ghostbusters II (UK) - 19?? - <tape2disk hack> - - - - - - - - - Glass (UK) - 19?? - <tape2disk hack> - - - - - - - - - Glider (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Godzilla (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Gopher no Yabou - Episode II (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Gomoku Narabe (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Gonzzalezz (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Gonzzalezz (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Goody (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Goody (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - The Goonies (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Grid Trap (UK) - 19?? - <tape2disk hack> - - - - - - - - - Guardic (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Gulkave (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Gunfright (UK) - 19?? - <tape2disk hack> - - - - - - - - - Gyro Adventure (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Gyrodine (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - H.E.R.O. (Jpn?) - 19?? - <cart2disk hack> - - - - - - - - - Habilit (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Habilit (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Yami no Ryuuou - Hades no Monshou (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - MSX Hanafuda Koi Koi (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - MSX Hanafuda Koi Koi (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Hang-On (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Happy Fret (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Harvey Smith's Showjumper (UK) - 19?? - <tape2disk hack> - - - - - - - - - Head Over Heels (UK) - 19?? - <tape2disk hack> - - - - - - - - - Head Over Heels (UK, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Heat Seeker - Missil (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Heavy Boxing (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - The Heist (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Heli Tank (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Hercules - Slayer of the Damned (UK) - 19?? - <tape2disk hack> - - - - - - - - - Here & There with the Mr. Men (UK) - 19?? - <tape2disk hack> - - - - - - - - - La Herencia (Spa) - 19?? - <tape2disk hack> - - - - - - - - - La Herencia (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - High Way Star (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Highway Encounter (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Hitsuji Yaai (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Hole in One (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Hole in One Professional (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Home Writer (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Hopper (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Hot Shoe (UK) - 19?? - <tape2disk hack> - - - - - - - - - Howard the Duck (UK) - 19?? - <tape2disk hack> - - - - - - - - - Humphrey (UK) - 19?? - <tape2disk hack> - - - - - - - - - Humphrey (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Humphrey (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Hunchback (UK) - 19?? - <tape2disk hack> - - - - - - - - - Hundra (Spa) - 19?? - <tape2disk hack> - - - - - - - - - The Hunt for Red October (UK) - 19?? - <tape2disk hack> - - - - - - - - - The Hunt for Red October (UK, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Hustle Chumy (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Hustler (UK, Bubble Bus) - 19?? - <tape2disk hack> - - - - - - - - - Hydlide (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Hydlide II - Shine of Darkness (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Hydlide II - Shine of Darkness (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Hydlide III - The Space Memories (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Hyper Olympic 1 (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Hyper Olympic 2 (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Hyper Rally (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Hyper Sports 1 (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Hyper Sports 2 (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Hyper Sports 2 (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Hyper Sports 3 (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Ice (Ned) - 19?? - <tape2disk hack> - - - - - - - - - The Ice King (UK) - 19?? - <tape2disk hack> - - - - - - - - - Ice World (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Ice-Breaker (Spa) - 19?? - <tape2disk hack> - - - - - - - - - IdeaType - Instructor Mecanografico (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Iga Ninpouchou - Mangetsujou no Tatakai (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Iga Ninpouchou (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Igloo (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Theseus - Iligks I (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Iligks (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Indian no Bouken (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Indiana Jones and the Temple of Doom (UK) - 19?? - <tape2disk hack> - - - - - - - - - International Karate (UK) - 19?? - <tape2disk hack> - - - - - - - - - International Karate (UK, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Intrepido (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Invasion (UK) - 19?? - <tape2disk hack> - - - - - - - - - Invierte y Gana (Spa) - 19?? - <tape2disk hack> - - - - - - - - - J.P. Winkle (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Jabato (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Jabato (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Jabato (Spa, Alt 2) - 19?? - <tape2disk hack> - - - - - - - - - Jack the Nipper (UK) - 19?? - <tape2disk hack> - - - - - - - - - Jackie Chan in Project A (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Jackie Chan in Project A (Jpn, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Jackie Chan in Spartan X (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Jagur (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Jagur (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Jaws (Spa?, Trained) - 19?? - <tape2disk hack> - - - - - - - - - Jet Bomber (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Jet Set Willy (UK) - 19?? - <tape2disk hack> - - - - - - - - - Jet Set Willy (UK, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Jet Set Willy II (Euro, Trained) - 19?? - <tape2disk hack> - - - - - - - - - Joe Blade (UK) - 19?? - <tape2disk hack> - - - - - - - - - Johny Comomolo in 3-2-1 Fire (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Journey to the Centre of the Earth (UK) - 19?? - <tape2disk hack> - - - - - - - - - Jump (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Jump Coaster (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Jump Land - 19?? - <cart2disk hack> - - - - - - - - - Jumping Rabbit (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Jungle Warrior (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Jungle Warrior (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Juno First (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Kage no Densetsu - The Legend of Kage (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Karuizawa Yuukai Annai (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Karuizawa Yuukai Annai (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Ke Rulen los Petas (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Kenja no Ishi - The Stone of Wisdom (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Kenja no Ishi - The Stone of Wisdom (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Keystone Kapers (UK) - 19?? - <cart2disk hack> - - - - - - - - - King & Balloon (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - King Leonard (Spa) - 19?? - <tape2disk hack> - - - - - - - - - King's Knight (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - King's Knight (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - King's Valley (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Ouke no Tani - El Giza no Fuuin (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Kinnikuman - Colosseum Deathmatch (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Klax (UK) - 19?? - <tape2disk hack> - - - - - - - - - Knight Ghost (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Knight Lore (UK) - 19?? - <tape2disk hack> - - - - - - - - - Knight Tyme (UK) - 19?? - <tape2disk hack> - - - - - - - - - Knightmare - Majou Densetsu (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Knightmare II - The Maze of Galious (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Knightmare III - Shalom (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Konami's Baseball (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Konami's Billiards (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Konami's Golf (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Konami's Ping-Pong (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Konami's Soccer (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Konami's Tennis (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Game Master (Euro) - 19?? - <cart2disk hack> - - - - - - - - - Konami no Game Master II (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Koneko no Daibouken - Chibi-chan ga Iku (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Krypton (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Kubus (UK) - 19?? - <tape2disk hack> - - - - - - - - - Kuma Logo (UK) - 19?? - <tape2disk hack> - - - - - - - - - Kung Fu Master (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Laberinto (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Lady Safary (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Lady Safary (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Laptick 2 (Jpn) - 19?? - <cat2disk hack> - - - - - - - - - The Last Mission (Spa) - 19?? - <tape2disk hack> - - - - - - - - - The Last Mission (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Lazer Bykes (UK) - 19?? - <tape2disk hack> - - - - - - - - - Lazer Bykes (UK, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Lazy Jones (UK) - 19?? - <tape2disk hack> - - - - - - - - - Le Mans (UK) - 19?? - <tape2disk hack> - - - - - - - - - Le Mans 2 (UK) - 19?? - <cart2disk hack> - - - - - - - - - Legend (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Legends (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Licence to Kill (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Lode Runner II (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Loteria Primitiva (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Lunar Ball (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Mac Attack (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Macadam Bumper (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Machinegun Joe vs The Mafia (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Mad Mix Game (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Mad Mix Game (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Magic Johnson's Basketball (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Magic Pinball (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Magical Kid Wiz (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Magical Tree (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Magnum Kiki Ippatsu - Empire City 1931 (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Magnum Kiki Ippatsu - Empire City 1931 (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Mahjong Dojo (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Mambo (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Mambo (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Mandragore (Fra) - 19?? - <tape2disk hack> - - - - - - - - - Manes (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Manic Miner (UK) - 19?? - <tape2disk hack> - - - - - - - - - Map Game (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Map Game (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Mappy (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Marine Battle (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Martianoids (UK) - 19?? - <tape2disk hack> - - - - - - - - - Mask II (UK) - 19?? - <tape2disk hack> - - - - - - - - - Mask II (UK)[a] - 19?? - <tape2disk hack> - - - - - - - - - Master Chess (UK) - 19?? - <tape2disk hack> - - - - - - - - - Master of the Lamps (UK) - 19?? - <tape2disk hack> - - - - - - - - - Master Voice (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Match Day II (UK) - 19?? - <tape2disk hack> - - - - - - - - - Match Day II (UK, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Maths Invaders (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Maxima (UK) - 19?? - <tape2disk hack> - - - - - - - - - Mazes Unlimited (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Maziacs (UK) - 19?? - <tape2disk hack> - - - - - - - - - Mecom (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Mega Chess (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Megalopolis SOS (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Meganova (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Meganova (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Megaphoenix (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Megaphoenix (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Merlin (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Metropolis (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Metropolis (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Michel Futbol Master (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Michel Futbol Master (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Midnight Brothers (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Midnight Building (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Mike Gunner (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Mike Gunner (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Mil Caras (Spa) - 19?? - <cart2disk hack> - - - - - - - - - Milk Race (UK) - 19?? - <tape2disk hack> - - - - - - - - - Mini Golf (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Mirai (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Mirai. Future (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Mision Rescate (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Mision Rescate (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - El Misterio del Nilo (Spa) - 19?? - <tape2disk hack> - - - - - - - - - El Misterio del Nilo (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Mitsume ga Tooru - The Three-Eyed One Comes Here (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Mitsume ga Tooru - The Three-Eyed One Comes Here (Jpn, alt) - 19?? - <cart2disk hack> - - - - - - - - - Mokari Makka? Bochibochi Denna! (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Moai no Hihou (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Mobile Planet Suthirus - Approach from the Westgate (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Mobile-Suit Gundam - Last Shooting (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Molecule Man (UK) - 19?? - <tape2disk hack> - - - - - - - - - Monkey Academy (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Digital Devil Monogatari - Megami Tensei (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Digital Devil Monogatari - Megami Tensei (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Monopoly (UK) - 19?? - <tape2disk hack> - - - - - - - - - Monster's Fair (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Monster's Fair (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Moon Patrol (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Moon Rider (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Moonsweeper (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Moonwalker (UK, Trained) - 19?? - <tape2disk hack> - - - - - - - - - Mopiranger (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Mortadelo y Filemon (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Mortadelo y Filemon II - Safari Callejero (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Mortadelo y Filemon II - Safari Callejero (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - The Most Amazing Memory Game (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Mot (Spa) - 19?? - <tape2disk hack> - - - - - - - - - El Motorista Sideral (Spa) - 19?? - <tape2disk hack> - - - - - - - - - El Motorista Sideral (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Mountain Bike Racer (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Mountain Bike Racer (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Mouser (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Mr. Chin (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Mr. Do! vs Unicorns (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Mr. Do's Wild Ride (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Mr. Wong's Loopy Laundry (UK) - 19?? - <tape2disk hack> - - - - - - - - - Mr. Wong's Loopy Laundry (UK, Alt) - 19?? - <tape2disk hack> - - - - - - - - - MSX 21 (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - MSX Baseball (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - MSX Super Tennis (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Music Editor - MUE (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Mundial de Futbol (Spa) - 19?? - <tape2disk hack> - - - - - - - - - El Mundo Perdido (Spa) - 19?? - <tape2disk hack> - - - - - - - - - El Mundo Perdido (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Music Studio G7 (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Music Studio G7 (Jpn, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Mutan Zone (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Mutan Zone (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Mutant Monty (UK, Trained) - 19?? - <tape2disk hack> - - - - - - - - - Nessen Koushien (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Night Flight (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Nightshade (UK) - 19?? - <tape2disk hack> - - - - - - - - - Ninja Jajamaru-kun (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Ninja-kun - Majou no Bouken (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Ninja Princess (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Ninjya Kage (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Nonamed (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Nonamed (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Nuclear Bowls (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Nuclear Bowls (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Number Painter (UK) - 19?? - <tape2disk hack> - - - - - - - - - Nuts & Milk (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - O'Mac Farmer (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Obliterator (Spa, Trained) - 19?? - <tape2disk hack> - - - - - - - - - Ocean Conqueror (UK) - 19?? - <tape2disk hack> - - - - - - - - - Octagon Squad (UK) - 19?? - <tape2disk hack> - - - - - - - - - Octagon Squad (UK)[a] - 19?? - <tape2disk hack> - - - - - - - - - Oh Mummy!! (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Oh Shit! (Euro) - 19?? - <tape2disk hack> - - - - - - - - - Oil's Well (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Ole! (UK) - 19?? - <tape2disk hack> - - - - - - - - - Operation Wolf (UK) - 19?? - <tape2disk hack> - - - - - - - - - Ormuz (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Ormuz (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Outroyd (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Pac-Land (UK) - 19?? - <tape2disk hack> - - - - - - - - - Pac-Mania (UK) - 19?? - <tape2disk hack> - - - - - - - - - Pai Panic (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Pairs (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Panel Panic (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Panic Junction (UK) - 19?? - <tape2disk hack> - - - - - - - - - Panique (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Panzer Attack (UK) - 19?? - <tape2disk hack> - - - - - - - - - Paris-Dakar (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Paris-Dakar (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Parodius - Tako wa Chikyuu wo Sukuu (Jpn, Trained) - 19?? - <cart2disk hack> - - - - - - - - - Passing Shot (UK) - 19?? - <tape2disk hack> - - - - - - - - - Pastfinder (US) - 19?? - <tape2disk hack> - - - - - - - - - Pay Load (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Peetan (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Penguin-kun Wars (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Pentagram (UK) - 19?? - <tape2disk hack> - - - - - - - - - Pepe Saltarin (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Peter Beardsley's International Football (UK) - 19?? - <tape2disk hack> - - - - - - - - - Phantis (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Phantomas 2 (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Phantomas 2 (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Pillbox (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Pico Pico (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Picture Puzzle (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Pine Applin (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Pingball Maker (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Pink Panther (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Pinky Chase (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Pipi (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Pippols (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Pitfall (UK) - 19?? - <cart2disk hack> - - - - - - - - - Pitfall II - Lost Caverns (UK) - 19?? - <tape2disk hack> - - - - - - - - - Play Ball (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - El Poder Oscuro (Spa) - 19?? - <tape2disk hack> - - - - - - - - - El Poder Oscuro (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Polar Star (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Police Academy (Ned) - 19?? - <tape2disk hack> - - - - - - - - - The Police Story (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Pooyan (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Psychedelia (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Psychedelia (Ned, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Psycho Pig U.X.B. (UK) - 19?? - <tape2disk hack> - - - - - - - - - Punchy (UK) - 19?? - <tape2disk hack> - - - - - - - - - Pyramid Warp (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Q*Bert (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Queen's Golf (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - R-Type (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - R.A.M. (Spa) - 19?? - <tape2disk hack> - - - - - - - - - R.A.M. (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Race City (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Raid on Bungeling Bay (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Rally-X (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Rally-X (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Rambo (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Rambo III (UK) - 19?? - <tape2disk hack> - - - - - - - - - Rambo III (UK, Alt) - 19?? - <tape2disk hack> - - - - - - - - - The Rampart (Spa) - 19?? - <tape2disk hack> - - - - - - - - - RasterScan (UK) - 19?? - <tape2disk hack> - - - - - - - - - Red Zone (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Reflex (UK) - 19?? - <tape2disk hack> - - - - - - - - - Renegade III - The Final Chapter (UK, Trained) - 19?? - <tape2disk hack> - - - - - - - - - Rise Out from Dungeons (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Rise Out from Dungeons (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Risky Holding (Spa) - 19?? - <tape2disk hack> - - - - - - - - - River Raid (UK) - 19?? - <tape2disk hack> - - - - - - - - - Road Fighter (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Robocop (UK) - 19?? - <tape2disk hack> - - - - - - - - - Robofrog (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Rock'n Bolt (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Rock 'n Roller (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Rock 'n Roller (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Rocket Roger (UK) - 19?? - <tape2disk hack> - - - - - - - - - Rocket Roger (UK, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Rocky (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Rocky (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Roger Rubbish (UK) - 19?? - <cart2disk hack> - - - - - - - - - Roller Ball (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Roma - La Conquista del Imperio (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Rotors (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Runner (Fra) - 19?? - <tape2disk hack> - - - - - - - - - Runner (Fra, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Sabotaje (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Sabrina (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Sabrina (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Salvage (UK) - 19?? - <tape2disk hack> - - - - - - - - - Samantha Fox Strip Poker (UK, Trained) - 19?? - <tape2disk hack> - - - - - - - - - Sasa (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Saurusland (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Scarlet 7 (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Science Fiction (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Scion (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Scope On - Fight in Space (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Score 3020 (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Score 3020 (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Scramble Eggs (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Sea Hunter (UK) - 19?? - <cart2disk hack> - - - - - - - - - Sea King (UK) - 19?? - <tape2disk hack> - - - - - - - - - The Secret Diary of Adrian Mole (UK) - 19?? - <tape2disk hack> - - - - - - - - - Seiken Achou (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Senjyo (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Sewer Sam (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Sewer Sam (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Shark Hunter (UK) - 19?? - <tape2disk hack> - - - - - - - - - ShinyoSizer - Konami's Synthesizer (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Sinbad - Nanatsu no Bouken (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Shnax (UK) - 19?? - <tape2disk hack> - - - - - - - - - Shout Match (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Shup - Trebol (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Silent Shadow (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Silent Shadow (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Silfi (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Simulador Profesional de Tenis (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Profesional Tennis Simulator (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Sir Fred (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Sir Fred (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Skate Dragon (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Ski Command (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Skramble (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Skull Exilon (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Sky Jaguar (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Sky Vision (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Skygaldo (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Skyhawk (UK) - 19?? - <tape2disk hack> - - - - - - - - - Slapshot (UK) - 19?? - <tape2disk hack> - - - - - - - - - Slapshot (UK, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Smack Wacker (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Smaily (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Smaily (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Smaily (Spa, Alt 2) - 19?? - <tape2disk hack> - - - - - - - - - Snake It (Ned) - 19?? - <tape2disk hack> - - - - - - - - - The Snowman (UK) - 19?? - <tape2disk hack> - - - - - - - - - Sofia (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Sofia (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Sol Negro (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Sol Negro (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Sol Negro (Spa, Alt 2) - 19?? - <tape2disk hack> - - - - - - - - - Soldier of Light (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Sorcery (UK) - 19?? - <tape2disk hack> - - - - - - - - - Soul of a Robot (UK) - 19?? - <tape2disk hack> - - - - - - - - - Space Busters (Ned, Aackosoft) - 19?? - <tape2disk hack> - - - - - - - - - Space Busters (Ned, Eaglesoft) - 19?? - <tape2disk hack> - - - - - - - - - Space Camp (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Space Invaders (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Space Maze Attack (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Space Trouble (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Sparkie (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Special Operations (UK) - 19?? - <tape2disk hack> - - - - - - - - - Speed King (UK) - 19?? - <tape2disk hack> - - - - - - - - - Speedboat Racer (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Spelunker (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - The Spider (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Spirits (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Spirits (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Spitfire '40 (UK) - 19?? - <tape2disk hack> - - - - - - - - - Splash (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Spread Sheet (UK?) - 19?? - <cart2disk hack> - - - - - - - - - Spy Story (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Squish'em (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Star Blazer (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Star Destroyer Bosconian (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Star Fighter (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Star Runner (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Star Soldier (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Star Wars (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Starbyte (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Stardust (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Starquake (UK) - 19?? - <tape2disk hack> - - - - - - - - - Starship Simulator (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Step Up (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Steve Davis Snooker (UK) - 19?? - <tape2disk hack> - - - - - - - - - Stop Ball (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Storm - Una's Lair (UK) - 19?? - <tape2disk hack> - - - - - - - - - Stormbringer (UK) - 19?? - <tape2disk hack> - - - - - - - - - Strange Loop (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Streaker (UK) - 19?? - <tape2disk hack> - - - - - - - - - Strip Poker II+ (UK) - 19?? - <tape2disk hack> - - - - - - - - - Suparobo (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Super Billiards (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Super Billiards (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Super Chess (UK) - 19?? - <tape2disk hack> - - - - - - - - - Super Cobra (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Super Cross Force (UK) - 19?? - <tape2disk hack> - - - - - - - - - Super Drinker (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Super Golf (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Super Laydock - Mission Striker (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Super Snake (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Super Soccer (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Super Synth (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Supertripper (Spa) - 19?? - <cart2disk hack> - - - - - - - - - Survivor (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Survivors (UK) - 19?? - <tape2disk hack> - - - - - - - - - Sweet Acorn (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Tai-Pan (UK) - 19?? - <tape2disk hack> - - - - - - - - - Takahashi Meijin no Boukenjima (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Takeru Densetsu (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Tank Battalion (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Target Plus (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Target Plus (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Tawara-kun (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Telebunnie (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Temptations (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Tensai Rabbian Daifunsen (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Tension (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Tension (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Terminus - Prison Planet (UK) - 19?? - <tape2disk hack> - - - - - - - - - Test Drive II - The Duel (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Tetra Horror (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Tetris (UK) - 19?? - <tape2disk hack> - - - - - - - - - Thexder (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Thing Bounces Back (UK) - 19?? - <tape2disk hack> - - - - - - - - - Thor (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Thor (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Thunder Ball (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Thunder Blade (UK, Trained) - 19?? - <tape2disk hack> - - - - - - - - - Thunder Blade (UK, Trained, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Thunderbirds (UK) - 19?? - <tape2disk hack> - - - - - - - - - Time Bandits (UK) - 19?? - <tape2disk hack> - - - - - - - - - Time Out (Spa, Trained) - 19?? - <tape2disk hack> - - - - - - - - - Time Out (Spa, Trained, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Time Pilot (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Time Rider (Ned) - 19?? - <tape2disk hack> - - - - - - - - - Time Trax (UK) - 19?? - <tape2disk hack> - - - - - - - - - Titanic (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Titanic (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Toi Acid Game (Spa, Trained) - 19?? - <tape2disk hack> - - - - - - - - - Toi Acid Game (Spa, Trained, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Tom & Jerry (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Becky (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Toobin' (UK) - 19?? - <tape2disk hack> - - - - - - - - - Top Roller! (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Topple Zip (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - The Tower of Druaga (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Track & Field 1 (Euro) - 19?? - <cart2disk hack> - - - - - - - - - Track & Field 2 (Euro) - 19?? - <cart2disk hack> - - - - - - - - - Traffic (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Trailblazer (UK) - 19?? - <tape2disk hack> - - - - - - - - - Trantor - The Last Stormtrooper (UK) - 19?? - <tape2disk hack> - - - - - - - - - Les Tres Luces de Glaurung (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Trial Ski (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Trick Boy (Jpn) - 19?? - <tape2disk hack> - - - - - - - - - Trick Boy (Jpn, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Triple Comando (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Triple Comando (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Triton (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Tritorn (Jpn, Alt) - 19?? - <cart2disk hack> - - - - - - - - - Trivial Pursuit (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Trivial Pursuit (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Trump Aid (Jpn) - 19?? - <cart2disk hack> - - - - - - - - - Tuareg (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Tuareg (Spa, Alt) - 19?? - <tape2disk hack> - - - - - - - - - Turbo Girl (Spa) - 19?? - <tape2disk hack> - - - - - - - - - Turbo Girl (Spa, Alt) - 19?? - <tape2disk hack> + + + La Abadia del Crimen (Spain) + 1988 + Mister Chip - - + + - - Turboat (Jpn) + + + αRoid (Japan, disk conversion) 19?? <cart2disk hack> - - - - - - - Turmoil (UK) - 19?? - <tape2disk hack> - - - + - - Twin Bee (Jpn) - 19?? - <cart2disk hack> + + Aspar GP Master (Spain, disk conversion) + 1988 + Dinamic + - + + - - U-Boot (Spa) + + + Attacked (Europe, disk conversion) 19?? <tape2disk hack> - + - - Uchi Mata (UK) - 19?? - <tape2disk hack> + + La Aventura Espacial (Spain, disk conversion?) + 1990 + Aventuras AD - - + + + - - Ulises (Spa) - 19?? - <tape2disk hack> + + La Aventura Espacial (Spain, disk conversion?, alt) + 1990 + Aventuras AD - + - - Ulises (Spa, Alt) + + + Ruote e Cavenicoli (Italy, translated) 19?? <tape2disk hack> - + - - Ultra Chess (Ned) - 19?? - <tape2disk hack> + + + Bestial Warrior (Spain) + 1989 + Dinamic + - + - - Ultraman (Jpn) - 19?? - <cart2disk hack> + + Bomber Man 3D (Japan) + 1984 + Hudson Soft - + - - Underground (Spa) - 19?? - <tape2disk hack> + + + Bouken Roman - Dota (Europe, disk conversion) + 1986 + Eaglesoft + - + + - - Underground (Spa, Alt) - 19?? - <tape2disk hack> + + Bounce (Europe, disk conversion) + 1987 + Methodic Solutions + - + + - - Vacuumania (UK) + + Bouncing Block (Spain, disk conversion) 19?? <tape2disk hack> - + - - Vacuumania (UK, Alt) + + Bouncing Block (Spain, disk conversion, alt) 19?? <tape2disk hack> - + - - Valkyr (UK) + + Bousou Tokkyuu SOS - Stop the Express (Japan, disk conversion) 19?? <tape2disk hack> - + - - Vampire (Spa?) - 19?? - <tape2disk hack> + + Break In (Europe) + 1987 + Eaglesoft + - + + - - Vampire (Spa?, Alt) + + Cannon Fighter (Japan, disk conversion) 19?? <tape2disk hack> - + - - La Venganza de Johny Comomolo (Spa) + + Champions (Japan, disk conversion) 19?? <tape2disk hack> - + - - Venus Fire (Jpn) + + Cheese (Japan, disk conversion) 19?? <cart2disk hack> - - - - - - - Vestron (UK) - 19?? - <tape2disk hack> - - - - - - - - - Vestron (UK, Alt) - 19?? - <tape2disk hack> - - - + - - Vicious Viper (Jpn) - 19?? - <tape2disk hack> + + The Chess Game (Europe) + 1985 + Eaglesoft + - + + - - Video Hustler (Jpn) - 19?? - <cart2disk hack> + + The Chess Game (Europe, alt) + 1985 + Eaglesoft + - + + - - Video Poker (UK) - 19?? - <tape2disk hack> + + Chopper (Netherlands) + 1986 + Eaglesoft + - + + - - A View to a Kill (Euro) - 19?? - <tape2disk hack> + + Cosmic Sheriff (Spain, disk conversion) + 1989 + Dinamic + - + + - - Visitor - Bazar Catalunya (Spa) - 19?? - <tape2disk hack> + + Courageous Perseus (Netherlands) + 1987 + Eaglesoft + - + + + - - Void Runner (UK) + + The Designer's Pencil (US, disk conversion) 19?? - <tape2disk hack> + <cart2disk hack> - + - - Volguard (Jpn) + + Dip Dip (Spain, disk conversion) 19?? <cart2disk hack> - + - - The Wall (Spa) + + Dizzy Ball (Japan, disk conversion) 19?? <tape2disk hack> - + - - WEC Le Mans (UK) + + Driller Tanks (Japan, disk conversion) 19?? <tape2disk hack> - + - - War Chess (Spa) + + Driller Tanks (Japan, disk conversion, alt) 19?? <tape2disk hack> - + - - Warp & Warp (Jpn) + + Eddy II (Japan, disk conversion) 19?? <cart2disk hack> - + - - Warroid (Jpn) + + + Eric and the Floaters (Europe, disk conversion) 19?? <cart2disk hack> - + - - The Way of the Tiger (UK) - 19?? - <tape2disk hack> + + Fernando Martin Basket Master - Executive Version (Spain) + 1988 + Dinamic - + + - - Wedding Bells + + Les Flics (Spain, disk conversion) 19?? - <cart2disk hack> + <tape2disk hack> - + - - Wells & Fargo (Spa) - 19?? - <tape2disk hack> + + Flight Deck II (Netherlands) + 1987 + Eaglesoft + + - + + - - Wells & Fargo (Spa, Alt) - 19?? - <tape2disk hack> + + Happy Fret (Netherlands) + 1985 + Eaglesoft + - + + - - Who Dares Wins 2 (UK) - 19?? - <tape2disk hack> + + Jabato (Spain, disk conversion) + 1989 + Dinamic + - - + + - - Whopper Chase (Spa) - 19?? - <tape2disk hack> + + Jet Bomber (Netherlands) + 1986 + Aackosoft + - + + - - Whopper Chase (Spa, Alt) + + Jump Land (Japan, disk conversion) 19?? <tape2disk hack> - + - - Winter Events (UK) + + Jumping Rabbit (Japan, disk conversion) 19?? <tape2disk hack> - + - - Winter Games (UK) + + Keystone Kapers (United Kingdom, disk conversion) 19?? - <tape2disk hack> + <cart2disk hack> - + - - Winter Olympics (UK) + + Le Mans 2 (United Kingdom, disk conversion) 19?? - <tape2disk hack> + <cart2disk hack> - + - - Winterhawk (Ned) + + + Machinegun Joe vs The Mafia (Japan, disk conversion) 19?? - <tape2disk hack> + <cart2disk hack> - + - - Winterhawk (Ned, Alt) + + + The Most Amazing Memory Game (Spain, disk conversion?) 19?? <tape2disk hack> - + - - Wizard's Lair (UK, Trained) + + + El Motorista Sideral 1 + 2 (Spain, disk conversion) 19?? <tape2disk hack> - + - - World Cup Italia 90 (Spa, Hacked) + + + Music Studio G7 (Japan, disk conersion) 19?? - <tape2disk hack> + <cart2disk hack> - + - - World Games (UK) + + + Music Studio G7 (Japan, disk conversion, alt) 19?? <tape2disk hack> - + - - World Games (UK, Alt) - 19?? - <tape2disk hack> + + Ninja Jajamaru-kun (Europe) + 1986 + Eaglesoft + - + + - - Wrangler (Spa) + + + Nuts & Milk (Japan) 19?? <cart2disk hack> - + - - Wrangler (Spa, Alt) - 19?? - <tape2disk hack> + + Oh Shit! (Netherlands) + 1985 + Eaglesoft + - + + - - The Wreck (UK) + + Oil's Well (Europe)) 19?? - <tape2disk hack> + Eaglesoft + - + + - - Xenon (Spa) + + Panic Junction (United Kingdom, disk conversion) 19?? <tape2disk hack> - + - - Xybots (UK) - 19?? - <tape2disk hack> + + Pico Pico (Netherlands) + 1986 + Eaglesoft + - + + - - Xyzolog (Jpn) + + Pitfall (United Kingdom, disk conversion) 19?? <cart2disk hack> - + - - Yellow Submarine (Jpn) - 19?? - <cart2disk hack> + + Police Academy (Netherlands) + 1986 + Eaglesoft + - + + - - Yie Ar Kung-Fu (Jpn) + + Science Fiction (Netherlands) 19?? - <cart2disk hack> + Eaglesoft + - + + - - Yie Ar Kung-Fu II - The Emperor Yie-Gah (Jpn) + + The Secret Diary of Adrian Mole (United Kingdom, disk conversion) 19?? - <cart2disk hack> + <tape2disk hack> - + - - Youkai Yashiki (Jpn) - 19?? - <cart2disk hack> + + Profesional Tennis Simulator (Spain) + 1990 + Dinamic - + - - Young Sherlock - Doyle no Isan (Jpn) - 19?? - <cart2disk hack> + + Speedboat Racer (Netherlands) + 1987 + Methodic Solutions + - + + - - Zanac (Jpn) + + The Spider (Japan, disk conversion) 19?? - <cart2disk hack> + <tape2disk hack> - + - - Zanac 2nd Version (Jpn) + + Spread Sheet (United Kingdom?, disk conversion) 19?? <cart2disk hack> - + - - Zanac 2nd Version (Jpn, Alt) + + + Suparobo (Japan, disk conversion) 19?? <cart2disk hack> - - - - - - - - Zaxxon (UK) - 19?? - <tape2disk hack> - - + - - Zaxxon (Jpn) - 19?? - <cart2disk hack> + + Time Rider (Netherlands) + 1988 + Eurosoft + - + + - - Zexas (Jpn) + + + Vampire (Europe, disk conversion) 19?? <tape2disk hack> - + - - Zexas Limited (Jpn) + + + Vampire (Europe, disk conversion, alt) 19?? - <cart2disk hack> + <tape2disk hack> - + - - Zond (Spa) + + + War Chess (Spain, disk conversion) 19?? <tape2disk hack> - + - - Zoom 909 (Jpn) + + The Wreck (United Kingdom, disk conversion) 19?? - <cart2disk hack> + <tape2disk hack> - + - - Zoot (UK) - 19?? - <tape2disk hack> + + Zanac (Netherlands) + 1986 + Eaglesoft + - + + - - diff -Nru mame-0.250+dfsg.1/hash/msx2_cart.xml mame-0.251+dfsg.1/hash/msx2_cart.xml --- mame-0.250+dfsg.1/hash/msx2_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/msx2_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -17,7 +17,7 @@ --> - Inemuri-ryuu Asada Tetsuya no A-kyuu Mahjong (Jpn) + Inemuri-ryuu Asada Tetsuya no A-kyuu Mahjong (Japan) 1988 Pony Canyon @@ -33,7 +33,7 @@ - Aleste (Jpn) + Aleste (Japan) 1988 Compile @@ -48,7 +48,7 @@ - Han Seimei Senki Androgynus (Jpn) + Han Seimei Senki Androgynus (Japan) 1988 Nihon Telenet @@ -64,7 +64,7 @@ - A Ressha de Ikou - Take the A Train. (Jpn) + A Ressha de Ikou - Take the A Train. (Japan) 1989 Pony Canyon @@ -82,7 +82,7 @@ - Arkanoid 2 (Jpn) + Arkanoid 2 (Japan) 1987 Nidecom @@ -97,7 +97,7 @@ - Densetsu no Seisenshi Ashguine (Jpn) + Densetsu no Seisenshi Ashguine (Japan) 1987 Bit² @@ -112,7 +112,7 @@ - Ashguine 2 - Kokuu no Gajou (Jpn) + Ashguine 2 - Kokuu no Gajou (Japan) 1987 Panasoft / T&E Soft @@ -128,7 +128,7 @@ - Ashguine - Fukushuu no Honoo (Jpn) + Ashguine - Fukushuu no Honoo (Japan) 1987 Panasoft / Micro Cabin @@ -144,7 +144,7 @@ - Ashguine - Fukushuu no Honoo (Jpn, Alt) + Ashguine - Fukushuu no Honoo (Japan, alt) 1987 Panasoft / Micro Cabin @@ -160,7 +160,7 @@ - Taiyou no Shinden - Asteka II (Jpn) + Taiyou no Shinden - Asteka II (Japan) 1987 Nihon Falcom @@ -180,7 +180,7 @@ - Bubble Bobble (Jpn) + Bubble Bobble (Japan) 1987 Taito @@ -196,7 +196,7 @@ - The Cockpit (Jpn) + The Cockpit (Japan) 1987 Nidecom @@ -212,7 +212,7 @@ - Crimson (Jpn) + Crimson (Japan) 1987 Xtal Soft @@ -227,7 +227,7 @@ - Daikoukai Jidai (Jpn) + Daikoukai Jidai (Japan) 1990 Koei @@ -245,7 +245,7 @@ - Daisenryaku MSX2 (Jpn) + Daisenryaku MSX2 (Japan) 1986 Micro Cabin @@ -264,7 +264,7 @@ - Dragon Buster (Jpn) + Dragon Buster (Japan) 1987 Namco @@ -279,7 +279,7 @@ - Dires (Jpn) + Dires (Japan) 1988 Bothtec @@ -297,7 +297,7 @@ - Bishoujo Shashinkan - The Double Vision (Jpn) + Bishoujo Shashinkan - The Double Vision (Japan) 1988 Hard @@ -312,7 +312,7 @@ - Dragon Quest (Jpn) + Dragon Quest (Japan) 1986 enix @@ -327,7 +327,7 @@ - Dragon Quest II - Akuryou no Kamigami (Jpn) + Dragon Quest II - Akuryou no Kamigami (Japan) 1987 Enix @@ -342,7 +342,7 @@ - Darwin 4078 (Jpn) + Darwin 4078 (Japan) 1987 Hudson Soft @@ -359,7 +359,7 @@ - Dragon Slayer IV - Drasle Family (Jpn) + Dragon Slayer IV - Drasle Family (Japan) 1987 Nihon Falcom @@ -375,7 +375,7 @@ - Dynamite Bowl (Jpn) + Dynamite Bowl (Japan) 1987 Toshiba EMI @@ -392,7 +392,7 @@ - The Eidolon (Jpn) + The Eidolon (Japan) 1986 PonyCa @@ -408,7 +408,7 @@ - L'Empereur (Jpn) + L'Empereur (Japan) 1990 Koei @@ -426,7 +426,7 @@ - Europa Sensen (Jpn) + Europa Sensen (Japan) 1992 Koei @@ -444,7 +444,7 @@ - F-15 Strike Eagle (Jpn) + F-15 Strike Eagle (Japan) 1987 System Soft @@ -459,7 +459,7 @@ - Family Billiards (Jpn) + Family Billiards (Japan) 1987 Pack-In-Video @@ -475,7 +475,7 @@ - Family Boxing (Jpn) + Family Boxing (Japan) 1988 Sony @@ -490,7 +490,7 @@ - Famicle Parodic (Jpn) + Famicle Parodic (Japan) 1988 Bit² @@ -505,7 +505,7 @@ - Pro Yakyuu Family Stadium - Pennant Race (Jpn) + Pro Yakyuu Family Stadium - Pennant Race (Japan) 1989 Namco @@ -520,7 +520,7 @@ - Fantasy Zone II - The Tears of Opa-Opa (Jpn) + Fantasy Zone II - The Tears of Opa-Opa (Japan) 1987 Pony Canyon @@ -535,7 +535,7 @@ - Fire Ball (Jpn) + Fire Ball (Japan) 1987 HummingBird @@ -550,7 +550,7 @@ - Fleet Commander II - Tasogare no Kaiiki (Jpn) + Fleet Commander II - Tasogare no Kaiiki (Japan) 1990 ASCII @@ -565,7 +565,7 @@ - Gambler Jikochuushinha 2 - Jishou! Kyougou Janshi Hen (Jpn) + Gambler Jikochuushinha 2 - Jishou! Kyougou Janshi Hen (Japan) 1988 Game Arts @@ -580,7 +580,7 @@ - Garakuta (Jpn) + Garakuta (Japan) 1988 Wachi Software @@ -598,7 +598,7 @@ - Aoki Ookami to Shiroki Mejika - Genchou Hishi (Jpn) + Aoki Ookami to Shiroki Mejika - Genchou Hishi (Japan) 1992 Koei @@ -616,7 +616,7 @@ - Aoki Ookami to Shiroki Mejika - Genghis Khan (Jpn) + Aoki Ookami to Shiroki Mejika - Genghis Khan (Japan) 1988 Koei @@ -634,7 +634,7 @@ - Girly Block (Jpn) + Girly Block (Japan) 1988 The Links @@ -649,7 +649,7 @@ - Hardball (Jpn) + Hardball (Japan) 1987 Sony @@ -664,7 +664,7 @@ - Hole in One Special (Jpn) + Hole in One Special (Japan) 1987 HAL Kenkyuujo @@ -679,7 +679,7 @@ - Hydlide 3 - The Space Memories (Jpn) + Hydlide 3 - The Space Memories (Japan) 1987 T&E Soft @@ -694,7 +694,7 @@ - Ide Yousuke Meijin no Jissen Mahjong (Jpn) + Ide Yousuke Meijin no Jissen Mahjong (Japan) 1988 Pack-In Video @@ -709,7 +709,7 @@ - Inindou - Datou Nobunaga (Jpn) + Inindou - Datou Nobunaga (Japan) 1991 Koei @@ -727,7 +727,7 @@ - Ishin no Arashi (Jpn) + Ishin no Arashi (Japan) 1989 Koei @@ -765,7 +765,7 @@ --> - Kiki KaiKai (Jpn) + Kiki KaiKai (Japan) 1986 Sony @@ -780,7 +780,7 @@ - Kisei (Jpn) + Kisei (Japan) 1987 Sony @@ -798,7 +798,7 @@ - Honkaku Shougi Kitahei (Jpn) + Honkaku Shougi Kitahei (Japan) 1986 Micro Cabin @@ -815,7 +815,7 @@ - Lupin Sansei - Cagliostro no Shiro (Jpn) + Lupin Sansei - Cagliostro no Shiro (Japan) 1987 Toho @@ -849,7 +849,7 @@ --> - Maison Ikkoku (Jpn) + Maison Ikkoku (Japan) 1987 Micro Cabin @@ -864,7 +864,7 @@ - Maison Ikkoku Kanketsu Hen (Jpn) + Maison Ikkoku Kanketsu Hen (Japan) 1988 Micro Cabin @@ -879,7 +879,7 @@ - Mississippi Satsujin Jiken (Jpn) + Mississippi Satsujin Jiken (Japan) 1987 Jaleco @@ -895,7 +895,7 @@ - Moero! Nettou Yakyuu '88 (Jpn) + Moero! Nettou Yakyuu '88 (Japan) 1988 Jaleco @@ -913,7 +913,7 @@ - Mon Mon Monster (Jpn) + Mon Mon Monster (Japan) 1989 Hot-B @@ -930,7 +930,7 @@ - Final Mystery Murder Club - Satsujin Club (Jpn) + Final Mystery Murder Club - Satsujin Club (Japan) 1988 Micro Cabin @@ -946,7 +946,7 @@ - Ninja-kun - Ashura no Shou (Jpn) + Ninja-kun - Ashura no Shou (Japan) 1987 HAL Kenkyuujo @@ -961,7 +961,7 @@ - Nobunaga no Yabou - Sengoku Gunyuuden (Jpn) + Nobunaga no Yabou - Sengoku Gunyuuden (Japan) 1989 Koei @@ -979,7 +979,7 @@ - Nobunaga no Yabou - Zenkokuban (Jpn) + Nobunaga no Yabou - Zenkokuban (Japan) 1987 Koei @@ -997,7 +997,7 @@ - Nobunaga no Yabou - Bushou Fuuunroku (Jpn) + Nobunaga no Yabou - Bushou Fuuunroku (Japan) 1991 Koei @@ -1015,7 +1015,7 @@ - Ogre (Jpn) + Ogre (Japan) 1986 System Soft @@ -1032,7 +1032,7 @@ - Pac-Mania (Jpn) + Pac-Mania (Japan) 1989 Namco @@ -1048,7 +1048,7 @@ - Professional Mahjong Gokuu (Jpn) + Professional Mahjong Gokuu (Japan) 1988 ASCII @@ -1067,7 +1067,7 @@ - Project A2 - Shijou Saidai no Hyouteki (Jpn) + Project A2 - Shijou Saidai no Hyouteki (Japan) 1987 Pony @@ -1082,7 +1082,7 @@ - Pro Yakyuu Fan (Jpn) + Pro Yakyuu Fan (Japan) 1987 Nihon Telenet @@ -1097,7 +1097,7 @@ - Quinpl (Jpn) + Quinpl (Japan) 1988 Bit² @@ -1113,7 +1113,7 @@ - Rastan Saga (Jpn) + Rastan Saga (Japan) 1988 Taito @@ -1130,7 +1130,7 @@ - Relics (Jpn) + Relics (Japan) 1986 Bothtec @@ -1146,7 +1146,7 @@ - Replicart (Jpn) + Replicart (Japan) 1987 Sony @@ -1161,7 +1161,7 @@ - Return of Jelda (Jpn) + Return of Jelda (Japan) 1987 Carry Lab @@ -1176,7 +1176,7 @@ - Romancia (Jpn) + Romancia (Japan) 1986 Nihon Falcom @@ -1192,7 +1192,7 @@ - Royal Blood (Jpn) + Royal Blood (Japan) 1991 Koei @@ -1210,7 +1210,7 @@ - The Return of Ishtar (Jpn) + The Return of Ishtar (Japan) 1988 Namco @@ -1226,7 +1226,7 @@ - Sangokushi II (Jpn) + Sangokushi II (Japan) 1991 Koei @@ -1244,7 +1244,7 @@ - Scramble Formation (Jpn) + Scramble Formation (Japan) 1987 Taito @@ -1260,7 +1260,7 @@ - Seikima II Special - Akuma no Gyakushuu (Jpn) + Seikima II Special - Akuma no Gyakushuu (Japan) 1987 Sony @@ -1275,7 +1275,7 @@ - Shiryou Sensen - War of the Dead (Jpn) + Shiryou Sensen - War of the Dead (Japan) 1987 Victor Music Industry @@ -1293,7 +1293,7 @@ - Strategic Mars (Jpn) + Strategic Mars (Japan) 1989 db-Soft @@ -1307,7 +1307,7 @@ - Suikoden - Tenmei no Chikai (Jpn) + Suikoden - Tenmei no Chikai (Japan) 1989 Koei @@ -1325,7 +1325,7 @@ - Super Daisenryaku (Jpn) + Super Daisenryaku (Japan) 1988 Micro Cabin @@ -1343,7 +1343,7 @@ - Super Runner (Jpn) + Super Runner (Japan) 1987 Pony Canyon @@ -1359,7 +1359,7 @@ - Super Triton (Jpn) + Super Triton (Japan) 1986 Xain Soft @@ -1374,7 +1374,7 @@ - Teitoku no Ketsudan (Jpn) + Teitoku no Ketsudan (Japan) 1991 Koei @@ -1392,7 +1392,7 @@ - Tengoku Yoitoko (Jpn) + Tengoku Yoitoko (Japan) 1987 Taito @@ -1407,7 +1407,7 @@ - Tetris (Jpn) + Tetris (Japan) 1988 BPS @@ -1423,7 +1423,7 @@ - Topple Zip (Jpn) + Topple Zip (Japan) 1988 Bothtec @@ -1437,7 +1437,7 @@ - Ultima Exodus (Jpn) + Ultima Exodus (Japan) 1987 Pony Canyon @@ -1455,7 +1455,7 @@ - Urusei Yatsura (Jpn) + Urusei Yatsura (Japan) 1987 Micro Cabin @@ -1471,7 +1471,7 @@ - Victorious Nine II - Koukou Yakyuu Hen (Jpn) + Victorious Nine II - Koukou Yakyuu Hen (Japan) 1987 Nidecom @@ -1487,7 +1487,7 @@ - Woody Poco (Jpn) + Woody Poco (Japan) 1987 dB-Soft @@ -1503,7 +1503,7 @@ - Xevious - Fardraut Saga (Jpn) + Xevious - Fardraut Saga (Japan) 1989 Namco @@ -1518,7 +1518,7 @@ - Yaksa (Jpn) + Yaksa (Japan) 1987 Wolf Team @@ -1532,7 +1532,7 @@ - Yamamura Misa Suspense - Kyouto Ryuu no Tera Satsujin Jiken (Jpn) + Yamamura Misa Suspense - Kyouto Ryuu no Tera Satsujin Jiken (Japan) 1988 Taito @@ -1547,7 +1547,7 @@ - Yuurei-kun (Jpn) + Yuurei-kun (Japan) 1988 System Sacom @@ -1562,7 +1562,7 @@ - Zanac EX (Jpn) + Zanac EX (Japan) 1986 Pony @@ -1577,7 +1577,7 @@ - Zoids - Chuuou Tairiku no Tatakai (Jpn) + Zoids - Chuuou Tairiku no Tatakai (Japan) 1988 Toshiba EMI @@ -1592,7 +1592,7 @@ - Zukkoke Yajikita Onmitsu Douchuu (Jpn) + Zukkoke Yajikita Onmitsu Douchuu (Japan) 1987 HAL Kenkyuujo @@ -1610,7 +1610,7 @@ - 1942 (Jpn) + 1942 (Japan) 1987 ASCII @@ -1623,7 +1623,7 @@ - 1942 (Kor) + 1942 (Korea) 1987 Zemina @@ -1636,7 +1636,7 @@ - AcroJet (Jpn) + AcroJet (Japan) 1988 System Soft @@ -1650,7 +1650,7 @@ - Algeese no Tsubasa (Jpn) + Algeese no Tsubasa (Japan) 1988 Kogado @@ -1678,7 +1678,7 @@ - American Soccer (Jpn) + American Soccer (Japan) 1987 Nidecom @@ -1692,7 +1692,7 @@ - Han Seimei Senki Androgynus (Jpn, Alt) + Han Seimei Senki Androgynus (Japan, alt) 1988 Nihon Telenet @@ -1720,7 +1720,7 @@ - Arctic - Active Rail Playing (Jpn) + Arctic - Active Rail Playing (Japan) 1989 Pony Canyon @@ -1734,7 +1734,7 @@ - Arctic - Active Rail Playing (Jpn, Alt) + Arctic - Active Rail Playing (Japan, alt) 1989 Pony Canyon @@ -1750,7 +1750,7 @@ - Bubble Bobble (Jpn, Alt) + Bubble Bobble (Japan, alt) 1987 Taito @@ -1765,7 +1765,7 @@ - Contra (Jpn) + Contra (Japan) 1989 Konami @@ -1779,7 +1779,7 @@ - Darwin 4078 (Jpn, Alt) + Darwin 4078 (Japan, alt) 1987 Hudson Soft @@ -1793,7 +1793,7 @@ - Darwin 4078 (Jpn, Alt 2) + Darwin 4078 (Japan, alt 2) 1987 Hudson Soft @@ -1807,7 +1807,7 @@ - Deep Forest (Jpn) + Deep Forest (Japan) 1987 Xain Soft @@ -1821,7 +1821,7 @@ - Deep Forest (Jpn, Alt) + Deep Forest (Japan, alt) 1987 Xain Soft @@ -1835,7 +1835,7 @@ - Dragon Quest II - Akuryou no Kamigami (Jpn, Alt) + Dragon Quest II - Akuryou no Kamigami (Japan, alt) 1987 Enix @@ -1851,7 +1851,7 @@ - Dragon Slayer IV - Drasle Family (Jpn, Alt) + Dragon Slayer IV - Drasle Family (Japan, alt) 1987 Nihon Falcom @@ -1866,7 +1866,7 @@ - Druid (Jpn) + Druid (Japan) 1988 Jaleco @@ -1880,7 +1880,7 @@ - Druid (Jpn, Alt) + Druid (Japan, alt) 1988 Jaleco @@ -1894,7 +1894,7 @@ - Dynamite Bowl (Jpn, Alt) + Dynamite Bowl (Japan, alt) 1987 Toshiba EMI @@ -1910,7 +1910,7 @@ - Elthlead (Jpn) + Elthlead (Japan) 1988 NCS @@ -1927,7 +1927,7 @@ - Fantasy Zone II - The Tears of Opa-Opa (Jpn, Alt) + Fantasy Zone II - The Tears of Opa-Opa (Japan, alt) 1987 Pony Canyon @@ -1941,7 +1941,7 @@ - Gakuen Monogatari - High School Story (Jpn) + Gakuen Monogatari - High School Story (Japan) 1988 Great @@ -1955,7 +1955,7 @@ - Garyuu Ou (Jpn) + Garyuu Ou (Japan) 1987 Xain Soft @@ -1969,7 +1969,7 @@ - Garyuu Ou (Jpn, Alt) + Garyuu Ou (Japan, alt) 1987 Xain Soft @@ -1985,7 +1985,7 @@ - Gekitotsu Pennant Race - The Pro Yakyuu (Jpn) + Gekitotsu Pennant Race - The Pro Yakyuu (Japan) 1988 Konami @@ -2002,7 +2002,7 @@ - Gekitotsu Pennant Race - The Pro Yakyuu (Jpn, Alt) + Gekitotsu Pennant Race - The Pro Yakyuu (Japan, alt) 1988 Konami @@ -2019,7 +2019,7 @@ - Gekitotsu Pennant Race - The Pro Yakyuu (Jpn, Alt 2) + Gekitotsu Pennant Race - The Pro Yakyuu (Japan, alt 2) 1988 Konami @@ -2036,7 +2036,7 @@ - Gekitotsu Pennant Race - The Pro Yakyuu (Jpn, Alt 3) + Gekitotsu Pennant Race - The Pro Yakyuu (Japan, alt 3) 1988 Konami @@ -2051,7 +2051,7 @@ - Gekitotsu Pennant Race 2 (Jpn) + Gekitotsu Pennant Race 2 (Japan) 1989 Konami @@ -2065,7 +2065,7 @@ - Ganbare Goemon! Karakuri Douchuu (Jpn) + Ganbare Goemon! Karakuri Douchuu (Japan) 1987 Konami @@ -2079,7 +2079,7 @@ - Hacker (Jpn) + Hacker (Japan) 1988 Pony Canyon @@ -2093,7 +2093,7 @@ - Hai no Majutsushi (Jpn) + Hai no Majutsushi (Japan) 1989 Konami @@ -2108,7 +2108,7 @@ - Heroes of the Lance (Jpn) + Heroes of the Lance (Japan) 1991 Pony Canyon @@ -2126,7 +2126,7 @@ - Higemaru Makaijima - Nanatsu no Shima Daibouken (Jpn) + Higemaru Makaijima - Nanatsu no Shima Daibouken (Japan) 1987 Capcom @@ -2141,7 +2141,7 @@ - High School! Kimengumi (Jpn) + High School! Kimengumi (Japan) 1987 Pony Canyon @@ -2155,7 +2155,7 @@ - Hi no Tori - Houou-hen (Jpn) + Hi no Tori - Houou-hen (Japan) 1987 Konami @@ -2169,7 +2169,7 @@ - Hi no Tori - Houou-hen (Jpn, Alt) + Hi no Tori - Houou-hen (Japan, alt) 1987 Konami @@ -2183,7 +2183,7 @@ - Hi no Tori - Houou-hen (Jpn, Alt 2) + Hi no Tori - Houou-hen (Japan, alt 2) 1987 Konami @@ -2197,7 +2197,7 @@ - Hole in One Special (Jpn, Alt) + Hole in One Special (Japan, alt) 1987 HAL Kenkyuujo @@ -2213,7 +2213,7 @@ - Ikari (Jpn) + Ikari (Japan) 1987 SNK @@ -2230,7 +2230,7 @@ - Ikari (Jpn, Alt) + Ikari (Japan, alt) 1987 SNK @@ -2245,7 +2245,7 @@ - Jansei (Jpn) + Jansei (Japan) 1986 Sony @@ -2261,7 +2261,7 @@ - Jansei (Jpn, Alt) + Jansei (Japan, alt) 1986 Sony @@ -2277,7 +2277,7 @@ - Kempelen Chess (Jpn) + Kempelen Chess (Japan) 1988 Pony Canyon @@ -2291,7 +2291,7 @@ - King Kong 2 - Yomigaeru Densetsu (Jpn) + King Kong 2 - Yomigaeru Densetsu (Japan) 1986 Konami @@ -2305,7 +2305,7 @@ - King Kong 2 - Yomigaeru Densetsu (Kor) + King Kong 2 - Yomigaeru Densetsu (Korea) 1987 Zemina @@ -2318,7 +2318,7 @@ - Koronis Rift (Jpn) + Koronis Rift (Japan) 1987 Pony Canyon @@ -2333,7 +2333,7 @@ - Labyrinth (Jpn) + Labyrinth (Japan) 1987 Pack-In Video @@ -2349,7 +2349,7 @@ - Labyrinth (Jpn, Alt) + Labyrinth (Japan, alt) 1987 Pack-In Video @@ -2364,7 +2364,7 @@ - Lupin Sansei - Babylon no Ougon Densetsu (Jpn) + Lupin Sansei - Babylon no Ougon Densetsu (Japan) 1988 Toho @@ -2378,7 +2378,7 @@ - Lupin Sansei - Babylon no Ougon Densetsu (Jpn, Alt) + Lupin Sansei - Babylon no Ougon Densetsu (Japan, alt) 1988 Toho @@ -2394,7 +2394,7 @@ - Lupin Sansei - Cagliostro no Shiro (Jpn, Alt) + Lupin Sansei - Cagliostro no Shiro (Japan, alt) 1987 Toho @@ -2411,7 +2411,7 @@ - Mad Rider (Jpn) + Mad Rider (Japan) 1987 Carry Lab @@ -2428,7 +2428,7 @@ - Mad Rider (Jpn, Alt) + Mad Rider (Japan, alt) 1987 Carry Lab @@ -2443,7 +2443,7 @@ - Malaya no Hihou (Jpn) + Malaya no Hihou (Japan) 1988 Pony Canyon @@ -2459,7 +2459,7 @@ - Metal Gear (Euro?) + Metal Gear (Europe?) 1987 Konami @@ -2474,7 +2474,7 @@ - Metal Gear (Jpn) + Metal Gear (Japan) 1987 Konami @@ -2489,7 +2489,7 @@ - Metal Gear (Jpn, Virtual Console) + Metal Gear (Japan, Virtual Console) 2010 Konami @@ -2504,7 +2504,7 @@ - Metal Gear 2 - Solid Snake (Jpn) + Metal Gear 2 - Solid Snake (Japan) 1990 Konami @@ -2518,7 +2518,7 @@ - Metal Gear 2 - Solid Snake (Demo) (Jpn) + Metal Gear 2 - Solid Snake (demo) (Japan) 1990 Konami @@ -2532,7 +2532,7 @@ - Metal Gear 2 - Solid Snake (Jpn, Virtual Console) + Metal Gear 2 - Solid Snake (Japan, Virtual Console) 2010 Konami @@ -2546,7 +2546,7 @@ - Mirai (Jpn) + Mirai (Japan) 1987 Xain Soft @@ -2560,7 +2560,7 @@ - Nekketsu Juudou (Jpn) + Nekketsu Juudou (Japan) 1989 Pony Canyon @@ -2574,7 +2574,7 @@ - Nekketsu Juudou (Jpn, Alt) + Nekketsu Juudou (Japan, alt) 1989 Pony Canyon @@ -2588,7 +2588,7 @@ - Ogre (Jpn, Alt) + Ogre (Japan, alt) 1986 System Soft @@ -2602,7 +2602,7 @@ - Ouke no Tani - El Giza no Fuuin (Jpn) + Ouke no Tani - El Giza no Fuuin (Japan) 1988 Konami @@ -2616,7 +2616,7 @@ - Ouke no Tani - El Giza no Fuuin - Edit Contest Yuushuu Sakuhinshuu (Jpn) + Ouke no Tani - El Giza no Fuuin - Edit Contest Yuushuu Sakuhinshuu (Japan) 1988 Konami @@ -2630,7 +2630,7 @@ - Out Run (Jpn) + Out Run (Japan) 1988 Pony Canyon @@ -2644,7 +2644,7 @@ - Pachi Pro Densetsu (Jpn) + Pachi Pro Densetsu (Japan) 1988 HAL Kenkyuujo @@ -2658,7 +2658,7 @@ - Penguin-kun Wars 2 (Jpn) + Penguin-kun Wars 2 (Japan) 1988 ASCII @@ -2672,7 +2672,7 @@ - Penguin-kun Wars 2 (Jpn, Alt) + Penguin-kun Wars 2 (Japan, alt) 1988 ASCII @@ -2686,7 +2686,7 @@ - Predator (Jpn) + Predator (Japan) 1988 Pack-In Video @@ -2700,7 +2700,7 @@ - Quarth (Jpn) + Quarth (Japan) 1990 Konami @@ -2714,7 +2714,7 @@ - Quarth (Kor) + Quarth (Korea) 1990 Konami @@ -2727,7 +2727,7 @@ - Quarth (Demo) (Jpn) + Quarth (demo) (Japan) 1990 Konami @@ -2741,7 +2741,7 @@ - Rick to Mick no Daibouken (Jpn) + Rick to Mick no Daibouken (Japan) 1987 HummingBird @@ -2756,7 +2756,7 @@ - Sangokushi (Jpn) + Sangokushi (Japan) 1988 Koei @@ -2773,7 +2773,7 @@ - Tsuri Kichi Sanpei - Blue Marlin Hen (Jpn) + Tsuri Kichi Sanpei - Blue Marlin Hen (Japan) 1988 Victor Ongaku Sangyou @@ -2789,7 +2789,7 @@ - Tsuri Kichi Sanpei - Tsuri Sennin Hen (Jpn) + Tsuri Kichi Sanpei - Tsuri Sennin Hen (Japan) 1989 Victor Ongaku Sangyou @@ -2804,7 +2804,7 @@ - Seikima II Special - Akuma no Gyakushuu (Jpn, Alt) + Seikima II Special - Akuma no Gyakushuu (Japan, alt) 1987 Sony @@ -2818,7 +2818,7 @@ - Shanghai (Jpn) + Shanghai (Japan) 1987 System Soft @@ -2832,7 +2832,7 @@ - Space Manbow (Jpn) + Space Manbow (Japan) 1989 Konami @@ -2847,7 +2847,7 @@ - Super Rambo Special (Jpn) + Super Rambo Special (Japan) 1986 Pack-In Video @@ -2862,7 +2862,7 @@ - Star Virgin (Jpn) + Star Virgin (Japan) 1988 Pony Canyon @@ -2876,7 +2876,7 @@ - Star Virgin (Jpn, Alt) + Star Virgin (Japan, alt) 1988 Pony Canyon @@ -2890,7 +2890,7 @@ - Super Lode Runner (Jpn) + Super Lode Runner (Japan) 1987 Irem @@ -2906,7 +2906,7 @@ - Tanigawa Kouji no Shougi Shinan II (Jpn) + Tanigawa Kouji no Shougi Shinan II (Japan) 1988 Pony Canyon @@ -2923,7 +2923,7 @@ - The Treasure of Usas (Euro) ~ Uşas (Jpn) + The Treasure of Usas (Europe) ~ Uşas (Japan) 1987 Konami @@ -2937,7 +2937,7 @@ - The Treasure of Usas (Euro) ~ Uşas (Jpn) (Alt) + The Treasure of Usas (Europe) ~ Uşas (Japan) (alt) 1987 Konami @@ -2951,7 +2951,7 @@ - Vampire Killer (Euro) ~ Akumajou Dracula (Jpn) + Vampire Killer (Europe) ~ Akumajou Dracula (Japan) 1986 Konami @@ -2965,7 +2965,7 @@ - Vampire Killer (Euro) ~ Akumajou Dracula (Jpn) (Alt) + Vampire Killer (Europe) ~ Akumajou Dracula (Japan) (alt) 1986 Konami @@ -2979,7 +2979,7 @@ - Vampire Killer (Euro) ~ Akumajou Dracula (Jpn) (Alt 2) + Vampire Killer (Europe) ~ Akumajou Dracula (Japan) (alt 2) 1986 Konami @@ -2993,7 +2993,7 @@ - Vampire Killer (Euro) ~ Akumajou Dracula (Jpn) (Alt 3) + Vampire Killer (Europe) ~ Akumajou Dracula (Japan) (alt 3) 1986 Konami @@ -3008,7 +3008,7 @@ - Wizardry - Proving Grounds of Mad Overlord! (Jpn) + Wizardry - Proving Grounds of Mad Overlord! (Japan) 1988 ASCII @@ -3025,7 +3025,7 @@ - Woody Poco (Jpn, Alt) + Woody Poco (Japan, alt) 1987 dB-Soft @@ -3039,7 +3039,7 @@ - Xevious - Fardraut Saga (Jpn, Alt) + Xevious - Fardraut Saga (Japan, alt) 1989 Namco @@ -3053,7 +3053,7 @@ - Zanac EX (Jpn, Alt) + Zanac EX (Japan, alt) 1986 Pony @@ -3067,7 +3067,7 @@ - Zombie Hunter (Jpn) + Zombie Hunter (Japan) 1989 Hi-Score Software @@ -3081,7 +3081,7 @@ - Zukkoke Yajikita Onmitsu Douchuu (Jpn, Alt) + Zukkoke Yajikita Onmitsu Douchuu (Japan, alt) 1987 HAL Kenkyuujo @@ -3100,7 +3100,7 @@ - Service Test Cart MSX2 (Euro?) + Service Test Cart MSX2 (Europe?) 19?? Philips @@ -3112,7 +3112,7 @@ - Cheese 2 (Jpn) + Cheese 2 (Japan) 1985 Neos @@ -3125,7 +3125,7 @@ - Japanese MSX-Write II (Jpn) + Japanese MSX-Write II (Japan) 1988 ASCII @@ -3141,7 +3141,7 @@ - Synthe Saurus v1.1 (Jpn) + Synthe Saurus v1.1 (Japan) 1988 Bit² diff -Nru mame-0.250+dfsg.1/hash/msx2_cass.xml mame-0.251+dfsg.1/hash/msx2_cass.xml --- mame-0.250+dfsg.1/hash/msx2_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/msx2_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -16,7 +16,7 @@ --> - The Chess Game 2 (Euro) + The Chess Game 2 (Europe) 1986 Eaglesoft @@ -29,7 +29,7 @@ - Leonardo (Jpn) + Leonardo (Japan) 1987 Omega System @@ -43,7 +43,7 @@ - Red Lights of Amsterdam (Euro) + Red Lights of Amsterdam (Europe) 1986 Eaglesoft @@ -56,7 +56,7 @@ - Red Lights of Amsterdam (Euro, 2 Sides) + Red Lights of Amsterdam (Europe, 2 sides) 1986 Eaglesoft diff -Nru mame-0.250+dfsg.1/hash/msx2_flop.xml mame-0.251+dfsg.1/hash/msx2_flop.xml --- mame-0.250+dfsg.1/hash/msx2_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/msx2_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -335,7 +335,7 @@ - HalNote (Jpn) + HalNote (Japan) 1987 HAL Kenkyuujo @@ -360,7 +360,7 @@ - Snatcher (Jpn) + Snatcher (Japan) 1988 Konami @@ -388,7 +388,7 @@ - Snatcher (Jpn, Alt Disk 1) + Snatcher (Japan, alt disk 1) 1988 Konami @@ -416,7 +416,7 @@ - SD Snatcher (Jpn) + SD Snatcher (Japan) 1990 Konami @@ -444,7 +444,7 @@ - SD Snatcher (Jpn, Alt Disk 1) + SD Snatcher (Japan, alt disk 1) 1990 Konami @@ -475,7 +475,7 @@ - Dai4 no Unit - The 4th Unit (Jpn) + Dai4 no Unit - The 4th Unit (Japan) 1988 Data West @@ -486,7 +486,7 @@ - The 4th Unit 2 (Jpn) + The 4th Unit 2 (Japan) 1988 Data West @@ -497,7 +497,7 @@ - Abunai Tengu Densetsu (Jpn) + Abunai Tengu Densetsu (Japan) 1989 Alicesoft @@ -518,7 +518,7 @@ - Adventure Tsukuru v1.00 (Jpn) + Adventure Tsukuru v1.00 (Japan) 1988 MSX Magazine @@ -529,7 +529,7 @@ - L'Affaire... (Spa) + L'Affaire... (Spain) 1986 Infogrames @@ -540,7 +540,7 @@ - L'Affaire... (Spa, Alt) + L'Affaire... (Spain, alt) 1986 Infogrames @@ -552,7 +552,7 @@ - Agni no Ishi - The Stone of Agni (Jpn) + Agni no Ishi - The Stone of Agni (Japan) 1989 HummingBird Soft @@ -563,7 +563,7 @@ - Akanbe Dragon (Jpn) + Akanbe Dragon (Japan) 1988 Winky Soft @@ -574,7 +574,7 @@ - Akanbe Dragon (Jpn, Alt) + Akanbe Dragon (Japan, alt) 1988 Winky Soft @@ -585,7 +585,7 @@ - Akanbe Dragon (Jpn, Alt 2) + Akanbe Dragon (Japan, alt 2) 1988 Winky Soft @@ -596,7 +596,7 @@ - Albatross 2 - Masters' History (Jpn) + Albatross 2 - Masters' History (Japan) 1989 Telenet Japan @@ -617,7 +617,7 @@ - Albatross 2 - Masters' History (Jpn, Alt Disk 2) + Albatross 2 - Masters' History (Japan, alt disk 2) 1989 Telenet Japan @@ -638,7 +638,7 @@ - Aleste 2 (Jpn) + Aleste 2 (Japan) 1989 Compile @@ -659,7 +659,7 @@ - Aleste 2 (Jpn, Alt) + Aleste 2 (Japan, alt) 1989 Compile @@ -680,7 +680,7 @@ - Aleste 2 (Jpn, Alt 2) + Aleste 2 (Japan, alt 2) 1989 Compile @@ -701,7 +701,7 @@ - Algeese no Tsubasa (Jpn) + Algeese no Tsubasa (Japan) 1988 Kogado @@ -712,7 +712,7 @@ - Algeese no Tsubasa (Jpn, Alt) + Algeese no Tsubasa (Japan, alt) 1988 Kogado @@ -723,7 +723,7 @@ - Algo Wars (Jpn) + Algo Wars (Japan) 1989 MSX Magazine @@ -734,7 +734,7 @@ - American Success (Jpn) + American Success (Japan) 1989 Winky Soft @@ -752,7 +752,7 @@ - American Success (Jpn, Alt Disk 1) + American Success (Japan, alt disk 1) 1989 Winky Soft @@ -770,7 +770,7 @@ - Angelus (Jpn) + Angelus (Japan) 1988 Enix @@ -791,7 +791,7 @@ - Angelus (Jpn, Alt) + Angelus (Japan, alt) 1988 Enix @@ -812,7 +812,7 @@ - Ankoku Shinwa - Yamato Takeru Densetsu (Jpn) + Ankoku Shinwa - Yamato Takeru Densetsu (Japan) 1988 Tokyo Shoseki @@ -823,7 +823,7 @@ - Ankoku Shinwa - Yamato Takeru Densetsu (Jpn, Alt) + Ankoku Shinwa - Yamato Takeru Densetsu (Japan, alt) 1988 Tokyo Shoseki @@ -834,7 +834,7 @@ - Aoki Ookami to Shiroki Mejika - Genchou Hishi (Jpn) + Aoki Ookami to Shiroki Mejika - Genchou Hishi (Japan) 1992 Koei @@ -850,7 +850,7 @@ - Aoki Ookami to Shiroki Mejika - Genchou Hishi (Jpn, Alt Disk 2) + Aoki Ookami to Shiroki Mejika - Genchou Hishi (Japan, alt disk 2) 1992 Koei @@ -866,7 +866,7 @@ - Aoki Ookami to Shiroki Mejika - Genghis Khan (Jpn) + Aoki Ookami to Shiroki Mejika - Genghis Khan (Japan) 1988 Koei @@ -882,7 +882,7 @@ - Aoki Ookami to Shiroki Mejika - Genghis Khan (Jpn, Alt Disk 1) + Aoki Ookami to Shiroki Mejika - Genghis Khan (Japan, alt disk 1) 1988 Koei @@ -898,7 +898,7 @@ - Arcus (Jpn) + Arcus (Japan) 1988 WolfTeam @@ -919,7 +919,7 @@ - Arcus (Jpn, Alt) + Arcus (Japan, alt) 1988 WolfTeam @@ -940,7 +940,7 @@ - Arcus (Jpn, Alt 2) + Arcus (Japan, alt 2) 1988 WolfTeam @@ -961,7 +961,7 @@ - Arcus II - Silent Symphony (Jpn) + Arcus II - Silent Symphony (Japan) 1989 WolfTeam @@ -987,7 +987,7 @@ - Arcus II - Silent Symphony (Jpn, Alt) + Arcus II - Silent Symphony (Japan, alt) 1989 WolfTeam @@ -1013,7 +1013,7 @@ - Arcusyu - Kagerou no Jidai wo Koete (Jpn) + Arcusyu - Kagerou no Jidai wo Koete (Japan) 1989 WolfTeam @@ -1024,7 +1024,7 @@ - Arcusyu - Kagerou no Jidai wo Koete (Jpn, Alt) + Arcusyu - Kagerou no Jidai wo Koete (Japan, alt) 1989 WolfTeam @@ -1035,7 +1035,7 @@ - Aura Battler Dunbine (Jpn) + Aura Battler Dunbine (Japan) 1991 Family Soft @@ -1071,7 +1071,7 @@ - Balance of Power (Jpn) + Balance of Power (Japan) 1988 ASCII @@ -1082,7 +1082,7 @@ - Balance of Power (Jpn, Alt) + Balance of Power (Japan, alt) 1988 ASCII @@ -1093,7 +1093,7 @@ - Ball Out (Jpn) + Ball Out (Japan) 1988 MSX Magazine @@ -1104,7 +1104,7 @@ - Ball Out 2 (Jpn) + Ball Out 2 (Japan) 1988 MSX Magazine @@ -1115,7 +1115,7 @@ - Bank Buster (Ned) + Bank Buster (Netherlands) 1988 Eurosoft @@ -1126,7 +1126,7 @@ - Bank Buster (Ned, Alt) + Bank Buster (Netherlands, alt) 1988 Eurosoft @@ -1137,7 +1137,7 @@ - Bank Buster (Ned, Alt 2) + Bank Buster (Netherlands, alt 2) 1988 Eurosoft @@ -1148,7 +1148,7 @@ - Barunba (Jpn) + Barunba (Japan) 1990 Namcot @@ -1159,7 +1159,7 @@ - Barunba (Jpn, Alt) + Barunba (Japan, alt) 1990 Namcot @@ -1170,7 +1170,7 @@ - Barunba (Jpn, Alt 2) + Barunba (Japan, alt 2) 1990 Namcot @@ -1181,7 +1181,7 @@ - Barunba (Jpn, Alt 3) + Barunba (Japan, alt 3) 1990 Namcot @@ -1192,7 +1192,7 @@ - Bastard (Jpn) + Bastard (Japan) 1988 Xain Soft @@ -1203,7 +1203,7 @@ - Bastard (Jpn, Alt) + Bastard (Japan, alt) 1988 Xain Soft @@ -1214,7 +1214,7 @@ - Birdy World (Jpn) + Birdy World (Japan) 1992 Birdy Soft @@ -1235,7 +1235,7 @@ - Bishoujo Control (Jpn) + Bishoujo Control (Japan) 1989 Hard @@ -1246,7 +1246,7 @@ - Bishoujo Control (Jpn, Alt) + Bishoujo Control (Japan, alt) 1989 Hard @@ -1257,7 +1257,7 @@ - Bishoujo Daizukan (Jpn) + Bishoujo Daizukan (Japan) 1992 Fairytale - Santa Fe @@ -1278,7 +1278,7 @@ - Bishoujo Shashinkan - Moving School + Studio Cut (Jpn) + Bishoujo Shashinkan - Moving School + Studio Cut (Japan) 1987 Hard @@ -1289,7 +1289,7 @@ - Block Terminator (Jpn) + Block Terminator (Japan) 1988 Dot Plan @@ -1300,7 +1300,7 @@ - Breaker (Ned) + Breaker (Netherlands) 1987 Philips @@ -1311,7 +1311,7 @@ - Breaker (Ned, Alt) + Breaker (Netherlands, alt) 1987 Philips @@ -1322,7 +1322,7 @@ - Breaker. (Jpn) + Breaker. (Japan) 1989 Jast @@ -1338,7 +1338,7 @@ - Burai Joukan (Jpn) + Burai Joukan (Japan) 1989 Riverhill Soft @@ -1374,7 +1374,7 @@ - Burai Joukan (Jpn, Alt) + Burai Joukan (Japan, alt) 1989 Riverhill Soft @@ -1410,7 +1410,7 @@ - Burai Gekan - Kanketsu Hen (Jpn) + Burai Gekan - Kanketsu Hen (Japan) 1992 Brother Industries @@ -1462,7 +1462,7 @@ - Burai II (Jpn, Alt) + Burai II (Japan, alt) 1992 Brother Industries @@ -1514,7 +1514,7 @@ - Cal (Jpn) + Cal (Japan) 1991 Birdy Soft @@ -1535,7 +1535,7 @@ - Cal 2 (Jpn) + Cal 2 (Japan) 1992 Birdy Soft @@ -1566,7 +1566,7 @@ - Can Can Bunny Superior (Jpn) + Can Can Bunny Superior (Japan) 1990 Cocktail Soft @@ -1587,7 +1587,7 @@ - Can Can Bunny Spirits (Jpn) + Can Can Bunny Spirits (Japan) 1991 Cocktail Soft @@ -1613,7 +1613,7 @@ - Casablanca (Jpn) + Casablanca (Japan) 1988 Thinking Rabbit @@ -1629,7 +1629,7 @@ - Chaos Angels (Jpn) + Chaos Angels (Japan) 1989 ASCII @@ -1645,7 +1645,7 @@ - Chaos Angels (Jpn, Alt) + Chaos Angels (Japan, alt) 1989 ASCII @@ -1661,7 +1661,7 @@ - Chaos Angels (Jpn, Alt 2) + Chaos Angels (Japan, alt 2) 1989 ASCII @@ -1677,7 +1677,7 @@ - The Chess Game 2 (Ned) + The Chess Game 2 (Netherlands) 1986 Eaglesoft @@ -1688,7 +1688,7 @@ - The Chess Game 2 (Ned, Alt) + The Chess Game 2 (Netherlands, alt) 1986 Eaglesoft @@ -1699,7 +1699,7 @@ - The Chess Game 2 (Ned, Alt 2) + The Chess Game 2 (Netherlands, alt 2) 1986 Eaglesoft @@ -1710,7 +1710,7 @@ - The Chess Game 2 (Ned, Alt 3) + The Chess Game 2 (Netherlands, alt 3) 1986 Eaglesoft @@ -1721,7 +1721,7 @@ - Chopper II (Ned) + Chopper II (Netherlands) 1986 Eaglesoft @@ -1732,7 +1732,7 @@ - Chopper II (Ned, Alt) + Chopper II (Netherlands, alt) 1986 Eaglesoft @@ -1743,7 +1743,7 @@ - Chuka Taisen (Jpn) + Chuka Taisen (Japan) 1988 Hot-B @@ -1754,7 +1754,7 @@ - Chuka Taisen (Jpn, Alt) + Chuka Taisen (Japan, alt) 1988 Hot-B @@ -1765,7 +1765,7 @@ - Chuka Taisen (Jpn, Alt 2) + Chuka Taisen (Japan, alt 2) 1988 Hot-B @@ -1776,7 +1776,7 @@ - City Fight (Jpn) + City Fight (Japan) 1986 Pony Canyon @@ -1787,7 +1787,7 @@ - City Fight (Jpn, Alt) + City Fight (Japan, alt) 1986 Pony Canyon @@ -1798,7 +1798,7 @@ - Columns (Jpn) + Columns (Japan) 1990 Telenet Japan @@ -1809,7 +1809,7 @@ - Columns (Jpn, Alt) + Columns (Japan, alt) 1990 Telenet Japan @@ -1820,7 +1820,7 @@ - Columns (Jpn, Alt 2) + Columns (Japan, alt 2) 1990 Telenet Japan @@ -1831,7 +1831,7 @@ - Columns (Jpn, Alt 3) + Columns (Japan, alt 3) 1990 Telenet Japan @@ -1842,7 +1842,7 @@ - Cosmos Club (Jpn) + Cosmos Club (Japan) 1989 Jast @@ -1858,7 +1858,7 @@ - Crescent Moon (Jpn) + Crescent Moon (Japan) 1990 Alicesoft @@ -1874,7 +1874,7 @@ - Crimson (Jpn) + Crimson (Japan) 1987 Scaptrust @@ -1885,7 +1885,7 @@ - Crimson (Jpn, Alt) + Crimson (Japan, alt) 1987 Scaptrust @@ -1896,7 +1896,7 @@ - Crimson II (Jpn) + Crimson II (Japan) 1989 XtalSoft @@ -1912,7 +1912,7 @@ - Crimson II (Jpn, Alt) + Crimson II (Japan, alt) 1989 XtalSoft @@ -1928,7 +1928,7 @@ - Crimson III (Jpn) + Crimson III (Japan) 1990 XtalSoft @@ -1949,7 +1949,7 @@ - Crimson III (Jpn, Alt Disk 1) + Crimson III (Japan, alt disk 1) 1990 XtalSoft @@ -1970,7 +1970,7 @@ - D' (Jpn) + D' (Japan) 1988 Techno Soft @@ -1981,7 +1981,7 @@ - D' (Jpn, Alt) + D' (Japan, alt) 1988 Techno Soft @@ -1992,7 +1992,7 @@ - D' (Jpn, Alt 2) + D' (Japan, alt 2) 1988 Techno Soft @@ -2003,7 +2003,7 @@ - Da Vinci (Jpn) + Da Vinci (Japan) 1989 Popcom Soft @@ -2014,7 +2014,7 @@ - Daikoukai Jidai (Jpn) + Daikoukai Jidai (Japan) 1990 Koei @@ -2030,7 +2030,7 @@ - Daisenryaku II - Campaign Version (Jpn) + Daisenryaku II - Campaign Version (Japan) 1992 Micro Cabin @@ -2048,7 +2048,7 @@ - Daisenryaku II - Campaign Version (Jpn, Alt) + Daisenryaku II - Campaign Version (Japan, alt) 1992 Micro Cabin @@ -2066,7 +2066,7 @@ - Daisenryaku (Jpn) + Daisenryaku (Japan) 1987 Micro Cabin @@ -2077,7 +2077,7 @@ - Daisenryaku (Jpn, Alt) + Daisenryaku (Japan, alt) 1987 Micro Cabin @@ -2088,7 +2088,7 @@ - Daisenryaku (Jpn, Alt 2) + Daisenryaku (Japan, alt 2) 1987 Micro Cabin @@ -2099,7 +2099,7 @@ - Daisenryaku (Jpn, Alt 3) + Daisenryaku (Japan, alt 3) 1987 Micro Cabin @@ -2110,7 +2110,7 @@ - Daiva Story 5: The Cup of Soma (Jpn) + Daiva Story V - The Cup of Soma (Japan) 1987 T&E Soft @@ -2122,7 +2122,7 @@ - Daiva Story 5: The Cup of Soma (Jpn, Alt) + Daiva Story V - The Cup of Soma (Japan, alt) 1987 T&E Soft @@ -2134,7 +2134,7 @@ - Daiva Story 5: The Cup of Soma (Jpn, Alt 2) + Daiva Story V - The Cup of Soma (Japan, alt 2) 1987 T&E Soft @@ -2146,7 +2146,7 @@ - Dancing Mai (Jpn) + Dancing Mai (Japan) 1991 Fairytale @@ -2172,7 +2172,7 @@ - Dante (Jpn) + Dante (Japan) 1990 MSX Magazine @@ -2183,7 +2183,7 @@ - Dante (Jpn, Alt) + Dante (Japan, alt) 1990 MSX Magazine @@ -2194,7 +2194,7 @@ - Dante 2 (Jpn) + Dante 2 (Japan) 1992 MSX Magazine @@ -2224,7 +2224,7 @@ - Dante 2 (Jpn, Alt Disk 2) + Dante 2 (Japan, alt disk 2) 1992 MSX Magazine @@ -2254,7 +2254,7 @@ - Darwin 4078 (Jpn) + Darwin 4078 (Japan) 1988 Hudson Soft @@ -2265,7 +2265,7 @@ - Darwin 4078 (Jpn, Alt) + Darwin 4078 (Japan, alt) 1988 Hudson Soft @@ -2276,7 +2276,7 @@ - Darwin 4078 (Jpn, Alt 2) + Darwin 4078 (Japan, alt 2) 1988 Hudson Soft @@ -2287,7 +2287,7 @@ - De·Ja (Jpn) + De Ja (Japan) 1990 Elf @@ -2323,7 +2323,7 @@ - Dead of the Brain - Shiryou no Sakebi (Jpn) + Dead of the Brain - Shiryou no Sakebi (Japan) 1992 Fairytale @@ -2344,7 +2344,7 @@ - Dead of the Brain - Shiryou no Sakebi (Jpn, Alt) + Dead of the Brain - Shiryou no Sakebi (Japan, alt) 1992 Fairytale @@ -2365,7 +2365,7 @@ - Deep Forest (Jpn) + Deep Forest (Japan) 1987 Xain Soft @@ -2376,7 +2376,7 @@ - Deep Forest (Jpn, Alt) + Deep Forest (Japan, alt) 1987 Xain Soft @@ -2387,7 +2387,7 @@ - Deep Forest (Jpn, Alt 2) + Deep Forest (Japan, alt 2) 1987 Xain Soft @@ -2398,7 +2398,7 @@ - Deep Forest (Jpn, Alt 3) + Deep Forest (Japan, alt 3) 1987 Xain Soft @@ -2409,7 +2409,7 @@ - Dennou Gakuen 1 - Cybernetic Hi-School (Jpn) + Dennou Gakuen 1 - Cybernetic Hi-School (Japan) 1990 Gainax @@ -2425,7 +2425,7 @@ - Dennou Gakuen 1 - Cybernetic Hi-School (Jpn, Alt) + Dennou Gakuen 1 - Cybernetic Hi-School (Japan, alt) 1990 Gainax @@ -2441,7 +2441,7 @@ - Dennou Gakuen 1 - Cybernetic Hi-School (Jpn, Alt 2) + Dennou Gakuen 1 - Cybernetic Hi-School (Japan, alt 2) 1990 Gainax @@ -2457,7 +2457,7 @@ - Dennou Gakuen 2 - Cybernetic Hi-School Part 2 - Highway Buster (Jpn) + Dennou Gakuen 2 - Cybernetic Hi-School Part 2 - Highway Buster (Japan) 1990 Gainax @@ -2478,7 +2478,7 @@ - Dennou Gakuen 2 - Cybernetic Hi-School Part 2 - Highway Buster (Jpn, Alt) + Dennou Gakuen 2 - Cybernetic Hi-School Part 2 - Highway Buster (Japan, alt) 1990 Gainax @@ -2499,7 +2499,7 @@ - Dennou Gakuen 2 - Cybernetic Hi-School Part 2 - Highway Buster (Jpn, Alt 2) + Dennou Gakuen 2 - Cybernetic Hi-School Part 2 - Highway Buster (Japan, alt 2) 1990 Gainax @@ -2520,7 +2520,7 @@ - Dennou Gakuen 3 - Cybernetic Hi-School Part III - Top wo Nerae! (Jpn) + Dennou Gakuen 3 - Cybernetic Hi-School Part III - Top wo Nerae! (Japan) 1990 Gainax @@ -2541,7 +2541,7 @@ - Dennou Gakuen 3 - Cybernetic Hi-School Part III - Top wo Nerae! (Jpn, Alt) + Dennou Gakuen 3 - Cybernetic Hi-School Part III - Top wo Nerae! (Japan, alt) 1990 Gainax @@ -2562,7 +2562,7 @@ - Diablo (Jpn) + Diablo (Japan) 1989 Broderbund Japan @@ -2573,7 +2573,7 @@ - Diablo (Jpn, Alt) + Diablo (Japan, alt) 1989 Broderbund Japan @@ -2584,7 +2584,7 @@ - Diablo (Jpn, Alt 2) + Diablo (Japan, alt 2) 1989 Broderbund Japan @@ -2595,7 +2595,7 @@ - Diablo (Jpn, Alt 3) + Diablo (Japan, alt 3) 1989 Broderbund Japan @@ -2606,7 +2606,7 @@ - Gdleen - Digan no Maseki (Jpn) + Gdleen - Digan no Maseki (Japan) 1989 Artec @@ -2648,7 +2648,7 @@ - Gdleen - Digan no Maseki (Jpn, Alt) + Gdleen - Digan no Maseki (Japan, alt) 1989 Artec @@ -2690,7 +2690,7 @@ - Digger (Ger) + Digger (Germany) 1987 Data Beutner @@ -2701,7 +2701,7 @@ - Digger (Ger, Alt) + Digger (Germany, alt) 1987 Data Beutner @@ -2712,7 +2712,7 @@ - Digger (Ger, Alt 2) + Digger (Germany, alt 2) 1987 Data Beutner @@ -2723,7 +2723,7 @@ - Dios (Jpn) + Dios (Japan) 1989 Xain Soft @@ -2755,7 +2755,7 @@ - Dios (Jpn, Alt) + Dios (Japan, alt) 1989 Xain Soft @@ -2787,7 +2787,7 @@ - Dios (Jpn, Alt 2) + Dios (Japan, alt 2) 1989 Xain Soft @@ -2819,7 +2819,7 @@ - [Dires] - Giger . Loop (Jpn) + [Dires] - Giger . Loop (Japan) 1987 Bothtec @@ -2830,7 +2830,7 @@ - [Dires] - Giger . Loop (Jpn, Alt) + [Dires] - Giger . Loop (Japan, alt) 1987 Bothtec @@ -2841,7 +2841,7 @@ - Disc Station - Soukan Junbi-0-Go (Jpn) + Disc Station - Soukan Junbi-0-Go (Japan) 1988 Compile @@ -2852,7 +2852,7 @@ - Disc Station - Soukan-1-Go (Jpn) + Disc Station - Soukan-1-Go (Japan) 1988 Compile @@ -2863,7 +2863,7 @@ - Disc Station - Dai-2-Go (Jpn) + Disc Station - Dai-2-Go (Japan) 1988 Compile @@ -2879,7 +2879,7 @@ - Disc Station #3 (Jpn) + Disc Station #3 (Japan) 1989 Compile @@ -2895,7 +2895,7 @@ - Disc Station #4 (Jpn) + Disc Station #4 (Japan) 1989 Compile @@ -2911,7 +2911,7 @@ - Disc Station #5 (Jpn) + Disc Station #5 (Japan) 1989 Compile @@ -2927,7 +2927,7 @@ - Disc Station #6 (Jpn) + Disc Station #6 (Japan) 1989 Compile @@ -2948,7 +2948,7 @@ - Disc Station #7 (Jpn) + Disc Station #7 (Japan) 1989 Compile @@ -2964,7 +2964,7 @@ - Disc Station #8 (Jpn) + Disc Station #8 (Japan) 1989 Compile @@ -2985,7 +2985,7 @@ - Disc Station #9 (Jpn) + Disc Station #9 (Japan) 1990 Compile @@ -3001,7 +3001,7 @@ - Disc Station #10 (Jpn) + Disc Station #10 (Japan) 1990 Compile @@ -3017,7 +3017,7 @@ - Disc Station #11 (Jpn) + Disc Station #11 (Japan) 1990 Compile @@ -3033,7 +3033,7 @@ - Disc Station #12 (Jpn) + Disc Station #12 (Japan) 1990 Compile @@ -3049,7 +3049,7 @@ - Disc Station #13 (Jpn) + Disc Station #13 (Japan) 1990 Compile @@ -3065,7 +3065,7 @@ - Disc Station #14 (Jpn) + Disc Station #14 (Japan) 1990 Compile @@ -3081,7 +3081,7 @@ - Disc Station #15 (Jpn) + Disc Station #15 (Japan) 1990 Compile @@ -3097,7 +3097,7 @@ - Disc Station #16 (Jpn) + Disc Station #16 (Japan) 1990 Compile @@ -3113,7 +3113,7 @@ - Disc Station #17 (Jpn) + Disc Station #17 (Japan) 1990 Compile @@ -3129,7 +3129,7 @@ - Disc Station #18 (Jpn) + Disc Station #18 (Japan) 1990 Compile @@ -3145,7 +3145,7 @@ - Disc Station #19 (Jpn) + Disc Station #19 (Japan) 1990 Compile @@ -3161,7 +3161,7 @@ - Disc Station #20 (Jpn) + Disc Station #20 (Japan) 1990 Compile @@ -3182,7 +3182,7 @@ - Disc Station #21 (Jpn) + Disc Station #21 (Japan) 1990 Compile @@ -3198,7 +3198,7 @@ - Disc Station #22 (Jpn) + Disc Station #22 (Japan) 1991 Compile @@ -3214,7 +3214,7 @@ - Disc Station #23 (Jpn) + Disc Station #23 (Japan) 1991 Compile @@ -3230,7 +3230,7 @@ - Disc Station #24 (Jpn) + Disc Station #24 (Japan) 1991 Compile @@ -3246,7 +3246,7 @@ - Disc Station #25 (Jpn) + Disc Station #25 (Japan) 1991 Compile @@ -3262,7 +3262,7 @@ - Disc Station #26 (Jpn) + Disc Station #26 (Japan) 1991 Compile @@ -3278,7 +3278,7 @@ - Disc Station #27 (Jpn) + Disc Station #27 (Japan) 1991 Compile @@ -3294,7 +3294,7 @@ - Disc Station #28 (Jpn) + Disc Station #28 (Japan) 1991 Compile @@ -3310,7 +3310,7 @@ - Disc Station #29 (Jpn) + Disc Station #29 (Japan) 1991 Compile @@ -3326,7 +3326,7 @@ - Disc Station #30 (Jpn) + Disc Station #30 (Japan) 1991 Compile @@ -3342,7 +3342,7 @@ - Disc Station #31 (Jpn) + Disc Station #31 (Japan) 1991 Compile @@ -3358,7 +3358,7 @@ - Disc Station #32 (Jpn) + Disc Station #32 (Japan) 1992 Compile @@ -3384,7 +3384,7 @@ - Disc Station Deluxe 1 (Jpn) + Disc Station Deluxe 1 (Japan) 1990 Compile @@ -3397,7 +3397,7 @@ - Disc Station Deluxe 2 (Jpn) + Disc Station Deluxe 2 (Japan) 1990 Compile @@ -3415,7 +3415,7 @@ - Disc Station Deluxe 3 (Jpn) + Disc Station Deluxe 3 (Japan) 1990 Compile @@ -3433,7 +3433,7 @@ - Disc Station Special 2 (Jpn) + Disc Station Special 2 (Japan) 1988 Compile @@ -3454,7 +3454,7 @@ - Disc Station Special 5 (Jpn) + Disc Station Special 5 (Japan) 1988 Compile @@ -3475,7 +3475,7 @@ - Disk Mystery #4 - The Man I Love (Jpn) + Disk Mystery #4 - The Man I Love (Japan) 1988 Thinking Rabbit @@ -3491,7 +3491,7 @@ - Doki Doki Card League (Jpn) + Doki Doki Card League (Japan) 1990 Great @@ -3507,7 +3507,7 @@ - Doki Doki Card League (Jpn, Alt) + Doki Doki Card League (Japan, alt) 1990 Great @@ -3523,7 +3523,7 @@ - The Dome (Jpn) + The Dome (Japan) 1989 System Sacom @@ -3539,7 +3539,7 @@ - Dot Designer's Club (Jpn) + Dot Designer's Club (Japan) 1989 T&E Soft @@ -3550,7 +3550,7 @@ - Dot Designer's Club (Jpn, Alt) + Dot Designer's Club (Japan, alt) 1989 T&E Soft @@ -3561,7 +3561,7 @@ - Dot Designer's Club (Jpn, Alt 2) + Dot Designer's Club (Japan, alt 2) 1989 T&E Soft @@ -3572,7 +3572,7 @@ - Dr. Stop! (Jpn) + Dr. Stop! (Japan) 1990 Alicesoft @@ -3598,7 +3598,7 @@ - Dr. Stop! (Jpn, Alt) + Dr. Stop! (Japan, alt) 1990 Alicesoft @@ -3624,7 +3624,7 @@ - Dragon Buster (Jpn) + Dragon Buster (Japan) 1987 Namcot @@ -3635,7 +3635,7 @@ - Dragon Buster (Jpn, Alt) + Dragon Buster (Japan, alt) 1987 Namcot @@ -3646,7 +3646,7 @@ - Dragon City X Shitei (Jpn) + Dragon City X Shitei (Japan) 1991 Fairytale @@ -3672,7 +3672,7 @@ - Dragon City X Shitei (Jpn, Alt) + Dragon City X Shitei (Japan, alt) 1991 Fairytale @@ -3698,7 +3698,7 @@ - Dragon Eyes (Jpn) + Dragon Eyes (Japan) 1991 Technopolis Soft @@ -3724,7 +3724,7 @@ - Dragon Knight (Jpn) + Dragon Knight (Japan) 1990 Elf @@ -3750,7 +3750,7 @@ - Dragon Knight (Jpn, Alt) + Dragon Knight (Japan, alt) 1990 Elf @@ -3776,7 +3776,7 @@ - Dragon Knight II (Jpn) + Dragon Knight II (Japan) 1991 Elf @@ -3827,7 +3827,7 @@ - Dragon Knight II (Jpn, Alt) + Dragon Knight II (Japan, alt) 1991 Elf @@ -3878,7 +3878,7 @@ - Dragon Quiz (Jpn) + Dragon Quiz (Japan) 1991 Compile @@ -3894,7 +3894,7 @@ - Dragon Quiz (Jpn, Alt) + Dragon Quiz (Japan, alt) 1991 Compile @@ -3910,7 +3910,7 @@ - Dragon Slayer - Eiyuu Densetsu (Jpn) + Dragon Slayer - Eiyuu Densetsu (Japan) 1990 Falcom @@ -3946,7 +3946,7 @@ - Dragon Slayer - Eiyuu Densetsu (Jpn, Alt) + Dragon Slayer - Eiyuu Densetsu (Japan, alt) 1990 Falcom @@ -3978,7 +3978,7 @@ - D.P.S. - Dream Program System (Jpn) + D.P.S. - Dream Program System (Japan) 1989 Alicesoft @@ -3994,7 +3994,7 @@ - D.P.S. - Dream Program System (Jpn, Alt) + D.P.S. - Dream Program System (Japan, alt) 1989 Alicesoft @@ -4010,7 +4010,7 @@ - D.P.S. - Dream Program System (Jpn, Alt 2) + D.P.S. - Dream Program System (Japan, alt 2) 1989 Alicesoft @@ -4026,7 +4026,7 @@ - D.P.S. SG - Dream Program System SG (Jpn) + D.P.S. SG - Dream Program System SG (Japan) 1990 Alicesoft @@ -4052,7 +4052,7 @@ - D.P.S. SG - Dream Program System SG (Jpn, Alt) + D.P.S. SG - Dream Program System SG (Japan, alt) 1990 Alicesoft @@ -4078,7 +4078,7 @@ - D.P.S. SG 2 - Dream Program System SG Set 2 (Jpn) + D.P.S. SG 2 - Dream Program System SG Set 2 (Japan) 1990 Alicesoft @@ -4104,7 +4104,7 @@ - D.P.S. SG 3 - Dream Program System SG Set 3 (Jpn) + D.P.S. SG 3 - Dream Program System SG Set 3 (Japan) 1990 Alicesoft @@ -4130,7 +4130,7 @@ - D.P.S. SG 3 - Dream Program System SG Set 3 (Jpn, Alt) + D.P.S. SG 3 - Dream Program System SG Set 3 (Japan, alt) 1990 Alicesoft @@ -4156,7 +4156,7 @@ - D.P.S. SG 3 - Dream Program System SG Set 3 (Jpn, Alt 2) + D.P.S. SG 3 - Dream Program System SG Set 3 (Japan, alt 2) 1990 Alicesoft @@ -4182,7 +4182,7 @@ - Druid (Jpn) + Druid (Japan) 1987 Nippon Dexter @@ -4193,7 +4193,7 @@ - Dual Targets - The 4th Unit Act. 3 (Jpn) + Dual Targets - The 4th Unit Act. 3 (Japan) 1989 Data West @@ -4209,7 +4209,7 @@ - Dynamic Publisher (Spa) + Dynamic Publisher (Spain) 1988 R.B. Soft @@ -4220,7 +4220,7 @@ - Dynamic Publisher (Spa, Alt) + Dynamic Publisher (Spain, alt) 1988 R.B. Soft @@ -4231,7 +4231,7 @@ - Ease - Philips Desktop v1.4 (Euro) + Ease - Philips Desktop v1.4 (Europe) 1988 Philips @@ -4242,7 +4242,7 @@ - Ease - Philips Desktop v1.1 (Euro) + Ease - Philips Desktop v1.1 (Europe) 1988 Philips @@ -4253,7 +4253,7 @@ - Ease - Philips Desktop v1.1 (Euro, Alt) + Ease - Philips Desktop v1.1 (Europe, alt) 1988 Philips @@ -4264,7 +4264,7 @@ - Ease - Philips Desktop v1.1 (Ita) + Ease - Philips Desktop v1.1 (Italy) 1988 Philips @@ -4275,7 +4275,7 @@ - Ease - Philips Desktop v1.1 (Ita, Alt) + Ease - Philips Desktop v1.1 (Italy, alt) 1988 Philips @@ -4286,7 +4286,7 @@ - Eindeloos (Ned) + Eindeloos (Netherlands) 1986 Radarsoft @@ -4297,7 +4297,7 @@ - Endlos (Ger) + Endlos (Germany) 1986 Radarsoft @@ -4308,7 +4308,7 @@ - Endlos (Ger, Alt) + Endlos (Germany, alt) 1986 Radarsoft @@ -4319,7 +4319,7 @@ - Elle (Jpn) + Elle (Japan) 1992 Elf @@ -4360,7 +4360,7 @@ - Elle (Jpn, Alt) + Elle (Japan, alt) 1992 Elf @@ -4401,7 +4401,7 @@ - Emerald Dragon (Jpn) + Emerald Dragon (Japan) 1990 Glodia @@ -4437,7 +4437,7 @@ - Emerald Dragon (Jpn, Alt) + Emerald Dragon (Japan, alt) 1990 Glodia @@ -4473,7 +4473,7 @@ - L'Empereur (Jpn) + L'Empereur (Japan) 1990 Koei @@ -4489,7 +4489,7 @@ - L'Empereur (Jpn, Alt) + L'Empereur (Japan, alt) 1990 Koei @@ -4505,7 +4505,7 @@ - English Holidays (Euro?) + English Holidays (Europe?) 1986 Philips @@ -4516,7 +4516,7 @@ - English Holidays (Euro?, Alt) + English Holidays (Europe?, alt) 1986 Philips @@ -4527,7 +4527,7 @@ - Estland Monogatari - Estland Campaing (Jpn) + Estland Monogatari - Estland Campaing (Japan) 1991 Medo @@ -4545,7 +4545,7 @@ - Estland Monogatari - Estland Campaing (Jpn, Alt Game Disk) + Estland Monogatari - Estland Campaing (Japan, alt Game Disk) 1991 Medo @@ -4563,7 +4563,7 @@ - Europa Sensen (Jpn) + Europa Sensen (Japan) 1992 Koei @@ -4579,7 +4579,7 @@ - Europa Sensen (Jpn, Alt Disk 2) + Europa Sensen (Japan, alt disk 2) 1992 Koei @@ -4595,7 +4595,7 @@ - Exterlien (Jpn) + Exterlien (Japan) 1990 D.O. @@ -4616,7 +4616,7 @@ - Exterlien (Jpn, Alt) + Exterlien (Japan, alt) 1990 D.O. @@ -4637,7 +4637,7 @@ - Exterlien (Jpn, Alt 2) + Exterlien (Japan, alt 2) 1990 D.O. @@ -4658,7 +4658,7 @@ - Exterlien (Jpn, Alt 3) + Exterlien (Japan, alt 3) 1990 D.O. @@ -4679,7 +4679,7 @@ - F1 Douchuuki (Jpn) + F1 Douchuuki (Japan) 1990 Namcot @@ -4690,7 +4690,7 @@ - Fahrenheit 451 (Spa, Cracked) + Fahrenheit 451 (Spain, cracked) 1986 Idealogic @@ -4711,7 +4711,7 @@ - Famicle Parodic 2 (Jpn) + Famicle Parodic 2 (Japan) 1990 Bit² @@ -4727,7 +4727,7 @@ - Feedback (Jpn) + Feedback (Japan) 1988 Tecno Soft @@ -4738,7 +4738,7 @@ - Feedback (Jpn, Alt) + Feedback (Japan, alt) 1988 Tecno Soft @@ -4749,7 +4749,7 @@ - Feedback (Jpn, Alt 2) + Feedback (Japan, alt 2) 1988 Tecno Soft @@ -4760,7 +4760,7 @@ - The Fighting Wolf AT (Jpn) + The Fighting Wolf AT (Japan) 1990 Technopolis Soft @@ -4771,7 +4771,7 @@ - The Fighting Wolf AT (Jpn, Alt) + The Fighting Wolf AT (Japan, alt) 1990 Technopolis Soft @@ -4782,7 +4782,7 @@ - The Fighting Wolf AT (Jpn, Alt 2) + The Fighting Wolf AT (Japan, alt 2) 1990 Technopolis Soft @@ -4793,7 +4793,7 @@ - Final Countdown (Ned) + Final Countdown (Netherlands) 1988 Methodic Solutions @@ -4804,7 +4804,7 @@ - Final Countdown (Ned)[a] + Final Countdown (Netherlands, alt) 1988 Methodic Solutions @@ -4815,7 +4815,7 @@ - Final Fantasy (Jpn) + Final Fantasy (Japan) 1989 Micro Cabin @@ -4833,7 +4833,7 @@ - Final Fantasy (Jpn, Alt) + Final Fantasy (Japan, alt) 1989 Micro Cabin @@ -4851,7 +4851,7 @@ - Final Fantasy (Jpn, Alt 2) + Final Fantasy (Japan, alt 2) 1989 Micro Cabin @@ -4869,7 +4869,7 @@ - Final Fantasy (Jpn, Alt 3) + Final Fantasy (Japan, alt 3) 1989 Micro Cabin @@ -4887,7 +4887,7 @@ - Final Potential (Jpn) + Final Potential (Japan) 1990 MSX Magazine @@ -4898,7 +4898,7 @@ - Fire Hawk ~ Thexder The Second Contact (Jpn) + Fire Hawk ~ Thexder The Second Contact (Japan) 1989 Game Arts @@ -4914,7 +4914,7 @@ - Fire Hawk ~ Thexder The Second Contact (Jpn, Alt) + Fire Hawk ~ Thexder The Second Contact (Japan, alt) 1989 Game Arts @@ -4931,7 +4931,7 @@ - Fire Hawk ~ Thexder The Second Contact (Jpn, Alt 2) + Fire Hawk ~ Thexder The Second Contact (Japan, alt 2) 1989 Game Arts @@ -4947,7 +4947,7 @@ - Fire Hawk ~ Thexder The Second Contact (Jpn, Alt 3) + Fire Hawk ~ Thexder The Second Contact (Japan, alt 3) 1989 Game Arts @@ -4963,7 +4963,7 @@ - Fire Hawk ~ Thexder The Second Contact (Jpn, Alt 4) + Fire Hawk ~ Thexder The Second Contact (Japan, alt 4) 1989 Game Arts @@ -4979,7 +4979,7 @@ - For The Day II (Kor) + For The Day II (Korea) 1990 Mirinae Soft @@ -5000,7 +5000,7 @@ - For the Day II (Kor, Alt) + For the Day II (Korea, alt) 1990 Mirinae Soft @@ -5021,7 +5021,7 @@ - Fray - In Magical Adventure (Jpn) + Fray - In Magical Adventure (Japan) 1990 Micro Cabin @@ -5051,7 +5051,7 @@ - Fray - In Magical Adventure (Jpn, Alt) + Fray - In Magical Adventure (Japan, alt) 1990 Micro Cabin @@ -5081,7 +5081,7 @@ - Fray - In Magical Adventure (Jpn, Alt 2) + Fray - In Magical Adventure (Japan, alt 2) 1990 Micro Cabin @@ -5111,7 +5111,7 @@ - Fray - In Magical Adventure (Jpn, Demo) + Fray - In Magical Adventure (Japan, demo) 1990 Micro Cabin @@ -5122,7 +5122,7 @@ - Gaia no Monshou (Jpn) + Gaia no Monshou (Japan) 1988 NCS @@ -5133,7 +5133,7 @@ - Gakuen Monogatari - High School Story (Jpn) + Gakuen Monogatari - High School Story (Japan) 1988 Great @@ -5144,7 +5144,7 @@ - Gakuen Senki (Jpn) + Gakuen Senki (Japan) 1988 Champion Soft @@ -5175,7 +5175,7 @@ - Galf Streem (Jpn) + Galf Streem (Japan) 1989 Xain Soft @@ -5205,7 +5205,7 @@ - Gall Force - Eternal Story (Jpn) + Gall Force - Eternal Story (Japan) 1987 Sony @@ -5216,7 +5216,7 @@ - Gall Force - Eternal Story (Jpn, Alt) + Gall Force - Eternal Story (Japan, alt) 1987 Sony @@ -5227,7 +5227,7 @@ - The Games Collection (Ned) + The Games Collection (Netherlands) 1988 Eurosoft @@ -5253,7 +5253,7 @@ - The Games Collection 2 (Ned) + The Games Collection 2 (Netherlands) 1988 Eurosoft @@ -5294,7 +5294,7 @@ - Gandhara (Jpn) + Gandhara (Japan) 1988 Enix @@ -5310,7 +5310,7 @@ - Gandhara (Jpn, Alt) + Gandhara (Japan, alt) 1988 Enix @@ -5326,7 +5326,7 @@ - Gandhara (Jpn, Alt 2) + Gandhara (Japan, alt 2) 1988 Enix @@ -5342,7 +5342,7 @@ - Gaudi - The Wind of Barcelona (Jpn) + Gaudi - The Wind of Barcelona (Japan) 1992 WolfTeam @@ -5368,7 +5368,7 @@ - Gaudi - The Wind of Barcelona (Jpn, Alt) + Gaudi - The Wind of Barcelona (Japan, alt) 1992 WolfTeam @@ -5394,7 +5394,7 @@ - Gaudi - The Wind of Barcelona (Jpn, Alt 2) + Gaudi - The Wind of Barcelona (Japan, alt 2) 1992 WolfTeam @@ -5420,7 +5420,7 @@ - Ginga Eiyuu Densetsu (Jpn) + Ginga Eiyuu Densetsu (Japan) 1989 Bothtec @@ -5436,7 +5436,7 @@ - Ginga Eiyuu Densetsu (Jpn, Alt Disk 1) + Ginga Eiyuu Densetsu (Japan, alt disk 1) 1989 Bothtec @@ -5452,7 +5452,7 @@ - Ginga Eiyuu Densetsu II (Jpn) + Ginga Eiyuu Densetsu II (Japan) 1990 Bothtec @@ -5484,7 +5484,7 @@ - Ginga Eiyuu Densetsu II (Jpn, Alt) + Ginga Eiyuu Densetsu II (Japan, alt) 1990 Bothtec @@ -5516,7 +5516,7 @@ - Ginga Eiyuu Densetsu II DX Kit (Jpn) + Ginga Eiyuu Densetsu II DX Kit (Japan) 1991 Bothtec @@ -5533,7 +5533,7 @@ - Gokudou Jintori (Jpn) + Gokudou Jintori (Japan) 1989 Micronet @@ -5544,7 +5544,7 @@ - The Golf (Jpn) + The Golf (Japan) 1988 Pack In Video @@ -5555,7 +5555,7 @@ - The Golf (Jpn, Alt) + The Golf (Japan, alt) 1988 Pack In Video @@ -5566,7 +5566,7 @@ - The Golf (Jpn, Alt 2) + The Golf (Japan, alt 2) 1988 Pack In Video @@ -5577,7 +5577,7 @@ - The Golf - Course Collection (Jpn) + The Golf - Course Collection (Japan) 1988 Pack In Video @@ -5588,7 +5588,7 @@ - The Golf - Course Collection (Jpn, Alt) + The Golf - Course Collection (Japan, alt) 1988 Pack In Video @@ -5599,7 +5599,7 @@ - Gorby no Pipeline Daisakusen (Jpn) + Gorby no Pipeline Daisakusen (Japan) 1991 Compile @@ -5610,7 +5610,7 @@ - Gram Cats (Jpn) + Gram Cats (Japan) 1989 Dot Plan @@ -5626,7 +5626,7 @@ - Graph Saurus v1.0 (Jpn) + Graph Saurus v1.0 (Japan) 1989 Bit² @@ -5637,7 +5637,7 @@ - Graph Saurus v2.0 (Jpn) + Graph Saurus v2.0 (Japan) 1991 Bit² @@ -5653,7 +5653,7 @@ - Graph Saurus v2.0 (Jpn, Alt) + Graph Saurus v2.0 (Japan, alt) 1991 Bit² @@ -5669,7 +5669,7 @@ - Graph Saurus v2.0 (Jpn, Alt 2) + Graph Saurus v2.0 (Japan, alt 2) 1991 Bit² @@ -5685,7 +5685,7 @@ - Graph Saurus v2.0 (Jpn, Alt 3) + Graph Saurus v2.0 (Japan, alt 3) 1991 Bit² @@ -5701,7 +5701,7 @@ - Greatest Driver (Jpn) + Greatest Driver (Japan) 1988 T&E Soft @@ -5717,7 +5717,7 @@ - Greatest Driver (Jpn, Alt) + Greatest Driver (Japan, alt) 1988 T&E Soft @@ -5733,7 +5733,7 @@ - Greatest Driver (Jpn, Alt 2) + Greatest Driver (Japan, alt 2) 1988 T&E Soft @@ -5749,7 +5749,7 @@ - De Grotten van Oberon (Ned) + De Grotten van Oberon (Netherlands) 1986 Philips @@ -5760,7 +5760,7 @@ - De Grotten van Oberon (Ned, SSDD) + De Grotten van Oberon (Netherlands, SSDD) 1986 Philips @@ -5771,7 +5771,7 @@ - Gulliver (Jpn) + Gulliver (Japan) 1988 C.B.C. @@ -5782,7 +5782,7 @@ - Gunjin Shougi (Jpn) + Gunjin Shougi (Japan) 1988 Pack In Video @@ -5793,7 +5793,7 @@ - Gunship (Jpn) + Gunship (Japan) 1989 Microprose Japan @@ -5804,7 +5804,7 @@ - Gunship (Jpn, Alt) + Gunship (Japan, alt) 1989 Microprose Japan @@ -5815,7 +5815,7 @@ - Gunship (Jpn, Alt 2) + Gunship (Japan, alt 2) 1989 Microprose Japan @@ -5826,7 +5826,7 @@ - Haja no Fuuin (Jpn) + Haja no Fuuin (Japan) 1987 Kogado @@ -5844,7 +5844,7 @@ - Haja no Fuuin (Jpn, Alt) + Haja no Fuuin (Japan, alt) 1987 Kogado @@ -5862,7 +5862,7 @@ - Haja no Fuuin (Jpn, Alt 2) + Haja no Fuuin (Japan, alt 2) 1987 Kogado @@ -5880,7 +5880,7 @@ - Harajuku After Dark (Jpn) + Harajuku After Dark (Japan) 1989 Kogado @@ -5891,7 +5891,7 @@ - Harajuku After Dark (Jpn, Alt) + Harajuku After Dark (Japan, alt) 1989 Kogado @@ -5902,7 +5902,7 @@ - Herzog (Jpn) + Herzog (Japan) 1988 Techno Soft @@ -5913,7 +5913,7 @@ - Herzog (Jpn, Alt) + Herzog (Japan, alt) 1988 Techno Soft @@ -5924,7 +5924,7 @@ - Hideger (Jpn) + Hideger (Japan) 1989 Xain Soft @@ -5942,7 +5942,7 @@ - Hiranya no Mazo (Jpn) + Hiranya no Mazo (Japan) 1986 Pony Canyon @@ -5953,7 +5953,7 @@ - Hitomi Kobayashi - Puzzle in London (Jpn) + Hitomi Kobayashi - Puzzle in London (Japan) 1988 Informercial @@ -5964,7 +5964,7 @@ - Hitomi Kobayashi - Puzzle in London (Jpn, Alt) + Hitomi Kobayashi - Puzzle in London (Japan, alt) 1988 Informercial @@ -5975,7 +5975,7 @@ - Hitomi Kobayashi - Puzzle in London (Jpn, Alt 2) + Hitomi Kobayashi - Puzzle in London (Japan, alt 2) 1988 Informercial @@ -5986,7 +5986,7 @@ - How Many Robot (Jpn) + How Many Robot (Japan) 1988 Artdink @@ -5997,7 +5997,7 @@ - How Many Robot (Jpn, Alt) + How Many Robot (Japan, alt) 1988 Artdink @@ -6008,7 +6008,7 @@ - Hydefos (Jpn) + Hydefos (Japan) 1989 Hertz @@ -6024,7 +6024,7 @@ - Hydefos (Jpn, Alt) + Hydefos (Japan, alt) 1989 Hertz @@ -6040,7 +6040,7 @@ - Hydefos (Jpn, Alt 2) + Hydefos (Japan, alt 2) 1989 Hertz @@ -6056,7 +6056,7 @@ - Hydlide (Jpn) + Hydlide (Japan) 1985 T&E Soft @@ -6067,7 +6067,7 @@ - Hydlide (Jpn, Alt) + Hydlide (Japan, alt) 1985 T&E Soft @@ -6078,7 +6078,7 @@ - Hydlide (Jpn, Alt 2) + Hydlide (Japan, alt 2) 1985 T&E Soft @@ -6089,7 +6089,7 @@ - Hydlide (Jpn, Alt 3) + Hydlide (Japan, alt 3) 1985 T&E Soft @@ -6100,7 +6100,7 @@ - Ifr-Fly (Ned) + Ifr-Fly (Netherlands) 1988 Philips @@ -6111,7 +6111,7 @@ - Inindou - Datou Nobunaga (Jpn) + Inindou - Datou Nobunaga (Japan) 1991 Koei @@ -6132,7 +6132,7 @@ - Inindou - Datou Nobunaga (Jpn, Alt) + Inindou - Datou Nobunaga (Japan, alt) 1991 Koei @@ -6153,7 +6153,7 @@ - Intruder - Sakura Yashiki no Tansaku (Jpn) + Intruder - Sakura Yashiki no Tansaku (Japan) 1989 Alicesoft @@ -6169,7 +6169,7 @@ - Ishido - The Way of Stones (Jpn) + Ishido - The Way of Stones (Japan) 1991 ASCII @@ -6185,7 +6185,7 @@ - Ishin no Arashi (Jpn) + Ishin no Arashi (Japan) 1989 Koei @@ -6196,7 +6196,7 @@ - Isseki ni Kakeru Seishun (Jpn) + Isseki ni Kakeru Seishun (Japan) 1988 Log @@ -6212,7 +6212,7 @@ - Kiss of Murder - Satsui no Seppun (Jpn) + Kiss of Murder - Satsui no Seppun (Japan) 1988 Riverhill Soft @@ -6223,7 +6223,7 @@ - J.B. Harold Series #2 - Manhattan Requiem - Angels Flying in the Dark (Jpn) + J.B. Harold Series #2 - Manhattan Requiem - Angels Flying in the Dark (Japan) 1988 Riverhill Soft @@ -6234,7 +6234,7 @@ - Jack Nicklaus Golf (Jpn) + Jack Nicklaus Golf (Japan) 1990 Victor @@ -6250,7 +6250,7 @@ - Jack Nicklaus Golf (Jpn, Alt) + Jack Nicklaus Golf (Japan, alt) 1990 Victor @@ -6266,7 +6266,7 @@ - Jack Nicklaus Golf (Jpn, Alt 2) + Jack Nicklaus Golf (Japan, alt 2) 1990 Victor @@ -6282,7 +6282,7 @@ - Jesus (Jpn) + Jesus (Japan) 1987 Enix @@ -6303,7 +6303,7 @@ - Jikuu no Hanayome (Jpn) + Jikuu no Hanayome (Japan) 1989 Kogado @@ -6321,7 +6321,7 @@ - Jikuu no Hanayome (Jpn, Alt) + Jikuu no Hanayome (Japan, alt) 1989 Kogado @@ -6339,7 +6339,7 @@ - Jipshi (Jpn) + Jipshi (Japan) 1988 Champion Soft @@ -6350,7 +6350,7 @@ - Joker (Jpn) + Joker (Japan) 1988 Birdy Soft @@ -6371,7 +6371,7 @@ - Joker (Jpn, Alt Disk 1) + Joker (Japan, alt disk 1) 1988 Birdy Soft @@ -6392,7 +6392,7 @@ - Joker II (Jpn) + Joker II (Japan) 1989 Birdy Soft @@ -6418,7 +6418,7 @@ - Joker II (Jpn, Alt) + Joker II (Japan, alt) 1989 Birdy Soft @@ -6444,7 +6444,7 @@ - Jotunn (Jpn) + Jotunn (Japan) 1988 Xain @@ -6455,7 +6455,7 @@ - Jotunn (Jpn, Alt) + Jotunn (Japan, alt) 1988 Xain @@ -6466,7 +6466,7 @@ - Kaettekita Tantei-dan X (Jpn) + Kaettekita Tantei-dan X (Japan) 1990 Heart Soft @@ -6487,7 +6487,7 @@ - Kagerou Meikyuu (Jpn) + Kagerou Meikyuu (Japan) 1990 Heart Soft @@ -6503,7 +6503,7 @@ - Kami no Machi (Jpn) + Kami no Machi (Japan) 1990 Panther Software @@ -6534,7 +6534,7 @@ - Kamiya Tantei Jimusho - Namida no Canvas (Jpn) + Kamiya Tantei Jimusho - Namida no Canvas (Japan) 1992 Brother Industries @@ -6555,7 +6555,7 @@ - Kimagure Orange Road - Natsu no Mirage (Jpn) + Kimagure Orange Road - Natsu no Mirage (Japan) 1988 Micro Cabin @@ -6566,7 +6566,7 @@ - Kimagure Orange Road - Natsu no Mirage (Jpn, Alt) + Kimagure Orange Road - Natsu no Mirage (Japan, alt) 1988 Micro Cabin @@ -6577,7 +6577,7 @@ - Kudokikata Oshiemasu II - Kind Gal's (Jpn) + Kudokikata Oshiemasu II - Kind Gal's (Japan) 1988 Hard @@ -6593,7 +6593,7 @@ - Kudokikata Oshiemasu II - Kind Gal's (Jpn, Alt) + Kudokikata Oshiemasu II - Kind Gal's (Japan, alt) 1988 Hard @@ -6609,7 +6609,7 @@ - Kudokikata Oshiemasu II - Kind Gal's (Jpn, Alt 2) + Kudokikata Oshiemasu II - Kind Gal's (Japan, alt 2) 1988 Hard @@ -6625,7 +6625,7 @@ - Kinetic Connection (Jpn) + Kinetic Connection (Japan) 1986 Sony @@ -6636,7 +6636,7 @@ - Konami Game Collection Bangai-hen (Jpn) + Konami Game Collection Bangai-hen (Japan) 1989 Konami @@ -6647,7 +6647,7 @@ - Koroshi no Dress 2 (Jpn) + Koroshi no Dress 2 (Japan) 1990 Fairytale @@ -6658,7 +6658,7 @@ - Kruiswoord Generator (Ned) + Kruiswoord Generator (Netherlands) 1986 Radarsoft @@ -6669,7 +6669,7 @@ - Hiroku Kubikiri Yakata (Jpn) + Hiroku Kubikiri Yakata (Japan) 1989 Bit² @@ -6700,7 +6700,7 @@ - Hiroku Kubikiri Yakata (Jpn, Alt) + Hiroku Kubikiri Yakata (Japan, alt) 1989 Bit² @@ -6731,7 +6731,7 @@ - Kudokikata Oshiemasu (Jpn) + Kudokikata Oshiemasu (Japan) 1988 Hard @@ -6742,7 +6742,7 @@ - Kudokikata Oshiemasu (Jpn, Alt) + Kudokikata Oshiemasu (Japan, alt) 1988 Hard @@ -6753,7 +6753,7 @@ - Kugyokuden (Jpn) + Kugyokuden (Japan) 1987 Techno Soft @@ -6764,7 +6764,7 @@ - Kugyokuden (Jpn, Alt) + Kugyokuden (Japan, alt) 1987 Tecno Soft @@ -6775,7 +6775,7 @@ - Kujaku Ou (Jpn) + Kujaku Ou (Japan) 1988 Pony Canyon @@ -6786,7 +6786,7 @@ - La Valeur (Jpn) + La Valeur (Japan) 1989 Kogado @@ -6802,7 +6802,7 @@ - La Valeur (Jpn, Alt) + La Valeur (Japan, alt) 1989 Kogado @@ -6818,7 +6818,7 @@ - Laplace no Ma (Jpn) + Laplace no Ma (Japan) 1989 Humming Bird Soft @@ -6829,7 +6829,7 @@ - Laplace no Ma (Jpn, Alt) + Laplace no Ma (Japan, alt) 1989 Humming Bird Soft @@ -6840,7 +6840,7 @@ - Last Armageddon (Jpn) + Last Armageddon (Japan) 1988 Brain Grey @@ -6871,7 +6871,7 @@ - Last Armageddon (Jpn, Alt) + Last Armageddon (Japan, alt) 1988 Brain Grey @@ -6902,7 +6902,7 @@ - Last Armageddon (Jpn, Alt 2) + Last Armageddon (Japan, alt 2) 1988 Brain Grey @@ -6933,7 +6933,7 @@ - Laydock (Jpn) + Laydock (Japan) 1986 T&E Soft @@ -6944,7 +6944,7 @@ - Laydock (Jpn, Alt) + Laydock (Japan, alt) 1986 T&E Soft @@ -6955,7 +6955,7 @@ - Laydock (Jpn, Alt 2) + Laydock (Japan, alt 2) 1986 T&E Soft @@ -6966,7 +6966,7 @@ - Laydock (Jpn, Alt 3) + Laydock (Japan, alt 3) 1986 T&E Soft @@ -6977,7 +6977,7 @@ - Leather Skirts (Ned) + Leather Skirts (Netherlands) 1987 Methodic Solutions @@ -6988,7 +6988,7 @@ - Lenam - Sword of Legend (Jpn) + Lenam - Sword of Legend (Japan) 1989 Hertz @@ -7014,7 +7014,7 @@ - Lenam - Sword of Legend (Jpn, Alt) + Lenam - Sword of Legend (Japan, alt) 1989 Hertz @@ -7040,7 +7040,7 @@ - Lenam - Sword of Legend (Jpn, Alt 2) + Lenam - Sword of Legend (Japan, alt 2) 1989 Hertz @@ -7066,7 +7066,7 @@ - Lipstick Adventure (Jpn) + Lipstick Adventure (Japan) 1989 Fairytale @@ -7087,7 +7087,7 @@ - Lipstick Adventure 2 (Jpn) + Lipstick Adventure 2 (Japan) 1990 Fairytale @@ -7108,7 +7108,7 @@ - Little Vampire (Jpn) + Little Vampire (Japan) 1988 Champion Soft @@ -7129,7 +7129,7 @@ - Love Chaser (Jpn) + Love Chaser (Japan) 1987 Champion Soft @@ -7145,7 +7145,7 @@ - Love Chaser (Jpn, Alt) + Love Chaser (Japan, alt) 1987 Champion Soft @@ -7161,7 +7161,7 @@ - Love Chaser (Jpn, Alt 2) + Love Chaser (Japan, alt 2) 1987 Champion Soft @@ -7177,7 +7177,7 @@ - M.U.L.E. (Jpn) + M.U.L.E. (Japan) 1988 BPS @@ -7188,7 +7188,7 @@ - Madou Monogatari 1-2-3 (Jpn) + Madou Monogatari 1-2-3 (Japan) 1990 Compile @@ -7221,7 +7221,7 @@ - Madou Monogatari 1-2-3 (Jpn, Alt) + Madou Monogatari 1-2-3 (Japan, alt) 1990 Compile @@ -7254,7 +7254,7 @@ - Mahjong Kyo Jidai Special II (Jpn) + Mahjong Kyo Jidai Special II (Japan) 1990 Micronet @@ -7270,7 +7270,7 @@ - Mahjong Shikaku (Jpn) + Mahjong Shikaku (Japan) 1990 Nihon Bussan @@ -7291,7 +7291,7 @@ - Mahjong Shikaku (Jpn, Alt Disk 1) + Mahjong Shikaku (Japan, alt disk 1) 1990 Nihon Bussan @@ -7312,7 +7312,7 @@ - Maison Ikkoku Kanketsu Hen (Jpn) + Maison Ikkoku Kanketsu Hen (Japan) 1988 Micro Cabin @@ -7323,7 +7323,7 @@ - Maison Ikkoku Kanketsu Hen (Jpn, Alt) + Maison Ikkoku Kanketsu Hen (Japan, alt) 1988 Micro Cabin @@ -7334,7 +7334,7 @@ - Maison Ikkoku Kanketsu Hen (Jpn, Alt 2) + Maison Ikkoku Kanketsu Hen (Japan, alt 2) 1988 Micro Cabin @@ -7345,7 +7345,7 @@ - Majin Kyu (Jpn) + Majin Kyu (Japan) 1988 Xain Soft @@ -7356,7 +7356,7 @@ - Majin Kyu (Jpn, Alt) + Majin Kyu (Japan, alt) 1988 Xain Soft @@ -7367,7 +7367,7 @@ - Makai Fukkatsu (Jpn) + Makai Fukkatsu (Japan) 1987 Soft Studio WING @@ -7383,7 +7383,7 @@ - Makyuu Den (Jpn) + Makyuu Den (Japan) 1989 Software Studio WING @@ -7394,7 +7394,7 @@ - Märchen Veil (Jpn) + M√§rchen Veil (Japan) 1986 System Sacom @@ -7405,7 +7405,7 @@ - Märchen Veil (Jpn, Alt) + M√§rchen Veil (Japan, alt) 1986 System Sacom @@ -7416,7 +7416,7 @@ - Märchen Veil (Jpn, Alt 2) + M√§rchen Veil (Japan, alt 2) 1986 System Sacom @@ -7427,7 +7427,7 @@ - Mask Mania Age Battle (Jpn) + Mask Mania Age Battle (Japan) 1994 MSX-FAN @@ -7438,7 +7438,7 @@ - Master of Monsters (Jpn) + Master of Monsters (Japan) 1988 System Soft @@ -7454,7 +7454,7 @@ - Master of Monsters (Jpn, Alt) + Master of Monsters (Japan, alt) 1988 System Soft @@ -7470,7 +7470,7 @@ - Master of Monsters (Jpn, Alt 2) + Master of Monsters (Japan, alt 2) 1988 System Soft @@ -7486,7 +7486,7 @@ - Membership Golf (Jpn) + Membership Golf (Japan) 1989 Sony @@ -7502,7 +7502,7 @@ - Membership Golf (Jpn, Alt) + Membership Golf (Japan, alt) 1989 Sony @@ -7518,7 +7518,7 @@ - Mid-Garts Side A (Jpn) + Mid-Garts Side A (Japan) 1989 WolfTeam @@ -7539,7 +7539,7 @@ - Mid-Garts Side A (Jpn, Alt Disk 1) + Mid-Garts Side A (Japan, alt disk 1) 1989 WolfTeam @@ -7560,7 +7560,7 @@ - Mid-Garts Side B (Jpn) + Mid-Garts Side B (Japan) 1989 WolfTeam @@ -7581,7 +7581,7 @@ - Mid-Garts Side B (Jpn, Alt) + Mid-Garts Side B (Japan, alt) 1989 WolfTeam @@ -7602,7 +7602,7 @@ - Mid-Garts Dual Side (Jpn) + Mid-Garts Dual Side (Japan) 1989 WolfTeam @@ -7646,7 +7646,7 @@ - Might and Magic II - Gates to Another World (Jpn) + Might and Magic II - Gates to Another World (Japan) 1989 Starcraft @@ -7662,7 +7662,7 @@ - Might and Magic II - Gates to Another World (Jpn, Alt) + Might and Magic II - Gates to Another World (Japan, alt) 1989 Starcraft @@ -7678,7 +7678,7 @@ - Mighty Battle Skin Panic (Jpn) + Mighty Battle Skin Panic (Japan) 1993 Gainax @@ -7704,7 +7704,7 @@ - Mighty Battle Skin Panic (Jpn, Alt) + Mighty Battle Skin Panic (Japan, alt) 1993 Gainax @@ -7730,7 +7730,7 @@ - Mighty Battle Skin Panic (Jpn, Alt 2) + Mighty Battle Skin Panic (Japan, alt 2) 1993 Gainax @@ -7756,7 +7756,7 @@ - Mighty Battle Skin Panic (Jpn, Alt 3) + Mighty Battle Skin Panic (Japan, alt 3) 1993 Gainax @@ -7782,7 +7782,7 @@ - Kidou Senshi Gundam - MS Field (Jpn) + Kidou Senshi Gundam - MS Field (Japan) 1988 Family Soft @@ -7793,7 +7793,7 @@ - MSX-FAN Fandom Library 8 (Jpn) + MSX-FAN Fandom Library 8 (Japan) 1990 Tokuma Shoten @@ -7804,7 +7804,7 @@ - MSX Doujin World (Jpn) + MSX Doujin World (Japan) 1995 Yuugazoku @@ -7820,7 +7820,7 @@ - MSX Doujin World 2 (Jpn) + MSX Doujin World 2 (Japan) 1995 Yuugazoku @@ -7846,7 +7846,7 @@ - MSX Doujin World 3 (Jpn) + MSX Doujin World 3 (Japan) 1996 Yuugazoku @@ -7872,7 +7872,7 @@ - MSX Spring (Jpn, Cracked) + MSX Spring (Japan, cracked) 1989 MSX Magazine @@ -7883,7 +7883,7 @@ - MSX Train (Jpn) + MSX Train (Japan) 1993 Family Soft @@ -7904,7 +7904,7 @@ - Navitune (Jpn) + Navitune (Japan) 1989 Kogado @@ -7920,7 +7920,7 @@ - New Adam & Eve (Jpn) + New Adam & Eve (Japan) 1985 Sony @@ -7931,7 +7931,7 @@ - Nichiyoubi ni Uchuubito ga...? (Jpn) + Nichiyoubi ni Uchuubito ga...? (Japan) 1986 Software Studio WING @@ -7947,7 +7947,7 @@ - Nike (Jpn) + Nike (Japan) 1991 Cocktail Soft @@ -7978,7 +7978,7 @@ - Niko2 (Jpn) + Niko2 (Japan) 1991 WolfTeam @@ -7989,7 +7989,7 @@ - Niko2 (Jpn, Alt) + Niko2 (Japan, alt) 1991 WolfTeam @@ -8000,7 +8000,7 @@ - Ninja (Jpn) + Ninja (Japan) 1988 Bothtec @@ -8011,7 +8011,7 @@ - Nobunaga no Yabou (Jpn) + Nobunaga no Yabou (Japan) 1986 Koei @@ -8022,7 +8022,7 @@ - Nobunaga no Yabou - Zenkokuban (Jpn) + Nobunaga no Yabou - Zenkokuban (Japan) 1987 Koei @@ -8038,7 +8038,7 @@ - Nobunaga no Yabou - Zenkokuban (Jpn, Alt) + Nobunaga no Yabou - Zenkokuban (Japan, alt) 1987 Koei @@ -8054,7 +8054,7 @@ - Nobunaga no Yabou - Zenkokuban (Jpn, Alt 2) + Nobunaga no Yabou - Zenkokuban (Japan, alt 2) 1987 Koei @@ -8070,7 +8070,7 @@ - Nobunaga no Yabou - Sengoku Gunyuuden (Jpn) + Nobunaga no Yabou - Sengoku Gunyuuden (Japan) 1989 Koei @@ -8081,7 +8081,7 @@ - Nobunaga no Yabou - Sengoku Gunyuuden (Jpn, Alt) + Nobunaga no Yabou - Sengoku Gunyuuden (Japan, alt) 1989 Koei @@ -8092,7 +8092,7 @@ - Nobunaga no Yabou - Bushou Fuuunroku (Jpn) + Nobunaga no Yabou - Bushou Fuuunroku (Japan) 1991 Koei @@ -8108,7 +8108,7 @@ - Nobunaga no Yabou - Bushou Fuuunroku (Jpn, Alt) + Nobunaga no Yabou - Bushou Fuuunroku (Japan, alt) 1991 Koei @@ -8124,7 +8124,7 @@ - Nukenin Densetsu (Jpn) + Nukenin Densetsu (Japan) 1988 Brain Grey @@ -8150,7 +8150,7 @@ - Nukenin Densetsu (Jpn, Alt) + Nukenin Densetsu (Japan, alt) 1988 Brain Grey @@ -8176,7 +8176,7 @@ - Nukenin Densetsu - Bangai-hen (Jpn) + Nukenin Densetsu - Bangai-hen (Japan) 1988 Brain Grey @@ -8187,7 +8187,7 @@ - Gekisou Nyancle - Nyancle Racing (Jpn) + Gekisou Nyancle - Nyancle Racing (Japan) 1988 Bit² @@ -8198,7 +8198,7 @@ - Gekisou Nyancle - Nyancle Racing (Jpn, Alt) + Gekisou Nyancle - Nyancle Racing (Japan, alt) 1988 Bit² @@ -8209,7 +8209,7 @@ - Gekisou Nyancle - Nyancle Racing (Jpn, Alt 2) + Gekisou Nyancle - Nyancle Racing (Japan, alt 2) 1988 Bit² @@ -8220,7 +8220,7 @@ - Onryou Senki (Jpn) + Onryou Senki (Japan) 1988 Software Studio WING @@ -8246,7 +8246,7 @@ - Ouji Binbin Monogatari (Jpn) + Ouji Binbin Monogatari (Japan) 1987 East Cube @@ -8257,7 +8257,7 @@ - Ouji Binbin Monogatari (Jpn, Alt) + Ouji Binbin Monogatari (Japan, alt) 1987 East Cube @@ -8268,7 +8268,7 @@ - Pac-Mania (Jpn) + Pac-Mania (Japan) 1989 Namcot @@ -8279,7 +8279,7 @@ - Pac-Mania (Jpn, Alt) + Pac-Mania (Japan, alt) 1989 Namcot @@ -8290,7 +8290,7 @@ - Palamedes (Jpn) + Palamedes (Japan) 1990 Hot-B @@ -8301,7 +8301,7 @@ - Palamedes (Jpn, Alt) + Palamedes (Japan, alt) 1990 Hot-B @@ -8312,7 +8312,7 @@ - Palamedes (Jpn, Alt 2) + Palamedes (Japan, alt 2) 1990 Hot-B @@ -8323,7 +8323,7 @@ - Les Passagers du Vent (Fra) + Les Passagers du Vent (France) 1986 Infogrames @@ -8334,7 +8334,7 @@ - Peach Up 1 (Jpn) + Peach Up 1 (Japan) 1989 Momonoki House @@ -8350,7 +8350,7 @@ - Peach Up 2 (Jpn) + Peach Up 2 (Japan) 1990 Momonoki House @@ -8366,7 +8366,7 @@ - Peach Up 3 (Jpn) + Peach Up 3 (Japan) 1990 Momonoki House @@ -8382,7 +8382,7 @@ - Peach Up 4 (Jpn) + Peach Up 4 (Japan) 1990 Momonoki House @@ -8398,7 +8398,7 @@ - Peach Up 5 (Jpn) + Peach Up 5 (Japan) 1990 Momonoki House @@ -8414,7 +8414,7 @@ - Peach Up 6 (Jpn) + Peach Up 6 (Japan) 1990 Momonoki House @@ -8430,7 +8430,7 @@ - Peach Up 7 (Jpn) + Peach Up 7 (Japan) 1990 Momonoki House @@ -8446,7 +8446,7 @@ - Peach Up 8 (Jpn) + Peach Up 8 (Japan) 1991 Momonoki House @@ -8462,7 +8462,7 @@ - Peach Up Special (Jpn) + Peach Up Special (Japan) 1991 Momonoki House @@ -8488,7 +8488,7 @@ - Peach Up Special II (Jpn) + Peach Up Special II (Japan) 1991 Momonoki House @@ -8514,7 +8514,7 @@ - Phantasie (Jpn) + Phantasie (Japan) 1988 Bothtec @@ -8525,7 +8525,7 @@ - Phantasie II - Ferronrah no Shu (Jpn) + Phantasie II - Ferronrah no Shu (Japan) 1988 Bothtec @@ -8536,7 +8536,7 @@ - Phantasie III - The Wrath of Nikademus (Jpn) + Phantasie III - The Wrath of Nikademus (Japan) 1989 Bothtec @@ -8554,7 +8554,7 @@ - Phantasie IV - The Birth of Hero (Jpn) + Phantasie IV - The Birth of Hero (Japan) 1991 Starcraft @@ -8572,7 +8572,7 @@ - Phantasie IV - The Birth of Hero (Jpn, Alt) + Phantasie IV - The Birth of Hero (Japan, alt) 1991 Starcraft @@ -8590,7 +8590,7 @@ - Pink Sox 1 (Jpn) + Pink Sox 1 (Japan) 1989 Wendy Magazine @@ -8601,7 +8601,7 @@ - Pink Sox 2 (Jpn) + Pink Sox 2 (Japan) 1990 Wendy Magazine @@ -8612,7 +8612,7 @@ - Pink Sox 3 (Jpn) + Pink Sox 3 (Japan) 1990 Wendy Magazine @@ -8623,7 +8623,7 @@ - Pink Sox 4 (Jpn) + Pink Sox 4 (Japan) 1991 Wendy Magazine @@ -8639,7 +8639,7 @@ - Pink Sox 5 (Jpn) + Pink Sox 5 (Japan) 1991 Wendy Magazine @@ -8655,7 +8655,7 @@ - Pink Sox 6 (Jpn) + Pink Sox 6 (Japan) 1991 Wendy Magazine @@ -8671,7 +8671,7 @@ - Pink Sox 7 (Jpn) + Pink Sox 7 (Japan) 1991 Wendy Magazine @@ -8687,7 +8687,7 @@ - Pink Sox 8 (Jpn) + Pink Sox 8 (Japan) 1992 Wendy Magazine @@ -8713,7 +8713,7 @@ - Pink Sox Mania (Jpn) + Pink Sox Mania (Japan) 1991 Wendy Magazine @@ -8729,7 +8729,7 @@ - Pink Sox Mania 2 (Jpn) + Pink Sox Mania 2 (Japan) 1991 Wendy Magazine @@ -8745,7 +8745,7 @@ - Pink Sox Mania 3 (Jpn) + Pink Sox Mania 3 (Japan) 1991 Wendy Magazine @@ -8766,7 +8766,7 @@ - Pinky Ponky (Jpn) + Pinky Ponky (Japan) 1989 Elf @@ -8782,7 +8782,7 @@ - Pinky Ponky 2 (Jpn) + Pinky Ponky 2 (Japan) 1989 Elf @@ -8798,7 +8798,7 @@ - Pinky Ponky 3 (Jpn) + Pinky Ponky 3 (Japan) 1989 Elf @@ -8814,7 +8814,7 @@ - Playball III (Jpn) + Playball III (Japan) 1989 Sony @@ -8825,7 +8825,7 @@ - Playball III (Jpn, Alt) + Playball III (Japan, alt) 1989 Sony @@ -8836,7 +8836,7 @@ - Playball III (Jpn, Alt 2) + Playball III (Japan, alt 2) 1989 Sony @@ -8847,7 +8847,7 @@ - Pocky (Jpn) + Pocky (Japan) 1989 Pony Tail Soft @@ -8868,7 +8868,7 @@ - Pocky (Jpn, Alt) + Pocky (Japan, alt) 1989 Pony Tail Soft @@ -8889,7 +8889,7 @@ - Keiji Dai Dageki - Shachou Reijou Yuukai Jiken (Jpn) + Keiji Dai Dageki - Shachou Reijou Yuukai Jiken (Japan) 1987 Family Soft @@ -8900,7 +8900,7 @@ - Keiji Dai Dageki - Shachou Reijou Yuukai Jiken (Jpn, Alt) + Keiji Dai Dageki - Shachou Reijou Yuukai Jiken (Japan, alt) 1987 Family Soft @@ -8911,7 +8911,7 @@ - Kon'yamo Asamade Powerful Mahjong 2 (Jpn) + Kon'yamo Asamade Powerful Mahjong 2 (Japan) 1988 dB-Soft @@ -8937,7 +8937,7 @@ - Kon'yamo Asamade Powerful Mahjong 2 (Jpn, Alt) + Kon'yamo Asamade Powerful Mahjong 2 (Japan, alt) 1988 dB-Soft @@ -8963,7 +8963,7 @@ - Princess Maker (Jpn) + Princess Maker (Japan) 1992 Micro Cabin @@ -9004,7 +9004,7 @@ - Princess Maker (Jpn, v2?) + Princess Maker (Japan, v2?) 1992 Micro Cabin @@ -9045,7 +9045,7 @@ - Princess Maker (Jpn, v2?, Alt) + Princess Maker (Japan, v2?, alt) 1992 Micro Cabin @@ -9086,7 +9086,7 @@ - Pro Yakyu Fan (Jpn) + Pro Yakyu Fan (Japan) 1988 Telenet Japan @@ -9097,7 +9097,7 @@ - Psychic War - Cosmic Soldier 2 (Jpn) + Psychic War - Cosmic Soldier 2 (Japan) 1987 Kogado @@ -9108,7 +9108,7 @@ - Psy-O-Blade (Jpn) + Psy-O-Blade (Japan) 1988 T&E Soft @@ -9129,7 +9129,7 @@ - Psy-O-Blade (Jpn, Alt) + Psy-O-Blade (Japan, alt) 1988 T&E Soft @@ -9150,7 +9150,7 @@ - Psy-O-Blade (Jpn, Alt 2) + Psy-O-Blade (Japan, alt 2) 1988 T&E Soft @@ -9171,7 +9171,7 @@ - Psycho World (Jpn) + Psycho World (Japan) 1988 Hertz @@ -9182,7 +9182,7 @@ - Psycho World (Jpn, Alt) + Psycho World (Japan, alt) 1988 Hertz @@ -9193,7 +9193,7 @@ - Psycho World (Jpn, Alt 2) + Psycho World (Japan, alt 2) 1988 Hertz @@ -9204,7 +9204,7 @@ - Puyo Puyo (Jpn) + Puyo Puyo (Japan) 1991 Compile @@ -9215,7 +9215,7 @@ - Puyo Puyo (Jpn, Alt) + Puyo Puyo (Japan, alt) 1991 Compile @@ -9226,7 +9226,7 @@ - Puyo Puyo (Jpn, Alt 2) + Puyo Puyo (Japan, alt 2) 1991 Compile @@ -9237,7 +9237,7 @@ - Quinpl (Jpn) + Quinpl (Japan) 1988 Bit² @@ -9248,7 +9248,7 @@ - Quinpl (Jpn, Alt) + Quinpl (Japan, alt) 1988 Bit² @@ -9259,7 +9259,7 @@ - Quinpl (Jpn, Alt 2) + Quinpl (Japan, alt 2) 1988 Bit² @@ -9270,7 +9270,7 @@ - R.A.D.X.-8 (Ned) + R.A.D.X.-8 (Netherlands) 1988 Philips @@ -9281,7 +9281,7 @@ - R.A.D.X.-8 (Ned, Alt) + R.A.D.X.-8 (Netherlands, alt) 1988 Philips @@ -9292,7 +9292,7 @@ - R.A.D.X.-8 (Ned, Alt 2) + R.A.D.X.-8 (Netherlands, alt 2) 1988 Philips @@ -9303,7 +9303,7 @@ - R.A.D.X.-8 (Ned, Alt 3) + R.A.D.X.-8 (Netherlands, alt 3) 1988 Philips @@ -9314,7 +9314,7 @@ - Rance (Jpn) + Rance (Japan) 1989 Alicesoft @@ -9340,7 +9340,7 @@ - Rance (Jpn, Alt) + Rance (Japan, alt) 1989 Alicesoft @@ -9366,7 +9366,7 @@ - Rance II (Jpn) + Rance II (Japan) 1990 Alicesoft @@ -9397,7 +9397,7 @@ - Randar no Bouken III - Yami ni Mise Rareta Majutsushi (Jpn) + Randar no Bouken III - Yami ni Mise Rareta Majutsushi (Japan) 1990 Compile @@ -9428,7 +9428,7 @@ - Randar no Bouken III - Yami ni Mise Rareta Majutsushi (Jpn, Alt) + Randar no Bouken III - Yami ni Mise Rareta Majutsushi (Japan, alt) 1990 Compile @@ -9459,7 +9459,7 @@ - Randar no Bouken III - Yami ni Mise Rareta Majutsushi (Jpn, Alt 2) + Randar no Bouken III - Yami ni Mise Rareta Majutsushi (Japan, alt 2) 1990 Compile @@ -9490,7 +9490,7 @@ - Ray Gun (Jpn) + Ray Gun (Japan) 1991 Elf @@ -9526,7 +9526,7 @@ - Ray Gun (Jpn, Alt) + Ray Gun (Japan, alt) 1991 Elf @@ -9562,7 +9562,7 @@ - Record of Lodoss War - Haiiro no Majo (Jpn) + Record of Lodoss War - Haiiro no Majo (Japan) 1989 Humming Bird Soft @@ -9598,7 +9598,7 @@ - Record of Lodoss War - Haiiro no Majo (Jpn, Alt) + Record of Lodoss War - Haiiro no Majo (Japan, alt) 1989 Humming Bird Soft @@ -9634,7 +9634,7 @@ - Lodoss Tou Senki - Fukujinzuke (Jpn) + Lodoss Tou Senki - Fukujinzuke (Japan) 1990 Humming Bird Soft @@ -9645,7 +9645,7 @@ - Red Lights of Amsterdam (Ned, Trained?) + Red Lights of Amsterdam (Netherlands, trained?) 1986 Eaglesoft @@ -9656,7 +9656,7 @@ - Red Lights of Amsterdam (Ned, Trained?, Alt) + Red Lights of Amsterdam (Netherlands, trained?, alt) 1986 Eaglesoft @@ -9667,7 +9667,7 @@ - Rekenwonder (Ned) + Rekenwonder (Netherlands) 1986 Philips @@ -9678,7 +9678,7 @@ - Return of Jelda (Jpn) + Return of Jelda (Japan) 1987 Carry Lab @@ -9689,7 +9689,7 @@ - Return of Jelda (Jpn, Alt) + Return of Jelda (Japan, alt) 1987 Carry Lab @@ -9700,7 +9700,7 @@ - Reviver (Jpn) + Reviver (Japan) 1987 Arsys @@ -9716,7 +9716,7 @@ - Reviver (Jpn, Alt) + Reviver (Japan, alt) 1987 Arsys @@ -9732,7 +9732,7 @@ - Reviver (Jpn, Alt 2) + Reviver (Japan, alt 2) 1987 Arsys @@ -9748,7 +9748,7 @@ - Robo Crush (Jpn) + Robo Crush (Japan) 1990 System Soft @@ -9764,7 +9764,7 @@ - Robo Crush (Jpn, Alt) + Robo Crush (Japan, alt) 1990 System Soft @@ -9780,7 +9780,7 @@ - Robo Crush (Jpn, Alt 2) + Robo Crush (Japan, alt 2) 1990 System Soft @@ -9796,7 +9796,7 @@ - Rogue Alliance (Jpn) + Rogue Alliance (Japan) 1989 Starcraft @@ -9807,7 +9807,7 @@ - RONA - Jiboshin no Shinpan (Jpn) + RONA - Jiboshin no Shinpan (Japan) 1994 Dixie @@ -9828,7 +9828,7 @@ - RONA - Jiboshin no Shinpan (Jpn, Alt) + RONA - Jiboshin no Shinpan (Japan, alt) 1994 Dixie @@ -9849,7 +9849,7 @@ - Royal Blood (Jpn) + Royal Blood (Japan) 1991 Koei @@ -9871,7 +9871,7 @@ - Royal Blood (Jpn, Alt) + Royal Blood (Japan, alt) 1991 Koei @@ -9893,7 +9893,7 @@ - Rune Master - Sangoku Eiketsu Den (Jpn) + Rune Master - Sangoku Eiketsu Den (Japan) 1991 Compile @@ -9914,7 +9914,7 @@ - Rune Master III (Jpn, Alt) + Rune Master III (Japan, alt) 1991 Compile @@ -9935,7 +9935,7 @@ - Rune Master III (Jpn, Alt 2) + Rune Master III (Japan, alt 2) 1991 Compile @@ -9956,7 +9956,7 @@ - Rune Worth - Kokui no Kikoushi (Jpn) + Rune Worth - Kokui no Kikoushi (Japan) 1990 T&E Soft @@ -9986,7 +9986,7 @@ - Rune Worth - Kokui no Kikoushi (Jpn, Alt) + Rune Worth - Kokui no Kikoushi (Japan, alt) 1990 T&E Soft @@ -10014,7 +10014,7 @@ - Ryuukyuu (Jpn) + Ryuukyuu (Japan) 1989 ASCII @@ -10025,7 +10025,7 @@ - Ryuukyuu (Jpn, Alt) + Ryuukyuu (Japan, alt) 1989 ASCII @@ -10036,7 +10036,7 @@ - SD Gundam Gachapon Senshi 2 - Capsule Senki (Jpn) + SD Gundam Gachapon Senshi 2 - Capsule Senki (Japan) 1990 Banpresto @@ -10047,7 +10047,7 @@ - SD Gundam Gachapon Senshi 2 - Capsule Senki (Jpn, Alt) + SD Gundam Gachapon Senshi 2 - Capsule Senki (Japan, alt) 1990 Banpresto @@ -10058,7 +10058,7 @@ - Sa-Zi-Ri (Jpn) + Sa-Zi-Ri (Japan) 1988 Telenet Japan @@ -10069,7 +10069,7 @@ - Sa-Zi-Ri (Jpn, Alt) + Sa-Zi-Ri (Japan, alt) 1988 Telenet Japan @@ -10080,7 +10080,7 @@ - Sangokushi (Jpn) + Sangokushi (Japan) 1986 Koei @@ -10098,7 +10098,7 @@ - Sangokushi (Jpn, Alt) + Sangokushi (Japan, alt) 1986 Koei @@ -10116,7 +10116,7 @@ - Sangokushi (Jpn, Alt 2) + Sangokushi (Japan, alt 2) 1986 Koei @@ -10134,7 +10134,7 @@ - Sangokushi II (Jpn) + Sangokushi II (Japan) 1990 Koei @@ -10156,7 +10156,7 @@ - Sangokushi II (Jpn, Alt) + Sangokushi II (Japan, alt) 1990 Koei @@ -10178,7 +10178,7 @@ - Final Mystery Murder Club - Satsujin Club (Jpn) + Final Mystery Murder Club - Satsujin Club (Japan) 1988 Micro Cabin @@ -10189,7 +10189,7 @@ - Saurus Lunch Vol. 0 (Jpn) + Saurus Lunch Vol. 0 (Japan) 1989 Bit² @@ -10205,7 +10205,7 @@ - Schwarzschild - Kyouran no Ginga (Jpn) + Schwarzschild - Kyouran no Ginga (Japan) 1989 Kogado @@ -10221,7 +10221,7 @@ - Schwarzschild - Kyouran no Ginga (Jpn, Alt) + Schwarzschild - Kyouran no Ginga (Japan, alt) 1989 Kogado @@ -10237,7 +10237,7 @@ - Schwarzschild II (Jpn) + Schwarzschild II (Japan) 1990 Kogado @@ -10253,7 +10253,7 @@ - Schwarzschild II (Jpn, Alt) + Schwarzschild II (Japan, alt) 1990 Kogado @@ -10269,7 +10269,7 @@ - Seiha (Jpn) + Seiha (Japan) 1988 Nihon Bussan @@ -10280,7 +10280,7 @@ - Seiha (Jpn, Alt) + Seiha (Japan, alt) 1988 Nihon Bussan @@ -10291,7 +10291,7 @@ - Seikimatsu Fly Battler (Jpn) + Seikimatsu Fly Battler (Japan) 1993 MSX-FAN @@ -10302,7 +10302,7 @@ - Seilane (Jpn) + Seilane (Japan) 1988 Micro Cabin @@ -10318,7 +10318,7 @@ - De Sekte (Ned) + De Sekte (Netherlands) 1986 Philips @@ -10329,7 +10329,7 @@ - De Sekte (Ned, Alt) + De Sekte (Netherlands, alt) 1986 Philips @@ -10340,7 +10340,7 @@ - De Sekte (Ned, Alt 2) + De Sekte (Netherlands, alt 2) 1986 Philips @@ -10351,7 +10351,7 @@ - Shadow Hunter (Jpn) + Shadow Hunter (Japan) 1988 Champion Soft @@ -10367,7 +10367,7 @@ - Shanghai (Jpn) + Shanghai (Japan) 1987 System Soft @@ -10378,7 +10378,7 @@ - Shanghai (Jpn, Alt) + Shanghai (Japan, alt) 1987 System Soft @@ -10389,7 +10389,7 @@ - Shanghai II (Jpn) + Shanghai II (Japan) 1989 System Soft @@ -10400,7 +10400,7 @@ - Shanghai II (Jpn, Alt) + Shanghai II (Japan, alt) 1989 System Soft @@ -10411,7 +10411,7 @@ - Shanghai II (Jpn, Alt 2) + Shanghai II (Japan, alt 2) 1989 System Soft @@ -10422,7 +10422,7 @@ - Shenan Dragon (Jpn) + Shenan Dragon (Japan) 1990 Technopolis Soft @@ -10438,7 +10438,7 @@ - Shikinjou (Jpn) + Shikinjou (Japan) 1990 Scaptrust @@ -10456,7 +10456,7 @@ - Shikinjou (Jpn, Alt) + Shikinjou (Japan, alt) 1990 Scaptrust @@ -10474,7 +10474,7 @@ - Shin Best Nine Pro Yakyuu (Jpn) + Shin Best Nine Pro Yakyuu (Japan) 1987 ASCII @@ -10485,7 +10485,7 @@ - Shin Maou Golvellius (Jpn) + Shin Maou Golvellius (Japan) 1988 Compile @@ -10509,7 +10509,7 @@ - Shin Kugyokuden (Jpn) + Shin Kugyokuden (Japan) 1988 Techno Soft @@ -10525,7 +10525,7 @@ - Shin Kugyokuden (Jpn, Alt) + Shin Kugyokuden (Japan, alt) 1988 Tecno Soft @@ -10541,7 +10541,7 @@ - Silviana (Jpn) + Silviana (Japan) 1989 Pack In Video @@ -10552,7 +10552,7 @@ - Silviana (Jpn, Alt) + Silviana (Japan, alt) 1989 Pack In Video @@ -10563,7 +10563,7 @@ - Silviana (Jpn, Alt 2) + Silviana (Japan, alt 2) 1989 Pack In Video @@ -10574,7 +10574,7 @@ - Sokoban Perfect (Jpn) + Sokoban Perfect (Japan) 1989 Micro Cabin @@ -10590,7 +10590,7 @@ - Sokoban Perfect (Jpn, Alt) + Sokoban Perfect (Japan, alt) 1989 Micro Cabin @@ -10606,7 +10606,7 @@ - Sokoban Perfect (Jpn, Alt 2) + Sokoban Perfect (Japan, alt 2) 1989 Micro Cabin @@ -10622,7 +10622,7 @@ - Solitaire Royale (Jpn) + Solitaire Royale (Japan) 1988 Game Arts @@ -10633,7 +10633,7 @@ - Solitaire Royale (Jpn, Alt) + Solitaire Royale (Japan, alt) 1988 Game Arts @@ -10644,7 +10644,7 @@ - Solitaire Royale (Jpn, Alt 2) + Solitaire Royale (Japan, alt 2) 1988 Game Arts @@ -10655,7 +10655,7 @@ - Sony Graphics Editor v1.0 (Jpn) + Sony Graphics Editor v1.0 (Japan) 1986 Sony @@ -10666,7 +10666,7 @@ - Sorcerian (Jpn) + Sorcerian (Japan) 1987 Falcom @@ -10702,7 +10702,7 @@ - Sorcerian (Jpn, Alt) + Sorcerian (Japan, alt) 1987 Falcom @@ -10738,7 +10738,7 @@ - Sorcerian Tsuika Scenario 2 - Sengoku Sorcerian (Jpn, Bad Dump?) + Sorcerian Tsuika Scenario 2 - Sengoku Sorcerian (Japan, bad dump?) 1992 Brother Industries @@ -10759,7 +10759,7 @@ - Sorcerian Tsuika Scenario 3 - Pyramid Sorcerian (Jpn, Bad Dump?) + Sorcerian Tsuika Scenario 3 - Pyramid Sorcerian (Japan, bad dump?) 1992 Brother Industries @@ -10780,7 +10780,7 @@ - Hoshi no Suna Monogatari (Jpn) + Hoshi no Suna Monogatari (Japan) 1990 D.O. @@ -10816,7 +10816,7 @@ - Star Ship Rendezvous (Jpn) + Star Ship Rendezvous (Japan) 1988 Scaptrust @@ -10832,7 +10832,7 @@ - Star Ship Rendezvous (Jpn, Alt) + Star Ship Rendezvous (Japan, alt) 1988 Scaptrust @@ -10848,7 +10848,7 @@ - Star Ship Rendezvous (Jpn, Alt 2) + Star Ship Rendezvous (Japan, alt 2) 1988 Scaptrust @@ -10864,7 +10864,7 @@ - Steinzeit (Ger) + Steinzeit (Germany) 1987 Data Beutner @@ -10875,7 +10875,7 @@ - Suikoden - Tenmei no Chikai (Jpn) + Suikoden - Tenmei no Chikai (Japan) 1989 Koei @@ -10886,7 +10886,7 @@ - Suikoden - Tenmei no Chikai (Jpn, Alt) + Suikoden - Tenmei no Chikai (Japan, alt) 1989 Koei @@ -10897,7 +10897,7 @@ - Super Daisenryaku (Jpn) + Super Daisenryaku (Japan) 1988 Micro Cabin @@ -10908,7 +10908,7 @@ - Super Pink Sox 1 (Jpn) + Super Pink Sox 1 (Japan) 1990 Wendy Magazine @@ -10924,7 +10924,7 @@ - Super Pink Sox 1 (Jpn, Alt) + Super Pink Sox 1 (Japan, alt) 1990 Wendy Magazine @@ -10940,7 +10940,7 @@ - Super Pink Sox 2 (Jpn) + Super Pink Sox 2 (Japan) 1990 Wendy Magazine @@ -10961,7 +10961,7 @@ - Super Shanghai - Dragon's Eye (Jpn) + Super Shanghai - Dragon's Eye (Japan) 1991 Hot-B @@ -10972,7 +10972,7 @@ - Synth Saurus v2.0 (Jpn) + Synth Saurus v2.0 (Japan) 1989 Bit² @@ -10983,7 +10983,7 @@ - T.D.F. (Jpn) + T.D.F. (Japan) 1988 Data West @@ -10994,7 +10994,7 @@ - TNT (Fra) + TNT (France) 1987 Infogrames @@ -11005,7 +11005,7 @@ - TNT (Fra, Alt) + TNT (France, alt) 1987 Infogrames @@ -11016,7 +11016,7 @@ - TNT (Fra, Alt 2) + TNT (France, alt 2) 1987 Infogrames @@ -11027,7 +11027,7 @@ - Tanba (Jpn) + Tanba (Japan) 1987 Micronet @@ -11038,7 +11038,7 @@ - Tashiro Masashi no Princess ga Ippai (Jpn) + Tashiro Masashi no Princess ga Ippai (Japan) 1989 Sony @@ -11049,7 +11049,7 @@ - Tashiro Masashi no Princess ga Ippai (Jpn, Alt) + Tashiro Masashi no Princess ga Ippai (Japan, alt) 1989 Sony @@ -11060,7 +11060,7 @@ - Tashiro Masashi no Princess ga Ippai (Jpn, Alt 2) + Tashiro Masashi no Princess ga Ippai (Japan, alt 2) 1989 Sony @@ -11071,7 +11071,7 @@ - Tashiro Masashi no Princess ga Ippai (Jpn, Alt 3) + Tashiro Masashi no Princess ga Ippai (Japan, alt 3) 1989 Sony @@ -11082,7 +11082,7 @@ - Tashiro Masashi no Princess ga Ippai (Jpn, Alt 4) + Tashiro Masashi no Princess ga Ippai (Japan, alt 4) 1989 Sony @@ -11093,7 +11093,7 @@ - Tau Beat (Jpn) + Tau Beat (Japan) 1989 Champion Soft @@ -11124,7 +11124,7 @@ - Madonna no Yuuwaku (Jpn) + Madonna no Yuuwaku (Japan) 1988 Dot Plan @@ -11135,7 +11135,7 @@ - Madonna no Yuuwaku (Jpn, Alt) + Madonna no Yuuwaku (Japan, alt) 1988 Dot Plan @@ -11146,7 +11146,7 @@ - Testament (Jpn) + Testament (Japan) 1988 Basho House @@ -11162,7 +11162,7 @@ - Testament (Jpn, Alt) + Testament (Japan, alt) 1988 Basho House @@ -11178,7 +11178,7 @@ - Tetris (Jpn) + Tetris (Japan) 1988 BPS @@ -11189,7 +11189,7 @@ - Tetris (Jpn, v2?) + Tetris (Japan, v2?) 1988 BPS @@ -11200,7 +11200,7 @@ - The Tower? of Cabin - Cabin Panic (Jpn) + The Tower? of Cabin - Cabin Panic (Japan) 1992 Micro Cabin @@ -11221,7 +11221,7 @@ - The Tower? of Cabin - Cabin Panic (Jpn, Alt) + The Tower? of Cabin - Cabin Panic (Japan, alt) 1992 Micro Cabin @@ -11242,7 +11242,7 @@ - The Tower? of Cabin - Cabin Panic (Jpn, Alt 2) + The Tower? of Cabin - Cabin Panic (Japan, alt 2) 1992 Micro Cabin @@ -11263,7 +11263,7 @@ - Thunderbal (Ned) + Thunderbal (Netherlands) 1986 Eaglesoft @@ -11274,7 +11274,7 @@ - Thunderbal (Ned, Alt) + Thunderbal (Netherlands, alt) 1986 Eaglesoft @@ -11285,7 +11285,7 @@ - Thunderbal (Ned, Alt 2) + Thunderbal (Netherlands, alt 2) 1986 Eaglesoft @@ -11296,7 +11296,7 @@ - Tir-nan-óg - Dana no Matsuei (Jpn) + Tir-nan-óg - Dana no Matsuei (Japan) 1990 System Soft @@ -11317,7 +11317,7 @@ - Tir-nan-óg - Dana no Matsuei (Jpn, Alt) + Tir-nan-óg - Dana no Matsuei (Japan, alt) 1990 System Soft @@ -11338,7 +11338,7 @@ - Topografie Europa (Ned) + Topografie Europa (Netherlands) 1986 Philips @@ -11349,7 +11349,7 @@ - Topografie Europa (Ned, Alt) + Topografie Europa (Netherlands, alt) 1986 Philips @@ -11360,7 +11360,7 @@ - Topografie Wereld (Ned) + Topografie Wereld (Netherlands) 1986 Philips @@ -11371,7 +11371,7 @@ - Triton II - Road of Darkness (Jpn) + Triton II - Road of Darkness (Japan) 1989 Xain Soft @@ -11398,7 +11398,7 @@ - Triton II - Road of Darkness (Jpn, Alt) + Triton II - Road of Darkness (Japan, alt) 1989 Xain Soft @@ -11425,7 +11425,7 @@ - Toushin Toshi (Jpn) + Toushin Toshi (Japan) 1990 Alicesoft @@ -11471,7 +11471,7 @@ - Toushin Toshi (Jpn, Alt) + Toushin Toshi (Japan, alt) 1990 Alicesoft @@ -11517,7 +11517,7 @@ - Toushin Toshi (Jpn, Alt 2) + Toushin Toshi (Japan, alt 2) 1990 Alicesoft @@ -11563,7 +11563,7 @@ - Ultima I - The First Age of Darkness (Jpn) + Ultima I - The First Age of Darkness (Japan) 1986 Pony Canyon @@ -11574,7 +11574,7 @@ - Ultima I - The First Age of Darkness (Jpn, Alt) + Ultima I - The First Age of Darkness (Japan, alt) 1986 Pony Canyon @@ -11585,7 +11585,7 @@ - Ultima IV - Quest of the Avatar (Jpn) + Ultima IV - Quest of the Avatar (Japan) 1987 Pony Canyon @@ -11601,7 +11601,7 @@ - Ultima IV - Quest of the Avatar (Jpn, Alt Disk 2) + Ultima IV - Quest of the Avatar (Japan, alt disk 2) 1987 Pony Canyon @@ -11617,7 +11617,7 @@ - Undead Line (Jpn) + Undead Line (Japan) 1989 T&E Soft @@ -11628,7 +11628,7 @@ - Undead Line (Jpn, Alt) + Undead Line (Japan, alt) 1989 T&E Soft @@ -11639,7 +11639,7 @@ - Undead Line (Jpn, Alt 2) + Undead Line (Japan, alt 2) 1989 T&E Soft @@ -11650,7 +11650,7 @@ - UniPaint (Jpn) + UniPaint (Japan) 1986 Matsushita @@ -11661,7 +11661,7 @@ - UniPaint (Jpn, Alt) + UniPaint (Japan, alt) 1986 Matsushita @@ -11672,7 +11672,7 @@ - UniPaint (Jpn, Alt 2) + UniPaint (Japan, alt 2) 1986 Matsushita @@ -11683,7 +11683,7 @@ - Konami no Uranai Sensation (Jpn) + Konami no Uranai Sensation (Japan) 1988 Konami @@ -11694,7 +11694,7 @@ - Konami no Uranai Sensation (Jpn, Alt) + Konami no Uranai Sensation (Japan, alt) 1988 Konami @@ -11705,7 +11705,7 @@ - Urotsukidoji (Jpn) + Urotsukidoji (Japan) 1990 Fairytale @@ -11731,7 +11731,7 @@ - Urotsukidoji (Jpn, Alt) + Urotsukidoji (Japan, alt) 1990 Fairytale @@ -11757,7 +11757,7 @@ - Urusei Yatsura - Koi no Survival Birthday (Jpn) + Urusei Yatsura - Koi no Survival Birthday (Japan) 1987 Micro Cabin @@ -11768,7 +11768,7 @@ - Urusei Yatsura - Koi no Survival Birthday (Jpn, Alt) + Urusei Yatsura - Koi no Survival Birthday (Japan, alt) 1987 Micro Cabin @@ -11779,7 +11779,7 @@ - Mugen Senshi Valis II (Jpn) + Mugen Senshi Valis II (Japan) 1989 Telenet Japan @@ -11805,7 +11805,7 @@ - Mugen Senshi Valis II (Jpn, Alt) + Mugen Senshi Valis II (Japan, alt) 1989 Telenet Japan @@ -11831,7 +11831,7 @@ - Video Graphics (Jpn) + Video Graphics (Japan) 1986 Matsushita @@ -11842,7 +11842,7 @@ - Shiryou Sensen 2 - War of the Dead Part 2 (Jpn) + Shiryou Sensen 2 - War of the Dead Part 2 (Japan) 1990 Victor @@ -11858,7 +11858,7 @@ - Shiryou Sensen 2 - War of the Dead Part 2 (Jpn, Alt) + Shiryou Sensen 2 - War of the Dead Part 2 (Japan, alt) 1990 Victor @@ -11874,7 +11874,7 @@ - Shiryou Sensen 2 - War of the Dead Part 2 (Jpn, Alt 2) + Shiryou Sensen 2 - War of the Dead Part 2 (Japan, alt 2) 1990 Victor @@ -11890,7 +11890,7 @@ - Shiryou Sensen - War of the Dead (Jpn) + Shiryou Sensen - War of the Dead (Japan) 1989 Victor @@ -11901,7 +11901,7 @@ - Shiryou Sensen - War of the Dead (Jpn, Alt) + Shiryou Sensen - War of the Dead (Japan, alt) 1989 Victor @@ -11912,7 +11912,7 @@ - Fujiko Fujio (A) no Warau Salesman (Jpn) + Fujiko Fujio (A) no Warau Salesman (Japan) 1991 Compile @@ -11928,7 +11928,7 @@ - Warning (Jpn) + Warning (Japan) 1988 Cosmos Computer @@ -11939,7 +11939,7 @@ - Watashi wo Golf ni Tsuretette (Jpn) + Watashi wo Golf ni Tsuretette (Japan) 1991 Fairytale @@ -11970,7 +11970,7 @@ - What's Michael? (Jpn) + What's Michael? (Japan) 1989 Micro Cabin @@ -11986,7 +11986,7 @@ - Wingman Special (Jpn) + Wingman Special (Japan) 1988 Enix @@ -12002,7 +12002,7 @@ - Wing Man Special (Jpn, Alt) + Wing Man Special (Japan, alt) 1988 Enix @@ -12018,7 +12018,7 @@ - Winning Solution (Jpn) + Winning Solution (Japan) 1990 Cosmos Computer @@ -12034,7 +12034,7 @@ - Wizardry - Proving Grounds of Mad Overload (Jpn) + Wizardry - Proving Grounds of Mad Overload (Japan) 1987 ASCII @@ -12052,7 +12052,7 @@ - Wizardry - Proving Grounds of Mad Overload (Jpn, Alt) + Wizardry - Proving Grounds of Mad Overload (Japan, alt) 1987 ASCII @@ -12070,7 +12070,7 @@ - Wizardry - Proving Grounds of Mad Overload (Jpn, Alt 2) + Wizardry - Proving Grounds of Mad Overload (Japan, alt 2) 1987 ASCII @@ -12088,7 +12088,7 @@ - Maka Fushigi Adventure Little Princess (Jpn) + Maka Fushigi Adventure Little Princess (Japan) 1987 Champion Soft @@ -12099,7 +12099,7 @@ - World Golf (Jpn) + World Golf (Japan) 1986 Enix @@ -12110,7 +12110,7 @@ - World Golf (Jpn, Alt) + World Golf (Japan, alt) 1986 Enix @@ -12121,7 +12121,7 @@ - World Golf (Jpn, Alt 2) + World Golf (Japan, alt 2) 1986 Enix @@ -12132,7 +12132,7 @@ - World Golf (Jpn, Alt 3) + World Golf (Japan, alt 3) 1986 Enix @@ -12143,7 +12143,7 @@ - World Golf II (Jpn) + World Golf II (Japan) 1988 Enix @@ -12159,7 +12159,7 @@ - World Golf II (Jpn, Alt) + World Golf II (Japan, alt) 1988 Enix @@ -12175,7 +12175,7 @@ - World Golf II (Jpn, Alt 2) + World Golf II (Japan, alt 2) 1988 Enix @@ -12191,7 +12191,7 @@ - X-Na (Jpn) + X-Na (Japan) 1991 Fairytale @@ -12222,7 +12222,7 @@ - X-Na (Jpn, Alt) + X-Na (Japan, alt) 1991 Fairytale @@ -12253,7 +12253,7 @@ - Xak - The Art of Visual Stage (Jpn) + Xak - The Art of Visual Stage (Japan) 1989 Micro Cabin @@ -12277,7 +12277,7 @@ - Xak - The Art of Visual Stage (Jpn, Alt) + Xak - The Art of Visual Stage (Japan, alt) 1989 Micro Cabin @@ -12301,7 +12301,7 @@ - Xak - The Art of Visual Stage (Jpn, Alt 2) + Xak - The Art of Visual Stage (Japan, alt 2) 1989 Micro Cabin @@ -12325,7 +12325,7 @@ - Xak II (Jpn) + Xak II (Japan) 1990 Micro Cabin @@ -12367,7 +12367,7 @@ - Xak II (Jpn, Alt) + Xak II (Japan, alt) 1990 Micro Cabin @@ -12409,7 +12409,7 @@ - Xak II (Jpn, Alt 2) + Xak II (Japan, alt 2) 1990 Micro Cabin @@ -12451,7 +12451,7 @@ - Xak II (Jpn, Alt 3) + Xak II (Japan, alt 3) 1990 Micro Cabin @@ -12493,7 +12493,7 @@ - Xak III - The Tower of Gazzel (Jpn) + Xak III - The Tower of Gazzel (Japan) 1991 Micro Cabin @@ -12519,7 +12519,7 @@ - Xak III - The Tower of Gazzel (Jpn, Alt) + Xak III - The Tower of Gazzel (Japan, alt) 1991 Micro Cabin @@ -12545,7 +12545,7 @@ - Xanadu (Jpn) + Xanadu (Japan) 1987 Falcom @@ -12561,7 +12561,7 @@ - Xanadu (Jpn, Alt) + Xanadu (Japan, alt) 1987 Falcom @@ -12577,7 +12577,7 @@ - XZR - Hakai no Guuzou (Jpn) + XZR - Hakai no Guuzou (Japan) 1988 Telenet Japan @@ -12593,7 +12593,7 @@ - XZR - Hakai no Guuzou (Jpn, Alt) + XZR - Hakai no Guuzou (Japan, alt) 1988 Telenet Japan @@ -12609,7 +12609,7 @@ - XZR - Hakai no Guuzou (Jpn, Alt 2) + XZR - Hakai no Guuzou (Japan, alt 2) 1988 Telenet Japan @@ -12625,7 +12625,7 @@ - XZR II (Jpn) + XZR II (Japan) 1988 Telenet Japan @@ -12641,7 +12641,7 @@ - XZR II (Jpn, Alt) + XZR II (Japan, alt) 1988 Telenet Japan @@ -12657,7 +12657,7 @@ - XZR II (Jpn, Alt 2) + XZR II (Japan, alt 2) 1988 Telenet Japan @@ -12673,7 +12673,7 @@ - Yajiuma Pennant Race (Jpn) + Yajiuma Pennant Race (Japan) 1989 Victor @@ -12684,7 +12684,7 @@ - Yaksa (Jpn) + Yaksa (Japan) 1987 WolfTeam @@ -12695,7 +12695,7 @@ - Yaksa (Jpn, Alt) + Yaksa (Japan, alt) 1987 WolfTeam @@ -12706,7 +12706,7 @@ - Yakyuudou (Jpn) + Yakyuudou (Japan) 1989 Nihon Create @@ -12722,7 +12722,7 @@ - Yakyuudou II (Jpn) + Yakyuudou II (Japan) 1990 Nihon Create @@ -12748,7 +12748,7 @@ - Yakyuudo II Databook '90 (Jpn) + Yakyuudo II Databook '90 (Japan) 1990 Nihon Bussan @@ -12759,7 +12759,7 @@ - Yoshida Konzern - Shooting Game Construction Tool (Jpn) + Yoshida Konzern - Shooting Game Construction Tool (Japan) 1990 MSX Magazine @@ -12770,7 +12770,7 @@ - Yoshida Koumuten Data Library Vol. 1 (Jpn) + Yoshida Koumuten Data Library Vol. 1 (Japan) 1990 MSX Magazine @@ -12781,7 +12781,7 @@ - Youma Kourin (Jpn) + Youma Kourin (Japan) 1989 Nippon Dexter @@ -12792,7 +12792,7 @@ - Youma Kourin (Jpn, Alt) + Youma Kourin (Japan, alt) 1989 Nippon Dexter @@ -12803,7 +12803,7 @@ - Youma Kourin (Jpn, Alt 2) + Youma Kourin (Japan, alt 2) 1989 Nippon Dexter @@ -12814,7 +12814,7 @@ - Ys - Ancient Ys Vanished Omen (Jpn) + Ys - Ancient Ys Vanished Omen (Japan) 1987 Falcom @@ -12825,7 +12825,7 @@ - Ys - Ancient Ys Vanished Omen (Jpn, Alt) + Ys - Ancient Ys Vanished Omen (Japan, alt) 1987 Falcom @@ -12836,7 +12836,7 @@ - Ys - Ancient Ys Vanished Omen (Jpn, Alt 2) + Ys - Ancient Ys Vanished Omen (Japan, alt 2) 1987 Falcom @@ -12847,7 +12847,7 @@ - Ys - Ancient Ys Vanished Omen (Jpn, Alt 3) + Ys - Ancient Ys Vanished Omen (Japan, alt 3) 1987 Falcom @@ -12858,7 +12858,7 @@ - Ys - Ancient Ys Vanished Omen (Jpn, Alt 4) + Ys - Ancient Ys Vanished Omen (Japan, alt 4) 1987 Falcom @@ -12869,7 +12869,7 @@ - Ys II - Ancient Ys Vanished The Final Chapter (Jpn) + Ys II - Ancient Ys Vanished The Final Chapter (Japan) 1988 Falcom @@ -12887,7 +12887,7 @@ - Ys II - Ancient Ys Vanished The Final Chapter (Jpn, Alt) + Ys II - Ancient Ys Vanished The Final Chapter (Japan, alt) 1988 Falcom @@ -12905,7 +12905,7 @@ - Ys II - Ancient Ys Vanished The Final Chapter (Jpn, Alt 2) + Ys II - Ancient Ys Vanished The Final Chapter (Japan, alt 2) 1988 Falcom @@ -12923,7 +12923,7 @@ - Ys III - Wanderers from Ys (Jpn) + Ys III - Wanderers from Ys (Japan) 1989 Falcom @@ -12959,7 +12959,7 @@ - Ys III - Wanderers from Ys (Jpn, Alt) + Ys III - Wanderers from Ys (Japan, alt) 1989 Falcom @@ -12995,7 +12995,7 @@ - Zatsugaku Olympics - Watanabe Wataru Hen (Jpn) + Zatsugaku Olympics - Watanabe Wataru Hen (Japan) 1988 Hard @@ -13006,7 +13006,7 @@ - Zero - The 4th Unit Act. 4 (Jpn) + Zero - The 4th Unit Act. 4 (Japan) 1990 Data West @@ -13022,7 +13022,7 @@ - Zoo (Ned) + Zoo (Netherlands) 1987 Philips @@ -13033,7 +13033,7 @@ - Zoo (Ned, Alt) + Zoo (Netherlands, alt) 1987 Philips @@ -13044,7 +13044,7 @@ - Zoo (Ned, Alt 2) + Zoo (Netherlands, alt 2) 1987 Philips @@ -13055,7 +13055,7 @@ - Zowazo World (Jpn) + Zowazo World (Japan) 1989 MSX Magazine @@ -13066,7 +13066,7 @@ - Zowazo World (Jpn, Alt) + Zowazo World (Japan, alt) 1989 MSX Magazine @@ -13077,7 +13077,7 @@ - Zowazo World (Jpn, Alt 2) + Zowazo World (Japan, alt 2) 1989 MSX Magazine @@ -13088,7 +13088,7 @@ - Zowazo World (Jpn, Alt 3) + Zowazo World (Japan, alt 3) 1989 MSX Magazine @@ -13109,7 +13109,7 @@ - 3 Square (Ned) + 3 Square (Netherlands) 1993 <homebrew> @@ -13121,7 +13121,7 @@ - La Abadia del Crimen (Spa, Remake) + La Abadia del Crimen (Spain, remake) 2001 <homebrew> @@ -13133,7 +13133,7 @@ - La Abadia del Crimen (Spa, Remake, Alt) + La Abadia del Crimen (Spain, remake, alt) 2001 <homebrew> @@ -13157,7 +13157,7 @@ - Ago Tsu Disk (Jpn) + Ago Tsu Disk (Japan) 1997 <doujin> @@ -13169,7 +13169,7 @@ - Akin (Ned) + Akin (Netherlands) 1995 <homebrew> @@ -13186,7 +13186,7 @@ - Alien's Slime (Ger) + Alien's Slime (Germany) 1990 <homebrew> @@ -13198,7 +13198,7 @@ - Alien's Slime (Ger, Alt) + Alien's Slime (Germany, alt) 1990 <homebrew> @@ -13210,7 +13210,7 @@ - Alien's Slime (Ger, Alt 2) + Alien's Slime (Germany, alt 2) 1990 <homebrew> @@ -13222,7 +13222,7 @@ - Anma's Amusement Disk (Ned) + Anma's Amusement Disk (Netherlands) 1992 <homebrew> @@ -13234,7 +13234,7 @@ - Arc (Ned, Demo) + Arc (Netherlands, demo) 1990 <homebrew> @@ -13246,7 +13246,7 @@ - Arc (Ned, Demo, Alt) + Arc (Netherlands, demo, alt) 1990 <homebrew> @@ -13258,7 +13258,7 @@ - Arc (Ned, Demo 1) + Arc (Netherlands, demo 1) 19?? <homebrew> @@ -13270,7 +13270,7 @@ - Arc (Ned, Demo 2) + Arc (Netherlands, demo 2) 19?? <homebrew> @@ -13282,7 +13282,7 @@ - Ark-A-Noah (Spa, Demo) + Ark-A-Noah (Spain, demo) 2000 <homebrew> @@ -13294,7 +13294,7 @@ - Arm Wrestling (Spa) + Arm Wrestling (Spain) 2004 <homebrew> @@ -13306,7 +13306,7 @@ - The Arrow of Direction (Jpn) + The Arrow of Direction (Japan) 2007 <doujin> @@ -13321,7 +13321,7 @@ ASO Remake (UK?) 2012 <homebrew> - + @@ -13330,7 +13330,7 @@ - Astro Monster (Jpn?) + Astro Monster (Japan?) 1995 <doujin> @@ -13342,7 +13342,7 @@ - Basaro Attacker (Jpn) + Basaro Attacker (Japan) 19?? <doujin> @@ -13365,7 +13365,7 @@ - Be-Bop Bout (Jpn) + Be-Bop Bout (Japan) 1994 <doujin> @@ -13377,7 +13377,7 @@ - Be-Bop Bout (Jpn, Alt) + Be-Bop Bout (Japan, alt) 1994 <doujin> @@ -13389,7 +13389,7 @@ - Be-Bop Bout (Jpn, Demo) + Be-Bop Bout (Japan, demo) 1994 <doujin> @@ -13401,7 +13401,7 @@ - Bet your life (Ned) + Bet your life (Netherlands) 1994 <homebrew> @@ -13418,7 +13418,7 @@ - Black Cyclon (Ned) + Black Cyclon (Netherlands) 1993 <homebrew> @@ -13435,7 +13435,7 @@ - Black Cyclon (Ned, Alt) + Black Cyclon (Netherlands, alt) 1993 <homebrew> @@ -13452,7 +13452,7 @@ - Black Cyclon (Ned, Alt 2) + Black Cyclon (Netherlands, alt 2) 1993 <homebrew> @@ -13469,7 +13469,7 @@ - Black Cyclon (Ned, Alt 3) + Black Cyclon (Netherlands, alt 3) 1993 <homebrew> @@ -13486,7 +13486,7 @@ - Blade Lords (Ned) + Blade Lords (Netherlands) 1997 <homebrew> @@ -13498,7 +13498,7 @@ - Blade Lords (Ned, Alt) + Blade Lords (Netherlands, alt) 1997 <homebrew> @@ -13510,7 +13510,7 @@ - Bomb Jack (Spa) + Bomb Jack (Spain) 2004 <homebrew> @@ -13522,7 +13522,7 @@ - Bomb Jack (Spa, Demo) + Bomb Jack (Spain, demo) 2004 <homebrew> @@ -13534,7 +13534,7 @@ - Bomberman (Ned) + Bomberman (Netherlands) 1996 <homebrew> @@ -13546,7 +13546,7 @@ - Bomberman 2 (Ned) + Bomberman 2 (Netherlands) 1997 <homebrew> @@ -13580,7 +13580,7 @@ - Bozo's Big Adventure (Ned) + Bozo's Big Adventure (Netherlands) 1992 <homebrew> @@ -13616,7 +13616,7 @@ - Bubble Rain (Spa, Demo) + Bubble Rain (Spain, demo) 2001 <homebrew> @@ -13628,7 +13628,7 @@ - Bubble Utilize (Jpn) + Bubble Utilize (Japan) 1992 <doujin> @@ -13640,7 +13640,7 @@ - Cat 'n' Mouse (Spa, Demo) + Cat 'n' Mouse (Spain, demo) 2002 <homebrew> @@ -13652,7 +13652,7 @@ - Cell 4 (Jpn) + Cell 4 (Japan) 2004 <doujin> @@ -13664,7 +13664,7 @@ - Championship Kinoko Firing Game (Jpn) + Championship Kinoko Firing Game (Japan) 2001 <doujin> @@ -13676,7 +13676,7 @@ - Circle Pamphlet #2 (Jpn) + Circle Pamphlet #2 (Japan) 1994 <doujin> @@ -13688,7 +13688,7 @@ - Conqueror (Jpn) + Conqueror (Japan) 1992 <doujin> @@ -13700,7 +13700,7 @@ - Construction Craze (Ned) + Construction Craze (Netherlands) 1994 <homebrew> @@ -13712,7 +13712,7 @@ - Construction Craze (Ned, Alt) + Construction Craze (Netherlands, alt) 1994 <homebrew> @@ -13724,7 +13724,7 @@ - Coral 2 (Ned, Demo) + Coral 2 (Netherlands, demo) 2004 <homebrew> @@ -13736,7 +13736,7 @@ - Core Dump (Ned, Demo) + Core Dump (Netherlands, demo) 199? <homebrew> @@ -13748,7 +13748,7 @@ - Core Fighter (Jpn) + Core Fighter (Japan) 2007 <doujin> @@ -13760,7 +13760,7 @@ - Cosmo Gang de Puzzle (Jpn) + Cosmo Gang de Puzzle (Japan) 1999 <doujin> @@ -13772,7 +13772,7 @@ - Cytron (Ned) + Cytron (Netherlands) 1994 <homebrew> @@ -13784,7 +13784,7 @@ - Cytron (Ned, Alt) + Cytron (Netherlands, alt) 1994 <homebrew> @@ -13796,7 +13796,7 @@ - Dahku (Spa, Demo) + Dahku (Spain, demo) 2005 <homebrew> @@ -13808,7 +13808,7 @@ - Dahku (Spa, Demo?, Alt) + Dahku (Spain, demo?, alt) 2005 <homebrew> @@ -13820,7 +13820,7 @@ - DASS (Ned) + DASS (Netherlands) 1992 <homebrew> @@ -13844,7 +13844,7 @@ - DIX (Ned) + DIX (Netherlands) 1992 <homebrew> @@ -13856,7 +13856,7 @@ - DIX (Ned, Alt) + DIX (Netherlands, alt) 1992 <homebrew> @@ -13868,7 +13868,7 @@ - DIX (Ned, Demo) + DIX (Netherlands, demo) 1992 <homebrew> @@ -13880,7 +13880,7 @@ - DIX (Ned, Demo, Alt) + DIX (Netherlands, demo, alt) 1992 <homebrew> @@ -13892,7 +13892,7 @@ - Dizzy (Ned) + Dizzy (Netherlands) 1992 <homebrew> @@ -13904,7 +13904,7 @@ - Dragon Ball Z (Kor) + Dragon Ball Z (Korea) 199? <homebrew> @@ -13915,7 +13915,7 @@ - Dragon Spirit (Demo) + Dragon Spirit (demo) 2013? <doujin> @@ -13927,7 +13927,7 @@ - Duck Tales (Ned) + Duck Tales (Netherlands) 1994 <homebrew> @@ -13939,7 +13939,7 @@ - Dungeon Striker (Jpn) + Dungeon Striker (Japan) 1991 <doujin> @@ -13951,7 +13951,7 @@ - Eggbert (Ned) + Eggbert (Netherlands) 1994 Fony @@ -13962,7 +13962,7 @@ - Eggbert (Ned, Alt) + Eggbert (Netherlands, alt) 1994 Fony @@ -13973,7 +13973,7 @@ - Eggbert (Ned, Demo) + Eggbert (Netherlands, demo) 1993 Fony @@ -13984,7 +13984,7 @@ - F-Zeru Kai (Jpn) + F-Zeru Kai (Japan) 1991 <doujin> @@ -13996,7 +13996,7 @@ - Fighter's Ragnarok (Jpn) + Fighter's Ragnarok (Japan) 1998 <doujin> @@ -14008,7 +14008,7 @@ - Final Bout (Spa) + Final Bout (Spain) 2000 <homebrew> @@ -14020,7 +14020,7 @@ - Final Graphics (Ger, v2.0) + Final Graphics (Germany, v2.0) 1989 H.S.H. Computer @@ -14031,7 +14031,7 @@ - Frantic (Ned) + Frantic (Netherlands) 1992 <homebrew> @@ -14043,7 +14043,7 @@ - Frantic (Ned, Alt) + Frantic (Netherlands, alt) 1992 <homebrew> @@ -14055,7 +14055,7 @@ - Galmoon (Jpn) + Galmoon (Japan) 1990 <doujin> @@ -14067,7 +14067,7 @@ - Galmoon (Jpn, Alt) + Galmoon (Japan, alt) 1990 <doujin> @@ -14079,7 +14079,7 @@ - Gals Quest Bangai-hen - The Princess's Pursuit (Jpn) + Gals Quest Bangai-hen - The Princess's Pursuit (Japan) 2001 <doujin> @@ -14091,7 +14091,7 @@ - Gekitotsu 7 Narabe (Jpn) + Gekitotsu 7 Narabe (Japan) 1990 <doujin> @@ -14103,7 +14103,7 @@ - Gekitotsu 7 Narabe (Jpn, Alt) + Gekitotsu 7 Narabe (Japan, alt) 1990 <doujin> @@ -14115,7 +14115,7 @@ - Gekitotsu 7 Narabe (Jpn, Alt 2) + Gekitotsu 7 Narabe (Japan, alt 2) 1990 <doujin> @@ -14127,7 +14127,7 @@ - Gekitotsu 7 Narabe (Jpn, Alt 3) + Gekitotsu 7 Narabe (Japan, alt 3) 1990 <doujin> @@ -14139,7 +14139,7 @@ - Goldrush (Ned, Cracked) + Goldrush (Netherlands, cracked) 1993 <homebrew> @@ -14151,7 +14151,7 @@ - Goldrush (Ned, Cracked 2) + Goldrush (Netherlands, cracked 2) 1993 <homebrew> @@ -14163,7 +14163,7 @@ - Goldrush (Ned, Cracked 3) + Goldrush (Netherlands, cracked 3) 1993 <homebrew> @@ -14175,7 +14175,7 @@ - Gradius III Legends (Spa) + Gradius III Legends (Spain) 2001 <homebrew> @@ -14187,7 +14187,7 @@ - The Great Gianna Sisters (Ned) + The Great Gianna Sisters (Netherlands) 1993 <homebrew> @@ -14199,7 +14199,7 @@ - The Great Gianna Sisters (Ned, Alt) + The Great Gianna Sisters (Netherlands, alt) 1993 <homebrew> @@ -14211,7 +14211,7 @@ - Guido's Lost in Plantinus (Ned) + Guido's Lost in Plantinus (Netherlands) 1995 <homebrew> @@ -14223,7 +14223,7 @@ - Hamaraja Night (Jpn) + Hamaraja Night (Japan) 1994 <doujin> @@ -14236,7 +14236,7 @@ - Haradius (Jpn) + Haradius (Japan) 1991 <doujin> @@ -14248,7 +14248,7 @@ - Haradius (Jpn, Alt) + Haradius (Japan, alt) 1991 <doujin> @@ -14260,7 +14260,7 @@ - Haradius (Jpn, Alt 2) + Haradius (Japan, alt 2) 1991 <doujin> @@ -14272,7 +14272,7 @@ - Humburger (Jpn) + Humburger (Japan) 19?? <doujin> @@ -14284,7 +14284,7 @@ - Illusion Sniper's (Jpn) + Illusion Sniper's (Japan) 1994 <doujin> @@ -14296,7 +14296,7 @@ - Indianquest (Jpn) + Indianquest (Japan) 1992 <doujin> @@ -14308,7 +14308,7 @@ - Izumic Ballade (Jpn) + Izumic Ballade (Japan) 1996 <doujin> @@ -14320,7 +14320,7 @@ - Kanzen Kouryaku Kyokugen (Jpn) + Kanzen Kouryaku Kyokugen (Japan) 1997 <doujin> @@ -14337,7 +14337,7 @@ - Kanzen Kouryaku Kyokugen (Jpn, Alt) + Kanzen Kouryaku Kyokugen (Japan, alt) 1997 <doujin> @@ -14354,7 +14354,7 @@ - Knuckle Duster (Jpn) + Knuckle Duster (Japan) 1996 <doujin> @@ -14378,7 +14378,7 @@ - Kpiball (Jpn) + Kpiball (Japan) 2000 <doujin> @@ -14390,7 +14390,7 @@ - Last War 2 (Jpn) + Last War 2 (Japan) 1991 <doujin> @@ -14414,7 +14414,7 @@ - Lilo - La Conquista de la Fama (Spa) + Lilo - La Conquista de la Fama (Spain) 1995 <homebrew> @@ -14431,7 +14431,7 @@ - Line-Buster (Ned) + Line-Buster (Netherlands) 1991 <homebrew> @@ -14443,7 +14443,7 @@ - Lingo MSX2 (Ned) + Lingo MSX2 (Netherlands) 1992 <homebrew> @@ -14455,7 +14455,7 @@ - Lingo MSX2 (Ned, Alt) + Lingo MSX2 (Netherlands, alt) 1992 <homebrew> @@ -14467,7 +14467,7 @@ - Lingo MSX2 (Ned, Alt 2) + Lingo MSX2 (Netherlands, alt 2) 1992 <homebrew> @@ -14479,7 +14479,7 @@ - Logos Man (Jpn) + Logos Man (Japan) 1997 <doujin> @@ -14491,7 +14491,7 @@ - Magical Coin (Jpn) + Magical Coin (Japan) 1995 <doujin> @@ -14503,7 +14503,7 @@ - Magical Labyrinth Remix (Jpn) + Magical Labyrinth Remix (Japan) 1998 <doujin> @@ -14515,7 +14515,7 @@ - Magical Labyrinth Remix (Jpn, Demo) + Magical Labyrinth Remix (Japan, demo) 1995 <doujin> @@ -14527,7 +14527,7 @@ - Magnar (Ned) + Magnar (Netherlands) 1992 <homebrew> @@ -14549,7 +14549,7 @@ - Magnar (Ned, Alt) + Magnar (Netherlands, alt) 1992 <homebrew> @@ -14571,7 +14571,7 @@ - Maryu Pie (Jpn) + Maryu Pie (Japan) 1990 <doujin> @@ -14583,7 +14583,7 @@ - Mask Kyou Jidai Battle (Jpn) + Mask Kyou Jidai Battle (Japan) 1994 <doujin> @@ -14595,7 +14595,7 @@ - Match Maniac (Ned) + Match Maniac (Netherlands) 1996 <homebrew> @@ -14607,7 +14607,7 @@ - Matrix - Quest for Deliverance (Spa?) + Matrix - Quest for Deliverance (Spain?) 1994 <homebrew> @@ -14619,7 +14619,7 @@ - Mechanical Brain (Jpn, Demo) + Mechanical Brain (Japan, demo) 1996 <doujin> @@ -14631,7 +14631,7 @@ - Michi -Tao- (Jpn) + Michi -Tao- (Japan) 1996 <doujin> @@ -14643,7 +14643,7 @@ - Milkymate (Jpn) + Milkymate (Japan) 1991 <doujin> @@ -14667,7 +14667,7 @@ - Mobius Debugger 2 - Eternal Striker (Jpn, Demo) + Mobius Debugger 2 - Eternal Striker (Japan, demo) 1995 <doujin> @@ -14679,7 +14679,7 @@ - Moon Landing (Jpn) + Moon Landing (Japan) 1998 <doujin> @@ -14690,7 +14690,7 @@ - Mr Hawaii (Jpn) + Mr Hawaii (Japan) 2004 <doujin> @@ -14714,7 +14714,7 @@ - MSX Paint IV (Nor, v4.00, Alt) + MSX Paint IV (Nor, v4.00, alt) 1992 <homebrew> @@ -14726,7 +14726,7 @@ - MSX Paint IV (Nor, v4.00, Alt 2) + MSX Paint IV (Nor, v4.00, alt 2) 1992 <homebrew> @@ -14738,7 +14738,7 @@ - No Fuss (Ned) + No Fuss (Netherlands) 1991 <homebrew> @@ -14750,7 +14750,7 @@ - Nobuchou no Yaboyou Zenkokuban (Jpn) + Nobuchou no Yaboyou Zenkokuban (Japan) 19?? <doujin> @@ -14762,7 +14762,7 @@ - Nosh (Ned) + Nosh (Netherlands) 1992 <homebrew> @@ -14774,7 +14774,7 @@ - Nosh (Ned, Demo?) + Nosh (Netherlands, demo?) 1992 <homebrew> @@ -14786,7 +14786,7 @@ - Not Again! (Ned) + Not Again! (Netherlands) 1994 <homebrew> @@ -14798,7 +14798,7 @@ - Not Again! (Ned, Alt) + Not Again! (Netherlands, alt) 1994 <homebrew> @@ -14810,7 +14810,7 @@ - Nuts (Spa?) + Nuts (Spain?) 1998 <homebrew> @@ -14822,7 +14822,7 @@ - NV Magazine 1996-08 (Jpn) + NV Magazine 1996-08 (Japan) 1996 <doujin> @@ -14844,7 +14844,7 @@ - NV Magazine 1996-09 (Jpn) + NV Magazine 1996-09 (Japan) 1996 <doujin> @@ -14866,7 +14866,7 @@ - NV Magazine 1996-11 (Jpn) + NV Magazine 1996-11 (Japan) 1996 <doujin> @@ -14888,7 +14888,7 @@ - NV Magazine 1997-01 (Jpn) + NV Magazine 1997-01 (Japan) 1997 <doujin> @@ -14910,7 +14910,7 @@ - NV Magazine 1997-09 (Jpn) + NV Magazine 1997-09 (Japan) 1997 <doujin> @@ -14932,7 +14932,7 @@ - NV Magazine 2002-06 (Jpn) + NV Magazine 2002-06 (Japan) 19?? <doujin> @@ -14954,7 +14954,7 @@ - NV Magazine 2002-07 (Jpn, Incomplete Dump) + NV Magazine 2002-07 (Japan, incomplete dump) 19?? <doujin> @@ -14972,7 +14972,7 @@ - NV Magazine 2002-08 (Jpn) + NV Magazine 2002-08 (Japan) 19?? <doujin> @@ -14994,7 +14994,7 @@ - NV Magazine Special 26 (Jpn) + NV Magazine Special 26 (Japan) 1996 <doujin> @@ -15016,7 +15016,7 @@ - Ounuki no Yabou - Shouten-ki (Jpn) + Ounuki no Yabou - Shouten-ki (Japan) 1995 <doujin> @@ -15028,7 +15028,7 @@ - Pallmith (Jpn) + Pallmith (Japan) 1991 <doujin> @@ -15040,7 +15040,7 @@ - Pan to Neil (Jpn) + Pan to Neil (Japan) 2001 <doujin> @@ -15052,7 +15052,7 @@ - Pentaro Odyssey - The Revenge (Spa) + Pentaro Odyssey - The Revenge (Spain) 1997 <homebrew> @@ -15064,7 +15064,7 @@ - Pentaro Odyssey 2 - The Island (Spa) + Pentaro Odyssey 2 - The Island (Spain) 2000 <homebrew> @@ -15076,7 +15076,7 @@ - Pleasure Hearts (Jpn) + Pleasure Hearts (Japan) 1999 <doujin> @@ -15088,7 +15088,7 @@ - Pleasure Hearts (Jpn, Alt) + Pleasure Hearts (Japan, alt) 1999 <doujin> @@ -15100,7 +15100,7 @@ - Poles (Jpn) + Poles (Japan) 1991 <doujin> @@ -15111,7 +15111,7 @@ - Pooyan (Fra) + Pooyan (France) 19?? <homebrew> @@ -15123,7 +15123,7 @@ - Pooyan (Fra, Alt) + Pooyan (France, alt) 19?? <homebrew> @@ -15135,7 +15135,7 @@ - Pooyan (Fra, Alt 2) + Pooyan (France, alt 2) 19?? <homebrew> @@ -15147,7 +15147,7 @@ - Pooyan (Fra, Alt 3) + Pooyan (France, alt 3) 19?? <homebrew> @@ -15159,7 +15159,7 @@ - Post Modern Girl (Jpn) + Post Modern Girl (Japan) 2001 <doujin> @@ -15170,7 +15170,7 @@ - Poyo Poyo Life (Jpn) + Poyo Poyo Life (Japan) 1991 <doujin> @@ -15182,7 +15182,7 @@ - Poyo Poyo Life II (Jpn) + Poyo Poyo Life II (Japan) 1992 <doujin> @@ -15194,7 +15194,7 @@ - Psycho Ball (Ned) + Psycho Ball (Netherlands) 1993 <homebrew> @@ -15218,7 +15218,7 @@ - Pumpkin Adventure - The Quest for the Holy Grail (Ned) + Pumpkin Adventure - The Quest for the Holy Grail (Netherlands) 1992 <homebrew> @@ -15230,7 +15230,7 @@ - Pumpkin Adventure - The Quest for the Holy Grail (Ned, Alt) + Pumpkin Adventure - The Quest for the Holy Grail (Netherlands, alt) 1992 <homebrew> @@ -15242,7 +15242,7 @@ - Pumpkin Adventure - The Quest for the Holy Grail (Ned, Alt 2) + Pumpkin Adventure - The Quest for the Holy Grail (Netherlands, alt 2) 1992 <homebrew> @@ -15254,7 +15254,7 @@ - Pumpkin Adventure II (Ned) + Pumpkin Adventure II (Netherlands) 1993 <homebrew> @@ -15281,7 +15281,7 @@ - Pumpkin Adventure III (Jpn) + Pumpkin Adventure III (Japan) 1995 <homebrew> @@ -15314,7 +15314,7 @@ - Pumpkin Adventure III (Ned, Demo) + Pumpkin Adventure III (Netherlands, demo) 1995 <homebrew> @@ -15326,7 +15326,7 @@ - Pumpkin Adventure III (Ned, Demo, Alt) + Pumpkin Adventure III (Netherlands, demo, alt) 1995 <homebrew> @@ -15338,7 +15338,7 @@ - Qop (Ned) + Qop (Netherlands) 1991 <homebrew> @@ -15350,7 +15350,7 @@ - Quattro (Ned) + Quattro (Netherlands) 1989 <homebrew> @@ -15362,7 +15362,7 @@ - Quest Yarou 2.2 (Jpn) + Quest Yarou 2.2 (Japan) 2008 <doujin> @@ -15374,7 +15374,7 @@ - Quinch (Ned) + Quinch (Netherlands) 1993 <homebrew> @@ -15386,7 +15386,7 @@ - Quiz! Atatchatte 25% (Jpn) + Quiz! Atatchatte 25% (Japan) 1996 <doujin> @@ -15398,7 +15398,7 @@ - Quiz! Atatchatte 25% (Jpn, Alt) + Quiz! Atatchatte 25% (Japan, alt) 1996 <doujin> @@ -15410,7 +15410,7 @@ - Quiz! Atatchatte 25% - Additional Questions (Jpn) + Quiz! Atatchatte 25% - Additional Questions (Japan) 1996 <doujin> @@ -15422,7 +15422,7 @@ - Rad van Fortuin (Ned) + Rad van Fortuin (Netherlands) 1991 <homebrew> @@ -15434,7 +15434,7 @@ - Rad van Fortuin (Ned, Alt 2) + Rad van Fortuin (Netherlands, alt 2) 1991 <homebrew> @@ -15446,7 +15446,7 @@ - Rad van Fortuin (Ned, Alt) + Rad van Fortuin (Netherlands, alt) 1991 <homebrew> @@ -15470,7 +15470,7 @@ - Rick Dangerous (Ned) + Rick Dangerous (Netherlands) 1992 <homebrew> @@ -15482,7 +15482,7 @@ - Rick Dangerous - Extra Levels (Ned) + Rick Dangerous - Extra Levels (Netherlands) 1993 <homebrew> @@ -15494,7 +15494,7 @@ - Riot (Jpn) + Riot (Japan) 1990 <doujin> @@ -15506,7 +15506,7 @@ - Rock City (Jpn) + Rock City (Japan) 1995 <doujin> @@ -15518,7 +15518,7 @@ - Rock'n Roller (Jpn) + Rock'n Roller (Japan) 1988 <doujin> @@ -15530,7 +15530,7 @@ - Rolling Thunder (Spa) + Rolling Thunder (Spain) 1997 <homebrew> @@ -15542,7 +15542,7 @@ - Sanriku Ouja #0 (Jpn) + Sanriku Ouja #0 (Japan) 1997 <doujin> @@ -15554,7 +15554,7 @@ - Sanriku Ouja #0 (Jpn, Alt) + Sanriku Ouja #0 (Japan, alt) 1997 <doujin> @@ -15566,7 +15566,7 @@ - Sayonara Carmine (Jpn) + Sayonara Carmine (Japan) 1999 <doujin> @@ -15578,7 +15578,7 @@ - Sex Bomb Bunny (Spa, Demo) + Sex Bomb Bunny (Spain, demo) 1999 <homebrew> @@ -15590,7 +15590,7 @@ - Shadow Heroes 2 (Jpn) + Shadow Heroes 2 (Japan) 1993 <doujin> @@ -15602,7 +15602,7 @@ - Shoulder Blade (Jpn, Bad Dump?) + Shoulder Blade (Japan, bad dump?) 1997 <doujin> @@ -15614,7 +15614,7 @@ - Shrines of Enigma (Ned) + Shrines of Enigma (Netherlands) 1994 <homebrew> @@ -15626,7 +15626,7 @@ - Shuffle Puck (Ned) + Shuffle Puck (Netherlands) 1993 <homebrew> @@ -15638,7 +15638,7 @@ - Shuffle Puck (Ned, Demo) + Shuffle Puck (Netherlands, demo) 1993 <homebrew> @@ -15650,7 +15650,7 @@ - Soko (Spa?) + Soko (Spain?) 1995 <homebrew> @@ -15661,7 +15661,7 @@ - Solid Snail (Ned) + Solid Snail (Netherlands) 1994 <homebrew> @@ -15673,7 +15673,7 @@ - Solid Snail (Ned, Alt) + Solid Snail (Netherlands, alt) 1994 <homebrew> @@ -15697,7 +15697,7 @@ - Split Ball (Jpn) + Split Ball (Japan) 1995 <doujin> @@ -15709,7 +15709,7 @@ - Street Neo Fighter II - The World Warrior (Promo 2) + Street Neo Fighter II - The World Warrior (promo 2) 1994 <homebrew> @@ -15720,7 +15720,7 @@ - Street Neo Fighter II - The World Warrior (Promo 3) + Street Neo Fighter II - The World Warrior (promo 3) 1994 <homebrew> @@ -15731,7 +15731,7 @@ - Street Neo Fighter II - The World Warrior (Alt) + Street Neo Fighter II - The World Warrior (alt) 1994 <homebrew> @@ -15742,7 +15742,7 @@ - Street Neo Fighter II - The World Warrior (Alt 2) + Street Neo Fighter II - The World Warrior (alt 2) 1994 <homebrew> @@ -15753,7 +15753,7 @@ - Super Dynamite Fighters Street (Jpn) + Super Dynamite Fighters Street (Japan) 199? <doujin> @@ -15764,7 +15764,7 @@ - Tamanegitori Game (Jpn) + Tamanegitori Game (Japan) 19?? <doujin> @@ -15776,7 +15776,7 @@ - Tarot (Jpn) + Tarot (Japan) 1993 <doujin> @@ -15788,7 +15788,7 @@ - Tarotika Voodoo (Jpn) + Tarotika Voodoo (Japan) 1998 <doujin> @@ -15800,7 +15800,7 @@ - Teachers Terror (Ned) + Teachers Terror (Netherlands) 1993 <homebrew> @@ -15812,7 +15812,7 @@ - Teachers Terror (Ned, Alt) + Teachers Terror (Netherlands, alt) 1993 <homebrew> @@ -15824,7 +15824,7 @@ - Trojka (Ned) + Trojka (Netherlands) 1992 <homebrew> @@ -15836,7 +15836,7 @@ - Trojka (Ned, Alt) + Trojka (Netherlands, alt) 1992 <homebrew> @@ -15848,7 +15848,7 @@ - Troxx (Ned) + Troxx (Netherlands) 1993 <homebrew> @@ -15860,7 +15860,7 @@ - Troxx (Ned, Alt) + Troxx (Netherlands, alt) 1993 <homebrew> @@ -15872,7 +15872,7 @@ - Tokimeki World Cup (Jpn) + Tokimeki World Cup (Japan) 19?? <doujin> @@ -15884,7 +15884,7 @@ - Vectron (Ned) + Vectron (Netherlands) 1989 <homebrew> @@ -15896,7 +15896,7 @@ - Vectron (Ned, Alt) + Vectron (Netherlands, alt) 1989 <homebrew> @@ -15908,7 +15908,7 @@ - Veroveraar (Ned) + Veroveraar (Netherlands) 1988 <homebrew> @@ -15920,7 +15920,7 @@ - Veroveraar (Ned, Alt) + Veroveraar (Netherlands, alt) 1988 <homebrew> @@ -15932,7 +15932,7 @@ - VS Rotation (Jpn) + VS Rotation (Japan) 1994 <doujin> @@ -15956,7 +15956,7 @@ - Whipple (Jpn) + Whipple (Japan) 1992 <doujin> @@ -15968,7 +15968,7 @@ - Whipple (Jpn, Alt) + Whipple (Japan, alt) 1992 <doujin> @@ -15992,7 +15992,7 @@ - The Witch 'Iz' (Jpn) + The Witch 'Iz' (Japan) 1994 <doujin> @@ -16003,7 +16003,7 @@ - The Witchs Revenge (Ned) + The Witchs Revenge (Netherlands) 1993 <homebrew> @@ -16054,7 +16054,7 @@ - Zynos on the Adventure Islands (Ned) + Zynos on the Adventure Islands (Netherlands) 1991 <homebrew> @@ -16066,7 +16066,7 @@ - Zynos on the Adventure Islands (Ned, Alt) + Zynos on the Adventure Islands (Netherlands, alt) 1991 <homebrew> @@ -16078,7 +16078,7 @@ - Zynos on the Adventure Islands (Ned, Alt 2) + Zynos on the Adventure Islands (Netherlands, alt 2) 1991 <homebrew> @@ -16099,7 +16099,7 @@ - MSX-FAN Disk #1 (Jpn) + MSX-FAN Disk #1 (Japan) 1991 <coverdisk> @@ -16112,7 +16112,7 @@ - MSX-FAN Disk #2 (Jpn) + MSX-FAN Disk #2 (Japan) 1991 <coverdisk> @@ -16125,7 +16125,7 @@ - MSX-FAN Disk #3 (Jpn) + MSX-FAN Disk #3 (Japan) 1991 <coverdisk> @@ -16138,7 +16138,7 @@ - MSX-FAN Disk #4 (Jpn) + MSX-FAN Disk #4 (Japan) 1992 <coverdisk> @@ -16151,7 +16151,7 @@ - MSX-FAN Disk #5 (Jpn) + MSX-FAN Disk #5 (Japan) 1992 <coverdisk> @@ -16164,7 +16164,7 @@ - MSX-FAN Disk #6 (Jpn) + MSX-FAN Disk #6 (Japan) 1992 <coverdisk> @@ -16177,7 +16177,7 @@ - MSX-FAN Disk #7 (Jpn) + MSX-FAN Disk #7 (Japan) 1992 <coverdisk> @@ -16190,7 +16190,7 @@ - MSX-FAN Disk #8 (Jpn) + MSX-FAN Disk #8 (Japan) 1992 <coverdisk> @@ -16203,7 +16203,7 @@ - MSX-FAN Disk #9 (Jpn) + MSX-FAN Disk #9 (Japan) 1992 <coverdisk> @@ -16216,7 +16216,7 @@ - MSX-FAN Disk #10 (Jpn) + MSX-FAN Disk #10 (Japan) 1992 <coverdisk> @@ -16229,7 +16229,7 @@ - MSX-FAN Disk #11 (Jpn) + MSX-FAN Disk #11 (Japan) 1992 <coverdisk> @@ -16242,7 +16242,7 @@ - MSX-FAN Disk #12 (Jpn) + MSX-FAN Disk #12 (Japan) 1992 <coverdisk> @@ -16255,7 +16255,7 @@ - MSX-FAN Disk #13 (Jpn) + MSX-FAN Disk #13 (Japan) 1992 <coverdisk> @@ -16268,7 +16268,7 @@ - MSX-FAN Disk #14 (Jpn) + MSX-FAN Disk #14 (Japan) 1992 <coverdisk> @@ -16281,7 +16281,7 @@ - MSX-FAN Disk #15 (Jpn) + MSX-FAN Disk #15 (Japan) 1992 <coverdisk> @@ -16294,7 +16294,7 @@ - MSX-FAN Disk #16 (Jpn) + MSX-FAN Disk #16 (Japan) 1993 <coverdisk> @@ -16307,7 +16307,7 @@ - MSX-FAN Disk #17 (Jpn) + MSX-FAN Disk #17 (Japan) 1993 <coverdisk> @@ -16320,7 +16320,7 @@ - MSX-FAN Disk #18 (Jpn) + MSX-FAN Disk #18 (Japan) 1993 <coverdisk> @@ -16333,7 +16333,7 @@ - MSX-FAN Disk #19 (Jpn) + MSX-FAN Disk #19 (Japan) 1993 <coverdisk> @@ -16346,7 +16346,7 @@ - MSX-FAN Disk #20 (Jpn) + MSX-FAN Disk #20 (Japan) 1993 <coverdisk> @@ -16359,7 +16359,7 @@ - MSX-FAN Disk #21 (Jpn) + MSX-FAN Disk #21 (Japan) 1993 <coverdisk> @@ -16372,7 +16372,7 @@ - MSX-FAN Disk #22 (Jpn) + MSX-FAN Disk #22 (Japan) 1993 <coverdisk> @@ -16390,7 +16390,7 @@ - MSX-FAN Disk #23 (Jpn) + MSX-FAN Disk #23 (Japan) 1993 <coverdisk> @@ -16408,7 +16408,7 @@ - MSX-FAN Disk #24 (Jpn) + MSX-FAN Disk #24 (Japan) 1994 <coverdisk> @@ -16426,7 +16426,7 @@ - MSX-FAN Disk #24 (Jpn, Cracked Disk 2) + MSX-FAN Disk #24 (Japan, cracked disk 2) 1994 <coverdisk> @@ -16444,7 +16444,7 @@ - MSX-FAN Disk #25 (Jpn) + MSX-FAN Disk #25 (Japan) 1994 <coverdisk> @@ -16467,7 +16467,7 @@ - MSX-FAN Disk #26 (Jpn) + MSX-FAN Disk #26 (Japan) 1994 <coverdisk> @@ -16485,7 +16485,7 @@ - MSX-FAN Disk #27 (Jpn) + MSX-FAN Disk #27 (Japan) 1994 <coverdisk> @@ -16503,7 +16503,7 @@ - MSX-FAN Disk #28 (Jpn) + MSX-FAN Disk #28 (Japan) 1994 <coverdisk> @@ -16521,7 +16521,7 @@ - MSX-FAN Disk #29 (Jpn) + MSX-FAN Disk #29 (Japan) 1994 <coverdisk> @@ -16539,7 +16539,7 @@ - MSX-FAN Disk #30 (Jpn) + MSX-FAN Disk #30 (Japan) 1995 <coverdisk> @@ -16557,7 +16557,7 @@ - MSX-FAN Disk #31 (Jpn) + MSX-FAN Disk #31 (Japan) 1995 <coverdisk> @@ -16575,7 +16575,7 @@ - MSX-FAN Disk #32 (Jpn) + MSX-FAN Disk #32 (Japan) 1995 <coverdisk> @@ -16593,7 +16593,7 @@ - MSX-FAN Disk #33 (Jpn) + MSX-FAN Disk #33 (Japan) 1995 <coverdisk> @@ -16614,7 +16614,7 @@ - Amazing Cash (Ned) + Amazing Cash (Netherlands) 1990 <coverdisk> @@ -16626,7 +16626,7 @@ - Amazing Cash (Ned, Alt) + Amazing Cash (Netherlands, alt) 1990 <coverdisk> @@ -16638,7 +16638,7 @@ - Boggle (Ned) + Boggle (Netherlands) 1992 <coverdisk> @@ -16651,7 +16651,7 @@ - Boggle (Ned, Alt) + Boggle (Netherlands, alt) 1992 <coverdisk> @@ -16664,7 +16664,7 @@ - Force Delta (Ned) + Force Delta (Netherlands) 1990 <coverdisk> @@ -16676,7 +16676,7 @@ - Infinity (Ned) + Infinity (Netherlands) 1991 <coverdisk> @@ -16688,7 +16688,7 @@ - Infinity (Ned, Alt) + Infinity (Netherlands, alt) 1991 <coverdisk> @@ -16703,7 +16703,7 @@ - Brisk (Ned) + Brisk (Netherlands) 1994 <coverdisk> @@ -16716,7 +16716,7 @@ - Brisk (Ned, Alt) + Brisk (Netherlands, alt) 1994 <coverdisk> @@ -16729,7 +16729,7 @@ - Leprechaun (Ned) + Leprechaun (Netherlands) 1995 <coverdisk> @@ -16752,8 +16752,10 @@ --> + + - Goody (Spa) + Goody (Spain) 19?? <cart2disk hack> @@ -16764,7 +16766,7 @@ - Goody (Spa, Alt) + Goody (Spain, alt) 19?? <cart2disk hack> @@ -16775,7 +16777,7 @@ - The Last Mission (Spa) + The Last Mission (Spain) 19?? <tape2disk hack> @@ -16786,7 +16788,7 @@ - The Last Mission (Spa, Alt) + The Last Mission (Spain, alt) 19?? <tape2disk hack> @@ -16797,7 +16799,7 @@ - Livingstone Supongo (Spa) + Livingstone Supongo (Spain) 19?? <tape2disk hack> @@ -16819,7 +16821,7 @@ --> - 1942 (Jpn) + 1942 (Japan) 19?? <cart2disk hack> @@ -16830,7 +16832,7 @@ - 1942 (Jpn, Alt) + 1942 (Japan, alt) 19?? <cart2disk hack> @@ -16841,7 +16843,7 @@ - AcroJet (Jpn) + AcroJet (Japan) 19?? <cart2disk hack> @@ -16852,7 +16854,7 @@ - Akumajou Dracula (Jpn) + Akumajou Dracula (Japan) 19?? <cart2disk hack> @@ -16863,7 +16865,7 @@ - Akumajou Dracula (Jpn, Alt) + Akumajou Dracula (Japan, alt) 19?? <cart2disk hack> @@ -16874,7 +16876,7 @@ - Akumajou Dracula (Jpn, Alt 2) + Akumajou Dracula (Japan, alt 2) 19?? <cart2disk hack> @@ -16885,7 +16887,7 @@ - Aleste (Jpn) + Aleste (Japan) 19?? <cart2disk hack> @@ -16896,7 +16898,7 @@ - Aleste (Jpn, Alt) + Aleste (Japan, alt) 19?? <cart2disk hack> @@ -16907,7 +16909,7 @@ - Aleste (Jpn, Alt 2) + Aleste (Japan, alt 2) 19?? <cart2disk hack> @@ -16918,7 +16920,7 @@ - American Soccer (Jpn) + American Soccer (Japan) 19?? <cart2disk hack> @@ -16929,7 +16931,7 @@ - American Soccer (Jpn, Alt) + American Soccer (Japan, alt) 19?? <cart2disk hack> @@ -16940,7 +16942,7 @@ - Han Seimei Senki Androgynus (Jpn) + Han Seimei Senki Androgynus (Japan) 19?? <cart2disk hack> @@ -16951,7 +16953,7 @@ - Han Seimei Senki Androgynus (Jpn, Alt) + Han Seimei Senki Androgynus (Japan, alt) 19?? <cart2disk hack> @@ -16962,7 +16964,7 @@ - Han Seimei Senki Androgynus (Jpn, Alt 2) + Han Seimei Senki Androgynus (Japan, alt 2) 19?? <cart2disk hack> @@ -16973,7 +16975,7 @@ - Arctic (Jpn) + Arctic (Japan) 19?? <cart2disk hack> @@ -16984,7 +16986,7 @@ - Arkanoid II - Revenge of Doh (Jpn) + Arkanoid II - Revenge of Doh (Japan) 19?? <cart2disk hack> @@ -16995,7 +16997,7 @@ - Arkanoid II - Revenge of Doh (Jpn, Alt) + Arkanoid II - Revenge of Doh (Japan, alt) 19?? <cart2disk hack> @@ -17006,7 +17008,7 @@ - Arkanoid II - Revenge of Doh (Jpn, Alt 2) + Arkanoid II - Revenge of Doh (Japan, alt 2) 19?? <cart2disk hack> @@ -17017,7 +17019,7 @@ - Arkanoid II - Revenge of Doh (Jpn, Alt 3) + Arkanoid II - Revenge of Doh (Japan, alt 3) 19?? <cart2disk hack> @@ -17028,7 +17030,7 @@ - Lupin Sansei - Cagliostro no Shiro (Jpn) + Lupin Sansei - Cagliostro no Shiro (Japan) 19?? <cart2disk hack> @@ -17039,7 +17041,7 @@ - Lupin Sansei - Cagliostro no Shiro (Jpn, Alt) + Lupin Sansei - Cagliostro no Shiro (Japan, alt) 19?? <cart2disk hack> @@ -17050,7 +17052,7 @@ - Lupin Sansei - Cagliostro no Shiro (Jpn, Alt 2) + Lupin Sansei - Cagliostro no Shiro (Japan, alt 2) 19?? <cart2disk hack> @@ -17061,7 +17063,7 @@ - Lupin Sansei - Babylon no Ougon Densetsu (Jpn) + Lupin Sansei - Babylon no Ougon Densetsu (Japan) 19?? <cart2disk hack> @@ -17072,7 +17074,7 @@ - Lupin Sansei - Babylon no Ougon Densetsu (Jpn, Alt) + Lupin Sansei - Babylon no Ougon Densetsu (Japan, alt) 19?? <cart2disk hack> @@ -17083,7 +17085,7 @@ - Lupin Sansei - Babylon no Ougon Densetsu (Jpn, Alt 2) + Lupin Sansei - Babylon no Ougon Densetsu (Japan, alt 2) 19?? <cart2disk hack> @@ -17094,7 +17096,7 @@ - Inemuri-ryuu Asada Tetsuya no A-kyuu Mahjong (Jpn) + Inemuri-ryuu Asada Tetsuya no A-kyuu Mahjong (Japan) 19?? <cart2disk hack> @@ -17105,7 +17107,7 @@ - Ashguine 2 - Kokuu no Gajou (Jpn) + Ashguine 2 - Kokuu no Gajou (Japan) 19?? <cart2disk hack> @@ -17116,7 +17118,7 @@ - Ashguine 2 - Kokuu no Gajou (Jpn, Alt) + Ashguine 2 - Kokuu no Gajou (Japan, alt) 19?? <cart2disk hack> @@ -17127,7 +17129,7 @@ - Ashguine 2 - Kokuu no Gajou (Jpn, Alt 2) + Ashguine 2 - Kokuu no Gajou (Japan, alt 2) 19?? <cart2disk hack> @@ -17138,7 +17140,7 @@ - Ashguine - Fukushuu no Honoo (Jpn) + Ashguine - Fukushuu no Honoo (Japan) 19?? <cart2disk hack> @@ -17149,7 +17151,7 @@ - Ashguine - Fukushuu no Honoo (Jpn, Alt) + Ashguine - Fukushuu no Honoo (Japan, alt) 19?? <cart2disk hack> @@ -17160,7 +17162,7 @@ - Bubble Bobble (Jpn) + Bubble Bobble (Japan) 19?? <cart2disk hack> @@ -17171,7 +17173,7 @@ - Bubble Bobble (Jpn, Alt) + Bubble Bobble (Japan, alt) 19?? <cart2disk hack> @@ -17182,7 +17184,7 @@ - Cheese 2 (Jpn) + Cheese 2 (Japan) 19?? <cart2disk hack> @@ -17193,7 +17195,7 @@ - The Cockpit (Jpn) + The Cockpit (Japan) 19?? <cart2disk hack> @@ -17204,7 +17206,7 @@ - The Cockpit (Jpn, Alt) + The Cockpit (Japan, alt) 19?? <cart2disk hack> @@ -17215,7 +17217,7 @@ - The Cockpit (Jpn, Alt 2) + The Cockpit (Japan, alt 2) 19?? <cart2disk hack> @@ -17226,7 +17228,7 @@ - Contra (Jpn) + Contra (Japan) 19?? <cart2disk hack> @@ -17237,7 +17239,7 @@ - Contra (Jpn, Alt) + Contra (Japan, alt) 19?? <cart2disk hack> @@ -17248,7 +17250,7 @@ - Contra (Jpn, Alt 2) + Contra (Japan, alt 2) 19?? <cart2disk hack> @@ -17259,7 +17261,7 @@ - Dragon Slayer IV - Drasle Family (Jpn) + Dragon Slayer IV - Drasle Family (Japan) 19?? <cart2disk hack> @@ -17270,7 +17272,7 @@ - Dragon Slayer IV - Drasle Family (Jpn, Alt) + Dragon Slayer IV - Drasle Family (Japan, alt) 19?? <cart2disk hack> @@ -17281,7 +17283,7 @@ - Dynamite Bowl (Jpn) + Dynamite Bowl (Japan) 19?? <cart2disk hack> @@ -17292,7 +17294,7 @@ - Dynamite Bowl (Jpn, Alt) + Dynamite Bowl (Japan, alt) 19?? <cart2disk hack> @@ -17303,7 +17305,7 @@ - Dynamite Bowl (Jpn, Alt 2) + Dynamite Bowl (Japan, alt 2) 19?? <cart2disk hack> @@ -17314,7 +17316,7 @@ - Elthlead (Jpn) + Elthlead (Japan) 19?? <cart2disk hack> @@ -17325,7 +17327,7 @@ - Elthlead (Jpn, Alt) + Elthlead (Japan, alt) 19?? <cart2disk hack> @@ -17336,7 +17338,7 @@ - Famicle Parodic (Jpn) + Famicle Parodic (Japan) 19?? <cart2disk hack> @@ -17347,7 +17349,7 @@ - Family Billiards (Jpn) + Family Billiards (Japan) 19?? <cart2disk hack> @@ -17358,7 +17360,7 @@ - Family Billiards (Jpn, Alt 2) + Family Billiards (Japan, alt 2) 19?? <cart2disk hack> @@ -17369,7 +17371,7 @@ - Family Billiards (Jpn, Alt) + Family Billiards (Japan, alt) 19?? <cart2disk hack> @@ -17380,7 +17382,7 @@ - Family Boxing (Jpn) + Family Boxing (Japan) 19?? <cart2disk hack> @@ -17391,7 +17393,7 @@ - Family Boxing (Jpn, Alt) + Family Boxing (Japan, alt) 19?? <cart2disk hack> @@ -17402,7 +17404,7 @@ - Family Boxing (Jpn, Alt 2) + Family Boxing (Japan, alt 2) 19?? <cart2disk hack> @@ -17413,7 +17415,7 @@ - Fantasy Zone II - The Tears of Opa-Opa (Jpn) + Fantasy Zone II - The Tears of Opa-Opa (Japan) 19?? <cart2disk hack> @@ -17424,7 +17426,7 @@ - Fantasy Zone II - The Tears of Opa-Opa (Jpn, Alt) + Fantasy Zone II - The Tears of Opa-Opa (Japan, alt) 19?? <cart2disk hack> @@ -17435,7 +17437,7 @@ - Fleet Commander II (Jpn) + Fleet Commander II (Japan) 19?? <cart2disk hack> @@ -17446,7 +17448,7 @@ - Fleet Commander II (Jpn, Alt) + Fleet Commander II (Japan, alt) 19?? <cart2disk hack> @@ -17457,7 +17459,7 @@ - Fleet Commander II (Jpn, Alt 2) + Fleet Commander II (Japan, alt 2) 19?? <cart2disk hack> @@ -17468,7 +17470,7 @@ - Fleet Commander II (Jpn, Alt 3) + Fleet Commander II (Japan, alt 3) 19?? <cart2disk hack> @@ -17479,7 +17481,7 @@ - Ganbare Goemon! Karakuri Douchuu (Jpn) + Ganbare Goemon! Karakuri Douchuu (Japan) 19?? <cart2disk hack> @@ -17490,7 +17492,7 @@ - Ganbare Goemon! Karakuri Douchuu (Jpn, Alt) + Ganbare Goemon! Karakuri Douchuu (Japan, alt) 19?? <cart2disk hack> @@ -17501,7 +17503,7 @@ - Ganbare Goemon! Karakuri Douchuu (Jpn, Alt 2) + Ganbare Goemon! Karakuri Douchuu (Japan, alt 2) 19?? <cart2disk hack> @@ -17512,7 +17514,7 @@ - Garyuu Ou (Jpn) + Garyuu Ou (Japan) 19?? <cart2disk hack> @@ -17523,7 +17525,7 @@ - Garyuu Ou (Jpn, Alt) + Garyuu Ou (Japan, alt) 19?? <cart2disk hack> @@ -17534,7 +17536,7 @@ - Girly Block (Jpn) + Girly Block (Japan) 19?? <cart2disk hack> @@ -17545,7 +17547,7 @@ - Girly Block (Jpn, Alt) + Girly Block (Japan, alt) 19?? <cart2disk hack> @@ -17556,7 +17558,7 @@ - Girly Block (Jpn, Alt 2) + Girly Block (Japan, alt 2) 19?? <cart2disk hack> @@ -17567,7 +17569,7 @@ - Girly Block (Jpn, Alt 3) + Girly Block (Japan, alt 3) 19?? <cart2disk hack> @@ -17578,7 +17580,7 @@ - Hai no Majutsushi (Jpn) + Hai no Majutsushi (Japan) 19?? <cart2disk hack> @@ -17589,7 +17591,7 @@ - Hai no Majutsushi (Jpn, Alt) + Hai no Majutsushi (Japan, alt) 19?? <cart2disk hack> @@ -17600,7 +17602,7 @@ - Hardball (Jpn) + Hardball (Japan) 19?? <cart2disk hack> @@ -17611,7 +17613,7 @@ - Hardball (Jpn, Alt) + Hardball (Japan, alt) 19?? <cart2disk hack> @@ -17622,7 +17624,7 @@ - Heroes of the Lance (Jpn) + Heroes of the Lance (Japan) 19?? <cart2disk hack> @@ -17633,7 +17635,7 @@ - Hi no Tori - Houou-hen (Jpn) + Hi no Tori - Houou-hen (Japan) 19?? <cart2disk hack> @@ -17644,7 +17646,7 @@ - Hi no Tori - Houou-hen (Jpn, Alt) + Hi no Tori - Houou-hen (Japan, alt) 19?? <cart2disk hack> @@ -17655,7 +17657,7 @@ - Hi no Tori - Houou-hen (Jpn, Alt 2) + Hi no Tori - Houou-hen (Japan, alt 2) 19?? <cart2disk hack> @@ -17666,7 +17668,7 @@ - Hole in One Special (Jpn) + Hole in One Special (Japan) 19?? <cart2disk hack> @@ -17677,7 +17679,7 @@ - Hole in One Special (Jpn)[a] + Hole in One Special (Japan, alt) 19?? <cart2disk hack> @@ -17688,7 +17690,7 @@ - Hydlide 3 - The Space Memories (Jpn) + Hydlide 3 - The Space Memories (Japan) 19?? <cart2disk hack> @@ -17699,7 +17701,7 @@ - Hydlide 3 - The Space Memories (Jpn, Alt) + Hydlide 3 - The Space Memories (Japan, alt) 19?? <cart2disk hack> @@ -17710,7 +17712,7 @@ - Hydlide 3 - The Space Memories (Jpn, Alt 2) + Hydlide 3 - The Space Memories (Japan, alt 2) 19?? <cart2disk hack> @@ -17721,7 +17723,7 @@ - Ikari (Jpn) + Ikari (Japan) 19?? <cart2disk hack> @@ -17732,7 +17734,7 @@ - Ikari (Jpn, Alt) + Ikari (Japan, alt) 19?? <cart2disk hack> @@ -17743,7 +17745,7 @@ - Ikari (Jpn, Alt 2) + Ikari (Japan, alt 2) 19?? <cart2disk hack> @@ -17754,7 +17756,7 @@ - Labyrinth (Jpn, Alt) + Labyrinth (Japan, alt) 19?? <cart2disk hack> @@ -17765,7 +17767,7 @@ - Labyrinth (Jpn) + Labyrinth (Japan) 19?? <cart2disk hack> @@ -17776,7 +17778,7 @@ - Mad Rider (Jpn) + Mad Rider (Japan) 19?? <cart2disk hack> @@ -17787,7 +17789,7 @@ - Mad Rider (Jpn, Alt) + Mad Rider (Japan, alt) 19?? <cart2disk hack> @@ -17798,7 +17800,7 @@ - Maison Ikkoku (Jpn) + Maison Ikkoku (Japan) 19?? <cart2disk hack> @@ -17809,7 +17811,7 @@ - Maison Ikkoku (Jpn, Alt) + Maison Ikkoku (Japan, alt) 19?? <cart2disk hack> @@ -17820,7 +17822,7 @@ - Higemaru Makaijima - Nanatsu no Shima Daibouken (Jpn) + Higemaru Makaijima - Nanatsu no Shima Daibouken (Japan) 19?? <cart2disk hack> @@ -17831,7 +17833,7 @@ - Higemaru Makaijima - Nanatsu no Shima Daibouken (Jpn, Alt) + Higemaru Makaijima - Nanatsu no Shima Daibouken (Japan, alt) 19?? <cart2disk hack> @@ -17842,7 +17844,7 @@ - Malaya no Hihou (Jpn) + Malaya no Hihou (Japan) 19?? <cart2disk hack> @@ -17853,7 +17855,7 @@ - Malaya no Hihou (Jpn, Alt) + Malaya no Hihou (Japan, alt) 19?? <cart2disk hack> @@ -17864,7 +17866,7 @@ - Metal Gear (Jpn) + Metal Gear (Japan) 19?? <cart2disk hack> @@ -17875,7 +17877,7 @@ - Metal Gear (Jpn, Alt) + Metal Gear (Japan, alt) 19?? <cart2disk hack> @@ -17886,7 +17888,7 @@ - Metal Gear (Jpn, Alt 2) + Metal Gear (Japan, alt 2) 19?? <cart2disk hack> @@ -17897,7 +17899,7 @@ - Mon Mon Monster (Jpn) + Mon Mon Monster (Japan) 19?? <cart2disk hack> @@ -17908,7 +17910,7 @@ - Mon Mon Monster (Jpn, Alt) + Mon Mon Monster (Japan, alt) 19?? <cart2disk hack> @@ -17919,7 +17921,7 @@ - Nekketsu Juudou (Jpn) + Nekketsu Juudou (Japan) 19?? <cart2disk hack> @@ -17930,7 +17932,7 @@ - Nekketsu Juudou (Jpn, Alt) + Nekketsu Juudou (Japan, alt) 19?? <cart2disk hack> @@ -17941,7 +17943,7 @@ - Nekketsu Juudou (Jpn, Alt 2) + Nekketsu Juudou (Japan, alt 2) 19?? <cart2disk hack> @@ -17952,7 +17954,7 @@ - Nekketsu Juudou (Jpn, Alt 3) + Nekketsu Juudou (Japan, alt 3) 19?? <cart2disk hack> @@ -17963,7 +17965,7 @@ - Ninja-kun - Ashura no Shou (Jpn) + Ninja-kun - Ashura no Shou (Japan) 19?? <cart2disk hack> @@ -17974,7 +17976,7 @@ - Ninja-kun - Ashura no Shou (Jpn, Alt) + Ninja-kun - Ashura no Shou (Japan, alt) 19?? <cart2disk hack> @@ -17985,7 +17987,7 @@ - Ninja-kun - Ashura no Shou (Jpn, Alt 2) + Ninja-kun - Ashura no Shou (Japan, alt 2) 19?? <cart2disk hack> @@ -17996,7 +17998,7 @@ - Ogre (Jpn) + Ogre (Japan) 19?? <cart2disk hack> @@ -18007,7 +18009,7 @@ - Ogre (Jpn, Alt) + Ogre (Japan, alt) 19?? <cart2disk hack> @@ -18018,7 +18020,7 @@ - Ouke no Tani - El Giza no Fuuin (Jpn) + Ouke no Tani - El Giza no Fuuin (Japan) 19?? <cart2disk hack> @@ -18029,7 +18031,7 @@ - Ouke no Tani - El Giza no Fuuin (Jpn, Alt) + Ouke no Tani - El Giza no Fuuin (Japan, alt) 19?? <cart2disk hack> @@ -18040,7 +18042,7 @@ - Out Run (Jpn) + Out Run (Japan) 19?? <cart2disk hack> @@ -18051,7 +18053,7 @@ - Out Run (Jpn, Alt) + Out Run (Japan, alt) 19?? <cart2disk hack> @@ -18062,7 +18064,7 @@ - Out Run (Jpn, Alt 2) + Out Run (Japan, alt 2) 19?? <cart2disk hack> @@ -18073,7 +18075,7 @@ - Out Run (Jpn, Alt 3) + Out Run (Japan, alt 3) 19?? <cart2disk hack> @@ -18084,7 +18086,7 @@ - Penguin-kun Wars 2 (Jpn) + Penguin-kun Wars 2 (Japan) 19?? <cart2disk hack> @@ -18095,7 +18097,7 @@ - Penguin-kun Wars 2 (Jpn, Alt) + Penguin-kun Wars 2 (Japan, alt) 19?? <cart2disk hack> @@ -18106,7 +18108,7 @@ - Penguin-kun Wars 2 (Jpn, Alt 2) + Penguin-kun Wars 2 (Japan, alt 2) 19?? <cart2disk hack> @@ -18117,7 +18119,7 @@ - Penguin-kun Wars 2 (Jpn, Alt 3) + Penguin-kun Wars 2 (Japan, alt 3) 19?? <cart2disk hack> @@ -18128,7 +18130,7 @@ - Predator (Jpn) + Predator (Japan) 19?? <cart2disk hack> @@ -18139,7 +18141,7 @@ - Predator (Jpn, Alt) + Predator (Japan, alt) 19?? <cart2disk hack> @@ -18150,7 +18152,7 @@ - Predator (Jpn, Alt 2) + Predator (Japan, alt 2) 19?? <cart2disk hack> @@ -18161,7 +18163,7 @@ - Predator (Jpn, Alt 3) + Predator (Japan, alt 3) 19?? <cart2disk hack> @@ -18172,7 +18174,7 @@ - Predator (Jpn, Alt 4) + Predator (Japan, alt 4) 19?? <cart2disk hack> @@ -18183,7 +18185,7 @@ - Project A2 (Jpn) + Project A2 (Japan) 19?? <cart2disk hack> @@ -18194,7 +18196,7 @@ - Project A2 (Jpn, Alt) + Project A2 (Japan, alt) 19?? <cart2disk hack> @@ -18205,7 +18207,7 @@ - Project A2 (Jpn, Alt 2) + Project A2 (Japan, alt 2) 19?? <cart2disk hack> @@ -18216,7 +18218,7 @@ - Rastan Saga (Jpn) + Rastan Saga (Japan) 19?? <cart2disk hack> @@ -18227,7 +18229,7 @@ - Rastan Saga (Jpn, Alt) + Rastan Saga (Japan, alt) 19?? <cart2disk hack> @@ -18238,7 +18240,7 @@ - Romancia (Jpn) + Romancia (Japan) 19?? <cart2disk hack> @@ -18249,7 +18251,7 @@ - Romancia (Jpn, Alt) + Romancia (Japan, alt) 19?? <cart2disk hack> @@ -18260,7 +18262,7 @@ - Scramble Formation (Jpn) + Scramble Formation (Japan) 19?? <cart2disk hack> @@ -18271,7 +18273,7 @@ - Scramble Formation (Jpn, Alt) + Scramble Formation (Japan, alt) 19?? <cart2disk hack> @@ -18282,7 +18284,7 @@ - Seikima II Special - Akuma no Gyakushuu (Jpn) + Seikima II Special - Akuma no Gyakushuu (Japan) 19?? <cart2disk hack> @@ -18293,7 +18295,7 @@ - Seikima II Special - Akuma no Gyakushuu (Jpn, Alt) + Seikima II Special - Akuma no Gyakushuu (Japan, alt) 19?? <cart2disk hack> @@ -18304,7 +18306,7 @@ - Seikima II Special - Akuma no Gyakushuu (Jpn, Alt 2) + Seikima II Special - Akuma no Gyakushuu (Japan, alt 2) 19?? <cart2disk hack> @@ -18315,7 +18317,7 @@ - Seikima II Special - Akuma no Gyakushuu (Jpn, Alt 3) + Seikima II Special - Akuma no Gyakushuu (Japan, alt 3) 19?? <cart2disk hack> @@ -18326,7 +18328,7 @@ - Space Manbow (Jpn) + Space Manbow (Japan) 19?? <cart2disk hack> @@ -18337,7 +18339,7 @@ - Star Virgin (Jpn) + Star Virgin (Japan) 19?? <cart2disk hack> @@ -18348,7 +18350,7 @@ - Star Virgin (Jpn, Alt) + Star Virgin (Japan, alt) 19?? <cart2disk hack> @@ -18359,7 +18361,7 @@ - Star Virgin (Jpn, Alt 2) + Star Virgin (Japan, alt 2) 19?? <cart2disk hack> @@ -18370,7 +18372,7 @@ - Strategic Mars (Jpn) + Strategic Mars (Japan) 19?? <cart2disk hack> @@ -18381,7 +18383,7 @@ - Strategic Mars (Jpn, Alt) + Strategic Mars (Japan, alt) 19?? <cart2disk hack> @@ -18392,7 +18394,7 @@ - Strategic Mars (Jpn, Alt 2) + Strategic Mars (Japan, alt 2) 19?? <cart2disk hack> @@ -18403,7 +18405,7 @@ - Super Rambo Special (Jpn) + Super Rambo Special (Japan) 19?? <cart2disk hack> @@ -18414,7 +18416,7 @@ - Super Rambo Special (Jpn, Alt) + Super Rambo Special (Japan, alt) 19?? <cart2disk hack> @@ -18425,7 +18427,7 @@ - Super Rambo Special (Jpn, Alt 2) + Super Rambo Special (Japan, alt 2) 19?? <cart2disk hack> @@ -18436,7 +18438,7 @@ - Super Rambo Special (Jpn, Alt 3) + Super Rambo Special (Japan, alt 3) 19?? <cart2disk hack> @@ -18447,7 +18449,7 @@ - Super Runner (Jpn) + Super Runner (Japan) 19?? <cart2disk hack> @@ -18458,7 +18460,7 @@ - Super Runner (Jpn, Alt) + Super Runner (Japan, alt) 19?? <cart2disk hack> @@ -18469,7 +18471,7 @@ - Super Runner (Jpn, Alt 2) + Super Runner (Japan, alt 2) 19?? <cart2disk hack> @@ -18480,7 +18482,7 @@ - Super Triton (Jpn) + Super Triton (Japan) 19?? <cart2disk hack> @@ -18491,7 +18493,7 @@ - Super Tritorn (Jpn, Alt) + Super Tritorn (Japan, alt) 19?? <cart2disk hack> @@ -18502,7 +18504,7 @@ - Super Tritorn (Jpn, Alt 2) + Super Tritorn (Japan, alt 2) 19?? <cart2disk hack> @@ -18513,7 +18515,7 @@ - Taiyou no Shinden - Asteka II (Jpn) + Taiyou no Shinden - Asteka II (Japan) 19?? <cart2disk hack> @@ -18524,7 +18526,7 @@ - Taiyou no Shinden - Asteka II (Jpn, Alt) + Taiyou no Shinden - Asteka II (Japan, alt) 19?? <cart2disk hack> @@ -18535,7 +18537,7 @@ - Taiyou no Shinden - Asteka II (Jpn, Alt 2) + Taiyou no Shinden - Asteka II (Japan, alt 2) 19?? <cart2disk hack> @@ -18546,7 +18548,7 @@ - Taiyou no Shinden - Asteka II (Jpn, Alt 3) + Taiyou no Shinden - Asteka II (Japan, alt 3) 19?? <cart2disk hack> @@ -18557,7 +18559,7 @@ - Topple Zip (Jpn) + Topple Zip (Japan) 19?? <cart2disk hack> @@ -18568,7 +18570,7 @@ - Tsuri Kichi Sanpei - Tsuri Sennin Hen (Jpn) + Tsuri Kichi Sanpei - Tsuri Sennin Hen (Japan) 19?? <cart2disk hack> @@ -18579,7 +18581,7 @@ - Tsuri Kichi Sanpei - Tsuri Sennin Hen (Jpn, Alt) + Tsuri Kichi Sanpei - Tsuri Sennin Hen (Japan, alt) 19?? <cart2disk hack> @@ -18590,7 +18592,7 @@ - Tsuri Kichi Sanpei - Tsuri Sennin Hen (Jpn, Alt 2) + Tsuri Kichi Sanpei - Tsuri Sennin Hen (Japan, alt 2) 19?? <cart2disk hack> @@ -18601,7 +18603,7 @@ - Tsuri Kichi Sanpei - Tsuri Sennin Hen (Jpn, Alt 3) + Tsuri Kichi Sanpei - Tsuri Sennin Hen (Japan, alt 3) 19?? <cart2disk hack> @@ -18612,7 +18614,7 @@ - Usas (Jpn) + Usas (Japan) 19?? <cart2disk hack> @@ -18623,7 +18625,7 @@ - Usas (Jpn, Alt) + Usas (Japan, alt) 19?? <cart2disk hack> @@ -18634,7 +18636,7 @@ - Usas (Jpn, Alt 2) + Usas (Japan, alt 2) 19?? <cart2disk hack> @@ -18645,7 +18647,7 @@ - Woody Poco (Jpn) + Woody Poco (Japan) 19?? <cart2disk hack> @@ -18656,7 +18658,7 @@ - Woody Poco (Jpn, Alt) + Woody Poco (Japan, alt) 19?? <cart2disk hack> @@ -18667,7 +18669,7 @@ - Xevious - Fardraut Saga (Jpn) + Xevious - Fardraut Saga (Japan) 19?? <cart2disk hack> @@ -18678,7 +18680,7 @@ - Xevious - Fardraut Saga (Jpn, Alt) + Xevious - Fardraut Saga (Japan, alt) 19?? <cart2disk hack> @@ -18689,7 +18691,7 @@ - Yuurei-kun (Jpn) + Yuurei-kun (Japan) 19?? <cart2disk hack> @@ -18700,7 +18702,7 @@ - Yuurei-kun (Jpn, Alt) + Yuurei-kun (Japan, alt) 19?? <cart2disk hack> @@ -18711,7 +18713,7 @@ - Yuurei-kun (Jpn, Alt 2) + Yuurei-kun (Japan, alt 2) 19?? <cart2disk hack> @@ -18722,7 +18724,7 @@ - Zanac EX (Jpn) + Zanac EX (Japan) 19?? <cart2disk hack> @@ -18733,7 +18735,7 @@ - Zanac EX (Jpn, Alt) + Zanac EX (Japan, alt) 19?? <cart2disk hack> @@ -18744,7 +18746,7 @@ - Zoids - Chuuou Tairiku no Tatakai (Jpn) + Zoids - Chuuou Tairiku no Tatakai (Japan) 19?? <cart2disk hack> @@ -18755,7 +18757,7 @@ - Zoids - Chuuou Tairiku no Tatakai (Jpn, Alt) + Zoids - Chuuou Tairiku no Tatakai (Japan, alt) 19?? <cart2disk hack> @@ -18766,7 +18768,7 @@ - Zombie Hunter (Jpn) + Zombie Hunter (Japan) 19?? <cart2disk hack> @@ -18777,7 +18779,7 @@ - Zombie Hunter (Jpn, Alt) + Zombie Hunter (Japan, alt) 19?? <cart2disk hack> diff -Nru mame-0.250+dfsg.1/hash/msx2.hsi mame-0.251+dfsg.1/hash/msx2.hsi --- mame-0.250+dfsg.1/hash/msx2.hsi 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/msx2.hsi 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/hash/msx2p_flop.xml mame-0.251+dfsg.1/hash/msx2p_flop.xml --- mame-0.250+dfsg.1/hash/msx2p_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/msx2p_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -27,7 +27,7 @@ - Beppin (Jpn) + Beppin (Japan) 1988 Wisdom @@ -40,7 +40,7 @@ - F-1 Spirit 3D Special (Jpn) + F-1 Spirit 3D Special (Japan) 1988 Konami @@ -66,7 +66,7 @@ - F-1 Spirit 3D Special (Jpn, Alt) + F-1 Spirit 3D Special (Japan, alt) 1988 Konami @@ -92,7 +92,7 @@ - F-1 Spirit 3D Special (Jpn, Alt Disk A) + F-1 Spirit 3D Special (Japan, alt Disk A) 1988 Konami @@ -118,7 +118,7 @@ - Pro Yakyuu Family Stadium - Homerun Contest (Jpn) + Pro Yakyuu Family Stadium - Homerun Contest (Japan) 1989 Namcot @@ -131,7 +131,7 @@ - Pro Yakyuu Family Stadium - Homerun Contest (Jpn, Alt) + Pro Yakyuu Family Stadium - Homerun Contest (Japan, alt) 1989 Namcot @@ -144,7 +144,7 @@ - J.B. Harold 3 - D.C. Connection (Jpn) + J.B. Harold 3 - D.C. Connection (Japan) 1989 Riverhill Soft @@ -170,7 +170,7 @@ - J.B. Harold 3 - D.C. Connection (Jpn, Alt) + J.B. Harold 3 - D.C. Connection (Japan, alt) 1989 Riverhill Soft @@ -198,7 +198,7 @@ - Kohakuiro no Yuigon - Seiyou Karuta Renzoku Satsujin Jiken (Jpn) + Kohakuiro no Yuigon - Seiyou Karuta Renzoku Satsujin Jiken (Japan) 1988 Riverhill Soft @@ -221,7 +221,7 @@ - Kohakuiro no Yuigon - Seiyou Karuta Renzoku Satsujin Jiken (Jpn, Alt) + Kohakuiro no Yuigon - Seiyou Karuta Renzoku Satsujin Jiken (Japan, alt) 1988 Riverhill Soft @@ -245,7 +245,7 @@ - Laydock 2 - Last Attack (Jpn) + Laydock 2 - Last Attack (Japan) 1988 T&E Soft @@ -265,7 +265,7 @@ - Laydock 2 - Last Attack (Jpn, Alt) + Laydock 2 - Last Attack (Japan, alt) 1988 T&E Soft @@ -286,7 +286,7 @@ - Mid-Garts (MSX2+) (Jpn) + Mid-Garts (MSX2+) (Japan) 1989 WolfTeam @@ -330,7 +330,7 @@ - Pana Amusement Collection Disc (Jpn) + Pana Amusement Collection Disc (Japan) 1988 Panasoft @@ -349,7 +349,7 @@ - Pana Amusement Collection Disc (Jpn, Alt) + Pana Amusement Collection Disc (Japan, alt) 1988 Panasoft @@ -368,7 +368,7 @@ - Pana Amusement Collection Disc (Jpn, Alt 2) + Pana Amusement Collection Disc (Japan, alt 2) 1988 Panasoft @@ -387,7 +387,7 @@ - Sony HB-F1XV Story Disk (Jpn) + Sony HB-F1XV Story Disk (Japan) 1990 Sony @@ -403,7 +403,7 @@ - Twinkle Star - Hoshi no Mahou Tsukai (Jpn) + Twinkle Star - Hoshi no Mahou Tsukai (Japan) 1990 MSX Magazine @@ -416,7 +416,7 @@ - Twinkle Star - Hoshi no Mahou Tsukai (Jpn, Alt) + Twinkle Star - Hoshi no Mahou Tsukai (Japan, alt) 1990 MSX Magazine @@ -429,7 +429,7 @@ - Yoshida Kensetsu (Jpn) + Yoshida Kensetsu (Japan) 1990 MSX Magazine @@ -442,7 +442,7 @@ - Yoshida Kensetsu (Jpn, Alt) + Yoshida Kensetsu (Japan, alt) 1990 MSX Magazine @@ -455,7 +455,7 @@ - Yoshida Kensetsu (Jpn, Alt 2) + Yoshida Kensetsu (Japan, alt 2) 1990 MSX Magazine @@ -468,7 +468,7 @@ - Yoshida Kensetsu (Jpn, Alt 3) + Yoshida Kensetsu (Japan, alt 3) 1990 MSX Magazine @@ -481,7 +481,7 @@ - Yoshida Kensetsu (Jpn, Alt 4) + Yoshida Kensetsu (Japan, alt 4) 1990 MSX Magazine @@ -494,7 +494,7 @@ - Yoshida Kensetsu (Jpn, Alt 5) + Yoshida Kensetsu (Japan, alt 5) 1990 MSX Magazine @@ -507,7 +507,7 @@ - Lübeck (Jpn) + Lübeck (Japan) 1990 MSX Magazine @@ -519,7 +519,7 @@ - Lübeck (Jpn, Alt) + Lübeck (Japan, alt) 1990 MSX Magazine @@ -531,7 +531,7 @@ - Sea Sardine Side-2 (Jpn) + Sea Sardine Side-2 (Japan) 1991 MSX Magazine @@ -543,7 +543,7 @@ - Sea Sardine Side-2 (Jpn, Alt) + Sea Sardine Side-2 (Japan, alt) 1991 MSX Magazine @@ -555,7 +555,7 @@ - The Wig (Jpn) + The Wig (Japan) 1989 MSX Magazine @@ -567,7 +567,7 @@ - The Wig (Jpn, Alt) + The Wig (Japan, alt) 1989 MSX Magazine @@ -595,7 +595,7 @@ - Gladius (Ger) + Gladius (Germany) 1992 <homebrew> @@ -608,7 +608,7 @@ - Gradius III Legends (Spa, Demo) + Gradius III Legends (Spain, demo) 2001 <homebrew> @@ -634,7 +634,7 @@ - Megadoom (Ned) + Megadoom (Netherlands) 1992 <homebrew> @@ -654,7 +654,7 @@ - Megadoom (Ned, Demo) + Megadoom (Netherlands, demo) 1992 <homebrew> @@ -674,7 +674,7 @@ - Playboy Strippoker (Ned) + Playboy Strippoker (Netherlands) 1992 <homebrew> @@ -687,7 +687,7 @@ - Sonyc (Spa) + Sonyc (Spain) 1995 <homebrew> @@ -700,7 +700,7 @@ - Turtle Mania (Ger, Demo) + Turtle Mania (Germany, demo) 1997 <homebrew> @@ -713,7 +713,7 @@ - The Witch 'Iz' (Jpn, Bad Dump?) + The Witch 'Iz' (Japan, bad dump?) 1991 <doujin> diff -Nru mame-0.250+dfsg.1/hash/msx.hsi mame-0.251+dfsg.1/hash/msx.hsi --- mame-0.250+dfsg.1/hash/msx.hsi 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/msx.hsi 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/hash/msxr_flop.xml mame-0.251+dfsg.1/hash/msxr_flop.xml --- mame-0.250+dfsg.1/hash/msxr_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/msxr_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/msx_softcard.xml mame-0.251+dfsg.1/hash/msx_softcard.xml --- mame-0.250+dfsg.1/hash/msx_softcard.xml 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/hash/msx_softcard.xml 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,67 @@ + + + + + + + + + Backgammon (UK) + 1984 + Electric Software + + + + + + + + + + Le Mans 2 (UK) + 1984 + Electric Software + + + + + + + + + + The Wreck (UK) + 1984 + Electric Software + + + + + + + + + diff -Nru mame-0.250+dfsg.1/hash/mt65_cass.xml mame-0.251+dfsg.1/hash/mt65_cass.xml --- mame-0.250+dfsg.1/hash/mt65_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mt65_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mt65_rom.xml mame-0.251+dfsg.1/hash/mt65_rom.xml --- mame-0.250+dfsg.1/hash/mt65_rom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mt65_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mt65_snap.xml mame-0.251+dfsg.1/hash/mt65_snap.xml --- mame-0.250+dfsg.1/hash/mt65_snap.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mt65_snap.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mtu130_flop.xml mame-0.251+dfsg.1/hash/mtu130_flop.xml --- mame-0.250+dfsg.1/hash/mtu130_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mtu130_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mtx_cart.xml mame-0.251+dfsg.1/hash/mtx_cart.xml --- mame-0.250+dfsg.1/hash/mtx_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mtx_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mtx_cass.xml mame-0.251+dfsg.1/hash/mtx_cass.xml --- mame-0.250+dfsg.1/hash/mtx_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mtx_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mtx_flop.xml mame-0.251+dfsg.1/hash/mtx_flop.xml --- mame-0.250+dfsg.1/hash/mtx_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mtx_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mtx_hdd.xml mame-0.251+dfsg.1/hash/mtx_hdd.xml --- mame-0.250+dfsg.1/hash/mtx_hdd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mtx_hdd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -10,7 +10,7 @@ CP/M 54K 201? <unknown> - + @@ -21,7 +21,7 @@ CP/M 59K 201? <unknown> - + @@ -32,7 +32,7 @@ Fuzix OS 2019 Etched Pixels - + @@ -43,7 +43,7 @@ Hex-Train 2016 Andy Key - + diff -Nru mame-0.250+dfsg.1/hash/mtx_rom.xml mame-0.251+dfsg.1/hash/mtx_rom.xml --- mame-0.250+dfsg.1/hash/mtx_rom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mtx_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/myvision.xml mame-0.251+dfsg.1/hash/myvision.xml --- mame-0.250+dfsg.1/hash/myvision.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/myvision.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mz2000_flop.xml mame-0.251+dfsg.1/hash/mz2000_flop.xml --- mame-0.250+dfsg.1/hash/mz2000_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mz2000_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mz2500.xml mame-0.251+dfsg.1/hash/mz2500.xml --- mame-0.250+dfsg.1/hash/mz2500.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mz2500.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/mz700_cass.xml mame-0.251+dfsg.1/hash/mz700_cass.xml --- mame-0.250+dfsg.1/hash/mz700_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/mz700_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/n64.xml mame-0.251+dfsg.1/hash/n64.xml --- mame-0.250+dfsg.1/hash/n64.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/n64.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/nascom_snap.xml mame-0.251+dfsg.1/hash/nascom_snap.xml --- mame-0.250+dfsg.1/hash/nascom_snap.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/nascom_snap.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/nascom_socket.xml mame-0.251+dfsg.1/hash/nascom_socket.xml --- mame-0.250+dfsg.1/hash/nascom_socket.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/nascom_socket.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/neocd.xml mame-0.251+dfsg.1/hash/neocd.xml --- mame-0.250+dfsg.1/hash/neocd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/neocd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/neogeo.xml mame-0.251+dfsg.1/hash/neogeo.xml --- mame-0.250+dfsg.1/hash/neogeo.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/neogeo.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/nes_datach.xml mame-0.251+dfsg.1/hash/nes_datach.xml --- mame-0.250+dfsg.1/hash/nes_datach.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/nes_datach.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/nes.hsi mame-0.251+dfsg.1/hash/nes.hsi --- mame-0.250+dfsg.1/hash/nes.hsi 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/nes.hsi 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/hash/nes_ntbrom.xml mame-0.251+dfsg.1/hash/nes_ntbrom.xml --- mame-0.250+dfsg.1/hash/nes_ntbrom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/nes_ntbrom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/nes_vt_cart.xml mame-0.251+dfsg.1/hash/nes_vt_cart.xml --- mame-0.250+dfsg.1/hash/nes_vt_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/nes_vt_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/nes.xml mame-0.251+dfsg.1/hash/nes.xml --- mame-0.250+dfsg.1/hash/nes.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/nes.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -1186,8 +1186,7 @@ - - + Akagawa Jirou no Yuurei Ressha (Japan) 1991 King Records @@ -3800,7 +3799,8 @@ - + + Battletoads & Double Dragon - The Ultimate Team (Europe) 1993 Tradewest @@ -3818,7 +3818,8 @@ - + + Battletoads & Double Dragon - The Ultimate Team (USA) 1993 Tradewest @@ -5941,7 +5942,8 @@ - + + Castelian (USA) 1991 Triffix @@ -5961,7 +5963,7 @@ - + Castelian (Europe) 1992 Storm @@ -6153,7 +6155,8 @@ - + + Castlevania III - Dracula's Curse (USA) 1990 Konami @@ -6179,7 +6182,8 @@ - + + Castlevania III - Dracula's Curse (Europe) 1992 Palcom @@ -7571,6 +7575,23 @@ + + Crazy Land (USA, prototype) + 1991 + Vap + + + + + + + + + + + + + Crisis Force (Japan) 1991 @@ -9083,8 +9104,7 @@ - - + Door Door (Japan) 1985 Enix @@ -10064,8 +10084,7 @@ - - + Dragon Quest (Japan) 1986 Enix @@ -10085,8 +10104,7 @@ - - + Dragon Quest II - Akuryou no Kamigami (Japan) 1987 Enix @@ -11874,11 +11892,11 @@ + - @@ -11900,11 +11918,11 @@ + - @@ -11926,11 +11944,11 @@ + - @@ -12194,11 +12212,11 @@ + - @@ -12215,11 +12233,11 @@ + - @@ -12236,11 +12254,11 @@ + - @@ -12257,11 +12275,11 @@ + - @@ -12282,11 +12300,11 @@ + - @@ -12303,11 +12321,11 @@ + - @@ -12324,11 +12342,11 @@ + - @@ -12345,11 +12363,11 @@ + - @@ -12366,11 +12384,11 @@ + - @@ -13929,6 +13947,23 @@ Activision + + + + + + + + + + + + + Galaxy 5000 - Racing in the 51st Century (USA, prototype, earlier) + 1991 + Activision + + @@ -14327,7 +14362,7 @@ - + GeGeGe no Kitarou - Youkai Daimakyou (Japan) 1986 Bandai @@ -15642,7 +15677,8 @@ - + + The Guardian Legend (USA) 1989 Brøderbund @@ -15661,7 +15697,8 @@ - + + The Guardian Legend (Europe) 1992 Nintendo @@ -15680,7 +15717,8 @@ - + + Guardic Gaiden (Japan) 1987 Irem @@ -15927,11 +15965,11 @@ + - @@ -17296,6 +17334,23 @@ + + Hoops (USA, prototype) + 1989 + Jaleco + + + + + + + + + + + + + Hoshi no Kirby - Yume no Izumi no Monogatari (Japan) 1993 @@ -18476,6 +18531,23 @@ + + Iron Tank - The Invasion of Normandy (USA, prototype) + 1988 + SNK + + + + + + + + + + + + + IronSword - Wizards & Warriors II (USA) 1989 @@ -19043,7 +19115,7 @@ - + Jesus - Kyoufu no Bio Monster (Japan) 1989 King Records @@ -23146,7 +23218,7 @@ - + Mahjong Taikai (Japan) 1989 Koei @@ -24407,7 +24479,7 @@ - + Mendel Palace (USA) 1990 Hudson Soft @@ -24734,6 +24806,94 @@ + + + + Mick & Mack as the Global Gladiators (prototype, 19930709) + 1993 + Virgin Games + + + + + + + + + + + + + + + + + Mick & Mack as the Global Gladiators (prototype, 19930630) + 1993 + Virgin Games + + + + + + + + + + + + + + + Mick & Mack as the Global Gladiators (prototype, 19930616) + 1993 + Virgin Games + + + + + + + + + + + + + + + Mick & Mack as the Global Gladiators (prototype, 19930528) + 1993 + Virgin Games + + + + + + + + + + + + + + + Mick & Mack as the Global Gladiators (prototype, 19930528, alt) + 1993 + Virgin Games + + + + + + + + + + + + Mickey Mouse III - Yume Fuusen (Japan) 1992 @@ -26224,7 +26384,7 @@ - + The Mutant Virus (USA) 1992 American Softworks @@ -27094,8 +27254,7 @@ - - + Ninja Jajamaru - Ginga Daisakusen (Japan) 1991 Jaleco @@ -27114,7 +27273,7 @@ - + Ninja Kid (USA) 1986 Bandai @@ -27153,6 +27312,7 @@ + Ninja Ryukenden II - Ankoku no Jashinken (Japan) 1990 @@ -29336,8 +29496,7 @@ - - + Portopia Renzoku Satsujin Jiken (Japan) 1985 Enix @@ -30069,7 +30228,7 @@ - + Qix (USA) 1991 Taito @@ -30187,7 +30346,7 @@ - + Quinty (Japan) 1989 Namcot @@ -30261,6 +30420,22 @@ + + R.B.I. Baseball 2 (USA, prototype, 19900307) + 1990 + Tengen + + + + + + + + + + + + R.B.I. Baseball 3 (USA) 1991 @@ -30841,6 +31016,23 @@ + + Rally Bike (USA, prototype, 19900226) + 1990 + Romstar + + + + + + + + + + + + + Rambo (Japan) 1987 @@ -32080,7 +32272,8 @@ - + + Romancia (Japan) 1987 Tokyo Shoseki @@ -33596,6 +33789,23 @@ + + Shadow of the Ninja (USA, sample) + 1990 + Natsume + + + + + + + + + + + + + Shadowgate (Japan) 1989 @@ -33853,6 +34063,7 @@ + Shin 4-nin Uchi Mahjong - Yakuman Tengoku (Japan) 1991 @@ -34336,6 +34547,23 @@ + + Silkworm (USA, prototype) + 1990 + American Sammy + + + + + + + + + + + + + @@ -35734,8 +35962,7 @@ - - + Squashed (USA, prototype) 1991 Jaleco @@ -35763,11 +35990,11 @@ + - @@ -39677,7 +39904,8 @@ - + + Time Lord (USA) 1990 Milton Bradley @@ -39695,7 +39923,8 @@ - + + Time Lord (Europe) 1991 Milton Bradley @@ -41957,7 +42186,7 @@ - + WWF WrestleMania (USA) 1989 Acclaim Entertainment @@ -41983,7 +42212,7 @@ - + WWF WrestleMania (Europe) 1992 Acclaim Entertainment @@ -44500,10 +44729,10 @@ Playbox BASIC (Japan, V1.0) 198? Nintendo / Hudson Soft / Sharp + - @@ -44521,11 +44750,11 @@ Playbox BASIC (Japan, V0.0) 198? Nintendo / Hudson Soft / Sharp + - @@ -46996,11 +47225,11 @@ + - @@ -47374,7 +47603,7 @@ - + GeGeGe no Kitarou - Youkai Daimakyou (Japan, prototype) 1986 Bandai @@ -48511,7 +48740,8 @@ - + + Kyoro-chan Land (Japan) 1992 Hiro @@ -49732,8 +49962,7 @@ - - + Ninja Jajamaru - Ginga Daisakusen (Japan, prototype) 1991 Jaleco @@ -50408,6 +50637,23 @@ + + RoadBlasters (USA, prototype) + 1990 + Mindscape + + + + + + + + + + + + + Robert Byrne's Pool Challenge (USA, prototype) 1992 @@ -71334,8 +71580,7 @@ - - + Door Door (FMG pirate) 1987 FMG @@ -71634,7 +71879,7 @@ - + GeGeGe no Kitarou - Youkai Daimakyou (FMG pirate) 1987 FMG @@ -75640,7 +75885,7 @@ - + Battletoads & Double Dragon - The Ultimate Team (pirate) 19?? <pirate> @@ -78579,7 +78824,8 @@ - + + Castlevania III - Dracula's Curse (ripped from PC Konami Classics) 200? Konami @@ -80495,6 +80741,24 @@ + + 2 in 1 - GEMiNIM & Siamond + 2008 + RetroZone + + + + + + + + + + + + + + 2A03Puritans 2013 @@ -81297,6 +81561,23 @@ + + Nighttime Bastards + 2014 + Infinite NES Lives + + + + + + + + + + + + + Nomolos - Storming the Catsle (v1.01) 2014 @@ -81415,6 +81696,24 @@ + + + + Sudoku 2007 + 2007 + RetroZone + + + + + + + + + + + + Super Painter diff -Nru mame-0.250+dfsg.1/hash/next_cdrom.xml mame-0.251+dfsg.1/hash/next_cdrom.xml --- mame-0.250+dfsg.1/hash/next_cdrom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/next_cdrom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/next_hdd.xml mame-0.251+dfsg.1/hash/next_hdd.xml --- mame-0.250+dfsg.1/hash/next_hdd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/next_hdd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/next.xml mame-0.251+dfsg.1/hash/next.xml --- mame-0.250+dfsg.1/hash/next.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/next.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ngpc.xml mame-0.251+dfsg.1/hash/ngpc.xml --- mame-0.250+dfsg.1/hash/ngpc.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ngpc.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ngp.xml mame-0.251+dfsg.1/hash/ngp.xml --- mame-0.250+dfsg.1/hash/ngp.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ngp.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/nimbus.xml mame-0.251+dfsg.1/hash/nimbus.xml --- mame-0.250+dfsg.1/hash/nimbus.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/nimbus.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/novag_ssensor4.xml mame-0.251+dfsg.1/hash/novag_ssensor4.xml --- mame-0.250+dfsg.1/hash/novag_ssensor4.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/novag_ssensor4.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/nuon.xml mame-0.251+dfsg.1/hash/nuon.xml --- mame-0.250+dfsg.1/hash/nuon.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/nuon.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,8 @@ - + diff -Nru mame-0.250+dfsg.1/hash/octopus.xml mame-0.251+dfsg.1/hash/octopus.xml --- mame-0.250+dfsg.1/hash/octopus.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/octopus.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ondra.xml mame-0.251+dfsg.1/hash/ondra.xml --- mame-0.250+dfsg.1/hash/ondra.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ondra.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/orion_cass.xml mame-0.251+dfsg.1/hash/orion_cass.xml --- mame-0.250+dfsg.1/hash/orion_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/orion_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/orion_flop.xml mame-0.251+dfsg.1/hash/orion_flop.xml --- mame-0.250+dfsg.1/hash/orion_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/orion_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/orionpro_flop.xml mame-0.251+dfsg.1/hash/orionpro_flop.xml --- mame-0.250+dfsg.1/hash/orionpro_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/orionpro_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/osborne1.xml mame-0.251+dfsg.1/hash/osborne1.xml --- mame-0.250+dfsg.1/hash/osborne1.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/osborne1.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/osborne2.xml mame-0.251+dfsg.1/hash/osborne2.xml --- mame-0.250+dfsg.1/hash/osborne2.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/osborne2.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/p500_flop.xml mame-0.251+dfsg.1/hash/p500_flop.xml --- mame-0.250+dfsg.1/hash/p500_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/p500_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/partner_cass.xml mame-0.251+dfsg.1/hash/partner_cass.xml --- mame-0.250+dfsg.1/hash/partner_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/partner_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pasogo.xml mame-0.251+dfsg.1/hash/pasogo.xml --- mame-0.250+dfsg.1/hash/pasogo.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pasogo.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pasopia_cass.xml mame-0.251+dfsg.1/hash/pasopia_cass.xml --- mame-0.250+dfsg.1/hash/pasopia_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pasopia_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pb2000c.xml mame-0.251+dfsg.1/hash/pb2000c.xml --- mame-0.250+dfsg.1/hash/pb2000c.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pb2000c.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pc1000.xml mame-0.251+dfsg.1/hash/pc1000.xml --- mame-0.250+dfsg.1/hash/pc1000.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pc1000.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pc1512_flop.xml mame-0.251+dfsg.1/hash/pc1512_flop.xml --- mame-0.250+dfsg.1/hash/pc1512_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pc1512_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pc1640_flop.xml mame-0.251+dfsg.1/hash/pc1640_flop.xml --- mame-0.250+dfsg.1/hash/pc1640_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pc1640_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pc1640_hdd.xml mame-0.251+dfsg.1/hash/pc1640_hdd.xml --- mame-0.250+dfsg.1/hash/pc1640_hdd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pc1640_hdd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pc200.xml mame-0.251+dfsg.1/hash/pc200.xml --- mame-0.250+dfsg.1/hash/pc200.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pc200.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pc6001_cart.xml mame-0.251+dfsg.1/hash/pc6001_cart.xml --- mame-0.250+dfsg.1/hash/pc6001_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pc6001_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pc8001_flop.xml mame-0.251+dfsg.1/hash/pc8001_flop.xml --- mame-0.250+dfsg.1/hash/pc8001_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pc8001_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pc8801_flop.xml mame-0.251+dfsg.1/hash/pc8801_flop.xml --- mame-0.250+dfsg.1/hash/pc8801_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pc8801_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -749,9 +749,7 @@ - - - + 3D Golf Simulation - Super Version 1985 T&E Soft @@ -934,7 +932,8 @@ - + + Abunai Tengu Densetsu 1989 アリスソフト (Alicesoft) @@ -966,8 +965,8 @@ - - Abunai Tengu Densetsu (alt Disk A) + + Abunai Tengu Densetsu (Ver.1.05 alt Disk A) 1989 アリスソフト (Alicesoft) @@ -999,7 +998,7 @@ - + Abunai Tengu Densetsu (alt Disk A 2) 1989 アリスソフト (Alicesoft) @@ -1029,7 +1028,7 @@ - + Abunai Tengu Densetsu (alt 3) 1989 アリスソフト (Alicesoft) @@ -1234,11 +1233,13 @@ - Adrenalin Connection 1987 クロスメディアソフト (Cross Media Soft) + @@ -1268,11 +1269,13 @@ - Adrenalin Connection (alt) 1987 クロスメディアソフト (Cross Media Soft) + @@ -1300,11 +1303,13 @@ - Adrenalin Connection (alt 2) 1987 クロスメディアソフト (Cross Media Soft) + @@ -1332,11 +1337,13 @@ - Adrenalin Connection (alt 3) 1987 クロスメディアソフト (Cross Media Soft) + @@ -1364,8 +1371,7 @@ - - + Adult Inn '87-'88 Bangai-hen 1989 アダルティン (Adult Inn) @@ -1397,16 +1403,15 @@ - - + Advanced Fantasian - Quest for Lost Sanctuary 1988 クリスタルソフト (Xtal Soft) - + @@ -1418,9 +1423,9 @@ - - - + + + @@ -1431,22 +1436,23 @@ + - - - + + + - - + Advanced Fantasian - Quest for Lost Sanctuary (alt User Disk) 1988 クリスタルソフト (Xtal Soft) + @@ -1458,9 +1464,9 @@ - - - + + + @@ -1472,21 +1478,21 @@ - - - + + + - - + Advanced Fantasian - Quest for Lost Sanctuary (alt 2) 1988 クリスタルソフト (Xtal Soft) + @@ -1498,9 +1504,9 @@ - - - + + + @@ -1512,20 +1518,24 @@ - - - + + + - + Adventureland 1984 スタークラフト (Starcraft) + + + @@ -2066,11 +2077,13 @@ - Ali Baba (alt) 1985 スタークラフト (Starcraft) + @@ -2083,11 +2096,13 @@ - Ali Baba (alt 2) 1985 スタークラフト (Starcraft) + @@ -2148,10 +2163,13 @@ - + Alice Tachi no Gogo Vol. 1 1989 システムハウスオウ (System House Oh!) + @@ -2180,10 +2198,13 @@ - + Alice Tachi no Gogo Vol. 1 (alt) 1989 システムハウスオウ (System House Oh!) + @@ -2277,12 +2298,13 @@ - - Alley Cat 1984 Kotobuki Raison + @@ -2334,8 +2356,7 @@ - - + Alphos 1983 エニックス (Enix) @@ -2416,7 +2437,7 @@ - + Amazon Gakujutsu Tanken 1984 スタークラフト (Starcraft) @@ -2442,9 +2463,7 @@ - - - + Amazon Gakujutsu Tanken (alt) 1984 スタークラフト (Starcraft) @@ -2523,11 +2542,13 @@ - American Truck 1985 日本テレネット (Nihon Telenet) + @@ -2536,12 +2557,14 @@ - - + American Truck (alt) 1985 日本テレネット (Nihon Telenet) + @@ -2550,11 +2573,13 @@ - American Truck MKII Ban 1989 日本テレネット (Nihon Telenet) + @@ -2565,11 +2590,13 @@ - American Truck MKII Ban (alt) 1989 日本テレネット (Nihon Telenet) + @@ -2817,11 +2844,13 @@ - Aoki Ookami to Shiroki Mejika - Genchou Hishi 1992 光栄 (Koei) + @@ -2864,11 +2893,13 @@ - Aoki Ookami to Shiroki Mejika - Genghis Khan 1988 光栄 (Koei) + @@ -2904,12 +2935,14 @@ - Aoki Ookami to Shiroki Mejika - Genghis Khan (soundware maybe) 19?? <unknown> + @@ -2995,11 +3028,13 @@ - Apple Club Data Shu 1 - Sailor-fuku Hen 1988 フェアリーテール (Fairytale) + @@ -3697,12 +3732,13 @@ - - Arks Road 1985 ウィンキーソフト (Winky Soft) + @@ -3893,11 +3929,13 @@ - Asteka 1985 日本ファルコム (Nihon Falcom) + @@ -3909,8 +3947,7 @@ - - + Attack!! Hiroko Chan 1983 @@ -3929,11 +3966,13 @@ - Axiom 1985 光栄 (Koei) + @@ -3945,12 +3984,14 @@ - - Ayumi 1990 テクノポリスソフト (Technopolis Soft) + @@ -4153,11 +4194,13 @@ - Ball Panicker 1984 ポニカ (PonyCa) + @@ -4234,11 +4277,13 @@ - Barbatus no Majo (alt) 1990 アーテック (Artec) + @@ -4276,9 +4321,7 @@ - - - + Bastard Special 1988 ザインソフト (Xain Soft) @@ -4376,11 +4419,14 @@ - + Battle Gorilla (alt) 1988 クリスタルソフト (Xtal Soft) + @@ -4390,14 +4436,14 @@ - + - + @@ -4513,11 +4559,13 @@ - Best Nine Pro Yakyuu 1985 アスキー (ASCII) + @@ -4543,9 +4591,7 @@ - - - + Bishoujo Shashinkan - Moving School 1987 ハード (Hard) @@ -4560,9 +4606,7 @@ - - - + Bishoujo Shashinkan - Moving School (alt?) 19?? <unknown> @@ -4663,9 +4707,7 @@ - - - + Bishoujo Shashinkan - Studio Cut 1987 ハード (Hard) @@ -4702,9 +4744,7 @@ - - - + Bishoujo Shashinkan - Studio Cut (alt?) 19?? <unknown> @@ -4744,17 +4784,15 @@ - - - - + + The Black Onyx - 1984 + 1983 B·P·S (Bullet-Proof Software) - + @@ -4763,26 +4801,33 @@ - - - - The Black Onyx (alt) + + + The Black Onyx (Version 4.1) 1984 B·P·S (Bullet-Proof Software) + + + - + - + The Black Onyx SR-Hen 1984 B·P·S (Bullet-Proof Software) + @@ -4802,10 +4847,13 @@ - + The Black Onyx SR-Hen (alt) 1984 B·P·S (Bullet-Proof Software) + @@ -5531,8 +5579,7 @@ - - + The Byoin 1987 パソコンショップ高知 (PSK) @@ -5572,11 +5619,13 @@ - Caligraph Construction ver 1.00 1986 システムソフト (System Soft) + @@ -5597,12 +5646,13 @@ - - - + Campaign-ban Daisenryaku 2 1989 システムソフト (System Soft) + @@ -5684,12 +5734,13 @@ - - - + Can Can Bunny Superior 1990 フェアリーテール (Fairytale) + @@ -5726,12 +5777,13 @@ - - - + Can Can Bunny Superior (alt?) 1990 フェアリーテール (Fairytale) + @@ -5768,12 +5820,13 @@ - - - + Can Can Bunny Superior (alt 2) 1990 フェアリーテール (Fairytale) + @@ -5840,8 +5893,7 @@ - - + Carmine 1987 マイクロキャビン (Micro Cabin) @@ -5866,8 +5918,7 @@ - - + Carmine (alt?) 1987 マイクロキャビン (Micro Cabin) @@ -5938,11 +5989,13 @@ - The Castle 1985 アスキー (ASCII) + @@ -6237,13 +6290,15 @@ - - Chikyu Boeigun 1986 アートディンク (Artdink) + @@ -6490,9 +6545,7 @@ - - - + Columns 1992 システムソフト (System Soft) @@ -6517,12 +6570,13 @@ - - - + Comsight 1987 テクノソフト (Techno Soft) + @@ -6536,10 +6590,11 @@ + - + @@ -6587,8 +6642,7 @@ - - + Corridor 1984 光栄 (Koei) @@ -6898,12 +6952,13 @@ - - Craze 1988 ハート電子 (Heart Denshi) + @@ -7284,12 +7339,14 @@ - - Chou Bishoujo Densetsu Croquis 1990 ピンキー (Pinky) + @@ -7528,11 +7585,13 @@ - Cuby Panic 1985 ゲームアーツ (Game Arts) + @@ -7559,11 +7618,16 @@ - + D' 1988 テクノソフト (Techno Soft) + @@ -7591,6 +7655,89 @@ + + D' (alt) + 1988 + テクノソフト (Techno Soft) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + D' (cracked) + 1988 + テクノソフト (Techno Soft) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Donkey Kong 3 - Dai Gyakushuu + 1984 + ハドソン (Hudson Soft) + + + + + + + + D.P.S - Dream Program System 1990 @@ -7832,11 +7979,13 @@ - Daikoukai Jidai 1990 光栄 (Koei) + @@ -7879,11 +8028,13 @@ - Daikoukai Jidai (alt?) 1990 光栄 (Koei) + @@ -8271,11 +8422,13 @@ - Death Trap 1984 スクウェア (Square) + @@ -8502,11 +8655,13 @@ - Demon Crystal 1985 電波新聞社 (Dempa Shinbunsha) + @@ -9214,11 +9369,13 @@ - Dig Dug SR (alt) 1985 電波新聞社 (Dempa Shinbunsha) + @@ -10318,13 +10475,19 @@ - Dragon Princess - Meikyuu no Madoushi 1988 パソケット (Pasoket) + + + @@ -10345,13 +10508,15 @@ - - - Dragon Princess - Meikyuu no Madoushi (alt) + + + The Dragon Princess 1988 パソケット (Pasoket) + + @@ -11088,11 +11253,13 @@ - Eiyuu Densetsu Saga 1984 マイクロキャビン (Micro Cabin) + @@ -11122,11 +11289,13 @@ - - + Eiyuu Densetsu Saga (alt) 1984 マイクロキャビン (Micro Cabin) + @@ -11291,12 +11460,14 @@ - - Emerald Dragon 1989 バショウハウス (Bashou House) + @@ -11407,12 +11578,14 @@ - - Emerald Dragon Visual User Disk 19?? <unknown> + @@ -11582,11 +11755,13 @@ - Europa Sensen 1991 光栄 (Koei) + @@ -11622,11 +11797,13 @@ - Europa Sensen (alt?) 1991 光栄 (Koei) + @@ -12189,13 +12366,14 @@ - - - Final Crisis 1991 テクノグラード (Techno Gurado) + @@ -12258,11 +12436,13 @@ - Final Lolita 1986 パソコンショップ高知 (PSK) + @@ -12394,11 +12574,13 @@ - Final Zone Demo 1986 日本テレネット (Nihon Telenet) + @@ -12830,8 +13012,7 @@ - - + Fruit Panic 1984 ポニカ (PonyCa) @@ -12840,7 +13021,7 @@ - + @@ -13631,12 +13812,14 @@ - - GeGeGe no Kitarou 1985 バンダイ (Bandai) + @@ -13926,12 +14109,18 @@ - - Ginga Eiyuu Densetsu II & DX Kit (Fixed) + + Ginga Eiyuu Densetsu II & DX Kit (fixed) 1991 ボーステック (Bothtec) + + + @@ -14045,11 +14234,13 @@ - Girlfriend Yumiko 1985 宇宙企画 (Uchuu Kikaku) + @@ -14561,12 +14752,14 @@ - - Kidou Senshi Gundam - Gundam Daichi ni Tatsu 1984 ラポート (Rapport) + @@ -15003,11 +15196,13 @@ - Hanafuda Kyo 1984 ハドソン (Hudson Soft) + @@ -15061,11 +15256,13 @@ - Hang On 1986 パックスエレクトロニカ (Pax Electronica) + @@ -15392,11 +15589,13 @@ - Helicoid (alt) 1985 マイクロネット (Micronet) + @@ -15831,11 +16030,13 @@ - Holy Grail 1985 ザインソフト (Sein Soft) + @@ -16067,11 +16268,13 @@ - Hover Attack 1985 コムパック (Compaq) + @@ -16276,15 +16479,17 @@ - - - + Hydlide 3 - The Space Memories 1987 T&E Soft + + @@ -16443,11 +16648,13 @@ - Igo Hyakka - Go to Shodan 1985 クロスメディアソフト (Cross Media Soft) + @@ -16665,11 +16872,13 @@ - Inindo 1991 光栄 (Koei) + @@ -16712,11 +16921,13 @@ - Inindo (alt?) 1991 光栄 (Koei) + @@ -16845,8 +17056,7 @@ - - + Ishido - The Way of Stones 1990 アスキー (ASCII) @@ -16860,11 +17070,13 @@ - Ishin no Arashi 1989 光栄 (Koei) + @@ -16900,11 +17112,13 @@ - Ishin no Arashi (alt?) 1989 光栄 (Koei) + @@ -16940,11 +17154,13 @@ - Ishin no Arashi (alt User Disk) 1989 光栄 (Koei) + @@ -17267,20 +17483,25 @@ - + Jesus II 1991 エニックス (Enix) + + - + @@ -17320,20 +17541,25 @@ - + Jesus II (alt) 1991 エニックス (Enix) + + - + @@ -17373,7 +17599,7 @@ - + Jesus II Demo 1991 エニックス (Enix) @@ -18059,11 +18285,13 @@ - Kareinaru Erotic Memory 1987 ドット企画 (Dot Kikaku) + @@ -18141,12 +18369,14 @@ - - Kawaiso Monogatari 1987 システムソフト (System Soft) + @@ -18204,12 +18434,16 @@ - - + + Kawaiso Monogatari SR (alt) 19?? <unknown> + @@ -18264,11 +18498,13 @@ - The Keiba II 1987 チャンピオンソフト (Champion Soft) + @@ -18454,11 +18690,13 @@ - King Breeder 1991 アーテック (Artec) + @@ -18515,11 +18753,13 @@ - King Breeder (alt) 1991 アーテック (Artec) + @@ -18938,13 +19178,14 @@ - + Komori Ai no Dokidoki Rally 1988 宇宙企画 (Uchuu Kikaku) + @@ -18963,13 +19204,14 @@ - + Komori Ai no Dokidoki Rally (alt) 1988 宇宙企画 (Uchuu Kikaku) + @@ -18988,13 +19230,14 @@ - + Komori Ai no Dokidoki Rally (alt 2) 1988 宇宙企画 (Uchuu Kikaku) + @@ -19472,11 +19715,13 @@ - Kuro Neko so Sozoku Satsujin Jiken 1984 ユニオンプランニング (Union Planning) + @@ -19538,11 +19783,13 @@ - L'Empereur 1990 光栄 (Koei) + @@ -20498,11 +20745,13 @@ - Lode Runner 1983 システムソフト (System Soft) + @@ -20513,11 +20762,13 @@ - Lode Runner (alt 1) 1983 システムソフト (System Soft) + @@ -20528,11 +20779,13 @@ - Lode Runner (alt 2) 1983 システムソフト (System Soft) + @@ -21537,9 +21790,7 @@ - - - + Maildog Muku 1984 コムパック (Compaq) @@ -22051,15 +22302,19 @@ - - Mappy (alt?) 1986 電波新聞社 (Dempa Shinbunsha) + + + @@ -22109,12 +22364,14 @@ - - Mario Bros. Special 1984 ハドソン (Hudson Soft) + @@ -22138,11 +22395,13 @@ - Marvelous 1986 データウエスト (Data West) + @@ -22342,12 +22601,13 @@ - - Suiryushi Bangaihen - Mediflora no Izumi 1991 しゃんばら (Shanbara) + @@ -22391,12 +22651,13 @@ - - Suiryushi Bangaihen - Mediflora no Izumi (alt User Disk) 1991 しゃんばら (Shanbara) + @@ -22857,11 +23118,13 @@ - Mid Garts (Dual Side) 1989 ウルフチーム (WolfTeam) + @@ -23039,11 +23302,13 @@ - Miko to Akemi no Jungle Adventure 1984 システムソフト (System Software) + @@ -23092,17 +23357,18 @@ - - - Milkyway (v1.0) 1984 マイクロネット (Micronet) + - + @@ -23241,15 +23507,18 @@ - - + Mirrors 1990 ソフトスタジオWING (Soft Studio Wing) + - + @@ -23693,9 +23962,7 @@ - - - + Motoko-hime Adventure 1987 辰巳出版 (Tatsumi Publishing) @@ -23807,11 +24074,13 @@ - Mugen no Shinzo 1984 クリスタルソフト (Xtal Soft) + @@ -24110,11 +24379,10 @@ - - - + My Lolita 1985 + 光栄 (Koei) @@ -24418,11 +24686,13 @@ - - + Ninja-kun 1983 マイクロキャビン (Micro Cabin) + @@ -24435,11 +24705,13 @@ - Ninja-kun - Majou no Bouken 1986 日本デクスタ (Nihon Dexter) + @@ -24531,11 +24803,13 @@ - Nobunaga no Yabou - Bushou Fuunroku 1990 光栄 (Koei) + @@ -24571,11 +24845,13 @@ - Nobunaga no Yabou - Bushou Fuunroku (alt) 1990 光栄 (Koei) + @@ -24611,11 +24887,13 @@ - Nobunaga no Yabou - Sengoku Gunyuuden 1988 光栄 (Koei) + @@ -24644,11 +24922,13 @@ - Nobunaga no Yabou - Sengoku Gunyuuden (alt) 1988 光栄 (Koei) + @@ -24692,11 +24972,13 @@ --> - Nobunaga no Yabou - Sengoku Gunyuuden (alt 2) 1988 光栄 (Koei) + @@ -25018,11 +25300,13 @@ - Hokkaidou Rensa Satsujin - Okhotsk ni Shouyu!! 1984 アスキー (ASCII) + @@ -25045,11 +25329,13 @@ - Hokkaidou Rensa Satsujin - Okhotsk ni Shouyu!! (alt Disk 1) 1984 アスキー (ASCII) + @@ -25072,11 +25358,13 @@ - Hokkaidou Rensa Satsujin - Okhotsk ni Shouyu!! (alt 2?) 1984 アスキー (ASCII) + @@ -25163,11 +25451,13 @@ - Omega Soukan-Go 1987 チャンピオンソフト (Champion Soft) + @@ -25358,11 +25648,13 @@ - Ookami Otoko Satsujin Jiken 1984 ユニオンプランニング (Union Planning) + @@ -25387,9 +25679,7 @@ - - - + Operation L 1990 タケル (Takeru) @@ -25585,11 +25875,13 @@ - Pai Panic 1984 アスキー (ASCII) + @@ -25602,12 +25894,13 @@ - - - + The Paladin 1985 ボーステック (Bothtec) + @@ -25669,11 +25962,13 @@ - - + Panorama-to 1983 日本ファルコム (Nihon Falcom) + @@ -25773,11 +26068,13 @@ - Peeping Scandals 1984 ボーステック (Bothtec) + @@ -25788,11 +26085,13 @@ - Peeping Scandals (alt) 1984 ボーステック (Bothtec) + @@ -25811,9 +26110,7 @@ - - - + Penguin-kun Wars 1985 アスキー (ASCII) @@ -25827,9 +26124,7 @@ - - - + Penguin-kun Wars (alt) 1985 アスキー (ASCII) @@ -25843,8 +26138,7 @@ - - + Penguin Village 1984 ポニカ (PonyCa) @@ -28126,15 +28420,17 @@ - - The Return of Ishtar 1987 S·P·S + + @@ -28502,9 +28798,7 @@ - - - + Romancia 1986 日本ファルコム (Nihon Falcom) @@ -28518,12 +28812,13 @@ - - Romancia (alt) 1986 日本ファルコム (Nihon Falcom) + @@ -28570,11 +28865,13 @@ - Royal Blood 1991 光栄 (Koei) + @@ -28709,12 +29006,14 @@ - - Rune Worth (alt) 1990 T&E Soft + @@ -29111,11 +29410,13 @@ - Sangokushi (19861210, SR Ban?) 1985 光栄 (Koei) + @@ -29144,12 +29445,14 @@ - Sangokushi (19861210, SR Ban?, Alt) 1985 光栄 (Koei) + @@ -29178,12 +29481,14 @@ - Sangokushi (SR Ban?) 1987 光栄 (Koei) + @@ -29237,11 +29542,13 @@ - Sangokushi II 1989 光栄 (Koei) + @@ -29284,11 +29591,13 @@ - Sangokushi II (alt) 1989 光栄 (Koei) + @@ -29331,11 +29640,13 @@ - Sangokushi II (alt 2) 1989 光栄 (Koei) + @@ -29378,11 +29689,13 @@ - Sangokushi II (alt 3) 1989 光栄 (Koei) + @@ -29457,27 +29770,34 @@ - + The Scheme 1988 ボーステック (Bothtec) + + + - + - + @@ -29486,10 +29806,14 @@ ExtractDisk [01]"MUSIC1 " -> "scheme music disk_01.d88" ExtractDisk [02]"MUSIC2 " -> "scheme music disk_02.d88" --> - + Scheme Music Disk 19?? <unknown> + @@ -29507,10 +29831,13 @@ - + The Scheme - Music Disk (alt?) 19?? <unknown> + @@ -29825,17 +30152,17 @@ - - - - + SeeNa - Wide screen 1986 システムソフト (System Soft) + - + @@ -29845,11 +30172,13 @@ - Seibu no Nariagari 1984 HOT・B + @@ -29860,11 +30189,13 @@ - Seibu no Nariagari (alt) 1984 HOT・B + @@ -30082,9 +30413,7 @@ - - - + Sekai Yaruhodo So Much 1986 ピーコック (Peacock) @@ -30334,13 +30663,15 @@ - - - + Shanghai SR 19?? スタークラフト (Starcraft) + + + + @@ -30348,12 +30679,14 @@ - - Shanghai II 1990 システムソフト (System Soft) + @@ -30616,7 +30949,7 @@ --> - Shin Kugyokuden (Fixed??) + Shin Kugyokuden (fixed?) 1988 テクノソフト (Techno Soft) @@ -30695,9 +31028,7 @@ - - - + Shin Kugyokuden Demo 1988 テクノソフト (Techno Soft) @@ -30897,11 +31228,13 @@ - Shirobara Renzoku Satsujin Jiken 1984 リバーヒルソフト (Riverhill Software) + @@ -31241,11 +31574,13 @@ - The Shougi Juku 1986 ビクター音楽産業 (Victor Music Industry) + @@ -31802,9 +32137,7 @@ - - - + Snatcher Demo 1988 コナミ (Konami) @@ -31826,9 +32159,7 @@ - - - + Snatcher Demo (alt) 1988 コナミ (Konami) @@ -31933,11 +32264,13 @@ - Sokoban 2 1984 シンキングラビット (Thinking Rabbit) + @@ -32087,9 +32420,7 @@ ExtractDisk [27]"Program V1.0 " -> "sorcerian(full package)_27.d88" [15740427] --> - - - + Sorcerian (v1.1) 1987 日本ファルコム (Nihon Falcom) @@ -32135,9 +32466,7 @@ - - - + Sorcerian (v1.0) 1987 日本ファルコム (Nihon Falcom) @@ -32738,12 +33067,13 @@ - - - + Star Cruiser 1988 アルシスソフト (Arsys Soft) + @@ -32967,9 +33297,7 @@ - - - + Still Sword 1988 フェアリーテール (Fairytale) @@ -33123,11 +33451,13 @@ - Suikoden - Tenmei no Chikai 1989 光栄 (Koei) + @@ -33213,11 +33543,13 @@ - Suiryushi II - Wadatsumi no Hikari Koto 1989 しゃんばら (Shanbara) + @@ -33260,11 +33592,13 @@ - Suiryushi II - Wadatsumi no Hikari Koto (alt User Disk) 1989 しゃんばら (Shanbara) + @@ -33518,12 +33852,14 @@ - - Super Rambo 1986 パックインビデオ (Pack-in Video) + @@ -33828,11 +34164,13 @@ - Teitoku no Ketsudan 1990 光栄 (Koei) + @@ -34075,12 +34413,11 @@ - - - + Ten to Chi to 1990 コナミ (Konami) + @@ -34191,11 +34528,13 @@ - Tennis Freak 1985 ウィンキーソフト (Winky Soft) + @@ -34235,9 +34574,14 @@ Tenshi-tachi no Gogo 1985 ジャスト (Jast) + + + @@ -34281,12 +34625,16 @@ - - Tenshi-tachi no Gogo Bangai-hen 1985 ジャスト (Jast) + @@ -34297,12 +34645,16 @@ - - Tenshi-tachi no Gogo Bangai-hen (alt) 1985 ジャスト (Jast) + @@ -34572,11 +34924,12 @@ - - + Testament Expansion Map 19?? <unknown> + + @@ -34591,6 +34944,7 @@ + @@ -34631,9 +34985,7 @@ - - - + Tetris (alt?) 1988 B·P·S (Bullet-Proof Software) @@ -34662,13 +35014,15 @@ - - + Thexder 1985 ゲームアーツ (Game Arts) + @@ -34679,12 +35033,13 @@ - - Thexder (alt?) 1985 ゲームアーツ (Game Arts) + @@ -34695,12 +35050,13 @@ - - Thexder (invincible cheat?) 1985 ゲームアーツ (Game Arts) + @@ -34752,13 +35108,15 @@ - - Time Empire (Single drive version) 1985 光栄 (Koei) + @@ -34771,12 +35129,15 @@ - - + + Time Empire (alt, Dual drive version) 1985 光栄 (Koei) + @@ -34799,12 +35160,14 @@ - Time Empire (alt 2, Dual drive version) 1985 光栄 (Koei) + @@ -34827,11 +35190,13 @@ - Time Tunnel - Time Secret 2 1984 ボンドソフト (Bond Soft) + @@ -34842,11 +35207,13 @@ - Time Tunnel - Time Secret 2 (alt) 1984 ボンドソフト (Bond Soft) + @@ -34956,16 +35323,19 @@ - - Tir-Nan-Og - Kindan no Tou 1990 システムソフト (System Soft) + - + @@ -34983,11 +35353,11 @@ - + - + @@ -35005,13 +35375,14 @@ - - - - + Tobira wo Hirakete 1987 キティエンタープライズ (Kitty Enterprise) + @@ -35344,15 +35715,17 @@ - - - + Tonky 1985 SPS + + @@ -35488,12 +35861,13 @@ - - Touchdown 1984 ウィンキーソフト (Winky Soft) + @@ -35670,18 +36044,17 @@ - - - + Triton 1985 ザインソフト (Sein Soft) + - + @@ -36206,11 +36579,13 @@ - Ultima I - The First Age of Darkness 1988 ポニカ (Pony Canyon) + @@ -36239,11 +36614,13 @@ - Ultima I - The First Age of Darkness (alt) 1988 ポニカ (Pony Canyon) + @@ -37075,15 +37452,16 @@ - - Vain Dream Visual User Disk 1991 グローディア (Global Media) + - + @@ -37614,18 +37992,17 @@ - - - + Weird 2 1985 ポリシー (Policy) + - + @@ -37713,15 +38090,14 @@ - - - - Wibarm + + WiBArM 1986 アルシスソフト (Arsys Soft) + @@ -37740,23 +38116,32 @@ - - Wibarm (alt) + + WiBArM (alt User Disk) 1986 アルシスソフト (Arsys Soft) + + + + + + + + + + - @@ -38385,9 +38770,7 @@ - - - + Woody Poco 1986 デービーソフト (dB-Soft) @@ -38469,18 +38852,17 @@ - - - + World Golf (alt) 1985 エニックス (Enix) + - + @@ -38695,12 +39077,14 @@ - - Xak II: Rising of the Redmoon 1990 マイクロキャビン (Micro Cabin) + @@ -38764,11 +39148,13 @@ - Xak II: Rising of the Redmoon (alt) 1990 マイクロキャビン (Micro Cabin) + @@ -38825,13 +39211,15 @@ - Xak Precious Package: The Tower of Gazzel 1991 マイクロキャビン (Micro Cabin) + @@ -38888,9 +39276,7 @@ - - - + Xanadu 1985 日本ファルコム (Nihon Falcom) @@ -38922,9 +39308,7 @@ - - - + Xanadu (alt) 1985 日本ファルコム (Nihon Falcom) @@ -38970,7 +39354,7 @@ - + Xanadu (bootleg?) 1985 @@ -39008,11 +39392,13 @@ ExtractDisk [02]"xanadu80_b " -> "xanadu_v80_02.d88" --> - Xanadu (alt 2) 1985 日本ファルコム (Nihon Falcom) + @@ -39033,7 +39419,7 @@ - Xanadu (Hack) + Xanadu (hack) 19?? <unknown> @@ -39054,7 +39440,7 @@ - + Xanadu (mkII version) 1985 日本ファルコム (Nihon Falcom) @@ -39112,12 +39498,13 @@ - - Xanadu Scenario II - The Resurrection of Dragon 1986 日本ファルコム (Nihon Falcom) + @@ -39146,10 +39533,8 @@ - - - - Xanadu Scenario II - The Resurrection of Dragon (Hack) + + Xanadu Scenario II - The Resurrection of Dragon (hack) 19?? <unknown> @@ -39168,7 +39553,6 @@ - @@ -39231,13 +39615,12 @@ - - - + Xylos 1985 アスキー (ASCII) + @@ -39393,11 +39776,14 @@ - XZR II Demo 1988 日本テレネット (Nihon Telenet) + @@ -39616,11 +40002,13 @@ - Yaksa (alt) 1987 ウルフチーム (WolfTeam) + @@ -39649,11 +40037,13 @@ - - Yaksa (Hack) + Yaksa (hack) 1987 ウルフチーム (WolfTeam) + @@ -39693,12 +40083,14 @@ - Yaksa Music Disk 1987 ウルフチーム (WolfTeam) + @@ -39706,18 +40098,18 @@ - - + Yakyuu-dou 1988 タケル (Takeru) + - + @@ -39739,22 +40131,24 @@ + - + - - + Yakyuu-dou (alt) 1988 タケル (Takeru) + + @@ -40085,15 +40479,17 @@ - - Youkai Tantei Chima Chima 1984 ボーステック (Bothtec) + + @@ -40916,11 +41312,14 @@ - Zodiac 2 Aggress 1986 リバーヒルソフト (Riverhill Software) + @@ -40997,9 +41396,7 @@ - - - + Aino New Loaders 4 1987 <doujin> @@ -41013,9 +41410,7 @@ - - - + Aino New Loaders 4 (alt) 1987 <doujin> @@ -41028,9 +41423,7 @@ - - - + Aino New Loaders Vol. 5 1987 <doujin> @@ -41055,8 +41448,9 @@ - + Akuryou no Machi + 1988 <doujin> @@ -41173,13 +41567,15 @@ - - - Attacker 1990 <doujin> + @@ -41415,11 +41811,13 @@ - Brunette 19?? <doujin> + @@ -41428,11 +41826,13 @@ - Brunette (alt) 19?? <doujin> + @@ -42469,11 +42869,13 @@ - Escape Princess 19?? <doujin> + @@ -42492,10 +42894,14 @@ - + Ever Green 1993 <doujin> + @@ -42747,11 +43153,13 @@ - Ferill 1989 <doujin> + @@ -42760,11 +43168,13 @@ - Ferill (alt) 1989 <doujin> + @@ -42773,11 +43183,13 @@ - Ferill Data Shu Vol.1 19?? <doujin> + @@ -43336,11 +43748,13 @@ - FSD Sample Ongaku-shuu vol. 1 1992 <doujin> + @@ -43350,11 +43764,13 @@ - FSD Sample Ongaku-shuu vol. 2 1992 <doujin> + @@ -43365,11 +43781,13 @@ - FSD Sample Ongaku-shuu vol. 3 1992 <doujin> + @@ -43380,11 +43798,13 @@ - FSD Sample Ongaku-shuu vol. 4 1992 <doujin> + @@ -43395,11 +43815,13 @@ - FSD Sample Ongaku-shuu vol. 5 1993 <doujin> + @@ -43410,11 +43832,13 @@ - FSD Sample Ongaku-shuu vol. 6 1993 <doujin> + @@ -43425,11 +43849,13 @@ - FSD Sample Ongaku-shuu vol. 7 1994 <doujin> + @@ -43721,11 +44147,13 @@ - Hoehoe Team 199x Music Disk Vol. 1 - Explosion 1992? <doujin> + @@ -43869,11 +44297,13 @@ - Imagical Musion Depot Vol. 1 1994 <doujin> + @@ -44064,12 +44494,13 @@ - - Kare to Futari no Skyline 1990? <doujin> + @@ -44097,9 +44528,7 @@ - - - + Key On 1990? <doujin> @@ -44867,9 +45296,11 @@ Nukeru Master Pro-8.8K - 19?? + 1989 <doujin> + + @@ -44878,10 +45309,13 @@ - + Nukeru Master.XX Pro-8.8K - For Adult - 19?? + 1989 <doujin> + @@ -44917,11 +45351,13 @@ - Ongaku Enban Con Spirito 1993 <doujin> + @@ -47686,14 +48122,13 @@ - - - - N88-BASIC MR (v2.3) 19?? <unknown> + @@ -47712,11 +48147,13 @@ - MA System Disk 19?? <unknown> + @@ -47724,11 +48161,13 @@ - MC2 System Disk 19?? <unknown> + @@ -47736,11 +48175,13 @@ - MH System Disk 19?? <unknown> + @@ -47748,11 +48189,13 @@ - MH System Disk (alt) 19?? <unknown> + @@ -47760,11 +48203,13 @@ - MR System Disk 19?? <unknown> + @@ -47772,11 +48217,13 @@ - PC-8801MA Demo 19?? <unknown> + @@ -47784,11 +48231,13 @@ - PC-8801MA Demo (alt) 19?? <unknown> + @@ -47796,11 +48245,13 @@ - PC-8801MA System Disk 19?? <unknown> + @@ -47808,11 +48259,13 @@ - PC-8801MA2 System Disk & Demo 19?? <unknown> + @@ -47820,11 +48273,13 @@ - PC8801mkII MR Demo 19?? <unknown> + @@ -47832,11 +48287,13 @@ - RCM-PC88 Ver 1.0 - Come on Music 19?? <unknown> + @@ -47844,11 +48301,13 @@ - Ulamander 19?? <unknown> + @@ -47856,11 +48315,13 @@ - Yukar Mini 19?? <unknown> + @@ -47942,7 +48403,7 @@ - + Acchi Muite Hoi! 19?? <unknown> @@ -48063,8 +48524,7 @@ - - + Ashura no To 1990 @@ -48101,11 +48561,14 @@ - + Attacker Vanguard 19?? <unknown> + @@ -48113,11 +48576,13 @@ - Autumn Park 19?? <unknown> + @@ -48160,12 +48625,14 @@ - - Blue Mint 19?? + <unknown> + @@ -48193,8 +48660,7 @@ - - + Card Game Change Vol.1 1991 <doujin> @@ -48218,8 +48684,7 @@ - - + Card Game Change Vol.1 (alt) 1990 <doujin> @@ -48336,38 +48801,6 @@ - - Da Vinci v2 - 19?? - <unknown> - - - - - - - - - Da Vinci v3 - 19?? - <unknown> - - - - - - - - - - - - - - - - - Denno E-ro Hon Series Dai2Dan Purupuru 19?? @@ -48461,11 +48894,14 @@ - Dungeon Manjiro 19?? <unknown> + + @@ -48527,26 +48963,31 @@ - Fantastic Eaters 19?? <unknown> + - + - + Fantastic Eaters (alt) 19?? <unknown> + - + @@ -48759,19 +49200,6 @@ - - - - Hansen Simulator (Thousantis-go no Boken) - 19?? - <unknown> - - - - - - - Hard Print 4 19?? @@ -48835,11 +49263,14 @@ - Heroes 19?? <unknown> + @@ -48849,13 +49280,14 @@ - - - Imenes 19?? Grass Roots Software + @@ -49020,9 +49452,7 @@ - - - + KyuRyuTou (SR ver) 1986 スタークラフト (Starcraft) @@ -49036,9 +49466,8 @@ - - - + + KyuRyuTou 1986 スタークラフト (Starcraft) @@ -49123,12 +49552,13 @@ - - Login Disk 19?? <unknown> + @@ -49456,12 +49886,15 @@ - - - + Music with Obie - Animal Quartet 19?? <unknown> + + @@ -50314,11 +50747,13 @@ - Suikoden 19?? - <unknown> + 光栄 (Koei) + @@ -50351,11 +50786,13 @@ - Suikoden (alt) 19?? - <unknown> + 光栄 (Koei) + @@ -50394,11 +50831,13 @@ - SuperHeli (on Tsukumo C-DOS2) 19?? <unknown> + @@ -50530,11 +50969,13 @@ - Teruru 19?? - <unknown> + <doujin> + @@ -50542,12 +50983,17 @@ - - - - Thousantis-go no Boken - 19?? + + + Hansen Simulator - Thousantis-go no Bouken + 1985 <unknown> + + + @@ -50555,6 +51001,24 @@ + + Hansen Simulator - Thousantis-go no Bouken (alt) + 19?? + <unknown> + + + + + + + + + + Tinker Bell 19?? @@ -51223,12 +51687,14 @@ - - Battle Bunnygirl 1990 <unknown> + @@ -51810,11 +52276,15 @@ - - - DX kit DISK B - 19?? - <unknown> + + + Ginga Densetsu II DX Kit (alt) + 1991 + ボーステック (Bothtec) + + @@ -51976,11 +52446,13 @@ - Galkko Card 19?? <unknown> + @@ -53064,13 +53536,15 @@ - - - Play6 Limited Version 1999 <unknown> + @@ -53577,8 +54051,9 @@ Straight Flush - 19?? - <unknown> + 1990 + <doujin> + @@ -53650,11 +54125,14 @@ - + Super Horoscope 19?? <unknown> + @@ -53662,13 +54140,13 @@ - - - - + Super Jack 88 (SB2 version) - 19?? - <unknown> + 1989 + G_Club Software + @@ -53792,11 +54270,11 @@ - - Tsume Tetras - 19?? - <unknown> + Tsume Tetras + 1989 + <doujin> + @@ -53804,11 +54282,13 @@ - Tetris Noripy 19?? - <unknown> + <doujin> + @@ -54617,15 +55097,16 @@ - - PC-8801 Game Pack 19?? <unknown> + - + @@ -55031,12 +55512,13 @@ - - PACK2 19?? <unknown> + @@ -55578,12 +56060,13 @@ - - PC-88 Game Book A 19?? <unknown> + @@ -55591,12 +56074,13 @@ - - PC-88 Game Book B 19?? <unknown> + @@ -55605,12 +56089,17 @@ - + - 100-yen Soft Part 7 (alt) + 100-yen Soft Part 7 19?? - <unknown> - + <doujin> + + + @@ -55618,32 +56107,36 @@ - - - - - 100-yen Soft #8 Revival Special + + 100-yen Soft Part 7 (alt) 19?? - <unknown> - - + <doujin> + + + - - + + - - - - 100-yen Soft Part 7 + + 100-yen Soft #8 Revival Special 19?? <unknown> - + + + - - + + @@ -56038,12 +56531,17 @@ - - - + ZETA-88 Vol. 2 - 19?? - <unknown> + + 1986 + Soft Works + + + @@ -56062,6 +56560,80 @@ + + Animation Editor 'da Vinci' (version-3.00) + 1986 + HAL Laboratory + + + + + + + + + + + Animation Editor 'da Vinci' (version-3.00, alt) + 1986 + HAL Laboratory + + + + + + + + + + + + + + + + + + + + + Animation Editor 'da Vinci' (version-2.00) + 1985 + HAL Laboratory + + + + + + + + + + + Animation Editor 'da Vinci' (version-2.00, alt) + 1985 + HAL Laboratory + + + + + + + + + @@ -56077,12 +56649,13 @@ - 88-Term (v1.00) 1987 アスキー (ASCII) - + @@ -56090,17 +56663,6 @@ - - Animation Editor DA VINCI ver 2.0 - 19?? - <unknown> - - - - - - - - - - Da Vinci v3.0 - 19?? - <unknown> - - - - - - - - DataBox 19?? <unknown> + @@ -56243,12 +56794,14 @@ - - Expert88 ver 1.1 1985 <unknown> + @@ -56258,12 +56811,14 @@ - - - - Expert88 ver 2.1 - 19?? + + Expert88 (Ver 2.1) + 1987 <unknown> + @@ -56271,10 +56826,14 @@ - - Hand Pick B1 - 19?? - <unknown> + + Hand Pick (Version B1) + 1985 + Argus Enterprise + @@ -56282,12 +56841,14 @@ - - - Hand Pick B1R - 19?? - <unknown> + The Hand Pick (Version B1R) + 1986 + Argus Enterprise + @@ -56295,11 +56856,13 @@ - IDOS err 19?? <unknown> + @@ -56307,35 +56870,27 @@ - - Ink Pot Data - 19?? + + Ink Pot (v1.00) + 1985 <unknown> + - + - - - - Ink Pot Option - 19?? - <unknown> - + - + - - - - Ink Pot System - 19?? - <unknown> - + - + @@ -56413,14 +56968,15 @@ - - - - JET-Terminal v1.0 1986 キャリーラボ (Carry Lab) + @@ -56432,14 +56988,16 @@ ExtractDisk [01]"システム " -> "kaseijin_01.d88" ExtractDisk [02]"データ " -> "kaseijin_02.d88" --> - - - + Kasei-Jin 1988 パックインビデオ (Pack-in Video) + @@ -56545,12 +57103,15 @@ ExtractDisk [02]"Disk 2 " -> "multiplan ver.1.07_02.d88" --> - Multiplan ver.1.07 - 19?? - <unknown> + 1987 + Microsoft + @@ -56768,12 +57329,14 @@ - - nFormat Disk 19?? <unknown> + "Sequel being worked on, everything is fine" (wtf?) +]]> @@ -56867,11 +57430,14 @@ - + Pattern Editor 88 19?? <unknown> + @@ -56978,10 +57544,15 @@ - - Presse88 - 19?? - <unknown> + + Pressé-88 + 1983 + Hexard + + + @@ -56989,13 +57560,15 @@ - - - - - Rats & Star + + Rats & Star (V2.07) 19?? <unknown> + @@ -57045,12 +57618,14 @@ - - Super Editor 19?? <unknown> + @@ -57215,12 +57790,14 @@ - - The File Master - diskH 19?? <unknown> + @@ -57931,11 +58508,13 @@ - Hot File Disk No.7 19?? <unknown> + diff -Nru mame-0.250+dfsg.1/hash/pc88va.xml mame-0.251+dfsg.1/hash/pc88va.xml --- mame-0.250+dfsg.1/hash/pc88va.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pc88va.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -17,6 +17,7 @@ * Igo-mei-kyoku Shuu '87 ~ 囲碁名局集'87, by GAM * Death Bringer ~ デス・ブリンガー, by Telenet Japan * Arantia (Atlantia?) VA Special ~ アランティアVAスペシャル, by Victor Music Industry + * Go Kichi-kun ~ 碁キチくん, by GAM * Go Kichi-kun 2 ~ 碁キチくん2, by GAM * Ultima V ~ ウルティマⅤ, by Pony Canyon * The Bard's Tale ~ ザ バーズテイル, by Pony Canyon @@ -28,7 +29,7 @@ * Ishin no Arashi ~ 維新の嵐, by Koei * Teitoku no Ketsudan ~ 提督の決断, by Koei * Nobunaga no Yabou - Sengoku Gunyou Den ~ 信長の野望・戦国群雄伝, by Koei - * Suikoden ~ 水滸伝, by Koei + * Suikoden - Tenmei no Chikai ~ 水滸伝 天命の誓い, by Koei * Kawaiso Monogatari ~ かわいそう物語, by System Software * Fantasy III ~ ファンタジーⅢ, by Starcraft * Lodoss Shima Senki ~ ロードス島戦記, by Humming Bird Soft @@ -37,6 +38,10 @@ * Ultima I-IV ~ ウルティマI~IV, by Pony Canyon * Heroes of the Lance ~ ヒーローオブランス, by Pony Canyon * Lightning Bacchus? ~ ライトニングバッカス, by NCS + * Record of Lodoss War ~ ロードス島戦記 by Humming Bird Soft + +PC88VA software + * The Print Shop II ~ プリントショップ Ⅱ (Broderbund Japan) PC88VA doujin games (mostly undumped) @@ -67,15 +72,29 @@ * 翼君の宝箱14 (by Wing software, 1999) * くるッ★彡 (by Cenkeil, 1999) * Frail Rulers (by Fredia, 1999) + * Voltige Aerienne / ディスクイメージ (2008?) + +Operating Systems + * MS-DOS 2.11 + * MS-DOS 3.1 + * CDOS + --> - + + PC88-VA Demo 19?? - <unknown> + NEC + @@ -86,10 +105,16 @@ - + 88VA1 Tentou Demo 19?? - <unknown> + NEC + @@ -101,7 +126,13 @@ 88VA2 Demo 19?? - <unknown> + NEC + @@ -110,9 +141,13 @@ - AnimeFramer - 19?? - <unknown> + + Anime Framer (v1.0) + 1987 + NEC + @@ -127,33 +162,41 @@ + + - - - Paint? - 19?? - <unknown> + + Anime Framer (v1.0 alt) + 1987 + NEC + + - + - + - - Micromusician VA - 19?? - <unknown> + Micro Musician VA + 1989 + Music Network + @@ -163,8 +206,13 @@ PC-Engine (VA2 Tenpu-ban) - 19?? - <unknown> + 1988 + NEC + @@ -173,13 +221,19 @@ - + PC-Engine v1.1 - 19?? - <unknown> + 1988 + NEC + + - + @@ -191,7 +245,14 @@ Family Stadium 19?? ゲームアーツ (Game Arts) + + @@ -214,11 +275,20 @@ - - Family Stadium '89 - Pennant Race Hen + + + Family Stadium (alt) 19?? ゲームアーツ (Game Arts) - + + + + @@ -237,10 +307,17 @@ - - Family Stadium '89 (Alt?) + + Family Stadium '89 - Pennant Race Hen 19?? ゲームアーツ (Game Arts) + + + @@ -267,11 +344,16 @@ Might & Magic 198? スタークラフト (Starcraft) + + + - - - + + + @@ -283,9 +365,9 @@ - - - + + + @@ -294,6 +376,9 @@ Might & Magic Book 2 1984 スタークラフト (Starcraft) + @@ -328,7 +413,14 @@ Olteus 1987 ウインキーソフト (Winky Soft) + + @@ -360,10 +452,18 @@ - Olteus (Alt Disk D) + Olteus (alt disk D) 1987 ウインキーソフト (Winky Soft) + + + @@ -395,8 +495,13 @@ R-Type - 1988? + 1988 NEC + @@ -414,6 +519,9 @@ Rogue Alliance 198? スタークラフト (Starcraft) + @@ -442,6 +550,13 @@ Shanghai 1986 システムソフト (System Soft) + @@ -454,7 +569,13 @@ Shinra Bansho 1987 日本テレネット (Nihon Telenet) + + @@ -474,6 +595,9 @@ Sorcerian 1988 日本ファルコム (Nihon Falcom) + @@ -660,6 +784,10 @@ Tetris 1988 B·P·S (Bullet-Proof Software) + @@ -670,11 +798,17 @@ + Illusion City - Genei Toshi 1992 マイクロキャビン (Micro Cabin) + @@ -732,23 +866,30 @@ Xak II 1990 マイクロキャビン (Micro Cabin) + + + - + - + - + @@ -757,8 +898,15 @@ Fray - In Magical Adventure 1991 マイクロキャビン (Micro Cabin) + + @@ -786,11 +934,16 @@ + + Abunai Tengu Densetsu 1989 アリスソフト (Alicesoft) + @@ -820,6 +973,9 @@ Crescent Moon Girl 1989 アリスソフト (Alicesoft) + @@ -849,6 +1005,9 @@ D.P.S - Dream Program System 1989 アリスソフト (Alicesoft) + @@ -873,6 +1032,7 @@ アリスソフト (Alicesoft) + @@ -909,6 +1069,7 @@ アリスソフト (Alicesoft) + @@ -945,6 +1106,7 @@ アリスソフト (Alicesoft) + @@ -979,6 +1141,9 @@ Rance - Hikari wo Motomete 1989 アリスソフト (Alicesoft) + @@ -1015,6 +1180,9 @@ Rance 2 - Hangyaku no Shojo-tachi 1990 アリスソフト (Alicesoft) + @@ -1067,6 +1235,12 @@ Balloon Breaker 1996 <doujin> + @@ -1080,6 +1254,10 @@ Boomering 1996 <doujin> + @@ -1090,8 +1268,13 @@ Hare Hare Yukai - 19?? + + 2006 <doujin> + @@ -1108,9 +1291,14 @@ + Hati no Sora de 1994 <doujin> + @@ -1124,6 +1312,11 @@ Saishuu Heiki UPO (Pre-Release) 1992 <doujin> + @@ -1133,12 +1326,15 @@ - Pac-Man 19?? <doujin> + + @@ -1146,11 +1342,14 @@ - + - Pac-Man (Alt?) + Pac-Man (auto-bootable) 19?? <doujin> + @@ -1162,6 +1361,7 @@ + Mid Garts (VA patched?) 19?? diff -Nru mame-0.250+dfsg.1/hash/pc98_cd.xml mame-0.251+dfsg.1/hash/pc98_cd.xml --- mame-0.250+dfsg.1/hash/pc98_cd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pc98_cd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pc98.xml mame-0.251+dfsg.1/hash/pc98.xml --- mame-0.250+dfsg.1/hash/pc98.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pc98.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ - 4D Driving (Alt) + 4D Driving (alt) 1993 エレクトロニック・アーツ・ビクター (Electronic Arts Victor) @@ -3307,7 +3307,7 @@ - Actor 98 (Alt Disk 1) + Actor 98 (alt Disk 1) 1990 スタジオパンサー (Studio Panther) @@ -3327,7 +3327,7 @@ - Adrenalin Connection (Fix?) + Adrenalin Connection (fix?) 1987 ビクター音楽産業 (Victor Musical Industries) @@ -3503,11 +3503,11 @@ --> - - Adventureland (Alt) + Adventureland (alt) 1984 スタークラフト (Starcraft) + Unofficial conversion to high density @@ -3980,7 +3980,7 @@ - Aiza - New Generation (Alt Format) + Aiza - New Generation (alt format) 1991 ティールハイト (Tierheit) @@ -4479,7 +4479,7 @@ - Alpha (Alt Format) + Alpha (alt format) 1986 スクウェア (Square) @@ -4671,7 +4671,7 @@ - Amaranth II (Alt System Disk) + Amaranth II (alt System Disk) 1992 風雅システム (Fuga System) @@ -5033,7 +5033,7 @@ - Animahjong X Perfect File (Alt) + Animahjong X Perfect File (alt) 1994 ソニア (Sogna) @@ -5654,7 +5654,7 @@ - Area 88 - Ikkakujuu no Kiseki (Alt Disk C) + Area 88 - Ikkakujuu no Kiseki (alt Disk C) 1995 ファミリーソフト (Family Soft) @@ -6429,7 +6429,7 @@ - Balance of Power - Geopolitics in the Nuclear Age (Alt Disk 1) + Balance of Power - Geopolitics in the Nuclear Age (alt Disk A) 1988 アスキー (ASCII) @@ -6940,7 +6940,7 @@ - Be-Yond (Demo) + Be-Yond (demo) 1996 シルキーズ (Silky's) @@ -7244,7 +7244,7 @@ - Bible Master - Crash of the Blleot Rutz (Alt) + Bible Master - Crash of the Blleot Rutz (alt) 1993 グローディア (Glodia) @@ -7537,7 +7537,7 @@ - Bishoujo Shashinkan - Studio Cut (Alt) + Bishoujo Shashinkan - Studio Cut (alt) 1987 ハード (Hard) @@ -7563,7 +7563,7 @@ - Bishoujo Shashinkan III - Photo Club Kyofu no Yakata hen (Alt Format) + Bishoujo Shashinkan III - Photo Club Kyofu no Yakata hen (alt format) 1989 ハード (Hard) @@ -8413,7 +8413,7 @@ - Brandish 2 - The Planet Buster (Alt Program Disk) + Brandish 2 - The Planet Buster (alt Program disk) 1993 日本ファルコム (Nihon Falcom) @@ -8567,7 +8567,7 @@ - Brandish Renewal (Alt, cracked) + Brandish Renewal (alt, cracked) 1995 日本ファルコム (Nihon Falcom) @@ -9825,7 +9825,7 @@ - Centurion - Defender of Rome (Alt) + Centurion - Defender of Rome (alt) 1993 エレクトロニック・アーツ・ビクター (Electronic Arts Victor) @@ -10357,7 +10357,7 @@ - Chou Shinri Samâdhi (Alt) + Chou Shinri Samâdhi (alt) 1994 M.M.S. ~ Mighty Mycom System @@ -10585,7 +10585,7 @@ - Cherry Jam - Kanojo ga Hadaka ni Kigaetara (Alt) + Cherry Jam - Kanojo ga Hadaka ni Kigaetara (alt) 1996 ジャム (Jam) @@ -10701,7 +10701,7 @@ - Chrome Paradise - Ginpaku-iro no Rakuen (Alt Disk 1) + Chrome Paradise - Ginpaku-iro no Rakuen (alt Disk 1) 1996 アシッドプラン (Acid Plan) @@ -11552,7 +11552,7 @@ - Crescent Moon Girl (Alt Format) + Crescent Moon Girl (alt format) 1989 アリスソフト (AliceSoft) @@ -12042,7 +12042,7 @@ - Curse of the Azure Bonds (Alt) + Curse of the Azure Bonds (alt) 1991 ポニーキャニオン (Pony Canyon) @@ -12551,7 +12551,7 @@ - D.P.S. - Dream Program System (Alt) + D.P.S. - Dream Program System (alt) 1989 アリスソフト (Alicesoft) @@ -12603,7 +12603,7 @@ - D.P.S. SG - Dream Program System SG (Alt Format) + D.P.S. SG - Dream Program System SG (alt format) 1990 アリスソフト (Alicesoft) @@ -13194,7 +13194,7 @@ - Daiva Story 7: Light of Kari Yuga (Alt) + Daiva Story 7: Light of Kari Yuga (alt) 1987 ティーアンドイーソフト (T&E Soft) @@ -13215,7 +13215,7 @@ - Daiva Story 7: Light of Kari Yuga (Alt 2) + Daiva Story 7: Light of Kari Yuga (alt 2) 1987 ティーアンドイーソフト (T&E Soft) @@ -14290,7 +14290,7 @@ - Derby Stallion 98 (Alt) + Derby Stallion 98 (alt) 1993 アスキー (ASCII) @@ -14622,7 +14622,7 @@ - Dinosaur (Alt Program Disk) + Dinosaur (alt Program Disk) 1991 日本ファルコム (Nihon Falcom) @@ -15596,7 +15596,7 @@ - Disc Station Vol. 07 (Alt) + Disc Station Vol. 07 (alt) 1995 コンパイル (Compile) @@ -16603,7 +16603,7 @@ - Dr. Stop! (Alt Format) + Dr. Stop! (alt format) 1992 アリスソフト (AliceSoft) @@ -16964,7 +16964,7 @@ - Dragon Master Silk - Ryuu Shoukan Musume - Episode II (Alt Disk 1) + Dragon Master Silk - Ryuu Shoukan Musume - Episode II (alt Disk 1) 1992 ギミックハウス (Gimmick House) @@ -17349,7 +17349,7 @@ - Dream Theater (Alt) + Dream Theater (alt) 1994 ワイルドライフ (Wild Life) @@ -17948,7 +17948,7 @@ - Eimmy to Yobanaide (Demo) + Eimmy to Yobanaide (demo) 1995 シーズウェア (C's Ware) @@ -18309,7 +18309,7 @@ - Elm Knight - A Living Body Armor (Demo) + Elm Knight - A Living Body Armor (demo) 1992 マイクロキャビン (Microcabin) @@ -18790,7 +18790,7 @@ - eXOn (Demo) + eXOn (demo) 1991 日本ソフテック (Nihon Softec) @@ -19663,7 +19663,7 @@ - Figure - Ubawareta Houkago (Alt) + Figure - Ubawareta Houkago (alt) 1995 シルキーズ (Silky's) @@ -19997,7 +19997,7 @@ - First Queen (Alt) + First Queen (alt) 1988 呉ソフトウエア工房 (KSK) @@ -20631,7 +20631,7 @@ - Fray - In Magical Adventure (Alt Format) + Fray - In Magical Adventure (alt format) 1991 マイクロキャビン (Microcabin) @@ -21466,7 +21466,7 @@ - Garyuoh Hidensho (Alt) + Garyuoh Hidensho (alt) 1994 日本ソフテック (Nihon Softec) @@ -21635,7 +21635,7 @@ - Genji - Time Suspense Adventure (Alt Format) + Genji - Time Suspense Adventure (alt format) 1988 HOT・B @@ -22357,7 +22357,7 @@ - Golf Links Champion - Course Pinehurst Resort and Country Club (Alt Format) + Golf Links Champion - Course Pinehurst Resort and Country Club (alt format) 1995? サイベル (Cybelle) @@ -22381,7 +22381,7 @@ - Golf Links Champion - Course The Belfry Brabozon Course (Alt Format) + Golf Links Champion - Course The Belfry Brabozon Course (alt format) 1995? サイベル (Cybelle) @@ -23674,7 +23674,7 @@ - HHG - Heart Heat Girls (Alt) + HHG - Heart Heat Girls (alt) 1993 Cat's Pro. @@ -24679,7 +24679,7 @@ - Imperial Force (Alt Format) + Imperial Force (alt format) 1990 システムソフト (SystemSoft) @@ -24822,7 +24822,7 @@ - Intruder - Sakura Yashiki no Tansaku (Alt Format) + Intruder - Sakura Yashiki no Tansaku (alt format) 1989? アリスソフト (AliceSoft) @@ -26267,7 +26267,7 @@ - Kikan Dismix Soukan-gou (Alt) + Kikan Dismix Soukan-gou (alt) 1990 ソフパル (Softpal) @@ -26319,7 +26319,7 @@ - Kikan Dismix Dai-2-Gou (Alt) + Kikan Dismix Dai-2-Gou (alt) 1990? ソフパル (Softpal) @@ -26892,7 +26892,7 @@ - KO Seiki Beast Sanjuushi - Gaia no Fukkatsu (Alt Format) + KO Seiki Beast Sanjuushi - Gaia no Fukkatsu (alt format) 1992 マトリクス (Matrix) @@ -28459,7 +28459,7 @@ - LOGiN Disk & Book Series - Manhattan Requiem - Angels Flying in the Dark (Alt Format) + LOGiN Disk & Book Series - Manhattan Requiem - Angels Flying in the Dark (alt format) 1993 アスキー (ASCII) @@ -28497,7 +28497,7 @@ - LOGiN Disk & Book Series - SimAnt (Alt) + LOGiN Disk & Book Series - SimAnt (alt) 1993 アスキー (ASCII) @@ -28611,7 +28611,7 @@ - Lovely Horror - Ochame na Yuurei (Alt Format) + Lovely Horror - Ochame na Yuurei (alt format) 1988 全流通 (Zenryutsu) @@ -28862,7 +28862,7 @@ - The Magic Candle (Alt Format) + The Magic Candle (alt format) 1991 スタークラフト (Starcraft) @@ -28908,7 +28908,7 @@ - Magic Knight (Alt Format) + Magic Knight (alt format) 1992 NIC @@ -29573,7 +29573,7 @@ - Makyouden (Alt Disk 1) + Makyouden (alt Disk 1) 1992 日本クリエイト (Nihon Create) @@ -29832,7 +29832,7 @@ - Märchen Veil II (Alt) + Märchen Veil II (alt) 1986 システムサコム (System Sacom) @@ -30857,7 +30857,7 @@ - Microsoft Flight Simulator Version 4.0 (Alt?) + Microsoft Flight Simulator Version 4.0 (alt?) 1992 マイクロソフト (Microsoft) @@ -31445,7 +31445,7 @@ - Misty Vol. 1 (Alt Format) + Misty Vol. 1 (alt format) 1989 データウエスト (Data West) @@ -31815,7 +31815,7 @@ - Monzetsu Fighter (Alt Disks 1 & 6) + Monzetsu Fighter (alt Disk 1 & Disk 6) 1995 トラッシュ (Trush) @@ -32687,7 +32687,7 @@ - New 3D Golf Simulation - Harukanaru Augusta (Alt System Disk) + New 3D Golf Simulation - Harukanaru Augusta (alt System Disk) 1989 ティーアンドイーソフト (T&E Soft) @@ -32708,7 +32708,7 @@ - New 3D Golf Simulation - Harukanaru Augusta (Alt Format) + New 3D Golf Simulation - Harukanaru Augusta (alt format) 1989 ティーアンドイーソフト (T&E Soft) @@ -32744,7 +32744,7 @@ - New 3D Golf Simulation - Eight Lakes G.C. (Alt Format) + New 3D Golf Simulation - Eight Lakes G.C. (alt format) 1990 ティーアンドイーソフト (T&E Soft) @@ -32789,7 +32789,7 @@ - New 3D Golf Simulation - Waialae no Kiseki (Alt Format) + New 3D Golf Simulation - Waialae no Kiseki (alt format) 1991 ティーアンドイーソフト (T&E Soft) @@ -33175,7 +33175,7 @@ - Nobunaga no Yabou - Haouden (Alt) + Nobunaga no Yabou - Haouden (alt) 1992 光栄 (Koei) @@ -34425,7 +34425,7 @@ - Pension Story - Hana no Kiyosato (Alt Disk 1) + Pension Story - Hana no Kiyosato (alt Disk A) 1988 アダルティン (Adult Inn) @@ -34963,7 +34963,7 @@ - Pink Sox Mania 2 (Alt) + Pink Sox Mania 2 (alt) 1992 ウェンディマガジン (Wendy Magazine) @@ -35053,7 +35053,7 @@ - Pink Sox Mania Taizen (Alt Disk A) + Pink Sox Mania Taizen (alt Disk A) 1994 ウェンディマガジン (Wendy Magazine) @@ -35305,7 +35305,7 @@ - Pocky (Alt Format) + Pocky (alt format) 1989 ポニーテールソフト (Ponytail Soft) @@ -35351,7 +35351,7 @@ - Pocky 2 - Kaijin Aka Mantle no Chousen (Alt Format) + Pocky 2 - Kaijin Aka Mantle no Chousen (alt format) 1991 ポニーテールソフト (Ponytail Soft) @@ -36128,7 +36128,7 @@ - Prince of Persia (Alt) + Prince of Persia (alt) 1990 ブロダーバンドジャパン (Brøderbund Japan) @@ -36149,7 +36149,7 @@ - Prince of Persia (Alt 2) + Prince of Persia (alt 2) 1990 ブロダーバンドジャパン (Brøderbund Japan) @@ -37418,7 +37418,7 @@ - Rance 4.1 - Okusuri Koujou o Sukue (Alt Format) + Rance 4.1 - Okusuri Koujou o Sukue (alt format) 1995 アリスソフト (AliceSoft) @@ -38163,7 +38163,7 @@ - Revival Xanadu (Alt Format) + Revival Xanadu (alt format) 1995 日本ファルコム (Nihon Falcom) @@ -38670,7 +38670,7 @@ - Ryu - Naki no Ryuu yori (Alt?) + Ryu - Naki no Ryuu yori (alt?) 1990 ウルフチーム (WolfTeam) @@ -38833,7 +38833,7 @@ - Sabnack (Demo) + Sabnack (demo) 1991 工画堂スタジオ (Kogado Studio) @@ -39435,7 +39435,7 @@ - Schwarzschild III - Wakusei Desperan (Alt) + Schwarzschild III - Wakusei Desperan (alt) 1992 工画堂スタジオ (Kogado Studio) @@ -39793,7 +39793,7 @@ - Sekigahara (Alt) + Sekigahara (alt) 1991 アートディンク (Artdink) @@ -40958,7 +40958,7 @@ - Sokoban Perfect (Alt Kaitou disk) + Sokoban Perfect (alt Kaitou disk) 1989 シンキングラビット (Thinking Rabbit) @@ -41261,7 +41261,7 @@ - Space Invaders (Alt) + Space Invaders (alt) 1992 ウィズ (Wiz) @@ -42163,7 +42163,7 @@ - Super Pink Sox 3+ (Alt) + Super Pink Sox 3+ (alt) 1994 ウェンディマガジン (Wendy Magazine) @@ -42627,7 +42627,7 @@ - Sword Dancer 2 - Goddess of the Evil Blade (Alt Disk A) + Sword Dancer 2 - Goddess of the Evil Blade (alt Disk A) 1994 テイジイエル (TGL) @@ -43125,7 +43125,7 @@ - Tamashii no Mon - Dante Shinkyoku yori (Alt Format) + Tamashii no Mon - Dante Shinkyoku yori (alt format) 1992 光栄 (Koei) @@ -44349,7 +44349,7 @@ - Tir-nan-óg - Dana no Matsuei (Alt) + Tir-nan-óg - Dana no Matsuei (alt) 1987 システムソフト (SystemSoft) @@ -44739,7 +44739,7 @@ - Toudou Ryunosuke Tantei Nikki - Kohaku-iro no Yuigon - Seiyou Koppai Renzoku Satsujin Jiken (Alt) + Toudou Ryunosuke Tantei Nikki - Kohaku-iro no Yuigon - Seiyou Koppai Renzoku Satsujin Jiken (alt) 1988 リバーヒルソフト (Riverhill Soft) @@ -44990,7 +44990,7 @@ - Trial of Fours (Alt Format) + Trial of Fours (alt format) 1992 ウエストサイド (WestSide) @@ -45593,7 +45593,7 @@ - Uchiyama Aki no Chou Bangai Seifuku Zukan+ (Alt) + Uchiyama Aki no Chou Bangai Seifuku Zukan+ (alt) 1989 システムハウスオー! (System House Oh!) @@ -46600,7 +46600,7 @@ - V.G. - Variable Geo (Alt) + V.G. - Variable Geo (alt) 1993 戯画 (Giga) @@ -47554,7 +47554,7 @@ - Wizardry 6 - Bane of the Cosmic Forge (Alt Format) + Wizardry 6 - Bane of the Cosmic Forge (alt format) 1991 アスキー (ASCII) @@ -47594,7 +47594,7 @@ - Wizardry 7 - Crusaders of the Dark Savant (Alt) + Wizardry 7 - Crusaders of the Dark Savant (alt) 1994 アスキー (ASCII) @@ -47666,7 +47666,7 @@ - Wolfish Gallop - Legacy of the Solomon (Alt Disk?) + Wolfish Gallop - Legacy of the Solomon (alt disk?) 1994 パンドラボックス (Pandora Box) @@ -47894,7 +47894,7 @@ - Wrestle Angels Omake Disk (Alt) + Wrestle Angels Omake Disk (alt) 1992? グレイト (Great) @@ -49172,7 +49172,7 @@ - Yuu Disk Vol. 6 - Heart de Ron!! Midnight Hen (Alt) + Yuu Disk Vol. 6 - Heart de Ron!! Midnight Hen (alt) 1994 ディー・オー (D.O.) @@ -49316,7 +49316,7 @@ - Yuuwaku - Temptation (Alt Disk 1) + Yuuwaku - Temptation (alt Disk A) 1995 ティーツー (T2) @@ -49439,7 +49439,7 @@ - Zan - Kagerou no Jidai (Alt?) + Zan - Kagerou no Jidai (alt?) 1989 日本テレネット (Nihon Telenet) @@ -49893,7 +49893,7 @@ - Zoku - Wedding Bell wa Takaraka ni (Alt Format) + Zoku - Wedding Bell wa Takaraka ni (alt format) 1993 真実プロ (Shinjitsu Pro) @@ -49991,7 +49991,7 @@ - Abunai Tengu Densetsu - Yomigaetta Tengu ga Yozora o Mau (Alt Format) + Abunai Tengu Densetsu - Yomigaetta Tengu ga Yozora o Mau (alt format) 1989 アリスソフト (AliceSoft) @@ -50045,7 +50045,7 @@ - Alantia (Alt Format) + Alantia (alt format) 1988 ビクター音楽産業 (Victor Musical Industries) @@ -50213,7 +50213,7 @@ - Assist Card (Demo) + Assist Card (demo) 19?? アシスト (Assist) @@ -50237,7 +50237,7 @@ - Be Girl (Alt Format) + Be Girl (alt format) 1988 パスカル2 (Pascal2) @@ -50311,7 +50311,7 @@ - The Best Play Baseball (Demo) + The Best Play Baseball (demo) 1991? アスキー (ASCII) @@ -50445,7 +50445,7 @@ - Check Six (Demo) + Check Six (demo) 1993? ペガサスジャパン (Pegasus Japan) @@ -50751,7 +50751,7 @@ - D.P.S. - Dream Program System (Alt Format) + D.P.S. - Dream Program System (alt format) 1989 アリスソフト (Alicesoft) @@ -50837,7 +50837,7 @@ - Daikairei - Nankai no Shitou (Alt Format) + Daikairei - Nankai no Shitou (alt format) 1989 アートディンク (Artdink) @@ -50858,7 +50858,7 @@ - Daisenryaku III - Great Commander (Alt Format) + Daisenryaku III - Great Commander (alt format) 1989 システムソフト (SystemSoft) @@ -50878,7 +50878,7 @@ - Daisenryaku III '90 (Alt Format) + Daisenryaku III '90 (alt format) 1990 システムソフト (SystemSoft) @@ -50904,7 +50904,7 @@ - Days in Duel (Alt Format) + Days in Duel (alt format) 1994 スワット (Swat) @@ -51097,7 +51097,7 @@ - Disc Station 98 #11 (Alt Format) + Disc Station 98 #11 (alt format) 1992 コンパイル (Compile) @@ -51222,7 +51222,7 @@ - F-1 Databox (Demo) + F-1 Databox (demo) 1990 リード・レックス (Reed Rex) @@ -51340,7 +51340,7 @@ - Fundation - Shinjuku Story (Alt Format) + Fundation - Shinjuku Story (alt format) 1990 ドット企画 (Dott Plan) @@ -51426,7 +51426,7 @@ - Gakuen Senki - Kyoufu no Puppet Keikaku (Alt Format) + Gakuen Senki - Kyoufu no Puppet Keikaku (alt format) 1994 フォーサイト (Foresight) @@ -51522,7 +51522,7 @@ - Gaplus (Alt Format) + Gaplus (alt format) 1985 キャリーラボ (Carry Lab) @@ -52047,7 +52047,7 @@ - J. League Professional Soccer 1993 (Alt Format) + J. League Professional Soccer 1993 (alt format) 1993 ビクターエンタテインメント (Victor Entertainment) @@ -52143,7 +52143,7 @@ - Jikuu Sousakan Pretty Angel - Misty Flash (Alt Format) + Jikuu Sousakan Pretty Angel - Misty Flash (alt format) 1994 ペパーミント・Kids (Peppermint Kids) @@ -52618,7 +52618,7 @@ - Lesser Mern (Demo) + Lesser Mern (demo) 1992? パンサーソフトウェア (Panther Software) @@ -52778,7 +52778,7 @@ - Logical (Demo) + Logical (demo) 1993 アスキー (ASCII) @@ -53122,7 +53122,7 @@ - LOGiN Disk & Book Series - RPG Tsukuuru Dante98 (Alt) + LOGiN Disk & Book Series - RPG Tsukuuru Dante98 (alt) 1992 アスキー (ASCII) @@ -53224,7 +53224,7 @@ - Lotus 1-2-3 (Demo) + Lotus 1-2-3 (demo) 1989? @@ -53249,7 +53249,7 @@ - Lotus Freelance (Demo) + Lotus Freelance (demo) 19?? Lotus @@ -53412,7 +53412,7 @@ - Majaventure - Negi Mahjong (Alt Format) + Majaventure - Negi Mahjong (alt format) 1988 GAMEテクノポリス (Game Technopolis) @@ -53425,7 +53425,7 @@ - Märchen Paradise (Alt Format) + Märchen Paradise (alt format) 1990 グレイト (Great) @@ -53708,7 +53708,7 @@ - Moonmist (Alt Format) + Moonmist (alt format) 1992 システムソフト (SystemSoft) @@ -53728,7 +53728,7 @@ - Mugen Senshi Valis II (Alt Format) + Mugen Senshi Valis II (alt format) 1989 日本テレネット (Nihon Telenet) @@ -53990,7 +53990,7 @@ - Pink Sox 1 (Alt Format) + Pink Sox 1 (alt format) 1989 ウェンディマガジン (Wendy Magazine) @@ -54003,7 +54003,7 @@ - Pink Sox 2 (Alt Format) + Pink Sox 2 (alt format) 1990 ウェンディマガジン (Wendy Magazine) @@ -54016,7 +54016,7 @@ - Pink Sox 3 (Alt Format) + Pink Sox 3 (alt format) 1990 ウェンディマガジン (Wendy Magazine) @@ -54029,7 +54029,7 @@ - Pink Sox 4 (Alt Format) + Pink Sox 4 (alt format) 1991 ウェンディマガジン (Wendy Magazine) @@ -54049,7 +54049,7 @@ - Pink Sox 5 (Alt Format) + Pink Sox 5 (alt format) 1991 ウェンディマガジン (Wendy Magazine) @@ -54069,7 +54069,7 @@ - Pink Sox 6 (Alt Format) + Pink Sox 6 (alt format) 1991 ウェンディマガジン (Wendy Magazine) @@ -54089,7 +54089,7 @@ - Pink Sox 7 (Alt Format) + Pink Sox 7 (alt format) 1992 ウェンディマガジン (Wendy Magazine) @@ -54109,7 +54109,7 @@ - Pink Sox 8 (Alt Format) + Pink Sox 8 (alt format) 1992 ウェンディマガジン (Wendy Magazine) @@ -54161,7 +54161,7 @@ - Poison - 6 Nin no Majo (Alt Format) + Poison - 6 Nin no Majo (alt format) 1995 トラッシュ (Trush) @@ -54305,7 +54305,7 @@ - Puyo Puyo (Alt Format) + Puyo Puyo (alt format) 1993 コンパイル (Compile) @@ -54326,7 +54326,7 @@ - Puyo Puyo (Alt Format 2) + Puyo Puyo (alt format 2) 1993 コンパイル (Compile) @@ -54346,7 +54346,7 @@ - Quiz Tonosama no Yabou Zenkoku-ban (Alt Format) + Quiz Tonosama no Yabou Zenkoku-ban (alt format) 1993 システムソフト (SystemSoft) @@ -54416,7 +54416,7 @@ - Rance - Hikari o Motomete (Alt Format) + Rance - Hikari o Motomete (alt format) 1989 アリスソフト (AliceSoft) @@ -54531,7 +54531,7 @@ - Relics (Alt) + Relics (alt) 1986 ボーステック (Bothtec) @@ -54684,7 +54684,7 @@ - Rittai Ban - Yuugeki Ou (Alt Fomat) + Rittai Ban - Yuugeki Ou (alt format) 1985 システムソフト (SystemSoft) @@ -54697,7 +54697,7 @@ - Road War 2000 (Alt Format) + Road War 2000 (alt format) 1988 スタークラフト (Starcraft) @@ -54757,7 +54757,7 @@ - Rouge - Manatsu no Kuchibeni (Alt Format) + Rouge - Manatsu no Kuchibeni (alt format) 1990 バーディーソフト (Birdy Soft) @@ -54777,7 +54777,7 @@ - Max Series 2 - Sacchan no Daibouken!! (Alt Format) + Max Series 2 - Sacchan no Daibouken!! (alt format) 1988 アグミックス (Agumix) @@ -54967,7 +54967,7 @@ - Slayers (Alt Format) + Slayers (alt format) 1994 バンプレスト (Banpresto) @@ -55070,7 +55070,7 @@ - Slip Stream '93 Rev-LIMIT (Alt Format) + Slip Stream '93 Rev-LIMIT (alt format) 1994 ビットタウン (Bit Town) @@ -55109,7 +55109,7 @@ - Solitaire Royale (Alt Format) + Solitaire Royale (alt format) 1988 ゲームアーツ (Game Arts) @@ -55377,7 +55377,7 @@ - Tenchi Muyo! - Ryououki (Alt Format) + Tenchi Muyo! - Ryououki (alt format) 1994 バンプレスト (Banpresto) @@ -55545,7 +55545,7 @@ - Tenshi-tachi no Gogo Special II (Alt Format) + Tenshi-tachi no Gogo Special II (alt format) 1993 ジャスト (Jast) @@ -55608,7 +55608,7 @@ - The Tower? of Cabin - Cabin Panic (Alt Format) + The Tower? of Cabin - Cabin Panic (alt format) 1992 マイクロキャビン (Microcabin) @@ -55781,7 +55781,7 @@ - Vermilion (Alt Format) + Vermilion (alt format) 1990 グレイト (Great) @@ -55817,7 +55817,7 @@ - Viper V16 Demo (Alt Format) + Viper V16 Demo (alt format) 1995? ソニア (Sogna) @@ -55997,7 +55997,7 @@ - Zan II - Kagerou no Jidai (Alt Format) + Zan II - Kagerou no Jidai (alt format) 1991 日本テレネット (Nihon Telenet) @@ -56277,7 +56277,7 @@ - 3x3 Eyes - Sanjiyan Henjou (Alt Disk 1) + 3x3 Eyes - Sanjiyan Henjou (alt Disk A) 1993 日本クリエイト (Nihon Create) @@ -57350,7 +57350,7 @@ - Cherry Moderate (Demo) + Cherry Moderate (demo) 1996 ユーコム (Ucom) @@ -60571,7 +60571,7 @@ - Kisou Shinden Gen-Kaiser (Alt Format) + Kisou Shinden Gen-Kaiser (alt format) 1995 テイジイエル (TGL) @@ -61128,7 +61128,7 @@ - Libido 7 (Alt Disk 1) + Libido 7 (alt disk 1) 1994 リビドー (Libido) @@ -61217,7 +61217,7 @@ - Mad Paradox (Alt Format) + Mad Paradox (alt format) 1992 クィーンソフト (Queensoft) @@ -61301,7 +61301,7 @@ - Mandala-ke Ichizoku (Demo) + Mandala-ke Ichizoku (demo) 1995 フォーサイト (Foresight) @@ -61786,7 +61786,7 @@ - Mugen Houyou (Alt Format) + Mugen Houyou (alt format) 1995 アリスソフト (AliceSoft) @@ -62296,7 +62296,7 @@ - Rance IV (Demo) + Rance IV (demo) 1993 アリスソフト (AliceSoft) @@ -62904,7 +62904,7 @@ - Snow Memory (Alt Disk 1) + Snow Memory (alt Disk 1) 1996 バーディーソフト (Birdy Soft) @@ -63458,7 +63458,7 @@ - V.G. - Variable Geo (Demo) + V.G. - Variable Geo (demo) 1993? 戯画 (Giga) @@ -63469,7 +63469,7 @@ - V.G. II (Demo) + V.G. II (demo) 1993? 戯画 (Giga) @@ -64294,7 +64294,7 @@ - I/O Magazine Disk - March 1991 (Alt) + I/O Magazine Disk - March 1991 (alt) 1991 <coverdisc> @@ -64338,7 +64338,7 @@ - I/O Magazine Disk - June 1991 (Alt) + I/O Magazine Disk - June 1991 (alt) 1991 <coverdisc> @@ -64576,7 +64576,7 @@ - Login Omake Disk Tsuushin No. 8 (Alt) + Login Omake Disk Tsuushin No. 8 (alt) 1992 <coverdisc> @@ -65663,7 +65663,7 @@ - Bio 100% Free Games Collection (Alt Format) + Bio 100% Free Games Collection (alt format) 199? アスキー (ASCII) @@ -65809,7 +65809,7 @@ - Goggle-II (Alt) + Goggle-II (alt) 1992 バイオひゃくパーセント (Bio 100%) @@ -65831,7 +65831,7 @@ - Goggle-III (Alt) + Goggle-III (alt) 1995 バイオひゃくパーセント (Bio 100%) @@ -65864,7 +65864,7 @@ - Markadia (Alt) + Markadia (alt) 1993 バイオひゃくパーセント (Bio 100%) @@ -66083,7 +66083,7 @@ - ChingHai (Alt) + ChingHai (alt) 19?? <unofficial> @@ -66307,7 +66307,7 @@ - MoguPoko (Alt) + MoguPoko (alt) 19?? <unofficial> @@ -66395,7 +66395,7 @@ - SeeNa 2 (Alt) + SeeNa 2 (alt) 19?? <unofficial> @@ -66439,7 +66439,7 @@ - Stardust Chaser (Alt) + Stardust Chaser (alt) 19?? <unofficial> @@ -66528,7 +66528,7 @@ - The Tower of Zarbartz (Alt) + The Tower of Zarbartz (alt) 19?? <unofficial> @@ -66605,7 +66605,7 @@ - Volleyball 2 on 2 (Alt) + Volleyball 2 on 2 (alt) 19?? <unofficial> @@ -67007,7 +67007,7 @@ - Chikashitsu no Ikenie (Alt) + Chikashitsu no Ikenie (alt) 19?? <doujin> @@ -67197,7 +67197,7 @@ - Destructor (Alt) + Destructor (alt) 19?? <doujin> @@ -67521,7 +67521,7 @@ - Ike Ike Dendai Bus (Alt) + Ike Ike Dendai Bus (alt) 19?? <doujin> @@ -68174,7 +68174,7 @@ - Napple City 2 (Alt) + Napple City 2 (alt) 19?? <doujin> @@ -68186,7 +68186,7 @@ - Napple City 2 (Alt 2) + Napple City 2 (alt 2) 19?? <doujin> @@ -68638,7 +68638,7 @@ - Sailor Venus CG (Alt) + Sailor Venus CG (alt) 19?? <doujin> @@ -68708,7 +68708,7 @@ - Sinora's Quest 2 (Alt) + Sinora's Quest 2 (alt) 19?? <doujin> @@ -68867,7 +68867,7 @@ - Tequila Sunrise (Alt) + Tequila Sunrise (alt) 19?? <doujin> @@ -68878,7 +68878,7 @@ - Tequila Sunrise (Alt 2) + Tequila Sunrise (alt 2) 19?? <doujin> @@ -69024,7 +69024,7 @@ - UNO (Alt Format) + UNO (alt format) 19?? <doujin> @@ -69222,7 +69222,7 @@ - Zettai Mahjong II EG - Renaissance no Houkago (Alt) + Zettai Mahjong II EG - Renaissance no Houkago (alt) 1996? <doujin> @@ -69249,7 +69249,7 @@ - Zettai Mahjong II' EG (Alt) + Zettai Mahjong II' EG (alt) 1996? <doujin> diff -Nru mame-0.250+dfsg.1/hash/pcd_flop.xml mame-0.251+dfsg.1/hash/pcd_flop.xml --- mame-0.250+dfsg.1/hash/pcd_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pcd_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -39,13 +39,13 @@ - 1552 Tenka Tairan (SCD)(Jpn) + 1552 Tenka Tairan (Japan) 1993 ASK Kodansha - + @@ -55,13 +55,13 @@ - 3x3 Eyes - Sanjiyan Hensei (ACD, SCD)(Jpn) + 3x3 Eyes - Sanjiyan Hensei (ACD, SCD)(Japan) 1994 NEC Home Electronics - + @@ -71,13 +71,13 @@ - A. III (SCD)(Jpn) + A. III (Japan) 1993 Artdink - + @@ -87,13 +87,13 @@ - Advanced Variable Geo (SCD)(Jpn) + Advanced Variable Geo (Japan) 1994 TGL - + @@ -103,13 +103,13 @@ - Adventure Quiz - Capcom World Hatena no Daibouken (SCD)(Jpn) + Adventure Quiz - Capcom World Hatena no Daibouken (Japan) 1992 Hudson - + @@ -119,13 +119,13 @@ - Ai Chou Aniki (SCD)(Jpn) + Ai Chou Aniki (Japan) 1995 NCS - + @@ -135,13 +135,13 @@ - Akumajou Dracula X - Chi no Rondo (SCD)(Jpn) + Akumajou Dracula X - Chi no Rondo (Japan) 1993 Konami - + @@ -151,13 +151,13 @@ - Alshark [Imperfect] (SCD)(Jpn) + Alshark [Imperfect] (Japan) 1994 Victor Entertainment - + @@ -167,13 +167,13 @@ - Ane-San (SCD)(Jpn) + Ane-San (Japan) 1995 NEC Avenue - + @@ -183,10 +183,10 @@ - Angels II - Holy Night [prototype][backup] (SCD)(Jpn) + Angels II - Holy Night [prototype][backup] (Japan) 19?? NEC - + @@ -196,13 +196,13 @@ - Alnam no Kiba - Juuzoku Juuni Shinto Densetsu (SCD)(Jpn) + Alnam no Kiba - Juuzoku Juuni Shinto Densetsu (Japan) 1994 Right Stuff - + @@ -212,13 +212,13 @@ - Asuka 120% Maxima Burning Fest (SCD)(Jpn) + Asuka 120% Maxima Burning Fest (Japan) 1995 NEC Avenue - + @@ -228,13 +228,13 @@ - Aurora Quest - Otaku no Seiza (SCD)(Jpn) + Aurora Quest - Otaku no Seiza (Japan) 1993 Pack-In-Video - + @@ -244,13 +244,13 @@ - Avenger (CD)(Jpn) + Avenger (Japan) 1990 Nihon Telenet - + @@ -260,13 +260,13 @@ - Babel (SCD)(Jpn) + Babel (Japan) 1992 Nihon Telenet - + @@ -276,13 +276,13 @@ - Baby Jo (SCD)(Jpn) + Baby Jo (Japan) 1992 Micro World - + @@ -292,13 +292,13 @@ - Bakuden Unbalance Zone (SCD)(Jpn) + Bakuden Unbalance Zone (Japan) 1994 Sony Music Entertainment - + @@ -308,13 +308,13 @@ - Bakuretsu Hunter (SCD)(Jpn) + Bakuretsu Hunter (Japan) 1994 Dengeki - + @@ -324,13 +324,13 @@ - Bakushou Yoshimoto no Shinkigeki (SCD)(Jpn) + Bakushou Yoshimoto no Shinkigeki (Japan) 1994 Hudson - + @@ -340,13 +340,13 @@ - Basted (SCD)(Jpn) + Basted (Japan) 1994 NEC Avenue - + @@ -356,13 +356,13 @@ - Shin Nihon Pro Wrestling Kounin - '94 Battlefield in Tokyo Dome (ACD)(Jpn) + Shin Nihon Pro Wrestling Kounin - '94 Battlefield in Tokyo Dome (Japan) 1994 Fujicom - + @@ -372,13 +372,13 @@ - Bazaru Degozaru no Game Degozaru (SCD)(Jpn) + Bazaru Degozaru no Game Degozaru (Japan) 1996 NEC Home Electronics - + @@ -388,13 +388,13 @@ - Bikkuriman Daijikai (CD)(Jpn) + Bikkuriman Daijikai (Japan) 1988 Hudson - + @@ -404,13 +404,13 @@ - Bishoujo Senshi Sailor Moon (SCD)(Jpn) + Bishoujo Senshi Sailor Moon (Japan) 1994 Banpresto - + @@ -420,13 +420,13 @@ - Bishoujo Senshi Sailor Moon Collection (SCD)(Jpn) + Bishoujo Senshi Sailor Moon Collection (Japan) 1994 Banpresto - + @@ -436,13 +436,13 @@ - Black Hole Assault (SCD)(Jpn) + Black Hole Assault (Japan) 1993 Micronet - + @@ -452,13 +452,13 @@ - Blood Gear (SCD)(Jpn) + Blood Gear (Japan) 1994 Hudson - + @@ -468,12 +468,12 @@ - Bomberman '94 Taikenban (SCD)(Jpn) + Bomberman '94 Taikenban (Japan) 1993 Hudson - + @@ -483,13 +483,13 @@ - Bomberman Panic Bomber (SCD)(Jpn) + Bomberman Panic Bomber (Japan) 1994 Hudson - + @@ -499,13 +499,13 @@ - Bonanza Bros. (SCD)(Jpn) + Bonanza Bros. (Japan) 1992 NEC Avenue - + @@ -515,13 +515,13 @@ - Brandish (ACD, SCD)(Jpn) + Brandish (ACD, SCD)(Japan) 1994 NEC Home Electronics - + @@ -531,13 +531,13 @@ - Browning (SCD)(Jpn) + Browning (Japan) 1992 Nihon Telenet - + @@ -547,13 +547,13 @@ - Builderland (SCD)(Jpn) + Builderland (Japan) 1992 Micro World - + @@ -563,13 +563,13 @@ - Mahjong Vanilla Syndrome (CD, SCD)(Jpn) + Mahjong Vanilla Syndrome (CD, SCD)(Japan) 1991 Nichibutsu - + @@ -579,13 +579,13 @@ - Burai - Hachigyoku no Yuushi Densetsu (CD)(Jpn) + Burai - Hachigyoku no Yuushi Densetsu (Japan) 1991 Riverhill Software - + @@ -595,13 +595,13 @@ - Burai II - Yami Koutei no Gyakushuu (SCD)(Jpn) + Burai II - Yami Koutei no Gyakushuu (Japan) 1992 Riverhill Software - + @@ -611,13 +611,13 @@ - Cal II (SCD)(Jpn) + Cal II (Japan) 1993 NEC Avenue - + @@ -627,13 +627,13 @@ - Cal III (SCD)(Jpn) + Cal III (Japan) 1994 NEC Avenue - + @@ -643,13 +643,13 @@ - Cardangels (SCD)(Jpn) + Cardangels (Japan) 1994 Fujicom - + @@ -659,13 +659,13 @@ - CD Battle Hikari no Yuushatachi (SCD)(Jpn) + CD Battle Hikari no Yuushatachi (Japan) 1993 King Records - + @@ -675,13 +675,13 @@ - CD Denjin Rockabilly Tengoku (SCD)(Jpn) + CD Denjin Rockabilly Tengoku (Japan) 1993 Hudson - + @@ -691,13 +691,13 @@ - Championship Rally (SCD)(Jpn) + Championship Rally (Japan) 1993 Intec - + @@ -707,13 +707,13 @@ - Chiki Chiki Boys (SCD)(Jpn) + Chiki Chiki Boys (Japan) 1994 NEC Avenue - + @@ -723,13 +723,13 @@ - Chou Aniki (SCD)(Jpn) + Chou Aniki (Japan) 1992 NCS - + @@ -739,13 +739,13 @@ - Chou Eiyuu Densetsu - Dynastic Hero (SCD)(Jpn) + Chou Eiyuu Densetsu - Dynastic Hero (Japan) 1994 Hudson - + @@ -755,13 +755,13 @@ - Cobra - Kokuryuuou no Densetsu (CD)(Jpn) + Cobra - Kokuryuuou no Densetsu (Japan) 1989 Hudson - + @@ -771,13 +771,13 @@ - Cobra II - Densetsu no Otoko (CD)(Jpn) + Cobra II - Densetsu no Otoko (Japan) 1991 Hudson - + @@ -787,13 +787,13 @@ - Color Wars (CD)(Jpn) + Color Wars (Japan) 1992 Coconuts Japan - + @@ -803,13 +803,13 @@ - Cosmic Fantasy - Bouken Shounen Yuu (CD)(Jpn) + Cosmic Fantasy - Bouken Shounen Yuu (Japan) 1990 Nihon Telenet - + @@ -819,13 +819,13 @@ - Cosmic Fantasy II - Bouken Shounen Ban (CD)(Jpn) + Cosmic Fantasy II - Bouken Shounen Ban (Japan) 1991 Nihon Telenet - + @@ -835,13 +835,13 @@ - Cosmic Fantasy III - Bouken Shounen Rei (SCD)(Jpn) + Cosmic Fantasy III - Bouken Shounen Rei (Japan) 1992 Nihon Telenet - + @@ -851,13 +851,13 @@ - Cosmic Fantasy IV - Ginga Shounen Densetsu Gekitou Hen (SCD)(Jpn) + Cosmic Fantasy IV - Ginga Shounen Densetsu Gekitou Hen (Japan) 1994 Nihon Telenet - + @@ -867,13 +867,13 @@ - Cosmic Fantasy IV - Ginga Shounen Densetsu Totsunyuu Hen (SCD)(Jpn) + Cosmic Fantasy IV - Ginga Shounen Densetsu Totsunyuu Hen (Japan) 1994 Nihon Telenet - + @@ -883,13 +883,13 @@ - Cotton - Fantastic Night Dreams (SCD)(Jpn) + Cotton - Fantastic Night Dreams (Japan) 1993 Hudson - + @@ -899,12 +899,12 @@ - Crazy Hospital - Fushigi no Kuni no Tenshi (SCD)(Jpn) + Crazy Hospital - Fushigi no Kuni no Tenshi (Japan) 1997 Asia Soft Lab - + @@ -914,13 +914,13 @@ - Crest of Wolf (SCD)(Jpn) + Crest of Wolf (Japan) 1993 Hudson - + @@ -930,13 +930,13 @@ - Cyber City OEDO 808 (CD)(Jpn) + Cyber City OEDO 808 (Japan) 1991 NCS - + @@ -946,13 +946,13 @@ - Daisenpuu Custom (CD)(Jpn) + Daisenpuu Custom (Japan) 1991 NEC Avenue - + @@ -962,13 +962,13 @@ - Daisenryaku II - Campaign Version (SCD)(Jpn) + Daisenryaku II - Campaign Version (Japan) 1992 Micro Cabin - + @@ -978,13 +978,13 @@ - De·Ja (SCD)(Jpn) + De·Ja (Japan) 1996 NEC Interchannel - + @@ -994,13 +994,13 @@ - Dead of the Brain I II (SCD)(Jpn) + Dead of the Brain I II (Japan) 1999 NEC Home Electronics - + @@ -1010,13 +1010,13 @@ - Death Bringer - The Knight of Darkness (CD)(Jpn) + Death Bringer - The Knight of Darkness (Japan) 1990 Nihon Telenet - + @@ -1026,13 +1026,13 @@ - Deden no Den (SCD)(Jpn) + Deden no Den (Japan) 1994 Hudson - + @@ -1042,13 +1042,13 @@ - Dekoboko Densetsu - Hashire Wagamanma (CD)(Jpn) + Dekoboko Densetsu - Hashire Wagamanma (Japan) 1990 Nihon Telenet - + @@ -1058,13 +1058,13 @@ - Dennou Tenshi - Digital Angel (SCD)(Jpn) + Dennou Tenshi - Digital Angel (Japan) 1994 Tokuma Shoten - + @@ -1074,12 +1074,12 @@ - Develo Magazine Volume I (SCD)(Jpn) + Develo Magazine Volume I (Japan) 1996 Tokuma Shoten - + @@ -1089,12 +1089,12 @@ - Develo Starter Kit - Assembler (SCD)(Jpn) + Develo Starter Kit - Assembler (Japan) 1996 Tokuma Shoten - + @@ -1104,12 +1104,12 @@ - Develo Starter Kit - Basic (SCD)(Jpn) + Develo Starter Kit - Basic (Japan) 1996 Tokuma Shoten - + @@ -1119,13 +1119,13 @@ - Doraemon Nobita no Dorabian Night (SCD)(Jpn) + Doraemon Nobita no Dorabian Night (Japan) 1992 Hudson - + @@ -1135,13 +1135,13 @@ - Double Dragon II - The Revenge (SCD)(Jpn) + Double Dragon II - The Revenge (Japan) 1993 Naxat Soft - + @@ -1151,13 +1151,13 @@ - Doukyuusei (SCD)(Jpn) + Doukyuusei (Japan) 1995 NEC Avenue - + @@ -1167,13 +1167,13 @@ - Download II (CD)(Jpn) + Download II (Japan) 1991 NEC Avenue - + @@ -1183,13 +1183,13 @@ - Downtown Nekketsu Monogatari (SCD)(Jpn) + Downtown Nekketsu Monogatari (Japan) 1993 Naxat Soft - + @@ -1199,13 +1199,13 @@ - Dragon Half (SCD)(Jpn) + Dragon Half (Japan) 1994 Micro Cabin - + @@ -1215,13 +1215,13 @@ - Dragon Knight & Grafitti (SCD)(Jpn) + Dragon Knight & Grafitti (Japan) 1995 NEC Avenue - + @@ -1231,13 +1231,13 @@ - Dragon Knight II (SCD)(Jpn) + Dragon Knight II (Japan) 1992 NEC Avenue - + @@ -1247,13 +1247,13 @@ - Dragon Knight III (SCD)(Jpn) + Dragon Knight III (Japan) 1994 NEC Avenue - + @@ -1263,13 +1263,13 @@ - Dragon Slayer - Eiyuu Densetsu (SCD)(Jpn) + Dragon Slayer - Eiyuu Densetsu (Japan) 1991 Hudson - + @@ -1279,13 +1279,13 @@ - Dragon Slayer - Eiyuu Densetsu II (SCD)(Jpn) + Dragon Slayer - Eiyuu Densetsu II (Japan) 1992 Hudson - + @@ -1295,13 +1295,13 @@ - Dragon Ball Z - Idainaru Son Gokuu Densetsu (SCD)(Jpn) + Dragon Ball Z - Idainaru Son Gokuu Densetsu (Japan) 1994 Bandai - + @@ -1311,13 +1311,13 @@ - Dungeon Explorer II (SCD)(Jpn) + Dungeon Explorer II (Japan) 1993 Hudson - + @@ -1327,13 +1327,13 @@ - Dungeon Master - Theron's Quest (SCD)(Jpn) + Dungeon Master - Theron's Quest (Japan) 1992 Victor Entertainment - + @@ -1343,13 +1343,13 @@ - Efera & Jiliora - The Emblem from Darkness (CD)(Jpn) + Efera & Jiliora - The Emblem from Darkness (Japan) 1991 Brain Gray - + @@ -1359,13 +1359,13 @@ - Eikan ha Kimini - Koukou Yakyuu Zenkoku Taikai (ACD, SCD)(Jpn) + Eikan ha Kimini - Koukou Yakyuu Zenkoku Taikai (ACD, SCD)(Japan) 1994 Artdink - + @@ -1375,13 +1375,13 @@ - Eiyuu Sangokushi (SCD)(Jpn) + Eiyuu Sangokushi (Japan) 1993 Irem - + @@ -1391,13 +1391,13 @@ - Emerald Dragon (SCD)(Jpn) + Emerald Dragon (Japan) 1994 NEC Home Electronics - + @@ -1407,13 +1407,13 @@ - Emerald Dragon Taikenban (SCD)(Jpn) + Emerald Dragon Taikenban (Japan) 1994 NEC Home Electronics - + @@ -1423,13 +1423,13 @@ - Exile - Toki no Hasama he (CD)(Jpn) + Exile - Toki no Hasama he (Japan) 1991 Nihon Telenet - + @@ -1439,13 +1439,13 @@ - Exile II - Janen no Jishou (SCD)(Jpn) + Exile II - Janen no Jishou (Japan) 1992 Nihon Telenet - + @@ -1455,13 +1455,13 @@ - F1 Circus Special - Pole to Win (SCD)(Jpn) + F1 Circus Special - Pole to Win (Japan) 1992 Nichibutsu - + @@ -1471,13 +1471,13 @@ - F1 Team Simulation Project F (SCD)(Jpn) + F1 Team Simulation Project F (Japan) 1992 Nihon Telenet - + @@ -1487,13 +1487,13 @@ - Faceball (SCD)(Jpn) + Faceball (Japan) 1993 Riverhill Software - + @@ -1503,12 +1503,12 @@ - Faceball Taikenban (SCD)(Jpn) + Faceball Taikenban (Japan) 1993 Riverhill Software - + @@ -1518,13 +1518,13 @@ - Faerie Dust Story - Meikyuu no Elfeene (CD)(Jpn) + Faerie Dust Story - Meikyuu no Elfeene (Japan) 1990 Nihon Telenet - + @@ -1534,13 +1534,13 @@ - Farjius no Jakoutei - Neo Metal Fantasy (SCD)(Jpn) + Farjius no Jakoutei - Neo Metal Fantasy (Japan) 1992 Human Entertainment - + @@ -1550,13 +1550,13 @@ - Faussete Amour (SCD)(Jpn) + Faussete Amour (Japan) 1993 Naxat Soft - + @@ -1566,13 +1566,13 @@ - Fiend Hunter (SCD)(Jpn) + Fiend Hunter (Japan) 1993 Right Stuff - + @@ -1582,13 +1582,13 @@ - Fighting Street (CD)(Jpn) + Fighting Street (Japan) 1988 Hudson - + @@ -1598,13 +1598,13 @@ - Final Zone II (CD)(Jpn) + Final Zone II (Japan) 1990 Nihon Telenet - + @@ -1614,13 +1614,13 @@ - Wrestling Universe - Fire Pro Joshi - Dome Choujo Taisen - WOWOW vs. JWP (ACD)(Jpn) + Wrestling Universe - Fire Pro Joshi - Dome Choujo Taisen - WOWOW vs. JWP (Japan) 1995 Human Entertainment - + @@ -1630,13 +1630,13 @@ - Flash Hiders (SCD)(Jpn) + Flash Hiders (Japan) 1993 Right Stuff - + @@ -1646,11 +1646,11 @@ - Flash Hiders Taikenban (SCD)(Jpn) + Flash Hiders Taikenban (Japan) 1993 Right Stuff - + @@ -1660,13 +1660,13 @@ - Forgotten Worlds (SCD)(Jpn) + Forgotten Worlds (Japan) 1992 NEC Avenue - + @@ -1676,13 +1676,13 @@ - Formation Soccer '95 - Della Serie A (ACD, SCD)(Jpn) + Formation Soccer '95 - Della Serie A (ACD, SCD)(Japan) 1995 Human Entertainment - + @@ -1692,13 +1692,13 @@ - Fray CD Xak Gaiden (SCD)(Jpn) + Fray CD Xak Gaiden (Japan) 1994 Micro Cabin - + @@ -1708,13 +1708,13 @@ - Fushigi no Umi no Nadia (SCD)(Jpn) + Fushigi no Umi no Nadia (Japan) 1993 Hudson - + @@ -1724,13 +1724,13 @@ - Gain Ground SX (SCD)(Jpn) + Gain Ground SX (Japan) 1992 NEC Avenue - + @@ -1740,13 +1740,13 @@ - Galaxy Deka Gayvan (SCD)(Jpn) + Galaxy Deka Gayvan (Japan) 1993 Intec - + @@ -1756,13 +1756,13 @@ - Ginga Ojousama Densetsu Yuna (SCD)(Jpn, HRH310827-3FAAT) + Ginga Ojousama Densetsu Yuna (Japan, HRH310827-3FAAT) 1992 Hudson - + @@ -1772,13 +1772,13 @@ - Ginga Ojousama Densetsu Yuna (SCD)(Jpn, HRH310827-3FAFT) + Ginga Ojousama Densetsu Yuna (Japan, HRH310827-3FAFT) 1992 Hudson - + @@ -1788,13 +1788,13 @@ - Ginga Ojousama Densetsu Yuna HuVideo CD (SCD)(Jpn) + Ginga Ojousama Densetsu Yuna HuVideo CD (Japan) 1995 Hudson - + @@ -1804,13 +1804,13 @@ - Ginga Ojousama Densetsu Yuna II - Eternal Princess (SCD)(Jpn) + Ginga Ojousama Densetsu Yuna II - Eternal Princess (Japan) 1995 Hudson - + @@ -1820,13 +1820,13 @@ - Gambler Jikochuushinha - Gekitou 36 Janshi (CD)(Jpn) + Gambler Jikochuushinha - Gekitou 36 Janshi (Japan) 1989 Hudson - + @@ -1836,13 +1836,13 @@ - Gambler Jikochuushinha - Mahjong Puzzle Collection (CD)(Jpn) + Gambler Jikochuushinha - Mahjong Puzzle Collection (Japan) 1992 Taito - + @@ -1852,13 +1852,13 @@ - Aoki Ookami to Shiroki Mejika - Genchou Hishi (SCD)(Jpn) + Aoki Ookami to Shiroki Mejika - Genchou Hishi (Japan) 1993 Koei - + @@ -1868,12 +1868,12 @@ - Garou Densetsu II - Aratanaru Tatakai - Sample Disc (ACD)(Jpn) + Garou Densetsu II - Aratanaru Tatakai - Sample Disc (Japan) 1994 Hudson - + @@ -1883,13 +1883,13 @@ - Garou Densetsu II - Aratanaru Tatakai [Imperfect] (ACD)(Jpn) + Garou Densetsu II - Aratanaru Tatakai [Imperfect] (Japan) 1994 Hudson - + @@ -1899,13 +1899,13 @@ - Garou Densetsu Special (ACD)(Jpn) + Garou Densetsu Special (Japan) 1994 Hudson - + @@ -1915,13 +1915,13 @@ - Gate of Thunder (SCD)(Jpn) + Gate of Thunder (Japan) 1992 Hudson - + @@ -1931,13 +1931,13 @@ - Genocide (SCD)(Jpn) + Genocide (Japan) 1992 Brain Gray - + @@ -1947,13 +1947,13 @@ - Gensou Tairiku Auleria (CD)(Jpn) + Gensou Tairiku Auleria (Japan) 1993 Taito - + @@ -1963,13 +1963,13 @@ - Ginga Fukei Densetsu Sapphire (ACD)(Jpn) + Ginga Fukei Densetsu Sapphire (Japan) 1995 Hudson - + @@ -1979,13 +1979,13 @@ - Go! Go! Birdie Chance (SCD)(Jpn) + Go! Go! Birdie Chance (Japan) 1996 NEC Home Electronics - + @@ -1995,13 +1995,13 @@ - God Panic - Shijou Saikyou Gundan (SCD)(Jpn) + God Panic - Shijou Saikyou Gundan (Japan) 1992 Teichiku Records - + @@ -2011,13 +2011,13 @@ - Godzilla - Bakutou Retsuden (SCD)(Jpn) + Godzilla - Bakutou Retsuden (Japan) 1994 Toho - + @@ -2027,13 +2027,13 @@ - Golden Axe (CD)(Jpn) + Golden Axe (Japan) 1990 Nihon Telenet - + @@ -2043,13 +2043,13 @@ - Götzendiener (SCD)(Jpn) + Götzendiener (Japan) 1994 NEC Home Electronics - + @@ -2059,13 +2059,13 @@ - Gradius II - Gofer no Yabou (SCD)(Jpn) + Gradius II - Gofer no Yabou (Japan) 1992 Konami - + @@ -2075,13 +2075,13 @@ - GS Mikami (SCD)(Jpn) + GS Mikami (Japan) 1994 Banpresto - + @@ -2091,13 +2091,13 @@ - Gulclight TDF 2 (CD)(Jpn) + Gulclight TDF 2 (Japan) 1991 Pack-In-Video - + @@ -2107,13 +2107,13 @@ - Hatsukoi Monogatari (SCD)(Jpn) + Hatsukoi Monogatari (Japan) 1994 Tokuma Shoten - + @@ -2123,12 +2123,12 @@ - Hawk F-123 (SCD)(Jpn) + Hawk F-123 (Japan) 1992 Pack-In-Video - + @@ -2138,13 +2138,13 @@ - Hellfire S - The Another Story (CD)(Jpn) + Hellfire S - The Another Story (Japan) 1991 NEC Avenue - + @@ -2154,13 +2154,13 @@ - High Grenadier (CD)(Jpn) + High Grenadier (Japan) 1991 Nihon Telenet - + @@ -2170,13 +2170,13 @@ - Hihou Densetsu Chris no Bouken (CD)(Jpn) + Hihou Densetsu Chris no Bouken (Japan) 1991 Pack-In-Video - + @@ -2186,13 +2186,13 @@ - Himitsu no Hanazono (SCD)(Jpn) + Himitsu no Hanazono (Japan) 1993 Tokuma Shoten - + @@ -2202,13 +2202,13 @@ - Horror Story (SCD)(Jpn) + Horror Story (Japan) 1993 NEC Avenue - + @@ -2218,13 +2218,13 @@ - Hu PGA Tour Power Golf 2 - Golfer (SCD)(Jpn) + Hu PGA Tour Power Golf 2 - Golfer (Japan) 1994 Hudson - + @@ -2234,13 +2234,13 @@ - Human Sports Festival (SCD)(Jpn) + Human Sports Festival (Japan) 1992 Human Entertainment - + @@ -2250,13 +2250,13 @@ - Hyaku Monogatari - Hontou ni Atta Kowai Hanashi (SCD)(Jpn) + Hyaku Monogatari - Hontou ni Atta Kowai Hanashi (Japan) 1995 Hudson - + @@ -2266,13 +2266,13 @@ - Hyper Dyne SideArms Special (CD)(Jpn) + Hyper Dyne SideArms Special (Japan) 1989 NEC Avenue - + @@ -2282,13 +2282,13 @@ - Hyper Wars (SCD)(Jpn) + Hyper Wars (Japan) 1994 Hudson - + @@ -2298,13 +2298,13 @@ - Iga Ninden Gaou (SCD)(Jpn) + Iga Ninden Gaou (Japan) 1993 Nichibutsu - + @@ -2314,13 +2314,13 @@ - Image Fight II (SCD)(Jpn) + Image Fight II (Japan) 1992 Irem - + @@ -2330,13 +2330,13 @@ - Inoue Mami - Kono Hoshi ni Tatta Hitori no Kimi (SCD)(Jpn) + Inoue Mami - Kono Hoshi ni Tatta Hitori no Kimi (Japan) 1992 Hudson - + @@ -2346,13 +2346,13 @@ - IQ Panic (CD)(Jpn) + IQ Panic (Japan) 1992 IGS - + @@ -2362,11 +2362,11 @@ - J Thunder (SCD)(Jpn) + J Thunder (Japan) 1990 <unknown> - + @@ -2376,13 +2376,13 @@ - J. B. Harold Satsujin Club (CD)(Jpn) + J. B. Harold Satsujin Club (Japan) 1990 Hudson - + @@ -2392,13 +2392,13 @@ - J. League Tremendous Soccer '94 (ACD, SCD)(Jpn) + J. League Tremendous Soccer '94 (ACD, SCD)(Japan) 1994 NEC Home Electronics - + @@ -2408,13 +2408,13 @@ - Jack Nicklaus World Tour Golf (CD)(Jpn) + Jack Nicklaus World Tour Golf (Japan) 1990 Victor Entertainment - + @@ -2424,13 +2424,13 @@ - Janshin Densetsu - Quest of Jongmaster (ACD)(Jpn) + Janshin Densetsu - Quest of Jongmaster (Japan) 1995 NEC Home Electronics - + @@ -2440,13 +2440,13 @@ - Jantei Monogatari (CD)(Jpn) + Jantei Monogatari (Japan) 1990 Nihon Telenet - + @@ -2456,13 +2456,13 @@ - Jantei Monogatari II - Uchuu Tantei Divan Kanketsu Hen (CD)(Jpn) + Jantei Monogatari II - Uchuu Tantei Divan Kanketsu Hen (Japan) 1992 Atlus - + @@ -2472,13 +2472,13 @@ - Jantei Monogatari II - Uchuu Tantei Divan Shutsudou Hen (CD)(Jpn) + Jantei Monogatari II - Uchuu Tantei Divan Shutsudou Hen (Japan) 1992 Atlus - + @@ -2488,13 +2488,13 @@ - Jantei Monogatari III - Saver Angels (SCD)(Jpn) + Jantei Monogatari III - Saver Angels (Japan) 1993 Atlus - + @@ -2504,13 +2504,13 @@ - Jim Power - In Mutant Planet (SCD)(Jpn) + Jim Power - In Mutant Planet (Japan) 1993 Micro World - + @@ -2520,13 +2520,13 @@ - Juuouki (CD)(Jpn) + Juuouki (Japan) 1989 NEC Avenue - + @@ -2536,13 +2536,13 @@ - Kagami no Kuni no Legend (CD)(Jpn) + Kagami no Kuni no Legend (Japan) 1989 Victor Entertainment - + @@ -2552,13 +2552,13 @@ - Kaizou Choujin Shubibinman III - Ikai no Princess (CD)(Jpn) + Kaizou Choujin Shubibinman III - Ikai no Princess (Japan) 1992 NCS - + @@ -2568,13 +2568,13 @@ - Kakutou Haou Densetsu Algunos (SCD)(Jpn) + Kakutou Haou Densetsu Algunos (Japan) 1994 Intec - + @@ -2584,13 +2584,13 @@ - Kawa no Nushi Tsuri - Shizenha (CD)(Jpn) + Kawa no Nushi Tsuri - Shizenha (Japan) 1992 Pack-In-Video - + @@ -2600,13 +2600,13 @@ - Kaze Kiri - Ninja Action (SCD)(Jpn) + Kaze Kiri - Ninja Action (Japan) 1994 Naxat Soft - + @@ -2616,13 +2616,13 @@ - Kaze no Densetsu Xanadu (SCD)(Jpn) + Kaze no Densetsu Xanadu (Japan) 1994 NEC Home Electronics - + @@ -2634,11 +2634,11 @@ - Kaze no Densetsu Xanadu II (SCD)(Jpn) + Kaze no Densetsu Xanadu II (Japan) 1995 Nihon Falcom - + @@ -2665,13 +2665,13 @@ - Kiaidan 00 (SCD)(Jpn) + Kiaidan 00 (Japan) 1992 Nihon Telenet - + @@ -2681,13 +2681,13 @@ - Kidou Keisatsu Patlabor - Griffon Hen (SCD)(Jpn) + Kidou Keisatsu Patlabor - Griffon Hen (Japan) 1993 Riverhill Soft - + @@ -2697,13 +2697,13 @@ - Kisou Louga (SCD)(Jpn) + Kisou Louga (Japan) 1993 Kogado Studio - + @@ -2713,13 +2713,13 @@ - Kisou Louga II - The Ends of Shangrila (SCD)(Jpn) + Kisou Louga II - The Ends of Shangrila (Japan) 1995 NEC Home Electronics - + @@ -2729,13 +2729,13 @@ - KO Seiki Beast - Gaia Fukkatsu Kanketsu Hen (SCD)(Jpn) + KO Seiki Beast - Gaia Fukkatsu Kanketsu Hen (Japan) 1994 Pack-In-Video - + @@ -2745,13 +2745,13 @@ - Kuusou Kagaku Sekai Gulliver Boy (SCD)(Jpn) + Kuusou Kagaku Sekai Gulliver Boy (Japan) 1995 Hudson - + @@ -2761,13 +2761,13 @@ - L-Dis (CD)(Jpn) + L-Dis (Japan) 1991 NCS - + @@ -2777,13 +2777,13 @@ - Lady Phantom (SCD)(Jpn) + Lady Phantom (Japan) 1991 Laser Soft - + @@ -2793,13 +2793,13 @@ - Langrisser - Hikari no Matsuei (SCD)(Jpn) + Langrisser - Hikari no Matsuei (Japan) 1993 NCS - + @@ -2809,13 +2809,13 @@ - Laplace no Ma (SCD)(Jpn) + Laplace no Ma (Japan) 1993 Human Entertainment - + @@ -2825,12 +2825,12 @@ - Laplace no Ma - Preview Disk (SCD)(Jpn) + Laplace no Ma - Preview Disk (Japan) 1993 Human Entertainment - + @@ -2840,13 +2840,13 @@ - Laser Soft Visual Collection Volume I - Cosmic Fantasy Visual Shuu (CD)(Jpn) + Laser Soft Visual Collection Volume I - Cosmic Fantasy Visual Shuu (Japan) 1993 Nihon Telenet - + @@ -2856,13 +2856,13 @@ - Laser Soft Visual Collection Volume II - Valis Visual Shuu (CD)(Jpn) + Laser Soft Visual Collection Volume II - Valis Visual Shuu (Japan) 1993 Nihon Telenet - + @@ -2872,13 +2872,13 @@ - Last Armageddon (CD)(Jpn, BRCD0001-6-0625-R1F) + Last Armageddon (Japan, BRCD0001-6-0625-R1F) 1990 Brain Gray - + @@ -2890,13 +2890,13 @@ - Last Armageddon (CD)(Jpn, BRCD0001-7-0904-R1D) + Last Armageddon (Japan, BRCD0001-7-0904-R1D) 1990 Brain Gray - + @@ -2923,13 +2923,13 @@ - Legion (CD)(Jpn) + Legion (Japan) 1990 Nihon Telenet - + @@ -2939,13 +2939,13 @@ - Lemmings (SCD)(Jpn) + Lemmings (Japan) 1992 SunSoft - + @@ -2955,13 +2955,13 @@ - Linda³ (ACD, SCD)(Jpn) + Linda³ (ACD, SCD)(Japan) 1995 NEC Home Electronics - + @@ -2971,13 +2971,13 @@ - Lodoss Tousenki - Record of Lodoss War (CD)(Jpn) + Lodoss Tousenki - Record of Lodoss War (Japan) 1992 Hudson - + @@ -2989,10 +2989,10 @@ - Lodoss Tousenki II - Record of Lodoss War II (SCD)(Jpn) + Lodoss Tousenki II - Record of Lodoss War II (Japan) 1994 Hudson - + @@ -3019,13 +3019,13 @@ - Loom (SCD)(Jpn) + Loom (Japan) 1992 Victor Entertainment - + @@ -3035,13 +3035,13 @@ - Lord of Wars (CD)(Jpn) + Lord of Wars (Japan) 1991 System Soft - + @@ -3051,13 +3051,13 @@ - Choujikuu Yousai Macross 2036 (CD, SCD)(Jpn) + Choujikuu Yousai Macross 2036 (CD, SCD)(Japan) 1992 NCS - + @@ -3067,13 +3067,13 @@ - Choujikuu Yousai Macross Eien no Love Song (SCD)(Jpn) + Choujikuu Yousai Macross Eien no Love Song (Japan) 1992 NCS - + @@ -3083,13 +3083,13 @@ - Mad Stalker - Full Metal Force (ACD)(Jpn) + Mad Stalker - Full Metal Force (Japan) 1994 NEC Home Electronics - + @@ -3099,10 +3099,10 @@ - Mad Stalker - Full Metal Force - Sample Disc (ACD)(Jpn) + Mad Stalker - Full Metal Force - Sample Disc (Japan) 1994 NEC Home Electronics - + @@ -3112,13 +3112,13 @@ - Madou Monogatari I - Honou no Sotsuenji [Imperfect] (ACD)(Jpn) + Madou Monogatari I - Honou no Sotsuenji [Imperfect] (Japan) 1996 NEC Avenue - + @@ -3128,13 +3128,13 @@ - Magical Fantasy Adventure - Popful Mail (ACD, SCD)(Jpn) + Magical Fantasy Adventure - Popful Mail (ACD, SCD)(Japan) 1994 NEC Home Electronics - + @@ -3144,13 +3144,13 @@ - Magical Saurus Tour (CD)(Jpn) + Magical Saurus Tour (Japan) 1990 Victor Entertainment - + @@ -3160,13 +3160,13 @@ - Magicoal (SCD)(Jpn) + Magicoal (Japan) 1993 NEC Home Electronics - + @@ -3176,13 +3176,13 @@ - Mahjong Clinic Special (SCD)(Jpn) + Mahjong Clinic Special (Japan) 1993 Naxat Soft - + @@ -3192,13 +3192,13 @@ - Mahjong Lemon Angel (SCD)(Jpn) + Mahjong Lemon Angel (Japan) 1994 Naxat Soft - + @@ -3208,13 +3208,13 @@ - Mahjong on the Beach (SCD)(Jpn) + Mahjong on the Beach (Japan) 1993 NEC Avenue - + @@ -3224,13 +3224,13 @@ - Mahjong Sword - Princess Quest Gaiden (ACD, SCD)(Jpn) + Mahjong Sword - Princess Quest Gaiden (ACD, SCD)(Japan) 1995 Naxat Soft - + @@ -3240,11 +3240,11 @@ - Mahou no Shoujo Silky Lip [ver 3.1 prototype][backup] (SCD)(Jpn) + Mahou no Shoujo Silky Lip [ver 3.1 prototype][backup] (Japan) 19?? Nihon Telenet - + @@ -3254,11 +3254,11 @@ - Mahou no Shoujo Silky Lip [ver 5.0 prototype][backup][alt] (SCD)(Jpn) + Mahou no Shoujo Silky Lip [ver 5.0 prototype][backup][alt] (Japan) 19?? Nihon Telenet - + @@ -3268,13 +3268,13 @@ - Mamono Hunter Youko - Makai kara no Tenkousei (CD)(Jpn) + Mamono Hunter Youko - Makai kara no Tenkousei (Japan) 1992 NCS - + @@ -3284,13 +3284,13 @@ - Mamono Hunter Youko - Tooki Yobigoe (SCD)(Jpn) + Mamono Hunter Youko - Tooki Yobigoe (Japan) 1993 NCS - + @@ -3300,13 +3300,13 @@ - Martial Champion (SCD)(Jpn) + Martial Champion (Japan) 1993 Konami - + @@ -3316,13 +3316,13 @@ - Mashou Denki La Valeur (CD)(Jpn) + Mashou Denki La Valeur (Japan) 1991 Kogado Studio - + @@ -3332,13 +3332,13 @@ - Master of Monsters (CD)(Jpn) + Master of Monsters (Japan) 1991 Micro Cabin - + @@ -3348,13 +3348,13 @@ - Mateki Densetsu Astralius (CD)(Jpn) + Mateki Densetsu Astralius (Japan) 1991 IGS - + @@ -3364,13 +3364,13 @@ - Megami Paradise (SCD)(Jpn) + Megami Paradise (Japan) 1994 NEC Home Electronics - + @@ -3380,13 +3380,13 @@ - Metal Angel (SCD)(Jpn) + Metal Angel (Japan) 1993 Pack-In-Video - + @@ -3396,13 +3396,13 @@ - Metal Angel II (SCD)(Jpn) + Metal Angel II (Japan) 1995 Pack-In-Video - + @@ -3412,13 +3412,13 @@ - Metamor Jupiter (SCD)(Jpn) + Metamor Jupiter (Japan) 1993 NEC Home Electronics - + @@ -3428,13 +3428,13 @@ - Might and Magic (CD)(Jpn) + Might and Magic (Japan) 1992 NEC Avenue - + @@ -3444,13 +3444,13 @@ - Might and Magic III - Isles of Terra (SCD)(Jpn) + Might and Magic III - Isles of Terra (Japan) 1993 Hudson - + @@ -3460,13 +3460,13 @@ - Mine Sweeper (CD)(Jpn) + Mine Sweeper (Japan) 1992 Pack-In-Video - + @@ -3476,13 +3476,13 @@ - Mirai Shonen Conan (SCD)(Jpn) + Mirai Shonen Conan (Japan) 1992 Nihon Telenet - + @@ -3492,13 +3492,13 @@ - Mitsubachi Gakuen (CD)(Jpn) + Mitsubachi Gakuen (Japan) 1990 Hudson - + @@ -3508,13 +3508,13 @@ - Wonder Boy III - Monster Lair (CD)(Jpn) + Wonder Boy III - Monster Lair (Japan) 1989 Hudson - + @@ -3524,13 +3524,13 @@ - Monster Maker - Yami no Ryuukishi (SCD)(Jpn) + Monster Maker - Yami no Ryuukishi (Japan) 1994 NEC Avenue - + @@ -3540,13 +3540,13 @@ - Moonlight Lady (SCD)(Jpn) + Moonlight Lady (Japan) 1993 NEC Home Electronics - + @@ -3556,13 +3556,13 @@ - Motoroader MC (SCD)(Jpn) + Motoroader MC (Japan) 1992 NCS - + @@ -3572,13 +3572,13 @@ - Motteke Tamago [Imperfect] (SCD)(Jpn) + Motteke Tamago [Imperfect] (Japan) 1997 Naxat Soft - + @@ -3588,13 +3588,13 @@ - Mugen Senshi Valis - Legend of a Fantasm Soldier (SCD)(Jpn) + Mugen Senshi Valis - Legend of a Fantasm Soldier (Japan) 1992 Nihon Telenet - + @@ -3604,13 +3604,13 @@ - Mystic Formula (SCD)(Jpn) + Mystic Formula (Japan) 1993 Micro Cabin - + @@ -3620,13 +3620,13 @@ - Nekketsu Koukou Dodgeball Bu - Soccer Hen (SCD)(Jpn) + Nekketsu Koukou Dodgeball Bu - Soccer Hen (Japan) 1991 Naxat Soft - + @@ -3636,13 +3636,13 @@ - Nekketsu Koushinkyoku - Soreyuke Daiundoukai (SCD)(Jpn) + Nekketsu Koushinkyoku - Soreyuke Daiundoukai (Japan) 1992 Naxat Soft - + @@ -3652,13 +3652,13 @@ - Nekketsu Legend Baseball (SCD)(Jpn) + Nekketsu Legend Baseball (Japan) 1995 Pack-In-Video - + @@ -3668,13 +3668,13 @@ - Nemurenumori no Chiisana Ohanashi (SCD)(Jpn) + Nemurenumori no Chiisana Ohanashi (Japan) 1993 NEC Home Electronics - + @@ -3684,13 +3684,13 @@ - Neo Nectaris (SCD)(Jpn) + Neo Nectaris (Japan) 1994 Hudson - + @@ -3700,13 +3700,13 @@ - Nexzr (SCD)(Jpn) + Nexzr (Japan) 1992 Naxat Soft - + @@ -3716,13 +3716,13 @@ - Nishimura Kyoutarou Mystery - Hokutosei no Onna (CD)(Jpn) + Nishimura Kyoutarou Mystery - Hokutosei no Onna (Japan) 1990 Naxat Soft - + @@ -3732,13 +3732,13 @@ - No Ri Ko (CD)(Jpn) + No Ri Ko (Japan) 1988 Hudson - + @@ -3748,13 +3748,13 @@ - Nobunaga no Yabou - Bushou Fuuunroku (SCD)(Jpn) + Nobunaga no Yabou - Bushou Fuuunroku (Japan) 1993 Koei - + @@ -3764,13 +3764,13 @@ - Nobunaga no Yabou - Zenkokuban (SCD)(Jpn) + Nobunaga no Yabou - Zenkokuban (Japan) 1993 Koei - + @@ -3780,13 +3780,13 @@ - Pachio-kun III - Pachisuro Pachinko (SCD)(Jpn) + Pachio-kun III - Pachisuro Pachinko (Japan) 1994 Coconuts Japan - + @@ -3796,13 +3796,13 @@ - Pachio-kun - Maboroshi no Densetsu (CD)(Jpn) + Pachio-kun - Maboroshi no Densetsu (Japan) 1991 Coconuts Japan - + @@ -3812,13 +3812,13 @@ - Pachio-kun - Warau Uchuu (SCD)(Jpn) + Pachio-kun - Warau Uchuu (Japan) 1992 Coconuts Japan - + @@ -3828,13 +3828,13 @@ - Paradion - Auto Crusher Palladium (SCD)(Jpn) + Paradion - Auto Crusher Palladium (Japan) 1994 Pack-In-Video - + @@ -3844,13 +3844,13 @@ - Pastel Lime (SCD)(Jpn) + Pastel Lime (Japan) 1992 Naxat Soft - + @@ -3860,12 +3860,12 @@ - PCEngine Fan Special CD-Rom Volume I (SCD)(Jpn) + PCEngine Fan Special CD-ROM Volume I (Japan) 1996 Tokuma Shoten - + @@ -3875,13 +3875,13 @@ - PCEngine Hyper Catalog (CD-Rom Capsule) (SCD)(Jpn) + PCEngine Hyper Catalog (CD-ROM Capsule) (Japan) 1992 Shogakukan - + @@ -3891,12 +3891,12 @@ - PCEngine Hyper Catalog Duo-RX - Disc A (SCD)(Jpn) + PCEngine Hyper Catalog Duo-RX - Disc A (Japan) 19?? Shogakukan - + @@ -3906,12 +3906,12 @@ - PCEngine Hyper Catalog Duo-RX - Disc B (SCD)(Jpn) + PCEngine Hyper Catalog Duo-RX - Disc B (Japan) 19?? Shogakukan - + @@ -3921,13 +3921,13 @@ - PCEngine Hyper Catalog II (SCD)(Jpn) + PCEngine Hyper Catalog II (Japan) 1993 Shogakukan - + @@ -3937,13 +3937,13 @@ - PCEngine Hyper Catalog III (SCD)(Jpn) + PCEngine Hyper Catalog III (Japan) 1993 Shogakukan - + @@ -3953,13 +3953,13 @@ - PCEngine Hyper Catalog IV (SCD)(Jpn) + PCEngine Hyper Catalog IV (Japan) 1993 Shogakukan - + @@ -3969,13 +3969,13 @@ - PCEngine Hyper Catalog V (SCD)(Jpn) + PCEngine Hyper Catalog V (Japan) 1994 Shogakukan - + @@ -3985,13 +3985,13 @@ - PCEngine Hyper Catalog VI - Disc A (SCD)(Jpn) + PCEngine Hyper Catalog VI - Disc A (Japan) 1994 Shogakukan - + @@ -4001,13 +4001,13 @@ - PCEngine Hyper Catalog VI - Disc B (SCD)(Jpn) + PCEngine Hyper Catalog VI - Disc B (Japan) 1994 Shogakukan - + @@ -4017,13 +4017,13 @@ - Police Connection (SCD)(Jpn) + Police Connection (Japan) 1993 Nihon Telenet - + @@ -4033,13 +4033,13 @@ - Pomping World (CD)(Jpn) + Pomping World (Japan) 1991 Hudson - + @@ -4049,13 +4049,13 @@ - Pop'n Magic (SCD)(Jpn) + Pop'n Magic (Japan) 1992 Nihon Telenet - + @@ -4065,13 +4065,13 @@ - Populous - The Promised Lands (SCD)(Jpn) + Populous - The Promised Lands (Japan) 1991 Hudson - + @@ -4081,13 +4081,13 @@ - Prince of Persia (SCD)(Jpn) + Prince of Persia (Japan) 1991 Riverhill Software - + @@ -4097,13 +4097,13 @@ - Princess Maker 1 (SCD)(Jpn) + Princess Maker 1 (Japan) 1995 NEC Home Electronics - + @@ -4121,13 +4121,13 @@ - Princess Maker 2 (ACD, SCD)(Jpn) + Princess Maker 2 (ACD, SCD)(Japan) 1995 NEC Home Electronics - + @@ -4137,13 +4137,13 @@ - Princess Minerva (SCD)(Jpn) + Princess Minerva (Japan) 1994 Riverhill Software - + @@ -4153,13 +4153,13 @@ - Private eye dol (ACD, SCD)(Jpn) + Private eye dol (ACD, SCD)(Japan) 1995 NEC Home Electronics - + @@ -4169,13 +4169,13 @@ - Psychic Detective Series Vol. III - Aya (SCD)(Jpn) + Psychic Detective Series Vol. III - Aya (Japan) 1992 DataWest - + @@ -4185,10 +4185,10 @@ - Psychic Detective Series Vol. III - Aya - Auto Demo (SCD)(Jpn) + Psychic Detective Series Vol. III - Aya - Auto Demo (Japan) 1992 DataWest - + @@ -4198,13 +4198,13 @@ - Psychic Detective Series Vol. IV - Orgel (SCD)(Jpn) + Psychic Detective Series Vol. IV - Orgel (Japan) 1993 DataWest - + @@ -4214,13 +4214,13 @@ - Psychic Storm (SCD)(Jpn) + Psychic Storm (Japan) 1992 Nihon Telenet - + @@ -4230,13 +4230,13 @@ - Puyo Puyo CD (SCD)(Jpn) + Puyo Puyo CD (Japan) 1994 NEC Avenue - + @@ -4246,13 +4246,13 @@ - Puyo Puyo CD Tsuu (SCD)(Jpn) + Puyo Puyo CD Tsuu (Japan) 1996 NEC Interchannel - + @@ -4262,13 +4262,13 @@ - Quiz Avenue (CD)(Jpn) + Quiz Avenue (Japan) 1991 NEC Avenue - + @@ -4278,13 +4278,13 @@ - Quiz Avenue II (CD)(Jpn) + Quiz Avenue II (Japan) 1991 NEC Avenue - + @@ -4294,13 +4294,13 @@ - Quiz Avenue III (SCD)(Jpn) + Quiz Avenue III (Japan) 1994 NEC Avenue - + @@ -4310,13 +4310,13 @@ - Quiz Caravan Cult Q (CD)(Jpn) + Quiz Caravan Cult Q (Japan) 1993 Hudson - + @@ -4326,13 +4326,13 @@ - Quiz de Gakuensai (SCD)(Jpn) + Quiz de Gakuensai (Japan) 1993 Naxat Soft - + @@ -4342,13 +4342,13 @@ - Quiz Marugoto the World (CD)(Jpn) + Quiz Marugoto the World (Japan) 1991 Atlus - + @@ -4358,13 +4358,13 @@ - Quiz Marugoto The World II - Time Machine ni Onegai! (CD)(Jpn) + Quiz Marugoto The World II - Time Machine ni Onegai! (Japan) 1992 Atlus - + @@ -4374,13 +4374,13 @@ - Quiz no Hoshi (SCD)(Jpn) + Quiz no Hoshi (Japan) 1992 Sunsoft - + @@ -4390,13 +4390,13 @@ - Quiz Tonosama no Yabou (CD)(Jpn) + Quiz Tonosama no Yabou (Japan) 1992 Hudson - + @@ -4406,13 +4406,13 @@ - R-Type Complete CD (SCD)(Jpn) + R-Type Complete CD (Japan) 1991 Irem - + @@ -4422,13 +4422,13 @@ - Rainbow Islands (CD)(Jpn) + Rainbow Islands (Japan) 1993 NEC Avenue - + @@ -4438,13 +4438,13 @@ - Ranma ½ (CD)(Jpn) + Ranma ½ (Japan) 1990 NCS - + @@ -4454,13 +4454,13 @@ - Ranma ½ - Datou, Ganso Musabetsu Kakutou-Ryuu! (CD, SCD)(Jpn) + Ranma ½ - Datou, Ganso Musabetsu Kakutou-Ryuu! (CD, SCD)(Japan) 1992 NCS - + @@ -4470,13 +4470,13 @@ - Ranma ½ - Toraware no Hanayome (CD)(Jpn) + Ranma ½ - Toraware no Hanayome (Japan) 1991 NCS - + @@ -4486,13 +4486,13 @@ - Rayxanber II (CD)(Jpn) + Rayxanber II (Japan) 1991 DataWest - + @@ -4502,13 +4502,13 @@ - Rayxanber III (SCD)(Jpn) + Rayxanber III (Japan) 1992 DataWest - + @@ -4518,13 +4518,13 @@ - Red Alert (CD)(Jpn) + Red Alert (Japan) 1989 Nihon Telenet - + @@ -4534,13 +4534,13 @@ - Renny Blaster (SCD)(Jpn) + Renny Blaster (Japan) 1995 NEC Avenue - + @@ -4550,13 +4550,13 @@ - Rising Sun (CD)(Jpn) + Rising Sun (Japan) 1992 Victor Entertainment - + @@ -4566,13 +4566,13 @@ - Road Spirits (CD)(Jpn) + Road Spirits (Japan) 1991 Pack-In-Video - + @@ -4582,13 +4582,13 @@ - Rom² Karaoke - Volume I (CD)(Jpn) + Rom² Karaoke - Volume I (Japan) 1989 NEC Avenue - + @@ -4598,13 +4598,13 @@ - Rom² Karaoke - Volume I - Suteki ni Standard (CD)(Jpn) + Rom² Karaoke - Volume I - Suteki ni Standard (Japan) 1990 Victor Musical Industries - + @@ -4614,13 +4614,13 @@ - Rom² Karaoke - Volume II (CD)(Jpn) + Rom² Karaoke - Volume II (Japan) 1989 NEC Avenue - + @@ -4630,13 +4630,13 @@ - Rom² Karaoke - Volume II - Nattoku Idol (CD)(Jpn) + Rom² Karaoke - Volume II - Nattoku Idol (Japan) 1990 Victor Musical Industries - + @@ -4646,13 +4646,13 @@ - Rom² Karaoke - Volume III (CD)(Jpn) + Rom² Karaoke - Volume III (Japan) 1989 NEC Avenue - + @@ -4662,13 +4662,13 @@ - Rom² Karaoke - Volume III - Yappashi Band (CD)(Jpn) + Rom² Karaoke - Volume III - Yappashi Band (Japan) 1990 Victor Musical Industries - + @@ -4678,13 +4678,13 @@ - Rom² Karaoke - Volume IV (CD)(Jpn) + Rom² Karaoke - Volume IV (Japan) 1990 NEC Avenue - + @@ -4694,13 +4694,13 @@ - Rom² Karaoke - Volume IV - Choito Otona! (CD)(Jpn) + Rom² Karaoke - Volume IV - Choito Otona! (Japan) 1990 Victor Musical Industries - + @@ -4710,13 +4710,13 @@ - Rom² Karaoke - Volume V (CD)(Jpn) + Rom² Karaoke - Volume V (Japan) 1990 NEC Avenue - + @@ -4726,13 +4726,13 @@ - Rom² Karaoke - Volume V - Maku no Uchi (CD)(Jpn) + Rom² Karaoke - Volume V - Maku no Uchi (Japan) 1990 Victor Musical Industries - + @@ -4742,13 +4742,13 @@ - Rom Rom Stadium (CD)(Jpn) + Rom Rom Stadium (Japan) 1989 NCS - + @@ -4758,13 +4758,13 @@ - Ruin - Kami no Isan (SCD)(Jpn) + Ruin - Kami no Isan (Japan) 1993 Victor Entertainment - + @@ -4774,13 +4774,13 @@ - Ryuuko no Ken (ACD)(Jpn) + Ryuuko no Ken (Japan) 1994 Hudson - + @@ -4790,10 +4790,10 @@ - Ryuuko no Ken - Sample Disc (ACD)(Jpn) + Ryuuko no Ken - Sample Disc (Japan) 1994 Hudson - + @@ -4803,13 +4803,13 @@ - Sangokushi Eiketsu - Tenka ni Nozomu (CD)(Jpn) + Sangokushi Eiketsu - Tenka ni Nozomu (Japan) 1991 Naxat Soft - + @@ -4819,13 +4819,13 @@ - Sangokushi III (SCD)(Jpn) + Sangokushi III (Japan) 1993 Koei - + @@ -4835,13 +4835,13 @@ - Seirei Senshi Spriggan (CD)(Jpn) + Seirei Senshi Spriggan (Japan) 1991 Naxat Soft - + @@ -4851,13 +4851,13 @@ - Seiryuu Densetsu Monbit (CD)(Jpn) + Seiryuu Densetsu Monbit (Japan) 1991 Hudson - + @@ -4867,13 +4867,13 @@ - Seisenshi Denshou - Jantaku no Kishi (SCD)(Jpn) + Seisenshi Denshou - Jantaku no Kishi (Japan) 1994 Nichibutsu - + @@ -4883,13 +4883,13 @@ - Seiya Monogatari - Anearth Fantasy Stories (SCD)(Jpn) + Seiya Monogatari - Anearth Fantasy Stories (Japan) 1995 Hudson - + @@ -4899,12 +4899,12 @@ - Seiya Monogatari - Anearth Fantasy Stories Taikenban (SCD)(Jpn) + Seiya Monogatari - Anearth Fantasy Stories Taikenban (Japan) 1995 Hudson - + @@ -4914,10 +4914,10 @@ - Seiya Monogatari - Anearth Fantasy Stories [debug version prototype] (SCD)(Jpn) + Seiya Monogatari - Anearth Fantasy Stories [debug version prototype] (Japan) 19?? NEC - + @@ -4927,13 +4927,13 @@ - Sengoku Kantou Sangokushi (CD)(Jpn) + Sengoku Kantou Sangokushi (Japan) 1991 Intec - + @@ -4943,13 +4943,13 @@ - Sexy Idol Mahjong (SCD)(Jpn) + Sexy Idol Mahjong (Japan) 1993 Nichibutsu - + @@ -4959,13 +4959,13 @@ - Sexy Idol Mahjong - Fashion Monogatari (ACD, SCD)(Jpn) + Sexy Idol Mahjong - Fashion Monogatari (ACD, SCD)(Japan) 1994 Nichibutsu - + @@ -4975,13 +4975,13 @@ - Sexy Idol Mahjong - Yakyuuken no Uta [Imperfect] (SCD)(Jpn) + Sexy Idol Mahjong - Yakyuuken no Uta [Imperfect] (Japan) 1995 Nichibutsu - + @@ -4991,13 +4991,13 @@ - Shadow of the Beast - Majou no Okite (SCD)(Jpn) + Shadow of the Beast - Majou no Okite (Japan) 1992 Victor Entertainment - + @@ -5007,13 +5007,13 @@ - Shanghai II (CD)(Jpn) + Shanghai II (Japan) 1990 Hudson - + @@ -5023,13 +5023,13 @@ - Shanghai III - Dragon's Eye (CD)(Jpn) + Shanghai III - Dragon's Eye (Japan) 1992 ASK Kodansha - + @@ -5039,13 +5039,13 @@ - Shapeshifter - Makai Eiyuu Den (SCD)(Jpn) + Shapeshifter - Makai Eiyuu Den (Japan) 1992 Victor Entertainment - + @@ -5055,13 +5055,13 @@ - Sherlock Holmes no Tantei Kouza (CD)(Jpn) + Sherlock Holmes no Tantei Kouza (Japan) 1991 Victor Entertainment - + @@ -5071,13 +5071,13 @@ - Sherlock Holmes no Tantei Kouza II (CD)(Jpn) + Sherlock Holmes no Tantei Kouza II (Japan) 1993 Victor Entertainment - + @@ -5087,10 +5087,10 @@ - Shiawase Usagi - Nureta Bishoujo Ichi Hajimete na no ni [Imperfect] (SCD)(Jpn) + Shiawase Usagi - Nureta Bishoujo Ichi Hajimete na no ni [Imperfect] (Japan) 19?? <unknown> - + @@ -5100,11 +5100,11 @@ - Shiawase Usagi II - Toraware Usagi Sailor Z (SCD)(Jpn) + Shiawase Usagi II - Toraware Usagi Sailor Z (Japan) 1995 <unknown> - + @@ -5114,13 +5114,13 @@ - Shin Megami Tensei (SCD)(Jpn) + Shin Megami Tensei (Japan) 1993 Atlus - + @@ -5130,13 +5130,13 @@ - Shin Onryou Senki (SCD)(Jpn) + Shin Onryou Senki (Japan) 1995 Fujicom - + @@ -5146,13 +5146,13 @@ - Shin Sangokushi - Tenka ha Ware ni (CD)(Jpn) + Shin Sangokushi - Tenka ha Ware ni (Japan) 1992 Naxat Soft - + @@ -5162,12 +5162,12 @@ - Shinsetsu Shiawase Usagi (SCD)(Jpn) + Shinsetsu Shiawase Usagi (Japan) 1995 <unknown> - + @@ -5177,10 +5177,10 @@ - Shinsetsu Shiawase Usagi f - Yuujou Yori mo Aiyoku (SCD)(Jpn) + Shinsetsu Shiawase Usagi f - Yuujou Yori mo Aiyoku (Japan) 1997 <unknown> - + @@ -5192,10 +5192,10 @@ - Shinsetsu Shiawase Usagi 2 - Kairaku e no Invitation (SCD)(Jpn) + Shinsetsu Shiawase Usagi 2 - Kairaku e no Invitation (Japan) 1996 <unknown> - + @@ -5207,13 +5207,13 @@ - Shougi Database Kiyuu (SCD)(Jpn) + Shougi Database Kiyuu (Japan) 1995 Seta - + @@ -5223,13 +5223,13 @@ - Sim Earth - The Living Planet (SCD)(Jpn) + Sim Earth - The Living Planet (Japan) 1993 Hudson - + @@ -5239,13 +5239,13 @@ - Slime World (SCD)(Jpn) + Slime World (Japan) 1992 Micro World - + @@ -5255,13 +5255,13 @@ - Slot Shoubushi (SCD)(Jpn) + Slot Shoubushi (Japan) 1995 Nichibutsu - + @@ -5271,13 +5271,13 @@ - Snatcher (SCD)(Jpn) + Snatcher (Japan) 1992 Konami - + @@ -5287,13 +5287,13 @@ - Snatcher - Pilot Disk (SCD)(Jpn) + Snatcher - Pilot Disk (Japan) 1992 Konami - + @@ -5303,13 +5303,13 @@ - Sol Bianca (CD)(Jpn) + Sol Bianca (Japan) 1990 NCS - + @@ -5319,13 +5319,13 @@ - Sol Moonarge (SCD)(Jpn) + Sol Moonarge (Japan) 1994 Irem - + @@ -5335,13 +5335,13 @@ - Solid Force (SCD)(Jpn) + Solid Force (Japan) 1995 NEC Home Electronics - + @@ -5351,13 +5351,13 @@ - Sorcerian (SCD)(Jpn) + Sorcerian (Japan) 1992 Victor Entertainment - + @@ -5367,13 +5367,13 @@ - Sotsugyou - Graduation (SCD)(Jpn) + Sotsugyou - Graduation (Japan) 1993 NEC Avenue - + @@ -5383,13 +5383,13 @@ - Sotsugyou II - Neo Generation (ACD, SCD)(Jpn) + Sotsugyou II - Neo Generation (ACD, SCD)(Japan) 1994 Riverhill Software - + @@ -5399,13 +5399,13 @@ - Sotsugyou Shashin - Miki (SCD)(Jpn) + Sotsugyou Shashin - Miki (Japan) 1994 Coconuts Japan - + @@ -5415,12 +5415,12 @@ - Space Fantasy Zone [prototype][backup] (CD, SCD)(Jpn) + Space Fantasy Zone [prototype][backup] (CD, SCD)(Japan) 1991? NEC Avenue - + @@ -5430,13 +5430,13 @@ - Space Invaders - The Original Game (SCD)(Jpn) + Space Invaders - The Original Game (Japan) 1995 NEC Avenue - + @@ -5446,13 +5446,13 @@ - Splash Lake (CD)(Jpn) + Splash Lake (Japan) 1991 NEC Avenue - + @@ -5462,13 +5462,13 @@ - Spriggan Mark II - Re Terraform Project [Imperfect] (SCD)(Jpn) + Spriggan Mark II - Re Terraform Project [Imperfect] (Japan) 1992 Naxat Soft - + @@ -5478,13 +5478,13 @@ - Star Breaker (SCD)(Jpn) + Star Breaker (Japan) 1994 Ray Force - + @@ -5494,13 +5494,13 @@ - Star Mobile (CD)(Jpn) + Star Mobile (Japan) 1992 Naxat Soft - + @@ -5510,13 +5510,13 @@ - Star Parodia (SCD)(Jpn) + Star Parodia (Japan) 1992 Hudson - + @@ -5526,13 +5526,13 @@ - Startling Odyssey (SCD)(Jpn) + Startling Odyssey (Japan) 1993 Ray Force - + @@ -5542,13 +5542,13 @@ - Startling Odyssey II - Makyou Sensou (SCD)(Jpn) + Startling Odyssey II - Makyou Sensou (Japan) 1994 Ray Force - + @@ -5558,13 +5558,13 @@ - Steam Heart's [Imperfect] (SCD)(Jpn) + Steam Heart's [Imperfect] (Japan) 1996 TGL - + @@ -5574,13 +5574,13 @@ - Strider Hiryuu (ACD)(Jpn) + Strider Hiryuu (Japan) 1994 NEC Avenue - + @@ -5590,13 +5590,13 @@ - Sugoroku '92 Nari Tore Nariagari Trendy (CD)(Jpn) + Sugoroku '92 Nari Tore Nariagari Trendy (Japan) 1991 Nihon Telenet - + @@ -5606,13 +5606,13 @@ - Summer Carnival '92 - Alzadick (CD)(Jpn) + Summer Carnival '92 - Alzadick (Japan) 1992 Naxat Soft - + @@ -5622,13 +5622,13 @@ - Summer Carnival '93 - Nexzr Special (SCD)(Jpn) + Summer Carnival '93 - Nexzr Special (Japan) 1993 Naxat Soft - + @@ -5638,13 +5638,13 @@ - Super Albatross (CD)(Jpn) + Super Albatross (Japan) 1989 Nihon Telenet - + @@ -5654,13 +5654,13 @@ - Super CD-Rom² Taiken Soft-shuu (SCD)(Jpn) + Super CD-ROM² Taiken Soft-shuu (Japan) 1991 Hudson - + @@ -5670,13 +5670,13 @@ - Super Daisenryaku (CD)(Jpn) + Super Daisenryaku (Japan) 1990 Micro Cabin - + @@ -5686,13 +5686,13 @@ - Super Darius (CD)(Jpn) + Super Darius (Japan) 1990 NEC Avenue - + @@ -5702,13 +5702,13 @@ - Super Darius II (SCD)(Jpn) + Super Darius II (Japan) 1993 NEC Avenue - + @@ -5718,13 +5718,13 @@ - Super Mahjong Taikai (SCD)(Jpn) + Super Mahjong Taikai (Japan) 1992 Koei - + @@ -5734,13 +5734,13 @@ - Super Raiden (SCD)(Jpn) + Super Raiden (Japan) 1992 Hudson - + @@ -5750,13 +5750,13 @@ - Super Real Mahjong P II III Custom (ACD, SCD)(Jpn) + Super Real Mahjong P II III Custom (ACD, SCD)(Japan) 1994 Naxat Soft - + @@ -5766,13 +5766,13 @@ - Super Real Mahjong P IV Custom (SCD)(Jpn) + Super Real Mahjong P IV Custom (Japan) 1993 Naxat Soft - + @@ -5782,13 +5782,13 @@ - Super Real Mahjong P V Custom (ACD, SCD)(Jpn) + Super Real Mahjong P V Custom (ACD, SCD)(Japan) 1995 Naxat Soft - + @@ -5798,13 +5798,13 @@ - Super Real Mahjong Special - Miki Kasumi Shoko no Omoide (SCD)(Jpn) + Super Real Mahjong Special - Miki Kasumi Shoko no Omoide (Japan) 1992 Naxat Soft - + @@ -5814,13 +5814,13 @@ - Super Schwartzschild (CD, SCD)(Jpn) + Super Schwartzschild (CD, SCD)(Japan) 1991 Kogado Studio - + @@ -5830,13 +5830,13 @@ - Super Schwartzschild II (SCD)(Jpn) + Super Schwartzschild II (Japan) 1992 Kogado Studio - + @@ -5846,13 +5846,13 @@ - Sword Master (SCD)(Jpn) + Sword Master (Japan) 1993 Right Stuff - + @@ -5862,13 +5862,13 @@ - Sylphia (SCD)(Jpn) + Sylphia (Japan) 1993 Tonkin House - + @@ -5878,13 +5878,13 @@ - Tadaima Yuusha Boshuuchuu (SCD)(Jpn) + Tadaima Yuusha Boshuuchuu (Japan) 1993 Human Entertainment - + @@ -5894,10 +5894,10 @@ - Tadaima Yuusha Boshuuchuu - Sample Disc (SCD)(Jpn) + Tadaima Yuusha Boshuuchuu - Sample Disc (Japan) 1993 Human Entertainment - + @@ -5907,13 +5907,13 @@ - Taiheiki (CD)(Jpn) + Taiheiki (Japan) 1991 Intec - + @@ -5923,13 +5923,13 @@ - Tanjou Debut (ACD, SCD)(Jpn) + Tanjou Debut (ACD, SCD)(Japan) 1994 NEC Avenue - + @@ -5939,13 +5939,13 @@ - Tecmo World Cup Super Soccer (SCD)(Jpn) + Tecmo World Cup Super Soccer (Japan) 1992 Media Rings Corporation - + @@ -5955,13 +5955,13 @@ - Tekipaki Working Love (SCD)(Jpn) + Tekipaki Working Love (Japan) 1997 NEC Home Electronics - + @@ -5971,13 +5971,13 @@ - Tenchi Muyou! Ryououki (SCD)(Jpn) + Tenchi Muyou! Ryououki (Japan) 1995 NEC Avenue - + @@ -5987,13 +5987,13 @@ - Tenchi wo Kurau (SCD)(Jpn) + Tenchi wo Kurau (Japan) 1994 NEC Avenue - + @@ -6003,13 +6003,13 @@ - Tengai Makyou - Fuu'un Kabuki Den Shutsugeki no Sho (SCD)(Jpn) + Tengai Makyou - Fuu'un Kabuki Den Shutsugeki no Sho (Japan) 1993 Hudson - + @@ -6019,13 +6019,13 @@ - Tengai Makyou - Kabuki Ittou Ryoudan (ACD)(Jpn) + Tengai Makyou - Kabuki Ittou Ryoudan (Japan) 1995 Hudson - + @@ -6035,13 +6035,13 @@ - Tengai Makyou - Ziria (CD)(Jpn) + Tengai Makyou - Ziria (Japan) 1989 Hudson - + @@ -6051,13 +6051,13 @@ - Tengai Makyou - Ziria Hibaihin (SCD)(Jpn) + Tengai Makyou - Ziria Hibaihin (Japan) 1992 Hudson - + @@ -6067,13 +6067,13 @@ - Tengai Makyou II - Manji Maru (SCD)(Jpn) + Tengai Makyou II - Manji Maru (Japan) 1992 Hudson - + @@ -6083,13 +6083,13 @@ - Tenshi no Uta (SCD)(Jpn) + Tenshi no Uta (Japan) 1991 Nihon Telenet - + @@ -6099,13 +6099,13 @@ - Tenshi no Uta II - Datenshi no Uta (SCD)(Jpn) + Tenshi no Uta II - Datenshi no Uta (Japan) 1993 Nihon Telenet - + @@ -6115,13 +6115,13 @@ - Terraforming (CD, SCD)(Jpn) + Terraforming (CD, SCD)(Japan) 1992 Right Stuff - + @@ -6131,13 +6131,13 @@ - The Atlas - Renaissance Voyager (ACD, SCD)(Jpn) + The Atlas - Renaissance Voyager (ACD, SCD)(Japan) 1994 Artdink - + @@ -6147,13 +6147,13 @@ - The Davis Cup Tennis (SCD)(Jpn) + The Davis Cup Tennis (Japan) 1992 Micro World - + @@ -6163,13 +6163,13 @@ - The Kick Boxing (SCD)(Jpn) + The Kick Boxing (Japan) 1992 Micro World - + @@ -6179,12 +6179,12 @@ - The Manhole (CD)(Jpn) + The Manhole (Japan) 1991 Sunsoft - + @@ -6194,13 +6194,13 @@ - The Pro Yakyuu (CD)(Jpn) + The Pro Yakyuu (Japan) 1990 Intec - + @@ -6210,13 +6210,13 @@ - The Pro Yakyuu Super '94 (SCD)(Jpn) + The Pro Yakyuu Super '94 (Japan) 1994 Intec - + @@ -6226,13 +6226,13 @@ - The Pro Yakyuu Super (SCD)(Jpn) + The Pro Yakyuu Super (Japan) 1992 Intec - + @@ -6242,13 +6242,13 @@ - The TV Show (SCD)(Jpn) + The TV Show (Japan) 1995 Right Stuff - + @@ -6258,13 +6258,13 @@ - Tokimeki Memorial [Imperfect] (SCD)(Jpn, HRKM70414-1FAAT) + Tokimeki Memorial [Imperfect] (Japan, HRKM70414-1FAAT) 1994 Konami - + @@ -6276,13 +6276,13 @@ - Tokimeki Memorial (SCD)(Jpn, HRKM70701-2FAAT) + Tokimeki Memorial (Japan, HRKM70701-2FAAT) 1994 Konami - + @@ -6309,13 +6309,13 @@ - Tokimeki Memorial (SCD)(Jpn, HRKM71014-3FAAT) + Tokimeki Memorial (Japan, HRKM71014-3FAAT) 1994 Konami - + @@ -6327,13 +6327,13 @@ - Top wo Nerae! GunBuster Volume I (SCD)(Jpn) + Top wo Nerae! GunBuster Volume I (Japan) 1992 Riverhill Software - + @@ -6360,13 +6360,13 @@ - Top wo Nerae! GunBuster Volume II (SCD)(Jpn) + Top wo Nerae! GunBuster Volume II (Japan) 1993 Riverhill Software - + @@ -6376,13 +6376,13 @@ - Travel Epuru (SCD)(Jpn) + Travel Epuru (Japan) 1992 Nihon Telenet - + @@ -6392,13 +6392,13 @@ - Travelers! Densetsu wo ButtobaSe [Imperfect] (SCD)(Jpn) + Travelers! Densetsu wo ButtobaSe [Imperfect] (Japan) 1994 Victor Entertainment - + @@ -6408,13 +6408,13 @@ - Uchuu Senkan Yamato (SCD)(Jpn) + Uchuu Senkan Yamato (Japan) 1992 Human Entertainment - + @@ -6424,13 +6424,13 @@ - Ultrabox II Gou (CD)(Jpn) + Ultrabox II Gou (Japan) 1990 Victor Entertainment - + @@ -6440,13 +6440,13 @@ - Ultrabox III Gou (CD)(Jpn) + Ultrabox III Gou (Japan) 1990 Victor Entertainment - + @@ -6456,13 +6456,13 @@ - Ultrabox IV Gou (CD)(Jpn) + Ultrabox IV Gou (Japan) 1991 Victor Entertainment - + @@ -6472,13 +6472,13 @@ - Ultrabox V Gou (CD)(Jpn) + Ultrabox V Gou (Japan) 1991 Victor Entertainment - + @@ -6488,13 +6488,13 @@ - Ultrabox VI Gou (CD)(Jpn) + Ultrabox VI Gou (Japan) 1992 Victor Entertainment - + @@ -6504,13 +6504,13 @@ - Ultrabox Sohkan Gou (CD)(Jpn) + Ultrabox Sohkan Gou (Japan) 1990 Victor Entertainment - + @@ -6520,13 +6520,13 @@ - Urusei Yatsura - Stay With You (CD)(Jpn) + Urusei Yatsura - Stay With You (Japan) 1990 Hudson - + @@ -6544,13 +6544,13 @@ - Valis II - The Fantasm Soldier (CD)(Jpn) + Valis II - The Fantasm Soldier (Japan) 1989 Nihon Telenet - + @@ -6560,13 +6560,13 @@ - Valis III - The Fantasm Soldier (CD)(Jpn) + Valis III - The Fantasm Soldier (Japan) 1990 Nihon Telenet - + @@ -6576,13 +6576,13 @@ - Valis IV - The Fantasm Soldier (CD)(Jpn) + Valis IV - The Fantasm Soldier (Japan) 1991 Nihon Telenet - + @@ -6592,13 +6592,13 @@ - Vasteel (CD)(Jpn) + Vasteel (Japan) 1990 Human Entertainment - + @@ -6608,13 +6608,13 @@ - Vasteel II (ACD, SCD)(Jpn) + Vasteel II (ACD, SCD)(Japan) 1994 Human Entertainment - + @@ -6624,13 +6624,13 @@ - Virgin Dream (SCD)(Jpn) + Virgin Dream (Japan) 1996 Tokuma Shoten - + @@ -6640,13 +6640,13 @@ - Where in the World is Carmen Sandiego? (CD)(Jpn) + Where in the World is Carmen Sandiego? (Japan) 1990 Pack-In-Video - + @@ -6656,13 +6656,13 @@ - Winds of Thunder (SCD)(Jpn) + Winds of Thunder (Japan) 1993 Hudson - + @@ -6672,13 +6672,13 @@ - Wizardry I II (SCD)(Jpn) + Wizardry I II (Japan) 1993 Naxat Soft - + @@ -6688,13 +6688,13 @@ - Wizardry III IV (SCD)(Jpn) + Wizardry III IV (Japan) 1994 Naxat Soft - + @@ -6704,13 +6704,13 @@ - Wizardry V - Heart of the Maelstrom (SCD)(Jpn) + Wizardry V - Heart of the Maelstrom (Japan) 1992 Naxat Soft - + @@ -6720,13 +6720,13 @@ - World Heroes II (ACD)(Jpn) + World Heroes II (Japan) 1994 Hudson - + @@ -6736,11 +6736,11 @@ - World Heroes II - Sample Disc (ACD)(Jpn) + World Heroes II - Sample Disc (Japan) 1994 Hudson - + @@ -6750,13 +6750,13 @@ - Wrestling Angels - Double Impact (ACD, SCD)(Jpn) + Wrestling Angels - Double Impact (ACD, SCD)(Japan) 1995 NEC Home Electronics - + @@ -6767,13 +6767,13 @@ - Xak I & II (SCD)(Jpn) + Xak I & II (Japan) 1992 Nihon Telenet - + @@ -6783,13 +6783,13 @@ - Xak III - The Eternal Recurrence (SCD)(Jpn) + Xak III - The Eternal Recurrence (Japan) 1994 NEC Home Electronics - + @@ -6799,13 +6799,13 @@ - Yamamura Misa Suspense - Kinsenka Kyou Ezara Satsujin Jiken (SCD)(Jpn) + Yamamura Misa Suspense - Kinsenka Kyou Ezara Satsujin Jiken (Japan) 1992 Naxat Soft - + @@ -6815,13 +6815,13 @@ - Yami no Ketsuzoku Harukanaru Kioku (SCD)(Jpn) + Yami no Ketsuzoku Harukanaru Kioku (Japan) 1993 Naxat Soft - + @@ -6831,13 +6831,13 @@ - Yawara! (SCD)(Jpn) + Yawara! (Japan) 1992 Sofix - + @@ -6847,13 +6847,13 @@ - Yawara! II (SCD)(Jpn) + Yawara! II (Japan) 1994 Sofix - + @@ -6863,13 +6863,13 @@ - Ys Book I II (CD)(Jpn) + Ys Book I II (Japan) 1989 Hudson - + @@ -6879,13 +6879,13 @@ - Ys III - Wanderers from Ys (CD)(Jpn) + Ys III - Wanderers from Ys (Japan) 1991 Hudson - + @@ -6895,13 +6895,13 @@ - Ys IV - The Dawn of Ys (SCD)(Jpn, HCD3051-4-1108-R1F) + Ys IV - The Dawn of Ys (Japan, HCD3051-4-1108-R1F) 1993 Hudson - + @@ -6911,13 +6911,13 @@ - Ys IV - The Dawn of Ys (SCD)(Jpn, HCD3051-5-1116-R1P) + Ys IV - The Dawn of Ys (Japan, HCD3051-5-1116-R1P) 1993 Hudson - + @@ -6927,13 +6927,13 @@ - Yu Yu Hakusho (SCD)(Jpn) + Yu Yu Hakusho (Japan) 1993 Banpresto - + @@ -6943,13 +6943,13 @@ - Zan - Kagerou no Toki (CD)(Jpn) + Zan - Kagerou no Toki (Japan) 1991 Taito - + @@ -6959,13 +6959,13 @@ - Zero 4 Champ II (SCD)(Jpn) + Zero 4 Champ II (Japan) 1993 Media Rings Corporation - + @@ -6975,13 +6975,13 @@ - Zero Wing (CD)(Jpn) + Zero Wing (Japan) 1992 Naxat Soft - + @@ -6993,11 +6993,11 @@ - 3 in 1 DUO Demo CD (SCD)(USA) + 3 in 1 DUO Demo CD (USA) 199? Hudson Soft / Red - + @@ -7007,12 +7007,12 @@ - 4 in 1 Super CD (SCD)(USA) + 4 in 1 Super CD (USA) 1992 Hudson Soft / Red - + @@ -7022,11 +7022,11 @@ - The Addams Family (CD)(USA) + The Addams Family (USA) 1991 ICOM Simulations - + @@ -7036,11 +7036,11 @@ - Beyond Shadowgate (SCD)(USA) + Beyond Shadowgate (USA) 1993 ICOM Simulations - + @@ -7050,11 +7050,11 @@ - Bonk III - Bonk's Big Adventure (SCD)(USA) + Bonk III - Bonk's Big Adventure (USA) 1993 Hudson Soft / Red - + @@ -7064,11 +7064,11 @@ - Buster Bros. (CD)(USA) + Buster Bros. (USA) 1993 Capcom - + @@ -7078,11 +7078,11 @@ - Camp California (SCD)(USA) + Camp California (USA) 1993 ICOM Simulations - + @@ -7092,11 +7092,11 @@ - Cosmic Fantasy II (CD)(USA) + Cosmic Fantasy II (USA) 1992 Nihon Telenet - + @@ -7106,11 +7106,11 @@ - Cotton - Fantastic Night Dreams (SCD)(USA) + Cotton - Fantastic Night Dreams (USA) 1993 Success - + @@ -7120,11 +7120,11 @@ - Dragon Slayer - The Legend of Heroes (SCD)(USA) + Dragon Slayer - The Legend of Heroes (USA) 1992 Falcom - + @@ -7134,11 +7134,11 @@ - Dungeon Explorer II (SCD)(USA) + Dungeon Explorer II (USA) 1993 Hudson Soft - + @@ -7148,11 +7148,11 @@ - Dungeon Master - Theron's Quest (SCD)(USA) + Dungeon Master - Theron's Quest (USA) 1993 FTL Games - + @@ -7162,11 +7162,11 @@ - Exile (CD)(USA) + Exile (USA) 1992 Telnet Japan - + @@ -7176,11 +7176,11 @@ - Exile II - Wicked Phenomenon (SCD)(USA) + Exile II - Wicked Phenomenon (USA) 1993 Telnet Japan - + @@ -7190,11 +7190,11 @@ - Fantasy Star Soldier [prototype] (SCD)(USA) + Fantasy Star Soldier [prototype] (USA) 199? Inter State - + @@ -7204,11 +7204,11 @@ - Fighting Street (CD)(USA) + Fighting Street (USA) 1989 Capcom - + @@ -7218,11 +7218,11 @@ - Final Zone II (CD)(USA) + Final Zone II (USA) 1990 Telnet Japan - + @@ -7232,11 +7232,11 @@ - Forgotten Worlds (SCD)(USA) + Forgotten Worlds (USA) 1992 Capcom - + @@ -7246,11 +7246,11 @@ - Godzilla (SCD)(USA) + Godzilla (USA) 1993 Toho - + @@ -7260,11 +7260,11 @@ - J. B. Harold Murder Club (CD)(USA) + J. B. Harold Murder Club (USA) 1991 Riverhill Soft - + @@ -7274,11 +7274,11 @@ - Implode (SCD)(USA) + Implode (USA) 2002 MindRec - + @@ -7289,11 +7289,11 @@ - It Came from the Desert (CD)(USA) + It Came from the Desert (USA) 1992 Cinemaware - + @@ -7303,11 +7303,11 @@ - Jack Nicklaus Turbo Golf (CD)(USA) + Jack Nicklaus Turbo Golf (USA) 1990 Accolade - + @@ -7317,11 +7317,11 @@ - John Madden Duo CD Football (SCD)(USA) + John Madden Duo CD Football (USA) 1993 Electronic Arts - + @@ -7331,11 +7331,11 @@ - Last Alert (CD)(USA) + Last Alert (USA) 1990 Telnet Japan - + @@ -7345,11 +7345,11 @@ - Loom (SCD)(USA) + Loom (USA) 1992 Lucas Arts - + @@ -7359,11 +7359,11 @@ - Lords of the Rising Sun (CD)(USA) + Lords of the Rising Sun (USA) 1992 Cinemaware - + @@ -7373,11 +7373,11 @@ - Lords of Thunder (SCD)(USA) + Lords of Thunder (USA) 1993 Hudson Soft / Red - + @@ -7387,11 +7387,11 @@ - Magical Dinosaur Tour (CD)(USA) + Magical Dinosaur Tour (USA) 1990 Yazawa Science Office - + @@ -7401,11 +7401,11 @@ - Might and Magic III - Isles of Terra (SCD)(USA) + Might and Magic III - Isles of Terra (USA) 1993 New World Computing - + @@ -7415,11 +7415,11 @@ - Monster Lair (CD)(USA) + Monster Lair (USA) 1989 Westone - + @@ -7429,11 +7429,11 @@ - Prince of Persia (SCD)(USA) + Prince of Persia (USA) 1992 Brøderbund - + @@ -7443,11 +7443,11 @@ - Riot Zone (SCD)(USA) + Riot Zone (USA) 1993 Westone - + @@ -7457,11 +7457,11 @@ - Shadow of the Beast (SCD)(USA) + Shadow of the Beast (USA) 1992 Psygnosis - + @@ -7471,11 +7471,11 @@ - Shape Shifter (SCD)(USA) + Shape Shifter (USA) 1992 ICOM Simulations - + @@ -7485,11 +7485,11 @@ - Sherlock Holmes Consulting Detective (CD)(USA) + Sherlock Holmes Consulting Detective (USA) 1991 Sleuth Publications - + @@ -7503,7 +7503,7 @@ 1993 Sleuth Publications - + @@ -7513,11 +7513,11 @@ - Sim Earth - The Living Planet (SCD)(USA) + Sim Earth - The Living Planet (USA) 1993 Maxis - + @@ -7527,11 +7527,11 @@ - Splash Lake (CD)(USA) + Splash Lake (USA) 1992 NEC Avenue - + @@ -7541,11 +7541,11 @@ - Super Air Zonk (SCD)(USA) + Super Air Zonk (USA) 1993 Hudson Soft / Red - + @@ -7559,7 +7559,7 @@ 1993 Syd Mead - + @@ -7569,11 +7569,11 @@ - The Dynastic Hero (SCD)(USA) + The Dynastic Hero (USA) 1993 Westone - + @@ -7583,11 +7583,11 @@ - Valis II (CD)(USA) + Valis II (USA) 1990 Telnet Japan - + @@ -7597,11 +7597,11 @@ - Valis III (CD)(USA) + Valis III (USA) 1992 Telnet Japan - + @@ -7611,11 +7611,11 @@ - Vasteel (CD)(USA) + Vasteel (USA) 1993 Human - + @@ -7625,11 +7625,11 @@ - Ys Book I II (CD)(USA) + Ys Book I II (USA) 1990 Falcom - + @@ -7639,11 +7639,11 @@ - Ys III - Wanderers from Ys (CD)(USA) + Ys III - Wanderers from Ys (USA) 1991 Falcom - + @@ -7657,11 +7657,11 @@ - Meteor Blaster DX (SCD)(USA) + Meteor Blaster DX (USA) 2004 MindRec - + @@ -7672,11 +7672,11 @@ - Bikini Girls (CD)(USA) + Bikini Girls (USA) 199? Excite Software - + @@ -7686,11 +7686,11 @@ - The Local Girls of Hawaii (CD)(USA) + The Local Girls of Hawaii (USA) 199? Excite Software - + @@ -7700,11 +7700,11 @@ - Hawiian Island Girls (CD)(USA) + Hawiian Island Girls (USA) 199? Excite Software - + @@ -7716,7 +7716,7 @@ - Hi-Leg Fantasy (GECD)(Jpn) + Hi-Leg Fantasy (GECD)(Japan) 1994 Game Express @@ -7731,7 +7731,7 @@ - AV Tanjou (GECD)(Jpn) + AV Tanjou (GECD)(Japan) 1995 Game Express @@ -7745,7 +7745,7 @@ - Bishoujo Janshi Idol Pai (GECD)(Jpn) + Bishoujo Janshi Idol Pai (GECD)(Japan) 1995 Game Express @@ -7760,7 +7760,7 @@ - CD Bishoujo Pachinko Kyuuma Yon Shimai [Imperfect] (GECD)(Jpn) + CD Bishoujo Pachinko Kyuuma Yon Shimai [Imperfect] (Japan)(Jpn) 1995 Game Express @@ -7775,7 +7775,7 @@ - CD Hanafuda Bishoujo Fan Club (GECD)(Jpn) + CD Hanafuda Bishoujo Fan Club (GECD)(Japan) 1994 Game Express @@ -7790,7 +7790,7 @@ - CD Mahjong Bishoujo Chuushinha (GECD)(Jpn) + CD Mahjong Bishoujo Chuushinha (GECD)(Japan) 1993 Game Express @@ -7805,7 +7805,7 @@ - CD Pachisuro Bishoujo Gambler (GECD)(Jpn) + CD Pachisuro Bishoujo Gambler (GECD)(Japan) 1994 Game Express diff -Nru mame-0.250+dfsg.1/hash/pce_tourvision.xml mame-0.251+dfsg.1/hash/pce_tourvision.xml --- mame-0.250+dfsg.1/hash/pce_tourvision.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pce_tourvision.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pce.xml mame-0.251+dfsg.1/hash/pce.xml --- mame-0.250+dfsg.1/hash/pce.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pce.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -67,6 +67,7 @@ + @@ -2632,6 +2633,7 @@ + @@ -2674,6 +2676,7 @@ + @@ -3930,6 +3933,7 @@ + @@ -4415,7 +4419,7 @@ - CD-Rom System Card (v1.0) + CD-ROM System Card (v1.0) 19?? Hudson @@ -4426,7 +4430,7 @@ - CD-Rom System Card (v2.0) + CD-ROM System Card (v2.0) 19?? Hudson @@ -4437,7 +4441,7 @@ - CD-Rom System Card (v2.1) + CD-ROM System Card (v2.1) 19?? Hudson @@ -4459,7 +4463,7 @@ - Super CD-Rom System Card (v3.0) + CD-ROM² Super System Card (v3.0) 19?? Hudson diff -Nru mame-0.250+dfsg.1/hash/pcfx.xml mame-0.251+dfsg.1/hash/pcfx.xml --- mame-0.250+dfsg.1/hash/pcfx.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pcfx.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pcw16.xml mame-0.251+dfsg.1/hash/pcw16.xml --- mame-0.250+dfsg.1/hash/pcw16.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pcw16.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pcw.xml mame-0.251+dfsg.1/hash/pcw.xml --- mame-0.250+dfsg.1/hash/pcw.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pcw.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pcx_flop.xml mame-0.251+dfsg.1/hash/pcx_flop.xml --- mame-0.250+dfsg.1/hash/pcx_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pcx_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pdp1_ptp.xml mame-0.251+dfsg.1/hash/pdp1_ptp.xml --- mame-0.250+dfsg.1/hash/pdp1_ptp.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pdp1_ptp.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pegasus_cart.xml mame-0.251+dfsg.1/hash/pegasus_cart.xml --- mame-0.250+dfsg.1/hash/pegasus_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pegasus_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pencil2.xml mame-0.251+dfsg.1/hash/pencil2.xml --- mame-0.250+dfsg.1/hash/pencil2.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pencil2.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pentagon_cass.xml mame-0.251+dfsg.1/hash/pentagon_cass.xml --- mame-0.250+dfsg.1/hash/pentagon_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pentagon_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pet_flop.xml mame-0.251+dfsg.1/hash/pet_flop.xml --- mame-0.250+dfsg.1/hash/pet_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pet_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pet_hdd.xml mame-0.251+dfsg.1/hash/pet_hdd.xml --- mame-0.250+dfsg.1/hash/pet_hdd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pet_hdd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pet_quik.xml mame-0.251+dfsg.1/hash/pet_quik.xml --- mame-0.250+dfsg.1/hash/pet_quik.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pet_quik.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pet_rom.xml mame-0.251+dfsg.1/hash/pet_rom.xml --- mame-0.250+dfsg.1/hash/pet_rom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pet_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/phc25_cass.xml mame-0.251+dfsg.1/hash/phc25_cass.xml --- mame-0.250+dfsg.1/hash/phc25_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/phc25_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/picno.xml mame-0.251+dfsg.1/hash/picno.xml --- mame-0.250+dfsg.1/hash/picno.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/picno.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pippin_flop.xml mame-0.251+dfsg.1/hash/pippin_flop.xml --- mame-0.250+dfsg.1/hash/pippin_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pippin_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pippin.xml mame-0.251+dfsg.1/hash/pippin.xml --- mame-0.250+dfsg.1/hash/pippin.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pippin.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pi_storyreader_cart.xml mame-0.251+dfsg.1/hash/pi_storyreader_cart.xml --- mame-0.250+dfsg.1/hash/pi_storyreader_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pi_storyreader_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pi_storyreader_v2_cart.xml mame-0.251+dfsg.1/hash/pi_storyreader_v2_cart.xml --- mame-0.250+dfsg.1/hash/pi_storyreader_v2_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pi_storyreader_v2_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/playmaker.xml mame-0.251+dfsg.1/hash/playmaker.xml --- mame-0.250+dfsg.1/hash/playmaker.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/playmaker.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/plus4_flop.xml mame-0.251+dfsg.1/hash/plus4_flop.xml --- mame-0.250+dfsg.1/hash/plus4_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/plus4_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pmd85_cass.xml mame-0.251+dfsg.1/hash/pmd85_cass.xml --- mame-0.250+dfsg.1/hash/pmd85_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pmd85_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pokemini.xml mame-0.251+dfsg.1/hash/pokemini.xml --- mame-0.250+dfsg.1/hash/pokemini.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pokemini.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/poly_flop.xml mame-0.251+dfsg.1/hash/poly_flop.xml --- mame-0.250+dfsg.1/hash/poly_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/poly_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/princ.xml mame-0.251+dfsg.1/hash/princ.xml --- mame-0.250+dfsg.1/hash/princ.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/princ.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/prof80.xml mame-0.251+dfsg.1/hash/prof80.xml --- mame-0.250+dfsg.1/hash/prof80.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/prof80.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/psi98.xml mame-0.251+dfsg.1/hash/psi98.xml --- mame-0.250+dfsg.1/hash/psi98.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/psi98.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/psion1.xml mame-0.251+dfsg.1/hash/psion1.xml --- mame-0.250+dfsg.1/hash/psion1.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/psion1.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/psion2.xml mame-0.251+dfsg.1/hash/psion2.xml --- mame-0.250+dfsg.1/hash/psion2.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/psion2.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pv1000.xml mame-0.251+dfsg.1/hash/pv1000.xml --- mame-0.250+dfsg.1/hash/pv1000.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pv1000.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/px4_cart.xml mame-0.251+dfsg.1/hash/px4_cart.xml --- mame-0.250+dfsg.1/hash/px4_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/px4_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/px8_cart.xml mame-0.251+dfsg.1/hash/px8_cart.xml --- mame-0.250+dfsg.1/hash/px8_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/px8_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/pyl601.xml mame-0.251+dfsg.1/hash/pyl601.xml --- mame-0.250+dfsg.1/hash/pyl601.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/pyl601.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ql_cart.xml mame-0.251+dfsg.1/hash/ql_cart.xml --- mame-0.250+dfsg.1/hash/ql_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ql_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ql_cass.xml mame-0.251+dfsg.1/hash/ql_cass.xml --- mame-0.250+dfsg.1/hash/ql_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ql_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ql_flop.xml mame-0.251+dfsg.1/hash/ql_flop.xml --- mame-0.250+dfsg.1/hash/ql_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ql_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/quizwiz.xml mame-0.251+dfsg.1/hash/quizwiz.xml --- mame-0.250+dfsg.1/hash/quizwiz.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/quizwiz.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/r8_card.xml mame-0.251+dfsg.1/hash/r8_card.xml --- mame-0.250+dfsg.1/hash/r8_card.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/r8_card.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/radio86_cass.xml mame-0.251+dfsg.1/hash/radio86_cass.xml --- mame-0.250+dfsg.1/hash/radio86_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/radio86_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/rainbow.xml mame-0.251+dfsg.1/hash/rainbow.xml --- mame-0.250+dfsg.1/hash/rainbow.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/rainbow.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/roland_tnsc1.xml mame-0.251+dfsg.1/hash/roland_tnsc1.xml --- mame-0.250+dfsg.1/hash/roland_tnsc1.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/roland_tnsc1.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/rx78_cart.xml mame-0.251+dfsg.1/hash/rx78_cart.xml --- mame-0.250+dfsg.1/hash/rx78_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/rx78_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/rz1_cass.xml mame-0.251+dfsg.1/hash/rz1_cass.xml --- mame-0.250+dfsg.1/hash/rz1_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/rz1_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -3,7 +3,7 @@ - 80's Drums (Samples) + 80's Drums (samples) 2016 <homebrew> @@ -48,7 +48,7 @@ - Four Cymbals (Samples) + Four Cymbals (samples) 2016 <homebrew> @@ -61,7 +61,7 @@ - Hard Drums (Samples) + Hard Drums (samples) 2016 <homebrew> diff -Nru mame-0.250+dfsg.1/hash/sagafox.xml mame-0.251+dfsg.1/hash/sagafox.xml --- mame-0.250+dfsg.1/hash/sagafox.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sagafox.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/sage2.xml mame-0.251+dfsg.1/hash/sage2.xml --- mame-0.250+dfsg.1/hash/sage2.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sage2.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/saitek_egr.xml mame-0.251+dfsg.1/hash/saitek_egr.xml --- mame-0.250+dfsg.1/hash/saitek_egr.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/saitek_egr.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/saitek_kso.xml mame-0.251+dfsg.1/hash/saitek_kso.xml --- mame-0.250+dfsg.1/hash/saitek_kso.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/saitek_kso.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/saitek_schess.xml mame-0.251+dfsg.1/hash/saitek_schess.xml --- mame-0.250+dfsg.1/hash/saitek_schess.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/saitek_schess.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/samcoupe_cass.xml mame-0.251+dfsg.1/hash/samcoupe_cass.xml --- mame-0.250+dfsg.1/hash/samcoupe_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/samcoupe_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/sat_vccart.xml mame-0.251+dfsg.1/hash/sat_vccart.xml --- mame-0.250+dfsg.1/hash/sat_vccart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sat_vccart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/sawatte.xml mame-0.251+dfsg.1/hash/sawatte.xml --- mame-0.250+dfsg.1/hash/sawatte.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sawatte.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/sbrain.xml mame-0.251+dfsg.1/hash/sbrain.xml --- mame-0.250+dfsg.1/hash/sbrain.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sbrain.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/sc3000_cart.xml mame-0.251+dfsg.1/hash/sc3000_cart.xml --- mame-0.250+dfsg.1/hash/sc3000_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sc3000_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/sc3000_cass.xml mame-0.251+dfsg.1/hash/sc3000_cass.xml --- mame-0.250+dfsg.1/hash/sc3000_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sc3000_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/scv.xml mame-0.251+dfsg.1/hash/scv.xml --- mame-0.250+dfsg.1/hash/scv.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/scv.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/sega_beena_cart.xml mame-0.251+dfsg.1/hash/sega_beena_cart.xml --- mame-0.250+dfsg.1/hash/sega_beena_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sega_beena_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,9 +1,9 @@ - + diff -Nru mame-0.250+dfsg.1/hash/segacd.xml mame-0.251+dfsg.1/hash/segacd.xml --- mame-0.250+dfsg.1/hash/segacd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/segacd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/sf7000.xml mame-0.251+dfsg.1/hash/sf7000.xml --- mame-0.250+dfsg.1/hash/sf7000.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sf7000.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/sg1000.xml mame-0.251+dfsg.1/hash/sg1000.xml --- mame-0.250+dfsg.1/hash/sg1000.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sg1000.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/sgi_mips.xml mame-0.251+dfsg.1/hash/sgi_mips.xml --- mame-0.250+dfsg.1/hash/sgi_mips.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sgi_mips.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/sgx.xml mame-0.251+dfsg.1/hash/sgx.xml --- mame-0.250+dfsg.1/hash/sgx.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sgx.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/singingstarkaraoke_cart.xml mame-0.251+dfsg.1/hash/singingstarkaraoke_cart.xml --- mame-0.250+dfsg.1/hash/singingstarkaraoke_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/singingstarkaraoke_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/sitcom.xml mame-0.251+dfsg.1/hash/sitcom.xml --- mame-0.250+dfsg.1/hash/sitcom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sitcom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/smarttv_cart.xml mame-0.251+dfsg.1/hash/smarttv_cart.xml --- mame-0.250+dfsg.1/hash/smarttv_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/smarttv_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/smc777.xml mame-0.251+dfsg.1/hash/smc777.xml --- mame-0.250+dfsg.1/hash/smc777.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/smc777.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -3945,6 +3945,18 @@ + + King's Quest - Quest for the Crown (USA, prototype, 19890203) + 1989 + Parker Brothers + + + + + + + + King & Balloon (Korea) 19?? @@ -4614,6 +4626,20 @@ Sega + + + + + + + + + + Monopoly (USA, prototype, alt) + 1988 + Sega + + @@ -6311,6 +6337,21 @@ + + Super Monaco GP (USA, prototype) + 1990 + Sega + + + + + + + + + + + Promocao Especial M. System III Compact (Brazil, sample) 19?? @@ -6615,8 +6656,8 @@ 1987 Sega - - + + @@ -6643,8 +6684,8 @@ - - + + diff -Nru mame-0.250+dfsg.1/hash/snes_bspack.xml mame-0.251+dfsg.1/hash/snes_bspack.xml --- mame-0.250+dfsg.1/hash/snes_bspack.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/snes_bspack.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/snes_vkun.xml mame-0.251+dfsg.1/hash/snes_vkun.xml --- mame-0.250+dfsg.1/hash/snes_vkun.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/snes_vkun.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/snread.xml mame-0.251+dfsg.1/hash/snread.xml --- mame-0.250+dfsg.1/hash/snread.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/snread.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/snspell.xml mame-0.251+dfsg.1/hash/snspell.xml --- mame-0.250+dfsg.1/hash/snspell.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/snspell.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/socrates.xml mame-0.251+dfsg.1/hash/socrates.xml --- mame-0.250+dfsg.1/hash/socrates.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/socrates.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/softbox.xml mame-0.251+dfsg.1/hash/softbox.xml --- mame-0.250+dfsg.1/hash/softbox.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/softbox.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/sol20_cass.xml mame-0.251+dfsg.1/hash/sol20_cass.xml --- mame-0.250+dfsg.1/hash/sol20_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sol20_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/sorcerer_cart.xml mame-0.251+dfsg.1/hash/sorcerer_cart.xml --- mame-0.250+dfsg.1/hash/sorcerer_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sorcerer_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/sorcerer_flop.xml mame-0.251+dfsg.1/hash/sorcerer_flop.xml --- mame-0.250+dfsg.1/hash/sorcerer_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sorcerer_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/spc1000_cass.xml mame-0.251+dfsg.1/hash/spc1000_cass.xml --- mame-0.250+dfsg.1/hash/spc1000_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/spc1000_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/spc1500_cass.xml mame-0.251+dfsg.1/hash/spc1500_cass.xml --- mame-0.250+dfsg.1/hash/spc1500_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/spc1500_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/special_cass.xml mame-0.251+dfsg.1/hash/special_cass.xml --- mame-0.250+dfsg.1/hash/special_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/special_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/special_flop.xml mame-0.251+dfsg.1/hash/special_flop.xml --- mame-0.250+dfsg.1/hash/special_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/special_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/specpls3_flop.xml mame-0.251+dfsg.1/hash/specpls3_flop.xml --- mame-0.250+dfsg.1/hash/specpls3_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/specpls3_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ - Gyruss (Prototype) + Gyruss (prototype) 1984 Parker Software @@ -150,7 +150,7 @@ - Loco Motion (Prototype) + Loco Motion (prototype) 1984 Amazon Systems @@ -161,7 +161,7 @@ - Montezuma's Revenge (Prototype) + Montezuma's Revenge (prototype) 1984 Parker Software @@ -172,7 +172,7 @@ - Montezuma's Revenge (Prototype, Alt) + Montezuma's Revenge (prototype, alt) 1984 Parker Software @@ -183,7 +183,7 @@ - Popeye (Prototype) + Popeye (prototype) 1984 Parker Software @@ -194,7 +194,7 @@ - Q*Bert (Prototype) + Q*Bert (prototype) 1984 Parker Software @@ -205,7 +205,7 @@ - Return Of The Jedi - Death Star Battle (Prototype) + Return Of The Jedi - Death Star Battle (prototype) 1984 Parker Software @@ -216,7 +216,7 @@ - Star Wars (Prototype) + Star Wars (prototype) 1984 Parker Software @@ -227,7 +227,7 @@ - Star Wars (Prototype, Alt) + Star Wars (prototype, alt) 1984 Parker Software diff -Nru mame-0.250+dfsg.1/hash/spectrum_cass.xml mame-0.251+dfsg.1/hash/spectrum_cass.xml --- mame-0.250+dfsg.1/hash/spectrum_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/spectrum_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/spectrum_mgt_flop.xml mame-0.251+dfsg.1/hash/spectrum_mgt_flop.xml --- mame-0.250+dfsg.1/hash/spectrum_mgt_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/spectrum_mgt_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ + + + + + + English (Polish speaker) + 198? + <unknown> + + + + + + + + + + + + + + + + + German + 1984 + <unknown> + + + + + + + + + + + + + + German (older) + 198? + <unknown> + + + + + + + + + + + + + + Spanish + 198? + <unknown> + + + + + + + + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/hash/squale_cart.xml mame-0.251+dfsg.1/hash/squale_cart.xml --- mame-0.250+dfsg.1/hash/squale_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/squale_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ssem_quik.xml mame-0.251+dfsg.1/hash/ssem_quik.xml --- mame-0.250+dfsg.1/hash/ssem_quik.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ssem_quik.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/st_flop.xml mame-0.251+dfsg.1/hash/st_flop.xml --- mame-0.250+dfsg.1/hash/st_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/st_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/studio2.xml mame-0.251+dfsg.1/hash/studio2.xml --- mame-0.250+dfsg.1/hash/studio2.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/studio2.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ + + Name Club Disney (J 980614 V1.000) + 1998 + Sega + + + + + + + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/hash/super6.xml mame-0.251+dfsg.1/hash/super6.xml --- mame-0.250+dfsg.1/hash/super6.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/super6.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/hash/super80_cass.xml mame-0.251+dfsg.1/hash/super80_cass.xml --- mame-0.250+dfsg.1/hash/super80_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/super80_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/supracan.xml mame-0.251+dfsg.1/hash/supracan.xml --- mame-0.250+dfsg.1/hash/supracan.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/supracan.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/sv8000.xml mame-0.251+dfsg.1/hash/sv8000.xml --- mame-0.250+dfsg.1/hash/sv8000.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/sv8000.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/svi318_cart.xml mame-0.251+dfsg.1/hash/svi318_cart.xml --- mame-0.250+dfsg.1/hash/svi318_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/svi318_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/tandy200.xml mame-0.251+dfsg.1/hash/tandy200.xml --- mame-0.250+dfsg.1/hash/tandy200.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/tandy200.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/tandy6k.xml mame-0.251+dfsg.1/hash/tandy6k.xml --- mame-0.250+dfsg.1/hash/tandy6k.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/tandy6k.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/tc4.xml mame-0.251+dfsg.1/hash/tc4.xml --- mame-0.250+dfsg.1/hash/tc4.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/tc4.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/tek4052_cart.xml mame-0.251+dfsg.1/hash/tek4052_cart.xml --- mame-0.250+dfsg.1/hash/tek4052_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/tek4052_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/telestory_cart.xml mame-0.251+dfsg.1/hash/telestory_cart.xml --- mame-0.250+dfsg.1/hash/telestory_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/telestory_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ti74_cart.xml mame-0.251+dfsg.1/hash/ti74_cart.xml --- mame-0.250+dfsg.1/hash/ti74_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ti74_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/tiki100.xml mame-0.251+dfsg.1/hash/tiki100.xml --- mame-0.250+dfsg.1/hash/tiki100.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/tiki100.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/timex_cass.xml mame-0.251+dfsg.1/hash/timex_cass.xml --- mame-0.250+dfsg.1/hash/timex_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/timex_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/tntell.xml mame-0.251+dfsg.1/hash/tntell.xml --- mame-0.250+dfsg.1/hash/tntell.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/tntell.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/to770a_cart.xml mame-0.251+dfsg.1/hash/to770a_cart.xml --- mame-0.250+dfsg.1/hash/to770a_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/to770a_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/to7_cass.xml mame-0.251+dfsg.1/hash/to7_cass.xml --- mame-0.250+dfsg.1/hash/to7_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/to7_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/to7_qd.xml mame-0.251+dfsg.1/hash/to7_qd.xml --- mame-0.250+dfsg.1/hash/to7_qd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/to7_qd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/to8_cass.xml mame-0.251+dfsg.1/hash/to8_cass.xml --- mame-0.250+dfsg.1/hash/to8_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/to8_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/to8_qd.xml mame-0.251+dfsg.1/hash/to8_qd.xml --- mame-0.250+dfsg.1/hash/to8_qd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/to8_qd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/to_flop.xml mame-0.251+dfsg.1/hash/to_flop.xml --- mame-0.250+dfsg.1/hash/to_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/to_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ @@ -14,7 +14,7 @@ 1986 Microsoft - + @@ -26,7 +26,7 @@ 1989 Micromedia Systemes - + @@ -39,7 +39,7 @@ France Image Logiciel (FIL) - + @@ -51,7 +51,7 @@ 1988 <hack? (HMEL)> - + @@ -64,7 +64,7 @@ France Image Logiciel (FIL) - + @@ -76,7 +76,7 @@ 1988 Micromedia Systemes - + @@ -88,7 +88,7 @@ 2001 Prehis-To - ContacThoms - + @@ -100,13 +100,13 @@ 2000 Prehis-To - ContacThoms - + - + @@ -120,7 +120,7 @@ 200? Prehis-To - ContacThoms - + @@ -133,7 +133,7 @@ 1990 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -145,7 +145,7 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -157,7 +157,7 @@ 1985 Infogrames - + @@ -169,7 +169,7 @@ 1989 Micromedia Systemes - + @@ -181,7 +181,7 @@ 1989 Micromedia Systemes - + @@ -193,7 +193,7 @@ 1993 ContacThoms - + @@ -205,7 +205,7 @@ 1986 Triel - + @@ -218,7 +218,7 @@ Triel - + @@ -230,7 +230,7 @@ 2000 Prehis-To - + @@ -242,7 +242,7 @@ 2000 Prehis-To - + @@ -254,7 +254,7 @@ 1986 Infogrames - + @@ -267,7 +267,7 @@ Thomson - + @@ -280,7 +280,7 @@ Thomson - + @@ -293,7 +293,7 @@ Thomson - + @@ -305,7 +305,7 @@ 19?? <unknown> - + @@ -317,7 +317,7 @@ 19?? <unknown> - + @@ -330,7 +330,7 @@ <unknown> - + @@ -342,7 +342,7 @@ 1984 Free Game Blot - + @@ -354,7 +354,7 @@ 1984 Free Game Blot - + @@ -366,7 +366,7 @@ 1998 Prehis-To - + @@ -378,7 +378,7 @@ 1985 Free Game Blot - + @@ -390,7 +390,7 @@ 1985 Free Game Blot - + @@ -402,7 +402,7 @@ 1985 Free Game Blot - + @@ -414,7 +414,7 @@ 2008 Puls - + @@ -427,7 +427,7 @@ Chrysis - + @@ -439,7 +439,7 @@ 1987 France Image Logiciel (FIL) - Thomson - + @@ -451,7 +451,7 @@ 1989 <hack (J.L. Pronost)> - + @@ -463,7 +463,7 @@ 198? Infogrames - + @@ -475,7 +475,7 @@ 198? Infogrames - + @@ -487,7 +487,7 @@ 1986 France Image Logiciel (FIL) - + @@ -499,7 +499,7 @@ 19?? Yves-Wolff - + @@ -511,7 +511,7 @@ 198? Cofadel Service - + @@ -523,7 +523,7 @@ 198? Cofadel Service - + @@ -536,7 +536,7 @@ Cofadel Service - + @@ -549,7 +549,7 @@ Cofadel Service - + @@ -561,7 +561,7 @@ 1998 Prehis-To - + @@ -573,7 +573,7 @@ 1993 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -585,7 +585,7 @@ 198? <unknown> - + @@ -597,7 +597,7 @@ 1985 Free Game Blot - + @@ -609,7 +609,7 @@ 1985 Free Game Blot - + @@ -622,7 +622,7 @@ 2012 DCsoft? - + @@ -634,7 +634,7 @@ 2006 Daniel Coulom - + @@ -646,7 +646,7 @@ 2005? Daniel Coulom - + @@ -658,7 +658,7 @@ 198? <unknown> - + @@ -670,7 +670,7 @@ 198? Infogrames - + @@ -682,7 +682,7 @@ 2004 Prehis-To - + @@ -694,7 +694,7 @@ 1989 BC 109 Soft - + @@ -706,7 +706,7 @@ 1989 BC 109 Soft - + @@ -718,12 +718,12 @@ 198? <hack> - + - + @@ -736,7 +736,7 @@ 2008 DCsoft - + @@ -750,7 +750,7 @@ 2008 DCsoft - + @@ -762,7 +762,7 @@ 1985 Thomson - + @@ -774,7 +774,7 @@ 19?? <unknown> - + @@ -786,7 +786,7 @@ 19?? <unknown> - + @@ -798,7 +798,7 @@ 1995 Alexandre Pukall - + @@ -810,7 +810,7 @@ 1995 Alexandre Pukall - + @@ -823,7 +823,7 @@ TO TEK Editions - + @@ -835,7 +835,7 @@ 198? S. Devulder - + @@ -847,12 +847,12 @@ 1986 France Image Logiciel (FIL) - + - + @@ -864,7 +864,7 @@ 1986 France Image Logiciel (FIL) - + @@ -876,7 +876,7 @@ 2001 Prehis-To - + @@ -888,7 +888,7 @@ 198? Free Game Blot - + @@ -900,7 +900,7 @@ 198? Free Game Blot - + @@ -912,7 +912,7 @@ 198? Free Game Blot - + @@ -924,7 +924,7 @@ 1985 France Image Logiciel (FIL) - + @@ -936,7 +936,7 @@ 1985 France Image Logiciel (FIL) - + @@ -948,7 +948,7 @@ 2001 Prehis-To - + @@ -960,7 +960,7 @@ 2001 Prehis-To - + @@ -972,7 +972,7 @@ 19?? <unknown> - + @@ -985,7 +985,7 @@ Thomson - + @@ -998,7 +998,7 @@ Thomson - + @@ -1011,7 +1011,7 @@ Thomson - + @@ -1024,7 +1024,7 @@ Thomson - + @@ -1037,7 +1037,7 @@ Thomson - + @@ -1049,7 +1049,7 @@ 1985 Thomson - + @@ -1061,7 +1061,7 @@ 1985 Thomson - + @@ -1073,7 +1073,7 @@ 2001 Prehis-To - + @@ -1085,13 +1085,13 @@ 1999 Emmanuel Boulanger - + - + @@ -1104,13 +1104,13 @@ 1999 Emmanuel Boulanger - + - + @@ -1124,25 +1124,25 @@ Cedic/Nathan - + - + - + - + @@ -1156,25 +1156,25 @@ Cedic/Nathan - + - + - + - + @@ -1188,7 +1188,7 @@ Cedic/Nathan - + @@ -1200,7 +1200,7 @@ 1988 Wimpy - + @@ -1213,7 +1213,7 @@ Soli - + @@ -1225,7 +1225,7 @@ 19?? <unknown> - + @@ -1237,7 +1237,7 @@ 1987 France Image Logiciel (FIL) - + @@ -1249,7 +1249,7 @@ 1987 France Image Logiciel (FIL) - + @@ -1262,7 +1262,7 @@ France Image Logiciel (FIL) - + @@ -1275,7 +1275,7 @@ France Image Logiciel (FIL) - + @@ -1288,7 +1288,7 @@ France Image Logiciel (FIL) - + @@ -1300,7 +1300,7 @@ 1986 Mictel - + @@ -1312,7 +1312,7 @@ 198? Mictel - + @@ -1324,7 +1324,7 @@ 198? Mictel - + @@ -1337,7 +1337,7 @@ Thomson - + @@ -1350,7 +1350,7 @@ Thomson - + @@ -1362,7 +1362,7 @@ 1987 Loriciels - + @@ -1374,7 +1374,7 @@ 2002 Prehis-To - ContacThoms - + @@ -1386,7 +1386,7 @@ 1999 Prehis-To - + @@ -1398,13 +1398,13 @@ 19?? Claude Lietard - + - + @@ -1417,7 +1417,7 @@ 1991 Jr. Quiroz - + @@ -1430,7 +1430,7 @@ France Image Logiciel (FIL) - + @@ -1443,7 +1443,7 @@ France Image Logiciel (FIL) - + @@ -1456,7 +1456,7 @@ France Image Logiciel (FIL) - + @@ -1468,7 +1468,7 @@ 1985 Cedic/Nathan - + @@ -1480,7 +1480,7 @@ 1985 Cedic/Nathan - + @@ -1492,7 +1492,7 @@ 1989 Christian Belala - + @@ -1504,7 +1504,7 @@ 1997 Bledor-Soft - + @@ -1516,7 +1516,7 @@ 1997 Bledor-Soft - + @@ -1528,7 +1528,7 @@ 1985 France Image Logiciel (FIL) - Thomson - + @@ -1541,7 +1541,7 @@ TO TEK International - + @@ -1554,7 +1554,7 @@ 1985 CNDP - + @@ -1566,7 +1566,7 @@ 2001 Prehis-To - Mars - + @@ -1578,7 +1578,7 @@ 1987 France Image Logiciel (FIL) - Thomson - + @@ -1590,7 +1590,7 @@ 1987 France Image Logiciel (FIL) - Thomson - + @@ -1602,7 +1602,7 @@ 1999 Prehis-To - + @@ -1614,7 +1614,7 @@ 2000 Prehis-To - + @@ -1626,7 +1626,7 @@ 1999 Prehis-To - + @@ -1638,7 +1638,7 @@ 1989? <unknown> - + @@ -1650,7 +1650,7 @@ 19?? HCL - + @@ -1662,7 +1662,7 @@ 19?? <unknown> - + @@ -1674,7 +1674,7 @@ 19?? <unknown> - + @@ -1686,7 +1686,7 @@ 2001 Prehis-To - ContacThoms - + @@ -1698,7 +1698,7 @@ 198? Compagnie d'Informatique Ludique (CIL) - + @@ -1710,13 +1710,13 @@ 1996 L'Egypte Antique? - + - + @@ -1729,7 +1729,7 @@ 2015 DCsoft - + @@ -1741,7 +1741,7 @@ 2015 DCsoft - + @@ -1753,7 +1753,7 @@ 2015 DCsoft - + @@ -1765,7 +1765,7 @@ 2015 DCsoft - + @@ -1777,7 +1777,7 @@ 2015 DCsoft - + @@ -1789,7 +1789,7 @@ 2015 DCsoft - + @@ -1802,7 +1802,7 @@ 2013 DCsoft - + @@ -1814,13 +1814,13 @@ 1991? L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -1833,7 +1833,7 @@ 1986 Infogrames - + @@ -1845,7 +1845,7 @@ 1985 Free Game Blot - + @@ -1857,7 +1857,7 @@ 1985 Free Game Blot - + @@ -1869,7 +1869,7 @@ 1986 Centre National de Documentation Pedagogique (CNDP) - + @@ -1881,7 +1881,7 @@ 1986 Minipuce - + @@ -1894,7 +1894,7 @@ 1986 Minipuce - + @@ -1907,7 +1907,7 @@ 1985 France Image Logiciel (FIL) - + @@ -1919,7 +1919,7 @@ 1985 France Image Logiciel (FIL) - + @@ -1932,7 +1932,7 @@ France Image Logiciel (FIL) - Thomson - + @@ -1945,7 +1945,7 @@ France Image Logiciel (FIL) - Thomson - + @@ -1957,25 +1957,25 @@ 2002 Bledor-Soft - + - + - + - + @@ -1988,25 +1988,25 @@ 2002 Bledor-Soft - + - + - + - + @@ -2019,13 +2019,13 @@ 2002 Bledor-Soft - + - + @@ -2038,19 +2038,19 @@ 2000 Bledor-Soft - + - + - + @@ -2063,13 +2063,13 @@ 2000 Bledor-Soft - + - + @@ -2082,7 +2082,7 @@ 2000 Bledor-Soft - + @@ -2095,7 +2095,7 @@ 1986 Cobrasoft - + @@ -2107,7 +2107,7 @@ 199? ADT - + @@ -2119,7 +2119,7 @@ 198? Infogrames - + @@ -2132,7 +2132,7 @@ HMEL - + @@ -2144,7 +2144,7 @@ 1993 HMEL - + @@ -2156,7 +2156,7 @@ 2000 Bledor-Soft - + @@ -2169,7 +2169,7 @@ Bledor-Soft - + @@ -2181,7 +2181,7 @@ 1994 HMEL - + @@ -2193,7 +2193,7 @@ 1992 HMEL - + @@ -2205,7 +2205,7 @@ 1992 HMEL - + @@ -2218,7 +2218,7 @@ HMEL - + @@ -2232,7 +2232,7 @@ HMEL - + @@ -2245,7 +2245,7 @@ 1993 HMEL - + @@ -2283,7 +2283,7 @@ - + @@ -2295,13 +2295,13 @@ 1986 Thomson - + - + @@ -2314,13 +2314,13 @@ 1986 Thomson - + - + @@ -2333,13 +2333,13 @@ 1986 Thomson - + - + @@ -2352,7 +2352,7 @@ 1986 Thomson - + @@ -2364,13 +2364,13 @@ 1986 Thomson - + - + @@ -2383,13 +2383,13 @@ 1986 Thomson - + - + @@ -2402,7 +2402,7 @@ 1986 Thomson - + @@ -2414,7 +2414,7 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -2426,7 +2426,7 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -2438,7 +2438,7 @@ 1988 Cedic/Nathan - + @@ -2450,7 +2450,7 @@ 1988 Cedic/Nathan - + @@ -2464,31 +2464,31 @@ UCSD - + - + - + - + - + @@ -2504,7 +2504,7 @@ <unknown> - + @@ -2516,7 +2516,7 @@ 1999 Prehis-To - + @@ -2528,13 +2528,13 @@ 19?? L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -2547,7 +2547,7 @@ 2000 Prehis-To - + @@ -2559,13 +2559,13 @@ 1997 <unknown> - + - + @@ -2578,7 +2578,7 @@ 19?? <unknown> - + @@ -2591,7 +2591,7 @@ <unknown> - + @@ -2603,7 +2603,7 @@ 200? Serveur87 - + @@ -2615,7 +2615,7 @@ 198? <unknown> - + @@ -2627,13 +2627,13 @@ 19?? L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -2646,7 +2646,7 @@ 19?? <unknown> - + @@ -2658,7 +2658,7 @@ 1989 Micromedia Systemes - + @@ -2671,7 +2671,7 @@ <unknown> - + @@ -2684,7 +2684,7 @@ <unknown> - + @@ -2697,7 +2697,7 @@ <unknown> - + @@ -2709,7 +2709,7 @@ 19?? <unknown> - + @@ -2723,7 +2723,7 @@ 1986 Edition Informatique Logiciel (EDIL) - + @@ -2735,7 +2735,7 @@ 1986 Edition Informatique Logiciel (EDIL) - + @@ -2747,7 +2747,7 @@ 1986 Edition Informatique Logiciel (EDIL) - + @@ -2759,13 +2759,13 @@ 19?? <unknown> - + - + @@ -2778,13 +2778,13 @@ 19?? <unknown> - + - + @@ -2797,13 +2797,13 @@ 19?? <unknown> - + - + @@ -2816,13 +2816,13 @@ 19?? <unknown> - + - + @@ -2835,7 +2835,7 @@ 1985 Cobrasoft - + @@ -2847,7 +2847,7 @@ 19?? <unknown> - + @@ -2859,7 +2859,7 @@ 1985 G.L.E.M. - + @@ -2871,7 +2871,7 @@ 198? G.L.E.M. - + @@ -2883,7 +2883,7 @@ 2015 dcmoto.free.fr - + @@ -2895,7 +2895,7 @@ 2015 dcmoto.free.fr - + @@ -2909,7 +2909,7 @@ 1987 Coktel Vision - + @@ -2923,7 +2923,7 @@ Coktel Vision - + @@ -2937,7 +2937,7 @@ Microids - + @@ -2951,7 +2951,7 @@ Microids - + @@ -2963,7 +2963,7 @@ 19?? <unknown> - + @@ -2975,7 +2975,7 @@ 19?? <unknown> - + @@ -2987,7 +2987,7 @@ 198? Infogrames - + @@ -2999,7 +2999,7 @@ 198? Infogrames - + @@ -3011,7 +3011,7 @@ 198? Infogrames - + @@ -3023,7 +3023,7 @@ 198? Infogrames - + @@ -3035,7 +3035,7 @@ 198? Infogrames - + @@ -3047,7 +3047,7 @@ 198? Infogrames - + @@ -3059,7 +3059,7 @@ 198? Infogrames - + @@ -3071,13 +3071,13 @@ 198? Infogrames - + - + @@ -3090,13 +3090,13 @@ 198? Infogrames - + - + @@ -3109,13 +3109,13 @@ 198? Infogrames - + - + @@ -3128,13 +3128,13 @@ 198? Infogrames - + - + @@ -3147,13 +3147,13 @@ 1988 Infogrames - + - + @@ -3166,13 +3166,13 @@ 1988 Infogrames - + - + @@ -3186,25 +3186,25 @@ Infogrames - + - + - + - + @@ -3218,25 +3218,25 @@ Infogrames - + - + - + - + @@ -3250,25 +3250,25 @@ Infogrames - + - + - + - + @@ -3282,25 +3282,25 @@ Infogrames - + - + - + - + @@ -3314,13 +3314,13 @@ Infogrames - + - + @@ -3333,13 +3333,13 @@ 198? Infogrames - + - + @@ -3354,7 +3354,7 @@ <unknown> - + @@ -3368,7 +3368,7 @@ <unknown> - + @@ -3382,7 +3382,7 @@ <unknown> - + @@ -3394,13 +3394,13 @@ 198? Infogrames - + - + @@ -3413,7 +3413,7 @@ 198? Infogrames - + @@ -3425,7 +3425,7 @@ 198? Infogrames - + @@ -3437,7 +3437,7 @@ 19?? <unknown> - + @@ -3449,13 +3449,13 @@ 1987 Coktel Vision - + - + @@ -3468,7 +3468,7 @@ 1988 Infogrames - + @@ -3480,7 +3480,7 @@ 1988 Infogrames - + @@ -3492,7 +3492,7 @@ 1988 Infogrames - + @@ -3504,7 +3504,7 @@ 1988 Infogrames - + @@ -3516,7 +3516,7 @@ 1987 Titus Software - + @@ -3528,7 +3528,7 @@ 1987 Titus Software - + @@ -3542,7 +3542,7 @@ Titus Software - + @@ -3556,7 +3556,7 @@ Titus Software - + @@ -3570,7 +3570,7 @@ Titus Software - + @@ -3582,7 +3582,7 @@ 1986 France Image Logiciel (FIL) - + @@ -3594,7 +3594,7 @@ 1986 France Image Logiciel (FIL) - + @@ -3607,7 +3607,7 @@ 1986 France Image Logiciel (FIL) - + @@ -3620,7 +3620,7 @@ 198? Coktel Vision - + @@ -3632,7 +3632,7 @@ 198? <hack> - + @@ -3644,7 +3644,7 @@ 198? <hack> - + @@ -3656,7 +3656,7 @@ 198? <hack> - + @@ -3668,7 +3668,7 @@ 198? Coktel Vision - + @@ -3680,7 +3680,7 @@ 198? Coktel Vision - + @@ -3693,7 +3693,7 @@ 198? Coktel Vision - + @@ -3706,7 +3706,7 @@ 198? Coktel Vision - + @@ -3718,7 +3718,7 @@ 198? Coktel Vision - + @@ -3731,7 +3731,7 @@ 198? Coktel Vision - + @@ -3744,7 +3744,7 @@ 1986 Edition Informatique Logiciel (EDIL) - + @@ -3756,7 +3756,7 @@ 1987 Coktel Vision - + @@ -3769,7 +3769,7 @@ <unknown> - + @@ -3781,7 +3781,7 @@ 1988 Alexandre Pukall - + @@ -3793,7 +3793,7 @@ 1987 France Image Logiciel (FIL) - + @@ -3805,7 +3805,7 @@ 19?? <unknown> - + @@ -3817,7 +3817,7 @@ 19?? <unknown> - + @@ -3829,7 +3829,7 @@ 198? The Great Syntheman - + @@ -3841,7 +3841,7 @@ 198? The Great Syntheman - + @@ -3853,7 +3853,7 @@ 19?? <unknown> - + @@ -3865,13 +3865,13 @@ 19?? Emmanuel Boulanger - + - + @@ -3884,7 +3884,7 @@ 198? CFPA - + @@ -3896,7 +3896,7 @@ 198? CFPA - + @@ -3909,7 +3909,7 @@ Infogrames - + @@ -3922,7 +3922,7 @@ Infogrames - + @@ -3935,7 +3935,7 @@ Infogrames - + @@ -3948,7 +3948,7 @@ Infogrames - + @@ -3961,19 +3961,19 @@ 19?? <unknown> - + - + - + @@ -3986,7 +3986,7 @@ 1987 Coktel Vision - + @@ -3998,13 +3998,13 @@ 1987 Free Game Blot - + - + @@ -4017,13 +4017,13 @@ 1987 Free Game Blot - + - + @@ -4037,13 +4037,13 @@ 1987 Free Game Blot - + - + @@ -4057,17 +4057,17 @@ 1990 Novtech - + - + - + @@ -4080,17 +4080,17 @@ 1990 Novtech - + - + - + @@ -4102,25 +4102,25 @@ 1986 SFMI Micromania - + - + - + - + @@ -4133,13 +4133,13 @@ 1986 SFMI Micromania - + - + @@ -4152,7 +4152,7 @@ 198? Loriciels - + @@ -4165,7 +4165,7 @@ 198? Loriciels - + @@ -4177,19 +4177,19 @@ 1986 SFMI Micromania - + - + - + @@ -4202,13 +4202,13 @@ 1986 SFMI Micromania - + - + @@ -4221,7 +4221,7 @@ 19?? <unknown> - + @@ -4233,7 +4233,7 @@ 19?? <unknown> - + @@ -4245,7 +4245,7 @@ 19?? <unknown> - + @@ -4257,13 +4257,13 @@ 198? <unknown> - + - + @@ -4276,7 +4276,7 @@ 198? <unknown> - + @@ -4289,7 +4289,7 @@ 198? <unknown> - + @@ -4301,7 +4301,7 @@ 2000 Emmanuel Boulanger - + @@ -4313,7 +4313,7 @@ 19?? <unknown> - + @@ -4325,7 +4325,7 @@ 19?? Multimania.com - + @@ -4337,7 +4337,7 @@ 1990? <unknown> - + @@ -4349,7 +4349,7 @@ 1986 Sybex - + @@ -4361,7 +4361,7 @@ 1986 Sybex - + @@ -4373,7 +4373,7 @@ 2012 Dimension - + @@ -4385,7 +4385,7 @@ 198? France Image Logiciel (FIL) - + @@ -4397,7 +4397,7 @@ 1986 France Image Logiciel (FIL) - + @@ -4409,7 +4409,7 @@ 1986 France Image Logiciel (FIL) - + @@ -4421,7 +4421,7 @@ 1986 France Image Logiciel (FIL) - + @@ -4433,7 +4433,7 @@ 1986 Infogrames - + @@ -4445,7 +4445,7 @@ 1986 Infogrames - + @@ -4457,7 +4457,7 @@ 1986 <hack> - + @@ -4469,7 +4469,7 @@ 19?? <unknown> - + @@ -4481,7 +4481,7 @@ 19?? <unknown> - + @@ -4493,7 +4493,7 @@ 19?? <unknown> - + @@ -4505,7 +4505,7 @@ 198? Infogrames - + @@ -4517,7 +4517,7 @@ 198? Infogrames - + @@ -4529,7 +4529,7 @@ 1987 <bootleg (Zouzou)> - + @@ -4541,7 +4541,7 @@ 1987 France Image Logiciel (FIL) - + @@ -4553,7 +4553,7 @@ 1987 France Image Logiciel (FIL) - + @@ -4565,7 +4565,7 @@ 1987 France Image Logiciel (FIL) - + @@ -4577,61 +4577,61 @@ 1989 Infogrames - + - + - + - + - + - + - + - + - + - + @@ -4645,12 +4645,12 @@ 1988 Loriciels - + - + @@ -4663,7 +4663,7 @@ 1988 Loriciels - + @@ -4675,7 +4675,7 @@ 1985 Coktel Vision - + @@ -4687,7 +4687,7 @@ 19?? Nostalgies Thomsonistes - + @@ -4699,7 +4699,7 @@ 1987 Cable - + @@ -4711,7 +4711,7 @@ 1987 Cable - + @@ -4723,7 +4723,7 @@ 198? Maniac Soft - + @@ -4735,13 +4735,13 @@ 1988 Infogrames - + - + @@ -4754,13 +4754,13 @@ 1988 Infogrames - + - + @@ -4773,13 +4773,13 @@ 1988 Infogrames - + - + @@ -4792,7 +4792,7 @@ 1988 Infogrames - + @@ -4804,7 +4804,7 @@ 19?? <unknown> - + @@ -4816,13 +4816,13 @@ 19?? SFMI Micromania - + - + @@ -4835,7 +4835,7 @@ 19?? SFMI Micromania - + @@ -4847,13 +4847,13 @@ 1989 Loriciels - + - + @@ -4866,7 +4866,7 @@ 1989 Loriciels - + @@ -4879,13 +4879,13 @@ 1988 Microids - + - + @@ -4900,7 +4900,7 @@ Microids - + @@ -4913,7 +4913,7 @@ 1988 Microids - + @@ -4925,12 +4925,12 @@ 1989 Infogrames - + - + @@ -4942,7 +4942,7 @@ 1989 Infogrames - + @@ -4954,13 +4954,13 @@ 1986 SFMI Micromania - + - + @@ -4973,7 +4973,7 @@ 1986 SFMI Micromania - + @@ -4986,13 +4986,13 @@ 19?? John Breaker? - + - + @@ -5006,7 +5006,7 @@ 19?? John Breaker? - + @@ -5018,7 +5018,7 @@ 19?? <unknown> - + @@ -5030,7 +5030,7 @@ 19?? <unknown> - + @@ -5042,7 +5042,7 @@ 19?? <unknown> - + @@ -5054,7 +5054,7 @@ 19?? <unknown> - + @@ -5066,7 +5066,7 @@ 19?? <unknown> - + @@ -5078,7 +5078,7 @@ 19?? <unknown> - + @@ -5090,7 +5090,7 @@ 19?? <unknown> - + @@ -5102,7 +5102,7 @@ 19?? <unknown> - + @@ -5115,7 +5115,7 @@ <unknown> - + @@ -5128,7 +5128,7 @@ <unknown> - + @@ -5140,7 +5140,7 @@ 19?? <unknown> - + @@ -5153,7 +5153,7 @@ <unknown> - + @@ -5165,7 +5165,7 @@ 198? Infogrames - + @@ -5177,7 +5177,7 @@ 198? Infogrames - + @@ -5189,7 +5189,7 @@ 19?? <unknown> - + @@ -5201,7 +5201,7 @@ 19?? <unknown> - + @@ -5216,7 +5216,7 @@ <unknown> - + @@ -5228,13 +5228,13 @@ 1989 Micromedia Systemes - + - + @@ -5247,7 +5247,7 @@ 19?? Micromedia Systemes? - + @@ -5259,7 +5259,7 @@ 19?? Micromedia Systemes? - + @@ -5271,7 +5271,7 @@ 19?? Micromedia Systemes? - + @@ -5283,7 +5283,7 @@ 1998 Prehis-To Forum - + @@ -5295,7 +5295,7 @@ 19?? Mayasoft - + @@ -5307,13 +5307,13 @@ 199? HMEL - + - + @@ -5326,13 +5326,13 @@ 199? HMEL - + - + @@ -5345,13 +5345,13 @@ 199? HMEL - + - + @@ -5364,13 +5364,13 @@ 199? HMEL - + - + @@ -5383,13 +5383,13 @@ 199? HMEL - + - + @@ -5402,13 +5402,13 @@ 199? HMEL - + - + @@ -5421,7 +5421,7 @@ 198? Super Disk Software - + @@ -5433,7 +5433,7 @@ 19?? ContacThoms - + @@ -5445,7 +5445,7 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -5457,7 +5457,7 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -5469,13 +5469,13 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -5488,13 +5488,13 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -5507,7 +5507,7 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -5519,13 +5519,13 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -5538,13 +5538,13 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -5557,7 +5557,7 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -5569,7 +5569,7 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -5581,7 +5581,7 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -5593,25 +5593,25 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + - + - + @@ -5624,25 +5624,25 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + - + - + @@ -5655,25 +5655,25 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + - + - + @@ -5686,25 +5686,25 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + - + - + @@ -5718,7 +5718,7 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -5730,7 +5730,7 @@ 19?? <unknown> - + @@ -5742,7 +5742,7 @@ 19?? <unknown> - + @@ -5754,7 +5754,7 @@ 19?? <unknown> - + @@ -5766,7 +5766,7 @@ 19?? <unknown> - + @@ -5778,7 +5778,7 @@ 19?? <unknown> - + @@ -5790,7 +5790,7 @@ 19?? <unknown> - + @@ -5802,7 +5802,7 @@ 19?? <unknown> - + @@ -5814,7 +5814,7 @@ 19?? <unknown> - + @@ -5826,7 +5826,7 @@ 19?? <unknown> - + @@ -5838,7 +5838,7 @@ 19?? <unknown> - + @@ -5850,7 +5850,7 @@ 19?? <unknown> - + @@ -5862,7 +5862,7 @@ 19?? <unknown> - + @@ -5876,7 +5876,7 @@ 2005 DCsoft - + @@ -5888,7 +5888,7 @@ 2014 Defcard - + @@ -5901,7 +5901,7 @@ 2014 Defcard - + @@ -5913,7 +5913,7 @@ 2014 The Undead Sceners - + @@ -5925,7 +5925,7 @@ 19?? <unknown> - + @@ -5937,7 +5937,7 @@ 2014 Puls - + @@ -5949,7 +5949,7 @@ 2014 Puls - + @@ -5961,7 +5961,7 @@ 1997 Prehis-To - + @@ -5973,7 +5973,7 @@ 1997 Prehis-To - + @@ -5985,7 +5985,7 @@ 2005 DCsoft - + @@ -5997,7 +5997,7 @@ 2013 Puls - + @@ -6009,7 +6009,7 @@ 2013 Puls - + @@ -6021,7 +6021,7 @@ 2015 Samuel Devulder - + @@ -6033,13 +6033,13 @@ 2004 Puls - + - + @@ -6052,13 +6052,13 @@ 2004 Puls - + - + @@ -6071,7 +6071,7 @@ 2004 Puls - + @@ -6083,7 +6083,7 @@ 1991 Laurent Hiriart - + @@ -6095,7 +6095,7 @@ 1991 Laurent Hiriart - + @@ -6107,7 +6107,7 @@ 2001 Yoann Riou - + @@ -6119,7 +6119,7 @@ 1991 Dimension - + @@ -6131,7 +6131,7 @@ 2013 Puls - + @@ -6143,7 +6143,7 @@ 2013 Puls - + @@ -6155,7 +6155,7 @@ 2013 Puls - + @@ -6167,7 +6167,7 @@ 2013 Puls - + @@ -6179,7 +6179,7 @@ 2013 Puls - + @@ -6191,7 +6191,7 @@ 19?? Piloux - + @@ -6203,7 +6203,7 @@ 19?? Piloux - + @@ -6215,13 +6215,13 @@ 19?? <unknown> - + - + @@ -6234,7 +6234,7 @@ 1990 HCL - + @@ -6246,7 +6246,7 @@ 1990 HCL - + @@ -6258,13 +6258,13 @@ 1990 HCL - + - + @@ -6277,7 +6277,7 @@ 19?? <unknown> - + @@ -6289,7 +6289,7 @@ 2013 Puls - + @@ -6301,7 +6301,7 @@ 2013 Puls - + @@ -6313,13 +6313,13 @@ 19?? BC 109 Soft - + - + @@ -6332,7 +6332,7 @@ 19?? BC 109 Soft - + @@ -6344,7 +6344,7 @@ 1988 Carca Cracking Compagny - + @@ -6356,7 +6356,7 @@ 1988 Carca Cracking Compagny - + @@ -6368,13 +6368,13 @@ 2007 Megar - + - + @@ -6387,7 +6387,7 @@ 2007 Megar - + @@ -6399,7 +6399,7 @@ 2011 OliverP - + @@ -6412,7 +6412,7 @@ 2011 OliverP - + @@ -6424,7 +6424,7 @@ 2011 Puls - + @@ -6436,7 +6436,7 @@ 2011 Puls - + @@ -6448,7 +6448,7 @@ 2000 Manta-Softs - + @@ -6460,7 +6460,7 @@ 2014 Puls - + @@ -6472,7 +6472,7 @@ 2014 Puls - + @@ -6484,7 +6484,7 @@ 2013 Puls - + @@ -6496,7 +6496,7 @@ 2013 Puls - + @@ -6508,13 +6508,13 @@ 2012 Samuel Devulder - + - + @@ -6527,7 +6527,7 @@ 2012 Samuel Devulder - + @@ -6539,7 +6539,7 @@ 2012 Samuel Devulder - + @@ -6551,7 +6551,7 @@ 19?? JMLJML - + @@ -6564,7 +6564,7 @@ 2015 Defcard - + @@ -6577,7 +6577,7 @@ 2015 Defcard - + @@ -6589,7 +6589,7 @@ 2014 Defcard - + @@ -6602,7 +6602,7 @@ 2014 Defcard - + @@ -6614,49 +6614,49 @@ 2007 Puls - + - + - + - + - + - + - + - + @@ -6669,49 +6669,49 @@ 2007 Puls - + - + - + - + - + - + - + - + @@ -6724,25 +6724,25 @@ 2007 Puls - + - + - + - + @@ -6755,13 +6755,13 @@ 2007 Puls - + - + @@ -6774,13 +6774,13 @@ 19?? Thomtest - + - + @@ -6793,7 +6793,7 @@ 19?? Thomtest - + @@ -6806,7 +6806,7 @@ 2015 Puls - + @@ -6819,7 +6819,7 @@ 2015 Puls - + @@ -6831,7 +6831,7 @@ 2004 Yoann Riou - + @@ -6843,7 +6843,7 @@ 2004 Yoann Riou - + @@ -6855,7 +6855,7 @@ 2004 Yoann Riou - + @@ -6867,7 +6867,7 @@ 2004 Yoann Riou - + @@ -6879,7 +6879,7 @@ 2012 Puls - + @@ -6891,7 +6891,7 @@ 2014 Puls - + @@ -6903,7 +6903,7 @@ 2014 Puls - + @@ -6917,13 +6917,13 @@ Yoann Riou - + - + @@ -6936,13 +6936,13 @@ 2010 Puls - + - + @@ -6955,13 +6955,13 @@ 2010 Puls - + - + @@ -6974,7 +6974,7 @@ 2010 Puls - + @@ -6986,13 +6986,13 @@ 2010 Puls - + - + @@ -7005,13 +7005,13 @@ 2010 Puls - + - + @@ -7024,7 +7024,7 @@ 2010 Puls - + @@ -7036,13 +7036,13 @@ 2010 Puls - + - + @@ -7055,13 +7055,13 @@ 2010 Puls - + - + @@ -7074,7 +7074,7 @@ 2010 Puls - + @@ -7086,13 +7086,13 @@ 2010 Puls - + - + @@ -7105,13 +7105,13 @@ 2010 Puls - + - + @@ -7124,7 +7124,7 @@ 2010 Puls - + @@ -7136,13 +7136,13 @@ 2010 Puls - + - + @@ -7155,13 +7155,13 @@ 2010 Puls - + - + @@ -7174,7 +7174,7 @@ 2010 Puls - + @@ -7186,13 +7186,13 @@ 2010 Puls - + - + @@ -7205,13 +7205,13 @@ 2010 Puls - + - + @@ -7224,7 +7224,7 @@ 2010 Puls - + @@ -7236,7 +7236,7 @@ 2007 YRprod - + @@ -7248,7 +7248,7 @@ 2014 Puls - + @@ -7260,7 +7260,7 @@ 2014 Puls - + @@ -7272,7 +7272,7 @@ 2006 DCsoft - + @@ -7286,12 +7286,12 @@ 1992 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -7303,13 +7303,13 @@ 1992 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -7322,7 +7322,7 @@ 1992 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -7334,7 +7334,7 @@ 1992 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -7346,7 +7346,7 @@ 1992 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -7358,12 +7358,12 @@ 1993 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -7375,13 +7375,13 @@ 1993 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -7394,7 +7394,7 @@ 1993 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -7406,12 +7406,12 @@ 1993 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -7423,13 +7423,13 @@ 1993 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -7442,7 +7442,7 @@ 1993 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -7454,12 +7454,12 @@ 1993 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -7471,13 +7471,13 @@ 1993 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -7490,7 +7490,7 @@ 1993 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -7502,12 +7502,12 @@ 1993 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -7519,13 +7519,13 @@ 1993 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -7538,7 +7538,7 @@ 1993 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -7550,12 +7550,12 @@ 1994 Association des Correspondants Thomsonistes (A.C.T.) - + - + @@ -7567,13 +7567,13 @@ 1994 Association des Correspondants Thomsonistes (A.C.T.) - + - + @@ -7586,7 +7586,7 @@ 1994 Association des Correspondants Thomsonistes (A.C.T.) - + @@ -7598,12 +7598,12 @@ 1994 Association des Correspondants Thomsonistes (A.C.T.) - + - + @@ -7615,13 +7615,13 @@ 1994 Association des Correspondants Thomsonistes (A.C.T.) - + - + @@ -7634,7 +7634,7 @@ 1994 Association des Correspondants Thomsonistes (A.C.T.) - + @@ -7646,12 +7646,12 @@ 1995 Association des Correspondants Thomsonistes (A.C.T.) - + - + @@ -7663,13 +7663,13 @@ 1995 Association des Correspondants Thomsonistes (A.C.T.) - + - + @@ -7682,7 +7682,7 @@ 1995 Association des Correspondants Thomsonistes (A.C.T.) - + @@ -7694,12 +7694,12 @@ 1995 Association des Correspondants Thomsonistes (A.C.T.) - + - + @@ -7711,13 +7711,13 @@ 1995 Association des Correspondants Thomsonistes (A.C.T.) - + - + @@ -7730,7 +7730,7 @@ 1995 Association des Correspondants Thomsonistes (A.C.T.) - + @@ -7742,13 +7742,13 @@ 1993 Decisions Business Innovations (DBI) - New Age Software - + - + @@ -7761,13 +7761,13 @@ 1993 Decisions Business Innovations (DBI) - New Age Software - + - + @@ -7780,13 +7780,13 @@ 1993 Decisions Business Innovations (DBI) - New Age Software - + - + @@ -7799,7 +7799,7 @@ 1991 ICDV - + @@ -7811,7 +7811,7 @@ 1991 ICDV - + @@ -7823,7 +7823,7 @@ 1991 ICDV - + @@ -7835,7 +7835,7 @@ 1991 ICDV - + @@ -7847,7 +7847,7 @@ 1991 ICDV - + @@ -7859,7 +7859,7 @@ 1991 ICDV - + @@ -7871,7 +7871,7 @@ 1991 ICDV - + @@ -7883,7 +7883,7 @@ 1991 ICDV - + @@ -7895,13 +7895,13 @@ 1996 Bledor-Soft - Serveur87 - + - + @@ -7914,7 +7914,7 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -7926,7 +7926,7 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -7938,13 +7938,13 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -7957,13 +7957,13 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -7976,7 +7976,7 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -7988,13 +7988,13 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -8007,13 +8007,13 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -8026,7 +8026,7 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -8038,13 +8038,13 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -8057,13 +8057,13 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -8076,7 +8076,7 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -8088,13 +8088,13 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -8107,13 +8107,13 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + @@ -8126,7 +8126,7 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + @@ -8138,25 +8138,25 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + - + - + @@ -8169,25 +8169,25 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + - + - + @@ -8201,25 +8201,25 @@ 1991 L'Association pour les Services Connexes a l'Informatique (A.S.C.I.) - + - + - + - + @@ -8234,13 +8234,13 @@ 1997? <unknown> - + - + @@ -8253,13 +8253,13 @@ 1997? <unknown> - + - + @@ -8274,12 +8274,12 @@ 1987 Armand Colin - + - + @@ -8291,7 +8291,7 @@ 1987 Armand Colin - + @@ -8303,7 +8303,7 @@ 1986 Centre National de Documentation Pedagogique (CNDP) - + @@ -8315,7 +8315,7 @@ 19?? Claude Lietard - + @@ -8327,7 +8327,7 @@ 1987 Cedic/Nathan - + @@ -8341,7 +8341,7 @@ 1987 Cedic/Nathan - + @@ -8355,7 +8355,7 @@ 1986 Cedic/Nathan - + @@ -8371,7 +8371,7 @@ 1987 Cedic/Nathan - + @@ -8387,7 +8387,7 @@ 1988 Coktel Vision - + @@ -8399,7 +8399,7 @@ 1987 Cedic/Nathan - + @@ -8411,7 +8411,7 @@ 1987 Cedic/Nathan - + @@ -8423,7 +8423,7 @@ 1988 Cedic/Nathan - + @@ -8435,7 +8435,7 @@ 1988 Cedic/Nathan - + @@ -8448,7 +8448,7 @@ 1986 Cedic/Nathan - + @@ -8460,7 +8460,7 @@ 1986 Centre National de Documentation Pedagogique (CNDP) - + @@ -8472,7 +8472,7 @@ 1987 Coktel Vision - + @@ -8485,7 +8485,7 @@ 1987 Coktel Vision - + @@ -8497,7 +8497,7 @@ 1988 Coktel Vision - + @@ -8509,13 +8509,13 @@ 1987 Claude Lietard - + - + @@ -8528,7 +8528,7 @@ 1987 Chrysis - + @@ -8540,7 +8540,7 @@ 1987 Cedic/Nathan? - + @@ -8553,7 +8553,7 @@ VIFI-Nathan - + @@ -8565,7 +8565,7 @@ 1986 Edumicro - + @@ -8577,7 +8577,7 @@ 19?? Daniel Smague - + @@ -8589,7 +8589,7 @@ 1986 Centre National de Documentation Pedagogique (CNDP) - + @@ -8601,7 +8601,7 @@ 1987 Carraz Editions - + @@ -8613,7 +8613,7 @@ 19?? <unknown> - + @@ -8625,7 +8625,7 @@ 19?? Claude Lietard - + @@ -8637,7 +8637,7 @@ 1985 Cobrasoft - + @@ -8649,13 +8649,13 @@ 1998 Bledor-Soft - Serveur87 - + - + @@ -8668,13 +8668,13 @@ 1999 Bledor-Soft - Serveur87 - + - + @@ -8687,13 +8687,13 @@ 1999 Bledor-Soft - Serveur87 - + - + @@ -8706,13 +8706,13 @@ 2000 Bledor-Soft - Serveur87 - + - + @@ -8725,13 +8725,13 @@ 2000 Bledor-Soft - Serveur87 - + - + @@ -8744,13 +8744,13 @@ 1996 Bledor-Soft - + - + @@ -8763,13 +8763,13 @@ 1996 Bledor-Soft - + - + @@ -8782,13 +8782,13 @@ 1999 Bledor-Soft - Serveur87 - + - + @@ -8801,13 +8801,13 @@ 1999 Bledor-Soft - Serveur87 - + - + @@ -8820,13 +8820,13 @@ 2003 Bledor-Soft - ContacThoms - Serveur87 - + - + @@ -8839,7 +8839,7 @@ 1986 Coktel Vision - + @@ -8851,7 +8851,7 @@ 1988 France Image Logiciel (FIL) - + @@ -8867,7 +8867,7 @@ 1987 Chrysis - + @@ -8879,7 +8879,7 @@ 1988 Cedic/Nathan - + @@ -8891,7 +8891,7 @@ 1987 Cedic/Nathan - + @@ -8903,7 +8903,7 @@ 1987 Cedic/Nathan - + @@ -8915,7 +8915,7 @@ 1987 Cedic/Nathan - + @@ -8927,7 +8927,7 @@ 1987 Cedic/Nathan - + @@ -8939,7 +8939,7 @@ 1988 VIFI-Nathan - + @@ -8951,7 +8951,7 @@ 1988 VIFI-Nathan - + @@ -8963,7 +8963,7 @@ 1984 VIFI-Nathan - + @@ -8975,7 +8975,7 @@ 1986 Cedic/Nathan - + @@ -8987,7 +8987,7 @@ 19?? <unknown> - + @@ -8999,7 +8999,7 @@ 1987 Chrysis - + @@ -9011,13 +9011,13 @@ 1989 Nathan Logiciels - + - + @@ -9030,13 +9030,13 @@ 1989 Nathan Logiciels - + - + @@ -9049,7 +9049,7 @@ 1987 Chrysis - + @@ -9061,7 +9061,7 @@ 1985 VIFI-Nathan - + @@ -9073,7 +9073,7 @@ 1987 Cedic/Nathan - + @@ -9085,7 +9085,7 @@ 1988 Cedic/Nathan - + @@ -9097,7 +9097,7 @@ 1986 Cedic/Nathan - + @@ -9109,7 +9109,7 @@ 1986 Cedic/Nathan - + @@ -9121,7 +9121,7 @@ 1986 Cedic/Nathan - + @@ -9134,25 +9134,25 @@ 1987 Cedic/Nathan - + - + - + - + @@ -9165,7 +9165,7 @@ 1986 Cedic/Nathan - + @@ -9177,7 +9177,7 @@ 1990 Claude Lietard - + @@ -9189,7 +9189,7 @@ 19?? <unknown> - + @@ -9201,7 +9201,7 @@ 1987 Cedic/Nathan - + @@ -9213,7 +9213,7 @@ 1989 See-Maths - + @@ -9225,7 +9225,7 @@ 1986 Cedic/Nathan - + @@ -9237,7 +9237,7 @@ 1986 VIFI-Nathan - + @@ -9249,7 +9249,7 @@ 198? Centre National de Documentation Pedagogique (CNDP) - + @@ -9261,7 +9261,7 @@ 198? Centre National de Documentation Pedagogique (CNDP) - + @@ -9273,7 +9273,7 @@ 1988 Coktel Vision - + @@ -9286,7 +9286,7 @@ 19?? <unknown> - + @@ -9299,7 +9299,7 @@ 19?? <unknown> - + @@ -9313,7 +9313,7 @@ 19?? <unknown> - + @@ -9325,7 +9325,7 @@ 1986 Cedic/Nathan - + @@ -9337,7 +9337,7 @@ 1986 Cedic/Nathan - + @@ -9349,7 +9349,7 @@ 1986 Cobrasoft - + @@ -9361,7 +9361,7 @@ 1987 Cedic/Nathan - + @@ -9373,7 +9373,7 @@ 1987 Cedic/Nathan - + @@ -9385,7 +9385,7 @@ 1987 Cedic/Nathan - + @@ -9397,7 +9397,7 @@ 1987 Cedic/Nathan - + @@ -9409,7 +9409,7 @@ 1988 Carraz Editions - + @@ -9421,7 +9421,7 @@ 1988 Chrysis - + @@ -9433,7 +9433,7 @@ 1987 Claude Lietard - + @@ -9445,7 +9445,7 @@ 1993 Sachem - + @@ -9457,7 +9457,7 @@ 1987 Chrysis - + @@ -9469,7 +9469,7 @@ 19?? <unknown> - + @@ -9481,7 +9481,7 @@ 1987 Chrysis - + @@ -9493,7 +9493,7 @@ 1986 Centre National de Documentation Pedagogique (CNDP) - + @@ -9505,7 +9505,7 @@ 1999 Emmanuel Boulanger - + @@ -9517,7 +9517,7 @@ 1986 Centre National de Documentation Pedagogique (CNDP) - + @@ -9531,7 +9531,7 @@ 1985 Free Game Blot - + @@ -9543,7 +9543,7 @@ 1985 Free Game Blot - + @@ -9555,7 +9555,7 @@ 1986 Infogrames - + @@ -9567,7 +9567,7 @@ 1987 Chip - + @@ -9580,7 +9580,7 @@ 1987 Chip - + @@ -9593,7 +9593,7 @@ 1987 Chip - + @@ -9606,7 +9606,7 @@ 1987 Chip - + @@ -9618,7 +9618,7 @@ 198? Loriciels - + @@ -9631,7 +9631,7 @@ Loriciels - + @@ -9644,7 +9644,7 @@ Loriciels - + @@ -9656,7 +9656,7 @@ 1986 Infogrames - + @@ -9668,7 +9668,7 @@ 1986 Infogrames - + @@ -9680,7 +9680,7 @@ 1986 Infogrames - + @@ -9692,7 +9692,7 @@ 1985 Loriciels - + @@ -9704,7 +9704,7 @@ 1985 Loriciels - + @@ -9716,7 +9716,7 @@ 1985 Loriciels - + @@ -9728,7 +9728,7 @@ 1985 Loriciels - + @@ -9740,7 +9740,7 @@ 1985 Loriciels - + @@ -9753,7 +9753,7 @@ Loriciels - + @@ -9766,7 +9766,7 @@ Loriciels - + @@ -9778,7 +9778,7 @@ 1989 Ubisoft - + @@ -9790,7 +9790,7 @@ 1989 Ubisoft - + @@ -9802,7 +9802,7 @@ 1989 Ubisoft - + @@ -9814,7 +9814,7 @@ 1986 Free Game Blot - + @@ -9826,7 +9826,7 @@ 1986 Free Game Blot - + @@ -9838,7 +9838,7 @@ 1985 Infogrames - + @@ -9850,7 +9850,7 @@ 1988 France Image Logiciel (FIL) - + @@ -9862,7 +9862,7 @@ 1988 France Image Logiciel (FIL) - + @@ -9874,7 +9874,7 @@ 1987 France Image Logiciel (FIL) - + @@ -9886,7 +9886,7 @@ 1987 Coktel Vision - + @@ -9898,7 +9898,7 @@ 1987 <bootleg (Thomsoft) - + @@ -9910,7 +9910,7 @@ 1987 <bootleg? (dcmoto.free.fr)> - + @@ -9922,7 +9922,7 @@ 1987 <bootleg? (dcmoto.free.fr)> - + @@ -9935,7 +9935,7 @@ 1987 Coktel Vision - + @@ -9948,7 +9948,7 @@ 1986 France Image Logiciel (FIL) - + @@ -9960,7 +9960,7 @@ 1986 France Image Logiciel (FIL) - + @@ -9972,7 +9972,7 @@ 1988 France Image Logiciel (FIL) - + @@ -9984,7 +9984,7 @@ 1988 France Image Logiciel (FIL) - + @@ -9996,7 +9996,7 @@ 1987 Coktel Vision - + @@ -10008,7 +10008,7 @@ 1988 Carraz Editions - + @@ -10020,7 +10020,7 @@ 1988 Carraz Editions - + @@ -10032,7 +10032,7 @@ 1986 France Image Logiciel (FIL) - + @@ -10044,7 +10044,7 @@ 1986 France Image Logiciel (FIL) - + @@ -10056,7 +10056,7 @@ 1986 France Image Logiciel (FIL) - + @@ -10068,7 +10068,7 @@ 1985 Free Game Blot - + @@ -10080,7 +10080,7 @@ 1985 Free Game Blot - + @@ -10092,7 +10092,7 @@ 1987 Titus Software - + @@ -10104,7 +10104,7 @@ 19?? JMLJML - + @@ -10116,7 +10116,7 @@ 1987 Infogrames - + @@ -10128,7 +10128,7 @@ 1987 Infogrames - + @@ -10140,7 +10140,7 @@ 1987 Infogrames - + @@ -10152,7 +10152,7 @@ 1987 Infogrames - + @@ -10164,7 +10164,7 @@ 1986 France Image Logiciel (FIL) - + @@ -10176,7 +10176,7 @@ 1987 Free Game Blot - + @@ -10188,7 +10188,7 @@ 198? Free Game Blot - + @@ -10200,7 +10200,7 @@ 198? Free Game Blot - + @@ -10212,7 +10212,7 @@ 1987 Coktel Vision - + @@ -10224,7 +10224,7 @@ 1987 Coktel Vision - + @@ -10237,7 +10237,7 @@ 1987 Coktel Vision - + @@ -10250,7 +10250,7 @@ 1987 Infogrames - + @@ -10262,7 +10262,7 @@ 1987 Infogrames - + @@ -10274,7 +10274,7 @@ 1987 <bootleg (Shubert)> - + @@ -10287,7 +10287,7 @@ 1987 Infogrames - + @@ -10300,7 +10300,7 @@ 1987 Infogrames - + @@ -10312,7 +10312,7 @@ 1987 Infogrames - + @@ -10325,7 +10325,7 @@ 1987 Infogrames - + @@ -10338,7 +10338,7 @@ 1987 Infogrames - + @@ -10350,7 +10350,7 @@ 1987 Infogrames - + @@ -10362,7 +10362,7 @@ 1987 Infogrames - + @@ -10375,7 +10375,7 @@ 1987 Infogrames - + @@ -10389,13 +10389,13 @@ Loriciels - + - + @@ -10409,13 +10409,13 @@ Loriciels - + - + @@ -10429,7 +10429,7 @@ Loriciels - + @@ -10441,7 +10441,7 @@ 1988 Infogrames - + @@ -10453,7 +10453,7 @@ 1988 Infogrames - + @@ -10465,7 +10465,7 @@ 1988 Infogrames - + @@ -10477,7 +10477,7 @@ 198? SoftBook - + @@ -10489,7 +10489,7 @@ 1987 Free Game Blot - + @@ -10501,7 +10501,7 @@ 198? Free Game Blot - + @@ -10513,7 +10513,7 @@ 198? Free Game Blot - + @@ -10525,7 +10525,7 @@ 19?? ADT - + @@ -10537,7 +10537,7 @@ 1988 ERE Informatique - + @@ -10549,7 +10549,7 @@ 1984 Answare - + @@ -10561,7 +10561,7 @@ 198? Loriciels - + @@ -10573,7 +10573,7 @@ 198? Loriciels - + @@ -10585,7 +10585,7 @@ 1988 Coktel Vision - + @@ -10597,7 +10597,7 @@ 1988 Coktel Vision - + @@ -10609,7 +10609,7 @@ 1988 Coktel Vision - + @@ -10621,7 +10621,7 @@ 19?? JMLJML - + @@ -10633,13 +10633,13 @@ 1989 Ubisoft - + - + @@ -10652,13 +10652,13 @@ 1989 Ubisoft - + - + @@ -10671,7 +10671,7 @@ 1989 Ubisoft - + @@ -10685,7 +10685,7 @@ Microids - + @@ -10697,7 +10697,7 @@ 198? Jean-Yves Le Friec - Hebdogiciel - + @@ -10710,7 +10710,7 @@ Loriciels - + @@ -10723,7 +10723,7 @@ <bootleg (Albert Tleri)> - + @@ -10737,7 +10737,7 @@ Loriciels - + @@ -10751,7 +10751,7 @@ 1985 Loriciels - + @@ -10763,7 +10763,7 @@ 1985 Loriciels - + @@ -10775,7 +10775,7 @@ 1984 Free Game Blot - + @@ -10787,7 +10787,7 @@ 1984 Free Game Blot - + @@ -10799,7 +10799,7 @@ 1985 France Image Logiciel (FIL) - + @@ -10811,7 +10811,7 @@ 1988 Infogrames - + @@ -10823,7 +10823,7 @@ 1987 Titus Software - + @@ -10835,7 +10835,7 @@ 1987 Titus Software - + @@ -10847,7 +10847,7 @@ 198? Chip - + @@ -10860,7 +10860,7 @@ 198? Chip - + @@ -10873,7 +10873,7 @@ 198? Chip - + @@ -10886,7 +10886,7 @@ 198? Chip - + @@ -10898,7 +10898,7 @@ 198? Tomahawk - + @@ -10910,7 +10910,7 @@ 1985 Loriciels - + @@ -10922,7 +10922,7 @@ 1984 Intelligent Software - + @@ -10934,7 +10934,7 @@ 1984 Intelligent Software - + @@ -10946,7 +10946,7 @@ 1988 Coktel Vision - + @@ -10958,7 +10958,7 @@ 1988 <hack?> - + @@ -10970,7 +10970,7 @@ 1988 <hack?> - + @@ -10982,7 +10982,7 @@ 1987 Infogrames - + @@ -10994,7 +10994,7 @@ 1986 Infogrames - + @@ -11006,7 +11006,7 @@ 1987 Free Game Blot - + @@ -11018,7 +11018,7 @@ 1987 Free Game Blot - + @@ -11030,7 +11030,7 @@ 1986 Infogrames - + @@ -11042,7 +11042,7 @@ 1986 Chip - + @@ -11054,7 +11054,7 @@ 1986 Chip - + @@ -11066,7 +11066,7 @@ 1986 <bootleg (The Crapaud Musulman)> - + @@ -11079,7 +11079,7 @@ 1986 Chip - + @@ -11091,7 +11091,7 @@ 1985 Loriciels - + @@ -11104,7 +11104,7 @@ 1985 Loriciels - + @@ -11116,7 +11116,7 @@ 1984 Loriciels - + @@ -11128,7 +11128,7 @@ 1985 Loriciels - + @@ -11140,7 +11140,7 @@ 1988 France Image Logiciel (FIL) - + @@ -11152,7 +11152,7 @@ 1988 France Image Logiciel (FIL) - + @@ -11164,7 +11164,7 @@ 1987 Infogrames - + @@ -11176,7 +11176,7 @@ 1987 Infogrames - + @@ -11188,7 +11188,7 @@ 1986 <bootleg (Shubert)> - + @@ -11201,7 +11201,7 @@ 1986 EH Services - + @@ -11214,7 +11214,7 @@ 1987 France Image Logiciel (FIL) - + @@ -11226,7 +11226,7 @@ 1987 France Image Logiciel (FIL) - + @@ -11238,7 +11238,7 @@ 1987 France Image Logiciel (FIL) - + @@ -11250,7 +11250,7 @@ 1988 France Image Logiciel (FIL) - + @@ -11262,7 +11262,7 @@ 1987 France Image Logiciel (FIL) - + @@ -11275,7 +11275,7 @@ Shift-Edition - + @@ -11288,7 +11288,7 @@ Shift-Edition - + @@ -11300,7 +11300,7 @@ 1987 France Image Logiciel (FIL) - + @@ -11312,7 +11312,7 @@ 1987 Free Game Blot - + @@ -11324,7 +11324,7 @@ 19?? JMLJML - + @@ -11336,7 +11336,7 @@ 1985 Infogrames - + @@ -11348,7 +11348,7 @@ 1985 Infogrames - + @@ -11360,7 +11360,7 @@ 1985 <bootleg (Shubert Enterprise)> - + @@ -11372,7 +11372,7 @@ 1989 Titus Software - + @@ -11386,7 +11386,7 @@ Microids - + @@ -11398,7 +11398,7 @@ 1986 France Image Logiciel (FIL) - + @@ -11410,7 +11410,7 @@ 1985 Free Game Blot - + @@ -11422,7 +11422,7 @@ 1985 Free Game Blot - + @@ -11434,7 +11434,7 @@ 1985 Free Game Blot - + @@ -11446,7 +11446,7 @@ 198? Jean-Yves Le Friec - Hebdogiciel - + @@ -11458,7 +11458,7 @@ 1987 Infogrames - + @@ -11470,7 +11470,7 @@ 199? Yves Wolff - + @@ -11482,7 +11482,7 @@ 198? Free Game Blot - + @@ -11494,7 +11494,7 @@ 198? Free Game Blot - + @@ -11506,7 +11506,7 @@ 198? Free Game Blot - + @@ -11518,7 +11518,7 @@ 19?? J. Thiaud - + @@ -11530,7 +11530,7 @@ 199? Emmanuel Boulanger - + @@ -11542,7 +11542,7 @@ 198? Ediciel - + @@ -11554,7 +11554,7 @@ 198? Ediciel - + @@ -11566,7 +11566,7 @@ 1985 Ediciel - + @@ -11578,7 +11578,7 @@ 1986 Free Game Blot - + @@ -11590,7 +11590,7 @@ 198? Free Game Blot - + @@ -11602,7 +11602,7 @@ 1986 Alexandre Pukall - + @@ -11614,7 +11614,7 @@ 198? SoftBook - + @@ -11626,7 +11626,7 @@ 198? SoftBook - + @@ -11638,7 +11638,7 @@ 1985 Infogrames - + @@ -11650,7 +11650,7 @@ 1988 <bootleg (Thomsoft)> - + @@ -11662,7 +11662,7 @@ 1987 SoftBook - + @@ -11674,7 +11674,7 @@ 19?? ADT - + @@ -11686,7 +11686,7 @@ 2015 Defcard - + @@ -11699,7 +11699,7 @@ 2015 Defcard - + @@ -11711,7 +11711,7 @@ 1985 Infogrames - + @@ -11723,7 +11723,7 @@ 1985 Infogrames - + @@ -11735,7 +11735,7 @@ 1985 Infogrames - + @@ -11747,7 +11747,7 @@ 1986 France Image Logiciel (FIL) - + @@ -11759,7 +11759,7 @@ 1986 France Image Logiciel (FIL) - + @@ -11771,13 +11771,13 @@ 2006 YRprod - + - + @@ -11790,13 +11790,13 @@ 2006 YRprod - + - + @@ -11809,7 +11809,7 @@ 2006 YRprod - + @@ -11821,7 +11821,7 @@ 1985 Free Game Blot - + @@ -11833,7 +11833,7 @@ 1985 Free Game Blot - + @@ -11845,7 +11845,7 @@ 1987 Coktel Vision - + @@ -11857,7 +11857,7 @@ 1989 ERE Informatique - + @@ -11869,7 +11869,7 @@ 1989 ERE Informatique - + @@ -11881,7 +11881,7 @@ 1987 Loriciels - + @@ -11893,7 +11893,7 @@ 1987 Loriciels - + @@ -11905,7 +11905,7 @@ 1987 Titus Software - + @@ -11918,7 +11918,7 @@ 1987 Chip - + @@ -11931,7 +11931,7 @@ 1987 Chip - + @@ -11943,7 +11943,7 @@ 1984 Infogrames - + @@ -11955,7 +11955,7 @@ 1984 Infogrames - + @@ -11967,7 +11967,7 @@ 1987 Infogrames - + @@ -11979,7 +11979,7 @@ 1987 Infogrames - + @@ -11991,7 +11991,7 @@ 1987 Infogrames - + @@ -12003,7 +12003,7 @@ 1988 Cobrasoft - + @@ -12015,7 +12015,7 @@ 1988 Cobrasoft - + @@ -12027,7 +12027,7 @@ 1988 Coktel Vision - + @@ -12039,7 +12039,7 @@ 1988 <bootleg (The Crapaud Musulman)> - + @@ -12051,7 +12051,7 @@ 1989 Ubisoft - + @@ -12063,7 +12063,7 @@ 1989 Ubisoft - + @@ -12075,7 +12075,7 @@ 1989 Ubisoft - + @@ -12087,7 +12087,7 @@ 1988 Cobrasoft - + @@ -12099,7 +12099,7 @@ 1988 Cobrasoft - + @@ -12112,7 +12112,7 @@ 1988 Cobrasoft - + @@ -12125,7 +12125,7 @@ 1992 ADT - + @@ -12137,7 +12137,7 @@ 198? <unknown> - + @@ -12149,7 +12149,7 @@ 1987 SoftBook - + @@ -12161,7 +12161,7 @@ 1987 SoftBook - + @@ -12174,7 +12174,7 @@ 1987 SoftBook - + @@ -12187,7 +12187,7 @@ 1987 Chip - + @@ -12200,7 +12200,7 @@ 1987 Chip - + @@ -12213,7 +12213,7 @@ 1987 Chip - + @@ -12226,7 +12226,7 @@ 1987 Chip - + @@ -12238,7 +12238,7 @@ 1987 Cobrasoft - + @@ -12250,7 +12250,7 @@ 1987 Cobrasoft - + @@ -12262,7 +12262,7 @@ 1987 Cobrasoft - + @@ -12274,7 +12274,7 @@ 1987 Cobrasoft - + @@ -12286,7 +12286,7 @@ 1986 Infogrames - + @@ -12298,7 +12298,7 @@ 1986 Infogrames - + @@ -12310,7 +12310,7 @@ 1986 Infogrames - + @@ -12322,7 +12322,7 @@ 1987 Coktel Vision - + @@ -12334,7 +12334,7 @@ 1987 Coktel Vision - + @@ -12346,7 +12346,7 @@ 1985 France Image Logiciel (FIL) - + @@ -12358,7 +12358,7 @@ 1985 France Image Logiciel (FIL) - + @@ -12370,7 +12370,7 @@ 1985 France Image Logiciel (FIL) - + @@ -12383,7 +12383,7 @@ <bootleg? (Pustulman)> - + @@ -12395,7 +12395,7 @@ 1987 Loriciels - + @@ -12407,7 +12407,7 @@ 1987 <bootleg (Adolf Hitler)> - + @@ -12419,7 +12419,7 @@ 198? Frederic Nguyen - Hebdogiciel - + @@ -12431,7 +12431,7 @@ 1985 Free Game Blot - + @@ -12443,7 +12443,7 @@ 1985 Free Game Blot - + @@ -12455,7 +12455,7 @@ 1987 France Image Logiciel (FIL) - + @@ -12467,7 +12467,7 @@ 198? Free Game Blot - + @@ -12479,7 +12479,7 @@ 198? Free Game Blot - + @@ -12491,7 +12491,7 @@ 1986 France Image Logiciel (FIL) - + @@ -12503,7 +12503,7 @@ 1986 France Image Logiciel (FIL) - + @@ -12516,7 +12516,7 @@ 1986 France Image Logiciel (FIL) - + @@ -12529,7 +12529,7 @@ 1987 France Image Logiciel (FIL) - + @@ -12541,7 +12541,7 @@ 1988 Coktel Vision - + @@ -12553,7 +12553,7 @@ 1988 Coktel Vision - + @@ -12566,7 +12566,7 @@ 1988 Coktel Vision - + @@ -12579,7 +12579,7 @@ 1986 France Image Logiciel (FIL) - + @@ -12591,7 +12591,7 @@ 1986 France Image Logiciel (FIL) - + @@ -12603,7 +12603,7 @@ 1986 France Image Logiciel (FIL) - + @@ -12615,7 +12615,7 @@ 1987 Infogrames - + @@ -12627,7 +12627,7 @@ 1987 Infogrames - + @@ -12639,7 +12639,7 @@ 1987 Infogrames - + @@ -12651,7 +12651,7 @@ 1987 ERE Informatique - + @@ -12663,7 +12663,7 @@ 1987 ERE Informatique - + @@ -12675,7 +12675,7 @@ 1987 ERE Informatique - + @@ -12687,7 +12687,7 @@ 1985 SoftBook - + @@ -12699,7 +12699,7 @@ 1985 <bootleg (Snark Software)> - + @@ -12711,7 +12711,7 @@ 1985 <bootleg (Snark Software)> - + @@ -12723,7 +12723,7 @@ 1986 Infogrames - + @@ -12735,7 +12735,7 @@ 1987 Infogrames - + @@ -12747,7 +12747,7 @@ 1987 Infogrames - + @@ -12760,7 +12760,7 @@ CFCF - + @@ -12772,7 +12772,7 @@ 1992 Laurent Hiriart - + @@ -12784,7 +12784,7 @@ 1992 Laurent Hiriart - + @@ -12796,7 +12796,7 @@ 19?? JMLJML - + @@ -12808,7 +12808,7 @@ 198? T. Dugnolle - Hebdogiciel - + @@ -12820,7 +12820,7 @@ 198? SoftBook - + @@ -12832,7 +12832,7 @@ 1987 Infogrames - + @@ -12844,7 +12844,7 @@ 1987 Infogrames - + @@ -12856,7 +12856,7 @@ 1987 Infogrames - + @@ -12869,7 +12869,7 @@ 1987 Infogrames - + @@ -12882,7 +12882,7 @@ 1984 Loriciels - + @@ -12894,7 +12894,7 @@ 1984 Loriciels - + @@ -12908,7 +12908,7 @@ Microids - + @@ -12922,7 +12922,7 @@ Microids - + @@ -12936,7 +12936,7 @@ Microids - + @@ -12948,7 +12948,7 @@ 1987 France Image Logiciel (FIL) - + @@ -12960,7 +12960,7 @@ 1987 France Image Logiciel (FIL) - + @@ -12972,7 +12972,7 @@ 1987 Loriciels - + @@ -12984,7 +12984,7 @@ 1988 <bootleg (TGR-Krakeur)> - + @@ -12996,7 +12996,7 @@ 1988 <bootleg (TGR-Krakeur)> - + @@ -13009,7 +13009,7 @@ 1988 France Image Logiciel (FIL) - + @@ -13022,7 +13022,7 @@ 1987 France Image Logiciel (FIL) - + @@ -13034,7 +13034,7 @@ 1987 France Image Logiciel (FIL) - + @@ -13046,7 +13046,7 @@ 1987 France Image Logiciel (FIL) - + @@ -13058,7 +13058,7 @@ 1987 Cobrasoft - + @@ -13070,7 +13070,7 @@ 1987 Cobrasoft - + @@ -13083,7 +13083,7 @@ 1987 Cobrasoft - + @@ -13096,7 +13096,7 @@ 1986 Hebdogiciel - + @@ -13108,7 +13108,7 @@ 1987 SoftBook - + @@ -13120,7 +13120,7 @@ 1987 <bootleg (Thomsoft)> - + @@ -13132,7 +13132,7 @@ 1987 Coktel Vision - + @@ -13144,7 +13144,7 @@ 1987 Coktel Vision - + @@ -13156,7 +13156,7 @@ 1987 Coktel Vision - + @@ -13168,7 +13168,7 @@ 1984 Infogrames - + @@ -13180,7 +13180,7 @@ 198? Free Game Blot - + @@ -13192,7 +13192,7 @@ 198? Free Game Blot - + @@ -13204,7 +13204,7 @@ 198? Free Game Blot - + @@ -13216,7 +13216,7 @@ 1984 VIFI-Nathan - + @@ -13228,7 +13228,7 @@ 1985 Coktel Vision - + @@ -13240,7 +13240,7 @@ 1986 <bootleg (Prehis-To)> - + @@ -13253,7 +13253,7 @@ 1986 Infogrames - + @@ -13266,7 +13266,7 @@ 1986 Loriciels - + @@ -13278,7 +13278,7 @@ 1986 Loriciels - + @@ -13290,7 +13290,7 @@ 1986 Loriciels - + @@ -13302,7 +13302,7 @@ 1987 Leisure Genius - + @@ -13314,7 +13314,7 @@ 1987 Leisure Genius - + @@ -13326,13 +13326,13 @@ 2014 Retrocoding Production - + - + @@ -13345,7 +13345,7 @@ 2014 Retrocoding Production - + @@ -13357,7 +13357,7 @@ 200? Emmanuel Boulanger - + @@ -13369,7 +13369,7 @@ 1987 France Image Logiciel (FIL) - + @@ -13381,7 +13381,7 @@ 1987 France Image Logiciel (FIL) - + @@ -13393,7 +13393,7 @@ 1987 France Image Logiciel (FIL) - + @@ -13405,7 +13405,7 @@ 1987 France Image Logiciel (FIL) - + @@ -13417,7 +13417,7 @@ 1987 France Image Logiciel (FIL) - + @@ -13429,7 +13429,7 @@ 1987 France Image Logiciel (FIL) - + @@ -13442,7 +13442,7 @@ 1987 France Image Logiciel (FIL) - + @@ -13455,7 +13455,7 @@ 19?? John Breaker - + @@ -13467,7 +13467,7 @@ 1987 Cedic/Nathan - + @@ -13479,7 +13479,7 @@ 1987 Cedic/Nathan - + @@ -13491,7 +13491,7 @@ 1986 France Image Logiciel (FIL) - + @@ -13503,7 +13503,7 @@ 1986 France Image Logiciel (FIL) - + @@ -13516,7 +13516,7 @@ 1986 France Image Logiciel (FIL) - + @@ -13529,7 +13529,7 @@ 1986 Infogrames - + @@ -13541,7 +13541,7 @@ 198? <unknown> - + @@ -13553,7 +13553,7 @@ 1987 Free Game Blot - + @@ -13565,7 +13565,7 @@ 1988 Loriciels - + @@ -13577,7 +13577,7 @@ 1988 Loriciels - + @@ -13589,7 +13589,7 @@ 1988 Loriciels - + @@ -13602,7 +13602,7 @@ 1988 Loriciels - + @@ -13615,7 +13615,7 @@ 1984 Loriciels - + @@ -13627,7 +13627,7 @@ 1987 SoftBook - + @@ -13640,7 +13640,7 @@ 1987 SoftBook - + @@ -13653,7 +13653,7 @@ 1986 Free Game Blot - + @@ -13666,7 +13666,7 @@ Loriciels - + @@ -13679,7 +13679,7 @@ Loriciels - + @@ -13691,7 +13691,7 @@ 1988 France Image Logiciel (FIL) - + @@ -13703,7 +13703,7 @@ 198? <unknown> - + @@ -13716,7 +13716,7 @@ 198? <unknown> - + @@ -13729,7 +13729,7 @@ 198? SoftBook - + @@ -13741,7 +13741,7 @@ 198? <bootleg (Shubert)> - + @@ -13753,7 +13753,7 @@ 1986 Infogrames - + @@ -13765,7 +13765,7 @@ 1986 Infogrames - + @@ -13777,7 +13777,7 @@ 1985 France Image Logiciel (FIL) - + @@ -13790,7 +13790,7 @@ 1987 Microids - + @@ -13804,7 +13804,7 @@ 1987 Microids - + @@ -13816,7 +13816,7 @@ 1986 France Image Logiciel (FIL) - + @@ -13828,7 +13828,7 @@ 1986 Infogrames - + @@ -13840,7 +13840,7 @@ 1986 <bootleg (G.A.D.J.O)> - + @@ -13852,7 +13852,7 @@ 1986 Chip - + @@ -13865,7 +13865,7 @@ 1986 Chip - + @@ -13878,7 +13878,7 @@ 1986 Chip - + @@ -13890,7 +13890,7 @@ 1986 Loriciels - + @@ -13902,7 +13902,7 @@ 1987 Infogrames - + @@ -13914,7 +13914,7 @@ 1987 Infogrames - + @@ -13926,7 +13926,7 @@ 1987 Infogrames - + @@ -13938,7 +13938,7 @@ 19?? John Breaker - + @@ -13950,7 +13950,7 @@ 2005 YRprod - + @@ -13962,7 +13962,7 @@ 2005 YRprod - + @@ -13974,7 +13974,7 @@ 2005 YRprod - + @@ -13986,7 +13986,7 @@ 2005 YRprod - + @@ -13998,7 +13998,7 @@ 1987 Christophe Thiburce - + @@ -14011,7 +14011,7 @@ TO TEK International - + @@ -14023,25 +14023,25 @@ 2002 Bledor-Soft - + - + - + - + @@ -14054,25 +14054,25 @@ 2002 Bledor-Soft - + - + - + - + @@ -14085,7 +14085,7 @@ 2002 Bledor-Soft - + @@ -14097,7 +14097,7 @@ 1988 France Image Logiciel (FIL) - + @@ -14110,7 +14110,7 @@ 1988 France Image Logiciel (FIL) - + @@ -14123,7 +14123,7 @@ 1987 France Image Logiciel (FIL) - + @@ -14135,7 +14135,7 @@ 1987 France Image Logiciel (FIL) - + @@ -14148,7 +14148,7 @@ 1987 Chip - + @@ -14162,7 +14162,7 @@ 1987 Chip - + @@ -14175,7 +14175,7 @@ 1987 Chip - + @@ -14187,7 +14187,7 @@ 198? Chip - + @@ -14199,7 +14199,7 @@ 198? Chip - + @@ -14211,7 +14211,7 @@ 1984 Free Game Blot - + @@ -14223,7 +14223,7 @@ 1984 Free Game Blot - + @@ -14235,7 +14235,7 @@ 1984 Free Game Blot - + @@ -14247,7 +14247,7 @@ 1985 Epyx - + @@ -14260,7 +14260,7 @@ 2005 YRprod - + @@ -14273,7 +14273,7 @@ 2005 YRprod - + @@ -14285,7 +14285,7 @@ 2005 YRprod - + @@ -14297,7 +14297,7 @@ 198? Ubisoft - + @@ -14309,7 +14309,7 @@ 198? Ubisoft - + @@ -14321,7 +14321,7 @@ 198? Ubisoft - + @@ -14333,13 +14333,13 @@ 1988 Loriciels - + - + @@ -14352,7 +14352,7 @@ 1988 <bootleg (The Crapaud Musulman)> - + @@ -14364,7 +14364,7 @@ 1988 Loriciels - + @@ -14377,7 +14377,7 @@ 1988 Loriciels - + @@ -14390,7 +14390,7 @@ 1988 <bootleg (Adolf Hitler)> - + @@ -14402,7 +14402,7 @@ 1988 <bootleg (Adolf Hitler)> - + @@ -14414,7 +14414,7 @@ 198? Free Game Blot - + @@ -14426,7 +14426,7 @@ 198? Free Game Blot - + @@ -14438,7 +14438,7 @@ 1987 Tilt - + @@ -14450,7 +14450,7 @@ 1986 Infogrames - + @@ -14462,7 +14462,7 @@ 1986 Infogrames - + @@ -14474,7 +14474,7 @@ 1986 Infogrames - + @@ -14487,7 +14487,7 @@ 1986 Infogrames - + @@ -14500,7 +14500,7 @@ 1984 Mars - + @@ -14512,7 +14512,7 @@ 1988 Coktel Vision - + @@ -14524,7 +14524,7 @@ 1986 France Image Logiciel (FIL) - + @@ -14536,7 +14536,7 @@ 1986 France Image Logiciel (FIL) - + @@ -14548,7 +14548,7 @@ 1986 France Image Logiciel (FIL) - + @@ -14560,7 +14560,7 @@ 1986 France Image Logiciel (FIL) - + @@ -14572,7 +14572,7 @@ 1986 France Image Logiciel (FIL) - + @@ -14584,7 +14584,7 @@ 1985 Free Game Blot - + @@ -14596,7 +14596,7 @@ 1985 Free Game Blot - + @@ -14608,7 +14608,7 @@ 1986 France Image Logiciel (FIL) - + @@ -14620,7 +14620,7 @@ 1986 France Image Logiciel (FIL) - + @@ -14633,7 +14633,7 @@ 1986 France Image Logiciel (FIL) - + @@ -14646,7 +14646,7 @@ 1988 France Image Logiciel (FIL) - + @@ -14658,7 +14658,7 @@ 1988 France Image Logiciel (FIL) - + @@ -14670,7 +14670,7 @@ 1988 France Image Logiciel (FIL) - + @@ -14684,7 +14684,7 @@ 19?? <unknown> - + @@ -14697,7 +14697,7 @@ 19?? <unknown> - + @@ -14711,7 +14711,7 @@ 19?? <unknown> - + @@ -14723,7 +14723,7 @@ 198? <unknown> - + @@ -14735,7 +14735,7 @@ 198? <unknown> - + @@ -14747,7 +14747,7 @@ 198? <unknown> - + @@ -14760,7 +14760,7 @@ 198? <unknown> - + @@ -14772,7 +14772,7 @@ 198? <unknown> - + @@ -14784,7 +14784,7 @@ 198? <unknown> - + @@ -14796,7 +14796,7 @@ 198? <unknown> - + @@ -14808,7 +14808,7 @@ ???? <unknown> - + @@ -14820,7 +14820,7 @@ ???? <unknown> - + diff -Nru mame-0.250+dfsg.1/hash/triton_rom.xml mame-0.251+dfsg.1/hash/triton_rom.xml --- mame-0.250+dfsg.1/hash/triton_rom.xml 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/hash/triton_rom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,20 @@ + + + + + + + + Fast VDU + 19?? + <unknown> + + + + + + + + diff -Nru mame-0.250+dfsg.1/hash/trs80_cass.xml mame-0.251+dfsg.1/hash/trs80_cass.xml --- mame-0.250+dfsg.1/hash/trs80_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/trs80_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/trs80_quik.xml mame-0.251+dfsg.1/hash/trs80_quik.xml --- mame-0.250+dfsg.1/hash/trs80_quik.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/trs80_quik.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ttwist_brainquest_cart.xml mame-0.251+dfsg.1/hash/ttwist_brainquest_cart.xml --- mame-0.250+dfsg.1/hash/ttwist_brainquest_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ttwist_brainquest_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/turboextreme_cart.xml mame-0.251+dfsg.1/hash/turboextreme_cart.xml --- mame-0.250+dfsg.1/hash/turboextreme_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/turboextreme_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/tutor.xml mame-0.251+dfsg.1/hash/tutor.xml --- mame-0.250+dfsg.1/hash/tutor.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/tutor.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/tvc_cass.xml mame-0.251+dfsg.1/hash/tvc_cass.xml --- mame-0.250+dfsg.1/hash/tvc_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/tvc_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/u110_card.xml mame-0.251+dfsg.1/hash/u110_card.xml --- mame-0.250+dfsg.1/hash/u110_card.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/u110_card.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/ut88.xml mame-0.251+dfsg.1/hash/ut88.xml --- mame-0.250+dfsg.1/hash/ut88.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/ut88.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/v1050_flop.xml mame-0.251+dfsg.1/hash/v1050_flop.xml --- mame-0.250+dfsg.1/hash/v1050_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/v1050_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/v1050_hdd.xml mame-0.251+dfsg.1/hash/v1050_hdd.xml --- mame-0.250+dfsg.1/hash/v1050_hdd.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/v1050_hdd.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/vbaby_cart.xml mame-0.251+dfsg.1/hash/vbaby_cart.xml --- mame-0.250+dfsg.1/hash/vbaby_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/vbaby_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/vector06_cart.xml mame-0.251+dfsg.1/hash/vector06_cart.xml --- mame-0.250+dfsg.1/hash/vector06_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/vector06_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/vector06_flop.xml mame-0.251+dfsg.1/hash/vector06_flop.xml --- mame-0.250+dfsg.1/hash/vector06_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/vector06_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/vectrex.xml mame-0.251+dfsg.1/hash/vectrex.xml --- mame-0.250+dfsg.1/hash/vectrex.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/vectrex.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/vgmplay.xml mame-0.251+dfsg.1/hash/vgmplay.xml --- mame-0.250+dfsg.1/hash/vgmplay.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/vgmplay.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/vic1001_cart.xml mame-0.251+dfsg.1/hash/vic1001_cart.xml --- mame-0.250+dfsg.1/hash/vic1001_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/vic1001_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/vic1001_flop.xml mame-0.251+dfsg.1/hash/vic1001_flop.xml --- mame-0.250+dfsg.1/hash/vic1001_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/vic1001_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/vic10.xml mame-0.251+dfsg.1/hash/vic10.xml --- mame-0.250+dfsg.1/hash/vic10.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/vic10.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/victor9k_flop.xml mame-0.251+dfsg.1/hash/victor9k_flop.xml --- mame-0.250+dfsg.1/hash/victor9k_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/victor9k_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/vidbrain.xml mame-0.251+dfsg.1/hash/vidbrain.xml --- mame-0.250+dfsg.1/hash/vidbrain.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/vidbrain.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/vip.xml mame-0.251+dfsg.1/hash/vip.xml --- mame-0.250+dfsg.1/hash/vip.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/vip.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/visicom.xml mame-0.251+dfsg.1/hash/visicom.xml --- mame-0.250+dfsg.1/hash/visicom.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/visicom.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/vixen.xml mame-0.251+dfsg.1/hash/vixen.xml --- mame-0.250+dfsg.1/hash/vixen.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/vixen.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/vsmileb_cart.xml mame-0.251+dfsg.1/hash/vsmileb_cart.xml --- mame-0.250+dfsg.1/hash/vsmileb_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/vsmileb_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/vtech_innotab_cart.xml mame-0.251+dfsg.1/hash/vtech_innotab_cart.xml --- mame-0.250+dfsg.1/hash/vtech_innotab_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/vtech_innotab_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/vtech_innotv_cart.xml mame-0.251+dfsg.1/hash/vtech_innotv_cart.xml --- mame-0.250+dfsg.1/hash/vtech_innotv_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/vtech_innotv_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/vtech_storio_cart.xml mame-0.251+dfsg.1/hash/vtech_storio_cart.xml --- mame-0.250+dfsg.1/hash/vtech_storio_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/vtech_storio_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,9 +1,9 @@ - + diff -Nru mame-0.250+dfsg.1/hash/vz_cass.xml mame-0.251+dfsg.1/hash/vz_cass.xml --- mame-0.250+dfsg.1/hash/vz_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/vz_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/waveterm.xml mame-0.251+dfsg.1/hash/waveterm.xml --- mame-0.250+dfsg.1/hash/waveterm.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/waveterm.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/wicat.xml mame-0.251+dfsg.1/hash/wicat.xml --- mame-0.250+dfsg.1/hash/wicat.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/wicat.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/wizard_cart.xml mame-0.251+dfsg.1/hash/wizard_cart.xml --- mame-0.250+dfsg.1/hash/wizard_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/wizard_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/wscolor.xml mame-0.251+dfsg.1/hash/wscolor.xml --- mame-0.250+dfsg.1/hash/wscolor.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/wscolor.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/x1_cass.xml mame-0.251+dfsg.1/hash/x1_cass.xml --- mame-0.250+dfsg.1/hash/x1_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/x1_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/x68k_flop.xml mame-0.251+dfsg.1/hash/x68k_flop.xml --- mame-0.250+dfsg.1/hash/x68k_flop.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/x68k_flop.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ + 38 Man Kilo no Kokuu 1989 システムサコム (System Sacom) @@ -440,26 +441,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + 38 Man Kilo no Kokuu (cracked) + 1989 + システムサコム (System Sacom) + + + + - + - + - + - + @@ -474,13 +507,13 @@ - + - + @@ -495,19 +528,19 @@ - + - + - + @@ -521,19 +554,19 @@ - + - + - + @@ -547,19 +580,19 @@ - + - + - + @@ -573,25 +606,25 @@ - + - + - + - + @@ -606,13 +639,13 @@ - + - + @@ -626,25 +659,25 @@ - + - + - + - + @@ -658,13 +691,13 @@ - + - + @@ -678,13 +711,13 @@ - + - + @@ -696,7 +729,7 @@ - + @@ -708,7 +741,7 @@ - + @@ -721,7 +754,7 @@ - + @@ -734,7 +767,7 @@ - + @@ -746,16 +779,17 @@ 電波新聞社 (Dempa Shinbunsha) + - + - + @@ -768,13 +802,13 @@ - + - + @@ -789,13 +823,13 @@ - + - + @@ -810,19 +844,19 @@ - + - + - + @@ -836,19 +870,19 @@ - + - + - + @@ -862,13 +896,13 @@ - + - + @@ -880,7 +914,7 @@ - + @@ -894,31 +928,31 @@ - + - + - + - + - + @@ -932,13 +966,13 @@ - + - + @@ -952,19 +986,19 @@ - + - + - + @@ -978,25 +1012,25 @@ - + - + - + - + @@ -1009,7 +1043,7 @@ - + @@ -1022,7 +1056,7 @@ - + @@ -1035,7 +1069,7 @@ - + @@ -1048,7 +1082,7 @@ - + @@ -1061,7 +1095,7 @@ - + @@ -1075,31 +1109,31 @@ - + - + - + - + - + @@ -1113,43 +1147,43 @@ - + - + - + - + - + - + - + @@ -1163,22 +1197,22 @@ - + - + - + - + @@ -1190,7 +1224,7 @@ - + @@ -1202,7 +1236,7 @@ - + @@ -1213,7 +1247,7 @@ ソニア (Sogna) - + @@ -1227,19 +1261,19 @@ - + - + - + @@ -1253,19 +1287,19 @@ - + - + - + @@ -1281,19 +1315,19 @@ - + - + - + @@ -1305,7 +1339,7 @@ - + @@ -1318,7 +1352,7 @@ - + @@ -1332,13 +1366,13 @@ - + - + @@ -1352,31 +1386,31 @@ - + - + - + - + - + @@ -1390,25 +1424,25 @@ - + - + - + - + @@ -1421,7 +1455,7 @@ - + @@ -1435,7 +1469,7 @@ - + @@ -1449,13 +1483,13 @@ - + - + @@ -1468,13 +1502,13 @@ - + - + @@ -1489,19 +1523,19 @@ - + - + - + @@ -1516,13 +1550,13 @@ - + - + @@ -1536,13 +1570,13 @@ - + - + @@ -1555,7 +1589,7 @@ - + @@ -1569,43 +1603,43 @@ - + - + - + - + - + - + - + @@ -1618,7 +1652,7 @@ - + @@ -1632,19 +1666,19 @@ - + - + - + @@ -1656,7 +1690,7 @@ - + @@ -1671,13 +1705,13 @@ - + - + @@ -1691,19 +1725,19 @@ - + - + - + @@ -1718,19 +1752,19 @@ - + - + - + @@ -1744,25 +1778,25 @@ - + - + - + - + @@ -1776,13 +1810,13 @@ - + - + @@ -1796,25 +1830,25 @@ - + - + - + - + @@ -1827,7 +1861,7 @@ - + @@ -1840,7 +1874,7 @@ - + @@ -1855,19 +1889,19 @@ - + - + - + @@ -1880,37 +1914,37 @@ - + - + - + - + - + - + @@ -1923,37 +1957,37 @@ - + - + - + - + - + - + @@ -1964,7 +1998,7 @@ エファット (Effat) - + @@ -1975,7 +2009,7 @@ エファット (Effat) - + @@ -1986,7 +2020,7 @@ エファット (Effat) - + @@ -1997,7 +2031,7 @@ エファット (Effat) - + @@ -2008,7 +2042,7 @@ エファット (Effat) - + @@ -2019,7 +2053,7 @@ エファット (Effat) - + @@ -2032,7 +2066,7 @@ - + @@ -2046,13 +2080,13 @@ - + - + @@ -2066,13 +2100,13 @@ - + - + @@ -2085,7 +2119,7 @@ - + @@ -2099,13 +2133,13 @@ - + - + @@ -2119,13 +2153,13 @@ - + - + @@ -2139,13 +2173,13 @@ - + - + @@ -2159,13 +2193,13 @@ - + - + @@ -2178,7 +2212,7 @@ - + @@ -2192,49 +2226,49 @@ - + - + - + - + - + - + - + - + @@ -2248,19 +2282,19 @@ - + - + - + @@ -2274,13 +2308,13 @@ - + - + @@ -2294,13 +2328,13 @@ - + - + @@ -2314,13 +2348,13 @@ - + - + @@ -2335,13 +2369,13 @@ - + - + @@ -2354,7 +2388,7 @@ - + @@ -2368,7 +2402,7 @@ - + @@ -2382,19 +2416,19 @@ - + - + - + @@ -2408,13 +2442,13 @@ - + - + @@ -2427,25 +2461,25 @@ - + - + - + - + @@ -2458,7 +2492,7 @@ - + @@ -2472,13 +2506,13 @@ - + - + @@ -2492,13 +2526,13 @@ - + - + @@ -2512,25 +2546,25 @@ - + - + - + - + @@ -2544,49 +2578,49 @@ - + - + - + - + - + - + - + - + @@ -2601,13 +2635,13 @@ - + - + @@ -2621,7 +2655,7 @@ - + @@ -2634,14 +2668,34 @@ + + + + + + + + + + + + + + Casablanca ni Ai o - Satsujin-sha wa Jikuu o Koete (cracked) + 1989 + シンキングラビット (Thinking Rabbit) + + + + - + - + @@ -2656,13 +2710,13 @@ - + - + @@ -2676,19 +2730,19 @@ - + - + - + @@ -2701,7 +2755,7 @@ - + @@ -2716,13 +2770,13 @@ - + - + @@ -2736,25 +2790,25 @@ - + - + - + - + @@ -2767,13 +2821,13 @@ - + - + @@ -2789,13 +2843,13 @@ - + - + @@ -2808,7 +2862,7 @@ - + @@ -2821,7 +2875,7 @@ - + @@ -2834,7 +2888,7 @@ - + @@ -2847,7 +2901,7 @@ - + @@ -2862,13 +2916,13 @@ - + - + @@ -2882,37 +2936,37 @@ - + - + - + - + - + - + @@ -2925,7 +2979,7 @@ - + @@ -2940,25 +2994,25 @@ - + - + - + - + @@ -2972,25 +3026,25 @@ - + - + - + - + @@ -3004,13 +3058,13 @@ - + - + @@ -3024,7 +3078,7 @@ - + @@ -3038,25 +3092,25 @@ - + - + - + - + @@ -3070,7 +3124,7 @@ - + @@ -3084,13 +3138,13 @@ - + - + @@ -3103,7 +3157,7 @@ - + @@ -3116,7 +3170,7 @@ - + @@ -3129,7 +3183,7 @@ - + @@ -3142,7 +3196,7 @@ - + @@ -3154,7 +3208,7 @@ - + @@ -3166,7 +3220,7 @@ - + @@ -3181,13 +3235,13 @@ - + - + @@ -3201,13 +3255,13 @@ - + - + @@ -3222,13 +3276,13 @@ - + - + @@ -3242,13 +3296,13 @@ - + - + @@ -3262,19 +3316,19 @@ - + - + - + @@ -3286,7 +3340,7 @@ - + @@ -3299,7 +3353,7 @@ - + @@ -3312,7 +3366,7 @@ - + @@ -3328,49 +3382,49 @@ - + - + - + - + - + - + - + - + @@ -3384,25 +3438,25 @@ - + - + - + - + @@ -3415,37 +3469,37 @@ - + - + - + - + - + - + @@ -3457,7 +3511,7 @@ - + @@ -3472,13 +3526,13 @@ - + - + @@ -3490,7 +3544,7 @@ - + @@ -3503,19 +3557,19 @@ - + - + - + @@ -3529,31 +3583,31 @@ - + - + - + - + - + @@ -3567,31 +3621,31 @@ - + - + - + - + - + @@ -3602,22 +3656,50 @@ 日本テレネット (Nihon Telenet) + + + + + + + + + + + + + + + + + + + + + + + Death Bringer (cracked) + 1989 + 日本テレネット (Nihon Telenet) + + + - + - + - + @@ -3631,7 +3713,7 @@ - + @@ -3643,13 +3725,13 @@ - + - + @@ -3661,13 +3743,13 @@ - + - + @@ -3681,13 +3763,13 @@ - + - + @@ -3701,13 +3783,13 @@ - + - + @@ -3718,7 +3800,7 @@ コナミ (Konami) - + @@ -3732,37 +3814,37 @@ - + - + - + - + - + - + @@ -3776,7 +3858,7 @@ - + @@ -3789,13 +3871,13 @@ - + - + @@ -3809,32 +3891,32 @@ - + - + - + - + - + @@ -3849,13 +3931,13 @@ - + - + @@ -3865,33 +3947,69 @@ 1988 システムサコム (System Sacom) - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dome (cracked) + 1988 + システムサコム (System Sacom) + + - + - + - + - + - + - + - + - + - + @@ -3904,13 +4022,13 @@ - + - + @@ -3924,25 +4042,25 @@ - + - + - + - + @@ -3956,25 +4074,25 @@ - + - + - + - + @@ -3988,25 +4106,25 @@ - + - + - + - + @@ -4018,61 +4136,61 @@ - + - + - + - + - + - + - + - + - + - + @@ -4086,37 +4204,37 @@ - + - + - + - + - + - + @@ -4130,13 +4248,13 @@ - + - + @@ -4150,55 +4268,55 @@ - + - + - + - + - + - + - + - + - + @@ -4212,13 +4330,13 @@ - + - + @@ -4231,13 +4349,13 @@ - + - + @@ -4252,25 +4370,25 @@ - + - + - + - + @@ -4283,7 +4401,7 @@ - + @@ -4297,7 +4415,7 @@ - + @@ -4311,19 +4429,19 @@ - + - + - + @@ -4337,19 +4455,19 @@ - + - + - + @@ -4363,13 +4481,13 @@ - + - + @@ -4383,25 +4501,25 @@ - + - + - + - + @@ -4415,37 +4533,37 @@ - + - + - + - + - + - + @@ -4460,79 +4578,79 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4546,19 +4664,19 @@ - + - + - + @@ -4572,13 +4690,13 @@ - + - + @@ -4592,19 +4710,19 @@ - + - + - + @@ -4618,13 +4736,13 @@ - + - + @@ -4638,13 +4756,13 @@ - + - + @@ -4658,13 +4776,13 @@ - + - + @@ -4679,19 +4797,19 @@ - + - + - + @@ -4705,19 +4823,19 @@ - + - + - + @@ -4731,25 +4849,25 @@ - + - + - + - + @@ -4763,13 +4881,13 @@ - + - + @@ -4782,38 +4900,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Emerald Dragon (cracked) + 1990 + グローディア (Glodia) + + + + - + - + - + - + - + - + - + - + @@ -4827,19 +4989,19 @@ - + - + - + @@ -4853,7 +5015,7 @@ - + @@ -4867,19 +5029,19 @@ - + - + - + @@ -4894,19 +5056,19 @@ - + - + - + @@ -4918,7 +5080,7 @@ - + @@ -4930,7 +5092,7 @@ - + @@ -4946,7 +5108,7 @@ - + @@ -4960,13 +5122,13 @@ - + - + @@ -4980,19 +5142,19 @@ - + - + - + @@ -5006,13 +5168,13 @@ - + - + @@ -5027,13 +5189,13 @@ - + - + @@ -5047,13 +5209,13 @@ - + - + @@ -5066,7 +5228,7 @@ - + @@ -5080,19 +5242,19 @@ - + - + - + @@ -5106,13 +5268,13 @@ - + - + @@ -5126,19 +5288,19 @@ - + - + - + @@ -5151,7 +5313,7 @@ - + @@ -5165,25 +5327,25 @@ - + - + - + - + @@ -5196,7 +5358,7 @@ - + @@ -5211,13 +5373,13 @@ - + - + @@ -5231,13 +5393,13 @@ - + - + @@ -5251,13 +5413,13 @@ - + - + @@ -5271,55 +5433,55 @@ - + - + - + - + - + - + - + - + - + @@ -5331,7 +5493,7 @@ - + @@ -5344,7 +5506,7 @@ - + @@ -5359,19 +5521,19 @@ - + - + - + @@ -5385,19 +5547,19 @@ - + - + - + @@ -5411,19 +5573,19 @@ - + - + - + @@ -5437,13 +5599,13 @@ - + - + @@ -5456,13 +5618,13 @@ - + - + @@ -5475,7 +5637,7 @@ - + @@ -5489,25 +5651,25 @@ - + - + - + - + @@ -5521,37 +5683,37 @@ - + - + - + - + - + - + @@ -5565,55 +5727,55 @@ - + - + - + - + - + - + - + - + - + @@ -5627,19 +5789,19 @@ - + - + - + @@ -5653,13 +5815,13 @@ - + - + @@ -5673,19 +5835,19 @@ - + - + - + @@ -5699,32 +5861,64 @@ - + - + - + - + + + + + + + Genocide 2 - Master of the Dark Communion + 1991 + Zoom + + + + + + + + + + + + + + + + + + + + + + + + - - Genocide 2 + + Genocide 2 - Master of the Dark Communion (cracked) 1991 Zoom @@ -5732,25 +5926,25 @@ - + - + - + - + - + - + - + @@ -5761,7 +5955,7 @@ Zoom - + @@ -5772,7 +5966,7 @@ Zoom - + @@ -5785,7 +5979,7 @@ - + @@ -5800,13 +5994,13 @@ - + - + @@ -5818,7 +6012,7 @@ - + @@ -5832,19 +6026,19 @@ - + - + - + @@ -5859,25 +6053,25 @@ - + - + - + - + @@ -5891,25 +6085,25 @@ - + - + - + - + @@ -5922,7 +6116,7 @@ - + @@ -5936,19 +6130,19 @@ - + - + - + @@ -5962,13 +6156,13 @@ - + - + @@ -5981,7 +6175,7 @@ - + @@ -5994,7 +6188,7 @@ - + @@ -6008,7 +6202,7 @@ - + @@ -6022,13 +6216,13 @@ - + - + @@ -6040,7 +6234,7 @@ - + @@ -6054,25 +6248,25 @@ - + - + - + - + @@ -6087,19 +6281,19 @@ - + - + - + @@ -6110,7 +6304,7 @@ ウルフチーム (Wolf Team) - + @@ -6124,13 +6318,13 @@ - + - + @@ -6144,13 +6338,13 @@ - + - + @@ -6164,13 +6358,13 @@ - + - + @@ -6184,13 +6378,13 @@ - + - + @@ -6204,7 +6398,7 @@ - + @@ -6216,7 +6410,7 @@ - + @@ -6229,7 +6423,7 @@ - + @@ -6243,13 +6437,13 @@ - + - + @@ -6263,19 +6457,19 @@ - + - + - + @@ -6288,25 +6482,25 @@ - + - + - + - + @@ -6320,13 +6514,13 @@ - + - + @@ -6339,7 +6533,7 @@ - + @@ -6354,13 +6548,13 @@ - + - + @@ -6373,7 +6567,7 @@ - + @@ -6388,19 +6582,19 @@ - + - + - + @@ -6414,7 +6608,7 @@ - + @@ -6426,7 +6620,7 @@ - + @@ -6440,19 +6634,19 @@ - + - + - + @@ -6466,19 +6660,19 @@ - + - + - + @@ -6493,61 +6687,61 @@ - + - + - + - + - + - + - + - + - + - + @@ -6561,13 +6755,13 @@ - + - + @@ -6581,13 +6775,13 @@ - + - + @@ -6601,13 +6795,13 @@ - + - + @@ -6621,13 +6815,13 @@ - + - + @@ -6641,13 +6835,13 @@ - + - + @@ -6661,19 +6855,19 @@ - + - + - + @@ -6686,7 +6880,7 @@ - + @@ -6700,13 +6894,13 @@ - + - + @@ -6720,19 +6914,19 @@ - + - + - + @@ -6745,37 +6939,37 @@ - + - + - + - + - + - + - + @@ -6790,19 +6984,19 @@ - + - + - + @@ -6816,13 +7010,13 @@ - + - + @@ -6836,19 +7030,19 @@ - + - + - + @@ -6862,13 +7056,13 @@ - + - + @@ -6882,19 +7076,19 @@ - + - + - + @@ -6907,7 +7101,7 @@ - + @@ -6921,13 +7115,13 @@ - + - + @@ -6941,19 +7135,19 @@ - + - + - + @@ -6966,7 +7160,7 @@ - + @@ -6980,19 +7174,19 @@ - + - + - + @@ -7006,13 +7200,13 @@ - + - + @@ -7026,13 +7220,13 @@ - + - + @@ -7044,7 +7238,7 @@ - + @@ -7056,7 +7250,7 @@ - + @@ -7071,31 +7265,31 @@ - + - + - + - + - + @@ -7108,7 +7302,7 @@ - + @@ -7122,13 +7316,13 @@ - + - + @@ -7142,13 +7336,13 @@ - + - + @@ -7162,13 +7356,13 @@ - + - + @@ -7180,7 +7374,7 @@ - + @@ -7194,31 +7388,31 @@ - + - + - + - + - + @@ -7232,19 +7426,19 @@ - + - + - + @@ -7258,19 +7452,19 @@ - + - + - + @@ -7284,25 +7478,25 @@ - + - + - + - + @@ -7314,7 +7508,7 @@ - + @@ -7328,31 +7522,31 @@ - + - + - + - + - + @@ -7366,25 +7560,25 @@ - + - + - + - + @@ -7399,19 +7593,19 @@ - + - + - + @@ -7425,31 +7619,31 @@ - + - + - + - + - + @@ -7462,7 +7656,7 @@ - + @@ -7475,7 +7669,7 @@ - + @@ -7489,13 +7683,13 @@ - + - + @@ -7509,25 +7703,25 @@ - + - + - + - + @@ -7541,19 +7735,19 @@ - + - + - + @@ -7567,19 +7761,19 @@ - + - + - + @@ -7591,7 +7785,7 @@ - + @@ -7605,19 +7799,19 @@ - + - + - + @@ -7631,13 +7825,13 @@ - + - + @@ -7651,13 +7845,13 @@ - + - + @@ -7671,7 +7865,7 @@ - + @@ -7684,7 +7878,7 @@ - + @@ -7698,13 +7892,13 @@ - + - + @@ -7716,7 +7910,7 @@ - + @@ -7731,13 +7925,13 @@ - + - + @@ -7751,37 +7945,37 @@ - + - + - + - + - + - + @@ -7795,19 +7989,19 @@ - + - + - + @@ -7819,7 +8013,7 @@ - + @@ -7833,25 +8027,25 @@ - + - + - + - + @@ -7864,31 +8058,31 @@ - + - + - + - + - + @@ -7902,13 +8096,13 @@ - + - + @@ -7923,19 +8117,19 @@ - + - + - + @@ -7948,7 +8142,7 @@ - + @@ -7962,13 +8156,13 @@ - + - + @@ -7982,13 +8176,13 @@ - + - + @@ -8002,25 +8196,25 @@ - + - + - + - + @@ -8033,7 +8227,7 @@ - + @@ -8046,13 +8240,13 @@ - + - + @@ -8066,25 +8260,25 @@ - + - + - + - + @@ -8098,19 +8292,19 @@ - + - + - + @@ -8122,7 +8316,7 @@ - + @@ -8136,43 +8330,43 @@ - + - + - + - + - + - + - + @@ -8186,13 +8380,13 @@ - + - + @@ -8203,7 +8397,7 @@ スティング (Sting) - + @@ -8217,13 +8411,13 @@ - + - + @@ -8236,7 +8430,7 @@ - + @@ -8248,7 +8442,7 @@ - + @@ -8262,37 +8456,37 @@ - + - + - + - + - + - + @@ -8305,7 +8499,7 @@ - + @@ -8319,31 +8513,31 @@ - + - + - + - + - + @@ -8357,13 +8551,13 @@ - + - + @@ -8377,13 +8571,13 @@ - + - + @@ -8397,13 +8591,13 @@ - + - + @@ -8417,31 +8611,31 @@ - + - + - + - + - + @@ -8455,13 +8649,13 @@ - + - + @@ -8474,7 +8668,7 @@ - + @@ -8488,19 +8682,19 @@ - + - + - + @@ -8514,25 +8708,25 @@ - + - + - + - + @@ -8546,13 +8740,13 @@ - + - + @@ -8565,7 +8759,7 @@ - + @@ -8578,7 +8772,7 @@ - + @@ -8592,25 +8786,25 @@ - + - + - + - + @@ -8623,7 +8817,7 @@ - + @@ -8637,13 +8831,13 @@ - + - + @@ -8656,7 +8850,7 @@ - + @@ -8670,13 +8864,13 @@ - + - + @@ -8690,25 +8884,25 @@ - + - + - + - + @@ -8722,25 +8916,25 @@ - + - + - + - + @@ -8754,13 +8948,13 @@ - + - + @@ -8774,31 +8968,31 @@ - + - + - + - + - + @@ -8812,13 +9006,13 @@ - + - + @@ -8832,19 +9026,19 @@ - + - + - + @@ -8858,19 +9052,19 @@ - + - + - + @@ -8884,25 +9078,25 @@ - + - + - + - + @@ -8915,31 +9109,31 @@ - + - + - + - + - + @@ -8953,13 +9147,13 @@ - + - + @@ -8973,7 +9167,7 @@ - + @@ -8985,7 +9179,7 @@ - + @@ -8998,7 +9192,7 @@ - + @@ -9012,13 +9206,13 @@ - + - + @@ -9032,19 +9226,19 @@ - + - + - + @@ -9058,13 +9252,13 @@ - + - + @@ -9078,19 +9272,19 @@ - + - + - + @@ -9104,19 +9298,19 @@ - + - + - + @@ -9130,25 +9324,25 @@ - + - + - + - + @@ -9162,13 +9356,13 @@ - + - + @@ -9180,13 +9374,13 @@ - + - + @@ -9200,13 +9394,13 @@ - + - + @@ -9221,43 +9415,43 @@ - + - + - + - + - + - + - + @@ -9271,31 +9465,31 @@ - + - + - + - + - + @@ -9309,13 +9503,13 @@ - + - + @@ -9329,25 +9523,25 @@ - + - + - + - + @@ -9361,19 +9555,19 @@ - + - + - + @@ -9387,19 +9581,19 @@ - + - + - + @@ -9413,31 +9607,31 @@ - + - + - + - + - + @@ -9451,7 +9645,7 @@ - + @@ -9464,7 +9658,7 @@ - + @@ -9477,7 +9671,7 @@ - + @@ -9490,7 +9684,7 @@ - + @@ -9503,7 +9697,7 @@ - + @@ -9516,7 +9710,7 @@ - + @@ -9529,7 +9723,7 @@ - + @@ -9543,19 +9737,19 @@ - + - + - + @@ -9568,7 +9762,7 @@ - + @@ -9582,31 +9776,31 @@ - + - + - + - + - + @@ -9620,25 +9814,25 @@ - + - + - + - + @@ -9651,7 +9845,7 @@ - + @@ -9665,7 +9859,7 @@ - + @@ -9679,7 +9873,7 @@ - + @@ -9693,31 +9887,31 @@ - + - + - + - + - + @@ -9730,13 +9924,13 @@ - + - + @@ -9750,25 +9944,25 @@ - + - + - + - + @@ -9780,25 +9974,25 @@ - + - + - + - + @@ -9812,13 +10006,13 @@ - + - + @@ -9832,13 +10026,13 @@ - + - + @@ -9851,7 +10045,7 @@ - + @@ -9865,7 +10059,7 @@ - + @@ -9880,19 +10074,19 @@ - + - + - + @@ -9906,7 +10100,7 @@ - + @@ -9919,7 +10113,7 @@ - + @@ -9933,13 +10127,13 @@ - + - + @@ -9953,12 +10147,12 @@ - + - + @@ -9970,7 +10164,7 @@ - + @@ -9984,13 +10178,13 @@ - + - + @@ -10004,19 +10198,19 @@ - + - + - + @@ -10031,13 +10225,13 @@ - + - + @@ -10051,13 +10245,13 @@ - + - + @@ -10070,7 +10264,7 @@ - + @@ -10083,7 +10277,7 @@ - + @@ -10096,7 +10290,7 @@ - + @@ -10110,19 +10304,19 @@ - + - + - + @@ -10136,19 +10330,19 @@ - + - + - + @@ -10162,25 +10356,25 @@ - + - + - + - + @@ -10194,19 +10388,19 @@ - + - + - + @@ -10220,13 +10414,13 @@ - + - + @@ -10240,25 +10434,25 @@ - + - + - + - + @@ -10272,31 +10466,31 @@ - + - + - + - + - + @@ -10309,7 +10503,7 @@ - + @@ -10323,13 +10517,13 @@ - + - + @@ -10343,19 +10537,19 @@ - + - + - + @@ -10368,7 +10562,7 @@ - + @@ -10382,19 +10576,19 @@ - + - + - + @@ -10408,37 +10602,37 @@ - + - + - + - + - + - + @@ -10451,7 +10645,7 @@ - + @@ -10464,7 +10658,7 @@ - + @@ -10480,7 +10674,7 @@ - + @@ -10494,7 +10688,7 @@ - + @@ -10507,7 +10701,7 @@ - + @@ -10521,13 +10715,13 @@ - + - + @@ -10539,7 +10733,7 @@ - + @@ -10552,13 +10746,13 @@ - + - + @@ -10571,31 +10765,31 @@ - + - + - + - + - + @@ -10609,31 +10803,31 @@ - + - + - + - + - + @@ -10648,19 +10842,19 @@ - + - + - + @@ -10672,7 +10866,7 @@ - + @@ -10684,7 +10878,7 @@ - + @@ -10697,19 +10891,19 @@ - + - + - + @@ -10722,13 +10916,13 @@ - + - + @@ -10742,13 +10936,13 @@ - + - + @@ -10766,7 +10960,7 @@ - + @@ -10779,25 +10973,25 @@ - + - + - + - + @@ -10810,7 +11004,7 @@ - + @@ -10823,7 +11017,7 @@ - + @@ -10836,7 +11030,7 @@ - + @@ -10851,13 +11045,13 @@ - + - + @@ -10870,7 +11064,7 @@ - + @@ -10884,13 +11078,13 @@ - + - + @@ -10905,25 +11099,25 @@ - + - + - + - + @@ -10936,7 +11130,7 @@ - + @@ -10950,13 +11144,13 @@ - + - + @@ -10969,7 +11163,7 @@ - + @@ -10983,7 +11177,7 @@ - + @@ -10996,7 +11190,7 @@ - + @@ -11010,25 +11204,25 @@ - + - + - + - + @@ -11042,25 +11236,25 @@ - + - + - + - + @@ -11074,19 +11268,19 @@ - + - + - + @@ -11099,25 +11293,25 @@ - + - + - + - + @@ -11131,19 +11325,19 @@ - + - + - + @@ -11157,19 +11351,19 @@ - + - + - + @@ -11182,7 +11376,7 @@ - + @@ -11195,7 +11389,7 @@ - + @@ -11209,43 +11403,43 @@ - + - + - + - + - + - + - + @@ -11259,13 +11453,13 @@ - + - + @@ -11279,13 +11473,13 @@ - + - + @@ -11300,13 +11494,13 @@ - + - + @@ -11319,7 +11513,7 @@ - + @@ -11332,7 +11526,7 @@ - + @@ -11345,7 +11539,7 @@ - + @@ -11357,7 +11551,7 @@ - + @@ -11370,7 +11564,7 @@ - + @@ -11385,13 +11579,13 @@ - + - + @@ -11404,7 +11598,7 @@ - + @@ -11418,43 +11612,43 @@ - + - + - + - + - + - + - + @@ -11468,25 +11662,25 @@ - + - + - + - + @@ -11500,13 +11694,13 @@ - + - + @@ -11519,7 +11713,7 @@ - + @@ -11533,7 +11727,7 @@ - + @@ -11546,7 +11740,7 @@ - + @@ -11559,7 +11753,7 @@ - + @@ -11572,7 +11766,7 @@ - + @@ -11585,7 +11779,7 @@ - + @@ -11599,37 +11793,37 @@ - + - + - + - + - + - + @@ -11643,19 +11837,19 @@ - + - + - + @@ -11669,19 +11863,19 @@ - + - + - + @@ -11695,25 +11889,25 @@ - + - + - + - + @@ -11726,7 +11920,7 @@ - + @@ -11740,13 +11934,13 @@ - + - + @@ -11759,7 +11953,7 @@ - + @@ -11774,19 +11968,19 @@ - + - + - + @@ -11800,19 +11994,19 @@ - + - + - + @@ -11825,7 +12019,7 @@ - + @@ -11839,19 +12033,19 @@ - + - + - + @@ -11864,19 +12058,19 @@ - + - + - + @@ -11890,13 +12084,13 @@ - + - + @@ -11910,19 +12104,19 @@ - + - + - + @@ -11936,19 +12130,19 @@ - + - + - + @@ -11962,25 +12156,25 @@ - + - + - + - + @@ -11993,7 +12187,7 @@ - + @@ -12008,13 +12202,13 @@ - + - + @@ -12027,7 +12221,7 @@ - + @@ -12041,13 +12235,13 @@ - + - + @@ -12061,19 +12255,19 @@ - + - + - + @@ -12087,13 +12281,13 @@ - + - + @@ -12106,7 +12300,7 @@ - + @@ -12118,7 +12312,7 @@ - + @@ -12132,19 +12326,19 @@ - + - + - + @@ -12158,19 +12352,19 @@ - + - + - + @@ -12183,7 +12377,7 @@ - + @@ -12197,13 +12391,13 @@ - + - + @@ -12216,7 +12410,7 @@ - + @@ -12229,7 +12423,7 @@ - + @@ -12243,7 +12437,7 @@ - + @@ -12254,7 +12448,7 @@ ハドソン (Hudson Soft) - + @@ -12268,25 +12462,25 @@ - + - + - + - + @@ -12299,49 +12493,49 @@ - + - + - + - + - + - + - + - + @@ -12354,13 +12548,13 @@ - + - + @@ -12374,13 +12568,13 @@ - + - + @@ -12394,13 +12588,13 @@ - + - + @@ -12413,13 +12607,13 @@ - + - + @@ -12431,7 +12625,7 @@ - + @@ -12444,50 +12638,87 @@ - + - + - Signatory Chouinsha + Signatory - Chouinsha + 1991 + NCS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Signatory - Chouinsha (cracked) 1991 NCS - + - + - + - + - + - + - + - + - + @@ -12500,43 +12731,43 @@ - + - + - + - + - + - + - + @@ -12548,7 +12779,7 @@ - + @@ -12560,7 +12791,7 @@ - + @@ -12571,7 +12802,7 @@ イマジニア (Imagineer) - + @@ -12582,7 +12813,7 @@ イマジニア (Imagineer) - + @@ -12594,7 +12825,7 @@ - + @@ -12605,7 +12836,7 @@ アスキー (ASCII) - + @@ -12617,7 +12848,7 @@ - + @@ -12630,7 +12861,7 @@ - + @@ -12644,30 +12875,31 @@ - + - + - + - + - + + Soft de Hard na Monogatari II 1989 システムサコム (System Sacom) @@ -12675,26 +12907,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Soft de Hard na Monogatari II (cracked) + 1989 + システムサコム (System Sacom) + + + + - + - + - + - + @@ -12708,19 +12972,19 @@ - + - + - + @@ -12734,13 +12998,13 @@ - + - + @@ -12754,43 +13018,43 @@ - + - + - + - + - + - + - + @@ -12804,19 +13068,19 @@ - + - + - + @@ -12829,7 +13093,7 @@ - + @@ -12843,13 +13107,13 @@ - + - + @@ -12862,7 +13126,7 @@ - + @@ -12876,13 +13140,13 @@ - + - + @@ -12895,7 +13159,7 @@ - + @@ -12907,7 +13171,7 @@ - + @@ -12921,13 +13185,13 @@ - + - + @@ -12941,13 +13205,13 @@ - + - + @@ -12961,7 +13225,7 @@ - + @@ -12974,7 +13238,7 @@ - + @@ -12987,7 +13251,7 @@ - + @@ -13001,13 +13265,13 @@ - + - + @@ -13020,13 +13284,13 @@ - + - + @@ -13037,7 +13301,7 @@ ビクター音楽産業 (Victor Musical Industries) - + @@ -13051,13 +13315,13 @@ - + - + @@ -13071,19 +13335,19 @@ - + - + - + @@ -13097,25 +13361,25 @@ - + - + - + - + @@ -13130,19 +13394,19 @@ - + - + - + @@ -13156,19 +13420,19 @@ - + - + - + @@ -13181,37 +13445,37 @@ - + - + - + - + - + - + @@ -13225,13 +13489,13 @@ - + - + @@ -13244,7 +13508,7 @@ - + @@ -13256,7 +13520,7 @@ - + @@ -13267,16 +13531,17 @@ Sharp + - + - + @@ -13290,19 +13555,19 @@ - + - + - + @@ -13315,13 +13580,13 @@ - + - + @@ -13335,13 +13600,13 @@ - + - + @@ -13355,37 +13620,37 @@ - + - + - + - + - + - + @@ -13399,55 +13664,55 @@ - + - + - + - + - + - + - + - + - + @@ -13462,43 +13727,43 @@ - + - + - + - + - + - + - + @@ -13512,13 +13777,13 @@ - + - + @@ -13532,19 +13797,19 @@ - + - + - + @@ -13554,16 +13819,17 @@ 1990 Sharp + - + - + @@ -13576,7 +13842,7 @@ - + @@ -13590,31 +13856,31 @@ - + - + - + - + - + @@ -13629,19 +13895,19 @@ - + - + - + @@ -13655,19 +13921,19 @@ - + - + - + @@ -13680,7 +13946,7 @@ - + @@ -13695,13 +13961,13 @@ - + - + @@ -13714,13 +13980,13 @@ - + - + @@ -13735,13 +14001,13 @@ - + - + @@ -13755,13 +14021,13 @@ - + - + @@ -13775,31 +14041,31 @@ - + - + - + - + - + @@ -13812,13 +14078,13 @@ - + - + @@ -13832,13 +14098,13 @@ - + - + @@ -13851,13 +14117,13 @@ - + - + @@ -13870,19 +14136,19 @@ - + - + - + @@ -13897,7 +14163,7 @@ - + @@ -13911,37 +14177,37 @@ - + - + - + - + - + - + @@ -13955,7 +14221,7 @@ - + @@ -13969,13 +14235,13 @@ - + - + @@ -13988,7 +14254,7 @@ - + @@ -14002,19 +14268,19 @@ - + - + - + @@ -14029,13 +14295,13 @@ - + - + @@ -14047,7 +14313,7 @@ - + @@ -14061,13 +14327,13 @@ - + - + @@ -14080,19 +14346,19 @@ - + - + - + @@ -14105,19 +14371,19 @@ - + - + - + @@ -14131,13 +14397,13 @@ - + - + @@ -14150,19 +14416,19 @@ - + - + - + @@ -14177,31 +14443,31 @@ - + - + - + - + - + @@ -14214,7 +14480,7 @@ - + @@ -14228,13 +14494,13 @@ - + - + @@ -14247,26 +14513,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Tritorn Final (cracked) + 1989 + ザインソフト (Zain Soft) + + + + - + - + - + - + @@ -14279,7 +14577,7 @@ - + @@ -14293,19 +14591,19 @@ - + - + - + @@ -14318,19 +14616,19 @@ - + - + - + @@ -14344,19 +14642,19 @@ - + - + - + @@ -14369,25 +14667,25 @@ - + - + - + - + @@ -14400,7 +14698,7 @@ - + @@ -14412,7 +14710,7 @@ - + @@ -14426,37 +14724,37 @@ - + - + - + - + - + - + @@ -14470,43 +14768,43 @@ - + - + - + - + - + - + - + @@ -14519,7 +14817,7 @@ - + @@ -14533,13 +14831,13 @@ - + - + @@ -14553,13 +14851,13 @@ - + - + @@ -14572,19 +14870,19 @@ - + - + - + @@ -14598,13 +14896,13 @@ - + - + @@ -14618,31 +14916,31 @@ - + - + - + - + - + @@ -14658,37 +14956,37 @@ - + - + - + - + - + - + @@ -14702,13 +15000,13 @@ - + - + @@ -14721,19 +15019,19 @@ - + - + - + @@ -14747,25 +15045,25 @@ - + - + - + - + @@ -14779,25 +15077,24 @@ - + - + - + - - + Warning Type 68 1988 コスモスコンピュータ (Cosmos Computer) @@ -14805,14 +15102,35 @@ + + + + + + + + + + + + + + + Warning Type 68 (cracked) + 1988 + コスモスコンピュータ (Cosmos Computer) + + + + - + - + @@ -14826,7 +15144,7 @@ - + @@ -14840,19 +15158,19 @@ - + - + - + @@ -14866,73 +15184,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -14946,13 +15264,13 @@ - + - + @@ -14966,19 +15284,19 @@ - + - + - + @@ -14992,37 +15310,37 @@ - + - + - + - + - + - + @@ -15037,67 +15355,67 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -15111,25 +15429,25 @@ - + - + - + - + @@ -15144,13 +15462,13 @@ - + - + @@ -15163,7 +15481,7 @@ - + @@ -15175,7 +15493,7 @@ - + @@ -15189,25 +15507,25 @@ - + - + - + - + @@ -15221,19 +15539,19 @@ - + - + - + @@ -15246,7 +15564,7 @@ - + @@ -15260,19 +15578,19 @@ - + - + - + @@ -15286,25 +15604,25 @@ - + - + - + - + @@ -15318,7 +15636,7 @@ - + @@ -15331,7 +15649,7 @@ - + @@ -15344,7 +15662,7 @@ - + @@ -15358,13 +15676,13 @@ - + - + @@ -15378,13 +15696,13 @@ - + - + @@ -15398,19 +15716,19 @@ - + - + - + @@ -15424,31 +15742,31 @@ - + - + - + - + - + @@ -15462,13 +15780,13 @@ - + - + @@ -15482,25 +15800,25 @@ - + - + - + - + @@ -15514,19 +15832,19 @@ - + - + - + @@ -15539,7 +15857,7 @@ - + @@ -15552,7 +15870,7 @@ - + @@ -15566,25 +15884,25 @@ - + - + - + - + @@ -15598,19 +15916,19 @@ - + - + - + @@ -15624,19 +15942,19 @@ - + - + - + @@ -15654,19 +15972,19 @@ - + - + - + @@ -15680,19 +15998,19 @@ - + - + - + @@ -15706,13 +16024,13 @@ - + - + @@ -15727,25 +16045,25 @@ - + - + - + - + @@ -15760,25 +16078,25 @@ - + - + - + - + @@ -15793,25 +16111,25 @@ - + - + - + - + @@ -15825,25 +16143,25 @@ - + - + - + - + @@ -15857,37 +16175,37 @@ - + - + - + - + - + - + @@ -15902,7 +16220,7 @@ Sharp ~ Hudson - + @@ -15913,7 +16231,7 @@ Sharp ~ Hudson - + @@ -15924,7 +16242,7 @@ Sharp ~ Hudson - + @@ -15936,7 +16254,7 @@ Sharp ~ Hudson - + @@ -15947,7 +16265,7 @@ Sharp ~ Hudson - + @@ -15958,7 +16276,7 @@ Sharp ~ Hudson - + @@ -15969,7 +16287,7 @@ Sharp ~ Hudson - + @@ -15980,7 +16298,7 @@ Sharp ~ Hudson - + @@ -15991,7 +16309,7 @@ Sharp ~ Hudson - + @@ -16004,67 +16322,115 @@ - + - + - + - + - + - SX-Window v3.1 (Alt) + SX-Window v3.1 (alt) 1993 Sharp - + - + - + - + - + + + + + + + SX-Window v3.1 (alt 2) + 1994 + Sharp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -16076,37 +16442,37 @@ - + - + - + - + - + - + @@ -16118,19 +16484,19 @@ - + - + - + @@ -16142,13 +16508,13 @@ - + - + @@ -16159,7 +16525,7 @@ Sharp - + @@ -16171,25 +16537,25 @@ - + - + - + - + @@ -16201,13 +16567,13 @@ - + - + @@ -16219,13 +16585,13 @@ - + - + @@ -16237,13 +16603,13 @@ - + - + @@ -16255,13 +16621,13 @@ - + - + @@ -16272,7 +16638,7 @@ Takeru - + @@ -16283,7 +16649,7 @@ Takeru - + @@ -16297,7 +16663,7 @@ <unknown> - + @@ -16308,7 +16674,7 @@ <unknown> - + @@ -16319,7 +16685,7 @@ SCB - + @@ -16331,19 +16697,19 @@ - + - + - + @@ -16355,19 +16721,19 @@ - + - + - + @@ -16379,19 +16745,19 @@ - + - + - + @@ -16403,19 +16769,19 @@ - + - + - + @@ -16426,7 +16792,7 @@ Cast - + @@ -16438,19 +16804,19 @@ - + - + - + @@ -16461,7 +16827,7 @@ Sharp - + @@ -16472,7 +16838,7 @@ Sharp - + @@ -16484,19 +16850,19 @@ - + - + - + @@ -16508,7 +16874,7 @@ First Class Technology - + @@ -16519,7 +16885,7 @@ Sharp - + @@ -16530,7 +16896,7 @@ DSP - + @@ -16541,7 +16907,7 @@ Expert Staff - + @@ -16553,19 +16919,19 @@ - + - + - + @@ -16577,13 +16943,13 @@ - + - + @@ -16595,13 +16961,13 @@ - + - + @@ -16612,7 +16978,7 @@ Wakatono - + @@ -16623,7 +16989,7 @@ First Class Technology - + @@ -16634,7 +17000,7 @@ First Class Technology - + @@ -16645,7 +17011,7 @@ East - + @@ -16656,7 +17022,7 @@ Sano Kouji - + @@ -16667,7 +17033,7 @@ Sano Kouji - + @@ -16679,13 +17045,13 @@ - + - + @@ -16697,13 +17063,13 @@ - + - + @@ -16714,7 +17080,7 @@ <unknown> - + @@ -16725,7 +17091,7 @@ <unknown> - + @@ -16736,7 +17102,7 @@ <unknown> - + @@ -16747,7 +17113,7 @@ <unknown> - + @@ -16758,7 +17124,7 @@ <unknown> - + @@ -16769,7 +17135,7 @@ <unknown> - + @@ -16780,7 +17146,7 @@ <unknown> - + @@ -16791,7 +17157,7 @@ Kyouto Media - + @@ -16802,7 +17168,7 @@ Kyouto Media - + @@ -16813,7 +17179,7 @@ Kyouto Media - + @@ -16824,7 +17190,7 @@ Kyouto Media - + @@ -16837,19 +17203,19 @@ - + - + - + @@ -16860,7 +17226,7 @@ Logos System - + @@ -16871,7 +17237,7 @@ ASP - + @@ -16883,13 +17249,13 @@ - + - + @@ -16901,13 +17267,13 @@ - + - + @@ -16918,7 +17284,7 @@ Oroji System Kaihatsu ~ Angel Soft - + @@ -16930,13 +17296,13 @@ - + - + @@ -16947,7 +17313,7 @@ YOH - + @@ -16959,25 +17325,25 @@ - + - + - + - + @@ -16988,7 +17354,7 @@ SPS - + @@ -16999,7 +17365,7 @@ Kyouto Media - + @@ -17010,7 +17376,7 @@ Kyouto Media - + @@ -17021,7 +17387,7 @@ Kyouto Media - + @@ -17032,7 +17398,30 @@ Kyouto Media - + + + + + + + + The Hot File Express (1993-10-28) + 1993 + Kyouto Media + + + + + + + + + The Hot File Express (1991-12-24) + 1991 + Kyouto Media + + + @@ -17044,13 +17433,13 @@ - + - + @@ -17062,13 +17451,13 @@ - + - + @@ -17079,7 +17468,7 @@ Hi Kon Ren Kikaku - + @@ -17091,13 +17480,13 @@ - + - + @@ -17108,7 +17497,7 @@ KOS - + @@ -17119,7 +17508,7 @@ Toyoshima - + @@ -17130,7 +17519,7 @@ Toyoshima - + @@ -17141,7 +17530,7 @@ Kiyo - + @@ -17152,7 +17541,7 @@ M.Harashino - + @@ -17163,7 +17552,7 @@ San Musical Service - + @@ -17175,13 +17564,13 @@ - + - + @@ -17193,13 +17582,13 @@ - + - + @@ -17211,7 +17600,7 @@ Meteor Art Technology - + @@ -17222,7 +17611,7 @@ Cross Line - + @@ -17234,13 +17623,13 @@ - + - + @@ -17254,31 +17643,31 @@ - + - + - + - + - + @@ -17290,7 +17679,7 @@ San Musical Service - + @@ -17301,7 +17690,7 @@ San Musical Service - + @@ -17313,13 +17702,13 @@ - + - + @@ -17330,7 +17719,7 @@ Zoom - + @@ -17342,13 +17731,13 @@ - + - + @@ -17359,7 +17748,7 @@ Sharp - + @@ -17370,7 +17759,7 @@ Sharp - + @@ -17381,7 +17770,7 @@ Sharp - + @@ -17393,25 +17782,25 @@ - + - + - + - + @@ -17422,7 +17811,7 @@ Sharp - + @@ -17433,7 +17822,7 @@ Shin Soft - + @@ -17444,12 +17833,12 @@ Sharp - + - + @@ -17461,7 +17850,7 @@ Etou Hiroshi - + @@ -17473,13 +17862,13 @@ - + - + @@ -17491,13 +17880,13 @@ - + - + @@ -17508,7 +17897,7 @@ システムサコム (System Sacom) - + @@ -17519,7 +17908,7 @@ Musical Plan - + @@ -17530,7 +17919,7 @@ Oh! Business - + @@ -17541,7 +17930,7 @@ Sharp - + @@ -17552,7 +17941,7 @@ Carrot Club - + @@ -17564,13 +17953,13 @@ - + - + @@ -17582,19 +17971,19 @@ - + - + - + @@ -17605,7 +17994,7 @@ SPS - + @@ -17616,7 +18005,7 @@ SPS - + @@ -17627,7 +18016,7 @@ <unknown> - + @@ -17638,7 +18027,7 @@ Protect Kougaku Kenkyuukai - + @@ -17649,7 +18038,7 @@ Protect Kougaku Kenkyuukai - + @@ -17661,25 +18050,25 @@ - + - + - + - + @@ -17691,31 +18080,31 @@ - + - + - + - + - + @@ -17727,31 +18116,31 @@ - + - + - + - + - + @@ -17762,7 +18151,7 @@ JEL - + @@ -17775,13 +18164,13 @@ - + - + @@ -17793,13 +18182,13 @@ - + - + @@ -17811,12 +18200,12 @@ <unknown> - + - + @@ -17828,13 +18217,13 @@ - + - + @@ -17846,13 +18235,13 @@ - + - + @@ -17863,7 +18252,7 @@ <unknown> - + @@ -17875,13 +18264,13 @@ - + - + @@ -17892,7 +18281,7 @@ <unknown> - + @@ -17903,7 +18292,7 @@ <unknown> - + @@ -17915,49 +18304,49 @@ - + - + - + - + - + - + - + - + @@ -17968,7 +18357,7 @@ Sharp - + @@ -17980,25 +18369,25 @@ - + - + - + - + @@ -18010,25 +18399,25 @@ - + - + - + - + @@ -18040,43 +18429,43 @@ - + - + - + - + - + - + - + @@ -18087,7 +18476,7 @@ Zeit - + @@ -18099,13 +18488,13 @@ - + - + @@ -18123,7 +18512,7 @@ Soft Bank - + @@ -18135,7 +18524,7 @@ Soft Bank - + @@ -18147,7 +18536,7 @@ Soft Bank - + @@ -18159,31 +18548,31 @@ - + - + - + - + - + @@ -18195,25 +18584,25 @@ - + - + - + - + @@ -18225,25 +18614,25 @@ - + - + - + - + @@ -18255,31 +18644,31 @@ - + - + - + - + - + @@ -18291,31 +18680,31 @@ - + - + - + - + - + @@ -18326,7 +18715,7 @@ Carrot Party - + @@ -18337,7 +18726,7 @@ Carrot Party - + @@ -18348,7 +18737,7 @@ Carrot Party - + @@ -18360,19 +18749,19 @@ - + - + - + @@ -18383,7 +18772,7 @@ Carrot Party - + @@ -18395,13 +18784,13 @@ - + - + @@ -18413,13 +18802,13 @@ - + - + @@ -18431,13 +18820,13 @@ - + - + @@ -18448,7 +18837,7 @@ エルフ (Elf) - + @@ -18461,19 +18850,19 @@ - + - + - + @@ -18486,7 +18875,7 @@ - + @@ -18499,7 +18888,7 @@ - + @@ -18512,7 +18901,7 @@ - + @@ -18525,7 +18914,7 @@ - + @@ -18538,7 +18927,7 @@ - + @@ -18552,7 +18941,7 @@ - + @@ -18565,7 +18954,7 @@ - + @@ -18578,7 +18967,7 @@ - + @@ -18591,7 +18980,7 @@ - + @@ -18604,7 +18993,7 @@ - + @@ -18617,7 +19006,7 @@ - + @@ -18630,7 +19019,7 @@ - + @@ -18644,13 +19033,13 @@ - + - + @@ -18663,7 +19052,7 @@ - + @@ -18676,7 +19065,7 @@ - + @@ -18689,7 +19078,7 @@ - + @@ -18702,7 +19091,7 @@ - + @@ -18715,7 +19104,7 @@ - + @@ -18728,7 +19117,7 @@ - + @@ -18741,7 +19130,7 @@ - + @@ -18754,7 +19143,7 @@ - + @@ -18767,7 +19156,7 @@ - + @@ -18780,7 +19169,7 @@ - + @@ -18793,7 +19182,7 @@ - + @@ -18806,7 +19195,7 @@ - + @@ -18819,7 +19208,7 @@ - + @@ -18832,7 +19221,7 @@ - + @@ -18846,13 +19235,13 @@ - + - + @@ -18865,7 +19254,7 @@ - + @@ -18878,7 +19267,7 @@ - + @@ -18891,7 +19280,7 @@ - + @@ -18904,7 +19293,7 @@ - + @@ -18917,7 +19306,7 @@ - + @@ -18930,7 +19319,7 @@ - + @@ -18943,7 +19332,7 @@ - + @@ -18956,7 +19345,7 @@ - + @@ -18969,7 +19358,7 @@ - + @@ -18982,7 +19371,7 @@ - + @@ -18995,7 +19384,7 @@ - + @@ -19008,7 +19397,7 @@ - + @@ -19021,7 +19410,7 @@ - + @@ -19034,7 +19423,7 @@ - + @@ -19047,7 +19436,7 @@ - + @@ -19060,7 +19449,7 @@ - + @@ -19074,13 +19463,13 @@ - + - + @@ -19093,7 +19482,7 @@ - + @@ -19106,7 +19495,7 @@ - + @@ -19119,7 +19508,7 @@ - + @@ -19132,7 +19521,7 @@ - + @@ -19145,7 +19534,7 @@ - + @@ -19158,7 +19547,7 @@ - + @@ -19171,7 +19560,7 @@ - + @@ -19184,7 +19573,7 @@ - + @@ -19197,7 +19586,7 @@ - + @@ -19210,7 +19599,7 @@ - + @@ -19223,7 +19612,7 @@ - + @@ -19237,13 +19626,13 @@ - + - + @@ -19256,7 +19645,7 @@ - + @@ -19269,7 +19658,7 @@ - + @@ -19282,7 +19671,7 @@ - + @@ -19295,7 +19684,7 @@ - + @@ -19308,7 +19697,7 @@ - + @@ -19321,7 +19710,7 @@ - + @@ -19334,7 +19723,7 @@ - + @@ -19347,7 +19736,7 @@ - + @@ -19360,7 +19749,7 @@ - + @@ -19373,7 +19762,7 @@ - + @@ -19386,7 +19775,7 @@ - + @@ -19399,7 +19788,7 @@ - + @@ -19412,7 +19801,7 @@ - + @@ -19425,7 +19814,7 @@ - + @@ -19438,7 +19827,7 @@ - + @@ -19451,7 +19840,7 @@ - + @@ -19464,7 +19853,7 @@ - + @@ -19477,7 +19866,7 @@ - + @@ -19490,7 +19879,7 @@ - + @@ -19503,7 +19892,7 @@ - + @@ -19517,13 +19906,13 @@ - + - + @@ -19537,13 +19926,13 @@ - + - + @@ -19557,13 +19946,13 @@ - + - + @@ -19577,13 +19966,13 @@ - + - + @@ -19597,13 +19986,13 @@ - + - + @@ -19617,13 +20006,13 @@ - + - + @@ -19637,13 +20026,13 @@ - + - + @@ -19657,13 +20046,13 @@ - + - + @@ -19677,13 +20066,13 @@ - + - + @@ -19697,13 +20086,13 @@ - + - + @@ -19717,13 +20106,13 @@ - + - + @@ -19737,13 +20126,13 @@ - + - + @@ -19757,13 +20146,13 @@ - + - + @@ -19777,13 +20166,13 @@ - + - + @@ -19797,13 +20186,13 @@ - + - + @@ -19815,7 +20204,7 @@ - + @@ -19829,13 +20218,13 @@ - + - + @@ -19849,13 +20238,13 @@ - + - + @@ -19869,13 +20258,13 @@ - + - + @@ -19888,13 +20277,13 @@ - + - + @@ -19908,13 +20297,13 @@ - + - + @@ -19927,13 +20316,13 @@ - + - + @@ -19946,13 +20335,13 @@ - + - + @@ -19965,13 +20354,13 @@ - + - + @@ -19984,13 +20373,13 @@ - + - + @@ -20003,13 +20392,13 @@ - + - + @@ -20022,13 +20411,13 @@ - + - + @@ -20041,13 +20430,13 @@ - + - + @@ -20060,13 +20449,13 @@ - + - + @@ -20079,13 +20468,13 @@ - + - + @@ -20098,13 +20487,13 @@ - + - + @@ -20117,13 +20506,13 @@ - + - + @@ -20136,13 +20525,13 @@ - + - + @@ -20155,13 +20544,13 @@ - + - + @@ -20174,13 +20563,13 @@ - + - + @@ -20193,13 +20582,13 @@ - + - + @@ -20212,13 +20601,13 @@ - + - + @@ -20231,13 +20620,13 @@ - + - + @@ -20250,13 +20639,13 @@ - + - + @@ -20269,13 +20658,13 @@ - + - + @@ -20288,13 +20677,13 @@ - + - + @@ -20307,13 +20696,13 @@ - + - + @@ -20326,13 +20715,13 @@ - + - + @@ -20345,13 +20734,13 @@ - + - + @@ -20364,13 +20753,13 @@ - + - + @@ -20383,13 +20772,13 @@ - + - + @@ -20402,13 +20791,13 @@ - + - + @@ -20421,13 +20810,13 @@ - + - + @@ -20440,13 +20829,13 @@ - + - + @@ -20459,13 +20848,13 @@ - + - + @@ -20478,13 +20867,13 @@ - + - + @@ -20497,13 +20886,13 @@ - + - + @@ -20516,13 +20905,13 @@ - + - + @@ -20535,13 +20924,13 @@ - + - + @@ -20554,13 +20943,13 @@ - + - + @@ -20573,13 +20962,13 @@ - + - + @@ -20592,13 +20981,13 @@ - + - + @@ -20611,13 +21000,13 @@ - + - + @@ -20630,13 +21019,13 @@ - + - + @@ -20649,13 +21038,13 @@ - + - + @@ -20668,13 +21057,13 @@ - + - + @@ -20687,13 +21076,13 @@ - + - + @@ -20706,13 +21095,13 @@ - + - + @@ -20725,13 +21114,13 @@ - + - + @@ -20744,13 +21133,13 @@ - + - + @@ -20762,7 +21151,7 @@ - + @@ -20774,7 +21163,7 @@ - + @@ -20786,7 +21175,7 @@ - + @@ -20797,7 +21186,7 @@ Elrin Da! - + @@ -20808,7 +21197,7 @@ SxT - + @@ -20819,7 +21208,7 @@ SxT - + @@ -20830,7 +21219,7 @@ Hayabusa Soft - + @@ -20843,19 +21232,19 @@ - + - + - + @@ -20867,19 +21256,19 @@ - + - + - + @@ -20892,37 +21281,37 @@ - + - + - + - + - + - + @@ -20934,37 +21323,37 @@ - + - + - + - + - + - + @@ -20975,7 +21364,7 @@ Soft Bank - + @@ -20987,7 +21376,7 @@ Soft Bank - + @@ -20998,7 +21387,7 @@ Soft Bank - + @@ -21010,7 +21399,7 @@ Soft Bank - + @@ -21021,7 +21410,7 @@ Soft Bank - + @@ -21034,7 +21423,7 @@ Soft Bank - + @@ -21046,7 +21435,7 @@ Soft Bank - + @@ -21057,7 +21446,7 @@ Soft Bank - + @@ -21068,7 +21457,7 @@ Soft Bank - + @@ -21079,7 +21468,7 @@ Soft Bank - + @@ -21090,7 +21479,7 @@ Soft Bank - + @@ -21101,7 +21490,7 @@ Soft Bank - + @@ -21112,7 +21501,7 @@ Soft Bank - + @@ -21124,7 +21513,7 @@ Soft Bank - + @@ -21135,7 +21524,7 @@ Soft Bank - + @@ -21147,7 +21536,7 @@ Soft Bank - + @@ -21158,7 +21547,7 @@ Soft Bank - + @@ -21169,7 +21558,7 @@ Soft Bank - + @@ -21180,7 +21569,7 @@ Soft Bank - + @@ -21192,13 +21581,13 @@ - + - + @@ -21209,7 +21598,7 @@ Nihon Sennou Club - + @@ -21220,7 +21609,7 @@ Nihon Sennou Club - + @@ -21233,7 +21622,7 @@ DCS - + @@ -21244,7 +21633,7 @@ Takechii Shachou - + @@ -21255,7 +21644,7 @@ Takechii Shachou - + @@ -21266,7 +21655,7 @@ Takechii Shachou - + @@ -21277,7 +21666,7 @@ Takechii Shachou - + @@ -21288,7 +21677,7 @@ Yippie Club - + @@ -21299,7 +21688,7 @@ Yippie Club - + @@ -21318,13 +21707,13 @@ - + - + @@ -21338,7 +21727,7 @@ - + @@ -21352,7 +21741,7 @@ - + @@ -21365,7 +21754,7 @@ - + @@ -21379,7 +21768,7 @@ - + @@ -21393,7 +21782,7 @@ - + @@ -21407,7 +21796,7 @@ - + @@ -21421,13 +21810,13 @@ - + - + @@ -21442,13 +21831,13 @@ - + - + @@ -21464,13 +21853,13 @@ - + - + @@ -21484,7 +21873,7 @@ - + @@ -21499,13 +21888,13 @@ - + - + @@ -21520,13 +21909,13 @@ - + - + @@ -21540,7 +21929,7 @@ - + @@ -21554,19 +21943,19 @@ - + - + - + @@ -21581,14 +21970,14 @@ - + - + @@ -21603,7 +21992,7 @@ - + @@ -21617,7 +22006,7 @@ - + @@ -21630,7 +22019,7 @@ - + @@ -21644,13 +22033,13 @@ - + - + @@ -21665,13 +22054,13 @@ - + - + @@ -21685,7 +22074,7 @@ - + @@ -21699,7 +22088,7 @@ - + @@ -21712,7 +22101,7 @@ - + @@ -21725,7 +22114,7 @@ - + @@ -21740,19 +22129,19 @@ - + - + - + @@ -21765,7 +22154,7 @@ - + @@ -21779,7 +22168,7 @@ - + @@ -21792,7 +22181,7 @@ - + @@ -21805,7 +22194,7 @@ - + @@ -21819,7 +22208,7 @@ - + @@ -21832,7 +22221,7 @@ - + @@ -21846,13 +22235,13 @@ - + - + @@ -21867,13 +22256,13 @@ - + - + @@ -21886,7 +22275,7 @@ - + @@ -21900,7 +22289,7 @@ - + @@ -21915,7 +22304,7 @@ - + @@ -21929,7 +22318,7 @@ - + @@ -21941,7 +22330,7 @@ - + @@ -21954,7 +22343,7 @@ - + @@ -21970,25 +22359,25 @@ - + - + - + - + @@ -22004,7 +22393,7 @@ - + @@ -22018,7 +22407,7 @@ - + @@ -22032,7 +22421,7 @@ - + @@ -22045,7 +22434,7 @@ - + @@ -22058,7 +22447,7 @@ - + @@ -22072,7 +22461,7 @@ - + @@ -22085,7 +22474,7 @@ - + @@ -22098,7 +22487,7 @@ - + @@ -22113,7 +22502,7 @@ - + @@ -22132,7 +22521,7 @@ - + @@ -22144,7 +22533,7 @@ - + @@ -22156,7 +22545,7 @@ - + @@ -22168,7 +22557,7 @@ - + @@ -22179,7 +22568,7 @@ <doujin> - + @@ -22192,7 +22581,7 @@ - + @@ -22206,7 +22595,7 @@ - + @@ -22218,7 +22607,7 @@ - + @@ -22231,7 +22620,7 @@ - + @@ -22243,7 +22632,7 @@ - + @@ -22255,7 +22644,7 @@ - + @@ -22268,7 +22657,7 @@ - + @@ -22280,7 +22669,7 @@ - + @@ -22292,7 +22681,7 @@ <doujin> - + @@ -22304,7 +22693,7 @@ - + @@ -22317,7 +22706,7 @@ - + @@ -22329,7 +22718,7 @@ - + @@ -22342,7 +22731,7 @@ - + @@ -22355,7 +22744,7 @@ - + @@ -22368,7 +22757,7 @@ - + @@ -22380,7 +22769,7 @@ - + @@ -22393,7 +22782,7 @@ - + @@ -22405,7 +22794,7 @@ - + @@ -22417,7 +22806,7 @@ - + @@ -22429,7 +22818,7 @@ - + @@ -22441,7 +22830,7 @@ - + @@ -22453,7 +22842,7 @@ - + @@ -22465,7 +22854,7 @@ - + @@ -22477,7 +22866,7 @@ - + @@ -22490,13 +22879,13 @@ - + - + @@ -22509,7 +22898,7 @@ - + @@ -22520,7 +22909,7 @@ <doujin> - + @@ -22532,7 +22921,7 @@ - + @@ -22544,7 +22933,7 @@ - + @@ -22557,7 +22946,7 @@ - + @@ -22570,13 +22959,13 @@ - + - + @@ -22588,7 +22977,7 @@ - + @@ -22601,19 +22990,19 @@ - + - + - + @@ -22626,7 +23015,7 @@ - + @@ -22638,7 +23027,7 @@ - + @@ -22650,7 +23039,7 @@ - + @@ -22662,7 +23051,7 @@ - + @@ -22673,7 +23062,7 @@ <doujin> - + @@ -22685,7 +23074,7 @@ - + @@ -22696,7 +23085,7 @@ <doujin> - + @@ -22708,7 +23097,7 @@ - + @@ -22720,7 +23109,7 @@ - + @@ -22732,7 +23121,7 @@ - + @@ -22745,7 +23134,7 @@ - + @@ -22757,7 +23146,7 @@ - + @@ -22769,7 +23158,7 @@ <doujin> - + @@ -22781,7 +23170,7 @@ - + @@ -22794,7 +23183,7 @@ - + @@ -22806,7 +23195,7 @@ - + @@ -22818,7 +23207,7 @@ - + @@ -22831,7 +23220,7 @@ - + @@ -22844,7 +23233,7 @@ - + @@ -22857,7 +23246,7 @@ - + @@ -22870,7 +23259,7 @@ - + @@ -22884,13 +23273,13 @@ - + - + @@ -22901,7 +23290,7 @@ <doujin> - + @@ -22914,7 +23303,7 @@ - + @@ -22928,13 +23317,13 @@ - + - + @@ -22947,7 +23336,7 @@ - + @@ -22960,7 +23349,7 @@ - + @@ -22974,13 +23363,13 @@ - + - + @@ -22994,13 +23383,13 @@ - + - + @@ -23012,7 +23401,7 @@ - + @@ -23024,7 +23413,7 @@ - + @@ -23036,7 +23425,7 @@ - + @@ -23049,7 +23438,7 @@ - + @@ -23061,7 +23450,7 @@ - + @@ -23073,7 +23462,7 @@ - + @@ -23086,7 +23475,7 @@ - + @@ -23098,7 +23487,7 @@ - + @@ -23110,7 +23499,7 @@ - + @@ -23123,7 +23512,7 @@ - + @@ -23135,7 +23524,7 @@ - + @@ -23150,13 +23539,13 @@ - + - + @@ -23169,13 +23558,13 @@ - + - + @@ -23189,7 +23578,7 @@ - + @@ -23203,7 +23592,7 @@ - + @@ -23217,7 +23606,7 @@ - + @@ -23228,7 +23617,7 @@ <doujin> - + @@ -23242,13 +23631,13 @@ - + - + @@ -23261,7 +23650,7 @@ - + @@ -23273,7 +23662,7 @@ - + @@ -23284,7 +23673,7 @@ <doujin> - + @@ -23295,7 +23684,7 @@ <doujin> - + @@ -23308,7 +23697,7 @@ - + @@ -23321,13 +23710,13 @@ - + - + @@ -23339,7 +23728,7 @@ - + @@ -23352,7 +23741,7 @@ - + @@ -23366,7 +23755,7 @@ - + @@ -23377,7 +23766,7 @@ <doujin> - + @@ -23388,7 +23777,7 @@ <doujin> - + @@ -23400,12 +23789,12 @@ - + - + @@ -23417,7 +23806,7 @@ - + @@ -23429,7 +23818,7 @@ - + @@ -23442,7 +23831,7 @@ - + @@ -23455,13 +23844,13 @@ - + - + @@ -23474,13 +23863,13 @@ - + - + @@ -23492,7 +23881,7 @@ - + @@ -23505,7 +23894,7 @@ - + @@ -23517,7 +23906,7 @@ - + @@ -23529,7 +23918,7 @@ - + @@ -23541,7 +23930,7 @@ - + @@ -23554,13 +23943,13 @@ - + - + @@ -23572,7 +23961,7 @@ - + @@ -23585,7 +23974,7 @@ - + @@ -23598,7 +23987,7 @@ - + @@ -23611,7 +24000,7 @@ - + @@ -23624,7 +24013,7 @@ - + @@ -23637,7 +24026,7 @@ - + @@ -23649,7 +24038,7 @@ - + @@ -23661,7 +24050,7 @@ <doujin> - + @@ -23674,7 +24063,7 @@ - + @@ -23686,7 +24075,7 @@ <doujin> - + @@ -23698,7 +24087,7 @@ - + @@ -23710,7 +24099,7 @@ - + @@ -23722,7 +24111,7 @@ - + @@ -23734,7 +24123,7 @@ - + @@ -23746,7 +24135,7 @@ - + @@ -23758,7 +24147,7 @@ - + @@ -23770,7 +24159,7 @@ - + @@ -23784,13 +24173,13 @@ - + - + @@ -23802,7 +24191,7 @@ - + @@ -23815,7 +24204,7 @@ - + @@ -23828,7 +24217,7 @@ - + @@ -23840,7 +24229,7 @@ - + @@ -23853,7 +24242,7 @@ - + @@ -23866,7 +24255,7 @@ - + @@ -23878,13 +24267,13 @@ - + - + @@ -23896,7 +24285,7 @@ - + @@ -23908,7 +24297,7 @@ - + @@ -23920,7 +24309,7 @@ - + @@ -23932,7 +24321,7 @@ - + @@ -23944,7 +24333,7 @@ - + @@ -23956,7 +24345,7 @@ - + @@ -23968,7 +24357,7 @@ - + @@ -23982,7 +24371,7 @@ - + @@ -23993,7 +24382,7 @@ <doujin> - + @@ -24007,7 +24396,7 @@ - + @@ -24019,7 +24408,7 @@ - + @@ -24031,7 +24420,7 @@ - + @@ -24043,7 +24432,7 @@ - + @@ -24056,13 +24445,13 @@ - + - + @@ -24074,7 +24463,7 @@ - + @@ -24086,7 +24475,7 @@ - + @@ -24098,7 +24487,7 @@ - + @@ -24110,7 +24499,7 @@ - + @@ -24122,7 +24511,7 @@ - + @@ -24134,7 +24523,7 @@ - + @@ -24146,7 +24535,7 @@ - + @@ -24160,19 +24549,19 @@ - + - + - + @@ -24184,19 +24573,19 @@ - + - + - + @@ -24208,7 +24597,7 @@ - + @@ -24220,7 +24609,7 @@ - + @@ -24233,13 +24622,13 @@ - + - + @@ -24251,7 +24640,7 @@ - + @@ -24263,13 +24652,13 @@ - + - + @@ -24281,7 +24670,7 @@ - + @@ -24293,7 +24682,7 @@ - + @@ -24304,7 +24693,7 @@ <doujin> - + @@ -24316,7 +24705,7 @@ - + @@ -24328,7 +24717,7 @@ - + @@ -24340,7 +24729,7 @@ - + @@ -24352,7 +24741,7 @@ - + @@ -24363,7 +24752,7 @@ <doujin> - + @@ -24374,7 +24763,7 @@ <doujin> - + @@ -24386,7 +24775,7 @@ <doujin> - + @@ -24398,7 +24787,7 @@ - + @@ -24411,7 +24800,7 @@ - + @@ -24423,7 +24812,7 @@ - + @@ -24435,7 +24824,7 @@ - + @@ -24448,7 +24837,7 @@ - + @@ -24460,7 +24849,7 @@ - + @@ -24472,7 +24861,7 @@ - + @@ -24483,7 +24872,7 @@ <doujin> - + @@ -24495,7 +24884,7 @@ - + @@ -24509,7 +24898,7 @@ - + @@ -24521,7 +24910,7 @@ - + @@ -24533,7 +24922,7 @@ <doujin> - + @@ -24545,7 +24934,7 @@ - + @@ -24558,7 +24947,7 @@ - + @@ -24570,7 +24959,7 @@ - + @@ -24583,19 +24972,19 @@ - + - + - + @@ -24607,7 +24996,7 @@ - + @@ -24619,7 +25008,7 @@ - + @@ -24631,7 +25020,7 @@ - + @@ -24643,7 +25032,7 @@ - + @@ -24657,25 +25046,25 @@ - + - + - + - + @@ -24687,7 +25076,7 @@ - + @@ -24699,7 +25088,7 @@ - + @@ -24712,7 +25101,7 @@ - + @@ -24725,13 +25114,13 @@ - + - + @@ -24743,7 +25132,7 @@ - + @@ -24754,7 +25143,7 @@ <doujin> - + @@ -24766,7 +25155,7 @@ - + @@ -24778,7 +25167,7 @@ - + @@ -24789,7 +25178,7 @@ <doujin> - + @@ -24801,7 +25190,7 @@ - + @@ -24814,7 +25203,7 @@ - + @@ -24826,7 +25215,7 @@ - + @@ -24838,7 +25227,7 @@ - + @@ -24850,7 +25239,7 @@ - + @@ -24862,7 +25251,7 @@ - + @@ -24873,7 +25262,7 @@ <doujin> - + @@ -24884,7 +25273,7 @@ <doujin> - + @@ -24895,7 +25284,7 @@ <doujin> - + @@ -24906,7 +25295,7 @@ <doujin> - + @@ -24917,7 +25306,7 @@ <doujin> - + @@ -24928,7 +25317,7 @@ <doujin> - + @@ -24939,7 +25328,7 @@ <doujin> - + @@ -24951,7 +25340,7 @@ - + @@ -24963,7 +25352,7 @@ - + @@ -24975,7 +25364,7 @@ - + @@ -24988,7 +25377,7 @@ - + @@ -25000,7 +25389,7 @@ - + @@ -25013,7 +25402,7 @@ - + @@ -25026,13 +25415,13 @@ - + - + @@ -25045,7 +25434,7 @@ - + @@ -25057,7 +25446,7 @@ - + @@ -25070,7 +25459,7 @@ - + @@ -25082,7 +25471,7 @@ - + @@ -25094,7 +25483,7 @@ - + @@ -25106,7 +25495,7 @@ <doujin> - + @@ -25118,7 +25507,7 @@ - + @@ -25130,7 +25519,7 @@ - + @@ -25142,7 +25531,7 @@ - + @@ -25155,7 +25544,7 @@ - + @@ -25167,7 +25556,7 @@ - + @@ -25180,7 +25569,7 @@ - + @@ -25192,7 +25581,7 @@ - + @@ -25204,7 +25593,7 @@ - + @@ -25216,7 +25605,7 @@ - + @@ -25228,7 +25617,7 @@ - + @@ -25240,7 +25629,7 @@ - + @@ -25252,7 +25641,7 @@ - + @@ -25264,7 +25653,7 @@ - + @@ -25276,7 +25665,7 @@ - + @@ -25289,19 +25678,19 @@ - + - + - + @@ -25312,7 +25701,7 @@ <doujin> - + @@ -25324,7 +25713,7 @@ - + @@ -25336,7 +25725,7 @@ - + @@ -25348,7 +25737,7 @@ - + @@ -25360,7 +25749,7 @@ - + @@ -25373,13 +25762,13 @@ - + - + @@ -25392,7 +25781,7 @@ - + @@ -25404,7 +25793,7 @@ - + @@ -25417,7 +25806,7 @@ - + @@ -25429,7 +25818,7 @@ - + @@ -25441,7 +25830,7 @@ - + @@ -25453,7 +25842,7 @@ - + @@ -25466,13 +25855,13 @@ - + - + @@ -25486,13 +25875,13 @@ - + - + @@ -25504,7 +25893,7 @@ - + @@ -25517,7 +25906,7 @@ - + @@ -25530,7 +25919,7 @@ - + @@ -25542,7 +25931,7 @@ - + @@ -25555,7 +25944,7 @@ - + @@ -25567,7 +25956,7 @@ - + @@ -25580,13 +25969,13 @@ - + - + @@ -25599,13 +25988,13 @@ - + - + @@ -25617,7 +26006,7 @@ - + @@ -25629,7 +26018,7 @@ - + @@ -25640,7 +26029,7 @@ <doujin> - + @@ -25652,7 +26041,7 @@ - + @@ -25664,7 +26053,7 @@ - + @@ -25676,7 +26065,7 @@ - + @@ -25689,7 +26078,7 @@ - + @@ -25700,7 +26089,7 @@ <doujin> - + @@ -25711,7 +26100,7 @@ <doujin> - + @@ -25724,7 +26113,7 @@ - + @@ -25737,13 +26126,13 @@ - + - + @@ -25756,7 +26145,7 @@ - + @@ -25769,25 +26158,25 @@ - + - + - + - + @@ -25799,7 +26188,7 @@ - + @@ -25811,7 +26200,7 @@ - + @@ -25823,7 +26212,7 @@ - + @@ -25835,7 +26224,7 @@ - + @@ -25847,7 +26236,7 @@ - + @@ -25860,7 +26249,7 @@ - + @@ -25872,7 +26261,7 @@ - + @@ -25884,7 +26273,7 @@ - + @@ -25898,7 +26287,7 @@ - + @@ -25910,7 +26299,7 @@ - + @@ -25923,7 +26312,7 @@ - + @@ -25935,7 +26324,7 @@ - + @@ -25947,7 +26336,7 @@ - + @@ -25959,7 +26348,7 @@ - + @@ -25971,7 +26360,7 @@ - + @@ -25985,13 +26374,13 @@ - + - + @@ -26004,7 +26393,7 @@ - + @@ -26016,7 +26405,7 @@ - + @@ -26028,7 +26417,7 @@ - + @@ -26043,13 +26432,13 @@ - + - + @@ -26062,13 +26451,13 @@ - + - + @@ -26080,7 +26469,7 @@ - + @@ -26092,7 +26481,7 @@ - + @@ -26106,13 +26495,13 @@ - + - + @@ -26124,7 +26513,7 @@ - + @@ -26137,7 +26526,7 @@ - + @@ -26149,7 +26538,7 @@ - + @@ -26161,7 +26550,7 @@ - + @@ -26174,7 +26563,7 @@ - + @@ -26186,7 +26575,7 @@ - + @@ -26198,7 +26587,7 @@ - + @@ -26210,7 +26599,7 @@ - + @@ -26222,7 +26611,7 @@ - + @@ -26233,7 +26622,7 @@ <doujin> - + @@ -26245,7 +26634,7 @@ <doujin> - + @@ -26258,13 +26647,13 @@ - + - + @@ -26276,7 +26665,7 @@ - + @@ -26289,7 +26678,7 @@ - + @@ -26301,7 +26690,7 @@ - + @@ -26313,7 +26702,7 @@ - + @@ -26325,7 +26714,7 @@ - + @@ -26337,7 +26726,7 @@ - + @@ -26349,7 +26738,7 @@ - + @@ -26361,7 +26750,7 @@ - + @@ -26374,13 +26763,13 @@ - + - + @@ -26393,13 +26782,13 @@ - + - + @@ -26412,19 +26801,19 @@ - + - + - + @@ -26436,7 +26825,7 @@ - + @@ -26449,7 +26838,7 @@ - + @@ -26461,7 +26850,7 @@ - + @@ -26473,7 +26862,7 @@ - + @@ -26485,7 +26874,7 @@ - + @@ -26497,7 +26886,7 @@ - + @@ -26510,13 +26899,13 @@ - + - + @@ -26528,7 +26917,7 @@ - + @@ -26540,7 +26929,7 @@ - + @@ -26554,13 +26943,13 @@ - + - + @@ -26573,13 +26962,13 @@ - + - + @@ -26591,7 +26980,7 @@ - + @@ -26604,13 +26993,13 @@ - + - + @@ -26623,13 +27012,13 @@ - + - + @@ -26641,7 +27030,7 @@ - + @@ -26653,7 +27042,7 @@ - + @@ -26665,7 +27054,7 @@ - + @@ -26677,7 +27066,7 @@ - + @@ -26689,7 +27078,7 @@ - + @@ -26701,7 +27090,7 @@ - + @@ -26713,7 +27102,7 @@ - + @@ -26726,19 +27115,19 @@ - + - + - + @@ -26751,7 +27140,7 @@ - + @@ -26763,7 +27152,7 @@ - + @@ -26775,7 +27164,7 @@ - + @@ -26787,7 +27176,7 @@ - + @@ -26799,7 +27188,7 @@ - + @@ -26810,7 +27199,7 @@ <doujin> - + @@ -26823,7 +27212,7 @@ - + @@ -26835,7 +27224,7 @@ - + @@ -26847,7 +27236,7 @@ - + @@ -26859,7 +27248,7 @@ - + @@ -26871,7 +27260,7 @@ - + @@ -26883,7 +27272,7 @@ - + @@ -26896,13 +27285,13 @@ - + - + @@ -26916,15 +27305,15 @@ - - + + - - + + @@ -26936,7 +27325,7 @@ - + @@ -26948,7 +27337,7 @@ - + @@ -26960,7 +27349,7 @@ - + @@ -26973,7 +27362,7 @@ - + @@ -26984,7 +27373,7 @@ <doujin> - + @@ -26996,7 +27385,7 @@ - + @@ -27008,7 +27397,7 @@ - + @@ -27020,7 +27409,7 @@ - + @@ -27034,13 +27423,13 @@ - + - + @@ -27053,7 +27442,7 @@ - + @@ -27066,7 +27455,7 @@ - + @@ -27078,7 +27467,7 @@ - + @@ -27092,13 +27481,13 @@ - + - + @@ -27110,7 +27499,7 @@ - + @@ -27122,7 +27511,7 @@ - + @@ -27133,7 +27522,7 @@ <doujin> - + @@ -27146,7 +27535,7 @@ - + @@ -27158,7 +27547,7 @@ - + @@ -27170,7 +27559,7 @@ - + @@ -27182,7 +27571,7 @@ - + @@ -27194,7 +27583,7 @@ - + @@ -27208,7 +27597,7 @@ - + @@ -27220,7 +27609,7 @@ - + @@ -27233,7 +27622,7 @@ - + @@ -27244,7 +27633,7 @@ <doujin> - + @@ -27255,7 +27644,7 @@ <doujin> - + @@ -27267,7 +27656,7 @@ - + @@ -27279,7 +27668,7 @@ - + @@ -27291,7 +27680,7 @@ - + @@ -27304,13 +27693,13 @@ - + - + @@ -27323,13 +27712,13 @@ - + - + @@ -27341,7 +27730,7 @@ - + @@ -27353,7 +27742,7 @@ - + @@ -27365,7 +27754,7 @@ - + @@ -27379,13 +27768,13 @@ - + - + @@ -27398,7 +27787,7 @@ - + @@ -27410,7 +27799,7 @@ - + @@ -27423,7 +27812,7 @@ - + @@ -27435,7 +27824,7 @@ - + @@ -27447,7 +27836,7 @@ - + @@ -27459,7 +27848,7 @@ - + @@ -27471,7 +27860,7 @@ - + @@ -27483,7 +27872,7 @@ - + @@ -27494,7 +27883,7 @@ <doujin> - + @@ -27506,7 +27895,7 @@ - + @@ -27518,7 +27907,7 @@ - + @@ -27531,13 +27920,13 @@ - + - + @@ -27549,7 +27938,7 @@ - + @@ -27561,7 +27950,7 @@ - + @@ -27573,7 +27962,7 @@ - + @@ -27585,7 +27974,7 @@ - + @@ -27597,7 +27986,7 @@ - + @@ -27609,7 +27998,7 @@ - + @@ -27622,19 +28011,19 @@ - + - + - + @@ -27647,7 +28036,7 @@ - + @@ -27659,7 +28048,7 @@ - + @@ -27671,7 +28060,7 @@ - + @@ -27683,7 +28072,7 @@ - + @@ -27695,7 +28084,7 @@ - + @@ -27707,7 +28096,7 @@ - + @@ -27719,7 +28108,7 @@ - + @@ -27731,7 +28120,7 @@ - + @@ -27744,7 +28133,7 @@ - + @@ -27757,13 +28146,13 @@ - + - + @@ -27775,7 +28164,7 @@ - + @@ -27788,7 +28177,7 @@ - + @@ -27800,7 +28189,7 @@ - + @@ -27811,7 +28200,7 @@ <doujin> - + @@ -27823,7 +28212,7 @@ - + @@ -27836,13 +28225,13 @@ - + - + @@ -27855,13 +28244,13 @@ - + - + @@ -27873,7 +28262,7 @@ - + @@ -27885,7 +28274,7 @@ - + @@ -27897,7 +28286,7 @@ - + @@ -27909,7 +28298,7 @@ - + @@ -27921,7 +28310,7 @@ - + @@ -27933,7 +28322,7 @@ - + @@ -27946,7 +28335,7 @@ - + @@ -27958,7 +28347,7 @@ - + @@ -27970,7 +28359,7 @@ - + @@ -27982,7 +28371,7 @@ - + @@ -27994,7 +28383,7 @@ - + @@ -28006,7 +28395,7 @@ - + @@ -28018,7 +28407,7 @@ - + @@ -28030,7 +28419,7 @@ - + @@ -28043,7 +28432,7 @@ - + @@ -28055,7 +28444,7 @@ - + @@ -28067,7 +28456,7 @@ - + @@ -28079,7 +28468,7 @@ - + @@ -28091,7 +28480,7 @@ - + @@ -28103,7 +28492,7 @@ - + @@ -28115,7 +28504,7 @@ - + @@ -28127,7 +28516,7 @@ - + @@ -28139,7 +28528,7 @@ - + @@ -28152,19 +28541,19 @@ - + - + - + @@ -28176,7 +28565,7 @@ - + @@ -28188,7 +28577,7 @@ - + @@ -28201,7 +28590,7 @@ - + @@ -28213,7 +28602,7 @@ - + @@ -28225,7 +28614,7 @@ - + @@ -28237,7 +28626,7 @@ - + @@ -28249,7 +28638,7 @@ - + @@ -28263,13 +28652,13 @@ - + - + @@ -28281,7 +28670,7 @@ - + @@ -28294,13 +28683,13 @@ - + - + @@ -28312,7 +28701,7 @@ - + @@ -28323,7 +28712,7 @@ <doujin> - + @@ -28335,7 +28724,7 @@ - + @@ -28347,7 +28736,7 @@ - + @@ -28359,7 +28748,7 @@ - + @@ -28370,7 +28759,7 @@ <doujin> - + @@ -28383,7 +28772,7 @@ - + @@ -28395,7 +28784,7 @@ - + @@ -28407,7 +28796,7 @@ - + @@ -28421,13 +28810,13 @@ - + - + @@ -28439,7 +28828,7 @@ - + @@ -28451,7 +28840,7 @@ - + @@ -28463,7 +28852,7 @@ - + @@ -28475,7 +28864,7 @@ - + @@ -28487,7 +28876,7 @@ - + @@ -28499,7 +28888,7 @@ - + @@ -28511,7 +28900,7 @@ - + @@ -28522,7 +28911,7 @@ <doujin> - + @@ -28534,7 +28923,7 @@ - + @@ -28546,7 +28935,7 @@ - + @@ -28558,7 +28947,7 @@ - + @@ -28570,7 +28959,7 @@ - + @@ -28583,7 +28972,7 @@ - + @@ -28594,7 +28983,7 @@ <doujin> - + @@ -28606,7 +28995,7 @@ - + @@ -28618,7 +29007,7 @@ - + @@ -28630,7 +29019,7 @@ - + @@ -28643,7 +29032,7 @@ - + @@ -28657,7 +29046,7 @@ - + @@ -28669,7 +29058,7 @@ - + @@ -28681,7 +29070,7 @@ - + @@ -28693,7 +29082,7 @@ - + @@ -28706,13 +29095,13 @@ - + - + @@ -28726,7 +29115,7 @@ - + @@ -28738,7 +29127,7 @@ - + @@ -28750,7 +29139,7 @@ - + @@ -28762,7 +29151,7 @@ - + @@ -28774,7 +29163,7 @@ - + @@ -28787,13 +29176,13 @@ - + - + @@ -28806,13 +29195,13 @@ - + - + @@ -28824,7 +29213,7 @@ - + @@ -28836,7 +29225,7 @@ - + @@ -28848,7 +29237,7 @@ - + @@ -28861,19 +29250,19 @@ - + - + - + @@ -28886,19 +29275,19 @@ - + - + - + @@ -28911,13 +29300,13 @@ - + - + @@ -28929,7 +29318,7 @@ - + @@ -28942,13 +29331,13 @@ - + - + @@ -28960,7 +29349,7 @@ - + @@ -28971,7 +29360,7 @@ <doujin> - + @@ -28983,7 +29372,7 @@ - + @@ -28995,7 +29384,7 @@ - + @@ -29007,7 +29396,7 @@ - + @@ -29018,7 +29407,7 @@ <doujin> - + @@ -29029,7 +29418,7 @@ <doujin> - + @@ -29040,7 +29429,7 @@ <doujin> - + @@ -29052,7 +29441,7 @@ - + @@ -29065,13 +29454,13 @@ - + - + @@ -29084,13 +29473,13 @@ - + - + @@ -29102,7 +29491,7 @@ - + @@ -29118,7 +29507,7 @@ - + @@ -29130,7 +29519,7 @@ - + @@ -29143,13 +29532,13 @@ - + - + @@ -29161,7 +29550,7 @@ - + @@ -29173,13 +29562,13 @@ - + - + @@ -29191,7 +29580,7 @@ - + @@ -29203,7 +29592,7 @@ - + @@ -29215,7 +29604,7 @@ - + @@ -29227,7 +29616,7 @@ - + @@ -29238,7 +29627,7 @@ <doujin> - + @@ -29250,7 +29639,7 @@ - + @@ -29262,7 +29651,7 @@ - + @@ -29274,7 +29663,7 @@ - + @@ -29287,13 +29676,13 @@ - + - + @@ -29307,7 +29696,7 @@ - + @@ -29319,7 +29708,7 @@ - + @@ -29331,7 +29720,7 @@ - + @@ -29343,7 +29732,7 @@ - + @@ -29355,7 +29744,7 @@ - + @@ -29368,7 +29757,7 @@ - + @@ -29380,7 +29769,7 @@ - + @@ -29394,13 +29783,13 @@ - + - + @@ -29412,7 +29801,7 @@ - + @@ -29425,19 +29814,19 @@ - + - + - + @@ -29449,7 +29838,7 @@ - + @@ -29461,7 +29850,7 @@ - + @@ -29473,7 +29862,7 @@ - + @@ -29486,13 +29875,13 @@ - + - + @@ -29504,7 +29893,7 @@ - + @@ -29516,7 +29905,7 @@ - + @@ -29528,7 +29917,7 @@ <doujin> - + @@ -29541,7 +29930,7 @@ - + @@ -29553,7 +29942,7 @@ - + @@ -29565,7 +29954,7 @@ - + @@ -29578,13 +29967,13 @@ - + - + @@ -29596,7 +29985,7 @@ - + @@ -29608,7 +29997,7 @@ - + @@ -29620,7 +30009,7 @@ - + @@ -29632,7 +30021,7 @@ - + @@ -29644,7 +30033,7 @@ - + @@ -29656,7 +30045,7 @@ - + @@ -29669,7 +30058,7 @@ - + @@ -29681,7 +30070,7 @@ - + @@ -29693,7 +30082,7 @@ - + @@ -29706,7 +30095,7 @@ - + @@ -29718,7 +30107,7 @@ - + @@ -29730,7 +30119,7 @@ - + @@ -29742,7 +30131,7 @@ - + @@ -29754,7 +30143,7 @@ - + @@ -29766,7 +30155,7 @@ - + @@ -29778,7 +30167,7 @@ - + @@ -29790,7 +30179,7 @@ - + @@ -29803,13 +30192,13 @@ - + - + @@ -29822,7 +30211,7 @@ - + @@ -29834,7 +30223,7 @@ - + @@ -29847,13 +30236,13 @@ - + - + @@ -29865,7 +30254,7 @@ - + @@ -29877,7 +30266,7 @@ - + @@ -29889,7 +30278,7 @@ - + @@ -29901,7 +30290,7 @@ - + @@ -29913,7 +30302,7 @@ - + @@ -29925,7 +30314,7 @@ - + @@ -29937,7 +30326,7 @@ - + @@ -29949,7 +30338,7 @@ - + @@ -29961,7 +30350,7 @@ - + @@ -29973,7 +30362,7 @@ - + @@ -29985,7 +30374,7 @@ - + @@ -29998,7 +30387,7 @@ - + @@ -30010,7 +30399,7 @@ - + @@ -30022,7 +30411,7 @@ - + @@ -30035,7 +30424,7 @@ - + @@ -30047,7 +30436,7 @@ - + @@ -30059,7 +30448,7 @@ - + @@ -30071,7 +30460,7 @@ - + @@ -30083,7 +30472,7 @@ - + @@ -30095,7 +30484,7 @@ - + @@ -30107,7 +30496,7 @@ - + @@ -30119,7 +30508,7 @@ - + @@ -30131,7 +30520,7 @@ - + @@ -30143,7 +30532,7 @@ - + @@ -30155,7 +30544,7 @@ - + @@ -30167,7 +30556,7 @@ - + @@ -30179,7 +30568,7 @@ - + @@ -30191,7 +30580,7 @@ - + @@ -30203,7 +30592,7 @@ - + @@ -30215,7 +30604,7 @@ - + @@ -30228,7 +30617,7 @@ - + @@ -30239,7 +30628,7 @@ <doujin> - + @@ -30251,7 +30640,7 @@ - + @@ -30263,7 +30652,7 @@ - + @@ -30274,7 +30663,7 @@ <doujin> - + @@ -30286,7 +30675,7 @@ <doujin> - + @@ -30298,7 +30687,7 @@ - + @@ -30311,7 +30700,7 @@ - + @@ -30324,7 +30713,7 @@ - + @@ -30337,13 +30726,13 @@ - + - + @@ -30356,13 +30745,13 @@ - + - + @@ -30374,7 +30763,7 @@ - + @@ -30386,7 +30775,7 @@ - + @@ -30400,7 +30789,7 @@ - + @@ -30411,7 +30800,7 @@ <doujin> - + @@ -30423,7 +30812,7 @@ - + @@ -30435,7 +30824,7 @@ - + @@ -30447,7 +30836,7 @@ - + @@ -30460,13 +30849,13 @@ - + - + @@ -30478,7 +30867,7 @@ - + @@ -30490,7 +30879,7 @@ - + @@ -30502,7 +30891,7 @@ - + @@ -30515,7 +30904,7 @@ - + @@ -30527,7 +30916,7 @@ - + @@ -30539,7 +30928,7 @@ - + @@ -30552,7 +30941,7 @@ - + @@ -30564,7 +30953,7 @@ - + @@ -30575,7 +30964,7 @@ <doujin> - + @@ -30587,7 +30976,7 @@ - + @@ -30599,7 +30988,7 @@ - + @@ -30612,7 +31001,7 @@ - + @@ -30623,7 +31012,7 @@ <doujin> - + @@ -30635,7 +31024,7 @@ - + @@ -30647,7 +31036,7 @@ - + @@ -30659,7 +31048,7 @@ - + @@ -30671,7 +31060,7 @@ - + @@ -30683,7 +31072,7 @@ - + @@ -30695,7 +31084,7 @@ - + @@ -30707,7 +31096,7 @@ - + @@ -30719,7 +31108,7 @@ - + @@ -30731,7 +31120,7 @@ - + @@ -30743,7 +31132,7 @@ - + @@ -30755,7 +31144,7 @@ - + @@ -30768,7 +31157,7 @@ - + @@ -30780,7 +31169,7 @@ - + @@ -30792,13 +31181,13 @@ - + - + @@ -30810,7 +31199,7 @@ - + @@ -30822,7 +31211,7 @@ - + @@ -30834,7 +31223,7 @@ - + @@ -30846,7 +31235,7 @@ - + @@ -30860,13 +31249,13 @@ - + - + @@ -30879,7 +31268,7 @@ - + @@ -30891,7 +31280,7 @@ <doujin> - + @@ -30903,7 +31292,7 @@ - + @@ -30915,7 +31304,7 @@ - + @@ -30927,7 +31316,7 @@ - + @@ -30939,7 +31328,7 @@ - + @@ -30951,7 +31340,7 @@ - + @@ -30963,7 +31352,7 @@ - + @@ -30975,7 +31364,7 @@ - + @@ -30987,7 +31376,7 @@ - + @@ -31000,7 +31389,7 @@ - + @@ -31012,7 +31401,7 @@ - + @@ -31024,7 +31413,7 @@ - + @@ -31036,7 +31425,7 @@ - + @@ -31048,7 +31437,7 @@ - + @@ -31061,13 +31450,13 @@ - + - + @@ -31080,7 +31469,7 @@ - + @@ -31093,7 +31482,7 @@ - + @@ -31105,7 +31494,7 @@ - + @@ -31117,7 +31506,7 @@ - + @@ -31129,7 +31518,7 @@ - + @@ -31141,7 +31530,7 @@ - + @@ -31154,13 +31543,13 @@ - + - + @@ -31173,13 +31562,13 @@ - + - + @@ -31192,13 +31581,13 @@ - + - + @@ -31210,7 +31599,7 @@ - + @@ -31222,7 +31611,7 @@ - + @@ -31234,7 +31623,7 @@ - + @@ -31246,7 +31635,7 @@ - + @@ -31258,7 +31647,7 @@ - + @@ -31272,7 +31661,7 @@ - + @@ -31284,7 +31673,7 @@ - + @@ -31296,7 +31685,7 @@ - + @@ -31309,7 +31698,7 @@ - + @@ -31321,7 +31710,7 @@ - + @@ -31333,7 +31722,7 @@ - + @@ -31345,7 +31734,7 @@ - + @@ -31358,13 +31747,13 @@ - + - + @@ -31377,13 +31766,13 @@ - + - + @@ -31396,13 +31785,13 @@ - + - + @@ -31415,7 +31804,7 @@ - + @@ -31426,7 +31815,7 @@ <doujin> - + @@ -31437,7 +31826,7 @@ <doujin> - + @@ -31449,7 +31838,7 @@ - + @@ -31462,7 +31851,7 @@ - + @@ -31474,7 +31863,7 @@ - + @@ -31486,7 +31875,7 @@ - + @@ -31498,7 +31887,7 @@ - + @@ -31510,7 +31899,7 @@ - + @@ -31524,7 +31913,7 @@ - + @@ -31536,7 +31925,7 @@ - + @@ -31548,7 +31937,7 @@ - + @@ -31560,7 +31949,7 @@ - + @@ -31572,7 +31961,7 @@ - + @@ -31584,7 +31973,7 @@ - + @@ -31595,7 +31984,7 @@ <doujin> - + @@ -31606,7 +31995,7 @@ <doujin> - + @@ -31618,7 +32007,7 @@ - + @@ -31630,7 +32019,7 @@ - + @@ -31643,7 +32032,7 @@ - + @@ -31655,7 +32044,7 @@ - + @@ -31667,7 +32056,7 @@ - + @@ -31679,7 +32068,7 @@ - + @@ -31692,7 +32081,7 @@ - + @@ -31704,7 +32093,7 @@ - + @@ -31717,13 +32106,13 @@ - + - + @@ -31736,19 +32125,19 @@ - + - + - + @@ -31761,13 +32150,13 @@ - + - + @@ -31780,13 +32169,13 @@ - + - + @@ -31797,7 +32186,7 @@ <doujin> - + @@ -31809,7 +32198,7 @@ - + @@ -31822,13 +32211,13 @@ - + - + @@ -31840,7 +32229,7 @@ - + @@ -31853,7 +32242,7 @@ - + @@ -31865,7 +32254,7 @@ - + @@ -31878,7 +32267,7 @@ - + @@ -31890,7 +32279,7 @@ - + @@ -31901,7 +32290,7 @@ <doujin> - + @@ -31913,7 +32302,7 @@ - + @@ -31925,7 +32314,7 @@ - + @@ -31937,7 +32326,7 @@ - + @@ -31950,13 +32339,13 @@ - + - + @@ -31967,7 +32356,7 @@ <doujin> - + @@ -31979,7 +32368,7 @@ - + @@ -31991,7 +32380,7 @@ - + @@ -32003,7 +32392,7 @@ - + @@ -32017,13 +32406,13 @@ - + - + @@ -32035,7 +32424,7 @@ - + @@ -32048,13 +32437,13 @@ - + - + @@ -32066,7 +32455,7 @@ - + @@ -32080,13 +32469,13 @@ - + - + @@ -32098,7 +32487,7 @@ - + @@ -32110,7 +32499,7 @@ - + @@ -32122,7 +32511,7 @@ - + @@ -32134,7 +32523,7 @@ - + @@ -32146,7 +32535,7 @@ - + @@ -32160,7 +32549,7 @@ - + @@ -32173,13 +32562,13 @@ - + - + @@ -32191,7 +32580,7 @@ - + @@ -32203,7 +32592,7 @@ - + @@ -32215,7 +32604,7 @@ - + @@ -32227,7 +32616,7 @@ - + @@ -32239,7 +32628,7 @@ - + @@ -32251,7 +32640,7 @@ - + @@ -32263,7 +32652,7 @@ - + @@ -32275,7 +32664,7 @@ - + @@ -32287,7 +32676,7 @@ - + @@ -32299,7 +32688,7 @@ - + @@ -32310,7 +32699,7 @@ <doujin> - + @@ -32323,13 +32712,13 @@ - + - + @@ -32341,7 +32730,7 @@ - + @@ -32352,7 +32741,7 @@ <doujin> - + @@ -32364,7 +32753,7 @@ - + @@ -32376,7 +32765,7 @@ - + @@ -32388,7 +32777,7 @@ - + @@ -32400,7 +32789,7 @@ - + @@ -32412,7 +32801,7 @@ - + @@ -32424,7 +32813,7 @@ - + @@ -32437,7 +32826,7 @@ - + @@ -32449,7 +32838,7 @@ - + @@ -32462,7 +32851,7 @@ - + @@ -32474,7 +32863,7 @@ - + @@ -32486,7 +32875,7 @@ - + @@ -32499,7 +32888,7 @@ - + @@ -32511,7 +32900,7 @@ - + @@ -32523,7 +32912,7 @@ - + @@ -32535,7 +32924,7 @@ - + @@ -32547,7 +32936,7 @@ - + @@ -32559,7 +32948,7 @@ - + @@ -32571,7 +32960,7 @@ - + @@ -32583,7 +32972,7 @@ - + @@ -32600,7 +32989,7 @@ <doujin> - + @@ -32612,7 +33001,7 @@ - + @@ -32627,7 +33016,7 @@ - + diff -Nru mame-0.250+dfsg.1/hash/xegs.xml mame-0.251+dfsg.1/hash/xegs.xml --- mame-0.250+dfsg.1/hash/xegs.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/xegs.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/xerox820.xml mame-0.251+dfsg.1/hash/xerox820.xml --- mame-0.250+dfsg.1/hash/xerox820.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/xerox820.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/z80clock.xml mame-0.251+dfsg.1/hash/z80clock.xml --- mame-0.250+dfsg.1/hash/z80clock.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/z80clock.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/z80ne_cass.xml mame-0.251+dfsg.1/hash/z80ne_cass.xml --- mame-0.250+dfsg.1/hash/z80ne_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/z80ne_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/z88_cart.xml mame-0.251+dfsg.1/hash/z88_cart.xml --- mame-0.250+dfsg.1/hash/z88_cart.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/z88_cart.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/zorba.xml mame-0.251+dfsg.1/hash/zorba.xml --- mame-0.250+dfsg.1/hash/zorba.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/zorba.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/hash/zx81_cass.xml mame-0.251+dfsg.1/hash/zx81_cass.xml --- mame-0.250+dfsg.1/hash/zx81_cass.xml 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/hash/zx81_cass.xml 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/emu/layout/dualhsxs.lay mame-0.251+dfsg.1/src/emu/layout/dualhsxs.lay --- mame-0.250+dfsg.1/src/emu/layout/dualhsxs.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/emu/layout/dualhsxs.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/emu/layout/dualhuov.lay mame-0.251+dfsg.1/src/emu/layout/dualhuov.lay --- mame-0.250+dfsg.1/src/emu/layout/dualhuov.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/emu/layout/dualhuov.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/emu/layout/ex800.lay mame-0.251+dfsg.1/src/emu/layout/ex800.lay --- mame-0.250+dfsg.1/src/emu/layout/ex800.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/emu/layout/ex800.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/emu/layout/exorterm155.lay mame-0.251+dfsg.1/src/emu/layout/exorterm155.lay --- mame-0.250+dfsg.1/src/emu/layout/exorterm155.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/emu/layout/exorterm155.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/emu/layout/hp9122c.lay mame-0.251+dfsg.1/src/emu/layout/hp9122c.lay --- mame-0.250+dfsg.1/src/emu/layout/hp9122c.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/emu/layout/hp9122c.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/emu/layout/ie15.lay mame-0.251+dfsg.1/src/emu/layout/ie15.lay --- mame-0.250+dfsg.1/src/emu/layout/ie15.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/emu/layout/ie15.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/emu/layout/lx800.lay mame-0.251+dfsg.1/src/emu/layout/lx800.lay --- mame-0.250+dfsg.1/src/emu/layout/lx800.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/emu/layout/lx800.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/emu/layout/monitors.lay mame-0.251+dfsg.1/src/emu/layout/monitors.lay --- mame-0.250+dfsg.1/src/emu/layout/monitors.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/emu/layout/monitors.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/emu/layout/nes_rob.lay mame-0.251+dfsg.1/src/emu/layout/nes_rob.lay --- mame-0.250+dfsg.1/src/emu/layout/nes_rob.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/emu/layout/nes_rob.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/emu/layout/noscreens.lay mame-0.251+dfsg.1/src/emu/layout/noscreens.lay --- mame-0.250+dfsg.1/src/emu/layout/noscreens.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/emu/layout/noscreens.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/emu/layout/quadhsxs.lay mame-0.251+dfsg.1/src/emu/layout/quadhsxs.lay --- mame-0.250+dfsg.1/src/emu/layout/quadhsxs.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/emu/layout/quadhsxs.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/emu/layout/qx10ascii.lay mame-0.251+dfsg.1/src/emu/layout/qx10ascii.lay --- mame-0.250+dfsg.1/src/emu/layout/qx10ascii.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/emu/layout/qx10ascii.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/emu/layout/qx10hasci.lay mame-0.251+dfsg.1/src/emu/layout/qx10hasci.lay --- mame-0.250+dfsg.1/src/emu/layout/qx10hasci.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/emu/layout/qx10hasci.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/emu/layout/smartboard.lay mame-0.251+dfsg.1/src/emu/layout/smartboard.lay --- mame-0.250+dfsg.1/src/emu/layout/smartboard.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/emu/layout/smartboard.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/emu/layout/triphsxs.lay mame-0.251+dfsg.1/src/emu/layout/triphsxs.lay --- mame-0.250+dfsg.1/src/emu/layout/triphsxs.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/emu/layout/triphsxs.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/emu/tilemap.cpp mame-0.251+dfsg.1/src/emu/tilemap.cpp --- mame-0.250+dfsg.1/src/emu/tilemap.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/emu/tilemap.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1617,8 +1617,7 @@ //------------------------------------------------- -// set_flip_all - set a global flip for all the -// tilemaps +// create - allocate a tilemap //------------------------------------------------- tilemap_t &tilemap_manager::create(device_gfx_interface &decoder, tilemap_get_info_delegate tile_get_info, tilemap_mapper_delegate mapper, u16 tilewidth, u16 tileheight, u32 cols, u32 rows, tilemap_t *allocated) diff -Nru mame-0.250+dfsg.1/src/frontend/mame/clifront.cpp mame-0.251+dfsg.1/src/frontend/mame/clifront.cpp --- mame-0.250+dfsg.1/src/frontend/mame/clifront.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/clifront.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1732,7 +1732,7 @@ path_iterator iter(m_options.plugins_path()); std::string pluginpath; while (iter.next(pluginpath)) - plugin_opts.scan_directory(osd_subst_env(pluginpath), true); + plugin_opts.scan_directory(pluginpath, true); emu_file file_plugin(OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); if (file_plugin.open("plugin.ini")) diff -Nru mame-0.250+dfsg.1/src/frontend/mame/luaengine.cpp mame-0.251+dfsg.1/src/frontend/mame/luaengine.cpp --- mame-0.250+dfsg.1/src/frontend/mame/luaengine.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/luaengine.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1172,7 +1172,7 @@ e.set_value(string_format("%d", val), OPTION_PRIORITY_CMDLINE); }, [this](core_options::entry &e, const char *val) { - if(e.type() != core_options::option_type::STRING) + if(e.type() != core_options::option_type::STRING && e.type() != core_options::option_type::PATH && e.type() != core_options::option_type::MULTIPATH) luaL_error(m_lua_state, "Cannot set option to wrong type"); else e.set_value(val, OPTION_PRIORITY_CMDLINE); @@ -1315,29 +1315,6 @@ } return rot; }); - game_driver_type["type"] = sol::property( - [] (game_driver const &driver) - { - // FIXME: this shouldn't be called type - there's potendial for confusion with the device type - // also, this should eventually go away in favour of richer flags - std::string type; - switch (driver.flags & machine_flags::MASK_TYPE) - { - case machine_flags::TYPE_ARCADE: - type = "arcade"; - break; - case machine_flags::TYPE_CONSOLE: - type = "console"; - break; - case machine_flags::TYPE_COMPUTER: - type = "computer"; - break; - default: - type = "other"; - break; - } - return type; - }); game_driver_type["not_working"] = sol::property([] (game_driver const &driver) { return (driver.flags & machine_flags::NOT_WORKING) != 0; }); game_driver_type["supports_save"] = sol::property([] (game_driver const &driver) { return (driver.flags & machine_flags::SUPPORTS_SAVE) != 0; }); game_driver_type["no_cocktail"] = sol::property([] (game_driver const &driver) { return (driver.flags & machine_flags::NO_COCKTAIL) != 0; }); diff -Nru mame-0.250+dfsg.1/src/frontend/mame/mame.cpp mame-0.251+dfsg.1/src/frontend/mame/mame.cpp --- mame-0.250+dfsg.1/src/frontend/mame/mame.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/mame.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -142,10 +142,7 @@ std::string pluginpath; while (iter.next(pluginpath)) { - // user may specify environment variables; subsitute them - pluginpath = osd_subst_env(pluginpath); - - // and then scan the directory recursively + // scan the directory recursively m_plugins->scan_directory(pluginpath, true); } @@ -202,7 +199,7 @@ std::error_condition const filerr = file.open("boot.lua"); if (!filerr) { - const std::string exppath = osd_subst_env(file.fullpath()); + const std::string exppath = file.fullpath(); auto &l(*lua()); auto load_result = l.load_script(exppath); if (!load_result.valid()) @@ -266,7 +263,7 @@ m_options.revert(OPTION_PRIORITY_INI); std::ostringstream errors; - mame_options::parse_standard_inis(m_options, errors); + mame_options::parse_standard_inis(m_options, errors, system); } // otherwise, perform validity checks before anything else @@ -300,7 +297,10 @@ else { if (machine.exit_pending()) + { m_options.set_system_name(""); + m_options.set_value(OPTION_BIOS, "", OPTION_PRIORITY_CMDLINE); + } } if (machine.exit_pending() && (!started_empty || is_empty)) diff -Nru mame-0.250+dfsg.1/src/frontend/mame/mameopts.cpp mame-0.251+dfsg.1/src/frontend/mame/mameopts.cpp --- mame-0.250+dfsg.1/src/frontend/mame/mameopts.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/mameopts.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -46,50 +46,53 @@ if (!cursystem) return; - // parse "vertical.ini" or "horizont.ini" - if (cursystem->flags & ORIENTATION_SWAP_XY) - parse_one_ini(options, "vertical", OPTION_PRIORITY_ORIENTATION_INI, &error_stream); - else - parse_one_ini(options, "horizont", OPTION_PRIORITY_ORIENTATION_INI, &error_stream); - - switch (cursystem->flags & machine_flags::MASK_TYPE) + if (&GAME_NAME(___empty) != cursystem) // hacky - this thing isn't a real system { - case machine_flags::TYPE_ARCADE: - parse_one_ini(options, "arcade", OPTION_PRIORITY_SYSTYPE_INI, &error_stream); - break; - case machine_flags::TYPE_CONSOLE: - parse_one_ini(options ,"console", OPTION_PRIORITY_SYSTYPE_INI, &error_stream); - break; - case machine_flags::TYPE_COMPUTER: - parse_one_ini(options, "computer", OPTION_PRIORITY_SYSTYPE_INI, &error_stream); - break; - case machine_flags::TYPE_OTHER: - parse_one_ini(options, "othersys", OPTION_PRIORITY_SYSTYPE_INI, &error_stream); - break; - default: - break; - } + // parse "vertical.ini" or "horizont.ini" + if (cursystem->flags & ORIENTATION_SWAP_XY) + parse_one_ini(options, "vertical", OPTION_PRIORITY_ORIENTATION_INI, &error_stream); + else + parse_one_ini(options, "horizont", OPTION_PRIORITY_ORIENTATION_INI, &error_stream); - machine_config config(*cursystem, options); - for (const screen_device &device : screen_device_enumerator(config.root_device())) - { - // parse "raster.ini" for raster games - if (device.screen_type() == SCREEN_TYPE_RASTER) + switch (cursystem->flags & machine_flags::MASK_TYPE) { - parse_one_ini(options, "raster", OPTION_PRIORITY_SCREEN_INI, &error_stream); + case machine_flags::TYPE_ARCADE: + parse_one_ini(options, "arcade", OPTION_PRIORITY_SYSTYPE_INI, &error_stream); break; - } - // parse "vector.ini" for vector games - if (device.screen_type() == SCREEN_TYPE_VECTOR) - { - parse_one_ini(options, "vector", OPTION_PRIORITY_SCREEN_INI, &error_stream); + case machine_flags::TYPE_CONSOLE: + parse_one_ini(options ,"console", OPTION_PRIORITY_SYSTYPE_INI, &error_stream); + break; + case machine_flags::TYPE_COMPUTER: + parse_one_ini(options, "computer", OPTION_PRIORITY_SYSTYPE_INI, &error_stream); + break; + case machine_flags::TYPE_OTHER: + parse_one_ini(options, "othersys", OPTION_PRIORITY_SYSTYPE_INI, &error_stream); + break; + default: break; } - // parse "lcd.ini" for lcd games - if (device.screen_type() == SCREEN_TYPE_LCD) + + machine_config config(*cursystem, options); + for (const screen_device &device : screen_device_enumerator(config.root_device())) { - parse_one_ini(options, "lcd", OPTION_PRIORITY_SCREEN_INI, &error_stream); - break; + // parse "raster.ini" for raster games + if (device.screen_type() == SCREEN_TYPE_RASTER) + { + parse_one_ini(options, "raster", OPTION_PRIORITY_SCREEN_INI, &error_stream); + break; + } + // parse "vector.ini" for vector games + if (device.screen_type() == SCREEN_TYPE_VECTOR) + { + parse_one_ini(options, "vector", OPTION_PRIORITY_SCREEN_INI, &error_stream); + break; + } + // parse "lcd.ini" for lcd games + if (device.screen_type() == SCREEN_TYPE_LCD) + { + parse_one_ini(options, "lcd", OPTION_PRIORITY_SCREEN_INI, &error_stream); + break; + } } } diff -Nru mame-0.250+dfsg.1/src/frontend/mame/ui/dirmenu.cpp mame-0.251+dfsg.1/src/frontend/mame/ui/dirmenu.cpp --- mame-0.250+dfsg.1/src/frontend/mame/ui/dirmenu.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/ui/dirmenu.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -29,50 +29,46 @@ namespace { -constexpr int ADDING = 1; -constexpr int CHANGE = 2; - struct folders_entry { const char *name; const char *option; - const int action; }; const folders_entry f_folders[] = { - { N_p("path-option", "ROMs"), OPTION_MEDIAPATH, ADDING }, - { N_p("path-option", "Software Media"), OPTION_SWPATH, CHANGE }, - { N_p("path-option", "Sound Samples"), OPTION_SAMPLEPATH, ADDING }, - { N_p("path-option", "Artwork"), OPTION_ARTPATH, ADDING }, - { N_p("path-option", "Crosshairs"), OPTION_CROSSHAIRPATH, ADDING }, - { N_p("path-option", "Cheat Files"), OPTION_CHEATPATH, ADDING }, - { N_p("path-option", "Plugins"), OPTION_PLUGINSPATH, ADDING }, - { N_p("path-option", "UI Translations"), OPTION_LANGUAGEPATH, CHANGE }, - { N_p("path-option", "Software Lists"), OPTION_HASHPATH, ADDING }, - { N_p("path-option", "INIs"), OPTION_INIPATH, ADDING }, - { N_p("path-option", "UI Settings"), OPTION_UI_PATH, CHANGE }, - { N_p("path-option", "Plugin Data"), OPTION_PLUGINDATAPATH, CHANGE }, - { N_p("path-option", "DATs"), OPTION_HISTORY_PATH, ADDING }, - { N_p("path-option", "Category INIs"), OPTION_CATEGORYINI_PATH, CHANGE }, - { N_p("path-option", "Snapshots"), OPTION_SNAPSHOT_DIRECTORY, ADDING }, - { N_p("path-option", "Icons"), OPTION_ICONS_PATH, ADDING }, - { N_p("path-option", "Control Panels"), OPTION_CPANELS_PATH, ADDING }, - { N_p("path-option", "Cabinets"), OPTION_CABINETS_PATH, ADDING }, - { N_p("path-option", "Marquees"), OPTION_MARQUEES_PATH, ADDING }, - { N_p("path-option", "PCBs"), OPTION_PCBS_PATH, ADDING }, - { N_p("path-option", "Flyers"), OPTION_FLYERS_PATH, ADDING }, - { N_p("path-option", "Title Screens"), OPTION_TITLES_PATH, ADDING }, - { N_p("path-option", "Game Endings"), OPTION_ENDS_PATH, ADDING }, - { N_p("path-option", "Bosses"), OPTION_BOSSES_PATH, ADDING }, - { N_p("path-option", "Artwork Previews"), OPTION_ARTPREV_PATH, ADDING }, - { N_p("path-option", "Select"), OPTION_SELECT_PATH, ADDING }, - { N_p("path-option", "Game Over Screens"), OPTION_GAMEOVER_PATH, ADDING }, - { N_p("path-option", "HowTo"), OPTION_HOWTO_PATH, ADDING }, - { N_p("path-option", "Logos"), OPTION_LOGOS_PATH, ADDING }, - { N_p("path-option", "Scores"), OPTION_SCORES_PATH, ADDING }, - { N_p("path-option", "Versus"), OPTION_VERSUS_PATH, ADDING }, - { N_p("path-option", "Covers"), OPTION_COVER_PATH, ADDING } + { N_p("path-option", "ROMs"), OPTION_MEDIAPATH }, + { N_p("path-option", "Software Media"), OPTION_SWPATH }, + { N_p("path-option", "Sound Samples"), OPTION_SAMPLEPATH }, + { N_p("path-option", "Artwork"), OPTION_ARTPATH }, + { N_p("path-option", "Crosshairs"), OPTION_CROSSHAIRPATH }, + { N_p("path-option", "Cheat Files"), OPTION_CHEATPATH }, + { N_p("path-option", "Plugins"), OPTION_PLUGINSPATH }, + { N_p("path-option", "UI Translations"), OPTION_LANGUAGEPATH }, + { N_p("path-option", "Software Lists"), OPTION_HASHPATH }, + { N_p("path-option", "INIs"), OPTION_INIPATH }, + { N_p("path-option", "UI Settings"), OPTION_UI_PATH }, + { N_p("path-option", "Plugin Data"), OPTION_PLUGINDATAPATH }, + { N_p("path-option", "DATs"), OPTION_HISTORY_PATH }, + { N_p("path-option", "Category INIs"), OPTION_CATEGORYINI_PATH }, + { N_p("path-option", "Snapshots"), OPTION_SNAPSHOT_DIRECTORY }, + { N_p("path-option", "Icons"), OPTION_ICONS_PATH }, + { N_p("path-option", "Control Panels"), OPTION_CPANELS_PATH }, + { N_p("path-option", "Cabinets"), OPTION_CABINETS_PATH }, + { N_p("path-option", "Marquees"), OPTION_MARQUEES_PATH }, + { N_p("path-option", "PCBs"), OPTION_PCBS_PATH }, + { N_p("path-option", "Flyers"), OPTION_FLYERS_PATH }, + { N_p("path-option", "Title Screens"), OPTION_TITLES_PATH }, + { N_p("path-option", "Game Endings"), OPTION_ENDS_PATH }, + { N_p("path-option", "Bosses"), OPTION_BOSSES_PATH }, + { N_p("path-option", "Artwork Previews"), OPTION_ARTPREV_PATH }, + { N_p("path-option", "Select"), OPTION_SELECT_PATH }, + { N_p("path-option", "Game Over Screens"), OPTION_GAMEOVER_PATH }, + { N_p("path-option", "HowTo"), OPTION_HOWTO_PATH }, + { N_p("path-option", "Logos"), OPTION_LOGOS_PATH }, + { N_p("path-option", "Scores"), OPTION_SCORES_PATH }, + { N_p("path-option", "Versus"), OPTION_VERSUS_PATH }, + { N_p("path-option", "Covers"), OPTION_COVER_PATH } }; @@ -166,7 +162,7 @@ class menu_add_change_folder : public menu { public: - menu_add_change_folder(mame_ui_manager &mui, render_container &container, int ref); + menu_add_change_folder(mame_ui_manager &mui, render_container &container, int ref, bool multipath); protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; @@ -180,9 +176,9 @@ void update_search(); int const m_ref; + bool const m_multipath; std::string m_current_path; std::string m_search; - bool const m_change; std::vector m_folders; }; @@ -190,10 +186,10 @@ // ctor //------------------------------------------------- -menu_add_change_folder::menu_add_change_folder(mame_ui_manager &mui, render_container &container, int ref) +menu_add_change_folder::menu_add_change_folder(mame_ui_manager &mui, render_container &container, int ref, bool multipath) : menu(mui, container) , m_ref(ref) - , m_change(f_folders[ref].action == CHANGE) + , m_multipath(multipath) { // configure the starting path osd_get_full_path(m_current_path, "."); @@ -255,7 +251,7 @@ { // Tab key, save current path std::string error_string; - if (m_change) + if (!m_multipath) { if (ui().options().exists(f_folders[m_ref].option)) ui().options().set_value(f_folders[m_ref].option, m_current_path, OPTION_PRIORITY_CMDLINE); @@ -349,7 +345,7 @@ { std::string const toptext[] = { util::string_format( - m_change ? _("Change %1$s Folder - Search: %2$s_") : _("Add %1$s Folder - Search: %2$s_"), + m_multipath ? _("Add %1$s Folder - Search: %2$s_") : _("Change %1$s Folder - Search: %2$s_"), _("path-option", f_folders[m_ref].name), m_search), m_current_path }; @@ -428,8 +424,9 @@ public: menu_display_actual(mame_ui_manager &mui, render_container &container, int selectedref) : menu(mui, container) - , m_heading{ util::string_format((f_folders[selectedref].action == ADDING) ? _("%1$s Folders") : _("%1$s Folder"), _("path-option", f_folders[selectedref].name)) } , m_ref(selectedref) + , m_multipath(is_multipath(f_folders[selectedref].option)) + , m_heading{ util::string_format(m_multipath ? _("%1$s Folders") : _("%1$s Folder"), _("path-option", f_folders[selectedref].name)) } { } @@ -446,13 +443,30 @@ virtual void populate(float &customtop, float &custombottom) override; virtual void handle(event const *ev) override; + bool is_multipath(std::string_view folder) const; + + int const m_ref; + bool const m_multipath; std::string const m_heading[1]; std::string m_searchpath; std::vector m_folders; - int const m_ref; }; //------------------------------------------------- +// is_multipath +//------------------------------------------------- + +bool menu_display_actual::is_multipath(std::string_view folder) const +{ + auto option = ui().options().get_entry(folder); + if (!option) + option = machine().options().get_entry(folder); + assert(option); + + return option->type() == core_options::option_type::MULTIPATH; +} + +//------------------------------------------------- // handle //------------------------------------------------- @@ -468,7 +482,7 @@ break; case ADD_CHANGE: - menu::stack_push(ui(), container(), m_ref); + menu::stack_push(ui(), container(), m_ref, m_multipath); break; } } @@ -480,21 +494,31 @@ void menu_display_actual::populate(float &customtop, float &custombottom) { - if (ui().options().exists(f_folders[m_ref].option)) - m_searchpath.assign(ui().options().value(f_folders[m_ref].option)); - else - m_searchpath.assign(machine().options().value(f_folders[m_ref].option)); + auto const &folder = f_folders[m_ref]; + auto option = ui().options().get_entry(folder.option); + if (!option) + option = machine().options().get_entry(folder.option); + assert(option); - path_iterator path(m_searchpath); - std::string curpath; - m_folders.clear(); - while (path.next(curpath)) - m_folders.push_back(curpath); - - item_append((f_folders[m_ref].action == CHANGE) ? _("Change Folder") : _("Add Folder"), 0, (void *)ADD_CHANGE); + m_searchpath.assign(option->value()); - if (m_folders.size() > 1) - item_append(_("Remove Folder"), 0, (void *)REMOVE); + m_folders.clear(); + if (m_multipath) + { + path_iterator path(m_searchpath); + std::string curpath; + while (path.next(curpath)) + m_folders.push_back(curpath); + + item_append(_("Add Folder"), 0, (void *)ADD_CHANGE); + if (m_folders.size() > 1) + item_append(_("Remove Folder"), 0, (void *)REMOVE); + } + else + { + m_folders.push_back(m_searchpath); + item_append(_("Change Folder"), 0, (void *)ADD_CHANGE); + } item_append(menu_item_type::SEPARATOR); @@ -559,7 +583,7 @@ void menu_directory::populate(float &customtop, float &custombottom) { for (auto & elem : f_folders) - item_append(_("path-option", elem.name), 0, (void *)(uintptr_t)elem.action); + item_append(_("path-option", elem.name), 0, this); // need a non-null reference pointer - value is immaterial item_append(menu_item_type::SEPARATOR); } diff -Nru mame-0.250+dfsg.1/src/frontend/mame/ui/inifile.cpp mame-0.251+dfsg.1/src/frontend/mame/ui/inifile.cpp --- mame-0.250+dfsg.1/src/frontend/mame/ui/inifile.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/ui/inifile.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -488,31 +488,23 @@ { bool done(false); - // TODO: this should be changed - it interacts poorly with cartslots on arcade systems - if ((machine.system().flags & machine_flags::MASK_TYPE) == machine_flags::TYPE_ARCADE) + bool have_software(false); + for (device_image_interface &image_dev : image_interface_enumerator(machine.root_device())) { - action(machine.system(), nullptr, nullptr, done); - } - else - { - bool have_software(false); - for (device_image_interface &image_dev : image_interface_enumerator(machine.root_device())) + software_info const *const sw(image_dev.software_entry()); + if (image_dev.exists() && image_dev.loaded_through_softlist() && sw) { - software_info const *const sw(image_dev.software_entry()); - if (image_dev.exists() && image_dev.loaded_through_softlist() && sw) - { - assert(image_dev.software_list_name()); + assert(image_dev.software_list_name()); - have_software = true; - action(machine.system(), &image_dev, sw, done); - if (done) - return; - } + have_software = true; + action(machine.system(), &image_dev, sw, done); + if (done) + return; } - - if (!have_software) - action(machine.system(), nullptr, nullptr, done); } + + if (!have_software) + action(machine.system(), nullptr, nullptr, done); } void favorite_manager::update_sorted() diff -Nru mame-0.250+dfsg.1/src/frontend/mame/ui/moptions.cpp mame-0.251+dfsg.1/src/frontend/mame/ui/moptions.cpp --- mame-0.250+dfsg.1/src/frontend/mame/ui/moptions.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/ui/moptions.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -20,66 +20,74 @@ const options_entry ui_options::s_option_entries[] = { // search path options - { nullptr, nullptr, core_options::option_type::HEADER, "UI SEARCH PATH OPTIONS" }, - { OPTION_HISTORY_PATH, "history;dats;.", core_options::option_type::STRING, "path to system/software info files" }, - { OPTION_CATEGORYINI_PATH, "folders", core_options::option_type::STRING, "path to category ini files" }, - { OPTION_CABINETS_PATH, "cabinets;cabdevs", core_options::option_type::STRING, "path to cabinets / devices image" }, - { OPTION_CPANELS_PATH, "cpanel", core_options::option_type::STRING, "path to control panel image" }, - { OPTION_PCBS_PATH, "pcb", core_options::option_type::STRING, "path to pcbs image" }, - { OPTION_FLYERS_PATH, "flyers", core_options::option_type::STRING, "path to flyers image" }, - { OPTION_TITLES_PATH, "titles", core_options::option_type::STRING, "path to titles image" }, - { OPTION_ENDS_PATH, "ends", core_options::option_type::STRING, "path to ends image" }, - { OPTION_MARQUEES_PATH, "marquees", core_options::option_type::STRING, "path to marquees image" }, - { OPTION_ARTPREV_PATH, "artwork preview;artpreview", core_options::option_type::STRING, "path to artwork preview image" }, - { OPTION_BOSSES_PATH, "bosses", core_options::option_type::STRING, "path to bosses image" }, - { OPTION_LOGOS_PATH, "logo", core_options::option_type::STRING, "path to logos image" }, - { OPTION_SCORES_PATH, "scores", core_options::option_type::STRING, "path to scores image" }, - { OPTION_VERSUS_PATH, "versus", core_options::option_type::STRING, "path to versus image" }, - { OPTION_GAMEOVER_PATH, "gameover", core_options::option_type::STRING, "path to gameover image" }, - { OPTION_HOWTO_PATH, "howto", core_options::option_type::STRING, "path to howto image" }, - { OPTION_SELECT_PATH, "select", core_options::option_type::STRING, "path to select image" }, - { OPTION_ICONS_PATH, "icons", core_options::option_type::STRING, "path to ICOns image" }, - { OPTION_COVER_PATH, "covers", core_options::option_type::STRING, "path to software cover image" }, - { OPTION_UI_PATH, "ui", core_options::option_type::STRING, "path to UI files" }, + { nullptr, nullptr, option_type::HEADER, "UI SEARCH PATH OPTIONS" }, + { OPTION_HISTORY_PATH, "history;dats;.", option_type::MULTIPATH, "path to system/software info files" }, + { OPTION_CATEGORYINI_PATH, "folders", option_type::MULTIPATH, "path to category ini files" }, + { OPTION_CABINETS_PATH, "cabinets;cabdevs", option_type::MULTIPATH, "path to cabinets / devices image" }, + { OPTION_CPANELS_PATH, "cpanel", option_type::MULTIPATH, "path to control panel image" }, + { OPTION_PCBS_PATH, "pcb", option_type::MULTIPATH, "path to pcbs image" }, + { OPTION_FLYERS_PATH, "flyers", option_type::MULTIPATH, "path to flyers image" }, + { OPTION_TITLES_PATH, "titles", option_type::MULTIPATH, "path to titles image" }, + { OPTION_ENDS_PATH, "ends", option_type::MULTIPATH, "path to ends image" }, + { OPTION_MARQUEES_PATH, "marquees", option_type::MULTIPATH, "path to marquees image" }, + { OPTION_ARTPREV_PATH, "artwork preview;artpreview", option_type::MULTIPATH, "path to artwork preview image" }, + { OPTION_BOSSES_PATH, "bosses", option_type::MULTIPATH, "path to bosses image" }, + { OPTION_LOGOS_PATH, "logo", option_type::MULTIPATH, "path to logos image" }, + { OPTION_SCORES_PATH, "scores", option_type::MULTIPATH, "path to scores image" }, + { OPTION_VERSUS_PATH, "versus", option_type::MULTIPATH, "path to versus image" }, + { OPTION_GAMEOVER_PATH, "gameover", option_type::MULTIPATH, "path to gameover image" }, + { OPTION_HOWTO_PATH, "howto", option_type::MULTIPATH, "path to howto image" }, + { OPTION_SELECT_PATH, "select", option_type::MULTIPATH, "path to select image" }, + { OPTION_ICONS_PATH, "icons", option_type::MULTIPATH, "path to ICOns image" }, + { OPTION_COVER_PATH, "covers", option_type::MULTIPATH, "path to software cover image" }, + { OPTION_UI_PATH, "ui", option_type::MULTIPATH, "path to UI files" }, // misc options - { nullptr, nullptr, core_options::option_type::HEADER, "UI MISC OPTIONS" }, - { OPTION_SYSTEM_NAMES, "", core_options::option_type::STRING, "translated system names file" }, - { OPTION_SKIP_WARNINGS, "0", core_options::option_type::BOOLEAN, "display fewer repeated warnings about imperfect emulation" }, - { OPTION_REMEMBER_LAST, "1", core_options::option_type::BOOLEAN, "initially select last used system in main menu" }, - { OPTION_ENLARGE_SNAPS, "1", core_options::option_type::BOOLEAN, "enlarge artwork (snapshot, title, etc.) in right panel (keeping aspect ratio)" }, - { OPTION_FORCED4X3, "1", core_options::option_type::BOOLEAN, "force the appearance of the snapshot in the list software to 4:3" }, - { OPTION_USE_BACKGROUND, "1", core_options::option_type::BOOLEAN, "enable background image in main view" }, - { OPTION_SKIP_BIOS_MENU, "0", core_options::option_type::BOOLEAN, "skip bios submenu, start with configured or default" }, - { OPTION_SKIP_PARTS_MENU, "0", core_options::option_type::BOOLEAN, "skip parts submenu, start with first part" }, - { OPTION_LAST_USED_FILTER, "", core_options::option_type::STRING, "latest used filter" }, - { OPTION_LAST_RIGHT_PANEL "(0-1)", "0", core_options::option_type::INTEGER, "latest right panel focus" }, - { OPTION_LAST_USED_MACHINE, "", core_options::option_type::STRING, "latest used machine" }, - { OPTION_INFO_AUTO_AUDIT, "0", core_options::option_type::BOOLEAN, "enable auto audit in the general info panel" }, - { OPTION_HIDE_ROMLESS, "1", core_options::option_type::BOOLEAN, "hide romless machine from available list" }, - { OPTION_UNTHROTTLE_MUTE ";utm", "0", core_options::option_type::BOOLEAN, "mute audio when running unthrottled" }, + { nullptr, nullptr, option_type::HEADER, "UI MISC OPTIONS" }, + { OPTION_SYSTEM_NAMES, "", option_type::MULTIPATH, "translated system names file" }, + { OPTION_SKIP_WARNINGS, "0", option_type::BOOLEAN, "display fewer repeated warnings about imperfect emulation" }, + { OPTION_UNTHROTTLE_MUTE ";utm", "0", option_type::BOOLEAN, "mute audio when running unthrottled" }, // UI options - { nullptr, nullptr, core_options::option_type::HEADER, "UI OPTIONS" }, - { OPTION_INFOS_SIZE "(0.20-1.00)", "0.75", core_options::option_type::FLOAT, "UI right panel infos text size (0.20 - 1.00)" }, - { OPTION_FONT_ROWS "(25-40)", "30", core_options::option_type::INTEGER, "UI font lines per screen (25 - 40)" }, - { OPTION_HIDE_PANELS "(0-3)", "0", core_options::option_type::INTEGER, "UI hide left/right panel in main view (0 = Show all, 1 = hide left, 2 = hide right, 3 = hide both" }, - { OPTION_UI_BORDER_COLOR, "ffffffff", core_options::option_type::STRING, "UI border color (ARGB)" }, - { OPTION_UI_BACKGROUND_COLOR, "ef101030", core_options::option_type::STRING, "UI background color (ARGB)" }, - { OPTION_UI_CLONE_COLOR, "ff808080", core_options::option_type::STRING, "UI clone color (ARGB)" }, - { OPTION_UI_DIPSW_COLOR, "ffffff00", core_options::option_type::STRING, "UI dipswitch color (ARGB)" }, - { OPTION_UI_GFXVIEWER_BG_COLOR, "ef101030", core_options::option_type::STRING, "UI gfx viewer color (ARGB)" }, - { OPTION_UI_MOUSEDOWN_BG_COLOR, "b0606000", core_options::option_type::STRING, "UI mouse down bg color (ARGB)" }, - { OPTION_UI_MOUSEDOWN_COLOR, "ffffff80", core_options::option_type::STRING, "UI mouse down color (ARGB)" }, - { OPTION_UI_MOUSEOVER_BG_COLOR, "70404000", core_options::option_type::STRING, "UI mouse over bg color (ARGB)" }, - { OPTION_UI_MOUSEOVER_COLOR, "ffffff80", core_options::option_type::STRING, "UI mouse over color (ARGB)" }, - { OPTION_UI_SELECTED_BG_COLOR, "ef808000", core_options::option_type::STRING, "UI selected bg color (ARGB)" }, - { OPTION_UI_SELECTED_COLOR, "ffffff00", core_options::option_type::STRING, "UI selected color (ARGB)" }, - { OPTION_UI_SLIDER_COLOR, "ffffffff", core_options::option_type::STRING, "UI slider color (ARGB)" }, - { OPTION_UI_SUBITEM_COLOR, "ffffffff", core_options::option_type::STRING, "UI subitem color (ARGB)" }, - { OPTION_UI_TEXT_BG_COLOR, "ef000000", core_options::option_type::STRING, "UI text bg color (ARGB)" }, - { OPTION_UI_TEXT_COLOR, "ffffffff", core_options::option_type::STRING, "UI text color (ARGB)" }, - { OPTION_UI_UNAVAILABLE_COLOR, "ff404040", core_options::option_type::STRING, "UI unavailable color (ARGB)" }, + { nullptr, nullptr, option_type::HEADER, "UI OPTIONS" }, + { OPTION_INFOS_SIZE "(0.20-1.00)", "0.75", option_type::FLOAT, "UI right panel infos text size (0.20 - 1.00)" }, + { OPTION_FONT_ROWS "(25-40)", "30", option_type::INTEGER, "UI font lines per screen (25 - 40)" }, + { OPTION_UI_BORDER_COLOR, "ffffffff", option_type::STRING, "UI border color (ARGB)" }, + { OPTION_UI_BACKGROUND_COLOR, "ef101030", option_type::STRING, "UI background color (ARGB)" }, + { OPTION_UI_CLONE_COLOR, "ff808080", option_type::STRING, "UI clone color (ARGB)" }, + { OPTION_UI_DIPSW_COLOR, "ffffff00", option_type::STRING, "UI dipswitch color (ARGB)" }, + { OPTION_UI_GFXVIEWER_BG_COLOR, "ef101030", option_type::STRING, "UI gfx viewer color (ARGB)" }, + { OPTION_UI_MOUSEDOWN_BG_COLOR, "b0606000", option_type::STRING, "UI mouse down bg color (ARGB)" }, + { OPTION_UI_MOUSEDOWN_COLOR, "ffffff80", option_type::STRING, "UI mouse down color (ARGB)" }, + { OPTION_UI_MOUSEOVER_BG_COLOR, "70404000", option_type::STRING, "UI mouse over bg color (ARGB)" }, + { OPTION_UI_MOUSEOVER_COLOR, "ffffff80", option_type::STRING, "UI mouse over color (ARGB)" }, + { OPTION_UI_SELECTED_BG_COLOR, "ef808000", option_type::STRING, "UI selected bg color (ARGB)" }, + { OPTION_UI_SELECTED_COLOR, "ffffff00", option_type::STRING, "UI selected color (ARGB)" }, + { OPTION_UI_SLIDER_COLOR, "ffffffff", option_type::STRING, "UI slider color (ARGB)" }, + { OPTION_UI_SUBITEM_COLOR, "ffffffff", option_type::STRING, "UI subitem color (ARGB)" }, + { OPTION_UI_TEXT_BG_COLOR, "ef000000", option_type::STRING, "UI text bg color (ARGB)" }, + { OPTION_UI_TEXT_COLOR, "ffffffff", option_type::STRING, "UI text color (ARGB)" }, + { OPTION_UI_UNAVAILABLE_COLOR, "ff404040", option_type::STRING, "UI unavailable color (ARGB)" }, + + // system/software selection menu options + { nullptr, nullptr, option_type::HEADER, "SYSTEM/SOFTWARE SELECTION MENU OPTIONS" }, + { OPTION_HIDE_PANELS "(0-3)", "0", option_type::INTEGER, "UI hide left/right panel in main view (0 = Show all, 1 = hide left, 2 = hide right, 3 = hide both" }, + { OPTION_USE_BACKGROUND, "1", option_type::BOOLEAN, "enable background image in main view" }, + { OPTION_SKIP_BIOS_MENU, "0", option_type::BOOLEAN, "skip bios submenu, start with configured or default" }, + { OPTION_SKIP_PARTS_MENU, "0", option_type::BOOLEAN, "skip parts submenu, start with first part" }, + { OPTION_REMEMBER_LAST, "1", option_type::BOOLEAN, "initially select last used system in main menu" }, + { OPTION_LAST_USED_MACHINE, "", option_type::STRING, "last selected system" }, + { OPTION_LAST_USED_FILTER, "", option_type::STRING, "last used system filter" }, + { OPTION_SYSTEM_RIGHT_PANEL, "image", option_type::STRING, "selected system right panel tab" }, + { OPTION_SOFTWARE_RIGHT_PANEL, "image", option_type::STRING, "selected software right panel tab" }, + { OPTION_SYSTEM_RIGHT_IMAGE, "snap", option_type::STRING, "selected system right panel image" }, + { OPTION_SOFTWARE_RIGHT_IMAGE, "snap", option_type::STRING, "selected software right panel image" }, + { OPTION_ENLARGE_SNAPS, "1", option_type::BOOLEAN, "enlarge images in right panel (keeping aspect ratio)" }, + { OPTION_FORCED4X3, "1", option_type::BOOLEAN, "force 4:3 aspect ratio for snapshots in the software menu" }, + { OPTION_INFO_AUTO_AUDIT, "0", option_type::BOOLEAN, "automatically audit media for the general info panel" }, + { OPTION_HIDE_ROMLESS, "1", option_type::BOOLEAN, "hide systems that don't require ROMs in the available system filter" }, + + // sentinel { nullptr } }; diff -Nru mame-0.250+dfsg.1/src/frontend/mame/ui/moptions.h mame-0.251+dfsg.1/src/frontend/mame/ui/moptions.h --- mame-0.250+dfsg.1/src/frontend/mame/ui/moptions.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/ui/moptions.h 2022-12-29 14:20:09.000000000 +0000 @@ -40,25 +40,12 @@ // core misc options #define OPTION_SYSTEM_NAMES "system_names" #define OPTION_SKIP_WARNINGS "skip_warnings" -#define OPTION_REMEMBER_LAST "remember_last" -#define OPTION_ENLARGE_SNAPS "enlarge_snaps" -#define OPTION_FORCED4X3 "forced4x3" -#define OPTION_USE_BACKGROUND "use_background" -#define OPTION_SKIP_BIOS_MENU "skip_biosmenu" -#define OPTION_SKIP_PARTS_MENU "skip_partsmenu" -#define OPTION_LAST_USED_FILTER "last_used_filter" -#define OPTION_LAST_RIGHT_PANEL "last_right_panel" -#define OPTION_LAST_USED_MACHINE "last_used_machine" -#define OPTION_INFO_AUTO_AUDIT "info_audit_enabled" -#define OPTION_HIDE_ROMLESS "hide_romless" #define OPTION_UNTHROTTLE_MUTE "unthrottle_mute" // core UI options #define OPTION_INFOS_SIZE "infos_text_size" #define OPTION_FONT_ROWS "font_rows" -#define OPTION_HIDE_PANELS "hide_main_panel" - #define OPTION_UI_BORDER_COLOR "ui_border_color" #define OPTION_UI_BACKGROUND_COLOR "ui_bg_color" #define OPTION_UI_GFXVIEWER_BG_COLOR "ui_gfxviewer_color" @@ -76,6 +63,24 @@ #define OPTION_UI_DIPSW_COLOR "ui_dipsw_color" #define OPTION_UI_SLIDER_COLOR "ui_slider_color" +// system/software selection menu options +#define OPTION_HIDE_PANELS "hide_main_panel" +#define OPTION_USE_BACKGROUND "use_background" +#define OPTION_SKIP_BIOS_MENU "skip_biosmenu" +#define OPTION_SKIP_PARTS_MENU "skip_partsmenu" +#define OPTION_REMEMBER_LAST "remember_last" +#define OPTION_LAST_USED_MACHINE "last_used_machine" +#define OPTION_LAST_USED_FILTER "last_used_filter" +#define OPTION_SYSTEM_RIGHT_PANEL "system_right_panel" +#define OPTION_SOFTWARE_RIGHT_PANEL "software_right_panel" +#define OPTION_SYSTEM_RIGHT_IMAGE "system_right_image" +#define OPTION_SOFTWARE_RIGHT_IMAGE "software_right_image" +#define OPTION_ENLARGE_SNAPS "enlarge_snaps" +#define OPTION_FORCED4X3 "forced4x3" +#define OPTION_INFO_AUTO_AUDIT "info_audit_enabled" +#define OPTION_HIDE_ROMLESS "hide_romless" + + class ui_options : public core_options { public: @@ -107,23 +112,13 @@ // Misc options const char *system_names() const { return value(OPTION_SYSTEM_NAMES); } bool skip_warnings() const { return bool_value(OPTION_SKIP_WARNINGS); } - bool remember_last() const { return bool_value(OPTION_REMEMBER_LAST); } bool enlarge_snaps() const { return bool_value(OPTION_ENLARGE_SNAPS); } bool forced_4x3_snapshot() const { return bool_value(OPTION_FORCED4X3); } - bool use_background_image() const { return bool_value(OPTION_USE_BACKGROUND); } - bool skip_bios_menu() const { return bool_value(OPTION_SKIP_BIOS_MENU); } - bool skip_parts_menu() const { return bool_value(OPTION_SKIP_PARTS_MENU); } - const char *last_used_machine() const { return value(OPTION_LAST_USED_MACHINE); } - const char *last_used_filter() const { return value(OPTION_LAST_USED_FILTER); } - int last_right_panel() const { return int_value(OPTION_LAST_RIGHT_PANEL); } - bool info_audit() const { return bool_value(OPTION_INFO_AUTO_AUDIT); } - bool hide_romless() const { return bool_value(OPTION_HIDE_ROMLESS); } bool unthrottle_mute() const { return bool_value(OPTION_UNTHROTTLE_MUTE); } // UI options float infos_size() const { return float_value(OPTION_INFOS_SIZE); } int font_rows() const { return int_value(OPTION_FONT_ROWS); } - int hide_panels() const { return int_value(OPTION_HIDE_PANELS); } rgb_t border_color() const { return rgb_value(OPTION_UI_BORDER_COLOR); } rgb_t background_color() const { return rgb_value(OPTION_UI_BACKGROUND_COLOR); } @@ -142,6 +137,21 @@ rgb_t dipsw_color() const { return rgb_value(OPTION_UI_DIPSW_COLOR); } rgb_t slider_color() const { return rgb_value(OPTION_UI_SLIDER_COLOR); } + // system/software selection menu options + int hide_panels() const { return int_value(OPTION_HIDE_PANELS); } + bool use_background_image() const { return bool_value(OPTION_USE_BACKGROUND); } + bool skip_bios_menu() const { return bool_value(OPTION_SKIP_BIOS_MENU); } + bool skip_parts_menu() const { return bool_value(OPTION_SKIP_PARTS_MENU); } + bool remember_last() const { return bool_value(OPTION_REMEMBER_LAST); } + const char *last_used_machine() const { return value(OPTION_LAST_USED_MACHINE); } + const char *last_used_filter() const { return value(OPTION_LAST_USED_FILTER); } + char const *system_right_panel() const { return value(OPTION_SYSTEM_RIGHT_PANEL); } + char const *software_right_panel() const { return value(OPTION_SOFTWARE_RIGHT_PANEL); } + char const *system_right_image() const { return value(OPTION_SYSTEM_RIGHT_IMAGE); } + char const *software_right_image() const { return value(OPTION_SOFTWARE_RIGHT_IMAGE); } + bool info_audit() const { return bool_value(OPTION_INFO_AUTO_AUDIT); } + bool hide_romless() const { return bool_value(OPTION_HIDE_ROMLESS); } + rgb_t rgb_value(const char *option) const; private: diff -Nru mame-0.250+dfsg.1/src/frontend/mame/ui/selgame.cpp mame-0.251+dfsg.1/src/frontend/mame/ui/selgame.cpp --- mame-0.250+dfsg.1/src/frontend/mame/ui/selgame.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/ui/selgame.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -78,7 +78,6 @@ { //s_first_start = false; TODO: why wasn't it ever clearing the first start flag? reselect_last::set_driver(moptions.last_used_machine()); - ui_globals::rpanel = std::min(std::max(moptions.last_right_panel(), RP_FIRST), RP_LAST); std::string tmp(moptions.last_used_filter()); std::size_t const found = tmp.find_first_of(','); @@ -108,6 +107,10 @@ mui.machine().options().set_value(OPTION_SNAPNAME, "%g/%i", OPTION_PRIORITY_CMDLINE); + // restore last right panel settings + set_right_panel(moptions.system_right_panel()); + set_right_image(moptions.system_right_image()); + ui_globals::curdats_view = 0; ui_globals::panels_status = moptions.hide_panels(); ui_globals::curdats_total = 1; @@ -119,22 +122,7 @@ menu_select_game::~menu_select_game() { - std::string error_string, last_driver; - ui_system_info const *system; - ui_software_info const *swinfo; - get_selection(swinfo, system); - if (swinfo) - last_driver = swinfo->shortname; - else if (system) - last_driver = system->driver->name; - - std::string const filter(m_persistent_data.filter_data().get_config_string()); - - ui_options &mopt = ui().options(); - mopt.set_value(OPTION_LAST_RIGHT_PANEL, ui_globals::rpanel, OPTION_PRIORITY_CMDLINE); - mopt.set_value(OPTION_LAST_USED_FILTER, filter, OPTION_PRIORITY_CMDLINE); - mopt.set_value(OPTION_LAST_USED_MACHINE, last_driver, OPTION_PRIORITY_CMDLINE); - mopt.set_value(OPTION_HIDE_PANELS, ui_globals::panels_status, OPTION_PRIORITY_CMDLINE); + // TODO: reconsider when to do this ui().save_ui_options(); } @@ -156,6 +144,39 @@ stack_reset(); return; } + else + { + menu_select_launch::menu_activated(); + } +} + +//------------------------------------------------- +// menu_deactivated +//------------------------------------------------- + +void menu_select_game::menu_deactivated() +{ + menu_select_launch::menu_deactivated(); + + // get the "last selected system" string + ui_system_info const *system; + ui_software_info const *swinfo; + get_selection(swinfo, system); + std::string last_driver; + if (swinfo) + last_driver = swinfo->shortname; + else if (system) + last_driver = system->driver->name; + + // serialise the selected filter settings + std::string const filter(m_persistent_data.filter_data().get_config_string()); + + ui_options &mopt = ui().options(); + mopt.set_value(OPTION_HIDE_PANELS, ui_globals::panels_status, OPTION_PRIORITY_CMDLINE); + mopt.set_value(OPTION_LAST_USED_MACHINE, last_driver, OPTION_PRIORITY_CMDLINE); + mopt.set_value(OPTION_LAST_USED_FILTER, filter, OPTION_PRIORITY_CMDLINE); + mopt.set_value(OPTION_SYSTEM_RIGHT_PANEL, right_panel_config_string(), OPTION_PRIORITY_CMDLINE); + mopt.set_value(OPTION_SYSTEM_RIGHT_IMAGE, right_image_config_string(), OPTION_PRIORITY_CMDLINE); } //------------------------------------------------- @@ -259,33 +280,21 @@ break; case IPT_UI_LEFT: - if (ui_globals::rpanel == RP_IMAGES) - { - // Images - previous_image_view(); - } - else if (ui_globals::rpanel == RP_INFOS) - { - // Infos - change_info_pane(-1); - } + if (right_panel() == RP_IMAGES) + previous_image_view(); // Images + else if (right_panel() == RP_INFOS) + change_info_pane(-1); // Infos break; case IPT_UI_RIGHT: - if (ui_globals::rpanel == RP_IMAGES) - { - // Images - next_image_view(); - } - else if (ui_globals::rpanel == RP_INFOS) - { - // Infos - change_info_pane(1); - } + if (right_panel() == RP_IMAGES) + next_image_view(); // Images + else if (right_panel() == RP_INFOS) + change_info_pane(1); // Infos break; case IPT_UI_FAVORITES: - if (uintptr_t(ev->itemref) > skip_main_items) + if (uintptr_t(ev->itemref) > m_skip_main_items) { favorite_manager &mfav(mame_machine_manager::instance()->favorite()); if (!m_populated_favorites) @@ -441,14 +450,14 @@ item_append(menu_item_type::SEPARATOR, 0); item_append(_("General Settings"), 0, (void *)(uintptr_t)CONF_OPTS); item_append(_("System Settings"), 0, (void *)(uintptr_t)CONF_MACHINE); - skip_main_items = 3; + m_skip_main_items = 3; if (m_prev_selected && !have_prev_selected && item_count() > 0) m_prev_selected = item(0).ref(); } else { - skip_main_items = 0; + m_skip_main_items = 0; } // configure the custom rendering @@ -785,10 +794,10 @@ get_selection(soft, sys); if (!m_populated_favorites) { - if (uintptr_t(sys) > skip_main_items) + if (uintptr_t(sys) > m_skip_main_items) cap_delta(ui_globals::curdats_view, ui_globals::curdats_total); } - else if (uintptr_t(soft) > skip_main_items) + else if (uintptr_t(soft) > m_skip_main_items) { if (soft->startempty) cap_delta(ui_globals::curdats_view, ui_globals::curdats_total); diff -Nru mame-0.250+dfsg.1/src/frontend/mame/ui/selgame.h mame-0.251+dfsg.1/src/frontend/mame/ui/selgame.h --- mame-0.250+dfsg.1/src/frontend/mame/ui/selgame.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/ui/selgame.h 2022-12-29 14:20:09.000000000 +0000 @@ -34,6 +34,7 @@ protected: void menu_activated() override; + void menu_deactivated() override; private: enum diff -Nru mame-0.250+dfsg.1/src/frontend/mame/ui/selmenu.cpp mame-0.251+dfsg.1/src/frontend/mame/ui/selmenu.cpp --- mame-0.250+dfsg.1/src/frontend/mame/ui/selmenu.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/ui/selmenu.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -42,6 +42,7 @@ #include #include #include +#include #include @@ -49,6 +50,10 @@ namespace { +std::pair RIGHT_PANEL_NAMES[RP_LAST + 1] = { + { "image", N_("Images") }, + { "info", N_("Info") } }; + enum { FIRST_VIEW = 0, @@ -72,25 +77,25 @@ LAST_VIEW = COVERS_VIEW }; -std::pair const arts_info[] = +std::tuple const ARTS_INFO[] = { - { N_p("selmenu-artwork", "Snapshots"), OPTION_SNAPSHOT_DIRECTORY }, - { N_p("selmenu-artwork", "Cabinet"), OPTION_CABINETS_PATH }, - { N_p("selmenu-artwork", "Control Panel"), OPTION_CPANELS_PATH }, - { N_p("selmenu-artwork", "PCB"), OPTION_PCBS_PATH }, - { N_p("selmenu-artwork", "Flyer"), OPTION_FLYERS_PATH }, - { N_p("selmenu-artwork", "Title Screen"), OPTION_TITLES_PATH }, - { N_p("selmenu-artwork", "Ending"), OPTION_ENDS_PATH }, - { N_p("selmenu-artwork", "Artwork Preview"), OPTION_ARTPREV_PATH }, - { N_p("selmenu-artwork", "Bosses"), OPTION_BOSSES_PATH }, - { N_p("selmenu-artwork", "Logo"), OPTION_LOGOS_PATH }, - { N_p("selmenu-artwork", "Versus"), OPTION_VERSUS_PATH }, - { N_p("selmenu-artwork", "Game Over"), OPTION_GAMEOVER_PATH }, - { N_p("selmenu-artwork", "HowTo"), OPTION_HOWTO_PATH }, - { N_p("selmenu-artwork", "Scores"), OPTION_SCORES_PATH }, - { N_p("selmenu-artwork", "Select"), OPTION_SELECT_PATH }, - { N_p("selmenu-artwork", "Marquee"), OPTION_MARQUEES_PATH }, - { N_p("selmenu-artwork", "Covers"), OPTION_COVER_PATH }, + { "snap", N_p("selmenu-artwork", "Snapshots"), OPTION_SNAPSHOT_DIRECTORY }, + { "cabinet", N_p("selmenu-artwork", "Cabinet"), OPTION_CABINETS_PATH }, + { "cpanel", N_p("selmenu-artwork", "Control Panel"), OPTION_CPANELS_PATH }, + { "pcb", N_p("selmenu-artwork", "PCB"), OPTION_PCBS_PATH }, + { "flyer", N_p("selmenu-artwork", "Flyer"), OPTION_FLYERS_PATH }, + { "title", N_p("selmenu-artwork", "Title Screen"), OPTION_TITLES_PATH }, + { "ending", N_p("selmenu-artwork", "Ending"), OPTION_ENDS_PATH }, + { "artpreview", N_p("selmenu-artwork", "Artwork Preview"), OPTION_ARTPREV_PATH }, + { "boss", N_p("selmenu-artwork", "Bosses"), OPTION_BOSSES_PATH }, + { "logo", N_p("selmenu-artwork", "Logo"), OPTION_LOGOS_PATH }, + { "versus", N_p("selmenu-artwork", "Versus"), OPTION_VERSUS_PATH }, + { "gameover", N_p("selmenu-artwork", "Game Over"), OPTION_GAMEOVER_PATH }, + { "howto", N_p("selmenu-artwork", "HowTo"), OPTION_HOWTO_PATH }, + { "scores", N_p("selmenu-artwork", "Scores"), OPTION_SCORES_PATH }, + { "select", N_p("selmenu-artwork", "Select"), OPTION_SELECT_PATH }, + { "marquee", N_p("selmenu-artwork", "Marquee"), OPTION_MARQUEES_PATH }, + { "cover", N_p("selmenu-artwork", "Covers"), OPTION_COVER_PATH }, }; char const *const hover_msg[] = { @@ -482,6 +487,7 @@ menu_select_launch::menu_select_launch(mame_ui_manager &mui, render_container &container, bool is_swlist) : menu(mui, container) + , m_skip_main_items(0) , m_prev_selected(nullptr) , m_total_lines(0) , m_topline_datsview(0) @@ -499,9 +505,9 @@ , m_pressed(false) , m_repeat(0) , m_right_visible_lines(0) + , m_right_panel(RP_FIRST) , m_has_icons(false) , m_switch_image(false) - , m_default_image(true) , m_image_view(FIRST_VIEW) , m_flags(256) { @@ -516,7 +522,6 @@ { ++m_image_view; set_switch_image(); - m_default_image = false; } } @@ -527,7 +532,6 @@ { --m_image_view; set_switch_image(); - m_default_image = false; } } @@ -742,20 +746,7 @@ switch (get_focus()) { case focused_menu::MAIN: - if (selected_index() <= m_available_items) - { - if (skip_main_items || (ui_globals::panels_status != HIDE_BOTH)) - { - m_prev_selected = get_selection_ref(); - if ((0 < dir) || (ui_globals::panels_status == HIDE_BOTH)) - set_selected_index(m_available_items + 1); - else if (ui_globals::panels_status == HIDE_RIGHT_PANEL) - set_focus(focused_menu::LEFT); - else - set_focus(focused_menu::RIGHTBOTTOM); - } - } - else + if (selected_index() > m_available_items) { if ((0 > dir) || (ui_globals::panels_status == HIDE_BOTH)) select_prev(); @@ -764,13 +755,38 @@ else set_focus(focused_menu::LEFT); } + else if (m_skip_main_items || (ui_globals::panels_status != HIDE_BOTH)) + { + m_prev_selected = get_selection_ref(); + if (0 < dir) + { + if (m_skip_main_items) + set_selected_index(m_available_items + 1); + else if (ui_globals::panels_status == HIDE_LEFT_PANEL) + set_focus(focused_menu::RIGHTTOP); + else + set_focus(focused_menu::LEFT); + } + else if (ui_globals::panels_status == HIDE_RIGHT_PANEL) + { + set_focus(focused_menu::LEFT); + } + else if (ui_globals::panels_status != HIDE_BOTH) + { + set_focus(focused_menu::RIGHTBOTTOM); + } + else + { + set_selected_index(m_available_items + 1); + } + } break; case focused_menu::LEFT: if (0 > dir) { set_focus(focused_menu::MAIN); - if (skip_main_items) + if (m_skip_main_items) set_selected_index(m_available_items + 1); else select_prev(); @@ -798,7 +814,10 @@ else { set_focus(focused_menu::MAIN); - set_selected_index(m_available_items + 1); + if (m_skip_main_items) + set_selected_index(m_available_items + 1); + else + select_prev(); } break; @@ -1336,21 +1355,21 @@ void menu_select_launch::get_title_search(std::string &snaptext, std::string &searchstr) { // get arts title text - snaptext.assign(_("selmenu-artwork", arts_info[m_image_view].first)); + snaptext.assign(_("selmenu-artwork", std::get<1>(ARTS_INFO[m_image_view]))); // get search path std::string addpath; if (m_image_view == SNAPSHOT_VIEW) { emu_options moptions; - searchstr = machine().options().value(arts_info[m_image_view].second); - addpath = moptions.value(arts_info[m_image_view].second); + searchstr = machine().options().value(std::get<2>(ARTS_INFO[m_image_view])); + addpath = moptions.value(std::get<2>(ARTS_INFO[m_image_view])); } else { ui_options moptions; - searchstr = ui().options().value(arts_info[m_image_view].second); - addpath = moptions.value(arts_info[m_image_view].second); + searchstr = ui().options().value(std::get<2>(ARTS_INFO[m_image_view])); + addpath = moptions.value(std::get<2>(ARTS_INFO[m_image_view])); } std::string tmp(searchstr); @@ -1427,7 +1446,7 @@ if (m_focus == focused_menu::RIGHTTOP) { // Swap the right panel and swallow it - ui_globals::rpanel = RP_IMAGES; + m_right_panel = RP_IMAGES; iptkey = IPT_INVALID; } else @@ -1441,7 +1460,7 @@ if (m_focus == focused_menu::RIGHTTOP) { // Swap the right panel and swallow it - ui_globals::rpanel = RP_INFOS; + m_right_panel = RP_INFOS; iptkey = IPT_INVALID; } else @@ -1746,7 +1765,7 @@ } else if (hover() >= HOVER_RP_FIRST && hover() <= HOVER_RP_LAST) { - ui_globals::rpanel = (HOVER_RP_FIRST - hover()) * (-1); + m_right_panel = (HOVER_RP_FIRST - hover()) * (-1); stop = true; } else if (hover() >= HOVER_FILTER_FIRST && hover() <= HOVER_FILTER_LAST) @@ -1770,7 +1789,7 @@ // caught scroll event case ui_event::type::MOUSE_WHEEL: - if (hover() >= 0 && hover() < item_count() - skip_main_items) + if (hover() >= 0 && hover() < item_count() - m_skip_main_items) { if (local_menu_event.zdelta > 0) { @@ -1817,7 +1836,7 @@ break; case ui_event::type::MOUSE_RDOWN: - if (hover() >= 0 && hover() < item_count() - skip_main_items) + if (hover() >= 0 && hover() < item_count() - m_skip_main_items) { set_selected_index(hover()); m_prev_selected = get_selection_ref(); @@ -1883,8 +1902,8 @@ draw_background(); clear_hover(); - m_available_items = item_count() - skip_main_items; - float extra_height = skip_main_items * line_height; + m_available_items = item_count() - m_skip_main_items; + float extra_height = m_skip_main_items * line_height; float visible_extra_menu_height = get_customtop() + get_custombottom() + extra_height; // locate mouse @@ -2196,7 +2215,7 @@ draw_arrow(ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90); origy1 = draw_right_box_title(x2, origy1, origx2, origy2); - if (ui_globals::rpanel == RP_IMAGES) + if (m_right_panel == RP_IMAGES) arts_render(x2, origy1, origx2, origy2); else infos_render(x2, origy1, origx2, origy2); @@ -2218,9 +2237,7 @@ // add separator line container().add_line(x1 + midl, y1, x1 + midl, y1 + line_height, UI_LINE_WIDTH, ui().colors().border_color(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); - std::string buffer[RP_LAST + 1]; - buffer[RP_IMAGES] = _("Images"); - buffer[RP_INFOS] = _("Infos"); + std::string buffer[RP_LAST + 1] = { _(RIGHT_PANEL_NAMES[0].second), _(RIGHT_PANEL_NAMES[1].second) }; // check size float text_size = 1.0f; @@ -2238,7 +2255,7 @@ if (mouse_in_rect(x1, y1, x1 + midl, y1 + line_height)) { - if (ui_globals::rpanel != cells) + if (m_right_panel != cells) { bgcolor = ui().colors().mouseover_bg_color(); fgcolor = ui().options().mouseover_color(); @@ -2246,7 +2263,7 @@ } } - if (ui_globals::rpanel != cells) + if (m_right_panel != cells) { container().add_line(x1, y1 + line_height, x1 + midl, y1 + line_height, UI_LINE_WIDTH, ui().colors().border_color(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); @@ -2254,7 +2271,7 @@ fgcolor = ui().colors().clone_color(); } - if (m_focus == focused_menu::RIGHTTOP && ui_globals::rpanel == cells) + if (m_focus == focused_menu::RIGHTTOP && m_right_panel == cells) { fgcolor = rgb_t(0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff); @@ -2296,9 +2313,6 @@ { m_cache.set_snapx_driver(nullptr); - if (m_default_image) - m_image_view = (software->startempty == 0) ? SNAPSHOT_VIEW : CABINETS_VIEW; - // arts title and searchpath std::string const searchstr = arts_render_common(origx1, origy1, origx2, origy2); @@ -2335,9 +2349,6 @@ { m_cache.set_snapx_software(nullptr); - if (m_default_image) - m_image_view = ((system->driver->flags & machine_flags::MASK_TYPE) != machine_flags::TYPE_ARCADE) ? CABINETS_VIEW : SNAPSHOT_VIEW; - std::string const searchstr = arts_render_common(origx1, origy1, origx2, origy2); // loads the image if necessary @@ -2376,7 +2387,7 @@ { float text_length; ui().draw_text_full(container(), - _("selmenu-artwork", arts_info[x].first), origx1, origy1, origx2 - origx1, + _("selmenu-artwork", std::get<1>(ARTS_INFO[m_image_view])), origx1, origy1, origx2 - origx1, text_layout::text_justify::CENTER, text_layout::word_wrapping::TRUNCATE, mame_ui_manager::NONE, rgb_t::white(), rgb_t::black(), &text_length, nullptr); title_size = (std::max)(text_length + 0.01f, title_size); @@ -2525,6 +2536,55 @@ } +char const *menu_select_launch::right_panel_config_string() const +{ + assert(std::size(RIGHT_PANEL_NAMES) > m_right_panel); + return RIGHT_PANEL_NAMES[m_right_panel].first; +} + +char const *menu_select_launch::right_image_config_string() const +{ + assert(std::size(ARTS_INFO) > m_image_view); + return std::get<0>(ARTS_INFO[m_image_view]); +} + +void menu_select_launch::set_right_panel(u8 index) +{ + assert(std::size(RIGHT_PANEL_NAMES) > index); + m_right_panel = index; +} + +void menu_select_launch::set_right_image(u8 index) +{ + assert(std::size(ARTS_INFO) > index); + if (index != m_image_view) + { + m_image_view = index; + set_switch_image(); + } +} + +void menu_select_launch::set_right_panel(std::string_view value) +{ + auto const found = std::find_if( + std::begin(RIGHT_PANEL_NAMES), + std::end(RIGHT_PANEL_NAMES), + [&value] (auto const &that) { return value == that.first; }); + if (std::end(RIGHT_PANEL_NAMES) != found) + m_right_panel = found - std::begin(RIGHT_PANEL_NAMES); +} + +void menu_select_launch::set_right_image(std::string_view value) +{ + auto const found = std::find_if( + std::begin(ARTS_INFO), + std::end(ARTS_INFO), + [&value] (auto const &that) { return value == std::get<0>(that); }); + if (std::end(ARTS_INFO) != found) + m_image_view = found - std::begin(ARTS_INFO); +} + + std::string menu_select_launch::make_system_audit_fail_text(media_auditor const &auditor, media_auditor::summary summary) { std::ostringstream str; diff -Nru mame-0.250+dfsg.1/src/frontend/mame/ui/selmenu.h mame-0.251+dfsg.1/src/frontend/mame/ui/selmenu.h --- mame-0.250+dfsg.1/src/frontend/mame/ui/selmenu.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/ui/selmenu.h 2022-12-29 14:20:09.000000000 +0000 @@ -158,9 +158,18 @@ void *get_selection_ptr() const { void *const selected_ref(get_selection_ref()); - return (uintptr_t(selected_ref) > skip_main_items) ? selected_ref : m_prev_selected; + return (uintptr_t(selected_ref) > m_skip_main_items) ? selected_ref : m_prev_selected; } + u8 const right_panel() const { return m_right_panel; } + u8 const right_image() const { return m_image_view; } + char const *right_panel_config_string() const; + char const *right_image_config_string() const; + void set_right_panel(u8 index); + void set_right_image(u8 index); + void set_right_panel(std::string_view value); + void set_right_image(std::string_view value); + static std::string make_system_audit_fail_text(media_auditor const &auditor, media_auditor::summary summary); static std::string make_software_audit_fail_text(media_auditor const &auditor, media_auditor::summary summary); static constexpr bool audit_passed(media_auditor::summary summary) @@ -169,7 +178,7 @@ } int m_available_items; - int skip_main_items; + int m_skip_main_items; void *m_prev_selected; int m_total_lines; int m_topline_datsview; @@ -322,9 +331,9 @@ int m_right_visible_lines; // right box lines + uint8_t m_right_panel; bool m_has_icons; bool m_switch_image; - bool m_default_image; uint8_t m_image_view; flags_cache m_flags; }; diff -Nru mame-0.250+dfsg.1/src/frontend/mame/ui/selsoft.cpp mame-0.251+dfsg.1/src/frontend/mame/ui/selsoft.cpp --- mame-0.250+dfsg.1/src/frontend/mame/ui/selsoft.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/ui/selsoft.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -87,6 +87,8 @@ , m_filter_type(software_filter::ALL) , m_swinfo() , m_searchlist() + , m_right_panel(menu.right_panel()) + , m_right_image(menu.right_image()) { // add start empty item m_swinfo.emplace_back(*menu.m_system.driver); @@ -347,6 +349,11 @@ return m_searchlist; } + u8 right_panel() const { return m_right_panel; } + u8 right_image() const { return m_right_image; } + void set_right_panel(u8 index) { m_right_panel = index; } + void set_right_image(u8 index) { m_right_image = index; } + private: icon_cache m_icons; bool m_has_empty_start; @@ -356,6 +363,9 @@ std::vector m_swinfo; std::vector m_searchlist; + u8 m_right_panel; + u8 m_right_image; + std::unique_ptr m_search_thread; }; @@ -374,8 +384,21 @@ using machine_data_cache = util::lru_cache_map >; auto &cached(mui.get_session_data(8)[system.driver]); - if (!cached) + if (cached) + { + // restore last right panel settings for this machine + set_right_panel(cached->right_panel()); + set_right_image(cached->right_image()); + } + else + { + // restore last right panel settings from UI options + ui_options &moptions = ui().options(); + set_right_panel(moptions.software_right_panel()); + set_right_image(moptions.software_right_image()); + cached = std::make_shared(*this); + } m_data = cached; m_filter_highlight = m_data->filter_type(); @@ -419,12 +442,12 @@ break; case IPT_UI_LEFT: - if (ui_globals::rpanel == RP_IMAGES) + if (right_panel() == RP_IMAGES) { // Images previous_image_view(); } - else if (ui_globals::rpanel == RP_INFOS && ui_globals::cur_sw_dats_view > 0) + else if (right_panel() == RP_INFOS && ui_globals::cur_sw_dats_view > 0) { // Infos ui_globals::cur_sw_dats_view--; @@ -433,12 +456,12 @@ break; case IPT_UI_RIGHT: - if (ui_globals::rpanel == RP_IMAGES) + if (right_panel() == RP_IMAGES) { // Images next_image_view(); } - else if (ui_globals::rpanel == RP_INFOS && ui_globals::cur_sw_dats_view < (ui_globals::cur_sw_dats_total - 1)) + else if (right_panel() == RP_INFOS && ui_globals::cur_sw_dats_view < (ui_globals::cur_sw_dats_total - 1)) { // Infos ui_globals::cur_sw_dats_view++; @@ -503,6 +526,22 @@ } //------------------------------------------------- +// menu_deactivated +//------------------------------------------------- + +void menu_select_software::menu_deactivated() +{ + menu_select_launch::menu_deactivated(); + + // save last right panel settings + m_data->set_right_panel(right_panel()); + m_data->set_right_image(right_image()); + ui_options &mopt = ui().options(); + mopt.set_value(OPTION_SOFTWARE_RIGHT_PANEL, right_panel_config_string(), OPTION_PRIORITY_CMDLINE); + mopt.set_value(OPTION_SOFTWARE_RIGHT_IMAGE, right_image_config_string(), OPTION_PRIORITY_CMDLINE); +} + +//------------------------------------------------- // populate //------------------------------------------------- @@ -567,7 +606,7 @@ } // configure the custom rendering - skip_main_items = 0; + m_skip_main_items = 0; customtop = 4.0f * ui().get_line_height() + 5.0f * ui().box_tb_border(); custombottom = 4.0f * ui().get_line_height() + 4.0f * ui().box_tb_border(); diff -Nru mame-0.250+dfsg.1/src/frontend/mame/ui/selsoft.h mame-0.251+dfsg.1/src/frontend/mame/ui/selsoft.h --- mame-0.250+dfsg.1/src/frontend/mame/ui/selsoft.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/ui/selsoft.h 2022-12-29 14:20:09.000000000 +0000 @@ -32,6 +32,9 @@ menu_select_software(mame_ui_manager &mui, render_container &container, ui_system_info const &system); virtual ~menu_select_software() override; +protected: + virtual void menu_deactivated() override; + private: using filter_map = std::map; using icon_cache = texture_lru; diff -Nru mame-0.250+dfsg.1/src/frontend/mame/ui/submenu.cpp mame-0.251+dfsg.1/src/frontend/mame/ui/submenu.cpp --- mame-0.250+dfsg.1/src/frontend/mame/ui/submenu.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/ui/submenu.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -173,7 +173,7 @@ case option_type::EMU: sm_option.entry = opts->get_entry(sm_option.name); sm_option.options = opts; - if (sm_option.entry->type() == core_options::option_type::STRING) + if ((sm_option.entry->type() == core_options::option_type::STRING) || (sm_option.entry->type() == core_options::option_type::PATH) || (sm_option.entry->type() == core_options::option_type::MULTIPATH)) { sm_option.value.clear(); std::string namestr(sm_option.entry->description()); @@ -197,7 +197,7 @@ case option_type::OSD: sm_option.entry = opts->get_entry(sm_option.name); sm_option.options = opts; - if (sm_option.entry->type() == core_options::option_type::STRING) + if ((sm_option.entry->type() == core_options::option_type::STRING) || (sm_option.entry->type() == core_options::option_type::PATH) || (sm_option.entry->type() == core_options::option_type::MULTIPATH)) { sm_option.value.clear(); std::string descr(machine().options().get_entry(sm_option.name)->description()), delim(", "); @@ -307,6 +307,8 @@ } break; case core_options::option_type::STRING: + case core_options::option_type::PATH: + case core_options::option_type::MULTIPATH: if (ev->iptkey == IPT_UI_LEFT || ev->iptkey == IPT_UI_RIGHT) { changed = true; diff -Nru mame-0.250+dfsg.1/src/frontend/mame/ui/utils.cpp mame-0.251+dfsg.1/src/frontend/mame/ui/utils.cpp --- mame-0.250+dfsg.1/src/frontend/mame/ui/utils.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/ui/utils.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1951,7 +1951,6 @@ const char UI_VERSION_TAG[] = "# UI INFO "; // Globals -uint8_t ui_globals::rpanel = 0; uint8_t ui_globals::curdats_view = 0; uint8_t ui_globals::cur_sw_dats_total = 0; uint8_t ui_globals::curdats_total = 0; diff -Nru mame-0.250+dfsg.1/src/frontend/mame/ui/utils.h mame-0.251+dfsg.1/src/frontend/mame/ui/utils.h --- mame-0.250+dfsg.1/src/frontend/mame/ui/utils.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/frontend/mame/ui/utils.h 2022-12-29 14:20:09.000000000 +0000 @@ -398,7 +398,7 @@ // GLOBAL CLASS struct ui_globals { - static uint8_t curdats_view, curdats_total, cur_sw_dats_view, cur_sw_dats_total, rpanel; + static uint8_t curdats_view, curdats_total, cur_sw_dats_view, cur_sw_dats_total; static bool default_image, reset; static int visible_main_lines, visible_sw_lines; static uint16_t panels_status; diff -Nru mame-0.250+dfsg.1/src/lib/formats/hxchfe_dsk.cpp mame-0.251+dfsg.1/src/lib/formats/hxchfe_dsk.cpp --- mame-0.250+dfsg.1/src/lib/formats/hxchfe_dsk.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/formats/hxchfe_dsk.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -55,7 +55,7 @@ Track data ---------- - (first possible occurance at 0x0400) + (first possible occurrence at 0x0400) Each track is encoded in a sequence of cell levels which are represented by bits in the data. diff -Nru mame-0.250+dfsg.1/src/lib/formats/thom_dsk.cpp mame-0.251+dfsg.1/src/lib/formats/thom_dsk.cpp --- mame-0.250+dfsg.1/src/lib/formats/thom_dsk.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/formats/thom_dsk.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -39,6 +39,14 @@ 1, {}, 31, 22, 44 }, + { + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, + 16, 40, 2, + 256, {}, + 1, {}, + 31, 22, 44 + }, {} }; diff -Nru mame-0.250+dfsg.1/src/lib/formats/ti99_dsk.cpp mame-0.251+dfsg.1/src/lib/formats/ti99_dsk.cpp --- mame-0.250+dfsg.1/src/lib/formats/ti99_dsk.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/formats/ti99_dsk.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -17,7 +17,7 @@ bytes long. The most common formats are 9 sectors per track, single-sided, 40 tracks, which yields 90 KiB of sector data (known as SSSD), and 18 sectors per track, double-sided, and 40 tracks, which is 360 KiB (known as - DSDD). There are rare occurances of 16 sectors/track + DSDD). There are rare occurrences of 16 sectors/track (prototypical TI double-density controller) and 35 track media. Newer controllers and ROMs allow for up to 36 sectors per track and 80 tracks on both sides, which is 1,44 MiB (DSHD80). diff -Nru mame-0.250+dfsg.1/src/lib/netlist/build/create_modules.py mame-0.251+dfsg.1/src/lib/netlist/build/create_modules.py --- mame-0.250+dfsg.1/src/lib/netlist/build/create_modules.py 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/build/create_modules.py 2022-12-29 14:20:09.000000000 +0000 @@ -67,7 +67,7 @@ for argno in range(1, len(sys.argv)): files_sorted.append(sys.argv[argno]) files_sorted.sort(); - print("// license:CC0") + print("// license:CC0-1.0") print("// copyright-holders:Couriersud") print("") now = datetime.datetime.now() diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/2n6027.cpp mame-0.251+dfsg.1/src/lib/netlist/examples/2n6027.cpp --- mame-0.250+dfsg.1/src/lib/netlist/examples/2n6027.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/2n6027.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud #include "netlist/devices/net_lib.h" diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/7400_astable.c mame-0.251+dfsg.1/src/lib/netlist/examples/7400_astable.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/7400_astable.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/7400_astable.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * 7400_astable.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/74123_mstable.c mame-0.251+dfsg.1/src/lib/netlist/examples/74123_mstable.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/74123_mstable.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/74123_mstable.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * 74123_mstable.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/74125.cpp mame-0.251+dfsg.1/src/lib/netlist/examples/74125.cpp --- mame-0.250+dfsg.1/src/lib/netlist/examples/74125.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/74125.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/7414.cpp mame-0.251+dfsg.1/src/lib/netlist/examples/7414.cpp --- mame-0.250+dfsg.1/src/lib/netlist/examples/7414.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/7414.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * 7414.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/9602_mstable.c mame-0.251+dfsg.1/src/lib/netlist/examples/9602_mstable.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/9602_mstable.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/9602_mstable.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * 9602_mstable.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/bjt.c mame-0.251+dfsg.1/src/lib/netlist/examples/bjt.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/bjt.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/bjt.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * bjt.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/bjt_eb.c mame-0.251+dfsg.1/src/lib/netlist/examples/bjt_eb.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/bjt_eb.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/bjt_eb.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * bjt.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/bjt_eb_pnp.c mame-0.251+dfsg.1/src/lib/netlist/examples/bjt_eb_pnp.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/bjt_eb_pnp.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/bjt_eb_pnp.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * bjt.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/cccs.cpp mame-0.251+dfsg.1/src/lib/netlist/examples/cccs.cpp --- mame-0.250+dfsg.1/src/lib/netlist/examples/cccs.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/cccs.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * cccs.cpp diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/cd4066.c mame-0.251+dfsg.1/src/lib/netlist/examples/cd4066.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/cd4066.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/cd4066.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * bjt.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/cdelay.c mame-0.251+dfsg.1/src/lib/netlist/examples/cdelay.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/cdelay.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/cdelay.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * cdelay.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/cmos_inverter_clk.cpp mame-0.251+dfsg.1/src/lib/netlist/examples/cmos_inverter_clk.cpp --- mame-0.250+dfsg.1/src/lib/netlist/examples/cmos_inverter_clk.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/cmos_inverter_clk.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * cmos_inverter_clk diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/cmos_inverter.cpp mame-0.251+dfsg.1/src/lib/netlist/examples/cmos_inverter.cpp --- mame-0.250+dfsg.1/src/lib/netlist/examples/cmos_inverter.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/cmos_inverter.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * bjt.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/cmos_inverter_rs.cpp mame-0.251+dfsg.1/src/lib/netlist/examples/cmos_inverter_rs.cpp --- mame-0.250+dfsg.1/src/lib/netlist/examples/cmos_inverter_rs.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/cmos_inverter_rs.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * bjt.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/congo_bongo.cpp mame-0.251+dfsg.1/src/lib/netlist/examples/congo_bongo.cpp --- mame-0.250+dfsg.1/src/lib/netlist/examples/congo_bongo.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/congo_bongo.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Andrew Gardner,Couriersud #include "netlist/devices/net_lib.h" diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/cs.cpp mame-0.251+dfsg.1/src/lib/netlist/examples/cs.cpp --- mame-0.250+dfsg.1/src/lib/netlist/examples/cs.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/cs.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * cs.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/lm3900_test.cpp mame-0.251+dfsg.1/src/lib/netlist/examples/lm3900_test.cpp --- mame-0.250+dfsg.1/src/lib/netlist/examples/lm3900_test.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/lm3900_test.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * Script to analyze opamp amplification as a function of frequency. diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/mm5837_noise.c mame-0.251+dfsg.1/src/lib/netlist/examples/mm5837_noise.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/mm5837_noise.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/mm5837_noise.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * mm5837_noise.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/msx_mixer_stage.c mame-0.251+dfsg.1/src/lib/netlist/examples/msx_mixer_stage.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/msx_mixer_stage.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/msx_mixer_stage.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * bjt.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/ne555_astable.c mame-0.251+dfsg.1/src/lib/netlist/examples/ne555_astable.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/ne555_astable.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/ne555_astable.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/ne566.cpp mame-0.251+dfsg.1/src/lib/netlist/examples/ne566.cpp --- mame-0.250+dfsg.1/src/lib/netlist/examples/ne566.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/ne566.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/nld_74393_test.c mame-0.251+dfsg.1/src/lib/netlist/examples/nld_74393_test.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/nld_74393_test.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/nld_74393_test.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * cdelay.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/nmos_fet.cpp mame-0.251+dfsg.1/src/lib/netlist/examples/nmos_fet.cpp --- mame-0.250+dfsg.1/src/lib/netlist/examples/nmos_fet.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/nmos_fet.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * nmos_fet.cpp diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/noise.cpp mame-0.251+dfsg.1/src/lib/netlist/examples/noise.cpp --- mame-0.250+dfsg.1/src/lib/netlist/examples/noise.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/noise.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/opamp_amplification_curve.cpp mame-0.251+dfsg.1/src/lib/netlist/examples/opamp_amplification_curve.cpp --- mame-0.250+dfsg.1/src/lib/netlist/examples/opamp_amplification_curve.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/opamp_amplification_curve.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * Script to analyze opamp amplification as a function of frequency. diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/opamp.c mame-0.251+dfsg.1/src/lib/netlist/examples/opamp.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/opamp.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/opamp.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * opamp.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/sn74ls629_osc.c mame-0.251+dfsg.1/src/lib/netlist/examples/sn74ls629_osc.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/sn74ls629_osc.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/sn74ls629_osc.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * ne555_astable.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/test.c mame-0.251+dfsg.1/src/lib/netlist/examples/test.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/test.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/test.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * bjt.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/todo.c mame-0.251+dfsg.1/src/lib/netlist/examples/todo.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/todo.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/todo.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * todo.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/turkey_shoot.cpp mame-0.251+dfsg.1/src/lib/netlist/examples/turkey_shoot.cpp --- mame-0.250+dfsg.1/src/lib/netlist/examples/turkey_shoot.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/turkey_shoot.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/vccs1.c mame-0.251+dfsg.1/src/lib/netlist/examples/vccs1.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/vccs1.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/vccs1.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * vccs.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/vccs.c mame-0.251+dfsg.1/src/lib/netlist/examples/vccs.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/vccs.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/vccs.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * vccs.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/vs_cs.c mame-0.251+dfsg.1/src/lib/netlist/examples/vs_cs.c --- mame-0.250+dfsg.1/src/lib/netlist/examples/vs_cs.c 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/vs_cs.c 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* * vs_cs.c diff -Nru mame-0.250+dfsg.1/src/lib/netlist/examples/zdiode.cpp mame-0.251+dfsg.1/src/lib/netlist/examples/zdiode.cpp --- mame-0.250+dfsg.1/src/lib/netlist/examples/zdiode.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/examples/zdiode.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud /* diff -Nru mame-0.250+dfsg.1/src/lib/netlist/generated/nlm_modules_lib.cpp mame-0.251+dfsg.1/src/lib/netlist/generated/nlm_modules_lib.cpp --- mame-0.250+dfsg.1/src/lib/netlist/generated/nlm_modules_lib.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/generated/nlm_modules_lib.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud // File programmatically created Sat Jul 2 23:43:48 2022 diff -Nru mame-0.250+dfsg.1/src/lib/netlist/macro/modules/nlmod_rtest.cpp mame-0.251+dfsg.1/src/lib/netlist/macro/modules/nlmod_rtest.cpp --- mame-0.250+dfsg.1/src/lib/netlist/macro/modules/nlmod_rtest.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/macro/modules/nlmod_rtest.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud #include "devices/net_lib.h" diff -Nru mame-0.250+dfsg.1/src/lib/netlist/macro/nlm_base_lib.cpp mame-0.251+dfsg.1/src/lib/netlist/macro/nlm_base_lib.cpp --- mame-0.250+dfsg.1/src/lib/netlist/macro/nlm_base_lib.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/macro/nlm_base_lib.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud // Specific technical terms diff -Nru mame-0.250+dfsg.1/src/lib/netlist/macro/nlm_cd4xxx_lib.cpp mame-0.251+dfsg.1/src/lib/netlist/macro/nlm_cd4xxx_lib.cpp --- mame-0.250+dfsg.1/src/lib/netlist/macro/nlm_cd4xxx_lib.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/macro/nlm_cd4xxx_lib.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud #include "devices/net_lib.h" diff -Nru mame-0.250+dfsg.1/src/lib/netlist/macro/nlm_opamp_lib.cpp mame-0.251+dfsg.1/src/lib/netlist/macro/nlm_opamp_lib.cpp --- mame-0.250+dfsg.1/src/lib/netlist/macro/nlm_opamp_lib.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/macro/nlm_opamp_lib.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud #include "devices/net_lib.h" diff -Nru mame-0.250+dfsg.1/src/lib/netlist/macro/nlm_otheric_lib.cpp mame-0.251+dfsg.1/src/lib/netlist/macro/nlm_otheric_lib.cpp --- mame-0.250+dfsg.1/src/lib/netlist/macro/nlm_otheric_lib.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/macro/nlm_otheric_lib.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud #include "devices/net_lib.h" diff -Nru mame-0.250+dfsg.1/src/lib/netlist/macro/nlm_roms_lib.cpp mame-0.251+dfsg.1/src/lib/netlist/macro/nlm_roms_lib.cpp --- mame-0.250+dfsg.1/src/lib/netlist/macro/nlm_roms_lib.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/macro/nlm_roms_lib.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud #include "devices/net_lib.h" diff -Nru mame-0.250+dfsg.1/src/lib/netlist/macro/nlm_ttl74xx_lib.cpp mame-0.251+dfsg.1/src/lib/netlist/macro/nlm_ttl74xx_lib.cpp --- mame-0.250+dfsg.1/src/lib/netlist/macro/nlm_ttl74xx_lib.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/netlist/macro/nlm_ttl74xx_lib.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud //#rewritten with sed -e "s_^\(.*\)/\*\(.*\)\*/\(.*\)\$_\1\3 // \2_g" ../macro/nlm_ttl74xx_lib.cpp diff -Nru mame-0.250+dfsg.1/src/lib/util/harddisk.cpp mame-0.251+dfsg.1/src/lib/util/harddisk.cpp --- mame-0.250+dfsg.1/src/lib/util/harddisk.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/util/harddisk.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -10,8 +10,11 @@ #include "harddisk.h" +#include "chd.h" #include "ioprocs.h" +#include "osdcore.h" + #include diff -Nru mame-0.250+dfsg.1/src/lib/util/harddisk.h mame-0.251+dfsg.1/src/lib/util/harddisk.h --- mame-0.250+dfsg.1/src/lib/util/harddisk.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/util/harddisk.h 2022-12-29 14:20:09.000000000 +0000 @@ -13,12 +13,15 @@ #pragma once -#include "chd.h" #include "utilfwd.h" -#include "osdcore.h" +#include +#include +#include +class chd_file; + class hard_disk_file { public: struct info diff -Nru mame-0.250+dfsg.1/src/lib/util/options.cpp mame-0.251+dfsg.1/src/lib/util/options.cpp --- mame-0.250+dfsg.1/src/lib/util/options.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/util/options.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -12,6 +12,7 @@ #include "corefile.h" #include "corestr.h" +#include "osdcore.h" #include #include @@ -20,6 +21,7 @@ #include #include #include +#include const int core_options::MAX_UNADORNED_OPTIONS; @@ -113,7 +115,7 @@ // entry - constructor //------------------------------------------------- -core_options::entry::entry(std::vector &&names, core_options::option_type type, const char *description) +core_options::entry::entry(std::vector &&names, option_type type, const char *description) : m_names(std::move(names)) , m_priority(OPTION_PRIORITY_DEFAULT) , m_type(type) @@ -122,7 +124,7 @@ assert(m_names.empty() == (m_type == option_type::HEADER)); } -core_options::entry::entry(std::string &&name, core_options::option_type type, const char *description) +core_options::entry::entry(std::string &&name, option_type type, const char *description) : entry(std::vector({ std::move(name) }), type, description) { } @@ -150,10 +152,44 @@ //------------------------------------------------- +// entry::value_unsubstituted +//------------------------------------------------- + +const char *core_options::entry::value_unsubstituted() const noexcept +{ + return value(); +} + + +//------------------------------------------------- +// entry::copy_from +//------------------------------------------------- + +void core_options::entry::copy_from(const entry &that, bool always_override) +{ + // it is invalid to set the value on a header + assert(type() != option_type::HEADER); + + // only set the value if we have priority + if (always_override || that.priority() >= priority()) + { + if (internal_copy_value(that)) + { + m_priority = that.priority(); + + // invoke the value changed handler, if appropriate + if (m_value_changed_handler) + m_value_changed_handler(value()); + } + } +} + + +//------------------------------------------------- // entry::set_value //------------------------------------------------- -void core_options::entry::set_value(std::string &&newvalue, int priority_value, bool always_override) +void core_options::entry::set_value(std::string &&newvalue, int priority_value, bool always_override, bool perform_substitutions) { // it is invalid to set the value on a header assert(type() != option_type::HEADER); @@ -163,7 +199,7 @@ // only set the value if we have priority if (always_override || priority_value >= priority()) { - internal_set_value(std::move(newvalue)); + internal_set_value(std::move(newvalue), perform_substitutions); m_priority = priority_value; // invoke the value changed handler, if appropriate @@ -185,6 +221,29 @@ //------------------------------------------------- +// entry::internal_copy_value +//------------------------------------------------- + +bool core_options::entry::internal_copy_value(const entry &that) +{ + char const *const newvalue = that.value(); + if (newvalue) + { + std::string stringval = newvalue; + validate(stringval); + + internal_set_value(std::move(stringval), false); + + return true; + } + else + { + return false; + } +} + + +//------------------------------------------------- // entry::validate //------------------------------------------------- @@ -273,12 +332,14 @@ } break; - case core_options::option_type::STRING: + case option_type::STRING: + case option_type::PATH: + case option_type::MULTIPATH: // strings can be anything break; - case core_options::option_type::INVALID: - case core_options::option_type::HEADER: + case option_type::INVALID: + case option_type::HEADER: default: // anything else is invalid throw options_error_exception("Attempted to set invalid option %s\n", name()); @@ -337,10 +398,12 @@ core_options::simple_entry::simple_entry(std::vector &&names, const char *description, core_options::option_type type, std::string &&defdata, std::string &&minimum, std::string &&maximum) : entry(std::move(names), type, description) - , m_defdata(std::move(defdata)) + , m_defdata_unsubst(std::move(defdata)) , m_minimum(std::move(minimum)) , m_maximum(std::move(maximum)) { + m_defdata = type_specific_substitutions(m_defdata_unsubst); + m_data_unsubst = m_defdata_unsubst; m_data = m_defdata; } @@ -362,11 +425,37 @@ { switch (type()) { + case option_type::BOOLEAN: + case option_type::INTEGER: + case option_type::FLOAT: + case option_type::STRING: + case option_type::PATH: + case option_type::MULTIPATH: + return m_data.c_str(); + + default: + // this is an option type for which returning a value is + // a meaningless operation (e.g. - core_options::option_type::COMMAND) + return nullptr; + } +} + + +//------------------------------------------------- +// simple_entry::value_unsubstituted +//------------------------------------------------- + +const char *core_options::simple_entry::value_unsubstituted() const noexcept +{ + switch (type()) + { case core_options::option_type::BOOLEAN: case core_options::option_type::INTEGER: case core_options::option_type::FLOAT: case core_options::option_type::STRING: - return m_data.c_str(); + case core_options::option_type::PATH: + case core_options::option_type::MULTIPATH: + return m_data_unsubst.c_str(); default: // this is an option type for which returning a value is @@ -388,12 +477,50 @@ //------------------------------------------------- -// internal_set_value +// simple_entry::internal_set_value //------------------------------------------------- -void core_options::simple_entry::internal_set_value(std::string &&newvalue) +void core_options::simple_entry::internal_set_value(std::string &&newvalue, bool perform_substitutions) { - m_data = std::move(newvalue); + m_data = perform_substitutions + ? type_specific_substitutions(newvalue) + : newvalue; + m_data_unsubst = std::move(newvalue); +} + + +//------------------------------------------------- +// simple_entry::internal_copy_value +//------------------------------------------------- + +bool core_options::simple_entry::internal_copy_value(const entry &that) +{ + simple_entry const *const simple = dynamic_cast(&that); + if (!simple) + { + return entry::internal_copy_value(that); + } + else + { + switch (simple->type()) + { + case option_type::BOOLEAN: + case option_type::INTEGER: + case option_type::FLOAT: + case option_type::STRING: + case option_type::PATH: + case option_type::MULTIPATH: + validate(simple->m_data); + + m_data = simple->m_data; + m_data_unsubst = simple->m_data_unsubst; + + return true; + + default: + return false; + } + } } @@ -403,7 +530,47 @@ void core_options::simple_entry::set_default_value(std::string &&newvalue) { - m_data = m_defdata = std::move(newvalue); + m_data = m_defdata = type_specific_substitutions(newvalue); + m_data_unsubst = m_defdata_unsubst = std::move(newvalue); +} + + +//------------------------------------------------- +// type_specific_substitutions +//------------------------------------------------- + +std::string core_options::simple_entry::type_specific_substitutions(std::string_view s) const noexcept +{ + switch (type()) + { + case option_type::PATH: + return osd_subst_env(s); + + case option_type::MULTIPATH: + { + std::ostringstream result; + while (!s.empty()) + { + std::string_view::size_type split = s.find(';'); + if (std::string_view::npos == split) + split = s.length(); + result << osd_subst_env(s.substr(0, split)); + if (s.length() > split) + { + result << s[split]; + s.remove_prefix(split + 1); + } + else + { + s.remove_prefix(split); + } + } + return std::move(result).str(); + } + + default: + return std::string(s); + } } @@ -717,7 +884,7 @@ } // set the new data - do_set_value(*curentry, newdata, priority, error_stream, condition); + do_set_value(*curentry, newdata, priority, error_stream, condition, false); } // did we have any errors that may need to be aggregated? @@ -791,7 +958,7 @@ } // set the new data - do_set_value(*curentry, trim_spaces_and_quotes(optiondata), priority, error_stream, condition); + do_set_value(*curentry, trim_spaces_and_quotes(optiondata), priority, error_stream, condition, true); } // did we have any errors that may need to be aggregated? @@ -837,11 +1004,7 @@ // identify the source entry const entry::shared_const_ptr source_entry = that.get_entry(dest_entry->name()); if (source_entry) - { - const char *value = source_entry->value(); - if (value) - dest_entry->set_value(value, source_entry->priority(), true); - } + dest_entry->copy_from(*source_entry, false); } } } @@ -875,7 +1038,7 @@ else { const std::string &name(curentry->name()); - const char *value(curentry->value()); + const char *value(curentry->value_unsubstituted()); // check if it's unadorned bool is_unadorned = false; @@ -889,7 +1052,7 @@ if (value) { // look up counterpart in diff, if diff is specified - if (!diff || strcmp(value, diff->value(name.c_str()))) + if (!diff || strcmp(value, diff->get_entry(name.c_str())->value_unsubstituted())) { // output header, if we have one if (last_header) @@ -1022,7 +1185,7 @@ { auto entry = get_entry(name); assert(entry != nullptr); - entry->set_value(std::move(value), priority); + entry->set_value(std::move(value), priority, false, false); } void core_options::set_value(std::string_view name, int value, int priority) @@ -1063,13 +1226,13 @@ // do_set_value //------------------------------------------------- -void core_options::do_set_value(entry &curentry, std::string_view data, int priority, std::ostream &error_stream, condition_type &condition) +void core_options::do_set_value(entry &curentry, std::string_view data, int priority, std::ostream &error_stream, condition_type &condition, bool perform_substitutions) { // this is called when parsing a command line or an INI - we want to catch the option_exception and write // any exception messages to the error stream try { - curentry.set_value(std::string(data), priority); + curentry.set_value(std::string(data), priority, false, perform_substitutions); } catch (options_warning_exception &ex) { @@ -1156,7 +1319,7 @@ // if our priority is within the range, revert to the default if (priority() <= priority_hi && priority() >= priority_lo) { - set_value(std::string(default_value()), priority(), true); + set_value(std::string(m_defdata_unsubst), priority(), true, true); set_priority(OPTION_PRIORITY_DEFAULT); } } diff -Nru mame-0.250+dfsg.1/src/lib/util/options.h mame-0.251+dfsg.1/src/lib/util/options.h --- mame-0.250+dfsg.1/src/lib/util/options.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/util/options.h 2022-12-29 14:20:09.000000000 +0000 @@ -104,7 +104,9 @@ BOOLEAN, // boolean option INTEGER, // integer option FLOAT, // floating-point option - STRING // string option + STRING, // string option + PATH, // single path option + MULTIPATH // semicolon-delimited paths option }; // information about a single entry in the options @@ -128,6 +130,7 @@ const std::vector &names() const noexcept { return m_names; } const std::string &name() const noexcept { return m_names[0]; } virtual const char *value() const noexcept; + virtual const char *value_unsubstituted() const noexcept; int priority() const noexcept { return m_priority; } void set_priority(int priority) noexcept { m_priority = priority; } option_type type() const noexcept { return m_type; } @@ -138,18 +141,20 @@ bool has_range() const noexcept; // mutators - void set_value(std::string &&newvalue, int priority, bool always_override = false); + void copy_from(const entry &that, bool always_override); + void set_value(std::string &&newvalue, int priority, bool always_override = false, bool perform_substitutions = false); virtual void set_default_value(std::string &&newvalue); void set_description(const char *description) { m_description = description; } void set_value_changed_handler(std::function &&handler) { m_value_changed_handler = std::move(handler); } virtual void revert(int priority_hi, int priority_lo) { } protected: - virtual void internal_set_value(std::string &&newvalue) = 0; + virtual void internal_set_value(std::string &&newvalue, bool perform_substitutions) = 0; + virtual bool internal_copy_value(const entry &that); - private: void validate(const std::string &value); + private: const std::vector m_names; int m_priority; core_options::option_type m_type; @@ -231,6 +236,7 @@ // getters virtual const char *value() const noexcept override; + virtual const char *value_unsubstituted() const noexcept override; virtual const char *minimum() const noexcept override; virtual const char *maximum() const noexcept override; virtual const std::string &default_value() const noexcept override; @@ -239,14 +245,19 @@ virtual void set_default_value(std::string &&newvalue) override; protected: - virtual void internal_set_value(std::string &&newvalue) override; + virtual void internal_set_value(std::string &&newvalue, bool perform_substitutions) override; + virtual bool internal_copy_value(const entry &that) override; private: // internal state std::string m_data; // data for this item + std::string m_data_unsubst; // data for this item, prior to any substitution std::string m_defdata; // default data for this item + std::string m_defdata_unsubst; // default data for this item, prior to any substitution std::string m_minimum; // minimum value std::string m_maximum; // maximum value + + std::string type_specific_substitutions(std::string_view s) const noexcept; }; // used internally in core_options @@ -259,7 +270,7 @@ // internal helpers void add_to_entry_map(const std::string &name, entry::shared_ptr &entry); - void do_set_value(entry &curentry, std::string_view data, int priority, std::ostream &error_stream, condition_type &condition); + void do_set_value(entry &curentry, std::string_view data, int priority, std::ostream &error_stream, condition_type &condition, bool perform_substitutions); void throw_options_exception_if_appropriate(condition_type condition, std::ostringstream &error_stream); // internal state diff -Nru mame-0.250+dfsg.1/src/lib/util/xmlfile.cpp mame-0.251+dfsg.1/src/lib/util/xmlfile.cpp --- mame-0.250+dfsg.1/src/lib/util/xmlfile.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/lib/util/xmlfile.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -465,8 +465,14 @@ } else { - dst = dst->get_parent(); - src = src->get_parent()->get_next_sibling(); + do + { + dst = dst->get_parent(); + src = src->get_parent(); + next = src->get_next_sibling(); + } + while (!next && (&parent != dst)); + src = next; } } } diff -Nru mame-0.250+dfsg.1/src/mame/alpha/ad_sound.cpp mame-0.251+dfsg.1/src/mame/alpha/ad_sound.cpp --- mame-0.250+dfsg.1/src/mame/alpha/ad_sound.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/alpha/ad_sound.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -121,8 +121,8 @@ // ad_59mc07_device: Constructor //------------------------------------------------- -ad_59mc07_device::ad_59mc07_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) - : device_t(mconfig, AD_59MC07, tag, owner, clock), +ad_59mc07_device::ad_59mc07_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + device_t(mconfig, AD_59MC07, tag, owner, clock), m_audiocpu(*this, "audiocpu"), m_audio8155(*this, "audio8155"), m_samples(*this, "samples"), @@ -131,7 +131,7 @@ m_dac_2(*this, "dac2"), m_soundlatch(*this, "soundlatch"), m_frq_adjuster(*this, ":FRQ") // TODO: this should be moved here, but I don't think it's possible to set the default per-game value with a variable -{} +{ } // MSM5232 clock is generated by a transistor oscillator circuit, not by the pcb xtal // The circuit is controlled by a pot to allow adjusting the frequency. All games @@ -472,11 +472,11 @@ // ad_60mc01_device: Constructor //------------------------------------------------- -ad_60mc01_device::ad_60mc01_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) - : device_t(mconfig, AD_60MC01, tag, owner, clock), +ad_60mc01_device::ad_60mc01_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + device_t(mconfig, AD_60MC01, tag, owner, clock), m_audiocpu(*this, "audiocpu"), m_soundlatch(*this, "soundlatch") -{} +{ } //------------------------------------------------- // device_add_mconfig - add device configuration diff -Nru mame-0.250+dfsg.1/src/mame/alpha/alpha68k_n.cpp mame-0.251+dfsg.1/src/mame/alpha/alpha68k_n.cpp --- mame-0.250+dfsg.1/src/mame/alpha/alpha68k_n.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/alpha/alpha68k_n.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -826,6 +826,7 @@ /* sound hardware */ ay8910_device &aysnd(AY8910(config, "aysnd", 2000000)); aysnd.port_a_read_callback().set(m_soundlatch, FUNC(generic_latch_8_device::read)); + aysnd.port_b_write_callback().set_nop(); // ? aysnd.add_route(ALL_OUTPUTS, "speaker", 0.65); } diff -Nru mame-0.250+dfsg.1/src/mame/alpha/champbas.cpp mame-0.251+dfsg.1/src/mame/alpha/champbas.cpp --- mame-0.250+dfsg.1/src/mame/alpha/champbas.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/alpha/champbas.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Ernesto Corvi, Jarek Parchanski, Nicola Salmoria, hap +// copyright-holders:Ernesto Corvi, Jarek Parchanski, Nicola Salmoria /*************************************************************************** Talbot - (c) 1982 Alpha Denshi Co. @@ -1298,7 +1298,7 @@ * *************************************/ -/* YEAR NAME PARENT MACHINE INPUT INIT MONITOR COMPANY, FULLNAME, FLAGS */ +/* YEAR NAME PARENT MACHINE INPUT INIT MONITOR COMPANY, FULLNAME, FLAGS */ GAME( 1982, talbot, 0, talbot, talbot, champbas_state, empty_init, ROT270, "Alpha Denshi Co. (Volt Electronics license)", "Talbot", MACHINE_SUPPORTS_SAVE ) GAME( 1983, champbas, 0, champbas, champbas, champbas_state, init_champbas, ROT0, "Alpha Denshi Co. (Sega license)", "Champion Base Ball", MACHINE_SUPPORTS_SAVE ) // no protection diff -Nru mame-0.250+dfsg.1/src/mame/alpha/champbas.h mame-0.251+dfsg.1/src/mame/alpha/champbas.h --- mame-0.250+dfsg.1/src/mame/alpha/champbas.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/alpha/champbas.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Ernesto Corvi, Jarek Parchanski, Nicola Salmoria, hap +// copyright-holders:Ernesto Corvi, Jarek Parchanski, Nicola Salmoria /************************************************************************* Talbot - Champion Base Ball - Exciting Soccer diff -Nru mame-0.250+dfsg.1/src/mame/alpha/champbas_v.cpp mame-0.251+dfsg.1/src/mame/alpha/champbas_v.cpp --- mame-0.250+dfsg.1/src/mame/alpha/champbas_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/alpha/champbas_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Ernesto Corvi, Jarek Parchanski, Nicola Salmoria, hap +// copyright-holders:Ernesto Corvi, Jarek Parchanski, Nicola Salmoria /************************************************************************* Talbot - Champion Base Ball - Exciting Soccer diff -Nru mame-0.250+dfsg.1/src/mame/alpha/equites.cpp mame-0.251+dfsg.1/src/mame/alpha/equites.cpp --- mame-0.250+dfsg.1/src/mame/alpha/equites.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/alpha/equites.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -6,9 +6,6 @@ Bull Fighter (c) 1984 Alpha Denshi Co./Sega Gekisou (c) 1985 Eastern Corp. The Koukouyakyuh (c) 1985 Alpha Denshi Co. -Splendor Blast (c) 1985 Alpha Denshi Co. -Splendor Blast II (c) 1985 Alpha Denshi Co. -High Voltage (c) 1985 Alpha Denshi Co. Bingo Time (c) 1986 CLS The following are not dumped yet: @@ -17,10 +14,10 @@ Tune Pit(?) (c) 1985 Alpha Denshi Co. Perfect Janputer (c) 1984 Alpha Denshi Co. (4-player Mahjong) - Driver by Acho A. Tang, Nicola Salmoria Many thanks to Corrado Tomaselli for precious hardware info. + Stephh's notes (based on the games M68000 code and some tests) : 0) all games @@ -53,33 +50,6 @@ the inputs, so you can enter the "test mode" by pressing COIN1 during P.O.S.T. -4) 'splndrbt' - - - When starting a 2 players game, when player 1 game is over, the game enters in - an infinite loop on displaying the "GAME OVER" message. - - You can test player 2 by putting 0xff instead of 0x00 at 0x040009 ($9,A6). - - FYI, what should change the contents of $9,A6 is the routine at 0x000932, - but I haven't found where this routine could be called 8( 8303 issue ? - - -5) 'hvoltage' - - - There is sort of "debug mode" that you can access if 0x000038.w returns 0x0000 - instead of 0xffff. To enable it, use the MAME debugger or cheats. - - When you are in "debug mode", the Inputs and Dip Switches have special features. - Here is IMO the full list : - - * pressing IPT_JOYSTICK_DOWN of player 2 freezes the game - * pressing IPT_JOYSTICK_UP of player 2 unfreezes the game - * pressing IPT_COIN1 gives invulnerability (the collision routine isn't called) - * pressing IPT_COIN2 speeds up the game and you don't need to kill the bosses - * when bit 2 is On, you are given invulnerability (same effect as IPT_COIN1) - * when bit 3 is On, you don't need to kill the bosses (only the last one) - * when bit 4 is On ("Lives" Dip Switch set to "5"), some coordonates are displayed - * when bit 7 is On ("Coinage" Dip Switch set to "A 1/3C B 1/6C" or "A 2/1C B 3/1C"), - a "band" is displayed at the left of the screen - - Notes: ----- - The sound board in all games is identical, labelled SOUND BOARD NO.59 MC 07. @@ -103,9 +73,6 @@ are at the lower addresses. This gives good priorities in gekisou (the car and helicopter shadows would be wrong otherwise). -- similarly, splndrbt hardware only appears to be capable of displaying 24 sprites. - This time, they are consecutive in RAM. - - gekisou doesn't have dip-switches but battery backed RAM. By pressing service button (F2) at any time after POST operator can access to a simple config menu with no setting OSD indication about what they do but just a @@ -128,14 +95,9 @@ CABINET Cocktail ON Upright OFF -- splndrbt2 is different in many areas, most notibly in the title screen and the - operation of the missiles which is a power-up pickup rather than a cumulative - collecting of missiles that can run out. - TODO: ---- - - on startup, the CPU continuously writes 5555 to 100000 in a tight loop and expects it to change to exit the loop. The value should obviously be modified by the sprite hardware but it's difficult to guess what should happen. A kludge read @@ -159,15 +121,6 @@ Update: background is actually misaligned one line, cfr. the blue buildings that are near the status bar (missing on the other side). -- splndrbt, hvoltage: the interpretation of the scaling PROMs might be wrong. - The sprite x scaling is not used at all because I couldn't figure it out. - Sprite y scaling is slightly wrong and leaves gaps in tall objects. - Note that sprites are 30x30 instead of 32x32. - -- The "road" background in splndrbt is slightly wrong. Apparently, the black lines - visible in some parts of the background should never disappear in the distance. - Currently, they may or may not disappear depending on the X position. - - Need to use different default volumes for various games, especially gekisou where the car noise is really unpleasant with the default settings. @@ -182,8 +135,8 @@ should influence the MSM5232 clock. However, even removing it from the board doesn't seem to affect the sound. -- dump the MCU ROM for kouyakyu, gekisou, hvoltage, though they currently work - fine with the ROM from another chip. +- dump the MCU ROM for kouyakyu, gekisou, though they currently work fine with + the ROM from another chip. * Special Thanks to: @@ -369,36 +322,243 @@ *******************************************************************************/ #include "emu.h" -#include "equites.h" #include "ad_sound.h" +#include "alpha8201.h" + #include "cpu/m68000/m68000.h" +#include "machine/74259.h" #include "machine/nvram.h" #include "machine/watchdog.h" +#include "machine/timer.h" + +#include "emupal.h" +#include "screen.h" +#include "tilemap.h" + +namespace { + +class equites_state : public driver_device +{ +public: + equites_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), + m_screen(*this, "screen"), + m_alpha_8201(*this, "alpha_8201"), + m_mainlatch(*this, "mainlatch"), + m_bg_videoram(*this, "bg_videoram"), + m_fg_videoram(*this, "fg_videoram", 0x800, ENDIANNESS_BIG), + m_spriteram(*this, "spriteram") + { } + + void equites(machine_config &config); + void bngotime(machine_config &config); + void init_equites(); + +protected: + // devices + required_device m_maincpu; + required_device m_gfxdecode; + required_device m_palette; + required_device m_screen; + required_device m_alpha_8201; + required_device m_mainlatch; + + // memory pointers + required_shared_ptr m_bg_videoram; + memory_share_creator m_fg_videoram; + required_shared_ptr m_spriteram; + + virtual void machine_start() override; + virtual void video_start() override; + + uint16_t spriteram_kludge_r(); + uint8_t fg_videoram_r(offs_t offset); + void fg_videoram_w(offs_t offset, uint8_t data); + void bg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + void bgcolor_w(offs_t offset, uint8_t data); + void scrollreg_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + TILE_GET_INFO_MEMBER(fg_info); + TILE_GET_INFO_MEMBER(bg_info); + void palette(palette_device &palette) const; + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + TIMER_DEVICE_CALLBACK_MEMBER(scanline); + void draw_sprites_block(bitmap_ind16 &bitmap, const rectangle &cliprect, int start, int end); + void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); + void unpack_block(const char *region, int offset, int size); + void unpack_region(const char *region); + + void bngotime_map(address_map &map); + void equites_map(address_map &map); + void common_map(address_map &map); + + tilemap_t *m_fg_tilemap = nullptr; + tilemap_t *m_bg_tilemap = nullptr; + uint8_t m_bgcolor = 0U; +}; + + +class gekisou_state : public equites_state +{ +public: + gekisou_state(const machine_config &mconfig, device_type type, const char *tag) : + equites_state(mconfig, type, tag) + { } + + DECLARE_READ_LINE_MEMBER(unknown_bit_r); + void gekisou(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + void gekisou_map(address_map &map); + void unknown_bit_w(offs_t offset, uint16_t data); + + int m_unknown_bit = 0; +}; /******************************************************************************/ -// Interrupt Handlers +// Palette handling -TIMER_DEVICE_CALLBACK_MEMBER(equites_state::equites_scanline) +void equites_state::palette(palette_device &palette) const { - int scanline = param; + const uint8_t *color_prom = memregion("proms")->base(); - if(scanline == 232) // vblank-out irq - m_maincpu->set_input_line(1, HOLD_LINE); + for (int i = 0; i < 256; i++) + palette.set_indirect_color(i, rgb_t(pal4bit(color_prom[i]), pal4bit(color_prom[i + 0x100]), pal4bit(color_prom[i + 0x200]))); - if(scanline == 24) // vblank-in irq - m_maincpu->set_input_line(2, HOLD_LINE); + // point to the CLUT + color_prom += 0x380; + + for (int i = 0; i < 256; i++) + palette.set_pen_indirect(i, i); + + for (int i = 0; i < 0x80; i++) + palette.set_pen_indirect(i + 0x100, color_prom[i]); +} + + + +/******************************************************************************/ +// Callbacks for the tilemap code + +TILE_GET_INFO_MEMBER(equites_state::fg_info) +{ + int tile = m_fg_videoram[2 * tile_index]; + int color = m_fg_videoram[2 * tile_index + 1] & 0x1f; + + tileinfo.set(0, tile, color, 0); + if (color & 0x10) + tileinfo.flags |= TILE_FORCE_LAYER0; +} + +TILE_GET_INFO_MEMBER(equites_state::bg_info) +{ + int data = m_bg_videoram[tile_index]; + int tile = data & 0x1ff; + int color = (data & 0xf000) >> 12; + int fxy = (data & 0x0600) >> 9; + + tileinfo.set(1, tile, color, TILE_FLIPXY(fxy)); +} + + + +/******************************************************************************/ +// Video system start + +void equites_state::video_start() +{ + m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(equites_state::fg_info)), TILEMAP_SCAN_COLS, 8, 8, 32, 32); + m_fg_tilemap->set_transparent_pen(0); + + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(equites_state::bg_info)), TILEMAP_SCAN_ROWS, 16, 16, 16, 16); + m_bg_tilemap->set_transparent_pen(0); + m_bg_tilemap->set_scrolldx(0, -10); +} + + + +/******************************************************************************/ +// Video update + +void equites_state::draw_sprites_block(bitmap_ind16 &bitmap, const rectangle &cliprect, int start, int end) +{ + for (int offs = end - 2; offs >= start; offs -= 2) + { + int attr = m_spriteram[offs + 1]; + if (!(attr & 0x800)) // disable or x MSB? + { + int tile = attr & 0x1ff; + int fx = ~attr & 0x400; + int fy = ~attr & 0x200; + int color = (~attr & 0xf000) >> 12; + int sx = (m_spriteram[offs] & 0xff00) >> 8; + int sy = (m_spriteram[offs] & 0x00ff); + int transmask = m_palette->transpen_mask(*m_gfxdecode->gfx(2), color, 0); + + if (flip_screen()) + { + sx = 240 - sx; + sy = 240 - sy; + fx = !fx; + fy = !fy; + } + + // align + sx -= 4; + + // sprites are 16x14 centered in a 16x16 square, so skip the first line + sy += 1; + + m_gfxdecode->gfx(2)->transmask(bitmap,cliprect, + tile, + color, + fx, fy, + sx, sy, transmask); + } + } +} + +void equites_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + // note that we draw the sprites in three blocks; in each blocks, sprites at + // a lower address have priority. This gives good priorities in gekisou. + draw_sprites_block(bitmap, cliprect, 0x000/2, 0x060/2); + draw_sprites_block(bitmap, cliprect, 0x0e0/2, 0x100/2); + draw_sprites_block(bitmap, cliprect, 0x1a4/2, 0x200/2); +} + + +uint32_t equites_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(m_bgcolor, cliprect); + + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + draw_sprites(bitmap, cliprect); + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + + return 0; } -TIMER_DEVICE_CALLBACK_MEMBER(splndrbt_state::splndrbt_scanline) + + +/******************************************************************************/ +// Interrupt Handlers + +TIMER_DEVICE_CALLBACK_MEMBER(equites_state::scanline) { int scanline = param; - if(scanline == 224) // vblank-out irq + if(scanline == 232) // vblank-out irq m_maincpu->set_input_line(1, HOLD_LINE); - if(scanline == 32) // vblank-in irq + if(scanline == 24) // vblank-in irq m_maincpu->set_input_line(2, HOLD_LINE); } @@ -407,19 +567,39 @@ /******************************************************************************/ // CPU Handlers -READ_LINE_MEMBER(gekisou_state::gekisou_unknown_bit_r) +uint8_t equites_state::fg_videoram_r(offs_t offset) { - return m_gekisou_unknown_bit; + // 8-bit + return m_fg_videoram[offset]; } -void gekisou_state::gekisou_unknown_bit_w(offs_t offset, uint16_t data) +void equites_state::fg_videoram_w(offs_t offset, uint8_t data) { - // data bit is A17 (offset) - m_gekisou_unknown_bit = (offset == 0) ? 0 : 1; + m_fg_videoram[offset] = data; + m_fg_tilemap->mark_tile_dirty(offset >> 1); } +void equites_state::bg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + COMBINE_DATA(m_bg_videoram + offset); + m_bg_tilemap->mark_tile_dirty(offset); +} + +void equites_state::bgcolor_w(offs_t offset, uint8_t data) +{ + m_bgcolor = data; +} -uint16_t equites_state::equites_spriteram_kludge_r() +void equites_state::scrollreg_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + if (ACCESSING_BITS_0_7) + m_bg_tilemap->set_scrolly(0, data & 0xff); + + if (ACCESSING_BITS_8_15) + m_bg_tilemap->set_scrollx(0, data >> 8); +} + +uint16_t equites_state::spriteram_kludge_r() { if (m_spriteram[0] == 0x5555) return 0; @@ -428,68 +608,60 @@ } +READ_LINE_MEMBER(gekisou_state::unknown_bit_r) +{ + return m_unknown_bit; +} + +void gekisou_state::unknown_bit_w(offs_t offset, uint16_t data) +{ + // data bit is A17 (offset) + m_unknown_bit = (offset == 0) ? 0 : 1; +} + /******************************************************************************/ // CPU Memory Maps -void equites_state::equites_common_map(address_map &map) +void equites_state::common_map(address_map &map) { map.unmap_value_high(); map(0x000000, 0x00ffff).rom(); // ROM area is written several times (dev system?) - map(0x080000, 0x080fff).rw(FUNC(equites_state::equites_fg_videoram_r), FUNC(equites_state::equites_fg_videoram_w)).umask16(0x00ff); - map(0x0c0000, 0x0c01ff).ram().w(FUNC(equites_state::equites_bg_videoram_w)).share("bg_videoram"); + map(0x080000, 0x080fff).rw(FUNC(equites_state::fg_videoram_r), FUNC(equites_state::fg_videoram_w)).umask16(0x00ff); + map(0x0c0000, 0x0c01ff).ram().w(FUNC(equites_state::bg_videoram_w)).share("bg_videoram"); map(0x0c0200, 0x0c0fff).ram(); map(0x100000, 0x1001ff).ram().share("spriteram"); - map(0x100000, 0x100001).r(FUNC(equites_state::equites_spriteram_kludge_r)); + map(0x100000, 0x100001).r(FUNC(equites_state::spriteram_kludge_r)); map(0x140000, 0x1407ff).rw(m_alpha_8201, FUNC(alpha_8201_device::ext_ram_r), FUNC(alpha_8201_device::ext_ram_w)).umask16(0x00ff); map(0x180000, 0x180001).portr("IN1"); map(0x180000, 0x180000).select(0x03c000).lw8(NAME([this] (offs_t offset, u8 data) { m_mainlatch->write_a3(offset >> 14); })); - map(0x1c0000, 0x1c0001).portr("IN0").w(FUNC(equites_state::equites_scrollreg_w)); - map(0x380000, 0x380000).w(FUNC(equites_state::equites_bgcolor_w)); + map(0x1c0000, 0x1c0001).portr("IN0").w(FUNC(equites_state::scrollreg_w)); + map(0x380000, 0x380000).w(FUNC(equites_state::bgcolor_w)); map(0x780000, 0x780001).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); } void equites_state::equites_map(address_map &map) { - equites_common_map(map); + common_map(map); map(0x040000, 0x040fff).ram(); map(0x180001, 0x180001).w("sound_board", FUNC(ad_59mc07_device::sound_command_w)); } void gekisou_state::gekisou_map(address_map &map) { - equites_common_map(map); + common_map(map); map(0x040000, 0x040fff).ram().share("nvram"); // mainram is battery-backed map(0x180001, 0x180001).w("sound_board", FUNC(ad_59mc07_device::sound_command_w)); - map(0x580000, 0x580001).select(0x020000).w(FUNC(gekisou_state::gekisou_unknown_bit_w)); + map(0x580000, 0x580001).select(0x020000).w(FUNC(gekisou_state::unknown_bit_w)); } void equites_state::bngotime_map(address_map &map) { - equites_common_map(map); + common_map(map); map(0x040000, 0x040fff).ram(); map(0x180001, 0x180001).w("sound_board", FUNC(ad_60mc01_device::sound_command_w)); } -void splndrbt_state::splndrbt_map(address_map &map) -{ - map.unmap_value_high(); - map(0x000000, 0x00ffff).rom(); - map(0x040000, 0x040fff).ram(); - map(0x080000, 0x080001).portr("IN0"); - map(0x0c0000, 0x0c0001).portr("IN1"); - map(0x0c0000, 0x0c0000).select(0x020000).w(FUNC(splndrbt_state::equites_bgcolor_w)); - map(0x0c0001, 0x0c0001).select(0x03c000).lw8(NAME([this] (offs_t offset, u8 data) { m_mainlatch->write_a3(offset >> 14); })); - map(0x100000, 0x100001).w(FUNC(splndrbt_state::splndrbt_bg_scrollx_w)); - map(0x140001, 0x140001).w("sound_board", FUNC(ad_59mc07_device::sound_command_w)); - map(0x1c0000, 0x1c0001).w(FUNC(splndrbt_state::splndrbt_bg_scrolly_w)); - map(0x180000, 0x1807ff).rw(m_alpha_8201, FUNC(alpha_8201_device::ext_ram_r), FUNC(alpha_8201_device::ext_ram_w)).umask16(0x00ff); - map(0x200000, 0x200fff).mirror(0x001000).rw(FUNC(splndrbt_state::equites_fg_videoram_r), FUNC(splndrbt_state::equites_fg_videoram_w)).umask16(0x00ff); - map(0x400000, 0x4007ff).ram().w(FUNC(splndrbt_state::equites_bg_videoram_w)).share("bg_videoram"); - map(0x400800, 0x400fff).ram(); - map(0x600000, 0x6000ff).ram().share("spriteram"); // sprite RAM 0,1 - map(0x600100, 0x6001ff).ram().share("spriteram_2"); // sprite RAM 2 (8-bit) -} /******************************************************************************/ @@ -567,7 +739,7 @@ PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(gekisou_state, gekisou_unknown_bit_r) + PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(gekisou_state, unknown_bit_r) /* this is actually a variable resistor */ PORT_START(FRQ_ADJUSTER_TAG) @@ -641,86 +813,7 @@ INPUT_PORTS_END /******************************************************************************/ -// Splendor Blast Port Map - -static INPUT_PORTS_START( splndrbt ) - PORT_START("IN0") - EQUITES_PLAYER_INPUT_LSB( IPT_BUTTON1, IPT_BUTTON2, IPT_UNKNOWN, IPT_START1 ) - EQUITES_PLAYER_INPUT_MSB( IPT_BUTTON1, IPT_BUTTON2, IPT_UNKNOWN, IPT_START2 ) - - PORT_START("IN1") - PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_COIN1 ) - PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_COIN2 ) - PORT_DIPNAME( 0x0c00, 0x0000, DEF_STR ( Difficulty ) ) PORT_DIPLOCATION("SW:!6,!5") - PORT_DIPSETTING( 0x0400, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0c00, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW:!4") - PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW:!3") - PORT_DIPSETTING( 0x2000, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Cocktail ) ) - PORT_DIPNAME( 0xc000, 0x0000, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW:!2,!1") - PORT_DIPSETTING( 0xc000, "A 2C/1C B 3C/1C" ) - PORT_DIPSETTING( 0x0000, "A 1C/1C B 2C/1C" ) - PORT_DIPSETTING( 0x4000, "A 1C/2C B 1C/4C" ) - PORT_DIPSETTING( 0x8000, "A 1C/3C B 1C/6C" ) - - /* this is actually a variable resistor */ - PORT_START(FRQ_ADJUSTER_TAG) - PORT_ADJUSTER(28, "MSM5232 Clock") // approximate factory setting -INPUT_PORTS_END - -/******************************************************************************/ -// High Voltage Port Map - -static INPUT_PORTS_START( hvoltage ) - PORT_START("IN0") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Cabinet ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Cocktail ) ) - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_START1 ) - PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL - PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL - PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_COCKTAIL - PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START2 ) - - PORT_START("IN1") - PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_COIN1 ) - PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_COIN2 ) - PORT_DIPNAME( 0x0c00, 0x0000, DEF_STR ( Difficulty ) ) PORT_DIPLOCATION("SW:!6,!5") - PORT_DIPSETTING( 0x0400, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0c00, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x1000, 0x0000, DEF_STR ( Lives ) ) PORT_DIPLOCATION("SW:!4") // See notes - PORT_DIPSETTING( 0x0000, "3" ) - PORT_DIPSETTING( 0x1000, "5" ) - PORT_DIPNAME( 0x2000, 0x0000, DEF_STR ( Bonus_Life ) ) PORT_DIPLOCATION("SW:!3") - PORT_DIPSETTING( 0x0000, "50k, 100k then every 100k" ) - PORT_DIPSETTING( 0x2000, "50k, 200k then every 100k" ) - PORT_DIPNAME( 0xc000, 0x0000, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW:!2,!1") // See notes - PORT_DIPSETTING( 0xc000, "A 2C/1C B 3C/1C" ) - PORT_DIPSETTING( 0x0000, "A 1C/1C B 2C/1C" ) - PORT_DIPSETTING( 0x4000, "A 1C/2C B 1C/4C" ) - PORT_DIPSETTING( 0x8000, "A 1C/3C B 1C/6C" ) - - /* this is actually a variable resistor */ - PORT_START(FRQ_ADJUSTER_TAG) - PORT_ADJUSTER(27, "MSM5232 Clock") // approximate factory setting -INPUT_PORTS_END +// Bingo Time Port Map static INPUT_PORTS_START( bngotime ) // TODO: possibly still missing something? Couldn't find any use for the unknown inputs PORT_START("IN0") @@ -752,6 +845,8 @@ PORT_SERVICE_NO_TOGGLE( 0x8000, IP_ACTIVE_HIGH ) // settings // allows to set coinage, odds, 'rank', etc. INPUT_PORTS_END + + /******************************************************************************/ // Graphics Layouts @@ -777,17 +872,6 @@ 64*8 }; -static const gfx_layout tilelayout_2bpp = -{ - 16,16, - RGN_FRAC(1,1), - 2, - { 0, 4 }, - { STEP4(16*8+3,-1), STEP4(32*8+3,-1), STEP4(48*8+3,-1), STEP4(0*8+3,-1) }, - { STEP16(0*8,8) }, - 64*8 -}; - static const gfx_layout spritelayout_16x14 = { 16, 14, // 16x14, very unusual @@ -800,17 +884,6 @@ 64*8 }; -static const gfx_layout spritelayout_32x32 = -{ - 32,32, - RGN_FRAC(1,2), - 3, - { 4, RGN_FRAC(1,2), RGN_FRAC(1,2)+4 }, - { STEP4(0*8+3,-1), STEP4(1*8+3,-1), STEP4(2*8+3,-1), STEP4(3*8+3,-1), STEP4(4*8+3,-1), STEP4(5*8+3,-1), STEP4(6*8+3,-1), STEP4(7*8+3,-1) }, - { STEP16(0*8*8,8*8), STEP16(31*8*8,-8*8) }, - 256*8 -}; - static GFXDECODE_START( gfx_equites ) GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0x000, 0x80/4 ) // chars @@ -818,21 +891,12 @@ GFXDECODE_ENTRY( "gfx3", 0, spritelayout_16x14, 0x100, 0x80/8 ) // sprites GFXDECODE_END -static GFXDECODE_START( gfx_splndrbt ) - GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0x000, 0x100/4 ) // chars - GFXDECODE_ENTRY( "gfx2", 0, tilelayout_2bpp, 0x100, 0x080/4 ) // tiles - GFXDECODE_ENTRY( "gfx3", 0, spritelayout_32x32, 0x180, 0x100/8 ) // sprites -GFXDECODE_END /******************************************************************************/ void equites_state::machine_start() { - // zerofill - m_bgcolor = 0; - - // register for savestates save_item(NAME(m_bgcolor)); } @@ -840,33 +904,18 @@ { equites_state::machine_start(); - m_gekisou_unknown_bit = 0; - - save_item(NAME(m_gekisou_unknown_bit)); -} - -void splndrbt_state::machine_start() -{ - equites_state::machine_start(); - - save_item(NAME(m_fg_char_bank)); - save_item(NAME(m_splndrbt_bg_scrollx)); - save_item(NAME(m_splndrbt_bg_scrolly)); - - m_fg_char_bank = 0; - m_splndrbt_bg_scrollx = 0; - m_splndrbt_bg_scrolly = 0; + save_item(NAME(m_unknown_bit)); } void equites_state::equites(machine_config &config) { - /* basic machine hardware */ - M68000(config, m_maincpu, 12_MHz_XTAL/4); /* 68000P8 running at 3mhz! verified on pcb */ + // basic machine hardware + M68000(config, m_maincpu, 12_MHz_XTAL/4); // 68000P8 running at 3mhz! verified on pcb m_maincpu->set_addrmap(AS_PROGRAM, &equites_state::equites_map); - TIMER(config, "scantimer").configure_scanline(FUNC(equites_state::equites_scanline), "screen", 0, 1); + TIMER(config, "scantimer").configure_scanline(FUNC(equites_state::scanline), "screen", 0, 1); LS259(config, m_mainlatch); - m_mainlatch->q_out_cb<1>().set(FUNC(equites_state::flip_screen_w)); + m_mainlatch->q_out_cb<1>().set(FUNC(equites_state::flip_screen_set)); m_mainlatch->q_out_cb<2>().set(m_alpha_8201, FUNC(alpha_8201_device::mcu_start_w)); m_mainlatch->q_out_cb<3>().set(m_alpha_8201, FUNC(alpha_8201_device::bus_dir_w)).invert(); @@ -877,25 +926,22 @@ WATCHDOG_TIMER(config, "watchdog"); - /* video hardware */ + // video hardware SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); m_screen->set_size(32*8, 32*8); m_screen->set_visarea(0*8, 32*8-1, 3*8, 29*8-1); - m_screen->set_screen_update(FUNC(equites_state::screen_update_equites)); + m_screen->set_screen_update(FUNC(equites_state::screen_update)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_equites); - PALETTE(config, m_palette, FUNC(equites_state::equites_palette), 0x180, 0x100); - - MCFG_VIDEO_START_OVERRIDE(equites_state,equites) + PALETTE(config, m_palette, FUNC(equites_state::palette), 0x180, 0x100); } void gekisou_state::gekisou(machine_config &config) { equites(config); - /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &gekisou_state::gekisou_map); // gekisou has battery-backed RAM to store settings @@ -911,38 +957,6 @@ AD_60MC01(config.replace(), "sound_board"); } -void splndrbt_state::splndrbt(machine_config &config) -{ - /* basic machine hardware */ - M68000(config, m_maincpu, 24_MHz_XTAL/4); /* 68000P8 running at 6mhz, verified on pcb */ - m_maincpu->set_addrmap(AS_PROGRAM, &splndrbt_state::splndrbt_map); - TIMER(config, "scantimer").configure_scanline(FUNC(splndrbt_state::splndrbt_scanline), "screen", 0, 1); - - LS259(config, m_mainlatch); - m_mainlatch->q_out_cb<0>().set(FUNC(equites_state::flip_screen_w)); - m_mainlatch->q_out_cb<1>().set(m_alpha_8201, FUNC(alpha_8201_device::mcu_start_w)); - m_mainlatch->q_out_cb<2>().set(m_alpha_8201, FUNC(alpha_8201_device::bus_dir_w)).invert(); - m_mainlatch->q_out_cb<3>().set(FUNC(splndrbt_state::splndrbt_selchar_w)); - - AD_59MC07(config, "sound_board"); - - ALPHA_8201(config, m_alpha_8201, 4000000/8); // 8303 or 8304 (same device!) - config.set_perfect_quantum("alpha_8201:mcu"); - - /* video hardware */ - SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_refresh_hz(60); - m_screen->set_size(32*8, 32*8); - m_screen->set_visarea(0*8, 32*8-1, 4*8, 28*8-1); - m_screen->set_screen_update(FUNC(splndrbt_state::screen_update_splndrbt)); - m_screen->set_palette(m_palette); - - GFXDECODE(config, m_gfxdecode, m_palette, gfx_splndrbt); - PALETTE(config, m_palette, FUNC(splndrbt_state::splndrbt_palette), 0x280, 0x100); - - MCFG_VIDEO_START_OVERRIDE(splndrbt_state,splndrbt) -} - /******************************************************************************/ @@ -1256,7 +1270,7 @@ ROM_LOAD( "epr-6698.bin", 0x0a000, 0x2000, CRC(7adfd1ff) SHA1(b543dd6734a681a187dabf602bea390de663039c) ) ROM_REGION( 0x2000, "alpha_8201:mcu", 0 ) - ROM_LOAD( "alpha-8505_44801c57.bin", 0x0000, 0x2000, BAD_DUMP CRC(1f5a1405) SHA1(23f2e23db402f88037a5cbdab2935ec1b9a05298) ) // 8304 is not dumped yet, using 8505 instead + ROM_LOAD( "alpha-8505_44801c57.bin", 0x0000, 0x2000, BAD_DUMP CRC(1f5a1405) SHA1(23f2e23db402f88037a5cbdab2935ec1b9a05298) ) // 8304 is not dumped yet, using 8505 instead, works ok ROM_REGION( 0x1000, "gfx1", 0 ) // chars ROM_LOAD( "epr-6710.bin", 0x00000, 0x1000, CRC(accda190) SHA1(265d2fd92574d65e7890e48d5f305bf903a67bc8) ) @@ -1321,7 +1335,7 @@ ROM_LOAD( "v3.1e", 0x08000, 0x4000, CRC(0ab5e777) SHA1(9177c42418f022a65d73c3302873b894c5a137a4) ) ROM_REGION( 0x2000, "alpha_8201:mcu", 0 ) - ROM_LOAD( "alpha-8505_44801c57.bin", 0x0000, 0x2000, BAD_DUMP CRC(1f5a1405) SHA1(23f2e23db402f88037a5cbdab2935ec1b9a05298) ) // 8304 is not dumped yet, using 8505 instead + ROM_LOAD( "alpha-8505_44801c57.bin", 0x0000, 0x2000, BAD_DUMP CRC(1f5a1405) SHA1(23f2e23db402f88037a5cbdab2935ec1b9a05298) ) // 8304 is not dumped yet, using 8505 instead, works ok ROM_REGION( 0x1000, "gfx1", 0 ) // chars ROM_LOAD( "0.5c", 0x00000, 0x1000, CRC(7e8bf4d1) SHA1(8abb82be006e8d1df449a5f83d59637314405119) ) @@ -1360,288 +1374,6 @@ ROM_END /******************************************************************************/ -// Splendor Blast ROM Map - -/* -Splendor Blast (JPN Ver.) -(c)1985 Alpha denshi - -ALPHA 68K24 -CPU :HD68000-8 -OSC :24.000MHz -Other:ALPHA-8303 - -SOUND BOARD NO.59 MC 07 -CPU :TMP8085AP -Sound:AY-3-8910A,OKI M5232,M5L8155P -OSC :6.144MHz -*/ -ROM_START( splndrbt ) - ROM_REGION( 0x10000, "maincpu", 0 ) // 68000 ROMs(16k x 4) - ROM_LOAD16_BYTE( "1.16a", 0x00001, 0x4000, CRC(4bf4b047) SHA1(ef0efffa2f49905e17e4ed3a03cac419793b26d1) ) - ROM_LOAD16_BYTE( "2.16c", 0x00000, 0x4000, CRC(27acb656) SHA1(5f2f8d05f2f1c6c92c8364e9e6831ca525cbacd0) ) - ROM_LOAD16_BYTE( "3.15a", 0x08001, 0x4000, CRC(5b182189) SHA1(50ebb1fddcb6838442e8a20261f200f3386ce8a8) ) - ROM_LOAD16_BYTE( "4.15c", 0x08000, 0x4000, CRC(cde99613) SHA1(250b59f75eee84442da3cc7c599d1e16f0294df9) ) - - ROM_REGION( 0x10000, "sound_board:audiocpu", 0 ) // 8085A ROMs - ROM_LOAD( "1_v.1m", 0x00000, 0x2000, CRC(1b3a6e42) SHA1(41a4f0503c939ec0a739c8bc6bf3c8fc354912ee) ) - ROM_LOAD( "2_v.1l", 0x02000, 0x2000, CRC(2a618c72) SHA1(6ad459d94352c317150ae6344d4db9bb613938dd) ) - ROM_LOAD( "3_v.1k", 0x04000, 0x2000, CRC(bbee5346) SHA1(753cb784b04f081fa1f8590dc28056d9918f313b) ) - ROM_LOAD( "4_v.1h", 0x06000, 0x2000, CRC(10f45af4) SHA1(00fa599bad8bf3ba6deee54165f381403096e8f9) ) - - ROM_REGION( 0x2000, "alpha_8201:mcu", 0 ) - ROM_LOAD( "alpha-8303_44801b42.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) ) - - ROM_REGION( 0x2000, "gfx1", 0 ) // chars - ROM_LOAD( "10.8c", 0x00000, 0x2000, CRC(501887d4) SHA1(3cf4401d6fddff1500066219a71ac3b30ecbdd28) ) - - ROM_REGION( 0x8000, "gfx2", 0 ) // tiles - ROM_LOAD( "8.14m", 0x00000, 0x4000, CRC(c2c86621) SHA1(a715c70ace98502f2c0d4a81539cd79d19e9b6c4) ) - ROM_LOAD( "9.12m", 0x04000, 0x4000, CRC(4f7da6ff) SHA1(0516271df4a36d6ea38d1b8a5e471e1d2a79e8c1) ) - - ROM_REGION( 0x10000, "gfx3", 0 ) // sprites - ROM_LOAD( "6.18n", 0x00000, 0x2000, CRC(aa72237f) SHA1(0a26746a6c448a7fb853ef708e2bdeb76edd99cf) ) - // empty space to unpack previous ROM - ROM_CONTINUE( 0x04000, 0x2000 ) - // empty space to unpack previous ROM - ROM_LOAD( "5.18m", 0x08000, 0x4000, CRC(5f618b39) SHA1(2891067e71b8e1183ee5741487faa1561316cade) ) - ROM_LOAD( "7.17m", 0x0c000, 0x4000, CRC(abdd8483) SHA1(df8c8338c24fa487c49b01ce26db7eb28c8c6b85) ) - - ROM_REGION( 0x0500, "proms", 0 ) - ROM_LOAD( "r.3a", 0x0000, 0x100, CRC(ca1f08ce) SHA1(e46e2850d3ee3c8cbb23c10645f07d406c7ff50b) ) // R - ROM_LOAD( "g.1a", 0x0100, 0x100, CRC(66f89177) SHA1(caa51c1bf071764d5089487342794cbf023136c0) ) // G - ROM_LOAD( "b.2a", 0x0200, 0x100, CRC(d14318bc) SHA1(e219963b3e40eb246e608fbe10daa85dbb4c1226) ) // B - ROM_LOAD( "2.8k", 0x0300, 0x100, CRC(e1770ad3) SHA1(e408b175b8fff934e07b0ded1ee21d7f91a9523d) ) // CLUT bg - ROM_LOAD( "s5.15p", 0x0400, 0x100, CRC(7f6cf709) SHA1(5938faf937b682dcc83e53444cbf5e0bd7741363) ) // CLUT sprites - - ROM_REGION( 0x0020, "prom", 0 ) - ROM_LOAD( "3h.bpr", 0x00000, 0x020, CRC(33b98466) SHA1(017c73cf8c17dc5047c89316ae5b45f8d22092e8) ) - - ROM_REGION( 0x2100, "user1", 0 ) // bg scaling - ROM_LOAD( "0.8h", 0x0000, 0x2000, CRC(12681fb5) SHA1(7a0930819d4cd00475d1897128daa6ac865e07d0) ) // x - ROM_LOAD( "1.9j", 0x2000, 0x0100, CRC(f5b9b777) SHA1(a4ec731be77306db6baf319391c4fe78517fe43e) ) // y - - ROM_REGION( 0x0200, "user2", 0 ) // sprite scaling - ROM_LOAD( "4.7m", 0x0000, 0x0100, CRC(12cbcd2c) SHA1(a7946820bbf3f7e110a328b673123988af97ce7e) ) // x - ROM_LOAD( "s3.8l", 0x0100, 0x0100, CRC(1314b0b5) SHA1(31ef4b916110581390afc1ba90c5dca7c08c619f) ) // y -ROM_END - -ROM_START( splndrbta ) - ROM_REGION( 0x10000, "maincpu", 0 ) // 68000 ROMs(16k x 4) - Red band on program rom labels - ROM_LOAD16_BYTE( "1red.16b", 0x00001, 0x4000, CRC(3e342030) SHA1(82529e12378c0036097a654fe059f82d69fac8e6) ) - ROM_LOAD16_BYTE( "2red.16c", 0x00000, 0x4000, CRC(757e270b) SHA1(be615829fd21609ded21888e7a75456cbeecb603) ) - ROM_LOAD16_BYTE( "3red.15b", 0x08001, 0x4000, CRC(788deb02) SHA1(a4e79621bf4cda50dfb8dfab7f70dc4021065794) ) - ROM_LOAD16_BYTE( "4red.15c", 0x08000, 0x4000, CRC(d02a5606) SHA1(6bb2e5d95ea711452dd40218bd90488d70f82006) ) - - ROM_REGION( 0x10000, "sound_board:audiocpu", 0 ) // 8085A ROMs - ROM_LOAD( "8v.1l", 0x00000, 0x4000, CRC(71b2ec29) SHA1(89c630c5bf9c4752b01006183d1419fe6a458f5c) ) - ROM_LOAD( "9v.1h", 0x04000, 0x4000, CRC(e95abcb5) SHA1(1680875fc16d1a4e1054ccdabdf6fd06d434a163) ) - - ROM_REGION( 0x2000, "alpha_8201:mcu", 0 ) - ROM_LOAD( "alpha-8303_44801b42.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) ) - - ROM_REGION( 0x2000, "gfx1", 0 ) // chars - ROM_LOAD( "10.8c", 0x00000, 0x2000, CRC(501887d4) SHA1(3cf4401d6fddff1500066219a71ac3b30ecbdd28) ) - - ROM_REGION( 0x8000, "gfx2", 0 ) // tiles - ROM_LOAD( "8.14m", 0x00000, 0x4000, CRC(c2c86621) SHA1(a715c70ace98502f2c0d4a81539cd79d19e9b6c4) ) - ROM_LOAD( "9.12m", 0x04000, 0x4000, CRC(4f7da6ff) SHA1(0516271df4a36d6ea38d1b8a5e471e1d2a79e8c1) ) - - ROM_REGION( 0x10000, "gfx3", 0 ) // sprites - ROM_LOAD( "6.18n", 0x00000, 0x2000, CRC(aa72237f) SHA1(0a26746a6c448a7fb853ef708e2bdeb76edd99cf) ) - // empty space to unpack previous ROM - ROM_CONTINUE( 0x04000, 0x2000 ) - // empty space to unpack previous ROM - ROM_LOAD( "5.18m", 0x08000, 0x4000, CRC(5f618b39) SHA1(2891067e71b8e1183ee5741487faa1561316cade) ) - ROM_LOAD( "7.17m", 0x0c000, 0x4000, CRC(abdd8483) SHA1(df8c8338c24fa487c49b01ce26db7eb28c8c6b85) ) - - ROM_REGION( 0x0500, "proms", 0 ) - ROM_LOAD( "r.3a", 0x0000, 0x100, CRC(ca1f08ce) SHA1(e46e2850d3ee3c8cbb23c10645f07d406c7ff50b) ) // R - ROM_LOAD( "g.1a", 0x0100, 0x100, CRC(66f89177) SHA1(caa51c1bf071764d5089487342794cbf023136c0) ) // G - ROM_LOAD( "b.2a", 0x0200, 0x100, CRC(d14318bc) SHA1(e219963b3e40eb246e608fbe10daa85dbb4c1226) ) // B - ROM_LOAD( "2.8k", 0x0300, 0x100, CRC(e1770ad3) SHA1(e408b175b8fff934e07b0ded1ee21d7f91a9523d) ) // CLUT bg - ROM_LOAD( "s5.15p", 0x0400, 0x100, CRC(7f6cf709) SHA1(5938faf937b682dcc83e53444cbf5e0bd7741363) ) // CLUT sprites - - ROM_REGION( 0x0020, "prom", 0 ) - ROM_LOAD( "3h.bpr", 0x00000, 0x020, CRC(33b98466) SHA1(017c73cf8c17dc5047c89316ae5b45f8d22092e8) ) - - ROM_REGION( 0x2100, "user1", 0 ) // bg scaling - ROM_LOAD( "0.8h", 0x0000, 0x2000, CRC(12681fb5) SHA1(7a0930819d4cd00475d1897128daa6ac865e07d0) ) // x - ROM_LOAD( "1.9j", 0x2000, 0x0100, CRC(f5b9b777) SHA1(a4ec731be77306db6baf319391c4fe78517fe43e) ) // y - - ROM_REGION( 0x0200, "user2", 0 ) // sprite scaling - ROM_LOAD( "4.7m", 0x0000, 0x0100, CRC(12cbcd2c) SHA1(a7946820bbf3f7e110a328b673123988af97ce7e) ) // x - ROM_LOAD( "s3.8l", 0x0100, 0x0100, CRC(1314b0b5) SHA1(31ef4b916110581390afc1ba90c5dca7c08c619f) ) // y -ROM_END - -ROM_START( splndrbtb ) - ROM_REGION( 0x10000, "maincpu", 0 ) // 68000 ROMs(16k x 4) - Blue band on program rom labels - ROM_LOAD16_BYTE( "1blue.16a", 0x00001, 0x4000, CRC(f8507502) SHA1(35a915db9ef90e45aac8ce9e349c319e99a36810) ) - ROM_LOAD16_BYTE( "2blue.16c", 0x00000, 0x4000, CRC(8969bd04) SHA1(6cd8a0ab58ce0e4a43cf5ca4fcd10b30962a13b3) ) - ROM_LOAD16_BYTE( "3blue.15a", 0x08001, 0x4000, CRC(bce26d4f) SHA1(81a295e665af9e46ff28618f2f77f31f41f14a4f) ) - ROM_LOAD16_BYTE( "4blue.15c", 0x08000, 0x4000, CRC(5715ec1b) SHA1(fddf45a4e1b2fd319b0a47376c11ce2a41c40eb2) ) - - ROM_REGION( 0x10000, "sound_board:audiocpu", 0 ) // 8085A ROMs - ROM_LOAD( "1_v.1m", 0x00000, 0x2000, CRC(1b3a6e42) SHA1(41a4f0503c939ec0a739c8bc6bf3c8fc354912ee) ) - ROM_LOAD( "2_v.1l", 0x02000, 0x2000, CRC(2a618c72) SHA1(6ad459d94352c317150ae6344d4db9bb613938dd) ) - ROM_LOAD( "3_v.1k", 0x04000, 0x2000, CRC(bbee5346) SHA1(753cb784b04f081fa1f8590dc28056d9918f313b) ) - ROM_LOAD( "4_v.1h", 0x06000, 0x2000, CRC(10f45af4) SHA1(00fa599bad8bf3ba6deee54165f381403096e8f9) ) - - ROM_REGION( 0x2000, "alpha_8201:mcu", 0 ) - ROM_LOAD( "alpha-8303_44801b42.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) ) - - ROM_REGION( 0x2000, "gfx1", 0 ) // chars - ROM_LOAD( "10.8c", 0x00000, 0x2000, CRC(501887d4) SHA1(3cf4401d6fddff1500066219a71ac3b30ecbdd28) ) - - ROM_REGION( 0x8000, "gfx2", 0 ) // tiles - ROM_LOAD( "8.14m", 0x00000, 0x4000, CRC(c2c86621) SHA1(a715c70ace98502f2c0d4a81539cd79d19e9b6c4) ) - ROM_LOAD( "9.12m", 0x04000, 0x4000, CRC(4f7da6ff) SHA1(0516271df4a36d6ea38d1b8a5e471e1d2a79e8c1) ) - - ROM_REGION( 0x10000, "gfx3", 0 ) // sprites - ROM_LOAD( "6.18n", 0x00000, 0x2000, CRC(aa72237f) SHA1(0a26746a6c448a7fb853ef708e2bdeb76edd99cf) ) - // empty space to unpack previous ROM - ROM_CONTINUE( 0x04000, 0x2000 ) - // empty space to unpack previous ROM - ROM_LOAD( "5.18m", 0x08000, 0x4000, CRC(5f618b39) SHA1(2891067e71b8e1183ee5741487faa1561316cade) ) - ROM_LOAD( "7.17m", 0x0c000, 0x4000, CRC(abdd8483) SHA1(df8c8338c24fa487c49b01ce26db7eb28c8c6b85) ) - - ROM_REGION( 0x0500, "proms", 0 ) - ROM_LOAD( "r.3a", 0x0000, 0x100, CRC(ca1f08ce) SHA1(e46e2850d3ee3c8cbb23c10645f07d406c7ff50b) ) // R - ROM_LOAD( "g.1a", 0x0100, 0x100, CRC(66f89177) SHA1(caa51c1bf071764d5089487342794cbf023136c0) ) // G - ROM_LOAD( "b.2a", 0x0200, 0x100, CRC(d14318bc) SHA1(e219963b3e40eb246e608fbe10daa85dbb4c1226) ) // B - ROM_LOAD( "2.8k", 0x0300, 0x100, CRC(e1770ad3) SHA1(e408b175b8fff934e07b0ded1ee21d7f91a9523d) ) // CLUT bg - ROM_LOAD( "s5.15p", 0x0400, 0x100, CRC(7f6cf709) SHA1(5938faf937b682dcc83e53444cbf5e0bd7741363) ) // CLUT sprites - - ROM_REGION( 0x0020, "prom", 0 ) - ROM_LOAD( "3h.bpr", 0x00000, 0x020, CRC(33b98466) SHA1(017c73cf8c17dc5047c89316ae5b45f8d22092e8) ) - - ROM_REGION( 0x2100, "user1", 0 ) // bg scaling - ROM_LOAD( "0.8h", 0x0000, 0x2000, CRC(12681fb5) SHA1(7a0930819d4cd00475d1897128daa6ac865e07d0) ) // x - ROM_LOAD( "1.9j", 0x2000, 0x0100, CRC(f5b9b777) SHA1(a4ec731be77306db6baf319391c4fe78517fe43e) ) // y - - ROM_REGION( 0x0200, "user2", 0 ) // sprite scaling - ROM_LOAD( "4.7m", 0x0000, 0x0100, CRC(12cbcd2c) SHA1(a7946820bbf3f7e110a328b673123988af97ce7e) ) // x - ROM_LOAD( "s3.8l", 0x0100, 0x0100, CRC(1314b0b5) SHA1(31ef4b916110581390afc1ba90c5dca7c08c619f) ) // y -ROM_END - -ROM_START( splndrbt2 ) - ROM_REGION( 0x10000, "maincpu", 0 ) // 68000 ROMs(16k x 4) - ROM_LOAD16_BYTE( "1.a16", 0x00001, 0x4000, CRC(0fd3121d) SHA1(f9767af477442a09a70c04e4d427914557fddcd9) ) - ROM_LOAD16_BYTE( "2.c16", 0x00000, 0x4000, CRC(227d8a1b) SHA1(8ce976e6d3dce1236a784e48f4829f42c801249c) ) - ROM_LOAD16_BYTE( "3.a15", 0x08001, 0x4000, CRC(936f7cc9) SHA1(ef1601097659700f4a4b53fb57cd6d73efa03e0d) ) - ROM_LOAD16_BYTE( "4.c15", 0x08000, 0x4000, CRC(3ff7c7b5) SHA1(4997efd4427f09a5427f752d0147b648fbdce252) ) - - ROM_REGION( 0x10000, "sound_board:audiocpu", 0 ) // 8085A ROMs - ROM_LOAD( "s1.m1", 0x00000, 0x02000, CRC(045eac1b) SHA1(49ecc73b999719e470b2ef0afee6a84df620e0d9) ) - ROM_LOAD( "s2.l1", 0x02000, 0x02000, CRC(65a3d094) SHA1(f6415eb323478a2d38acd4507404d9530fac77c4) ) - ROM_LOAD( "s3.k1", 0x04000, 0x02000, CRC(980d38be) SHA1(c07f9851cfb6352781568f333d931b4ca08fd888) ) - ROM_LOAD( "s4.h1", 0x06000, 0x02000, CRC(10f45af4) SHA1(00fa599bad8bf3ba6deee54165f381403096e8f9) ) - ROM_LOAD( "s5.f1", 0x08000, 0x02000, CRC(0d76cac0) SHA1(15d0d5860035f06020589115b40d347c06d7ecbe) ) - ROM_LOAD( "s6.e1", 0x0a000, 0x02000, CRC(bc65d469) SHA1(45145974d3ae7040fd00c776418702166c06b0dc) ) - - ROM_REGION( 0x2000, "alpha_8201:mcu", 0 ) - ROM_LOAD( "alpha-8303_44801b42.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) ) - - ROM_REGION( 0x2000, "gfx1", 0 ) // chars - ROM_LOAD( "5.b8", 0x00000, 0x02000, CRC(77a5dc55) SHA1(49f19e8816629b661c135b0db6f6e087eb2690ff) ) - - ROM_REGION( 0x8000, "gfx2", 0 ) // tiles - ROM_LOAD( "8.m13", 0x00000, 0x4000, CRC(c2c86621) SHA1(a715c70ace98502f2c0d4a81539cd79d19e9b6c4) ) - ROM_LOAD( "9.m12", 0x04000, 0x4000, CRC(4f7da6ff) SHA1(0516271df4a36d6ea38d1b8a5e471e1d2a79e8c1) ) - - ROM_REGION( 0x10000, "gfx3", 0 ) // sprites - ROM_LOAD( "8.n18", 0x00000, 0x4000, CRC(15b8277b) SHA1(36d80e9c1200f587cafdf43fafafe844d56296aa) ) - // empty space to unpack previous ROM - // ROM_CONTINUE( 0x04000, 0x2000 ) - // empty space to unpack previous ROM - ROM_LOAD( "5.m18", 0x08000, 0x4000, CRC(5f618b39) SHA1(2891067e71b8e1183ee5741487faa1561316cade) ) - ROM_LOAD( "7.m17", 0x0c000, 0x4000, CRC(abdd8483) SHA1(df8c8338c24fa487c49b01ce26db7eb28c8c6b85) ) - - ROM_REGION( 0x0500, "proms", 0 ) - ROM_LOAD( "r.3a", 0x0000, 0x100, CRC(ca1f08ce) SHA1(e46e2850d3ee3c8cbb23c10645f07d406c7ff50b) ) // R - ROM_LOAD( "g.1a", 0x0100, 0x100, CRC(66f89177) SHA1(caa51c1bf071764d5089487342794cbf023136c0) ) // G - ROM_LOAD( "b.2a", 0x0200, 0x100, CRC(d14318bc) SHA1(e219963b3e40eb246e608fbe10daa85dbb4c1226) ) // B - ROM_LOAD( "2.8k", 0x0300, 0x100, CRC(e1770ad3) SHA1(e408b175b8fff934e07b0ded1ee21d7f91a9523d) ) // CLUT bg - ROM_LOAD( "s5.15p", 0x0400, 0x100, CRC(7f6cf709) SHA1(5938faf937b682dcc83e53444cbf5e0bd7741363) ) // CLUT sprites - - ROM_REGION( 0x0020, "prom", 0 ) - ROM_LOAD( "3h.bpr", 0x00000, 0x020, CRC(33b98466) SHA1(017c73cf8c17dc5047c89316ae5b45f8d22092e8) ) - - ROM_REGION( 0x2100, "user1", 0 ) // bg scaling - ROM_LOAD( "0.h7", 0x0000, 0x2000, CRC(12681fb5) SHA1(7a0930819d4cd00475d1897128daa6ac865e07d0) ) // x - ROM_LOAD( "1.9j", 0x2000, 0x0100, CRC(f5b9b777) SHA1(a4ec731be77306db6baf319391c4fe78517fe43e) ) // y - - ROM_REGION( 0x0200, "user2", 0 ) // sprite scaling - ROM_LOAD( "4.7m", 0x0000, 0x0100, CRC(12cbcd2c) SHA1(a7946820bbf3f7e110a328b673123988af97ce7e) ) // x - ROM_LOAD( "s3.8l", 0x0100, 0x0100, CRC(1314b0b5) SHA1(31ef4b916110581390afc1ba90c5dca7c08c619f) ) // y -ROM_END - -/******************************************************************************/ -// High Voltage ROM Map - -/* -High Voltage (JPN Ver.) -(c)1985 Alpha denshi - -ALPHA 68K24 -CPU :HD68000-8 -OSC :24.000MHz -Other:ALPHA-8304 - -SOUND BOARD NO.59 MC 07 -CPU :TMP8085AP -Sound:AY-3-8910A,OKI M5232,D8155HC -OSC :6.144MHz -*/ -ROM_START( hvoltage ) - ROM_REGION( 0x10000, "maincpu", 0 ) // 68000 ROMs(16k x 4) - ROM_LOAD16_BYTE( "1.16a", 0x00001, 0x4000, CRC(82606e3b) SHA1(25c3172928d8f1eda2c4c757d505fdfd91f21ea1) ) - ROM_LOAD16_BYTE( "2.16c", 0x00000, 0x4000, CRC(1d74fef2) SHA1(3df3dc98a78a137da8c5cddf6a8519b477824fb9) ) - ROM_LOAD16_BYTE( "3.15a", 0x08001, 0x4000, CRC(677abe14) SHA1(78b343122f9ad187c823bf49e8f001288c762586) ) - ROM_LOAD16_BYTE( "4.15c", 0x08000, 0x4000, CRC(8aab5a20) SHA1(fb90817173ad69c0e00d03814b4e10b18955c07e) ) - - ROM_REGION( 0x10000, "sound_board:audiocpu", 0 ) // 8085A ROMs - ROM_LOAD( "5_v.1l", 0x00000, 0x4000, CRC(ed9bb6ea) SHA1(73b0251b86835368ec2a4e98a5f61e28e58fd234) ) - ROM_LOAD( "6_v.1h", 0x04000, 0x4000, CRC(e9542211) SHA1(482f2c90e842fe5cc31cc6a39025adf65ba47ce9) ) - ROM_LOAD( "7_v.1e", 0x08000, 0x4000, CRC(44d38554) SHA1(6765971376eafa218fda1accb1e173a7c1850cc8) ) - - ROM_REGION( 0x2000, "alpha_8201:mcu", 0 ) - ROM_LOAD( "alpha-8505_44801c57.bin", 0x0000, 0x2000, BAD_DUMP CRC(1f5a1405) SHA1(23f2e23db402f88037a5cbdab2935ec1b9a05298) ) // 8304 is not dumped yet, using 8505 instead - - ROM_REGION( 0x2000, "gfx1", 0 ) // chars - ROM_LOAD( "5.8c", 0x00000, 0x2000, CRC(656d53cd) SHA1(9971ed7e7da0e8bf46e97e8f75a2c2201b33fc2f) ) - - ROM_REGION( 0x8000, "gfx2", 0 ) // tiles - ROM_LOAD( "9.14m", 0x00000, 0x4000, CRC(506a0989) SHA1(0e7f2c9bab5e83f06a8148f69d8d0cbfe7d55c5e) ) - ROM_LOAD( "10.12m", 0x04000, 0x4000, CRC(98f87d4f) SHA1(94a7a14b0905597993595b347102436d97fc1dc9) ) - - ROM_REGION( 0x10000, "gfx3", 0 ) // sprites - ROM_LOAD( "8.18n", 0x00000, 0x2000, CRC(725acae5) SHA1(ba54598a087f8bb5fa7182b0e85d0e038003e622) ) - // empty space to unpack previous ROM - ROM_CONTINUE( 0x04000, 0x2000 ) - // empty space to unpack previous ROM - ROM_LOAD( "6.18m", 0x08000, 0x4000, CRC(9baf2c68) SHA1(208e5ac8eb157d4bf949ab4330827da032a04235) ) - ROM_LOAD( "7.17m", 0x0c000, 0x4000, CRC(12d25fb1) SHA1(99f5d68bd6d6ee5f2acb7685aceacfb0894c4961) ) - - ROM_REGION( 0x0500, "proms", 0 ) - ROM_LOAD( "r.3a", 0x0000, 0x100, CRC(98eccbf6) SHA1(a55755e8388d3edf3020b1129a638fe1e99362b6) ) // R - ROM_LOAD( "g.1a", 0x0100, 0x100, CRC(fab2ed23) SHA1(6f63b6a3196dda76eb9a885b17d886a14365f922) ) // G - ROM_LOAD( "b.2a", 0x0200, 0x100, CRC(7274961b) SHA1(d13070060e216d633675a528cf0dc3de94c95ffb) ) // B - ROM_LOAD( "2.8k", 0x0300, 0x100, CRC(685f4e44) SHA1(110cb8f5a37f22ce9d391bd0cd46dcbb8fcf66b8) ) // CLUT bg - ROM_LOAD( "s5.15p", 0x0400, 0x100, CRC(b09bcc73) SHA1(f8139feaa9563324b69aeac5c17beccfdbfa0864) ) // CLUT sprites - - ROM_REGION( 0x0020, "prom", 0 ) - ROM_LOAD( "3h.bpr", 0x00000, 0x020, CRC(33b98466) SHA1(017c73cf8c17dc5047c89316ae5b45f8d22092e8) ) - - ROM_REGION( 0x2100, "user1", 0 ) // bg scaling - ROM_LOAD( "0.8h", 0x0000, 0x2000, CRC(12681fb5) SHA1(7a0930819d4cd00475d1897128daa6ac865e07d0) ) // x - ROM_LOAD( "1.9j", 0x2000, 0x0100, CRC(f5b9b777) SHA1(a4ec731be77306db6baf319391c4fe78517fe43e) ) // y - - ROM_REGION( 0x0200, "user2", 0 ) // sprite scaling - ROM_LOAD( "4.7m", 0x0000, 0x0100, CRC(12cbcd2c) SHA1(a7946820bbf3f7e110a328b673123988af97ce7e) ) // x - ROM_LOAD( "3.8l", 0x0100, 0x0100, CRC(1314b0b5) SHA1(31ef4b916110581390afc1ba90c5dca7c08c619f) ) // y -ROM_END - /* Bingo Time (c)1986 CLS @@ -1697,6 +1429,8 @@ ROM_LOAD( "82s129_bs.n5", 0x0600, 0x100, CRC(1ecbeb37) SHA1(c4a139bc81f31b668c80c2cf150ce44b9b181e8a) ) ROM_END + + /******************************************************************************/ // Initializations @@ -1724,18 +1458,13 @@ unpack_region("gfx3"); } -void splndrbt_state::init_splndrbt() -{ - unpack_region("gfx3"); -} +} // anonymous namespace /******************************************************************************/ - // Game Entries -// Equites Hardware GAME( 1984, equites, 0, equites, equites, equites_state, init_equites, ROT90, "Alpha Denshi Co.", "Equites", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1984, equitess, equites, equites, equites, equites_state, init_equites, ROT90, "Alpha Denshi Co. (Sega license)", "Equites (Sega)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1984, bullfgtr, 0, equites, bullfgtr, equites_state, init_equites, ROT90, "Alpha Denshi Co.", "Bull Fighter", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) @@ -1743,10 +1472,3 @@ GAME( 1985, kouyakyu, 0, equites, kouyakyu, equites_state, init_equites, ROT0, "Alpha Denshi Co.", "The Koukou Yakyuu", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1985, gekisou, 0, gekisou, gekisou, gekisou_state, init_equites, ROT90, "Eastern Corp.", "Gekisou (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) GAME( 1986, bngotime, 0, bngotime, bngotime, equites_state, init_equites, ROT90, "CLS", "Bingo Time", MACHINE_SUPPORTS_SAVE ) // emulation of the sound board is imperfect (flag is in the audio device) - -// Splendor Blast Hardware -GAME( 1985, splndrbt, 0, splndrbt, splndrbt, splndrbt_state, init_splndrbt, ROT0, "Alpha Denshi Co.", "Splendor Blast (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1985, splndrbta, splndrbt, splndrbt, splndrbt, splndrbt_state, init_splndrbt, ROT0, "Alpha Denshi Co.", "Splendor Blast (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1985, splndrbtb, splndrbt, splndrbt, splndrbt, splndrbt_state, init_splndrbt, ROT0, "Alpha Denshi Co.", "Splendor Blast (set 3)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1985, splndrbt2, 0, splndrbt, splndrbt, splndrbt_state, init_splndrbt, ROT0, "Alpha Denshi Co.", "Splendor Blast II", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1985, hvoltage, 0, splndrbt, hvoltage, splndrbt_state, init_splndrbt, ROT0, "Alpha Denshi Co.", "High Voltage", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/alpha/equites.h mame-0.251+dfsg.1/src/mame/alpha/equites.h --- mame-0.250+dfsg.1/src/mame/alpha/equites.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/alpha/equites.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,129 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Acho A. Tang, Nicola Salmoria -/************************************************************************* - - Equites, Splendor Blast driver - -*************************************************************************/ -#ifndef MAME_INCLUDES_EQUITES_H -#define MAME_INCLUDES_EQUITES_H - -#pragma once - -#include "machine/74259.h" -#include "alpha8201.h" -#include "machine/timer.h" -#include "emupal.h" -#include "screen.h" -#include "tilemap.h" - - -class equites_state : public driver_device -{ -public: - equites_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_bg_videoram(*this, "bg_videoram"), - m_spriteram(*this, "spriteram"), - m_spriteram_2(*this, "spriteram_2"), - m_maincpu(*this, "maincpu"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_screen(*this, "screen"), - m_alpha_8201(*this, "alpha_8201"), - m_mainlatch(*this, "mainlatch") - { } - - /* memory pointers */ - required_shared_ptr m_bg_videoram; - std::unique_ptr m_fg_videoram; // 8bits - required_shared_ptr m_spriteram; - optional_shared_ptr m_spriteram_2; - - /* video-related */ - tilemap_t *m_fg_tilemap = nullptr; - tilemap_t *m_bg_tilemap = nullptr; - uint8_t m_bgcolor = 0U; - - /* devices */ - required_device m_maincpu; - required_device m_gfxdecode; - required_device m_palette; - required_device m_screen; - required_device m_alpha_8201; - required_device m_mainlatch; - - uint16_t equites_spriteram_kludge_r(); - uint8_t equites_fg_videoram_r(offs_t offset); - void equites_fg_videoram_w(offs_t offset, uint8_t data); - void equites_bg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - void equites_bgcolor_w(offs_t offset, uint8_t data); - void equites_scrollreg_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - DECLARE_WRITE_LINE_MEMBER(flip_screen_w); - void init_equites(); - TILE_GET_INFO_MEMBER(equites_fg_info); - TILE_GET_INFO_MEMBER(equites_bg_info); - DECLARE_VIDEO_START(equites); - void equites_palette(palette_device &palette) const; - uint32_t screen_update_equites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - TIMER_DEVICE_CALLBACK_MEMBER(equites_scanline); - void equites_draw_sprites_block(bitmap_ind16 &bitmap, const rectangle &cliprect, int start, int end); - void equites_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); - void unpack_block(const char *region, int offset, int size); - void unpack_region(const char *region); - void equites(machine_config &config); - void bngotime(machine_config &config); - -protected: - virtual void machine_start() override; - void bngotime_map(address_map &map); - void equites_map(address_map &map); - void equites_common_map(address_map &map); -}; - -class gekisou_state : public equites_state -{ -public: - using equites_state::equites_state; - DECLARE_READ_LINE_MEMBER(gekisou_unknown_bit_r); - void gekisou(machine_config &config); - -protected: - virtual void machine_start() override; - void gekisou_map(address_map &map); - void gekisou_unknown_bit_w(offs_t offset, uint16_t data); - -private: - int m_gekisou_unknown_bit = 0; -}; - - -class splndrbt_state : public equites_state -{ -public: - using equites_state::equites_state; - void init_splndrbt(); - void splndrbt(machine_config &config); - -protected: - virtual void machine_start() override; - void splndrbt_map(address_map &map); - DECLARE_WRITE_LINE_MEMBER(splndrbt_selchar_w); - void splndrbt_bg_scrollx_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - void splndrbt_bg_scrolly_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - TILE_GET_INFO_MEMBER(splndrbt_fg_info); - TILE_GET_INFO_MEMBER(splndrbt_bg_info); - DECLARE_VIDEO_START(splndrbt); - void splndrbt_palette(palette_device &palette) const; - uint32_t screen_update_splndrbt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - TIMER_DEVICE_CALLBACK_MEMBER(splndrbt_scanline); - void splndrbt_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); - void splndrbt_copy_bg(bitmap_ind16 &dst_bitmap, const rectangle &cliprect); - -private: - int m_fg_char_bank = 0; - uint16_t m_splndrbt_bg_scrollx = 0U; - uint16_t m_splndrbt_bg_scrolly = 0U; -}; - -#endif // MAME_INCLUDES_EQUITES_H diff -Nru mame-0.250+dfsg.1/src/mame/alpha/equites_v.cpp mame-0.251+dfsg.1/src/mame/alpha/equites_v.cpp --- mame-0.250+dfsg.1/src/mame/alpha/equites_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/alpha/equites_v.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,445 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Acho A. Tang, Nicola Salmoria -/************************************************************************* - - Equites, Splendor Blast driver - - functions to emulate the video hardware - -*************************************************************************/ - -#include "emu.h" -#include "equites.h" - - -/************************************* - * - * Palette handling - * - *************************************/ - -void equites_state::equites_palette(palette_device &palette) const -{ - const uint8_t *color_prom = memregion("proms")->base(); - - for (int i = 0; i < 256; i++) - palette.set_indirect_color(i, rgb_t(pal4bit(color_prom[i]), pal4bit(color_prom[i + 0x100]), pal4bit(color_prom[i + 0x200]))); - - // point to the CLUT - color_prom += 0x380; - - for (int i = 0; i < 256; i++) - palette.set_pen_indirect(i, i); - - for (int i = 0; i < 0x80; i++) - palette.set_pen_indirect(i + 0x100, color_prom[i]); -} - -void splndrbt_state::splndrbt_palette(palette_device &palette) const -{ - const uint8_t *color_prom = memregion("proms")->base(); - - for (int i = 0; i < 0x100; i++) - palette.set_indirect_color(i, rgb_t(pal4bit(color_prom[i]), pal4bit(color_prom[i + 0x100]), pal4bit(color_prom[i + 0x200]))); - - for (int i = 0; i < 0x100; i++) - palette.set_pen_indirect(i, i); - - // point to the bg CLUT - color_prom += 0x300; - - for (int i = 0; i < 0x80; i++) - palette.set_pen_indirect(i + 0x100, color_prom[i] + 0x10); - - // point to the sprite CLUT - color_prom += 0x100; - - for (int i = 0; i < 0x100; i++) - palette.set_pen_indirect(i + 0x180, color_prom[i]); -} - - - -/************************************* - * - * Callbacks for the TileMap code - * - *************************************/ - -TILE_GET_INFO_MEMBER(equites_state::equites_fg_info) -{ - int tile = m_fg_videoram[2 * tile_index]; - int color = m_fg_videoram[2 * tile_index + 1] & 0x1f; - - tileinfo.set(0, tile, color, 0); - if (color & 0x10) - tileinfo.flags |= TILE_FORCE_LAYER0; -} - -TILE_GET_INFO_MEMBER(splndrbt_state::splndrbt_fg_info) -{ - int tile = m_fg_videoram[2 * tile_index] + (m_fg_char_bank << 8); - int color = m_fg_videoram[2 * tile_index + 1] & 0x3f; - - tileinfo.set(0, tile, color, 0); - if (color & 0x10) - tileinfo.flags |= TILE_FORCE_LAYER0; -} - -TILE_GET_INFO_MEMBER(equites_state::equites_bg_info) -{ - int data = m_bg_videoram[tile_index]; - int tile = data & 0x1ff; - int color = (data & 0xf000) >> 12; - int fxy = (data & 0x0600) >> 9; - - tileinfo.set(1, tile, color, TILE_FLIPXY(fxy)); -} - -TILE_GET_INFO_MEMBER(splndrbt_state::splndrbt_bg_info) -{ - int data = m_bg_videoram[tile_index]; - int tile = data & 0x1ff; - int color = (data & 0xf800) >> 11; - int fxy = (data & 0x0600) >> 9; - - tileinfo.set(1, tile, color, TILE_FLIPXY(fxy)); - tileinfo.group = color; -} - - - -/************************************* - * - * Video system start - * - *************************************/ - -VIDEO_START_MEMBER(equites_state,equites) -{ - m_fg_videoram = std::make_unique(0x800); - save_pointer(NAME(m_fg_videoram), 0x800); - - m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(equites_state::equites_fg_info)), TILEMAP_SCAN_COLS, 8, 8, 32, 32); - m_fg_tilemap->set_transparent_pen(0); - - m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(equites_state::equites_bg_info)), TILEMAP_SCAN_ROWS, 16, 16, 16, 16); - m_bg_tilemap->set_transparent_pen(0); - m_bg_tilemap->set_scrolldx(0, -10); -} - -VIDEO_START_MEMBER(splndrbt_state,splndrbt) -{ - assert(m_screen->format() == BITMAP_FORMAT_IND16); - - m_fg_videoram = std::make_unique(0x800); - save_pointer(NAME(m_fg_videoram), 0x800); - - m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(splndrbt_state::splndrbt_fg_info)), TILEMAP_SCAN_COLS, 8, 8, 32, 32); - m_fg_tilemap->set_transparent_pen(0); - m_fg_tilemap->set_scrolldx(8, -8); - - m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(splndrbt_state::splndrbt_bg_info)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); - m_bg_tilemap->configure_groups(*m_gfxdecode->gfx(1), 0x10); -} - - - -/************************************* - * - * Memory handlers - * - *************************************/ - -uint8_t equites_state::equites_fg_videoram_r(offs_t offset) -{ - // 8-bit - return m_fg_videoram[offset]; -} - -void equites_state::equites_fg_videoram_w(offs_t offset, uint8_t data) -{ - m_fg_videoram[offset] = data; - m_fg_tilemap->mark_tile_dirty(offset >> 1); -} - -void equites_state::equites_bg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - COMBINE_DATA(m_bg_videoram + offset); - m_bg_tilemap->mark_tile_dirty(offset); -} - -void equites_state::equites_bgcolor_w(offs_t offset, uint8_t data) -{ - // bg color register - if (offset == 0) - m_bgcolor = data; -} - -void equites_state::equites_scrollreg_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - if (ACCESSING_BITS_0_7) - m_bg_tilemap->set_scrolly(0, data & 0xff); - - if (ACCESSING_BITS_8_15) - m_bg_tilemap->set_scrollx(0, data >> 8); -} - -WRITE_LINE_MEMBER(splndrbt_state::splndrbt_selchar_w) -{ - // select active char map - m_fg_char_bank = (state == 0) ? 0 : 1; - m_fg_tilemap->mark_all_dirty(); -} - -WRITE_LINE_MEMBER(equites_state::flip_screen_w) -{ - flip_screen_set(state); -} - -void splndrbt_state::splndrbt_bg_scrollx_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - COMBINE_DATA(&m_splndrbt_bg_scrollx); -} - -void splndrbt_state::splndrbt_bg_scrolly_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - COMBINE_DATA(&m_splndrbt_bg_scrolly); -} - - - -/************************************* - * - * Video update - * - *************************************/ - -void equites_state::equites_draw_sprites_block(bitmap_ind16 &bitmap, const rectangle &cliprect, int start, int end) -{ - for (int offs = end - 2; offs >= start; offs -= 2) - { - int attr = m_spriteram[offs + 1]; - if (!(attr & 0x800)) // disable or x MSB? - { - int tile = attr & 0x1ff; - int fx = ~attr & 0x400; - int fy = ~attr & 0x200; - int color = (~attr & 0xf000) >> 12; - int sx = (m_spriteram[offs] & 0xff00) >> 8; - int sy = (m_spriteram[offs] & 0x00ff); - int transmask = m_palette->transpen_mask(*m_gfxdecode->gfx(2), color, 0); - - if (flip_screen()) - { - sx = 240 - sx; - sy = 240 - sy; - fx = !fx; - fy = !fy; - } - - // align - sx -= 4; - - // sprites are 16x14 centered in a 16x16 square, so skip the first line - sy += 1; - - m_gfxdecode->gfx(2)->transmask(bitmap,cliprect, - tile, - color, - fx, fy, - sx, sy, transmask); - } - } -} - -void equites_state::equites_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - // note that we draw the sprites in three blocks; in each blocks, sprites at - // a lower address have priority. This gives good priorities in gekisou. - equites_draw_sprites_block(bitmap, cliprect, 0x000/2, 0x060/2); - equites_draw_sprites_block(bitmap, cliprect, 0x0e0/2, 0x100/2); - equites_draw_sprites_block(bitmap, cliprect, 0x1a4/2, 0x200/2); -} - - -/* -This is (probabbly) the sprite x scaling PROM. -The layout is strange. Clearly every line os for one xscale setting. However, -it seems that bytes 0-3 are handled separately from bytes 4-F. -Also, note that sprites are 30x30, not 32x32. -00020200 00000000 00000000 00000000 -00020200 01000000 00000000 00000002 -00020200 01000000 01000002 00000002 -00020200 01000100 01000002 00020002 -00020200 01000100 01010202 00020002 -02020201 01000100 01010202 00020002 -02020201 01010100 01010202 00020202 -02020201 01010101 01010202 02020202 -02020201 03010101 01010202 02020203 -02020201 03010103 01010202 03020203 -02020201 03010103 01030302 03020203 -02020201 03010303 01030302 03030203 -03020203 03010303 01030302 03030203 -03020203 03030303 01030302 03030303 -03020203 03030303 03030303 03030303 -03020303 03030303 03030303 03030303 -*/ - -void splndrbt_state::splndrbt_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - const uint8_t * const xrom = memregion("user2")->base(); - const uint8_t * const yrom = xrom + 0x100; - gfx_element* gfx = m_gfxdecode->gfx(2); - - // note that sprites are actually 30x30, contained in 32x32 squares. The outer edge is not used. - - for (int offs = 0x3f; offs < 0x6f; offs += 2) // 24 sprites - { - int data = m_spriteram[offs]; - int fx = (data & 0x2000) >> 13; - int fy = (data & 0x1000) >> 12; - int tile = data & 0x007f; - int scaley = (data & 0x0f00) >> 8; - int data2 = m_spriteram[offs + 1]; - int color = (data2 & 0x1f00) >> 8; - int sx = data2 & 0x00ff; - int sy = m_spriteram_2[offs + 0] & 0x00ff; - int scalex = m_spriteram_2[offs + 1] & 0x000f; - int transmask = m_palette->transpen_mask(*gfx, color, 0); - -// const uint8_t * const xromline = xrom + (scalex << 4); - const uint8_t * const yromline = yrom + (scaley << 4) + (15 - scaley); - const uint8_t* const srcgfx = gfx->get_data(tile); - const pen_t *paldata = &m_palette->pen(gfx->colorbase() + gfx->granularity() * color); - int x,yy; - - sy += 16; - - if (flip_screen()) - { - // sx NOT inverted - fx = fx ^ 1; - fy = fy ^ 1; - } - else - { - sy = 256 - sy; - } - - for (yy = 0; yy <= scaley; ++yy) - { - int const line = yromline[yy]; - int yhalf; - - for (yhalf = 0; yhalf < 2; ++yhalf) // top or bottom half - { - int const y = yhalf ? sy + 1 + yy : sy - yy; - - if (y >= cliprect.top() && y <= cliprect.bottom()) - { - for (x = 0; x <= (scalex << 1); ++x) - { - int bx = (sx + x) & 0xff; - - if (bx >= cliprect.left() && bx <= cliprect.right()) - { - int xx = scalex ? (x * 29 + scalex) / (scalex << 1) + 1 : 16; // FIXME This is wrong. Should use the PROM. - int const offset = (fx ? (31 - xx) : xx) + ((fy ^ yhalf) ? (16 + line) : (15 - line)) * gfx->rowbytes(); - - int pen = srcgfx[offset]; - - if ((transmask & (1 << pen)) == 0) - bitmap.pix(y, bx) = paldata[pen]; - } - } - } - } - } - } -} - - -void splndrbt_state::splndrbt_copy_bg(bitmap_ind16 &dst_bitmap, const rectangle &cliprect) -{ - bitmap_ind16 &src_bitmap = m_bg_tilemap->pixmap(); - bitmap_ind8 &flags_bitmap = m_bg_tilemap->flagsmap(); - const uint8_t * const xrom = memregion("user1")->base(); - const uint8_t * const yrom = xrom + 0x2000; - int scroll_x = m_splndrbt_bg_scrollx; - int scroll_y = m_splndrbt_bg_scrolly; - int const dinvert = flip_screen() ? 0xff : 0x00; - int src_y = 0; - int dst_y; - - if (flip_screen()) - { - scroll_x = -scroll_x - 8; - scroll_y = -scroll_y; - } - - for (dst_y = 32; dst_y < 256-32; ++dst_y) - { - if (dst_y >= cliprect.top() && dst_y <= cliprect.bottom()) - { - const uint8_t * const romline = &xrom[(dst_y ^ dinvert) << 5]; - const uint16_t * const src_line = &src_bitmap.pix((src_y + scroll_y) & 0x1ff); - const uint8_t * const flags_line = &flags_bitmap.pix((src_y + scroll_y) & 0x1ff); - uint16_t * const dst_line = &dst_bitmap.pix(dst_y); - int dst_x = 0; - int src_x; - - for (src_x = 0; src_x < 256 && dst_x < 128; ++src_x) - { - if ((romline[31 - (src_x >> 3)] >> (src_x & 7)) & 1) - { - int sx; - - sx = (256+128 + scroll_x + src_x) & 0x1ff; - if (flags_line[sx] & TILEMAP_PIXEL_LAYER0) - dst_line[128 + dst_x] = src_line[sx]; - - sx = (255+128 + scroll_x - src_x) & 0x1ff; - if (flags_line[sx] & TILEMAP_PIXEL_LAYER0) - dst_line[127 - dst_x] = src_line[sx]; - - ++dst_x; - } - } - } - - src_y += 1 + yrom[dst_y ^ dinvert]; - } -} - - - -uint32_t equites_state::screen_update_equites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - bitmap.fill(m_bgcolor, cliprect); - - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - - equites_draw_sprites(bitmap, cliprect); - - m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - - return 0; -} - -uint32_t splndrbt_state::screen_update_splndrbt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - bitmap.fill(m_bgcolor, cliprect); - - splndrbt_copy_bg(bitmap, cliprect); - - if (m_fg_char_bank) - m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - - splndrbt_draw_sprites(bitmap, cliprect); - - if (!m_fg_char_bank) - m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - - return 0; -} diff -Nru mame-0.250+dfsg.1/src/mame/alpha/meijinsn.cpp mame-0.251+dfsg.1/src/mame/alpha/meijinsn.cpp --- mame-0.250+dfsg.1/src/mame/alpha/meijinsn.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/alpha/meijinsn.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -3,15 +3,16 @@ /* Meijinsen (snk/alpha) --------------------- - driver by Tomasz Slanina -It's something between typical alpha 68k hardware -(alpha mcu, sound hw (same as in jongbou)) and -old alpha shougi hardware (framebuffer). +It's something between typical alpha 68k hardware (alpha mcu, sound hw (same as in jongbou)) +and old alpha shougi hardware (framebuffer). + +There's probably no upright cabinet, only cocktail table (controls in 2p mode are inverted). -There's probably no upright cabinet, only -cocktail table (controls in 2p mode are inverted). +TODO: +- not sure if protection simulation is right, there is a problem on the selection screen, + it's usually not possible to choose tsume shogi (3 difficulty levels) Buttons: 1st = 'decision' @@ -60,13 +61,17 @@ SOFT PSG & VOICE BY M.C & S.H */ + #include "emu.h" + #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" #include "machine/gen_latch.h" #include "machine/timer.h" #include "sound/ay8910.h" +#include "sound/dac.h" #include "video/resnet.h" + #include "emupal.h" #include "screen.h" #include "speaker.h" @@ -109,11 +114,11 @@ required_ioport m_dsw; // misc - uint8_t m_deposits1; - uint8_t m_deposits2; - uint8_t m_credits; - uint8_t m_coinvalue; - uint8_t m_mcu_latch; + uint8_t m_deposits1 = 0; + uint8_t m_deposits2 = 0; + uint8_t m_credits = 0; + uint8_t m_coinvalue = 0; + uint8_t m_mcu_latch = 0; }; @@ -135,7 +140,6 @@ return 0; case 0x29: // Query microcontroller for coin insert - m_credits = 0; if ((m_coins->read() & 0x3) == 3) @@ -211,6 +215,7 @@ map(0x00, 0x01).w("aysnd", FUNC(ay8910_device::address_data_w)); map(0x01, 0x01).r("aysnd", FUNC(ay8910_device::data_r)); map(0x02, 0x02).w("soundlatch", FUNC(generic_latch_8_device::clear_w)); + map(0x04, 0x04).w("dac", FUNC(dac_8bit_r2r_device::write)); map(0x06, 0x06).nopw(); } @@ -269,10 +274,10 @@ static const int resistances_rg[3] = { 1000, 470, 220 }; double weights_r[3], weights_g[3], weights_b[2]; - compute_resistor_weights(0, 255, -1.0, - 3, resistances_rg, weights_r, 0, 1000+1000, - 3, resistances_rg, weights_g, 0, 1000+1000, - 2, resistances_b, weights_b, 0, 1000+1000); + compute_resistor_weights(0, 255, -1.0, + 3, resistances_rg, weights_r, 0, 1000+1000, + 3, resistances_rg, weights_g, 0, 1000+1000, + 2, resistances_b, weights_b, 0, 1000+1000); for (int i = 0; i < palette.entries(); i++) { @@ -352,7 +357,7 @@ void meijinsn_state::meijinsn(machine_config &config) { // basic machine hardware - M68000(config, m_maincpu, 9000000); + M68000(config, m_maincpu, 8000000); m_maincpu->set_addrmap(AS_PROGRAM, &meijinsn_state::main_map); TIMER(config, "scantimer").configure_scanline(FUNC(meijinsn_state::interrupt), "screen", 0, 1); @@ -361,6 +366,7 @@ audiocpu.set_addrmap(AS_IO, &meijinsn_state::sound_io_map); audiocpu.set_periodic_int(FUNC(meijinsn_state::irq0_line_hold), attotime::from_hz(160*60)); + GENERIC_LATCH_8(config, "soundlatch"); // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); @@ -376,36 +382,37 @@ // sound hardware SPEAKER(config, "mono").front_center(); - GENERIC_LATCH_8(config, "soundlatch"); - ay8910_device &aysnd(AY8910(config, "aysnd", 2000000)); aysnd.port_a_read_callback().set("soundlatch", FUNC(generic_latch_8_device::read)); - aysnd.add_route(ALL_OUTPUTS, "mono", 0.75); + aysnd.port_b_write_callback().set_nop(); // ? + aysnd.add_route(ALL_OUTPUTS, "mono", 0.25); + + DAC_8BIT_R2R(config, "dac").add_route(ALL_OUTPUTS, "mono", 1.0); } ROM_START( meijinsn ) ROM_REGION( 0x40000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "p1", 0x00000, 0x04000, CRC(8c9697a3) SHA1(19258e20a6aaadd6ba3469079fef85bc6dba548c) ) - ROM_CONTINUE ( 0x20000, 0x4000 ) - ROM_LOAD16_BYTE( "p2", 0x00001, 0x04000, CRC(f7da3535) SHA1(fdbacd075d45abda782966b16b3ea1ad68d60f91) ) - ROM_CONTINUE ( 0x20001, 0x4000 ) - ROM_LOAD16_BYTE( "p3", 0x08000, 0x04000, CRC(0af0b266) SHA1(d68ed31bc932bc5e9c554b2c0df06a751dc8eb96) ) - ROM_CONTINUE ( 0x28000, 0x4000 ) - ROM_LOAD16_BYTE( "p4", 0x08001, 0x04000, CRC(aab159c5) SHA1(0c9cad8f9893f4080b498433068e9324c7f2e13c) ) - ROM_CONTINUE ( 0x28001, 0x4000 ) - ROM_LOAD16_BYTE( "p5", 0x10000, 0x04000, CRC(0ed10a47) SHA1(9e89ec69f1f4e1ffa712f2e0c590d067c8c63026) ) - ROM_CONTINUE ( 0x30000, 0x4000 ) - ROM_LOAD16_BYTE( "p6", 0x10001, 0x04000, CRC(60b58755) SHA1(1786fc1b4c6d1793fb8e9311356fa4119611cfae) ) - ROM_CONTINUE ( 0x30001, 0x4000 ) - ROM_LOAD16_BYTE( "p7", 0x18000, 0x04000, CRC(604c76f1) SHA1(37fdf904f5e4d69dc8cb711cf3dece8f3075254a) ) - ROM_CONTINUE ( 0x38000, 0x4000 ) - ROM_LOAD16_BYTE( "p8", 0x18001, 0x04000, CRC(e3eaef19) SHA1(b290922f252a790443109e5023c3c35b133275cc) ) - ROM_CONTINUE ( 0x38001, 0x4000 ) + ROM_LOAD16_BYTE( "p1", 0x00000, 0x4000, CRC(8c9697a3) SHA1(19258e20a6aaadd6ba3469079fef85bc6dba548c) ) + ROM_CONTINUE( 0x20000, 0x4000 ) + ROM_LOAD16_BYTE( "p2", 0x00001, 0x4000, CRC(f7da3535) SHA1(fdbacd075d45abda782966b16b3ea1ad68d60f91) ) + ROM_CONTINUE( 0x20001, 0x4000 ) + ROM_LOAD16_BYTE( "p3", 0x08000, 0x4000, CRC(0af0b266) SHA1(d68ed31bc932bc5e9c554b2c0df06a751dc8eb96) ) + ROM_CONTINUE( 0x28000, 0x4000 ) + ROM_LOAD16_BYTE( "p4", 0x08001, 0x4000, CRC(aab159c5) SHA1(0c9cad8f9893f4080b498433068e9324c7f2e13c) ) + ROM_CONTINUE( 0x28001, 0x4000 ) + ROM_LOAD16_BYTE( "p5", 0x10000, 0x4000, CRC(0ed10a47) SHA1(9e89ec69f1f4e1ffa712f2e0c590d067c8c63026) ) + ROM_CONTINUE( 0x30000, 0x4000 ) + ROM_LOAD16_BYTE( "p6", 0x10001, 0x4000, CRC(60b58755) SHA1(1786fc1b4c6d1793fb8e9311356fa4119611cfae) ) + ROM_CONTINUE( 0x30001, 0x4000 ) + ROM_LOAD16_BYTE( "p7", 0x18000, 0x4000, CRC(604c76f1) SHA1(37fdf904f5e4d69dc8cb711cf3dece8f3075254a) ) + ROM_CONTINUE( 0x38000, 0x4000 ) + ROM_LOAD16_BYTE( "p8", 0x18001, 0x4000, CRC(e3eaef19) SHA1(b290922f252a790443109e5023c3c35b133275cc) ) + ROM_CONTINUE( 0x38001, 0x4000 ) ROM_REGION( 0x10000, "audiocpu", 0 ) // Sound CPU - ROM_LOAD( "p9", 0x00000, 0x04000, CRC(aedfefdf) SHA1(f9d35737a0e942fe7d483f87c52efa92a1bbb3e5) ) - ROM_LOAD( "p10",0x04000, 0x04000, CRC(93b4d764) SHA1(4fedd3fd1f3ef6c5f60ca86219f877df68d3027d) ) + ROM_LOAD( "p9", 0x00000, 0x04000, CRC(aedfefdf) SHA1(f9d35737a0e942fe7d483f87c52efa92a1bbb3e5) ) + ROM_LOAD( "p10", 0x04000, 0x04000, CRC(93b4d764) SHA1(4fedd3fd1f3ef6c5f60ca86219f877df68d3027d) ) ROM_REGION( 0x20, "proms", 0 ) // Colour PROM ROM_LOAD( "clr", 0x00, 0x20, CRC(7b95b5a7) SHA1(c15be28bcd6f5ffdde659f2d352ae409f04b2557) ) @@ -413,26 +420,26 @@ ROM_START( meijinsna ) // ROMs with location were in the archive, the others not, but they pass the ROM check so probably good and the dumper only included ROMs that differed from the set in MAME ROM_REGION( 0x40000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "p1.e12", 0x00000, 0x04000, CRC(fddea817) SHA1(497c5a197c53d0fea2eb2ef62a93f56cd930bd5a) ) - ROM_CONTINUE ( 0x20000, 0x4000 ) - ROM_LOAD16_BYTE( "p2.e10", 0x00001, 0x04000, CRC(f05659cc) SHA1(0f8d0da387329886903163333dbf0f36beb4198c) ) - ROM_CONTINUE ( 0x20001, 0x4000 ) - ROM_LOAD16_BYTE( "p3.d12", 0x08000, 0x04000, CRC(906e9d49) SHA1(f52757317d441d0cf35cd3726ea8d4fe0d079c9b) ) - ROM_CONTINUE ( 0x28000, 0x4000 ) - ROM_LOAD16_BYTE( "p4.d10", 0x08001, 0x04000, CRC(efa31978) SHA1(dadf226b993ecbac3112b7b0ce5047f0d686866e) ) - ROM_CONTINUE ( 0x28001, 0x4000 ) - ROM_LOAD16_BYTE( "p5", 0x10000, 0x04000, BAD_DUMP CRC(0ed10a47) SHA1(9e89ec69f1f4e1ffa712f2e0c590d067c8c63026) ) - ROM_CONTINUE ( 0x30000, 0x4000 ) - ROM_LOAD16_BYTE( "p6", 0x10001, 0x04000, BAD_DUMP CRC(60b58755) SHA1(1786fc1b4c6d1793fb8e9311356fa4119611cfae) ) - ROM_CONTINUE ( 0x30001, 0x4000 ) - ROM_LOAD16_BYTE( "p7", 0x18000, 0x04000, BAD_DUMP CRC(604c76f1) SHA1(37fdf904f5e4d69dc8cb711cf3dece8f3075254a) ) - ROM_CONTINUE ( 0x38000, 0x4000 ) - ROM_LOAD16_BYTE( "p8", 0x18001, 0x04000, BAD_DUMP CRC(e3eaef19) SHA1(b290922f252a790443109e5023c3c35b133275cc) ) - ROM_CONTINUE ( 0x38001, 0x4000 ) + ROM_LOAD16_BYTE( "p1.e12", 0x00000, 0x4000, CRC(fddea817) SHA1(497c5a197c53d0fea2eb2ef62a93f56cd930bd5a) ) + ROM_CONTINUE( 0x20000, 0x4000 ) + ROM_LOAD16_BYTE( "p2.e10", 0x00001, 0x4000, CRC(f05659cc) SHA1(0f8d0da387329886903163333dbf0f36beb4198c) ) + ROM_CONTINUE( 0x20001, 0x4000 ) + ROM_LOAD16_BYTE( "p3.d12", 0x08000, 0x4000, CRC(906e9d49) SHA1(f52757317d441d0cf35cd3726ea8d4fe0d079c9b) ) + ROM_CONTINUE( 0x28000, 0x4000 ) + ROM_LOAD16_BYTE( "p4.d10", 0x08001, 0x4000, CRC(efa31978) SHA1(dadf226b993ecbac3112b7b0ce5047f0d686866e) ) + ROM_CONTINUE( 0x28001, 0x4000 ) + ROM_LOAD16_BYTE( "p5", 0x10000, 0x4000, BAD_DUMP CRC(0ed10a47) SHA1(9e89ec69f1f4e1ffa712f2e0c590d067c8c63026) ) + ROM_CONTINUE( 0x30000, 0x4000 ) + ROM_LOAD16_BYTE( "p6", 0x10001, 0x4000, BAD_DUMP CRC(60b58755) SHA1(1786fc1b4c6d1793fb8e9311356fa4119611cfae) ) + ROM_CONTINUE( 0x30001, 0x4000 ) + ROM_LOAD16_BYTE( "p7", 0x18000, 0x4000, BAD_DUMP CRC(604c76f1) SHA1(37fdf904f5e4d69dc8cb711cf3dece8f3075254a) ) + ROM_CONTINUE( 0x38000, 0x4000 ) + ROM_LOAD16_BYTE( "p8", 0x18001, 0x4000, BAD_DUMP CRC(e3eaef19) SHA1(b290922f252a790443109e5023c3c35b133275cc) ) + ROM_CONTINUE( 0x38001, 0x4000 ) ROM_REGION( 0x10000, "audiocpu", 0 ) // Sound CPU - ROM_LOAD( "p9", 0x00000, 0x04000, BAD_DUMP CRC(aedfefdf) SHA1(f9d35737a0e942fe7d483f87c52efa92a1bbb3e5) ) - ROM_LOAD( "p10.m5",0x04000, 0x04000, BAD_DUMP CRC(c1c1950f) SHA1(0bd428e5f77300866e582938aff519ca4a8fd2ac) ) // dumper's note: p10 would not verify. For emulation it doesn't seem to cause problems but.. + ROM_LOAD( "p9", 0x00000, 0x04000, BAD_DUMP CRC(aedfefdf) SHA1(f9d35737a0e942fe7d483f87c52efa92a1bbb3e5) ) + ROM_LOAD( "p10", 0x04000, 0x04000, BAD_DUMP CRC(93b4d764) SHA1(4fedd3fd1f3ef6c5f60ca86219f877df68d3027d) ) ROM_REGION( 0x20, "proms", 0 ) // Colour PROM ROM_LOAD( "clr", 0x00, 0x20, BAD_DUMP CRC(7b95b5a7) SHA1(c15be28bcd6f5ffdde659f2d352ae409f04b2557) ) @@ -442,4 +449,4 @@ GAME( 1986, meijinsn, 0, meijinsn, meijinsn, meijinsn_state, empty_init, ROT0, "SNK", "Meijinsen (set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, meijinsna, meijinsn, meijinsn, meijinsn, meijinsn_state, empty_init, ROT0, "SNK", "Meijinsen (set 2)", MACHINE_SUPPORTS_SAVE ) // this lets the player select an additional game mode (tsume shogi) in single player mode +GAME( 1986, meijinsna, meijinsn, meijinsn, meijinsn, meijinsn_state, empty_init, ROT0, "SNK", "Meijinsen (set 2)", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/alpha/shougi.cpp mame-0.251+dfsg.1/src/mame/alpha/shougi.cpp --- mame-0.250+dfsg.1/src/mame/alpha/shougi.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/alpha/shougi.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -78,16 +78,20 @@ **************************************************************************/ #include "emu.h" -#include "machine/74259.h" + #include "alpha8201.h" + +#include "machine/74259.h" #include "machine/watchdog.h" #include "cpu/z80/z80.h" #include "sound/ay8910.h" #include "video/resnet.h" + #include "emupal.h" #include "screen.h" #include "speaker.h" +namespace { class shougi_state : public driver_device { @@ -465,6 +469,8 @@ ROM_LOAD( "pr.2l", 0x0000, 0x0020, CRC(cd3559ff) SHA1(a1291b06a8a337943660b2ef62c94c49d58a6fb5) ) ROM_END +} // anonymous namespace + /* YEAR NAME PARENT MACHINE INPUT STATE INIT MONITOR COMPANY FULLNAME FLAGS */ GAME( 1982, shougi, 0, shougi, shougi, shougi_state, empty_init, ROT0, "Alpha Denshi Co. (Tehkan license)", "Shougi", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/alpha/splendor.cpp mame-0.251+dfsg.1/src/mame/alpha/splendor.cpp --- mame-0.250+dfsg.1/src/mame/alpha/splendor.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/alpha/splendor.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,986 @@ +// license:BSD-3-Clause +// copyright-holders:Acho A. Tang, Nicola Salmoria +/******************************************************************************* + +Splendor Blast (c) 1985 Alpha Denshi Co. +Splendor Blast II (c) 1985 Alpha Denshi Co. +High Voltage (c) 1985 Alpha Denshi Co. + +Driver by Acho A. Tang, Nicola Salmoria + + +Stephh's notes (based on the games M68000 code and some tests) : + +splndrbt: +- When starting a 2 players game, when player 1 game is over, the game enters in + an infinite loop on displaying the "GAME OVER" message. +- You can test player 2 by putting 0xff instead of 0x00 at 0x040009 ($9,A6). +- FYI, what should change the contents of $9,A6 is the routine at 0x000932, + but I haven't found where this routine could be called 8( 8303 issue ? + +hvoltage: +- There is sort of "debug mode" that you can access if 0x000038.w returns 0x0000 + instead of 0xffff. To enable it, use the MAME debugger or cheats. +- When you are in "debug mode", the Inputs and Dip Switches have special features. + Here is IMO the full list : + + * pressing IPT_JOYSTICK_DOWN of player 2 freezes the game + * pressing IPT_JOYSTICK_UP of player 2 unfreezes the game + * pressing IPT_COIN1 gives invulnerability (the collision routine isn't called) + * pressing IPT_COIN2 speeds up the game and you don't need to kill the bosses + * when bit 2 is On, you are given invulnerability (same effect as IPT_COIN1) + * when bit 3 is On, you don't need to kill the bosses (only the last one) + * when bit 4 is On ("Lives" Dip Switch set to "5"), some coordonates are displayed + * when bit 7 is On ("Coinage" Dip Switch set to "A 1/3C B 1/6C" or "A 2/1C B 3/1C"), + a "band" is displayed at the left of the screen + + +Notes: +----- +- splndrbt hardware only appears to be capable of displaying 24 sprites. + This time, they are consecutive in RAM. + +- splndrbt2 is different in many areas, most notibly in the title screen and the + operation of the missiles which is a power-up pickup rather than a cumulative + collecting of missiles that can run out. + +- see equites.cpp driver for more notes (this used to be in the same driver file) + + +TODO: +---- +- splndrbt, hvoltage: the interpretation of the scaling PROMs might be wrong. + The sprite x scaling is not used at all because I couldn't figure it out. + Sprite y scaling is slightly wrong and leaves gaps in tall objects. + Note that sprites are 30x30 instead of 32x32. + +- The "road" background in splndrbt is slightly wrong. Apparently, the black lines + visible in some parts of the background should never disappear in the distance. + Currently, they may or may not disappear depending on the X position. + +- dump the MCU ROM for hvoltage, though it currently works fine with the ROM from + another chip. + +*******************************************************************************/ + +#include "emu.h" + +#include "ad_sound.h" +#include "alpha8201.h" + +#include "cpu/m68000/m68000.h" +#include "machine/74259.h" +#include "machine/nvram.h" +#include "machine/watchdog.h" +#include "machine/timer.h" + +#include "emupal.h" +#include "screen.h" +#include "tilemap.h" + +namespace { + +class splendor_state : public driver_device +{ +public: + splendor_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), + m_screen(*this, "screen"), + m_alpha_8201(*this, "alpha_8201"), + m_mainlatch(*this, "mainlatch"), + m_bg_videoram(*this, "bg_videoram"), + m_fg_videoram(*this, "fg_videoram", 0x800, ENDIANNESS_BIG), + m_spriteram(*this, "spriteram%u", 1U), + m_scale_rom(*this, "scale%u", 1U) + { } + + void init_splndrbt(); + void splndrbt(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void video_start() override; + +private: + // devices + required_device m_maincpu; + required_device m_gfxdecode; + required_device m_palette; + required_device m_screen; + required_device m_alpha_8201; + required_device m_mainlatch; + + // memory pointers + required_shared_ptr m_bg_videoram; + memory_share_creator m_fg_videoram; + required_shared_ptr_array m_spriteram; + required_region_ptr_array m_scale_rom; + + uint8_t fg_videoram_r(offs_t offset); + void fg_videoram_w(offs_t offset, uint8_t data); + void bg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + void bgcolor_w(offs_t offset, uint8_t data); + DECLARE_WRITE_LINE_MEMBER(selchar_w); + void bg_scrollx_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + void bg_scrolly_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + TILE_GET_INFO_MEMBER(fg_info); + TILE_GET_INFO_MEMBER(bg_info); + void palette(palette_device &palette) const; + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + TIMER_DEVICE_CALLBACK_MEMBER(scanline); + void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); + void copy_bg(bitmap_ind16 &dst_bitmap, const rectangle &cliprect); + + void splndrbt_map(address_map &map); + + void unpack_block(const char *region, int offset, int size); + void unpack_region(const char *region); + + tilemap_t *m_fg_tilemap = nullptr; + tilemap_t *m_bg_tilemap = nullptr; + uint8_t m_bgcolor = 0U; + int m_fg_char_bank = 0; + uint16_t m_bg_scrollx = 0U; + uint16_t m_bg_scrolly = 0U; +}; + + +/******************************************************************************/ +// Palette handling + +void splendor_state::palette(palette_device &palette) const +{ + const uint8_t *color_prom = memregion("proms")->base(); + + for (int i = 0; i < 0x100; i++) + palette.set_indirect_color(i, rgb_t(pal4bit(color_prom[i]), pal4bit(color_prom[i + 0x100]), pal4bit(color_prom[i + 0x200]))); + + for (int i = 0; i < 0x100; i++) + palette.set_pen_indirect(i, i); + + // point to the bg CLUT + color_prom += 0x300; + + for (int i = 0; i < 0x80; i++) + palette.set_pen_indirect(i + 0x100, color_prom[i] + 0x10); + + // point to the sprite CLUT + color_prom += 0x100; + + for (int i = 0; i < 0x100; i++) + palette.set_pen_indirect(i + 0x180, color_prom[i]); +} + + + +/******************************************************************************/ +// Callbacks for the tilemap code + +TILE_GET_INFO_MEMBER(splendor_state::fg_info) +{ + int tile = m_fg_videoram[2 * tile_index] + (m_fg_char_bank << 8); + int color = m_fg_videoram[2 * tile_index + 1] & 0x3f; + + tileinfo.set(0, tile, color, 0); + if (color & 0x10) + tileinfo.flags |= TILE_FORCE_LAYER0; +} + +TILE_GET_INFO_MEMBER(splendor_state::bg_info) +{ + int data = m_bg_videoram[tile_index]; + int tile = data & 0x1ff; + int color = (data & 0xf800) >> 11; + int fxy = (data & 0x0600) >> 9; + + tileinfo.set(1, tile, color, TILE_FLIPXY(fxy)); + tileinfo.group = color; +} + + + +/******************************************************************************/ +// Video system start + +void splendor_state::video_start() +{ + assert(m_screen->format() == BITMAP_FORMAT_IND16); + + m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(splendor_state::fg_info)), TILEMAP_SCAN_COLS, 8, 8, 32, 32); + m_fg_tilemap->set_transparent_pen(0); + m_fg_tilemap->set_scrolldx(8, -8); + + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(splendor_state::bg_info)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); + m_bg_tilemap->configure_groups(*m_gfxdecode->gfx(1), 0x10); +} + + + +/******************************************************************************/ +// Video update + +void splendor_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + /* + This is (probably) the sprite x scaling PROM. + The layout is strange. Clearly every line is for one xscale setting. However, + it seems that bytes 0-3 are handled separately from bytes 4-F. + Also, note that sprites are 30x30, not 32x32. + 00020200 00000000 00000000 00000000 + 00020200 01000000 00000000 00000002 + 00020200 01000000 01000002 00000002 + 00020200 01000100 01000002 00020002 + 00020200 01000100 01010202 00020002 + 02020201 01000100 01010202 00020002 + 02020201 01010100 01010202 00020202 + 02020201 01010101 01010202 02020202 + 02020201 03010101 01010202 02020203 + 02020201 03010103 01010202 03020203 + 02020201 03010103 01030302 03020203 + 02020201 03010303 01030302 03030203 + 03020203 03010303 01030302 03030203 + 03020203 03030303 01030302 03030303 + 03020203 03030303 03030303 03030303 + 03020303 03030303 03030303 03030303 + */ + const uint8_t * const xrom = m_scale_rom[1]; + const uint8_t * const yrom = xrom + 0x100; + + gfx_element* gfx = m_gfxdecode->gfx(2); + + // note that sprites are actually 30x30, contained in 32x32 squares. The outer edge is not used. + + for (int offs = 0x3f; offs < 0x6f; offs += 2) // 24 sprites + { + int data = m_spriteram[0][offs]; + int tile = data & 0x007f; + int fx = (data & 0x2000) >> 13; + int fy = (data & 0x1000) >> 12; + int scaley = (data & 0x0f00) >> 8; + + int data2 = m_spriteram[0][offs + 1]; + int sx = data2 & 0x00ff; + int color = (data2 & 0x1f00) >> 8; + int transmask = m_palette->transpen_mask(*gfx, color, 0); + + int sy = m_spriteram[1][offs + 0] & 0x00ff; + int scalex = m_spriteram[1][offs + 1] & 0x000f; + + //const uint8_t * const xromline = xrom + (scalex << 4); + const uint8_t * const yromline = yrom + (scaley << 4) + (15 - scaley); + const uint8_t* const srcgfx = gfx->get_data(tile); + const pen_t *paldata = &m_palette->pen(gfx->colorbase() + gfx->granularity() * color); + int x,yy; + + sy += 16; + + if (flip_screen()) + { + // sx NOT inverted + fx = fx ^ 1; + fy = fy ^ 1; + } + else + { + sy = 256 - sy; + } + + for (yy = 0; yy <= scaley; ++yy) + { + int const line = yromline[yy]; + int yhalf; + + for (yhalf = 0; yhalf < 2; ++yhalf) // top or bottom half + { + int const y = yhalf ? sy + 1 + yy : sy - yy; + + if (y >= cliprect.top() && y <= cliprect.bottom()) + { + for (x = 0; x <= (scalex << 1); ++x) + { + int bx = (sx + x) & 0xff; + + if (bx >= cliprect.left() && bx <= cliprect.right()) + { + int xx = scalex ? (x * 29 + scalex) / (scalex << 1) + 1 : 16; // FIXME This is wrong. Should use the PROM. + int const offset = (fx ? (31 - xx) : xx) + ((fy ^ yhalf) ? (16 + line) : (15 - line)) * gfx->rowbytes(); + + int pen = srcgfx[offset]; + + if ((transmask & (1 << pen)) == 0) + bitmap.pix(y, bx) = paldata[pen]; + } + } + } + } + } + } +} + + +void splendor_state::copy_bg(bitmap_ind16 &dst_bitmap, const rectangle &cliprect) +{ + bitmap_ind16 &src_bitmap = m_bg_tilemap->pixmap(); + bitmap_ind8 &flags_bitmap = m_bg_tilemap->flagsmap(); + const uint8_t * const xrom = m_scale_rom[0]; + const uint8_t * const yrom = xrom + 0x2000; + int scroll_x = m_bg_scrollx; + int scroll_y = m_bg_scrolly; + int const dinvert = flip_screen() ? 0xff : 0x00; + int src_y = 0; + int dst_y; + + if (flip_screen()) + { + scroll_x = -scroll_x - 8; + scroll_y = -scroll_y; + } + + for (dst_y = 32; dst_y < 256-32; ++dst_y) + { + if (dst_y >= cliprect.top() && dst_y <= cliprect.bottom()) + { + const uint8_t * const romline = &xrom[(dst_y ^ dinvert) << 5]; + const uint16_t * const src_line = &src_bitmap.pix((src_y + scroll_y) & 0x1ff); + const uint8_t * const flags_line = &flags_bitmap.pix((src_y + scroll_y) & 0x1ff); + uint16_t * const dst_line = &dst_bitmap.pix(dst_y); + int dst_x = 0; + int src_x; + + for (src_x = 0; src_x < 256 && dst_x < 128; ++src_x) + { + if ((romline[31 - (src_x >> 3)] >> (src_x & 7)) & 1) + { + int sx; + + sx = (256+128 + scroll_x + src_x) & 0x1ff; + if (flags_line[sx] & TILEMAP_PIXEL_LAYER0) + dst_line[128 + dst_x] = src_line[sx]; + + sx = (255+128 + scroll_x - src_x) & 0x1ff; + if (flags_line[sx] & TILEMAP_PIXEL_LAYER0) + dst_line[127 - dst_x] = src_line[sx]; + + ++dst_x; + } + } + } + + src_y += 1 + yrom[dst_y ^ dinvert]; + } +} + +uint32_t splendor_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(m_bgcolor, cliprect); + + copy_bg(bitmap, cliprect); + + if (m_fg_char_bank) + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + + draw_sprites(bitmap, cliprect); + + if (!m_fg_char_bank) + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + + return 0; +} + + + +/******************************************************************************/ +// Interrupt Handlers + +TIMER_DEVICE_CALLBACK_MEMBER(splendor_state::scanline) +{ + int scanline = param; + + if(scanline == 224) // vblank-out irq + m_maincpu->set_input_line(1, HOLD_LINE); + + if(scanline == 32) // vblank-in irq + m_maincpu->set_input_line(2, HOLD_LINE); +} + + + +/******************************************************************************/ +// CPU Handlers + +uint8_t splendor_state::fg_videoram_r(offs_t offset) +{ + // 8-bit + return m_fg_videoram[offset]; +} + +void splendor_state::fg_videoram_w(offs_t offset, uint8_t data) +{ + m_fg_videoram[offset] = data; + m_fg_tilemap->mark_tile_dirty(offset >> 1); +} + +void splendor_state::bg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + COMBINE_DATA(m_bg_videoram + offset); + m_bg_tilemap->mark_tile_dirty(offset); +} + +void splendor_state::bgcolor_w(offs_t offset, uint8_t data) +{ + m_bgcolor = data; +} + +WRITE_LINE_MEMBER(splendor_state::selchar_w) +{ + // select active char map + m_fg_char_bank = (state == 0) ? 0 : 1; + m_fg_tilemap->mark_all_dirty(); +} + +void splendor_state::bg_scrollx_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + COMBINE_DATA(&m_bg_scrollx); +} + +void splendor_state::bg_scrolly_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + COMBINE_DATA(&m_bg_scrolly); +} + + + +/******************************************************************************/ +// CPU Memory Maps + +void splendor_state::splndrbt_map(address_map &map) +{ + map.unmap_value_high(); + map(0x000000, 0x00ffff).rom(); + map(0x040000, 0x040fff).ram(); + map(0x080000, 0x080001).portr("IN0"); + map(0x0c0000, 0x0c0001).portr("IN1"); + map(0x0c0000, 0x0c0000).select(0x020000).w(FUNC(splendor_state::bgcolor_w)); + map(0x0c0001, 0x0c0001).select(0x03c000).lw8(NAME([this] (offs_t offset, u8 data) { m_mainlatch->write_a3(offset >> 14); })); + map(0x100000, 0x100001).w(FUNC(splendor_state::bg_scrollx_w)); + map(0x140001, 0x140001).w("sound_board", FUNC(ad_59mc07_device::sound_command_w)); + map(0x1c0000, 0x1c0001).w(FUNC(splendor_state::bg_scrolly_w)); + map(0x180000, 0x1807ff).rw(m_alpha_8201, FUNC(alpha_8201_device::ext_ram_r), FUNC(alpha_8201_device::ext_ram_w)).umask16(0x00ff); + map(0x200000, 0x200fff).mirror(0x001000).rw(FUNC(splendor_state::fg_videoram_r), FUNC(splendor_state::fg_videoram_w)).umask16(0x00ff); + map(0x400000, 0x4007ff).ram().w(FUNC(splendor_state::bg_videoram_w)).share("bg_videoram"); + map(0x400800, 0x400fff).ram(); + map(0x600000, 0x6000ff).ram().share("spriteram1"); // sprite RAM 0,1 (2*8 bit) + map(0x600100, 0x6001ff).ram().share("spriteram2"); // sprite RAM 2,none (8 bit) +} + + +/******************************************************************************/ +// Port Maps + +#define FRQ_ADJUSTER_TAG "FRQ" + +static INPUT_PORTS_START( splndrbt ) + PORT_START("IN0") + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_START1 ) + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START2 ) + + PORT_START("IN1") + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_COIN1 ) + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_COIN2 ) + PORT_DIPNAME( 0x0c00, 0x0000, DEF_STR ( Difficulty ) ) PORT_DIPLOCATION("SW:!6,!5") + PORT_DIPSETTING( 0x0400, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW:!4") + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW:!3") + PORT_DIPSETTING( 0x2000, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0xc000, 0x0000, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW:!2,!1") + PORT_DIPSETTING( 0xc000, "A 2C/1C B 3C/1C" ) + PORT_DIPSETTING( 0x0000, "A 1C/1C B 2C/1C" ) + PORT_DIPSETTING( 0x4000, "A 1C/2C B 1C/4C" ) + PORT_DIPSETTING( 0x8000, "A 1C/3C B 1C/6C" ) + + /* this is actually a variable resistor */ + PORT_START(FRQ_ADJUSTER_TAG) + PORT_ADJUSTER(28, "MSM5232 Clock") // approximate factory setting +INPUT_PORTS_END + + +static INPUT_PORTS_START( hvoltage ) + PORT_START("IN0") + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Cocktail ) ) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_START1 ) + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_COCKTAIL + PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START2 ) + + PORT_START("IN1") + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_COIN1 ) + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_COIN2 ) + PORT_DIPNAME( 0x0c00, 0x0000, DEF_STR ( Difficulty ) ) PORT_DIPLOCATION("SW:!6,!5") + PORT_DIPSETTING( 0x0400, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x1000, 0x0000, DEF_STR ( Lives ) ) PORT_DIPLOCATION("SW:!4") // See notes + PORT_DIPSETTING( 0x0000, "3" ) + PORT_DIPSETTING( 0x1000, "5" ) + PORT_DIPNAME( 0x2000, 0x0000, DEF_STR ( Bonus_Life ) ) PORT_DIPLOCATION("SW:!3") + PORT_DIPSETTING( 0x0000, "50k, 100k then every 100k" ) + PORT_DIPSETTING( 0x2000, "50k, 200k then every 100k" ) + PORT_DIPNAME( 0xc000, 0x0000, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW:!2,!1") // See notes + PORT_DIPSETTING( 0xc000, "A 2C/1C B 3C/1C" ) + PORT_DIPSETTING( 0x0000, "A 1C/1C B 2C/1C" ) + PORT_DIPSETTING( 0x4000, "A 1C/2C B 1C/4C" ) + PORT_DIPSETTING( 0x8000, "A 1C/3C B 1C/6C" ) + + /* this is actually a variable resistor */ + PORT_START(FRQ_ADJUSTER_TAG) + PORT_ADJUSTER(27, "MSM5232 Clock") // approximate factory setting +INPUT_PORTS_END + + + +/******************************************************************************/ +// Graphics Layouts + +static const gfx_layout charlayout = +{ + 8, 8, + RGN_FRAC(1,1), + 2, + { 0, 4 }, + { STEP4(8*8+3,-1), STEP4(0*8+3,-1) }, + { STEP8(0*8,8) }, + 16*8 +}; + +static const gfx_layout tilelayout_2bpp = +{ + 16,16, + RGN_FRAC(1,1), + 2, + { 0, 4 }, + { STEP4(16*8+3,-1), STEP4(32*8+3,-1), STEP4(48*8+3,-1), STEP4(0*8+3,-1) }, + { STEP16(0*8,8) }, + 64*8 +}; + +static const gfx_layout spritelayout_32x32 = +{ + 32,32, + RGN_FRAC(1,2), + 3, + { 4, RGN_FRAC(1,2), RGN_FRAC(1,2)+4 }, + { STEP4(0*8+3,-1), STEP4(1*8+3,-1), STEP4(2*8+3,-1), STEP4(3*8+3,-1), STEP4(4*8+3,-1), STEP4(5*8+3,-1), STEP4(6*8+3,-1), STEP4(7*8+3,-1) }, + { STEP16(0*8*8,8*8), STEP16(31*8*8,-8*8) }, + 256*8 +}; + + +static GFXDECODE_START( gfx_splndrbt ) + GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0x000, 0x100/4 ) // chars + GFXDECODE_ENTRY( "gfx2", 0, tilelayout_2bpp, 0x100, 0x080/4 ) // tiles + GFXDECODE_ENTRY( "gfx3", 0, spritelayout_32x32, 0x180, 0x100/8 ) // sprites +GFXDECODE_END + + + +/******************************************************************************/ + +void splendor_state::machine_start() +{ + save_item(NAME(m_bgcolor)); + save_item(NAME(m_fg_char_bank)); + save_item(NAME(m_bg_scrollx)); + save_item(NAME(m_bg_scrolly)); +} + +void splendor_state::splndrbt(machine_config &config) +{ + // basic machine hardware + M68000(config, m_maincpu, 24_MHz_XTAL/4); // 68000P8 running at 6mhz, verified on pcb + m_maincpu->set_addrmap(AS_PROGRAM, &splendor_state::splndrbt_map); + TIMER(config, "scantimer").configure_scanline(FUNC(splendor_state::scanline), "screen", 0, 1); + + LS259(config, m_mainlatch); + m_mainlatch->q_out_cb<0>().set(FUNC(splendor_state::flip_screen_set)); + m_mainlatch->q_out_cb<1>().set(m_alpha_8201, FUNC(alpha_8201_device::mcu_start_w)); + m_mainlatch->q_out_cb<2>().set(m_alpha_8201, FUNC(alpha_8201_device::bus_dir_w)).invert(); + m_mainlatch->q_out_cb<3>().set(FUNC(splendor_state::selchar_w)); + + AD_59MC07(config, "sound_board"); + + ALPHA_8201(config, m_alpha_8201, 4000000/8); // 8303 or 8304 (same device!) + config.set_perfect_quantum("alpha_8201:mcu"); + + // video hardware + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_size(32*8, 32*8); + m_screen->set_visarea(0*8, 32*8-1, 4*8, 28*8-1); + m_screen->set_screen_update(FUNC(splendor_state::screen_update)); + m_screen->set_palette(m_palette); + + GFXDECODE(config, m_gfxdecode, m_palette, gfx_splndrbt); + PALETTE(config, m_palette, FUNC(splendor_state::palette), 0x280, 0x100); +} + + + +/******************************************************************************/ +// Splendor Blast ROM Map + +/* +Splendor Blast (JPN Ver.) +(c)1985 Alpha denshi + +ALPHA 68K24 +CPU :HD68000-8 +OSC :24.000MHz +Other:ALPHA-8303 + +SOUND BOARD NO.59 MC 07 +CPU :TMP8085AP +Sound:AY-3-8910A,OKI M5232,M5L8155P +OSC :6.144MHz +*/ +ROM_START( splndrbt ) + ROM_REGION( 0x10000, "maincpu", 0 ) // 68000 ROMs(16k x 4) + ROM_LOAD16_BYTE( "1.16a", 0x00001, 0x4000, CRC(4bf4b047) SHA1(ef0efffa2f49905e17e4ed3a03cac419793b26d1) ) + ROM_LOAD16_BYTE( "2.16c", 0x00000, 0x4000, CRC(27acb656) SHA1(5f2f8d05f2f1c6c92c8364e9e6831ca525cbacd0) ) + ROM_LOAD16_BYTE( "3.15a", 0x08001, 0x4000, CRC(5b182189) SHA1(50ebb1fddcb6838442e8a20261f200f3386ce8a8) ) + ROM_LOAD16_BYTE( "4.15c", 0x08000, 0x4000, CRC(cde99613) SHA1(250b59f75eee84442da3cc7c599d1e16f0294df9) ) + + ROM_REGION( 0x10000, "sound_board:audiocpu", 0 ) // 8085A ROMs + ROM_LOAD( "1_v.1m", 0x00000, 0x2000, CRC(1b3a6e42) SHA1(41a4f0503c939ec0a739c8bc6bf3c8fc354912ee) ) + ROM_LOAD( "2_v.1l", 0x02000, 0x2000, CRC(2a618c72) SHA1(6ad459d94352c317150ae6344d4db9bb613938dd) ) + ROM_LOAD( "3_v.1k", 0x04000, 0x2000, CRC(bbee5346) SHA1(753cb784b04f081fa1f8590dc28056d9918f313b) ) + ROM_LOAD( "4_v.1h", 0x06000, 0x2000, CRC(10f45af4) SHA1(00fa599bad8bf3ba6deee54165f381403096e8f9) ) + + ROM_REGION( 0x2000, "alpha_8201:mcu", 0 ) + ROM_LOAD( "alpha-8303_44801b42.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) ) + + ROM_REGION( 0x2000, "gfx1", 0 ) // chars + ROM_LOAD( "10.8c", 0x00000, 0x2000, CRC(501887d4) SHA1(3cf4401d6fddff1500066219a71ac3b30ecbdd28) ) + + ROM_REGION( 0x8000, "gfx2", 0 ) // tiles + ROM_LOAD( "8.14m", 0x00000, 0x4000, CRC(c2c86621) SHA1(a715c70ace98502f2c0d4a81539cd79d19e9b6c4) ) + ROM_LOAD( "9.12m", 0x04000, 0x4000, CRC(4f7da6ff) SHA1(0516271df4a36d6ea38d1b8a5e471e1d2a79e8c1) ) + + ROM_REGION( 0x10000, "gfx3", 0 ) // sprites + ROM_LOAD( "6.18n", 0x00000, 0x2000, CRC(aa72237f) SHA1(0a26746a6c448a7fb853ef708e2bdeb76edd99cf) ) + // empty space to unpack previous ROM + ROM_CONTINUE( 0x04000, 0x2000 ) + // empty space to unpack previous ROM + ROM_LOAD( "5.18m", 0x08000, 0x4000, CRC(5f618b39) SHA1(2891067e71b8e1183ee5741487faa1561316cade) ) + ROM_LOAD( "7.17m", 0x0c000, 0x4000, CRC(abdd8483) SHA1(df8c8338c24fa487c49b01ce26db7eb28c8c6b85) ) + + ROM_REGION( 0x0500, "proms", 0 ) + ROM_LOAD( "r.3a", 0x0000, 0x100, CRC(ca1f08ce) SHA1(e46e2850d3ee3c8cbb23c10645f07d406c7ff50b) ) // R + ROM_LOAD( "g.1a", 0x0100, 0x100, CRC(66f89177) SHA1(caa51c1bf071764d5089487342794cbf023136c0) ) // G + ROM_LOAD( "b.2a", 0x0200, 0x100, CRC(d14318bc) SHA1(e219963b3e40eb246e608fbe10daa85dbb4c1226) ) // B + ROM_LOAD( "2.8k", 0x0300, 0x100, CRC(e1770ad3) SHA1(e408b175b8fff934e07b0ded1ee21d7f91a9523d) ) // CLUT bg + ROM_LOAD( "s5.15p", 0x0400, 0x100, CRC(7f6cf709) SHA1(5938faf937b682dcc83e53444cbf5e0bd7741363) ) // CLUT sprites + + ROM_REGION( 0x0020, "prom", 0 ) + ROM_LOAD( "3h.bpr", 0x00000, 0x020, CRC(33b98466) SHA1(017c73cf8c17dc5047c89316ae5b45f8d22092e8) ) + + ROM_REGION( 0x2100, "scale1", 0 ) // bg scaling + ROM_LOAD( "0.8h", 0x0000, 0x2000, CRC(12681fb5) SHA1(7a0930819d4cd00475d1897128daa6ac865e07d0) ) // x + ROM_LOAD( "1.9j", 0x2000, 0x0100, CRC(f5b9b777) SHA1(a4ec731be77306db6baf319391c4fe78517fe43e) ) // y + + ROM_REGION( 0x0200, "scale2", 0 ) // sprite scaling + ROM_LOAD( "4.7m", 0x0000, 0x0100, CRC(12cbcd2c) SHA1(a7946820bbf3f7e110a328b673123988af97ce7e) ) // x + ROM_LOAD( "s3.8l", 0x0100, 0x0100, CRC(1314b0b5) SHA1(31ef4b916110581390afc1ba90c5dca7c08c619f) ) // y +ROM_END + +ROM_START( splndrbta ) + ROM_REGION( 0x10000, "maincpu", 0 ) // 68000 ROMs(16k x 4) - Red band on program rom labels + ROM_LOAD16_BYTE( "1red.16b", 0x00001, 0x4000, CRC(3e342030) SHA1(82529e12378c0036097a654fe059f82d69fac8e6) ) + ROM_LOAD16_BYTE( "2red.16c", 0x00000, 0x4000, CRC(757e270b) SHA1(be615829fd21609ded21888e7a75456cbeecb603) ) + ROM_LOAD16_BYTE( "3red.15b", 0x08001, 0x4000, CRC(788deb02) SHA1(a4e79621bf4cda50dfb8dfab7f70dc4021065794) ) + ROM_LOAD16_BYTE( "4red.15c", 0x08000, 0x4000, CRC(d02a5606) SHA1(6bb2e5d95ea711452dd40218bd90488d70f82006) ) + + ROM_REGION( 0x10000, "sound_board:audiocpu", 0 ) // 8085A ROMs + ROM_LOAD( "8v.1l", 0x00000, 0x4000, CRC(71b2ec29) SHA1(89c630c5bf9c4752b01006183d1419fe6a458f5c) ) + ROM_LOAD( "9v.1h", 0x04000, 0x4000, CRC(e95abcb5) SHA1(1680875fc16d1a4e1054ccdabdf6fd06d434a163) ) + + ROM_REGION( 0x2000, "alpha_8201:mcu", 0 ) + ROM_LOAD( "alpha-8303_44801b42.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) ) + + ROM_REGION( 0x2000, "gfx1", 0 ) // chars + ROM_LOAD( "10.8c", 0x00000, 0x2000, CRC(501887d4) SHA1(3cf4401d6fddff1500066219a71ac3b30ecbdd28) ) + + ROM_REGION( 0x8000, "gfx2", 0 ) // tiles + ROM_LOAD( "8.14m", 0x00000, 0x4000, CRC(c2c86621) SHA1(a715c70ace98502f2c0d4a81539cd79d19e9b6c4) ) + ROM_LOAD( "9.12m", 0x04000, 0x4000, CRC(4f7da6ff) SHA1(0516271df4a36d6ea38d1b8a5e471e1d2a79e8c1) ) + + ROM_REGION( 0x10000, "gfx3", 0 ) // sprites + ROM_LOAD( "6.18n", 0x00000, 0x2000, CRC(aa72237f) SHA1(0a26746a6c448a7fb853ef708e2bdeb76edd99cf) ) + // empty space to unpack previous ROM + ROM_CONTINUE( 0x04000, 0x2000 ) + // empty space to unpack previous ROM + ROM_LOAD( "5.18m", 0x08000, 0x4000, CRC(5f618b39) SHA1(2891067e71b8e1183ee5741487faa1561316cade) ) + ROM_LOAD( "7.17m", 0x0c000, 0x4000, CRC(abdd8483) SHA1(df8c8338c24fa487c49b01ce26db7eb28c8c6b85) ) + + ROM_REGION( 0x0500, "proms", 0 ) + ROM_LOAD( "r.3a", 0x0000, 0x100, CRC(ca1f08ce) SHA1(e46e2850d3ee3c8cbb23c10645f07d406c7ff50b) ) // R + ROM_LOAD( "g.1a", 0x0100, 0x100, CRC(66f89177) SHA1(caa51c1bf071764d5089487342794cbf023136c0) ) // G + ROM_LOAD( "b.2a", 0x0200, 0x100, CRC(d14318bc) SHA1(e219963b3e40eb246e608fbe10daa85dbb4c1226) ) // B + ROM_LOAD( "2.8k", 0x0300, 0x100, CRC(e1770ad3) SHA1(e408b175b8fff934e07b0ded1ee21d7f91a9523d) ) // CLUT bg + ROM_LOAD( "s5.15p", 0x0400, 0x100, CRC(7f6cf709) SHA1(5938faf937b682dcc83e53444cbf5e0bd7741363) ) // CLUT sprites + + ROM_REGION( 0x0020, "prom", 0 ) + ROM_LOAD( "3h.bpr", 0x00000, 0x020, CRC(33b98466) SHA1(017c73cf8c17dc5047c89316ae5b45f8d22092e8) ) + + ROM_REGION( 0x2100, "scale1", 0 ) // bg scaling + ROM_LOAD( "0.8h", 0x0000, 0x2000, CRC(12681fb5) SHA1(7a0930819d4cd00475d1897128daa6ac865e07d0) ) // x + ROM_LOAD( "1.9j", 0x2000, 0x0100, CRC(f5b9b777) SHA1(a4ec731be77306db6baf319391c4fe78517fe43e) ) // y + + ROM_REGION( 0x0200, "scale2", 0 ) // sprite scaling + ROM_LOAD( "4.7m", 0x0000, 0x0100, CRC(12cbcd2c) SHA1(a7946820bbf3f7e110a328b673123988af97ce7e) ) // x + ROM_LOAD( "s3.8l", 0x0100, 0x0100, CRC(1314b0b5) SHA1(31ef4b916110581390afc1ba90c5dca7c08c619f) ) // y +ROM_END + +ROM_START( splndrbtb ) + ROM_REGION( 0x10000, "maincpu", 0 ) // 68000 ROMs(16k x 4) - Blue band on program rom labels + ROM_LOAD16_BYTE( "1blue.16a", 0x00001, 0x4000, CRC(f8507502) SHA1(35a915db9ef90e45aac8ce9e349c319e99a36810) ) + ROM_LOAD16_BYTE( "2blue.16c", 0x00000, 0x4000, CRC(8969bd04) SHA1(6cd8a0ab58ce0e4a43cf5ca4fcd10b30962a13b3) ) + ROM_LOAD16_BYTE( "3blue.15a", 0x08001, 0x4000, CRC(bce26d4f) SHA1(81a295e665af9e46ff28618f2f77f31f41f14a4f) ) + ROM_LOAD16_BYTE( "4blue.15c", 0x08000, 0x4000, CRC(5715ec1b) SHA1(fddf45a4e1b2fd319b0a47376c11ce2a41c40eb2) ) + + ROM_REGION( 0x10000, "sound_board:audiocpu", 0 ) // 8085A ROMs + ROM_LOAD( "1_v.1m", 0x00000, 0x2000, CRC(1b3a6e42) SHA1(41a4f0503c939ec0a739c8bc6bf3c8fc354912ee) ) + ROM_LOAD( "2_v.1l", 0x02000, 0x2000, CRC(2a618c72) SHA1(6ad459d94352c317150ae6344d4db9bb613938dd) ) + ROM_LOAD( "3_v.1k", 0x04000, 0x2000, CRC(bbee5346) SHA1(753cb784b04f081fa1f8590dc28056d9918f313b) ) + ROM_LOAD( "4_v.1h", 0x06000, 0x2000, CRC(10f45af4) SHA1(00fa599bad8bf3ba6deee54165f381403096e8f9) ) + + ROM_REGION( 0x2000, "alpha_8201:mcu", 0 ) + ROM_LOAD( "alpha-8303_44801b42.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) ) + + ROM_REGION( 0x2000, "gfx1", 0 ) // chars + ROM_LOAD( "10.8c", 0x00000, 0x2000, CRC(501887d4) SHA1(3cf4401d6fddff1500066219a71ac3b30ecbdd28) ) + + ROM_REGION( 0x8000, "gfx2", 0 ) // tiles + ROM_LOAD( "8.14m", 0x00000, 0x4000, CRC(c2c86621) SHA1(a715c70ace98502f2c0d4a81539cd79d19e9b6c4) ) + ROM_LOAD( "9.12m", 0x04000, 0x4000, CRC(4f7da6ff) SHA1(0516271df4a36d6ea38d1b8a5e471e1d2a79e8c1) ) + + ROM_REGION( 0x10000, "gfx3", 0 ) // sprites + ROM_LOAD( "6.18n", 0x00000, 0x2000, CRC(aa72237f) SHA1(0a26746a6c448a7fb853ef708e2bdeb76edd99cf) ) + // empty space to unpack previous ROM + ROM_CONTINUE( 0x04000, 0x2000 ) + // empty space to unpack previous ROM + ROM_LOAD( "5.18m", 0x08000, 0x4000, CRC(5f618b39) SHA1(2891067e71b8e1183ee5741487faa1561316cade) ) + ROM_LOAD( "7.17m", 0x0c000, 0x4000, CRC(abdd8483) SHA1(df8c8338c24fa487c49b01ce26db7eb28c8c6b85) ) + + ROM_REGION( 0x0500, "proms", 0 ) + ROM_LOAD( "r.3a", 0x0000, 0x100, CRC(ca1f08ce) SHA1(e46e2850d3ee3c8cbb23c10645f07d406c7ff50b) ) // R + ROM_LOAD( "g.1a", 0x0100, 0x100, CRC(66f89177) SHA1(caa51c1bf071764d5089487342794cbf023136c0) ) // G + ROM_LOAD( "b.2a", 0x0200, 0x100, CRC(d14318bc) SHA1(e219963b3e40eb246e608fbe10daa85dbb4c1226) ) // B + ROM_LOAD( "2.8k", 0x0300, 0x100, CRC(e1770ad3) SHA1(e408b175b8fff934e07b0ded1ee21d7f91a9523d) ) // CLUT bg + ROM_LOAD( "s5.15p", 0x0400, 0x100, CRC(7f6cf709) SHA1(5938faf937b682dcc83e53444cbf5e0bd7741363) ) // CLUT sprites + + ROM_REGION( 0x0020, "prom", 0 ) + ROM_LOAD( "3h.bpr", 0x00000, 0x020, CRC(33b98466) SHA1(017c73cf8c17dc5047c89316ae5b45f8d22092e8) ) + + ROM_REGION( 0x2100, "scale1", 0 ) // bg scaling + ROM_LOAD( "0.8h", 0x0000, 0x2000, CRC(12681fb5) SHA1(7a0930819d4cd00475d1897128daa6ac865e07d0) ) // x + ROM_LOAD( "1.9j", 0x2000, 0x0100, CRC(f5b9b777) SHA1(a4ec731be77306db6baf319391c4fe78517fe43e) ) // y + + ROM_REGION( 0x0200, "scale2", 0 ) // sprite scaling + ROM_LOAD( "4.7m", 0x0000, 0x0100, CRC(12cbcd2c) SHA1(a7946820bbf3f7e110a328b673123988af97ce7e) ) // x + ROM_LOAD( "s3.8l", 0x0100, 0x0100, CRC(1314b0b5) SHA1(31ef4b916110581390afc1ba90c5dca7c08c619f) ) // y +ROM_END + +ROM_START( splndrbt2 ) + ROM_REGION( 0x10000, "maincpu", 0 ) // 68000 ROMs(16k x 4) + ROM_LOAD16_BYTE( "1.a16", 0x00001, 0x4000, CRC(0fd3121d) SHA1(f9767af477442a09a70c04e4d427914557fddcd9) ) + ROM_LOAD16_BYTE( "2.c16", 0x00000, 0x4000, CRC(227d8a1b) SHA1(8ce976e6d3dce1236a784e48f4829f42c801249c) ) + ROM_LOAD16_BYTE( "3.a15", 0x08001, 0x4000, CRC(936f7cc9) SHA1(ef1601097659700f4a4b53fb57cd6d73efa03e0d) ) + ROM_LOAD16_BYTE( "4.c15", 0x08000, 0x4000, CRC(3ff7c7b5) SHA1(4997efd4427f09a5427f752d0147b648fbdce252) ) + + ROM_REGION( 0x10000, "sound_board:audiocpu", 0 ) // 8085A ROMs + ROM_LOAD( "s1.m1", 0x00000, 0x02000, CRC(045eac1b) SHA1(49ecc73b999719e470b2ef0afee6a84df620e0d9) ) + ROM_LOAD( "s2.l1", 0x02000, 0x02000, CRC(65a3d094) SHA1(f6415eb323478a2d38acd4507404d9530fac77c4) ) + ROM_LOAD( "s3.k1", 0x04000, 0x02000, CRC(980d38be) SHA1(c07f9851cfb6352781568f333d931b4ca08fd888) ) + ROM_LOAD( "s4.h1", 0x06000, 0x02000, CRC(10f45af4) SHA1(00fa599bad8bf3ba6deee54165f381403096e8f9) ) + ROM_LOAD( "s5.f1", 0x08000, 0x02000, CRC(0d76cac0) SHA1(15d0d5860035f06020589115b40d347c06d7ecbe) ) + ROM_LOAD( "s6.e1", 0x0a000, 0x02000, CRC(bc65d469) SHA1(45145974d3ae7040fd00c776418702166c06b0dc) ) + + ROM_REGION( 0x2000, "alpha_8201:mcu", 0 ) + ROM_LOAD( "alpha-8303_44801b42.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) ) + + ROM_REGION( 0x2000, "gfx1", 0 ) // chars + ROM_LOAD( "5.b8", 0x00000, 0x02000, CRC(77a5dc55) SHA1(49f19e8816629b661c135b0db6f6e087eb2690ff) ) + + ROM_REGION( 0x8000, "gfx2", 0 ) // tiles + ROM_LOAD( "8.m13", 0x00000, 0x4000, CRC(c2c86621) SHA1(a715c70ace98502f2c0d4a81539cd79d19e9b6c4) ) + ROM_LOAD( "9.m12", 0x04000, 0x4000, CRC(4f7da6ff) SHA1(0516271df4a36d6ea38d1b8a5e471e1d2a79e8c1) ) + + ROM_REGION( 0x10000, "gfx3", 0 ) // sprites + ROM_LOAD( "8.n18", 0x00000, 0x4000, CRC(15b8277b) SHA1(36d80e9c1200f587cafdf43fafafe844d56296aa) ) + // empty space to unpack previous ROM + // ROM_CONTINUE( 0x04000, 0x2000 ) + // empty space to unpack previous ROM + ROM_LOAD( "5.m18", 0x08000, 0x4000, CRC(5f618b39) SHA1(2891067e71b8e1183ee5741487faa1561316cade) ) + ROM_LOAD( "7.m17", 0x0c000, 0x4000, CRC(abdd8483) SHA1(df8c8338c24fa487c49b01ce26db7eb28c8c6b85) ) + + ROM_REGION( 0x0500, "proms", 0 ) + ROM_LOAD( "r.3a", 0x0000, 0x100, CRC(ca1f08ce) SHA1(e46e2850d3ee3c8cbb23c10645f07d406c7ff50b) ) // R + ROM_LOAD( "g.1a", 0x0100, 0x100, CRC(66f89177) SHA1(caa51c1bf071764d5089487342794cbf023136c0) ) // G + ROM_LOAD( "b.2a", 0x0200, 0x100, CRC(d14318bc) SHA1(e219963b3e40eb246e608fbe10daa85dbb4c1226) ) // B + ROM_LOAD( "2.8k", 0x0300, 0x100, CRC(e1770ad3) SHA1(e408b175b8fff934e07b0ded1ee21d7f91a9523d) ) // CLUT bg + ROM_LOAD( "s5.15p", 0x0400, 0x100, CRC(7f6cf709) SHA1(5938faf937b682dcc83e53444cbf5e0bd7741363) ) // CLUT sprites + + ROM_REGION( 0x0020, "prom", 0 ) + ROM_LOAD( "3h.bpr", 0x00000, 0x020, CRC(33b98466) SHA1(017c73cf8c17dc5047c89316ae5b45f8d22092e8) ) + + ROM_REGION( 0x2100, "scale1", 0 ) // bg scaling + ROM_LOAD( "0.h7", 0x0000, 0x2000, CRC(12681fb5) SHA1(7a0930819d4cd00475d1897128daa6ac865e07d0) ) // x + ROM_LOAD( "1.9j", 0x2000, 0x0100, CRC(f5b9b777) SHA1(a4ec731be77306db6baf319391c4fe78517fe43e) ) // y + + ROM_REGION( 0x0200, "scale2", 0 ) // sprite scaling + ROM_LOAD( "4.7m", 0x0000, 0x0100, CRC(12cbcd2c) SHA1(a7946820bbf3f7e110a328b673123988af97ce7e) ) // x + ROM_LOAD( "s3.8l", 0x0100, 0x0100, CRC(1314b0b5) SHA1(31ef4b916110581390afc1ba90c5dca7c08c619f) ) // y +ROM_END + +/******************************************************************************/ +// High Voltage ROM Map + +/* +High Voltage (JPN Ver.) +(c)1985 Alpha denshi + +ALPHA 68K24 +CPU :HD68000-8 +OSC :24.000MHz +Other:ALPHA-8304 + +SOUND BOARD NO.59 MC 07 +CPU :TMP8085AP +Sound:AY-3-8910A,OKI M5232,D8155HC +OSC :6.144MHz +*/ +ROM_START( hvoltage ) + ROM_REGION( 0x10000, "maincpu", 0 ) // 68000 ROMs(16k x 4) + ROM_LOAD16_BYTE( "1.16a", 0x00001, 0x4000, CRC(82606e3b) SHA1(25c3172928d8f1eda2c4c757d505fdfd91f21ea1) ) + ROM_LOAD16_BYTE( "2.16c", 0x00000, 0x4000, CRC(1d74fef2) SHA1(3df3dc98a78a137da8c5cddf6a8519b477824fb9) ) + ROM_LOAD16_BYTE( "3.15a", 0x08001, 0x4000, CRC(677abe14) SHA1(78b343122f9ad187c823bf49e8f001288c762586) ) + ROM_LOAD16_BYTE( "4.15c", 0x08000, 0x4000, CRC(8aab5a20) SHA1(fb90817173ad69c0e00d03814b4e10b18955c07e) ) + + ROM_REGION( 0x10000, "sound_board:audiocpu", 0 ) // 8085A ROMs + ROM_LOAD( "5_v.1l", 0x00000, 0x4000, CRC(ed9bb6ea) SHA1(73b0251b86835368ec2a4e98a5f61e28e58fd234) ) + ROM_LOAD( "6_v.1h", 0x04000, 0x4000, CRC(e9542211) SHA1(482f2c90e842fe5cc31cc6a39025adf65ba47ce9) ) + ROM_LOAD( "7_v.1e", 0x08000, 0x4000, CRC(44d38554) SHA1(6765971376eafa218fda1accb1e173a7c1850cc8) ) + + ROM_REGION( 0x2000, "alpha_8201:mcu", 0 ) + ROM_LOAD( "alpha-8505_44801c57.bin", 0x0000, 0x2000, BAD_DUMP CRC(1f5a1405) SHA1(23f2e23db402f88037a5cbdab2935ec1b9a05298) ) // 8304 is not dumped yet, using 8505 instead, works ok + + ROM_REGION( 0x2000, "gfx1", 0 ) // chars + ROM_LOAD( "5.8c", 0x00000, 0x2000, CRC(656d53cd) SHA1(9971ed7e7da0e8bf46e97e8f75a2c2201b33fc2f) ) + + ROM_REGION( 0x8000, "gfx2", 0 ) // tiles + ROM_LOAD( "9.14m", 0x00000, 0x4000, CRC(506a0989) SHA1(0e7f2c9bab5e83f06a8148f69d8d0cbfe7d55c5e) ) + ROM_LOAD( "10.12m", 0x04000, 0x4000, CRC(98f87d4f) SHA1(94a7a14b0905597993595b347102436d97fc1dc9) ) + + ROM_REGION( 0x10000, "gfx3", 0 ) // sprites + ROM_LOAD( "8.18n", 0x00000, 0x2000, CRC(725acae5) SHA1(ba54598a087f8bb5fa7182b0e85d0e038003e622) ) + // empty space to unpack previous ROM + ROM_CONTINUE( 0x04000, 0x2000 ) + // empty space to unpack previous ROM + ROM_LOAD( "6.18m", 0x08000, 0x4000, CRC(9baf2c68) SHA1(208e5ac8eb157d4bf949ab4330827da032a04235) ) + ROM_LOAD( "7.17m", 0x0c000, 0x4000, CRC(12d25fb1) SHA1(99f5d68bd6d6ee5f2acb7685aceacfb0894c4961) ) + + ROM_REGION( 0x0500, "proms", 0 ) + ROM_LOAD( "r.3a", 0x0000, 0x100, CRC(98eccbf6) SHA1(a55755e8388d3edf3020b1129a638fe1e99362b6) ) // R + ROM_LOAD( "g.1a", 0x0100, 0x100, CRC(fab2ed23) SHA1(6f63b6a3196dda76eb9a885b17d886a14365f922) ) // G + ROM_LOAD( "b.2a", 0x0200, 0x100, CRC(7274961b) SHA1(d13070060e216d633675a528cf0dc3de94c95ffb) ) // B + ROM_LOAD( "2.8k", 0x0300, 0x100, CRC(685f4e44) SHA1(110cb8f5a37f22ce9d391bd0cd46dcbb8fcf66b8) ) // CLUT bg + ROM_LOAD( "s5.15p", 0x0400, 0x100, CRC(b09bcc73) SHA1(f8139feaa9563324b69aeac5c17beccfdbfa0864) ) // CLUT sprites + + ROM_REGION( 0x0020, "prom", 0 ) + ROM_LOAD( "3h.bpr", 0x00000, 0x020, CRC(33b98466) SHA1(017c73cf8c17dc5047c89316ae5b45f8d22092e8) ) + + ROM_REGION( 0x2100, "scale1", 0 ) // bg scaling + ROM_LOAD( "0.8h", 0x0000, 0x2000, CRC(12681fb5) SHA1(7a0930819d4cd00475d1897128daa6ac865e07d0) ) // x + ROM_LOAD( "1.9j", 0x2000, 0x0100, CRC(f5b9b777) SHA1(a4ec731be77306db6baf319391c4fe78517fe43e) ) // y + + ROM_REGION( 0x0200, "scale2", 0 ) // sprite scaling + ROM_LOAD( "4.7m", 0x0000, 0x0100, CRC(12cbcd2c) SHA1(a7946820bbf3f7e110a328b673123988af97ce7e) ) // x + ROM_LOAD( "3.8l", 0x0100, 0x0100, CRC(1314b0b5) SHA1(31ef4b916110581390afc1ba90c5dca7c08c619f) ) // y +ROM_END + + + +/******************************************************************************/ +// Initializations + +void splendor_state::unpack_block(const char *region, int offset, int size) +{ + uint8_t *rom = memregion(region)->base(); + + for (int i = 0; i < size; i++) + { + rom[(offset + i + size)] = (rom[(offset + i)] >> 4); + rom[(offset + i)] &= 0x0f; + } +} + +void splendor_state::unpack_region(const char *region) +{ + unpack_block(region, 0x0000, 0x2000); + unpack_block(region, 0x4000, 0x2000); +} + +void splendor_state::init_splndrbt() +{ + unpack_region("gfx3"); +} + +} // anonymous namespace + + + +/******************************************************************************/ +// Game Entries + +GAME( 1985, splndrbt, 0, splndrbt, splndrbt, splendor_state, init_splndrbt, ROT0, "Alpha Denshi Co.", "Splendor Blast (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1985, splndrbta, splndrbt, splndrbt, splndrbt, splendor_state, init_splndrbt, ROT0, "Alpha Denshi Co.", "Splendor Blast (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1985, splndrbtb, splndrbt, splndrbt, splndrbt, splendor_state, init_splndrbt, ROT0, "Alpha Denshi Co.", "Splendor Blast (set 3)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1985, splndrbt2, 0, splndrbt, splndrbt, splendor_state, init_splndrbt, ROT0, "Alpha Denshi Co.", "Splendor Blast II", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1985, hvoltage, 0, splndrbt, hvoltage, splendor_state, init_splndrbt, ROT0, "Alpha Denshi Co.", "High Voltage", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/apple/apple2gs.cpp mame-0.251+dfsg.1/src/mame/apple/apple2gs.cpp --- mame-0.250+dfsg.1/src/mame/apple/apple2gs.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/apple/apple2gs.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -14,14 +14,16 @@ - Expanded IIe: ROM 00/01 motherboard in a IIe case with a IIe keyboard rather than ADB Timing in terms of the 14M 14.3181818 MHz clock (1/2 of the 28.6363636 master clock): - - 1 65816 cycle is 5 14M clocks - - Every 50 14M clocks (10 65816 cycles) DRAM refresh occurs for 5 14M clocks - * During this time, CPU accesses to ROM, Mega II side I/O, or banks E0/E1 are not penalized (but a side-sync penalty is incurred) - * Accesses to banks 00-7F are penalized except for I/O in banks 0/1. + - 1 2.8 MHz 65816 cycle is 5 14M clocks. - The Mega II 1 MHz side runs for 64 cycles at 14 14M clocks and every 65th is stretched to 16 14M clocks. This allows 8-bit Apple II raster demos to work. Each scanline is (64*14) + 16 = 912 14M clocks. Due to this stretch, which does not occur on the fast side, the fast and 1 Mhz sides drift from each other and sync up every 22800 14M clocks (25 scan lines). + - Accesses to the 1 MHz side incur a side-sync penalty (waiting for the start of the next 1 MHz cycle). + - Every 50 14M clocks (10 65816 cycles) DRAM refresh occurs for 5 14M clocks + * During this time, CPU accesses to ROM, Mega II side I/O, or banks E0/E1 are not penalized (but a side-sync penalty is incurred for the 1 MHz side) + * Accesses to banks 00-7F are penalized except for I/O in banks 0/1. + - ROM accesses always run at full speed. One video line is: 6 cycles of right border, 13 cycles of hblank, 6 cycles of left border, and 40 cycles of active video @@ -57,8 +59,9 @@ #define LOG_ADB (0) // log ADB activity in the old-style HLE simulation of the microcontroller and GLU #include "apple2common.h" -//#include "machine/apple2host.h" +// #include "machine/apple2host.h" #include "macadb.h" +#include "macrtc.h" #include "bus/a2bus/a2bus.h" #include "bus/a2bus/cards.h" @@ -68,7 +71,6 @@ #include "cpu/m6502/m5074x.h" #include "machine/bankdev.h" #include "machine/kb3600.h" -#include "machine/nvram.h" #include "machine/ram.h" #include "machine/timer.h" #include "machine/z80scc.h" @@ -130,8 +132,8 @@ m_ram(*this, "ram"), m_rom(*this, "maincpu"), m_docram(*this, "docram"), - m_nvram(*this, "nvram"), m_video(*this, "a2video"), + m_rtc(*this, "rtc"), m_a2bus(*this, "a2bus"), m_a2common(*this, "a2common"), // m_a2host(*this, "a2host"), @@ -198,8 +200,8 @@ required_device m_ram; required_region_ptr m_rom; required_shared_ptr m_docram; - required_device m_nvram; required_device m_video; + required_device m_rtc; required_device m_a2bus; required_device m_a2common; // required_device m_a2host; @@ -305,15 +307,6 @@ static constexpr u8 VGCINT_SECOND = 0x40; static constexpr u8 VGCINT_ANYVGCINT = 0x80; - enum apple2gs_clock_mode - { - CLOCKMODE_IDLE, - CLOCKMODE_TIME, - CLOCKMODE_INTERNALREGS, - CLOCKMODE_BRAM1, - CLOCKMODE_BRAM2 - }; - enum adbstate_t { ADBSTATE_IDLE, @@ -422,11 +415,14 @@ TIMER_DEVICE_CALLBACK_MEMBER(ay3600_repeat); #endif - u8 keyglu_mcu_read(u8 offset); - void keyglu_mcu_write(u8 offset, u8 data); + [[maybe_unused]] u8 keyglu_mcu_read(u8 offset); + [[maybe_unused]] void keyglu_mcu_write(u8 offset, u8 data); #if RUN_ADB_MICRO u8 keyglu_816_read(u8 offset); void keyglu_816_write(u8 offset, u8 data); + + u8 m_adb_p2_last, m_adb_p3_last; + int m_adb_reset_freeze = 0; #endif void keyglu_regen_irqs(); @@ -501,12 +497,8 @@ u32 m_slow_counter = 0; // clock/BRAM - u8 m_clkdata = 0, m_clock_control = 0, m_clock_read = 0, m_clock_reg1 = 0; - apple2gs_clock_mode m_clock_mode; - u32 m_clock_curtime; - seconds_t m_clock_curtime_interval; - u8 m_clock_bram[256]{}; - int m_clock_frame = 0; + u8 m_clkdata = 0, m_clock_control = 0; + u8 m_clock_frame = 0; // ADB simulation #if !RUN_ADB_MICRO @@ -1353,8 +1345,6 @@ #endif std::fill(std::begin(m_megaii_ram), std::end(m_megaii_ram), 0); - m_nvram->set_base(m_clock_bram, sizeof(m_clock_bram)); - // setup speaker toggle volumes. this should be done mathematically probably, // but these ad-hoc values aren't too bad. #define LVL(x) (double(x) / 32768.0) @@ -1430,6 +1420,7 @@ save_item(NAME(m_textcol)); save_item(NAME(m_clock_control)); save_item(NAME(m_clkdata)); + save_item(NAME(m_clock_frame)); save_item(NAME(m_motors_active)); save_item(NAME(m_slotromsel)); save_item(NAME(m_diskreg)); @@ -1451,13 +1442,6 @@ save_item(NAME(m_megaii_ram)); save_item(m_clkdata, "CLKDATA"); save_item(m_clock_control, "CLKCTRL"); - save_item(m_clock_read, "CLKRD"); - save_item(m_clock_reg1, "CLKREG1"); - save_item(m_clock_curtime, "CLKCURTIME"); - save_item(m_clock_curtime_interval, "CLKCURTIMEINT"); -// save_item(m_clock_mode, "CLKMODE"); - save_item(NAME(m_clock_bram)); - save_item(NAME(m_clock_frame)); #if !RUN_ADB_MICRO save_item(NAME(m_adb_memory)); save_item(NAME(m_adb_command_bytes)); @@ -1479,6 +1463,10 @@ save_item(NAME(m_transchar)); save_item(NAME(m_anykeydown)); save_item(NAME(m_repeatdelay)); +#else + save_item(NAME(m_adb_p2_last)); + save_item(NAME(m_adb_p3_last)); + save_item(NAME(m_adb_reset_freeze)); #endif save_item(m_mouse_x, "MX"); save_item(m_mouse_y, "MY"); @@ -1499,6 +1487,10 @@ void apple2gs_state::machine_reset() { + #if RUN_ADB_MICRO + m_adb_p2_last = m_adb_p3_last = 0; + m_adb_reset_freeze = 0; + #endif m_page2 = false; m_romswitch = false; m_video->m_page2 = false; @@ -1550,34 +1542,6 @@ /* init time */ m_clkdata = 0; m_clock_control =0; - m_clock_read = 0; - m_clock_reg1 = 0; - m_clock_mode = CLOCKMODE_IDLE; - m_clock_curtime_interval = 0; - - // seed the clock with real time - struct tm cur_time, mac_reference; - system_time curtime; - machine().current_datetime(curtime); - - cur_time.tm_sec = curtime.local_time.second; - cur_time.tm_min = curtime.local_time.minute; - cur_time.tm_hour = curtime.local_time.hour; - cur_time.tm_mday = curtime.local_time.mday; - cur_time.tm_mon = curtime.local_time.month; - cur_time.tm_year = curtime.local_time.year-1900; - cur_time.tm_isdst = 0; - - /* The count starts on 1st January 1904 */ - mac_reference.tm_sec = 0; - mac_reference.tm_min = 0; - mac_reference.tm_hour = 0; - mac_reference.tm_mday = 1; - mac_reference.tm_mon = 0; - mac_reference.tm_year = 4; - mac_reference.tm_isdst = 0; - - m_clock_curtime = difftime(mktime(&cur_time), mktime(&mac_reference)); m_shadow = 0x00; m_speed = 0x80; @@ -1841,7 +1805,6 @@ { //printf("one sec, vgcint = %02x\n", m_vgcint); m_clock_frame = 0; - m_clock_curtime++; if ((m_vgcint & VGCINT_SECONDENABLE) && !(m_vgcint & VGCINT_SECOND)) { @@ -2237,95 +2200,20 @@ void apple2gs_state::process_clock() { - u8 operation; - - switch(m_clock_mode) + for (int i = 0; i < 8; i++) { - case CLOCKMODE_IDLE: - m_clock_read = (m_clkdata >> 7); - m_clock_reg1 = (m_clkdata >> 2) & 0x03; - operation = (m_clkdata >> 4) & 0x07; - if ((m_clkdata & 0x40) == 0x00) - { - switch(operation) - { - case 0x00: - /* read/write seconds register */ - m_clock_mode = CLOCKMODE_TIME; - break; - - case 0x03: - /* internal registers */ - if (m_clock_reg1 & 0x02) - { - m_clock_mode = CLOCKMODE_BRAM2; - m_clock_reg1 = (m_clkdata & 0x07) << 5; - } - else - { - m_clock_mode = CLOCKMODE_INTERNALREGS; - } - break; - - default: - //fatalerror("NYI\n"); - break; - } - } - break; - - case CLOCKMODE_BRAM1: - if (m_clock_read) - { - m_clkdata = m_clock_bram[m_clock_reg1]; - //printf("Read BRAM %02x = %02x\n", m_clock_reg1, m_clkdata); - } - else - { - //printf("Write BRAM %02x = %02x\n", m_clock_reg1, m_clkdata); - m_clock_bram[m_clock_reg1] = m_clkdata; - } - m_clock_mode = CLOCKMODE_IDLE; - break; - - case CLOCKMODE_BRAM2: - m_clock_reg1 |= (m_clkdata >> 2) & 0x1F; - m_clock_mode = CLOCKMODE_BRAM1; - break; - - case CLOCKMODE_INTERNALREGS: - //printf("internalregs, reg %d, read %x\n", m_clock_reg1, m_clock_read); - switch (m_clock_reg1) - { - case 0x00: - /* test register */ - break; - - case 0x01: - /* write protect register */ - break; - } - m_clock_mode = CLOCKMODE_IDLE; - break; - - case CLOCKMODE_TIME: - if (m_clock_control & 0x40) - { - m_clkdata = m_clock_curtime >> (m_clock_reg1 * 8); - //printf("Read time reg %x = %x\n", m_clock_reg1, m_clkdata); - } - else - { - m_clock_curtime &= ~(0xFF << (m_clock_reg1 * 8)); - m_clock_curtime |= m_clkdata << (m_clock_reg1 * 8); - //printf("Write time reg %x = %x\n", m_clock_reg1, m_clkdata); - } - m_clock_mode = CLOCKMODE_IDLE; - break; - - default: - //fatalerror("NYI\n"); - break; + m_rtc->clk_w(ASSERT_LINE); + if (!BIT(m_clock_control, 6)) + { + m_rtc->data_w(BIT(m_clkdata, 7-i)); + m_rtc->clk_w(CLEAR_LINE); + } + else + { + m_rtc->clk_w(CLEAR_LINE); + m_clkdata <<= 1; + m_clkdata |= m_rtc->data_r() & 1; + } } } @@ -2383,49 +2271,49 @@ return uKeyboardC010; #endif case 0x11: // read LCRAM2 (LC Dxxx bank) - return uKeyboardC010 | (m_lcram2 ? 0x80 : 0x00); + return (uKeyboardC010 & 0x7f) | (m_lcram2 ? 0x80 : 0x00); case 0x12: // read LCRAM (is LC readable?) - return uKeyboardC010 | (m_lcram ? 0x80 : 0x00); + return (uKeyboardC010 & 0x7f) | (m_lcram ? 0x80 : 0x00); case 0x13: // read RAMRD - return uKeyboardC010 | (m_ramrd ? 0x80 : 0x00); + return (uKeyboardC010 & 0x7f) | (m_ramrd ? 0x80 : 0x00); case 0x14: // read RAMWRT - return uKeyboardC010 | (m_ramwrt ? 0x80 : 0x00); + return (uKeyboardC010 & 0x7f) | (m_ramwrt ? 0x80 : 0x00); case 0x15: // read INTCXROM - return uKeyboardC010 | (m_intcxrom ? 0x80 : 0x00); + return (uKeyboardC010 & 0x7f) | (m_intcxrom ? 0x80 : 0x00); case 0x16: // read ALTZP - return uKeyboardC010 | (m_altzp ? 0x80 : 0x00); + return (uKeyboardC010 & 0x7f) | (m_altzp ? 0x80 : 0x00); case 0x17: // read SLOTC3ROM - return uKeyboardC010 | (m_slotc3rom ? 0x80 : 0x00); + return (uKeyboardC010 & 0x7f) | (m_slotc3rom ? 0x80 : 0x00); case 0x18: // read 80STORE - return uKeyboardC010 | (m_80store ? 0x80 : 0x00); + return (uKeyboardC010 & 0x7f) | (m_80store ? 0x80 : 0x00); case 0x19: // read VBLBAR - return uKeyboardC010 | (m_screen->vblank() ? 0x00 : 0x80); + return (uKeyboardC010 & 0x7f) | (m_screen->vblank() ? 0x00 : 0x80); case 0x1a: // read TEXT - return uKeyboardC010 | (m_video->m_graphics ? 0x00 : 0x80); + return (uKeyboardC010 & 0x7f) | (m_video->m_graphics ? 0x00 : 0x80); case 0x1b: // read MIXED - return uKeyboardC010 | (m_video->m_mix ? 0x80 : 0x00); + return (uKeyboardC010 & 0x7f) | (m_video->m_mix ? 0x80 : 0x00); case 0x1c: // read PAGE2 - return uKeyboardC010 | (m_page2 ? 0x80 : 0x00); + return (uKeyboardC010 & 0x7f) | (m_page2 ? 0x80 : 0x00); case 0x1d: // read HIRES - return uKeyboardC010 | (m_video->m_hires ? 0x80 : 0x00); + return (uKeyboardC010 & 0x7f) | (m_video->m_hires ? 0x80 : 0x00); case 0x1e: // read ALTCHARSET - return uKeyboardC010 | (m_video->m_altcharset ? 0x80 : 0x00); + return (uKeyboardC010 & 0x7f) | (m_video->m_altcharset ? 0x80 : 0x00); case 0x1f: // read 80COL - return uKeyboardC010 | (m_video->m_80col ? 0x80 : 0x00); + return (uKeyboardC010 & 0x7f) | (m_video->m_80col ? 0x80 : 0x00); case 0x22: // TEXTCOL return m_textcol; @@ -2608,10 +2496,12 @@ return m_gameio->sw3_r() | uFloatingBus7; #if RUN_ADB_MICRO case 0x61: // button 0 or Open Apple - return m_gameio->sw0_r() | uFloatingBus7; + // HACK/TODO: the 65816 loses a race to the microcontroller on reset + if (m_adb_reset_freeze > 0) m_adb_reset_freeze--; + return m_gameio->sw0_r() | uFloatingBus7 | ((m_adb_p3_last & 0x20) ? 0x80 : 0); case 0x62: // button 1 or Option - return m_gameio->sw1_r() | uFloatingBus7; + return m_gameio->sw1_r() | uFloatingBus7 | ((m_adb_p3_last & 0x10) ? 0x80 : 0); case 0x63: // button 2 or SHIFT key return m_gameio->sw2_r() | uFloatingBus7; @@ -2937,6 +2827,7 @@ } m_clock_control = data & 0x7f; m_video->m_GSborder = data & 0xf; + m_rtc->ce_w(BIT(data, 7) ^ 1); if (data & 0x80) { process_clock(); @@ -4300,7 +4191,14 @@ u8 apple2gs_state::adbmicro_p3_in() { - return 0xc7; + if (m_is_rom3) + { + return 0x00; // TODO: 0x40 to remove Control Panel from the Control-Open Apple-Esc menu + } + else + { + return 0x07; + } } void apple2gs_state::adbmicro_p0_out(u8 data) @@ -4314,6 +4212,14 @@ void apple2gs_state::adbmicro_p2_out(u8 data) { + #if RUN_ADB_MICRO + if (!BIT(data, 5) && BIT(m_adb_p2_last, 5)) + { + m_adb_reset_freeze = 2; + m_maincpu->reset(); + m_video->m_newvideo = m_newvideo = 0x41; + } + if (!(data & 0x10)) { if (m_adbmicro->are_port_bits_output(0, 0xff)) @@ -4329,6 +4235,9 @@ { m_glu_kbd_y = data & 0xf; } + + m_adb_p2_last = data; + #endif } void apple2gs_state::adbmicro_p3_out(u8 data) @@ -4340,6 +4249,13 @@ m_macadb->adb_linechange_w(!m_adb_line); #endif } + +#if RUN_ADB_MICRO + if (m_adb_reset_freeze == 0) + { + m_adb_p3_last = data; + } +#endif } #if ADB_HLE void apple2gs_state::set_adb_line(int linestate) @@ -4359,7 +4275,6 @@ { m_glu_regs[GLU_KG_STATUS] &= ~KGS_COMMAND_FULL; m_glu_mcu_read_kgs = false; -// printf("MCU reads COMMAND = %02x (drop command full)\n", rv); } // prime for the next command register read to clear the command full flag @@ -4373,16 +4288,6 @@ void apple2gs_state::keyglu_mcu_write(u8 offset, u8 data) { - // eat ADB SRQ notices - this shouldn't be necessary and breaks ROM 0/1 :( - //if ((offset == GLU_DATA) && (data == 0x08)) - //{ - // return; - //} - -// if (m_glu_regs[offset] != data) -// { -// printf("MCU writes %02x to GLU reg %x (PC=%x)\n", data, offset, m_adbmicro->pc()); -// } m_glu_regs[offset] = data; switch (offset) @@ -4411,16 +4316,15 @@ break; case GLU_MOUSEX: - case GLU_MOUSEY: m_glu_regs[GLU_KG_STATUS] |= KGS_MOUSEX_FULL; m_glu_regs[GLU_SYSSTAT] |= GLU_STATUS_MOUSEIRQ; - if (offset == GLU_MOUSEX) - { - keyglu_regen_irqs(); - } + keyglu_regen_irqs(); m_glu_mouse_read_stat = false; // signal next read will be mouse X break; + case GLU_MOUSEY: + break; + case GLU_ANY_KEY_DOWN: // bit 7 is the actual flag here if (data & 0x80) { @@ -4433,9 +4337,7 @@ m_glu_regs[GLU_KG_STATUS] |= KGS_DATA_FULL; m_glu_regs[GLU_SYSSTAT] |= GLU_STATUS_DATAIRQ; keyglu_regen_irqs(); - m_glu_816_read_dstat = false; -// printf("MCU writes %02x to DATA\n", data); break; } } @@ -4475,6 +4377,7 @@ { m_glu_mouse_read_stat = 1; m_glu_regs[GLU_KG_STATUS] &= ~KGS_MOUSEX_FULL; + m_glu_regs[GLU_SYSSTAT] &= ~GLU_STATUS_MOUSEIRQ; keyglu_regen_irqs(); return m_glu_regs[GLU_MOUSEX]; } @@ -4567,7 +4470,6 @@ { bIRQ = true; } - if (bIRQ) { raise_irq(IRQS_ADB); @@ -4841,6 +4743,7 @@ config.set_maximum_quantum(attotime::from_hz(60)); M50741(config, m_adbmicro, A2GS_MASTER_CLOCK/8); + m_adbmicro->set_pullups<2>(0x20); m_adbmicro->read_p<0>().set(FUNC(apple2gs_state::adbmicro_p0_in)); m_adbmicro->write_p<0>().set(FUNC(apple2gs_state::adbmicro_p0_out)); m_adbmicro->read_p<1>().set(FUNC(apple2gs_state::adbmicro_p1_in)); @@ -4853,6 +4756,7 @@ #if ADB_HLE MACADB(config, m_macadb, A2GS_MASTER_CLOCK/8); m_macadb->set_mcu_mode(true); + m_macadb->set_iigs_mode(true); m_macadb->adb_data_callback().set(FUNC(apple2gs_state::set_adb_line)); #endif @@ -4877,7 +4781,7 @@ TIMER(config, "repttmr").configure_periodic(FUNC(apple2gs_state::ay3600_repeat), attotime::from_hz(15)); #endif - NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); + RTC3430042(config, m_rtc, XTAL(32'768)); APPLE2_VIDEO(config, m_video, A2GS_14M).set_screen(m_screen); @@ -4976,6 +4880,7 @@ m_ram->set_default_size("1280K").set_extra_options("256K,512K,768K,1M,2M,3M,4M,5M,6M,7M,8M").set_default_value(0x00); M50740(config.replace(), m_adbmicro, A2GS_MASTER_CLOCK/8); + m_adbmicro->set_pullups<2>(0x20); m_adbmicro->read_p<0>().set(FUNC(apple2gs_state::adbmicro_p0_in)); m_adbmicro->write_p<0>().set(FUNC(apple2gs_state::adbmicro_p0_out)); m_adbmicro->read_p<1>().set(FUNC(apple2gs_state::adbmicro_p1_in)); diff -Nru mame-0.250+dfsg.1/src/mame/apple/mac128.cpp mame-0.251+dfsg.1/src/mame/apple/mac128.cpp --- mame-0.250+dfsg.1/src/mame/apple/mac128.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/apple/mac128.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -144,7 +144,7 @@ m_iwm(*this, "fdc"), m_floppy(*this, "fdc:%d", 0U), m_mackbd(*this, "kbd"), - m_rtc(*this,"rtc"), + m_rtc(*this, "rtc"), m_screen(*this, "screen"), m_dac(*this, "macdac"), m_filter(*this, "dacfilter"), @@ -1182,6 +1182,8 @@ mac512ke(config); m_ram->set_default_size("128K"); + RTC3430040(config.replace(), m_rtc, 32.768_kHz_XTAL); + IWM(config.replace(), m_iwm, C7M); m_iwm->phases_cb().set(FUNC(mac128_state::phases_w)); m_iwm->devsel_cb().set(FUNC(mac128_state::devsel_w)); diff -Nru mame-0.250+dfsg.1/src/mame/apple/macadb.cpp mame-0.251+dfsg.1/src/mame/apple/macadb.cpp --- mame-0.250+dfsg.1/src/mame/apple/macadb.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/apple/macadb.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -152,10 +152,10 @@ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNUSED) /* keyboard Enter : */ PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27) PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Control") PORT_CODE(KEYCODE_LCONTROL) - PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Command / Open Apple") PORT_CODE(KEYCODE_RALT) + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Command / Open Apple") PORT_CODE(KEYCODE_LALT) PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE - PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Option / Solid Apple") PORT_CODE(KEYCODE_LALT) + PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Option / Solid Apple") PORT_CODE(KEYCODE_RALT) PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left Arrow") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right Arrow") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down Arrow") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) @@ -193,7 +193,8 @@ PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_UNUSED) // 0x5a PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) // 0x5b PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) // 0x5c - PORT_BIT(0xE000, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Reset / Power") PORT_CODE(KEYCODE_F12) // 0x5d (converted to 0x7f7f) + PORT_BIT(0xc000, IP_ACTIVE_HIGH, IPT_UNUSED) INPUT_PORTS_END macadb_device::macadb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) @@ -396,10 +397,15 @@ } } -// if ((codes[0] != 0xff) || (codes[1] != 0xff)) -// { -// printf("ADB keyboard: update %d keys %02x %02x\n", update, codes[0], codes[1]); -// } + // reset handling + if (codes[0] == 0x5d) + { + codes[0] = codes[1] = 0x7f; + } + else if (codes[0] == 0xdd) + { + codes[0] = codes[1] = 0xff; + } // figure out if there was a change if ((m_adb_currentkeys[0] != codes[0]) || (m_adb_currentkeys[1] != codes[1])) @@ -592,7 +598,7 @@ break; } - if (adb_pollkbd(0)) + if ((adb_pollkbd(0)) && (!m_bIsIIGSMode)) { m_adb_srqflag = true; } @@ -679,7 +685,7 @@ break; } - if (adb_pollmouse()) + if ((adb_pollmouse()) && (!m_bIsIIGSMode)) { m_adb_srqflag = true; } diff -Nru mame-0.250+dfsg.1/src/mame/apple/macadb.h mame-0.251+dfsg.1/src/mame/apple/macadb.h --- mame-0.250+dfsg.1/src/mame/apple/macadb.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/apple/macadb.h 2022-12-29 14:20:09.000000000 +0000 @@ -20,6 +20,10 @@ macadb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); void set_mcu_mode(bool bMCUMode) { m_bIsMCUMode = bMCUMode; } + // TODO: the IIgs microcontroller programs hate how we generate SRQs, and they already + // do round-robin polling so no data will be missed. This lets us turn off SRQs for that case. + // We should see if we can make them happier, or just work on LLE ADB devices... + void set_iigs_mode(bool bIIGSMode) { m_bIsIIGSMode = bIIGSMode; } auto via_clock_callback() { return write_via_clock.bind(); } auto via_data_callback() { return write_via_data.bind(); } @@ -44,7 +48,7 @@ virtual void device_reset() override; private: - bool m_bIsMCUMode; + bool m_bIsMCUMode, m_bIsIIGSMode; uint64_t m_last_adb_time; diff -Nru mame-0.250+dfsg.1/src/mame/apple/macpwrbk030.cpp mame-0.251+dfsg.1/src/mame/apple/macpwrbk030.cpp --- mame-0.250+dfsg.1/src/mame/apple/macpwrbk030.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/apple/macpwrbk030.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -200,9 +200,6 @@ emu_timer *m_6015_timer = nullptr; - WRITE_LINE_MEMBER(adb_irq_w) { m_adb_irq_pending = state; } - int m_adb_irq_pending = 0; - u16 mac_via_r(offs_t offset); void mac_via_w(offs_t offset, u16 data, u16 mem_mask); u16 mac_via2_r(offs_t offset); @@ -285,17 +282,32 @@ u8 m_pmu_via_bus = 0, m_pmu_ack = 0, m_pmu_req = 0; u8 pmu_data_r() { return m_pmu_via_bus; } - void pmu_data_w(u8 data) { m_pmu_via_bus = data; } + void pmu_data_w(u8 data) + { + // if the 68k has valid data on the bus, don't overwrite it + if (m_pmu_req) + { + m_pmu_via_bus = data; + } + } u8 pmu_comms_r() { return (m_pmu_req<<7); } void pmu_comms_w(u8 data) { - m_via1->write_cb1(BIT(data, 5)); - m_pmu_ack = BIT(data, 6); + m_via1->write_cb1(BIT(data, 5) ^ 1); + if (m_pmu_ack != BIT(data, 6)) + { + m_pmu_ack = BIT(data, 6); + machine().scheduler().synchronize(); + } } int m_adb_line = 0; void set_adb_line(int state) { m_adb_line = state; } u8 pmu_adb_r() { return (m_adb_line<<1); } - void pmu_adb_w(u8 data) { m_macadb->adb_linechange_w((data & 1) ^ 1); } + void pmu_adb_w(u8 data) + { + m_adb_line = (data & 1) ^ 1; + m_macadb->adb_linechange_w((data & 1) ^ 1); + } u8 pmu_in_r() { return 0x20; } // bit 5 is 0 if the Target Disk Mode should be enabled }; @@ -464,19 +476,14 @@ { u16 *line = &bitmap.pix(y); - for (int x = 0; x < 640; x+=8) + for (int x = 0; x < 640/4; x++) { - u8 const pixels = vram8[(y * 80) + (BYTE4_XOR_BE(x/8))]; - static const u16 palette[2] = { 0, 3 }; - - *line++ = palette[(pixels >> 7)&1]; - *line++ = palette[(pixels >> 6)&1]; - *line++ = palette[(pixels >> 5)&1]; - *line++ = palette[(pixels >> 4)&1]; - *line++ = palette[(pixels >> 3)&1]; - *line++ = palette[(pixels >> 2)&1]; - *line++ = palette[(pixels >> 1)&1]; - *line++ = palette[(pixels & 1)]; + static const u16 palette[4] = { 0, 1, 2, 3 }; + u8 const pixels = vram8[(y * 640/4) + (BYTE4_XOR_BE(x))]; + *line++ = palette[((pixels >> 6) & 3)]; + *line++ = palette[((pixels >> 4) & 3)]; + *line++ = palette[((pixels >> 2) & 3)]; + *line++ = palette[(pixels & 3)]; } } return 0; @@ -489,19 +496,10 @@ for (int y = 0; y < 480; y++) { u32 *line = &bitmap.pix(y); - for (int x = 0; x < 640; x+=8) + for (int x = 0; x < 640; x++) { - uint8_t const pixels = vram8[(y * 80) + (BYTE4_XOR_BE(x/8))]; - static const u32 palette[2] = { 0xffffffff, 0 }; - - *line++ = palette[(pixels >> 7) & 1]; - *line++ = palette[(pixels >> 6) & 1]; - *line++ = palette[(pixels >> 5) & 1]; - *line++ = palette[(pixels >> 4) & 1]; - *line++ = palette[(pixels >> 3) & 1]; - *line++ = palette[(pixels >> 2) & 1]; - *line++ = palette[(pixels >> 1) & 1]; - *line++ = palette[(pixels & 1)]; + u8 const pixels = vram8[(y * 640) + (BYTE4_XOR_BE(x))]; + *line++ = m_colors[pixels ^ 0xff]; } } @@ -603,7 +601,6 @@ m_via1->write_ca1(m_ca1_data); m_pmu->set_input_line(m50753_device::M50753_INT1_LINE, ASSERT_LINE); - m_macadb->adb_vblank(); } u16 macpb030_state::scsi_r(offs_t offset, u16 mem_mask) @@ -721,15 +718,15 @@ case 0xf2: if (mem_mask == 0xff000000) // DAC control { - m_clutoffs = data >> 24; + m_clutoffs = (data >> 24); m_count = 0; } else if (mem_mask == 0x00ff0000) // DAC data { - m_colors[m_count++] = (data >> 16) & 0xff; + m_colors[m_count++] = ((data >> 16) & 0x3f) << 2; if (m_count == 3) { - // printf("RAMDAC: color %d = %02x %02x %02x\n", m_rbv_clutoffs, m_rbv_colors[0], m_rbv_colors[1], m_rbv_colors[2]); + //printf("RAMDAC: color %d = %02x %02x %02x\n", m_clutoffs, m_colors[0], m_colors[1], m_colors[2]); m_wd_palette[m_clutoffs] = rgb_t(m_colors[0], m_colors[1], m_colors[2]); m_clutoffs++; m_count = 0; @@ -737,7 +734,7 @@ } else { - printf("macwd: Unknown DAC write, data %08x, mask %08x\n", data, mem_mask); + logerror("macwd: Unknown DAC write, data %08x, mask %08x\n", data, mem_mask); } break; @@ -766,7 +763,6 @@ map(0x50016000, 0x50017fff).rw(FUNC(macpb030_state::swim_r), FUNC(macpb030_state::swim_w)).mirror(0x01f00000); map(0x50024000, 0x50027fff).r(FUNC(macpb030_state::buserror_r)).mirror(0x01f00000); // bus error here to make sure we aren't mistaken for another decoder - map(0xfee08000, 0xfeffffff).ram().share("vram"); } @@ -878,7 +874,11 @@ void macpb030_state::mac_via2_out_b(u8 data) { - m_pmu_req = BIT(data, 2); + if (m_pmu_req != BIT(data, 2)) + { + m_pmu_req = BIT(data, 2); + machine().scheduler().synchronize(); + } } static INPUT_PORTS_START( macadb ) @@ -903,8 +903,6 @@ m_pmu->write_p<4>().set(FUNC(macpb030_state::pmu_adb_w)); m_pmu->read_in_p().set(FUNC(macpb030_state::pmu_in_r)); - config.set_perfect_quantum(m_maincpu); - SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60.15); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(1260)); @@ -1191,13 +1189,13 @@ ROM_REGION(0x1800, "pmu", ROMREGION_ERASE00) ROM_END - COMP(1991, macpb140, 0, 0, macpb140, macadb, macpb030_state, init_macpb140, "Apple Computer", "Macintosh PowerBook 140", MACHINE_NOT_WORKING) - COMP(1991, macpb170, macpb140, 0, macpb170, macadb, macpb030_state, init_macpb140, "Apple Computer", "Macintosh PowerBook 170", MACHINE_NOT_WORKING) - COMP(1992, macpb145, macpb140, 0, macpb145, macadb, macpb030_state, init_macpb140, "Apple Computer", "Macintosh PowerBook 145", MACHINE_NOT_WORKING) - COMP(1992, macpb145b, macpb140, 0, macpb170, macadb, macpb030_state, init_macpb140, "Apple Computer", "Macintosh PowerBook 145B", MACHINE_NOT_WORKING) - COMP(1992, macpb160, 0, 0, macpb160, macadb, macpb030_state, init_macpb160, "Apple Computer", "Macintosh PowerBook 160", MACHINE_NOT_WORKING) - COMP(1992, macpb180, macpb160, 0, macpb180, macadb, macpb030_state, init_macpb160, "Apple Computer", "Macintosh PowerBook 180", MACHINE_NOT_WORKING) - COMP(1992, macpb180c, macpb160, 0, macpb180c, macadb, macpb030_state, init_macpb160, "Apple Computer", "Macintosh PowerBook 180c", MACHINE_NOT_WORKING) +COMP(1991, macpb140, 0, 0, macpb140, macadb, macpb030_state, init_macpb140, "Apple Computer", "Macintosh PowerBook 140", MACHINE_NOT_WORKING) +COMP(1991, macpb170, macpb140, 0, macpb170, macadb, macpb030_state, init_macpb140, "Apple Computer", "Macintosh PowerBook 170", MACHINE_NOT_WORKING) +COMP(1992, macpb145, macpb140, 0, macpb145, macadb, macpb030_state, init_macpb140, "Apple Computer", "Macintosh PowerBook 145", MACHINE_NOT_WORKING) +COMP(1992, macpb145b, macpb140, 0, macpb170, macadb, macpb030_state, init_macpb140, "Apple Computer", "Macintosh PowerBook 145B", MACHINE_NOT_WORKING) +COMP(1992, macpb160, 0, 0, macpb160, macadb, macpb030_state, init_macpb160, "Apple Computer", "Macintosh PowerBook 160", MACHINE_NOT_WORKING) +COMP(1992, macpb180, macpb160, 0, macpb180, macadb, macpb030_state, init_macpb160, "Apple Computer", "Macintosh PowerBook 180", MACHINE_NOT_WORKING) +COMP(1992, macpb180c, macpb160, 0, macpb180c, macadb, macpb030_state, init_macpb160, "Apple Computer", "Macintosh PowerBook 180c", MACHINE_NOT_WORKING) - // PowerBook Duos (may or may not belong in this driver ultimately) - COMP(1992, macpd210, 0, 0, macpd210, macadb, macpb030_state, init_macpb160, "Apple Computer", "Macintosh PowerBook Duo 210", MACHINE_NOT_WORKING) +// PowerBook Duos (may or may not belong in this driver ultimately) +COMP(1992, macpd210, 0, 0, macpd210, macadb, macpb030_state, init_macpb160, "Apple Computer", "Macintosh PowerBook Duo 210", MACHINE_NOT_WORKING) diff -Nru mame-0.250+dfsg.1/src/mame/apple/macrtc.cpp mame-0.251+dfsg.1/src/mame/apple/macrtc.cpp --- mame-0.250+dfsg.1/src/mame/apple/macrtc.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/apple/macrtc.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -2,27 +2,45 @@ // copyright-holders:R. Belmont /*************************************************************************** - macrtc.c - the real-time clock & NVRAM chip used in early 680x0 Macs, - Apple part numbers 343-0040 (original) and 343-0042 (with extended PRAM) - - The IIgs has this chip also, but the VGC contains a relatively - sophisticated logic block that offloads the low-level serial comms - from the CPU, which makes it look quite different to software. + macrtc.cpp + Real-time clock & NVRAM chips used in early 680x0 Macs and the Apple IIgs. + Apple part numbers 343-0040 (original, 20 bytes of PRAM) and 343-0042-B (256 bytes of PRAM). + By R. Belmont, based on previous work by Nathan Woods and Raphael Nabet + + Commands and data are sent and received serially, bit 7 first. + For reading the chip, the data is valid after the falling edge of the clock. + For writing, the data must be valid before the falling edge of the clock. + + The time is the number of seconds since midnight on January 1, 1904. + + Commands: + R/W 00x0001 - Seconds (least significant byte) + R/W 00x0101 - Seconds (2nd byte) + R/W 00x1001 - Seconds (3rd byte) + R/W 00x1101 - Seconds (most significant byte) + 0 0110001 - Test register + 0 0110101 - Write protect bit (343-0040) (When set, only the WP bit itself can be changed) + 0 01101xx - Write protect bit (343-0042-B) + R/W 010aa01 - 4 PRAM addresses (aa is the address) + R/W 1aaaa01 - 16 PRAM addresses (aaaa is the address) + R/W 0111aaa - Extended PRAM address (aaa is the sector number. Sectors are 32 bytes) ***************************************************************************/ #include "emu.h" #include "macrtc.h" -#ifdef MAME_DEBUG -#define LOG_RTC 0 -#else -#define LOG_RTC 0 -#endif +#define LOG_GENERAL (1U << 0) +#define LOG_COMMANDS (1U << 1) + +//#define VERBOSE (LOG_COMMANDS) +#define LOG_OUTPUT_FUNC osd_printf_info + +#include "logmacro.h" enum { - RTC_STATE_NORMAL, + RTC_STATE_NORMAL = 0, RTC_STATE_WRITE, RTC_STATE_XPCOMMAND, RTC_STATE_XPWRITE @@ -33,21 +51,34 @@ //************************************************************************** // device type definition -DEFINE_DEVICE_TYPE(RTC3430042, rtc3430042_device, "rtc3430042", "Apple 343-0042 clock/PRAM") +DEFINE_DEVICE_TYPE(RTC3430040, rtc3430040_device, "rtc3430040", "Apple 343-0040 clock/PRAM") +DEFINE_DEVICE_TYPE(RTC3430042, rtc3430042_device, "rtc3430042", "Apple 343-0042-B clock/PRAM") //------------------------------------------------- // rtc4543_device - constructor //------------------------------------------------- -rtc3430042_device::rtc3430042_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, RTC3430042, tag, owner, clock), +rtc3430042_device::rtc3430042_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, bool hasBigPRAM) + : device_t(mconfig, type, tag, owner, clock), device_rtc_interface(mconfig, *this), device_nvram_interface(mconfig, *this), + m_is_big_PRAM(hasBigPRAM), + m_time_was_set(false), m_cko_cb(*this) { } +rtc3430042_device::rtc3430042_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : rtc3430042_device(mconfig, RTC3430042, tag, owner, clock, true) +{ +} + +rtc3430040_device::rtc3430040_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : rtc3430042_device(mconfig, RTC3430040, tag, owner, clock, false) +{ +} + void rtc3430042_device::device_resolve_objects() { m_cko_cb.resolve_safe(); @@ -66,35 +97,37 @@ m_cko = true; // state saving - save_item(NAME(m_rtc_rTCEnb)); - save_item(NAME(m_rtc_rTCClk)); - save_item(NAME(m_rtc_data_byte)); - save_item(NAME(m_rtc_bit_count)); - save_item(NAME(m_rtc_data_dir)); - save_item(NAME(m_rtc_data_out)); - save_item(NAME(m_rtc_cmd)); - save_item(NAME(m_rtc_write_protect)); - save_item(NAME(m_rtc_seconds)); + save_item(NAME(m_rTCEnb)); + save_item(NAME(m_rTCClk)); + save_item(NAME(m_data_byte)); + save_item(NAME(m_bit_count)); + save_item(NAME(m_data_dir)); + save_item(NAME(m_data_out)); + save_item(NAME(m_cmd)); + save_item(NAME(m_write_protect)); + save_item(NAME(m_test_mode)); + save_item(NAME(m_seconds)); save_item(NAME(m_pram)); - save_item(NAME(m_rtc_xpaddr)); - save_item(NAME(m_rtc_state)); + save_item(NAME(m_xpaddr)); + save_item(NAME(m_state)); save_item(NAME(m_data_latch)); save_item(NAME(m_cko)); + save_item(NAME(m_time_was_set)); } void rtc3430042_device::device_reset() { - m_rtc_rTCEnb = 0; - m_rtc_rTCClk = 0; - m_rtc_bit_count = 0; - m_rtc_data_dir = 0; - m_rtc_data_out = 0; - m_rtc_cmd = 0; - m_rtc_write_protect = 0; - m_rtc_state = 0; + m_rTCEnb = 0; + m_rTCClk = 0; + m_bit_count = 0; + m_data_dir = 0; + m_data_out = 0; + m_cmd = 0; + m_write_protect = 0; + m_state = 0; ce_w(1); - m_rtc_state = RTC_STATE_NORMAL; + m_state = RTC_STATE_NORMAL; } //------------------------------------------------- @@ -108,7 +141,9 @@ // seconds register increments following rising edge of CKO if (m_cko) + { advance_seconds(); + } } //------------------------------------------------- @@ -120,70 +155,75 @@ struct tm cur_time, mac_reference; uint32_t seconds; - cur_time.tm_sec = second; - cur_time.tm_min = minute; - cur_time.tm_hour = hour; - cur_time.tm_mday = day; - cur_time.tm_mon = month-1; - cur_time.tm_year = year+100; // assumes post-2000 current system time - cur_time.tm_isdst = 0; - - /* The count starts on 1st January 1904 */ - mac_reference.tm_sec = 0; - mac_reference.tm_min = 0; - mac_reference.tm_hour = 0; - mac_reference.tm_mday = 1; - mac_reference.tm_mon = 0; - mac_reference.tm_year = 4; - mac_reference.tm_isdst = 0; - - seconds = difftime(mktime(&cur_time), mktime(&mac_reference)); - - if (LOG_RTC) - logerror("second count 0x%lX\n", (unsigned long) seconds); - - m_rtc_seconds[0] = seconds & 0xff; - m_rtc_seconds[1] = (seconds >> 8) & 0xff; - m_rtc_seconds[2] = (seconds >> 16) & 0xff; - m_rtc_seconds[3] = (seconds >> 24) & 0xff; + if (m_time_was_set) + { + seconds = m_seconds[0] | (m_seconds[1] << 8) | (m_seconds[2] << 16) | (m_seconds[3] << 24); + seconds++; + } + else + { + cur_time.tm_sec = second; + cur_time.tm_min = minute; + cur_time.tm_hour = hour; + cur_time.tm_mday = day; + cur_time.tm_mon = month-1; + cur_time.tm_year = year+100; // assumes post-2000 current system time + cur_time.tm_isdst = 0; + + // The count starts on January 1, 1904 at midnight + mac_reference.tm_sec = 0; + mac_reference.tm_min = 0; + mac_reference.tm_hour = 0; + mac_reference.tm_mday = 1; + mac_reference.tm_mon = 0; + mac_reference.tm_year = 4; + mac_reference.tm_isdst = 0; + + seconds = difftime(mktime(&cur_time), mktime(&mac_reference)); + } + + LOGMASKED(LOG_GENERAL, "second count 0x%lX\n", (unsigned long) seconds); + + m_seconds[0] = seconds & 0xff; + m_seconds[1] = (seconds >> 8) & 0xff; + m_seconds[2] = (seconds >> 16) & 0xff; + m_seconds[3] = (seconds >> 24) & 0xff; } -/* write the rTCEnb state */ +/* write the chip enable state */ WRITE_LINE_MEMBER( rtc3430042_device::ce_w ) { - if (state && (! m_rtc_rTCEnb)) + if (state && (! m_rTCEnb)) { - /* rTCEnb goes high (inactive) */ - m_rtc_rTCEnb = 1; + m_rTCEnb = 1; /* abort current transmission */ - m_rtc_data_byte = m_rtc_bit_count = m_rtc_data_dir = m_rtc_data_out = 0; - m_rtc_state = RTC_STATE_NORMAL; + m_data_byte = m_bit_count = m_data_dir = m_data_out = 0; + m_state = RTC_STATE_NORMAL; } - else if ((!state) && m_rtc_rTCEnb) + else if ((!state) && m_rTCEnb) { - /* rTCEnb goes low (active) */ - m_rtc_rTCEnb = 0; + m_rTCEnb = 0; /* abort current transmission */ - m_rtc_data_byte = m_rtc_bit_count = m_rtc_data_dir = m_rtc_data_out = 0; - m_rtc_state = RTC_STATE_NORMAL; + m_data_byte = m_bit_count = m_data_dir = m_data_out = 0; + m_state = RTC_STATE_NORMAL; } - m_rtc_rTCEnb = state; + m_rTCEnb = state; } WRITE_LINE_MEMBER( rtc3430042_device::clk_w ) { - if ((!state) && (m_rtc_rTCClk)) + if ((!state) && (m_rTCClk)) { rtc_shift_data(m_data_latch & 0x01); } - m_rtc_rTCClk = state; + m_rTCClk = state; } READ_LINE_MEMBER( rtc3430042_device::data_r ) { - return m_rtc_data_out; + return m_data_out; } WRITE_LINE_MEMBER( rtc3430042_device::data_w ) @@ -191,184 +231,188 @@ m_data_latch = state; } -/* shift data (called on rTCClk high-to-low transition (?)) */ +/* shift data (called on rTCClk high-to-low transition) */ void rtc3430042_device::rtc_shift_data(int data) { - if (m_rtc_rTCEnb) - /* if enable line inactive (high), do nothing */ + // Chip enable must be asserted for the chip to listen + if (m_rTCEnb) + { return; + } - if (m_rtc_data_dir) - { /* RTC -> VIA transmission */ - m_rtc_data_out = (m_rtc_data_byte >> --m_rtc_bit_count) & 0x01; - if (LOG_RTC) - logerror("RTC shifted new data %d\n", m_rtc_data_out); + // sending data to the host + if (m_data_dir) + { + m_data_out = (m_data_byte >> --m_bit_count) & 0x01; + LOGMASKED(LOG_GENERAL, "RTC shifted new data %d\n", m_data_out); } else - { /* VIA -> RTC transmission */ - m_rtc_data_byte = (m_rtc_data_byte << 1) | (data ? 1 : 0); + { + // receiving data from the host + m_data_byte = (m_data_byte << 1) | (data ? 1 : 0); - if (++m_rtc_bit_count == 8) - { /* if one byte received, send to command interpreter */ - rtc_execute_cmd(m_rtc_data_byte); + m_bit_count++; + if (m_bit_count == 8) + { + // got a byte, send it to the state machine + rtc_execute_cmd(m_data_byte); } } } -/* Executes a command. -Called when the first byte after "enable" is received, and when the data byte after a write command -is received. */ +/* Executes a command. Called when the first byte after "enable" is received, and + when the data byte after a write command is received. */ void rtc3430042_device::rtc_execute_cmd(int data) { int i; - if (LOG_RTC) - printf("rtc_execute_cmd: data=%x, state=%x\n", data, m_rtc_state); + LOGMASKED(LOG_COMMANDS, "rtc_execute_cmd: data=%x, state=%x\n", data, m_state); - if (m_rtc_state == RTC_STATE_XPCOMMAND) + if (m_state == RTC_STATE_XPCOMMAND) { - m_rtc_xpaddr = ((m_rtc_cmd & 7)<<5) | ((data&0x7c)>>2); - if ((m_rtc_cmd & 0x80) != 0) + m_xpaddr = ((m_cmd & 7)<<5) | ((data&0x7c)>>2); + if ((m_cmd & 0x80) != 0) { // read command - if (LOG_RTC) - printf("RTC: Reading extended address %x = %x\n", m_rtc_xpaddr, m_pram[m_rtc_xpaddr]); + LOGMASKED(LOG_COMMANDS, "RTC: Reading extended address %x = %x\n", m_xpaddr, m_pram[m_xpaddr]); - m_rtc_data_dir = 1; - m_rtc_data_byte = m_pram[m_rtc_xpaddr]; - m_rtc_state = RTC_STATE_NORMAL; + m_data_dir = 1; + m_data_byte = m_pram[m_xpaddr]; + m_state = RTC_STATE_NORMAL; } else { // write command - m_rtc_state = RTC_STATE_XPWRITE; - m_rtc_data_byte = 0; - m_rtc_bit_count = 0; + m_state = RTC_STATE_XPWRITE; + m_data_byte = 0; + m_bit_count = 0; } } - else if (m_rtc_state == RTC_STATE_XPWRITE) + else if (m_state == RTC_STATE_XPWRITE) { - if (LOG_RTC) - printf("RTC: writing %x to extended address %x\n", data, m_rtc_xpaddr); - m_pram[m_rtc_xpaddr] = data; - m_rtc_state = RTC_STATE_NORMAL; + LOGMASKED(LOG_COMMANDS, "RTC: writing %x to extended address %x\n", data, m_xpaddr); + m_pram[m_xpaddr] = data; + m_state = RTC_STATE_NORMAL; } - else if (m_rtc_state == RTC_STATE_WRITE) + else if (m_state == RTC_STATE_WRITE) { - m_rtc_state = RTC_STATE_NORMAL; + m_state = RTC_STATE_NORMAL; - /* Writing an RTC register */ - i = (m_rtc_cmd >> 2) & 0x1f; - if (m_rtc_write_protect && (i != 13)) - /* write-protection : only write-protect can be written again */ + // Register write + i = (m_cmd >> 2) & 0x1f; + if (m_write_protect && (i != 13)) + { return; + } + switch(i) { - case 0: case 1: case 2: case 3: /* seconds register */ - case 4: case 5: case 6: case 7: /* ??? (not described in IM III) */ - { - /* after various tries, I assumed m_rtc_seconds[4+i] is mapped to m_rtc_seconds[i] */ - if (LOG_RTC) - logerror("RTC clock write, address = %X, data = %X\n", i, (int) m_rtc_data_byte); - m_rtc_seconds[i & 3] = m_rtc_data_byte; - - // TODO: call the base class's time set here - } + case 0: case 1: case 2: case 3: // seconds register + case 4: case 5: case 6: case 7: // bit 4 is don't care + LOGMASKED(LOG_COMMANDS, "RTC clock write, address = %X, data = %X\n", i, (int)m_data_byte); + m_seconds[i & 3] = m_data_byte; + m_time_was_set = true; break; - case 8: case 9: case 10: case 11: /* RAM address $10-$13 */ - if (LOG_RTC) - printf("PRAM write, address = %X, data = %X\n", i, (int) m_rtc_data_byte); - m_pram[i] = m_rtc_data_byte; + case 8: case 9: case 10: case 11: // PRAM addresses 0x10-0x13 + LOGMASKED(LOG_COMMANDS, "PRAM write, address = %X, data = %X\n", i, (int)m_data_byte); + m_pram[i] = m_data_byte; break; case 12: - /* Test register - do nothing */ - if (LOG_RTC) - logerror("RTC write to test register, data = %X\n", (int) m_rtc_data_byte); + // Test register - resets the seconds counter and increments it on the raw clock (32768 Hz) instead of once a second (not implemented) + LOGMASKED(LOG_COMMANDS, "RTC write to test register, data = %X\n", (int)m_data_byte); + m_test_mode = BIT(m_data_byte, 7); break; case 13: - /* Write-protect register */ - if (LOG_RTC) - printf("RTC write to write-protect register, data = %X\n", (int) m_rtc_data_byte&0x80); - m_rtc_write_protect = (m_rtc_data_byte & 0x80) ? true : false; + // Write protect - when set, all registers become read-only except this one + if (!m_is_big_PRAM) + { + if (m_cmd == 0x35) // b00110101 for 343-0040 + { + LOGMASKED(LOG_COMMANDS, "RTC write to write-protect register, data = %X\n", (int)m_data_byte & 0x80); + m_write_protect = BIT(m_data_byte, 7); + } + else + { + logerror("macrtc: 343-0040 illegal write protect command %02x\n", m_cmd); + } + } + else + { + LOGMASKED(LOG_COMMANDS, "RTC write to write-protect register, data = %X\n", (int)m_data_byte & 0x80); + m_write_protect = BIT(m_data_byte, 7); + } break; - case 16: case 17: case 18: case 19: /* RAM address $00-$0f */ + case 16: case 17: case 18: case 19: // PRAM addresses 0x00-0x0f case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: - if (LOG_RTC) - printf("PRAM write, address = %X, data = %X\n", i, (int) m_rtc_data_byte); - m_pram[i] = m_rtc_data_byte; + LOGMASKED(LOG_COMMANDS, "PRAM write, address = %X, data = %X\n", i, (int)m_data_byte); + m_pram[i] = m_data_byte; break; default: - printf("Unknown RTC write command : %X, data = %d\n", (int) m_rtc_cmd, (int) m_rtc_data_byte); + LOGMASKED(LOG_COMMANDS, "Unknown RTC write command : %X, data = %d\n", (int)m_cmd, (int)m_data_byte); break; } } else { - // always save this byte to m_rtc_cmd - m_rtc_cmd = m_rtc_data_byte; + // always save this byte to m_cmd + m_cmd = m_data_byte; - if ((m_rtc_cmd & 0x78) == 0x38) // extended command + if ((m_cmd & 0x78) == 0x38) // extended command { - m_rtc_state = RTC_STATE_XPCOMMAND; - m_rtc_data_byte = 0; - m_rtc_bit_count = 0; + m_state = RTC_STATE_XPCOMMAND; + m_data_byte = 0; + m_bit_count = 0; } else { - if (m_rtc_cmd & 0x80) + if (m_cmd & 0x80) { - m_rtc_state = RTC_STATE_NORMAL; + m_state = RTC_STATE_NORMAL; - /* Reading an RTC register */ - m_rtc_data_dir = 1; - i = (m_rtc_cmd >> 2) & 0x1f; + // RTC register read + m_data_dir = 1; + i = (m_cmd >> 2) & 0x1f; switch(i) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: - m_rtc_data_byte = m_rtc_seconds[i & 3]; - if (LOG_RTC) - printf("RTC clock read, address = %X -> data = %X\n", i, m_rtc_data_byte); + m_data_byte = m_seconds[i & 3]; + LOGMASKED(LOG_COMMANDS, "RTC clock read, address = %X -> data = %X\n", i, m_data_byte); break; case 8: case 9: case 10: case 11: - if (LOG_RTC) - printf("PRAM read, address = %X data = %x\n", i, m_pram[i]); - m_rtc_data_byte = m_pram[i]; + LOGMASKED(LOG_COMMANDS, "PRAM read, address = %X data = %x\n", i, m_pram[i]); + m_data_byte = m_pram[i]; break; case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: - if (LOG_RTC) - printf("PRAM read, address = %X data = %x\n", i, m_pram[i]); - m_rtc_data_byte = m_pram[i]; + LOGMASKED(LOG_COMMANDS, "PRAM read, address = %X data = %x\n", i, m_pram[i]); + m_data_byte = m_pram[i]; break; default: - if (LOG_RTC) - logerror("Unknown RTC read command : %X\n", (int) m_rtc_cmd); - m_rtc_data_byte = 0; + LOGMASKED(LOG_COMMANDS, "Unknown RTC read command : %X\n", (int)m_cmd); + m_data_byte = 0; break; } } else { - /* Writing an RTC register */ - /* wait for extra data byte */ - if (LOG_RTC) - logerror("RTC write, waiting for data byte : %X\n", (int) m_rtc_cmd); - m_rtc_state = RTC_STATE_WRITE; - m_rtc_data_byte = 0; - m_rtc_bit_count = 0; + // RTC register write - wait for data byte + LOGMASKED(LOG_COMMANDS, "RTC write, waiting for data byte : %X\n", (int)m_cmd); + m_state = RTC_STATE_WRITE; + m_data_byte = 0; + m_bit_count = 0; } } } @@ -390,3 +434,15 @@ size_t actual; return !file.write(m_pram, 0x100, actual) && actual == 0x100; } + +bool rtc3430040_device::nvram_read(util::read_stream &file) +{ + size_t actual; + return !file.read(m_pram, 20, actual) && actual == 20; +} + +bool rtc3430040_device::nvram_write(util::write_stream &file) +{ + size_t actual; + return !file.write(m_pram, 20, actual) && actual == 20; +} diff -Nru mame-0.250+dfsg.1/src/mame/apple/macrtc.h mame-0.251+dfsg.1/src/mame/apple/macrtc.h --- mame-0.250+dfsg.1/src/mame/apple/macrtc.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/apple/macrtc.h 2022-12-29 14:20:09.000000000 +0000 @@ -25,8 +25,11 @@ public device_rtc_interface, public device_nvram_interface { + friend class rtc3430040_device; + public: // construction/destruction + rtc3430042_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, bool hasBigPRAM); rtc3430042_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); DECLARE_WRITE_LINE_MEMBER( ce_w ); @@ -55,35 +58,41 @@ TIMER_CALLBACK_MEMBER(half_seconds_tick); private: + bool m_is_big_PRAM; + bool m_time_was_set; + devcb_write_line m_cko_cb; /* state of rTCEnb and rTCClk lines */ - uint8_t m_rtc_rTCEnb = 0; - uint8_t m_rtc_rTCClk = 0; + u8 m_rTCEnb = 0; + u8 m_rTCClk = 0; /* serial transmit/receive register : bits are shifted in/out of this byte */ - uint8_t m_rtc_data_byte = 0; + u8 m_data_byte = 0; /* serial transmitted/received bit count */ - uint8_t m_rtc_bit_count = 0; + u8 m_bit_count = 0; /* direction of the current transfer (0 : VIA->RTC, 1 : RTC->VIA) */ - uint8_t m_rtc_data_dir = 0; + u8 m_data_dir = 0; /* when rtc_data_dir == 1, state of rTCData as set by RTC (-> data bit seen by VIA) */ - uint8_t m_rtc_data_out = 0; + u8 m_data_out = 0; /* set to 1 when command in progress */ - uint8_t m_rtc_cmd = 0; + u8 m_cmd = 0; /* write protect flag */ - uint8_t m_rtc_write_protect = 0; + u8 m_write_protect = 0; + + // test mode flag + u8 m_test_mode = 0; /* internal seconds register */ - uint8_t m_rtc_seconds[/*8*/4]{}; + u8 m_seconds[/*8*/4]{}; /* 20-byte long PRAM, or 256-byte long XPRAM */ - uint8_t m_pram[256]{}; + u8 m_pram[256]{}; /* current extended address and RTC state */ - uint8_t m_rtc_xpaddr = 0; - uint8_t m_rtc_state = 0; - uint8_t m_data_latch = 0; + u8 m_xpaddr = 0; + u8 m_state = 0; + u8 m_data_latch = 0; bool m_cko = false; // timers @@ -93,8 +102,19 @@ void rtc_execute_cmd(int data); }; +class rtc3430040_device: public rtc3430042_device +{ +public: + rtc3430040_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual bool nvram_read(util::read_stream &file) override; + virtual bool nvram_write(util::write_stream &file) override; +}; + // device type definition +DECLARE_DEVICE_TYPE(RTC3430040, rtc3430040_device) DECLARE_DEVICE_TYPE(RTC3430042, rtc3430042_device) #endif // MAME_MACHINE_MACRTC_H diff -Nru mame-0.250+dfsg.1/src/mame/arcade.flt mame-0.251+dfsg.1/src/mame/arcade.flt --- mame-0.250+dfsg.1/src/mame/arcade.flt 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/arcade.flt 2022-12-29 14:20:09.000000000 +0000 @@ -17,6 +17,7 @@ alpha/equites.cpp alpha/meijinsn.cpp alpha/shougi.cpp +alpha/splendor.cpp amiga/alg.cpp amiga/arsystems.cpp amiga/cubo.cpp @@ -644,7 +645,6 @@ misc/beaminv.cpp misc/beezer.cpp misc/belatra.cpp -misc/bgt.cpp misc/bingoman.cpp misc/bingor.cpp misc/blitz68k.cpp @@ -873,6 +873,7 @@ misc/skyarmy.cpp misc/skylncr.cpp misc/sliver.cpp +misc/smd2144c.cpp misc/smotor.cpp misc/smsmcorp.cpp misc/sothello.cpp @@ -1211,6 +1212,7 @@ sega/kopunch.cpp sega/lindbergh.cpp sega/megadriv_acbl.cpp +sega/megadriv_sunmix.cpp sega/megaplay.cpp sega/megatech.cpp sega/model1.cpp diff -Nru mame-0.250+dfsg.1/src/mame/aristocrat/aristmk6.cpp mame-0.251+dfsg.1/src/mame/aristocrat/aristmk6.cpp --- mame-0.250+dfsg.1/src/mame/aristocrat/aristmk6.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/aristocrat/aristmk6.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,25 @@ // license:BSD-3-Clause // copyright-holders:Angelo Salese -/* +/************************************************************************************************** + +Notes: +- most BIOSes needs SH-4 MMU +- exception is with earlier games/BIOSes, for example: + mamefoo scatmag2sa -bios au-sa1 + will run the program up to "vidgam.c: could not set the desired video mode" + bp 800795a, 1, {r0=0;g} +- "v_scene.c: Could not initialize Display Manager" & "spin.c: cannot load assets", + both related to PLX controller not DMA-ing? + +TODO: +- Identify irq sources; +- Irq acknowledge doesn't work as intended; +- Emulate PLX9054 controller & PCI root; +- PMX1 likely runs under PCI bus too; +- Eventually gets to "flyback" errors, pings $12000130-$3f for strobe and/or irq enable. + Flyback is an alias for vblank, cfr. Acorn Archimedes. + +=================================================================================================== Aristocrat MK6 (2000) Product numbers: 410480, 410481, 410556, 410557 @@ -68,7 +87,7 @@ Victorian games (none are dumped) use either VLC or QCOM depending on the game and/or the operator the machines were designed for. Victoria had two "rival" gaming operators during the MK6's lifetime. -*/ +**************************************************************************************************/ #include "emu.h" #include "cpu/sh/sh4.h" @@ -102,18 +121,13 @@ uint8_t test_r(offs_t offset); void eeprom_w(uint64_t data); uint64_t hwver_r(); - uint32_t screen_update_aristmk6(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); virtual void video_start() override; virtual void machine_reset() override; void aristmk6_map(address_map &map); void aristmk6_port(address_map &map); -#if 0 - u32 m_test_x = 0, m_test_y = 0, m_start_offs = 0; - u8 m_type = 0; -#endif - u8 irl0pend = 0, irl0en = 0; u8 irl1pend = 0, irl1en = 0; u8 irl2pend = 0, irl2en = 0; // UARTs ? @@ -137,16 +151,13 @@ irl0pend = irl0en = irl1pend = irl1en = irl2pend = irl2en = irl3pend0 = irl3en0 = irl3pend1 = irl3en1 = 0; } -uint32_t aristmk6_state::screen_update_aristmk6(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +uint32_t aristmk6_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { #if 0 int x,y,count; const uint8_t *blit_ram = memregion("maincpu")->base(); - - if (machine().input().code_pressed(KEYCODE_U)) { - irl2pend |= 2; - testIrq(); - } + static u32 m_test_x = 0, m_test_y = 0, m_start_offs = 0; + static u8 m_type = 0; if(machine().input().code_pressed(KEYCODE_Z)) m_test_x++; @@ -220,26 +231,37 @@ } #else +/* + if (machine().input().code_pressed_once(KEYCODE_U)) + { + irl2pend |= 2; + testIrq(); + machine().debug_break(); + } +*/ + + // TODO: honor cliprect, remove count variable, RGB565 format is unconfirmed, likely double buffered int count = 0; - for (int y = 0;y < 480;y++) + for (int y = 0; y < 480; y++) { - for (int x = 0;x < 640/2;x++) + for (int x = 0; x < 640 / 2; x++) { uint64_t pix = m_vram[count]; uint32_t pix1; - int col; + u8 r, g, b; pix1 = pix & 0xffffffff; - col = 0; - if (pix1) col = 1; - bitmap.pix(y, x*2) = m_palette->pen(col); + r = pal5bit((pix1 & 0x001f) >> 0); + g = pal6bit((pix1 & 0x07e0) >> 5); + b = pal5bit((pix1 & 0xf800) >> 11); + bitmap.pix(y, x * 2) = r | g << 8 | b << 16; pix1 = pix >> 32; - col = 0; - if (pix1) col = 1; - bitmap.pix(y, x*2+1) = m_palette->pen(col); - + r = pal5bit((pix1 & 0x001f) >> 0); + g = pal6bit((pix1 & 0x07e0) >> 5); + b = pal5bit((pix1 & 0xf800) >> 11); + bitmap.pix(y, x * 2 + 1) = r | g << 8 | b << 16; count++; } @@ -356,6 +378,7 @@ map(0x11000000, 0x1107ffff).ram(); // SRAM1 512KB map(0x11800000, 0x1187ffff).ram(); // SRAM2 512KB // 12000xxx main control registers area +// map(0x12000000, another eeprom or SPI bus map(0x12000010, 0x12000017).w(FUNC(aristmk6_state::eeprom_w)); map(0x12000078, 0x1200007f).nopw(); // watchdog ?? map(0x12000080, 0x12000087).nopw(); // 0-1-2 written here repeatedly, diag LED or smth ? @@ -364,6 +387,7 @@ map(0x12000108, 0x12000127).w(FUNC(aristmk6_state::irqen_w)); map(0x12400010, 0x12400017).rw(m_uart1, FUNC(ns16550_device::ins8250_r), FUNC(ns16550_device::ins8250_w)); map(0x12400018, 0x1240001f).rw(m_uart0, FUNC(ns16550_device::ins8250_r), FUNC(ns16550_device::ins8250_w)); +// map(0x13000000 MMIO space for PLX9054? map(0x13800000, 0x13800007).r(FUNC(aristmk6_state::test_r)); } @@ -409,7 +433,7 @@ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ screen.set_size(640, 480); screen.set_visarea(0, 640-1, 0, 480-1); - screen.set_screen_update(FUNC(aristmk6_state::screen_update_aristmk6)); + screen.set_screen_update(FUNC(aristmk6_state::screen_update)); PALETTE(config, m_palette).set_entries(0x1000); } diff -Nru mame-0.250+dfsg.1/src/mame/atari/nl_flyball.cpp mame-0.251+dfsg.1/src/mame/atari/nl_flyball.cpp --- mame-0.250+dfsg.1/src/mame/atari/nl_flyball.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/atari/nl_flyball.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Ryan Holtz, Ivan Vangelista // // Netlist for Atari's Flyball diff -Nru mame-0.250+dfsg.1/src/mame/atari/nl_flyball.h mame-0.251+dfsg.1/src/mame/atari/nl_flyball.h --- mame-0.250+dfsg.1/src/mame/atari/nl_flyball.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/atari/nl_flyball.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Ivan Vangelista, Ryan Holtz #ifndef MAME_AUDIO_NL_FLYBALL_H #define MAME_AUDIO_NL_FLYBALL_H diff -Nru mame-0.250+dfsg.1/src/mame/atari/sprint8.cpp mame-0.251+dfsg.1/src/mame/atari/sprint8.cpp --- mame-0.250+dfsg.1/src/mame/atari/sprint8.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/atari/sprint8.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -15,7 +15,7 @@ void sprint8_state::set_collision(int n) { - if (m_collision_reset == 0) + if (!m_collision_reset) { m_maincpu->set_input_line(0, ASSERT_LINE); @@ -26,42 +26,40 @@ TIMER_DEVICE_CALLBACK_MEMBER(sprint8_state::input_callback) { - static const char *const dialnames[] = { "DIAL1", "DIAL2", "DIAL3", "DIAL4", "DIAL5", "DIAL6", "DIAL7", "DIAL8" }; - for (int i = 0; i < 8; i++) { - uint8_t val = ioport(dialnames[i])->read() >> 4; - - signed char delta = (val - m_dial[i]) & 15; + uint8_t const val = m_dial[i]->read() >> 4; - if (delta & 8) - delta |= 0xf0; /* extend sign to 8 bits */ + int8_t const delta = util::sext((val - m_prev_dial[i]) & 15, 4); - m_steer_flag[i] = (delta != 0); - - if (delta > 0) - m_steer_dir[i] = 0; + // steer flag + if (delta) + m_steering[i] |= 0x04; + else + m_steering[i] &= ~0x04; + // steer dir if (delta < 0) - m_steer_dir[i] = 1; + m_steering[i] |= 0x02; + else if (delta > 0) + m_steering[i] &= ~0x02; - m_dial[i] = val; + m_prev_dial[i] = val; } } void sprint8_state::machine_start() { - save_item(NAME(m_steer_dir)); - save_item(NAME(m_steer_flag)); + save_item(NAME(m_steering)); save_item(NAME(m_collision_reset)); save_item(NAME(m_collision_index)); - save_item(NAME(m_dial)); + save_item(NAME(m_prev_dial)); save_item(NAME(m_team)); } void sprint8_state::machine_reset() { - m_collision_reset = 0; + m_collision_reset = false; m_collision_index = 0; } @@ -74,19 +72,7 @@ uint8_t sprint8_state::input_r(offs_t offset) { - static const char *const portnames[] = { "P1", "P2", "P3", "P4", "P5", "P6", "P7", "P8" }; - uint8_t val = ioport(portnames[offset])->read(); - - if (m_steer_dir[offset]) - { - val |= 0x02; - } - if (m_steer_flag[offset]) - { - val |= 0x04; - } - - return val; + return m_in[offset]->read() | m_steering[offset]; } @@ -130,112 +116,29 @@ map(0xf800, 0xffff).rom(); } +#define SPRINT8_PLAYER_INPUT(player) \ + PORT_START("P" #player) \ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN ## player ) \ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR */ \ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG */ \ + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(player) PORT_NAME("%p Accelerate") \ + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(player) PORT_NAME("%p Gear Shift") PORT_TOGGLE \ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) \ + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) \ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) \ + \ + PORT_START("DIAL" #player) \ + PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(player) static INPUT_PORTS_START( sprint8 ) - - PORT_START("P1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR P1 */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG P1 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR P2 */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG P2 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P3") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN3 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR P3 */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG P3 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P4") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN4 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR P4 */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG P4 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P5") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN5 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR P5 */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG P5 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(5) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(5) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) - - PORT_START("P6") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN6 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR P6 */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG P6 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(6) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(6) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P7") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN7 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR P7 */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG P7 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(7) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(7) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P8") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN8 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR P8 */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG P8 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(8) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(8) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("DIAL1") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) - - PORT_START("DIAL2") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2) - - PORT_START("DIAL3") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(3) - - PORT_START("DIAL4") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(4) - - PORT_START("DIAL5") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(5) - - PORT_START("DIAL6") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(6) - - PORT_START("DIAL7") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(7) - - PORT_START("DIAL8") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(8) + SPRINT8_PLAYER_INPUT( 1 ) + SPRINT8_PLAYER_INPUT( 2 ) + SPRINT8_PLAYER_INPUT( 3 ) + SPRINT8_PLAYER_INPUT( 4 ) + SPRINT8_PLAYER_INPUT( 5 ) + SPRINT8_PLAYER_INPUT( 6 ) + SPRINT8_PLAYER_INPUT( 7 ) + SPRINT8_PLAYER_INPUT( 8 ) PORT_START("IN0") PORT_DIPNAME( 0x0f, 0x08, "Play Time" ) @@ -263,138 +166,27 @@ PORT_START("VBLANK") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") - /* this is actually a variable resistor */ + // this is actually a variable resistor PORT_START("R132") PORT_ADJUSTER(65, "R132 - Crash & Screech Volume") - INPUT_PORTS_END static INPUT_PORTS_START( sprint8p ) + PORT_INCLUDE( sprint8 ) - PORT_START("P1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR P1 */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG P1 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR P2 */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG P2 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P3") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN3 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR P3 */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG P3 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P4") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN4 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR P4 */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG P4 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P5") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN5 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR P5 */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG P5 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(5) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(5) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) - - PORT_START("P6") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN6 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR P6 */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG P6 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(6) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(6) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P7") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN7 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR P7 */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG P7 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(7) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(7) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P8") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN8 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER DIR P8 */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* STEER FLAG P8 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(8) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(8) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("DIAL1") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) - - PORT_START("DIAL2") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2) - - PORT_START("DIAL3") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(3) - - PORT_START("DIAL4") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(4) - - PORT_START("DIAL5") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(5) - - PORT_START("DIAL6") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(6) - - PORT_START("DIAL7") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(7) - - PORT_START("DIAL8") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(8) - - PORT_START("IN0") + PORT_MODIFY("IN0") PORT_DIPNAME( 0x03, 0x03, "Play Time" ) PORT_DIPSETTING( 0x00, "54 seconds" ) PORT_DIPSETTING( 0x01, "108 seconds" ) PORT_DIPSETTING( 0x03, "216 seconds" ) PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("IN1") + PORT_MODIFY("IN1") PORT_DIPNAME( 0x01, 0x01, "Play Mode" ) PORT_DIPSETTING( 0x00, "Chase" ) PORT_DIPSETTING( 0x01, "Tag" ) - - PORT_START("VBLANK") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") - - /* this is actually a variable resistor */ - PORT_START("R132") - PORT_ADJUSTER(65, "R132 - Crash & Screech Volume") - + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) INPUT_PORTS_END diff -Nru mame-0.250+dfsg.1/src/mame/atari/sprint8.h mame-0.251+dfsg.1/src/mame/atari/sprint8.h --- mame-0.250+dfsg.1/src/mame/atari/sprint8.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/atari/sprint8.h 2022-12-29 14:20:09.000000000 +0000 @@ -25,7 +25,9 @@ m_video_ram(*this, "video_ram"), m_pos_h_ram(*this, "pos_h_ram"), m_pos_v_ram(*this, "pos_v_ram"), - m_pos_d_ram(*this, "pos_d_ram") + m_pos_d_ram(*this, "pos_d_ram"), + m_in(*this, "P%u", 1U), + m_dial(*this, "DIAL%u", 1U) { } void sprint8(machine_config &config); @@ -67,12 +69,14 @@ required_shared_ptr m_pos_v_ram; required_shared_ptr m_pos_d_ram; - int m_steer_dir[8]{}; - int m_steer_flag[8]{}; - int m_collision_reset = 0; - int m_collision_index = 0; - uint8_t m_dial[8]{}; - int m_team = 0; + required_ioport_array<8> m_in; + required_ioport_array<8> m_dial; + + uint8_t m_steering[8]{}; + bool m_collision_reset = false; + uint8_t m_collision_index = 0; + uint8_t m_prev_dial[8]{}; + bool m_team = false; tilemap_t* m_tilemap1 = nullptr; tilemap_t* m_tilemap2 = nullptr; diff -Nru mame-0.250+dfsg.1/src/mame/atari/starshp1.cpp mame-0.251+dfsg.1/src/mame/atari/starshp1.cpp --- mame-0.250+dfsg.1/src/mame/atari/starshp1.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/atari/starshp1.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -195,7 +195,7 @@ PORT_DIPNAME( 0x20, 0x20, "Extended Play" ) PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x20, DEF_STR( Yes ) ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) // Speed lever - spring-returned to SLOW unless held down for FAST + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Thrust Control") // Speed lever - spring-returned to SLOW unless held down for FAST PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_START("VBLANK") diff -Nru mame-0.250+dfsg.1/src/mame/atlus/patapata.cpp mame-0.251+dfsg.1/src/mame/atlus/patapata.cpp --- mame-0.250+dfsg.1/src/mame/atlus/patapata.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/atlus/patapata.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -7,8 +7,7 @@ RW93085-SUB (c)NTC CO.LTD 1993 MADE IN JAPAN on sub (ROM) PCB -various NMK customs including NMK005 near dipswitches, difficult to read the rest from PCB pics -possible MCU or just IO extender? +various NMK customs including NMK005 (GPIO controller) near dipswitches, difficult to read the rest from PCB pics developed by NTC on NMK hardware? diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4avan.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4avan.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4avan.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4avan.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -94,7 +94,7 @@ #define M4ABEAUT_EXTRA_ROMS \ ROM_REGION( 0x100000, "asm", 0 ) \ ROM_LOAD( "abbcz1.prn", 0x0000, 0x08e0c1, CRC(f333bd68) SHA1(05c30186116b043c0da2ca2b1fc2f1add7bd1574) ) /* this is the source code ASM? */ \ - ROM_REGION( 0x100000, "msm6376", 0 ) /* which sound roms go with which sets?! */ \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) /* which sound roms go with which sets?! */ \ ROM_LOAD( "abs011.bin", 0x0000, 0x080000, CRC(e9364aa0) SHA1(775d94f8665387538d4d8d8ddec38e2ccec2e345) ) \ ROM_LOAD( "abs012.bin", 0x0000, 0x080000, CRC(72371572) SHA1(4504a91486952bc42e31632131d31cf5414853d6) ) \ ROM_LOAD( "abs021.bin", 0x0000, 0x080000, CRC(add61ab9) SHA1(1e611bc69f129c18ce460c051f78c726f5efdf68) ) \ @@ -313,7 +313,7 @@ #define M4TRG_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "trgsound.dat", 0x0000, 0x080000, CRC(b9eeffbd) SHA1(9ab8005bbabb30358e3e1ccc007372542bc2e799) ) #undef GAME_CUSTOM @@ -363,7 +363,7 @@ #define M4RMTP_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "rm.s3", 0x0000, 0x080000, CRC(250e64f2) SHA1(627c4dc5cdc7d0a7cb6f74991ae91b71a2f4dbc6) ) #undef GAME_CUSTOM @@ -389,7 +389,7 @@ #define M4RMTPD_EXTRA_ROMS \ ROM_REGION( 0x10000, "gal", 0 ) \ ROM_LOAD( "rmdxi", 0x0000, 0x000b57, CRC(c16021ec) SHA1(df77e410ea2edae1559e40a877e292f0d1969b0a) ) \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing */ #undef GAME_CUSTOM @@ -456,7 +456,7 @@ #define M4MBEL_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing */ #undef GAME_CUSTOM @@ -536,7 +536,7 @@ // cb apparently stands for 'credbottom' again hinting it might be a dual unit setup #define M4CMONT_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "mcsnd1.dat", 0x000000, 0x080000, CRC(9477e648) SHA1(1abefced0cf708ad035720d5e58dc7dae50de5d1) ) \ ROM_LOAD( "mcsnd2.dat", 0x080000, 0x080000, CRC(088796bd) SHA1(877bf21add8ef95f5384a88e1287bd9aa5dbfa95) ) @@ -625,7 +625,7 @@ #define M4BLKMGC_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "bmsnd", 0x0000, 0x080000, CRC(81da8bc9) SHA1(a60fd689e2683b987f48e3a4c8817b169a9c3fdf) ) #undef GAME_CUSTOM @@ -652,7 +652,7 @@ #define M4AMALAD_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "aasnd", 0x0000, 0x080000, CRC(6b78f3de) SHA1(4f10afdc5cf7c84e2d048f7c9c5f83323f1e5a6e) ) #undef GAME_CUSTOM @@ -684,7 +684,7 @@ #define M4BBEN_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "bben1s.bin", 0x0000, 0x02dbc5, CRC(9240317e) SHA1(d9167e52a09ff1783bb10e2e34fb80bdf555f00e) ) #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ @@ -711,7 +711,7 @@ #define M4BBOX_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "bb1snd.bin", 0x0000, 0x068880, CRC(69d53f5a) SHA1(dd7958060804fda97a1fdf69c230bfab092b9707) ) #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ @@ -738,7 +738,7 @@ #define M4FRNUDG_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ ROM_START( setname ) \ @@ -755,7 +755,7 @@ #define M4FRMTX_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "fmsnd1.bin", 0x0000, 0x080000, CRC(300fcb23) SHA1(c3a7424089e7893972e04a6a5e77cfb4e0ffc8ec)) \ ROM_REGION( 0x100000, "pals", 0 ) \ ROM_LOAD( "fm.jed", 0x0000, 0x000580, CRC(dc166c8e) SHA1(0cc49836b7ad57daa54e08f10f07aa279ccc53a0)) @@ -779,7 +779,7 @@ #define M4JOK2K_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ ROM_START( setname ) \ @@ -798,7 +798,7 @@ #define M4MJP_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "mjsnd1.bin", 0x0000, 0x080000, CRC(e9b62ebb) SHA1(d930dffdb933f3359ae210d2c1ab5ada9964c398) ) #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ @@ -821,7 +821,7 @@ #define M4MILROU_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ ROM_START( setname ) \ @@ -838,7 +838,7 @@ #define M4KINGG_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ ROM_START( setname ) \ diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4bwb.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4bwb.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4bwb.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4bwb.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -13,7 +13,7 @@ This file is home to the following BWB originals Abracadabra - Big Match, ThE + Big Match, The Bingo Belle Bingo Belle (Showcase cabinet version) Bingo Club @@ -128,11 +128,12 @@ { mpu4base(config); MCFG_MACHINE_START_OVERRIDE(mpu4bwb_machines_state,mpu4bwb) - mpu4_common2(config); - OKIM6376(config, m_msm6376, 128000); //Adjusted by IC3, default to 16KHz sample. Can also be 85430 at 10.5KHz and 64000 at 8KHz - m_msm6376->add_route(ALL_OUTPUTS, "lspeaker", 1.0); - m_msm6376->add_route(ALL_OUTPUTS, "rspeaker", 1.0); + + MPU4_OKI_SAMPLED_SOUND(config, m_okicard, MPU4_MASTER_CLOCK/4); + m_okicard->add_route(ALL_OUTPUTS, "mono", 1.0); + + m_okicard->cb2_handler().set(FUNC(mpu4_state::pia_gb_cb2_w)); } template void mpu4bwb_machines_state::bwboki_chr_cheat_f(machine_config &config) @@ -263,7 +264,7 @@ static const uint32_t m4abra_keys[2] = { 0x11, 0x192703 }; #define M4ABRA_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -292,9 +293,9 @@ static const uint32_t m4bigmt_keys[2] = { 0x10, 0x241215 }; #define M4BIGMT_EXTRA_ROMS \ - ROM_REGION( 0x180000, "altmsm6376", 0 ) /* this is NOT the same, some samples are changed */ \ + ROM_REGION( 0x180000, "okicard:altmsm6376", 0 ) /* this is NOT the same, some samples are changed */ \ ROM_LOAD( "bigmsnd", 0x0000, 0x07db60, CRC(876c53ae) SHA1(ea2511ec9ba4ff67879212c6e2ba908873130a4e) ) \ - ROM_REGION( 0x180000, "msm6376", 0 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) \ ROM_LOAD( "tbmsnd.hex", 0x0000, 0x080000, CRC(e98da8de) SHA1(36668f2b82778f441224c94831f5b95efb9fa92b) ) #undef GAME_CUSTOM @@ -324,7 +325,7 @@ static const uint32_t m4bingbl_keys[2] = { 0x10, 0x322214 }; #define M4BINGBL_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* Missing, or not OKI? */ #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ @@ -355,7 +356,7 @@ static const uint32_t m4bingbs_keys[2] = { 0x10, 0x322214 }; #define M4BINGBS_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* Missing, or not OKI? */ #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ @@ -385,7 +386,7 @@ static const uint32_t m4bingcl_keys[2] = { 0x03, 0x072114 }; #define M4BINGCL_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* Missing, or not OKI? */ #undef GAME_CUSTOM @@ -413,7 +414,7 @@ static const uint32_t m4blsbys_g_keys[2] = { 0x36, 0x010e20 }; #define M4BLSBYS_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "bbsnd.p1", 0x000000, 0x080000, CRC(715c9e95) SHA1(6a0c9c63e56cfc21bf77cf29c1b844b8e0844c1e) ) \ ROM_LOAD( "bbsnd.p2", 0x080000, 0x080000, CRC(594a87f8) SHA1(edfef7d08fab41fb5814c92930f08a565371eae1) ) @@ -488,7 +489,7 @@ static const uint32_t m4csoc_keys[2] = { 0x11, 0x101230 }; #define M4CSOC_EXTRA_ROMS \ - ROM_REGION( 0x180000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "ch_socc.s1", 0x000000, 0x080000, CRC(abaea3f3) SHA1(cf3b6e4ee99680726efd2a839b49b4d86e2bd270) ) \ ROM_LOAD( "ch_socc.s2", 0x080000, 0x080000, CRC(2048f5b2) SHA1(b07addfd9d861b1d19d4db248e16c597cf79b159) ) \ ROM_LOAD( "ch_socc.s3", 0x100000, 0x080000, CRC(064224b0) SHA1(99a8bacfd3a42f72e40b93d1f7eeea633c3cf366) ) @@ -530,7 +531,7 @@ static const uint32_t m4cpfinl_keys[2] = { 0x10, 0x241215 }; #define M4CPFINL_EXTRA_ROMS \ - ROM_REGION( 0x180000, "msm6376", 0 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cupsnd_1.0_2", 0x000000, 0x080000, CRC(54384ce8) SHA1(ff78c4ea16722662a480bff1f85af7efe84b01e5) ) \ ROM_LOAD( "cupsnd_1.0_3", 0x080000, 0x080000, CRC(24d3d848) SHA1(64287c3cbe2e9693954bc880d6edf2bc17b0ed65) ) @@ -567,7 +568,7 @@ static const uint32_t m4danced_keys[2] = { 0x10, 0x3b240d }; #define M4DANCED_EXTRA_ROMS \ - ROM_REGION( 0x180000, "msm6376", 0 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) \ ROM_LOAD( "dd______.1_2", 0x0000, 0x080000, CRC(b9043a08) SHA1(5d87a30f23e8b5e3eaa0584d0d49efc08209882b) ) #undef GAME_CUSTOM @@ -615,7 +616,7 @@ static const uint32_t m4daytn_keys[2] = { 0x13, 0x1f1e23 }; #define M4DAYTN_EXTRA_ROMS \ - ROM_REGION( 0x180000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -654,7 +655,7 @@ static const uint32_t m4excal_keys[2] = { 0xff, 0xffffffff }; #define M4EXCAL_EXTRA_ROMS \ - ROM_REGION( 0x180000, "msm6376", 0 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) \ ROM_LOAD( "ex______.1_2", 0x000000, 0x080000, CRC(9305e516) SHA1(5a5c67f97761fe2e042ba31594d1881238d3227b) ) \ ROM_LOAD( "ex______.1_3", 0x080000, 0x080000, CRC(29e3709a) SHA1(2e2f089aa2a938158930f235bf821685932d698b) ) \ ROM_LOAD( "ex______.1_4", 0x100000, 0x080000, CRC(dd747003) SHA1(cf0a2936c897e3b833984c55f4825c358b723ab8) ) @@ -690,7 +691,7 @@ static const uint32_t m4exotic_keys[2] = { 0x34, 0x3f0e26 }; #define M4EXOTIC_EXTRA_ROMS \ - ROM_REGION( 0x180000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -721,7 +722,7 @@ static const uint32_t m4firice_keys[2] = { 0x11, 0x162413 }; #define M4FIRICE_EXTRA_ROMS \ - ROM_REGION( 0x180000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "fire_ice.s1", 0x000000, 0x080000, CRC(74ee37c1) SHA1(bc9b419dd1fd1c66090f8946247e754c0267baa3) ) \ ROM_LOAD( "fire_ice.s2", 0x080000, 0x080000, CRC(b86bafeb) SHA1(ee237f601b970dc5be8096a4018cb6a3edac500f) ) \ ROM_LOAD( "fire_ice.s3", 0x100000, 0x080000, CRC(75f349b3) SHA1(1505bec7b69e1eabd679b70d95ae58fd264ca698) ) @@ -759,7 +760,7 @@ static const uint32_t m4harle_keys[2] = { 0x10, 0x220525 }; #define M4HARLE_EXTRA_ROMS \ - ROM_REGION( 0x180000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "hq______.1_2", 0x000000, 0x080000, CRC(0c8c14be) SHA1(a1268e71ea43772a532b63327f24c64fabd7e715) ) \ ROM_LOAD( "hq______.1_3", 0x080000, 0x080000, CRC(5a07e514) SHA1(6e589756c0fc4b0458ca856e918fa3b7cd396c39) ) @@ -808,7 +809,7 @@ static const uint32_t m4hvhel_keys[2] = { 0x11, 0x3f0b26 }; #define M4HVHEL_EXTRA_ROMS \ - ROM_REGION( 0x180000, "msm6376", 0 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) \ ROM_LOAD( "hh___snd.1_1", 0x000000, 0x080000, CRC(afa7ba60) SHA1(25278046252e49364d4a51de79295b87baf6018e) ) \ ROM_LOAD( "hh___snd.1_2", 0x080000, 0x080000, CRC(ec1ec822) SHA1(3fdee0526cb70f4951b7bbced74e32641ded9b7b) ) \ ROM_LOAD( "hh___snd.1_3", 0x100000, 0x080000, CRC(d4119155) SHA1(b61c71e1ee0dbfc0bb9eff1a8c019cf11731ee11) ) @@ -850,7 +851,7 @@ ROM_REGION( 0x200000, "gals", 0 ) \ ROM_LOAD( "ic___.g", 0x0000, 0x000657, CRC(25cc2b32) SHA1(a065276fe4cc1e55f366ac216b5bc8cf934da9dd) ) \ ROM_LOAD( "ic___.p", 0x0000, 0x00058b, CRC(26388ec4) SHA1(e33183d0c3e75fe23ab6df01d561f5b65923d1db) ) \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "da______.1_1", 0x000000, 0x080000, CRC(99d36c12) SHA1(f8848a28b5546649d6a3f8599dbc4ca84bdac77c) ) \ ROM_LOAD( "da______.1_2", 0x080000, 0x080000, CRC(32b40094) SHA1(f02c3b088d76116f817b536cf7cec5188b2f73bf) ) \ ROM_LOAD( "da______.1_3", 0x100000, 0x080000, CRC(2df33d18) SHA1(40afa32d6c72c6a76e3e2e61db19a16003f4e176) ) \ @@ -884,7 +885,7 @@ static const uint32_t m4jakjok_keys[2] = { 0x11, 0x103218 }; #define M4JAKJOK_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "jj_____.1_1", 0x000000, 0x080000, CRC(e759a958) SHA1(b107f4ef5a2805e56d4024940bfc632155de1eb1) ) \ ROM_LOAD( "jj_____.1_2", 0x080000, 0x080000, CRC(aa215ff0) SHA1(4bf2c6f8153730cc3ca86f78ec14063ece7d8700) ) \ ROM_LOAD( "jj_____.1_3", 0x100000, 0x080000, CRC(03c0ffc3) SHA1(2572f62362325df8b235b487d4a764218e7f1589) ) @@ -906,7 +907,7 @@ GAME_CUSTOM( 2000, m4jakjok__c, m4jakjok, bwboki_chr_cheat(R5, RT3), mpu4impcoin_jackpot5_5p, init_m4big, "jj_vc___.7_0", 0x0000, 0x040000, CRC(4cdca8da) SHA1(ee7448b12380416a3bea2713ed5feca7473be8aa), "BWB",u8"Jackpot Jokers (BWB) (MPU4) (ver. 7) (5/10p stake / £5 jackpot)" ) #define M4JAKJOKA_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "j_joker.s1", 0x0000, 0x080000, CRC(4ad711d2) SHA1(500381ac2a5075acd606a131cd1b382342cc3a80) ) \ ROM_LOAD( "j_joker.s2", 0x0000, 0x080000, CRC(840ba491) SHA1(f7f43d5d8e521a59fdccbd5f22935c525c3d43c2) ) \ ROM_LOAD( "j_joker.s3", 0x0000, 0x080000, CRC(2ed74890) SHA1(a3d039b4c3c9dd792300eb045e542a212d4d50ae) ) @@ -933,7 +934,7 @@ static const uint32_t m4jflash_keys[2] = { 0x10, 0x3c3801 }; #define M4JFLASH_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -967,7 +968,7 @@ static const uint32_t m4ln7_keys[2] = { 0x10, 0x050107 }; #define M4LN7_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "l7______.1_2", 0x000000, 0x080000, CRC(216209e3) SHA1(af274a7f27ba0e7ac03400e9919537ab36464e64) ) \ ROM_LOAD( "l7______.1_3", 0x080000, 0x080000, CRC(e909c3ec) SHA1(68ce743729aaefd6c20ee447af40d99e0f4c072b) ) #undef GAME_CUSTOM @@ -996,7 +997,7 @@ static const uint32_t m4madmon_keys[2] = { 0x10, 0x351f3a }; #define M4MADMON_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -1032,7 +1033,7 @@ static const uint32_t m4madmnc_keys[2] = { 0x10, 0x351f3a }; #define M4MADMNC_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -1079,7 +1080,7 @@ static const uint32_t m4mmm_keys[2] = { 0x11, 0x320926 }; #define M4MMM_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "mu___snd.1_1", 0x000000, 0x080000, CRC(570cf5f8) SHA1(48b3703bf385d037e4e870dfb671b75e9bab84a7) ) \ ROM_LOAD( "mu___snd.1_2", 0x080000, 0x080000, CRC(6ec1910b) SHA1(4920fe0b7c7f4ddb14d56f50598aaf62e5867014) ) \ ROM_LOAD( "mu___snd.1_3", 0x100000, 0x080000, CRC(8699378c) SHA1(55c3e310cfde8046e58bf21a8788e697c8275b8d) ) \ @@ -1113,7 +1114,7 @@ static const uint32_t m4orland_keys[2] = { 0x10, 0x2c081f }; #define M4ORLAND_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "orlandosnd.p1", 0x000000, 0x080000, CRC(2735649d) SHA1(7b27bf2d4091ab581d399679b03f538f449f180c) ) \ ROM_LOAD( "orlandosnd.p2", 0x080000, 0x080000, CRC(0741e2ff) SHA1(c49a2809073dd058ba85ae14c888e19d3eb2b133) ) @@ -1147,7 +1148,7 @@ static const uint32_t m4pzbing_keys[2] = { 0x10, 0x141531 }; #define M4PZBING_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -1177,7 +1178,7 @@ static const uint32_t m4quidin_keys[2] = { 0x10, 0x050107 }; #define M4QUIDIN_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "qi_____.1_2", 0x000000, 0x080000, CRC(216209e3) SHA1(af274a7f27ba0e7ac03400e9919537ab36464e64) ) \ ROM_LOAD( "qi_____.1_3", 0x080000, 0x080000, CRC(e909c3ec) SHA1(68ce743729aaefd6c20ee447af40d99e0f4c072b) ) @@ -1205,7 +1206,7 @@ static const uint32_t m4quidis_keys[2] = { 0x10, 0x050107 }; #define M4QUIDIS_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -1233,7 +1234,7 @@ static const uint32_t m4rackem_keys[2] = { 0x11, 0x13222f }; #define M4RACKEM_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "re_snd.p1", 0x000000, 0x080000, CRC(aea88892) SHA1(457dab5cddfb9762f7e0bd61187b8052aee71c28) ) \ ROM_LOAD( "re_snd.p2", 0x080000, 0x080000, CRC(57394ec6) SHA1(cba7abebd3ab165e9531017168f51ada6cf35991) ) \ ROM_LOAD( "re_snd.p3", 0x100000, 0x080000, CRC(5d5d5309) SHA1(402615633976410225a1ee50c454391dc69a68cb) ) @@ -1264,7 +1265,7 @@ static const uint32_t m4rbgold_keys[2] = { 0x10, 0x2d371b }; #define M4RBGOLD_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -1305,7 +1306,7 @@ static const uint32_t m4rhfev_keys[2] = { 0x11, 0x3f0e27 }; #define M4RHFEV_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "rf_____.1_1", 0x000000, 0x080000, CRC(ac8d539d) SHA1(8baf14bece50774f93ae9eaf3effabb6882d2c43) ) \ ROM_LOAD( "rf_____.1_2", 0x080000, 0x080000, CRC(cc2fadd8) SHA1(681850e2e6164cf8af8e7501ac44f475cc07b742) ) \ ROM_LOAD( "rf_____.1_3", 0x100000, 0x080000, CRC(165aaf9f) SHA1(815224fe94a77628cef1dd0d8a238edcb4813006) ) \ @@ -1339,7 +1340,7 @@ static const uint32_t m4sinbd_keys[2] = { 0x10, 0x0c253d }; #define M4SINBD_EXTRA_ROMS \ - ROM_REGION( 0x180000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /*These were with the last listed set, though I have no reason to believe they aren't valid for all BwB Sinbad games, both have OKI tables */ \ ROM_LOAD( "sinbadbwb1_2snd.bin", 0x000000, 0x080000, CRC(2ee60ce6) SHA1(865860639e8471f97ace0beac2f4c7fddb8ca97c) ) \ ROM_LOAD( "sinbadbwb1_3snd.bin", 0x080000, 0x080000, CRC(7701e5cc) SHA1(4f9ff91f2b6b15a9c08396b52fc8509ba476ed8d) ) @@ -1389,7 +1390,7 @@ static const uint32_t m4sky_keys[2] = { 0x11, 0x1f2d3b }; #define M4SKY_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -1419,7 +1420,7 @@ static const uint32_t m4souls_keys[2] = { 0x10, 0x3e2f0b }; #define M4SOULS_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "ss______.1_2", 0x000000, 0x080000, CRC(ddea9d75) SHA1(fe5f88d49434109d0f51425e790e179dc1a02767) ) \ ROM_LOAD( "ss______.1_3", 0x080000, 0x080000, CRC(23d1e57a) SHA1(b17afdaa95522fd7ea6c12f513fa338e1fcb06f6) ) \ ROM_LOAD( "ss______.1_4", 0x100000, 0x080000, CRC(0ba3046a) SHA1(ec21fa328669bc7a5baf1ce8b9ac05f38f98e360) ) @@ -1452,7 +1453,7 @@ static const uint32_t m4spinbt_keys[2] = { 0x45, 0x250603 }; #define M4SPINBT_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -1483,7 +1484,7 @@ static const uint32_t m4starst_keys[2] = { 0x11, 0x3f0a26 }; #define M4STARST_EXTRA_ROMS \ - ROM_REGION( 0x180000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "starsnd3", 0x0000, 0x080000, CRC(96882952) SHA1(bf366670aec5cb545c56caac3c63855db03d8c14) )/* (?)strange id number? */ #undef GAME_CUSTOM @@ -1518,7 +1519,7 @@ static const uint32_t m4supleg_keys[2] = { 0x11, 0x310926 }; #define M4SUPLEG_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "sls1.hex", 0x000000, 0x080000, CRC(341e3d3e) SHA1(b42ec737e95e766b1b26d6225416ee0c5cad2663) ) \ ROM_LOAD( "sls2.hex", 0x080000, 0x080000, CRC(f4ab6f0d) SHA1(4b59608ca16c9d158d4d1ac532e7fbe6ff0da959) ) \ ROM_LOAD( "sls3.hex", 0x100000, 0x080000, CRC(dcba96a1) SHA1(d474c63b37cb18a0b3b1299b5cacadfd8cd5458b) ) @@ -1541,7 +1542,7 @@ GAME_CUSTOM( 199?, m4supleg__d, m4supleg, bwboki_chr_cheat(R5, RT3), mpu4impcoin_jackpot15_20p, init_m4big, "sls.hex", 0x0000, 0x040000, CRC(5ad6dbb9) SHA1(ff6f9dcf14df22c7bb2b949fcd5c70f31d4c1928), "BWB",u8"Super League (BWB) (MPU4) (20/25/30p stake / £5/£10/£15 jackpot)" ) #define M4SUPLEGW_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "s_leag.s1",0x000000, 0x080000, CRC(e8d90896) SHA1(4c67507f18b5dc966e2df3685dc6c257f5053e61) ) \ ROM_LOAD( "sls2.hex", 0x080000, 0x080000, CRC(f4ab6f0d) SHA1(4b59608ca16c9d158d4d1ac532e7fbe6ff0da959) ) \ ROM_LOAD( "sls3.hex", 0x100000, 0x080000, CRC(dcba96a1) SHA1(d474c63b37cb18a0b3b1299b5cacadfd8cd5458b) ) @@ -1568,7 +1569,7 @@ static const uint32_t m4supscr_keys[2] = { 0x11, 0x101231 }; #define M4SUPSCR_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -1607,7 +1608,7 @@ static const uint32_t m4sure_keys[2] = {0x10, 0x281215}; #define M4SURE_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -1635,7 +1636,7 @@ static const uint32_t m4trex_keys[2] = {0x10, 0x112231}; #define M4TREX_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "tr______.1_2", 0x000000, 0x080000, CRC(75687514) SHA1(dc8f5f1db7da164175c241187cf3f0db1dd71fc9) ) \ ROM_LOAD( "tr______.1_3", 0x080000, 0x080000, CRC(1e30d4ed) SHA1(8cd916d28f5060d74a0d795f9b75ab597de1cd60) ) @@ -1673,7 +1674,7 @@ static const uint32_t m4tutbwb_keys[2] = { 0x01, 0x163428 }; #define M4TUTBWB_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ @@ -1708,7 +1709,7 @@ static const uint32_t m4volcan_keys[2] = { 0x11, 0x3f0d26 }; #define M4VOLCAN_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "vo___snd.1_1", 0x000000, 0x080000, CRC(62bb0166) SHA1(17e5557cce4e7841cbcf5d67783fe78452aacc63) ) \ ROM_LOAD( "vo___snd.1_2", 0x080000, 0x080000, CRC(1eded545) SHA1(0010833e42b33fb0fd621a1059e1cf9a123c3fbd) ) \ ROM_LOAD( "vo___snd.1_3", 0x100000, 0x080000, CRC(915f4adf) SHA1(fac6644329ee6ef0026d65d8b94c971e01770d45) ) \ @@ -1743,7 +1744,7 @@ static const uint32_t m4vdexpr_keys[2] = { 0x11, 0x3f0d27 }; #define M4VDEXPR_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "vd___snd.1_1", 0x000000, 0x080000, CRC(d66b43a9) SHA1(087cf1571a9afb8c1c7cac13640fa453b614fd53) ) \ ROM_LOAD( "vd___snd.1_2", 0x080000, 0x080000, CRC(a501c887) SHA1(c56a05fd8196afb86e665fec3fe7d02b9bf94c1a) ) \ ROM_LOAD( "vd___snd.1_3", 0x100000, 0x080000, CRC(70c6bd96) SHA1(ecdd4276ff72939433630e04bba5be3df569e17e) ) \ @@ -1775,7 +1776,7 @@ static const uint32_t m4xch_keys[2] = { 0x42, 0x3f0c26 }; #define M4XCH_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "xchasnd.bin", 0x0000, 0x080000, CRC(32c44cd5) SHA1(baafb48e6f95ba152942d1e1c273ffb3c95afa82) ) // BADADDR --xxxxxxxxxxxxxxxxx #undef GAME_CUSTOM @@ -1817,7 +1818,7 @@ static const uint32_t m4xs_keys[2] = { 0x34, 0x3f0e26 }; #define M4XS_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -1850,7 +1851,7 @@ static const uint32_t m4xtrm_keys[2] = { 0x36, 0x301210 }; #define M4XTRM_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -1889,7 +1890,7 @@ static const uint32_t m4bluesn_keys[2] = { 0x23, 0x1b0b36 }; #define M4BLUESN_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "bluesboyz.bi2", 0x000000, 0x080000, CRC(7f19a61b) SHA1(dd8742d84df24e118bdbffb1efffad1c71eb2283) ) \ ROM_LOAD( "bluesboyz.bi3", 0x080000, 0x080000, CRC(32363184) SHA1(8f3f53ce4d9f9b54c441263def9d8e23880507a1) ) \ ROM_LOAD( "bluesboyz.bi4", 0x100000, 0x080000, CRC(aa94281d) SHA1(e15b7bf97b8e307ed465d9b8cb6e5de0044f6fb5) ) \ @@ -1917,7 +1918,7 @@ static const uint32_t m4cfinln_keys[2] = { 0x10, 0x213623 }; #define M4CFINLN_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -1943,7 +1944,7 @@ static const uint32_t m4wcnov_keys[2] = { 0x19, 0x0f2029 }; #define M4WCNOV_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -1968,7 +1969,7 @@ static const uint32_t m4excaln_keys[2] = { 0x10, 0x010e20 }; #define M4EXCALN_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -1994,7 +1995,7 @@ static const uint32_t m4olygn_keys[2] = { 0x19, 0x0f2029}; #define M4OLYGN_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -2020,7 +2021,7 @@ static const uint32_t m4ftladn_keys[2] = { 0x05, 0x200f03 }; #define M4FTLADN_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -2048,7 +2049,7 @@ #define M4SINBDN_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4concept.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4concept.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4concept.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4concept.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -24,7 +24,7 @@ #define GAME_FLAGS (MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK|MACHINE_MECHANICAL) #define M4RHFEVC_EXTRA_ROMS \ - ROM_REGION( 0x080000, "msm6376", 0 ) \ + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) \ ROM_LOAD( "rhfs1.bin", 0x0000, 0x03de5e, CRC(0dddd05f) SHA1(908a58752fb1cf76667695a40bcaa7778201c3a2) ) #undef GAME_CUSTOM @@ -67,7 +67,7 @@ #define M4PULWNC_EXTRA_ROMS \ - ROM_REGION( 0x080000, "msm6376", 0 ) \ + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) \ ROM_LOAD( "paws1.bin", 0x0000, 0x03e72f, CRC(124b14ba) SHA1(b6b84c306c83b3159d88992ad88a10aff161fce8) ) #undef GAME_CUSTOM @@ -117,7 +117,7 @@ #define M4SPNWNC_EXTRA_ROMS \ - ROM_REGION( 0x080000, "msm6376", 0 ) \ + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) \ ROM_LOAD( "sawsnd1", 0x0000, 0x080000, CRC(7957381f) SHA1(8fd45e5bf67248607f7d98032e08516ded493d74) ) #undef GAME_CUSTOM @@ -134,7 +134,7 @@ GAME_CUSTOM( 199?, m4spnwnc__b, m4spnwnc, "saw03.bin", 0x0000, 0x010000, CRC(a891451d) SHA1(2c0a4b6b5c50e234715e103e72986a2bda1d4588), "Concept Games Ltd","Spin-A-Win (Concept Games Ltd) (MPU4) (set 3)" ) #define M4NUDGWC_EXTRA_ROMS \ - ROM_REGION( 0x180000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "naws1.bin", 0x0000, 0x02373f, CRC(b2ea8c50) SHA1(a02181f8f4636e69287073f4ffb8604ff2f14b9c) ) #undef GAME_CUSTOM diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -24,7 +24,7 @@ reworked. Like MPU3, a 6840PTM is used for internal timing, and other miscellaneous control functions, including as a crude analogue sound device -(a square wave from the PTM being used as the alarm sound generator). However, the main sound functionality is provided by +(a square wave from the PTM being fed into a 1-bit DAC circuit as the alarm sound generator). However, the main sound functionality is provided by dedicated hardware (an AY8913). A MPU4 GAME CARD (cartridge) plugs into the MPU4 board containing the game, and a protection PAL (the 'characteriser'). @@ -81,7 +81,7 @@ | Output2 --+-> Clock3 | | | - | Output3 ---> 'to audio amp' ?? + | Output3 ---> 'to audio amp' (square wave) | +--------> CA1 IC3 ( @@ -514,6 +514,7 @@ /* the output from timer3 is used as a square wave for the alarm output and as an external clock source for timer 1! */ /* also runs lamp fade */ + m_alarmdac->write(state); m_6840ptm->set_c1(state); } @@ -1192,68 +1193,6 @@ m_vfd->sclk(!state); } -// universal sampled sound program card PCB 683077 -// Sampled sound card, using a PIA and PTM for timing and data handling -void mpu4_state::pia_gb_porta_w(uint8_t data) -{ - LOG_SS(("%s: GAMEBOARD: PIA Port A Set to %2x\n", machine().describe_context(), data)); - m_msm6376->write(data); -} - -void mpu4_state::pia_gb_portb_w(uint8_t data) -{ - uint8_t changed = m_expansion_latch^data; - - LOG_SS(("%s: GAMEBOARD: PIA Port B Set to %2x\n", machine().describe_context(), data)); - - if (changed & 0x20) - { // digital volume clock line changed - if (!(data & 0x20)) - { // changed from high to low, - if (!(data & 0x10)) // down - { - if (m_global_volume < 32) m_global_volume++; //steps unknown - } - else // up - { - if (m_global_volume > 0) m_global_volume--; - } - - LOG_SS(("%s: GAMEBOARD: Volume Set to %2x\n", machine().describe_context(), data)); - float percent = (32-m_global_volume)/32.0; - m_msm6376->set_output_gain(0, percent); - m_msm6376->set_output_gain(1, percent); - } - } - m_msm6376->ch2_w(data & 0x02); - m_msm6376->st_w(data & 0x01); -} - -uint8_t mpu4_state::pia_gb_portb_r() -{ - LOG_SS(("%s: GAMEBOARD: PIA Read of Port B\n", machine().describe_context())); - uint8_t data = 0; - // b7 NAR - we can load another address into Channel 1 - // b6, 1 = OKI ready, 0 = OKI busy - // b5, vol clock - // b4, 1 = Vol down, 0 = Vol up - // - - if ( m_msm6376->nar_r() ) data |= 0x80; - else data &= ~0x80; - - if ( m_msm6376->busy_r() ) data |= 0x40; - else data &= ~0x40; - - return data | m_expansion_latch; -} - -WRITE_LINE_MEMBER(mpu4_state::pia_gb_ca2_w) -{ - LOG_SS(("%s: GAMEBOARD: OKI RESET data = %02X\n", machine().describe_context(), state)); -// reset line -} - WRITE_LINE_MEMBER(mpu4_state::pia_gb_cb2_w) { // Some BWB games use this to drive the bankswitching @@ -1265,52 +1204,6 @@ } } -//Sampled sound timer -/* -The MSM6376 sound chip is configured in a slightly strange way, to enable dynamic -sample rate changes (8Khz, 10.6 Khz, 16 KHz) by varying the clock. -According to the BwB programmer's guide, the formula is: -MSM6376 clock frequency:- -freq = (1720000/((t3L+1)(t3H+1)))*[(t3H(T3L+1)+1)/(2(t1+1))] -where [] means rounded up integer, -t3L is the LSB of Clock 3, -t3H is the MSB of Clock 3, -and t1 is the initial value in clock 1. -*/ - -//O3 -> G1 O1 -> c2 o2 -> c1 - -/* This is a bit of a cheat - since we don't clock into the OKI chip directly, we need to -calculate the oscillation frequency in advance. We're running the timer for interrupt -purposes, but the frequency calculation is done by plucking the values out as they are written.*/ -void mpu4_state::ic3ss_w(offs_t offset, uint8_t data) -{ - m_ptm_ic3ss->write(offset, data); - - if (offset == 3) - { - m_t1 = data; - } - if (offset == 6) - { - m_t3h = data; - } - if (offset == 7) - { - m_t3l = data; - } - - float const num = float(1'720'000) / ((m_t3l + 1) * (m_t3h + 1)); - float const denom = std::ceil(float(m_t3h * (m_t3l + 1) + 1) / (2 * (m_t1 + 1))); //need to round up, this gives same precision as chip - - int const freq = int(num * denom); - - if (freq) - { - m_msm6376->set_unscaled_clock(freq); - } -} - /* input ports for MPU4 board */ INPUT_PORTS_START( mpu4 ) PORT_START("ORANGE1") @@ -1958,16 +1851,15 @@ INPUT_PORTS_END - /* Common configurations */ void mpu4_state::mpu4_install_mod4oki_space(address_space &space) { - pia6821_device *const pia_ic4ss = subdevice("pia_ic4ss"); + space.install_readwrite_handler(0x0880, 0x0883, read8sm_delegate(*m_okicard, FUNC(mpu4_oki_sampled_sound::ic4_read)), write8sm_delegate(*m_okicard, FUNC(mpu4_oki_sampled_sound::ic4_write))); + + space.install_read_handler(0x08c0, 0x08c7, read8sm_delegate(*m_okicard, FUNC(mpu4_oki_sampled_sound::ic3_read))); + space.install_write_handler(0x08c0, 0x08c7, write8sm_delegate(*m_okicard, FUNC(mpu4_oki_sampled_sound::ic3_write))); - space.install_readwrite_handler(0x0880, 0x0883, read8sm_delegate(*pia_ic4ss, FUNC(pia6821_device::read)), write8sm_delegate(*pia_ic4ss, FUNC(pia6821_device::write))); - space.install_read_handler(0x08c0, 0x08c7, read8sm_delegate(*m_ptm_ic3ss, FUNC(ptm6840_device::read))); - space.install_write_handler(0x08c0, 0x08c7, write8sm_delegate(*this, FUNC(mpu4_state::ic3ss_w))); } @@ -1997,8 +1889,6 @@ save_item(NAME( m_reel_flag )); save_item(NAME( m_ic23_active )); - save_item(NAME( m_expansion_latch )); - save_item(NAME( m_global_volume )); save_item(NAME( m_input_strobe )); save_item(NAME( m_lamp_strobe )); save_item(NAME( m_lamp_strobe2 )); @@ -2032,9 +1922,6 @@ save_item(NAME( m_hopper_type )); save_item(NAME( m_reels )); save_item(NAME( m_chrdata )); - save_item(NAME( m_t1 )); - save_item(NAME( m_t3l )); - save_item(NAME( m_t3h )); save_item(NAME( m_serial_output )); save_item(NAME( m_numbanks )); @@ -2336,6 +2223,11 @@ m_overcurrent_detect = true; } +void mpu4_state::tr_lvdoff(machine_config &config) +{ + m_low_volt_detect = false; +} + void mpu4_state::tr_p4l(machine_config &config) { m_use_pia4_porta_leds = true; @@ -2419,22 +2311,12 @@ m_dataport->rxd_handler().set(FUNC(mpu4_state::dataport_rxd)); HOPPER(config, m_hopper1, attotime::from_msec(100), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH); -} -void mpu4_state::mpu4_common2(machine_config &config) -{ - PTM6840(config, m_ptm_ic3ss, MPU4_MASTER_CLOCK / 4); - m_ptm_ic3ss->set_external_clocks(0, 0, 0); - m_ptm_ic3ss->o1_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_c2)); - m_ptm_ic3ss->o2_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_c1)); - m_ptm_ic3ss->o3_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_g1)); - - PIA6821(config, m_pia_ic4ss, 0); - m_pia_ic4ss->readpb_handler().set(FUNC(mpu4_state::pia_gb_portb_r)); - m_pia_ic4ss->writepa_handler().set(FUNC(mpu4_state::pia_gb_porta_w)); - m_pia_ic4ss->writepb_handler().set(FUNC(mpu4_state::pia_gb_portb_w)); - m_pia_ic4ss->ca2_handler().set(FUNC(mpu4_state::pia_gb_ca2_w)); - m_pia_ic4ss->cb2_handler().set(FUNC(mpu4_state::pia_gb_cb2_w)); + + SPEAKER(config, "mono").front_center(); + + DAC_1BIT(config, m_alarmdac, 0); + m_alarmdac->add_route(ALL_OUTPUTS, "mono", 0.50); } /*********************************************************************************************** @@ -2452,8 +2334,6 @@ mpu4_common(config); - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -2474,10 +2354,10 @@ { mpu4base(config); AY8913(config, m_ay8913, MPU4_MASTER_CLOCK/4); + m_ay8913->set_flags(AY8910_SINGLE_OUTPUT); m_ay8913->set_resistors_load(820, 0, 0); - m_ay8913->add_route(ALL_OUTPUTS, "lspeaker", 1.0); - m_ay8913->add_route(ALL_OUTPUTS, "rspeaker", 1.0); + m_ay8913->add_route(ALL_OUTPUTS, "mono", 1.0); } void mpu4_state::mod2_no_bacta_f(machine_config &config) @@ -2503,7 +2383,7 @@ Configs for Mod4 with OKI - TODO: mod4oki should eventually become a subclass + TODO: OKI is its own device, should mod4oki eventually become a subclass ***********************************************************************************************/ @@ -2514,11 +2394,11 @@ mpu4base(config); MCFG_MACHINE_START_OVERRIDE(mpu4_state, mpu4oki) - mpu4_common2(config); + MPU4_OKI_SAMPLED_SOUND(config, m_okicard, MPU4_MASTER_CLOCK/4); + m_okicard->add_route(ALL_OUTPUTS, "mono", 1.0); + + m_okicard->cb2_handler().set(FUNC(mpu4_state::pia_gb_cb2_w)); - OKIM6376(config, m_msm6376, 128000); //Adjusted by IC3, default to 16KHz sample. Can also be 85430 at 10.5KHz and 64000 at 8KHz - m_msm6376->add_route(ALL_OUTPUTS, "lspeaker", 1.0); - m_msm6376->add_route(ALL_OUTPUTS, "rspeaker", 1.0); } void mpu4_state::mod4oki_no_bacta_f(machine_config &config) diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4crystal.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4crystal.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4crystal.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4crystal.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -53,8 +53,7 @@ MCFG_MACHINE_START_OVERRIDE(mpu4crystal_machines_state,mpu4cry) upd7759_device &upd(UPD7759(config, "upd")); - upd.add_route(ALL_OUTPUTS, "lspeaker", 1.0); - upd.add_route(ALL_OUTPUTS, "rspeaker", 1.0); + upd.add_route(ALL_OUTPUTS, "mono", 1.0); } uint8_t mpu4crystal_machines_state::crystal_sound_r() @@ -237,7 +236,7 @@ #define M4BASCSH_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4bagcsh ) ROM_REGION( 0x10000, "maincpu", 0 ) @@ -252,7 +251,7 @@ ROM_END #define M4BUCCLB_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4bucclb ) @@ -278,7 +277,7 @@ #define M4BULLIO_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4bullio ) @@ -301,7 +300,7 @@ #define M4CAROU_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "fa_sound.bin", 0x0000, 0x080000, CRC(39837e76) SHA1(74b66f77d9af47a5caab5b6441563b196fdadb37) ) ROM_START( m4carou ) ROM_REGION( 0x10000, "maincpu", 0 ) @@ -329,7 +328,7 @@ #define M4CCLIMB_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4cclimb ) @@ -345,7 +344,7 @@ ROM_END #define M4CRZCL_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4crzcl ) ROM_REGION( 0x10000, "maincpu", 0 ) @@ -378,7 +377,7 @@ ROM_END #define M4ELITC_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4elitc ) @@ -395,7 +394,7 @@ #define M4FAIRG_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "fairgroundcrysv2-1snd.bin", 0x0000, 0x040000, CRC(9b09f98a) SHA1(e980bb0039f087ee563165a3aeb66e627fc3afe9) ) ROM_START( m4fairg ) ROM_REGION( 0x10000, "maincpu", 0 ) @@ -405,7 +404,7 @@ #define M4FRMANI_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4frmani ) @@ -435,7 +434,7 @@ #define M4GOLDXC_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4goldxc ) ROM_REGION( 0x10000, "maincpu", 0 ) @@ -475,7 +474,7 @@ #define M4GOLDFC_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "goldfeversamplesound.bin", 0x0000, 0x080000, CRC(eb7d3c7b) SHA1(53b7c048e78506f0188b4dd2750c8dc31a625523) ) @@ -500,7 +499,7 @@ #define M4HIROL_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4hirol ) @@ -517,7 +516,7 @@ #define M4KINGQN_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "kingsandqueenscrystalsnd.bin", 0x0000, 0x080000, CRC(93e4b644) SHA1(920579db52c5bb820437023e35707780ed503acc) ) ROM_START( m4kingqn ) @@ -535,7 +534,7 @@ #define M4LOTCLB_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4lotclb ) ROM_REGION( 0x10000, "maincpu", 0 ) @@ -554,7 +553,7 @@ #define M4MONTRL_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "moneytrailsnd.bin", 0x0000, 0x040000, CRC(0f0d52dc) SHA1(79e1a89858f95006a1d2a0dd18d677c84a3087c6) ) ROM_START( m4montrl ) @@ -591,7 +590,7 @@ #define M4MYSTIQ_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4mystiq ) @@ -620,7 +619,7 @@ #define M4NUDWIN_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4nudwin ) ROM_REGION( 0x10000, "maincpu", 0 ) @@ -636,7 +635,7 @@ #define M4PARACL_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ @@ -654,7 +653,7 @@ #define M4RLPICK_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4rlpick ) ROM_REGION( 0x10000, "maincpu", 0 ) @@ -683,7 +682,7 @@ #define M4TWSTR_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "twistersound.bin", 0x000000, 0x100000, CRC(5aa2729b) SHA1(cf490ec6c75c038addcff24655cd6e498cad60c1) ) ROM_START( m4twstr ) @@ -721,7 +720,7 @@ #define M4TWSTCL_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "twistersound.bin", 0x000000, 0x100000, CRC(5aa2729b) SHA1(cf490ec6c75c038addcff24655cd6e498cad60c1) )/* From original, may be wrong */ ROM_START( m4twstcl ) ROM_REGION( 0x10000, "maincpu", 0 ) @@ -745,7 +744,7 @@ #define M4DZ_SOUND \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "dangerzonesnd.bin", 0x0000, 0x080000, CRC(bdfcffa2) SHA1(9e3be8fd1c42fd19afcde682662bef82f7e0f7e9) ) ROM_START( m4dz ) ROM_REGION( 0x10000, "maincpu", 0 ) @@ -754,7 +753,7 @@ ROM_END #define M4TYLB_SOUND \ - ROM_REGION( 0x080000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x080000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "tylbsnd.bin", 0x0000, 0x080000, CRC(781175c7) SHA1(43cf6fe91c756cdd4acc735411ac166647bf29e7) ) ROM_START( m4tylb ) @@ -771,7 +770,7 @@ #define M4MAGI7_SOUND \ - ROM_REGION( 0x080000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x080000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4magi7 ) ROM_REGION( 0x010000, "maincpu", 0 ) @@ -787,7 +786,7 @@ #define M4RAGS_SOUND \ - ROM_REGION( 0x080000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x080000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4rags ) ROM_REGION( 0x010000, "maincpu", 0 ) @@ -814,7 +813,7 @@ ROM_END #define M4RIOCR_SOUND \ - ROM_REGION( 0x080000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x080000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4riocr ) @@ -830,7 +829,7 @@ ROM_END #define M4NDUP_SOUND \ - ROM_REGION( 0x080000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x080000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ ROM_START( m4ndup ) ROM_REGION( 0x010000, "maincpu", 0 ) diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4dealem.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4dealem.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4dealem.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4dealem.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -231,7 +231,6 @@ mpu4_common(config); - SPEAKER(config, "mono").front_center(); AY8913(config, m_ay8913, MPU4_MASTER_CLOCK/4); m_ay8913->set_flags(AY8910_SINGLE_OUTPUT); m_ay8913->set_resistors_load(820, 0, 0); diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4empire.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4empire.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4empire.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4empire.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -54,7 +54,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "ag0_3x.bin", 0x0000, 0x020000, CRC(b521b3fd) SHA1(ffdfd4a67f0eb1665f14274f2abc7f59d0050fe5) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "agsnd1.bin", 0x000000, 0x080000, CRC(4fcc8cf1) SHA1(339684ad1bf9f58782bb1ec0d1767fc98bb86b0f) ) ROM_LOAD( "agsnd2.bin", 0x080000, 0x080000, CRC(d2824ef6) SHA1(32bf329c87a8ea7416cfc217519cd963d4d2430d) ) ROM_LOAD( "agsnd3.bin", 0x100000, 0x080000, CRC(316549d6) SHA1(72fc19cbee363ba7c71801c480cb87ebf9e64e86) ) @@ -64,7 +64,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "ag0_4.bin", 0x0000, 0x020000, CRC(99415578) SHA1(73f9947ecee575a4f284a2e3837ec6b87ac2c007) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "agsnd1.bin", 0x000000, 0x080000, CRC(4fcc8cf1) SHA1(339684ad1bf9f58782bb1ec0d1767fc98bb86b0f) ) ROM_LOAD( "agsnd2.bin", 0x080000, 0x080000, CRC(d2824ef6) SHA1(32bf329c87a8ea7416cfc217519cd963d4d2430d) ) ROM_LOAD( "agsnd3.bin", 0x100000, 0x080000, CRC(316549d6) SHA1(72fc19cbee363ba7c71801c480cb87ebf9e64e86) ) @@ -74,7 +74,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "ag0_4i.bin", 0x0000, 0x020000, CRC(4671a784) SHA1(ea95e82192ad6b53d19cc3c4166b872cd94396d1) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "agsnd1.bin", 0x000000, 0x080000, CRC(4fcc8cf1) SHA1(339684ad1bf9f58782bb1ec0d1767fc98bb86b0f) ) ROM_LOAD( "agsnd2.bin", 0x080000, 0x080000, CRC(d2824ef6) SHA1(32bf329c87a8ea7416cfc217519cd963d4d2430d) ) ROM_LOAD( "agsnd3.bin", 0x100000, 0x080000, CRC(316549d6) SHA1(72fc19cbee363ba7c71801c480cb87ebf9e64e86) ) @@ -84,7 +84,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "ag1_1x.bin", 0x0000, 0x020000, CRC(d478cd5f) SHA1(8e0adee7cc88ff072154a0db8ceee94d40046c01) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "agsnd1.bin", 0x000000, 0x080000, CRC(4fcc8cf1) SHA1(339684ad1bf9f58782bb1ec0d1767fc98bb86b0f) ) ROM_LOAD( "agsnd2.bin", 0x080000, 0x080000, CRC(d2824ef6) SHA1(32bf329c87a8ea7416cfc217519cd963d4d2430d) ) ROM_LOAD( "agsnd3.bin", 0x100000, 0x080000, CRC(316549d6) SHA1(72fc19cbee363ba7c71801c480cb87ebf9e64e86) ) @@ -94,7 +94,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "ag1_2.bin", 0x0000, 0x020000, CRC(aa857c28) SHA1(5fe95e59f97b2b6a9fa1996d6501c3230f955081) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "agsnd1.bin", 0x000000, 0x080000, CRC(4fcc8cf1) SHA1(339684ad1bf9f58782bb1ec0d1767fc98bb86b0f) ) ROM_LOAD( "agsnd2.bin", 0x080000, 0x080000, CRC(d2824ef6) SHA1(32bf329c87a8ea7416cfc217519cd963d4d2430d) ) ROM_LOAD( "agsnd3.bin", 0x100000, 0x080000, CRC(316549d6) SHA1(72fc19cbee363ba7c71801c480cb87ebf9e64e86) ) @@ -104,7 +104,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "ag1_2i.bin", 0x0000, 0x020000, CRC(71c3fc7f) SHA1(48000f6068d967504d2bde4d5f9974dd102f7368) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "agsnd1.bin", 0x000000, 0x080000, CRC(4fcc8cf1) SHA1(339684ad1bf9f58782bb1ec0d1767fc98bb86b0f) ) ROM_LOAD( "agsnd2.bin", 0x080000, 0x080000, CRC(d2824ef6) SHA1(32bf329c87a8ea7416cfc217519cd963d4d2430d) ) ROM_LOAD( "agsnd3.bin", 0x100000, 0x080000, CRC(316549d6) SHA1(72fc19cbee363ba7c71801c480cb87ebf9e64e86) ) @@ -114,7 +114,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "ag2_0x.bin", 0x0000, 0x020000, CRC(083f9f62) SHA1(67beac70ec79c240bd231279abdc97b6eb1872a5) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "agsnd1.bin", 0x000000, 0x080000, CRC(4fcc8cf1) SHA1(339684ad1bf9f58782bb1ec0d1767fc98bb86b0f) ) ROM_LOAD( "agsnd2.bin", 0x080000, 0x080000, CRC(d2824ef6) SHA1(32bf329c87a8ea7416cfc217519cd963d4d2430d) ) ROM_LOAD( "agsnd3.bin", 0x100000, 0x080000, CRC(316549d6) SHA1(72fc19cbee363ba7c71801c480cb87ebf9e64e86) ) @@ -126,7 +126,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "bnc3_0.bin", 0x0000, 0x010000, CRC(c30f947a) SHA1(c734bd966142023e2b7b498ba939972ed32c9fd6) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "bncsnd1.bin", 0x000000, 0x080000, CRC(593f29c7) SHA1(b743fa6a029b19570ccc31e5108dccec3a752849) ) ROM_LOAD( "bncsnd2.bin", 0x080000, 0x080000, CRC(589170a9) SHA1(62ec8bfc4d834c07308d5105979b86452340e98b) ) ROM_END @@ -135,7 +135,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "bnc3_0i.bin", 0x0000, 0x010000, CRC(44afb119) SHA1(5145530fee853c7f63a65566bd1b58b62921dcac) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "bncsnd1.bin", 0x000000, 0x080000, CRC(593f29c7) SHA1(b743fa6a029b19570ccc31e5108dccec3a752849) ) ROM_LOAD( "bncsnd2.bin", 0x080000, 0x080000, CRC(589170a9) SHA1(62ec8bfc4d834c07308d5105979b86452340e98b) ) ROM_END @@ -144,7 +144,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "bnc3_0x.bin", 0x0000, 0x010000, CRC(ff267a9b) SHA1(0b07ef99233df32fdc9621b3f1dbca0549ad99a7) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "bncsnd1.bin", 0x000000, 0x080000, CRC(593f29c7) SHA1(b743fa6a029b19570ccc31e5108dccec3a752849) ) ROM_LOAD( "bncsnd2.bin", 0x080000, 0x080000, CRC(589170a9) SHA1(62ec8bfc4d834c07308d5105979b86452340e98b) ) ROM_END @@ -154,7 +154,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "br3_1x.bin", 0x0000, 0x010000, CRC(a7bc60b3) SHA1(73fc3c0f775b88ce4f8ccf7d60399371656c2144) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "raidsnd1.bin", 0x000000, 0x080000, CRC(97427f72) SHA1(ca68bbf9b701a78d69690cddb10bcdcc4214c161) ) ROM_LOAD( "raidsnd2.bin", 0x080000, 0x080000, CRC(6bc06e6f) SHA1(8f821feeece6fa9b253d3b35c0bc05f0491c359c) ) ROM_END @@ -163,7 +163,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "br0_2.bin", 0x0000, 0x010000, CRC(3368f610) SHA1(6af4f91675228d0bebca0b7fcfd4661c561d1e0b) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "raidsnd1.bin", 0x000000, 0x080000, CRC(97427f72) SHA1(ca68bbf9b701a78d69690cddb10bcdcc4214c161) ) ROM_LOAD( "raidsnd2.bin", 0x080000, 0x080000, CRC(6bc06e6f) SHA1(8f821feeece6fa9b253d3b35c0bc05f0491c359c) ) ROM_END @@ -172,7 +172,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "br1_0i.bin", 0x0000, 0x010000, CRC(545aea13) SHA1(ed8b334ccde1581e4e0b3de15c5d42126cb5a752) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "raidsnd1.bin", 0x000000, 0x080000, CRC(97427f72) SHA1(ca68bbf9b701a78d69690cddb10bcdcc4214c161) ) ROM_LOAD( "raidsnd2.bin", 0x080000, 0x080000, CRC(6bc06e6f) SHA1(8f821feeece6fa9b253d3b35c0bc05f0491c359c) ) ROM_END @@ -181,7 +181,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "br3_0.bin", 0x0000, 0x010000, CRC(3e6e2ede) SHA1(eb2b00e3eb62acef89d55dff0fa814c75b3df701) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "raidsnd1.bin", 0x000000, 0x080000, CRC(97427f72) SHA1(ca68bbf9b701a78d69690cddb10bcdcc4214c161) ) ROM_LOAD( "raidsnd2.bin", 0x080000, 0x080000, CRC(6bc06e6f) SHA1(8f821feeece6fa9b253d3b35c0bc05f0491c359c) ) ROM_END @@ -190,7 +190,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "br3_0i.bin", 0x0000, 0x010000, CRC(b9ce0bbd) SHA1(92144925e0e389db4e0b1dcf88e6fb8d21ada8db) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "raidsnd1.bin", 0x000000, 0x080000, CRC(97427f72) SHA1(ca68bbf9b701a78d69690cddb10bcdcc4214c161) ) ROM_LOAD( "raidsnd2.bin", 0x080000, 0x080000, CRC(6bc06e6f) SHA1(8f821feeece6fa9b253d3b35c0bc05f0491c359c) ) ROM_END @@ -201,7 +201,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "bc1_2.bin", 0x0000, 0x020000, CRC(9d68a5f7) SHA1(3b7d7af95b9aaca2cbc249402cf1e3b074dc0817) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "bcsnd1.bin", 0x000000, 0x080000, CRC(7a0a5144) SHA1(84b8a5c58566cf769826023cc221741dd4d6dd0e) ) ROM_LOAD( "bcsnd2.bin", 0x080000, 0x080000, CRC(9faf37ab) SHA1(03eb4918d7de6e472351a563f2beb652094b98f4) ) ROM_LOAD( "bcsnd3.bin", 0x100000, 0x080000, CRC(cd6e26de) SHA1(d84274b3b4bc7126e19bf6c6e1aac561a7aaab77) ) @@ -211,7 +211,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "bc1_2i.bin", 0x0000, 0x020000, CRC(462e25a0) SHA1(52e0b6f89a8c933eca0600e776419234c73e4bdc) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "bcsnd1.bin", 0x000000, 0x080000, CRC(7a0a5144) SHA1(84b8a5c58566cf769826023cc221741dd4d6dd0e) ) ROM_LOAD( "bcsnd2.bin", 0x080000, 0x080000, CRC(9faf37ab) SHA1(03eb4918d7de6e472351a563f2beb652094b98f4) ) ROM_LOAD( "bcsnd3.bin", 0x100000, 0x080000, CRC(cd6e26de) SHA1(d84274b3b4bc7126e19bf6c6e1aac561a7aaab77) ) @@ -221,7 +221,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "bc1_2x.bin", 0x0000, 0x020000, CRC(2e418b81) SHA1(489c5a70d289176ad0f66fa630621e24b2c18ce1) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "bcsnd1.bin", 0x000000, 0x080000, CRC(7a0a5144) SHA1(84b8a5c58566cf769826023cc221741dd4d6dd0e) ) ROM_LOAD( "bcsnd2.bin", 0x080000, 0x080000, CRC(9faf37ab) SHA1(03eb4918d7de6e472351a563f2beb652094b98f4) ) ROM_LOAD( "bcsnd3.bin", 0x100000, 0x080000, CRC(cd6e26de) SHA1(d84274b3b4bc7126e19bf6c6e1aac561a7aaab77) ) @@ -233,7 +233,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "cs3_1.bin", 0x0000, 0x020000, CRC(10b68449) SHA1(8e5688b8d240f4ed4429ddfd97366ca4c998b6ab) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "cssnd1.bin", 0x000000, 0x080000, CRC(a6fedbe0) SHA1(a687151734d378d5c9605be82a22ba50f256885f) ) ROM_LOAD( "cssnd2.bin", 0x080000, 0x080000, CRC(6160f67c) SHA1(c781d47fe3c6f230442e19ca26523b34808b44a1) ) ROM_LOAD( "cssnd3.bin", 0x100000, 0x080000, CRC(3911d57a) SHA1(2f0a3a15237876d04b5c9cb72648b27966cd7fb6) ) @@ -243,7 +243,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "cs3_1i.bin", 0x0000, 0x020000, CRC(cbf0041e) SHA1(9baf9f209f1c4bf59f31437d07051a6cb71e877c) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "cssnd1.bin", 0x000000, 0x080000, CRC(a6fedbe0) SHA1(a687151734d378d5c9605be82a22ba50f256885f) ) ROM_LOAD( "cssnd2.bin", 0x080000, 0x080000, CRC(6160f67c) SHA1(c781d47fe3c6f230442e19ca26523b34808b44a1) ) ROM_LOAD( "cssnd3.bin", 0x100000, 0x080000, CRC(3911d57a) SHA1(2f0a3a15237876d04b5c9cb72648b27966cd7fb6) ) @@ -253,7 +253,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "cs3_1x.bin", 0x0000, 0x020000, CRC(d01bda0b) SHA1(528df320593656040b7491a0f3f24cc489b45722) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "cssnd1.bin", 0x000000, 0x080000, CRC(a6fedbe0) SHA1(a687151734d378d5c9605be82a22ba50f256885f) ) ROM_LOAD( "cssnd2.bin", 0x080000, 0x080000, CRC(6160f67c) SHA1(c781d47fe3c6f230442e19ca26523b34808b44a1) ) ROM_LOAD( "cssnd3.bin", 0x100000, 0x080000, CRC(3911d57a) SHA1(2f0a3a15237876d04b5c9cb72648b27966cd7fb6) ) @@ -263,7 +263,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "c_strike", 0x0000, 0x020000, CRC(d1eac7c6) SHA1(e04a0865e2c55c9351d6bc44616c179a8f5ca059) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "cssnd1.bin", 0x000000, 0x080000, CRC(a6fedbe0) SHA1(a687151734d378d5c9605be82a22ba50f256885f) ) ROM_LOAD( "cssnd2.bin", 0x080000, 0x080000, CRC(6160f67c) SHA1(c781d47fe3c6f230442e19ca26523b34808b44a1) ) ROM_LOAD( "cssnd3.bin", 0x100000, 0x080000, CRC(3911d57a) SHA1(2f0a3a15237876d04b5c9cb72648b27966cd7fb6) ) @@ -275,7 +275,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "ca1_0.bin", 0x0000, 0x020000, CRC(0c9a73b7) SHA1(2ee089ce89f29e804371fcfca82bf22a2ac3197b) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "casnd1.bin", 0x000000, 0x080000, CRC(9bbe8fe4) SHA1(2e5406d72ca731a5960be3a621bbd72064745677) ) ROM_LOAD( "casnd2.bin", 0x080000, 0x080000, CRC(aa9a45d3) SHA1(47289537451aac1049f7a524b079f2912d97b7cf) ) ROM_LOAD( "casnd3.bin", 0x100000, 0x080000, CRC(5764e36d) SHA1(6601946bda40886e3a606accd7c11b31efcdab28) ) @@ -285,7 +285,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "ca1_0x.bin", 0x0000, 0x020000, CRC(a2476d24) SHA1(12f86733c8fa34d84ff6a1840a24eb96bf547c3d) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "casnd1.bin", 0x000000, 0x080000, CRC(9bbe8fe4) SHA1(2e5406d72ca731a5960be3a621bbd72064745677) ) ROM_LOAD( "casnd2.bin", 0x080000, 0x080000, CRC(aa9a45d3) SHA1(47289537451aac1049f7a524b079f2912d97b7cf) ) ROM_LOAD( "casnd3.bin", 0x100000, 0x080000, CRC(5764e36d) SHA1(6601946bda40886e3a606accd7c11b31efcdab28) ) @@ -296,7 +296,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "ca2-1_0.bin", 0x0000, 0x020000, CRC(c45e650d) SHA1(121e5d178c05d9d38dad167083cb0612f70cbd61) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "casnd1.bin", 0x000000, 0x080000, CRC(9bbe8fe4) SHA1(2e5406d72ca731a5960be3a621bbd72064745677) ) ROM_LOAD( "casnd2.bin", 0x080000, 0x080000, CRC(aa9a45d3) SHA1(47289537451aac1049f7a524b079f2912d97b7cf) ) ROM_LOAD( "casnd3.bin", 0x100000, 0x080000, CRC(5764e36d) SHA1(6601946bda40886e3a606accd7c11b31efcdab28) ) @@ -306,7 +306,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "ca2_1.bin", 0x0000, 0x020000, CRC(be069065) SHA1(63c108df781345fdb64dc5177bc28b121b097d3a) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "casnd1.bin", 0x000000, 0x080000, CRC(9bbe8fe4) SHA1(2e5406d72ca731a5960be3a621bbd72064745677) ) ROM_LOAD( "casnd2.bin", 0x080000, 0x080000, CRC(aa9a45d3) SHA1(47289537451aac1049f7a524b079f2912d97b7cf) ) ROM_LOAD( "casnd3.bin", 0x100000, 0x080000, CRC(5764e36d) SHA1(6601946bda40886e3a606accd7c11b31efcdab28) ) @@ -316,7 +316,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "ca2_1i.bin", 0x0000, 0x020000, CRC(fceba4d3) SHA1(9e3ba760dc28122f60e610470ce1f7708eefcbfd) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "casnd1.bin", 0x000000, 0x080000, CRC(9bbe8fe4) SHA1(2e5406d72ca731a5960be3a621bbd72064745677) ) ROM_LOAD( "casnd2.bin", 0x080000, 0x080000, CRC(aa9a45d3) SHA1(47289537451aac1049f7a524b079f2912d97b7cf) ) ROM_LOAD( "casnd3.bin", 0x100000, 0x080000, CRC(5764e36d) SHA1(6601946bda40886e3a606accd7c11b31efcdab28) ) @@ -326,7 +326,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "ca2_1x.bin", 0x0000, 0x020000, CRC(e1d69187) SHA1(623202d8aaa701709bbcf1fabf0ce6db4fcc18ef) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "casnd1.bin", 0x000000, 0x080000, CRC(9bbe8fe4) SHA1(2e5406d72ca731a5960be3a621bbd72064745677) ) ROM_LOAD( "casnd2.bin", 0x080000, 0x080000, CRC(aa9a45d3) SHA1(47289537451aac1049f7a524b079f2912d97b7cf) ) ROM_LOAD( "casnd3.bin", 0x100000, 0x080000, CRC(5764e36d) SHA1(6601946bda40886e3a606accd7c11b31efcdab28) ) @@ -338,7 +338,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "cc1_0.bin", 0x0000, 0x020000, CRC(e227690c) SHA1(df236e03d2a22a712cd740ed90b55d48d29aaf65) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "ccsnd1.bin", 0x000000, 0x080000, CRC(0961a254) SHA1(a6392f00ff6199a1a31395a12695255b9bd67136) ) ROM_LOAD( "ccsnd2.bin", 0x080000, 0x080000, CRC(555a4a7a) SHA1(552275fcf0bb5476f97ecb37aa2d4431eb3256fa) ) ROM_END @@ -347,7 +347,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "cc1_0i.bin", 0x0000, 0x020000, CRC(3961e95b) SHA1(09deee5c3d016da1f1f1b81ed9e4edd7e1633a64) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "ccsnd1.bin", 0x000000, 0x080000, CRC(0961a254) SHA1(a6392f00ff6199a1a31395a12695255b9bd67136) ) ROM_LOAD( "ccsnd2.bin", 0x080000, 0x080000, CRC(555a4a7a) SHA1(552275fcf0bb5476f97ecb37aa2d4431eb3256fa) ) ROM_END @@ -356,7 +356,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "cc1_0x.bin", 0x0000, 0x020000, CRC(88a55a48) SHA1(9567a7d08322de21911bad9b7267c7e5041aa1d1) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "ccsnd1.bin", 0x000000, 0x080000, CRC(0961a254) SHA1(a6392f00ff6199a1a31395a12695255b9bd67136) ) ROM_LOAD( "ccsnd2.bin", 0x080000, 0x080000, CRC(555a4a7a) SHA1(552275fcf0bb5476f97ecb37aa2d4431eb3256fa) ) ROM_END @@ -365,7 +365,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "cc2_0x.bin", 0x0000, 0x020000, CRC(ac987339) SHA1(b56f77120a544893a92689060eb46b6faf9c91dc) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "ccsnd1.bin", 0x000000, 0x080000, CRC(0961a254) SHA1(a6392f00ff6199a1a31395a12695255b9bd67136) ) ROM_LOAD( "ccsnd2.bin", 0x080000, 0x080000, CRC(555a4a7a) SHA1(552275fcf0bb5476f97ecb37aa2d4431eb3256fa) ) ROM_END @@ -376,7 +376,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "cf1_1x.bin", 0x0000, 0x020000, CRC(4267b0f8) SHA1(f0160952af1bfcc08970bb31ba872c8c7e6da996) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "cfsnd1.bin", 0x000000, 0x080000, CRC(cf7d98b3) SHA1(56448d620ab0c9af5ea0f56c29457b80407aa715) ) ROM_LOAD( "cfsnd2.bin", 0x080000, 0x080000, CRC(e413643d) SHA1(b3b1862a79efd8c777c472c9b07668343deb51b6) ) ROM_LOAD( "cfsnd3.bin", 0x100000, 0x080000, CRC(21b51239) SHA1(f8fb9cfc23467d2789474d160038324d366c58f4) ) @@ -388,7 +388,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "cf2_1x.bin", 0x0000, 0x020000, CRC(b872d707) SHA1(1565fd8e15d823fc943da7c35347f5c24cde0858) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "cfsnd1.bin", 0x000000, 0x080000, CRC(cf7d98b3) SHA1(56448d620ab0c9af5ea0f56c29457b80407aa715) ) ROM_LOAD( "cfsnd2.bin", 0x080000, 0x080000, CRC(e413643d) SHA1(b3b1862a79efd8c777c472c9b07668343deb51b6) ) ROM_LOAD( "cfsnd3.bin", 0x100000, 0x080000, CRC(21b51239) SHA1(f8fb9cfc23467d2789474d160038324d366c58f4) ) @@ -400,7 +400,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "eu1_4i.bin", 0x0000, 0x020000, CRC(2280f25a) SHA1(1898aa5eb73f27b33a902c1696679f6dce115640) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "eusnd1.bin", 0x000000, 0x080000, CRC(fa35fcf4) SHA1(9869fb16383b7aa93d044cfc6fd864a442f225e7) ) ROM_LOAD( "eusnd2.bin", 0x080000, 0x080000, CRC(f0218dc1) SHA1(28c149c0f94fe724734b6095b34e54a1e7449f28) ) ROM_LOAD( "eusnd3.bin", 0x100000, 0x080000, CRC(31e63a47) SHA1(985cedec8945c4bb5dec0ed7d888fb4e291bda8b) ) @@ -410,7 +410,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "eu1_4.bin", 0x0000, 0x020000, CRC(f9c6720d) SHA1(cd477099821a36c9731fdaaea900fe3614614798) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "eusnd1.bin", 0x000000, 0x080000, CRC(fa35fcf4) SHA1(9869fb16383b7aa93d044cfc6fd864a442f225e7) ) ROM_LOAD( "eusnd2.bin", 0x080000, 0x080000, CRC(f0218dc1) SHA1(28c149c0f94fe724734b6095b34e54a1e7449f28) ) ROM_LOAD( "eusnd3.bin", 0x100000, 0x080000, CRC(31e63a47) SHA1(985cedec8945c4bb5dec0ed7d888fb4e291bda8b) ) @@ -420,7 +420,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "eu1_4x.bin", 0x0000, 0x020000, CRC(eb2262e4) SHA1(e807f2a5dccb3ceda4edd2a295fcfd7f154bf54d) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "eusnd1.bin", 0x000000, 0x080000, CRC(fa35fcf4) SHA1(9869fb16383b7aa93d044cfc6fd864a442f225e7) ) ROM_LOAD( "eusnd2.bin", 0x080000, 0x080000, CRC(f0218dc1) SHA1(28c149c0f94fe724734b6095b34e54a1e7449f28) ) ROM_LOAD( "eusnd3.bin", 0x100000, 0x080000, CRC(31e63a47) SHA1(985cedec8945c4bb5dec0ed7d888fb4e291bda8b) ) @@ -432,7 +432,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "fn4_1x.bin", 0x0000, 0x020000, CRC(f7bb8da6) SHA1(753edb1123d3ea364ded86b566a2c62a039c3d65) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "fnsnd1.bin", 0x000000, 0x080000, CRC(0f7a6d97) SHA1(f812631af8eb46e188d457d567f42aecceb9e5d2) ) ROM_LOAD( "fnsnd2.bin", 0x080000, 0x080000, CRC(f2d0c27c) SHA1(4d18049a926898f7fbca54dd30519199fe39f8ea) ) ROM_LOAD( "fnsnd3.bin", 0x100000, 0x080000, CRC(7ad8aecc) SHA1(8d10a27efbde41af8e04ebe7e8b4b921443bd560) ) @@ -443,7 +443,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "fn4_1.bin", 0x0000, 0x020000, CRC(801c3db2) SHA1(6c3e9b5ac47807196fb7c9e59112fcbd71edb65d) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "fnsnd1.bin", 0x000000, 0x080000, CRC(0f7a6d97) SHA1(f812631af8eb46e188d457d567f42aecceb9e5d2) ) ROM_LOAD( "fnsnd2.bin", 0x080000, 0x080000, CRC(f2d0c27c) SHA1(4d18049a926898f7fbca54dd30519199fe39f8ea) ) ROM_LOAD( "fnsnd3.bin", 0x100000, 0x080000, CRC(7ad8aecc) SHA1(8d10a27efbde41af8e04ebe7e8b4b921443bd560) ) @@ -453,7 +453,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "fn4_1i.bin", 0x0000, 0x020000, CRC(5b5abde5) SHA1(0583c65755954cc228d32672ea55b7f2afc052c4) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "fnsnd1.bin", 0x000000, 0x080000, CRC(0f7a6d97) SHA1(f812631af8eb46e188d457d567f42aecceb9e5d2) ) ROM_LOAD( "fnsnd2.bin", 0x080000, 0x080000, CRC(f2d0c27c) SHA1(4d18049a926898f7fbca54dd30519199fe39f8ea) ) ROM_LOAD( "fnsnd3.bin", 0x100000, 0x080000, CRC(7ad8aecc) SHA1(8d10a27efbde41af8e04ebe7e8b4b921443bd560) ) @@ -463,7 +463,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) // fixed bits, probably the same as one of the others sets anyway, remove? ROM_LOAD( "frnt8ac", 0x0000, 0x020000, BAD_DUMP CRC(db081875) SHA1(1e994dd411c81eb9d152b9fa2c3e53258d680dfa) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "fnsnd1.bin", 0x000000, 0x080000, CRC(0f7a6d97) SHA1(f812631af8eb46e188d457d567f42aecceb9e5d2) ) ROM_LOAD( "fnsnd2.bin", 0x080000, 0x080000, CRC(f2d0c27c) SHA1(4d18049a926898f7fbca54dd30519199fe39f8ea) ) ROM_LOAD( "fnsnd3.bin", 0x100000, 0x080000, CRC(7ad8aecc) SHA1(8d10a27efbde41af8e04ebe7e8b4b921443bd560) ) @@ -472,7 +472,7 @@ ROM_START( m4frightd ) ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "frite.nig", 0x000000, 0x020000, CRC(57febdc0) SHA1(001b134be59367c332df4df14930045d9437111a) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "fnsnd1.bin", 0x000000, 0x080000, CRC(0f7a6d97) SHA1(f812631af8eb46e188d457d567f42aecceb9e5d2) ) ROM_LOAD( "fnsnd2.bin", 0x080000, 0x080000, CRC(f2d0c27c) SHA1(4d18049a926898f7fbca54dd30519199fe39f8ea) ) ROM_LOAD( "fnsnd3.bin", 0x100000, 0x080000, CRC(7ad8aecc) SHA1(8d10a27efbde41af8e04ebe7e8b4b921443bd560) ) @@ -481,7 +481,7 @@ ROM_START( m4frighte ) ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "fr_ngt._pound5", 0x0000, 0x020000, CRC(3f2570c2) SHA1(98cc2438eb3fbf07481e2f68cac744e9e0a63e0b) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "fnsnd1.bin", 0x000000, 0x080000, CRC(0f7a6d97) SHA1(f812631af8eb46e188d457d567f42aecceb9e5d2) ) ROM_LOAD( "fnsnd2.bin", 0x080000, 0x080000, CRC(f2d0c27c) SHA1(4d18049a926898f7fbca54dd30519199fe39f8ea) ) ROM_LOAD( "fnsnd3.bin", 0x100000, 0x080000, CRC(7ad8aecc) SHA1(8d10a27efbde41af8e04ebe7e8b4b921443bd560) ) @@ -491,7 +491,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "fr.nig", 0x0000, 0x020000, BAD_DUMP CRC(908926eb) SHA1(30e778c18f8e3b72ab88dcce198e4fa39f138bf7) )// Fright Night (Empire) check code is valid (looks bad) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "fnsnd1.bin", 0x000000, 0x080000, CRC(0f7a6d97) SHA1(f812631af8eb46e188d457d567f42aecceb9e5d2) ) ROM_LOAD( "fnsnd2.bin", 0x080000, 0x080000, CRC(f2d0c27c) SHA1(4d18049a926898f7fbca54dd30519199fe39f8ea) ) ROM_LOAD( "fnsnd3.bin", 0x100000, 0x080000, CRC(7ad8aecc) SHA1(8d10a27efbde41af8e04ebe7e8b4b921443bd560) ) @@ -502,10 +502,10 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "tg4_0k.bin", 0x0000, 0x010000, CRC(d579bd7e) SHA1(b3db3c8a7f30d773a63aab0efe753deacd3db96c) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "gambsnd1.bin", 0x000000, 0x080000, CRC(a3114336) SHA1(539c896ae512a01340471e2e0df542e582b11258) ) ROM_LOAD( "gambsnd2.bin", 0x080000, 0x080000, CRC(bc8b78bc) SHA1(6a27804483eaed7912fb6a6e673d1ce9f36371cd) ) - ROM_REGION( 0x100000, "altmsm6376", 0 ) + ROM_REGION( 0x100000, "okicard:altmsm6376", 0 ) // different SFX, does this belong to a specific revision? ROM_LOAD( "gambsnd1f.bin", 0x000000, 0x080000, CRC(249ae0fd) SHA1(024ae694f6d09b7f2bf5b94e3a07e9267707f794) )//replaces gambsnd1.bin ROM_END @@ -514,7 +514,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "tg4_0ki.bin", 0x0000, 0x010000, CRC(52d9981d) SHA1(3e30120491d0546b3e19b4b84079cecadd6cdb94) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "gambsnd1.bin", 0x000000, 0x080000, CRC(a3114336) SHA1(539c896ae512a01340471e2e0df542e582b11258) ) ROM_LOAD( "gambsnd2.bin", 0x080000, 0x080000, CRC(bc8b78bc) SHA1(6a27804483eaed7912fb6a6e673d1ce9f36371cd) ) ROM_END @@ -523,7 +523,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "tg4_1x.bin", 0x0000, 0x010000, CRC(e238c6c2) SHA1(6b148221d8c9468efca8eddc0520f4abf5a38200) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "gambsnd1.bin", 0x000000, 0x080000, CRC(a3114336) SHA1(539c896ae512a01340471e2e0df542e582b11258) ) ROM_LOAD( "gambsnd2.bin", 0x080000, 0x080000, CRC(bc8b78bc) SHA1(6a27804483eaed7912fb6a6e673d1ce9f36371cd) ) ROM_END @@ -533,7 +533,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "ghosttrainvers3-0.bin", 0x0000, 0x010000, CRC(17f3dd0f) SHA1(0364b4fe3fc273a658feeaecee1ebc0b55a12d98) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "gtsnd1.bin", 0x000000, 0x080000, CRC(7fd83279) SHA1(65b52330e8d6ccf5c0575924a1791e7d2001c3d8) ) ROM_LOAD( "gtsnd2.bin", 0x080000, 0x080000, CRC(5bfd0ea2) SHA1(af9adcf517801c775eb316c36538b1bf2262ebb2) ) ROM_END @@ -542,7 +542,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "gt3_0kx.bin", 0x0000, 0x010000, CRC(a6a5461f) SHA1(89652a760a6419064f5c9a52c1bfd066e79e345e) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "gtsnd1.bin", 0x000000, 0x080000, CRC(7fd83279) SHA1(65b52330e8d6ccf5c0575924a1791e7d2001c3d8) ) ROM_LOAD( "gtsnd2.bin", 0x080000, 0x080000, CRC(5bfd0ea2) SHA1(af9adcf517801c775eb316c36538b1bf2262ebb2) ) ROM_END @@ -551,7 +551,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "gt3_1k.bin", 0x0000, 0x010000, CRC(13934116) SHA1(a7e7420e62df0e34a77800e61a9df4ba1e3772c6) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "gtsnd1.bin", 0x000000, 0x080000, CRC(7fd83279) SHA1(65b52330e8d6ccf5c0575924a1791e7d2001c3d8) ) ROM_LOAD( "gtsnd2.bin", 0x080000, 0x080000, CRC(5bfd0ea2) SHA1(af9adcf517801c775eb316c36538b1bf2262ebb2) ) ROM_END @@ -560,7 +560,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "gt3_1ki.bin", 0x0000, 0x010000, CRC(94336475) SHA1(4655631bc65faa82270da606bba8ffcb2d335f26) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "gtsnd1.bin", 0x000000, 0x080000, CRC(7fd83279) SHA1(65b52330e8d6ccf5c0575924a1791e7d2001c3d8) ) ROM_LOAD( "gtsnd2.bin", 0x080000, 0x080000, CRC(5bfd0ea2) SHA1(af9adcf517801c775eb316c36538b1bf2262ebb2) ) ROM_END @@ -570,7 +570,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "gf1_4.bin", 0x0000, 0x020000, CRC(9eb00e69) SHA1(3d04b8c6776bead54d21c0a40d51ed044716897e) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "gfsnd.bin", 0x0000, 0x080000, CRC(1bb14a13) SHA1(44e888e625cce27bc550a93fce3747885802f5c2) ) ROM_END @@ -580,7 +580,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "hh0.3", 0x0000, 0x010000, CRC(95370728) SHA1(63c7f2fa890c385556a570f3e8941f083a3917bc) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "hhsnd1.bin", 0x000000, 0x080000, CRC(a2eff4c6) SHA1(86441371b8efbffb93c6c7d02d45cd5dae73ca45) ) ROM_LOAD( "hhsnd2.bin", 0x080000, 0x080000, CRC(6eb3f52c) SHA1(7b6f7a5bdc5e9937e0b74ce317c951d9ad82425c) ) ROM_END @@ -589,7 +589,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "hh0_2x.bin", 0x0000, 0x010000, CRC(3a32332f) SHA1(837b75eb37367ea204c758918ec8eb6370196aa8) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "hhsnd1.bin", 0x000000, 0x080000, CRC(a2eff4c6) SHA1(86441371b8efbffb93c6c7d02d45cd5dae73ca45) ) ROM_LOAD( "hhsnd2.bin", 0x080000, 0x080000, CRC(6eb3f52c) SHA1(7b6f7a5bdc5e9937e0b74ce317c951d9ad82425c) ) ROM_END @@ -598,7 +598,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "hh3_0.bin", 0x0000, 0x010000, CRC(f0fc3475) SHA1(24f3ab5990d40b742416f600ffa50e6fc02990ca) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "hhsnd1.bin", 0x000000, 0x080000, CRC(a2eff4c6) SHA1(86441371b8efbffb93c6c7d02d45cd5dae73ca45) ) ROM_LOAD( "hhsnd2.bin", 0x080000, 0x080000, CRC(6eb3f52c) SHA1(7b6f7a5bdc5e9937e0b74ce317c951d9ad82425c) ) ROM_END @@ -607,7 +607,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "hh3_0i.bin", 0x0000, 0x010000, CRC(775c1116) SHA1(9fcc9d99b0fc97d98c1a74de7f60e3307ee06448) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "hhsnd1.bin", 0x000000, 0x080000, CRC(a2eff4c6) SHA1(86441371b8efbffb93c6c7d02d45cd5dae73ca45) ) ROM_LOAD( "hhsnd2.bin", 0x080000, 0x080000, CRC(6eb3f52c) SHA1(7b6f7a5bdc5e9937e0b74ce317c951d9ad82425c) ) ROM_END @@ -616,7 +616,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "hh3_0x.bin", 0x0000, 0x010000, CRC(42b064db) SHA1(158ec14a34423bea0f9bfb0255ad7b1b2618c9ca) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "hhsnd1.bin", 0x000000, 0x080000, CRC(a2eff4c6) SHA1(86441371b8efbffb93c6c7d02d45cd5dae73ca45) ) ROM_LOAD( "hhsnd2.bin", 0x080000, 0x080000, CRC(6eb3f52c) SHA1(7b6f7a5bdc5e9937e0b74ce317c951d9ad82425c) ) ROM_END @@ -627,7 +627,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "hisp1.4", 0x0000, 0x010000, CRC(f80ceefb) SHA1(f8925329f8a1f0f0b61d3de9ebc2d76a7b64be45) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "highsnd1.bin", 0x000000, 0x080000, CRC(b5084d9c) SHA1(0b59ec1735ccc641f3883746027aab6660fac471) ) ROM_LOAD( "highsnd2.bin", 0x080000, 0x080000, CRC(0d3b50e9) SHA1(fdca97ec314e2efdd9fcd471ee509fd83f980df6) ) ROM_END @@ -636,7 +636,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "hs1_0x.bin", 0x0000, 0x010000, CRC(0cd54416) SHA1(54c1959ecd0e40b4fd2bce7cbf435f66ddc34626) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "highsnd1.bin", 0x000000, 0x080000, CRC(b5084d9c) SHA1(0b59ec1735ccc641f3883746027aab6660fac471) ) ROM_LOAD( "highsnd2.bin", 0x080000, 0x080000, CRC(0d3b50e9) SHA1(fdca97ec314e2efdd9fcd471ee509fd83f980df6) ) ROM_END @@ -645,7 +645,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "hs1_3.bin", 0x0000, 0x010000, CRC(816101e8) SHA1(654812e4a6cf76787d944abdd914aa5727e06437) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "highsnd1.bin", 0x000000, 0x080000, CRC(b5084d9c) SHA1(0b59ec1735ccc641f3883746027aab6660fac471) ) ROM_LOAD( "highsnd2.bin", 0x080000, 0x080000, CRC(0d3b50e9) SHA1(fdca97ec314e2efdd9fcd471ee509fd83f980df6) ) ROM_END @@ -655,7 +655,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "hs3_0.bin", 0x0000, 0x010000, CRC(43704966) SHA1(78989fa9743efc348f1e81ce040ef9eaf00a47fe) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "highsnd1.bin", 0x000000, 0x080000, CRC(b5084d9c) SHA1(0b59ec1735ccc641f3883746027aab6660fac471) ) ROM_LOAD( "highsnd2.bin", 0x080000, 0x080000, CRC(0d3b50e9) SHA1(fdca97ec314e2efdd9fcd471ee509fd83f980df6) ) ROM_END @@ -664,7 +664,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "hs3_0i.bin", 0x0000, 0x010000, CRC(c4d06c05) SHA1(e9256e656c698723158f835a32cdf668ed6120c8) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "highsnd1.bin", 0x000000, 0x080000, CRC(b5084d9c) SHA1(0b59ec1735ccc641f3883746027aab6660fac471) ) ROM_LOAD( "highsnd2.bin", 0x080000, 0x080000, CRC(0d3b50e9) SHA1(fdca97ec314e2efdd9fcd471ee509fd83f980df6) ) ROM_END @@ -673,7 +673,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "hs3_0x.bin", 0x0000, 0x010000, CRC(9a7276f1) SHA1(a683dcf0272d868dbc8be83ad2debcd174453559) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "highsnd1.bin", 0x000000, 0x080000, CRC(b5084d9c) SHA1(0b59ec1735ccc641f3883746027aab6660fac471) ) ROM_LOAD( "highsnd2.bin", 0x080000, 0x080000, CRC(0d3b50e9) SHA1(fdca97ec314e2efdd9fcd471ee509fd83f980df6) ) ROM_END @@ -685,7 +685,7 @@ ROM_REGION( 0x48, "characteriser:fakechr", 0 ) ROM_LOAD( "db.chr", 0x00, 0x48, CRC(0fc2bb52) SHA1(0d0e47938f6e00166e7352732ddfb7c610f44db2) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "hotsnd1.bin", 0x000000, 0x080000, CRC(eef55915) SHA1(b673a05a0313271cc16645f277d37a4a03deced1) ) ROM_LOAD( "hotsnd2.bin", 0x080000, 0x080000, CRC(92e921ab) SHA1(11e1f3c61a2eddfdcb40f606672d8845000c4ce7) ) ROM_END @@ -696,7 +696,7 @@ ROM_REGION( 0x48, "characteriser:fakechr", 0 ) ROM_LOAD( "db.chr", 0x00, 0x48, CRC(0fc2bb52) SHA1(0d0e47938f6e00166e7352732ddfb7c610f44db2) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "hotsnd1.bin", 0x000000, 0x080000, CRC(eef55915) SHA1(b673a05a0313271cc16645f277d37a4a03deced1) ) ROM_LOAD( "hotsnd2.bin", 0x080000, 0x080000, CRC(92e921ab) SHA1(11e1f3c61a2eddfdcb40f606672d8845000c4ce7) ) ROM_END @@ -708,7 +708,7 @@ ROM_REGION( 0x48, "characteriser:fakechr", 0 ) ROM_LOAD( "db.chr", 0x00, 0x48, CRC(0fc2bb52) SHA1(0d0e47938f6e00166e7352732ddfb7c610f44db2) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "hotsnd1.bin", 0x000000, 0x080000, CRC(eef55915) SHA1(b673a05a0313271cc16645f277d37a4a03deced1) ) ROM_LOAD( "hotsnd2.bin", 0x080000, 0x080000, CRC(92e921ab) SHA1(11e1f3c61a2eddfdcb40f606672d8845000c4ce7) ) ROM_END @@ -720,7 +720,7 @@ ROM_REGION( 0x48, "characteriser:fakechr", 0 ) ROM_LOAD( "db.chr", 0x00, 0x48, CRC(0fc2bb52) SHA1(0d0e47938f6e00166e7352732ddfb7c610f44db2) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "hotsnd1.bin", 0x000000, 0x080000, CRC(eef55915) SHA1(b673a05a0313271cc16645f277d37a4a03deced1) ) ROM_LOAD( "hotsnd2.bin", 0x080000, 0x080000, CRC(92e921ab) SHA1(11e1f3c61a2eddfdcb40f606672d8845000c4ce7) ) ROM_END @@ -730,7 +730,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "ms2_0.bin", 0x0000, 0x010000, CRC(c20172a8) SHA1(0fb97258dd33fa7ff83b8082149069aaf3577480) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "mssnd1.bin", 0x000000, 0x080000, CRC(e8f0e818) SHA1(a874981fc980a0ed49352f5bf89caf80176b3865) ) ROM_LOAD( "mssnd2.bin", 0x080000, 0x080000, CRC(636c329d) SHA1(27503035ea57c7e03a9a07dfc58da997c47dda34) ) ROM_END @@ -739,7 +739,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "ms2_0i.bin", 0x0000, 0x010000, CRC(45a157cb) SHA1(619e05bc0ee01bdb3254269619f761b513d77ee8) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "mssnd1.bin", 0x000000, 0x080000, CRC(e8f0e818) SHA1(a874981fc980a0ed49352f5bf89caf80176b3865) ) ROM_LOAD( "mssnd2.bin", 0x080000, 0x080000, CRC(636c329d) SHA1(27503035ea57c7e03a9a07dfc58da997c47dda34) ) ROM_END @@ -748,7 +748,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "ms2_0x.bin", 0x0000, 0x010000, CRC(e9e40e01) SHA1(487c11c03bfa582424b680d204417eb5e85abfb4) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "mssnd1.bin", 0x000000, 0x080000, CRC(e8f0e818) SHA1(a874981fc980a0ed49352f5bf89caf80176b3865) ) ROM_LOAD( "mssnd2.bin", 0x080000, 0x080000, CRC(636c329d) SHA1(27503035ea57c7e03a9a07dfc58da997c47dda34) ) ROM_END @@ -758,7 +758,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "pinball nudger v0-1", 0x0000, 0x010000, CRC(8d2e5ded) SHA1(51d4ea44d4e8a7bd53f321fd677b12f6bafbc721) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "pinsnd.bin", 0x0000, 0x080000, CRC(30f61dcb) SHA1(c844272ffc264d6dabe1958ef57d10d1ba0c2b1e) ) ROM_END @@ -766,7 +766,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "pn0_2.bin", 0x0000, 0x010000, CRC(d2aab1e0) SHA1(203257c50f79df46561ece5116277a8d56552b04) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "pinsnd.bin", 0x0000, 0x080000, CRC(30f61dcb) SHA1(c844272ffc264d6dabe1958ef57d10d1ba0c2b1e) ) ROM_END @@ -774,7 +774,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "pn1_0.bin", 0x0000, 0x010000, CRC(95dabff1) SHA1(846577f76c6c99cb05f3aab88de80c3373e570c0) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "pinsnd.bin", 0x0000, 0x080000, CRC(30f61dcb) SHA1(c844272ffc264d6dabe1958ef57d10d1ba0c2b1e) ) ROM_END @@ -783,7 +783,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "pf1_3.bin", 0x0000, 0x020000, CRC(5bdacadf) SHA1(3f48faf92ef25ecbb20f6af90adf5bffdaf8bad8) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "pfsnd1.bin", 0x000000, 0x080000, CRC(50ad158e) SHA1(0efcb9f5683cbe5bdec1e13791d8a01cdfcb5f1a) ) ROM_LOAD( "pfsnd2.bin", 0x080000, 0x080000, CRC(80ad0d94) SHA1(2c1c60b681cc80624f8bd120034639f1cce06cc5) ) ROM_LOAD( "pfsnd3.bin", 0x100000, 0x080000, CRC(abc0a0da) SHA1(3048edf44a31d58794a3ee1dad1399559bf14211) ) @@ -793,7 +793,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "pf1_4x.bin", 0x0000, 0x020000, CRC(42cd08bc) SHA1(69a5a5158d78c51e188520dbb16a0a89566ea8b3) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "pfsnd1.bin", 0x000000, 0x080000, CRC(50ad158e) SHA1(0efcb9f5683cbe5bdec1e13791d8a01cdfcb5f1a) ) ROM_LOAD( "pfsnd2.bin", 0x080000, 0x080000, CRC(80ad0d94) SHA1(2c1c60b681cc80624f8bd120034639f1cce06cc5) ) ROM_LOAD( "pfsnd3.bin", 0x100000, 0x080000, CRC(abc0a0da) SHA1(3048edf44a31d58794a3ee1dad1399559bf14211) ) @@ -803,7 +803,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "pf2_0.bin", 0x0000, 0x020000, CRC(159f1ac6) SHA1(5af44ac650b9408afedc7533c2b3e558a84eb727) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "pfsnd1.bin", 0x000000, 0x080000, CRC(50ad158e) SHA1(0efcb9f5683cbe5bdec1e13791d8a01cdfcb5f1a) ) ROM_LOAD( "pfsnd2.bin", 0x080000, 0x080000, CRC(80ad0d94) SHA1(2c1c60b681cc80624f8bd120034639f1cce06cc5) ) ROM_LOAD( "pfsnd3.bin", 0x100000, 0x080000, CRC(abc0a0da) SHA1(3048edf44a31d58794a3ee1dad1399559bf14211) ) @@ -813,7 +813,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "pf2_0x.bin", 0x0000, 0x020000, CRC(ba59a3f9) SHA1(1e2f21c67e8ca41a1cb8e9c412cf911b62511e05) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "pfsnd1.bin", 0x000000, 0x080000, CRC(50ad158e) SHA1(0efcb9f5683cbe5bdec1e13791d8a01cdfcb5f1a) ) ROM_LOAD( "pfsnd2.bin", 0x080000, 0x080000, CRC(80ad0d94) SHA1(2c1c60b681cc80624f8bd120034639f1cce06cc5) ) ROM_LOAD( "pfsnd3.bin", 0x100000, 0x080000, CRC(abc0a0da) SHA1(3048edf44a31d58794a3ee1dad1399559bf14211) ) @@ -826,7 +826,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "tt3_0.bin", 0x0000, 0x010000, CRC(62f31f70) SHA1(e1b50b98cc90513c9fa06d0ea8f70aa45bddc0e6) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "ttsnd1.bin", 0x000000, 0x080000, CRC(6af0c76f) SHA1(8587b499b88b609e48553e610a0ee539f98b70ce) ) ROM_LOAD( "ttsnd2.bin", 0x080000, 0x080000, CRC(9f243ed1) SHA1(c4b83a9b788e4fa2065ff7a270f0dcdecb125e66) ) ROM_END @@ -835,7 +835,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "tt3_0i.bin", 0x0000, 0x010000, CRC(e5533a13) SHA1(0d23503d32c8156112676aaddece1a44614230eb) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "ttsnd1.bin", 0x000000, 0x080000, CRC(6af0c76f) SHA1(8587b499b88b609e48553e610a0ee539f98b70ce) ) ROM_LOAD( "ttsnd2.bin", 0x080000, 0x080000, CRC(9f243ed1) SHA1(c4b83a9b788e4fa2065ff7a270f0dcdecb125e66) ) ROM_END @@ -844,7 +844,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "tt3_0x.bin", 0x0000, 0x010000, CRC(7d00e4ae) SHA1(6bb30af001fc73e354c17a99633b6fa4c50b374d) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "ttsnd1.bin", 0x000000, 0x080000, CRC(6af0c76f) SHA1(8587b499b88b609e48553e610a0ee539f98b70ce) ) ROM_LOAD( "ttsnd2.bin", 0x080000, 0x080000, CRC(9f243ed1) SHA1(c4b83a9b788e4fa2065ff7a270f0dcdecb125e66) ) ROM_END @@ -855,7 +855,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "jne2_5.bin", 0x0000, 0x020000, CRC(541794df) SHA1(08ce8fa1f9ab715bf8bd55a71fc25deead204026) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "jnesnd.bin", 0x0000, 0x080000, CRC(47301e22) SHA1(b7ec2ff3b78ceecc0e50142dbbc40929f2526f3f) ) ROM_END diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4.h mame-0.251+dfsg.1/src/mame/barcrest/mpu4.h --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4.h 2022-12-29 14:20:09.000000000 +0000 @@ -4,6 +4,8 @@ #include "mpu4_characteriser_bootleg.h" #include "mpu4_characteriser_pal.h" #include "mpu4_characteriser_pal_bwb.h" +#include "mpu4_oki_sampled_sound.h" + #include "cpu/m6809/m6809.h" #include "machine/6821pia.h" @@ -17,7 +19,7 @@ #include "machine/ticket.h" #include "machine/timer.h" //hoppers #include "sound/ay8910.h" -#include "sound/okim6376.h" +#include "sound/dac.h" #define MPU4_MASTER_CLOCK XTAL(6'880'000) @@ -35,7 +37,6 @@ #define LOG_CHR_FULL(x) do { if (MPU4VERBOSE) logerror x; } while (0) #define LOG_IC3(x) do { if (MPU4VERBOSE) logerror x; } while (0) #define LOG_IC8(x) do { if (MPU4VERBOSE) logerror x; } while (0) -#define LOG_SS(x) do { if (MPU4VERBOSE) logerror x; } while (0) //reel info @@ -130,6 +131,7 @@ // Features OVER, // overcurrent detection + LVDOFF, // Disable 50hz check P4L, // use pia4 port a leds SCARDL, // use simple card leds }; @@ -144,27 +146,26 @@ , m_maincpu(*this, "maincpu") , m_vfd(*this, "vfd") , m_6840ptm(*this, "ptm_ic2") - , m_ptm_ic3ss(*this, "ptm_ic3ss") , m_pia3(*this, "pia_ic3") , m_pia4(*this, "pia_ic4") , m_pia5(*this, "pia_ic5") , m_pia6(*this, "pia_ic6") , m_pia7(*this, "pia_ic7") , m_pia8(*this, "pia_ic8") - , m_pia_ic4ss(*this, "pia_ic4ss") , m_port_mux(*this, {"ORANGE1", "ORANGE2", "BLACK1", "BLACK2", "ORANGE1", "ORANGE2", "DIL1", "DIL2"}) , m_aux1_port(*this, "AUX1") , m_aux2_port(*this, "AUX2") , m_bank1(*this, "bank1") - , m_msm6376(*this, "msm6376") , m_reel(*this, "reel%u", 0U) , m_meters(*this, "meters") , m_ay8913(*this, "ay8913") + , m_alarmdac(*this, "alarmdac") , m_dataport(*this, "dataport") , m_characteriser(*this, "characteriser") , m_characteriser_bl(*this, "characteriser_bl") , m_characteriser_blastbank(*this, "characteriser_blastbank") , m_characteriser_bwb(*this, "characteriser_bwb") + , m_okicard(*this, "okicard") , m_duart68681(*this, "duart68681") , m_hopper1(*this, "hopper") , m_hopper2(*this, "hopper2") @@ -208,6 +209,7 @@ void tr_hnb(machine_config &config); void tr_htw(machine_config &config); void tr_over(machine_config &config); + void tr_lvdoff(machine_config &config); void tr_p4l(machine_config &config); void tr_scardl(machine_config &config); @@ -262,6 +264,7 @@ case mpu4_traits::HNB: return &mpu4_state::tr_hnb; case mpu4_traits::HTW: return &mpu4_state::tr_htw; case mpu4_traits::OVER: return &mpu4_state::tr_over; + case mpu4_traits::LVDOFF: return &mpu4_state::tr_lvdoff; case mpu4_traits::P4L: return &mpu4_state::tr_p4l; case mpu4_traits::SCARDL: return &mpu4_state::tr_scardl; default: return nullptr; // crash later on invalid arguments @@ -345,10 +348,11 @@ void mpu4_common(machine_config &config); - void mpu4_common2(machine_config &config); void mpu4base(machine_config &config); void mpu4_bacta(machine_config &config); + DECLARE_WRITE_LINE_MEMBER(pia_gb_cb2_w); + protected: void setup_rom_banks(); @@ -380,7 +384,6 @@ uint8_t bankswitch_r(); void bankset_w(uint8_t data); - void ic3ss_w(offs_t offset, uint8_t data); DECLARE_WRITE_LINE_MEMBER(cpu0_irq); DECLARE_WRITE_LINE_MEMBER(ic2_o1_callback); DECLARE_WRITE_LINE_MEMBER(ic2_o2_callback); @@ -412,11 +415,7 @@ void pia_ic8_portb_w(uint8_t data); DECLARE_WRITE_LINE_MEMBER(pia_ic8_ca2_w); DECLARE_WRITE_LINE_MEMBER(pia_ic8_cb2_w); - void pia_gb_porta_w(uint8_t data); - void pia_gb_portb_w(uint8_t data); - uint8_t pia_gb_portb_r(); - DECLARE_WRITE_LINE_MEMBER(pia_gb_ca2_w); - DECLARE_WRITE_LINE_MEMBER(pia_gb_cb2_w); + DECLARE_WRITE_LINE_MEMBER(dataport_rxd); @@ -426,27 +425,26 @@ required_device m_maincpu; optional_device m_vfd; optional_device m_6840ptm; - optional_device m_ptm_ic3ss; optional_device m_pia3; optional_device m_pia4; optional_device m_pia5; optional_device m_pia6; optional_device m_pia7; optional_device m_pia8; - optional_device m_pia_ic4ss; required_ioport_array<8> m_port_mux; required_ioport m_aux1_port; required_ioport m_aux2_port; optional_memory_bank m_bank1; - optional_device m_msm6376; optional_device_array m_reel; required_device m_meters; optional_device m_ay8913; + required_device m_alarmdac; optional_device m_dataport; optional_device m_characteriser; optional_device m_characteriser_bl; optional_device m_characteriser_blastbank; optional_device m_characteriser_bwb; + optional_device m_okicard; optional_device m_duart68681; @@ -492,8 +490,6 @@ uint8_t m_reel_flag = 0; bool m_ic23_active = false; emu_timer *m_ic24_timer = nullptr; - uint8_t m_expansion_latch = 0; - uint8_t m_global_volume = 0; uint8_t m_input_strobe = 0; uint8_t m_lamp_strobe = 0; uint8_t m_lamp_strobe2 = 0; @@ -528,9 +524,6 @@ uint8_t m_hopper_type = 0; uint8_t m_reels = 0; uint8_t m_chrdata = 0; - uint8_t m_t1 = 0; - uint8_t m_t3l = 0; - uint8_t m_t3h = 0; uint8_t m_serial_output = 0; uint8_t m_numbanks = 0; diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4mdm.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4mdm.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4mdm.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4mdm.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -22,7 +22,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "2pun0-0.bin", 0x0000, 0x020000, CRC(f8fd7b92) SHA1(400a66d0b401b2df2e2fb0f70eae6da7e547a50b) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "ctnsnd.hex", 0x0000, 0x080000, CRC(150a4513) SHA1(97147e11b49d18225c527d8a0926118a83ee906c)) ROM_END @@ -30,7 +30,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "sn1_0.bin", 0x0000, 0x010000, CRC(b51ba096) SHA1(c280b8ba4aecd2256e268b9623f84070f38beeb8) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "ctnsnd.hex", 0x0000, 0x080000, CRC(150a4513) SHA1(97147e11b49d18225c527d8a0926118a83ee906c)) // == 2p Unlimited? ROM_END @@ -38,7 +38,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "classic 2p nudger v0-1,27512", 0x0000, 0x010000, CRC(9c22f5f8) SHA1(5391f5d5b3a0861b93702e476d9635ff304a02a2) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "ctnsnd.hex", 0x0000, 0x080000, CRC(150a4513) SHA1(97147e11b49d18225c527d8a0926118a83ee906c)) // == 2p Unlimited? ROM_END @@ -47,7 +47,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "ctn0_3.hex", 0x0000, 0x010000, CRC(7573bbc7) SHA1(bc15b03c9fddbd0b93be259547c5420f0623fd58) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "ctnsnd.hex", 0x0000, 0x080000, CRC(150a4513) SHA1(97147e11b49d18225c527d8a0926118a83ee906c)) // == 2p Unlimited? ROM_END @@ -56,7 +56,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "app1_5.bin", 0x0000, 0x010000, CRC(ebe6e65f) SHA1(aae70efc4b7e0ad9125424acef634361439e0594) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "bigapplesnd.p1", 0x000000, 0x080000, CRC(4afba9b0) SHA1(0a60bb5897ed4403c30902ba12290fd61284d0e7) ) ROM_LOAD( "bigapplesnd.p2", 0x080000, 0x080000, CRC(7de7b74f) SHA1(419998b585e856925d838fe25ecd9f6f41dfc6a8) ) ROM_END @@ -65,7 +65,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "app1_5c", 0x0000, 0x010000, CRC(458e77ce) SHA1(c01f2dd52c67381b4c09051e6a696841ef0777eb) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "bigapplesnd.p1", 0x000000, 0x080000, CRC(4afba9b0) SHA1(0a60bb5897ed4403c30902ba12290fd61284d0e7) ) ROM_LOAD( "bigapplesnd.p2", 0x080000, 0x080000, CRC(7de7b74f) SHA1(419998b585e856925d838fe25ecd9f6f41dfc6a8) ) ROM_END @@ -74,7 +74,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "ba2_0.bin", 0x0000, 0x010000, CRC(2d3db68d) SHA1(9bed97820a527b83f515dca06f032c332cbc11d2) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "bigapplesnd.p1", 0x000000, 0x080000, CRC(4afba9b0) SHA1(0a60bb5897ed4403c30902ba12290fd61284d0e7) ) ROM_LOAD( "bigapplesnd.p2", 0x080000, 0x080000, CRC(7de7b74f) SHA1(419998b585e856925d838fe25ecd9f6f41dfc6a8) ) ROM_END @@ -83,7 +83,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "ba2_0d.bin", 0x0000, 0x010000, CRC(aa9d93ee) SHA1(08c58bcffdf943873a713a006ecb104423b9bb93) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "bigapplesnd.p1", 0x000000, 0x080000, CRC(4afba9b0) SHA1(0a60bb5897ed4403c30902ba12290fd61284d0e7) ) ROM_LOAD( "bigapplesnd.p2", 0x080000, 0x080000, CRC(7de7b74f) SHA1(419998b585e856925d838fe25ecd9f6f41dfc6a8) ) ROM_END @@ -92,7 +92,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "ba6_0x.bin", 0x0000, 0x010000, CRC(7c67032f) SHA1(38f44ec527995a850a0b8fe1d9eab4ee9cae06fa) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "bigapplesnd.p1", 0x000000, 0x080000, CRC(4afba9b0) SHA1(0a60bb5897ed4403c30902ba12290fd61284d0e7) ) ROM_LOAD( "bigapplesnd.p2", 0x080000, 0x080000, CRC(7de7b74f) SHA1(419998b585e856925d838fe25ecd9f6f41dfc6a8) ) ROM_END @@ -101,7 +101,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "ba7_0x.bin", 0x0000, 0x010000, CRC(f393490a) SHA1(48d23e9deb60fe99f9cbe5601053ee6df2b9bf8b) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "bigapplesnd.p1", 0x000000, 0x080000, CRC(4afba9b0) SHA1(0a60bb5897ed4403c30902ba12290fd61284d0e7) ) ROM_LOAD( "bigapplesnd.p2", 0x080000, 0x080000, CRC(7de7b74f) SHA1(419998b585e856925d838fe25ecd9f6f41dfc6a8) ) ROM_END @@ -111,7 +111,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "bt1_2.bin", 0x0000, 0x010000, CRC(184f5277) SHA1(52342577a09f787f77f8e026e8f7a11998681fb5) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "blazingtrails.p1", 0x000000, 0x080000, CRC(2b82701b) SHA1(377fed5d378d6d3abdce59ba9e7f0d7edd756337) ) ROM_LOAD( "blazingtrails.p2", 0x080000, 0x080000, CRC(9338b7fc) SHA1(9252e94feac0d65f40152bb9d049cea85ecd16fa) ) ROM_LOAD( "blazingtrails.p3", 0x100000, 0x080000, CRC(ef37f3fa) SHA1(4e71296cd8eb61ff6b4cf9136dbecdcd6d167472) ) @@ -121,7 +121,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "bt1_3.bin", 0x0000, 0x010000, CRC(6ae5901d) SHA1(0cd2293ca445549e6c0e0a6f9f6adcf5cdc935b0) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "blazingtrails.p1", 0x000000, 0x080000, CRC(2b82701b) SHA1(377fed5d378d6d3abdce59ba9e7f0d7edd756337) ) ROM_LOAD( "blazingtrails.p2", 0x080000, 0x080000, CRC(9338b7fc) SHA1(9252e94feac0d65f40152bb9d049cea85ecd16fa) ) ROM_LOAD( "blazingtrails.p3", 0x100000, 0x080000, CRC(ef37f3fa) SHA1(4e71296cd8eb61ff6b4cf9136dbecdcd6d167472) ) @@ -133,7 +133,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "bm0-1.bin", 0x0000, 0x020000, CRC(15c379d9) SHA1(04d3c869870a4eda4dfd075b1c1a6efb1cf3bf57) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "bmsnd1.bin", 0x000000, 0x080000, CRC(7f645f66) SHA1(db16e92b6b0c9ac12f7305a4f874a304b93404e6) ) ROM_LOAD( "bmsnd2.bin", 0x080000, 0x080000, CRC(b8062605) SHA1(570deb41ab8523c5d9b6281a86b915852f6a2305) ) ROM_END @@ -143,7 +143,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "col0_6k.bin", 0x0000, 0x010000, CRC(53d2431a) SHA1(44da207ce0ba24d110a1aaf6c0705f9c2245d212) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "colsnd1.bin", 0x000000, 0x080000, CRC(a6fa2c68) SHA1(e5572b37086a28bee9ce4dfe549ed60ddbffe444) ) ROM_LOAD( "colsnd2.bin", 0x080000, 0x080000, CRC(8b01f0cb) SHA1(990fb0b51ddf4eb3f436e11d01d0e5e3b2465ac5) ) ROM_END @@ -152,7 +152,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "col0_6s.bin", 0x0000, 0x010000, CRC(e4db7ff7) SHA1(0f8a15b40923ac1cf8780b3b99b0ce070ed1d13d) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "colsnd1.bin", 0x000000, 0x080000, CRC(a6fa2c68) SHA1(e5572b37086a28bee9ce4dfe549ed60ddbffe444) ) ROM_LOAD( "colsnd2.bin", 0x080000, 0x080000, CRC(8b01f0cb) SHA1(990fb0b51ddf4eb3f436e11d01d0e5e3b2465ac5) ) ROM_END @@ -161,7 +161,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "col2_0x.bin", 0x0000, 0x010000, CRC(fae24132) SHA1(91bdafe8bfba2b6b350c783fd46963846ca481c8) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "colsnd1.bin", 0x000000, 0x080000, CRC(a6fa2c68) SHA1(e5572b37086a28bee9ce4dfe549ed60ddbffe444) ) ROM_LOAD( "colsnd2.bin", 0x080000, 0x080000, CRC(8b01f0cb) SHA1(990fb0b51ddf4eb3f436e11d01d0e5e3b2465ac5) ) ROM_END @@ -170,7 +170,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "col3_0x.bin", 0x0000, 0x010000, CRC(40e0ae7f) SHA1(e6a40c07efbde324091f8a52e615e367ccbb4eaf) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "colsnd1.bin", 0x000000, 0x080000, CRC(a6fa2c68) SHA1(e5572b37086a28bee9ce4dfe549ed60ddbffe444) ) ROM_LOAD( "colsnd2.bin", 0x080000, 0x080000, CRC(8b01f0cb) SHA1(990fb0b51ddf4eb3f436e11d01d0e5e3b2465ac5) ) ROM_END @@ -179,7 +179,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "col3_1.bin", 0x0000, 0x010000, CRC(79d7f4fb) SHA1(8d4a19fbde135d95b5f0e6978a8b89baa4dfe139) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "colsnd1.bin", 0x000000, 0x080000, CRC(a6fa2c68) SHA1(e5572b37086a28bee9ce4dfe549ed60ddbffe444) ) ROM_LOAD( "colsnd2.bin", 0x080000, 0x080000, CRC(8b01f0cb) SHA1(990fb0b51ddf4eb3f436e11d01d0e5e3b2465ac5) ) ROM_END @@ -188,7 +188,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "coll10.bin", 0x0000, 0x010000, CRC(a2468607) SHA1(e926025548e4c0ad1e97b35215b2d28c058126dd) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "colsnd1.bin", 0x000000, 0x080000, CRC(a6fa2c68) SHA1(e5572b37086a28bee9ce4dfe549ed60ddbffe444) ) ROM_LOAD( "colsnd2.bin", 0x080000, 0x080000, CRC(8b01f0cb) SHA1(990fb0b51ddf4eb3f436e11d01d0e5e3b2465ac5) ) ROM_END @@ -197,7 +197,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "colossus-v1.0.bin", 0x0000, 0x010000, CRC(4fc41c62) SHA1(1c088dd278e414081e98689a49b8305c3d3d4db3) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "colsnd1.bin", 0x000000, 0x080000, CRC(a6fa2c68) SHA1(e5572b37086a28bee9ce4dfe549ed60ddbffe444) ) ROM_LOAD( "colsnd2.bin", 0x080000, 0x080000, CRC(8b01f0cb) SHA1(990fb0b51ddf4eb3f436e11d01d0e5e3b2465ac5) ) ROM_END @@ -206,7 +206,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "colossus_8.bin", 0x0000, 0x010000, CRC(4ab3ee66) SHA1(2b61b6f9b43592826f7cb755898fcbc4a381f9b3) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "colsnd1.bin", 0x000000, 0x080000, CRC(a6fa2c68) SHA1(e5572b37086a28bee9ce4dfe549ed60ddbffe444) ) ROM_LOAD( "colsnd2.bin", 0x080000, 0x080000, CRC(8b01f0cb) SHA1(990fb0b51ddf4eb3f436e11d01d0e5e3b2465ac5) ) ROM_END @@ -249,7 +249,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "may4_0.bin", 0x0000, 0x010000, CRC(fbbe89eb) SHA1(e5e2e4adabfa41d130dbb7a77c147105ef20ac79) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "mayhemsnd.p1", 0x000000, 0x080000, CRC(f61650ec) SHA1(946fd801ea5f4dd09a911460a709f3942fa412af) ) ROM_LOAD( "mayhemsnd.p2", 0x080000, 0x080000, CRC(637a6b41) SHA1(d342309b78af21a35f50fb23dd2c7ed737abfdb9) ) ROM_END @@ -258,7 +258,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "mayhemv2.bin", 0x0000, 0x010000, CRC(e7c79dd0) SHA1(b7af1fd4853a6ff33d2f3960737caece91714681) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "mayhemsnd.p1", 0x000000, 0x080000, CRC(f61650ec) SHA1(946fd801ea5f4dd09a911460a709f3942fa412af) ) ROM_LOAD( "mayhemsnd.p2", 0x080000, 0x080000, CRC(637a6b41) SHA1(d342309b78af21a35f50fb23dd2c7ed737abfdb9) ) ROM_END @@ -268,7 +268,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "mob1_5.bin", 0x0000, 0x010000, CRC(adbdbf43) SHA1(650d9af466a258d55d9f6703968501a6eebddfef) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "mobsnd1.bin", 0x000000, 0x080000, CRC(b15c0eb4) SHA1(5d06853a1218f10741ea43bd72a48a727b62ddb1) ) ROM_LOAD( "mobsnd2.bin", 0x080000, 0x080000, CRC(6ef3b72c) SHA1(47bf1edacd9da7249e19342234985c746ebf1c4b) ) ROM_LOAD( "mobsnd3.bin", 0x100000, 0x080000, CRC(62a2bf65) SHA1(155536dc29eecc34351c5726d26f02ee8cb0d014) ) @@ -278,7 +278,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "mob1_5d.bin", 0x0000, 0x010000, CRC(2a1d9a20) SHA1(1cd07edcf75f17a98b6377fbfdf88fd7c0abd864) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "mobsnd1.bin", 0x000000, 0x080000, CRC(b15c0eb4) SHA1(5d06853a1218f10741ea43bd72a48a727b62ddb1) ) ROM_LOAD( "mobsnd2.bin", 0x080000, 0x080000, CRC(6ef3b72c) SHA1(47bf1edacd9da7249e19342234985c746ebf1c4b) ) ROM_LOAD( "mobsnd3.bin", 0x100000, 0x080000, CRC(62a2bf65) SHA1(155536dc29eecc34351c5726d26f02ee8cb0d014) ) @@ -289,7 +289,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "mob1_6.bin", 0x0000, 0x010000, CRC(9c718009) SHA1(99b259d5a93f4657ad2b4ae6cd0b2e1324178022) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "mobsnd1.bin", 0x000000, 0x080000, CRC(b15c0eb4) SHA1(5d06853a1218f10741ea43bd72a48a727b62ddb1) ) ROM_LOAD( "mobsnd2.bin", 0x080000, 0x080000, CRC(6ef3b72c) SHA1(47bf1edacd9da7249e19342234985c746ebf1c4b) ) ROM_LOAD( "mobsnd3.bin", 0x100000, 0x080000, CRC(62a2bf65) SHA1(155536dc29eecc34351c5726d26f02ee8cb0d014) ) @@ -310,7 +310,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "gem2_0.bin", 0x0000, 0x010000, CRC(bbab66b8) SHA1(a3a7d40d0ca41e57cd0d6965c0306edca372da1d) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "nudgejems.p1", 0x0000, 0x080000, CRC(e875d82e) SHA1(50fb941ad801397ef3dee651be126c01c9423386) ) ROM_END @@ -328,7 +328,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "sm2_0x.bin", 0x0000, 0x010000, CRC(52042750) SHA1(2fb5ece50aef457bdbdc1fb880b1a87638551545) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "sngsnd.p1", 0x000000, 0x080000, CRC(0bff940e) SHA1(e53df95cd33d759f89f0278312e6e5f9b8abe341) ) ROM_LOAD( "sngsnd.p2", 0x080000, 0x080000, CRC(414aa5a5) SHA1(c6e6bba8c4655dc761dd040c4d615f9d4a739663) ) ROM_END @@ -337,7 +337,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "sm3_0x.bin", 0x0000, 0x010000, CRC(9a4bb2bd) SHA1(8642b15f658e855c0d682fe84b024ddd85eb527e) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "sngsnd.p1", 0x000000, 0x080000, CRC(0bff940e) SHA1(e53df95cd33d759f89f0278312e6e5f9b8abe341) ) ROM_LOAD( "sngsnd.p2", 0x080000, 0x080000, CRC(414aa5a5) SHA1(c6e6bba8c4655dc761dd040c4d615f9d4a739663) ) ROM_END @@ -346,7 +346,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "sm6_0.bin", 0x0000, 0x010000, CRC(7a58d60f) SHA1(989c816dadf01500be01e2c333befef0c3e12054) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "sngsnd.p1", 0x000000, 0x080000, CRC(0bff940e) SHA1(e53df95cd33d759f89f0278312e6e5f9b8abe341) ) ROM_LOAD( "sngsnd.p2", 0x080000, 0x080000, CRC(414aa5a5) SHA1(c6e6bba8c4655dc761dd040c4d615f9d4a739663) ) ROM_END @@ -355,7 +355,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "sma5_8c", 0x0000, 0x010000, CRC(79e12ac0) SHA1(9e8d4ea8f97d1f73ccab079cbf57aa89a12d2e7d) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "sngsnd.p1", 0x000000, 0x080000, CRC(0bff940e) SHA1(e53df95cd33d759f89f0278312e6e5f9b8abe341) ) ROM_LOAD( "sngsnd.p2", 0x080000, 0x080000, CRC(414aa5a5) SHA1(c6e6bba8c4655dc761dd040c4d615f9d4a739663) ) ROM_END @@ -371,7 +371,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "ex1_4.bin", 0x0000, 0x010000, CRC(34c4aee2) SHA1(c5487c5b0144ca188bc2e3926a0343fd4c9c565a) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "mdmexcalibsnd.p1", 0x000000, 0x080000, CRC(8ea73366) SHA1(3ee45ad98e03177eeef97521df7b3d1945242076) ) ROM_LOAD( "mdmexcalibsnd.p2", 0x080000, 0x080000, CRC(0fca6ca2) SHA1(2029d15e3b51069f5847ab3846bf6c064f0a3381) ) ROM_LOAD( "mdmexcalibsnd.p3", 0x100000, 0x080000, CRC(43be816a) SHA1(a95f702ec1bb20f3e0f18984948963b56769f5ba) ) @@ -382,7 +382,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "ex1_0d.bin", 0x0000, 0x010000, CRC(490c510e) SHA1(21a03d8e2dd4d2c7760acbff5705f925fe9f31be) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "mdmexcalibsnd.p1", 0x000000, 0x080000, CRC(8ea73366) SHA1(3ee45ad98e03177eeef97521df7b3d1945242076) ) ROM_LOAD( "mdmexcalibsnd.p2", 0x080000, 0x080000, CRC(0fca6ca2) SHA1(2029d15e3b51069f5847ab3846bf6c064f0a3381) ) ROM_LOAD( "mdmexcalibsnd.p3", 0x100000, 0x080000, CRC(43be816a) SHA1(a95f702ec1bb20f3e0f18984948963b56769f5ba) ) @@ -393,7 +393,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "ff2_1.bin", 0x0000, 0x010000, CRC(3519cba1) SHA1(d83a5370ee82e258024d20ffacec7050950b1326) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "ffsnd2_1.bin", 0x000000, 0x080000, CRC(9b3cdf12) SHA1(1a209985493f686dd37e91693361ecbf32096f66) ) ROM_LOAD( "ffsnd2_2.bin", 0x080000, 0x080000, CRC(0fc33bdf) SHA1(6de715e33411050ee1d2a0f08bf1c9a8001ffb4f) ) ROM_END @@ -403,7 +403,7 @@ ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD( "saf4_1.bin", 0x0000, 0x010000, CRC(ad726457) SHA1(4104be61d179024fae9fb9c631677b1ba56d3f00) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_END @@ -412,14 +412,14 @@ ROM_LOAD( "sb_3.p2", 0x8000, 0x004000, CRC(c22fe04e) SHA1(233ee0795b0029389247a9550ef39af95f671870) ) ROM_LOAD( "sb_3.p1", 0xc000, 0x004000, CRC(98fdcaba) SHA1(f4a74d5550dd9fc8bff35a583b3289e1bb0be9d5) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_END ROM_START( m4ewshft ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD( "each_way_shifter=mdm=_v1-0.bin", 0x0000, 0x010000, CRC(506b6cf0) SHA1(870e356b9785e51c5be5d6bc6af9ea7640b51ee8) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "each_way_shifter-snd1.bin", 0x000000, 0x080000, CRC(b21f9b09) SHA1(69ac3ca2874fc3aebd34dd225a195ad1c0305d00) ) ROM_LOAD( "each_way_shifter-snd2.bin", 0x080000, 0x080000, CRC(e3ce5ec5) SHA1(9c7eefa4042b1b1aca3d0fbefcad10db34992c43) ) ROM_END diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4misc.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4misc.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4misc.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4misc.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -29,7 +29,7 @@ ROM_REGION( 0x48, "characteriser:fakechr", 0 ) ROM_LOAD( "bang.chr", 0x0000, 0x000048, CRC(aacbab22) SHA1(1f394b8947486f319743c0703884ecd35214c433) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "bangs1.hex", 0x000000, 0x080000, CRC(aa460a90) SHA1(e5e80d8b14bd976ed104e376c2e6f995870b0d77) ) ROM_LOAD( "bangs2.hex", 0x080000, 0x080000, CRC(518ebd38) SHA1(6eaaf0cb34dd430f16b88f9d1ed97d6fb59d00ea) ) ROM_LOAD( "bangs3.hex", 0x100000, 0x080000, CRC(2da78a75) SHA1(95975bc76fc32d05bd998bb75dcafc6eef7661b3) ) @@ -41,7 +41,7 @@ ROM_REGION( 0x48, "characteriser:fakechr", 0 ) ROM_LOAD( "bang.chr", 0x0000, 0x000048, CRC(aacbab22) SHA1(1f394b8947486f319743c0703884ecd35214c433) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "bangs1.hex", 0x000000, 0x080000, CRC(aa460a90) SHA1(e5e80d8b14bd976ed104e376c2e6f995870b0d77) ) ROM_LOAD( "bangs2.hex", 0x080000, 0x080000, CRC(518ebd38) SHA1(6eaaf0cb34dd430f16b88f9d1ed97d6fb59d00ea) ) ROM_LOAD( "bangs3.hex", 0x100000, 0x080000, CRC(2da78a75) SHA1(95975bc76fc32d05bd998bb75dcafc6eef7661b3) ) @@ -53,7 +53,7 @@ ROM_REGION( 0x48, "characteriser:fakechr", 0 ) ROM_LOAD( "bang.chr", 0x0000, 0x000048, CRC(aacbab22) SHA1(1f394b8947486f319743c0703884ecd35214c433) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "bangs1.hex", 0x000000, 0x080000, CRC(aa460a90) SHA1(e5e80d8b14bd976ed104e376c2e6f995870b0d77) ) ROM_LOAD( "bangs2.hex", 0x080000, 0x080000, CRC(518ebd38) SHA1(6eaaf0cb34dd430f16b88f9d1ed97d6fb59d00ea) ) ROM_LOAD( "bangs3.hex", 0x100000, 0x080000, CRC(2da78a75) SHA1(95975bc76fc32d05bd998bb75dcafc6eef7661b3) ) @@ -61,12 +61,12 @@ #define M4WWC_SOUND \ - ROM_REGION( 0x180000, "altmsm6376", 0 ) \ + ROM_REGION( 0x180000, "okicard:altmsm6376", 0 ) \ /* 2 sets of sound roms, one contains an extra sample */ \ ROM_LOAD( "wacky1.hex", 0x000000, 0x080000, CRC(379d7af6) SHA1(3b1988c1ab570c075572d0e9bf03fcb331ea4a2c) ) \ /* rom 2? should it match? */ \ ROM_LOAD( "wacky3.hex", 0x100000, 0x080000, CRC(c7def11a) SHA1(6aab2b7f7e4c852891ee09e91a8a085e9b28803f) ) \ - ROM_REGION( 0x180000, "msm6376", 0 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) \ ROM_LOAD( "wacky1snd.bin", 0x000000, 0x080000, CRC(45d6869a) SHA1(c1294522d190d22852b5c6006c92911f9e89cfac) ) \ ROM_LOAD( "wacky2snd.bin", 0x080000, 0x080000, CRC(18b5f8c8) SHA1(e4dc312eea777c2375ba8c2be2f3c2be71bea5c4) ) \ ROM_LOAD( "wacky3snd.bin", 0x100000, 0x080000, CRC(0516acad) SHA1(cfecd089c7250cb19c9e4ca251591f820acefd88) ) @@ -96,7 +96,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "scre0-8n.p1", 0x0000, 0x020000, CRC(5e07b33a) SHA1(6e8835edb61bd0777751bfdfe66d729554a9d6eb) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "screwsnd.p1", 0x000000, 0x080000, CRC(6fe4888c) SHA1(b02b7f322d22080123e8b18326910031aa9d39b4) ) ROM_LOAD( "screwsnd.p2", 0x080000, 0x080000, CRC(29e842ee) SHA1(3325b137361c69244fffaa0d0e39e60106eaa5f9) ) ROM_LOAD( "screwsnd.p3", 0x100000, 0x080000, CRC(91ef193f) SHA1(a356642ae1093cf69486c434673531042ae27be7) ) @@ -106,7 +106,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "scre0-8p.p1", 0x0000, 0x020000, CRC(34a70a77) SHA1(f76de47f6919d380eb0d0eeffc0e5dda72345038) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "screwsnd.p1", 0x000000, 0x080000, CRC(6fe4888c) SHA1(b02b7f322d22080123e8b18326910031aa9d39b4) ) ROM_LOAD( "screwsnd.p2", 0x080000, 0x080000, CRC(29e842ee) SHA1(3325b137361c69244fffaa0d0e39e60106eaa5f9) ) ROM_LOAD( "screwsnd.p3", 0x100000, 0x080000, CRC(91ef193f) SHA1(a356642ae1093cf69486c434673531042ae27be7) ) @@ -116,7 +116,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "screwinaroundv0-7.bin", 0x0000, 0x020000, CRC(78a1e3ca) SHA1(a3d6e76a474a3a5cd74e4b527aa575f21825a7aa) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "screwsnd.p1", 0x000000, 0x080000, CRC(6fe4888c) SHA1(b02b7f322d22080123e8b18326910031aa9d39b4) ) ROM_LOAD( "screwsnd.p2", 0x080000, 0x080000, CRC(29e842ee) SHA1(3325b137361c69244fffaa0d0e39e60106eaa5f9) ) ROM_LOAD( "screwsnd.p3", 0x100000, 0x080000, CRC(91ef193f) SHA1(a356642ae1093cf69486c434673531042ae27be7) ) @@ -126,7 +126,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "screw0_5.p1", 0x000000, 0x020000, CRC(4c0e8300) SHA1(1fea75f3cb1a96c14bd0e56a95bafd22996d002d) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "screwsnd.p1", 0x000000, 0x080000, CRC(6fe4888c) SHA1(b02b7f322d22080123e8b18326910031aa9d39b4) ) ROM_LOAD( "screwsnd.p2", 0x080000, 0x080000, CRC(29e842ee) SHA1(3325b137361c69244fffaa0d0e39e60106eaa5f9) ) ROM_LOAD( "screwsnd.p3", 0x100000, 0x080000, CRC(91ef193f) SHA1(a356642ae1093cf69486c434673531042ae27be7) ) @@ -135,11 +135,11 @@ ROM_START( m4vfm ) ROM_REGION( 0x080000, "maincpu", 0 ) ROM_LOAD( "v_f_mon", 0x0000, 0x020000, CRC(e4add02c) SHA1(5ef1bdd532ef0801b96ceae941f3da789039811c) ) - ROM_REGION( 0x080000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x080000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_END #define M4JIGGIN_SOUND \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "jigsnd1.oki", 0x000000, 0x080000, CRC(581fa143) SHA1(e35186597fc7932d306080ecc82c55af4b769367) ) \ ROM_LOAD( "jigsnd2.oki", 0x080000, 0x080000, CRC(34c6fc3a) SHA1(6bfe52a94d8bed5b30d9ed741db7816ddc712aa3) ) @@ -158,7 +158,7 @@ #define GAME_FLAGS (MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK|MACHINE_MECHANICAL) #define M4DCRLS_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "71000110.bin", 0x0000, 0x080000, CRC(0373a197) SHA1(b32bf521e36b5a53170d3a6ec545ce8db3a5094d) ) #undef GAME_CUSTOM @@ -205,7 +205,7 @@ #define M4JUNGJK_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "71000080.p1", 0x000000, 0x080000, CRC(b39d5e03) SHA1(94c9208601ea230463b460f5b6ea668363d239f4) ) \ ROM_LOAD( "71000080.p2", 0x080000, 0x080000, CRC(ad6da9af) SHA1(9ec8c8fd7b9bcd1d4c6ed93726fafe9a50a15894) ) @@ -230,7 +230,7 @@ #define M4RHNOTE_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "rhnsnd.bin", 0x0000, 0x080000, CRC(e03eaa43) SHA1(69117021adc1a8968d50703336147a7344c62100) ) // = 70000120.hex #undef GAME_CUSTOM @@ -269,7 +269,7 @@ GAME_CUSTOM( 199?, m4rhnote__y, m4rhnote, "rhn_std_110_lv.bin", 0x0000, 0x040000, CRC(922b8196) SHA1(6fdbf301aaadacaeabf29ad11c67b22122954051), "Qps","Red Hot Notes (Qps) (MPU4) (set 26)" ) #define M4RHROCK_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) /* 71000200.hi padded with 0xff as original IntelHex was undersize */ \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* 71000200.hi padded with 0xff as original IntelHex was undersize */ \ ROM_LOAD( "71000200.lo", 0x00000, 0x80000, CRC(b426e83f) SHA1(c30b3868f2c6a4f84a678e2c5151861619b27905) ) \ ROM_LOAD( "71000200.hi", 0x80000, 0x80000, CRC(3054ff83) SHA1(241ab9b634c83d5b388eff2d598e7897aa7dd703) ) @@ -289,7 +289,7 @@ // 71000180.lo.hex and 71000180.hi.hex converted #define M4RHWHL_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "redhotwheelssnd.p1", 0x000000, 0x080000, CRC(7b274a71) SHA1(38ba69084819133253b41f2eb1d784104e5f10f7) ) \ ROM_LOAD( "redhotwheelssnd.p2", 0x080000, 0x080000, CRC(e36e19e2) SHA1(204554622c9020479b095acd4fbab1f21f829137) ) @@ -310,7 +310,7 @@ #define M4RDEAL_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ ROM_START( setname ) \ @@ -333,7 +333,7 @@ #define M4SHOKNR_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "snrsnd.p1", 0x000000, 0x080000, CRC(985c7c8c) SHA1(d2740ff6192c21af3a8a8a9a92b6fd604b40e9d1) ) \ ROM_LOAD( "snrsnd.p2", 0x080000, 0x080000, CRC(6a3a57ce) SHA1(3aaa0a761e17a2a14196cb023b10a49b44ba1046) ) \ ROM_LOAD( "shock.s2", 0x080000, 0x080000, CRC(10e9912f) SHA1(833d2b125bf30bdb8de71f6c9d8a9fe92701f741) ) /* alt snd2 */ @@ -354,7 +354,7 @@ // 71000300.lo.hex and 71000300.hi.hex converted #define M4TORNAD_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "tornadosnd.p1", 0x000000, 0x080000, CRC(cac88f25) SHA1(6ccbf372d983a47a49caedb8a526fc7703b31ed4) ) \ ROM_LOAD( "tornadosnd.p2", 0x080000, 0x080000, CRC(ef4f563d) SHA1(1268061edd93474296e3454e0a2e706b90c0621c) ) @@ -378,7 +378,7 @@ //=71000250.lo.hex and hi.hex converted #define M4SHKWAV_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "shocksnd.p1", 0x000000, 0x080000, CRC(54bf0ddb) SHA1(693b855367972b5a45e9d2d6152849ab2cde38a7) ) \ ROM_LOAD( "shocksnd.p2", 0x080000, 0x080000, CRC(facebc55) SHA1(75367473646cfc735f4d1267e13a9c92ea19c4e3) ) @@ -408,7 +408,7 @@ #define M4CLAB_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "clab_snd1_c8a6.bin", 0x000000, 0x080000, CRC(cf9de981) SHA1(e5c73e9b9db9ac512602c2dd586ca5cf65f98bc1) ) \ ROM_LOAD( "clab_snd2_517a.bin", 0x080000, 0x080000, CRC(d4eb949e) SHA1(0ebbd1b5e3c86da94f35c69d9d60e36844cc4d7e) ) //71000010 @@ -434,7 +434,7 @@ GAME_CUSTOM( 199?, m4clab__j, m4clab, "clabrom", 0x0000, 0x040000, CRC(d80ecff5) SHA1(2608e95b718ecd49d880fd9911cb97e6644a307d), "Qps","Cash Lab (Qps) (MPU4) (set 11)" ) #define M4SDQUID_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ ROM_START( setname ) \ @@ -460,7 +460,7 @@ #define M4LOOPLT_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "71000500.bin", 0x0000, 0x080000, CRC(94fe58f4) SHA1(e07d8e6d4b1e660abc4fa08d703fc0e586f3570d) ) #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4mod2sw.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4mod2sw.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4mod2sw.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4mod2sw.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -151,8 +151,7 @@ m_ay8913->port_a_write_callback().set(FUNC(mpu4mod2_machines_state::ay8912_outport_w)); m_ay8913->set_flags(AY8910_SINGLE_OUTPUT); m_ay8913->set_resistors_load(820, 0, 0); - m_ay8913->add_route(ALL_OUTPUTS, "lspeaker", 1.0); - m_ay8913->add_route(ALL_OUTPUTS, "rspeaker", 1.0); + m_ay8913->add_route(ALL_OUTPUTS, "mono", 1.0); } @@ -2479,6 +2478,11 @@ *********************************************************************************************************/ +ROM_START( m4tst ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "ut4.p1", 0xC000, 0x4000, CRC(086dc325) SHA1(923caeb61347ac9d3e6bcec45998ddf04b2c8ffd)) +ROM_END + ROM_START( m4tst2 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "ut2.p1", 0xe000, 0x2000, CRC(f7fb6575) SHA1(f7961cbd0801b9561d8cd2d23081043d733e1902)) @@ -2494,6 +2498,7 @@ ROM_LOAD( "rtv.p1", 0x08000, 0x08000, CRC(7b78f3f2) SHA1(07ef8e6a08fd70ee48e4463672a1230ecc669532) ) ROM_END +GAME( 198?, m4tst, 0, mod2_no_bacta(R4, RT1, OVER), mpu4, mpu4mod2_machines_state, init_m4, ROT0, "Barcrest","MPU4 Unit Test (Program 4)",MACHINE_MECHANICAL ) GAME( 198?, m4tst2, 0, mod2_no_bacta(R4, RT1, OVER), mpu4, mpu4mod2_machines_state, init_m4, ROT0, "Barcrest","MPU4 Unit Test (Program 2)",MACHINE_MECHANICAL ) GAME( 198?, m4clr, 0, mod2_no_bacta(R4, RT1, OVER), mpu4, mpu4mod2_machines_state, init_m4, ROT0, "Barcrest","MPU4 Meter Clear ROM",MACHINE_MECHANICAL ) GAME( 198?, m4rltst, 0, mod2_no_bacta(R4, RT1, OVER), mpu4, mpu4mod2_machines_state, init_m4, ROT0, "Barcrest","MPU4 Reel Test (3.0)",MACHINE_MECHANICAL ) diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4mod4oki.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4mod4oki.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4mod4oki.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4mod4oki.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -277,7 +277,7 @@ #define M4ANDYCP_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "andsnd.bin", 0x000000, 0x080000, CRC(7d568671) SHA1(3a0a6af3dc980f2ccff0b6ef85833eb2e352031a) ) \ ROM_LOAD( "andsnd2.bin", 0x080000, 0x080000, CRC(98a586ee) SHA1(94b94d198725e8174e14873b99afa19217a1d4fa) ) @@ -387,7 +387,7 @@ // GEEN TUBES, can run with door open #define M4ANDYCP_DUT_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "sdac_1.snd", 0x000000, 0x080000, CRC(5ce93532) SHA1(547f98740889e6fbafc5a0c517ff75de41f2acc7) ) \ ROM_LOAD( "sdac_2.snd", 0x080000, 0x080000, CRC(22dacd4b) SHA1(ad2dc943d4e3ec54937acacb963da938da809614) ) @@ -412,7 +412,7 @@ #define M4ANDYFL_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "alfsnd0.1", 0x0000, 0x080000, CRC(6691bc25) SHA1(4dd67b8bbdc5d707814b756005075fcb4f0c8be4) ) #undef GAME_CUSTOM @@ -519,7 +519,7 @@ #define M4DTYFRE_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "dutsnd.p1", 0x000000, 0x080000, CRC(a5829cec) SHA1(eb65c86125350a7f384f9033f6a217284b6ff3d1) ) \ ROM_LOAD( "dutsnd.p2", 0x080000, 0x080000, CRC(1e5d8407) SHA1(64ee6eba3fb7700a06b89a1e0489a0cd54bb89fd) ) @@ -624,7 +624,7 @@ *****************************************************************************************************************************************************************************/ #define M4SHODF_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "sdfsnd.p1", 0x000000, 0x080000, CRC(a5829cec) SHA1(eb65c86125350a7f384f9033f6a217284b6ff3d1) ) \ ROM_LOAD( "sdfsnd.p2", 0x080000, 0x080000, CRC(1e5d8407) SHA1(64ee6eba3fb7700a06b89a1e0489a0cd54bb89fd) ) @@ -664,7 +664,7 @@ *****************************************************************************************************************************************************************************/ #define M4PRZDTY_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "pdusnd.p2", 0x000000, 0x080000, CRC(a5829cec) SHA1(eb65c86125350a7f384f9033f6a217284b6ff3d1) ) \ ROM_LOAD( "pdusnd.p1", 0x080000, 0x080000, CRC(1e5d8407) SHA1(64ee6eba3fb7700a06b89a1e0489a0cd54bb89fd) ) @@ -707,7 +707,7 @@ #define M4RHOG_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "rr6snd.p1", 0x000000, 0x080000, CRC(a5ec3f46) SHA1(2d6f1adbbd8ac931a99a7d3d9caa2a7a117ac3fa) ) \ ROM_LOAD( "rr6snd.p2", 0x080000, 0x080000, CRC(e5b72ef2) SHA1(dcdfa162db8bf3f9610709b5a8f3b695f42b2371) ) @@ -825,7 +825,7 @@ #define M4ANDYGE_EXTRA_ROMS \ ROM_REGION( 0x1200, "plds", 0 ) /* PAL16V8 PLD, like others - CHR? Guess it should be here... */ \ ROM_LOAD( "age.bin", 0x0000, 0x000117, CRC(901359e5) SHA1(7dbcd6023e7ce68f4aa7f191f572d74f21f978aa) ) \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "an2snd.p1", 0x000000, 0x080000, CRC(5394e9ae) SHA1(86ccd8531fc87f34d3c5482ba7e5a2c06ea69491) ) \ ROM_LOAD( "an2snd.p2", 0x080000, 0x080000, CRC(109ace1f) SHA1(9f0e8065186beb61ed50fea834de2d91e68db953) ) @@ -920,7 +920,7 @@ // boots #define M4DENMEN_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "densnd1.hex", 0x000000, 0x080000, CRC(468a8ec7) SHA1(ec450cd86fda09bc94caf913e9ee7900cfeaa0f2) ) \ ROM_LOAD( "densnd2.hex", 0x080000, 0x080000, CRC(1c20a490) SHA1(62eddc469e4b93ea1f82070600fce628dc526f54) ) @@ -985,7 +985,7 @@ // boots #define M4CRMAZE_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "crmsnd.p1", 0x000000, 0x080000, CRC(e05cdf96) SHA1(c85c7b31b775e3cc2d7f943eb02ff5ebae6c6080) ) \ ROM_LOAD( "crmsnd.p2", 0x080000, 0x080000, CRC(11da0781) SHA1(cd63834bf5d5034c2473372bfcc4930c300333f7) ) \ @@ -1055,7 +1055,7 @@ // boot as long as you set a jackpot key #define M4SHOCM_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing */ #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,input,name,offset,length,hash,company,title) \ @@ -1092,7 +1092,7 @@ // these were in the Crystal Maze set, but are Cash Machine #define M4CASHMN_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cmasnd.p1", 0x000000, 0x080000, CRC(1e7e13b8) SHA1(2db5c3789ad1b9bdb59e058562bd8be181ba0259) ) \ ROM_LOAD( "cmasnd.p2", 0x080000, 0x080000, CRC(cce703a8) SHA1(97487f3df0724d3ee01f6f4deae126aec6d2dd68) ) @@ -1199,7 +1199,7 @@ *****************************************************************************************************************************************************************************/ #define M4TOPTEN_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "tops1.hex", 0x000000, 0x080000, CRC(70f16892) SHA1(e6448831d3ce7fa251b40023bc7d5d6dee9d6793) ) \ ROM_LOAD( "tops2.hex", 0x080000, 0x080000, CRC(5fc888b0) SHA1(8d50ee4f36bd36aed5d0e7a77f76bd6caffc6376) ) @@ -1302,7 +1302,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "take5.bin", 0x0000, 0x020000, CRC(24beb7d6) SHA1(746beccaf57fd0c54c8cf8d742b8ef50563a40fd) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "tfive1.hex", 0x000000, 0x080000, CRC(70f16892) SHA1(e6448831d3ce7fa251b40023bc7d5d6dee9d6793) ) ROM_LOAD( "tfive2.hex", 0x080000, 0x080000, CRC(5fc888b0) SHA1(8d50ee4f36bd36aed5d0e7a77f76bd6caffc6376) ) ROM_END @@ -1320,10 +1320,10 @@ *****************************************************************************************************************************************************************************/ #define M4TOOT_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "tocsnd.p1", 0x000000, 0x080000, CRC(b9527b0e) SHA1(4dc5f6794c3e63c8faced34e166dcc748ffb4941) ) \ ROM_LOAD( "tocsnd.p2", 0x080000, 0x080000, CRC(f684a488) SHA1(7c93cda3d3b55d9818625f696798c7c2cde79fa8) ) \ - ROM_REGION( 0x100000, "altmsm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:altmsm6376", 0 ) \ ROM_LOAD( "totsnd.p1", 0x0000, 0x080000, CRC(684e9eb1) SHA1(8af28de879ae41efa07dfb07ecbd6c72201749a7) ) #undef GAME_CUSTOM @@ -1425,7 +1425,7 @@ *****************************************************************************************************************************************************************************/ #define M4EAW_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "er4snd.p1", 0x000000, 0x080000, CRC(32fd0836) SHA1(ea68252b690fe1d6070209cbcfb65fe20926c6ce) ) \ ROM_LOAD( "er4snd.p2", 0x080000, 0x080000, CRC(1df9c24f) SHA1(f0d31b1bec6f3a9791f7fabe57b45687df900efa) ) @@ -1582,7 +1582,7 @@ *****************************************************************************************************************************************************************************/ #define M4WTA_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "winsnd.p1", 0x000000, 0x080000, CRC(a913ad0d) SHA1(5f39b661912da903ce8d6658b7848081b191ea56) ) \ ROM_LOAD( "winsnd.p2", 0x080000, 0x080000, CRC(6a22b39f) SHA1(0e0dbeac4310e03490b665fff514392481ad265f) ) @@ -1661,7 +1661,7 @@ *****************************************************************************************************************************************************************************/ #define M4PRZWTA_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "pwnsnd.p1", 0x000000, 0x080000, CRC(c0f5e160) SHA1(eff218a36912fe599e9d73a96b49e75335bba272) ) \ ROM_LOAD( "pwnsnd.p2", 0x080000, 0x080000, CRC(d81dfc8f) SHA1(5fcfcba836080b5752911d69dfe650614acbf845) ) @@ -1705,7 +1705,7 @@ // Wrong Sound, Need V1 #define M4GOODTM_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "gtrsnd.p1", 0x000000, 0x080000, CRC(23317580) SHA1(c0c5244ddcf976211e2a5e5a0b1dbc6faaec22b4) ) \ ROM_LOAD( "gtrsnd.p2", 0x080000, 0x080000, CRC(866ce0d2) SHA1(46e800c7364a6d291c6af87b30c680c530100e74) ) @@ -1829,9 +1829,9 @@ *****************************************************************************************************************************************************************************/ #define M4JPGEM_EXTRA_ROMS \ - ROM_REGION( 0x100000, "altmsm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:altmsm6376", 0 ) \ ROM_LOAD( "cg4snd.p1", 0x000000, 0x080000, CRC(e4addde8) SHA1(6b84de51cc5195d551e0787ff92bfa4371ab27a3) ) \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "jagsnd.p1", 0x000000, 0x080000, CRC(7488f7a7) SHA1(d581e9d6b5052ee8fee353a83e9d9031443d060a) ) #undef GAME_CUSTOM @@ -1986,7 +1986,7 @@ *****************************************************************************************************************************************************************************/ #define M4JPGEMC_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM @@ -2034,7 +2034,7 @@ *****************************************************************************************************************************************************************************/ #define M4JOLGEM_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "jolly1.hex", 0x000000, 0x080000, CRC(de0edae5) SHA1(e3e21e28ae5e838bd6eacc7cf7b20204d7b0327d) ) \ ROM_LOAD( "jolly2.hex", 0x080000, 0x080000, CRC(08ae81a2) SHA1(6459a694cd820f1a55b636f7c5c77674d3fe4bdb) ) @@ -2150,10 +2150,10 @@ *****************************************************************************************************************************************************************************/ #define M4HITTOP_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "hi4snd.p1", 0x000000, 0x080000, CRC(066f262b) SHA1(fd48da486592740c68ee497396602199101711a6) ) \ ROM_LOAD( "hi4snd.p2", 0x080000, 0x080000, CRC(0ee89f6c) SHA1(7088149000efd1dcdf37aa9b88f7c6491184da24) ) \ - ROM_REGION( 0x100000, "altmsm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:altmsm6376", 0 ) \ ROM_LOAD( "httsnd.p1", 0x000000, 0x080000, CRC(1cfb12d2) SHA1(d909c7ee8ea10587a9a9251af943b0151d2c4a16) ) #undef GAME_CUSTOM @@ -2278,7 +2278,7 @@ // 17ALM (need hopper, use Q to open door and run in demo mode) #define M4NNWW_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cn4snd.p1", 0x0000, 0x080000, CRC(720011ce) SHA1(fa9108463131ea7e64525e080ac0eff2f6708db8) ) #undef GAME_CUSTOM @@ -2426,7 +2426,7 @@ *****************************************************************************************************************************************************************************/ #define M4RFYM_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "runsnd.p1", 0x000000, 0x080000, CRC(a37a3a6d) SHA1(b82c7e90508795a53b91d7dab7938abf07e8ab4c) ) \ ROM_LOAD( "runsnd.p2", 0x080000, 0x080000, CRC(1c03046f) SHA1(5235b2f60f12cbee11fb5e54e1858a11a755f460) ) @@ -2533,7 +2533,7 @@ *****************************************************************************************************************************************************************************/ #define M4PRZRFM_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ @@ -2572,7 +2572,7 @@ *****************************************************************************************************************************************************************************/ #define M4READY_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "rgosnd.p1", 0x000000, 0x080000, CRC(d9345794) SHA1(4ed060fe61b3530e88ba9afea1fb69efed47c955) ) \ ROM_LOAD( "rgosnd.p2", 0x080000, 0x080000, CRC(4656f94e) SHA1(2f276ced34a43bb7fc69304f519b913d699c3450) ) @@ -2679,7 +2679,7 @@ *****************************************************************************************************************************************************************************/ #define M4MAG7S_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "ma7snd1.bin", 0x000000, 0x080000, CRC(f0e31329) SHA1(60b94c3223c8863fe801b93f65ff65e94f3dec83) ) \ ROM_LOAD( "ma7snd2.bin", 0x080000, 0x080000, CRC(12110d16) SHA1(fa93a263d1e3fa8b0b2f618f52e5145330f4315d) ) @@ -2819,7 +2819,7 @@ *****************************************************************************************************************************************************************************/ #define M4MAKMNT_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "mamsnd.p1", 0x000000, 0x080000, CRC(8dc408e3) SHA1(48a9ffc5cf4fd04ed1320619ca915bbfa2406750) ) \ ROM_LOAD( "mamsnd.p2", 0x080000, 0x080000, CRC(6034e17a) SHA1(11e044c87b5fc6461b0c6cfac5c419daee930d7b) ) @@ -2943,7 +2943,7 @@ *****************************************************************************************************************************************************************************/ #define M4VIVAES_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "vivasnd1.bin", 0x000000, 0x080000, CRC(e7975c75) SHA1(407c3bcff29f4b6599de2c35d96f62c72a897bd1) ) \ ROM_LOAD( "vivasnd2.bin", 0x080000, 0x080000, CRC(9f22f32d) SHA1(af64f6bde0b825d474c42c56f6e2253b28d4f90f) ) @@ -3045,7 +3045,7 @@ *****************************************************************************************************************************************************************************/ #define M4VIVESS_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing */ #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ @@ -3083,7 +3083,7 @@ *****************************************************************************************************************************************************************************/ #define M4PRZVE_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "pessnd.p1", 0x000000, 0x080000, CRC(e7975c75) SHA1(407c3bcff29f4b6599de2c35d96f62c72a897bd1) ) \ ROM_LOAD( "pessnd.p2", 0x080000, 0x080000, CRC(9f22f32d) SHA1(af64f6bde0b825d474c42c56f6e2253b28d4f90f) ) @@ -3125,7 +3125,7 @@ *****************************************************************************************************************************************************************************/ #define M4POTBLK_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "pbsnd1.hex", 0x000000, 0x080000, CRC(72a3331d) SHA1(b7475ba0ad86a6277e3d4f7b4311a98f3fc29802) ) \ ROM_LOAD( "pbsnd2.hex", 0x080000, 0x080000, CRC(c2460eec) SHA1(7c62fbc69ffaa788bf3839e37a75a812a7b8caef) ) @@ -3256,7 +3256,7 @@ #define M4PLACBT_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "pybsnd.p1", 0x000000, 0x080000, CRC(3a91784a) SHA1(7297ccec3264aa9f1e7b3a2841f5f8a1e4ca6c54) ) \ ROM_LOAD( "pybsnd.p2", 0x080000, 0x080000, CRC(a82f0096) SHA1(45b6b5a2ae06b45add9cdbb9f5e6f834687b4902) ) @@ -3361,7 +3361,7 @@ *****************************************************************************************************************************************************************************/ #define M4C9_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "c9s.hex", 0x0000, 0x080000, CRC(ae952e15) SHA1(a9eed61c3d65ded5e1faa67362f181393cb6339a) ) #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ @@ -3459,10 +3459,10 @@ // what's the difference between these sound roms, does one pair belong with the now split out m4tutbwb sets? #define M4TUTFRT_EXTRA_ROMS \ - ROM_REGION( 0x100000, "altmsm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:altmsm6376", 0 ) \ ROM_LOAD( "tftsnd02.p1", 0x000000, 0x080000, CRC(9789e60f) SHA1(7299eb4b6bb2fc90e8a36859102aad5daf66b163) ) \ ROM_LOAD( "tftsnd02.p2", 0x080000, 0x080000, CRC(0bdc1dc9) SHA1(909af8ff4d0e3e36e280e9553a73bb1dfdb62144) ) \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "tfsnd1.hex", 0x000000, 0x080000, CRC(a5b623fa) SHA1(eb4d84a7d3977ddea42c4995dddaabace73e6f8a) ) \ ROM_LOAD( "tfsnd2.hex", 0x080000, 0x080000, CRC(1275e528) SHA1(0c3c901cb2be1e84dba123677205108cf0388343) ) @@ -3567,7 +3567,7 @@ #define M4CASHAT_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cas1.hex", 0x000000, 0x080000, CRC(4711c483) SHA1(af1ceb317b7bb1c2d0c3f7a99049679c356e1860) ) \ ROM_LOAD( "cas2.hex", 0x080000, 0x080000, CRC(26ec235c) SHA1(51de955e5def47b82ac8891d09dc0b0e5e19c01d) ) @@ -3691,7 +3691,7 @@ #define M4RHR_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "generic_redhotroll_sound1.bin", 0x0000, 0x080000, CRC(3e80f8bd) SHA1(2e3a195b49448da11cc0c089a8a9b462894c766b) ) @@ -3843,7 +3843,7 @@ // Wrong Sound, Need V1 #define M4UUAW_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "uuasnd.p1", 0x000000, 0x080000, CRC(be1a1131) SHA1(b7f50d8db6b7d134757e0746e7d9faf9fd3a2c7e) ) \ ROM_LOAD( "uuasnd.p2", 0x080000, 0x080000, CRC(c8492b3a) SHA1(d390e37f4a62869079bb38395a2e86a5ad24392f) ) @@ -3948,7 +3948,7 @@ *****************************************************************************************************************************************************************************/ #define M4RICHFM_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "rfamouss1.hex", 0x000000, 0x080000, CRC(b237c8b8) SHA1(b2322d68fe57cca0ed49b01ae0d3a0e93a623eac) ) \ ROM_LOAD( "rfamouss2.hex", 0x080000, 0x080000, CRC(12c295d5) SHA1(0758354cfb5242b4ce3f5f25c3458d91f4b4a1ec) ) @@ -4014,7 +4014,7 @@ *****************************************************************************************************************************************************************************/ #define M4PRZRF_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ @@ -4049,7 +4049,7 @@ *****************************************************************************************************************************************************************************/ #define M4VIZ_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "vizsnd.p1", 0x000000, 0x080000, CRC(2b39a622) SHA1(77916650fe19f18025e10fb25de704f7bb733295) ) \ ROM_LOAD( "vizsnd.p2", 0x080000, 0x080000, CRC(e309bede) SHA1(a4615436fcfd5f31293f887b8bc972f0d2d6b0cb) ) @@ -4108,7 +4108,7 @@ #define M4TAKEPK_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "tapsnd1.hex", 0x000000, 0x080000, CRC(8dc408e3) SHA1(48a9ffc5cf4fd04ed1320619ca915bbfa2406750) ) \ ROM_LOAD( "tapsnd2.hex", 0x080000, 0x080000, CRC(6034e17a) SHA1(11e044c87b5fc6461b0c6cfac5c419daee930d7b) ) \ ROM_LOAD( "typkp2", 0x080000, 0x080000, CRC(753d9bc1) SHA1(c27c8b7cfba7ad67685f637ee3f68a3edb7986e7) ) /* alt copy of tapsnd2 */ @@ -4230,7 +4230,7 @@ #define M4OVERMN_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "otnsnd.p1", 0x0000, 0x080000, CRC(d4f7ed82) SHA1(16e80bf0956f39a9e8e23384615a07594419db59) ) #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ @@ -4303,10 +4303,10 @@ #define M4LUXOR_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) /* these appear to be correct for the parent set */ \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) /* these appear to be correct for the parent set */ \ ROM_LOAD( "luxorsnd1.hex", 0x000000, 0x080000, CRC(428daceb) SHA1(eec2b7efded3d0e0eea7faa5759a65a021465b13) ) \ ROM_LOAD( "luxorsnd2.hex", 0x080000, 0x080000, CRC(860178e6) SHA1(705b1b0ad62a1b594bb123aec3c2b571a6500ce8) ) \ - ROM_REGION( 0x100000, "altmsm6376", 0 ) /* are these for a different game / machine type? */ \ + ROM_REGION( 0x100000, "okicard:altmsm6376", 0 ) /* are these for a different game / machine type? */ \ ROM_LOAD( "luxor-snd1.bin", 0x000000, 0x080000, CRC(d09394e9) SHA1(d3cbdbaf048d829271a6c2846b16ceee7775d767) ) \ ROM_LOAD( "luxor-snd2.bin", 0x080000, 0x080000, CRC(bc720cb9) SHA1(a83c25ecec602ba047dd21de2beec6cd7ac76cbe) ) @@ -4367,7 +4367,7 @@ *****************************************************************************************************************************************************************************/ #define M4PRZLUX_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "plxsnd.p1", 0x000000, 0x080000, CRC(0e682b6f) SHA1(459a7ca216c47af58c03c15d6ef1f9aa7489eba0) ) \ ROM_LOAD( "plxsnd.p2", 0x080000, 0x080000, CRC(3ef95a7f) SHA1(9c918769fbf0e687f27e431d934e2327df9ed3bb) ) @@ -4398,7 +4398,7 @@ *****************************************************************************************************************************************************************************/ #define M4HIJINX_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "hijinx1.hex", 0x000000, 0x080000, CRC(8d5afedb) SHA1(6bf6dadddf8dd3672e3d05167ab9a0793c269176) ) \ ROM_LOAD( "hijinx2.hex", 0x080000, 0x080000, CRC(696c8a92) SHA1(d54a1020fea80bacb678bc8bd6b7d4d0854af603) ) @@ -4490,9 +4490,9 @@ *****************************************************************************************************************************************************************************/ #define M4CASHLN_EXTRA_ROMS \ - ROM_REGION( 0x100000, "altmsm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:altmsm6376", 0 ) \ ROM_LOAD( "cash lines 0.1 snd 1 9c3f.bin", 0x0000, 0x080000, CRC(1746f091) SHA1(d57fcaec3e3b0344671f2c984974bfdac50ec3d7) ) \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cls1.hex", 0x000000, 0x080000, CRC(d6b5d862) SHA1(eab2ef2999229db7182896267cd83742b2390237) ) \ ROM_LOAD( "cls2.hex", 0x080000, 0x080000, CRC(e42e674b) SHA1(1cda06425f3d4797ee0c4ff7426970150e5af4b6) ) @@ -4629,7 +4629,7 @@ *****************************************************************************************************************************************************************************/ #define M4LUCKLV_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "llvsnd.p1", 0x000000, 0x080000, CRC(36be26f3) SHA1(b1c66d3ebebd7eb18266bf6b30c4a4db7acdf10d) ) \ ROM_LOAD( "llvsnd.p2", 0x080000, 0x080000, CRC(d5c2bb99) SHA1(e2096b8a33e89218d44200e87d1962790120a96c) ) @@ -4714,7 +4714,7 @@ *****************************************************************************************************************************************************************************/ #define M4LVLCL_EXTRA_ROMS \ - ROM_REGION( 0x180000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing? */ #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ @@ -4744,7 +4744,7 @@ *****************************************************************************************************************************************************************************/ #define M4LUCKST_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "lssnd1.bin", 0x000000, 0x080000, CRC(401686bc) SHA1(ab62e6e097b0af2f68ae7f8f686f00cede5ec3aa) ) \ ROM_LOAD( "lssnd2.bin", 0x080000, 0x080000, CRC(d9e0c0db) SHA1(3eba5b19ca98d23a94edf2be27ccefaa0e526a56) ) @@ -4926,7 +4926,7 @@ //Front door code 39 Cash door code 38 #define M4TENTEN_EXTRA_ROMS \ - ROM_REGION( 0x080000, "msm6376", 0 ) \ + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) \ ROM_LOAD( "tttsnd01.p1", 0x0000, 0x080000, CRC(5518474c) SHA1(0b7e98e33f62d80882f2b0b4af0c9056f1ffb78d) ) #undef GAME_CUSTOM @@ -5058,7 +5058,7 @@ //Front door code 0 Cash door code 0 #define M4ANDYFH_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "afhsnd1.bin", 0x000000, 0x080000, CRC(ce0b1890) SHA1(224d05f936a1b6f84ad682c282c557e87ad8931f) ) \ ROM_LOAD( "afhsnd2.bin", 0x080000, 0x080000, CRC(8a4dda7b) SHA1(ee77295609ff646212faa207e56acb2440d859b8) ) @@ -5167,7 +5167,7 @@ *****************************************************************************************************************************************************************************/ #define M4BDASH_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "blds1.hex", 0x000000, 0x080000, CRC(9cc07f5f) SHA1(e25295eb304624ed77d98d7e974363214c2c2cd1) ) \ ROM_LOAD( "blds2.hex", 0x080000, 0x080000, CRC(949bee73) SHA1(9ea2001a4d91236708dc948b4e1cac9978095945) ) #undef GAME_CUSTOM @@ -5311,7 +5311,7 @@ *****************************************************************************************************************************************************************************/ #define M4PRZMON_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ /* missing */ #undef GAME_CUSTOM #define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \ @@ -5351,7 +5351,7 @@ *****************************************************************************************************************************************************************************/ #define M4PRZMNS_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "s_fpmsnd.p1", 0x000000, 0x080000, CRC(e5bfc522) SHA1(38c8430f539d38a51a3d7fb846b625ae2080e930) ) \ ROM_LOAD( "s_fpmsnd.p2", 0x080000, 0x080000, CRC(e14803ab) SHA1(41d501f61f202df2dbd2ac13c40a32fff6afc861) ) #undef GAME_CUSTOM @@ -5390,7 +5390,7 @@ *****************************************************************************************************************************************************************************/ #define M4PRZHR_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "prlsnd.p1", 0x0000, 0x080000, CRC(d60181ea) SHA1(4ca872e50d59dc96e90ade8cac24ebbab8a3f397) ) #undef GAME_CUSTOM @@ -5442,9 +5442,9 @@ *****************************************************************************************************************************************************************************/ #define M4GCLUE_EXTRA_ROMS \ - ROM_REGION( 0x100000, "altmsm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:altmsm6376", 0 ) \ ROM_LOAD( "c95snd.p1", 0x080000, 0x080000, CRC(ae952e15) SHA1(a9eed61c3d65ded5e1faa67362f181393cb6339a) ) \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "c25snd.p1", 0x000000, 0x080000, CRC(cd8f4ee0) SHA1(a7b9ae93b3a3d231a8239fff12689ec2084ce0c1) ) #undef GAME_CUSTOM @@ -5492,7 +5492,7 @@ *****************************************************************************************************************************************************************************/ #define M4VEGAST_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "uvssnd.p1", 0x000000, 0x080000, CRC(04a47007) SHA1(cfe1f4aa9d29c784b2034c2daa09b8bd7181562e) ) \ ROM_LOAD( "uvssnd.p2", 0x080000, 0x080000, CRC(3b35d824) SHA1(e4007d5d13898ed0f91cd270c75b5df8cc62e003) ) @@ -5569,7 +5569,7 @@ #define M4HOTROD_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "rodsnd.p1", 0x000000, 0x080000, CRC(bfdafedc) SHA1(6acc838ec046d44e7faa727b48925379aa42883d) ) \ ROM_LOAD( "rodsnd.p2", 0x080000, 0x080000, CRC(a01e1e67) SHA1(4f86e0bb9bf4c1a4d0190eddfe7dd5bb89c519a2) ) @@ -5624,7 +5624,7 @@ *****************************************************************************************************************************************************************************/ #define M4BUC_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "buccsnd1.bin", 0x000000, 0x080000, CRC(b671fd7b) SHA1(8123d1ef9d5e2cc8783a78137540e6f13e5e2304) ) \ ROM_LOAD( "buccsnd2.bin", 0x080000, 0x080000, CRC(66966b41) SHA1(87e2058f39ef1b19c35e63d55e62e2034fd24c0d) ) @@ -5748,7 +5748,7 @@ *****************************************************************************************************************************************************************************/ #define M4JWLCWN_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cjesnd.p1", 0x000000, 0x080000, CRC(a2f20c95) SHA1(874b22850732514a26448cee8e0b68f8d042a7c7) ) \ ROM_LOAD( "cjesnd.p2", 0x080000, 0x080000, CRC(3dcb7c38) SHA1(3c0e91f4d2ea9e6b25a01702c6f6fdc7cc2e0b65) ) \ ROM_LOAD( "jewelp2", 0x080000, 0x080000, CRC(84996453) SHA1(74fe377545503f1b8da9b8998514811f0c1c037c) ) /* alt cje */ \ @@ -5841,7 +5841,7 @@ *****************************************************************************************************************************************************************************/ #define M4BAGTEL_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "bgtsnd.p1", 0x000000, 0x080000, CRC(40a68dd1) SHA1(d70cf436dca242d49cd3bd39d3f6484a30968d0d) ) \ ROM_LOAD( "bgtsnd.p2", 0x080000, 0x080000, CRC(90961429) SHA1(6390e575d030f6d2953ee8460876c50fe48026f8) ) @@ -5922,7 +5922,7 @@ *****************************************************************************************************************************************************************************/ #define M4BERSER_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "bessnd.p1", 0x0000, 0x080000, CRC(4eb15200) SHA1(1997a304df5219153418369bd8cc4fd169fb4bd4) ) #undef GAME_CUSTOM @@ -5999,7 +5999,7 @@ // hopper error #define M4TTDIA_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "tdasnd.p1", 0x000000, 0x080000, CRC(6e0bf4ab) SHA1(0cbcdc11d2d64a5fda2cf40bdde850f5c7b56d12) ) \ ROM_LOAD( "tdasnd.p2", 0x080000, 0x080000, CRC(66cc2f87) SHA1(6d8af6090b2ab29039aa89a125512190e7e34a03) ) #undef GAME_CUSTOM @@ -6063,7 +6063,7 @@ //Front door code 39 Cash door code 38 #define M4ACTBNK_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "actsnd.p1", 0x000000, 0x080000, CRC(34777fea) SHA1(be784e73586719219ae5c1a3841f0e44edb6b497) ) \ ROM_LOAD( "actsnd.p2", 0x080000, 0x080000, CRC(2e832d40) SHA1(622b2c9694714446dbf67beb67d03af97d14ece7) ) @@ -6102,7 +6102,7 @@ *****************************************************************************************************************************************************************************/ #define M4CRDOME_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cd2snd.p1", 0x000000, 0x080000, CRC(65a2dc92) SHA1(2c55a858ab17325189bed1974daf708c380541de) ) \ ROM_LOAD( "cd2snd.p2", 0x080000, 0x080000, CRC(b1bb4678) SHA1(8e8ab0a8d1b3e70dcb56d071193fdb5f34af7d14) ) @@ -6158,9 +6158,9 @@ *****************************************************************************************************************************************************************************/ #define M4ROCKMN_EXTRA_ROMS \ - ROM_REGION( 0x100000, "altmsm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:altmsm6376", 0 ) \ ROM_LOAD( "rokmsnd1", 0x000000, 0x080000, CRC(b51e5d7d) SHA1(71f36f866583d592d029cba47901cbfd17631b06) ) \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "roksnd.p1", 0x000000, 0x080000, CRC(462a690e) SHA1(5a82f63a9d03c89c8fdb0ead1fc40e480aedd787) ) \ ROM_LOAD( "roksnd.p2", 0x080000, 0x080000, CRC(37786d14) SHA1(d6dc2d3dbe54ca943092938500d72081153b5a34) ) @@ -6199,7 +6199,7 @@ // MUX SELECTS ALM #define M4MADHSE_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "madh1.bin", 0x000000, 0x080000, CRC(2b2af5dd) SHA1(eec0808bf724a055ece3c964d8a43cc5f837a3bd) ) \ ROM_LOAD( "madh2.bin", 0x080000, 0x080000, CRC(487d8e1d) SHA1(89e01a153d17564eba112d882b686c91b6c3aecc) ) @@ -6256,7 +6256,7 @@ // boots, unprotected, no chr reads or lamp scramble #define M4NHTT_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "nhtsnd01.p1", 0x0000, 0x080000, CRC(2d1d93c6) SHA1(80a8d131bafdb74d20d1ca5cbe2219ee4df0b675) ) #undef GAME_CUSTOM @@ -6292,7 +6292,7 @@ // gives 'Wrong Sound, Need V1' #define M4PRZFRT_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "pfrsnd.p1", 0x0000, 0x080000, CRC(71d1af20) SHA1(d87d61c561acbe9cb3dec18d8decf5e970efa272) ) #undef GAME_CUSTOM @@ -6330,7 +6330,7 @@ // boots #define M4PRZWO_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "pwo.s1", 0x000000, 0x080000, CRC(1dbd8a33) SHA1(37bd71688475591232422eb0841e23aff58e3800) ) \ ROM_LOAD( "pwo.s2", 0x080000, 0x080000, CRC(6c7badef) SHA1(416c36fe2b4253bf7944b3ba412561bd0d21cbe5) ) @@ -6363,7 +6363,7 @@ // boots #define M4RHOG2_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "2rhsnd02.p1", 0x000000, 0x080000, CRC(0f4630dc) SHA1(7235e53c74e113230a683de33763023e95090d39) ) \ ROM_LOAD( "2rhsnd02.p2", 0x080000, 0x080000, CRC(c2d0540a) SHA1(160080b350d41b95a0c129f9189222d79734e7d0) ) @@ -6401,7 +6401,7 @@ *****************************************************************************************************************************************************************************/ #define M4LUCKSC_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "clusnd.p1", 0x000000, 0x080000, CRC(9c1042ba) SHA1(e4630bbcb3fe2f7d133275892eaf58c12402c610) ) \ ROM_LOAD( "clusnd.p2", 0x080000, 0x080000, CRC(b4b28b80) SHA1(a40b6801740d64e54c5c1738d69737ab9f4cf950) ) @@ -6452,7 +6452,7 @@ *****************************************************************************************************************************************************************************/ #define M4TOPDOG_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "topdogsnd.bin", 0x0000, 0x080000, CRC(a29047c6) SHA1(5956674e6b895bd46b99f4d04d5797b53ccc6668) ) #undef GAME_CUSTOM @@ -6506,7 +6506,7 @@ *****************************************************************************************************************************************************************************/ #define M4KINGQ_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "kingsnqueenssnd.bin", 0x0000, 0x080000, CRC(31d722d4) SHA1(efb7079a1036cad8d9c08106f97c70a248b31898) ) \ ROM_LOAD( "ee______.1_2", 0x0000, 0x080000, CRC(13012f48) SHA1(392b3bcf6f8e3e01082087637f9d378302d046c4) ) @@ -6587,7 +6587,7 @@ // Hopper error #define M4KINGQC_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "knqsnd.bin", 0x0000, 0x080000, CRC(13012f48) SHA1(392b3bcf6f8e3e01082087637f9d378302d046c4) ) \ ROM_LOAD( "cn______.5_a", 0x0000, 0x080000, CRC(7f82f113) SHA1(98851f8820cb39b45d477151982c80fc91b15e56) ) @@ -6648,7 +6648,7 @@ *****************************************************************************************************************************************************************************/ #define M4TYPCL_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "ctpsnd02.p1", 0x000000, 0x080000, CRC(6fdd5051) SHA1(3f713314b303d6e1f78e3ca050bed7a45f43d5b3) ) \ ROM_LOAD( "ctpsnd02.p2", 0x080000, 0x080000, CRC(994bfb3a) SHA1(3cebfbbe77c4bbb5fb73e6d9b23f721b07c6435e) ) @@ -6714,7 +6714,7 @@ #define M4ANDYBT_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "abtsnd.p1", 0x000000, 0x080000, CRC(0ba1e73a) SHA1(dde70b1bf973b023c45afb8d3191325514b96e47) ) \ ROM_LOAD( "abtsnd.p2", 0x080000, 0x080000, CRC(dcfa85f2) SHA1(30e8467841309a4840824ec89f82044489c94ac5) ) @@ -6745,7 +6745,7 @@ // hopper error #define M4THESTR_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "thestreaksnd.bin", 0x0000, 0x080000, CRC(fdbd0f88) SHA1(8d0eaa9aa8d505affeb8bd12d7cb13337aa2e2c2) ) #undef GAME_CUSTOM @@ -6801,7 +6801,7 @@ #define M4CPYCAT_EXTRA_ROMS \ - ROM_REGION( 0x180000, "msm6376", 0 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) \ ROM_LOAD( "copycatsnd.bin", 0x0000, 0x080000, CRC(cd27a3ce) SHA1(d061fae0ef8584d2e349e91e53f41718128c61e2) ) #undef GAME_CUSTOM @@ -6867,7 +6867,7 @@ #define M4BNKROL_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cbrsnd.p1", 0x000000, 0x080000, CRC(3524418a) SHA1(85cf286d9cf97cc9009c0283d632fef2a19f5de2) ) \ ROM_LOAD( "cbrsnd.p2", 0x080000, 0x080000, CRC(a53796a3) SHA1(f094f40cc93ea445922a9c5412aa355b7d21b1f4) ) @@ -6901,7 +6901,7 @@ // boots #define M4RHRCL_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "rhrcs1.hex", 0x000000, 0x080000, CRC(7e265003) SHA1(3800ddfbdde07bf0af5db5cbe05a85425297fa4a) ) \ ROM_LOAD( "rhrcs2.hex", 0x080000, 0x080000, CRC(39843d40) SHA1(7c8efcce4ed4ed53e681680bb33869f14f662609) ) @@ -6931,7 +6931,7 @@ #define M4RHOGC_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "rhc.s1", 0x000000, 0x080000, CRC(8840737f) SHA1(eb4a4bedfdba1b33fa74b9c2000c0d09a4cca5d7) ) \ ROM_LOAD( "rhc.s2", 0x080000, 0x080000, CRC(04eaa2da) SHA1(2c23bde76f6a9406b0cb30246ce8805b5181047f) ) @@ -6960,7 +6960,7 @@ // boots #define M4GB006_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "006snd.p1", 0x000000, 0x080000, CRC(44afef7d) SHA1(d8a4b6dc04e0f337db6d3b5322d066ae5f5bda41) ) \ ROM_LOAD( "006snd.p2", 0x080000, 0x080000, CRC(5f3c7cf8) SHA1(500f8fb07ef344d44c062f8d01878df1c917bcfc) ) @@ -6990,7 +6990,7 @@ // boots #define M4CSHENC_EXTRA_ROMS \ - ROM_REGION( 0x180000, "msm6376", 0 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cesnd.p1", 0x000000, 0x080000, CRC(2a10dc1a) SHA1(f6803f6e1fee2b58fe4831f59ddc08ec02792823) ) \ ROM_LOAD( "cesnd.p2", 0x080000, 0x080000, CRC(6f0b75c0) SHA1(33898d75a1e51b49950d7843069066d17c4736c5) ) @@ -7022,7 +7022,7 @@ // boots #define M4RHS_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "rh___snd.1_1", 0x000000, 0x080000, CRC(ceebd8f4) SHA1(fe9f62034aae7d2ec097d80dc471a7fd27ddec8a) ) \ ROM_LOAD( "rh___snd.1_2", 0x080000, 0x080000, CRC(1f24cfb6) SHA1(cf1dc9d2a1c1cfb8718c89e245e9bf375fef8bfd) ) \ ROM_LOAD( "rh___snd.1_3", 0x100000, 0x080000, CRC(726958d8) SHA1(6373765b80971dd7ff5c8eaeee83966335db4d27) ) @@ -7077,7 +7077,7 @@ // boots #define M4OADRAC_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "oadsnd1.bin", 0x000000, 0x080000, CRC(b9a9b49b) SHA1(261e939da031768e2a2b5b171cbba55c87d1a758) ) \ ROM_LOAD( "oadsnd2.bin", 0x080000, 0x080000, CRC(94e34646) SHA1(8787d6757e4ed86417aafac0e042091189974d3b) ) #undef GAME_CUSTOM @@ -7112,7 +7112,7 @@ // boots #define M4TIC_EXTRA_ROMS \ - ROM_REGION( 0x180000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "ct______.5_a", 0x0000, 0x080000, CRC(9a936f50) SHA1(f3f66d6093a939220d24aee985e210cdfd214db4) ) #undef GAME_CUSTOM @@ -7168,7 +7168,7 @@ // HOP COIN SENSE ALM (17) #define M4TICCLA_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "ct______.5_a", 0x0000, 0x080000, CRC(9a936f50) SHA1(f3f66d6093a939220d24aee985e210cdfd214db4) ) #undef GAME_CUSTOM @@ -7226,7 +7226,7 @@ // gives ALM17 (hopper?) #define M4TICGLC_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "ct______.5_a", 0x0000, 0x080000, CRC(9a936f50) SHA1(f3f66d6093a939220d24aee985e210cdfd214db4) ) #undef GAME_CUSTOM @@ -7257,7 +7257,7 @@ // boots #define M4SSCLAS_EXTRA_ROMS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "css_____.1_1", 0x0000, 0x080000, CRC(e738fa1e) SHA1(7a1125320e0d488729aec66e658d418b96228fd0) ) #undef GAME_CUSTOM @@ -7289,7 +7289,7 @@ *****************************************************************************************************************************************************************************/ #define M4SQUID_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "squidsnd.p1", 0x000000, 0x080000, CRC(44cebe30) SHA1(a93f64897b4ba333d044649f28fa5dd68d3d2e94) ) \ ROM_LOAD( "squidsnd.p2", 0x080000, 0x080000, CRC(d2a1b073) SHA1(d4931f18d369e89492fe72a7a1c511c8d3c23a71) ) @@ -7318,7 +7318,7 @@ #define M4CALAMA_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cala1.hex", 0x000000, 0x080000, CRC(c9768f65) SHA1(a8f2946fdba640033da0e21d4e18293b3fc004bf) ) \ ROM_LOAD( "cala2.hex", 0x080000, 0x080000, CRC(56bd2950) SHA1(b109c726514c3ee04c1bbdf5f518f60dfd0375a8) ) @@ -7367,7 +7367,7 @@ *****************************************************************************************************************************************************************************/ #define M4COSCAS_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cc___snd.1_1", 0x000000, 0x080000, CRC(d858f238) SHA1(92a3dfacde8bfa8705e91fab5bb627f9b34ad2dc) ) \ ROM_LOAD( "cc___snd.1_2", 0x080000, 0x080000, CRC(bab1bd8e) SHA1(c703d0e24c0a522ebf79895049e85f5471f7d7e9) ) @@ -7431,7 +7431,7 @@ // "Wrong Sound, Need V1" but can be bypassed to boot #define M4DBLDM_EXTRA_ROMS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cddsnd.p1", 0x000000, 0x080000, CRC(e1833e31) SHA1(1486e5afab347d6dee1543a55d1193b7db3c89d7) ) \ ROM_LOAD( "cddsnd.p2", 0x080000, 0x080000, CRC(fd33ed2a) SHA1(f68ffadde40f88e7954d4a98bcd7ff023841b55b) ) @@ -7460,10 +7460,10 @@ *****************************************************************************************************************************************************************************/ #define M4SUPBJC_EXTRAS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "sbjsnd1.hex", 0x000000, 0x080000, CRC(70388bec) SHA1(256fa01b57049d73e88b0bb270fccb555b12dfb7) ) \ ROM_LOAD( "sbjsnd2.hex", 0x080000, 0x080000, CRC(1d588554) SHA1(48c092ce83d2f881fc217a3d566e896718ad6f24) ) \ - ROM_REGION( 0x100000, "altmsm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:altmsm6376", 0 ) \ ROM_LOAD( "sbj.s1", 0x000000, 0x080000, CRC(9bcba966) SHA1(5ced282aca9d39ebf0828aa19357026d5298e955) ) \ ROM_LOAD( "sbj.s2", 0x080000, 0x080000, CRC(1d588554) SHA1(48c092ce83d2f881fc217a3d566e896718ad6f24) ) @@ -7512,7 +7512,7 @@ *****************************************************************************************************************************************************************************/ #define M4CRJWL2_EXTRAS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cjcs1.hex", 0x000000, 0x080000, CRC(2ac3ba9f) SHA1(3332f29f81918c34aeec3da6f7d001dc9922840d) ) \ ROM_LOAD( "cjcs2.hex", 0x080000, 0x080000, CRC(89838a9d) SHA1(502243cc0a14e63882b537f05c4cc0eb852e4a0c) ) @@ -7577,7 +7577,7 @@ *****************************************************************************************************************************************************************************/ #define M4LAZY_EXTRAS \ - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "lazybones.sound", 0x000000, 0x080000, NO_DUMP ) \ @@ -7616,7 +7616,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "brkl10.epr", 0x0000, 0x010000, CRC(857255b3) SHA1(cfd77918a19b2532a02b8bb3fa8e2716db31fb0e) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_dutch_sound2.bin", 0x0000, 0x080000, CRC(50450909) SHA1(181659b0594ba8d196b7130c5999c91676a363c0) ) ROM_END @@ -7632,7 +7632,7 @@ #define M4CHASEI_EXTRAS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cha.s1", 0x000000, 0x080000, CRC(8200b6bc) SHA1(bcc4ffbddcdcc1dd994fe29e9b24e83272f59442) ) \ ROM_LOAD( "cha.s2", 0x080000, 0x080000, CRC(542863fa) SHA1(501d66b2badb5036bb5dd8bac3cdb681f630a982) ) @@ -7697,7 +7697,7 @@ *****************************************************************************************************************************************************************************/ #define M4FORTCB_EXTRAS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cfosnd.p1", 0x000000, 0x080000, CRC(74bbf913) SHA1(52ddc89ab34b11ede2c0e9b9b27e119b0c1eb2d9) ) \ ROM_LOAD( "cfosnd.p2", 0x080000, 0x080000, CRC(1b2bb79a) SHA1(5f19ea000f34bb404ed6c8ea5ec7b809ccb1ae36) ) @@ -7732,7 +7732,7 @@ *****************************************************************************************************************************************************************************/ #define M4CLBVEG_EXTRAS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cvegass1.hex", 0x000000, 0x080000, CRC(13a8c857) SHA1(c66e10bca1ad54f467b9c5eacd502c54397c09b2) ) \ ROM_LOAD( "cvegass2.hex", 0x080000, 0x080000, CRC(88b37145) SHA1(1c6c9ad2010e1688d3370d1f2a5ae83dc683b500) ) @@ -7773,7 +7773,7 @@ *****************************************************************************************************************************************************************************/ #define M4CLBX_EXTRAS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cxs1.hex", 0x000000, 0x080000, CRC(4ce005f1) SHA1(ee0f59a9c7e0222dd63fa63ccff8f194abd01ddb) ) \ ROM_LOAD( "cxs2.hex", 0x080000, 0x080000, CRC(495e0730) SHA1(7ba8150fbcf974ac494a82fd373ff02185543e35) ) @@ -7809,7 +7809,7 @@ #define M4CRZJWL_EXTRAS \ - ROM_REGION( 0x180000, "msm6376", 0 ) \ + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) \ ROM_LOAD( "cjsound1.bin", 0x000000, 0x080000, CRC(b023f6b9) SHA1(04c362c6511442d3ab775a5ff2051bfe26d5e624) ) \ ROM_LOAD( "cjsound2.bin", 0x080000, 0x080000, CRC(02563a43) SHA1(dfcee4e0fdf81c726c8e13278e7950459bcaab18) ) \ ROM_LOAD( "cjsound3.bin", 0x100000, 0x080000, CRC(e722e438) SHA1(070f3772920fa64d5214843c313b27a5b2a4c105) ) @@ -7892,7 +7892,7 @@ *****************************************************************************************************************************************************************************/ #define M4SSB4_EXTRAS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "b25_v1_2.sound", 0x000000, 0x080000, NO_DUMP ) \ ROM_START( m4sunseta ) @@ -7925,7 +7925,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "crmtb14.epr", 0x0000, 0x010000, CRC(79e1746c) SHA1(794317f3aba7b1a7994cde89d81abc2b687d0821) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_dutch_sound2.bin", 0x000000, 0x080000, CRC(50450909) SHA1(181659b0594ba8d196b7130c5999c91676a363c0) ) ROM_END @@ -7971,7 +7971,7 @@ *****************************************************************************************************************************************************************************/ #define M4BRNZE_EXTRAS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "bv5_v2_1.sound", 0x000000, 0x080000, NO_DUMP ) \ ROM_START( m4brnze ) @@ -8006,7 +8006,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dpm14.bin", 0x0000, 0x010000, CRC(de344759) SHA1(d3e7514da83bbf1eba63661fb0675a6230af93cd) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "dpms.bin", 0x0000, 0x080000, CRC(93fd4253) SHA1(69feda7ffc56defd515c9cd1ce204af3d9731a3f) ) ROM_END @@ -8022,7 +8022,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "drh12", 0x0000, 0x010000, CRC(b26cd308) SHA1(4e29f6cce773232a1c43cd2fb3ce9b844c446bb8) ) // aka gdjb - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "drh_1.snd", 0x0000, 0x080000, CRC(f652cd0c) SHA1(9ce986bc12bcf22a57e065329e82671d19cc96d7) ) // aka gn.snd ROM_END @@ -8038,7 +8038,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "drw14.bin", 0x0000, 0x010000, CRC(22c30ebe) SHA1(479f66732aac56dae60c80d11f05c084865f9389) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "rwb_1.snd", 0x000000, 0x080000, CRC(e0a6def5) SHA1(e3867b83e588fd6a9039b8d45186480a9d0433ea) ) ROM_LOAD( "rwb_2.snd", 0x080000, 0x080000, CRC(54a2b2fd) SHA1(25875ff873bf22df510e7a4c56c336fbabcbdedb) ) ROM_END @@ -8055,7 +8055,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dah20", 0x0000, 0x010000, CRC(e3f92f00) SHA1(122c8a429a1f75dac80b90c4f218bd311813daf5) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "sdr6_1.snd", 0x000000, 0x080000, CRC(63ad952d) SHA1(acc0ac3898fcc281e2d7ba19ada52d727885fe06) ) ROM_LOAD( "sdr6_2.snd", 0x080000, 0x080000, CRC(48d2ace5) SHA1(ada0180cc60266c0a6d981a019d66bbedbced21a) ) ROM_END @@ -8073,7 +8073,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dro19", 0x0000, 0x010000, CRC(8b591766) SHA1(df156390b427e31cdda64826a6c1d2457c915f25) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "dro_1.snd", 0x000000, 0x080000, CRC(895cfe63) SHA1(02134e149cef3526bbdb6cb93ef3efa283b9d6a2) ) ROM_LOAD( "dro_2.snd", 0x080000, 0x080000, CRC(1d5c8d4f) SHA1(15c18ae7286807cdc0feb825b958eae808445690) ) ROM_END @@ -8090,7 +8090,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dsa15.epr", 0x0000, 0x010000, CRC(22b60b0b) SHA1(4ad184d1557bfd01650684ea9d8ad794fded65f7) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "dsa_1@97c2.snd", 0x0000, 0x080000, CRC(0281a6dd) SHA1(a35a8cd0da32c51f77856ea3eeff7c58fd032333) ) ROM_END @@ -8107,7 +8107,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dce10.bin", 0x0000, 0x010000, CRC(c94d41ef) SHA1(58fdff2de8dd3ead3980f6f34362183d084ce917) ) - ROM_REGION( 0x100000, "msm6376", 0 ) // These are from Place Your Bets (incorrect?) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) // These are from Place Your Bets (incorrect?) ROM_LOAD( "cepsnd.p1", 0x000000, 0x080000, BAD_DUMP CRC(3a91784a) SHA1(7297ccec3264aa9f1e7b3a2841f5f8a1e4ca6c54) ) ROM_LOAD( "cepsnd.p2", 0x080000, 0x080000, BAD_DUMP CRC(a82f0096) SHA1(45b6b5a2ae06b45add9cdbb9f5e6f834687b4902) ) ROM_END @@ -8124,7 +8124,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dbw11.bin", 0x0000, 0x010000, CRC(337aaa2c) SHA1(26b12ea3ada9668293c6b44d62458590e5b4ac8f) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_dutch_sound1.bin", 0x0000, 0x080000, CRC(f247ba83) SHA1(9b173503e63a4a861d1380b2ab1fe14af1a189bd) ) ROM_END @@ -8142,7 +8142,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "fruit.bin", 0x0000, 0x010000, CRC(dbe44316) SHA1(15cd49dd2e6166f7a7668663f7fea802d6cbb12f) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_dutch_sound1.bin", 0x0000, 0x080000, BAD_DUMP CRC(f247ba83) SHA1(9b173503e63a4a861d1380b2ab1fe14af1a189bd) ) ROM_END @@ -8160,7 +8160,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "czep30.bin", 0x0000, 0x010000, CRC(4614e6f6) SHA1(5602a68e9b47394cb31bbcd49a9920e19af6242f) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_dutch_sound2.bin", 0x0000, 0x080000, CRC(50450909) SHA1(181659b0594ba8d196b7130c5999c91676a363c0) ) ROM_END @@ -8177,7 +8177,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "rof03s.p1", 0x0000, 0x020000, CRC(4b4703fe) SHA1(853ce1f5932e09af2b5f3b5314709f13aa35cf19) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "sounds.bin", 0x0000, 0x080000, NO_DUMP ) ROM_END @@ -8195,7 +8195,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dbd10.bin", 0x0000, 0x010000, CRC(b75e319d) SHA1(8b81e852e318cfde1f5ff2123e1ef7076b208253) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "bdsnd.bin", 0x0000, 0x080000, BAD_DUMP CRC(8ac4aae6) SHA1(70dba43b398010a8bd0d82cf91553d3f5e0921f0) ) // also on m4hpyjok, probably wrong here? ROM_END @@ -8211,7 +8211,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dhj12", 0x0000, 0x010000, CRC(982439d7) SHA1(8d27fcecf7a6a7fd774678580074f945675758f4) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "dhjsnd", 0x0000, 0x080000, CRC(8ac4aae6) SHA1(70dba43b398010a8bd0d82cf91553d3f5e0921f0) ) ROM_END @@ -8228,7 +8228,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dgu16", 0x0000, 0x010000, CRC(6aa23345) SHA1(45e129ec95b1a796f334bedd08469f2ab47a18f8) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "sdgu01.s1", 0x000000, 0x080000, CRC(bfb284a2) SHA1(860b98d54a3180fbb00b7b03feae049fb4cf9d7f) ) ROM_LOAD( "sdgu01.s2", 0x080000, 0x080000, CRC(1a46ba28) SHA1(d7154e5f92be8631207620eb313b28990c6a1c7f) ) ROM_LOAD( "sdgu01.s3", 0x100000, 0x080000, CRC(88bffcf4) SHA1(1da853193f6a22889edff5aafd9440c676a82ea6) ) @@ -8249,7 +8249,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dot11.bin", 0x00000, 0x10000, CRC(da095666) SHA1(bc7654dc9da1f830a43f925db8079f27e18bb61e)) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_dutch_sound1.bin", 0x0000, 0x080000, CRC(f247ba83) SHA1(9b173503e63a4a861d1380b2ab1fe14af1a189bd) ) ROM_END @@ -8265,7 +8265,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "d2t11.bin", 0x0000, 0x010000, CRC(6a76ac6f) SHA1(824912ff1fc3155d11d32b597be53481532fdf5e) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_dutch_sound2.bin", 0x0000, 0x080000, CRC(50450909) SHA1(181659b0594ba8d196b7130c5999c91676a363c0) ) ROM_END @@ -8281,7 +8281,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dht10.hex", 0x0000, 0x010000, CRC(217d382b) SHA1(a27dd107c554d4787967633dff998d3962ee0ea5) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_dutch_sound2.bin", 0x0000, 0x080000, CRC(50450909) SHA1(181659b0594ba8d196b7130c5999c91676a363c0) ) ROM_END @@ -8297,7 +8297,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dsh13.bin", 0x0000, 0x010000, CRC(4ce40ff1) SHA1(f145d6c8e926ca4368d43dacda0fa38615988d84) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_dutch_sound1.bin", 0x0000, 0x080000, CRC(f247ba83) SHA1(9b173503e63a4a861d1380b2ab1fe14af1a189bd) ) ROM_END @@ -8313,7 +8313,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dst11.bin", 0x0000, 0x010000, CRC(3960f210) SHA1(c7c4fe74cb9a53eaa9114a84240de3bce4ffe75e) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_dutch_sound2.bin", 0x0000, 0x080000, CRC(50450909) SHA1(181659b0594ba8d196b7130c5999c91676a363c0) ) ROM_END @@ -8329,7 +8329,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "wildtimer.bin", 0x0000, 0x010000, CRC(5bd54924) SHA1(23fcf13c52ee7b9b39f30f999a9102171fffd642) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_dutch_sound2.bin", 0x0000, 0x080000, CRC(50450909) SHA1(181659b0594ba8d196b7130c5999c91676a363c0) ) ROM_END @@ -8342,7 +8342,7 @@ *****************************************************************************************************************************************************************************/ #define M4TOPTIM_EXTRAS \ - ROM_REGION( 0x080000, "msm6376", 0 ) \ + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) \ ROM_LOAD( "generic_dutch_sound2.bin", 0x0000, 0x080000, CRC(50450909) SHA1(181659b0594ba8d196b7130c5999c91676a363c0) ) ROM_START( m4toptim ) @@ -8370,7 +8370,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dma21.bin", 0x0000, 0x010000, CRC(836a25e6) SHA1(5f83bb8a2c77dd3b02724c076d6b37d2c1c93b93) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "mlsound1.p1", 0x000000, 0x080000, CRC(ff8749ff) SHA1(509b53f09cdfe5ee865e60ab42fd578586ac53ea) ) ROM_LOAD( "mlsound2.p2", 0x080000, 0x080000, CRC(c8165b6c) SHA1(7c5059ee8630da31fc3ad50d84a4730297757d46) ) ROM_END @@ -8387,7 +8387,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dmr13.bin", 0x0000, 0x010000, CRC(c3015da3) SHA1(23cd505eedf666c012e4064a5fcf5a983f098e83) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "mrdsound.bin", 0x000000, 0x080000, CRC(9b035fa6) SHA1(51b7e5bc3abdf4f1beba2347146a91a2b3f4de35) ) // also in m4luckdvd ROM_END @@ -8403,7 +8403,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dun20", 0x0000, 0x010000, CRC(6a845d4d) SHA1(82bfc3f3a0ede76a4d482efc71b0390610db7acf) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_dutch_sound2.bin", 0x0000, 0x080000, CRC(50450909) SHA1(181659b0594ba8d196b7130c5999c91676a363c0) ) ROM_END @@ -8420,7 +8420,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dlv11.bin", 0x0000, 0x010000, CRC(a890184c) SHA1(26d9952bf2eb4b55d21cdb934ffc73ff1a1cfbac) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "dpms.bin", 0x0000, 0x080000, BAD_DUMP CRC(93fd4253) SHA1(69feda7ffc56defd515c9cd1ce204af3d9731a3f) ) // same as m4prem (incorrect?) ROM_END @@ -8436,7 +8436,7 @@ *****************************************************************************************************************************************************************************/ #define M4TECHNO_EXTRAS \ - ROM_REGION( 0x080000, "msm6376", 0 ) \ + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) \ ROM_LOAD( "generic_redhotroll_sound1.bin", 0x0000, 0x080000, BAD_DUMP CRC(3e80f8bd) SHA1(2e3a195b49448da11cc0c089a8a9b462894c766b) ) ROM_START( m4techno ) @@ -8462,7 +8462,7 @@ *****************************************************************************************************************************************************************************/ #define M4TBPLAY_EXTRAS \ - ROM_REGION( 0x100000, "msm6376", 0 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) \ ROM_LOAD( "dtps10_1", 0x000000, 0x080000, CRC(d1d2c981) SHA1(6a4940248b0bc8df0a9de0d60e98cfebf1962504) ) \ ROM_LOAD( "dtps20_1", 0x080000, 0x080000, CRC(f77c4f39) SHA1(dc0e056f4d8c00824b3e672a02da64613bbf204e) ) @@ -8515,7 +8515,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dld13", 0x0000, 0x010000, CRC(b8ceb29b) SHA1(84b6ebad300214610635fb8141d18de2b7065435) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "sdld01.snd", 0x000000, 0x080000, BAD_DUMP CRC(9b035fa6) SHA1(51b7e5bc3abdf4f1beba2347146a91a2b3f4de35) ) // also in m4magrep ROM_END @@ -8532,7 +8532,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dgj12.bin", 0x0000, 0x010000, CRC(93ee0c35) SHA1(5ae67b14f7f3d8528fa106519a8a27437c997a70) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "sdgj.snd", 0x0000, 0x080000, CRC(b6cd118b) SHA1(51c5d694ed0dfde8d3fd682f2471d83eec236736) ) ROM_END @@ -8549,7 +8549,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dbl14.bin", 0x0000, 0x010000, CRC(c5db9532) SHA1(309b5122b4a1cb33bbccfb97faf4fa996d29432e) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "dblcsnd.bin", 0x0000, 0x080000, CRC(c90fa8ad) SHA1(a98f03d4b6f5892333279bff7537d4d6d887da62) ) // ROM_REGION( 0x200000, "msm6376_alt", 0 ) // bad dump of some sound rom? - just dblcsnd.bin in hex format! @@ -8569,7 +8569,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "drt10.bin", 0x0000, 0x010000, CRC(a1badb8a) SHA1(871786ea4e65ecbf61c9a776100321253922d11e) ) - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "dblcsnd.bin", 0x0000, 0x080000, CRC(c90fa8ad) SHA1(a98f03d4b6f5892333279bff7537d4d6d887da62) ) ROM_END @@ -8587,7 +8587,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "dl716.bin", 0x0000, 0x010000, CRC(141b23a9) SHA1(3bfb82ea0ee4104bd8739b545aba617f84bef770) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "dl7snd.bin", 0x0000, 0x080000, CRC(c90fa8ad) SHA1(a98f03d4b6f5892333279bff7537d4d6d887da62) ) ROM_END @@ -8610,7 +8610,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "rj.bin", 0x0000, 0x020000, CRC(3ffbe4a8) SHA1(47a0309cc9ff315ad9f64e6855863409443e94e2) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "rj_sound1.bin", 0x000000, 0x080000, CRC(443c4901) SHA1(7b3c6737b47dfe04c072f0e157d83c09340c3f9b) ) ROM_LOAD( "rj_sound2.bin", 0x080000, 0x080000, CRC(9456523e) SHA1(ea1b6bf16b7d1015c188ad83760336d9851de391) ) ROM_END @@ -8627,7 +8627,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "gjn08.p1", 0x0000, 0x020000, CRC(2bafac0c) SHA1(363d08f798b5bea409510b1a9415098a69f19ee0) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "gjnsnd.p1", 0x000000, 0x080000, CRC(1d839591) SHA1(2e4ba74f96e7c0592b85409a3f50ec81e00e064c) ) ROM_LOAD( "gjnsnd.p2", 0x080000, 0x080000, CRC(e2829c42) SHA1(2139c1625ad163cce99a522c2cf02ee47a8f9007) ) ROM_LOAD( "gjnsnd.p3", 0x100000, 0x080000, CRC(db084eb4) SHA1(9b46a3cb16974942b0edd25b1b080d30fc60c3df) ) @@ -8646,7 +8646,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "vs.p1", 0x0000, 0x020000, CRC(4099d572) SHA1(91a7c1575013e61c754b2c2cb841e7687b76d7f9) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "vssound.bin", 0x0000, 0x16ee37, CRC(456da6be) SHA1(f0e293f0a383878b581326f869c2e49bec61d0c5) ) ROM_END @@ -8663,7 +8663,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "rab01.p1", 0x0000, 0x020000, CRC(99964fe7) SHA1(3745d09e7a4f417c8e85270d3ffec3e37ee1344d) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "odsnd1.bin", 0x000000, 0x080000, CRC(d746bae4) SHA1(293e1dc9edf88a183cc23dbb4576cefbc8f9d028) ) ROM_LOAD( "odsnd2.bin", 0x080000, 0x080000, CRC(84ace1f4) SHA1(9cc70e59e9d26006870ea1cc522de33e71b71692) ) ROM_LOAD( "odsnd3.bin", 0x100000, 0x080000, CRC(b1b12def) SHA1(d8debf8cfb3af2157d5d1571927588dc1c8d07b6) ) @@ -8682,7 +8682,7 @@ ROM_REGION( 0x40000, "maincpu", 0 ) ROM_LOAD( "vlv.bin", 0x0000, 0x010000, CRC(f20c4858) SHA1(94bf19cfa79a1f5347ab61a80cbbce06942187a2) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "vlvsound1.bin", 0x000000, 0x080000, CRC(ce4da47a) SHA1(7407f8053ee482db4d8d0732fdd7229aa531b405) ) ROM_LOAD( "vlvsound2.bin", 0x080000, 0x080000, CRC(571c00d1) SHA1(5e7be40d3caae88dc3a580415f8ab796f6efd67f) ) ROM_END @@ -8698,7 +8698,7 @@ ROM_START( m4spotln ) ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "gsp01.p1", 0x0000, 0x020000, CRC(54c56a07) SHA1(27f21872a7ffe0c497983fa5bbb59e967bf48974) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "gsp01.snd", 0x000000, 0x080000, NO_DUMP ) ROM_END @@ -8715,7 +8715,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "goldenyears10.bin", 0x0000, 0x020000, CRC(1074bac6) SHA1(967ee64f267a80017fc95bbc6c5a38354e9cab65) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "tgyosnd.p1", 0x000000, 0x080000, CRC(bda49b46) SHA1(fac143003641824bf0db4ac6841292e509fa00da) ) ROM_LOAD( "tgyosnd.p2", 0x080000, 0x080000, CRC(43d28a0a) SHA1(5863e493e84641e4fabcd69e6402e3bcca87dde2) ) ROM_LOAD( "tgyosnd.p3", 0x100000, 0x080000, CRC(b5b9eb68) SHA1(8d5a0a687dd7096da8dfd2a59c6fe96f4b1949f9) ) @@ -8735,7 +8735,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "hnc02.p1", 0x0000, 0x020000, CRC(33a8022b) SHA1(5168b8f32630aa2cb56f30c941695f1728e4fb7a) ) - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "hnc02.snd", 0x000000, 0x080000, NO_DUMP ) ROM_END @@ -8753,7 +8753,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "oct03.p1", 0x0000, 0x020000, CRC(8df66e94) SHA1(e1ab93982846d83becae36b5814ebbd515b9078e) ) - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "oct03.snd", 0x000000, 0x080000, NO_DUMP ) ROM_END @@ -8770,7 +8770,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "big04.p1", 0x0000, 0x020000, CRC(f7ead9c6) SHA1(46c10abb892cb6d427ad508aae96752c14b4cb83) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "big04.snd", 0x000000, 0x080000, NO_DUMP ) ROM_END @@ -8787,7 +8787,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "crz03.bin", 0x0000, 0x020000, CRC(48610c4f) SHA1(a62ac8b3ee704ee4e98f9d56bfc723d4cbb25b54) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "crz03.snd", 0x000000, 0x080000, NO_DUMP ) ROM_END @@ -8804,7 +8804,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "gcv05.p1", 0x0000, 0x020000, CRC(b9ba46f6) SHA1(78b745d85b36444c39747982987088a772b20a7e) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "gcv05.snd", 0x000000, 0x080000, NO_DUMP ) ROM_END @@ -8821,7 +8821,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "dgl01.p1", 0x0000, 0x020000, CRC(d7d39c9b) SHA1(5350c9db549edee30815516b1ce74a018390ff3d) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "dgl01.snd", 0x000000, 0x080000, NO_DUMP ) ROM_END @@ -8836,7 +8836,7 @@ #define M4DRAC_EXTRAS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "drasnd.p1", 0x000000, 0x080000, CRC(54c3821c) SHA1(1fcc62e2b127dd7f1d5d27a3afdf56dc27f122f8) ) \ ROM_LOAD( "drasnd.p2", 0x080000, 0x080000, CRC(9096d2bc) SHA1(1b4c530b7b0fde869980d519255e2585c5461e13) ) \ ROM_LOAD( "drasnd.p3", 0x100000, 0x080000, CRC(a07f412b) SHA1(cca8f5cfe620ece45ca40bf801f0643cd76547e9) ) \ @@ -8876,7 +8876,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "jollyjokerhungarian.bin", 0x0000, 0x010000, CRC(85b6a406) SHA1(e277f9d3b62faead04d65efbc06de7f4a50ae38d) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "jollyjokerhungariansnd.bin", 0x0000, 0x080000, CRC(93460383) SHA1(2b179a1dde09ebdfe8c84641899df7be87d443e5) ) ROM_END @@ -8896,7 +8896,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "cjo", 0x0000, 0x020000, CRC(386e99db) SHA1(5bb0b513ef63ffaedd98b8e9e7206658fe784fda) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_dutch_sound1.bin", 0x0000, 0x080000, BAD_DUMP CRC(f247ba83) SHA1(9b173503e63a4a861d1380b2ab1fe14af1a189bd) ) ROM_END @@ -8904,7 +8904,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "cjm03.epr", 0x0000, 0x020000, CRC(e5e4986e) SHA1(149b950a739ad308f7759927c344de8193ce67c5) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_dutch_sound1.bin", 0x0000, 0x080000, BAD_DUMP CRC(f247ba83) SHA1(9b173503e63a4a861d1380b2ab1fe14af1a189bd) ) ROM_END @@ -8921,7 +8921,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "mgp15.p1", 0x0000, 0x010000, CRC(ec76233f) SHA1(aa8595c639c83026d7fe5c3a161f8b08ff9a8b46) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mgpsnd.p1", 0x000000, 0x080000, CRC(d5f0b845) SHA1(6d97d0d4d07407bb0a51e1d62da95c664418a9e9) ) ROM_LOAD( "mgpsnd.p2", 0x080000, 0x080000, CRC(cefeea06) SHA1(45142ca1bab898dc6f3c32e382ee9157132810a6) ) ROM_LOAD( "mgpsnd.p3", 0x100000, 0x080000, CRC(be4b3bd0) SHA1(f14c08dc770a24db8bbd00a65d3edf6ee9895ca3) ) @@ -8940,7 +8940,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "cld_16.bin", 0x0000, 0x010000, CRC(89f63938) SHA1(8d3a5628e2c0bf39784afe2f00a007d40ea35423) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_dutch_sound1.bin", 0x000000, 0x080000, BAD_DUMP CRC(f247ba83) SHA1(9b173503e63a4a861d1380b2ab1fe14af1a189bd) ) ROM_LOAD( "generic_dutch_sound2.bin", 0x080000, 0x080000, BAD_DUMP CRC(50450909) SHA1(181659b0594ba8d196b7130c5999c91676a363c0) ) ROM_END @@ -8958,7 +8958,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "gse3_0.p1", 0x0000, 0x010000, CRC(eff705ff) SHA1(6bf96872ef4bcc8f8041c5384d892f072c72be2b) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_dutch_sound1.bin", 0x000000, 0x080000, BAD_DUMP CRC(f247ba83) SHA1(9b173503e63a4a861d1380b2ab1fe14af1a189bd) ) ROM_END @@ -8987,7 +8987,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "ma-15_b-1925-94_esc_1.6a_n-1270.rom1", 0x0000, 0x10000, CRC(6fa2a0ef) SHA1(3b60b545e417a45e61e3babbe27758a053ced926) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "escsnd_0.2_p1.rom2", 0x000000, 0x080000, CRC(2f6517bc) SHA1(b39a4fa17d3e373b7a89663668529d752e595641) ) ROM_LOAD( "escsnd_0.2_p2.rom3", 0x080000, 0x080000, CRC(3b0b9fed) SHA1(5a03be7f3a7f40252cfec5f719a845d175e3995c) ) @@ -9002,7 +9002,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "ma-15_b-1925-94_esc_1.6a_n-1269.rom1", 0x0000, 0x10000, CRC(8c3f1cf3) SHA1(0e7961bacc4ba701efbbd1ee99b2a72422f96b07) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "escsnd_0.2_p1.rom2", 0x000000, 0x080000, CRC(2f6517bc) SHA1(b39a4fa17d3e373b7a89663668529d752e595641) ) ROM_LOAD( "escsnd_0.2_p2.rom3", 0x080000, 0x080000, CRC(3b0b9fed) SHA1(5a03be7f3a7f40252cfec5f719a845d175e3995c) ) @@ -9017,7 +9017,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "ma-15_b-1925-94_esc_1.6a_n-1268.rom1", 0x0000, 0x10000, CRC(d2b47707) SHA1(65096835d94242a5c07b266b8561a9e0d9f95e36) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "escsnd_0.2_p1.rom2", 0x000000, 0x080000, CRC(2f6517bc) SHA1(b39a4fa17d3e373b7a89663668529d752e595641) ) ROM_LOAD( "escsnd_0.2_p2.rom3", 0x080000, 0x080000, CRC(3b0b9fed) SHA1(5a03be7f3a7f40252cfec5f719a845d175e3995c) ) @@ -9038,7 +9038,7 @@ ROM_START( m4nod ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "nod.bin", 0x0000, 0x010000, CRC(bc738af5) SHA1(8df436139554ccfb48c4db0a32e3333dbf3c4f46) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "nodsnd.bin", 0x0000, 0x080000, CRC(2134494a) SHA1(3b665bf79567a71195b20e76c50b02707d15b78d) ) ROM_END @@ -9049,7 +9049,7 @@ #define M4LUCKWB_EXTRAS \ - ROM_REGION( 0x100000, "msm6376", 0 ) /* these are all different sound roms... */ \ + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) /* these are all different sound roms... */ \ ROM_LOAD( "lwbs3.bin", 0x0000, 0x07dc89, CRC(ee102376) SHA1(3fed581a4654acf285dd430fbfbac33cd67411b8) ) \ ROM_LOAD( "lwbs7.bin", 0x0000, 0x080000, CRC(5d4177c7) SHA1(e13f145885bb719b0021ae4ce289261a3eaa2e18) ) \ ROM_LOAD( "lwbs8.bin", 0x0000, 0x080000, CRC(187cdf5b) SHA1(87ec189af27c95f278a7531ec13df53a08889af8) ) \ diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4mod4yam.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4mod4yam.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4mod4yam.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4mod4yam.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -80,8 +80,7 @@ void mpu4mod4yam_machines_state::add_ym2413(machine_config &config) { YM2413(config, m_ym2413, XTAL(3'579'545)); // XTAL on sound board - m_ym2413->add_route(ALL_OUTPUTS, "lspeaker", 1.0); - m_ym2413->add_route(ALL_OUTPUTS, "rspeaker", 1.0); + m_ym2413->add_route(ALL_OUTPUTS, "mono", 1.0); } void mpu4mod4yam_machines_state::base_f(machine_config &config) @@ -1623,11 +1622,6 @@ * *****************************************************************************************************************************************************************************/ -ROM_START( m4tst ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "ut4.p1", 0xC000, 0x4000, CRC(086dc325) SHA1(923caeb61347ac9d3e6bcec45998ddf04b2c8ffd)) -ROM_END - ROM_START( m4joljokd ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "djj15.bin", 0x0000, 0x010000, CRC(155cb134) SHA1(c1026effeceba131df9681afd91ccd6fb43b738a) ) @@ -1660,8 +1654,6 @@ ROM_END -GAME(198?, m4tst, 0, no_bacta(R4, RT1, OVER), mpu4, mpu4mod4yam_machines_state, init_m4, ROT0,"Barcrest","MPU4 Unit Test (Program 4)",MACHINE_MECHANICAL ) - GAME(199?, m4joljokd, 0, cheatchr_pal(R4, RT1), mpu4, mpu4mod4yam_machines_state, init_m4, ROT0, "Barcrest","Jolly Joker (Barcrest) (Dutch) (MPU4) (DJJ 1.5)",GAME_FLAGS) // Geen Tubes GAME(199?, m4clbshf, 0, cheatchr_pal(R4, RT1), mpu420p, mpu4mod4yam_machines_state, init_m4, ROT0, "Barcrest","Club Shuffle (Barcrest) (MPU4) (CSS 1.0)",GAME_FLAGS) // set stake (runs if you do) diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4_oki_sampled_sound.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4_oki_sampled_sound.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4_oki_sampled_sound.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4_oki_sampled_sound.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,206 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood, James Wallace + +/* + +Universal sampled sound program card PCB 683077 +Sampled sound card, using a PIA and PTM for timing and data handling +The sound hardware is technically twin channel stereo, but there's no evidence to suggest it was ever connected as such +I've separated the channels here, to tie back at the game level + +*/ + +#include "emu.h" + +#include "mpu4_oki_sampled_sound.h" + +//#define VERBOSE 1 +#include "logmacro.h" + + +DEFINE_DEVICE_TYPE(MPU4_OKI_SAMPLED_SOUND, mpu4_oki_sampled_sound, "mpu4okisnd", "Barcrest Sampled Sound Program Card") + +mpu4_oki_sampled_sound::mpu4_oki_sampled_sound(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, MPU4_OKI_SAMPLED_SOUND, tag, owner, clock), + device_mixer_interface(mconfig, *this), + m_cb2_handler(*this), + m_ptm_ic3ss(*this, "ptm_ic3ss"), + m_pia_ic4ss(*this, "pia_ic4ss"), + m_msm6376(*this, "msm6376"), + m_expansion_latch(0), + m_global_volume(0), + m_t1(0), + m_t3l(0), + m_t3h(0), + m_last_reset(0) +{ +} + +/* +The MSM6376 sound chip is configured in a slightly strange way, to enable dynamic +sample rate changes (8Khz, 10.6 Khz, 16 KHz) by varying the clock. +According to the BwB programmer's guide, the formula is: +MSM6376 clock frequency:- +freq = (CPU_CLOCK/((t3L+1)(t3H+1)))*[(t3H(T3L+1)+1)/(2(t1+1))] +where [] means rounded up integer, +t3L is the LSB of Clock 3, +t3H is the MSB of Clock 3, +and t1 is the initial value in clock 1. + +As originally made, this is the peripheral clock (1.72 MHz), but for video it's the E Clock of the 68k (1MHz) + +//O3 -> G1 O1 -> c2 o2 -> c1 + +This is a bit of a cheat - since we don't clock into the OKI chip directly, we need to +calculate the oscillation frequency in advance. We're running the timer for interrupt +purposes, but the frequency calculation is done by plucking the values out as they are written. +*/ + +void mpu4_oki_sampled_sound::ic3_write(offs_t offset, uint8_t data) +{ + m_ptm_ic3ss->write(offset, data); + + if (offset == 3) + { + m_t1 = data; + } + if (offset == 6) + { + m_t3h = data; + } + if (offset == 7) + { + m_t3l = data; + } + + float const num = float(clock()) / ((m_t3l + 1) * (m_t3h + 1)); + float const denom = std::ceil(float(m_t3h * (m_t3l + 1) + 1) / (2 * (m_t1 + 1))); //need to round up, this gives same precision as chip + + int const freq = int(num * denom); + + if (freq) + { + m_msm6376->set_unscaled_clock(freq); + } +} + +uint8_t mpu4_oki_sampled_sound::ic3_read(offs_t offset) +{ + return m_ptm_ic3ss->read(offset); +} + +void mpu4_oki_sampled_sound::ic4_write(offs_t offset, uint8_t data) +{ + m_pia_ic4ss->write(offset, data); +} + +uint8_t mpu4_oki_sampled_sound::ic4_read(offs_t offset) +{ + return m_pia_ic4ss->read(offset); +} + +void mpu4_oki_sampled_sound::pia_gb_porta_w(uint8_t data) +{ + LOG("PIA Port A Set to %2x\n", data); + m_msm6376->write(data); +} + +void mpu4_oki_sampled_sound::pia_gb_portb_w(uint8_t data) +{ + uint8_t changed = m_expansion_latch^data; + + LOG("PIA Port B Set to %2x\n", data); + + if (changed & 0x20) + { // digital volume clock line changed + if (!(data & 0x20)) + { // changed from high to low, + if (!(data & 0x10)) // down + { + if (m_global_volume < 32) m_global_volume++; //steps unknown + } + else // up + { + if (m_global_volume > 0) m_global_volume--; + } + + LOG("Volume Set to %2x\n", data); + float percent = (32-m_global_volume)/32.0; + m_msm6376->set_output_gain(0, percent); + m_msm6376->set_output_gain(1, percent); + } + } + m_msm6376->ch2_w(data & 0x02); + m_msm6376->st_w(data & 0x01); +} + +uint8_t mpu4_oki_sampled_sound::pia_gb_portb_r() +{ + LOG("PIA Read of Port B\n", machine().describe_context()); + uint8_t data = 0; + // b7 NAR - we can load another address into Channel 1 + // b6, 1 = OKI ready, 0 = OKI busy + // b5, vol clock + // b4, 1 = Vol down, 0 = Vol up + // + + if (m_msm6376->nar_r()) data |= 0x80; + else data &= ~0x80; + + if (m_msm6376->busy_r()) data |= 0x40; + else data &= ~0x40; + + return data | m_expansion_latch; +} + +WRITE_LINE_MEMBER(mpu4_oki_sampled_sound::pia_gb_ca2_w) +{ + LOG("OKI RESET data = %02X\n", state); + if ((m_last_reset != state) && !state) + { + m_msm6376->reset(); + } + m_last_reset = state; +// reset line +} + + + +WRITE_LINE_MEMBER(mpu4_oki_sampled_sound::pia_gb_cb2_w) +{ + m_cb2_handler(state); +} + + +void mpu4_oki_sampled_sound::device_add_mconfig(machine_config &config) +{ + PTM6840(config, m_ptm_ic3ss, clock()); + m_ptm_ic3ss->set_external_clocks(0, 0, 0); + m_ptm_ic3ss->o1_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_c2)); + m_ptm_ic3ss->o2_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_c1)); + m_ptm_ic3ss->o3_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_g1)); + + PIA6821(config, m_pia_ic4ss, 0); + m_pia_ic4ss->readpb_handler().set(FUNC(mpu4_oki_sampled_sound::pia_gb_portb_r)); + m_pia_ic4ss->writepa_handler().set(FUNC(mpu4_oki_sampled_sound::pia_gb_porta_w)); + m_pia_ic4ss->writepb_handler().set(FUNC(mpu4_oki_sampled_sound::pia_gb_portb_w)); + m_pia_ic4ss->ca2_handler().set(FUNC(mpu4_oki_sampled_sound::pia_gb_ca2_w)); + m_pia_ic4ss->cb2_handler().set(FUNC(mpu4_oki_sampled_sound::pia_gb_cb2_w)); + + + OKIM6376(config, m_msm6376, 128000); //Adjusted by IC3, default to 16KHz sample. Can also be 85430 at 10.5KHz and 64000 at 8KHz + m_msm6376->add_route(0, *this, 1.0); + m_msm6376->add_route(1, *this, 1.0); +} + + +void mpu4_oki_sampled_sound::device_start() +{ + m_cb2_handler.resolve_safe(); + save_item(NAME(m_expansion_latch)); + save_item(NAME(m_global_volume)); + save_item(NAME(m_t1)); + save_item(NAME(m_t3l)); + save_item(NAME(m_t3h)); + save_item(NAME(m_last_reset)); +} diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4_oki_sampled_sound.h mame-0.251+dfsg.1/src/mame/barcrest/mpu4_oki_sampled_sound.h --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4_oki_sampled_sound.h 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4_oki_sampled_sound.h 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,54 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood, James Wallace + +#ifndef MAME_BARCREST_MPU4_OKI_SAMPLED_SOUND_H +#define MAME_BARCREST_MPU4_OKI_SAMPLED_SOUND_H + +#pragma once + +#include "machine/6821pia.h" +#include "machine/6840ptm.h" +#include "sound/okim6376.h" + +DECLARE_DEVICE_TYPE(MPU4_OKI_SAMPLED_SOUND, mpu4_oki_sampled_sound) + +class mpu4_oki_sampled_sound : public device_t, public device_mixer_interface +{ +public: + // construction/destruction + mpu4_oki_sampled_sound(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + + auto cb2_handler() { return m_cb2_handler.bind(); } + + void ic3_write(offs_t offset, uint8_t data); + uint8_t ic3_read(offs_t offset); + + void ic4_write(offs_t offset, uint8_t data); + uint8_t ic4_read(offs_t offset); + +protected: + virtual void device_add_mconfig(machine_config &config) override; + virtual void device_start() override; + +private: + devcb_write_line m_cb2_handler; + + required_device m_ptm_ic3ss; + required_device m_pia_ic4ss; + required_device m_msm6376; + + uint8_t m_expansion_latch; + uint8_t m_global_volume; + uint8_t m_t1; + uint8_t m_t3l; + uint8_t m_t3h; + uint8_t m_last_reset; + + void pia_gb_porta_w(uint8_t data); + void pia_gb_portb_w(uint8_t data); + uint8_t pia_gb_portb_r(); + DECLARE_WRITE_LINE_MEMBER(pia_gb_ca2_w); + DECLARE_WRITE_LINE_MEMBER(pia_gb_cb2_w); +}; + +#endif // MAME_BARCREST_MPU4_OKI_SAMPLED_SOUND_H diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4redpoint.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4redpoint.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4redpoint.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4redpoint.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -38,8 +38,7 @@ void mpu4redpoint_state::add_ympcm(machine_config &config) { YMZ280B(config, m_ympcm, 16'934'400); - m_ympcm->add_route(ALL_OUTPUTS, "lspeaker", 1.0); - m_ympcm->add_route(ALL_OUTPUTS, "rspeaker", 1.0); + m_ympcm->add_route(ALL_OUTPUTS, "mono", 1.0); } void mpu4redpoint_state::memmap_ympcm(address_map &map) diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4union.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4union.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4union.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4union.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -21,7 +21,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "cw1_1.bin", 0x0000, 0x010000, CRC(a1108d79) SHA1(fa2a5510f2bb2d3811550547bad7c3ef0eb0ddc0) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "cakesnd1.bin", 0x000000, 0x080000, CRC(abd16cc4) SHA1(744dd1da6c2126bc8673f14aac556af29878f2c4) ) ROM_LOAD( "cakesnd2.bin", 0x080000, 0x080000, CRC(34da47c0) SHA1(b55f352a7a62172d1dfe990bef39bcbd50e48597) ) ROM_END @@ -31,7 +31,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "ez2511.bin", 0x0000, 0x010000, CRC(86e93c3f) SHA1(a999830685da5d183058769a0598c338c20accdf) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "eezeefruitssnd.bin", 0x0000, 0x080000, CRC(e6e5aa12) SHA1(0f35eaf0a29050365f53d039e4a7880240c28dc4) ) ROM_END @@ -39,7 +39,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "fruitdrop.bin", 0x0000, 0x010000, CRC(7235d3f0) SHA1(e327e28e341ec859f503b71065c40b5d47f448fe) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "fruitdropsnd.bin", 0x0000, 0x080000, CRC(27880a95) SHA1(6286ab0c342db7de174c3582f56cf9dd60c46883) ) ROM_END @@ -74,7 +74,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "lottytime.bin", 0x0000, 0x010000, CRC(c032c422) SHA1(37c6e10c1fa1cab3de7b4d27ed027604ecea4394) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "lottytimesnd.bin", 0x0000, 0x080000, CRC(e1966300) SHA1(2a69e39310b49c685bc4307e0396a3b9a0849472) ) ROM_END @@ -115,7 +115,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "pmad.p1", 0x0000, 0x010000, CRC(e430510b) SHA1(bb8d443429aa7d39a99de5cd1387154398b74d9c) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "pmadsnd.bin", 0x0000, 0x080000, CRC(88312507) SHA1(64e386c3c9b3f82a390777b61c7207567cc962e7) ) ROM_END @@ -123,7 +123,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "revolva.bin", 0x0000, 0x010000, CRC(e195feac) SHA1(dc8d736784819fd15f0e7e29e9f91cf1c601ebb9) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "revolvasnd.p1", 0x000000, 0x080000, CRC(a9138bdf) SHA1(aaa5b3e82a8d89776b636e46ada9aae8a4febaab) ) ROM_LOAD( "revolvasnd.p2", 0x080000, 0x080000, CRC(5ae7b26a) SHA1(a17cef58e37bccb5954b9acab01f92ff21375ab1) ) ROM_END @@ -132,7 +132,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "rotex1_2.bin", 0x0000, 0x010000, CRC(202e794d) SHA1(15b7459db7f3a5317a92138d997e9817d4367750) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "rotsnd.bin", 0x0000, 0x080000, CRC(02f8c2e2) SHA1(33a051e7af6d8c33708f7b4e0654d66312eeede5) ) ROM_END @@ -141,7 +141,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "selectawp.bin", 0x0000, 0x010000, CRC(e248539c) SHA1(b1db8fdc221c70d2a699cb86cea5681527d7d06a) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "selectsnd.bin", 0x0000, 0x080000, CRC(93fd4253) SHA1(69feda7ffc56defd515c9cd1ce204af3d9731a3f) ) ROM_END @@ -149,7 +149,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "supa11l.bin", 0x0000, 0x010000, CRC(6cdbf08a) SHA1(4c0faf7144b9ac19c8d55b81ce51b519570b0d1f) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "supafruitssnd.bin", 0x0000, 0x080000, CRC(b70184ca) SHA1(dba2204cb606f0c6dad8a4c46fbbb1beb5b5e31c) ) ROM_END @@ -158,7 +158,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "supafruits.bin", 0x0000, 0x010000, CRC(c6242e33) SHA1(810be1fb99ddb810c5506a974c9214ce23426a87) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "supafruitssnd.bin", 0x0000, 0x080000, CRC(b70184ca) SHA1(dba2204cb606f0c6dad8a4c46fbbb1beb5b5e31c) ) ROM_END @@ -166,7 +166,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "tmad1_1p", 0x000000, 0x010000, CRC(7a49546b) SHA1(cfce6fda74682e6c60a5731fee44c41c5f5bbbeb) ) - ROM_REGION( 0x180000, "msm6376", 0 ) + ROM_REGION( 0x180000, "okicard:msm6376", 0 ) ROM_LOAD( "triple.s1", 0x000000, 0x080000, CRC(e808f0ae) SHA1(4d88c1d8ed9396629509a0c7614e7510401f1325) ) ROM_LOAD( "triple.s2", 0x080000, 0x080000, CRC(40161063) SHA1(a24edb311fea466c0c15aebce40044f8db448e50) ) ROM_LOAD( "triple.s3", 0x100000, 0x080000, CRC(f9109afb) SHA1(4e4a863b60915ddb2865c12af19cc38bcad6d062) ) @@ -177,7 +177,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "unibox.bin", 0x0000, 0x010000, CRC(9e99eed4) SHA1(c59f9ab2cae487991b0202bd18c6ab514ba3b29d) ) - ROM_REGION( 0x80000, "msm6376", 0 ) + ROM_REGION( 0x80000, "okicard:msm6376", 0 ) ROM_LOAD( "uniboxsnd.bin", 0x0000, 0x080000, CRC(cce8fda1) SHA1(e9d6514dc2badb046201ea44802690cf104e6075) ) ROM_END @@ -185,7 +185,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "unibox1.bin", 0x0000, 0x010000, CRC(dd8fa3bd) SHA1(34719608e429e6ef0cc0ea9a75df7b00439e53ed) ) - ROM_REGION( 0x80000, "msm6376", 0 ) + ROM_REGION( 0x80000, "okicard:msm6376", 0 ) ROM_LOAD( "uniboxsnd.bin", 0x0000, 0x080000, CRC(cce8fda1) SHA1(e9d6514dc2badb046201ea44802690cf104e6075) ) ROM_END @@ -193,7 +193,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "unique.bin", 0x000000, 0x010000, CRC(ac8c83da) SHA1(11912c1b9a028e17db2395ca85792c4d10fae3ad) ) - ROM_REGION( 0x80000, "msm6376", 0 ) + ROM_REGION( 0x80000, "okicard:msm6376", 0 ) ROM_LOAD( "uniquesnd.bin", 0x000000, 0x080000, CRC(177a4c07) SHA1(180f51ba982ccf7d19dfa50e94c295395799c360) ) ROM_END @@ -201,7 +201,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "uniquepatched64k.bin", 0x000000, 0x010000, CRC(889575a2) SHA1(dcd0830d75cb4ddc901f22d71a28836e55d969cc) ) - ROM_REGION( 0x80000, "msm6376", 0 ) + ROM_REGION( 0x80000, "okicard:msm6376", 0 ) ROM_LOAD( "uniquesnd.bin", 0x000000, 0x080000, CRC(177a4c07) SHA1(180f51ba982ccf7d19dfa50e94c295395799c360) ) ROM_END @@ -209,7 +209,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "crazybingo.bin", 0x0000, 0x010000, CRC(51b3856c) SHA1(ed04771c69de090f4895920c213ba30754fcc1f9) ) - ROM_REGION( 0x80000, "msm6376", 0 ) + ROM_REGION( 0x80000, "okicard:msm6376", 0 ) ROM_LOAD( "crazybingosnd.bin", 0x0000, 0x080000, CRC(6a60c412) SHA1(4f038675646510372022145033884ca704d31033) ) ROM_END @@ -218,10 +218,10 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "gv0_1.bin", 0x0000, 0x010000, CRC(ba9a507b) SHA1(ba3b2038b50248ec1f3319e2b39d02313ce3ad08) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "gvsnd.p1", 0x0000, 0x080000, CRC(ac56b475) SHA1(8017784e5dd8e6d85857ff989c553d04c2ea217a) ) - ROM_REGION( 0x080000, "altmsm6376", 0 ) + ROM_REGION( 0x080000, "okicard:altmsm6376", 0 ) // different SFX, does this belong to a specific revision? ROM_LOAD( "gv2snd.bin", 0x0000, 0x080000, CRC(e11ebc9c) SHA1(3f4e8148bc3687af77838b770bbc219a3f50f1c6) ) ROM_END @@ -230,7 +230,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "gv0_3.bin", 0x0000, 0x010000, CRC(c20e896e) SHA1(9105ba56b9f4b55a158e4dc2b4268a4b93765c88) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "gvsnd.p1", 0x0000, 0x080000, CRC(ac56b475) SHA1(8017784e5dd8e6d85857ff989c553d04c2ea217a) ) ROM_END @@ -239,7 +239,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "rock0_1.hex", 0x0000, 0x010000, CRC(2c786a34) SHA1(3800af04550f12e8f58b1929b49e21572f19d589) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "rocksnd.bin", 0x0000, 0x080000, CRC(c3e96650) SHA1(71952267d3149786cfef1dd49cc070664bb007a4) ) ROM_END @@ -247,7 +247,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "rock1.hex", 0x0000, 0x010000, CRC(b7dfd181) SHA1(566531bcb9d0b7d3caebed3f7c96f5fb23a7cef2) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "rocksnd.bin", 0x0000, 0x080000, CRC(c3e96650) SHA1(71952267d3149786cfef1dd49cc070664bb007a4) ) ROM_END @@ -255,7 +255,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "rock3.bin", 0x0000, 0x010000, CRC(c5134d03) SHA1(c4dfa43ffd077690d0b9a20cb82bbf92a1dc1ac9) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "rocksnd.bin", 0x0000, 0x080000, CRC(c3e96650) SHA1(71952267d3149786cfef1dd49cc070664bb007a4) ) ROM_END diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4unsorted.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4unsorted.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4unsorted.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4unsorted.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -41,7 +41,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "casinomultiplay.bin", 0x0000, 0x010000, CRC(2ebd1800) SHA1(d15e2593d17d8db9c6946af3366cf429ad291f76) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "casinomultiplaysnd.bin", 0x0000, 0x080000, CRC(be293e95) SHA1(bf0d419c898920a7546b542d8b205e25004ef04f) ) ROM_END @@ -107,7 +107,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "aao2_8.bin", 0x0000, 0x010000, CRC(94ce4016) SHA1(2aecb6dbe798b7bbfb3d27f4d115b6611c7d990f) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "aaosnd.bin", 0x0000, 0x080000, CRC(7bf30b96) SHA1(f0086ae239b1d973018a3ea04e816a87f8f20bad) ) ROM_END @@ -116,7 +116,7 @@ ROM_REGION( 0x020000, "maincpu", 0 ) ROM_LOAD( "bog.bin", 0x0000, 0x020000, CRC(21186fb9) SHA1(3d536098c7541cbdf02d68a18a38cae71155d7ff) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "bandsofgoldsnd.bin", 0x0000, 0x080000, CRC(95c6235f) SHA1(a13afa048b73fabfad229b5c2f8ef5ee9948d9fb) ) ROM_END @@ -125,7 +125,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "b_bv2_7.bin", 0x0000, 0x010000, CRC(9f3a7638) SHA1(b7169dc26a6e136d6daaf8d012f4c3d017e99e4a) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "big-bensnd1.bin", 0x000000, 0x080000, CRC(e41c3ec1) SHA1(a0c09f51229afcd14f09bb9080d4f3bb198b2050) ) ROM_LOAD( "big-bensnd2.bin", 0x080000, 0x080000, CRC(ed71dbe1) SHA1(e67ca3c178caacb99118bacfcd7612e699f40455) ) ROM_END @@ -134,7 +134,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "b_bv2_9.bin", 0x0000, 0x010000, CRC(86a745ee) SHA1(2347e8e38c743ea4d00faee6a56bb77e05c9c94d) ) // aka bb2_9.bin - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "big-bensnd1.bin", 0x000000, 0x080000, CRC(e41c3ec1) SHA1(a0c09f51229afcd14f09bb9080d4f3bb198b2050) ) ROM_LOAD( "big-bensnd2.bin", 0x080000, 0x080000, CRC(ed71dbe1) SHA1(e67ca3c178caacb99118bacfcd7612e699f40455) ) ROM_END @@ -143,7 +143,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "bb1_9p.bin", 0x0000, 0x010000, CRC(c76c5a09) SHA1(b0e3b38998428f535841ab5373d57cb0d5b21ed3) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "big-bensnd1.bin", 0x000000, 0x080000, CRC(e41c3ec1) SHA1(a0c09f51229afcd14f09bb9080d4f3bb198b2050) ) ROM_LOAD( "big-bensnd2.bin", 0x080000, 0x080000, CRC(ed71dbe1) SHA1(e67ca3c178caacb99118bacfcd7612e699f40455) ) ROM_END @@ -153,7 +153,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "bb_2_1.bin", 0x0000, 0x010000, CRC(d3511805) SHA1(c86756998d36e729874c71a5d6442785069c57e9) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "big-bensnd1.bin", 0x000000, 0x080000, CRC(e41c3ec1) SHA1(a0c09f51229afcd14f09bb9080d4f3bb198b2050) ) ROM_LOAD( "big-bensnd2.bin", 0x080000, 0x080000, CRC(ed71dbe1) SHA1(e67ca3c178caacb99118bacfcd7612e699f40455) ) ROM_END @@ -162,7 +162,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "bbs_2_9p.bin", 0x0000, 0x010000, CRC(0107608d) SHA1(9e5def90e77f65c366aea2a9ac24d5f17c4d0ae8) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "big-bensnd1.bin", 0x000000, 0x080000, CRC(e41c3ec1) SHA1(a0c09f51229afcd14f09bb9080d4f3bb198b2050) ) ROM_LOAD( "big-bensnd2.bin", 0x080000, 0x080000, CRC(ed71dbe1) SHA1(e67ca3c178caacb99118bacfcd7612e699f40455) ) ROM_END @@ -192,7 +192,7 @@ ROM_REGION( 0x010000, "maincpu", 0 ) ROM_LOAD( "doublechance.bin", 0x0000, 0x010000, CRC(6feeeb7d) SHA1(40fe67d854fbf48959e08fdb5743e14d340c16e7) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "generic_redhotroll_sound1.bin", 0x0000, 0x080000, CRC(3e80f8bd) SHA1(2e3a195b49448da11cc0c089a8a9b462894c766b) ) ROM_END @@ -213,7 +213,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "stakex.bin", 0x0000, 0x010000, CRC(098c7117) SHA1(27f04cfb88ef870fc30afd055cf32ffe448275ea) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "stakexsnd.bin", 0x0000, 0x080000, CRC(baf17991) SHA1(282e0ac9d18299e9f7a0fecaf9edf0cb4205ef0e) ) ROM_END @@ -221,7 +221,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "stakex2.bin", 0x0000, 0x010000, CRC(77ae3f63) SHA1(c5f1cfd5bffcf3156f584757de57ef6530214511) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "stakexsnd.bin", 0x0000, 0x080000, CRC(baf17991) SHA1(282e0ac9d18299e9f7a0fecaf9edf0cb4205ef0e) ) ROM_END @@ -241,7 +241,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "barcrazy.bin", 0x0000, 0x010000, CRC(917ad749) SHA1(cb0a3f6737b8f183d2efb0a3f8adbf86d40a38ff) ) - ROM_REGION( 0x080000, "msm6376", 0 ) + ROM_REGION( 0x080000, "okicard:msm6376", 0 ) ROM_LOAD( "barcrazysnd.bin", 0x0000, 0x080000, CRC(0e155193) SHA1(7583e9f3e3624f82f2329565bdcbdaa5a5b03ee0) ) ROM_END @@ -249,7 +249,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "bingo-bonanza_v1.bin", 0x0000, 0x010000, CRC(3d137ddf) SHA1(1ce23db111448e44a166554dd8853dc379e787da) ) - ROM_REGION( 0x100000, "msm6376", 0 ) + ROM_REGION( 0x100000, "okicard:msm6376", 0 ) ROM_LOAD( "bingo-bonanzasnd1.bin", 0x000000, 0x080000, CRC(e0eb2a92) SHA1(cbc0b3bba7857d87535d1c2a7459aed60709734a) ) ROM_LOAD( "bingo-bonanzasnd2.bin", 0x080000, 0x080000, CRC(7db27b28) SHA1(98c5fa4bf8c7f67fae90a1ca98b74057f5ed9b6b) ) ROM_END @@ -257,19 +257,19 @@ ROM_START( m4dnj ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "d.n.j 1-02", 0x0000, 0x010000, CRC(5750843d) SHA1(b87923e84071ea4a1af7566a7f413f8e30e208e9) ) - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) // should this set have an OKI? + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) // should this set have an OKI? ROM_END ROM_START( m4dnja ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "d.n.j 1-03", 0x0000, 0x010000, CRC(7b805255) SHA1(f62765bfa66e2422ac0a71ebaff27f1ccd470fe2) ) - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) // should this set have an OKI? + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) // should this set have an OKI? ROM_END ROM_START( m4dnjb ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "d.n.j 1-06", 0x0000, 0x010000, CRC(aab770c7) SHA1(f24fff8346915017bc43fef9fac356a067676d86) ) - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) // should this set have an OKI? + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) // should this set have an OKI? ROM_END @@ -277,7 +277,7 @@ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "matador.bin", 0x0000, 0x020000, CRC(367788a4) SHA1(3c9b077a64f993cb60107558efdfcbee0fe5c958) ) - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) // missing ROM_END @@ -425,7 +425,7 @@ ROM_REGION( 0x100000, "alt2msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "cash-copssnd1.bin", 0x000000, 0x080000, CRC(776a303d) SHA1(a5a282674674f25bc6ca169eeebee7309239871f) ) \ ROM_LOAD( "cash-copssnd2.bin", 0x080000, 0x080000, CRC(107816a2) SHA1(f5d4a0390b85a665a3536da4689ec91b1a2da3ae) ) \ - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) \ ROM_LOAD( "cashcops.p1", 0x000000, 0x080000, CRC(9a59a3a1) SHA1(72cfc99b22ec5fb89714c6d2d66760d86dc19f2f) ) \ ROM_LOAD( "cashcops.p2", 0x080000, 0x080000, CRC(deb3e755) SHA1(01f92881c451919be549a1c58afa1fa4630bf171) ) @@ -451,7 +451,7 @@ ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "ccc12.bin", 0x8000, 0x008000, CRC(570cc766) SHA1(036c95ff6428ab38cceb0537dcc990be78fb331a) ) - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "criss cross crazy sound,27c2001", 0x0000, 0x040000, CRC(1994c509) SHA1(2bbe91a43aa9953b7776faf67e81e30a4f7b7cb2) ) ROM_END @@ -459,13 +459,13 @@ ROM_START( m4treel ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "trgv1.1s", 0x0000, 0x010000, CRC(a9c76b08) SHA1(a5b3bc980eb58e346cb02d8ca43401f304e5b6de) ) - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_END ROM_START( m4treela ) ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "trgv1.1b", 0x0000, 0x020000, CRC(7eaebef6) SHA1(5ab86329041e7df09cc2e3ce8d5afd44d88c246c) ) - ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x100000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_END @@ -480,7 +480,7 @@ #define M4SURF_EXTRAS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "s_surf.sn1", 0x000000, 0x080000, CRC(f20a7d69) SHA1(7887230613b497dc71a60125dd1e265ebbc8eb23) ) \ ROM_LOAD( "s_surf.sn2", 0x080000, 0x080000, CRC(6c4a9074) SHA1(3b993120156677de893e5dc1e0c5d6e0285c5570) ) @@ -507,12 +507,12 @@ ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD( "moy_wife.p1", 0x0000, 0x020000, CRC(293d35a6) SHA1(980a28ca5e9ec3ca2e1a5b34f658b622dca4cf50) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // missing? ROM_END #define M4BLKGD_EXTRAS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "blackgoldsnd1.bin", 0x000000, 0x080000, CRC(d251b59e) SHA1(960b81b87f0fb5000028c863892a273362cb897f) ) \ ROM_LOAD( "blackgoldsnd2.bin", 0x080000, 0x080000, CRC(87cbcd1e) SHA1(a6cd186af7c5682e216f549b77735b9bf1b985ae) ) \ ROM_LOAD( "blackgoldsnd3.bin", 0x100000, 0x080000, CRC(258f7b83) SHA1(a6df577d98ade8c5c5ff68ef891667e65e83ac17) ) @@ -530,7 +530,7 @@ ROM_END #define M4ZILL_EXTRAS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "zillsnd.bin", 0x0000, 0x080000, CRC(171ed677) SHA1(25d63f4d9c64f13bec4feffa265c5b0c5f6be4ec) ) ROM_START( m4zill ) @@ -547,9 +547,9 @@ #define M4HSTR_EXTRAS \ - ROM_REGION( 0x200000, "altmsm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:altmsm6376", 0 ) \ ROM_LOAD( "happystreak.p1", 0x0000, 0x080000, CRC(b1f328ff) SHA1(2bc6605965cb5743a2f8b813d68cf1646a4bcac1) ) \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "happystreaksnd.p1", 0x0000, 0x080000, CRC(76cda195) SHA1(21a985cd6cf1f63f4aa799563099a0527a7c0ea2) ) \ ROM_LOAD( "happystreaksnd.p2", 0x080000, 0x080000, CRC(f3b4c763) SHA1(7fd6230c13b66a16daad9d45935c7803a5a4c35c) ) @@ -604,7 +604,7 @@ #define M4DDB_EXTRAS \ - ROM_REGION( 0x200000, "msm6376", 0 ) \ + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) \ ROM_LOAD( "ddbsound1", 0x000000, 0x080000, CRC(47c87bd5) SHA1(c1578ae553c38e93235cea2142cb139170de2a7e) ) \ ROM_LOAD( "ddbsound2", 0x080000, 0x080000, CRC(9c733ab1) SHA1(a83c3ebe99703bb016370a8caf76bdeaff5f2f40) ) ROM_START( m4ddb ) @@ -623,38 +623,38 @@ ROM_START( m4hapfrt ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD( "hf1_1.bin", 0x0000, 0x010000, CRC(6c16cb05) SHA1(421b164c8410629956177355e505859757c97a6b) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_END ROM_START( m4hapfrta ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD( "hf1_1p.bin", 0x0000, 0x010000, CRC(ebb6ee66) SHA1(1f9b67260e5becd013d95358cc89acb1099d655d) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_END ROM_START( m4hapfrtb ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD( "hf1_4pk.bin", 0x0000, 0x010000, CRC(0944b3c6) SHA1(00cdb75dda4f8984f77806047ad79fe9a1a8760a) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_END ROM_START( m4sunday ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD( "sunday_sport_v11", 0x0000, 0x010000, CRC(14147d59) SHA1(03b14f4f83a545b3252702267ac012b3be76013d) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_END ROM_START( m4jp777 ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD( "jpot71", 0x0000, 0x010000, CRC(f4564a05) SHA1(97d21e2268e5d99e6e51cb12c45e09445cff1f50) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_END ROM_START( m4booze ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD( "boozecruise10_v10.bin", 0x0000, 0x010000, CRC(b37f752b) SHA1(166f7d17694689bd9d51d859c13ddafa1c6e5e7f) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_END @@ -662,7 +662,7 @@ ROM_REGION( 0x40000, "maincpu", 0 ) ROM_LOAD( "70000000.bin", 0x0000, 0x040000, CRC(56f64dd9) SHA1(11f990c9a6864a969dc9a4146e1ac2c963e3eb9b) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "alizsnd.hi", 0x0000, 0x080000, CRC(c7bd937a) SHA1(cc4d85a3d4cdf57fa96c812a4cd78b599c7052ff) ) ROM_LOAD( "alizsnd.lo", 0x080000, 0x04e15e, CRC(111cc111) SHA1(413efedbc9e85240df833c10d680b0e907da10b3) ) @@ -675,14 +675,14 @@ ROM_START( m4c2 ) ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "ci2-0601.bin", 0x0000, 0x010000, CRC(84cc8aca) SHA1(1471e3ad9c9ba957b6cc99c204fe588cc55fbc50) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_END ROM_START( m4coney ) ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "70000060.bin", 0x0000, 0x010000, CRC(fda208e4) SHA1(b1a243b2681faa03add4ab6e4df98814f9c52fc5) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_END diff -Nru mame-0.250+dfsg.1/src/mame/barcrest/mpu4vid.cpp mame-0.251+dfsg.1/src/mame/barcrest/mpu4vid.cpp --- mame-0.250+dfsg.1/src/mame/barcrest/mpu4vid.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/barcrest/mpu4vid.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1953,9 +1953,9 @@ map(0xc00000, 0xc1ffff).rw(FUNC(mpu4vid_state::mpu4_vid_vidram_r), FUNC(mpu4vid_state::mpu4_vid_vidram_w)).share("vid_vidram"); map(0xff8000, 0xff8003).rw(m_acia_1, FUNC(acia6850_device::read), FUNC(acia6850_device::write)).umask16(0x00ff); map(0xff9000, 0xff900f).rw(m_ptm, FUNC(ptm6840_device::read), FUNC(ptm6840_device::write)).umask16(0x00ff); - map(0xffa040, 0xffa04f).r("ptm_ic3ss", FUNC(ptm6840_device::read)).umask16(0x00ff); // 6840PTM on sampled sound board - map(0xffa040, 0xffa04f).w(FUNC(mpu4vid_state::ic3ss_vid_w)).umask16(0x00ff); // 6840PTM on sampled sound board - map(0xffa060, 0xffa067).rw("pia_ic4ss", FUNC(pia6821_device::read), FUNC(pia6821_device::write)).umask16(0x00ff); // PIA6821 on sampled sound board + + map(0xffa040, 0xffa04f).rw("okicard", FUNC(mpu4_oki_sampled_sound::ic3_read), FUNC(mpu4_oki_sampled_sound::ic3_write)).umask16(0x00ff); // 6840PTM on sampled sound board + map(0xffa060, 0xffa067).rw("okicard", FUNC(mpu4_oki_sampled_sound::ic4_read), FUNC(mpu4_oki_sampled_sound::ic4_write)).umask16(0x00ff); // 6821PIA on sampled sound board map(0xffd000, 0xffd00f).rw(FUNC(mpu4vid_state::vidcharacteriser_r), FUNC(mpu4vid_state::vidcharacteriser_w)).umask16(0x00ff); // map(0xfff000, 0xffffff).noprw(); /* Possible bug, reads and writes here */ } @@ -1986,9 +1986,11 @@ map(0xc00000, 0xc1ffff).rw(FUNC(mpu4vid_state::mpu4_vid_vidram_r), FUNC(mpu4vid_state::mpu4_vid_vidram_w)).share("vid_vidram"); map(0xe00000, 0xe00003).rw(m_acia_1, FUNC(acia6850_device::read), FUNC(acia6850_device::write)).umask16(0x00ff); map(0xe01000, 0xe0100f).rw(m_ptm, FUNC(ptm6840_device::read), FUNC(ptm6840_device::write)).umask16(0x00ff); - map(0xe02000, 0xe02007).rw("pia_ic4ss", FUNC(pia6821_device::read), FUNC(pia6821_device::write)).umask16(0xff00); - map(0xe03000, 0xe0300f).r("ptm_ic3ss", FUNC(ptm6840_device::read)).umask16(0xff00); // 6840PTM on sampled sound board - map(0xe03000, 0xe0300f).w(FUNC(mpu4vid_state::ic3ss_vid_w)).umask16(0xff00); // 6840PTM on sampled sound board + + + map(0xe02000, 0xe02007).rw("okicard", FUNC(mpu4_oki_sampled_sound::ic4_read), FUNC(mpu4_oki_sampled_sound::ic4_write)).umask16(0xff00); // 6821PIA on sampled sound board + map(0xe03000, 0xe0300f).rw("okicard", FUNC(mpu4_oki_sampled_sound::ic3_read), FUNC(mpu4_oki_sampled_sound::ic3_write)).umask16(0xff00); // 6840PTM on sampled sound board + map(0xe05000, 0xe05001).noprw(); } @@ -2073,52 +2075,6 @@ map(0x4000, 0xbfff).ram(); } -//Sampled sound timer -/* -Unlike the standard setup, in MPU4 Video, the E clock is used for computation, so the chip frequency -freq = (1000000/((t3L+1)(t3H+1)))*[(t3H(T3L+1)+1)/(2(t1+1))] -where [] means rounded up integer, -t3L is the LSB of Clock 3, -t3H is the MSB of Clock 3, -and t1 is the initial value in clock 1. -*/ - -//O3 -> G1 O1 -> c2 o2 -> c1 - -/* This is a bit of a cheat - since we don't clock into the OKI chip directly, we need to -calculate the oscillation frequency in advance. We're running the timer for interrupt -purposes, but the frequency calculation is done by plucking the values out as they are written.*/ -void mpu4vid_state::ic3ss_vid_w(offs_t offset, uint8_t data) -{ - m_ptm_ic3ss->write(offset,data); - - if (offset == 3) - { - m_t1 = data; - } - if (offset == 6) - { - m_t3h = data; - } - if (offset == 7) - { - m_t3l = data; - } - - // E clock = VIDEO_MASTER_CLOCK / 10 - - float num = (1000000/((m_t3l + 1)*(m_t3h + 1))); - float denom1 = ((m_t3h *(m_t3l + 1)+ 1)/(2*(m_t1 + 1))); - - int denom2 = denom1 + 0.5f;//need to round up, this gives same precision as chip - int freq=num*denom2; - if (freq) - { - m_msm6376->set_unscaled_clock(freq); - } -} - - void mpu4vid_state::mpu4_vid(machine_config &config) { MC6809(config, m_maincpu, MPU4_MASTER_CLOCK); @@ -2166,9 +2122,10 @@ m_ptm->o3_callback().set(FUNC(mpu4vid_state::vid_o3_callback)); m_ptm->irq_callback().set(FUNC(mpu4vid_state::cpu1_ptm_irq)); - /* Present on all video cards */ SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); + + /* Present on all video cards */ saa1099_device &saa(SAA1099(config, "saa", 8000000)); saa.add_route(0, "lspeaker", 0.5); saa.add_route(1, "rspeaker", 0.5); @@ -2226,22 +2183,13 @@ { //On MPU4 Video, the sound board is clocked via the 68k E clock, //and all samples are adjusted to fit the different clock speed. - PTM6840(config, m_ptm_ic3ss, VIDEO_MASTER_CLOCK / 10); - m_ptm_ic3ss->set_external_clocks(0, 0, 0); - m_ptm_ic3ss->o1_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_c2)); - m_ptm_ic3ss->o2_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_c1)); - m_ptm_ic3ss->o3_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_g1)); - - PIA6821(config, m_pia_ic4ss, 0); - m_pia_ic4ss->readpb_handler().set(FUNC(mpu4vid_state::pia_gb_portb_r)); - m_pia_ic4ss->writepa_handler().set(FUNC(mpu4vid_state::pia_gb_porta_w)); - m_pia_ic4ss->writepb_handler().set(FUNC(mpu4vid_state::pia_gb_portb_w)); - m_pia_ic4ss->ca2_handler().set(FUNC(mpu4vid_state::pia_gb_ca2_w)); - m_pia_ic4ss->cb2_handler().set(FUNC(mpu4vid_state::pia_gb_cb2_w)); - - okim6376_device &msm6376(OKIM6376(config, "msm6376", 128000)); //Adjusted by IC3 on sound board - msm6376.add_route(0, "lspeaker", 0.5); - msm6376.add_route(1, "rspeaker", 0.5); + + MPU4_OKI_SAMPLED_SOUND(config, m_okicard, VIDEO_MASTER_CLOCK/10); + m_okicard->add_route(ALL_OUTPUTS, "lspeaker", 1.0); + m_okicard->add_route(ALL_OUTPUTS, "rspeaker", 1.0); + + m_okicard->cb2_handler().set(FUNC(mpu4vid_state::pia_gb_cb2_w)); + } void mpu4vid_state::mating(machine_config &config) @@ -2488,7 +2436,7 @@ logerror("option byte is %02x\n", option); logerror("bit 0: Datapak = %d\n", (option >> 0) & 1); - logerror("bit 1: Fixed % = %d\n", (option >> 1) & 1); + logerror("bit 1: Fixed %% = %d\n", (option >> 1) & 1); logerror("bit 2: Arcade = %d\n", (option >> 2) & 1); logerror("bit 3: Switchable = %d\n", (option >> 3) & 1); logerror("bit 4: Irish = %d\n", (option >> 4) & 1); @@ -2700,7 +2648,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2713,7 +2661,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2726,7 +2674,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2739,7 +2687,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2752,7 +2700,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2765,7 +2713,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2779,7 +2727,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2792,7 +2740,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2805,7 +2753,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2818,7 +2766,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2831,7 +2779,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2844,7 +2792,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2857,7 +2805,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2870,7 +2818,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2883,7 +2831,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2896,7 +2844,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2910,7 +2858,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2923,7 +2871,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2936,7 +2884,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2949,7 +2897,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2962,7 +2910,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2975,7 +2923,7 @@ ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) ) ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -2990,7 +2938,7 @@ ROM_LOAD16_BYTE( "rr______.8_1", 0x000001, 0x080000, CRC(eca43ed4) SHA1(e2e4e5d3d4b659ddd74c120316b9658708e188f1) ) ROM_LOAD16_BYTE( "rr______.8_2", 0x000000, 0x080000, CRC(c3f25586) SHA1(7335708a7d90c7fbd0088bb6ee5ce0255b9b18ab) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -3003,7 +2951,7 @@ ROM_LOAD16_BYTE( "rr8p1", 0x000001, 0x080000, CRC(68992dd3) SHA1(75ab1cd02ac627b6191e9b61ee7c072029becaeb) ) ROM_LOAD16_BYTE( "rr8p2", 0x000000, 0x080000, CRC(b859020e) SHA1(811ccac82d022ceccc83f1bf6c6b4de6cc313e14) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -3016,7 +2964,7 @@ ROM_LOAD16_BYTE( "reno reels 5-1", 0x000000, 0x080000, CRC(9ebd0eaf) SHA1(3d326509240fe8a83df9d2369f184838bee2b407) ) ROM_LOAD16_BYTE( "reno reels 5-2", 0x000001, 0x080000, CRC(1cbcd9b5) SHA1(989d64e10c67dab7d20229e5c63d24111d556138) ) - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) ) ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) ) ROM_END @@ -3034,7 +2982,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3050,7 +2998,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3066,7 +3014,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3082,7 +3030,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3098,7 +3046,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3114,7 +3062,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3130,7 +3078,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3146,7 +3094,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3162,7 +3110,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3178,7 +3126,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3194,7 +3142,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3210,7 +3158,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3226,7 +3174,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3242,7 +3190,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3258,7 +3206,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3274,7 +3222,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3290,7 +3238,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3306,7 +3254,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3322,7 +3270,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3338,7 +3286,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3354,7 +3302,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3370,7 +3318,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3386,7 +3334,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3402,7 +3350,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3418,7 +3366,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3434,7 +3382,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3450,7 +3398,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3466,7 +3414,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3482,7 +3430,7 @@ ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd)) ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef)) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3494,7 +3442,7 @@ ROM_REGION( 0x800000, "video", 0 ) // none of the ROMs are have are commpatible with this? ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3511,7 +3459,7 @@ ROM_LOAD16_BYTE( "redhotpokervideoboardp5.bin", 0x040000, 0x010000, CRC(d36189b7) SHA1(7757ce9879754d4b8a450ba1f6067c17c151c13c) ) ROM_LOAD16_BYTE( "redhotpokervideoboardp6.bin", 0x040001, 0x010000, CRC(c89d164d) SHA1(0cf33db0f85958251624dd7bc2c3024814489040) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3528,7 +3476,7 @@ ROM_LOAD16_BYTE( "rp_05___.2_5", 0x040000, 0x010000, CRC(cc79187b) SHA1(b2e556fd7a1667203dcb196b1dc2d89bff785675) ) ROM_LOAD16_BYTE( "rp_05___.2_6", 0x040001, 0x010000, CRC(57d1cf7b) SHA1(c8d6f4d0e8a5a383c47300e8d56e13d62295f60f) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3544,7 +3492,7 @@ ROM_LOAD16_BYTE( "rp_05___.2_5", 0x040000, 0x010000, CRC(cc79187b) SHA1(b2e556fd7a1667203dcb196b1dc2d89bff785675) ) ROM_LOAD16_BYTE( "rp_05___.2_6", 0x040001, 0x010000, CRC(57d1cf7b) SHA1(c8d6f4d0e8a5a383c47300e8d56e13d62295f60f) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3560,7 +3508,7 @@ ROM_LOAD16_BYTE( "rp_05___.2_5", 0x040000, 0x010000, CRC(cc79187b) SHA1(b2e556fd7a1667203dcb196b1dc2d89bff785675) ) ROM_LOAD16_BYTE( "rp_05___.2_6", 0x040001, 0x010000, CRC(57d1cf7b) SHA1(c8d6f4d0e8a5a383c47300e8d56e13d62295f60f) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3576,7 +3524,7 @@ ROM_LOAD16_BYTE( "rp_05___.2_5", 0x040000, 0x010000, CRC(cc79187b) SHA1(b2e556fd7a1667203dcb196b1dc2d89bff785675) ) ROM_LOAD16_BYTE( "rp_05___.2_6", 0x040001, 0x010000, CRC(57d1cf7b) SHA1(c8d6f4d0e8a5a383c47300e8d56e13d62295f60f) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3592,7 +3540,7 @@ ROM_LOAD16_BYTE( "rp_05___.2_5", 0x040000, 0x010000, CRC(cc79187b) SHA1(b2e556fd7a1667203dcb196b1dc2d89bff785675) ) ROM_LOAD16_BYTE( "rp_05___.2_6", 0x040001, 0x010000, CRC(57d1cf7b) SHA1(c8d6f4d0e8a5a383c47300e8d56e13d62295f60f) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3608,7 +3556,7 @@ ROM_LOAD16_BYTE( "rp_05___.2_5", 0x040000, 0x010000, CRC(cc79187b) SHA1(b2e556fd7a1667203dcb196b1dc2d89bff785675) ) ROM_LOAD16_BYTE( "rp_05___.2_6", 0x040001, 0x010000, CRC(57d1cf7b) SHA1(c8d6f4d0e8a5a383c47300e8d56e13d62295f60f) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3624,7 +3572,7 @@ ROM_LOAD16_BYTE( "rp_05___.2_5", 0x040000, 0x010000, CRC(cc79187b) SHA1(b2e556fd7a1667203dcb196b1dc2d89bff785675) ) ROM_LOAD16_BYTE( "rp_05___.2_6", 0x040001, 0x010000, CRC(57d1cf7b) SHA1(c8d6f4d0e8a5a383c47300e8d56e13d62295f60f) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3640,7 +3588,7 @@ ROM_LOAD16_BYTE( "rp_05___.2_5", 0x040000, 0x010000, CRC(cc79187b) SHA1(b2e556fd7a1667203dcb196b1dc2d89bff785675) ) ROM_LOAD16_BYTE( "rp_05___.2_6", 0x040001, 0x010000, CRC(57d1cf7b) SHA1(c8d6f4d0e8a5a383c47300e8d56e13d62295f60f) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -3660,7 +3608,7 @@ ROM_LOAD16_BYTE( "rhp1.6p5", 0x040000, 0x010000, CRC(750436a1) SHA1(006a31fc5c22969bd79dbc54e618348ad7832ac7) ) ROM_LOAD16_BYTE( "rhp1.6p6", 0x040001, 0x010000, CRC(d78839c2) SHA1(e82b769cba4b8d50dcf5c301c03d4ca66e893f70) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) // none present ROM_END @@ -4209,7 +4157,7 @@ ROM_LOAD16_BYTE( "matq.p10", 0x400001, 0x040000, CRC(90364c3c) SHA1(6a4d2a3dd2cf9040887503888e6f38341578ad64) ) /* Mating Game has an extra OKI sound chip */ - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "matsnd.p1", 0x000000, 0x080000, CRC(f16df9e3) SHA1(fd9b82d73e18e635a9ea4aabd8c0b4aa2c8c6fdb) ) ROM_LOAD( "matsnd.p2", 0x080000, 0x080000, CRC(0c041621) SHA1(9156bf17ef6652968d9fbdc0b2bde64d3a67459c) ) ROM_LOAD( "matsnd.p3", 0x100000, 0x080000, CRC(c7435af9) SHA1(bd6080afaaaecca0d65e6d4125b46849aa4d1f33) ) @@ -4233,7 +4181,7 @@ ROM_LOAD16_BYTE( "matq.p10", 0x400001, 0x040000, CRC(90364c3c) SHA1(6a4d2a3dd2cf9040887503888e6f38341578ad64) ) /* Mating Game has an extra OKI sound chip */ - ROM_REGION( 0x200000, "msm6376", 0 ) + ROM_REGION( 0x200000, "okicard:msm6376", 0 ) ROM_LOAD( "matsnd.p1", 0x000000, 0x080000, CRC(f16df9e3) SHA1(fd9b82d73e18e635a9ea4aabd8c0b4aa2c8c6fdb) ) ROM_LOAD( "matsnd.p2", 0x080000, 0x080000, CRC(0c041621) SHA1(9156bf17ef6652968d9fbdc0b2bde64d3a67459c) ) ROM_LOAD( "matsnd.p3", 0x100000, 0x080000, CRC(c7435af9) SHA1(bd6080afaaaecca0d65e6d4125b46849aa4d1f33) ) @@ -5190,7 +5138,7 @@ ROM_LOAD16_BYTE( "ccd_____.6_7", 0x300001, 0x080000, CRC(4cd1461c) SHA1(00379212130d5e9c1c364191f67a35cc5eca8b72) ) ROM_LOAD16_BYTE( "ccd_____.6_8", 0x300000, 0x080000, CRC(08ce378f) SHA1(035b0ff4d18c09a385002db73c54b8dac92dfa8a) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5204,7 +5152,7 @@ ROM_LOAD16_BYTE( "md43.p3", 0x100001, 0x080000, CRC(9bceb3f6) SHA1(5be84d5f1635f80a9fe8072c2d94012ed00d97be) ) ROM_LOAD16_BYTE( "md44.p4", 0x100000, 0x080000, CRC(54b8fbfa) SHA1(ca2fb67972507a2eb33d2800a3b2d45d3ee49289) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "md41snd.p1", 0x000000, 0x080000, CRC(7a3ba770) SHA1(e620f521d16b39be9b41b934435812afff3993b2) ) ROM_LOAD( "md42snd.p2", 0x080000, 0x080000, CRC(8ebc7329) SHA1(82ce25c1486a8619355f363125a26d8cdeb05d33) ) ROM_LOAD( "md43snd.p3", 0x100000, 0x080000, CRC(14f4d838) SHA1(0508890a9884fbef0e194a38fe3afc5cf5282091) ) @@ -5223,7 +5171,7 @@ ROM_LOAD16_BYTE( "mld_____.6_5", 0x200000, 0x080000, CRC(cd6c39d2) SHA1(c4d4b5c7a1f3dcfdc464fff29f10ccee932f265a) ) ROM_LOAD16_BYTE( "mld_____.6_6", 0x200001, 0x080000, CRC(5ad997a3) SHA1(0fd75b4a9b5991fda9cc3373b86f466492c3b4bb) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mld_snd_.1_1", 0x000000, 0x080000, CRC(8c26fe12) SHA1(0532126d8e283b4567a4cdf2bb807f5471c84832) ) ROM_LOAD( "mld_snd_.1_2", 0x080000, 0x080000, CRC(9ab841b6) SHA1(7828c6144777621859b85a3ec92760d353576527) ) ROM_LOAD( "mld_snd_.1_3", 0x100000, 0x080000, CRC(3f068632) SHA1(5e43da287b3aa163493c1be03ebee28ef58c44a1) ) @@ -5242,7 +5190,7 @@ ROM_LOAD16_BYTE( "pcd_____.a_5", 0x200001, 0x080000, CRC(275f3c1c) SHA1(1d0f8f7d0388d5072ae404f10b2481153979a217) ) ROM_LOAD16_BYTE( "pcd_____.a_6", 0x200000, 0x080000, CRC(148ecba0) SHA1(2ae0f5529fa3951025539fe19f4e8fdf10f13374) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5258,7 +5206,7 @@ ROM_LOAD16_BYTE( "pcd_____.a_5", 0x200001, 0x080000, CRC(275f3c1c) SHA1(1d0f8f7d0388d5072ae404f10b2481153979a217) ) ROM_LOAD16_BYTE( "pcd_____.a_6", 0x200000, 0x080000, CRC(148ecba0) SHA1(2ae0f5529fa3951025539fe19f4e8fdf10f13374) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5275,7 +5223,7 @@ ROM_LOAD16_BYTE( "pcd_____.a_5", 0x200001, 0x080000, CRC(275f3c1c) SHA1(1d0f8f7d0388d5072ae404f10b2481153979a217) ) ROM_LOAD16_BYTE( "pcd_____.a_6", 0x200000, 0x080000, CRC(148ecba0) SHA1(2ae0f5529fa3951025539fe19f4e8fdf10f13374) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "pcdsnd_v1_p1.bin", 0x000000, 0x080000, CRC(01c0bec3) SHA1(a755f939d02500f0a03e399bbf7f842173bf5a71) ) ROM_LOAD( "pcdsnd_v1_p2.bin", 0x080000, 0x080000, CRC(a9f66e67) SHA1(eba1ff2023356face1d9a6be93417b54a132fe6f) ) ROM_LOAD( "pcdsnd_v1_p3.bin", 0x100000, 0x080000, BAD_DUMP CRC(d15ea1bd) SHA1(f47e4d901a89ccf83784e582414f3dce08fc4e18) ) // mostly empty, corrupt? @@ -5291,7 +5239,7 @@ ROM_LOAD16_BYTE( "b4______.3_1", 0x000001, 0x080000, CRC(c388e5a9) SHA1(baafe2da91891f288debd89907d36438494e876a) ) ROM_LOAD16_BYTE( "b4______.3_2", 0x000000, 0x080000, CRC(cc3ab5c3) SHA1(a3778b462a823fd73c1a3463c53ef0537e8d5ed4) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "b4__snd_.1_a", 0x0000, 0x080000, CRC(2d630b87) SHA1(e4be02a1356735c47934f8f30e1e2462bf28968c) ) ROM_END @@ -5303,7 +5251,7 @@ ROM_LOAD16_BYTE( "b4______.4_1", 0x000001, 0x080000, CRC(fc33c0fc) SHA1(838a7ef4252f9f736639858fe97a4982a89be09f) ) ROM_LOAD16_BYTE( "b4______.4_2", 0x000000, 0x080000, CRC(f2211865) SHA1(5bcb95a079f57305d3e58fae3899bceec211f44a) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "b4__snd_.1_a", 0x0000, 0x080000, CRC(2d630b87) SHA1(e4be02a1356735c47934f8f30e1e2462bf28968c) ) ROM_END @@ -5315,7 +5263,7 @@ ROM_LOAD16_BYTE( "b4______.6_1", 0x000001, 0x080000, CRC(75532ad3) SHA1(0584261faede35f6e846ee398081fac66aea8368) ) ROM_LOAD16_BYTE( "b4______.6_2", 0x000000, 0x080000, CRC(03ef74c5) SHA1(fa5d27b0e94c8d05f1c50b28b96f7a4ae3ecda4a) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "b4__snd_.1_a", 0x0000, 0x080000, CRC(2d630b87) SHA1(e4be02a1356735c47934f8f30e1e2462bf28968c) ) ROM_END @@ -5327,7 +5275,7 @@ ROM_LOAD16_BYTE( "b4______.6_1", 0x000001, 0x080000, CRC(75532ad3) SHA1(0584261faede35f6e846ee398081fac66aea8368) ) ROM_LOAD16_BYTE( "b4______.6_2", 0x000000, 0x080000, CRC(03ef74c5) SHA1(fa5d27b0e94c8d05f1c50b28b96f7a4ae3ecda4a) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "b4__snd_.1_a", 0x0000, 0x080000, CRC(2d630b87) SHA1(e4be02a1356735c47934f8f30e1e2462bf28968c) ) ROM_END @@ -5339,7 +5287,7 @@ ROM_LOAD16_BYTE( "b4______.6_1", 0x000001, 0x080000, CRC(75532ad3) SHA1(0584261faede35f6e846ee398081fac66aea8368) ) ROM_LOAD16_BYTE( "b4______.6_2", 0x000000, 0x080000, CRC(03ef74c5) SHA1(fa5d27b0e94c8d05f1c50b28b96f7a4ae3ecda4a) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "b4__snd_.1_a", 0x0000, 0x080000, CRC(2d630b87) SHA1(e4be02a1356735c47934f8f30e1e2462bf28968c) ) ROM_END @@ -5351,7 +5299,7 @@ ROM_LOAD16_BYTE( "b4______.6_1", 0x000001, 0x080000, CRC(75532ad3) SHA1(0584261faede35f6e846ee398081fac66aea8368) ) ROM_LOAD16_BYTE( "b4______.6_2", 0x000000, 0x080000, CRC(03ef74c5) SHA1(fa5d27b0e94c8d05f1c50b28b96f7a4ae3ecda4a) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "b4__snd_.1_a", 0x0000, 0x080000, CRC(2d630b87) SHA1(e4be02a1356735c47934f8f30e1e2462bf28968c) ) ROM_END @@ -5363,7 +5311,7 @@ ROM_LOAD16_BYTE( "b4______.6_1", 0x000001, 0x080000, CRC(75532ad3) SHA1(0584261faede35f6e846ee398081fac66aea8368) ) ROM_LOAD16_BYTE( "b4______.6_2", 0x000000, 0x080000, CRC(03ef74c5) SHA1(fa5d27b0e94c8d05f1c50b28b96f7a4ae3ecda4a) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "b4__snd_.1_a", 0x0000, 0x080000, CRC(2d630b87) SHA1(e4be02a1356735c47934f8f30e1e2462bf28968c) ) ROM_END @@ -5375,7 +5323,7 @@ ROM_LOAD16_BYTE( "b4______.6_1", 0x000001, 0x080000, CRC(75532ad3) SHA1(0584261faede35f6e846ee398081fac66aea8368) ) ROM_LOAD16_BYTE( "b4______.6_2", 0x000000, 0x080000, CRC(03ef74c5) SHA1(fa5d27b0e94c8d05f1c50b28b96f7a4ae3ecda4a) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "b4__snd_.1_a", 0x0000, 0x080000, CRC(2d630b87) SHA1(e4be02a1356735c47934f8f30e1e2462bf28968c) ) ROM_END @@ -5387,7 +5335,7 @@ ROM_LOAD16_BYTE( "b4______.6_1", 0x000001, 0x080000, CRC(75532ad3) SHA1(0584261faede35f6e846ee398081fac66aea8368) ) ROM_LOAD16_BYTE( "b4______.6_2", 0x000000, 0x080000, CRC(03ef74c5) SHA1(fa5d27b0e94c8d05f1c50b28b96f7a4ae3ecda4a) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "b4__snd_.1_a", 0x0000, 0x080000, CRC(2d630b87) SHA1(e4be02a1356735c47934f8f30e1e2462bf28968c) ) ROM_END @@ -5399,7 +5347,7 @@ ROM_LOAD16_BYTE( "b4______.6_1", 0x000001, 0x080000, CRC(75532ad3) SHA1(0584261faede35f6e846ee398081fac66aea8368) ) ROM_LOAD16_BYTE( "b4______.6_2", 0x000000, 0x080000, CRC(03ef74c5) SHA1(fa5d27b0e94c8d05f1c50b28b96f7a4ae3ecda4a) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "b4__snd_.1_a", 0x0000, 0x080000, CRC(2d630b87) SHA1(e4be02a1356735c47934f8f30e1e2462bf28968c) ) ROM_END @@ -5411,7 +5359,7 @@ ROM_LOAD16_BYTE( "b4______.6_1", 0x000001, 0x080000, CRC(75532ad3) SHA1(0584261faede35f6e846ee398081fac66aea8368) ) ROM_LOAD16_BYTE( "b4______.6_2", 0x000000, 0x080000, CRC(03ef74c5) SHA1(fa5d27b0e94c8d05f1c50b28b96f7a4ae3ecda4a) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "b4__snd_.1_a", 0x0000, 0x080000, CRC(2d630b87) SHA1(e4be02a1356735c47934f8f30e1e2462bf28968c) ) ROM_END @@ -5423,7 +5371,7 @@ ROM_LOAD16_BYTE( "b4______.6_1", 0x000001, 0x080000, CRC(75532ad3) SHA1(0584261faede35f6e846ee398081fac66aea8368) ) ROM_LOAD16_BYTE( "b4______.6_2", 0x000000, 0x080000, CRC(03ef74c5) SHA1(fa5d27b0e94c8d05f1c50b28b96f7a4ae3ecda4a) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "b4__snd_.1_a", 0x0000, 0x080000, CRC(2d630b87) SHA1(e4be02a1356735c47934f8f30e1e2462bf28968c) ) ROM_END @@ -5440,7 +5388,7 @@ ROM_LOAD16_BYTE( "bv______.2_5", 0x040000, 0x010000, CRC(c5775387) SHA1(b301392ae39298284ae256c819877ae287861cc8) ) ROM_LOAD16_BYTE( "bv______.2_6", 0x040001, 0x010000, CRC(4443fddc) SHA1(fb4972620f9aa07f8bd62701f64b7902567d34db) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5456,7 +5404,7 @@ ROM_LOAD16_BYTE( "bv______.2_5", 0x040000, 0x010000, CRC(c5775387) SHA1(b301392ae39298284ae256c819877ae287861cc8) ) ROM_LOAD16_BYTE( "bv______.2_6", 0x040001, 0x010000, CRC(4443fddc) SHA1(fb4972620f9aa07f8bd62701f64b7902567d34db) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5472,7 +5420,7 @@ ROM_LOAD16_BYTE( "bv______.2_5", 0x040000, 0x010000, CRC(c5775387) SHA1(b301392ae39298284ae256c819877ae287861cc8) ) ROM_LOAD16_BYTE( "bv______.2_6", 0x040001, 0x010000, CRC(4443fddc) SHA1(fb4972620f9aa07f8bd62701f64b7902567d34db) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5488,7 +5436,7 @@ ROM_LOAD16_BYTE( "bv______.2_5", 0x040000, 0x010000, CRC(c5775387) SHA1(b301392ae39298284ae256c819877ae287861cc8) ) ROM_LOAD16_BYTE( "bv______.2_6", 0x040001, 0x010000, CRC(4443fddc) SHA1(fb4972620f9aa07f8bd62701f64b7902567d34db) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5509,7 +5457,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5529,7 +5477,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5549,7 +5497,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5570,7 +5518,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5590,7 +5538,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5610,7 +5558,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5630,7 +5578,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5650,7 +5598,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5670,7 +5618,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5690,7 +5638,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5710,7 +5658,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5730,7 +5678,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5750,7 +5698,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5770,7 +5718,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5790,7 +5738,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5810,7 +5758,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5830,7 +5778,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5850,7 +5798,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5870,7 +5818,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5893,7 +5841,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5914,7 +5862,7 @@ ROM_LOAD16_BYTE( "ci______.4_9", 0x080000, 0x010000, CRC(f1f9987f) SHA1(0a4b5fa61e237e1e209301a07af2ad1e9fedcc35) ) ROM_LOAD16_BYTE( "ci______.4_a", 0x080001, 0x010000, CRC(4747cb48) SHA1(ac33d318f6fff67c8a2f7d47c0ee0bcddfc2af8e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5925,7 +5873,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD( "release3_video_roms", 0x000000, 0x010000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5936,7 +5884,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD( "release3_video_roms", 0x000000, 0x010000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5951,7 +5899,7 @@ ROM_LOAD16_BYTE( "dt______.4_3", 0x100001, 0x080000, CRC(b715bff9) SHA1(be8ef30b50c235e78a03ea83eadd7541ad96f7a1) ) ROM_LOAD16_BYTE( "dt______.4_4", 0x100000, 0x080000, CRC(f41f2566) SHA1(e18e019bb04003e0fdce3a3051da0c618bdaef3d) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5965,7 +5913,7 @@ ROM_LOAD16_BYTE( "dt______.4_3", 0x100001, 0x080000, CRC(b715bff9) SHA1(be8ef30b50c235e78a03ea83eadd7541ad96f7a1) ) ROM_LOAD16_BYTE( "dt______.4_4", 0x100000, 0x080000, CRC(f41f2566) SHA1(e18e019bb04003e0fdce3a3051da0c618bdaef3d) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5979,7 +5927,7 @@ ROM_LOAD16_BYTE( "dt______.4_3", 0x100001, 0x080000, CRC(b715bff9) SHA1(be8ef30b50c235e78a03ea83eadd7541ad96f7a1) ) ROM_LOAD16_BYTE( "dt______.4_4", 0x100000, 0x080000, CRC(f41f2566) SHA1(e18e019bb04003e0fdce3a3051da0c618bdaef3d) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -5992,7 +5940,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6004,7 +5952,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6016,7 +5964,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6028,7 +5976,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6040,7 +5988,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6052,7 +6000,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6064,7 +6012,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6076,7 +6024,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6088,7 +6036,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6100,7 +6048,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6112,7 +6060,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6124,7 +6072,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6136,7 +6084,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6148,7 +6096,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6160,7 +6108,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6172,7 +6120,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6184,7 +6132,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6196,7 +6144,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6209,7 +6157,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6221,7 +6169,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6233,7 +6181,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6245,7 +6193,7 @@ ROM_LOAD16_BYTE( "go______.8_1", 0x000001, 0x080000, CRC(42700f68) SHA1(3050e790292c8afcc0e27e01dffa22c46d97bcc4) ) ROM_LOAD16_BYTE( "go______.8_2", 0x000000, 0x080000, CRC(a5d3c42e) SHA1(1398d5c8d1402a1dbf7910d00e6201f413dbd898) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6257,7 +6205,7 @@ ROM_LOAD16_BYTE( "go_3.1.bin", 0x000000, 0x080000, CRC(5edc8226) SHA1(c231978be89db23c1b1d38307510ef7e2a278492) ) ROM_LOAD16_BYTE( "go_3.2.bin", 0x000001, 0x080000, CRC(95c10e74) SHA1(73b230e2281d4e2a564f070c752479af2af32757) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -6272,7 +6220,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6287,7 +6235,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6302,7 +6250,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6317,7 +6265,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6332,7 +6280,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6347,7 +6295,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6365,7 +6313,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6380,7 +6328,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6395,7 +6343,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6410,7 +6358,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6425,7 +6373,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6440,7 +6388,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6455,7 +6403,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6470,7 +6418,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6485,7 +6433,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6500,7 +6448,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6515,7 +6463,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6530,7 +6478,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6545,7 +6493,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6560,7 +6508,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6575,7 +6523,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6590,7 +6538,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6605,7 +6553,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6620,7 +6568,7 @@ ROM_LOAD16_BYTE( "md______.8_3", 0x100001, 0x080000, CRC(cde34cd1) SHA1(7874fa070e52e6c34b770aee5bfec522eb3d72c9) ) ROM_LOAD16_BYTE( "md______.8_4", 0x100000, 0x080000, CRC(39bc1267) SHA1(853e047406fed3c12f55a2e032e8c3d8188da182) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6643,7 +6591,7 @@ ROM_LOAD16_BYTE( "mdv58p3", 0x100001, 0x080000, CRC(0d907e37) SHA1(b6ad78a4a7bc877d2152907df2317621f00bdc1c) ) ROM_LOAD16_BYTE( "mdv58p4", 0x100000, 0x080000, CRC(2e21c249) SHA1(d5192339313a8dd234cb164ca0094d9a7b64ccc2) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6658,7 +6606,7 @@ ROM_LOAD16_BYTE( "md_6_30", 0x100001, 0x080000, CRC(c1526309) SHA1(c6961813310a3873540c9174db3c7ce2347620d5) ) ROM_LOAD16_BYTE( "md_6_34", 0x100000, 0x080000, CRC(f6b8cc2f) SHA1(d1022b4a8ab3266dab5401127610c864e6e40a7f) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) ) ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) ) ROM_END @@ -6684,7 +6632,7 @@ ROM_LOAD16_BYTE( "mcop3vd", 0x100001, 0x080000, CRC(721e9ad1) SHA1(fb926debd57301c9c0c3ecb9bb1ac36b0b60ee40) ) ROM_LOAD16_BYTE( "mcop4vd", 0x100000, 0x080000, CRC(6eba1107) SHA1(c696b620781782c3b4045fe3550ab8e7e905661d) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6699,7 +6647,7 @@ ROM_LOAD16_BYTE( "mcop3vd", 0x100001, 0x080000, CRC(721e9ad1) SHA1(fb926debd57301c9c0c3ecb9bb1ac36b0b60ee40) ) ROM_LOAD16_BYTE( "mcop4vd", 0x100000, 0x080000, CRC(6eba1107) SHA1(c696b620781782c3b4045fe3550ab8e7e905661d) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6714,7 +6662,7 @@ ROM_LOAD16_BYTE( "mcop3vd", 0x100001, 0x080000, CRC(721e9ad1) SHA1(fb926debd57301c9c0c3ecb9bb1ac36b0b60ee40) ) ROM_LOAD16_BYTE( "mcop4vd", 0x100000, 0x080000, CRC(6eba1107) SHA1(c696b620781782c3b4045fe3550ab8e7e905661d) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6729,7 +6677,7 @@ ROM_LOAD16_BYTE( "mcop3vd", 0x100001, 0x080000, CRC(721e9ad1) SHA1(fb926debd57301c9c0c3ecb9bb1ac36b0b60ee40) ) ROM_LOAD16_BYTE( "mcop4vd", 0x100000, 0x080000, CRC(6eba1107) SHA1(c696b620781782c3b4045fe3550ab8e7e905661d) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6744,7 +6692,7 @@ ROM_LOAD16_BYTE( "mcop3vd", 0x100001, 0x080000, CRC(721e9ad1) SHA1(fb926debd57301c9c0c3ecb9bb1ac36b0b60ee40) ) ROM_LOAD16_BYTE( "mcop4vd", 0x100000, 0x080000, CRC(6eba1107) SHA1(c696b620781782c3b4045fe3550ab8e7e905661d) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6759,7 +6707,7 @@ ROM_LOAD16_BYTE( "mcop3vd", 0x100001, 0x080000, CRC(721e9ad1) SHA1(fb926debd57301c9c0c3ecb9bb1ac36b0b60ee40) ) ROM_LOAD16_BYTE( "mcop4vd", 0x100000, 0x080000, CRC(6eba1107) SHA1(c696b620781782c3b4045fe3550ab8e7e905661d) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6779,7 +6727,7 @@ ROM_LOAD16_BYTE( "mn_b3.releaseb.lo", 0x100001, 0x080000, CRC(b6de7ca1) SHA1(944e6c6ee20d187148c7cd4b20119422663780fd) ) ROM_LOAD16_BYTE( "mn_b4.releaseb.hi", 0x100000, 0x080000, CRC(5b6ff013) SHA1(ea08978ad469a521a6080fb6ab12033c31134a9d) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6794,7 +6742,7 @@ ROM_LOAD16_BYTE( "mn_b3.releaseb.lo", 0x100001, 0x080000, CRC(b6de7ca1) SHA1(944e6c6ee20d187148c7cd4b20119422663780fd) ) ROM_LOAD16_BYTE( "mn_b4.releaseb.hi", 0x100000, 0x080000, CRC(5b6ff013) SHA1(ea08978ad469a521a6080fb6ab12033c31134a9d) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6809,7 +6757,7 @@ ROM_LOAD16_BYTE( "mn_b3.releaseb.lo", 0x100001, 0x080000, CRC(b6de7ca1) SHA1(944e6c6ee20d187148c7cd4b20119422663780fd) ) ROM_LOAD16_BYTE( "mn_b4.releaseb.hi", 0x100000, 0x080000, CRC(5b6ff013) SHA1(ea08978ad469a521a6080fb6ab12033c31134a9d) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6824,7 +6772,7 @@ ROM_LOAD16_BYTE( "mn_b3.release5.lo", 0x100001, 0x080000, CRC(a38cfb78) SHA1(3af87c03890bf02dc5bf222fab4ec1326c98ef94) ) ROM_LOAD16_BYTE( "mn_b4.release5.hi", 0x100000, 0x080000, CRC(ae260cda) SHA1(7139f61c08d2c9f9fdc7314bd89776349c5c1b60) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6839,7 +6787,7 @@ ROM_LOAD16_BYTE( "mn_b3.release5.lo", 0x100001, 0x080000, CRC(a38cfb78) SHA1(3af87c03890bf02dc5bf222fab4ec1326c98ef94) ) ROM_LOAD16_BYTE( "mn_b4.release5.hi", 0x100000, 0x080000, CRC(ae260cda) SHA1(7139f61c08d2c9f9fdc7314bd89776349c5c1b60) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6855,7 +6803,7 @@ ROM_LOAD16_BYTE( "mn_b3.release5.lo", 0x100001, 0x080000, CRC(a38cfb78) SHA1(3af87c03890bf02dc5bf222fab4ec1326c98ef94) ) ROM_LOAD16_BYTE( "mn_b4.release5.hi", 0x100000, 0x080000, CRC(ae260cda) SHA1(7139f61c08d2c9f9fdc7314bd89776349c5c1b60) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6869,7 +6817,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6882,7 +6830,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6894,7 +6842,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6906,7 +6854,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6918,7 +6866,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6930,7 +6878,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6942,7 +6890,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6954,7 +6902,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6966,7 +6914,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6978,7 +6926,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -6990,7 +6938,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7002,7 +6950,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7014,7 +6962,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7026,7 +6974,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7038,7 +6986,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7050,7 +6998,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7062,7 +7010,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7074,7 +7022,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7086,7 +7034,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7098,7 +7046,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7110,7 +7058,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7122,7 +7070,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7134,7 +7082,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7146,7 +7094,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7158,7 +7106,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7170,7 +7118,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7182,7 +7130,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7194,7 +7142,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7206,7 +7154,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7218,7 +7166,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7230,7 +7178,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7247,7 +7195,7 @@ ROM_LOAD16_BYTE( "mcobo4p3", 0x100001, 0x080000, CRC(ebe851df) SHA1(61d37a7f91480592da6f5b6ee7ef4b6097ee5c65) ) ROM_LOAD16_BYTE( "mcobo4p4", 0x100000, 0x080000, CRC(49b0cfd7) SHA1(51fe74371bdac3c507a04aa9faeb522640d1cdf7) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7262,7 +7210,7 @@ ROM_LOAD16_BYTE( "mcobo4p3", 0x100001, 0x080000, CRC(ebe851df) SHA1(61d37a7f91480592da6f5b6ee7ef4b6097ee5c65) ) ROM_LOAD16_BYTE( "mcobo4p4", 0x100000, 0x080000, CRC(49b0cfd7) SHA1(51fe74371bdac3c507a04aa9faeb522640d1cdf7) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7278,7 +7226,7 @@ ROM_LOAD16_BYTE( "mcobo4p3", 0x100001, 0x080000, CRC(ebe851df) SHA1(61d37a7f91480592da6f5b6ee7ef4b6097ee5c65) ) ROM_LOAD16_BYTE( "mcobo4p4", 0x100000, 0x080000, CRC(49b0cfd7) SHA1(51fe74371bdac3c507a04aa9faeb522640d1cdf7) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7293,7 +7241,7 @@ ROM_LOAD16_BYTE( "mcobo4p3", 0x100001, 0x080000, CRC(ebe851df) SHA1(61d37a7f91480592da6f5b6ee7ef4b6097ee5c65) ) ROM_LOAD16_BYTE( "mcobo4p4", 0x100000, 0x080000, CRC(49b0cfd7) SHA1(51fe74371bdac3c507a04aa9faeb522640d1cdf7) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7308,7 +7256,7 @@ ROM_LOAD16_BYTE( "mcobo4p3", 0x100001, 0x080000, CRC(ebe851df) SHA1(61d37a7f91480592da6f5b6ee7ef4b6097ee5c65) ) ROM_LOAD16_BYTE( "mcobo4p4", 0x100000, 0x080000, CRC(49b0cfd7) SHA1(51fe74371bdac3c507a04aa9faeb522640d1cdf7) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7323,7 +7271,7 @@ ROM_LOAD16_BYTE( "mcobo4p3", 0x100001, 0x080000, CRC(ebe851df) SHA1(61d37a7f91480592da6f5b6ee7ef4b6097ee5c65) ) ROM_LOAD16_BYTE( "mcobo4p4", 0x100000, 0x080000, CRC(49b0cfd7) SHA1(51fe74371bdac3c507a04aa9faeb522640d1cdf7) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7338,7 +7286,7 @@ ROM_LOAD16_BYTE( "mcobo4p3", 0x100001, 0x080000, CRC(ebe851df) SHA1(61d37a7f91480592da6f5b6ee7ef4b6097ee5c65) ) ROM_LOAD16_BYTE( "mcobo4p4", 0x100000, 0x080000, CRC(49b0cfd7) SHA1(51fe74371bdac3c507a04aa9faeb522640d1cdf7) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7353,7 +7301,7 @@ ROM_LOAD16_BYTE( "mcobo4p3", 0x100001, 0x080000, CRC(ebe851df) SHA1(61d37a7f91480592da6f5b6ee7ef4b6097ee5c65) ) ROM_LOAD16_BYTE( "mcobo4p4", 0x100000, 0x080000, CRC(49b0cfd7) SHA1(51fe74371bdac3c507a04aa9faeb522640d1cdf7) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7368,7 +7316,7 @@ ROM_LOAD16_BYTE( "mcobo4p3", 0x100001, 0x080000, CRC(ebe851df) SHA1(61d37a7f91480592da6f5b6ee7ef4b6097ee5c65) ) ROM_LOAD16_BYTE( "mcobo4p4", 0x100000, 0x080000, CRC(49b0cfd7) SHA1(51fe74371bdac3c507a04aa9faeb522640d1cdf7) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7383,7 +7331,7 @@ ROM_LOAD16_BYTE( "mcobo4p3", 0x100001, 0x080000, CRC(ebe851df) SHA1(61d37a7f91480592da6f5b6ee7ef4b6097ee5c65) ) ROM_LOAD16_BYTE( "mcobo4p4", 0x100000, 0x080000, CRC(49b0cfd7) SHA1(51fe74371bdac3c507a04aa9faeb522640d1cdf7) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7398,7 +7346,7 @@ ROM_LOAD16_BYTE( "mcobo4p3", 0x100001, 0x080000, CRC(ebe851df) SHA1(61d37a7f91480592da6f5b6ee7ef4b6097ee5c65) ) ROM_LOAD16_BYTE( "mcobo4p4", 0x100000, 0x080000, CRC(49b0cfd7) SHA1(51fe74371bdac3c507a04aa9faeb522640d1cdf7) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7413,7 +7361,7 @@ ROM_LOAD16_BYTE( "mcobo4p3", 0x100001, 0x080000, CRC(ebe851df) SHA1(61d37a7f91480592da6f5b6ee7ef4b6097ee5c65) ) ROM_LOAD16_BYTE( "mcobo4p4", 0x100000, 0x080000, CRC(49b0cfd7) SHA1(51fe74371bdac3c507a04aa9faeb522640d1cdf7) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7428,7 +7376,7 @@ ROM_LOAD16_BYTE( "mcobo4p3", 0x100001, 0x080000, CRC(ebe851df) SHA1(61d37a7f91480592da6f5b6ee7ef4b6097ee5c65) ) ROM_LOAD16_BYTE( "mcobo4p4", 0x100000, 0x080000, CRC(49b0cfd7) SHA1(51fe74371bdac3c507a04aa9faeb522640d1cdf7) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7443,7 +7391,7 @@ ROM_LOAD16_BYTE( "mcobo4p3", 0x100001, 0x080000, CRC(ebe851df) SHA1(61d37a7f91480592da6f5b6ee7ef4b6097ee5c65) ) ROM_LOAD16_BYTE( "mcobo4p4", 0x100000, 0x080000, CRC(49b0cfd7) SHA1(51fe74371bdac3c507a04aa9faeb522640d1cdf7) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7458,7 +7406,7 @@ ROM_LOAD16_BYTE( "mcobo4p3", 0x100001, 0x080000, CRC(ebe851df) SHA1(61d37a7f91480592da6f5b6ee7ef4b6097ee5c65) ) ROM_LOAD16_BYTE( "mcobo4p4", 0x100000, 0x080000, CRC(49b0cfd7) SHA1(51fe74371bdac3c507a04aa9faeb522640d1cdf7) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7473,7 +7421,7 @@ ROM_LOAD16_BYTE( "mcobo4p3", 0x100001, 0x080000, CRC(ebe851df) SHA1(61d37a7f91480592da6f5b6ee7ef4b6097ee5c65) ) ROM_LOAD16_BYTE( "mcobo4p4", 0x100000, 0x080000, CRC(49b0cfd7) SHA1(51fe74371bdac3c507a04aa9faeb522640d1cdf7) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7487,7 +7435,7 @@ // this seems to be a loose video ROM from an otherwise undumped set? investigate, might belong to something else entirely. ROM_LOAD( "mn______.f_1", 0x0000, 0x080000, CRC(1a81b3fb) SHA1(bbf0fe7e48404962a2f2120734efe71dc1eed64c) ) // unmatched rom? (significant changes) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mcosnda.bin", 0x000000, 0x080000, CRC(801ea236) SHA1(531841d6a4d67f502e93f8d74f3b247ccc46208f) ) ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) ) ROM_END @@ -7502,7 +7450,7 @@ ROM_LOAD16_BYTE( "mnd-a4_vid.bin", 0x100000, 0x080000, CRC(5fa9d451) SHA1(539438d237b869e97176d031f0014f3e33374eed) ) ROM_LOAD16_BYTE( "mnd-a3_vid.bin", 0x100001, 0x080000, CRC(5e3a95a4) SHA1(305a7f8b1c5072d86d6f381501886587a2e186ea) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "mnd-1a-snd.bin", 0x000000, 0x080000, CRC(98bcf6fb) SHA1(b2c0d305f64be10f5ff40518ebb1b66c44559578) ) ROM_LOAD( "mnd-1b-snd.bin", 0x080000, 0x080000, CRC(df2118b4) SHA1(6126baff9dfef7c573e3f77847ea58bdc242fdc2) ) ROM_END @@ -7524,7 +7472,7 @@ ROM_LOAD16_BYTE( "o3______.4_9", 0x080000, 0x010000, CRC(6201a444) SHA1(a4a419fd94c571a85259f0f0092e1c99ef6b5797) ) ROM_LOAD16_BYTE( "o3______.4_a", 0x080001, 0x010000, CRC(5b526937) SHA1(dd9de97ee48a157a26e8e70211819aed0a87921c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7544,7 +7492,7 @@ ROM_LOAD16_BYTE( "o3______.4_9", 0x080000, 0x010000, CRC(6201a444) SHA1(a4a419fd94c571a85259f0f0092e1c99ef6b5797) ) ROM_LOAD16_BYTE( "o3______.4_a", 0x080001, 0x010000, CRC(5b526937) SHA1(dd9de97ee48a157a26e8e70211819aed0a87921c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7564,7 +7512,7 @@ ROM_LOAD16_BYTE( "o3______.4_9", 0x080000, 0x010000, CRC(6201a444) SHA1(a4a419fd94c571a85259f0f0092e1c99ef6b5797) ) ROM_LOAD16_BYTE( "o3______.4_a", 0x080001, 0x010000, CRC(5b526937) SHA1(dd9de97ee48a157a26e8e70211819aed0a87921c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7584,7 +7532,7 @@ ROM_LOAD16_BYTE( "o3______.4_9", 0x080000, 0x010000, CRC(6201a444) SHA1(a4a419fd94c571a85259f0f0092e1c99ef6b5797) ) ROM_LOAD16_BYTE( "o3______.4_a", 0x080001, 0x010000, CRC(5b526937) SHA1(dd9de97ee48a157a26e8e70211819aed0a87921c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7604,7 +7552,7 @@ ROM_LOAD16_BYTE( "o3______.4_9", 0x080000, 0x010000, CRC(6201a444) SHA1(a4a419fd94c571a85259f0f0092e1c99ef6b5797) ) ROM_LOAD16_BYTE( "o3______.4_a", 0x080001, 0x010000, CRC(5b526937) SHA1(dd9de97ee48a157a26e8e70211819aed0a87921c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7621,7 +7569,7 @@ ROM_LOAD16_BYTE( "tc______.2_5", 0x040000, 0x010000, CRC(a2a50948) SHA1(57bf6c0738363da93ec6f379a23e706d1a6fc237) ) ROM_LOAD16_BYTE( "tc______.2_6", 0x040001, 0x010000, CRC(de2146e4) SHA1(4e65c5d59d561d052834c9a0d139c286839fcf86) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7637,7 +7585,7 @@ ROM_LOAD16_BYTE( "tc______.2_5", 0x040000, 0x010000, CRC(a2a50948) SHA1(57bf6c0738363da93ec6f379a23e706d1a6fc237) ) ROM_LOAD16_BYTE( "tc______.2_6", 0x040001, 0x010000, CRC(de2146e4) SHA1(4e65c5d59d561d052834c9a0d139c286839fcf86) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7653,7 +7601,7 @@ ROM_LOAD16_BYTE( "tp______.2_5", 0x040000, 0x010000, CRC(e35cb24b) SHA1(a1c32c195b1d61a99b784c646ad78fa59b8270c4) ) ROM_LOAD16_BYTE( "tp______.2_6", 0x040001, 0x010000, CRC(fecd48d0) SHA1(67ee3bee7aade5ec5fce1fcfe7ef3982264f1762) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7669,7 +7617,7 @@ ROM_LOAD16_BYTE( "tp______.2_5", 0x040000, 0x010000, CRC(e35cb24b) SHA1(a1c32c195b1d61a99b784c646ad78fa59b8270c4) ) ROM_LOAD16_BYTE( "tp______.2_6", 0x040001, 0x010000, CRC(fecd48d0) SHA1(67ee3bee7aade5ec5fce1fcfe7ef3982264f1762) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7686,7 +7634,7 @@ ROM_LOAD16_BYTE( "rm______.4_5", 0x040000, 0x010000, CRC(71460efc) SHA1(3ae79df9d3ec83abdde059827e06e81316026380) ) ROM_LOAD16_BYTE( "rm______.4_6", 0x040001, 0x010000, CRC(471678de) SHA1(919394768314bc8707f93875528dca33bcf7e09c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7702,7 +7650,7 @@ ROM_LOAD16_BYTE( "rm______.4_5", 0x040000, 0x010000, CRC(71460efc) SHA1(3ae79df9d3ec83abdde059827e06e81316026380) ) ROM_LOAD16_BYTE( "rm______.4_6", 0x040001, 0x010000, CRC(471678de) SHA1(919394768314bc8707f93875528dca33bcf7e09c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7718,7 +7666,7 @@ ROM_LOAD16_BYTE( "rm______.4_5", 0x040000, 0x010000, CRC(71460efc) SHA1(3ae79df9d3ec83abdde059827e06e81316026380) ) ROM_LOAD16_BYTE( "rm______.4_6", 0x040001, 0x010000, CRC(471678de) SHA1(919394768314bc8707f93875528dca33bcf7e09c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7734,7 +7682,7 @@ ROM_LOAD16_BYTE( "rm______.4_5", 0x040000, 0x010000, CRC(71460efc) SHA1(3ae79df9d3ec83abdde059827e06e81316026380) ) ROM_LOAD16_BYTE( "rm______.4_6", 0x040001, 0x010000, CRC(471678de) SHA1(919394768314bc8707f93875528dca33bcf7e09c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7750,7 +7698,7 @@ ROM_LOAD16_BYTE( "rm______.4_5", 0x040000, 0x010000, CRC(71460efc) SHA1(3ae79df9d3ec83abdde059827e06e81316026380) ) ROM_LOAD16_BYTE( "rm______.4_6", 0x040001, 0x010000, CRC(471678de) SHA1(919394768314bc8707f93875528dca33bcf7e09c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7766,7 +7714,7 @@ ROM_LOAD16_BYTE( "rm______.4_5", 0x040000, 0x010000, CRC(71460efc) SHA1(3ae79df9d3ec83abdde059827e06e81316026380) ) ROM_LOAD16_BYTE( "rm______.4_6", 0x040001, 0x010000, CRC(471678de) SHA1(919394768314bc8707f93875528dca33bcf7e09c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7782,7 +7730,7 @@ ROM_LOAD16_BYTE( "rm______.4_5", 0x040000, 0x010000, CRC(71460efc) SHA1(3ae79df9d3ec83abdde059827e06e81316026380) ) ROM_LOAD16_BYTE( "rm______.4_6", 0x040001, 0x010000, CRC(471678de) SHA1(919394768314bc8707f93875528dca33bcf7e09c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7798,7 +7746,7 @@ ROM_LOAD16_BYTE( "rm______.4_5", 0x040000, 0x010000, CRC(71460efc) SHA1(3ae79df9d3ec83abdde059827e06e81316026380) ) ROM_LOAD16_BYTE( "rm______.4_6", 0x040001, 0x010000, CRC(471678de) SHA1(919394768314bc8707f93875528dca33bcf7e09c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7814,7 +7762,7 @@ ROM_LOAD16_BYTE( "rm______.4_5", 0x040000, 0x010000, CRC(71460efc) SHA1(3ae79df9d3ec83abdde059827e06e81316026380) ) ROM_LOAD16_BYTE( "rm______.4_6", 0x040001, 0x010000, CRC(471678de) SHA1(919394768314bc8707f93875528dca33bcf7e09c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7830,7 +7778,7 @@ ROM_LOAD16_BYTE( "rm______.4_5", 0x040000, 0x010000, CRC(71460efc) SHA1(3ae79df9d3ec83abdde059827e06e81316026380) ) ROM_LOAD16_BYTE( "rm______.4_6", 0x040001, 0x010000, CRC(471678de) SHA1(919394768314bc8707f93875528dca33bcf7e09c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7846,7 +7794,7 @@ ROM_LOAD16_BYTE( "rm______.4_5", 0x040000, 0x010000, CRC(71460efc) SHA1(3ae79df9d3ec83abdde059827e06e81316026380) ) ROM_LOAD16_BYTE( "rm______.4_6", 0x040001, 0x010000, CRC(471678de) SHA1(919394768314bc8707f93875528dca33bcf7e09c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7862,7 +7810,7 @@ ROM_LOAD16_BYTE( "rm______.4_5", 0x040000, 0x010000, CRC(71460efc) SHA1(3ae79df9d3ec83abdde059827e06e81316026380) ) ROM_LOAD16_BYTE( "rm______.4_6", 0x040001, 0x010000, CRC(471678de) SHA1(919394768314bc8707f93875528dca33bcf7e09c) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7885,7 +7833,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7903,7 +7851,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7921,7 +7869,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7939,7 +7887,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7957,7 +7905,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7975,7 +7923,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -7993,7 +7941,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8011,7 +7959,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8030,7 +7978,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8048,7 +7996,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8066,7 +8014,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8084,7 +8032,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8102,7 +8050,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8120,7 +8068,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8138,7 +8086,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8156,7 +8104,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8174,7 +8122,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8192,7 +8140,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8210,7 +8158,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8228,7 +8176,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8246,7 +8194,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8264,7 +8212,7 @@ ROM_LOAD16_BYTE( "st______.4_7", 0x060000, 0x010000, CRC(d54ef568) SHA1(acce3b37dcd05ca335bbc44bc05d9093a6cebd3c) ) ROM_LOAD16_BYTE( "st______.4_8", 0x060001, 0x010000, CRC(d9aa0643) SHA1(6de6b14dcc9cb0a3eef3635dd07e5f1c16928e6e) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8280,7 +8228,7 @@ ROM_LOAD16_BYTE( "ba______.1_1", 0x000000, 0x080000, CRC(df853e0e) SHA1(07b0b9aa8a6dc3a70991236f8c1f88b4a6c6755f) ) ROM_LOAD16_BYTE( "ba______.1_2", 0x000001, 0x080000, CRC(9a2ab155) SHA1(582b33f9ddbf7fb2da71ec6ad5fbbb20a03eda19) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "ba______.1_a", 0x000000, 0x080000, CRC(976d761b) SHA1(32cceff2cd9bc6ad48caac0a2d95d815a5f24aa9) ) ROM_LOAD( "ba______.1_b", 0x080000, 0x080000, CRC(25a6c7ef) SHA1(cb614c7b2142e47862127d9fdfc7db50978f7f00) ) ROM_END @@ -8293,7 +8241,7 @@ ROM_LOAD16_BYTE( "ba______.1_1", 0x000000, 0x080000, CRC(df853e0e) SHA1(07b0b9aa8a6dc3a70991236f8c1f88b4a6c6755f) ) ROM_LOAD16_BYTE( "ba______.1_2", 0x000001, 0x080000, CRC(9a2ab155) SHA1(582b33f9ddbf7fb2da71ec6ad5fbbb20a03eda19) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "ba______.1_a", 0x000000, 0x080000, CRC(976d761b) SHA1(32cceff2cd9bc6ad48caac0a2d95d815a5f24aa9) ) ROM_LOAD( "ba______.1_b", 0x080000, 0x080000, CRC(25a6c7ef) SHA1(cb614c7b2142e47862127d9fdfc7db50978f7f00) ) ROM_END @@ -8306,7 +8254,7 @@ ROM_LOAD16_BYTE( "ba______.1_1", 0x000000, 0x080000, CRC(df853e0e) SHA1(07b0b9aa8a6dc3a70991236f8c1f88b4a6c6755f) ) ROM_LOAD16_BYTE( "ba______.1_2", 0x000001, 0x080000, CRC(9a2ab155) SHA1(582b33f9ddbf7fb2da71ec6ad5fbbb20a03eda19) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "ba______.1_a", 0x000000, 0x080000, CRC(976d761b) SHA1(32cceff2cd9bc6ad48caac0a2d95d815a5f24aa9) ) ROM_LOAD( "ba______.1_b", 0x080000, 0x080000, CRC(25a6c7ef) SHA1(cb614c7b2142e47862127d9fdfc7db50978f7f00) ) ROM_END @@ -8319,7 +8267,7 @@ ROM_LOAD16_BYTE( "ba______.1_1", 0x000000, 0x080000, CRC(df853e0e) SHA1(07b0b9aa8a6dc3a70991236f8c1f88b4a6c6755f) ) ROM_LOAD16_BYTE( "ba______.1_2", 0x000001, 0x080000, CRC(9a2ab155) SHA1(582b33f9ddbf7fb2da71ec6ad5fbbb20a03eda19) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "ba______.1_a", 0x000000, 0x080000, CRC(976d761b) SHA1(32cceff2cd9bc6ad48caac0a2d95d815a5f24aa9) ) ROM_LOAD( "ba______.1_b", 0x080000, 0x080000, CRC(25a6c7ef) SHA1(cb614c7b2142e47862127d9fdfc7db50978f7f00) ) ROM_END @@ -8332,7 +8280,7 @@ ROM_LOAD16_BYTE( "ba______.1_1", 0x000000, 0x080000, CRC(df853e0e) SHA1(07b0b9aa8a6dc3a70991236f8c1f88b4a6c6755f) ) ROM_LOAD16_BYTE( "ba______.1_2", 0x000001, 0x080000, CRC(9a2ab155) SHA1(582b33f9ddbf7fb2da71ec6ad5fbbb20a03eda19) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "ba______.1_a", 0x000000, 0x080000, CRC(976d761b) SHA1(32cceff2cd9bc6ad48caac0a2d95d815a5f24aa9) ) ROM_LOAD( "ba______.1_b", 0x080000, 0x080000, CRC(25a6c7ef) SHA1(cb614c7b2142e47862127d9fdfc7db50978f7f00) ) ROM_END @@ -8345,7 +8293,7 @@ ROM_LOAD16_BYTE( "ba______.1_1", 0x000000, 0x080000, CRC(df853e0e) SHA1(07b0b9aa8a6dc3a70991236f8c1f88b4a6c6755f) ) ROM_LOAD16_BYTE( "ba______.1_2", 0x000001, 0x080000, CRC(9a2ab155) SHA1(582b33f9ddbf7fb2da71ec6ad5fbbb20a03eda19) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) ROM_LOAD( "ba______.1_a", 0x000000, 0x080000, CRC(976d761b) SHA1(32cceff2cd9bc6ad48caac0a2d95d815a5f24aa9) ) ROM_LOAD( "ba______.1_b", 0x080000, 0x080000, CRC(25a6c7ef) SHA1(cb614c7b2142e47862127d9fdfc7db50978f7f00) ) ROM_END @@ -8363,7 +8311,7 @@ ROM_LOAD16_BYTE( "6x______.3_3", 0x020000, 0x010000, CRC(e8a4531d) SHA1(c816b3b270f1aeaf3ee90aa65dfeea59e8862d1a) ) ROM_LOAD16_BYTE( "6x______.3_4", 0x020001, 0x010000, CRC(4129b8af) SHA1(30ad007f543e570021292f3eef728b0697c31bb5) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8377,7 +8325,7 @@ ROM_LOAD16_BYTE( "6x______.3_3", 0x020000, 0x010000, CRC(e8a4531d) SHA1(c816b3b270f1aeaf3ee90aa65dfeea59e8862d1a) ) ROM_LOAD16_BYTE( "6x______.3_4", 0x020001, 0x010000, CRC(4129b8af) SHA1(30ad007f543e570021292f3eef728b0697c31bb5) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8391,7 +8339,7 @@ ROM_LOAD16_BYTE( "6x______.3_3", 0x020000, 0x010000, CRC(e8a4531d) SHA1(c816b3b270f1aeaf3ee90aa65dfeea59e8862d1a) ) ROM_LOAD16_BYTE( "6x______.3_4", 0x020001, 0x010000, CRC(4129b8af) SHA1(30ad007f543e570021292f3eef728b0697c31bb5) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8405,7 +8353,7 @@ ROM_LOAD16_BYTE( "6x______.3_3", 0x020000, 0x010000, CRC(e8a4531d) SHA1(c816b3b270f1aeaf3ee90aa65dfeea59e8862d1a) ) ROM_LOAD16_BYTE( "6x______.3_4", 0x020001, 0x010000, CRC(4129b8af) SHA1(30ad007f543e570021292f3eef728b0697c31bb5) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8419,7 +8367,7 @@ ROM_LOAD16_BYTE( "6x______.3_3", 0x020000, 0x010000, CRC(e8a4531d) SHA1(c816b3b270f1aeaf3ee90aa65dfeea59e8862d1a) ) ROM_LOAD16_BYTE( "6x______.3_4", 0x020001, 0x010000, CRC(4129b8af) SHA1(30ad007f543e570021292f3eef728b0697c31bb5) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8433,7 +8381,7 @@ ROM_LOAD16_BYTE( "6x______.3_3", 0x020000, 0x010000, CRC(e8a4531d) SHA1(c816b3b270f1aeaf3ee90aa65dfeea59e8862d1a) ) ROM_LOAD16_BYTE( "6x______.3_4", 0x020001, 0x010000, CRC(4129b8af) SHA1(30ad007f543e570021292f3eef728b0697c31bb5) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8447,7 +8395,7 @@ ROM_LOAD16_BYTE( "6x______.3_3", 0x020000, 0x010000, CRC(e8a4531d) SHA1(c816b3b270f1aeaf3ee90aa65dfeea59e8862d1a) ) ROM_LOAD16_BYTE( "6x______.3_4", 0x020001, 0x010000, CRC(4129b8af) SHA1(30ad007f543e570021292f3eef728b0697c31bb5) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8461,7 +8409,7 @@ ROM_LOAD16_BYTE( "6x______.3_3", 0x020000, 0x010000, CRC(e8a4531d) SHA1(c816b3b270f1aeaf3ee90aa65dfeea59e8862d1a) ) ROM_LOAD16_BYTE( "6x______.3_4", 0x020001, 0x010000, CRC(4129b8af) SHA1(30ad007f543e570021292f3eef728b0697c31bb5) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8475,7 +8423,7 @@ ROM_LOAD16_BYTE( "6x______.3_3", 0x020000, 0x010000, CRC(e8a4531d) SHA1(c816b3b270f1aeaf3ee90aa65dfeea59e8862d1a) ) ROM_LOAD16_BYTE( "6x______.3_4", 0x020001, 0x010000, CRC(4129b8af) SHA1(30ad007f543e570021292f3eef728b0697c31bb5) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8489,7 +8437,7 @@ ROM_LOAD16_BYTE( "6x______.3_3", 0x020000, 0x010000, CRC(e8a4531d) SHA1(c816b3b270f1aeaf3ee90aa65dfeea59e8862d1a) ) ROM_LOAD16_BYTE( "6x______.3_4", 0x020001, 0x010000, CRC(4129b8af) SHA1(30ad007f543e570021292f3eef728b0697c31bb5) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8503,7 +8451,7 @@ ROM_LOAD16_BYTE( "6x______.3_3", 0x020000, 0x010000, CRC(e8a4531d) SHA1(c816b3b270f1aeaf3ee90aa65dfeea59e8862d1a) ) ROM_LOAD16_BYTE( "6x______.3_4", 0x020001, 0x010000, CRC(4129b8af) SHA1(30ad007f543e570021292f3eef728b0697c31bb5) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8517,7 +8465,7 @@ ROM_LOAD16_BYTE( "6x______.3_3", 0x020000, 0x010000, CRC(e8a4531d) SHA1(c816b3b270f1aeaf3ee90aa65dfeea59e8862d1a) ) ROM_LOAD16_BYTE( "6x______.3_4", 0x020001, 0x010000, CRC(4129b8af) SHA1(30ad007f543e570021292f3eef728b0697c31bb5) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8531,7 +8479,7 @@ ROM_LOAD16_BYTE( "6x______.3_3", 0x020000, 0x010000, CRC(e8a4531d) SHA1(c816b3b270f1aeaf3ee90aa65dfeea59e8862d1a) ) ROM_LOAD16_BYTE( "6x______.3_4", 0x020001, 0x010000, CRC(4129b8af) SHA1(30ad007f543e570021292f3eef728b0697c31bb5) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8545,7 +8493,7 @@ ROM_LOAD16_BYTE( "6x______.3_3", 0x020000, 0x010000, CRC(e8a4531d) SHA1(c816b3b270f1aeaf3ee90aa65dfeea59e8862d1a) ) ROM_LOAD16_BYTE( "6x______.3_4", 0x020001, 0x010000, CRC(4129b8af) SHA1(30ad007f543e570021292f3eef728b0697c31bb5) ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8563,7 +8511,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8574,7 +8522,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8585,7 +8533,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8596,7 +8544,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8610,7 +8558,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8621,7 +8569,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8632,7 +8580,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8643,7 +8591,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8654,7 +8602,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8665,7 +8613,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8676,7 +8624,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8687,7 +8635,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8698,7 +8646,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END @@ -8709,7 +8657,7 @@ ROM_REGION( 0x800000, "video", 0 ) ROM_LOAD("video_board_roms", 0x0000, 0x10000, NO_DUMP ) - ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) + ROM_REGION( 0x200000, "okicard:msm6376", ROMREGION_ERASE00 ) /* none present */ ROM_END diff -Nru mame-0.250+dfsg.1/src/mame/bfm/bfm_bd1.cpp mame-0.251+dfsg.1/src/mame/bfm/bfm_bd1.cpp --- mame-0.250+dfsg.1/src/mame/bfm/bfm_bd1.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/bfm/bfm_bd1.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -2,9 +2,9 @@ // copyright-holders:James Wallace /********************************************************************** - Bellfruit BD1 VFD module interface and emulation by J.Wallace + Bellfruit BD1 VFD module interface and emulation - TODO: Implement flashing (our only datasheet has that section + TODO: Verify flashing (our only datasheet has that section completely illegible) This is a simulation of code running on an NEC D78042GF-090 @@ -76,7 +76,7 @@ 0xC62D, // 1100 0110 0010 1101 $. 0x0100, // 0000 0001 0000 0000 flash character 0x0000, // 0000 0000 0000 0000 not defined - 0x0040, // 0000 0000 1000 0000 '. + 0x0080, // 0000 0000 1000 0000 '. 0x0880, // 0000 1000 1000 0000 (. 0x0050, // 0000 0000 0101 0000 ). 0xCCD8, // 1100 1100 1101 1000 *. @@ -88,7 +88,7 @@ 0x22B7, // 0010 0010 1011 0111 0. 0x0408, // 0000 0100 0000 1000 1. 0xE206, // 1110 0010 0000 0110 2. - 0x4226, // 0100 0010 0010 0110 3. + 0xC226, // 0100 0010 0010 0110 3. 0xC023, // 1100 0000 0010 0011 4. 0xC225, // 1100 0010 0010 0101 5. 0xE225, // 1110 0010 0010 0101 6. @@ -146,10 +146,12 @@ m_shift_count = 0; m_shift_data = 0; m_pcursor_pos = 0; - m_scroll_active = 0; + m_scroll_active = false; m_display_mode = 0; m_flash_rate = 0; m_flash_control = 0; + m_flash = false; + m_flash_timer = 0; m_user_data = 0; m_user_def = 0; m_sclk = 0; @@ -171,8 +173,64 @@ void bfm_bd1_device::update_display() { + if (m_flash_timer) + { + m_flash_timer--; + if (!m_flash_timer) + { + m_flash_timer = 20; + if (!m_flash) + { + switch (m_flash_control) + { + case 1: // Flash Inside Window + for (int i = 0; i < 16; i++) + { + if ((i >= m_window_start) && (i <= m_window_end)) + m_attrs[i] = AT_FLASH; + else + m_attrs[i] = AT_NORMAL; + } + m_flash = true; + break; + case 2: // Flash Outside Window + for (int i = 0; i < 16; i++) + { + if ((i < m_window_start) || (i > m_window_end)) + m_attrs[i] = AT_FLASH; + else + m_attrs[i] = AT_NORMAL; + } + m_flash = true; + break; + case 3: // Flash All + for ( int i = 0; i < 16; i++ ) + m_attrs[i] = AT_FLASH; + m_flash = true; + break; + } + } + else + { + m_flash_rate--; + if (!m_flash_rate) + { + m_flash_timer = 0; + for (int i = 0; i < 16; i++) + { + m_attrs[i] = AT_NORMAL; + } + } + if (m_flash_control) + { + m_flash = false; + } + } + } + } + for (int i = 0; i < 16; i++) - (*m_outputs)[i] = (m_attrs[i] != AT_BLANK) ? set_display(m_chars[i]) : 0; + (*m_outputs)[i] = (m_attrs[i] == AT_NORMAL) ? set_display(m_chars[i]) : 0; } /////////////////////////////////////////////////////////////////////////// void bfm_bd1_device::blank(int data) @@ -187,7 +245,7 @@ break; case 0x01: // blank inside window - if ( m_window_size > 0 ) + if (m_window_size > 0) { for (int i = m_window_start; i < m_window_end ; i++) { @@ -197,9 +255,9 @@ break; case 0x02: // blank outside window - if ( m_window_size > 0 ) + if (m_window_size > 0) { - if ( m_window_start > 0 ) + if (m_window_start > 0) { for (int i = 0; i < m_window_start; i++) { @@ -228,61 +286,66 @@ int bfm_bd1_device::write_char(int data) { - if ( m_user_def ) + if (m_user_def) { m_user_def--; m_user_data <<= 8; m_user_data |= data; - if ( m_user_def ) + if (m_user_def) { return 0; } - setdata( m_user_data, data); + setdata(m_user_data, data); } else { if(data < 0x80)//characters { - if (data > 0x3F) + if (data > 0x3f) { - // logerror("Undefined character %x \n", data); + logerror("Undefined character %x \n", data); } - setdata(BD1charset[(data & 0x3F)], data); + setdata(BD1charset[(data & 0x3f)], data); } else { - switch ( data & 0xF0 ) + switch (data & 0xf0) { case 0x80: // 0x80 - 0x8F Set display blanking blank(data&0x03);//use the blanking data + + if (data == 0x84) + { + popmessage("Duty control active, contact MAMEDEV"); + } break; case 0x90: // 0x90 - 0x9F Set cursor pos - m_cursor_pos = data & 0x0F; - m_scroll_active = 0; - if ( m_display_mode == 2 ) + m_cursor_pos = data & 0x0f; + m_scroll_active = false; + if (m_display_mode == 2) { - if ( m_cursor_pos >= m_window_end) m_scroll_active = 1; + if (m_cursor_pos >= m_window_end) m_scroll_active = 1; } break; - case 0xA0: // 0xA0 - 0xAF Set display mode + case 0xa0: // 0xA0 - 0xAF Set display mode m_display_mode = data &0x03; break; - case 0xB0: // 0xB0 - 0xBF Clear display area + case 0xb0: // 0xB0 - 0xBF Clear display area - switch ( data & 0x03 ) + switch (data & 0x03) { case 0x00: // clr nothing break; case 0x01: // clr inside window - if ( m_window_size > 0 ) + if (m_window_size > 0) { std::fill_n(m_chars + m_window_start, m_window_size, 0); std::fill_n(m_attrs + m_window_start, m_window_size, 0); @@ -291,9 +354,9 @@ break; case 0x02: // clr outside window - if ( m_window_size > 0 ) + if (m_window_size > 0) { - if ( m_window_start > 0 ) + if (m_window_start > 0) { for (int i = 0; i < m_window_start; i++) { @@ -302,7 +365,7 @@ } } - if (m_window_end < 15 ) + if (m_window_end < 15) { for (int i = m_window_end; i < 15- m_window_end ; i++) { @@ -319,32 +382,44 @@ } break; - case 0xC0: // 0xC0 - 0xCF Set flash rate - m_flash_rate = data & 0x0F; + case 0xc0: // 0xC0 - 0xCF Set flash rate + m_flash_rate = data & 0x0f; + if (!m_flash_rate && m_flash) + { + m_flash = false; + } + m_flash_timer = 20; break; - case 0xD0: // 0xD0 - 0xDF Set Flash control + case 0xd0: // 0xD0 - 0xDF Set Flash control m_flash_control = data & 0x03; + if (m_flash_control == 0 && m_flash) + { + m_flash = false; + } break; - case 0xE0: // 0xE0 - 0xEF Set window start pos - m_window_start = data &0x0F; + case 0xe0: // 0xE0 - 0xEF Set window start pos + m_window_start = data &0x0f; m_window_size = (m_window_end - m_window_start)+1; break; - case 0xF0: // 0xF0 - 0xFF Set window end pos - m_window_end = data &0x0F; + case 0xf0: // 0xF0 - 0xFF Set window end pos + m_window_end = data &0x0f; m_window_size = (m_window_end - m_window_start)+1; m_scroll_active = 0; - if ( m_display_mode == 2 ) + if (m_display_mode == 2) { - if ( m_cursor_pos >= m_window_end) + if (m_cursor_pos >= m_window_end) { m_scroll_active = 1; m_cursor_pos = m_window_end; } } break; + + default: + popmessage("%x",data); } } } @@ -358,7 +433,7 @@ { int move = 0; int change =0; - switch ( data ) + switch (data) { case 0x25: // flash if(m_chars[m_pcursor_pos] & (1<<8)) @@ -367,6 +442,7 @@ } else { + m_attrs[m_pcursor_pos] = AT_FLASH; m_chars[m_pcursor_pos] |= (1<<8); } break; @@ -374,9 +450,9 @@ case 0x26: // undefined break; - case 0x2C: // semicolon - case 0x2E: // decimal point - if( m_chars[m_pcursor_pos] & (1<<12)) + case 0x2c: // semicolon + case 0x2e: // decimal point + if (m_chars[m_pcursor_pos] & (1<<12)) { move++; } @@ -386,20 +462,21 @@ } break; - case 0x3B: // dummy char - move++; + case 0x3a: + m_user_def = 2; break; - case 0x3A: - m_user_def = 2; + case 0x3b: // dummy char + move++; break; + default: move++; change++; } - if ( move ) + if (move) { int mode = m_display_mode; @@ -407,40 +484,40 @@ if ( m_window_size <= 0 || (m_window_size > 16)) { // if no window selected default to equivalent rotate mode - if ( mode == 2 ) mode = 0; - else if ( mode == 3 ) mode = 1; + if (mode == 2) mode = 0; + else if (mode == 3) mode = 1; } - switch ( mode ) + switch (mode) { case 0: // rotate left - m_cursor_pos &= 0x0F; + m_cursor_pos &= 0x0f; - if ( change ) + if (change) { m_chars[m_cursor_pos] = segdata; } m_cursor_pos++; - if ( m_cursor_pos >= 16 ) m_cursor_pos = 0; + if (m_cursor_pos >= 16) m_cursor_pos = 0; break; case 1: // Rotate right - m_cursor_pos &= 0x0F; + m_cursor_pos &= 0x0f; - if ( change ) + if (change) { m_chars[m_cursor_pos] = segdata; } m_cursor_pos--; - if ( m_cursor_pos < 0 ) m_cursor_pos = 15; + if (m_cursor_pos < 0) m_cursor_pos = 15; break; case 2: // Scroll left if ( m_cursor_pos < m_window_end ) { m_scroll_active = 0; - if ( change ) + if (change) { m_chars[m_cursor_pos] = segdata; } @@ -448,12 +525,12 @@ } else { - if ( move ) + if (move) { - if ( m_scroll_active ) + if (m_scroll_active) { int i = m_window_start; - while ( i < m_window_end ) + while (i < m_window_end) { m_chars[i] = m_chars[i+1]; i++; @@ -462,7 +539,7 @@ else m_scroll_active = 1; } - if ( change ) + if (change) { m_chars[m_window_end] = segdata; } @@ -474,24 +551,24 @@ break; case 3: // Scroll right - if ( m_cursor_pos > m_window_start ) + if (m_cursor_pos > m_window_start) { - if ( change ) + if (change) { m_chars[m_cursor_pos] = segdata; } m_cursor_pos--; - if ( m_cursor_pos > 15 ) m_cursor_pos = 0; + if (m_cursor_pos > 15) m_cursor_pos = 0; } else { - if ( move ) + if (move) { - if ( m_scroll_active ) + if (m_scroll_active) { int i = m_window_end; - while ( i > m_window_start ) + while (i > m_window_start) { m_chars[i] = m_chars[i-1]; i--; @@ -499,13 +576,13 @@ } else m_scroll_active = 1; } - if ( change ) + if (change) { - m_chars[m_window_start] = segdata; - } + m_chars[m_window_start] = segdata; + } else { - m_chars[m_window_start] = 0; + m_chars[m_window_start] = 0; } } break; diff -Nru mame-0.250+dfsg.1/src/mame/bfm/bfm_bd1.h mame-0.251+dfsg.1/src/mame/bfm/bfm_bd1.h --- mame-0.250+dfsg.1/src/mame/bfm/bfm_bd1.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/bfm/bfm_bd1.h 2022-12-29 14:20:09.000000000 +0000 @@ -45,24 +45,26 @@ std::unique_ptr > m_outputs; uint8_t m_port_val; - int m_cursor_pos = 0; - int m_window_start = 0; // display window start pos 0-15 - int m_window_end = 0; // display window end pos 0-15 - int m_window_size = 0; // window size - int m_shift_count = 0; - int m_shift_data = 0; - int m_pcursor_pos = 0; - int m_scroll_active = 0; - int m_display_mode = 0; - int m_flash_rate = 0; - int m_flash_control = 0; - int m_sclk = 0; - int m_data = 0; + uint8_t m_cursor_pos = 0; + uint8_t m_window_start = 0; // display window start pos 0-15 + uint8_t m_window_end = 0; // display window end pos 0-15 + uint8_t m_window_size = 0; // window size + uint8_t m_shift_count = 0; + uint8_t m_shift_data = 0; + uint8_t m_pcursor_pos = 0; + bool m_scroll_active = false; + uint8_t m_display_mode = 0; + bool m_flash = false; + uint8_t m_flash_rate = 0; + uint8_t m_flash_control = 0; + uint8_t m_flash_timer = 0; + uint8_t m_sclk = 0; + uint8_t m_data = 0; uint8_t m_cursor = 0; uint16_t m_chars[16]{}; uint8_t m_attrs[16]{}; - uint16_t m_user_data = 0; // user defined character data (16 bit) + uint16_t m_user_data = 0; // user defined character data (16 bit) uint16_t m_user_def = 0; // user defined character state }; diff -Nru mame-0.250+dfsg.1/src/mame/bfm/bfm_bda.cpp mame-0.251+dfsg.1/src/mame/bfm/bfm_bda.cpp --- mame-0.250+dfsg.1/src/mame/bfm/bfm_bda.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/bfm/bfm_bda.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -13,8 +13,6 @@ DEFINE_DEVICE_TYPE(BFM_BDA, bfm_bda_device, "bfm_bda", "BFM BDA VFD controller") -//I currently use the BDA character set, until a suitable image can be programmed - static const uint16_t BDAcharset[]= { // FEDC BA98 7654 3210 0xA626, // 1010 0110 0010 0110 @. @@ -95,10 +93,13 @@ m_outputs = std::make_unique >(*this, "vfd%u", unsigned(m_port_val) << 4); m_outputs->resolve(); + m_brightness = std::make_unique >(*this, "vfdduty%u", unsigned(m_port_val)); + m_brightness->resolve(); + save_item(NAME(m_cursor_pos)); save_item(NAME(m_window_start)); // display window start pos 0-15 - save_item(NAME(m_window_end)); // display window end pos 0-15 - save_item(NAME(m_window_size)); // window size + save_item(NAME(m_window_end)); // display window end pos 0-15 + save_item(NAME(m_window_size)); // window size save_item(NAME(m_shift_count)); save_item(NAME(m_shift_data)); save_item(NAME(m_pcursor_pos)); @@ -114,6 +115,7 @@ save_item(NAME(m_attrs)); save_item(NAME(m_user_data)); // user defined character data (16 bit) save_item(NAME(m_user_def)); // user defined character state + save_item(NAME(m_duty)); } void bfm_bda_device::device_reset() @@ -134,6 +136,9 @@ m_flash_control = 0; m_user_data = 0; m_user_def = 0; + m_duty = 0; + + (*m_brightness)[0] = 0; std::fill(std::begin(m_chars), std::end(m_chars), 0); std::fill(std::begin(m_attrs), std::end(m_attrs), 0); @@ -152,24 +157,24 @@ void bfm_bda_device::update_display() { for (int i = 0; i < 16; i++) - (*m_outputs)[i] = (m_attrs[i] != AT_BLANK) ? set_display(m_chars[i]) : 0; + (*m_outputs)[i] = (m_attrs[i] == AT_NORMAL) ? set_display(m_chars[i]) : 0; + (*m_brightness)[0] = m_duty; } /////////////////////////////////////////////////////////////////////////// void bfm_bda_device::blank(int data) { switch ( data & 0x03 ) // TODO: wrong case values??? { - case 0x00: // clear blanking + case 0x00: //blank all + for (int i = 0; i < 15; i++) { - for (int i = 0; i < 15; i++) - { - m_attrs[i] = 0; - } + m_attrs[i] = AT_BLANK; } break; + case 0x01: // blank inside window - if ( m_window_size > 0 ) + if (m_window_size > 0) { for (int i = m_window_start; i < m_window_end ; i++) { @@ -179,7 +184,7 @@ break; case 0x02: // blank outside window - if ( m_window_size > 0 ) + if (m_window_size > 0) { if ( m_window_start > 0 ) { @@ -199,12 +204,10 @@ } break; - case 0x03: //blank all + case 0x03: // clear blanking + for (int i = 0; i < 15; i++) { - for (int i = 0; i < 15; i++) - { - m_attrs[i] = AT_BLANK; - } + m_attrs[i] = 0; } break; } @@ -212,7 +215,7 @@ int bfm_bda_device::write_char(int data) { - if ( m_user_def ) + if (m_user_def) { m_user_def--; @@ -228,26 +231,18 @@ } else { - if(data < 0x80)//characters + if (!(data & 0x80))//characters { - if (m_blank_flag || m_flash_flag) + if (m_blank_flag) { - if (m_blank_flag) - { - logerror("Brightness data %x \n", data) ; - m_blank_flag = 0; - } - if (m_flash_flag) - { - //not setting yet - m_flash_flag = 0; - } + m_duty = 7 - data; + m_blank_flag = 0; } else { if (data > 0x3F) { - logerror("Undefined character %x \n", data); + logerror("BDA Undefined character, needs populating 0x%1$02X\n", data); } setdata(BDAcharset[(data & 0x3F)], data); @@ -255,96 +250,93 @@ } else { - switch ( data & 0xF0 ) + switch (data & 0xf0) { case 0x80: // 0x80 - 0x8F Set display blanking - if (data==0x84)// futaba setup + if (data == 0x84)// duty setup { m_blank_flag = 1; + m_flash_flag = 0; } else { - logerror("80s %x \n",data); - //blank(data&0x03);//use the blanking data + blank(data & 0x03);//use the blanking data } break; case 0x90: // 0x90 - 0x9F Set cursor pos - m_cursor_pos = data & 0x0F; + m_cursor_pos = data & 0x0f; m_scroll_active = 0; - if ( m_display_mode == 2 ) + if (m_display_mode == 2) { if ( m_cursor_pos >= m_window_end) m_scroll_active = 1; } break; - case 0xA0: // 0xA0 - 0xAF Set display mode - m_display_mode = data &0x03; + case 0xa0: // 0xA0 - 0xAF Set display mode + if (data == 0xa8)// userdef + { + m_user_def = 2; + } + else if (data == 0xac) + { + popmessage("TEST MODE"); + } + else + { + m_display_mode = data & 0x03; + } break; - case 0xB0: // 0xB0 - 0xBF Clear display area - - switch ( data & 0x03 ) + case 0xb0: // 0xB0 - 0xBF Clear display area + if (data == 0xbc) { - case 0x00: // clr nothing - break; - - case 0x01: // clr inside window - if ( m_window_size > 0 ) - { - std::fill_n(m_chars + m_window_start, m_window_size, 0); - std::fill_n(m_attrs + m_window_start, m_window_size, 0); - } - - break; - - case 0x02: // clr outside window - if ( m_window_size > 0 ) + popmessage("CLEAR USERDEF"); + } + else + { + switch (data & 0x03) { - if ( m_window_start > 0 ) - { - for (int i = 0; i < m_window_start; i++) - { - memset(m_chars+i,0,i); - memset(m_attrs+i,0,i); - } - } + case 0x00: // clr nothing + break; - if (m_window_end < 15 ) + case 0x01: // clr inside window + if (m_window_size > 0) { - for (int i = m_window_end; i < 15- m_window_end ; i++) - { - memset(m_chars+i,0,i); - memset(m_attrs+i,0,i); - } + std::fill_n(m_chars + m_window_start, m_window_size, 0); + std::fill_n(m_attrs + m_window_start, m_window_size, 0); } + break; } - break; - - case 0x03: // clr entire display - std::fill(std::begin(m_chars), std::end(m_chars), 0); - std::fill(std::begin(m_attrs), std::end(m_attrs), 0); } break; - case 0xC0: // 0xC0 - 0xCF Set flash rate - m_flash_rate = data & 0x0F; + case 0xc0: + if (data == 0xc8) + { + m_flash_flag = 1; + } + else + { + m_flash_rate = data & 0x0f; + logerror("BDA flash %x", m_flash_rate); + } break; - case 0xD0: // 0xD0 - 0xDF Set Flash control + case 0xd0: // 0xD0 - 0xDF Set Flash control m_flash_control = data & 0x03; break; - case 0xE0: // 0xE0 - 0xEF Set window start pos - m_window_start = data &0x0F; + case 0xe0: // 0xE0 - 0xEF Set window start pos + m_window_start = data & 0x0f; m_window_size = (m_window_end - m_window_start)+1; break; - case 0xF0: // 0xF0 - 0xFF Set window end pos - m_window_end = data &0x0F; - m_window_size = (m_window_end - m_window_start)+1; + case 0xf0: // 0xF0 - 0xFF Set window end pos + m_window_end = data & 0x0f; + m_window_size = (m_window_end - m_window_start) + 1; m_scroll_active = 0; - if ( m_display_mode == 2 ) + if (m_display_mode == 2) { if ( m_cursor_pos >= m_window_end) { @@ -360,6 +352,7 @@ return 0; } + /////////////////////////////////////////////////////////////////////////// void bfm_bda_device::setdata(int segdata, int data) diff -Nru mame-0.250+dfsg.1/src/mame/bfm/bfm_bda.h mame-0.251+dfsg.1/src/mame/bfm/bfm_bda.h --- mame-0.250+dfsg.1/src/mame/bfm/bfm_bda.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/bfm/bfm_bda.h 2022-12-29 14:20:09.000000000 +0000 @@ -40,6 +40,7 @@ static const uint8_t AT_FLASHED = 0x80; // set when character should be blinked off std::unique_ptr > m_outputs; + std::unique_ptr > m_brightness; uint8_t m_port_val; int m_cursor_pos = 0; @@ -55,6 +56,7 @@ int m_display_mode = 0; int m_flash_rate = 0; int m_flash_control = 0; + int m_duty; uint8_t m_cursor = 0; uint16_t m_chars[16]{}; diff -Nru mame-0.250+dfsg.1/src/mame/bfm/bfm_sc2.cpp mame-0.251+dfsg.1/src/mame/bfm/bfm_sc2.cpp --- mame-0.250+dfsg.1/src/mame/bfm/bfm_sc2.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/bfm/bfm_sc2.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -2672,21 +2672,54 @@ // ROM definition Belgian Slots (Token pay per round) Payslide //////////// +/* +PR6496V2 +BELGIUM SLOTS GAME 95 750 943 TYPE TOKEN PAYOUT VER. (no more information) +BELGIUM SLOTS TPO 95 770 121 PROG. +BELGIUM SLOTS TPO 95 770 122 CHAR. +BELGIUM SLOTS TPO 95 001 029 SOUND. +*/ + ROM_START( sltblgtk ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("95750943.bin", 0x00000, 0x10000, CRC(c9fb8153) SHA1(7c1d0660c15f05b1e0784d8322c62981fe8dc4c9)) + ROM_LOAD("95750943.gam", 0x00000, 0x10000, CRC(c9fb8153) SHA1(7c1d0660c15f05b1e0784d8322c62981fe8dc4c9)) + + ROM_REGION( 0x20000, "adder2:cpu", 0 ) + ROM_LOAD("95770121.prg", 0x00000, 0x20000, CRC(cedbbf28) SHA1(559ae341b55462feea771127394a54fc65266818)) + + ROM_REGION( 0x20000, "upd", 0 ) + ROM_LOAD("95001029.snd", 0x00000, 0x20000, CRC(7749c724) SHA1(a87cce0c99e392f501bba44b3936a7059d682c9c)) + + ROM_REGION( 0x40000, "adder2:tiles", ROMREGION_ERASEFF ) + ROM_LOAD("95770122.chr", 0x00000, 0x20000, CRC(a1e3bdf4) SHA1(f0cabe08dee028e2014cbf0fc3fe0806cdfa60c6)) + + ROM_REGION( 0x10, "proms", 0 ) + ROM_LOAD("95790017.pal", 0, 8 , CRC(20e13635) SHA1(5aa7e7cac8c00ebc193d63d0c6795904f42c70fa)) +ROM_END + +/* +PR6496V1 +BELGIUM SLOTS GAME 95 750 452 TYPE TOKEN PAYOUT VER. BSLT 1.3 B.F.M +BELGIUM SLOTS TPO 95 770 065 PROG. +BELGIUM SLOTS TPO 95 770 066 CHAR. +BELGIUM SLOTS TPO 95 001 029 SOUND. +*/ + +ROM_START( sltblgtka ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("95750452.gam", 0x00000, 0x10000, CRC(5637591d) SHA1(e5ce1e9a06bec7a9c9d1417f61a60bb3d97f4c7d)) ROM_REGION( 0x20000, "adder2:cpu", 0 ) - ROM_LOAD("adder121.bin", 0x00000, 0x20000, CRC(cedbbf28) SHA1(559ae341b55462feea771127394a54fc65266818)) + ROM_LOAD("95770065.prg", 0x00000, 0x20000, CRC(28997756) SHA1(9fc0922be20d7dfbc7f5c831b045607e53de0c2a)) ROM_REGION( 0x20000, "upd", 0 ) - ROM_LOAD("sound029.bin", 0x00000, 0x20000, CRC(7749c724) SHA1(a87cce0c99e392f501bba44b3936a7059d682c9c)) + ROM_LOAD("95001029.snd", 0x00000, 0x20000, CRC(7749c724) SHA1(a87cce0c99e392f501bba44b3936a7059d682c9c)) ROM_REGION( 0x40000, "adder2:tiles", ROMREGION_ERASEFF ) - ROM_LOAD("chr122.bin", 0x00000, 0x20000, CRC(a1e3bdf4) SHA1(f0cabe08dee028e2014cbf0fc3fe0806cdfa60c6)) + ROM_LOAD("95770066.chr", 0x00000, 0x20000, CRC(a0a3a2dd) SHA1(54f1c0233d5d1b43283c427813195b32a182ec6e)) ROM_REGION( 0x10, "proms", 0 ) - ROM_LOAD("stsbtpal.bin", 0, 8 , CRC(20e13635) SHA1(5aa7e7cac8c00ebc193d63d0c6795904f42c70fa)) + ROM_LOAD("95790017.pal", 0, 8 , CRC(20e13635) SHA1(5aa7e7cac8c00ebc193d63d0c6795904f42c70fa)) ROM_END // ROM definition Belgian Slots (Cash Payout) ///////////////////////////// @@ -8577,6 +8610,7 @@ GAMEL( 1995, slotsnl, 0, scorpion2_vid, slotsnl, bfm_sc2_vid_state, init_adder_dutch, 0, "BFM/ELAM", "Slots (Dutch, Game Card 95-750-368)", MACHINE_SUPPORTS_SAVE,layout_slots ) GAMEL( 1996, sltblgtk, 0, scorpion2_vid, sltblgtk, bfm_sc2_vid_state, init_sltsbelg, 0, "BFM/ELAM", "Slots (Belgian Token, Game Card 95-750-943)", MACHINE_SUPPORTS_SAVE,layout_sltblgtk ) +GAMEL( 1996, sltblgtka, sltblgtk, scorpion2_vid, sltblgtk, bfm_sc2_vid_state, init_sltsbelg, 0, "BFM/ELAM", "Slots (Belgian Token, Game Card 95-750-452)", MACHINE_SUPPORTS_SAVE,layout_sltblgtk ) GAMEL( 1996, sltblgpo, 0, scorpion2_vid, sltblgpo, bfm_sc2_vid_state, init_sltsbelg, 0, "BFM/ELAM", "Slots (Belgian Cash, Game Card 95-750-938)", MACHINE_SUPPORTS_SAVE,layout_sltblgpo ) GAMEL( 1996, sltblgp1, sltblgpo, scorpion2_vid, sltblgpo, bfm_sc2_vid_state, init_sltsbelg, 0, "BFM/ELAM", "Slots (Belgian Cash, Game Card 95-752-008)", MACHINE_SUPPORTS_SAVE,layout_sltblgpo ) diff -Nru mame-0.250+dfsg.1/src/mame/capcom/cps1.cpp mame-0.251+dfsg.1/src/mame/capcom/cps1.cpp --- mame-0.250+dfsg.1/src/mame/capcom/cps1.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/capcom/cps1.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1604,6 +1604,64 @@ PORT_DIPSETTING( 0x00, DEF_STR( Test ) ) INPUT_PORTS_END +static INPUT_PORTS_START( ffightae ) + PORT_INCLUDE( cps1_3players ) + + PORT_START("DSWA") + CPS1_COINAGE_1( "SW(A)" ) + PORT_DIPNAME( 0x40, 0x40, "2 Coins to Start, 1 to Continue" ) PORT_DIPLOCATION("SW(A):7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW(A):8" ) + + PORT_START("DSWB") + PORT_DIPNAME( 0x07, 0x04, "Difficulty Level 1" ) PORT_DIPLOCATION("SW(B):1,2,3") + PORT_DIPSETTING( 0x07, DEF_STR( Easiest ) ) // "01" + PORT_DIPSETTING( 0x06, DEF_STR( Easier ) ) // "02" + PORT_DIPSETTING( 0x05, DEF_STR( Easy ) ) // "03" + PORT_DIPSETTING( 0x04, DEF_STR( Normal ) ) // "04" + PORT_DIPSETTING( 0x03, DEF_STR( Medium ) ) // "05" + PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) // "06" + PORT_DIPSETTING( 0x01, DEF_STR( Harder ) ) // "07" + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) // "08" + PORT_DIPNAME( 0x18, 0x10, "Difficulty Level 2" ) PORT_DIPLOCATION("SW(B):4,5") + PORT_DIPSETTING( 0x18, DEF_STR( Easy ) ) // "01" + PORT_DIPSETTING( 0x10, DEF_STR( Normal ) ) // "02" + PORT_DIPSETTING( 0x08, DEF_STR( Hard ) ) // "03" + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) // "04" + PORT_DIPNAME( 0x60, 0x60, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW(B):6,7") + PORT_DIPSETTING( 0x60, "100k" ) + PORT_DIPSETTING( 0x40, "200k" ) + PORT_DIPSETTING( 0x20, "100k and every 200k" ) + PORT_DIPSETTING( 0x00, DEF_STR( None ) ) + PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW(B):8" ) + + PORT_START("DSWC") + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW(C):1,2") + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x03, "2" ) + PORT_DIPSETTING( 0x02, "3" ) + PORT_DIPSETTING( 0x01, "4" ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW(C):3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Freeze" ) PORT_DIPLOCATION("SW(C):4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW(C):5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW(C):6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW(C):7") + PORT_DIPSETTING( 0x40, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x80, 0x80, "Game Mode") PORT_DIPLOCATION("SW(C):8") + PORT_DIPSETTING( 0x80, "Game" ) + PORT_DIPSETTING( 0x00, DEF_STR( Test ) ) +INPUT_PORTS_END + static INPUT_PORTS_START( 1941 ) PORT_INCLUDE( cps1_2b ) @@ -3609,6 +3667,26 @@ PORT_SERVICE_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW(C):8" ) INPUT_PORTS_END +static const ioport_value mpumpkin_handle[] = { 0, 1, 3, 2 }; + +static INPUT_PORTS_START( mpumpkin ) + PORT_INCLUDE( pokonyan ) + + PORT_MODIFY("IN0") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_MODIFY("IN1") + PORT_BIT( 0x0003, 0x0000, IPT_POSITIONAL ) PORT_POSITIONS(4) PORT_REMAP_TABLE(mpumpkin_handle) PORT_SENSITIVITY(100) PORT_KEYDELTA(1) PORT_CENTERDELTA(0) PORT_WRAPS + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) // Kitty + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) // Keroppi + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) // Badtz-Maru + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) +INPUT_PORTS_END + /* A Final Fight board with mismatched USA and Japan GFX proves that the columns of the 8x8 tilemap alternate between sides of the 16x16 tile resulting @@ -5844,6 +5922,37 @@ ROM_LOAD( "ioc1.ic1", 0x0000, 0x0104, CRC(a399772d) SHA1(55471189db573dd61e3087d12c55564291672c77) ) ROM_END +ROM_START( ffightae ) + ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ + ROM_LOAD16_WORD_SWAP( "ff-23m.8h", 0x00000, 0x80000, CRC(86def74f) SHA1(5206cc13bfe40fb4f9c3677629aee89099623ee6) ) + ROM_LOAD16_WORD_SWAP( "ff-22m.7h", 0x80000, 0x80000, CRC(cbdd8689) SHA1(a75918ee837dfccdd4fd02b716928a2de2003103) ) + + ROM_REGION( 0x200000, "gfx", 0 ) + ROM_LOAD64_WORD( "ff-5m.7a", 0x000000, 0x80000, CRC(91a909bd) SHA1(09621cb33a9c26798b1bba186dceb02e5f126e1a) ) + ROM_LOAD64_WORD( "ff-7m.9a", 0x000002, 0x80000, CRC(89f8b4cd) SHA1(c169c445686d3c79eae2dc42460b8194c491ccb0) ) + ROM_LOAD64_WORD( "ff-1m.3a", 0x000004, 0x80000, CRC(d5469303) SHA1(0c1e33a87eb3ef79e6a5ba80753eb495284e666c) ) + ROM_LOAD64_WORD( "ff-3m.5a", 0x000006, 0x80000, CRC(0c6302bf) SHA1(03ee13a67a8a3b92fac462623ace752d77b9e9f1) ) + + ROM_REGION( 0x18000, "audiocpu", 0 ) /* 64k for the audio CPU (+banks) */ + ROM_LOAD( "ff_09.12b", 0x00000, 0x08000, CRC(b8367eb5) SHA1(ec3db29fdd6200e9a8f4f8073a7e34aef731354f) ) + ROM_CONTINUE( 0x10000, 0x08000 ) + + ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ + ROM_LOAD( "ff_18.11c", 0x00000, 0x20000, CRC(375c66e7) SHA1(36189e23209ce4ae5d9cbabd1574540d0591e7b3) ) + ROM_LOAD( "ff_19.12c", 0x20000, 0x20000, CRC(1ef137f9) SHA1(974b5e72aa28b87ebfa7438efbdfeda769dedf5e) ) + + ROM_REGION( 0x0200, "aboardplds", 0 ) + ROM_LOAD( "buf1", 0x0000, 0x0117, CRC(eb122de7) SHA1(b26b5bfe258e3e184f069719f9fd008d6b8f6b9b) ) + ROM_LOAD( "ioa1", 0x0000, 0x0117, CRC(59c7ee3b) SHA1(fbb887c5b4f5cb8df77cec710eaac2985bc482a6) ) + ROM_LOAD( "prg1", 0x0000, 0x0117, CRC(f1129744) SHA1(a5300f301c1a08a7da768f0773fa0fe3f683b237) ) + ROM_LOAD( "rom1", 0x0000, 0x0117, CRC(41dc73b9) SHA1(7d4c9f1693c821fbf84e32dd6ef62ddf14967845) ) + ROM_LOAD( "sou1", 0x0000, 0x0117, CRC(84f4b2fe) SHA1(dcc9e86cc36316fe42eace02d6df75d08bc8bb6d) ) + + ROM_REGION( 0x0200, "bboardplds", 0 ) + ROM_LOAD( "s224bn.1a", 0x0000, 0x0117, CRC(31367e94) SHA1(87b42d20bfe078c8352f7c2a40f7ce6b1be4a1af) ) /* GAL16V8 */ + ROM_LOAD( "iob1.11e", 0x0000, 0x0117, CRC(3abc0700) SHA1(973043aa46ec6d5d1db20dc9d5937005a0f9f6ae) ) +ROM_END + /* B-Board 89624B-3 */ ROM_START( 1941 ) ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ @@ -13819,7 +13928,7 @@ */ ROM_END -ROM_START( hkittymp ) // B board: ? C board: 92631C-6 +ROM_START( mpumpkin ) // B board: 91634B-? C board: 92631C-6 ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ ROM_LOAD16_WORD_SWAP( "mpa_23.8f", 0x00000, 0x80000, CRC(38b9883a) SHA1(94a89a360a502f209aa905e7eb2f1d472960850f) ) // remaining sockets are empty @@ -13974,6 +14083,9 @@ ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ ROM_LOAD( "sfz18", 0x00000, 0x20000, CRC(61022b2d) SHA1(6369d0c1d08a30ee19b94e52ab1463a7784b9de5) ) ROM_LOAD( "sfz19", 0x20000, 0x20000, CRC(3b5886d5) SHA1(7e1b7d40ef77b5df628dd663d45a9a13c742cf58) ) + + ROM_REGION( 0x0200, "bboardplds", 0 ) + ROM_LOAD( "sfz63b.1a", 0x0000, 0x0104, CRC(f5a351da) SHA1(a867947d784167b5284efb76a8634ca5713dafdb) ) ROM_END /* FIXME B-Board uncertain but should be 91634B from the program ROM names */ @@ -14012,6 +14124,12 @@ ROM_REGION( 0x40000, "oki",0 ) /* Samples */ ROM_LOAD( "sfz_18.11c", 0x00000, 0x20000, CRC(61022b2d) SHA1(6369d0c1d08a30ee19b94e52ab1463a7784b9de5) ) ROM_LOAD( "sfz_19.12c", 0x20000, 0x20000, CRC(3b5886d5) SHA1(7e1b7d40ef77b5df628dd663d45a9a13c742cf58) ) + + // SFZ63B was found on mpumpkin, assumed to be from SFZ + ROM_REGION( 0x0200, "bboardplds", 0 ) + ROM_LOAD( "sfz63b.1a", 0x0000, 0x0104, CRC(f5a351da) SHA1(a867947d784167b5284efb76a8634ca5713dafdb) ) // PAL16L8 + + // TODO... confirm other pals (could be unique as this is the "cps changer" home console) ROM_END /* FIXME B-Board uncertain but should be 91634B from the program ROM names */ @@ -14050,6 +14168,9 @@ ROM_REGION( 0x40000, "oki",0 ) /* Samples */ ROM_LOAD( "sfz_18.11c", 0x00000, 0x20000, CRC(61022b2d) SHA1(6369d0c1d08a30ee19b94e52ab1463a7784b9de5) ) ROM_LOAD( "sfz_19.12c", 0x20000, 0x20000, CRC(3b5886d5) SHA1(7e1b7d40ef77b5df628dd663d45a9a13c742cf58) ) + + ROM_REGION( 0x0200, "bboardplds", 0 ) + ROM_LOAD( "sfz63b.1a", 0x0000, 0x0104, CRC(f5a351da) SHA1(a867947d784167b5284efb76a8634ca5713dafdb) ) ROM_END @@ -14494,6 +14615,7 @@ GAME( 1989, ffightj3, ffight, cps1_10MHz, ffight, cps_state, init_cps1, ROT0, "Capcom", "Final Fight (Japan 900405)", MACHINE_SUPPORTS_SAVE ) GAME( 1989, ffightj4, ffight, cps1_10MHz, ffight, cps_state, init_cps1, ROT0, "Capcom", "Final Fight (Japan 900613)", MACHINE_SUPPORTS_SAVE ) GAME( 1989, ffightjh, ffight, cps1_10MHz, ffight, cps_state, init_cps1, ROT0, "bootleg", "Street Smart / Final Fight (Japan, hack)", MACHINE_SUPPORTS_SAVE ) +GAME( 2019, ffightae, ffight, cps1_12MHz, ffightae, cps_state, init_cps1, ROT0, "hack", "Final Fight 30th Anniversary Edition (World, hack)", MACHINE_SUPPORTS_SAVE ) GAME( 1990, 1941, 0, cps1_10MHz, 1941, cps_state, init_cps1, ROT270, "Capcom", "1941: Counter Attack (World 900227)", MACHINE_SUPPORTS_SAVE ) // "ETC" GAME( 1990, 1941r1, 1941, cps1_10MHz, 1941, cps_state, init_cps1, ROT270, "Capcom", "1941: Counter Attack (World)", MACHINE_SUPPORTS_SAVE ) GAME( 1990, 1941u, 1941, cps1_10MHz, 1941, cps_state, init_cps1, ROT270, "Capcom", "1941: Counter Attack (USA 900227)", MACHINE_SUPPORTS_SAVE ) @@ -14664,7 +14786,7 @@ GAME( 1995, rockmanj, megaman, cps1_12MHz, rockmanj, cps_state, init_cps1, ROT0, "Capcom", "Rockman: The Power Battle (CPS1, Japan 950922)", MACHINE_SUPPORTS_SAVE ) GAME( 2000, ganbare, 0, ganbare, ganbare, cps_state, init_ganbare, ROT0, "Capcom", "Ganbare! Marine Kun (Japan 2K0411)", MACHINE_SUPPORTS_SAVE ) GAME( 1994, pokonyan, 0, cps1_10MHz, pokonyan, cps_state, init_cps1, ROT0, "Capcom", "Pokonyan! Balloon (Japan 940322)", MACHINE_SUPPORTS_SAVE ) // 2002-10-24 was on the ROM labels, 940322 on the startup screen... take your pick -GAME( 1996, hkittymp, 0, cps1_10MHz, pokonyan, cps_state, init_cps1, ROT0, "Capcom", "Hello Kitty Magical Pumpkin (Japan 960712)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // needs 'wheel' emulation +GAME( 1996, mpumpkin, 0, cps1_10MHz, mpumpkin, cps_state, init_cps1, ROT0, "Capcom", "Magical Pumpkin: Puroland de Daibouken (Japan 960712)", MACHINE_SUPPORTS_SAVE ) /* Games released on CPS-1 hardware by Mitchell */ diff -Nru mame-0.250+dfsg.1/src/mame/capcom/cps1_v.cpp mame-0.251+dfsg.1/src/mame/capcom/cps1_v.cpp --- mame-0.250+dfsg.1/src/mame/capcom/cps1_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/capcom/cps1_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1452,14 +1452,34 @@ }; +// RCM63B, SFZ63B (megaman, sfzch) are equivalent, should be interchangeable on real PCBs without issue + #define mapper_RCM63B { 0x8000, 0x8000, 0x8000, 0x8000 }, mapper_RCM63B_table static const struct gfx_range mapper_RCM63B_table[] = { // verified from PAL dump: // bank0 = pin 19 (ROMs 1,3) & pin 18 (ROMs 2,4) // bank1 = pin 17 (ROMs 5,7) & pin 16 (ROMs 6,8) - // bank0 = pin 15 (ROMs 10,12) & pin 14 (ROMs 11,13) - // bank1 = pin 13 (ROMs 14,16) & pin 12 (ROMs 15,17) + // bank2 = pin 15 (ROMs 10,12) & pin 14 (ROMs 11,13) + // bank3 = pin 13 (ROMs 14,16) & pin 12 (ROMs 15,17) + + /* type start end bank */ + { GFXTYPE_SPRITES | GFXTYPE_SCROLL1 | GFXTYPE_SCROLL2 | GFXTYPE_SCROLL3, 0x00000, 0x07fff, 0 }, + { GFXTYPE_SPRITES | GFXTYPE_SCROLL1 | GFXTYPE_SCROLL2 | GFXTYPE_SCROLL3, 0x08000, 0x0ffff, 1 }, + { GFXTYPE_SPRITES | GFXTYPE_SCROLL1 | GFXTYPE_SCROLL2 | GFXTYPE_SCROLL3, 0x10000, 0x17fff, 2 }, + { GFXTYPE_SPRITES | GFXTYPE_SCROLL1 | GFXTYPE_SCROLL2 | GFXTYPE_SCROLL3, 0x18000, 0x1ffff, 3 }, + { 0 } +}; + + +#define mapper_SFZ63B { 0x8000, 0x8000, 0x8000, 0x8000 }, mapper_SFZ63B_table +static const struct gfx_range mapper_SFZ63B_table[] = +{ + // verified from PAL dump: + // bank0 = pin 19 (ROMs 1,3) & pin 18 (ROMs 2,4) + // bank1 = pin 17 (ROMs 5,7) & pin 16 (ROMs 6,8) + // bank2 = pin 15 (ROMs 10,12) & pin 14 (ROMs 11,13) + // bank3 = pin 13 (ROMs 14,16) & pin 12 (ROMs 15,17) /* type start end bank */ { GFXTYPE_SPRITES | GFXTYPE_SCROLL1 | GFXTYPE_SCROLL2 | GFXTYPE_SCROLL3, 0x00000, 0x07fff, 0 }, @@ -1551,9 +1571,9 @@ }; -/* unverified, no dump */ -#define mapper_sfzch { 0x20000, 0, 0, 0 }, mapper_sfzch_table -static const struct gfx_range mapper_sfzch_table[] = +// varthb2, slampic2 bootlegs +#define mapper_varthb2 { 0x20000, 0, 0, 0 }, mapper_varthb2_table +static const struct gfx_range mapper_varthb2_table[] = { /* type start end bank */ { GFXTYPE_SPRITES | GFXTYPE_SCROLL1 | GFXTYPE_SCROLL2 | GFXTYPE_SCROLL3, 0x00000, 0x1ffff, 0 }, @@ -1760,6 +1780,7 @@ {"ffightj3", CPS_B_03, mapper_S222B }, // equivalent to S224B {"ffightj4", CPS_B_05, mapper_S222B }, // equivalent to S224B {"ffightjh", CPS_B_01, mapper_S224B }, // wrong, ffightjh hack doesn't even use the S222B PAL, since replaced with a GAL. + {"ffightae", CPS_B_21_DEF, mapper_S224B, 0x36 }, {"1941", CPS_B_05, mapper_YI24B }, {"1941r1", CPS_B_05, mapper_YI24B }, {"1941u", CPS_B_05, mapper_YI24B }, @@ -1821,7 +1842,7 @@ {"sf2qp2", CPS_B_14, mapper_STF29, 0x36 }, {"sf2thndr", CPS_B_17, mapper_STF29, 0x36 }, {"sf2thndr2", CPS_B_17, mapper_STF29, 0x36 }, - {"hkittymp", CPS_B_21_DEF, mapper_sfzch }, // PAL is dumped but not analyzed yet, same as SFZCH + {"mpumpkin", CPS_B_21_DEF, mapper_SFZ63B }, /* from here onwards the CPS-B board has suicide battery and multiply protection */ @@ -1913,7 +1934,7 @@ {"sf2mkot", CPS_B_21_DEF, mapper_S9263B, 0x36, 0, 0, 0x41 }, {"varth", CPS_B_04, mapper_VA24B }, /* CPSB test has been patched out (60=0008) register is also written to, possibly leftover from development */ {"varthb", CPS_B_04, mapper_VA63B, 0, 0, 0, 0x0F }, - {"varthb2", HACK_B_3, mapper_sfzch, 0, 0, 0, 0xc1 }, // unknown gal, other varth mappers don't work (game looks for sprites in >0x8000 unmapped region) + {"varthb2", HACK_B_3, mapper_varthb2, 0, 0, 0, 0xc1 }, // unknown gal, other varth mappers don't work (game looks for sprites in >0x8000 unmapped region) {"varthb3", CPS_B_04, mapper_VA63B, 0, 0, 0, 0x0F }, // TODO: wrong {"varthr1", CPS_B_04, mapper_VA24B }, /* CPSB test has been patched out (60=0008) register is also written to, possibly leftover from development */ {"varthu", CPS_B_04, mapper_VA63B }, /* CPSB test has been patched out (60=0008) register is also written to, possibly leftover from development */ @@ -1948,7 +1969,7 @@ {"slammast", CPS_B_21_QS4, mapper_MB63B }, {"slammastu", CPS_B_21_QS4, mapper_MB63B }, {"slampic", CPS_B_21_QS4, mapper_MB63B }, - {"slampic2", CPS_B_21_QS4, mapper_sfzch }, // default cps2 mapper breaks scroll layers + {"slampic2", CPS_B_21_QS4, mapper_varthb2 }, // default cps2 mapper breaks scroll layers {"mbomberj", CPS_B_21_QS4, mapper_MB63B }, {"mbombrd", CPS_B_21_QS5, mapper_MB63B }, {"mbombrdj", CPS_B_21_QS5, mapper_MB63B }, @@ -1975,9 +1996,9 @@ /* CPS Changer */ - {"sfach", CPS_B_21_DEF, mapper_sfzch }, // wrong, this set uses an unknown PAL, still not dumped - {"sfzbch", CPS_B_21_DEF, mapper_sfzch }, // wrong, this set uses an unknown PAL, still not dumped - {"sfzch", CPS_B_21_DEF, mapper_sfzch }, // wrong, this set uses an unknown PAL, still not dumped + {"sfach", CPS_B_21_DEF, mapper_SFZ63B }, // SFZ63B found on mpumpkin, assumed to be from SFZ + {"sfzbch", CPS_B_21_DEF, mapper_SFZ63B }, + {"sfzch", CPS_B_21_DEF, mapper_SFZ63B }, {"wofch", CPS_B_21_DEF, mapper_TK263B }, /* CPS2 games */ diff -Nru mame-0.250+dfsg.1/src/mame/capcom/gunsmoke.cpp mame-0.251+dfsg.1/src/mame/capcom/gunsmoke.cpp --- mame-0.250+dfsg.1/src/mame/capcom/gunsmoke.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/capcom/gunsmoke.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -798,6 +798,54 @@ ROM_END ROM_START( gunsmokeua ) + ROM_REGION( 0x18000, "maincpu", 0 ) + ROM_LOAD( "gsr_03y.09n", 0x00000, 0x8000, CRC(1b42423f) SHA1(495f6d477ce791e296dd8a170ba28f0b8d2e66d2) ) // Code 0000-7fff + ROM_LOAD( "gsr_04y.10n", 0x08000, 0x8000, CRC(a5ee595b) SHA1(10cd25134f4b19ca32bef63d54c11461b31d3438) ) // Paged code + ROM_LOAD( "gsr_05y.12n", 0x10000, 0x8000, CRC(1c9aca13) SHA1(eb92c373d2241aea4c59248e1b82717733105ac0) ) // Paged code + + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "gs02.14h", 0x00000, 0x8000, CRC(cd7a2c38) SHA1(c76c471f694b76015370f0eacf5350e652f526ff) ) + + ROM_REGION( 0x04000, "chars", 0 ) + ROM_LOAD( "gs01.11f", 0x00000, 0x4000, CRC(b61ece9b) SHA1(eb3fc62644cc5b5a2b9cbe67c393d4a0e2a59ca9) ) + + ROM_REGION( 0x40000, "tiles", 0 ) + ROM_LOAD( "gs13.06c", 0x00000, 0x8000, CRC(f6769fc5) SHA1(d192ec176425327ca4b7e25fc8432fc47837ba29) ) // 32x32 tiles planes 2-3 + ROM_LOAD( "gs12.05c", 0x08000, 0x8000, CRC(d997b78c) SHA1(3b4a9b6f9e57ecfb4ab9734379bd0ee765fd6daa) ) + ROM_LOAD( "gs11.04c", 0x10000, 0x8000, CRC(125ba58e) SHA1(cf6931653cebd051564bed8121ab8713a55095c5) ) + ROM_LOAD( "gs10.02c", 0x18000, 0x8000, CRC(f469c13c) SHA1(54eda52d6fce58771c0adfe2c88292a41d5a9b99) ) + ROM_LOAD( "gs09.06a", 0x20000, 0x8000, CRC(539f182d) SHA1(4190c0adbecc57b92f4d002e121acb77e8c5d8d8) ) // 32x32 tiles planes 0-1 + ROM_LOAD( "gs08.05a", 0x28000, 0x8000, CRC(e87e526d) SHA1(d10068addf30322424a85bbc6382cb762ae3fbe2) ) + ROM_LOAD( "gs07.04a", 0x30000, 0x8000, CRC(4382c0d2) SHA1(8615e62bc57b40d082f6ca211d64f22185bed1fd) ) + ROM_LOAD( "gs06.02a", 0x38000, 0x8000, CRC(4cafe7a6) SHA1(fe501f3a5e9ce9e82e9708f1cd297f4c94ef0f81) ) + + ROM_REGION( 0x40000, "sprites", 0 ) + ROM_LOAD( "gs22.06n", 0x00000, 0x8000, CRC(dc9c508c) SHA1(920505dd4c63b177918feb4e54cca8a7948ec9d9) ) // Sprites planes 2-3 + ROM_LOAD( "gs21.04n", 0x08000, 0x8000, CRC(68883749) SHA1(c7bf2bf49c53feddf8f30b4001dc2d59b52b1c28) ) // Sprites planes 2-3 + ROM_LOAD( "gs20.03n", 0x10000, 0x8000, CRC(0be932ed) SHA1(1c5af5884a23112dbc36579515d1cb497992da2f) ) // Sprites planes 2-3 + ROM_LOAD( "gs19.01n", 0x18000, 0x8000, CRC(63072f93) SHA1(cb3a2729782cf2855558d081fe92d28366228b8e) ) // Sprites planes 2-3 + ROM_LOAD( "gs18.06l", 0x20000, 0x8000, CRC(f69a3c7c) SHA1(e9eb9dfa7d53aa7b728150f91d05bfc3bf6f1e75) ) // Sprites planes 0-1 + ROM_LOAD( "gs17.04l", 0x28000, 0x8000, CRC(4e98562a) SHA1(0341b8a79be1d71a57d0d76ed890e15f9f92259e) ) // Sprites planes 0-1 + ROM_LOAD( "gs16.03l", 0x30000, 0x8000, CRC(0d99c3b3) SHA1(436c566b76f632242448671e3b6319f7d9f65322) ) // Sprites planes 0-1 + ROM_LOAD( "gs15.01l", 0x38000, 0x8000, CRC(7f14270e) SHA1(dd06c333c2ea097e25185a1423cd61e1b7afc42b) ) // Sprites planes 0-1 + + ROM_REGION( 0x8000, "bgtiles", 0 ) + ROM_LOAD( "gs14.11c", 0x00000, 0x8000, CRC(0af4f7eb) SHA1(24a98fdeedeeaf1035b4af52d5a8dd5e47a5e62d) ) + + ROM_REGION( 0x0a00, "proms", 0 ) + ROM_LOAD( "g-01.03b", 0x0000, 0x0100, CRC(02f55589) SHA1(8a3f98304aedf3aba1c08b615bf457752a480edc) ) // red component + ROM_LOAD( "g-02.04b", 0x0100, 0x0100, CRC(e1e36dd9) SHA1(5bd88a35898a2d973045bdde8311aac3a12826de) ) // green component + ROM_LOAD( "g-03.05b", 0x0200, 0x0100, CRC(989399c0) SHA1(e408e391f49ed0c7b9e16479fea44b809440fefc) ) // blue component + ROM_LOAD( "g-04.09d", 0x0300, 0x0100, CRC(906612b5) SHA1(7b727a6200c088538180758320ede84aa7e5b96d) ) // char lookup table + ROM_LOAD( "g-06.14a", 0x0400, 0x0100, CRC(4a9da18b) SHA1(fed3b81b56aab2ed0a21ed1fcebe3f1ae095a13b) ) // tile lookup table + ROM_LOAD( "g-07.15a", 0x0500, 0x0100, CRC(cb9394fc) SHA1(8ad0fde6a8ef8326d2da4b6dbf3b51f5f6c668c8) ) // tile palette bank + ROM_LOAD( "g-09.09f", 0x0600, 0x0100, CRC(3cee181e) SHA1(3f95bdb12391cb9b3673191bda8d09c84b36b4d3) ) // sprite lookup table + ROM_LOAD( "g-08.08f", 0x0700, 0x0100, CRC(ef91cdd2) SHA1(90b9191c9f10a153d64055a4238eb6e15b8c12bc) ) // sprite palette bank + ROM_LOAD( "g-10.02j", 0x0800, 0x0100, CRC(0eaf5158) SHA1(bafd4108708f66cd7b280e47152b108f3e254fc9) ) // video timing (not used) + ROM_LOAD( "g-05.01f", 0x0900, 0x0100, CRC(25c90c2a) SHA1(42893572bab757ec01e181fc418cb911638d37e0) ) // priority? (not used) +ROM_END + +ROM_START( gunsmokeub ) ROM_REGION( 0x18000, "maincpu", 0 ) // has a small extra piece of code at 0x2f00 and a jump to it at 0x297b, otherwise the same as gunsmokeub including the datecode, chip had an 'A' stamped on it, bugfix? ROM_LOAD( "gsr_03a.9n", 0x00000, 0x8000, CRC(2f6e6ad7) SHA1(e9e4a367c240a35a1ba2eeaec9458996f7926f16) ) // Code 0000-7fff ROM_LOAD( "gs04.10n", 0x08000, 0x8000, CRC(8d4b423f) SHA1(149274c2ed1526ca1f419fdf8a24059ff138f7f2) ) // Paged code @@ -845,7 +893,7 @@ ROM_LOAD( "g-05.01f", 0x0900, 0x0100, CRC(25c90c2a) SHA1(42893572bab757ec01e181fc418cb911638d37e0) ) // priority? (not used) ROM_END -ROM_START( gunsmokeub ) +ROM_START( gunsmokeuc ) ROM_REGION( 0x18000, "maincpu", 0 ) ROM_LOAD( "gsr_03.9n", 0x00000, 0x8000, CRC(592f211b) SHA1(8de44b3cafa3d2ce9aba515cf3ec4bac0bcdeb5b) ) // Code 0000-7fff ROM_LOAD( "gs04.10n", 0x08000, 0x8000, CRC(8d4b423f) SHA1(149274c2ed1526ca1f419fdf8a24059ff138f7f2) ) // Paged code @@ -945,18 +993,19 @@ } // anonymous namespace -/* Game Drivers */ +// Game Drivers -// at 0x7E50 in the first ROM is 85113 (project ident code) and the project codename 'Gunman' both stored as ASCII. +// At 0x7E50 in the first ROM is 85113 (project ident code) and the project codename 'Gunman' both stored as ASCII. // Following that at (stored as raw data) is the build date in yyyymmdd format. After that a ROM identification string(?) which I've // left in the comment after each set. // this information is not displayed onscreen -GAME( 1985, gunsmoke, 0, gunsmoke, gunsmoke, gunsmoke_state, empty_init, ROT270, "Capcom", "Gun.Smoke (World, 851115)", MACHINE_SUPPORTS_SAVE ) // GSE_03 -GAME( 1985, gunsmokeb, gunsmoke, gunsmoke, gunsmoke, gunsmoke_state, empty_init, ROT270, "bootleg", "Gun.Smoke (World, 851115) (bootleg)", MACHINE_SUPPORTS_SAVE ) // based on above version, warning message patched out -GAME( 1985, gunsmokej, gunsmoke, gunsmoke, gunsmoke, gunsmoke_state, empty_init, ROT270, "Capcom", "Gun.Smoke (Japan, 851115)", MACHINE_SUPPORTS_SAVE ) // GSJ_03 -GAME( 1986, gunsmokeu, gunsmoke, gunsmoke, gunsmokeu, gunsmoke_state, empty_init, ROT270, "Capcom (Romstar license)", "Gun.Smoke (US, 860408)", MACHINE_SUPPORTS_SAVE ) // GSA_03 -GAME( 1985, gunsmokeua, gunsmoke, gunsmoke, gunsmoke, gunsmoke_state, empty_init, ROT270, "Capcom (Romstar license)", "Gun.Smoke (US, 851115, set 1)", MACHINE_SUPPORTS_SAVE ) // GSR_03 (03A on the chip) -GAME( 1986, gunsmokeub, gunsmoke, gunsmoke, gunsmoke, gunsmoke_state, empty_init, ROT270, "Capcom (Romstar license)", "Gun.Smoke (US, 851115, set 2)", MACHINE_SUPPORTS_SAVE ) // GSR_03 -GAME( 1985, gunsmokeg, gunsmoke, gunsmoke, gunsmoke, gunsmoke_state, empty_init, ROT270, "Capcom", "Gun.Smoke (Germany, censored)", MACHINE_SUPPORTS_SAVE ) // Has 'World' regional warning, but game censored for German market +GAME( 1985, gunsmoke, 0, gunsmoke, gunsmoke, gunsmoke_state, empty_init, ROT270, "Capcom", "Gun.Smoke (World, 1985-11-15)", MACHINE_SUPPORTS_SAVE ) // GSE_03 +GAME( 1985, gunsmokeb, gunsmoke, gunsmoke, gunsmoke, gunsmoke_state, empty_init, ROT270, "bootleg", "Gun.Smoke (World, 1985-11-15) (bootleg)", MACHINE_SUPPORTS_SAVE ) // based on above version, warning message patched out +GAME( 1985, gunsmokej, gunsmoke, gunsmoke, gunsmoke, gunsmoke_state, empty_init, ROT270, "Capcom", "Gun.Smoke (Japan, 1985-11-15)", MACHINE_SUPPORTS_SAVE ) // GSJ_03 +GAME( 1986, gunsmokeu, gunsmoke, gunsmoke, gunsmokeu, gunsmoke_state, empty_init, ROT270, "Capcom (Romstar license)", "Gun.Smoke (USA and Canada, 1986-04-08)", MACHINE_SUPPORTS_SAVE ) // GSA_03 +GAME( 1985, gunsmokeua, gunsmoke, gunsmoke, gunsmoke, gunsmoke_state, empty_init, ROT270, "Capcom (Romstar license)", "Gun.Smoke (USA and Canada, 1986-01-20)", MACHINE_SUPPORTS_SAVE ) // GSA_03Y (GSR 03Y on the chip) +GAME( 1985, gunsmokeub, gunsmoke, gunsmoke, gunsmoke, gunsmoke_state, empty_init, ROT270, "Capcom (Romstar license)", "Gun.Smoke (USA and Canada, 1985-11-15, set 1)", MACHINE_SUPPORTS_SAVE ) // GSR_03 (03A on the chip) +GAME( 1985, gunsmokeuc, gunsmoke, gunsmoke, gunsmoke, gunsmoke_state, empty_init, ROT270, "Capcom (Romstar license)", "Gun.Smoke (USA and Canada, 1985-11-15, set 2)", MACHINE_SUPPORTS_SAVE ) // GSR_03 +GAME( 1985, gunsmokeg, gunsmoke, gunsmoke, gunsmoke, gunsmoke_state, empty_init, ROT270, "Capcom", "Gun.Smoke (Germany, 1985-11-15, censored)", MACHINE_SUPPORTS_SAVE ) // GSG_03, has 'World' regional warning, but game censored for German market diff -Nru mame-0.250+dfsg.1/src/mame/casio/rz1.cpp mame-0.251+dfsg.1/src/mame/casio/rz1.cpp --- mame-0.250+dfsg.1/src/mame/casio/rz1.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/casio/rz1.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -61,7 +61,6 @@ m_pg(*this, "pg%u", 0U), m_cassette(*this, "cassette"), m_linein(*this, "linein"), - m_samples(*this, "samples%u", 0U), m_keys(*this, "kc%u", 0U), m_foot(*this, "foot"), m_led_sampling(*this, "led_sampling"), @@ -85,7 +84,6 @@ required_device_array m_pg; required_device m_cassette; required_device m_linein; - required_memory_region_array<2> m_samples; required_ioport_array<8> m_keys; required_ioport m_foot; @@ -95,6 +93,8 @@ output_finder<> m_led_startstop; void map(address_map &map); + void pg0_map(address_map &map); + void pg1_map(address_map &map); uint8_t key_r(); @@ -102,9 +102,7 @@ HD44780_PIXEL_UPDATE(lcd_pixel_update); void leds_w(uint8_t data); - uint8_t upd934g_c_data_r(offs_t offset); void upd934g_c_w(offs_t offset, uint8_t data); - uint8_t upd934g_b_data_r(offs_t offset); void upd934g_b_w(offs_t offset, uint8_t data); uint8_t analog_r(); @@ -136,6 +134,18 @@ map(0xe000, 0xe001).w(FUNC(rz1_state::leds_w)); } +void rz1_state::pg0_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); + map(0x8000, 0x9fff).ram().share("sample1"); + map(0xa000, 0xbfff).ram().share("sample2"); +} + +void rz1_state::pg1_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); +} + //************************************************************************** // INPUT PORT DEFINITIONS @@ -277,27 +287,6 @@ // AUDIO EMULATION //************************************************************************** -uint8_t rz1_state::upd934g_c_data_r(offs_t offset) -{ - if (offset < 0x8000) - return m_samples[1]->base()[offset]; - else - { - if (offset < 0xc000) - return m_maincpu->space(AS_PROGRAM).read_byte(offset + 0x2000); - else - return 0; - } -} - -uint8_t rz1_state::upd934g_b_data_r(offs_t offset) -{ - if (offset < 0x8000) - return m_samples[0]->base()[offset]; - else - return 0; -} - void rz1_state::upd934g_c_w(offs_t offset, uint8_t data) { m_pg[0]->write(offset >> 8, data); @@ -450,10 +439,10 @@ // audio hardware SPEAKER(config, "speaker").front_center(); UPD934G(config, m_pg[0], 1333000); - m_pg[0]->data_callback().set(FUNC(rz1_state::upd934g_c_data_r)); + m_pg[0]->set_addrmap(0, &rz1_state::pg0_map); m_pg[0]->add_route(ALL_OUTPUTS, "speaker", 1.0); UPD934G(config, m_pg[1], 1280000); - m_pg[1]->data_callback().set(FUNC(rz1_state::upd934g_b_data_r)); + m_pg[1]->set_addrmap(0, &rz1_state::pg1_map); m_pg[1]->add_route(ALL_OUTPUTS, "speaker", 1.0); // midi @@ -493,13 +482,13 @@ ROM_REGION(0x4000, "program", 0) ROM_LOAD("program.bin", 0x0000, 0x4000, CRC(b44b2652) SHA1(b77f8daece9adb177b6ce1ef518fc3238b8c0a9c)) - // Toms 1~3, Kick, Snare, Rimshot, Closed Hi-Hat, Open Hi-Hat and Metronome Click - ROM_REGION(0x8000, "samples0", 0) - ROM_LOAD("sound_a.cm5", 0x0000, 0x8000, CRC(c643ff24) SHA1(e886314d22a9a5473bfa2cb237ecafcf0daedfc1)) - // Clap, Ride, Cowbell and Crash - ROM_REGION(0x8000, "samples1", 0) + ROM_REGION(0x8000, "pg0", 0) ROM_LOAD("sound_b.cm6", 0x0000, 0x8000, CRC(ee5b703e) SHA1(cbf2e92c68901f236678d704e9e695a5c84ff49e)) + + // Toms 1~3, Kick, Snare, Rimshot, Closed Hi-Hat, Open Hi-Hat and Metronome Click + ROM_REGION(0x8000, "pg1", 0) + ROM_LOAD("sound_a.cm5", 0x0000, 0x8000, CRC(c643ff24) SHA1(e886314d22a9a5473bfa2cb237ecafcf0daedfc1)) ROM_END diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_armora.cpp mame-0.251+dfsg.1/src/mame/cinematronics/nl_armora.cpp --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_armora.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_armora.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles // diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_armora.h mame-0.251+dfsg.1/src/mame/cinematronics/nl_armora.h --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_armora.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_armora.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_ARMORA_H #define MAME_AUDIO_NL_ARMORA_H diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_barrier.cpp mame-0.251+dfsg.1/src/mame/cinematronics/nl_barrier.cpp --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_barrier.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_barrier.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles // diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_barrier.h mame-0.251+dfsg.1/src/mame/cinematronics/nl_barrier.h --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_barrier.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_barrier.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_BARRIER_H #define MAME_AUDIO_NL_BARRIER_H diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_boxingb.cpp mame-0.251+dfsg.1/src/mame/cinematronics/nl_boxingb.cpp --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_boxingb.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_boxingb.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles // diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_boxingb.h mame-0.251+dfsg.1/src/mame/cinematronics/nl_boxingb.h --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_boxingb.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_boxingb.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_BOXINGB_H #define MAME_AUDIO_NL_BOXINGB_H diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_cinemat_common.h mame-0.251+dfsg.1/src/mame/cinematronics/nl_cinemat_common.h --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_cinemat_common.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_cinemat_common.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles,Couriersud #ifndef MAME_AUDIO_NL_CINEMAT_COMMON_H #define MAME_AUDIO_NL_CINEMAT_COMMON_H diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_ripoff.cpp mame-0.251+dfsg.1/src/mame/cinematronics/nl_ripoff.cpp --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_ripoff.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_ripoff.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles // diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_ripoff.h mame-0.251+dfsg.1/src/mame/cinematronics/nl_ripoff.h --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_ripoff.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_ripoff.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_RIPOFF_H #define MAME_AUDIO_NL_RIPOFF_H diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_solarq.cpp mame-0.251+dfsg.1/src/mame/cinematronics/nl_solarq.cpp --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_solarq.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_solarq.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles // diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_solarq.h mame-0.251+dfsg.1/src/mame/cinematronics/nl_solarq.h --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_solarq.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_solarq.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_SOLARQ_H #define MAME_AUDIO_NL_SOLARQ_H diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_spacewar.cpp mame-0.251+dfsg.1/src/mame/cinematronics/nl_spacewar.cpp --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_spacewar.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_spacewar.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles // diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_spacewar.h mame-0.251+dfsg.1/src/mame/cinematronics/nl_spacewar.h --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_spacewar.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_spacewar.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_SPACEWAR_H #define MAME_AUDIO_NL_SPACEWAR_H diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_speedfrk.cpp mame-0.251+dfsg.1/src/mame/cinematronics/nl_speedfrk.cpp --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_speedfrk.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_speedfrk.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles // diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_speedfrk.h mame-0.251+dfsg.1/src/mame/cinematronics/nl_speedfrk.h --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_speedfrk.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_speedfrk.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_SPEEDFRK_H #define MAME_AUDIO_NL_SPEEDFRK_H diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_starcas.cpp mame-0.251+dfsg.1/src/mame/cinematronics/nl_starcas.cpp --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_starcas.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_starcas.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles //NL_CONTAINS starcas wotw diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_starcas.h mame-0.251+dfsg.1/src/mame/cinematronics/nl_starcas.h --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_starcas.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_starcas.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_STARCAS_H #define MAME_AUDIO_NL_STARCAS_H diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_starhawk.cpp mame-0.251+dfsg.1/src/mame/cinematronics/nl_starhawk.cpp --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_starhawk.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_starhawk.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles // diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_starhawk.h mame-0.251+dfsg.1/src/mame/cinematronics/nl_starhawk.h --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_starhawk.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_starhawk.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_STARHAWK_H #define MAME_AUDIO_NL_STARHAWK_H diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_sundance.cpp mame-0.251+dfsg.1/src/mame/cinematronics/nl_sundance.cpp --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_sundance.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_sundance.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles // diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_sundance.h mame-0.251+dfsg.1/src/mame/cinematronics/nl_sundance.h --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_sundance.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_sundance.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_SUNDANCE_H #define MAME_AUDIO_NL_SUNDANCE_H diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_tailg.cpp mame-0.251+dfsg.1/src/mame/cinematronics/nl_tailg.cpp --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_tailg.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_tailg.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles // diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_tailg.h mame-0.251+dfsg.1/src/mame/cinematronics/nl_tailg.h --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_tailg.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_tailg.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_TAILG_H #define MAME_AUDIO_NL_TAILG_H diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_warrior.cpp mame-0.251+dfsg.1/src/mame/cinematronics/nl_warrior.cpp --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_warrior.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_warrior.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles // diff -Nru mame-0.250+dfsg.1/src/mame/cinematronics/nl_warrior.h mame-0.251+dfsg.1/src/mame/cinematronics/nl_warrior.h --- mame-0.250+dfsg.1/src/mame/cinematronics/nl_warrior.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cinematronics/nl_warrior.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_WARRIOR_H #define MAME_AUDIO_NL_WARRIOR_H diff -Nru mame-0.250+dfsg.1/src/mame/cirsa/neptunp2.cpp mame-0.251+dfsg.1/src/mame/cirsa/neptunp2.cpp --- mame-0.250+dfsg.1/src/mame/cirsa/neptunp2.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/cirsa/neptunp2.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -48,6 +48,10 @@ Unidesa/Cirsa/Europea Oklahoma Express Unidesa/Cirsa/Europea Ruleta de la Fortuna +The "960606-3" version of this hardware was used in several fruit +machines released for the UK market by BGT Gaming Technology Ltd +(a division of Cirsa?). + CIRSA / UNIDESA 960606-5 CPU BOARD _________________________________________________________________ @@ -501,6 +505,71 @@ ROM_LOAD( "pat_063_tibpal16l8-25cn.bin", 0x000, 0x104, NO_DUMP ) // "PAT 063", protected ROM_END +ROM_START( bg_ddb ) + ROM_REGION( 0x100000, "maincpu", 0 ) + ROM_LOAD( "nkyky_0-15_5", 0x0000, 0x080000, CRC(ac4a5094) SHA1(db4eab0be63e5daddca603af290debd8e929757e) ) + ROM_RELOAD(0x80000,0x80000) + + ROM_REGION( 0x100000, "oki", ROMREGION_ERASE00 ) + /* there were sound roms in the 'CoinWorld Ding Dong Bells' set which might belong here, otherwise + roms are probably missing */ + + ROM_REGION( 0x800, "eeprom", 0 ) + ROM_LOAD( "24lc16b.u10", 0x000, 0x800, NO_DUMP ) + + ROM_REGION( 0x800, "counters", 0 ) + ROM_LOAD( "cirsa_cs-4.bin", 0x000, 0x800, NO_DUMP ) + + ROM_REGION( 0x104, "plds", 0 ) + ROM_LOAD( "pat.u6", 0x000, 0x104, NO_DUMP ) +ROM_END + +ROM_START( bg_barmy ) + ROM_REGION( 0x100000, "maincpu", 0 ) + ROM_LOAD( "barmyarmy_ndp16", 0x0000, 0x080000, CRC(ae488f48) SHA1(c417a3d1a79a0ca54ade2d9a4f6d70467e6c5cb4) ) + ROM_RELOAD(0x80000,0x80000) + + ROM_REGION( 0x100000, "oki", 0 ) + ROM_LOAD( "barmyarmy_sound1", 0x000000, 0x080000, CRC(3530d77c) SHA1(c7a42f698090fcd9644f9929b92935cf85183d23) ) + ROM_LOAD( "barmyarmy_sound2", 0x080000, 0x080000, CRC(48d4c2f3) SHA1(71e64e3e76a55275484a7c72ce2a17232b27a4eb) ) +ROM_END + +ROM_START( bg_max ) + ROM_REGION( 0x100000, "maincpu", 0 ) + ROM_LOAD( "max_a_million_v014", 0x0000, 0x080000, CRC(32fe9c3b) SHA1(77519657e6e478b3cd1bf2ad2aecc6e191abe554) ) + ROM_RELOAD(0x80000,0x80000) + + ROM_REGION( 0x100000, "oki", ROMREGION_ERASE00 ) + /* probably missing */ + + ROM_REGION( 0x800, "eeprom", 0 ) + ROM_LOAD( "24lc16b.u10", 0x000, 0x800, NO_DUMP ) + + ROM_REGION( 0x800, "counters", 0 ) + ROM_LOAD( "cirsa_cs-4.bin", 0x000, 0x800, NO_DUMP ) + + ROM_REGION( 0x104, "plds", 0 ) + ROM_LOAD( "pat.u6", 0x000, 0x104, NO_DUMP ) +ROM_END + +ROM_START( bg_maxa ) + ROM_REGION( 0x100000, "maincpu", 0 ) + ROM_LOAD( "max_a_million_v114", 0x0000, 0x080000, CRC(a66851e9) SHA1(733ec52fa01615e740ebd40fba4a88efe9d9f24f) ) + ROM_RELOAD(0x80000,0x80000) + + ROM_REGION( 0x100000, "oki", ROMREGION_ERASE00 ) + /* probably missing */ + + ROM_REGION( 0x800, "eeprom", 0 ) + ROM_LOAD( "24lc16b.u10", 0x000, 0x800, NO_DUMP ) + + ROM_REGION( 0x800, "counters", 0 ) + ROM_LOAD( "cirsa_cs-4.bin", 0x000, 0x800, NO_DUMP ) + + ROM_REGION( 0x104, "plds", 0 ) + ROM_LOAD( "pat.u6", 0x000, 0x104, NO_DUMP ) +ROM_END + } // Anonymous namespace // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS @@ -515,3 +584,9 @@ GAME( 1999, rockroll, 0, neptunp2_no_video, c960606, neptunp2_state, empty_init, ROT0, "Unidesa/Cirsa", "Rock 'n' Roll", MACHINE_IS_SKELETON_MECHANICAL ) // Year taken from parts' manual and sticker on PCB GAME( 2001?, unk960606, 0, neptunp2_no_video, c960606, neptunp2_state, empty_init, ROT0, "Unidesa/Cirsa", "unknown 960606-5 based machine (set 1)", MACHINE_IS_SKELETON_MECHANICAL ) // Year taken from sticker on PCB GAME( 2001?, unk960606b, 0, neptunp2_no_video, c960606, neptunp2_state, empty_init, ROT0, "Unidesa/Cirsa/Europea", "unknown 960606-5 based machine (set 2)", MACHINE_IS_SKELETON_MECHANICAL ) // Year taken from sticker on PCB + +// BGT Fruit Machines +GAME( 199?, bg_ddb, 0, neptunp2_no_video, c960606, neptunp2_state, empty_init, ROT0, "BGT", "Ding Dong Bells (BGT)", MACHINE_IS_SKELETON_MECHANICAL ) +GAME( 199?, bg_barmy, 0, neptunp2_no_video, c960606, neptunp2_state, empty_init, ROT0, "BGT", "Barmy Army (BGT)", MACHINE_IS_SKELETON_MECHANICAL ) +GAME( 199?, bg_max, 0, neptunp2_no_video, c960606, neptunp2_state, empty_init, ROT0, "BGT", "Max A Million (BGT) (set 1)", MACHINE_IS_SKELETON_MECHANICAL ) +GAME( 199?, bg_maxa, bg_max,neptunp2_no_video, c960606, neptunp2_state, empty_init, ROT0, "BGT", "Max A Million (BGT) (set 2)", MACHINE_IS_SKELETON_MECHANICAL ) diff -Nru mame-0.250+dfsg.1/src/mame/comad/zerozone.cpp mame-0.251+dfsg.1/src/mame/comad/zerozone.cpp --- mame-0.250+dfsg.1/src/mame/comad/zerozone.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/comad/zerozone.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -27,6 +27,30 @@ TODO: * adpcm samples don't seem to be playing at the proper tempo - too fast? +EDIT00 ++-------------------------------+ +|AMP PAL 1 Z80A 6 | +| M6295 GM76C28 | +| 2 A1020B | +| 3 GM76C28 | +|J GM76C28 GM76C28 | +|A GM76C28 | +|M 16MHz| +|M DSW1 62256 4 | +|A 62256 5 | +| DSW2 MC68000P10 10MHz | ++-------------------------------+ + + CPU: Motorola MC68000P10 +Sound: GoldStar Z8400A + M6295 branded as AR17961 + TDA1033 AMP +Video: Actel A1020B PL84C + OSC: 16MHz & 10MHz + RAM: Hyundia HY62256ALP1-10 32Kx8bit CMOS SRAM (x2) + GoldStar GM76C28K-10 2Kx8bit CMOS SRAM (x5) + GAL: Lattice GAL16V10B-25LP + DSW: Two 8 switch dipswitches *********************************************************************************/ @@ -267,7 +291,7 @@ M68000(config, m_maincpu, 10_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &zerozone_state::main_map); - Z80(config, m_audiocpu, 16_MHz_XTAL / 16); // divisor not verified, 1 MHz ??? + Z80(config, m_audiocpu, 16_MHz_XTAL / 4); // Z80A clocked at either 2.5MHz (10MH/4) or 4MHz (16MHz/4) - not verified m_audiocpu->set_addrmap(AS_PROGRAM, &zerozone_state::sound_map); config.set_maximum_quantum(attotime::from_hz(600)); @@ -291,7 +315,7 @@ GENERIC_LATCH_8(config, m_soundlatch); - okim6295_device &oki(OKIM6295(config, "oki", 1'056'000, okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified + okim6295_device &oki(OKIM6295(config, "oki", 16_MHz_XTAL / 16, okim6295_device::PIN7_HIGH)); // 1MHz - clock frequency & pin 7 not verified oki.add_route(ALL_OUTPUTS, "mono", 1.0); } diff -Nru mame-0.250+dfsg.1/src/mame/commodore/mps1230.cpp mame-0.251+dfsg.1/src/mame/commodore/mps1230.cpp --- mame-0.250+dfsg.1/src/mame/commodore/mps1230.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/commodore/mps1230.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -173,5 +173,5 @@ ROM_END /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */ -COMP( 1986, mps1000, 0, 0, mps1000, mps1230, mps1230_state, empty_init, "Commodore Business Machines", "MPS-1000 Printer", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_TYPE_OTHER ) -COMP( 1988, mps1230, 0, 0, mps1230, mps1230, mps1230_state, empty_init, "Commodore Business Machines", "MPS-1230 NLQ Printer", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_TYPE_OTHER ) +SYST( 1986, mps1000, 0, 0, mps1000, mps1230, mps1230_state, empty_init, "Commodore Business Machines", "MPS-1000 Printer", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW ) +SYST( 1988, mps1230, 0, 0, mps1230, mps1230, mps1230_state, empty_init, "Commodore Business Machines", "MPS-1230 NLQ Printer", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW ) diff -Nru mame-0.250+dfsg.1/src/mame/dataeast/decocass.cpp mame-0.251+dfsg.1/src/mame/dataeast/decocass.cpp --- mame-0.250+dfsg.1/src/mame/dataeast/decocass.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/dataeast/decocass.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -2,14 +2,6 @@ // copyright-holders:Juergen Buchmueller, David Haywood /******************************************************************************* - DECO Cassette System driver - by Juergen Buchmueller - - with contributions by: David Widel, Nicola Salmoria, Aaron Giles, Brian Troha, - Fabio Priuli, Lord Nightmare, The Dumping Union, Team Japump!!!, Hau, - Jean-Francois Del Nero, Omar Cornut, Game Preservation Society, Joseph Redon - - The DECO cassette system consists of three PCBs in a card cage: **** Early boardset: (1980-1983) (proms unknown for this boardset, no schematics for this boardset) **** @@ -811,6 +803,19 @@ /* other dips not verified */ INPUT_PORTS_END + +static INPUT_PORTS_START( cnebula ) + PORT_INCLUDE( decocass ) + + PORT_MODIFY("DSW2") + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2") + PORT_DIPSETTING( 0x03, "3" ) + PORT_DIPSETTING( 0x02, "4" ) + PORT_DIPSETTING( 0x01, "5" ) + PORT_DIPSETTING( 0x00, "6" ) + /* other dips not verified */ +INPUT_PORTS_END + static INPUT_PORTS_START( cluckypo ) PORT_INCLUDE( decocass ) @@ -1080,6 +1085,15 @@ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cdsteljn) } +void decocass_type1_state::cnebula(machine_config &config) +{ + decocass(config); + + /* basic machine hardware */ + MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cnebula) +} + + void decocass_type1_state::cmanhat(machine_config &config) { decocass(config); @@ -1336,98 +1350,77 @@ /************ Version A bios roms *************/ -/* v0a.7e, New boardset bios, country code A */ -#define DECOCASS_BIOS_A_MAINCPU \ - ROM_SYSTEM_BIOS( 0, "a", "Bios A (Japan)" ) \ - ROM_LOAD_BIOS( 0, "v0a-.7e", 0xf000, 0x1000, CRC(3d33ac34) SHA1(909d59e7a993affd10224402b4370e82a5f5545c) ) /* from RMS-8 board: 2732 EPROM @7E w/'V0A-' label (has HDRA01HDR string inside it), bios code */ -#define DECOCASS_BIOS_A_AUDIOCPU \ - ROM_LOAD_BIOS( 0, "v1-.5a", 0xf800, 0x0800, CRC(b66b2c2a) SHA1(0097f38beb4872e735e560148052e258a26b08fd) ) /* from RMS-8 board: 2716 eprom @5A w/V1- label, contains audio cpu code */ -#define DECOCASS_BIOS_A_PROMS \ - ROM_LOAD_BIOS( 0, "v2.3m", 0x0000, 0x0020, CRC(238fdb40) SHA1(b88e8fabb82092105c3828154608ea067acbf2e5) ) /* from DSP-8 board: M3-7603-5 (82s123 equiv, 32x8 TS) PROM @3M w/'V2' stamp, unknown purpose (gfx related: row/interrupt/vblank related? vertical counter related) */ \ - ROM_LOAD_BIOS( 0, "v4.10d", 0x0020, 0x0020, CRC(3b5836b4) SHA1(b630bb277d9ec09d46ef26b944014dd6165b35d8) ) /* from DSP-8 board: M3-7603-5 (82s123 equiv, 32x8 TS) PROM @10D w/'V4' stamp, unknown purpose (gfx related: tile banking? horizontal counter related) */ \ - ROM_LOAD_BIOS( 0, "v3.3j", 0x0040, 0x0020, CRC(51eef657) SHA1(eaedce5caf55624ad6ae706aedf82c5717c60f1f) ) /* from RMS-8 board: M3-7603-5 (82s123 equiv, 32x8 TS) PROM @3J w/'V3' stamp, handles DRAM banking and timing */ - -/* Old boardset bios, country code A (for Japan), 2x 2716 EPROM, MD labbeled as RMS-3D and MT as RMS-3T, region code (letter) is (not always) inserted after "-" */ \ -#define DECOCASS_BIOS_A0_MAINCPU \ - ROM_SYSTEM_BIOS( 1, "a0", "Bios A (Japan, older)" ) \ - ROM_LOAD_BIOS( 1, "dsp-3_p0-a.m9", 0xf000, 0x0800, CRC(2541e34b) SHA1(4f983513dbae1350c83a433dea77a4465748b9c6) ) \ - ROM_LOAD_BIOS( 1, "dsp-3_p1-.l9", 0xf800, 0x0800, CRC(3bfff5f3) SHA1(4e9437cb1b76d64da6b37f01bd6e879fb399e8ce) ) -#define DECOCASS_BIOS_A0_AUDIOCPU \ - ROM_LOAD_BIOS( 1, "rms-3_p2-.c9", 0xfc00, 0x0400, CRC(6c4a891f) SHA1(5c00cf8b1accfdbb1d61e9b3f6db1594dfbc608b) ) /* 2708 EPROM, contains audio cpu code */ -#define DECOCASS_BIOS_A0_PROMS \ - ROM_LOAD_BIOS( 1, "dsp-3_p3-.e5", 0x0000, 0x0020, CRC(539a5a64) SHA1(7b7d3cc58ac6f95242240c97046e770d2fd20c96) ) /* M3-7603-5 (82s123 equiv, 32x8 TS) PROM, unknown purpose (gfx related: row/interrupt/vblank related? vertical counter related) */ \ - ROM_LOAD_BIOS( 1, "rms-3_p4-.f6", 0x0020, 0x0020, CRC(9014c0fd) SHA1(7405d39a5f4fcad821448ddaf6bd4e27c0c9e145) ) /* M3-7603-5 (82s123 equiv, 32x8 TS) PROM, unknown purpose (gfx related: tile banking? horizontal counter related) */ \ - ROM_LOAD_BIOS( 1, "dsp-3_p5-.m4", 0x0040, 0x0020, CRC(e52089a0) SHA1(d85c17809b089c6977ee9571f976af6f107fd4d3) ) /* M3-7603-5 (82s123 equiv, 32x8 TS) PROM, handles DRAM banking and timing */ \ - -/************ Version B bios roms *************/ - -/* rms8.7e, New boardset bios, country code B */ \ -#define DECOCASS_BIOS_B_MAINCPU \ - ROM_SYSTEM_BIOS( 2, "b", "Bios B (USA)" ) \ - ROM_LOAD_BIOS( 2, "v0b-.7e", 0xf000, 0x1000, CRC(23d929b7) SHA1(063f83020ba3d6f43ab8471f95ca919767b93aa4) ) /* from RMS-8 board: 2732 EPROM @7E w/'V0B-' label (has HDRB01HDR string inside it), bios code */ -#define DECOCASS_BIOS_B_AUDIOCPU \ - ROM_LOAD_BIOS( 2, "v1-.5a", 0xf800, 0x0800, CRC(b66b2c2a) SHA1(0097f38beb4872e735e560148052e258a26b08fd) ) /* from RMS-8 board: 2716 eprom @5A w/V1- label, contains audio cpu code */ -#define DECOCASS_BIOS_B_PROMS \ - ROM_LOAD_BIOS( 2, "v2.3m", 0x0000, 0x0020, CRC(238fdb40) SHA1(b88e8fabb82092105c3828154608ea067acbf2e5) ) /* from DSP-8 board: M3-7603-5 (82s123 equiv, 32x8 TS) PROM @3M w/'V2' stamp, unknown purpose (gfx related: row/interrupt/vblank related? vertical counter related) */ \ - ROM_LOAD_BIOS( 2, "v4.10d", 0x0020, 0x0020, CRC(3b5836b4) SHA1(b630bb277d9ec09d46ef26b944014dd6165b35d8) ) /* from DSP-8 board: M3-7603-5 (82s123 equiv, 32x8 TS) PROM @10D w/'V4' stamp, unknown purpose (gfx related: tile banking? horizontal counter related) */ \ - ROM_LOAD_BIOS( 2, "v3.3j", 0x0040, 0x0020, CRC(51eef657) SHA1(eaedce5caf55624ad6ae706aedf82c5717c60f1f) ) /* from RMS-8 board: M3-7603-5 (82s123 equiv, 32x8 TS) PROM @3J w/'V3' stamp, handles DRAM banking and timing */ - -/* Old boardset bios, version B for USA, 2x 2716 EPROM, MD labbeled as RMS-3D and MT as RMS-3T, region code (letter) is (not always) inserted after "-" */ \ -/* dsp3.p0b/p1b, Old boardset bios, country code B?; from DSP-3 board? has HDRB01x string in it, 2x 2716 EPROM? */ \ -#define DECOCASS_BIOS_B0_MAINCPU \ - ROM_SYSTEM_BIOS( 3, "b0", "Bios B (USA, older)" ) \ - ROM_LOAD_BIOS( 3, "dsp-3_p0-b.m9", 0xf000, 0x0800, CRC(b67a91d9) SHA1(681c040be0f0ed1ba0a50161b36d0ad8e1c8c5cb) ) \ - ROM_LOAD_BIOS( 3, "dsp-3_p1-.l9", 0xf800, 0x0800, CRC(3bfff5f3) SHA1(4e9437cb1b76d64da6b37f01bd6e879fb399e8ce) ) -#define DECOCASS_BIOS_B0_AUDIOCPU \ - ROM_LOAD_BIOS( 3, "rms-3_p2-.c9", 0xfc00, 0x0400, CRC(6c4a891f) SHA1(5c00cf8b1accfdbb1d61e9b3f6db1594dfbc608b) ) /* 2708 EPROM, contains audio cpu code */ -#define DECOCASS_BIOS_B0_PROMS \ - ROM_LOAD_BIOS( 3, "dsp-3_p3-.e5", 0x0000, 0x0020, CRC(539a5a64) SHA1(7b7d3cc58ac6f95242240c97046e770d2fd20c96) ) /* M3-7603-5 (82s123 equiv, 32x8 TS) PROM, unknown purpose (gfx related: row/interrupt/vblank related? vertical counter related) */ \ - ROM_LOAD_BIOS( 3, "rms-3_p4-.f6", 0x0020, 0x0020, CRC(9014c0fd) SHA1(7405d39a5f4fcad821448ddaf6bd4e27c0c9e145) ) /* M3-7603-5 (82s123 equiv, 32x8 TS) PROM, unknown purpose (gfx related: tile banking? horizontal counter related) */ \ - ROM_LOAD_BIOS( 3, "dsp-3_p5-.m4", 0x0040, 0x0020, CRC(e52089a0) SHA1(d85c17809b089c6977ee9571f976af6f107fd4d3) ) /* M3-7603-5 (82s123 equiv, 32x8 TS) PROM, handles DRAM banking and timing */ \ - -/* rms8.7e, New boardset bios, country code D */ \ -#define DECOCASS_BIOS_D_MAINCPU \ - ROM_SYSTEM_BIOS( 4, "d", "Bios D (Europe?)" ) \ - ROM_LOAD_BIOS( 4, "v0d-.7e", 0xf000, 0x1000, CRC(1e0c22b1) SHA1(5fec8fef500bbebc13d0173406afc55235d3affb) ) /* handcrafted (single byte changed) because ctisland3 requires region D */ -#define DECOCASS_BIOS_D_AUDIOCPU \ - ROM_LOAD_BIOS( 4, "v1-.5a", 0xf800, 0x0800, CRC(b66b2c2a) SHA1(0097f38beb4872e735e560148052e258a26b08fd) ) /* from RMS-8 board: 2716 eprom @5A w/V1- label, contains audio cpu code */ -#define DECOCASS_BIOS_D_PROMS \ - ROM_LOAD_BIOS( 4, "v2.3m", 0x0000, 0x0020, CRC(238fdb40) SHA1(b88e8fabb82092105c3828154608ea067acbf2e5) ) /* from DSP-8 board: M3-7603-5 (82s123 equiv, 32x8 TS) PROM @3M w/'V2' stamp, unknown purpose (gfx related: row/interrupt/vblank related? vertical counter related) */ \ - ROM_LOAD_BIOS( 4, "v4.10d", 0x0020, 0x0020, CRC(3b5836b4) SHA1(b630bb277d9ec09d46ef26b944014dd6165b35d8) ) /* from DSP-8 board: M3-7603-5 (82s123 equiv, 32x8 TS) PROM @10D w/'V4' stamp, unknown purpose (gfx related: tile banking? horizontal counter related) */ \ - ROM_LOAD_BIOS( 4, "v3.3j", 0x0040, 0x0020, CRC(51eef657) SHA1(eaedce5caf55624ad6ae706aedf82c5717c60f1f) ) /* from RMS-8 board: M3-7603-5 (82s123 equiv, 32x8 TS) PROM @3J w/'V3' stamp, handles DRAM banking and timing */ - +#define DECOCASS_BIOS_AUDIOCPU(biosindex) \ + ROM_LOAD_BIOS( biosindex, "v1-.5a", 0xf800, 0x0800, CRC(b66b2c2a) SHA1(0097f38beb4872e735e560148052e258a26b08fd) ) /* from RMS-8 board: 2716 eprom @5A w/V1- label, contains audio cpu code */ +#define DECOCASS_BIOS_PROMS(biosindex) \ + ROM_LOAD_BIOS( biosindex, "v2.3m", 0x0000, 0x0020, CRC(238fdb40) SHA1(b88e8fabb82092105c3828154608ea067acbf2e5) ) /* from DSP-8 board: M3-7603-5 (82s123 equiv, 32x8 TS) PROM @3M w/'V2' stamp, unknown purpose (gfx related: row/interrupt/vblank related? vertical counter related) */ \ + ROM_LOAD_BIOS( biosindex, "v4.10d", 0x0020, 0x0020, CRC(3b5836b4) SHA1(b630bb277d9ec09d46ef26b944014dd6165b35d8) ) /* from DSP-8 board: M3-7603-5 (82s123 equiv, 32x8 TS) PROM @10D w/'V4' stamp, unknown purpose (gfx related: tile banking? horizontal counter related) */ \ + ROM_LOAD_BIOS( biosindex, "v3.3j", 0x0040, 0x0020, CRC(51eef657) SHA1(eaedce5caf55624ad6ae706aedf82c5717c60f1f) ) /* from RMS-8 board: M3-7603-5 (82s123 equiv, 32x8 TS) PROM @3J w/'V3' stamp, handles DRAM banking and timing */ + +#define DECOCASS_BIOS_AUDIOCPU_OLD(biosindex) \ + ROM_LOAD_BIOS( biosindex, "rms-3_p2-.c9", 0xfc00, 0x0400, CRC(6c4a891f) SHA1(5c00cf8b1accfdbb1d61e9b3f6db1594dfbc608b) ) /* 2708 EPROM, contains audio cpu code */ + +#define DECOCASS_BIOS_PROMS_OLD(biosindex) \ + ROM_LOAD_BIOS( biosindex, "dsp-3_p3-.e5", 0x0000, 0x0020, CRC(539a5a64) SHA1(7b7d3cc58ac6f95242240c97046e770d2fd20c96) ) /* M3-7603-5 (82s123 equiv, 32x8 TS) PROM, unknown purpose (gfx related: row/interrupt/vblank related? vertical counter related) */ \ + ROM_LOAD_BIOS( biosindex, "rms-3_p4-.f6", 0x0020, 0x0020, CRC(9014c0fd) SHA1(7405d39a5f4fcad821448ddaf6bd4e27c0c9e145) ) /* M3-7603-5 (82s123 equiv, 32x8 TS) PROM, unknown purpose (gfx related: tile banking? horizontal counter related) */ \ + ROM_LOAD_BIOS( biosindex, "dsp-3_p5-.m4", 0x0040, 0x0020, CRC(e52089a0) SHA1(d85c17809b089c6977ee9571f976af6f107fd4d3) ) /* M3-7603-5 (82s123 equiv, 32x8 TS) PROM, handles DRAM banking and timing */ /************ Common MCU bios rom *************/ #define DECOCASS_BIOS_MCU \ ROM_LOAD( "cassmcu.1c", 0x0000, 0x0400, CRC(a6df18fd) SHA1(1f9ea47e372d31767c936c15852b43df2b0ee8ff) ) /* from B10-B board: "NEC // JAPAN // X1202D-108 // D8041C 535" 8041 MCU @1C, handles cassette and other stuff; This info needs additional verification, as the d8041-535 mcu has not been dumped yet to prove code is the same. */ - - #define DECOCASS_BIOS_MAIN \ + ROM_SYSTEM_BIOS( 0, "a", "Bios A (Japan)" ) \ + ROM_SYSTEM_BIOS( 1, "b", "Bios B (USA)" ) \ + ROM_SYSTEM_BIOS( 2, "c", "Bios C (UK)" ) \ + ROM_SYSTEM_BIOS( 3, "d", "Bios D (Europe)" ) \ + ROM_SYSTEM_BIOS( 4, "a0", "Bios A (Japan, older PCB)" ) \ + ROM_SYSTEM_BIOS( 5, "b0", "Bios B (USA, older PCB)" ) \ + ROM_SYSTEM_BIOS( 6, "c0", "Bios C (UK, older PCB)" ) \ + ROM_SYSTEM_BIOS( 7, "d0", "Bios D (Europe, older PCB)" ) \ + \ ROM_REGION( 0x10000, "maincpu", 0 ) \ - DECOCASS_BIOS_A_MAINCPU \ - DECOCASS_BIOS_A0_MAINCPU \ - DECOCASS_BIOS_B_MAINCPU \ - DECOCASS_BIOS_B0_MAINCPU \ - DECOCASS_BIOS_D_MAINCPU \ + /* New boardset BIOS */ \ + ROM_LOAD_BIOS( 0, "v0a-.7e", 0xf000, 0x1000, CRC(3d33ac34) SHA1(909d59e7a993affd10224402b4370e82a5f5545c) ) /* from RMS-8 board: 2732 EPROM @7E w/'V0A-' label (has HDRA01HDR string inside it), bios code */ \ + ROM_LOAD_BIOS( 1, "v0b-.7e", 0xf000, 0x1000, CRC(23d929b7) SHA1(063f83020ba3d6f43ab8471f95ca919767b93aa4) ) /* from RMS-8 board: 2732 EPROM @7E w/'V0B-' label (has HDRB01HDR string inside it), bios code */ \ + ROM_LOAD_BIOS( 2, "v0c-.7e", 0xf000, 0x1000, CRC(9f505709) SHA1(a9c661ba5a0d3fa5e935fb9c10fa63e2d9809981) ) /* handcrafted (single byte changed) because cnebula requires region C */ \ + ROM_LOAD_BIOS( 3, "v0d-.7e", 0xf000, 0x1000, CRC(1e0c22b1) SHA1(5fec8fef500bbebc13d0173406afc55235d3affb) ) /* handcrafted (single byte changed) because ctisland3 requires region D */ \ + \ + /* Old boardset BIOS, 2x 2716 EPROM, MD labbeled as RMS-3D and MT as RMS-3T, region code (letter) is (not always) inserted after "-" */ \ + ROM_LOAD_BIOS( 4, "dsp-3_p0-a.m9", 0xf000, 0x0800, CRC(2541e34b) SHA1(4f983513dbae1350c83a433dea77a4465748b9c6) ) \ + ROM_LOAD_BIOS( 4, "dsp-3_p1-.l9", 0xf800, 0x0800, CRC(3bfff5f3) SHA1(4e9437cb1b76d64da6b37f01bd6e879fb399e8ce) ) \ + ROM_LOAD_BIOS( 5, "dsp-3_p0-b.m9", 0xf000, 0x0800, CRC(b67a91d9) SHA1(681c040be0f0ed1ba0a50161b36d0ad8e1c8c5cb) ) \ + ROM_LOAD_BIOS( 5, "dsp-3_p1-.l9", 0xf800, 0x0800, CRC(3bfff5f3) SHA1(4e9437cb1b76d64da6b37f01bd6e879fb399e8ce) ) \ + ROM_LOAD_BIOS( 6, "dsp-3_p0-c.m9", 0xf000, 0x0800, CRC(c76c4057) SHA1(4093d4ac44feff595e34f361ed1ed84113c9225e) ) \ + ROM_LOAD_BIOS( 6, "dsp-3_p1-.l9", 0xf800, 0x0800, CRC(3bfff5f3) SHA1(4e9437cb1b76d64da6b37f01bd6e879fb399e8ce) ) \ + ROM_LOAD_BIOS( 7, "dsp-3_p0-d.m9", 0xf000, 0x0800, CRC(4b7d72bc) SHA1(a70c5ba88404dafee2cc717071c4a249f67ab645) ) \ + ROM_LOAD_BIOS( 7, "dsp-3_p1-.l9", 0xf800, 0x0800, CRC(3bfff5f3) SHA1(4e9437cb1b76d64da6b37f01bd6e879fb399e8ce) ) \ + \ ROM_REGION( 0x10000, "audiocpu", 0 ) \ - DECOCASS_BIOS_A_AUDIOCPU \ - DECOCASS_BIOS_A0_AUDIOCPU \ - DECOCASS_BIOS_B_AUDIOCPU \ - DECOCASS_BIOS_B0_AUDIOCPU \ - DECOCASS_BIOS_D_AUDIOCPU \ + DECOCASS_BIOS_AUDIOCPU(0) \ + DECOCASS_BIOS_AUDIOCPU(1) \ + DECOCASS_BIOS_AUDIOCPU(2) \ + DECOCASS_BIOS_AUDIOCPU(3) \ + DECOCASS_BIOS_AUDIOCPU_OLD(4) \ + DECOCASS_BIOS_AUDIOCPU_OLD(5) \ + DECOCASS_BIOS_AUDIOCPU_OLD(6) \ + DECOCASS_BIOS_AUDIOCPU_OLD(7) \ + \ ROM_REGION( 0x00060, "proms", 0 ) \ - DECOCASS_BIOS_A_PROMS \ - DECOCASS_BIOS_A0_PROMS \ - DECOCASS_BIOS_B_PROMS \ - DECOCASS_BIOS_B0_PROMS \ - DECOCASS_BIOS_D_PROMS \ + DECOCASS_BIOS_PROMS(0) \ + DECOCASS_BIOS_PROMS(1) \ + DECOCASS_BIOS_PROMS(2) \ + DECOCASS_BIOS_PROMS(3) \ + DECOCASS_BIOS_PROMS_OLD(4) \ + DECOCASS_BIOS_PROMS_OLD(5) \ + DECOCASS_BIOS_PROMS_OLD(6) \ + DECOCASS_BIOS_PROMS_OLD(7) \ + \ ROM_REGION( 0x10000, "mcu", 0 ) /* 4k for the 8041 MCU (actually 1K ROM + 64 bytes RAM @ 0x800) */ \ DECOCASS_BIOS_MCU - #define DECOCASS_BIOS_B_ROMS \ DECOCASS_BIOS_MAIN \ ROM_DEFAULT_BIOS( "b" ) @@ -1448,6 +1441,10 @@ DECOCASS_BIOS_MAIN \ ROM_DEFAULT_BIOS( "d" ) +#define DECOCASS_BIOS_C_ROMS \ + DECOCASS_BIOS_MAIN \ + ROM_DEFAULT_BIOS( "c" ) + ROM_START( decocass ) DECOCASS_BIOS_MAIN ROM_END @@ -1499,6 +1496,18 @@ ROM_LOAD( "dt-1040.cas", 0x0000, 0x8000, CRC(eb71adbc) SHA1(67becfde39c034d4b8edc2eb100050de102773da) ) ROM_END +/* 06 Nebula */ +ROM_START( cnebula ) + DECOCASS_BIOS_C_ROMS + + ROM_REGION( 0x00020, "dongle", ROMREGION_ERASE00 ) /* dongle data */ + /* The dongle data is reverse engineered from manual decryption */ + ROM_LOAD( "nebula2.pro", 0x0000, 0x0020, CRC(75cae001) SHA1(59b2b47b91945857e6f40dd4baa0e92242fc3519) ) + + ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */ + ROM_LOAD( "nebula2.cas", 0x000000, 0x005c00, CRC(aaac39e6) SHA1(890a5439825bef9eb26ca22562e3cc30860415b0) ) +ROM_END + /* 07 Astro Fantasia */ ROM_START( castfant ) DECOCASS_BIOS_B_ROMS @@ -2124,7 +2133,40 @@ ROM_LOAD( "v3.3j", 0x0040, 0x0020, CRC(51eef657) SHA1(eaedce5caf55624ad6ae706aedf82c5717c60f1f) ) ROM_REGION( 0x10000, "mcu", 0 ) - ROM_LOAD( "cassmcu.1c", 0x0000, 0x0400, CRC(a6df18fd) SHA1(1f9ea47e372d31767c936c15852b43df2b0ee8ff) ) + DECOCASS_BIOS_MCU +ROM_END + +#define DECO_DARK_BIOS \ + ROM_REGION( 0x10000, "maincpu", 0 ) \ + ROM_LOAD( "darksoft.7e", 0xf000, 0x1000, CRC(ce3dd5a3) SHA1(456ffa744676c8f6e8662512d3d3ff92b6c49b2f) ) \ + ROM_REGION( 0x10000, "audiocpu", 0 ) \ + ROM_LOAD( "v1-.5a", 0xf800, 0x0800, CRC(b66b2c2a) SHA1(0097f38beb4872e735e560148052e258a26b08fd) ) \ + ROM_REGION( 0x00060, "proms", 0 ) \ + ROM_LOAD( "v2.3m", 0x0000, 0x0020, CRC(238fdb40) SHA1(b88e8fabb82092105c3828154608ea067acbf2e5) ) \ + ROM_LOAD( "v4.10d", 0x0020, 0x0020, CRC(3b5836b4) SHA1(b630bb277d9ec09d46ef26b944014dd6165b35d8) ) \ + ROM_LOAD( "v3.3j", 0x0040, 0x0020, CRC(51eef657) SHA1(eaedce5caf55624ad6ae706aedf82c5717c60f1f) ) \ + ROM_REGION( 0x10000, "mcu", 0 ) \ + DECOCASS_BIOS_MCU + +ROM_START( decodark ) + DECO_DARK_BIOS + + ROM_REGION( 0x100000, "dongle", ROMREGION_ERASEFF ) + ROM_LOAD( "20221213_v17_dongl_27c800.bin", 0x00000, 0x100000, CRC(69553e2b) SHA1(3c7cb985611df06c771bc842d4125dc9220cdda9) ) +ROM_END + +ROM_START( decodark16 ) + DECO_DARK_BIOS + + ROM_REGION( 0x100000, "dongle", ROMREGION_ERASEFF ) + ROM_LOAD( "20221212_v16_dongl_27c800.bin", 0x00000, 0x100000, CRC(199707bd) SHA1(da936dae54b0f98f03328c8a23494fe323874983) ) +ROM_END + +ROM_START( decodark15 ) + DECO_DARK_BIOS + + ROM_REGION( 0x100000, "dongle", ROMREGION_ERASEFF ) + ROM_LOAD( "20220726_v15_dongl_27c800.bin", 0x00000, 0x100000, CRC(0e973470) SHA1(3d276dc8facc4f7611dcebacec04e2252779d300) ) ROM_END @@ -2186,12 +2228,12 @@ /* -- */ GAME( 1981, ctsttape, decocass, ctsttape, decocass, decocass_type1_state, init_decocass, ROT270, "Data East Corporation", "Test Tape (DECO Cassette) (US)", 0 ) /* 01 */ GAME( 1980, chwy, decocass, chwy, chwy, decocass_type1_state, init_decocass, ROT270, "Data East Corporation", "Highway Chase (DECO Cassette) (US)", 0 ) /* 02 */ // 1980.12 Sengoku Ninjatai -/* 03 */ GAME( 1981, cmanhat, decocass, cmanhat, cmanhat, decocass_type1_state, init_decocass, ROT270, "Data East Corporation", "Manhattan (DECO Cassette) (Japan)", MACHINE_IMPERFECT_GRAPHICS ) +/* 03 */ GAME( 1981, cmanhat, decocass, cmanhat, cmanhat, decocass_type1_state, init_decocass, ROT270, "Data East Corporation", "Manhattan (DECO Cassette) (Japan)", MACHINE_IMPERFECT_GRAPHICS ) // Colours don't match some videos, but probably different game version /* 04 */ GAME( 1981, cterrani, decocass, cterrani, cterrani, decocass_type1_state, init_decocass, ROT270, "Data East Corporation", "Terranean (DECO Cassette) (US)", 0 ) /* 05 */ // 1981.?? Missile Sprinter -/* 06 */ // 1980.12 Nebula +/* 06 */ GAME( 1981, cnebula, decocass, cnebula, cnebula, decocass_type1_state, init_decocass, ROT270, "Data East Corporation", "Nebula (DECO Cassette) (UK)", 0 ) // 1980.12 Nebula - "NEBULA2 01/021980.11.25" string in cassette data /* 07 */ GAME( 1981, castfant, decocass, castfant, castfant, decocass_type1_state, init_decocass, ROT270, "Data East Corporation", "Astro Fantasia (DECO Cassette) (US)", 0 ) -/* 08 */ GAME( 1981, ctower, decocass, cfboy0a1, ctower, decocass_type1_state, init_decocass, ROT270, "Data East Corporation", "The Tower (DECO Cassette) (Europe?)", 0 ) // 1981.03 The Tower (1981.02.04 in cassette data) +/* 08 */ GAME( 1981, ctower, decocass, cfboy0a1, ctower, decocass_type1_state, init_decocass, ROT270, "Data East Corporation", "The Tower (DECO Cassette) (Europe)", 0 ) // 1981.03 The Tower (1981.02.04 in cassette data) /* 09 */ GAME( 1981, csuperas, decocass, csuperas, csuperas, decocass_type1_state, init_decocass, ROT270, "Data East Corporation", "Super Astro Fighter (DECO Cassette) (US)", 0 ) /* 10 */ GAME( 1981, cocean1a, decocass, cocean1a, cocean1a, decocass_type1_state, init_decocass, ROT270, "Data East Corporation", "Ocean to Ocean (Medal) (DECO Cassette MD) (No.10/Ver.1,Japan)", 0 ) /* no lever, 1P/2P buttons used to switch player, cocktail mode not emulated */ /* */ GAME( 1981, cocean6b, cocean1a, cocean1a, cocean1a, decocass_type1_state, init_decocass, ROT270, "Data East Corporation", "Ocean to Ocean (Medal) (DECO Cassette MD) (No.10/Ver.6,US)", 0 ) /* lever, 1P/2P buttons used to switch player, cocktail mode not emulated */ @@ -2235,8 +2277,8 @@ /* 33 */ GAME( 1983, cpsoccer, decocass, cpsoccer, cpsoccer, decocass_type3_state, init_decocass, ROT270, "Data East Corporation", "Pro Soccer (DECO Cassette) (US)", 0 ) /* */ GAME( 1983, cpsoccerj, cpsoccer, cpsoccer, cpsoccer, decocass_type3_state, init_decocass, ROT270, "Data East Corporation", "Pro Soccer (DECO Cassette) (Japan)", 0 ) /* 34 */ GAME( 1983, csdtenis, decocass, csdtenis, csdtenis, decocass_type3_state, init_decocass, ROT270, "Data East Corporation", "Super Doubles Tennis (DECO Cassette) (Japan)", 0 ) -/* 35 */ GAME( 1985, cflyball, decocass, decocass, cflyball, decocass_nodong_state, init_decocass, ROT270, "Data East Corporation", "Flying Ball (DECO Cassette) (US)", 0 ) -/* 36 */ // 1984.04 Genesis/Boomer Rang'r +/* 35 */ // unknown game, was Flying Ball, but that is 43 +/* 36 */ // unknown game /* 37 */ GAME( 1983, czeroize, decocass, czeroize, czeroize, decocass_type3_state, init_decocass, ROT270, "Data East Corporation", "Zeroize (DECO Cassette) (US)", 0 ) /* 38 */ GAME( 1984, cscrtry, decocass, decocass, cscrtry, decocass_type4_state, init_decocass, ROT270, "Data East Corporation", "Scrum Try (DECO Cassette) (US) (set 1)", 0 ) /* */ GAME( 1984, cscrtry2, cscrtry, decocass, cscrtry, decocass_type4_state, init_decocass, ROT270, "Data East Corporation", "Scrum Try (DECO Cassette) (US) (set 2)", 0 ) @@ -2245,11 +2287,16 @@ /* 40 */ GAME( 1984, cfghtice, decocass, cfghtice, cfghtice, decocass_type3_state, init_decocass, ROT270, "Data East Corporation", "Fighting Ice Hockey (DECO Cassette) (US)", 0 ) /* 41 */ GAME( 1984, coozumou, decocass, decocass, cscrtry, decocass_type4_state, init_decocass, ROT270, "Data East Corporation", "Oozumou - The Grand Sumo (DECO Cassette) (Japan)", 0 ) /* 42 */ // 1984.08 Hellow Gateball // not a typo, this is official spelling -/* 43 */ // 1984.08 Yellow Cab +/* 43 */ GAME( 1985, cflyball, decocass, decocass, cflyball, decocass_nodong_state, init_decocass, ROT270, "Data East Corporation", "Flying Ball (DECO Cassette) (US)", 0 ) /* 44 */ GAME( 1985, cbdash, decocass, decocass, cbdash, decocass_type5_state, init_decocass, ROT270, "Data East Corporation", "Boulder Dash (DECO Cassette) (US)", 0 ) /* UX7 */ // 1984.12 Tokyo MIE Clinic/Tokyo MIE Shinryoujo /* UX8 */ // 1985.01 Tokyo MIE Clinic/Tokyo MIE Shinryoujo Part 2 /* UX9 */ // 1985.05 Geinoujin Shikaku Shiken -/* xx */ GAME( 2008, decomult, decocass, decocass, decocass, decocass_widel_state, init_decocass, ROT270, "bootleg (David Widel)", "Deco Cassette System Multigame (ROM based)", 0 ) +GAME( 2008, decomult, decocass, decocass, decocass, decocass_widel_state, init_decocass, ROT270, "bootleg (David Widel)", "DECO Cassette System ROM Multigame (David Widel)", 0 ) + +GAME( 2022, decodark, decocass, decocass, decocass, decocass_darksoft_state, init_decocass, ROT270, "bootleg (Darksoft)", "DECO Cassette System ROM Multigame (Darksoft, v17)", 0 ) // fixed an issue with skater +GAME( 2022, decodark16,decodark, decocass, decocass, decocass_darksoft_state, init_decocass, ROT270, "bootleg (Darksoft)", "DECO Cassette System ROM Multigame (Darksoft, v16)", 0 ) // added nebula +GAME( 2022, decodark15,decodark, decocass, decocass, decocass_darksoft_state, init_decocass, ROT270, "bootleg (Darksoft)", "DECO Cassette System ROM Multigame (Darksoft, v15)", 0 ) +// earlier revisions of this kit were released as early as 2017 diff -Nru mame-0.250+dfsg.1/src/mame/dataeast/decocass.h mame-0.251+dfsg.1/src/mame/dataeast/decocass.h --- mame-0.250+dfsg.1/src/mame/dataeast/decocass.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/dataeast/decocass.h 2022-12-29 14:20:09.000000000 +0000 @@ -35,6 +35,7 @@ , m_mcu(*this, "mcu") , m_dongle_r(*this) , m_dongle_w(*this) + , m_donglerom(*this, "dongle") , m_audiocpu(*this, "audiocpu") , m_watchdog(*this, "watchdog") , m_cassette(*this, "cassette") @@ -60,6 +61,7 @@ void init_decocass(); void init_decocrom(); void init_cdsteljn(); + void init_nebula(); protected: /* devices */ @@ -70,6 +72,8 @@ read8sm_delegate m_dongle_r; // TODO: why isn't this a virtual method? write8sm_delegate m_dongle_w; // TODO: why isn't this a virtual method? + optional_region_ptr m_donglerom; + virtual void machine_start() override; virtual void machine_reset() override; @@ -257,6 +261,7 @@ void ctsttape(machine_config &config); void castfant(machine_config &config); void ctisland(machine_config &config); + void cnebula(machine_config &config); private: DECLARE_MACHINE_RESET(ctsttape); @@ -276,6 +281,7 @@ DECLARE_MACHINE_RESET(cocean1a); /* 10 */ DECLARE_MACHINE_RESET(cfboy0a1); /* 12 */ DECLARE_MACHINE_RESET(clocknchj); /* 11 */ + DECLARE_MACHINE_RESET(cnebula); virtual void machine_start() override; virtual void machine_reset() override; @@ -447,4 +453,23 @@ int32_t m_widel_latch = 0; /* latched enable PROM (1100xxxx written to E5x1) */ }; +class decocass_darksoft_state : public decocass_state +{ +public: + decocass_darksoft_state(const machine_config &mconfig, device_type type, const char *tag) + : decocass_state(mconfig, type, tag) + { + } + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + +private: + uint8_t decocass_darksoft_r(offs_t offset); + void decocass_darksoft_w(offs_t offset, uint8_t data); + + uint32_t m_address; +}; + #endif // MAME_INCLUDES_DECOCASS_H diff -Nru mame-0.250+dfsg.1/src/mame/dataeast/decocass_m.cpp mame-0.251+dfsg.1/src/mame/dataeast/decocass_m.cpp --- mame-0.250+dfsg.1/src/mame/dataeast/decocass_m.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/dataeast/decocass_m.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -88,9 +88,12 @@ uint8_t decocass_state::decocass_sound_command_r() { uint8_t data = m_soundlatch->read(); - LOG(4,("CPU %s sound command <- $%02x\n", m_audiocpu->tag(), data)); - m_audiocpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); - m_sound_ack &= ~0x80; + if (!machine().side_effects_disabled()) + { + LOG(4,("CPU %s sound command <- $%02x\n", m_audiocpu->tag(), data)); + m_audiocpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + m_sound_ack &= ~0x80; + } return data; } @@ -109,16 +112,22 @@ uint8_t decocass_state::decocass_sound_nmi_enable_r() { - m_audio_nmi_enabled = 1; - m_audiocpu->set_input_line(INPUT_LINE_NMI, (m_audio_nmi_enabled && m_audio_nmi_state) ? ASSERT_LINE : CLEAR_LINE); + if (!machine().side_effects_disabled()) + { + m_audio_nmi_enabled = 1; + m_audiocpu->set_input_line(INPUT_LINE_NMI, (m_audio_nmi_enabled && m_audio_nmi_state) ? ASSERT_LINE : CLEAR_LINE); + } return 0xff; } uint8_t decocass_state::decocass_sound_data_ack_reset_r() { uint8_t data = 0xff; - LOG(2,("CPU %s sound ack rst <- $%02x\n", m_audiocpu->tag(), data)); - m_sound_ack &= ~0x40; + if (!machine().side_effects_disabled()) + { + LOG(2,("CPU %s sound ack rst <- $%02x\n", m_audiocpu->tag(), data)); + m_sound_ack &= ~0x40; + } return data; } @@ -246,7 +255,7 @@ if (!m_type1_map) return 0x00; - uint8_t data; + uint8_t data = 0x00; if (1 == (offset & 1)) { @@ -261,11 +270,10 @@ (data & 1) ? "OBF" : "-", (data & 2) ? "IBF" : "-")); } - else + else if (!machine().side_effects_disabled()) { offs_t promaddr; uint8_t save; - uint8_t *prom = machine().root_device().memregion("dongle")->base(); if (m_firsttime) { @@ -274,7 +282,7 @@ { if (promaddr % 8 == 0) LOG(3,(" %02x:", promaddr)); - LOG(3,(" %02x%s", prom[promaddr], (promaddr % 8) == 7 ? "\n" : "")); + LOG(3,(" %02x%s", m_donglerom[promaddr], (promaddr % 8) == 7 ? "\n" : "")); } m_firsttime = 0; m_latch1 = 0; /* reset latch (??) */ @@ -301,12 +309,12 @@ data = 0; promshift = 0; - for (int i=0;i<8;i++) + for (int i=0; i<8; i++) { - if (m_type1_map[i] == T1PROM) { data |= (((prom[promaddr] >> promshift) & 1) << T1MAP(i,m_type1_outmap)); promshift++; } + if (m_type1_map[i] == T1PROM) { data |= (((m_donglerom[promaddr] >> promshift) & 1) << T1MAP(i,m_type1_outmap)); promshift++; } if (m_type1_map[i] == T1LATCHINV) { data |= ((1 - ((m_latch1 >> T1MAP(i,m_type1_inmap)) & 1)) << T1MAP(i,m_type1_outmap)); } - if (m_type1_map[i] == T1LATCH) { data |= (((m_latch1 >> T1MAP(i,m_type1_inmap)) & 1) << T1MAP(i,m_type1_outmap)); } - if (m_type1_map[i] == T1DIRECT) { data |= (((save >> T1MAP(i,m_type1_inmap)) & 1) << T1MAP(i,m_type1_outmap)); } + if (m_type1_map[i] == T1LATCH) { data |= (((m_latch1 >> T1MAP(i,m_type1_inmap)) & 1) << T1MAP(i,m_type1_outmap)); } + if (m_type1_map[i] == T1DIRECT) { data |= (((save >> T1MAP(i,m_type1_inmap)) & 1) << T1MAP(i,m_type1_outmap)); } } LOG(3,("%10s 6502-PC: %04x decocass_type1_r(%02x): $%02x\n", @@ -358,6 +366,15 @@ /*************************************************************************** * + * TYPE1 DONGLE + * - Nebula + * + ***************************************************************************/ + +static uint8_t type1_nebula_table[8] ={ T1PROM,T1PROM,T1DIRECT,T1DIRECT, T1PROM,T1DIRECT,T1PROM,T1PROM }; + +/*************************************************************************** + * * TYPE1 DONGLE (DE-0061) * - Manhattan * @@ -516,8 +533,7 @@ { if (1 == (offset & 1)) { - uint8_t *prom = memregion("dongle")->base(); - data = prom[256 * m_type2_d2_latch + m_type2_promaddr]; + data = m_donglerom[256 * m_type2_d2_latch + m_type2_promaddr]; LOG(3,("%10s 6502-PC: %04x decocass_type2_r(%02x): $%02x <- prom[%03x]\n", machine().time().as_string(6), m_maincpu->pcbase(), offset, data, 256 * m_type2_d2_latch + m_type2_promaddr)); } else @@ -556,16 +572,16 @@ { LOG(3,("%10s 6502-PC: %04x decocass_e5xx_w(%02x): $%02x -> %s ", machine().time().as_string(6), m_maincpu->pcbase(), offset, data, offset & 1 ? "8041-CMND" : "8041 DATA")); } - if (1 == (offset & 1)) + if (!machine().side_effects_disabled()) { - if (0xc0 == (data & 0xf0)) + if ((1 == (offset & 1)) && (0xc0 == (data & 0xf0))) { m_type2_xx_latch = 1; m_type2_d2_latch = (data & 0x04) ? 1 : 0; LOG(3,("PROM:%s D2:%d", m_type2_xx_latch ? "on" : "off", m_type2_d2_latch)); } + m_mcu->upi41_master_w(offset & 1, data); } - m_mcu->upi41_master_w(offset & 1, data); #ifdef MAME_DEBUG decocass_fno(offset, data); @@ -598,11 +614,11 @@ { if (1 == m_type3_pal_19) { - uint8_t *prom = memregion("dongle")->base(); - data = prom[m_type3_ctrs]; + data = m_donglerom[m_type3_ctrs]; LOG(3,("%10s 6502-PC: %04x decocass_type3_r(%02x): $%02x <- prom[$%03x]\n", machine().time().as_string(6), m_maincpu->pcbase(), offset, data, m_type3_ctrs)); - if (++m_type3_ctrs == 4096) - m_type3_ctrs = 0; + if (!machine().side_effects_disabled()) + if (++m_type3_ctrs == 4096) + m_type3_ctrs = 0; } else { @@ -764,8 +780,11 @@ (BIT(save, 6) << 6) | (BIT(save, 7) << 7); } - m_type3_d0_latch = save & 1; - LOG(3,("%10s 6502-PC: %04x decocass_type3_r(%02x): $%02x '%c' <- 8041-DATA\n", machine().time().as_string(6), m_maincpu->pcbase(), offset, data, (data >= 32) ? data : '.')); + if (!machine().side_effects_disabled()) + { + m_type3_d0_latch = save & 1; + LOG(3,("%10s 6502-PC: %04x decocass_type3_r(%02x): $%02x '%c' <- 8041-DATA\n", machine().time().as_string(6), m_maincpu->pcbase(), offset, data, (data >= 32) ? data : '.')); + } } else { @@ -779,8 +798,11 @@ (BIT(save, 5) << 5) | (BIT(save, 6) << 7) | (BIT(save, 7) << 6); - LOG(3,("%10s 6502-PC: %04x decocass_type3_r(%02x): $%02x '%c' <- open bus (D0 replaced with latch)\n", machine().time().as_string(6), m_maincpu->pcbase(), offset, data, (data >= 32) ? data : '.')); - m_type3_d0_latch = save & 1; + if (!machine().side_effects_disabled()) + { + LOG(3,("%10s 6502-PC: %04x decocass_type3_r(%02x): $%02x '%c' <- open bus (D0 replaced with latch)\n", machine().time().as_string(6), m_maincpu->pcbase(), offset, data, (data >= 32) ? data : '.')); + m_type3_d0_latch = save & 1; + } } } } @@ -849,11 +871,12 @@ { if (m_type4_latch) { - uint8_t *prom = machine().root_device().memregion("dongle")->base(); - - data = prom[m_type4_ctrs]; - LOG(3,("%10s 6502-PC: %04x decocass_type4_r(%02x): $%02x '%c' <- PROM[%04x]\n", machine().time().as_string(6), m_maincpu->pcbase(), offset, data, (data >= 32) ? data : '.', m_type4_ctrs)); - m_type4_ctrs = (m_type4_ctrs + 1) & 0x7fff; + data = m_donglerom[m_type4_ctrs]; + if (!machine().side_effects_disabled()) + { + LOG(3,("%10s 6502-PC: %04x decocass_type4_r(%02x): $%02x '%c' <- PROM[%04x]\n", machine().time().as_string(6), m_maincpu->pcbase(), offset, data, (data >= 32) ? data : '.', m_type4_ctrs)); + m_type4_ctrs = (m_type4_ctrs + 1) & 0x7fff; + } } else { @@ -1052,9 +1075,7 @@ { if (m_widel_latch) { - uint8_t *prom = machine().root_device().memregion("dongle")->base(); - - data = prom[m_widel_ctrs]; + data = m_donglerom[m_widel_ctrs]; LOG(3,("%10s 6502-PC: %04x decocass_widel_r(%02x): $%02x '%c' <- PROM[%04x]\n", machine().time().as_string(6), m_maincpu->pcbase(), offset, data, (data >= 32) ? data : '.', m_widel_ctrs)); if (!machine().side_effects_disabled()) @@ -1113,6 +1134,47 @@ /*************************************************************************** * + * Darksoft Multigame Aftermarket modification + * - provides access to a large ROM + * - doesn't support games requiring dongle for proper game data, only + * loading, so games like Treausre Island don't work with this kit + * + ***************************************************************************/ + +uint8_t decocass_darksoft_state::decocass_darksoft_r(offs_t offset) +{ + uint8_t data; + + if (offset == 0) + { + data = m_donglerom[m_address & 0xfffff]; + if (!machine().side_effects_disabled()) + m_address++; + } + else if (offset == 1) + { + data = m_donglerom[m_address & 0xfffff]; + if (!machine().side_effects_disabled()) + m_address += 0x100; + } + else + { + data = 0xff; + } + + return data; +} + +void decocass_darksoft_state::decocass_darksoft_w(offs_t offset, uint8_t data) +{ + if ((offset & E5XX_MASK) == 0) + { + m_address = data; + } +} + +/*************************************************************************** + * * Main dongle and 8041 interface * ***************************************************************************/ @@ -1386,6 +1448,14 @@ m_type1_map = type1_pass_136_table; } +MACHINE_RESET_MEMBER(decocass_type1_state,cnebula) +{ + machine_reset(); + LOG(0,("dongle type #1 (DE-0061)\n")); + m_type1_map = type1_nebula_table; +} + + MACHINE_RESET_MEMBER(decocass_type1_state,chwy) { machine_reset(); @@ -1574,7 +1644,6 @@ MACHINE_RESET_MEMBER(decocass_type3_state,czeroize) { - uint8_t *mem = memregion("dongle")->base(); machine_reset(); LOG(0,("dongle type #3 (PAL)\n")); m_type3_swap = TYPE3_SWAP_23_56; @@ -1588,9 +1657,9 @@ * This hack seems to be sufficient to get around * the missing dongle ROM contents and play the game. */ - memset(mem, 0x00, 0x1000); - mem[0x08a0] = 0x18; - mem[0x08a1] = 0xf7; + memset(m_donglerom, 0x00, 0x1000); + m_donglerom[0x08a0] = 0x18; + m_donglerom[0x08a1] = 0xf7; } MACHINE_RESET_MEMBER(decocass_type3_state,cppicf) @@ -1630,6 +1699,22 @@ } +void decocass_darksoft_state::machine_start() +{ + decocass_state::machine_start(); + save_item(NAME(m_address)); +} + +void decocass_darksoft_state::machine_reset() +{ + decocass_state::machine_reset(); + m_dongle_r = read8sm_delegate(*this, FUNC(decocass_darksoft_state::decocass_darksoft_r)); + m_dongle_w = write8sm_delegate(*this, FUNC(decocass_darksoft_state::decocass_darksoft_w)); + + m_address = 0; +} + + /*************************************************************************** * * 8041 port handlers diff -Nru mame-0.250+dfsg.1/src/mame/dataeast/decocrpt.cpp mame-0.251+dfsg.1/src/mame/dataeast/decocrpt.cpp --- mame-0.250+dfsg.1/src/mame/dataeast/decocrpt.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/dataeast/decocrpt.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -66,69 +66,69 @@ static const uint8_t deco56_xor_table[0x800] = { - 0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9,10, 7,11,11, 9,11, 3, 7,10,12,13, 3,14, 0, 0, 9, 0,15, 3, 4,14, - 6, 3,14,14, 3,12, 3,13, 9, 5,13, 3, 8, 2, 7,14, 2, 5, 1, 2, 3, 4,14,11, 8, 0, 6, 7,10, 3, 4, 7, + 0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9,10, 7,11,11, 9,11, 3, 7,10,12,13, 3,14, 0, 0, 9, 0,15, 3, 4,14, + 6, 3,14,14, 3,12, 3,13, 9, 5,13, 3, 8, 2, 7,14, 2, 5, 1, 2, 3, 4,14,11, 8, 0, 6, 7,10, 3, 4, 7, 15, 1, 2, 7, 7,14,15, 0, 7, 9,15, 3,14,10, 9,12,11,12, 2, 8, 1,10, 9,14, 5, 6,15,10, 4,15, 5, 2, - 3, 2, 4,15, 7, 7,10,13, 1,13, 6, 6, 7, 5,10, 9, 5,15,14, 2, 7,12, 7, 4, 2,15,12,10,11,15, 4, 6, - 9, 3,11,13, 0, 3, 6, 4,15, 8, 3, 8, 0, 3,13, 8, 6, 0,11, 4, 9, 7,11, 1, 8, 1,10, 9, 2, 8,11,15, - 2, 8,10, 5, 3, 8, 0,10, 0,15, 3, 1,15, 3, 8, 6,13,11,10, 4,15, 4, 4, 3, 7, 7,15, 3,11,15,15, 2, - 3, 7,13, 4,10,12, 9, 8,11, 2, 5, 8, 7, 4,14, 0,12, 1,15,10, 3,10, 5,13, 1, 4, 0, 7, 7, 2, 8,15, + 3, 2, 4,15, 7, 7,10,13, 1,13, 6, 6, 7, 5,10, 9, 5,15,14, 2, 7,12, 7, 4, 2,15,12,10,11,15, 4, 6, + 9, 3,11,13, 0, 3, 6, 4,15, 8, 3, 8, 0, 3,13, 8, 6, 0,11, 4, 9, 7,11, 1, 8, 1,10, 9, 2, 8,11,15, + 2, 8,10, 5, 3, 8, 0,10, 0,15, 3, 1,15, 3, 8, 6,13,11,10, 4,15, 4, 4, 3, 7, 7,15, 3,11,15,15, 2, + 3, 7,13, 4,10,12, 9, 8,11, 2, 5, 8, 7, 4,14, 0,12, 1,15,10, 3,10, 5,13, 1, 4, 0, 7, 7, 2, 8,15, 12, 1, 9,14,12, 9,11, 5,13, 1,12,12,14, 8, 8,13, 4,13, 1,12,10, 1,10,15, 7, 5, 1,13,10,10,15, 1, - 3,14,13, 0, 0, 1, 3, 9, 5, 0, 4,13, 6,14, 2, 8, 3, 3, 5, 8, 1,10, 7, 5,13, 4, 2,12, 5, 1, 0, 4, - 4, 6,14,10, 6, 3,11,10, 0,10, 2, 3,11,11,15,13, 3,10, 3, 8, 3, 4, 7, 1, 5, 3, 9, 8,14,13,13, 4, - 1, 0, 1,12,12,12,11,11, 3, 7, 4,10,10, 3,10, 3, 1, 7, 4, 6, 2,12, 3, 3, 0, 0,10, 0, 6, 8, 0, 7, - 2,15,10,14, 1,14, 4,12, 4, 2, 3, 4, 8, 0,10,10,15, 1, 8, 4,11, 2,12, 6,12,12,12, 2, 4, 6, 3,12, - 4, 7,14,11,10, 6,13, 3, 4,14, 7, 5, 7, 5,10, 8, 5, 0, 7,12, 3, 7,14, 3, 3, 8, 0, 7, 6, 9,11,15, + 3,14,13, 0, 0, 1, 3, 9, 5, 0, 4,13, 6,14, 2, 8, 3, 3, 5, 8, 1,10, 7, 5,13, 4, 2,12, 5, 1, 0, 4, + 4, 6,14,10, 6, 3,11,10, 0,10, 2, 3,11,11,15,13, 3,10, 3, 8, 3, 4, 7, 1, 5, 3, 9, 8,14,13,13, 4, + 1, 0, 1,12,12,12,11,11, 3, 7, 4,10,10, 3,10, 3, 1, 7, 4, 6, 2,12, 3, 3, 0, 0,10, 0, 6, 8, 0, 7, + 2,15,10,14, 1,14, 4,12, 4, 2, 3, 4, 8, 0,10,10,15, 1, 8, 4,11, 2,12, 6,12,12,12, 2, 4, 6, 3,12, + 4, 7,14,11,10, 6,13, 3, 4,14, 7, 5, 7, 5,10, 8, 5, 0, 7,12, 3, 7,14, 3, 3, 8, 0, 7, 6, 9,11,15, 10,15, 9, 7, 0,13, 7, 3, 7, 4,10, 1, 7, 4, 3,15, 2, 6, 1,14,12,12,10,10, 1,11,15, 0,10, 7,12,15, - 8,10, 2,14,11, 0,10,12,13,15,12,15, 8,11, 5, 3, 0, 7,10, 6, 1, 9,11, 8, 4, 2, 4,12, 6, 3,15, 3, - 2, 1,10, 2, 2, 7,10, 6,11,12, 6, 2,11, 7,15, 1,13, 9,12, 3, 9,12, 2,12, 6, 5,11, 8, 0, 7,14,10, - 7, 8, 6, 5,12, 4, 1,12,12,13, 8, 4, 8,12, 8, 2, 1,15,13,14, 8, 6,11, 2,13, 5, 6,10, 9, 5, 7,11, - 5,11,13, 2, 0, 8, 2,10, 2, 1, 6, 4, 8,14, 0, 4, 8,11, 8,15,12, 0,15, 6, 1,13,15,10, 3,13,14,13, - 4, 5,12, 4, 3, 8, 9,15,13,11, 4, 8,10, 7,12, 7, 7, 9, 7,11,13, 0,15, 5,11, 5, 6, 2, 5, 1, 9, 2, - 9,15, 9, 8,14, 6,11, 7,10, 4,14,12, 3,12, 3, 0, 4, 8,11, 9, 5, 7,14, 1,10, 3, 2,12,12,10,12, 8, - 4, 5,10,13,11, 6,14, 4,13,14, 8, 3,10, 5, 6, 4, 4,10, 6, 5,12,11,10, 5, 9, 6, 7, 6, 4, 6, 3,15, - 5,14,14,13, 7, 6,12,13,15, 5,15,10, 2, 1,15, 3,10,15, 7, 4, 5, 2,10,15,14,15, 1,13,12, 9, 8,14, + 8,10, 2,14,11, 0,10,12,13,15,12,15, 8,11, 5, 3, 0, 7,10, 6, 1, 9,11, 8, 4, 2, 4,12, 6, 3,15, 3, + 2, 1,10, 2, 2, 7,10, 6,11,12, 6, 2,11, 7,15, 1,13, 9,12, 3, 9,12, 2,12, 6, 5,11, 8, 0, 7,14,10, + 7, 8, 6, 5,12, 4, 1,12,12,13, 8, 4, 8,12, 8, 2, 1,15,13,14, 8, 6,11, 2,13, 5, 6,10, 9, 5, 7,11, + 5,11,13, 2, 0, 8, 2,10, 2, 1, 6, 4, 8,14, 0, 4, 8,11, 8,15,12, 0,15, 6, 1,13,15,10, 3,13,14,13, + 4, 5,12, 4, 3, 8, 9,15,13,11, 4, 8,10, 7,12, 7, 7, 9, 7,11,13, 0,15, 5,11, 5, 6, 2, 5, 1, 9, 2, + 9,15, 9, 8,14, 6,11, 7,10, 4,14,12, 3,12, 3, 0, 4, 8,11, 9, 5, 7,14, 1,10, 3, 2,12,12,10,12, 8, + 4, 5,10,13,11, 6,14, 4,13,14, 8, 3,10, 5, 6, 4, 4,10, 6, 5,12,11,10, 5, 9, 6, 7, 6, 4, 6, 3,15, + 5,14,14,13, 7, 6,12,13,15, 5,15,10, 2, 1,15, 3,10,15, 7, 4, 5, 2,10,15,14,15, 1,13,12, 9, 8,14, 15, 3, 4, 1, 9,13,13, 3,12,15, 8,15, 7, 1,10,12,10, 9,12,10,14, 6, 5, 5, 4, 0,12,14,15, 6, 5, 5, - 2,14, 2, 6,14, 2,12, 7, 5, 1, 2, 3, 2,12,15, 4,10, 5,10,13, 0, 2, 2, 1, 5, 7, 5, 2, 0,13, 0, 4, + 2,14, 2, 6,14, 2,12, 7, 5, 1, 2, 3, 2,12,15, 4,10, 5,10,13, 0, 2, 2, 1, 5, 7, 5, 2, 0,13, 0, 4, 13,13, 9,12, 5, 5,10,15, 6,11, 5, 2,11, 8, 0, 6, 9,13, 2, 6, 1,11, 5, 1,12, 8, 4, 7, 9,13, 4, 4, 15, 3, 4, 5, 5, 0, 9, 4,10, 8, 1, 0,13, 8, 6,12,15,15,10, 7,10, 2, 6, 1, 4, 0, 2, 8, 3,10, 2,12, - 4, 1,12,15, 0, 1,10, 0,10,11, 6, 1, 0, 3, 2, 3, 4, 4, 9,14, 7, 3,13, 7,13, 9,14,12,10, 5, 4,14, - 0, 5,15, 8,12,12, 0, 5,11,15, 8, 7,15, 5,12, 5, 5, 3, 6,13,15,15, 7, 0, 3, 9, 1, 5, 7, 7,12, 5, - 3,12,10,11, 2,11, 5,10, 1, 3, 6, 2, 7, 1, 3, 0, 6, 8,12,15,14, 6,10,13, 9, 1,15, 4, 6,13,14, 7, - 2,13,12, 9, 4, 7, 9, 9, 6,10, 6,15,15, 2, 0, 4,12,12,10, 2, 7, 4,14,10, 2, 6, 5,12, 0,14, 1,15, + 4, 1,12,15, 0, 1,10, 0,10,11, 6, 1, 0, 3, 2, 3, 4, 4, 9,14, 7, 3,13, 7,13, 9,14,12,10, 5, 4,14, + 0, 5,15, 8,12,12, 0, 5,11,15, 8, 7,15, 5,12, 5, 5, 3, 6,13,15,15, 7, 0, 3, 9, 1, 5, 7, 7,12, 5, + 3,12,10,11, 2,11, 5,10, 1, 3, 6, 2, 7, 1, 3, 0, 6, 8,12,15,14, 6,10,13, 9, 1,15, 4, 6,13,14, 7, + 2,13,12, 9, 4, 7, 9, 9, 6,10, 6,15,15, 2, 0, 4,12,12,10, 2, 7, 4,14,10, 2, 6, 5,12, 0,14, 1,15, 13, 1, 4,13, 3,13, 6,15,11,15, 0,13,12, 5, 4,11,14,15, 6,13, 6, 7, 2, 2, 7,11, 6, 7,15, 0,13,10, - 6,14, 9,13,12,14, 4, 8, 5,13, 3,14, 6, 6,13, 8, 7, 7, 5, 8,12, 2, 6, 0, 6, 8, 2,13, 9,14, 3,15, - 1, 4,13, 3, 6, 8,15, 4, 8, 7, 4,10, 0, 9, 2,15, 2, 1, 3, 3, 1, 4, 0, 3, 1, 8, 5, 0,10, 0, 1, 6, + 6,14, 9,13,12,14, 4, 8, 5,13, 3,14, 6, 6,13, 8, 7, 7, 5, 8,12, 2, 6, 0, 6, 8, 2,13, 9,14, 3,15, + 1, 4,13, 3, 6, 8,15, 4, 8, 7, 4,10, 0, 9, 2,15, 2, 1, 3, 3, 1, 4, 0, 3, 1, 8, 5, 0,10, 0, 1, 6, 11, 3,12, 0,14,11, 0, 5,15, 9, 1, 7,15,12,12,10, 2, 2, 3,15,13,13, 2,13,14,13,13, 8,11,10, 9, 9, - 9, 7, 7, 4, 9, 1, 9,10, 9, 9, 9,15,13,14,12,13, 6,11, 4, 6, 9,14, 6, 6, 7, 0, 8, 6,10, 7, 9,13, - 4, 8, 1, 8, 9, 9, 3,14,10,14,11, 7,15, 8,13,11, 9, 0, 5, 4, 4, 7, 6, 0,13, 9,13, 7, 9, 3, 2, 0, - 7,11, 5, 8, 8, 0,10, 3, 1, 4, 2,15,12, 5, 2, 6,15, 5,13, 6,12, 8,10, 9,12, 9, 1, 2,15,14, 5,11, + 9, 7, 7, 4, 9, 1, 9,10, 9, 9, 9,15,13,14,12,13, 6,11, 4, 6, 9,14, 6, 6, 7, 0, 8, 6,10, 7, 9,13, + 4, 8, 1, 8, 9, 9, 3,14,10,14,11, 7,15, 8,13,11, 9, 0, 5, 4, 4, 7, 6, 0,13, 9,13, 7, 9, 3, 2, 0, + 7,11, 5, 8, 8, 0,10, 3, 1, 4, 2,15,12, 5, 2, 6,15, 5,13, 6,12, 8,10, 9,12, 9, 1, 2,15,14, 5,11, 13, 3, 6, 8,15, 5, 8, 2,10, 2, 8,14,15, 5, 4, 0,10, 2,14,14, 8, 8, 9, 9,11,11,12,11, 5, 4, 2,12, 15,12, 1,11, 5,13, 0,12, 2, 4, 0, 0,12,12, 4,15, 7, 1, 2,13,10,10, 6, 4, 8, 6, 0,14,13, 1, 8, 3, 10, 9,11,12, 6, 0,11,14, 1,13, 7, 4,11, 3,10, 0, 2,10,14,13, 7, 8,10, 7, 7,12,10,11, 3, 9,13, 8, - 0,10,10,13, 7,12, 8, 8, 5,15,10,15, 7, 1, 8, 2,12, 1,14,10,10, 4, 5, 7,11, 3, 7, 7, 1,12,12,12, - 1,14, 4, 0,11,15, 8,10, 1,14, 2,11, 5, 5,10,12, 2, 2, 1, 0,10, 0, 6, 2,10,13, 1,11,14, 0,12,11, - 8, 8,12, 4, 5, 5,14,14, 9, 8, 0,10, 1, 9,15,10,13, 5, 2, 7, 1, 2, 6, 5, 5,11, 0,13, 8, 0, 7, 2, + 0,10,10,13, 7,12, 8, 8, 5,15,10,15, 7, 1, 8, 2,12, 1,14,10,10, 4, 5, 7,11, 3, 7, 7, 1,12,12,12, + 1,14, 4, 0,11,15, 8,10, 1,14, 2,11, 5, 5,10,12, 2, 2, 1, 0,10, 0, 6, 2,10,13, 1,11,14, 0,12,11, + 8, 8,12, 4, 5, 5,14,14, 9, 8, 0,10, 1, 9,15,10,13, 5, 2, 7, 1, 2, 6, 5, 5,11, 0,13, 8, 0, 7, 2, 15,11,15, 0, 5,15, 5, 6, 0, 2, 5, 3, 0,14,14, 4,11, 7, 7, 4,10,11, 1, 8,13, 9, 4,13, 3, 6, 1,10, - 1, 0,15,15,12,10, 6,11, 3, 4, 7, 8, 7,14, 8, 7,12,15, 9, 8, 7,14,14, 9,15, 8, 9, 4,12, 3,12,12, - 7, 8,11, 2, 4, 8, 4, 9, 4,11,15, 2,13, 6, 3,13, 1,13, 5, 0, 2,10, 5, 8, 1,13,14, 0,11,15, 8,12, + 1, 0,15,15,12,10, 6,11, 3, 4, 7, 8, 7,14, 8, 7,12,15, 9, 8, 7,14,14, 9,15, 8, 9, 4,12, 3,12,12, + 7, 8,11, 2, 4, 8, 4, 9, 4,11,15, 2,13, 6, 3,13, 1,13, 5, 0, 2,10, 5, 8, 1,13,14, 0,11,15, 8,12, 10, 4, 5,10, 4,11,11, 2, 2,13, 2, 6, 0, 7, 4,11, 1,12, 6,13,14, 5, 9, 0, 5,13,14, 6,13, 3,13, 9, 14,14, 0, 9,12,14, 9,10, 1, 2,12, 3, 3,15, 8, 4, 3, 1,13,13,13,13, 4, 3, 5,15, 8, 2,15,13,11, 7, - 4, 0,15,14, 1,13, 6, 8, 2, 8, 7,14,11, 7, 4, 1, 8,12,13,11, 0, 9, 0, 3,12,11, 2, 3, 9, 1, 3,13, - 4, 5,15,10, 5, 9, 0, 3, 9, 6,13, 7,15,13,11,13,12, 6,14,15, 3, 6,10, 3,11,10, 1, 4,13, 0,15,15, + 4, 0,15,14, 1,13, 6, 8, 2, 8, 7,14,11, 7, 4, 1, 8,12,13,11, 0, 9, 0, 3,12,11, 2, 3, 9, 1, 3,13, + 4, 5,15,10, 5, 9, 0, 3, 9, 6,13, 7,15,13,11,13,12, 6,14,15, 3, 6,10, 3,11,10, 1, 4,13, 0,15,15, 11, 0, 7,14, 9,15, 1,14, 2,13, 7,12,11, 7, 9, 6,11, 5,12, 4, 3, 6, 8, 3, 9, 0,15, 7, 1,11, 7,12, - 2,13,13, 3, 0,11, 1,11, 6, 1, 5, 5, 4, 5,12, 3, 3,15, 3,10, 7,12,15, 0,13,10, 0, 2, 6,12, 9, 5, - 3, 0, 0, 6, 3,13, 7,14,11,15, 7, 2, 2,11, 6,11, 9, 3,10,11, 1, 8, 1,13, 0,11, 2,10, 3,12, 4,11, - 0, 0,10,10, 2, 3,15, 0, 0, 9,14, 5,14,10,14, 0,13, 1, 1,12, 3, 3, 1,15, 8, 8,11,13, 8, 4, 8, 5, - 8, 7,13, 2, 1, 1,14,15, 1, 7, 7, 1,14, 1, 4,14, 0, 0, 7, 6, 5,11, 5, 8, 7, 1, 4, 3, 8,14, 5,11, + 2,13,13, 3, 0,11, 1,11, 6, 1, 5, 5, 4, 5,12, 3, 3,15, 3,10, 7,12,15, 0,13,10, 0, 2, 6,12, 9, 5, + 3, 0, 0, 6, 3,13, 7,14,11,15, 7, 2, 2,11, 6,11, 9, 3,10,11, 1, 8, 1,13, 0,11, 2,10, 3,12, 4,11, + 0, 0,10,10, 2, 3,15, 0, 0, 9,14, 5,14,10,14, 0,13, 1, 1,12, 3, 3, 1,15, 8, 8,11,13, 8, 4, 8, 5, + 8, 7,13, 2, 1, 1,14,15, 1, 7, 7, 1,14, 1, 4,14, 0, 0, 7, 6, 5,11, 5, 8, 7, 1, 4, 3, 8,14, 5,11, 13, 8, 1, 9, 6,12, 9, 6, 3, 3,11,12, 5,11, 4, 4, 3,11, 0, 0,10,10, 7,15,15,11, 1,11,13,11, 6, 8, - 2,15,10, 7, 0, 6, 3, 5, 2,14,12, 8,12,10,15, 8, 4,11, 8,13,11, 2, 5,13,10, 5, 9,10,15, 6, 3,12, - 3, 0,11,15, 5,13,12,13,12, 0, 8,12,10, 0, 5, 5, 3, 2,10, 5, 3,10, 7, 2,13,12,15,13, 1,10, 4,10, + 2,15,10, 7, 0, 6, 3, 5, 2,14,12, 8,12,10,15, 8, 4,11, 8,13,11, 2, 5,13,10, 5, 9,10,15, 6, 3,12, + 3, 0,11,15, 5,13,12,13,12, 0, 8,12,10, 0, 5, 5, 3, 2,10, 5, 3,10, 7, 2,13,12,15,13, 1,10, 4,10, 12,14,12, 1, 6,13, 6, 6, 0,13,11, 4, 5, 7, 1, 7, 7, 0, 4,13,13,12,14, 6, 1, 3,13,11, 1, 4, 9, 9, - 2,12, 8, 5,10,15, 2, 0,14, 9, 5, 8,11, 5, 3, 4, 7, 1, 2,13, 3, 8, 1, 3,11,12,11, 5, 1, 5,10,12, + 2,12, 8, 5,10,15, 2, 0,14, 9, 5, 8,11, 5, 3, 4, 7, 1, 2,13, 3, 8, 1, 3,11,12,11, 5, 1, 5,10,12, 10, 2,10,13,12, 3, 9, 2,12,14,13, 8, 2, 1, 5, 3,15, 2, 8, 2, 1,15,10, 6,10, 3, 8, 9, 6, 9, 2,10, - 4,12,10,15,14,15, 1,15, 0,13, 6, 0, 5, 6,13,12, 2,14, 0,10, 6,15, 8, 8, 6, 8, 2,12,11, 3, 9, 5, - 9,15,11, 3,11,14,15, 6,14, 6, 7,12, 7,10, 6,14, 6, 6, 3, 5, 9,14, 7, 5, 8, 6, 2,12,15, 1, 2, 4, + 4,12,10,15,14,15, 1,15, 0,13, 6, 0, 5, 6,13,12, 2,14, 0,10, 6,15, 8, 8, 6, 8, 2,12,11, 3, 9, 5, + 9,15,11, 3,11,14,15, 6,14, 6, 7,12, 7,10, 6,14, 6, 6, 3, 5, 9,14, 7, 5, 8, 6, 2,12,15, 1, 2, 4, 11, 6, 3, 0, 5,11,14,14,14, 4,13, 6,11, 6, 4,12,15, 2, 4, 1, 1, 5, 1,15, 7, 0, 5, 0, 0, 0,12, 1, }; @@ -335,69 +335,69 @@ static const uint8_t deco74_xor_table[0x800] = { 13,13, 0,10, 8,15,12, 0,10, 8,13,15,12, 3,15, 2,11, 1, 8,10,13, 4,10,12,11, 2, 0, 3, 0,11, 8,11, - 5,14,11, 2, 5, 3, 8,11, 8,13,14, 4, 3,13,11,10,14, 6, 9,11,11, 8, 0,15, 2, 4, 5, 7,15, 8,13,11, - 7, 0,12, 3,13, 3, 1, 2, 6,14,10, 3,15,11,15, 7,13,14, 4, 6, 1,10,14, 8, 4,15, 2, 8,15, 9, 3,11, + 5,14,11, 2, 5, 3, 8,11, 8,13,14, 4, 3,13,11,10,14, 6, 9,11,11, 8, 0,15, 2, 4, 5, 7,15, 8,13,11, + 7, 0,12, 3,13, 3, 1, 2, 6,14,10, 3,15,11,15, 7,13,14, 4, 6, 1,10,14, 8, 4,15, 2, 8,15, 9, 3,11, 15,11, 1,14,11, 5, 6,14, 3, 9,12,14,15,12, 6,15,12,13, 3,15, 4, 0, 8, 0, 6, 8, 0, 1, 6,10,14, 9, 12,15, 3, 5,11, 4, 9, 6, 9,13,12, 0,12,14, 9, 9,13,10,15, 8,15, 4, 9, 3,15,15,14, 8, 9, 0,10,11, 15,15, 1,15,10, 6,11,15, 7,11, 8,15, 2,12,15,15, 1,14,10,13, 0,14, 4, 3,12,13, 3, 5, 7, 0, 4, 1, - 3, 5,13, 2, 0, 7, 2,13, 3, 7, 9, 2,15, 0, 2, 2, 2, 8, 6, 6,14, 2,15,11, 8, 0, 1,15, 5, 4, 2,15, + 3, 5,13, 2, 0, 7, 2,13, 3, 7, 9, 2,15, 0, 2, 2, 2, 8, 6, 6,14, 2,15,11, 8, 0, 1,15, 5, 4, 2,15, 13, 1, 1,13, 4,10,15, 3,14, 2,12, 8, 9, 8,13, 2, 0,14, 2, 9, 0, 2,12, 3, 4,15,13, 8, 4,12, 3,11, 13,15, 5, 8, 7, 7, 7,15, 5,11,10, 4, 2, 1, 4,11,11,11, 8,10, 1,13, 5, 3, 1, 5, 8,15,10, 3,10, 9, - 4,14, 2, 8, 6,14,14, 9, 7, 2,15, 0,15, 5,10, 3, 5,12,10, 0, 7, 2, 1,11, 4,13,10,14, 3, 1, 1, 1, - 9,10,11, 0,14, 0, 1,11, 1, 2, 4,14, 9, 1,12,15, 0,10,11, 6,10, 4, 9, 1, 1, 5, 4, 3,15, 9,11, 0, - 7,12,10, 9, 3,14, 4,11,11, 3, 2,10, 1,12, 4, 3,11, 1, 9, 1,15, 9, 3,11,12, 7,11, 6,15, 8, 1, 3, + 4,14, 2, 8, 6,14,14, 9, 7, 2,15, 0,15, 5,10, 3, 5,12,10, 0, 7, 2, 1,11, 4,13,10,14, 3, 1, 1, 1, + 9,10,11, 0,14, 0, 1,11, 1, 2, 4,14, 9, 1,12,15, 0,10,11, 6,10, 4, 9, 1, 1, 5, 4, 3,15, 9,11, 0, + 7,12,10, 9, 3,14, 4,11,11, 3, 2,10, 1,12, 4, 3,11, 1, 9, 1,15, 9, 3,11,12, 7,11, 6,15, 8, 1, 3, 10,12,10, 4, 2,13,13,11, 3,13, 1, 2, 7,13, 6, 6, 7,14,12,15, 9, 7,15, 7,15, 6, 5,11, 5, 1,15,11, 11, 7,14,12,12, 4,11, 3, 8, 9, 8,15,12, 8,10, 6, 0,12, 5, 9, 6, 7,10, 6, 1, 6,13, 1, 3,10, 8, 2, - 1,13, 9, 4, 6,11, 2, 6, 2,15, 4,13, 3, 0, 7, 0, 9, 0, 6,14, 2,12,11, 0, 5,12, 7, 2, 6, 0, 2,10, + 1,13, 9, 4, 6,11, 2, 6, 2,15, 4,13, 3, 0, 7, 0, 9, 0, 6,14, 2,12,11, 0, 5,12, 7, 2, 6, 0, 2,10, 10, 5, 1,12, 5,14,12, 1,13, 2, 6,11, 7,10, 0, 0, 7, 1, 8,10, 2, 3, 6, 4,11,10,10,13,15, 0,14,10, - 3, 8,14,10, 0, 7, 2, 4, 4, 4, 0, 9,15, 9,14, 3, 4, 3, 5, 4, 7,15, 6,13, 7,12, 1,12,10, 1, 8,15, - 5,15,12,13,14,14, 0, 4, 0, 0, 5, 0, 6,14, 8,14,14, 1,11, 5, 5,11, 3, 0, 2,15,11, 2, 7, 1,14,10, + 3, 8,14,10, 0, 7, 2, 4, 4, 4, 0, 9,15, 9,14, 3, 4, 3, 5, 4, 7,15, 6,13, 7,12, 1,12,10, 1, 8,15, + 5,15,12,13,14,14, 0, 4, 0, 0, 5, 0, 6,14, 8,14,14, 1,11, 5, 5,11, 3, 0, 2,15,11, 2, 7, 1,14,10, 14, 3, 1, 5, 5,10, 1,10,13,13, 9, 9, 2, 1, 6, 7, 6, 7,11,15, 6, 6, 4,12, 8, 4, 3, 0, 0,15, 8, 2, - 2,14, 1, 8,11, 7,11,10, 3,10, 6,10,14,10,14, 6, 1, 3, 5, 2, 2, 5, 5, 5, 8, 3,12,15, 6, 9,12,10, - 4, 8,11, 6, 1, 8, 9,15,15,10, 0, 6,11, 8, 2, 9,15, 2, 2,10, 0, 5, 6, 5,11, 0, 0, 6, 0, 1,13, 6, - 4, 4, 4, 1, 4, 0, 9,12, 2,10,13, 5,10,12,15,10,12, 3, 4, 7,10,13, 3,15,12,11, 6, 8,13, 2, 8,10, - 3,12,13, 9,10, 4, 2,11, 1, 4, 9, 1,11, 2,14, 5, 2, 0,10,12, 0, 6, 7, 0, 2,10,15, 9, 0, 0, 8, 1, - 0, 9, 1,14, 0,13,12,13, 9, 6,10,12,10, 0,13, 3, 7, 4,12, 0,11, 0, 0,11, 5, 0,14,15,11, 8, 2, 5, - 4, 6, 5, 9,13, 5, 4, 4,13, 4, 0,12,10, 3, 2, 2, 0,13,11,12, 4,12, 9, 7,13,14,14, 8, 5, 0,13, 0, - 1, 4,15,15, 9, 8, 5,12,13, 8,12, 8, 8,10, 0,15, 8,11, 5, 6, 9, 8,10,12, 9,12, 5,14, 6, 9, 7,15, - 1, 9,15, 0, 1, 9, 1, 2, 8, 1, 4,12, 1, 4, 9, 7, 2,10, 8, 1,13, 6, 0,12, 0, 6,12,13, 5, 9, 4,12, - 7,14,10, 4, 6, 8,12, 4, 9, 1, 2, 2, 3,13,10, 2,15, 7, 1, 6, 0,12, 5,10, 9, 1, 0,14,15, 3, 7, 6, - 9,12,13, 7, 0,13, 2, 5, 7,13, 1, 3, 8,15, 9,10, 3, 0,15, 2,11, 5, 7, 3,10, 7, 4, 0, 7, 2,10, 2, - 0, 3, 6, 6,13, 0, 5, 9,13, 8,11, 9, 0, 4, 1,11,15, 5,15, 3, 1,15, 1,15,12, 8, 9, 4, 1, 5, 8,11, - 5, 7, 6,11, 5, 7,15,15, 9, 4, 7,12,14,11, 8, 6, 7, 7,12, 3, 9,12, 6, 9, 5, 8,13,14, 6,14, 4, 7, + 2,14, 1, 8,11, 7,11,10, 3,10, 6,10,14,10,14, 6, 1, 3, 5, 2, 2, 5, 5, 5, 8, 3,12,15, 6, 9,12,10, + 4, 8,11, 6, 1, 8, 9,15,15,10, 0, 6,11, 8, 2, 9,15, 2, 2,10, 0, 5, 6, 5,11, 0, 0, 6, 0, 1,13, 6, + 4, 4, 4, 1, 4, 0, 9,12, 2,10,13, 5,10,12,15,10,12, 3, 4, 7,10,13, 3,15,12,11, 6, 8,13, 2, 8,10, + 3,12,13, 9,10, 4, 2,11, 1, 4, 9, 1,11, 2,14, 5, 2, 0,10,12, 0, 6, 7, 0, 2,10,15, 9, 0, 0, 8, 1, + 0, 9, 1,14, 0,13,12,13, 9, 6,10,12,10, 0,13, 3, 7, 4,12, 0,11, 0, 0,11, 5, 0,14,15,11, 8, 2, 5, + 4, 6, 5, 9,13, 5, 4, 4,13, 4, 0,12,10, 3, 2, 2, 0,13,11,12, 4,12, 9, 7,13,14,14, 8, 5, 0,13, 0, + 1, 4,15,15, 9, 8, 5,12,13, 8,12, 8, 8,10, 0,15, 8,11, 5, 6, 9, 8,10,12, 9,12, 5,14, 6, 9, 7,15, + 1, 9,15, 0, 1, 9, 1, 2, 8, 1, 4,12, 1, 4, 9, 7, 2,10, 8, 1,13, 6, 0,12, 0, 6,12,13, 5, 9, 4,12, + 7,14,10, 4, 6, 8,12, 4, 9, 1, 2, 2, 3,13,10, 2,15, 7, 1, 6, 0,12, 5,10, 9, 1, 0,14,15, 3, 7, 6, + 9,12,13, 7, 0,13, 2, 5, 7,13, 1, 3, 8,15, 9,10, 3, 0,15, 2,11, 5, 7, 3,10, 7, 4, 0, 7, 2,10, 2, + 0, 3, 6, 6,13, 0, 5, 9,13, 8,11, 9, 0, 4, 1,11,15, 5,15, 3, 1,15, 1,15,12, 8, 9, 4, 1, 5, 8,11, + 5, 7, 6,11, 5, 7,15,15, 9, 4, 7,12,14,11, 8, 6, 7, 7,12, 3, 9,12, 6, 9, 5, 8,13,14, 6,14, 4, 7, 12,12, 2,14,10, 2, 1,10, 3, 8,12,11,12, 7,12,15, 7,13, 9,15, 6, 3, 1,14,13,14, 8,11,14, 4, 9, 2, 13,13, 0, 2, 9,11, 3, 2, 4,11, 6, 8, 2,14, 7,15, 8, 8, 9, 5, 4,15,11, 7,13, 7, 4,15,15, 4, 2, 1, - 6, 4, 3,15, 0,11,14,15, 6,15,11,14,10, 4, 4, 0, 5, 4, 6,15, 8,10,15, 1, 3, 8,13, 3, 3, 0, 7, 7, - 2, 3, 2,11,14, 1,12,13,10, 2, 4,13, 4,13, 9, 3, 2, 1,14, 9, 8,11,15, 4, 8, 9,13, 2,10,14, 2, 4, - 8,13,13,14,12, 1, 5,15,13, 3,12, 8,11,12,12, 1, 0,15, 9, 2, 6, 9, 3,12, 5, 0,10, 8, 5, 6,11,14, - 7, 7, 0,10, 0,14,10, 8, 4,12, 5, 3,11,10, 5,13,15, 9,14,12,12, 0,14, 3, 2,12, 9,14,11,11, 9, 2, - 8, 9,13, 0,10, 3,14,14,13, 6, 4,14, 2,10,10, 9,10, 4, 5, 4, 5, 3, 4, 6,15, 5,14, 2, 6,10, 4, 8, - 6, 9, 9, 7, 3, 3, 9, 5, 9, 8,10, 5, 0,13, 7, 8, 4, 1, 3,13, 4, 1, 8,10, 3,11,13, 3,12, 0, 2, 0, - 3, 1, 3, 3, 1, 6,13, 2, 3,13,11, 5, 9, 0, 4,12, 6,11, 4, 4, 3, 3,12, 7,13, 2,15,12, 1,11,15, 7, + 6, 4, 3,15, 0,11,14,15, 6,15,11,14,10, 4, 4, 0, 5, 4, 6,15, 8,10,15, 1, 3, 8,13, 3, 3, 0, 7, 7, + 2, 3, 2,11,14, 1,12,13,10, 2, 4,13, 4,13, 9, 3, 2, 1,14, 9, 8,11,15, 4, 8, 9,13, 2,10,14, 2, 4, + 8,13,13,14,12, 1, 5,15,13, 3,12, 8,11,12,12, 1, 0,15, 9, 2, 6, 9, 3,12, 5, 0,10, 8, 5, 6,11,14, + 7, 7, 0,10, 0,14,10, 8, 4,12, 5, 3,11,10, 5,13,15, 9,14,12,12, 0,14, 3, 2,12, 9,14,11,11, 9, 2, + 8, 9,13, 0,10, 3,14,14,13, 6, 4,14, 2,10,10, 9,10, 4, 5, 4, 5, 3, 4, 6,15, 5,14, 2, 6,10, 4, 8, + 6, 9, 9, 7, 3, 3, 9, 5, 9, 8,10, 5, 0,13, 7, 8, 4, 1, 3,13, 4, 1, 8,10, 3,11,13, 3,12, 0, 2, 0, + 3, 1, 3, 3, 1, 6,13, 2, 3,13,11, 5, 9, 0, 4,12, 6,11, 4, 4, 3, 3,12, 7,13, 2,15,12, 1,11,15, 7, 10, 0, 9, 3, 3,13,12,12, 9,14, 2, 2, 0, 3,12, 2, 0,15, 0,10, 1, 9, 8, 3, 2, 3, 9, 1, 4, 5,12, 9, 10,11, 0, 2, 2,11, 5,13, 8, 1, 7, 8, 4,12,11, 1, 2,11, 7, 7, 8, 6, 5, 8, 8,14, 2, 6,10, 6, 1, 9, - 3, 4, 2, 9,11, 1, 4, 9, 8,13, 5, 0,15,13, 0, 9, 9,11, 5,11, 6, 4, 6, 9, 5, 1,13, 8, 8, 2,14,14, - 2, 3,14,12, 4, 6,15, 4,11,14, 7, 2, 3,14, 4,15, 4, 1, 8,13, 5, 5, 7, 0, 6,14, 0, 1, 1,13, 5,10, + 3, 4, 2, 9,11, 1, 4, 9, 8,13, 5, 0,15,13, 0, 9, 9,11, 5,11, 6, 4, 6, 9, 5, 1,13, 8, 8, 2,14,14, + 2, 3,14,12, 4, 6,15, 4,11,14, 7, 2, 3,14, 4,15, 4, 1, 8,13, 5, 5, 7, 0, 6,14, 0, 1, 1,13, 5,10, 10,14,14,10, 2, 9, 1,11, 5, 6, 8,12, 4, 2, 7, 7,11, 6,13,15, 1, 3, 9, 0,14,12, 9, 2, 3, 2, 1, 9, 12, 7, 4,12,14, 3, 3, 2, 3,14,10, 5, 8, 4, 9, 9,11,14,13,15,14, 7, 3,13, 0, 9, 4, 9,12,12, 1, 2, 10,11, 7,11, 1, 9, 2, 8, 1, 4, 5,14, 8,15, 9, 3, 8, 9, 6, 3, 7, 3, 1,10, 7, 5,13,14, 8, 7, 4,10, 14, 4, 6, 9, 6, 2, 5, 3, 8, 0, 9, 7, 2, 7,12, 8,12, 2,15, 4, 5, 0,11, 8,11, 2,14, 8,15, 0, 8, 9, 14, 5, 4,13,12,11, 2, 6,11, 9, 9, 7,14, 6, 6, 7, 4, 6, 3, 5,12, 5,11, 1,12,14, 0,13,15,13, 2, 2, - 1, 8, 3,11, 3, 1, 6, 9,12,12, 5,10, 7,13,15, 4,12,10, 9,11,12,14,12,11,15, 2, 3, 2, 7, 8,15, 2, - 2, 0,12,12, 9,11,13,14,13, 7, 3,11,11,14,12, 3, 2, 7, 4, 8, 9,11, 8,11, 5,10, 3, 7,15,11,12,15, + 1, 8, 3,11, 3, 1, 6, 9,12,12, 5,10, 7,13,15, 4,12,10, 9,11,12,14,12,11,15, 2, 3, 2, 7, 8,15, 2, + 2, 0,12,12, 9,11,13,14,13, 7, 3,11,11,14,12, 3, 2, 7, 4, 8, 9,11, 8,11, 5,10, 3, 7,15,11,12,15, 10, 8, 5,13, 8, 3, 9, 8, 5, 7, 1,15,15, 0,13, 7, 8, 6, 8,10, 8, 6, 6, 3, 4,10,13, 1, 6, 6,10, 1, - 2,11, 4,15,15, 3, 1, 1,14,12, 1,15, 1, 6, 8,10,14,14, 9, 4, 7, 8, 6, 5, 3, 1, 0, 5, 3, 8, 6, 1, - 4, 2,13,15,14, 5,13,11,10,13,11,11, 6,10, 7, 2, 1,15, 2,10, 5, 0,11, 5,15, 8, 0,14, 3,12,11, 7, + 2,11, 4,15,15, 3, 1, 1,14,12, 1,15, 1, 6, 8,10,14,14, 9, 4, 7, 8, 6, 5, 3, 1, 0, 5, 3, 8, 6, 1, + 4, 2,13,15,14, 5,13,11,10,13,11,11, 6,10, 7, 2, 1,15, 2,10, 5, 0,11, 5,15, 8, 0,14, 3,12,11, 7, 10, 1, 4, 0, 3,15, 7,15,12, 8, 9, 0, 1,15,13, 2, 3, 2,15,15,14,14, 7, 8,12,11,15,15,14, 2, 8, 8, - 2, 0,15, 4, 2, 5,14,10, 4,12, 2, 1, 0,13, 7, 5, 4, 3,11, 6, 0, 2, 6,14, 9,14,10,13, 6,10, 5, 8, + 2, 0,15, 4, 2, 5,14,10, 4,12, 2, 1, 0,13, 7, 5, 4, 3,11, 6, 0, 2, 6,14, 9,14,10,13, 6,10, 5, 8, 15, 2, 4, 7, 1, 8, 5, 3,11, 5,12, 1, 3, 1,14, 4, 8,12, 6,10,14, 7,14, 7,15,14, 5,10, 6, 9, 3, 6, 12,15, 1,12, 0, 6, 1, 4,13,13, 7, 1, 7, 1, 9, 1, 8, 6, 9, 9, 8,12, 5, 2, 8,11, 9, 1, 3, 9, 0,11, 14, 8, 5, 9, 7, 7,14, 4, 6, 1, 6,11, 4, 0,15, 5, 9, 8, 5,13, 2, 6,13,10,12, 3, 4, 3,15, 5, 6,14, - 2,10,14, 1, 5, 9, 6, 1, 9, 2, 7,11,14, 7,14, 5, 8, 9,14,13,14, 8, 3, 8, 4,10, 3,14, 0,13,12,15, - 9, 9, 0, 4, 6, 7,12,13,12, 1,15, 2,13,13, 8,10,13, 5,12, 5, 4, 0, 2, 1,13,12, 2,14, 9,15,13, 9, - 7,13, 7, 0,14, 7,12,15, 3,11, 0, 5, 8, 1, 0,12, 9, 0,11,13, 6, 3, 3, 7, 2, 2, 3, 5,14,14, 0, 9, - 2, 6, 4,12, 2, 6, 3,12, 3,13, 3,14, 7, 1, 8,15,14, 3, 0,10, 2,15,15, 9,14,11,10,12,13,13,13, 9, - 7, 7,12, 5, 3,14, 1, 5, 1,10, 6, 7, 9, 8,15, 7,13,11, 4, 5, 4,10,14,14,12, 1,13,14,15,14,15,10, + 2,10,14, 1, 5, 9, 6, 1, 9, 2, 7,11,14, 7,14, 5, 8, 9,14,13,14, 8, 3, 8, 4,10, 3,14, 0,13,12,15, + 9, 9, 0, 4, 6, 7,12,13,12, 1,15, 2,13,13, 8,10,13, 5,12, 5, 4, 0, 2, 1,13,12, 2,14, 9,15,13, 9, + 7,13, 7, 0,14, 7,12,15, 3,11, 0, 5, 8, 1, 0,12, 9, 0,11,13, 6, 3, 3, 7, 2, 2, 3, 5,14,14, 0, 9, + 2, 6, 4,12, 2, 6, 3,12, 3,13, 3,14, 7, 1, 8,15,14, 3, 0,10, 2,15,15, 9,14,11,10,12,13,13,13, 9, + 7, 7,12, 5, 3,14, 1, 5, 1,10, 6, 7, 9, 8,15, 7,13,11, 4, 5, 4,10,14,14,12, 1,13,14,15,14,15,10, }; static const uint16_t deco74_address_table[0x800] = @@ -605,16 +605,15 @@ uint16_t *rom = (uint16_t *)machine.root_device().memregion(rgntag)->base(); int len = machine.root_device().memregion(rgntag)->bytes()/2; std::vector buffer(len); - int i; - /* we work on 16-bit words but data is loaded as 8-bit, so swap bytes on LSB machines */ + // we work on 16-bit words but data is loaded as 8-bit, so swap bytes on LSB machines if (ENDIANNESS_NATIVE == ENDIANNESS_LITTLE) - for (i = 0;i < len;i++) + for (int i = 0; i < len; i++) rom[i] = big_endianize_int16(rom[i]); - memcpy(&buffer[0],rom,len*2); + memcpy(&buffer[0], rom, len*2); - for (i = 0;i < len;i++) + for (int i = 0; i < len; i++) { int addr = (i & ~0x7ff) | address_table[i & 0x7ff]; int pat = swap_table[i & 0x7ff]; @@ -623,27 +622,27 @@ rom[i] = buffer[addr]; else rom[i] = bitswap<16>(buffer[addr] ^ xor_masks[xor_table[addr & 0x7ff]], - swap_patterns[pat][0], - swap_patterns[pat][1], - swap_patterns[pat][2], - swap_patterns[pat][3], - swap_patterns[pat][4], - swap_patterns[pat][5], - swap_patterns[pat][6], - swap_patterns[pat][7], - swap_patterns[pat][8], - swap_patterns[pat][9], - swap_patterns[pat][10], - swap_patterns[pat][11], - swap_patterns[pat][12], - swap_patterns[pat][13], - swap_patterns[pat][14], - swap_patterns[pat][15]); + swap_patterns[pat][0], + swap_patterns[pat][1], + swap_patterns[pat][2], + swap_patterns[pat][3], + swap_patterns[pat][4], + swap_patterns[pat][5], + swap_patterns[pat][6], + swap_patterns[pat][7], + swap_patterns[pat][8], + swap_patterns[pat][9], + swap_patterns[pat][10], + swap_patterns[pat][11], + swap_patterns[pat][12], + swap_patterns[pat][13], + swap_patterns[pat][14], + swap_patterns[pat][15]); } - /* we work on 16-bit words but data is loaded as 8-bit, so swap bytes on LSB machines */ + // we work on 16-bit words but data is loaded as 8-bit, so swap bytes on LSB machines if (ENDIANNESS_NATIVE == ENDIANNESS_LITTLE) - for (i = 0;i < len;i++) + for (int i = 0; i < len; i++) rom[i] = big_endianize_int16(rom[i]); } diff -Nru mame-0.250+dfsg.1/src/mame/dataeast/deco_mlc.cpp mame-0.251+dfsg.1/src/mame/dataeast/deco_mlc.cpp --- mame-0.250+dfsg.1/src/mame/dataeast/deco_mlc.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/dataeast/deco_mlc.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1058,8 +1058,8 @@ GAME( 1996, stadhr96j, stadhr96, stadhr96, mlc, deco_mlc_state, init_mlc, ROT0, "Data East Corporation", "Stadium Hero '96 (Japan, EAD)", MACHINE_IMPERFECT_GRAPHICS ) // Rom labels are EAD (this isn't a Konami region code!) GAME( 1996, stadhr96j2, stadhr96, stadhr96, mlc, deco_mlc_state, init_mlc, ROT0, "Data East Corporation", "Stadium Hero '96 (Japan?, EAE)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // Rom labels are EAE ^^ GAME( 1996, skullfng, 0, mlc_6bpp, mlc, deco_mlc_state, init_mlc, ROT270, "Data East Corporation", "Skull Fang (Europe 1.13)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // Version 1.13, Europe, Master 96.02.19 13:45 -GAME( 1996, skullfngj, skullfng, mlc_6bpp, mlc, deco_mlc_state, init_mlc, ROT270, "Data East Corporation", "Skull Fang (Japan 1.09)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // Version 1.09, Japan, Master 96.02.08 14:39 -GAME( 1996, skullfnga, skullfng, mlc_6bpp, mlc, deco_mlc_state, init_mlc, ROT270, "Data East Corporation", "Skull Fang (Asia 1.13)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // Version 1.13, Asia, Master 96.02.19 13:49 +GAME( 1996, skullfngj, skullfng, mlc_6bpp, mlc, deco_mlc_state, init_mlc, ROT270, "Data East Corporation", "Skull Fang - Kuhga Gaiden (Japan 1.09)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // Version 1.09, Japan, Master 96.02.08 14:39 +GAME( 1996, skullfnga, skullfng, mlc_6bpp, mlc, deco_mlc_state, init_mlc, ROT270, "Data East Corporation", "Skull Fang - Kuhga Gaiden (Asia 1.13)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // Version 1.13, Asia, Master 96.02.19 13:49 GAME( 1996, hoops96, 0, mlc_5bpp, mlc, deco_mlc_state, init_mlc, ROT0, "Data East Corporation", "Hoops '96 (Europe/Asia 2.0)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1995, ddream95, hoops96, mlc_5bpp, mlc, deco_mlc_state, init_mlc, ROT0, "Data East Corporation", "Dunk Dream '95 (Japan 1.4, EAM)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1995, hoops95, hoops96, mlc_5bpp, mlc, deco_mlc_state, init_mlc, ROT0, "Data East Corporation", "Hoops (Europe/Asia 1.7)", MACHINE_IMPERFECT_GRAPHICS ) diff -Nru mame-0.250+dfsg.1/src/mame/dataeast/exprraid.cpp mame-0.251+dfsg.1/src/mame/dataeast/exprraid.cpp --- mame-0.250+dfsg.1/src/mame/dataeast/exprraid.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/dataeast/exprraid.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -213,6 +213,7 @@ #include "cpu/m6809/m6809.h" #include "sound/ymopn.h" #include "sound/ymopl.h" + #include "screen.h" #include "speaker.h" @@ -561,13 +562,13 @@ ROM_LOAD( "cz06.8h", 0x18000, 0x8000, CRC(b9bb448b) SHA1(84974b1f3a5b58cd427d874f805a6dd9244c1101) ) /* tiles */ ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */ - ROM_LOAD( "cz03.12d", 0x0000, 0x8000, CRC(6ce11971) SHA1(16bfa69b3ad02253e81c8110c9b840be03952790) ) + ROM_LOAD( "cz03.12f", 0x0000, 0x8000, CRC(6ce11971) SHA1(16bfa69b3ad02253e81c8110c9b840be03952790) ) ROM_REGION( 0x0400, "proms", 0 ) /* All 4 proms are Fujitsu MB7114 or compatible */ ROM_LOAD( "cy-17.5b", 0x0000, 0x0100, CRC(da31dfbc) SHA1(ac476440864f538918f7bef2e1db82fd19195f89) ) /* red */ ROM_LOAD( "cy-16.6b", 0x0100, 0x0100, CRC(51f25b4c) SHA1(bfcca57613fbb22919e00db1f6a8c7ca50faa60b) ) /* green */ ROM_LOAD( "cy-15.7b", 0x0200, 0x0100, CRC(a6168d7f) SHA1(0c7b31adcd764ce2631c3fb5c1a968b01f65e741) ) /* blue */ - ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* ??? */ + ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* priority */ ROM_REGION( 0x0400, "plds", 0 ) ROM_LOAD( "pal16r4a.5c", 0x0000, 0x0104, CRC(d66aaa87) SHA1(dc29b473238ed6a9de2076c79644b613a9ba6924) ) @@ -600,13 +601,13 @@ ROM_LOAD( "cz06.8h", 0x18000, 0x8000, CRC(b9bb448b) SHA1(84974b1f3a5b58cd427d874f805a6dd9244c1101) ) /* tiles */ ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */ - ROM_LOAD( "cz03.12d", 0x0000, 0x8000, CRC(6ce11971) SHA1(16bfa69b3ad02253e81c8110c9b840be03952790) ) + ROM_LOAD( "cz03.12f", 0x0000, 0x8000, CRC(6ce11971) SHA1(16bfa69b3ad02253e81c8110c9b840be03952790) ) ROM_REGION( 0x0400, "proms", 0 ) /* All 4 proms are Fujitsu MB7114 or compatible */ ROM_LOAD( "cy-17.5b", 0x0000, 0x0100, CRC(da31dfbc) SHA1(ac476440864f538918f7bef2e1db82fd19195f89) ) /* red */ ROM_LOAD( "cy-16.6b", 0x0100, 0x0100, CRC(51f25b4c) SHA1(bfcca57613fbb22919e00db1f6a8c7ca50faa60b) ) /* green */ ROM_LOAD( "cy-15.7b", 0x0200, 0x0100, CRC(a6168d7f) SHA1(0c7b31adcd764ce2631c3fb5c1a968b01f65e741) ) /* blue */ - ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* ??? */ + ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* priority */ ROM_REGION( 0x0400, "plds", 0 ) ROM_LOAD( "pal16r4a.5c", 0x0000, 0x0104, CRC(d66aaa87) SHA1(dc29b473238ed6a9de2076c79644b613a9ba6924) ) @@ -639,13 +640,13 @@ ROM_LOAD( "cz06.8h", 0x18000, 0x8000, CRC(b9bb448b) SHA1(84974b1f3a5b58cd427d874f805a6dd9244c1101) ) /* tiles */ ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */ - ROM_LOAD( "cz03.12d", 0x0000, 0x8000, CRC(6ce11971) SHA1(16bfa69b3ad02253e81c8110c9b840be03952790) ) + ROM_LOAD( "cz03.12f", 0x0000, 0x8000, CRC(6ce11971) SHA1(16bfa69b3ad02253e81c8110c9b840be03952790) ) ROM_REGION( 0x0400, "proms", 0 ) /* All 4 proms are Fujitsu MB7114 or compatible */ ROM_LOAD( "cy-17.5b", 0x0000, 0x0100, CRC(da31dfbc) SHA1(ac476440864f538918f7bef2e1db82fd19195f89) ) /* red */ ROM_LOAD( "cy-16.6b", 0x0100, 0x0100, CRC(51f25b4c) SHA1(bfcca57613fbb22919e00db1f6a8c7ca50faa60b) ) /* green */ ROM_LOAD( "cy-15.7b", 0x0200, 0x0100, CRC(a6168d7f) SHA1(0c7b31adcd764ce2631c3fb5c1a968b01f65e741) ) /* blue */ - ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* ??? */ + ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* priority */ ROM_REGION( 0x0400, "plds", 0 ) ROM_LOAD( "pal16r4a.5c", 0x0000, 0x0104, CRC(d66aaa87) SHA1(dc29b473238ed6a9de2076c79644b613a9ba6924) ) @@ -678,13 +679,13 @@ ROM_LOAD( "cy06.8h", 0x18000, 0x8000, CRC(c3a56de5) SHA1(aefc516c6c69b12291c0bda03729910181a91a17) ) /* tiles */ ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */ - ROM_LOAD( "cy03.12d", 0x0000, 0x8000, CRC(242e3e64) SHA1(4fa8e93ef055bfdbe3bd619c53bf2448e1b832f0) ) + ROM_LOAD( "cy03.12f", 0x0000, 0x8000, CRC(242e3e64) SHA1(4fa8e93ef055bfdbe3bd619c53bf2448e1b832f0) ) ROM_REGION( 0x0400, "proms", 0 ) /* All 4 proms are Fujitsu MB7114 or compatible */ ROM_LOAD( "cy-17.5b", 0x0000, 0x0100, CRC(da31dfbc) SHA1(ac476440864f538918f7bef2e1db82fd19195f89) ) /* red */ ROM_LOAD( "cy-16.6b", 0x0100, 0x0100, CRC(51f25b4c) SHA1(bfcca57613fbb22919e00db1f6a8c7ca50faa60b) ) /* green */ ROM_LOAD( "cy-15.7b", 0x0200, 0x0100, CRC(a6168d7f) SHA1(0c7b31adcd764ce2631c3fb5c1a968b01f65e741) ) /* blue */ - ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* ??? */ + ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* priority */ ROM_REGION( 0x0400, "plds", 0 ) ROM_LOAD( "pal16r4a.5c", 0x0000, 0x0104, CRC(d66aaa87) SHA1(dc29b473238ed6a9de2076c79644b613a9ba6924) ) @@ -717,13 +718,13 @@ ROM_LOAD( "cy06.8h", 0x18000, 0x8000, CRC(c3a56de5) SHA1(aefc516c6c69b12291c0bda03729910181a91a17) ) /* tiles */ ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */ - ROM_LOAD( "cy03.12d", 0x0000, 0x8000, CRC(242e3e64) SHA1(4fa8e93ef055bfdbe3bd619c53bf2448e1b832f0) ) + ROM_LOAD( "cy03.12f", 0x0000, 0x8000, CRC(242e3e64) SHA1(4fa8e93ef055bfdbe3bd619c53bf2448e1b832f0) ) ROM_REGION( 0x0400, "proms", 0 ) /* All 4 proms are Fujitsu MB7114 or compatible */ ROM_LOAD( "cy-17.5b", 0x0000, 0x0100, CRC(da31dfbc) SHA1(ac476440864f538918f7bef2e1db82fd19195f89) ) /* red */ ROM_LOAD( "cy-16.6b", 0x0100, 0x0100, CRC(51f25b4c) SHA1(bfcca57613fbb22919e00db1f6a8c7ca50faa60b) ) /* green */ ROM_LOAD( "cy-15.7b", 0x0200, 0x0100, CRC(a6168d7f) SHA1(0c7b31adcd764ce2631c3fb5c1a968b01f65e741) ) /* blue */ - ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* ??? */ + ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* priority */ ROM_REGION( 0x0400, "plds", 0 ) ROM_LOAD( "pal16r4a.5c", 0x0000, 0x0104, CRC(d66aaa87) SHA1(dc29b473238ed6a9de2076c79644b613a9ba6924) ) @@ -756,13 +757,13 @@ ROM_LOAD( "cy06.8h", 0x18000, 0x8000, CRC(c3a56de5) SHA1(aefc516c6c69b12291c0bda03729910181a91a17) ) /* tiles */ ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */ - ROM_LOAD( "cy03.12d", 0x0000, 0x8000, CRC(242e3e64) SHA1(4fa8e93ef055bfdbe3bd619c53bf2448e1b832f0) ) + ROM_LOAD( "cy03.12f", 0x0000, 0x8000, CRC(242e3e64) SHA1(4fa8e93ef055bfdbe3bd619c53bf2448e1b832f0) ) ROM_REGION( 0x0400, "proms", 0 ) /* All 4 proms are Fujitsu MB7114 or compatible */ ROM_LOAD( "cy-17.5b", 0x0000, 0x0100, CRC(da31dfbc) SHA1(ac476440864f538918f7bef2e1db82fd19195f89) ) /* red */ ROM_LOAD( "cy-16.6b", 0x0100, 0x0100, CRC(51f25b4c) SHA1(bfcca57613fbb22919e00db1f6a8c7ca50faa60b) ) /* green */ ROM_LOAD( "cy-15.7b", 0x0200, 0x0100, CRC(a6168d7f) SHA1(0c7b31adcd764ce2631c3fb5c1a968b01f65e741) ) /* blue */ - ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* ??? */ + ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* priority */ ROM_END ROM_START( wexpressb3 ) @@ -791,33 +792,28 @@ ROM_LOAD( "cy06.8h", 0x18000, 0x8000, CRC(c3a56de5) SHA1(aefc516c6c69b12291c0bda03729910181a91a17) ) /* tiles */ ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */ - ROM_LOAD( "3.12d", 0x0000, 0x8000, CRC(242e3e64) SHA1(4fa8e93ef055bfdbe3bd619c53bf2448e1b832f0) ) + ROM_LOAD( "3.12f", 0x0000, 0x8000, CRC(242e3e64) SHA1(4fa8e93ef055bfdbe3bd619c53bf2448e1b832f0) ) ROM_REGION( 0x0400, "proms", 0 ) /* Proms Weren't Present In This Set, Using the One from the Other */ ROM_LOAD( "cy-17.5b", 0x0000, 0x0100, CRC(da31dfbc) SHA1(ac476440864f538918f7bef2e1db82fd19195f89) ) /* red */ ROM_LOAD( "cy-16.6b", 0x0100, 0x0100, CRC(51f25b4c) SHA1(bfcca57613fbb22919e00db1f6a8c7ca50faa60b) ) /* green */ ROM_LOAD( "cy-15.7b", 0x0200, 0x0100, CRC(a6168d7f) SHA1(0c7b31adcd764ce2631c3fb5c1a968b01f65e741) ) /* blue */ - ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* ??? */ + ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* priority */ ROM_END void exprraid_state::exprraid_gfx_expand() { /* Expand the background rom so we can use regular decode routines */ - - uint8_t *gfx = memregion("gfx3")->base(); + uint8_t *gfx = memregion("gfx3")->base(); int offs = 0x10000 - 0x1000; - int i; - - for ( i = 0x8000 - 0x1000; i >= 0; i-= 0x1000 ) + for (int i = 0x8000 - 0x1000; i >= 0; i-= 0x1000) { memcpy(&(gfx[offs]), &(gfx[i]), 0x1000); - offs -= 0x1000; memcpy(&(gfx[offs]), &(gfx[i]), 0x1000); - offs -= 0x1000; } } diff -Nru mame-0.250+dfsg.1/src/mame/dataeast/exprraid_v.cpp mame-0.251+dfsg.1/src/mame/dataeast/exprraid_v.cpp --- mame-0.250+dfsg.1/src/mame/dataeast/exprraid_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/dataeast/exprraid_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -18,11 +18,7 @@ void exprraid_state::exprraid_flipscreen_w(uint8_t data) { - if (flip_screen() != (data & 0x01)) - { - flip_screen_set(data & 0x01); - machine().tilemap().mark_all_dirty(); - } + flip_screen_set(data & 0x01); } void exprraid_state::exprraid_bgselect_w(offs_t offset, uint8_t data) @@ -91,9 +87,7 @@ void exprraid_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) { - int offs; - - for (offs = 0; offs < m_spriteram.bytes(); offs += 4) + for (int offs = 0; offs < m_spriteram.bytes(); offs += 4) { int attr = m_spriteram[offs + 1]; int code = m_spriteram[offs + 3] + ((attr & 0xe0) << 3); @@ -112,18 +106,17 @@ } m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, - code, color, - flipx, flipy, - sx, sy, 0); - - /* double height */ + code, color, + flipx, flipy, + sx, sy, 0); + // double height if (attr & 0x10) { m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, - code + 1, color, - flipx, flipy, - sx, sy + (flip_screen() ? -16 : 16), 0); + code + 1, color, + flipx, flipy, + sx, sy + (flip_screen() ? -16 : 16), 0); } } } diff -Nru mame-0.250+dfsg.1/src/mame/dataeast/pcktgal.cpp mame-0.251+dfsg.1/src/mame/dataeast/pcktgal.cpp --- mame-0.250+dfsg.1/src/mame/dataeast/pcktgal.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/dataeast/pcktgal.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -12,6 +12,8 @@ Emulation by Bryan McPhail, mish@tendril.co.uk + TODO: determine how to best deal with pcktgalba peculiarities without + duplicating too much code ***************************************************************************/ #include "emu.h" @@ -469,6 +471,36 @@ ROM_LOAD( "pal16r6", 0x0200, 0x0104, CRC(43aad537) SHA1(892104f4315d7a739718ce32b910694ea9b13fae) ) // also seen peel18CV8 used on other boards ROM_END +ROM_START( pcktgalba ) // strange bootleg with 2 connected PCBs, one for the Pocket Gal bootleg and one for an unknown card game. Pocket Gal used as cover for a stealth gambling game? + // Pocket Gal PCB: standard chips emulated in this driver, with no Data East customs + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "sex_v1.3", 0x00000, 0x10000, CRC(e278da6b) SHA1(71306fc8f8129cb2f924c67fe8dfdf82f02652e8) ) // minor differences to pcktgalb, probably to allow for game switching + + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "2_sex", 0x00000, 0x10000, CRC(cb029b02) SHA1(fbb3da08ed05ae73fbeeb13e0e2ff735aaf83db8) ) + + ROM_REGION( 0x20000, "chars", 0 ) + ROM_LOAD( "5_sex", 0x00000, 0x10000, CRC(3128dc7b) SHA1(d011181e544b8284ecdf54578da5469804e06c63) ) + ROM_LOAD( "6_sex", 0x10000, 0x10000, CRC(0fc91eeb) SHA1(9d9a54c8dd41c10d07aabb6a2d8dbaf35c6e4533) ) + + ROM_REGION( 0x10000, "sprites", 0 ) + ROM_LOAD( "3_sex", 0x00000, 0x08000, CRC(58182daa) SHA1(55ce4b0ea2cb1c559c12815c9e453624e0d95515) ) + ROM_LOAD( "4_sex", 0x08000, 0x08000, CRC(33a67af6) SHA1(6d9c04658ed75b970821a5c8b1f60c3c08fdda0a) ) + + ROM_REGION( 0x0400, "proms", 0 ) // not dumped for this PCB + ROM_LOAD( "prom1", 0x0000, 0x0200, BAD_DUMP CRC(3b6198cb) SHA1(d32b364cfce99637998ca83ad21783f80364dd65) ) + ROM_LOAD( "prom2", 0x0200, 0x0200, BAD_DUMP CRC(1fbd4b59) SHA1(84e20329003cf09b849b49e1d83edc330d49f404) ) + + // unknown card game PCB: Z84C00AB6 (Z80), 2 scratched off chips (possibly I8255?), AY38912A/P, 4 8-dip banks + ROM_REGION( 0x4000, "z80", 0 ) + ROM_LOAD( "7_sex.u45", 0x0000, 0x4000, CRC(65b0b6d0) SHA1(29dc3da40ff990df943b3b0e7474a0ba3fbb6468) ) // seems to contain 2 versions of the program. The second one is almost identical to unkitpkr in midcoin/wallc.cpp + + ROM_REGION( 0x6000, "card_chars", 0 ) + ROM_LOAD( "8_sex.u35", 0x0000, 0x2000, CRC(36e450e5) SHA1(848000d656cd00d32898c22677940f11789e50d4) ) // 2nd half is identical to unkitpkr in midcoin/wallc.cpp + ROM_LOAD( "9_sex.u36", 0x2000, 0x2000, CRC(ffcc1198) SHA1(d90ae88e2755f614fdea11cd6935366f4d588144) ) // " + ROM_LOAD( "10_sex.u37", 0x4000, 0x2000, CRC(73cf56a0) SHA1(fd2fdd997bca7b96ddd3898f0b6279c1dd60ec92) ) // " +ROM_END + ROM_START( pcktgal2 ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "eb04-2.j7", 0x00000, 0x10000, CRC(0c7f2905) SHA1(882dbc1888a0149486c1fac5568dc3d297c2dadd) ) @@ -572,9 +604,10 @@ /***************************************************************************/ -GAME( 1987, pcktgal, 0, pcktgal, pcktgal, pcktgal_state, init_original, ROT0, "Data East Corporation", "Pocket Gal (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, pcktgalb, pcktgal, bootleg, pcktgal, pcktgal_state, empty_init, ROT0, "bootleg", "Pocket Gal (Yada East bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, pcktgal2, pcktgal, pcktgal2,pcktgal, pcktgal_state, init_original, ROT0, "Data East Corporation", "Pocket Gal 2 (English)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, pcktgal2j,pcktgal, pcktgal2,pcktgal, pcktgal_state, init_original, ROT0, "Data East Corporation", "Pocket Gal 2 (Japanese)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, spool3, pcktgal, pcktgal2,pcktgal, pcktgal_state, init_original, ROT0, "Data East Corporation", "Super Pool III (English)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, pcktgal, 0, pcktgal, pcktgal, pcktgal_state, init_original, ROT0, "Data East Corporation", "Pocket Gal (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, pcktgalb, pcktgal, bootleg, pcktgal, pcktgal_state, empty_init, ROT0, "bootleg", "Pocket Gal (Yada East bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, pcktgalba,pcktgal, bootleg, pcktgal, pcktgal_state, empty_init, ROT0, "bootleg", "Pocket Gal / unknown card game", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // only the Pocket Gal game is emulated +GAME( 1989, pcktgal2, pcktgal, pcktgal2,pcktgal, pcktgal_state, init_original, ROT0, "Data East Corporation", "Pocket Gal 2 (English)", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, pcktgal2j,pcktgal, pcktgal2,pcktgal, pcktgal_state, init_original, ROT0, "Data East Corporation", "Pocket Gal 2 (Japanese)", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, spool3, pcktgal, pcktgal2,pcktgal, pcktgal_state, init_original, ROT0, "Data East Corporation", "Super Pool III (English)", MACHINE_SUPPORTS_SAVE ) GAME( 1990, spool3i, pcktgal, pcktgal2,pcktgal, pcktgal_state, init_original, ROT0, "Data East Corporation (I-Vics license)", "Super Pool III (I-Vics)", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/dataeast/sshangha.cpp mame-0.251+dfsg.1/src/mame/dataeast/sshangha.cpp --- mame-0.250+dfsg.1/src/mame/dataeast/sshangha.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/dataeast/sshangha.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,5 +1,6 @@ // license:BSD-3-Clause -// copyright-holders:Bryan McPhail, Charles MacDonald, David Haywood +// copyright-holders: Bryan McPhail, Charles MacDonald, David Haywood + /*************************************************************************** Super Shanghai Dragon's Eye (c) 1992 Hot-B @@ -78,19 +79,177 @@ ***************************************************************************/ #include "emu.h" -#include "sshangha.h" -#include "cpu/z80/z80.h" +#include "deco146.h" +#include "deco16ic.h" +#include "decospr.h" + #include "cpu/m68000/m68000.h" +#include "cpu/z80/z80.h" #include "sound/okim6295.h" #include "sound/ymopn.h" + +#include "emupal.h" #include "screen.h" #include "speaker.h" +// configurable logging +#define LOG_VIDEOREGS (1U << 1) + +//#define VERBOSE (LOG_GENERAL | LOG_VIDEOREGS) + +#include "logmacro.h" + +#define LOGVIDEOREGS(...) LOGMASKED(LOG_VIDEOREGS, __VA_ARGS__) + + +namespace { + #define SSHANGHA_HACK 0 +class sshangha_state : public driver_device +{ +public: + sshangha_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_audiocpu(*this, "audiocpu"), + m_palette(*this, "palette"), + m_sprgen(*this, "spritegen%u", 1U), + m_tilegen(*this, "tilegen"), + m_deco146(*this, "ioprot"), + m_spriteram(*this, "spriteram%u", 1U), + m_sound_shared_ram(*this, "sound_shared"), + m_pf_rowscroll(*this, "pf%u_rowscroll", 1U), + m_prot_data(*this, "prot_data"), + m_inputs(*this, "INPUTS"), + m_system(*this, "SYSTEM"), + m_dsw(*this, "DSW") + { } + + void sshanghab(machine_config &config); + void sshangha(machine_config &config); + + void init_sshangha(); + +protected: + virtual void video_start() override; + +private: + required_device m_maincpu; + required_device m_audiocpu; + required_device m_palette; + required_device_array m_sprgen; + required_device m_tilegen; + optional_device m_deco146; + + required_shared_ptr_array m_spriteram; + required_shared_ptr m_sound_shared_ram; + required_shared_ptr_array m_pf_rowscroll; + optional_shared_ptr m_prot_data; + + required_ioport m_inputs; + required_ioport m_system; + required_ioport m_dsw; + + uint16_t m_video_control = 0; + + DECO16IC_BANK_CB_MEMBER(bank_callback); + uint16_t mix_callback(uint16_t p, uint16_t p2); + + uint16_t sshangha_protection_region_8_146_r(offs_t offset); + void sshangha_protection_region_8_146_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + uint16_t sshangha_protection_region_d_146_r(offs_t offset); + void sshangha_protection_region_d_146_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + uint16_t deco_71_r(); + uint16_t sshanghab_protection16_r(offs_t offset); + + uint8_t sound_shared_r(offs_t offset); + void sound_shared_w(offs_t offset, uint8_t data); + + void video_w(uint16_t data); + + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void sshangha_main_map(address_map &map); + void sound_map(address_map &map); + void sshanghab_main_map(address_map &map); +}; + + +// video + +/*************************************************************************** + + Uses Data East custom chip 55 for backgrounds, with a special 8bpp mode + 2 times custom chips 52/71 for sprites. + +***************************************************************************/ + +/******************************************************************************/ + +void sshangha_state::video_w(uint16_t data) +{ + // 0x4: Special video mode, other bits unknown + m_video_control = data; + LOGVIDEOREGS("video_w: %04x", data); +} + +/******************************************************************************/ + +void sshangha_state::video_start() +{ + m_sprgen[0]->alloc_sprite_bitmap(); + m_sprgen[1]->alloc_sprite_bitmap(); + + save_item(NAME(m_video_control)); +} + +/******************************************************************************/ + +uint32_t sshangha_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + const bool combine_tilemaps = (m_video_control & 4) ? false : true; + + // sprites are flipped relative to tilemaps + uint16_t flip = m_tilegen->pf_control_r(0); + flip_screen_set(BIT(flip, 7)); + m_sprgen[0]->set_flip_screen(!BIT(flip, 7)); + m_sprgen[1]->set_flip_screen(!BIT(flip, 7)); + // render sprites to temp bitmaps + m_sprgen[0]->draw_sprites(bitmap, cliprect, m_spriteram[0], 0x400); + m_sprgen[1]->draw_sprites(bitmap, cliprect, m_spriteram[1], 0x400); + + // draw / mix + bitmap.fill(m_palette->black_pen(), cliprect); + + m_tilegen->pf_update(m_pf_rowscroll[0], m_pf_rowscroll[1]); + + // TODO: fully verify draw order / priorities + + // the tilemap 4bpp + 4bpp = 8bpp mixing actually seems external to the tilemap, note video_control is not part of the tilemap chip + if (combine_tilemaps) + m_tilegen->tilemap_12_combine_draw(screen, bitmap, cliprect, 0, 0); + else + m_tilegen->tilemap_2_draw(screen, bitmap, cliprect, 0, 0); + + // pri, primask,palbase,palmask + m_sprgen[0]->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x000, 0x000, 0x200, 0x0ff); // low+high pri spr1 (definitely needs to be below low pri spr2 - game tiles & definitely needs to be below tilemap1 - lightning on win screen in traditional mode) + m_sprgen[1]->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x200, 0x200, 0x000, 0x0ff); // low pri spr2 (definitely needs to be below tilemap1 - 2nd level failure screen etc.) + + if (!combine_tilemaps) + m_tilegen->tilemap_1_draw(screen, bitmap, cliprect, 0, 0); + + // pri, primask,palbase,palmask + m_sprgen[1]->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x000, 0x200, 0x000, 0x0ff); // high pri spr2 (definitely needs to be above tilemap1 - title logo) + + return 0; +} + + +// machine /******************************************************************************/ @@ -102,17 +261,17 @@ switch (offset) { case 0x050 >> 1: - return ioport("INPUTS")->read(); + return m_inputs->read(); case 0x76a >> 1: - return ioport("SYSTEM")->read(); + return m_system->read(); case 0x0ac >> 1: - return ioport("DSW")->read(); + return m_dsw->read(); } - return m_prot_data[offset]; + return m_prot_data[offset]; // TODO: m_prot_data share isn't mapped in the bootleg, so this is useless? } -/* Probably returns 0xffff when sprite DMA is complete, the game waits on it */ +// Probably returns 0xffff when sprite DMA is complete, the game waits on it uint16_t sshangha_state::deco_71_r() { return 0xffff; @@ -123,39 +282,39 @@ uint16_t sshangha_state::sshangha_protection_region_d_146_r(offs_t offset) { - int real_address = 0x3f4000 + (offset *2); - int deco146_addr = bitswap<32>(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff; + int const real_address = 0x3f4000 + (offset * 2); + int const deco146_addr = bitswap<32>(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff; uint8_t cs = 0; - uint16_t data = m_deco146->read_data( deco146_addr, cs ); + uint16_t const data = m_deco146->read_data(deco146_addr, cs); return data; } void sshangha_state::sshangha_protection_region_d_146_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - int real_address = 0x3f4000 + (offset *2); - int deco146_addr = bitswap<32>(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff; + int const real_address = 0x3f4000 + (offset * 2); + int const deco146_addr = bitswap<32>(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff; uint8_t cs = 0; - m_deco146->write_data( deco146_addr, data, mem_mask, cs ); + m_deco146->write_data(deco146_addr, data, mem_mask, cs); } uint16_t sshangha_state::sshangha_protection_region_8_146_r(offs_t offset) { - int real_address = 0x3e0000 + (offset *2); - int deco146_addr = bitswap<32>(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff; + int const real_address = 0x3e0000 + (offset * 2); + int const deco146_addr = bitswap<32>(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff; uint8_t cs = 0; - uint16_t data = m_deco146->read_data( deco146_addr, cs ); + uint16_t const data = m_deco146->read_data(deco146_addr, cs); return data; } void sshangha_state::sshangha_protection_region_8_146_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - int real_address = 0x3e0000 + (offset *2); - int deco146_addr = bitswap<32>(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff; + int const real_address = 0x3e0000 + (offset *2); + int const deco146_addr = bitswap<32>(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff; uint8_t cs = 0; - m_deco146->write_data( deco146_addr, data, mem_mask, cs ); + m_deco146->write_data(deco146_addr, data, mem_mask, cs); } -void sshangha_state::sshangha_map(address_map &map) +void sshangha_state::sshangha_main_map(address_map &map) { map.global_mask(0x3fffff); map(0x000000, 0x03ffff).rom(); @@ -163,18 +322,18 @@ map(0x200000, 0x201fff).rw(m_tilegen, FUNC(deco16ic_device::pf1_data_r), FUNC(deco16ic_device::pf1_data_w)); map(0x202000, 0x203fff).rw(m_tilegen, FUNC(deco16ic_device::pf2_data_r), FUNC(deco16ic_device::pf2_data_w)); - map(0x204000, 0x2047ff).ram().share(m_pf1_rowscroll); - map(0x206000, 0x2067ff).ram().share(m_pf2_rowscroll); + map(0x204000, 0x2047ff).ram().share(m_pf_rowscroll[0]); + map(0x206000, 0x2067ff).ram().share(m_pf_rowscroll[1]); map(0x206800, 0x207fff).ram(); map(0x300000, 0x30000f).w(m_tilegen, FUNC(deco16ic_device::pf_control_w)); map(0x320000, 0x320001).w(FUNC(sshangha_state::video_w)); map(0x320002, 0x320005).nopw(); map(0x320006, 0x320007).nopr(); //irq ack - map(0x340000, 0x3407ff).mirror(0x800).ram().share(m_spriteram2); + map(0x340000, 0x3407ff).mirror(0x800).ram().share(m_spriteram[1]); map(0x350000, 0x350001).r(FUNC(sshangha_state::deco_71_r)); map(0x350000, 0x350007).nopw(); - map(0x360000, 0x3607ff).mirror(0x800).ram().share(m_spriteram); + map(0x360000, 0x3607ff).mirror(0x800).ram().share(m_spriteram[0]); map(0x370000, 0x370001).r(FUNC(sshangha_state::deco_71_r)); map(0x370000, 0x370007).nopw(); @@ -185,16 +344,16 @@ map(0x3f4000, 0x3f7fff).rw(FUNC(sshangha_state::sshangha_protection_region_d_146_r), FUNC(sshangha_state::sshangha_protection_region_d_146_w)).share(m_prot_data); } -void sshangha_state::sshanghab_map(address_map &map) +void sshangha_state::sshanghab_main_map(address_map &map) { map(0x000000, 0x03ffff).rom(); map(0x084000, 0x0847ff).r(FUNC(sshangha_state::sshanghab_protection16_r)); - map(0x101000, 0x10100f).ram().share(m_sound_shared_ram); /* the bootleg writes here */ + map(0x101000, 0x10100f).ram().share(m_sound_shared_ram); // the bootleg writes here map(0x200000, 0x201fff).rw(m_tilegen, FUNC(deco16ic_device::pf1_data_r), FUNC(deco16ic_device::pf1_data_w)); map(0x202000, 0x203fff).rw(m_tilegen, FUNC(deco16ic_device::pf2_data_r), FUNC(deco16ic_device::pf2_data_w)); - map(0x204000, 0x2047ff).ram().share(m_pf1_rowscroll); - map(0x206000, 0x2067ff).ram().share(m_pf2_rowscroll); + map(0x204000, 0x2047ff).ram().share(m_pf_rowscroll[0]); + map(0x206000, 0x2067ff).ram().share(m_pf_rowscroll[1]); map(0x206800, 0x207fff).ram(); map(0x300000, 0x30000f).w(m_tilegen, FUNC(deco16ic_device::pf_control_w)); map(0x320000, 0x320001).w(FUNC(sshangha_state::video_w)); @@ -206,8 +365,8 @@ map(0x380000, 0x380fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x381000, 0x383fff).ram(); // unused palette area - map(0x3c0000, 0x3c07ff).ram().share(m_spriteram); // bootleg spriteram - map(0x3c0800, 0x3c0fff).ram().share(m_spriteram2); + map(0x3c0000, 0x3c07ff).ram().share(m_spriteram[0]); // bootleg spriteram + map(0x3c0800, 0x3c0fff).ram().share(m_spriteram[1]); map(0xfec000, 0xff3fff).ram(); map(0xff4000, 0xff47ff).ram(); @@ -215,7 +374,7 @@ /******************************************************************************/ -/* 8 "sound latches" shared between main and sound cpus. */ +// 8 "sound latches" shared between main and sound CPUs. uint8_t sshangha_state::sound_shared_r(offs_t offset) { @@ -224,10 +383,10 @@ void sshangha_state::sound_shared_w(offs_t offset, uint8_t data) { - m_sound_shared_ram[offset] = data & 0xff; + m_sound_shared_ram[offset] = data; } -/* Note: there's rom data after 0x8000 but the game never seem to call a rom bank, left-over? */ +// Note: there's ROM data after 0x8000 but the game never seem to call a ROM bank, left-over? void sshangha_state::sound_map(address_map &map) { map(0x0000, 0x7fff).rom(); @@ -240,7 +399,7 @@ /******************************************************************************/ static INPUT_PORTS_START( sshangha ) - PORT_START("INPUTS") /* 0xfec046.b - 0xfec047.b */ + PORT_START("INPUTS") // 0xfec046.b - 0xfec047.b PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) @@ -268,8 +427,8 @@ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - /* Dips seem inverted with respect to other Deco games */ - PORT_START("DSW") /* 0xfec04b.b - 0xfec04a.b, inverted bits order */ + // Dips seem inverted with respect to other Deco games + PORT_START("DSW") // 0xfec04b.b - 0xfec04a.b, inverted bits order PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0080, DEF_STR( On ) ) @@ -277,27 +436,27 @@ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_SERVICE_DIPLOC( 0x0020, IP_ACTIVE_LOW, "SW1:3" ) - PORT_DIPNAME( 0x0010, 0x0010, "Coin Mode" ) PORT_DIPLOCATION("SW1:4") /* Manual states "Always Off" - Check code at 0x000010f2 */ + PORT_DIPNAME( 0x0010, 0x0010, "Coin Mode" ) PORT_DIPLOCATION("SW1:4") // Manual states "Always Off" - Check code at 0x000010f2 PORT_DIPSETTING( 0x0010, "Mode 1" ) PORT_DIPSETTING( 0x0000, "Mode 2" ) PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5,6") - PORT_DIPSETTING( 0x0008, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSW", 0x0010, EQUALS, 0x0010) //Mode 1 - PORT_DIPSETTING( 0x000c, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSW", 0x0010, EQUALS, 0x0010) //Mode 1 - PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) PORT_CONDITION("DSW", 0x0010, EQUALS, 0x0010) //Mode 1 - PORT_DIPSETTING( 0x0004, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSW", 0x0010, EQUALS, 0x0010) //Mode 1 - PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) PORT_CONDITION("DSW", 0x0010, NOTEQUALS, 0x0010) //Mode 2 - PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) ) PORT_CONDITION("DSW", 0x0010, NOTEQUALS, 0x0010) //Mode 2 - PORT_DIPSETTING( 0x000c, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSW", 0x0010, NOTEQUALS, 0x0010) //Mode 2 - PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) ) PORT_CONDITION("DSW", 0x0010, NOTEQUALS, 0x0010) //Mode 2 + PORT_DIPSETTING( 0x0008, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSW", 0x0010, EQUALS, 0x0010) // Mode 1 + PORT_DIPSETTING( 0x000c, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSW", 0x0010, EQUALS, 0x0010) // Mode 1 + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) PORT_CONDITION("DSW", 0x0010, EQUALS, 0x0010) // Mode 1 + PORT_DIPSETTING( 0x0004, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSW", 0x0010, EQUALS, 0x0010) // Mode 1 + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) PORT_CONDITION("DSW", 0x0010, NOTEQUALS, 0x0010) // Mode 2 + PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) ) PORT_CONDITION("DSW", 0x0010, NOTEQUALS, 0x0010) // Mode 2 + PORT_DIPSETTING( 0x000c, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSW", 0x0010, NOTEQUALS, 0x0010) // Mode 2 + PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) ) PORT_CONDITION("DSW", 0x0010, NOTEQUALS, 0x0010) // Mode 2 PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:7,8") - PORT_DIPSETTING( 0x0002, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSW", 0x0010, EQUALS, 0x0010) //Mode 1 - PORT_DIPSETTING( 0x0003, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSW", 0x0010, EQUALS, 0x0010) //Mode 1 - PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) PORT_CONDITION("DSW", 0x0010, EQUALS, 0x0010) //Mode 1 - PORT_DIPSETTING( 0x0001, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSW", 0x0010, EQUALS, 0x0010) //Mode 1 - PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) PORT_CONDITION("DSW", 0x0010, NOTEQUALS, 0x0010) //Mode 2 - PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) ) PORT_CONDITION("DSW", 0x0010, NOTEQUALS, 0x0010) //Mode 2 - PORT_DIPSETTING( 0x0003, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSW", 0x0010, NOTEQUALS, 0x0010) //Mode 2 - PORT_DIPSETTING( 0x0001, DEF_STR( 1C_4C ) ) PORT_CONDITION("DSW", 0x0010, NOTEQUALS, 0x0010) //Mode 2 + PORT_DIPSETTING( 0x0002, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSW", 0x0010, EQUALS, 0x0010) // Mode 1 + PORT_DIPSETTING( 0x0003, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSW", 0x0010, EQUALS, 0x0010) // Mode 1 + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) PORT_CONDITION("DSW", 0x0010, EQUALS, 0x0010) // Mode 1 + PORT_DIPSETTING( 0x0001, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSW", 0x0010, EQUALS, 0x0010) // Mode 1 + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) PORT_CONDITION("DSW", 0x0010, NOTEQUALS, 0x0010) // Mode 2 + PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) ) PORT_CONDITION("DSW", 0x0010, NOTEQUALS, 0x0010) // Mode 2 + PORT_DIPSETTING( 0x0003, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSW", 0x0010, NOTEQUALS, 0x0010) // Mode 2 + PORT_DIPSETTING( 0x0001, DEF_STR( 1C_4C ) ) PORT_CONDITION("DSW", 0x0010, NOTEQUALS, 0x0010) // Mode 2 PORT_DIPNAME( 0xc000, 0xc000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2") PORT_DIPSETTING( 0x4000, DEF_STR( Easy ) ) PORT_DIPSETTING( 0xc000, DEF_STR( Normal ) ) @@ -308,9 +467,9 @@ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) #else - PORT_DIPUNUSED_DIPLOC( 0x2000, 0x2000, "SW2:3" ) /* Listed as "Unused" - However see notes */ + PORT_DIPUNUSED_DIPLOC( 0x2000, 0x2000, "SW2:3" ) // Listed as "Unused" - However see notes #endif - PORT_DIPUNUSED_DIPLOC( 0x1000, 0x1000, "SW2:4" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x1000, 0x1000, "SW2:4" ) // Listed as "Unused" PORT_DIPNAME( 0x0800, 0x0800, "Tile Animation" ) PORT_DIPLOCATION("SW2:5") PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) PORT_DIPSETTING( 0x0800, DEF_STR( Yes ) ) @@ -329,9 +488,9 @@ static const gfx_layout charlayout = { - 8,8, /* 8*8 chars */ + 8,8, // 8*8 chars RGN_FRAC(1,2), - 4, /* 4 bits per pixel */ + 4, // 4 bits per pixel { 8, 0, RGN_FRAC(1,2)+8,RGN_FRAC(1,2)+0 }, { STEP8(0,1) }, { STEP8(0,8*2) }, @@ -350,10 +509,10 @@ }; static GFXDECODE_START( gfx_sshangha ) - GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0x000, 64 ) /* Characters 8x8 */ - GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0x000, 64 ) /* Tiles 16x16 */ - GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0x000, 64 ) /* Sprites 16x16 */ - GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 0x000, 64 ) /* Sprites 16x16 */ + GFXDECODE_ENTRY( "tiles", 0, charlayout, 0x000, 64 ) // 8x8 + GFXDECODE_ENTRY( "tiles", 0, tilelayout, 0x000, 64 ) // 16x16 + GFXDECODE_ENTRY( "sprites1", 0, tilelayout, 0x000, 64 ) // 16x16 + GFXDECODE_ENTRY( "sprites2", 0, tilelayout, 0x000, 64 ) // 16x16 GFXDECODE_END /******************************************************************************/ @@ -363,17 +522,17 @@ return (bank >> 4) * 0x1000; } -// similar as tattass (deco32.cpp) but base color is pf2 color bank -u16 sshangha_state::mix_callback(u16 p, u16 p2) +// similar as tattass (dataeast/deco32.cpp) but base color is pf2 color bank +uint16_t sshangha_state::mix_callback(uint16_t p, uint16_t p2) { return (p2 & 0x300) ^ (((p & 0x10) << 5) | (p & 0x0f) | ((p2 & 0x0f) << 4)); } void sshangha_state::sshangha(machine_config &config) { - /* basic machine hardware */ - M68000(config, m_maincpu, 16_MHz_XTAL); /* CPU marked as 16MHz part */ - m_maincpu->set_addrmap(AS_PROGRAM, &sshangha_state::sshangha_map); + // basic machine hardware + M68000(config, m_maincpu, 16_MHz_XTAL); // CPU marked as 16MHz part + m_maincpu->set_addrmap(AS_PROGRAM, &sshangha_state::sshangha_main_map); m_maincpu->set_vblank_int("screen", FUNC(sshangha_state::irq6_line_hold)); Z80(config, m_audiocpu, 16_MHz_XTAL / 4); @@ -408,20 +567,20 @@ m_tilegen->set_pf12_16x16_bank(1); m_tilegen->set_gfxdecode_tag("gfxdecode"); - DECO_SPRITE(config, m_sprgen1, 0); - m_sprgen1->set_gfx_region(2); - m_sprgen1->set_gfxdecode_tag("gfxdecode"); - - DECO_SPRITE(config, m_sprgen2, 0); - m_sprgen2->set_gfx_region(3); - m_sprgen2->set_gfxdecode_tag("gfxdecode"); + DECO_SPRITE(config, m_sprgen[0], 0); + m_sprgen[0]->set_gfx_region(2); + m_sprgen[0]->set_gfxdecode_tag("gfxdecode"); + + DECO_SPRITE(config, m_sprgen[1], 0); + m_sprgen[1]->set_gfx_region(3); + m_sprgen[1]->set_gfxdecode_tag("gfxdecode"); DECO146PROT(config, m_deco146, 0); - m_deco146->port_a_cb().set_ioport("INPUTS"); - m_deco146->port_b_cb().set_ioport("SYSTEM"); - m_deco146->port_c_cb().set_ioport("DSW"); + m_deco146->port_a_cb().set_ioport(m_inputs); + m_deco146->port_b_cb().set_ioport(m_system); + m_deco146->port_c_cb().set_ioport(m_dsw); - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); ym2203_device &ymsnd(YM2203(config, "ymsnd", 16_MHz_XTAL / 4)); @@ -436,7 +595,7 @@ { sshangha(config); - m_maincpu->set_addrmap(AS_PROGRAM, &sshangha_state::sshanghab_map); + m_maincpu->set_addrmap(AS_PROGRAM, &sshangha_state::sshanghab_main_map); config.device_remove("ioprot"); } @@ -444,100 +603,100 @@ /******************************************************************************/ ROM_START( sshangha ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "ss007e.u28", 0x00000, 0x20000, CRC(5f275f6e) SHA1(ca7790d2401c95aff48098800f0da9590a0d88a2) ) ROM_LOAD16_BYTE( "ss006e.u27", 0x00001, 0x20000, CRC(111327fe) SHA1(60f9e839a027eab5ef019dcb27cac2f0f9bf04d8) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */ + ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ss008-1.u82", 0x000000, 0x010000, CRC(ff128b54) SHA1(2cdae94000c695417ebfe302999baa8e8cec09bf) ) - ROM_REGION( 0x200000, "gfx1", 0 ) + ROM_REGION( 0x200000, "tiles", 0 ) ROM_LOAD( "ss001.u8", 0x000000, 0x100000, CRC(ebeca5b7) SHA1(1746e757ad9bbef2aa9028c54f25d4aa4dedf79e) ) ROM_LOAD( "ss002.u7", 0x100000, 0x100000, CRC(67659f29) SHA1(50944877665b7b848b3f7063892bd39a96a847cf) ) - ROM_REGION( 0x200000, "gfx2", 0 ) + ROM_REGION( 0x200000, "sprites1", 0 ) ROM_LOAD( "ss003.u39", 0x000000, 0x100000, CRC(fbecde72) SHA1(2fe32b28e77ec390c534d276261eefac3fbe21fd) ) ROM_LOAD( "ss004.u37", 0x100000, 0x100000, CRC(98b82c5e) SHA1(af1b52d4b36b1776c148478b5a5581e6a57256b8) ) - ROM_REGION( 0x200000, "gfx3", 0 ) // 2 sprite chips, 2 copies of sprite ROMs on PCB + ROM_REGION( 0x200000, "sprites2", 0 ) // 2 sprite chips, 2 copies of sprite ROMs on PCB ROM_LOAD( "ss003.u47", 0x000000, 0x100000, CRC(fbecde72) SHA1(2fe32b28e77ec390c534d276261eefac3fbe21fd) ) ROM_LOAD( "ss004.u46", 0x100000, 0x100000, CRC(98b82c5e) SHA1(af1b52d4b36b1776c148478b5a5581e6a57256b8) ) - ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */ + ROM_REGION( 0x40000, "oki", 0 ) // ADPCM samples ROM_LOAD( "ss005.u86", 0x000000, 0x040000, CRC(c53a82ad) SHA1(756e453c8b5ce8e47f93fbda3a9e48bb73e93e2e) ) ROM_END ROM_START( sshanghaj ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "ss007-1.u28", 0x00000, 0x20000, CRC(bc466edf) SHA1(b96525b2c879d15b46a7753fa6ebf12a851cd019) ) ROM_LOAD16_BYTE( "ss006-1.u27", 0x00001, 0x20000, CRC(872a2a2d) SHA1(42d7a01465d5c403354aaf0f2dab8adb9afe61b0) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */ + ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ss008.u82", 0x000000, 0x010000, CRC(04dc3647) SHA1(c06a7e8932c03de5759a9b69da0d761006b49517) ) - ROM_REGION( 0x200000, "gfx1", 0 ) + ROM_REGION( 0x200000, "tiles", 0 ) ROM_LOAD( "ss001.u8", 0x000000, 0x100000, CRC(ebeca5b7) SHA1(1746e757ad9bbef2aa9028c54f25d4aa4dedf79e) ) ROM_LOAD( "ss002.u7", 0x100000, 0x100000, CRC(67659f29) SHA1(50944877665b7b848b3f7063892bd39a96a847cf) ) - ROM_REGION( 0x200000, "gfx2", 0 ) + ROM_REGION( 0x200000, "sprites1", 0 ) ROM_LOAD( "ss003.u39", 0x000000, 0x100000, CRC(fbecde72) SHA1(2fe32b28e77ec390c534d276261eefac3fbe21fd) ) ROM_LOAD( "ss004.u37", 0x100000, 0x100000, CRC(98b82c5e) SHA1(af1b52d4b36b1776c148478b5a5581e6a57256b8) ) - ROM_REGION( 0x200000, "gfx3", 0 ) // 2 sprite chips, 2 copies of sprite ROMs on PCB + ROM_REGION( 0x200000, "sprites2", 0 ) // 2 sprite chips, 2 copies of sprite ROMs on PCB ROM_LOAD( "ss003.u47", 0x000000, 0x100000, CRC(fbecde72) SHA1(2fe32b28e77ec390c534d276261eefac3fbe21fd) ) ROM_LOAD( "ss004.u46", 0x100000, 0x100000, CRC(98b82c5e) SHA1(af1b52d4b36b1776c148478b5a5581e6a57256b8) ) - ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */ + ROM_REGION( 0x40000, "oki", 0 ) // ADPCM samples ROM_LOAD( "ss005.u86", 0x000000, 0x040000, CRC(c53a82ad) SHA1(756e453c8b5ce8e47f93fbda3a9e48bb73e93e2e) ) ROM_END -ROM_START( sshanghak ) /* Korean censored version - No girls in Paradise games */ - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ +ROM_START( sshanghak ) // Korean censored version - No girls in Paradise games + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "ss007k.u28", 0x00000, 0x20000, CRC(90dbf11c) SHA1(60ab0f3d3f43939e719196ff1775a3cd1c8c9aa0) ) ROM_LOAD16_BYTE( "ss006k.u27", 0x00001, 0x20000, CRC(07d94579) SHA1(25e4fb1669e12c7329e45a8ac0d52ac157a83d46) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */ + ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ss008.u82", 0x000000, 0x010000, CRC(04dc3647) SHA1(c06a7e8932c03de5759a9b69da0d761006b49517) ) - ROM_REGION( 0x200000, "gfx1", 0 ) + ROM_REGION( 0x200000, "tiles", 0 ) ROM_LOAD( "ss001.u8", 0x000000, 0x100000, CRC(ebeca5b7) SHA1(1746e757ad9bbef2aa9028c54f25d4aa4dedf79e) ) ROM_LOAD( "ss002.u7", 0x100000, 0x100000, CRC(67659f29) SHA1(50944877665b7b848b3f7063892bd39a96a847cf) ) - ROM_REGION( 0x200000, "gfx2", 0 ) + ROM_REGION( 0x200000, "sprites1", 0 ) ROM_LOAD( "ss003.u39", 0x000000, 0x100000, CRC(fbecde72) SHA1(2fe32b28e77ec390c534d276261eefac3fbe21fd) ) ROM_LOAD( "ss004.u37", 0x100000, 0x100000, CRC(98b82c5e) SHA1(af1b52d4b36b1776c148478b5a5581e6a57256b8) ) - ROM_REGION( 0x200000, "gfx3", 0 ) // 2 sprite chips, 2 copies of sprite ROMs on PCB + ROM_REGION( 0x200000, "sprites2", 0 ) // 2 sprite chips, 2 copies of sprite ROMs on PCB ROM_LOAD( "ss003.u47", 0x000000, 0x100000, CRC(fbecde72) SHA1(2fe32b28e77ec390c534d276261eefac3fbe21fd) ) ROM_LOAD( "ss004.u46", 0x100000, 0x100000, CRC(98b82c5e) SHA1(af1b52d4b36b1776c148478b5a5581e6a57256b8) ) - ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */ + ROM_REGION( 0x40000, "oki", 0 ) // ADPCM samples ROM_LOAD( "ss005.u86", 0x000000, 0x040000, CRC(c53a82ad) SHA1(756e453c8b5ce8e47f93fbda3a9e48bb73e93e2e) ) ROM_END ROM_START( sshanghab ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "sshanb_2.010", 0x00000, 0x20000, CRC(bc7ed254) SHA1(aeee4b8a8265902bb41575cc143738ecf3aff57d) ) ROM_LOAD16_BYTE( "sshanb_1.010", 0x00001, 0x20000, CRC(7b049f49) SHA1(2570077c67dbd35053d475a18c3f10813bf914f7) ) // TODO: it's unlikely the bootleg used these exact ROMs, they were probably split, verify - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */ + ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ss008.u82", 0x000000, 0x010000, CRC(04dc3647) SHA1(c06a7e8932c03de5759a9b69da0d761006b49517) ) - ROM_REGION( 0x200000, "gfx1", 0 ) + ROM_REGION( 0x200000, "tiles", 0 ) ROM_LOAD( "ss001.u8", 0x000000, 0x100000, CRC(ebeca5b7) SHA1(1746e757ad9bbef2aa9028c54f25d4aa4dedf79e) ) ROM_LOAD( "ss002.u7", 0x100000, 0x100000, CRC(67659f29) SHA1(50944877665b7b848b3f7063892bd39a96a847cf) ) - ROM_REGION( 0x200000, "gfx2", 0 ) + ROM_REGION( 0x200000, "sprites1", 0 ) ROM_LOAD( "ss003.u39", 0x000000, 0x100000, CRC(fbecde72) SHA1(2fe32b28e77ec390c534d276261eefac3fbe21fd) ) ROM_LOAD( "ss004.u37", 0x100000, 0x100000, CRC(98b82c5e) SHA1(af1b52d4b36b1776c148478b5a5581e6a57256b8) ) - ROM_REGION( 0x200000, "gfx3", 0 ) // 2 sprite chips, 2 copies of sprite ROMs on PCB + ROM_REGION( 0x200000, "sprites2", 0 ) // 2 sprite chips, 2 copies of sprite ROMs on PCB ROM_LOAD( "ss003.u47", 0x000000, 0x100000, CRC(fbecde72) SHA1(2fe32b28e77ec390c534d276261eefac3fbe21fd) ) ROM_LOAD( "ss004.u46", 0x100000, 0x100000, CRC(98b82c5e) SHA1(af1b52d4b36b1776c148478b5a5581e6a57256b8) ) - ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */ + ROM_REGION( 0x40000, "oki", 0 ) // ADPCM samples ROM_LOAD( "ss005.u86", 0x000000, 0x040000, CRC(c53a82ad) SHA1(756e453c8b5ce8e47f93fbda3a9e48bb73e93e2e) ) ROM_END @@ -552,14 +711,16 @@ ROM[0x000386/2] = 0x4e71; ROM[0x000388/2] = 0x4e71; ROM[0x00038a/2] = 0x4e71; - /* To avoid checksum error (only useful for 'sshangha') */ + // To avoid checksum error (only useful for 'sshangha') ROM[0x000428/2] = 0x4e71; ROM[0x00042a/2] = 0x4e71; #endif } +} // anonymous namespace + -GAME( 1992, sshangha, 0, sshangha, sshangha, sshangha_state, init_sshangha, ROT0, "Hot-B Co., Ltd.", "Super Shanghai Dragon's Eye (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, sshanghaj, sshangha, sshangha, sshangha, sshangha_state, init_sshangha, ROT0, "Hot-B Co., Ltd.", "Super Shanghai Dragon's Eye (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, sshanghak, sshangha, sshangha, sshangha, sshangha_state, init_sshangha, ROT0, "Hot-B Co., Ltd. (Taito license)", "Super Shanghai Dragon's Eye (Korea)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, sshangha, 0, sshangha, sshangha, sshangha_state, init_sshangha, ROT0, "Hot-B Co., Ltd.", "Super Shanghai Dragon's Eye (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, sshanghaj, sshangha, sshangha, sshangha, sshangha_state, init_sshangha, ROT0, "Hot-B Co., Ltd.", "Super Shanghai Dragon's Eye (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, sshanghak, sshangha, sshangha, sshangha, sshangha_state, init_sshangha, ROT0, "Hot-B Co., Ltd. (Taito license)", "Super Shanghai Dragon's Eye (Korea)", MACHINE_SUPPORTS_SAVE ) GAME( 1992, sshanghab, sshangha, sshanghab, sshangha, sshangha_state, init_sshangha, ROT0, "bootleg", "Super Shanghai Dragon's Eye (World, bootleg)", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/dataeast/sshangha.h mame-0.251+dfsg.1/src/mame/dataeast/sshangha.h --- mame-0.250+dfsg.1/src/mame/dataeast/sshangha.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/dataeast/sshangha.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,75 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Bryan McPhail, Charles MacDonald, David Haywood -#include "deco16ic.h" -#include "decospr.h" -#include "deco146.h" -#include "emupal.h" - -class sshangha_state : public driver_device -{ -public: - sshangha_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_deco146(*this, "ioprot"), - m_tilegen(*this, "tilegen"), - m_spriteram(*this, "spriteram"), - m_spriteram2(*this, "spriteram2"), - m_sound_shared_ram(*this, "sound_shared"), - m_pf1_rowscroll(*this, "pf1_rowscroll"), - m_pf2_rowscroll(*this, "pf2_rowscroll"), - m_prot_data(*this, "prot_data"), - m_sprgen1(*this, "spritegen1"), - m_sprgen2(*this, "spritegen2"), - m_maincpu(*this, "maincpu"), - m_audiocpu(*this, "audiocpu"), - m_palette(*this, "palette") - { } - - void sshanghab(machine_config &config); - void sshangha(machine_config &config); - - void init_sshangha(); - -protected: - virtual void video_start() override; - -private: - optional_device m_deco146; - required_device m_tilegen; - required_shared_ptr m_spriteram; - required_shared_ptr m_spriteram2; - - required_shared_ptr m_sound_shared_ram; - required_shared_ptr m_pf1_rowscroll; - required_shared_ptr m_pf2_rowscroll; - - optional_shared_ptr m_prot_data; - - required_device m_sprgen1; - required_device m_sprgen2; - required_device m_maincpu; - required_device m_audiocpu; - required_device m_palette; - - int m_video_control = 0; - DECO16IC_BANK_CB_MEMBER(bank_callback); - u16 mix_callback(u16 p, u16 p2); - - uint16_t sshangha_protection_region_8_146_r(offs_t offset); - void sshangha_protection_region_8_146_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - uint16_t sshangha_protection_region_d_146_r(offs_t offset); - void sshangha_protection_region_d_146_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - uint16_t deco_71_r(); - uint16_t sshanghab_protection16_r(offs_t offset); - - uint8_t sound_shared_r(offs_t offset); - void sound_shared_w(offs_t offset, uint8_t data); - - void video_w(uint16_t data); - - uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - - void sshangha_map(address_map &map); - void sound_map(address_map &map); - void sshanghab_map(address_map &map); -}; diff -Nru mame-0.250+dfsg.1/src/mame/dataeast/sshangha_v.cpp mame-0.251+dfsg.1/src/mame/dataeast/sshangha_v.cpp --- mame-0.250+dfsg.1/src/mame/dataeast/sshangha_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/dataeast/sshangha_v.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Bryan McPhail, Charles MacDonald, David Haywood -/*************************************************************************** - - Uses Data East custom chip 55 for backgrounds, with a special 8bpp mode - 2 times custom chips 52/71 for sprites. - -***************************************************************************/ - -#include "emu.h" -#include "sshangha.h" - - -/******************************************************************************/ - -void sshangha_state::video_w(uint16_t data) -{ - /* 0x4: Special video mode, other bits unknown */ - m_video_control = data; -// popmessage("%04x", data); -} - -/******************************************************************************/ - -void sshangha_state::video_start() -{ - m_sprgen1->alloc_sprite_bitmap(); - m_sprgen2->alloc_sprite_bitmap(); - - save_item(NAME(m_video_control)); -} - -/******************************************************************************/ - -uint32_t sshangha_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) -{ - const bool combine_tilemaps = (m_video_control&4) ? false : true; - - // sprites are flipped relative to tilemaps - uint16_t flip = m_tilegen->pf_control_r(0); - flip_screen_set(BIT(flip, 7)); - m_sprgen1->set_flip_screen(!BIT(flip, 7)); - m_sprgen2->set_flip_screen(!BIT(flip, 7)); - - // render sprites to temp bitmaps - m_sprgen1->draw_sprites(bitmap, cliprect, m_spriteram, 0x400); - m_sprgen2->draw_sprites(bitmap, cliprect, m_spriteram2, 0x400); - - // draw / mix - bitmap.fill(m_palette->black_pen(), cliprect); - - m_tilegen->pf_update(m_pf1_rowscroll, m_pf2_rowscroll); - - // TODO: fully verify draw order / priorities - - /* the tilemap 4bpp + 4bpp = 8bpp mixing actually seems external to the tilemap, note video_control is not part of the tilemap chip */ - if (combine_tilemaps) - m_tilegen->tilemap_12_combine_draw(screen, bitmap, cliprect, 0, 0); - else - m_tilegen->tilemap_2_draw(screen, bitmap, cliprect, 0, 0); - - // pri, primask,palbase,palmask - m_sprgen1->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x000, 0x000, 0x200, 0x0ff); // low+high pri spr1 (definitely needs to be below low pri spr2 - game tiles & definitely needs to be below tilemap1 - lightning on win screen in traditional mode) - m_sprgen2->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x200, 0x200, 0x000, 0x0ff); // low pri spr2 (definitely needs to be below tilemap1 - 2nd level failure screen etc.) - - if (!combine_tilemaps) - m_tilegen->tilemap_1_draw(screen, bitmap, cliprect, 0, 0); - - // pri, primask,palbase,palmask - m_sprgen2->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x000, 0x200, 0x000, 0x0ff); // high pri spr2 (definitely needs to be above tilemap1 - title logo) - - return 0; -} diff -Nru mame-0.250+dfsg.1/src/mame/ddr/sprachmg.cpp mame-0.251+dfsg.1/src/mame/ddr/sprachmg.cpp --- mame-0.250+dfsg.1/src/mame/ddr/sprachmg.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/ddr/sprachmg.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,440 @@ +// license: BSD-3-Clause +// copyright-holders: natarii, Dirk Best +/*************************************************************************** + + Gerät 32620 (aka Sprach/Morsegenerator, Stimme and more) + + Digital speech generator. Used by the Ministerium für Staatssicherheit + to send coded messages to agents using shortwave "Number Stations". + + More info: https://www.cryptomuseum.com/spy/owvl/32620/index.htm + + Hardware: + - UB880 (Z80) + - D2764D + - D446C x2 + - UB8560D + - UB855D x2 + - 9.832 MHz XTAL + - UB855D x2 (on expansion board) + - MBM2764-20 x12 (can be less, on speech module) + + TODO: + - Tape input + - DAC gain + - Verify daisy chain + - Remote + + Notes: + - Emulated is "version 2", it's possible that there are many hardware + variations (the available documention is for a slighly different + version for example) + - Serial protocol is undocumented (settings: 1200 Baud, 8-O-1) and + might not even be fully implemented in this version + - It uses a 10-bit DAC, but only 8 bits are used + +***************************************************************************/ + +#include "emu.h" +#include "bus/generic/carts.h" +#include "bus/generic/slot.h" +#include "bus/rs232/rs232.h" +#include "cpu/z80/z80.h" +#include "machine/clock.h" +#include "machine/nvram.h" +#include "machine/z80daisy.h" +#include "machine/z80pio.h" +#include "machine/z80sio.h" +#include "sound/dac.h" +#include "softlist_dev.h" +#include "speaker.h" + +#include "sprachmg.lh" + + +namespace { + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class sprachmg_state : public driver_device +{ +public: + sprachmg_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_pio(*this, "pio%u", 0U), + m_sio(*this, "sio"), + m_speech_module(*this, "speech"), + m_dac(*this, "dac"), + m_keys(*this, "keypad%u", 0U), + m_special(*this, "special"), + m_remote(*this, "remote"), + m_chargen(*this, "chargen"), + m_dmd(*this, "dot%u%u", 0U, 0U), + m_led_speech(*this, "led_speech"), + m_led_morse(*this, "led_morse"), + m_led_standard(*this, "led_standard"), + m_display_data(0x00), + m_key_scan(0x1f), + m_speech_select(0xff), + m_speech_module_pcb1(nullptr), + m_speech_module_pcb2(nullptr) + { } + + DECLARE_INPUT_CHANGED_MEMBER(keypad_res); + + void sprachmg(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + +private: + required_device m_maincpu; + required_device_array m_pio; + required_device m_sio; + required_device m_speech_module; + required_device m_dac; + required_ioport_array<5> m_keys; + required_ioport m_special; + required_ioport m_remote; + required_region_ptr m_chargen; + output_finder<8, 7> m_dmd; + output_finder<> m_led_speech; + output_finder<> m_led_morse; + output_finder<> m_led_standard; + + void mem_map(address_map &map); + void io_map(address_map &map); + + void display_data_w(uint8_t data); + void display_column_w(uint8_t data); + + uint8_t key_r(); + + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(module_load); + uint8_t speech_r(offs_t offset); + + void sys_w(uint8_t data); + + uint8_t m_display_data; + uint8_t m_key_scan; + uint8_t m_speech_select; + uint8_t *m_speech_module_pcb1; + uint8_t *m_speech_module_pcb2; +}; + + +//************************************************************************** +// ADDRESS MAPS +//************************************************************************** + +void sprachmg_state::mem_map(address_map &map) +{ + map(0x0000, 0x1fff).rom(); + map(0x2000, 0x2fff).ram().share("nvram"); + map(0x4000, 0xffff).r(FUNC(sprachmg_state::speech_r)); +} + +void sprachmg_state::io_map(address_map &map) +{ + map.unmap_value_high(); + map.global_mask(0xff); + map(0x7c, 0x7f).rw(m_pio[2], FUNC(z80pio_device::read), FUNC(z80pio_device::write)); // on expansion board + map(0xbc, 0xbf).rw(m_pio[3], FUNC(z80pio_device::read), FUNC(z80pio_device::write)); // on expansion board + map(0xc0, 0xc3).rw(m_sio, FUNC(z80sio_device::cd_ba_r), FUNC(z80sio_device::cd_ba_w)); + map(0xc8, 0xcb).rw(m_pio[0], FUNC(z80pio_device::read), FUNC(z80pio_device::write)); + map(0xd0, 0xd3).rw(m_pio[1], FUNC(z80pio_device::read), FUNC(z80pio_device::write)); +} + + +//************************************************************************** +// INPUT PORT DEFINITIONS +//************************************************************************** + +static INPUT_PORTS_START( sprachmg ) + PORT_START("keypad0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("EX") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("<") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME(">") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("keypad1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_SPACE) PORT_NAME("SPC") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_SLASH) PORT_NAME("/") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_COLON) PORT_NAME(":") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("CLR") + PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("keypad2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("?") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3 -") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("MODE") + PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("keypad3") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("=") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2 .") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("OUT") + PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("keypad4") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0 NO") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1 YES") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("INP") + PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("special") + PORT_BIT(0x1f, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("STA/STP") PORT_WRITE_LINE_DEVICE_MEMBER("pio0", z80pio_device, pb5_w) + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("remote") + PORT_BIT(0x3f, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("STA/STP (Remote)") PORT_WRITE_LINE_DEVICE_MEMBER("pio0", z80pio_device, pb6_w) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("reset") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("RES") PORT_CHANGED_MEMBER(DEVICE_SELF, sprachmg_state, keypad_res, 0) +INPUT_PORTS_END + + +//************************************************************************** +// KEYPAD +//************************************************************************** + +INPUT_CHANGED_MEMBER( sprachmg_state::keypad_res ) +{ + m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? CLEAR_LINE : ASSERT_LINE); + + if (newval && !oldval) + m_sio->reset(); +} + +uint8_t sprachmg_state::key_r() +{ + // 7------- not used + // -6------ start/stop on remote + // --5----- start/stop + // ---43210 keypad selected row + + uint8_t data = 0xff; + + for (unsigned i = 0; i < 5; i++) + if (BIT(m_key_scan, i) == 0) + data &= m_keys[i]->read(); + + data &= m_special->read(); + data &= m_remote->read(); + + return data; +} + + +//************************************************************************** +// VIDEO EMULATION +//************************************************************************** + +void sprachmg_state::display_data_w(uint8_t data) +{ + m_display_data = data; + + m_pio[1]->strobe_b(1); + m_pio[1]->strobe_b(0); +} + +void sprachmg_state::display_column_w(uint8_t data) +{ + for (unsigned i = 0; i < 7; i++) + m_dmd[data & 0x07][i] = m_chargen[0x100 + (i << 8) + m_display_data]; +} + + +//************************************************************************** +// SPEECH MODULE +//************************************************************************** + +DEVICE_IMAGE_LOAD_MEMBER( sprachmg_state::module_load ) +{ + if (!image.loaded_through_softlist()) + { + image.seterror(image_error::UNSUPPORTED, "Speech modules can only be loaded using a software list"); + return image_init_result::FAIL; + } + + uint32_t pcb1_size = image.get_software_region_length("pcb1"); + + if (pcb1_size != 0xc000) + { + image.seterror(image_error::INVALIDIMAGE, "Invalid pcb1 region length"); + return image_init_result::FAIL; + } + + m_speech_module_pcb1 = image.get_software_region("pcb1"); + + uint32_t pcb2_size = image.get_software_region_length("pcb2"); + + if (pcb2_size > 0 && pcb2_size != 0xc000) + { + image.seterror(image_error::INVALIDIMAGE, "Invalid pcb2 region length"); + return image_init_result::FAIL; + } + + m_speech_module_pcb2 = image.get_software_region("pcb2"); + + return image_init_result::PASS; +} + +uint8_t sprachmg_state::speech_r(offs_t offset) +{ + if (BIT(m_speech_select, 1) == 0 && m_speech_module_pcb1) + return m_speech_module_pcb1[offset]; + + if (BIT(m_speech_select, 0) == 0 && m_speech_module_pcb2) + return m_speech_module_pcb2[offset]; + + return 0xff; +} + + +//************************************************************************** +// MACHINE EMULATION +//************************************************************************** + +void sprachmg_state::sys_w(uint8_t data) +{ + // 7------- speech card 1 (active low) + // -6------ speech card 2 (active low) + // --5----- led standard + // ---4---- led speech + // ----3--- led morse + // -----210 data to remote (ende, ausgabe, morse) + + m_led_morse = BIT(data, 3); + m_led_speech = BIT(data, 4); + m_led_standard = BIT(data, 5); + + m_speech_select = BIT(data, 6, 2); +} + +void sprachmg_state::machine_start() +{ + // resolve outputs + m_dmd.resolve(); + m_led_speech.resolve(); + m_led_morse.resolve(); + m_led_standard.resolve(); + + // register for save states + save_item(NAME(m_display_data)); + save_item(NAME(m_key_scan)); + save_item(NAME(m_speech_select)); +} + +void sprachmg_state::machine_reset() +{ + m_key_scan = 0x1f; +} + + +//************************************************************************** +// MACHINE DEFINTIONS +//************************************************************************** + +static const z80_daisy_config z80_daisy_chain[] = +{ + { "pio0" }, + { "pio1" }, + { "sio" }, + { "pio2" }, + { "pio3" }, + { nullptr } +}; + +void sprachmg_state::sprachmg(machine_config &config) +{ + Z80(config, m_maincpu, 9.8304_MHz_XTAL / 4); + m_maincpu->set_daisy_config(z80_daisy_chain); + m_maincpu->set_addrmap(AS_PROGRAM, &sprachmg_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &sprachmg_state::io_map); + + NVRAM(config, "nvram", nvram_device::DEFAULT_NONE); + + Z80PIO(config, m_pio[0], 9.8304_MHz_XTAL / 4); + m_pio[0]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_pio[0]->out_pa_callback().set([this](uint8_t data) { m_key_scan = data & 0x1f; }); + m_pio[0]->in_pb_callback().set(FUNC(sprachmg_state::key_r)); + + Z80PIO(config, m_pio[1], 9.8304_MHz_XTAL / 4); + m_pio[1]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_pio[1]->out_pa_callback().set(FUNC(sprachmg_state::display_data_w)); + m_pio[1]->out_pb_callback().set(FUNC(sprachmg_state::display_column_w)); + + Z80PIO(config, m_pio[2], 0); + m_pio[2]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_pio[2]->out_pa_callback().set([this](uint8_t data) { m_dac->write(data); }); + m_pio[2]->out_pb_callback().set(FUNC(sprachmg_state::sys_w)); + + Z80PIO(config, m_pio[3], 0); + m_pio[3]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + // port a: tape + // port b: tape, dac gain + + Z80SIO(config, m_sio, 9.8304_MHz_XTAL / 4); + m_sio->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_sio->out_txda_callback().set("rs232", FUNC(rs232_port_device::write_txd)); + + rs232_port_device &serial(RS232_PORT(config, "rs232", default_rs232_devices, nullptr)); + serial.rxd_handler().set(m_sio, FUNC(z80sio_device::rxa_w)); + + clock_device &serclk(CLOCK(config, "serclk", 9.8304_MHz_XTAL / 4 / 128)); // cd4020b + serclk.signal_handler().set(m_sio, FUNC(z80sio_device::rxca_w)); + serclk.signal_handler().append(m_sio, FUNC(z80sio_device::txca_w)); + + SPEAKER(config, "speaker").front_center(); + + AD7520(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 1.0); + + GENERIC_CARTSLOT(config, m_speech_module, generic_plain_slot, "sprachmg"); + m_speech_module->set_device_load(FUNC(sprachmg_state::module_load)); + + SOFTWARE_LIST(config, "module_list").set_original("sprachmg"); + + config.set_default_layout(layout_sprachmg); +} + + +//************************************************************************** +// ROM DEFINITIONS +//************************************************************************** + +ROM_START( sprachmg ) + ROM_REGION(0x2000, "maincpu", 0) + ROM_LOAD("bu01_8-87.bin", 0x0000, 0x2000, CRC(7d9a92a6) SHA1(c9ca4a0d118b2c30e2505de051671769ad08a1c5)) + + ROM_REGION(0x800, "chargen", 0) + ROM_LOAD("zg-625_1-12-86.bin", 0x000, 0x800, CRC(9ffd1e15) SHA1(759660404dfe479d13a1bdd4beb19e6035a34e17)) +ROM_END + + +} // anonymous namespace + + +//************************************************************************** +// SYSTEM DRIVERS +//************************************************************************** + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 1985, sprachmg, 0, 0, sprachmg, sprachmg, sprachmg_state, empty_init, "Institut für Kosmosforschung", "Gerät 32620 (Sprach/Morsegenerator)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff -Nru mame-0.250+dfsg.1/src/mame/exidy/exidy440_a.cpp mame-0.251+dfsg.1/src/mame/exidy/exidy440_a.cpp --- mame-0.250+dfsg.1/src/mame/exidy/exidy440_a.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/exidy/exidy440_a.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -11,7 +11,6 @@ #include "emu.h" #include "exidy440_a.h" -#include "exidy440.h" #include "cpu/m6809/m6809.h" @@ -66,26 +65,12 @@ DEFINE_DEVICE_TYPE(EXIDY440, exidy440_sound_device, "exidy440_sound", "Exidy 440 CVSD") -exidy440_sound_device::exidy440_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, EXIDY440, tag, owner, clock), - device_sound_interface(mconfig, *this), - m_audiocpu(*this, "audiocpu"), - m_samples(*this, "samples"), - m_sound_command(0), - m_sound_command_ack(0), - m_m6844_priority(0x00), - m_m6844_interrupt(0x00), - m_m6844_chain(0x00), - m_stream(nullptr) -{ - m_sound_banks[0] = m_sound_banks[1] = m_sound_banks[2] = m_sound_banks[3] = 0; - - for (auto & elem : m_sound_channel) - { - elem.base = nullptr; - elem.offset = 0; - elem.remaining = 0; - } +exidy440_sound_device::exidy440_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, EXIDY440, tag, owner, clock), + device_sound_interface(mconfig, *this), + m_audiocpu(*this, "audiocpu"), + m_samples(*this, "samples") +{ } //------------------------------------------------- @@ -98,11 +83,8 @@ m_audiocpu->set_addrmap(AS_PROGRAM, &exidy440_sound_device::exidy440_audio_map); // MC3418(config, "cvsd1", EXIDY440_MC3418_CLOCK).add_route(ALL_OUTPUTS, "lspeaker", 1.0); - // MC3418(config, "cvsd2", EXIDY440_MC3418_CLOCK).add_route(ALL_OUTPUTS, "rspeaker", 1.0); - // MC3417(config, "cvsd3", EXIDY440_MC3417_CLOCK).add_route(ALL_OUTPUTS, "lspeaker", 1.0); - // MC3417(config, "cvsd4", EXIDY440_MC3417_CLOCK).add_route(ALL_OUTPUTS, "rspeaker", 1.0); } @@ -112,24 +94,38 @@ void exidy440_sound_device::device_start() { - int i; - /* reset the system */ m_sound_command = 0; m_sound_command_ack = 1; save_item(NAME(m_sound_command)); save_item(NAME(m_sound_command_ack)); + for (int i = 0; i < 4; i++) + { + m_sound_banks[i] = 0; + m_sound_channel[i].base = nullptr; + m_sound_channel[i].offset = 0; + m_sound_channel[i].remaining = 0; + } + + memset(m_sound_volume, 0, sizeof(m_sound_volume)); + save_item(NAME(m_sound_volume)); + save_item(NAME(m_sound_banks)); + /* reset the 6844 */ - for (i = 0; i < 4; i++) + for (int i = 0; i < 4; i++) { m_m6844_channel[i].active = 0; - m_m6844_channel[i].control = 0x00; + m_m6844_channel[i].address = 0; + m_m6844_channel[i].counter = 0; + m_m6844_channel[i].control = 0; + m_m6844_channel[i].start_address = 0; + m_m6844_channel[i].start_counter = 0; } - m_m6844_priority = 0x00; - m_m6844_interrupt = 0x00; - m_m6844_chain = 0x00; + m_m6844_priority = 0; + m_m6844_interrupt = 0; + m_m6844_chain = 0; save_item(NAME(m_m6844_priority)); save_item(NAME(m_m6844_interrupt)); save_item(NAME(m_m6844_chain)); @@ -143,8 +139,8 @@ m_stream = stream_alloc(0, 2, clock()); /* allocate the mixer buffer */ - m_mixer_buffer_left.resize(clock()/50); - m_mixer_buffer_right.resize(clock()/50); + m_mixer_buffer_left.resize(clock()); + m_mixer_buffer_right.resize(clock()); if (SOUND_LOG) m_debuglog = fopen("sound.log", "w"); @@ -170,7 +166,6 @@ { sound_channel_data *channel = &m_sound_channel[ch]; int16_t *srcdata; - int i; /* channels 2 and 3 are half-rate samples */ if (ch & 2) @@ -185,7 +180,7 @@ } /* copy 1 for 2 to the destination */ - for (i = 0; i < samples; i += 2) + for (int i = 0; i < samples; i += 2) { int16_t sample = *srcdata++ * volume / 256; *dest++ += sample; @@ -197,7 +192,7 @@ else { srcdata = &channel->base[channel->offset]; - for (i = 0; i < samples; i++) + for (int i = 0; i < samples; i++) *dest++ += *srcdata++ * volume / 256; } } @@ -425,7 +420,6 @@ void exidy440_sound_device::m6844_w(offs_t offset, uint8_t data) { m6844_channel_data *m6844_channel = m_m6844_channel; - int i; /* first update the current state of the DMA transfers */ m6844_update(); @@ -478,7 +472,7 @@ m_m6844_priority = data; /* update the sound playback on each channel */ - for (i = 0; i < 4; i++) + for (int i = 0; i < 4; i++) { /* if we're going active... */ if (!m6844_channel[i].active && (data & (1 << i))) @@ -797,14 +791,12 @@ void exidy440_sound_device::sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) { - int ch; - /* reset the mixer buffers */ std::fill_n(&m_mixer_buffer_left[0], outputs[0].samples(), 0); std::fill_n(&m_mixer_buffer_right[0], outputs[0].samples(), 0); /* loop over channels */ - for (ch = 0; ch < 4; ch++) + for (int ch = 0; ch < 4; ch++) { sound_channel_data *channel = &m_sound_channel[ch]; int length, volume, left = outputs[0].samples(); diff -Nru mame-0.250+dfsg.1/src/mame/exidy/exidy440_a.h mame-0.251+dfsg.1/src/mame/exidy/exidy440_a.h --- mame-0.250+dfsg.1/src/mame/exidy/exidy440_a.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/exidy/exidy440_a.h 2022-12-29 14:20:09.000000000 +0000 @@ -45,7 +45,6 @@ int start_counter; }; - /* channel_data structure holds info about each active sound channel */ struct sound_channel_data { @@ -54,7 +53,6 @@ int remaining; }; - /* sound_cache_entry structure contains info on each decoded sample */ struct sound_cache_entry { diff -Nru mame-0.250+dfsg.1/src/mame/exidy/exidy440.cpp mame-0.251+dfsg.1/src/mame/exidy/exidy440.cpp --- mame-0.250+dfsg.1/src/mame/exidy/exidy440.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/exidy/exidy440.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -247,9 +247,6 @@ - - - /************************************* * * Coin handling diff -Nru mame-0.250+dfsg.1/src/mame/galaxian/nl_konami.cpp mame-0.251+dfsg.1/src/mame/galaxian/nl_konami.cpp --- mame-0.250+dfsg.1/src/mame/galaxian/nl_konami.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/galaxian/nl_konami.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud #include "netlist/devices/net_lib.h" diff -Nru mame-0.250+dfsg.1/src/mame/galaxian/nl_konami.h mame-0.251+dfsg.1/src/mame/galaxian/nl_konami.h --- mame-0.250+dfsg.1/src/mame/galaxian/nl_konami.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/galaxian/nl_konami.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud #include "netlist/nl_setup.h" diff -Nru mame-0.250+dfsg.1/src/mame/h01x/h01x.cpp mame-0.251+dfsg.1/src/mame/h01x/h01x.cpp --- mame-0.250+dfsg.1/src/mame/h01x/h01x.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/h01x/h01x.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,633 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:zzemu-cn, Robbbert -/*************************************************************************** -NF500A (TRS80 Level II Basic) - 09/01/2019 - -H-01B (TRS80 Level II Basic) - 10/05/2019 - -Despite the references to the TRS-80, the machines are entirely incompatible. - -TODO: -- Need schematics and technical info. -- Need confirmation of clock speeds for each machine. - (Cassettes made on machines of different clocks are not shareable) -- JCE's 16KB extended ROM functionality is not understood, functionality is - unemulated -- Need software. - -****************************************************************************/ - -#include "emu.h" -#include "screen.h" -#include "speaker.h" -#include "emupal.h" -#include "cpu/z80/z80.h" -#include "video/mc6845.h" -#include "machine/ram.h" -#include "sound/spkrdev.h" -#include "imagedev/cassette.h" - -class h01x_state : public driver_device -{ -public: - h01x_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_maincpu(*this, "maincpu") - , m_ram(*this, RAM_TAG) - , m_vram(*this, "vram") - , m_rom(*this, "maincpu") - , m_hzrom(*this, "hzrom") - , m_exrom(*this, "exrom") - , m_palette(*this, "palette") - , m_crtc(*this, "crtc") - , m_speaker(*this, "speaker") - , m_cassette(*this, "cassette") - , m_io_keyboard(*this, "LINE%u", 0U) - { } - - void h01x(machine_config &config); - void h01b(machine_config &config); - void nf500a(machine_config &config); - void h01jce(machine_config &config); - -protected: - virtual void machine_start() override; - virtual void machine_reset() override; - -private: - void h01x_mem_map(address_map &map); - void h01x_io_map(address_map &map); - - uint8_t mem_0000_r(offs_t offset); - void mem_0000_w(uint8_t data); - uint8_t mem_4000_r(offs_t offset); - void mem_4000_w(offs_t offset, uint8_t data); - uint8_t mem_8000_r(offs_t offset); - void mem_8000_w(offs_t offset, uint8_t data); - uint8_t mem_c000_r(offs_t offset); - void mem_c000_w(offs_t offset, uint8_t data); - - void port_70_w(uint8_t data); - uint8_t port_50_r(); - - required_device m_maincpu; - required_device m_ram; - required_device m_vram; - required_region_ptr m_rom; - required_region_ptr m_hzrom; - optional_region_ptr m_exrom; - required_device m_palette; - required_device m_crtc; - required_device m_speaker; - required_device m_cassette; - required_ioport_array<11> m_io_keyboard; - - uint8_t m_bank = 0U; - MC6845_UPDATE_ROW(crtc_update_row); - - uint8_t *m_ram_ptr = nullptr; - uint8_t *m_vram_ptr = nullptr; - - TIMER_CALLBACK_MEMBER(cassette_data_callback); - bool m_cassette_data = false; - emu_timer *m_cassette_data_timer = nullptr; -}; - - -void h01x_state::h01x(machine_config &config) -{ - // basic machine hardware - Z80(config, m_maincpu, 16_MHz_XTAL / 8); - m_maincpu->set_addrmap(AS_PROGRAM, &h01x_state::h01x_mem_map); - m_maincpu->set_addrmap(AS_IO, &h01x_state::h01x_io_map); - - // RAM - RAM(config, m_ram).set_default_size("32K").set_default_value(0x00); - // VRAM 16K 4bit - RAM(config, m_vram).set_default_size("16K").set_default_value(0xf0); - - // video hardware - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_raw(10.6445_MHz_XTAL, 336, 0, 336, 192, 0, 192); - screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update)); - PALETTE(config, m_palette, palette_device::MONOCHROME); - - MC6845(config, m_crtc, 10.6445_MHz_XTAL / 8); // freq guess - m_crtc->set_screen("screen"); - m_crtc->set_show_border_area(false); - m_crtc->set_char_width(4); - m_crtc->set_update_row_callback(FUNC(h01x_state::crtc_update_row)); - - // sound hardware - SPEAKER(config, "mono").front_center(); - SPEAKER_SOUND(config, m_speaker); - m_speaker->add_route(ALL_OUTPUTS, "mono", 0.50); - - /* devices */ - CASSETTE(config, m_cassette); - m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05); - m_cassette->set_default_state(CASSETTE_STOPPED); -} - -void h01x_state::h01b(machine_config &config) -{ - // H-01B CPU: 2MHz ROM: 16KB + 32KB - h01x(config); - m_maincpu->set_clock(16_MHz_XTAL/8); // to confirm -} - -void h01x_state::nf500a(machine_config &config) -{ - // NF-500A CPU: 4MHz ROM: 16KB + 32KB - h01x(config); - m_maincpu->set_clock(16_MHz_XTAL/4); // to confirm -} - -void h01x_state::h01jce(machine_config &config) -{ - // JCE CPU: 4MHz ROM: 16KB + 32KB + 16KB - h01x(config); - m_maincpu->set_clock(16_MHz_XTAL/4); // to confirm -} - -void h01x_state::h01x_mem_map(address_map &map) -{ - map(0x0000, 0x3fff).rw(FUNC(h01x_state::mem_0000_r), FUNC(h01x_state::mem_0000_w)); - map(0x4000, 0x7fff).rw(FUNC(h01x_state::mem_4000_r), FUNC(h01x_state::mem_4000_w)); - map(0x8000, 0xbfff).rw(FUNC(h01x_state::mem_8000_r), FUNC(h01x_state::mem_8000_w)); - map(0xc000, 0xffff).rw(FUNC(h01x_state::mem_c000_r), FUNC(h01x_state::mem_c000_w)); -} - -void h01x_state::h01x_io_map(address_map &map) -{ - map.global_mask(0xff); - map.unmap_value_high(); - - map(0x60, 0x60).rw(m_crtc, FUNC(mc6845_device::status_r), FUNC(mc6845_device::address_w)); - map(0x64, 0x64).rw(m_crtc, FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)); - map(0x50, 0x50).r(FUNC(h01x_state::port_50_r)); - map(0x70, 0x70).w(FUNC(h01x_state::port_70_w)); -} - -/* -H-01B - KD7 KD6 KD5 KD4 KD3 KD2 KD1 KD0 scan address -A0 space Z A Q 1 BFFEH -A1 BRK X S W 2 BFFDH -A2 (16) C D E 3 BFFBH -A3 E/C V F R 4 BFF7H -A4 - B G T 5 BFEFH -A5 右 N H Y 6 BFDFH -A6 RETN M J U 7 BFBFH -A7 [ , K I 8 BF7FH -A8 BS 左 . L O 9 BEFFH -A9 : / ; P 0 BDFFH -A10 SHIFT 下 BBFFH - -need to determine keys: -Ctrl ESC -*/ - -static INPUT_PORTS_START( h01b ) - PORT_START("LINE0") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR('1') PORT_CHAR('!') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE1") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR('2') PORT_CHAR('"') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Break") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END)) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE2") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR('3') PORT_CHAR('#') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c') -// PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Clear") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE3") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR('4') PORT_CHAR('$') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E/C") PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE4") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR('5') PORT_CHAR('%') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("- =") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('-') PORT_CHAR('=') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE5") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR('6') PORT_CHAR('&') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE6") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR('7') PORT_CHAR('\'') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(13) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE7") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR('8') PORT_CHAR('(') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(", <") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE8") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('9') PORT_CHAR(')') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE9") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR('0') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("; +") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(": *") PORT_CODE(KEYCODE_MINUS) PORT_CHAR(':') PORT_CHAR('*') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE10") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) -INPUT_PORTS_END - - -/* - -模拟器中的按键位置安排参照 TRS-80 - -NF-500A - - KD7 KD6 KD5 KD4 KD3 KD2 KD1 KD0 scan address -A0 R E 5 CTRL? 6 T W BFFEH -A1 3 2 Y E/C U 4 1 BFFDH -A2 9 : 8 - 7 0 下 BFFBH -A3 D S G ESC H F Q BFF7H -A4 X A V Z C BRK BFEFH -A5 L BS 左 K space J ; 右 BFDFH -A6 M . N B , / BFBFH -A7 P RETN O SHIFT I [ BF7FH - -3 56 34 51 key functions not verified, temporarily mapped to ] TAB \ ' - -E/C E汉 = ~ translates to ASCII 20 -ESC translates to ASCII 31 -BS translates to ASCII 8 -61 translates to ASCII 13 enter -16 translates to ASCII 10 down -56 translates to ASCII 16 -27 3 34 51 no action - -Program to test key ASCII codes -10 A$=INKEY$ -20 IF LEN(A$)>0 THEN PRINT ASC(A$) -30 GOTO 10 - -TRS-80 -left 8 right 9 up 91 down 10 -Clear 31 -@ 64 -backspace 8 - -*/ - -/* Input ports */ -static INPUT_PORTS_START( h01x ) - PORT_START("LINE0") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR('6') PORT_CHAR('&') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR('5') PORT_CHAR('%') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r') - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE1") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR('1') PORT_CHAR('!') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR('4') PORT_CHAR('$') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E/C") PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR('2') PORT_CHAR('"') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR('3') PORT_CHAR('#') - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE2") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR('0') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR('7') PORT_CHAR('\'') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("- =") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('-') PORT_CHAR('=') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR('8') PORT_CHAR('(') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(": *") PORT_CODE(KEYCODE_MINUS) PORT_CHAR(':') PORT_CHAR('*') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('9') PORT_CHAR(')') - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE3") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27) - //PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Clear") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d') - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE4") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Break") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END)) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x') - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE5") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("; +") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l') - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE6") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(", <") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m') - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE7") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(13) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p') - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE8") - PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE9") - PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("LINE10") - PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) -INPUT_PORTS_END - - -/* Machine */ - -void h01x_state::machine_start() -{ - save_item(NAME(m_bank)); - save_item(NAME(m_cassette_data)); - - m_cassette_data_timer = timer_alloc(FUNC(h01x_state::cassette_data_callback), this); - m_cassette_data_timer->adjust(attotime::zero, 0, attotime::from_hz(48000)); -} - -void h01x_state::machine_reset() -{ - m_bank = 0x00; - - m_ram_ptr = m_ram->pointer(); - m_vram_ptr = m_vram->pointer(); -} - -MC6845_UPDATE_ROW( h01x_state::crtc_update_row ) -{ - rgb_t const *const palette = m_palette->palette()->entry_list_raw(); - u32 *p = &bitmap.pix(y); - - for (u16 x = 0; x < x_count; x++) - { - u16 mem = ((ma+x)*16 + ra) & 0x3fff; - u8 gfx = 0; - if (ra < 16) - gfx = m_vram_ptr[mem] ^ ((x == cursor_x) ? 15 : 0); - - *p++ = palette[BIT(gfx, 3)]; - *p++ = palette[BIT(gfx, 2)]; - *p++ = palette[BIT(gfx, 1)]; - *p++ = palette[BIT(gfx, 0)]; - } -} - -void h01x_state::port_70_w(uint8_t data) -{ - m_bank = data & 0xc0; - - // bit5, speaker - m_speaker->level_w(BIT(data, 5)); - - // bit4, cassette - m_cassette->output(BIT(data, 4) ? 1.0 : -1.0); -} - -uint8_t h01x_state::port_50_r() -{ - // bit 7, cassette input - return m_cassette_data ? 0xff : 0x7f; -} - - -// 0x0000 --- 0x3FFF -uint8_t h01x_state::mem_0000_r(offs_t offset) -{ - return m_rom[offset]; -} - -void h01x_state::mem_0000_w(uint8_t data) -{ -} - -// 0x4000 --- 0x7FFF -uint8_t h01x_state::mem_4000_r(offs_t offset) -{ - return m_ram_ptr[offset]; -} - -void h01x_state::mem_4000_w(offs_t offset, uint8_t data) -{ - m_ram_ptr[offset] = data; -} - -// 0x8000 --- 0xBFFF -uint8_t h01x_state::mem_8000_r(offs_t offset) -{ - switch (m_bank) { - case 0xc0: - return m_hzrom[offset]; - case 0x40: - if ((offset & 0xf000) == 0x3000) { - u8 result = 0xff; - for (int i = 0; i < 11; i++) { - if (!BIT(offset, i)) - result &= m_io_keyboard[i]->read(); - } - return result; - } else { - return 0xff; - } - case 0x00: - return m_ram_ptr[offset + 0x4000]; - default: - return 0xff; - } -} - -void h01x_state::mem_8000_w(offs_t offset, uint8_t data) -{ - if (m_bank == 0x00) - m_ram_ptr[offset + 0x4000] = data; -} - - -// 0xC000 --- 0xFFFF -uint8_t h01x_state::mem_c000_r(offs_t offset) -{ - if (m_bank == 0xc0) - return m_hzrom[offset + 0x4000]; - else if (m_bank == 0x40) - return m_vram_ptr[offset]; - else - return 0xff; -} - -void h01x_state::mem_c000_w(offs_t offset, uint8_t data) -{ - if (m_bank == 0x40) - m_vram_ptr[offset] = (data & 0x0f) | 0xf0; -} - - -TIMER_CALLBACK_MEMBER(h01x_state::cassette_data_callback) -{ - m_cassette_data = false; - - if (m_cassette->input() > 0.2) - m_cassette_data = true; -} - - -/* ROM definition */ -ROM_START(h01b) - ROM_REGION(0x4000, "maincpu",0) - ROM_LOAD("h-01b_sysrom.bin", 0x0000, 0x4000, CRC(b52093a7) SHA1(8c874765033444688c906b1a987a73f2c3ec83fb)) - - ROM_REGION(0x8000,"hzrom",0) - ROM_LOAD("h-01b_hzrom.bin", 0x0000, 0x8000, CRC(f0d6a7ac) SHA1(72151d3215bc8b26f983466221fe5f4009727ce8)) -ROM_END - -ROM_START(nf500a) - ROM_REGION(0x4000, "maincpu",0) - ROM_LOAD("u2-hn27128-9adc.bin", 0x0000, 0x4000, CRC(147dae83) SHA1(856b0970c603e88707ce8638be5dbd8ab1c42a1b)) - - ROM_REGION(0x8000,"hzrom",0) - ROM_LOAD("u4-hn27256-32aa.bin", 0x0000, 0x8000, CRC(9ecfddaa) SHA1(54b6e1b43f79b7705e95edda845b21d7326d48e2)) -ROM_END - -ROM_START(h01jce) - ROM_REGION(0x4000, "maincpu",0) - ROM_LOAD("m5l27128k_9b99.bin", 0x0000, 0x4000, CRC(59be30df) SHA1(21ccc765d13992753ec0457e09ac97cea82888a9)) - - ROM_REGION(0x8000,"hzrom",0) - ROM_LOAD("u4-hn27256-32aa.bin", 0x0000, 0x8000, CRC(9ecfddaa) SHA1(54b6e1b43f79b7705e95edda845b21d7326d48e2)) - - ROM_REGION(0x4000, "exrom",0) - ROM_LOAD("hn4827128g_f0f9.bin", 0x0000, 0x4000, CRC(36bffec0) SHA1(5b4b24c54eba0a8b69f291ca656ea27a3685f42e)) -ROM_END - -/* Driver */ - -// H-01B中文教育电脑 -// 普乐电器公司 -// cpu Z-80A 2MHz - -// NF500A教学电脑 -// 国营八三〇厂制造 -// cpu Z-80A 4MHz -// video MC6845P -// sysrom 16KB EPROM -// hzrom 32KB EPROM -// ram 32KB SRAM -// vram 16Kx4bit DRAM - -// JCE -// 广东江门计算机应用设备厂 -// video HD6845SP -// sysrom 16KB EPROM -// hzrom 32KB EPROM -// extrom 16KB EPROM - -// Startup screens -// H-01B : H-01型中文教育电脑 普乐电器公司制造 -// NF500A : H-01型汉字微电脑 中国科学院H电脑公司 -// JCE : H-01型中文普及电脑 北岳电子有限公司制造 - -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1985, h01b, 0, 0, h01b, h01b, h01x_state, empty_init, "China H Computer Company", "H-01B", MACHINE_SUPPORTS_SAVE ) -COMP( 1985, nf500a, 0, 0, nf500a, h01x, h01x_state, empty_init, "China State-owned 830 Factory", "NF500A", MACHINE_SUPPORTS_SAVE ) -COMP( 1987, h01jce, 0, 0, h01jce, h01x, h01x_state, empty_init, "China Jiangmen Computer Equipment Factory", "H-01 JCE", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/handheld/hh_cop400.cpp mame-0.251+dfsg.1/src/mame/handheld/hh_cop400.cpp --- mame-0.250+dfsg.1/src/mame/handheld/hh_cop400.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/handheld/hh_cop400.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -2149,7 +2149,7 @@ /*************************************************************************** - National Semiconductor Cops Pocket Assistant (CPA) + National Semiconductor COPS Pocket Assistant (CPA) * COP444 MCU label COP444L-JXY/N * 8-digit 7seg display, 1-bit sound @@ -2496,7 +2496,7 @@ CONS( 1982, bship82, bship, 0, bship82, bship82, bship82_state, empty_init, "Milton Bradley", "Electronic Battleship (1982 version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // *** CONS( 1979, qkracer, 0, 0, qkracer, qkracer, qkracer_state, empty_init, "National Semiconductor", "QuizKid Racer (COP420 version)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW ) -COMP( 1982, copspa, 0, 0, mdallas, copspa, mdallas_state, empty_init, "National Semiconductor", "Cops Pocket Assistant", MACHINE_SUPPORTS_SAVE ) +COMP( 1982, copspa, 0, 0, mdallas, copspa, mdallas_state, empty_init, "National Semiconductor", "COPS Pocket Assistant", MACHINE_SUPPORTS_SAVE ) COMP( 1984, solution, 0, 0, scat, solution, scat_state, empty_init, "SCAT", "The Solution", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW ) diff -Nru mame-0.250+dfsg.1/src/mame/handheld/hh_hmcs40.cpp mame-0.251+dfsg.1/src/mame/handheld/hh_hmcs40.cpp --- mame-0.250+dfsg.1/src/mame/handheld/hh_hmcs40.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/handheld/hh_hmcs40.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -33,6 +33,7 @@ @A70 HD38800 1982, Coleco Galaxian @A73 HD38800 1982, Mattel Star Hawk (PT-317B) @A77 HD38800 1982, Bandai Frisky Tom (PT-327A) + *A87 HD38800 1982, Gakken Paint Roller @A88 HD38800 1982, Tomy Tron (THN-02) @B01 HD38800 1982, Gakken Crazy Kong @B19 HD38800 1982, Bandai Zaxxon diff -Nru mame-0.250+dfsg.1/src/mame/handheld/hh_pps41.cpp mame-0.251+dfsg.1/src/mame/handheld/hh_pps41.cpp --- mame-0.250+dfsg.1/src/mame/handheld/hh_pps41.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/handheld/hh_pps41.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -928,7 +928,7 @@ * 8-digit 14seg LED display, 2-bit sound This is not a toy, but a fortune forecast. Date format is mm-dd-yy, it is - valid only from June 1 1979 until December 31 1987 + valid only from June 1 1979 until December 31 1987. ***************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/handheld/hh_sm510.cpp mame-0.251+dfsg.1/src/mame/handheld/hh_sm510.cpp --- mame-0.250+dfsg.1/src/mame/handheld/hh_sm510.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/handheld/hh_sm510.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4624,6 +4624,7 @@ /*************************************************************************** Konami Double Dribble (model BH001) + * PCB label: BH001 * Sharp SM510 under epoxy (die label CMS54C, KMS584) * lcd screen with custom segments, 1-bit sound @@ -4716,8 +4717,7 @@ static INPUT_PORTS_START( kcontra ) PORT_START("IN.0") // S1 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_CB(input_changed) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_CB(input_changed) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x06, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_CB(input_changed) PORT_START("IN.1") // S2 @@ -4883,13 +4883,17 @@ /*************************************************************************** - Konami Teenage Mutant Ninja Turtles (model BH005) + Konami Teenage Mutant Ninja Turtles * PCB label: BH005 * Sharp SM511 under epoxy (die label KMS73B, 774) * lcd screen with custom segments, 1-bit sound - MCU ROM is presumed to be the same for Teenage Mutant Ninja Turtles, - Ganbare Goemon: Ebisumaru Kiki Ippatsu. + known releases: + - World: Teenage Mutant Ninja Turtles + - UK: Teenage Mutant Hero Turtles + + がんばれゴエモン えびす丸危機一髪 (Ganbare Goemon: Ebisumaru Kiki Ippatsu) (model BH101) + is presumed to have the same MCU ROM. ***************************************************************************/ @@ -4907,20 +4911,20 @@ static INPUT_PORTS_START( ktmnt ) PORT_START("IN.0") // S1 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_CB(input_changed) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_CB(input_changed) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_CHANGED_CB(input_changed) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_LEFT ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_RIGHT ) PORT_CHANGED_CB(input_changed) PORT_START("IN.1") // S2 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_CB(input_changed) PORT_NAME("Game Select") PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_VOLUME_DOWN ) PORT_CHANGED_CB(input_changed) PORT_NAME("Sound") PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_CHANGED_CB(input_changed) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START ) PORT_CHANGED_CB(input_changed) PORT_NAME("Power On/Start") PORT_START("IN.2") // S3 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_CB(input_changed) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_LEFT ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_RIGHT ) PORT_CHANGED_CB(input_changed) PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_START("ACL") @@ -4951,6 +4955,138 @@ /*************************************************************************** + Konami Skate or Die + * PCB label: BH006 + * Sharp SM511 under epoxy (die label KMS73B, 775) + * lcd screen with custom segments, 1-bit sound + + けっきょく 南極大冒険 (Kekkyoku Nankyoku Daibouken, aka Antarctic Adventure) + (model BH100) is presumed to have the same MCU ROM. + +***************************************************************************/ + +class kskatedie_state : public hh_sm510_state +{ +public: + kskatedie_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_sm510_state(mconfig, type, tag) + { } + + void kskatedie(machine_config &config); +}; + +// config + +static INPUT_PORTS_START( kskatedie ) + PORT_START("IN.0") // S1 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_LEFT ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_RIGHT ) PORT_CHANGED_CB(input_changed) + + PORT_START("IN.1") // S2 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_VOLUME_DOWN ) PORT_CHANGED_CB(input_changed) PORT_NAME("Sound") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_CB(input_changed) PORT_NAME("Continue") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START ) PORT_CHANGED_CB(input_changed) PORT_NAME("Power On/Start") + + PORT_START("IN.2") // S3 + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x0b, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("ACL") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_CHANGED_CB(acl_button) PORT_NAME("All Clear") +INPUT_PORTS_END + +void kskatedie_state::kskatedie(machine_config &config) +{ + sm511_common(config, 1496, 1080); +} + +// roms + +ROM_START( kskatedie ) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD( "775.program", 0x0000, 0x1000, CRC(067b11db) SHA1(1fe0795515c6787c2af1d38f18a5c4c5c9d87408) ) + + ROM_REGION( 0x100, "maincpu:melody", 0 ) + ROM_LOAD( "775.melody", 0x000, 0x100, CRC(d8c59670) SHA1(c33da2415bbd1a414e5dda3b05e139c1d22d267a) ) + + ROM_REGION( 395160, "screen", 0) + ROM_LOAD( "kskatedie.svg", 0, 395160, CRC(34fbb7b8) SHA1(402dfba32947aac75bc9386079b95e7223f78e6d) ) +ROM_END + + + + + +/*************************************************************************** + + Konami The Adventures of Bayou Billy + * PCB label: BH007 + * Sharp SM511 under epoxy (die label KMS73B, 780) + * lcd screen with custom segments, 1-bit sound + +***************************************************************************/ + +class kbilly_state : public hh_sm510_state +{ +public: + kbilly_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_sm510_state(mconfig, type, tag) + { } + + void kbilly(machine_config &config); +}; + +// config + +static INPUT_PORTS_START( kbilly ) + PORT_START("IN.0") // S1 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_LEFT ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_RIGHT ) PORT_CHANGED_CB(input_changed) + + PORT_START("IN.1") // S2 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_VOLUME_DOWN ) PORT_CHANGED_CB(input_changed) PORT_NAME("Sound") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_CB(input_changed) PORT_NAME("Pause") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START ) PORT_CHANGED_CB(input_changed) PORT_NAME("Power On/Start") + + PORT_START("IN.2") // S3 + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x09, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("ACL") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_CHANGED_CB(acl_button) PORT_NAME("All Clear") +INPUT_PORTS_END + +void kbilly_state::kbilly(machine_config &config) +{ + sm511_common(config, 1490, 1080); +} + +// roms + +ROM_START( kbilly ) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD( "780.program", 0x0000, 0x1000, CRC(b8b1f734) SHA1(619dd527187b43276d081cdb1b13e0a9a81f2c6a) ) + + ROM_REGION( 0x100, "maincpu:melody", 0 ) + ROM_LOAD( "780.melody", 0x000, 0x100, CRC(cd488bea) SHA1(8fc60081f46e392978d6950c74711fb7ebd154de) ) + + ROM_REGION( 598317, "screen", 0) + ROM_LOAD( "kbilly.svg", 0, 598317, CRC(fec67ddf) SHA1(3e5f520733e8b720966028ed6a72062be5381f27) ) +ROM_END + + + + + +/*************************************************************************** + Konami Bottom of the Ninth (model BH008) * PCB label: BH008 * Sharp SM511 under epoxy (die label KMS73B, 779) @@ -5080,65 +5216,60 @@ /*************************************************************************** - Konami Blades of Steel (model 13011) - * PCB label: BH011 - * Sharp SM511 under epoxy (die label KMS73B, 782) + Konami Bill Elliott's NASCAR Racing (model 13010) + * PCB label: BH010 + * Sharp SM511 under epoxy (die label KMS73B, 783) * lcd screen with custom segments, 1-bit sound + Chequered Flag is presumed to have the same MCU ROM. + ***************************************************************************/ -class kblades_state : public hh_sm510_state +class knascar_state : public hh_sm510_state { public: - kblades_state(const machine_config &mconfig, device_type type, const char *tag) : + knascar_state(const machine_config &mconfig, device_type type, const char *tag) : hh_sm510_state(mconfig, type, tag) - { - // increase lcd decay: too much overall flicker - m_decay_len = 25; - } + { } - void kblades(machine_config &config); + void knascar(machine_config &config); }; // config -static INPUT_PORTS_START( kblades ) +static INPUT_PORTS_START( knascar ) PORT_START("IN.0") // S1 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_CB(input_changed) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_CB(input_changed) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_CHANGED_CB(input_changed) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_CB(input_changed) - - PORT_START("IN.1") // S2 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_CHANGED_CB(input_changed) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_VOLUME_DOWN ) PORT_CHANGED_CB(input_changed) PORT_NAME("Sound") PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_CB(input_changed) PORT_NAME("Pause") PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START ) PORT_CHANGED_CB(input_changed) PORT_NAME("Power On/Start") - PORT_START("IN.2") // S3 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_CB(input_changed) - PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_START("IN.1") // S2 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_VOLUME_DOWN ) PORT_CHANGED_CB(input_changed) PORT_NAME("Sound") PORT_START("ACL") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_CHANGED_CB(acl_button) PORT_NAME("All Clear") INPUT_PORTS_END -void kblades_state::kblades(machine_config &config) +void knascar_state::knascar(machine_config &config) { - sm511_common(config, 1516, 1080); + sm511_common(config, 1491, 1080); } // roms -ROM_START( kblades ) +ROM_START( knascar ) ROM_REGION( 0x1000, "maincpu", 0 ) - ROM_LOAD( "782.program", 0x0000, 0x1000, CRC(3351a35d) SHA1(84c64b65d3cabfa20c18f4649c9ede2578b82523) ) + ROM_LOAD( "783.program", 0x0000, 0x1000, CRC(0a08536a) SHA1(199203fad96e0d2b173b876b9746064b0c30dc7b) ) ROM_REGION( 0x100, "maincpu:melody", 0 ) - ROM_LOAD( "782.melody", 0x000, 0x100, CRC(e8bf48ba) SHA1(3852c014dc9136566322b4f9e2aab0e3ec3a7387) ) + ROM_LOAD( "783.melody", 0x000, 0x100, CRC(ffeef4bc) SHA1(a3b21eefb170aa54eb53cf56f88b0c00dd29703f)) - ROM_REGION( 455154, "screen", 0) - ROM_LOAD( "kblades.svg", 0, 455154, CRC(f17ec8ba) SHA1(ed999ef4b3f0ae94c243219ea8ea1eedd7179c26) ) + ROM_REGION( 474061, "screen", 0) + ROM_LOAD( "knascar.svg", 0, 474061, CRC(d30f639a) SHA1(6fd061eda61f925a9f85cf5fb4b7024f15e1e1fe) ) ROM_END @@ -5147,31 +5278,29 @@ /*************************************************************************** - Konami NFL Football - * Sharp SM511 under epoxy (die label KMS73B, 786) + Konami Blades of Steel (model 13011) + * PCB label: BH011 + * Sharp SM511 under epoxy (die label KMS73B, 782) * lcd screen with custom segments, 1-bit sound - This is the 1989 version. It was rereleased in 1992, assumed to be the same - game underneath. - ***************************************************************************/ -class knfl_state : public hh_sm510_state +class kblades_state : public hh_sm510_state { public: - knfl_state(const machine_config &mconfig, device_type type, const char *tag) : + kblades_state(const machine_config &mconfig, device_type type, const char *tag) : hh_sm510_state(mconfig, type, tag) { // increase lcd decay: too much overall flicker - m_decay_len = 35; + m_decay_len = 25; } - void knfl(machine_config &config); + void kblades(machine_config &config); }; // config -static INPUT_PORTS_START( knfl ) +static INPUT_PORTS_START( kblades ) PORT_START("IN.0") // S1 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_CB(input_changed) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_CB(input_changed) @@ -5192,22 +5321,22 @@ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_CHANGED_CB(acl_button) PORT_NAME("All Clear") INPUT_PORTS_END -void knfl_state::knfl(machine_config &config) +void kblades_state::kblades(machine_config &config) { - sm511_common(config, 1449, 1080); + sm511_common(config, 1516, 1080); } // roms -ROM_START( knfl ) +ROM_START( kblades ) ROM_REGION( 0x1000, "maincpu", 0 ) - ROM_LOAD( "786.program", 0x0000, 0x1000, CRC(0535c565) SHA1(44cdcd284713ff0b194b24beff9f1b94c8bc63b2) ) + ROM_LOAD( "782.program", 0x0000, 0x1000, CRC(3351a35d) SHA1(84c64b65d3cabfa20c18f4649c9ede2578b82523) ) ROM_REGION( 0x100, "maincpu:melody", 0 ) - ROM_LOAD( "786.melody", 0x000, 0x100, CRC(6c80263b) SHA1(d3c21e2f8491fef101907b8e0871b1e1c1ed58f5) ) + ROM_LOAD( "782.melody", 0x000, 0x100, CRC(e8bf48ba) SHA1(3852c014dc9136566322b4f9e2aab0e3ec3a7387) ) - ROM_REGION( 571173, "screen", 0) - ROM_LOAD( "knfl.svg", 0, 571173, CRC(406c5bed) SHA1(1f3a704f091b78c89c06108ba11310f4072cc178) ) + ROM_REGION( 455154, "screen", 0) + ROM_LOAD( "kblades.svg", 0, 455154, CRC(f17ec8ba) SHA1(ed999ef4b3f0ae94c243219ea8ea1eedd7179c26) ) ROM_END @@ -5216,25 +5345,32 @@ /*************************************************************************** - Konami The Adventures of Bayou Billy - * Sharp SM511 under epoxy (die label KMS73B, 788) + Konami NFL Football + * PCB label: BH013 + * Sharp SM511 under epoxy (die label KMS73B, 786) * lcd screen with custom segments, 1-bit sound + This is the 1989 version. It was rereleased in 1992, assumed to be the same + game underneath. + ***************************************************************************/ -class kbilly_state : public hh_sm510_state +class knfl_state : public hh_sm510_state { public: - kbilly_state(const machine_config &mconfig, device_type type, const char *tag) : + knfl_state(const machine_config &mconfig, device_type type, const char *tag) : hh_sm510_state(mconfig, type, tag) - { } + { + // increase lcd decay: too much overall flicker + m_decay_len = 35; + } - void kbilly(machine_config &config); + void knfl(machine_config &config); }; // config -static INPUT_PORTS_START( kbilly ) +static INPUT_PORTS_START( knfl ) PORT_START("IN.0") // S1 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_CB(input_changed) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_CB(input_changed) @@ -5248,31 +5384,29 @@ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START ) PORT_CHANGED_CB(input_changed) PORT_NAME("Power On/Start") PORT_START("IN.2") // S3 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_CB(input_changed) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CHANGED_CB(input_changed) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_CB(input_changed) + PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_START("ACL") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_CHANGED_CB(acl_button) PORT_NAME("All Clear") INPUT_PORTS_END -void kbilly_state::kbilly(machine_config &config) +void knfl_state::knfl(machine_config &config) { - sm511_common(config, 1490, 1080); + sm511_common(config, 1449, 1080); } // roms -ROM_START( kbilly ) +ROM_START( knfl ) ROM_REGION( 0x1000, "maincpu", 0 ) - ROM_LOAD( "788.program", 0x0000, 0x1000, CRC(b8b1f734) SHA1(619dd527187b43276d081cdb1b13e0a9a81f2c6a) ) + ROM_LOAD( "786.program", 0x0000, 0x1000, CRC(0535c565) SHA1(44cdcd284713ff0b194b24beff9f1b94c8bc63b2) ) ROM_REGION( 0x100, "maincpu:melody", 0 ) - ROM_LOAD( "788.melody", 0x000, 0x100, CRC(cd488bea) SHA1(8fc60081f46e392978d6950c74711fb7ebd154de) ) + ROM_LOAD( "786.melody", 0x000, 0x100, CRC(6c80263b) SHA1(d3c21e2f8491fef101907b8e0871b1e1c1ed58f5) ) - ROM_REGION( 598317, "screen", 0) - ROM_LOAD( "kbilly.svg", 0, 598317, CRC(fec67ddf) SHA1(3e5f520733e8b720966028ed6a72062be5381f27) ) + ROM_REGION( 571173, "screen", 0) + ROM_LOAD( "knfl.svg", 0, 571173, CRC(406c5bed) SHA1(1f3a704f091b78c89c06108ba11310f4072cc178) ) ROM_END @@ -5282,6 +5416,7 @@ /*************************************************************************** Konami Bucky O'Hare + * PCB label: BH020 * Sharp SM511 under epoxy (die label KMS73B, N58) * lcd screen with custom segments, 1-bit sound @@ -5341,6 +5476,7 @@ /*************************************************************************** Konami Garfield + * PCB label: BH021 * Sharp SM511 under epoxy (die label KMS73B, N62) * lcd screen with custom segments, 1-bit sound @@ -9943,6 +10079,9 @@ MCU ROM is the same for Gargoyles: Night Flight, Superman. + In the same year, Tiger also sold a red & blue Superman handheld (model 71-093), + it's not the same game as this. + ***************************************************************************/ class tsuperman_state : public hh_sm510_state @@ -10527,11 +10666,13 @@ CONS( 1989, ktopgun, 0, 0, ktopgun, ktopgun, ktopgun_state, empty_init, "Konami", "Top Gun (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) CONS( 1989, kgradius, 0, 0, kgradius, kgradius, kgradius_state, empty_init, "Konami", "Gradius (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) CONS( 1989, ktmnt, 0, 0, ktmnt, ktmnt, ktmnt_state, empty_init, "Konami", "Teenage Mutant Ninja Turtles (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) +CONS( 1989, kskatedie, 0, 0, kskatedie, kskatedie, kskatedie_state, empty_init, "Konami (licensed from Electronic Arts)", "Skate or Die (Konami, handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) +CONS( 1989, kbilly, 0, 0, kbilly, kbilly, kbilly_state, empty_init, "Konami", "The Adventures of Bayou Billy (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) CONS( 1989, kbottom9, 0, 0, kbottom9, kbottom9, kbottom9_state, empty_init, "Konami", "Bottom of the Ninth (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) CONS( 1989, kloneran, 0, 0, kloneran, kloneran, kloneran_state, empty_init, "Konami", "Lone Ranger (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) +CONS( 1989, knascar, 0, 0, knascar, knascar, knascar_state, empty_init, "Konami", "Bill Elliott's NASCAR Racing (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) CONS( 1989, kblades, 0, 0, kblades, kblades, kblades_state, empty_init, "Konami", "Blades of Steel (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) -CONS( 1989, knfl, 0, 0, knfl, knfl, knfl_state, empty_init, "Konami", "NFL Football (Konami)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) -CONS( 1989, kbilly, 0, 0, kbilly, kbilly, kbilly_state, empty_init, "Konami", "The Adventures of Bayou Billy (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) +CONS( 1989, knfl, 0, 0, knfl, knfl, knfl_state, empty_init, "Konami", "NFL Football (Konami, handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) CONS( 1991, kbucky, 0, 0, kbucky, kbucky, kbucky_state, empty_init, "Konami", "Bucky O'Hare (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) CONS( 1991, kgarfld, 0, 0, kgarfld, kgarfld, kgarfld_state, empty_init, "Konami", "Garfield (Konami)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) diff -Nru mame-0.250+dfsg.1/src/mame/handheld/hh_tms1k.cpp mame-0.251+dfsg.1/src/mame/handheld/hh_tms1k.cpp --- mame-0.250+dfsg.1/src/mame/handheld/hh_tms1k.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/handheld/hh_tms1k.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -110,6 +110,7 @@ @MP1296 TMS1100 1982, Entex Black Knight Pinball (6081) @MP1311 TMS1100 1981, Bandai TC7: Air Traffic Control @MP1312 TMS1100 1981, Gakken FX-Micom R-165/Radio Shack Science Fair Microcomputer Trainer + *MP1343 TMS1100 1989, Micronta Vox Clock 3 *MP1359 TMS1100? 1985, Capsela CRC2000 @MP1525 TMS1170 1980, Coleco Head to Head: Electronic Baseball @MP1604 TMS1370 1982, Gakken Invader 2000/Tandy Cosmic Fire Away 3000 diff -Nru mame-0.250+dfsg.1/src/mame/handheld/teammate.cpp mame-0.251+dfsg.1/src/mame/handheld/teammate.cpp --- mame-0.250+dfsg.1/src/mame/handheld/teammate.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/handheld/teammate.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -60,15 +60,19 @@ void main_io(address_map &map); void select_w(u8 data); + u8 select_r(); void led_w(u8 data); - u8 input_r(); + u8 led_r(); void input_w(u8 data); - u8 sound_r(); + u8 input_r(); void sound_w(u8 data); + u8 sound_r(); u8 m_inp_sel = 0; u8 m_input = 0; u8 m_sound = 0; + u8 m_select = 0; + u8 m_led_data = 0; }; void teammate_state::machine_start() @@ -76,6 +80,8 @@ save_item(NAME(m_inp_sel)); save_item(NAME(m_input)); save_item(NAME(m_sound)); + save_item(NAME(m_select)); + save_item(NAME(m_led_data)); } @@ -92,12 +98,29 @@ // P02,P03,P05: input select // P04: N/C m_inp_sel = (data >> 3 & 4) | (data >> 2 & 3); + m_select = data; +} + +u8 teammate_state::select_r() +{ + return m_select; } void teammate_state::led_w(u8 data) { // P10-P17: DS8817N to leds m_display->write_mx(bitswap<8>(~data,0,1,2,3,4,5,6,7)); + m_led_data = data; +} + +u8 teammate_state::led_r() +{ + return m_led_data; +} + +void teammate_state::input_w(u8 data) +{ + m_input = data; } u8 teammate_state::input_r() @@ -112,11 +135,6 @@ return data | m_input; } -void teammate_state::input_w(u8 data) -{ - m_input = data; -} - void teammate_state::sound_w(u8 data) { // P50: speaker out @@ -143,8 +161,8 @@ void teammate_state::main_io(address_map &map) { - map(0x00, 0x00).w(FUNC(teammate_state::select_w)); - map(0x01, 0x01).w(FUNC(teammate_state::led_w)); + map(0x00, 0x00).rw(FUNC(teammate_state::select_r), FUNC(teammate_state::select_w)); + map(0x01, 0x01).rw(FUNC(teammate_state::led_r), FUNC(teammate_state::led_w)); map(0x04, 0x07).rw("psu", FUNC(f38t56_device::read), FUNC(f38t56_device::write)); } diff -Nru mame-0.250+dfsg.1/src/mame/homebrew/minib.cpp mame-0.251+dfsg.1/src/mame/homebrew/minib.cpp --- mame-0.250+dfsg.1/src/mame/homebrew/minib.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/homebrew/minib.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,169 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/****************************************************************************** + + http://www.sprow.co.uk/bbc/minib.htm + + The board comes with the following features: + - 6502A processor, at 2MHz (slowed to 1MHz during i/o accesses) + - 6522 versatile interface adapter for timers and interruptible latched i/o ports + - Interface for a 20x4 LCD display + - 32kbyte high speed SRAM + - 128kbyte in circuit programmable flash ROM (16k for main operating system, 112k for other ROM based applications) + - PS/2 keyboard interface + - Real time clock (year 2000 compliant), on a shared I²C bus + - Full implementation of the BBC micro's 1MHz expansion bus for add on boards + - Power supply monitor/reset device + + TODO: + - fix keyboard + +******************************************************************************/ + +#include "emu.h" +#include "cpu/m6502/m6502.h" +#include "machine/6522via.h" +#include "machine/input_merger.h" +#include "bus/pc_kbd/pc_kbdc.h" +#include "bus/pc_kbd/keyboards.h" + +// slot devices +#include "bus/bbc/1mhzbus/1mhzbus.h" +#include "bus/bbc/1mhzbus/24bbc.h" +#include "bus/bbc/1mhzbus/2ndserial.h" +#include "bus/bbc/1mhzbus/ide.h" +#include "bus/bbc/userport/userport.h" +#include "bus/bbc/userport/lcd.h" + + +class minib_state : public driver_device +{ +public: + minib_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_rombank(*this, "rombank") + , m_kbd(*this, "kbd") + { } + + void minib(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + +private: + required_device m_maincpu; + required_memory_bank m_rombank; + required_device m_kbd; + + void mem_map(address_map &map); + + //uint8_t pa_r(); + void pa_w(uint8_t data); +}; + + +void minib_state::mem_map(address_map &map) +{ + map.unmap_value_high(); + map(0x0000, 0x7fff).ram(); + map(0x8000, 0xbfff).bankr(m_rombank); + map(0xc000, 0xffff).rom().region("flash", 0x1c000); + map(0xfc00, 0xfcff).rw("1mhzbus", FUNC(bbc_1mhzbus_slot_device::fred_r), FUNC(bbc_1mhzbus_slot_device::fred_w)); + map(0xfd00, 0xfdff).rw("1mhzbus", FUNC(bbc_1mhzbus_slot_device::jim_r), FUNC(bbc_1mhzbus_slot_device::jim_w)); + map(0xfe30, 0xfe3f).lw8(NAME([this] (u8 data) { m_rombank->set_entry(data & 0x07); })); + map(0xfe60, 0xfe6f).m("via", FUNC(via6522_device::map)); +} + + +void minib_state::machine_start() +{ + m_rombank->configure_entries(0, 8, memregion("flash")->base(), 0x4000); +} + +void minib_state::machine_reset() +{ + m_rombank->set_entry(0); +} + + +//uint8_t minib_state::pa_r() +//{ +// uint8_t data = 0x00; +// +// data |= m_kbd->data_signal() << 1; +// +// return data; +//} + +void minib_state::pa_w(uint8_t data) +{ + // PA0 = SDA drive* + // PA1 = PS/2 data sense + // PA2 = SDA sense + // PA3 = SCL + // PA4 = PS/2 clock out* + // PA5 = PS/2 data out* + // CA1 = PS/2 clock sense + // CA2, PA6, PA7, are spare and just go to a header + + logerror("pa_w: clk %d data %d\n", BIT(data, 4), BIT(data, 5)); + m_kbd->data_write_from_mb(!BIT(data, 4)); + m_kbd->clock_write_from_mb(!BIT(data, 5)); +} + + +static void minib_1mhzbus_devices(device_slot_interface &device) +{ + device.option_add("24bbc", BBC_24BBC); // Sprow 24bBC/RAM Disc + device.option_add("2ndserial", BBC_2NDSERIAL); // Sprow 2nd Serial Port + device.option_add("beebide", BBC_BEEBIDE); // Sprow BeebIDE 16-bit +} + +static void minib_userport_devices(device_slot_interface &device) +{ + device.option_add("lcd", BBC_LCD); // Sprow LCD Display +} + + +void minib_state::minib(machine_config &config) +{ + M6502(config, m_maincpu, 16_MHz_XTAL / 8); + m_maincpu->set_addrmap(AS_PROGRAM, &minib_state::mem_map); + + INPUT_MERGER_ANY_HIGH(config, "irqs").output_handler().set_inputline(m_maincpu, M6502_IRQ_LINE); + + via6522_device &via(MOS6522(config, "via", 16_MHz_XTAL / 8)); + via.readpb_handler().set("userport", FUNC(bbc_userport_slot_device::pb_r)); + via.writepb_handler().set("userport", FUNC(bbc_userport_slot_device::pb_w)); + via.cb1_handler().set("userport", FUNC(bbc_userport_slot_device::write_cb1)); + via.cb2_handler().set("userport", FUNC(bbc_userport_slot_device::write_cb2)); + //via.readpa_handler().set(FUNC(minib_state::pa_r)); + via.writepa_handler().set(FUNC(minib_state::pa_w)); + via.irq_handler().set("irqs", FUNC(input_merger_device::in_w<0>)); + + PC_KBDC(config, m_kbd, pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL); + m_kbd->out_data_cb().set("via", FUNC(via6522_device::write_pa1)); + m_kbd->out_clock_cb().set("via", FUNC(via6522_device::write_ca1)); + + bbc_userport_slot_device &userport(BBC_USERPORT_SLOT(config, "userport", minib_userport_devices, "lcd")); + userport.cb1_handler().set("via", FUNC(via6522_device::write_cb1)); + userport.cb2_handler().set("via", FUNC(via6522_device::write_cb2)); + + bbc_1mhzbus_slot_device &bus(BBC_1MHZBUS_SLOT(config, "1mhzbus", 16_MHz_XTAL / 16, minib_1mhzbus_devices, nullptr)); + bus.irq_handler().set("irqs", FUNC(input_merger_device::in_w<1>)); + bus.nmi_handler().set_inputline(m_maincpu, M6502_NMI_LINE); +} + + +ROM_START(minib) + ROM_REGION(0x20000, "flash", ROMREGION_ERASEFF) + ROM_LOAD("os041.rom", 0x1d000, 0x3000, CRC(57a24945) SHA1(5e521850953be33b9b29995e5f043bbbb45c60e5)) // OS 0.41 + ROM_LOAD("gos015.rom", 0x18000, 0x4000, CRC(e35a93df) SHA1(c91286aec2a2e086cb55ca3e0af576132144831f)) // GOS 0.15 + ROM_LOAD("basic2.rom", 0x14000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281)) // BASIC 2 +ROM_END + + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP (2002, minib, 0, 0, minib, 0, minib_state, empty_init, "Sprow", "MiniB Computer", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) diff -Nru mame-0.250+dfsg.1/src/mame/hp/hp80.cpp mame-0.251+dfsg.1/src/mame/hp/hp80.cpp --- mame-0.250+dfsg.1/src/mame/hp/hp80.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/hp/hp80.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -203,6 +203,7 @@ // State of keyboard ioport_value m_kb_state[ 3 ]; + bool m_int_kb_enabled; bool m_kb_enable; bool m_kb_pressed; bool m_kb_flipped; @@ -325,6 +326,7 @@ save_item(NAME(m_halt_lines)); save_pointer(NAME(m_kb_state) , 3); save_item(NAME(m_kb_enable)); + save_item(NAME(m_int_kb_enabled)); save_item(NAME(m_kb_pressed)); save_item(NAME(m_kb_flipped)); save_item(NAME(m_kb_lang_readout)); @@ -346,6 +348,7 @@ m_kb_state[ 2 ] = 0; m_kb_keycode = 0xff; m_kb_enable = true; + m_int_kb_enabled = false; m_kb_pressed = false; m_kb_flipped = false; m_kb_lang_readout = false; @@ -463,6 +466,9 @@ if (m_has_int_keyb) { m_kb_lang_readout = BIT(data , 2); m_kb_raw_readout = BIT(data , 3); + if (!m_int_kb_enabled && (data & 0x0f) == 1) { + m_int_kb_enabled = true; + } } m_dac->write(BIT(data , 5)); m_beep->set_state(BIT(data , 6)); @@ -717,7 +723,7 @@ input[ 1 ] = m_io_key1->read(); input[ 2 ] = m_io_key2->read(); - if (m_kb_enable) { + if (m_kb_enable && (!m_has_int_keyb || m_int_kb_enabled)) { uint8_t row; uint8_t col; diff -Nru mame-0.250+dfsg.1/src/mame/hp/hp9825.cpp mame-0.251+dfsg.1/src/mame/hp/hp9825.cpp --- mame-0.250+dfsg.1/src/mame/hp/hp9825.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/hp/hp9825.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -5,24 +5,21 @@ // Driver for HP 9825 systems // ************************** // -// **** Temporary header, will hopefully evolve into proper doc **** -// // What's in: -// - Emulation of 9825B and 9825T systems -// - 12 kw (9825B) or 31kw (9825T) of RAM +// - Emulation of 9825A, 9825B, 9825T and 9831A systems +// - 4,8,12 or 16 kw (9825A & 9831A), 12 kw (9825B) or 31kw (9825T) of RAM // - 12 kw of system ROM // - Keyboard // - Display & run light // - DC100 tape drive -// - Printer +// - Printer (N/A on 9831A) // - Beeper // - Internal expansion ROMs // - I/O expansion slots: 98032, 98034, 98035 & 98036 modules can be connected // - For 9825T: the so-called SKOAL mechanism that transparently overlays RAM & ROM // in the same address space // - External expansion ROMs -// What's not yet in: -// - Configurable RAM size +// - Configurable RAM size (9825A/9831A) // // Thanks to Dyke Shaffer for publishing (on https://groups.io/g/VintHPcom) // the source code of 98217 mass memory ROM. The 98217.bin image was reconstructed @@ -34,23 +31,23 @@ // content of SKOAL ROM from its printed & scanned dump. // I'd also like to thank Paul Berger for providing the images of the optional // mass storage ROMs (see http://www.hpmuseum.net). -// -// 9825A can also be emulated. At the moment I haven't all the necessary -// ROM dumps, though. #include "emu.h" -#include "cpu/hphybrid/hphybrid.h" -#include "machine/timer.h" + +#include "hp9825_optrom.h" #include "hp9825_tape.h" #include "hp98x5_io_sys.h" -#include "hp9825_optrom.h" + #include "bus/hp9845_io/hp9845_io.h" +#include "cpu/hphybrid/hphybrid.h" #include "imagedev/bitbngr.h" -#include "speaker.h" -#include "screen.h" +#include "machine/ram.h" +#include "machine/timer.h" #include "sound/beep.h" -#include "hp9825.lh" + +#include "screen.h" #include "softlist_dev.h" +#include "speaker.h" // Debugging #define VERBOSE 0 @@ -58,6 +55,10 @@ #define LOG_DBG_MASK (LOG_GENERAL << 1) #define LOG_DBG(...) LOGMASKED(LOG_DBG_MASK, __VA_ARGS__) +#include "hp9825.lh" + +namespace { + // CPU clock (generated by a trimmered RC oscillator) constexpr unsigned MAIN_CLOCK = 6000000; @@ -99,30 +100,41 @@ constexpr unsigned BEEPER_MS = 22; // Bit manipulation -namespace { - template constexpr T BIT_MASK(unsigned n) - { - return (T)1U << n; - } +template constexpr T BIT_MASK(unsigned n) +{ + return (T)1U << n; +} - template void BIT_CLR(T& w , unsigned n) - { - w &= ~BIT_MASK(n); - } +template void BIT_CLR(T& w , unsigned n) +{ + w &= ~BIT_MASK(n); +} - template void BIT_SET(T& w , unsigned n) - { - w |= BIT_MASK(n); - } +template void BIT_SET(T& w , unsigned n) +{ + w |= BIT_MASK(n); } + // +--------------+ -// | hp9825_state | +// | hp98xx_state | // +--------------+ -class hp9825_state : public driver_device +// ↑ +// +-------------------+ +// ↑ ↑ +// +--------------+ +--------------+ +// | hp9825_state | | hp9831_state | +// +--------------+ +--------------+ +// ↑ +// +-------------------+------------------+ +// ↑ ↑ ↑ +// +---------------+ +---------------+ +---------------+ +// | hp9825a_state | | hp9825b_state | | hp9825t_state | +// +---------------+ +---------------+ +---------------+ +class hp98xx_state : public driver_device { public: - hp9825_state(const machine_config &mconfig, device_type type, const char *tag) + hp98xx_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_cpu(*this , "cpu") , m_rom_drawers(*this , "drawer%u" , 0U) @@ -131,52 +143,46 @@ , m_tape(*this , "tape") , m_io_key(*this , "KEY%u" , 0) , m_shift_key(*this , "KEY_SHIFT") - , m_scroll_key(*this , "KEY_SCROLL") - , m_prt_alpha_out(*this , "prt_alpha") - , m_prt_graph_out(*this , "prt_graph") , m_prt_timer(*this , "prt_timer") , m_beeper(*this , "beeper") , m_beep_timer(*this , "beep_timer") , m_io_slot(*this, "slot%u", 0U) - , m_prt_out(*this, "printer") , m_display(*this , "char_%u_%u" , 0U , 0U) , m_run_light(*this , "run_light") , m_shift_lock(*this , "shift_lock") , m_tape_led(*this , "tape_led") , m_cassette(*this , "cassette") - , m_printer_bitmap(PRINT_OUT_W , PRINT_OUT_H) { } - void hp9825_base(machine_config &config); - DECLARE_INPUT_CHANGED_MEMBER(kb_changed); - DECLARE_INPUT_CHANGED_MEMBER(scroll_changed); - - uint32_t printer_out_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); protected: + void hp98xx_base(machine_config &config); + virtual void machine_start() override; virtual void device_reset() override; virtual void machine_reset() override; + virtual void print_line(); required_device m_cpu; required_device_array m_rom_drawers; + // Printer + uint8_t m_printer_mem[ PRINT_COLUMNS ]; + uint8_t m_printer_idx; + unsigned m_printer_line; // 0: printer idle, 1..10: line being printed + private: required_device m_io_sys; required_device m_cursor_timer; required_device m_tape; required_ioport_array<4> m_io_key; required_ioport m_shift_key; - required_ioport m_scroll_key; - required_device m_prt_alpha_out; - required_device m_prt_graph_out; required_device m_prt_timer; required_device m_beeper; required_device m_beep_timer; required_device_array m_io_slot; - required_device m_prt_out; output_finder<32 , 7> m_display; output_finder<> m_run_light; output_finder<> m_shift_lock; @@ -193,12 +199,6 @@ bool m_key_pressed; bool m_autorepeating; unsigned m_autorepeat_cnt; - // Printer - uint8_t m_printer_mem[ PRINT_COLUMNS ]; - uint8_t m_printer_idx; - unsigned m_printer_line; // 0: printer idle, 1..10: line being printed - bitmap_rgb32 m_printer_bitmap; - unsigned m_printer_window; // 0 is bottom window (the one closer to printhead) // SC of slots int m_slot_sc[ 3 ]; @@ -226,7 +226,7 @@ void set_dmar_slot(unsigned slot , int state); }; -void hp9825_state::machine_start() +void hp98xx_state::machine_start() { m_display.resolve(); m_run_light.resolve(); @@ -234,16 +234,13 @@ m_tape_led.resolve(); m_cassette.resolve(); - m_printer_bitmap.fill(PRINT_BG); - m_printer_window = 0; - save_item(NAME(m_display_on)); save_item(NAME(m_display_mem)); save_item(NAME(m_display_idx)); save_item(NAME(m_scancode)); } -void hp9825_state::device_reset() +void hp98xx_state::device_reset() { // First, unmap every r/w handler in 1..12 select codes for (unsigned sc = IO_SLOT_FIRST_PA; sc < (IO_SLOT_LAST_PA + 1); sc++) { @@ -263,7 +260,7 @@ } } -void hp9825_state::machine_reset() +void hp98xx_state::machine_reset() { m_display_on = false; m_display_idx = 0; @@ -284,17 +281,20 @@ m_beep_timer->reset(); } -void hp9825_state::cpu_io_map(address_map &map) +void hp98xx_state::print_line() +{ +} + +void hp98xx_state::cpu_io_map(address_map &map) { map.unmap_value_low(); - map(HP_MAKE_IOADDR(KDP_PA , 0) , HP_MAKE_IOADDR(KDP_PA , 0)).rw(FUNC(hp9825_state::kb_scancode_r) , FUNC(hp9825_state::disp_w)); - map(HP_MAKE_IOADDR(KDP_PA , 1) , HP_MAKE_IOADDR(KDP_PA , 1)).rw(FUNC(hp9825_state::kdp_status_r) , FUNC(hp9825_state::kdp_control_w)); - map(HP_MAKE_IOADDR(KDP_PA , 2) , HP_MAKE_IOADDR(KDP_PA , 2)).w(FUNC(hp9825_state::printer_w)); + map(HP_MAKE_IOADDR(KDP_PA , 0) , HP_MAKE_IOADDR(KDP_PA , 0)).rw(FUNC(hp98xx_state::kb_scancode_r) , FUNC(hp98xx_state::disp_w)); + map(HP_MAKE_IOADDR(KDP_PA , 1) , HP_MAKE_IOADDR(KDP_PA , 1)).rw(FUNC(hp98xx_state::kdp_status_r) , FUNC(hp98xx_state::kdp_control_w)); + map(HP_MAKE_IOADDR(KDP_PA , 2) , HP_MAKE_IOADDR(KDP_PA , 2)).w(FUNC(hp98xx_state::printer_w)); map(HP_MAKE_IOADDR(TAPE_PA , 0) , HP_MAKE_IOADDR(TAPE_PA , 3)).rw(m_tape , FUNC(hp9825_tape_device::tape_r) , FUNC(hp9825_tape_device::tape_w)); - // TODO: } -uint16_t hp9825_state::kb_scancode_r() +uint16_t hp98xx_state::kb_scancode_r() { uint8_t res = m_scancode; if (BIT(m_shift_key->read() , 0) || m_shift_lock) { @@ -304,7 +304,7 @@ return res; } -void hp9825_state::disp_w(uint16_t data) +void hp98xx_state::disp_w(uint16_t data) { if (m_display_on) { m_display_on = false; @@ -316,7 +316,7 @@ m_display_mem[ m_display_idx++ ] = uint8_t(data); } -uint16_t hp9825_state::kdp_status_r() +uint16_t hp98xx_state::kdp_status_r() { uint16_t res = 0; if (m_io_sys->is_irq_pending(KDP_PA)) { @@ -332,7 +332,7 @@ return res; } -void hp9825_state::kdp_control_w(uint16_t data) +void hp98xx_state::kdp_control_w(uint16_t data) { bool regen_display = false; if (BIT(data , 1) && !m_display_on) { @@ -361,11 +361,6 @@ } if (BIT(data , 0) && m_printer_line == 0) { // Start printing - // Dump text line to alpha bitbanger - for (auto c : m_printer_mem) { - m_prt_alpha_out->output(c); - } - m_prt_alpha_out->output('\n'); m_printer_idx = 0; m_printer_line++; m_prt_timer->adjust(attotime::from_ticks(KDP_CLOCKS_PER_LINE , KDP_CLOCK)); @@ -380,7 +375,7 @@ } } -void hp9825_state::printer_w(uint16_t data) +void hp98xx_state::printer_w(uint16_t data) { m_printer_mem[ m_printer_idx ] = uint8_t(data); m_printer_idx = (m_printer_idx + 1) % PRINT_COLUMNS; @@ -519,7 +514,7 @@ { 0x7f,0x08,0x08,0x08,0x08 } // 7f }; -void hp9825_state::update_display() +void hp98xx_state::update_display() { m_any_cursor = false; for (unsigned i = 0; i < 32; ++i) { @@ -555,7 +550,7 @@ } } -TIMER_DEVICE_CALLBACK_MEMBER(hp9825_state::cursor_blink) +TIMER_DEVICE_CALLBACK_MEMBER(hp98xx_state::cursor_blink) { m_cursor_blink = !m_cursor_blink; if (m_any_cursor) { @@ -563,7 +558,7 @@ } } -TIMER_DEVICE_CALLBACK_MEMBER(hp9825_state::kb_scan) +TIMER_DEVICE_CALLBACK_MEMBER(hp98xx_state::kb_scan) { ioport_value input[ 4 ] { m_io_key[ 0 ]->read(), @@ -606,7 +601,7 @@ } } -INPUT_CHANGED_MEMBER(hp9825_state::kb_changed) +INPUT_CHANGED_MEMBER(hp98xx_state::kb_changed) { switch (param) { case 0: @@ -634,27 +629,7 @@ } } -INPUT_CHANGED_MEMBER(hp9825_state::scroll_changed) -{ - LOG_DBG("scroll p=%d n=%d\n" , param , newval); - switch (param) { - case 0: - // Scroll up - if (newval && m_printer_window > 0) { - m_printer_window--; - } - break; - - case 1: - // Scroll down - if (newval && m_printer_window < (PRINT_WINDOWS - 1)) { - m_printer_window++; - } - break; - } -} - -void hp9825_state::kb_scan_ioport(ioport_value pressed , ioport_port &port , unsigned idx_base , int& max_seq_len , unsigned& max_seq_idx) +void hp98xx_state::kb_scan_ioport(ioport_value pressed , ioport_port &port , unsigned idx_base , int& max_seq_len , unsigned& max_seq_idx) { while (pressed) { unsigned bit_no = 31 - count_leading_zeros_32(pressed); @@ -668,39 +643,9 @@ } } -TIMER_DEVICE_CALLBACK_MEMBER(hp9825_state::prt_timer) +TIMER_DEVICE_CALLBACK_MEMBER(hp98xx_state::prt_timer) { - // Shift printer bitmap one line up and clear bottom line - { - bitmap_rgb32 tmp{ m_printer_bitmap.width() , m_printer_bitmap.height() }; - s32 scroll = -1; - rectangle cliprect{ 0 , m_printer_bitmap.width() - 1 , 0 , m_printer_bitmap.height() - 2 }; - copyscrollbitmap(tmp , m_printer_bitmap , 0 , nullptr , 1 , &scroll , cliprect); - copybitmap(m_printer_bitmap , tmp , 0 , 0 , 0 , 0 , cliprect); - m_printer_bitmap.plot_box(0 , m_printer_bitmap.height() - 1 , m_printer_bitmap.width() , 1 , PRINT_BG); - } - - if ((m_printer_line > 0 && m_printer_line <= PRINT_EMPTY_TOP) || - (m_printer_line > (PRINT_EMPTY_TOP + PRINT_MATRIX_H) && m_printer_line <= PRINT_CELL_H)) { - // Empty lines - for (unsigned i = 0; i < PRINT_PIXELS_ROW; i++) { - m_prt_graph_out->output(' '); - } - } else { - for (unsigned i = 0; i < PRINT_COLUMNS; i++) { - for (unsigned col = 0; col < PRINT_MATRIX_W; col++) { - uint8_t pixels = chargen[ m_printer_mem[ i ] & 0x7f ][ col ]; - bool pixel = BIT(pixels , m_printer_line - PRINT_EMPTY_TOP - 1); - m_prt_graph_out->output(pixel ? '*' : ' '); - if (pixel) { - m_printer_bitmap.pix(m_printer_bitmap.height() - 1 , i * PRINT_CELL_W + col) = PRINT_FG; - } - } - m_prt_graph_out->output(' '); - m_prt_graph_out->output(' '); - } - } - m_prt_graph_out->output('\n'); + print_line(); m_printer_line++; if (m_printer_line <= PRINT_CELL_H) { m_prt_timer->adjust(attotime::from_ticks(KDP_CLOCKS_PER_LINE , KDP_CLOCK)); @@ -709,54 +654,46 @@ } } -uint32_t hp9825_state::printer_out_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) -{ - s32 scroll = -s32((PRINT_WINDOWS - m_printer_window - 1) * PRINT_WIN_H); - copyscrollbitmap(bitmap , m_printer_bitmap , 0 , nullptr , 1 , &scroll , cliprect); - - return 0; -} - -TIMER_DEVICE_CALLBACK_MEMBER(hp9825_state::beep_timer) +TIMER_DEVICE_CALLBACK_MEMBER(hp98xx_state::beep_timer) { m_beeper->set_state(0); } -void hp9825_state::set_irq_slot(unsigned slot , int state) +void hp98xx_state::set_irq_slot(unsigned slot , int state) { int sc = m_slot_sc[ slot ]; assert(sc >= 0); m_io_sys->set_irq(uint8_t(sc) , state); } -void hp9825_state::set_sts_slot(unsigned slot , int state) +void hp98xx_state::set_sts_slot(unsigned slot , int state) { int sc = m_slot_sc[ slot ]; assert(sc >= 0); m_io_sys->set_sts(uint8_t(sc) , state); } -void hp9825_state::set_flg_slot(unsigned slot , int state) +void hp98xx_state::set_flg_slot(unsigned slot , int state) { int sc = m_slot_sc[ slot ]; assert(sc >= 0); m_io_sys->set_flg(uint8_t(sc) , state); } -void hp9825_state::set_dmar_slot(unsigned slot , int state) +void hp98xx_state::set_dmar_slot(unsigned slot , int state) { int sc = m_slot_sc[ slot ]; assert(sc >= 0); m_io_sys->set_dmar(uint8_t(sc) , state); } -void hp9825_state::hp9825_base(machine_config &config) +void hp98xx_state::hp98xx_base(machine_config &config) { HP_09825_67907(config , m_cpu , MAIN_CLOCK); // Just guessing... settings borrowed from hp9845 m_cpu->set_rw_cycles(6 , 6); m_cpu->set_relative_mode(false); - m_cpu->set_addrmap(AS_IO , &hp9825_state::cpu_io_map); + m_cpu->set_addrmap(AS_IO , &hp98xx_state::cpu_io_map); m_cpu->set_int_cb(m_io_sys , FUNC(hp98x5_io_sys_device::int_r)); m_cpu->pa_changed_cb().set(m_io_sys , FUNC(hp98x5_io_sys_device::pa_w)); @@ -770,10 +707,10 @@ m_io_sys->flg().set(m_cpu , FUNC(hp_09825_67907_cpu_device::flag_w)); m_io_sys->dmar().set(m_cpu , FUNC(hp_09825_67907_cpu_device::dmar_w)); - TIMER(config , m_cursor_timer , 0).configure_generic(FUNC(hp9825_state::cursor_blink)); + TIMER(config , m_cursor_timer , 0).configure_generic(FUNC(hp98xx_state::cursor_blink)); // Keyboard scan timer. A scan of the whole keyboard should take 2^14 KDP clocks. - TIMER(config , "kb_timer" , 0).configure_periodic(FUNC(hp9825_state::kb_scan), attotime::from_ticks(16384 , KDP_CLOCK)); + TIMER(config , "kb_timer" , 0).configure_periodic(FUNC(hp98xx_state::kb_scan), attotime::from_ticks(16384 , KDP_CLOCK)); // Tape drive HP9825_TAPE(config , m_tape , 0); @@ -784,19 +721,12 @@ m_tape->cart_in().set([this](int state) { if (started()) m_cassette = state; }); // Printer - BITBANGER(config , m_prt_alpha_out , 0); - BITBANGER(config , m_prt_graph_out , 0); - TIMER(config , m_prt_timer , 0).configure_generic(FUNC(hp9825_state::prt_timer)); - SCREEN(config , m_prt_out , SCREEN_TYPE_RASTER); - m_prt_out->set_screen_update(FUNC(hp9825_state::printer_out_update)); - m_prt_out->set_refresh_hz(60); - m_prt_out->set_size(PRINT_WIN_W, PRINT_WIN_H); - m_prt_out->set_visarea_full(); + TIMER(config , m_prt_timer , 0).configure_generic(FUNC(hp98xx_state::prt_timer)); // Beeper SPEAKER(config, "mono").front_center(); BEEP(config, m_beeper, BEEPER_FREQ).add_route(ALL_OUTPUTS, "mono", 1.00); - TIMER(config , m_beep_timer , 0).configure_generic(FUNC(hp9825_state::beep_timer)); + TIMER(config , m_beep_timer , 0).configure_generic(FUNC(hp98xx_state::beep_timer)); // I/O slots for (unsigned slot = 0; slot < 3; slot++) { @@ -818,7 +748,7 @@ #define IOP_MASK(x) BIT_MASK((x)) -static INPUT_PORTS_START(hp9825) +static INPUT_PORTS_START(hp98xx) // Keyboard is arranged in a 8 x 16 matrix. Of the 128 possible positions, 102 are used. // Keys are mapped on bit b of KEYn // where b = (row & 1) << 4 + column, n = row >> 1 @@ -965,9 +895,143 @@ PORT_BIT(IOP_MASK(31) , IP_ACTIVE_HIGH , IPT_UNUSED) // 7,15: N/U PORT_START("KEY_SHIFT") - PORT_BIT(IOP_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) PORT_CHANGED_MEMBER(DEVICE_SELF, hp9825_state, kb_changed, 0) // Left and right Shift - PORT_BIT(IOP_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("Shift lock") PORT_CHANGED_MEMBER(DEVICE_SELF, hp9825_state, kb_changed, 1) // Shift lock - PORT_BIT(IOP_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("Reset") PORT_CHANGED_MEMBER(DEVICE_SELF, hp9825_state, kb_changed, 2) // Reset + PORT_BIT(IOP_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) PORT_CHANGED_MEMBER(DEVICE_SELF, hp98xx_state, kb_changed, 0) // Left and right Shift + PORT_BIT(IOP_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("Shift lock") PORT_CHANGED_MEMBER(DEVICE_SELF, hp98xx_state, kb_changed, 1) // Shift lock + PORT_BIT(IOP_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("Reset") PORT_CHANGED_MEMBER(DEVICE_SELF, hp98xx_state, kb_changed, 2) // Reset +INPUT_PORTS_END + +// +--------------+ +// | hp9825_state | +// +--------------+ +class hp9825_state : public hp98xx_state +{ +public: + hp9825_state(const machine_config &mconfig, device_type type, const char *tag) + : hp98xx_state(mconfig, type, tag) + , m_scroll_key(*this , "KEY_SCROLL") + , m_prt_alpha_out(*this , "prt_alpha") + , m_prt_graph_out(*this , "prt_graph") + , m_prt_out(*this, "printer") + , m_printer_bitmap(PRINT_OUT_W , PRINT_OUT_H) + { + } + + DECLARE_INPUT_CHANGED_MEMBER(scroll_changed); + + uint32_t printer_out_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + +protected: + void hp9825_base(machine_config &config); + + virtual void machine_start() override; + + virtual void print_line() override; + +private: + required_ioport m_scroll_key; + required_device m_prt_alpha_out; + required_device m_prt_graph_out; + required_device m_prt_out; + + unsigned m_printer_window; // 0 is bottom window (the one closer to printhead) + bitmap_rgb32 m_printer_bitmap; +}; + +void hp9825_state::hp9825_base(machine_config &config) +{ + hp98xx_base(config); + + // Printer + BITBANGER(config , m_prt_alpha_out , 0); + BITBANGER(config , m_prt_graph_out , 0); + SCREEN(config , m_prt_out , SCREEN_TYPE_RASTER); + m_prt_out->set_screen_update(FUNC(hp9825_state::printer_out_update)); + m_prt_out->set_refresh_hz(60); + m_prt_out->set_size(PRINT_WIN_W, PRINT_WIN_H); + m_prt_out->set_visarea_full(); +} + +INPUT_CHANGED_MEMBER(hp9825_state::scroll_changed) +{ + LOG_DBG("scroll p=%d n=%d\n" , param , newval); + switch (param) { + case 0: + // Scroll up + if (newval && m_printer_window > 0) { + m_printer_window--; + } + break; + + case 1: + // Scroll down + if (newval && m_printer_window < (PRINT_WINDOWS - 1)) { + m_printer_window++; + } + break; + } +} + +void hp9825_state::machine_start() +{ + hp98xx_state::machine_start(); + + m_printer_bitmap.fill(PRINT_BG); + m_printer_window = 0; +} + +void hp9825_state::print_line() +{ + // Dump text line to alpha bitbanger at start of print + if (m_printer_line == 1) { + for (auto c : m_printer_mem) { + m_prt_alpha_out->output(c); + } + m_prt_alpha_out->output('\n'); + } + + // Shift printer bitmap one line up and clear bottom line + { + bitmap_rgb32 tmp{ m_printer_bitmap.width() , m_printer_bitmap.height() }; + s32 scroll = -1; + rectangle cliprect{ 0 , m_printer_bitmap.width() - 1 , 0 , m_printer_bitmap.height() - 2 }; + copyscrollbitmap(tmp , m_printer_bitmap , 0 , nullptr , 1 , &scroll , cliprect); + copybitmap(m_printer_bitmap , tmp , 0 , 0 , 0 , 0 , cliprect); + m_printer_bitmap.plot_box(0 , m_printer_bitmap.height() - 1 , m_printer_bitmap.width() , 1 , PRINT_BG); + } + + if ((m_printer_line > 0 && m_printer_line <= PRINT_EMPTY_TOP) || + (m_printer_line > (PRINT_EMPTY_TOP + PRINT_MATRIX_H) && m_printer_line <= PRINT_CELL_H)) { + // Empty lines + for (unsigned i = 0; i < PRINT_PIXELS_ROW; i++) { + m_prt_graph_out->output(' '); + } + } else { + for (unsigned i = 0; i < PRINT_COLUMNS; i++) { + for (unsigned col = 0; col < PRINT_MATRIX_W; col++) { + uint8_t pixels = chargen[ m_printer_mem[ i ] & 0x7f ][ col ]; + bool pixel = BIT(pixels , m_printer_line - PRINT_EMPTY_TOP - 1); + m_prt_graph_out->output(pixel ? '*' : ' '); + if (pixel) { + m_printer_bitmap.pix(m_printer_bitmap.height() - 1 , i * PRINT_CELL_W + col) = PRINT_FG; + } + } + m_prt_graph_out->output(' '); + m_prt_graph_out->output(' '); + } + } + m_prt_graph_out->output('\n'); +} + +uint32_t hp9825_state::printer_out_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + s32 scroll = -s32((PRINT_WINDOWS - m_printer_window - 1) * PRINT_WIN_H); + copyscrollbitmap(bitmap , m_printer_bitmap , 0 , nullptr , 1 , &scroll , cliprect); + + return 0; +} + +static INPUT_PORTS_START(hp9825) + PORT_INCLUDE(hp98xx) PORT_START("KEY_SCROLL") PORT_BIT(IOP_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("Scroll up") PORT_CHANGED_MEMBER(DEVICE_SELF, hp9825_state, scroll_changed, 0) @@ -975,6 +1039,62 @@ INPUT_PORTS_END // +---------------+ +// | hp9825a_state | +// +---------------+ +class hp9825a_state : public hp9825_state +{ +public: + hp9825a_state(const machine_config &mconfig, device_type type, const char *tag) + : hp9825_state(mconfig , type , tag) + , m_ram(*this, RAM_TAG) + { + } + + void hp9825a(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + required_device m_ram; + + void cpu_mem_map(address_map &map); +}; + +void hp9825a_state::hp9825a(machine_config &config) +{ + hp9825_base(config); + m_cpu->set_addrmap(AS_PROGRAM , &hp9825a_state::cpu_mem_map); + + RAM(config, m_ram); + + m_ram->set_default_size("8K").set_extra_options("16K,24K,32K"); + + SOFTWARE_LIST(config, "optrom_list").set_original("hp9825_rom").set_filter("A"); +} + +void hp9825a_state::machine_start() +{ + hp9825_state::machine_start(); + + offs_t ram_start = 0x8000U - m_ram->size() / 2; + + auto space = &m_cpu->space(AS_PROGRAM); + space->install_ram(ram_start, 0x7fff, m_ram->pointer()); + + for (auto& finder : m_rom_drawers) { + finder->set_rom_limit(ram_start); + finder->install_rw_handlers(space , nullptr); + } +} + +void hp9825a_state::cpu_mem_map(address_map &map) +{ + map.unmap_value_low(); + map(0x0000 , 0x2fff).rom(); +} + +// +---------------+ // | hp9825b_state | // +---------------+ class hp9825b_state : public hp9825_state @@ -988,7 +1108,7 @@ void hp9825b(machine_config &config); protected: - virtual void device_reset() override; + virtual void machine_start() override; private: void cpu_mem_map(address_map &map); @@ -1003,12 +1123,12 @@ finder->set_rom_limit(0x5000); } - SOFTWARE_LIST(config, "optrom_list").set_original("hp9825b_rom"); + SOFTWARE_LIST(config, "optrom_list").set_original("hp9825_rom").set_filter("B"); } -void hp9825b_state::device_reset() +void hp9825b_state::machine_start() { - hp9825_state::device_reset(); + hp9825_state::machine_start(); auto space = &m_cpu->space(AS_PROGRAM); @@ -1093,7 +1213,7 @@ finder->set_rom_limit(0x6000); } - SOFTWARE_LIST(config, "optrom_list").set_original("hp9825b_rom"); + SOFTWARE_LIST(config, "optrom_list").set_original("hp9825_rom").set_filter("T"); } void hp9825t_state::machine_start() @@ -1106,7 +1226,7 @@ void hp9825t_state::device_reset() { - hp9825_state::device_reset(); + hp98xx_state::device_reset(); for (auto& finder : m_rom_drawers) { finder->install_rw_handlers(m_rom_space , m_ram_space); @@ -1285,6 +1405,89 @@ } } +// +--------------+ +// | hp9831_state | +// +--------------+ +class hp9831_state : public hp98xx_state +{ +public: + hp9831_state(const machine_config &mconfig, device_type type, const char *tag) + : hp98xx_state(mconfig , type , tag) + , m_ram(*this, RAM_TAG) + { + } + + void hp9831(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + required_device m_ram; + + void cpu_mem_map(address_map &map); +}; + +void hp9831_state::hp9831(machine_config &config) +{ + hp98xx_base(config); + m_cpu->set_addrmap(AS_PROGRAM , &hp9831_state::cpu_mem_map); + + RAM(config, m_ram); + + m_ram->set_default_size("8K").set_extra_options("16K,24K,32K"); + + SOFTWARE_LIST(config, "optrom_list").set_original("hp9831_rom"); +} + +void hp9831_state::machine_start() +{ + hp98xx_state::machine_start(); + + offs_t ram_start = 0x8000U - m_ram->size() / 2; + + auto space = &m_cpu->space(AS_PROGRAM); + space->install_ram(ram_start, 0x7fff, m_ram->pointer()); + + for (auto& finder : m_rom_drawers) { + finder->set_rom_limit(ram_start); + finder->install_rw_handlers(space , nullptr); + } +} + +void hp9831_state::cpu_mem_map(address_map &map) +{ + map.unmap_value_low(); + map(0x0000 , 0x2fff).rom(); +} + +static INPUT_PORTS_START(hp9831) + PORT_INCLUDE(hp98xx) + + PORT_MODIFY("KEY0") + PORT_BIT(IOP_MASK(7) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME(u8"\u2191") // 0,7: ↑ + PORT_BIT(IOP_MASK(8) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("Line delete") // 0,8: Line delete + PORT_BIT(IOP_MASK(9) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("Line step") // 0,9: Line step + PORT_BIT(IOP_MASK(22) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_INSERT) PORT_NAME("Char insert") // 1,6: Char insert + PORT_BIT(IOP_MASK(24) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("Init") // 1,8: Init + PORT_BIT(IOP_MASK(27) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("Trace") // 1,11: Trace + PORT_BIT(IOP_MASK(30) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("Store") // 1,14: Store + + PORT_MODIFY("KEY1") + PORT_BIT(IOP_MASK(27) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') // 3,11: ; + PORT_BIT(IOP_MASK(31) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') // 3,15: / + + PORT_MODIFY("KEY3") + PORT_BIT(IOP_MASK(27) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('|') // 7,11: - + PORT_BIT(IOP_MASK(29) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("Result") // 7,13: Result + +INPUT_PORTS_END + +ROM_START(hp9825a) + ROM_REGION(0x6000 , "cpu" , ROMREGION_16BIT | ROMREGION_BE) + ROM_LOAD("9825asys.bin", 0x0000, 0x6000, CRC(bda0ddfa) SHA1(890993889adf0e48b6011fcc92603b89cf9af4a3)) +ROM_END + ROM_START(hp9825b) ROM_REGION(0xa000 , "cpu" , ROMREGION_16BIT | ROMREGION_BE) ROM_LOAD("sysrom1.bin" , 0x0000 , 0x2000 , CRC(fe429268) SHA1(f2fe7c5abca92bd13f81b4385fc4fce0cafb0da0)) @@ -1313,6 +1516,16 @@ ROM_LOAD("skoalrom.bin" , 0 , 0x1000 , CRC(5e8124d5) SHA1(dedf7f8a10c62b444f04213956083089e97bf219)) ROM_END +ROM_START(hp9831) + ROM_REGION(0x6000 , "cpu" , ROMREGION_16BIT | ROMREGION_BE) + ROM_LOAD("9831sys.bin", 0x0000, 0x6000, CRC(2f92e685) SHA1(413aa65677ab0d6b5979af6c9da12c1368abcc82)) +ROM_END + +} // anonymous namespace + + // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP(1976, hp9825a, 0, 0, hp9825a, hp9825, hp9825a_state,empty_init, "Hewlett-Packard", "HP 9825A", 0) COMP(1980, hp9825b, 0, 0, hp9825b, hp9825, hp9825b_state,empty_init, "Hewlett-Packard", "HP 9825B", 0) COMP(1980, hp9825t, 0, 0, hp9825t, hp9825, hp9825t_state,empty_init, "Hewlett-Packard", "HP 9825T", 0) +COMP(1977, hp9831, 0, 0, hp9831, hp9831, hp9831_state, empty_init, "Hewlett-Packard", "HP 9831A", 0) diff -Nru mame-0.250+dfsg.1/src/mame/hp/hp9825_optrom.cpp mame-0.251+dfsg.1/src/mame/hp/hp9825_optrom.cpp --- mame-0.250+dfsg.1/src/mame/hp/hp9825_optrom.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/hp/hp9825_optrom.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -24,7 +24,7 @@ const char *m_tag; }; -constexpr std::array region_tab = +constexpr std::array region_tab = {{ { 0x3000 , 0x400 , "rom3000" }, { 0x3400 , 0x400 , "rom3400" }, @@ -33,7 +33,8 @@ { 0x4000 , 0x400 , "rom4000" }, { 0x4400 , 0x800 , "rom4400" }, { 0x4c00 , 0x400 , "rom4c00" }, - { 0x5c00 ,0x2000 , "rom5c00" } + { 0x5c00 ,0x2000 , "rom5c00" }, + { 0x3000 ,0x1000 , "rom3000_3fff" } }}; // +--------------------+ @@ -70,6 +71,9 @@ uint8_t *ptr = get_software_region(reg.m_tag); if (ptr != nullptr) { LOG("%s loaded\n" , reg.m_tag); + if (reg.m_start >= m_rom_limit) { + throw emu_fatalerror(util::string_format("ROM @%04x is not compatible with current amount of RAM", reg.m_start)); + } if (reg.m_start == 0x5c00) { space_r->install_rom(0x3000 , 0x33ff , ptr); space_r->install_device(0x5c00 , 0x5fff , *m_bank , &address_map_bank_device::amap16); @@ -111,15 +115,9 @@ for (const struct optrom_region& reg : region_tab) { auto len = get_software_region_length(reg.m_tag) / 2; - if (len != 0) { - if (len != reg.m_size) { - LOG("Region %s: wrong size (%u should be %u)\n" , reg.m_tag , len , reg.m_size); - return image_init_result::FAIL; - } - if (reg.m_start >= m_rom_limit) { - LOG("Region %s beyond ROM limit (start=%04x , limit=%04x)\n" , reg.m_tag , reg.m_start , m_rom_limit); - return image_init_result::FAIL; - } + if (len != 0 && len != reg.m_size) { + LOG("Region %s: wrong size (%u should be %u)\n" , reg.m_tag , len , reg.m_size); + return image_init_result::FAIL; } } diff -Nru mame-0.250+dfsg.1/src/mame/ibm/rosetta.cpp mame-0.251+dfsg.1/src/mame/ibm/rosetta.cpp --- mame-0.250+dfsg.1/src/mame/ibm/rosetta.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/ibm/rosetta.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -5,7 +5,7 @@ * IBM Rosetta MMU. * * Sources: - * - http://bitsavers.org/pdf/ibm/pc/rt/75X0232_RT_PC_Technical_Reference_Volume_1_Jun87.pdf + * - IBM RT PC Hardware Technical Reference Volume I, 75X0232, March 1987 * * TODO: * - tighten error detection/reporting @@ -281,6 +281,15 @@ data = rca_r(offset - 0x1000U); return true; } + else + { + // invalid i/o address logic only applies to accesses within the mapped range + LOGMASKED(LOG_INVALID, "ior invalid address 0x%06x (%s)\n", address, machine().describe_context()); + m_control[MER] |= MER_O; + set_mear(address, MEMORY); + + return bool(m_control[TCR] & TCR_D); + } break; } } @@ -290,11 +299,8 @@ return true; } - LOGMASKED(LOG_INVALID, "ior invalid address 0x%06x (%s)\n", address, machine().describe_context()); - m_control[MER] |= MER_O; - set_mear(address, MEMORY); - - return bool(m_control[TCR] & TCR_D); + LOGMASKED(LOG_INVALID, "ior unknown address 0x%06x (%s)\n", address, machine().describe_context()); + return false; } bool rosetta_device::iow(u32 address, u32 data) @@ -334,6 +340,16 @@ rca_w(offset - 0x1000U, data); return true; } + else + { + // invalid i/o address logic only applies to accesses within the mapped range + LOGMASKED(LOG_INVALID, "iow invalid address 0x%06x data 0x%08x (%s)\n", address, data, machine().describe_context()); + m_control[MER] |= MER_O; + set_mear(address, MEMORY); + set_pchk(true); + + return true; + } break; } } @@ -343,11 +359,7 @@ return true; } - LOGMASKED(LOG_INVALID, "iow invalid address 0x%06x data 0x%08x (%s)\n", address, data, machine().describe_context()); - m_control[MER] |= MER_O; - set_mear(address, MEMORY); - set_pchk(true); - + LOGMASKED(LOG_INVALID, "iow unknown address 0x%06x data 0x%08x (%s)\n", address, data, machine().describe_context()); return true; } diff -Nru mame-0.250+dfsg.1/src/mame/jaleco/ginganin.cpp mame-0.251+dfsg.1/src/mame/jaleco/ginganin.cpp --- mame-0.250+dfsg.1/src/mame/jaleco/ginganin.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/jaleco/ginganin.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,9 +1,8 @@ // license:BSD-3-Clause // copyright-holders: Luca Elia - /*************************************************************************** - Ginga NinkyouDen + Ginga Ninkyouden (C) 1987 Jaleco driver by Luca Elia (l.elia@tin.it) @@ -103,8 +102,6 @@ void ginganin(machine_config &config); - void init_ginganin(); - protected: virtual void machine_start() override; virtual void machine_reset() override; @@ -116,9 +113,15 @@ required_shared_ptr m_spriteram; required_shared_ptr m_vregs; required_shared_ptr m_fgram; - required_region_ptr m_bgrom; + // devices + required_device m_maincpu; + required_device m_audiocpu; + required_device m_gfxdecode; + required_device m_palette; + required_device m_soundlatch; + // video-related tilemap_t *m_bg_tilemap = nullptr; tilemap_t *m_fg_tilemap = nullptr; @@ -126,17 +129,10 @@ u16 m_layers_ctrl = 0; u8 m_flipscreen = 0; #ifdef MAME_DEBUG - int m_posx = 0; - int m_posy = 0; + int m_posx = 0; + int m_posy = 0; #endif - // devices - required_device m_maincpu; - required_device m_audiocpu; - required_device m_gfxdecode; - required_device m_palette; - required_device m_soundlatch; - void fgram_w(offs_t offset, u16 data, u16 mem_mask = ~0); void txtram_w(offs_t offset, u16 data, u16 mem_mask = ~0); void vregs_w(offs_t offset, u16 data, u16 mem_mask = ~0); @@ -211,7 +207,6 @@ ***************************************************************************/ - // Background - Resides in ROM static constexpr u8 BG_GFX = 0; @@ -370,7 +365,6 @@ attr >> 12, flipx, flipy, x, y, 15); - } } @@ -387,7 +381,7 @@ if (machine().input().code_pressed(KEYCODE_Q)) { msk |= 0xfff1;} if (machine().input().code_pressed(KEYCODE_W)) { msk |= 0xfff2;} if (machine().input().code_pressed(KEYCODE_E)) { msk |= 0xfff4;} - if (machine().input().code_pressed(KEYCODE_A)) { msk |= 0xfff8;} + if (machine().input().code_pressed(KEYCODE_A)) { msk |= 0xfff8;} if (msk != 0) layers_ctrl1 &= msk; #define SETSCROLL \ @@ -397,12 +391,11 @@ m_fg_tilemap->set_scrolly(0, m_posy); \ popmessage("B>%04X:%04X F>%04X:%04X",m_posx%(BG_NX*16),m_posy%(BG_NY*16),m_posx%(FG_NX*16),m_posy%(FG_NY*16)); - if (machine().input().code_pressed(KEYCODE_L)) { m_posx +=8; SETSCROLL } - if (machine().input().code_pressed(KEYCODE_J)) { m_posx -=8; SETSCROLL } - if (machine().input().code_pressed(KEYCODE_K)) { m_posy +=8; SETSCROLL } - if (machine().input().code_pressed(KEYCODE_I)) { m_posy -=8; SETSCROLL } - if (machine().input().code_pressed(KEYCODE_H)) { m_posx = m_posy = 0; SETSCROLL } - + if (machine().input().code_pressed(KEYCODE_L)) { m_posx +=8; SETSCROLL } + if (machine().input().code_pressed(KEYCODE_J)) { m_posx -=8; SETSCROLL } + if (machine().input().code_pressed(KEYCODE_K)) { m_posy +=8; SETSCROLL } + if (machine().input().code_pressed(KEYCODE_I)) { m_posy -=8; SETSCROLL } + if (machine().input().code_pressed(KEYCODE_H)) { m_posx = m_posy = 0; SETSCROLL } } #endif @@ -545,20 +538,21 @@ void ginganin_state::ginganin(machine_config &config) { - static constexpr XTAL MAIN_CLOCK = XTAL(6'000'000); - static constexpr XTAL SOUND_CLOCK = XTAL(3'579'545); - // basic machine hardware - M68000(config, m_maincpu, MAIN_CLOCK); + M68000(config, m_maincpu, 6_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &ginganin_state::main_map); m_maincpu->set_vblank_int("screen", FUNC(ginganin_state::irq1_line_hold)); // ? (vectors 1-7 contain the same address) + static constexpr XTAL SOUND_CLOCK = 3.579545_MHz_XTAL; + MC6809(config, m_audiocpu, SOUND_CLOCK); // MBL68B09? m_audiocpu->set_addrmap(AS_PROGRAM, &ginganin_state::sound_map); - ptm6840_device &ptm(PTM6840(config, "6840ptm", SOUND_CLOCK / 2)); + ptm6840_device &ptm(PTM6840(config, "6840ptm", SOUND_CLOCK / 4)); ptm.set_external_clocks(0, 0, 0); - ptm.o1_callback().set_inputline(m_audiocpu, 0); + ptm.o1_callback().set_inputline(m_audiocpu, M6809_IRQ_LINE); + + GENERIC_LATCH_8(config, m_soundlatch); // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); @@ -574,11 +568,7 @@ // sound hardware SPEAKER(config, "mono").front_center(); - - GENERIC_LATCH_8(config, m_soundlatch); - YM2149(config, "psg", SOUND_CLOCK / 2).add_route(ALL_OUTPUTS, "mono", 0.10); - Y8950(config, "ymsnd", SOUND_CLOCK).add_route(ALL_OUTPUTS, "mono", 1.0); // The Y8950 is basically a YM3526 with ADPCM built in } @@ -659,19 +649,8 @@ ROM_LOAD( "gn_03.bin", 0x10000, 0x10000, CRC(f1ba222c) SHA1(780c0bd0045bac1e1bb3209576383db90504fbf3) ) ROM_END - -void ginganin_state::init_ginganin() -{ - // pending full removal of this patch ... - /* main CPU patches */ -// u16 *rom = (u16 *)memregion("maincpu")->base(); - /* avoid writes to ROM getting to the log */ -// rom[0x408 / 2] = 0x6000; -// rom[0x40a / 2] = 0x001c; -} - } // anonymous namespace -GAME( 1987, ginganin, 0, ginganin, ginganin, ginganin_state, init_ginganin, ROT0, "Jaleco", "Ginga NinkyouDen (set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ginganina, ginganin, ginganin, ginganin, ginganin_state, init_ginganin, ROT0, "Jaleco", "Ginga NinkyouDen (set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ginganin, 0, ginganin, ginganin, ginganin_state, empty_init, ROT0, "Jaleco", "Ginga Ninkyouden (set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ginganina, ginganin, ginganin, ginganin, ginganin_state, empty_init, ROT0, "Jaleco", "Ginga Ninkyouden (set 2)", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/jpm/jpmimpct.cpp mame-0.251+dfsg.1/src/mame/jpm/jpmimpct.cpp --- mame-0.250+dfsg.1/src/mame/jpm/jpmimpct.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/jpm/jpmimpct.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -248,6 +248,17 @@ { m_digits.resolve(); m_lamp_output.resolve(); + + save_item(NAME(m_optic_pattern)); + save_item(NAME(m_payen)); + save_item(NAME(m_hopinhibit)); + save_item(NAME(m_slidesout)); + save_item(NAME(m_hopper)); + save_item(NAME(m_motor)); + save_item(NAME(m_volume_latch)); + save_item(NAME(m_global_volume)); + save_item(NAME(m_coinstate)); + } void jpmimpct_state::machine_reset() diff -Nru mame-0.250+dfsg.1/src/mame/jpm/jpmimpct.h mame-0.251+dfsg.1/src/mame/jpm/jpmimpct.h --- mame-0.250+dfsg.1/src/mame/jpm/jpmimpct.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/jpm/jpmimpct.h 2022-12-29 14:20:09.000000000 +0000 @@ -154,14 +154,14 @@ void impact_non_video_map(address_map &map); uint8_t m_Lamps[256]{}; - int m_optic_pattern = 0; - int m_payen = 0; - int m_hopinhibit = 0; - int m_slidesout = 0; - int m_hopper[3]{}; - int m_motor[3]{}; - int m_volume_latch = 0; - int m_global_volume = 0; + uint8_t m_optic_pattern = 0; + bool m_payen = false; + uint8_t m_hopinhibit = 0; + uint8_t m_slidesout = 0; + uint8_t m_hopper[3]{}; + uint8_t m_motor[3]{}; + uint8_t m_volume_latch = 0; + uint8_t m_global_volume = 0; uint16_t m_coinstate = 0; required_device_array m_cointimer; diff -Nru mame-0.250+dfsg.1/src/mame/jpm/jpmsys5.cpp mame-0.251+dfsg.1/src/mame/jpm/jpmsys5.cpp --- mame-0.250+dfsg.1/src/mame/jpm/jpmsys5.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/jpm/jpmsys5.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -18,7 +18,7 @@ Known Issues: * Some features used by the AWP games such as reels are not emulated. * Timing for reels, and other opto devices is controlled by a generated clock - in a weird daisychain setup. + in a weird daisychain setup. We're using the later direct drive approach for now AWP game notes: The byte at 0x81 of the EVEN 68k rom appears to be some kind of @@ -245,31 +245,32 @@ { logerror("%s: reel_0123_w %04x %04x\n", machine().describe_context(), data, mem_mask); + // only writes 0/1/2/3 to each reel? if (data & 0xcccc) popmessage("reel_0123_w upper bits set", data & 0xcccc); if (m_reel[0]) { - m_reel[0]->update((data >> 0) & 0x03); + m_reel[0]->update(reel_interface_table[(data >> 0) & 0x03]); awp_draw_reel(machine(), "reel1", *m_reel[0]); } if (m_reel[1]) { - m_reel[1]->update((data >> 4) & 0x03); + m_reel[1]->update(reel_interface_table[(data >> 4) & 0x03]); awp_draw_reel(machine(), "reel2", *m_reel[1]); } if (m_reel[2]) { - m_reel[2]->update((data >> 8) & 0x03); + m_reel[2]->update(reel_interface_table[(data >> 8) & 0x03]); awp_draw_reel(machine(), "reel3", *m_reel[2]); } if (m_reel[3]) { - m_reel[3]->update((data >> 12) & 0x03); + m_reel[3]->update(reel_interface_table[(data >> 12) & 0x03]); awp_draw_reel(machine(), "reel4", *m_reel[3]); } } @@ -283,23 +284,23 @@ if (m_reel[4]) { - m_reel[4]->update((data >> 0) & 0x03); + m_reel[4]->update(reel_interface_table[(data >> 0) & 0x03]); awp_draw_reel(machine(), "reel5", *m_reel[4]); } if (m_reel[5]) { - m_reel[5]->update((data >> 4) & 0x03); + m_reel[5]->update(reel_interface_table[(data >> 4) & 0x03]); awp_draw_reel(machine(), "reel6", *m_reel[5]); } #if 0 if (m_reel[6]) { - m_reel[6]->update(data >> 8) & 0x03); + m_reel[6]->update(reel_interface_table[(data >> 8) & 0x03]); awp_draw_reel(machine(), "reel6", *m_reel[6]); } if (m_reel[7]) { - m_reel[7]->update((data >> 12) & 0x03); + m_reel[7]->update(reel_interface_table[(data >> 12) & 0x03]); awp_draw_reel(machine(), "reel7", *m_reel[7]); } #endif @@ -850,20 +851,17 @@ void jpmsys5_state::reels(machine_config &config) { - // probably incorrect reel types, but they do seem to only require 2 bits to write? - // forcing 200 steps keeps j5fair main reels aligned, so probably needs a type - // with the same write patterns as MPU3_48STEP_REEL, but with 200 steps defining? - REEL(config, m_reel[0], MPU3_48STEP_REEL, 1, 3, 0x00, 2, 200); + REEL(config, m_reel[0], SYS5_100STEP_REEL, 1, 3, 0x00, 2, 200); m_reel[0]->optic_handler().set(FUNC(jpmsys5_state::reel_optic_cb<0>)); - REEL(config, m_reel[1], MPU3_48STEP_REEL, 1, 3, 0x00, 2, 200); + REEL(config, m_reel[1], SYS5_100STEP_REEL, 1, 3, 0x00, 2, 200); m_reel[1]->optic_handler().set(FUNC(jpmsys5_state::reel_optic_cb<1>)); - REEL(config, m_reel[2], MPU3_48STEP_REEL, 1, 3, 0x00, 2, 200); + REEL(config, m_reel[2], SYS5_100STEP_REEL, 1, 3, 0x00, 2, 200); m_reel[2]->optic_handler().set(FUNC(jpmsys5_state::reel_optic_cb<2>)); - REEL(config, m_reel[3], MPU3_48STEP_REEL, 1, 3, 0x00, 2, 200); + REEL(config, m_reel[3], SYS5_100STEP_REEL, 1, 3, 0x00, 2, 200); m_reel[3]->optic_handler().set(FUNC(jpmsys5_state::reel_optic_cb<3>)); - REEL(config, m_reel[4], MPU3_48STEP_REEL, 1, 3, 0x00, 2, 200); + REEL(config, m_reel[4], SYS5_100STEP_REEL, 1, 3, 0x00, 2, 200); m_reel[4]->optic_handler().set(FUNC(jpmsys5_state::reel_optic_cb<4>)); - REEL(config, m_reel[5], MPU3_48STEP_REEL, 1, 3, 0x00, 2, 200); + REEL(config, m_reel[5], SYS5_100STEP_REEL, 1, 3, 0x00, 2, 200); m_reel[5]->optic_handler().set(FUNC(jpmsys5_state::reel_optic_cb<5>)); } @@ -953,7 +951,7 @@ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Back door") PORT_CODE(KEYCODE_R) PORT_TOGGLE PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Cash door") PORT_CODE(KEYCODE_T) PORT_TOGGLE PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Refill key") PORT_CODE(KEYCODE_Y) PORT_TOGGLE - PORT_DIPNAME( 0x08, 0x00, "Direct 0x08" ) // These are the % key, at least for popeye? + PORT_DIPNAME( 0x08, 0x00, "Direct 0x08" ) // These are the % key, at least for popeye? But there's a pin missing if so, usually these have 4 bits PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x10, "Direct 0x10" ) @@ -968,29 +966,73 @@ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_START("COINS") + PORT_BIT( 0x03, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_NAME("10p") PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_NAME("20p") PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_NAME("50p") PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_NAME("100p") - PORT_BIT( 0xc3, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN5 ) PORT_NAME("Token") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("STROBE0") - PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("00") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("01") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("02") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("03") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("04") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("05") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("06") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_NAME("07") PORT_START("STROBE1") - PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("08") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("09") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("10") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("11") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("12") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("13") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("14") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("15") PORT_START("STROBE2") - PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Exchange") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Collect") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Hold 3/Lo") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Hold 2/Hi") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Hold 1") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("Cancel") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("23") PORT_START("STROBE3") - PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("24") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("25") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("26") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("27") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("28") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("29") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("30") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("31") PORT_START("STROBE4") - PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("32") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("33") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("34") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("35") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("36") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("37") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("38") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("39") PORT_START("STROBE5") - PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("40") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("41") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("42") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("43") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("44") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("45") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("46") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("47") PORT_START("UNKNOWN_PORT") PORT_DIPNAME( 0x0001, 0x0000, "Unknown 0x0001" ) // if this and 0x0008 are on then j5popeye boots, what is it? something opto related? diff -Nru mame-0.250+dfsg.1/src/mame/jpm/jpmsys5.h mame-0.251+dfsg.1/src/mame/jpm/jpmsys5.h --- mame-0.250+dfsg.1/src/mame/jpm/jpmsys5.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/jpm/jpmsys5.h 2022-12-29 14:20:09.000000000 +0000 @@ -113,6 +113,8 @@ uint16_t unk_r(offs_t offset, uint16_t mem_mask = ~0); + static inline constexpr uint8_t reel_interface_table[4] = {0x0a, 0x09, 0x06, 0x05};//An interface maps the 2-bit values to meaningful Starpoint patterns (Proconn do this too, put in steppers?) + uint16_t reellamps_0123_r(offs_t offset, uint16_t mem_mask = ~0); void reellamps_0123_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); uint16_t reellamps_4567_r(offs_t offset, uint16_t mem_mask = ~0); diff -Nru mame-0.250+dfsg.1/src/mame/jpm/nl_jpmsru.cpp mame-0.251+dfsg.1/src/mame/jpm/nl_jpmsru.cpp --- mame-0.250+dfsg.1/src/mame/jpm/nl_jpmsru.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/jpm/nl_jpmsru.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:SomeRandomGuyIdk #include "netlist/devices/net_lib.h" diff -Nru mame-0.250+dfsg.1/src/mame/jpm/nl_jpmsru.h mame-0.251+dfsg.1/src/mame/jpm/nl_jpmsru.h --- mame-0.250+dfsg.1/src/mame/jpm/nl_jpmsru.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/jpm/nl_jpmsru.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:SomeRandomGuyIdk #ifndef MAME_AUDIO_NL_JPMSRU_H #define MAME_AUDIO_NL_JPMSRU_H diff -Nru mame-0.250+dfsg.1/src/mame/kiwako/mrjong.cpp mame-0.251+dfsg.1/src/mame/kiwako/mrjong.cpp --- mame-0.250+dfsg.1/src/mame/kiwako/mrjong.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/kiwako/mrjong.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -8,7 +8,7 @@ Crazy Blocks (c)1983 Kiwako/ECI - Driver by Takahiro Nogi (nogi@kt.rim.or.jp) 2000/03/20 - + Driver by Takahiro Nogi 2000/03/20 - Block Buster (c)1983 Kiwako/ECI @@ -206,7 +206,7 @@ int sy = m_videoram[offs + 0]; if (flip_screen()) { - sx = 208 - sx; + sx = 192 - sx; sy = 240 - sy; flipx = !flipx; flipy = !flipy; diff -Nru mame-0.250+dfsg.1/src/mame/konami/88games.cpp mame-0.251+dfsg.1/src/mame/konami/88games.cpp --- mame-0.250+dfsg.1/src/mame/konami/88games.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/88games.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -298,7 +298,7 @@ void _88games_state::_88games(machine_config &config) { /* basic machine hardware */ - KONAMI(config, m_maincpu, 3000000); /* ? */ + KONAMI(config, m_maincpu, 12000000); /* ? */ m_maincpu->set_addrmap(AS_PROGRAM, &_88games_state::main_map); m_maincpu->line().set(FUNC(_88games_state::banking_callback)); diff -Nru mame-0.250+dfsg.1/src/mame/konami/ajax.cpp mame-0.251+dfsg.1/src/mame/konami/ajax.cpp --- mame-0.250+dfsg.1/src/mame/konami/ajax.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/ajax.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -554,7 +554,7 @@ void ajax_state::ajax(machine_config &config) { // basic machine hardware - KONAMI(config, m_maincpu, XTAL(24'000'000) / 2 / 4); // 052001 12/4 MHz + KONAMI(config, m_maincpu, XTAL(24'000'000) / 2); // 052001 12/4 MHz m_maincpu->set_addrmap(AS_PROGRAM, &ajax_state::main_map); HD6309E(config, m_subcpu, 3000000); // ? diff -Nru mame-0.250+dfsg.1/src/mame/konami/aliens.cpp mame-0.251+dfsg.1/src/mame/konami/aliens.cpp --- mame-0.250+dfsg.1/src/mame/konami/aliens.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/aliens.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -17,7 +17,7 @@ #include "k052109.h" #include "konamipt.h" -#include "cpu/m6809/konami.h" // for the callback and the firq irq definition +#include "cpu/m6809/konami.h" #include "cpu/z80/z80.h" #include "machine/gen_latch.h" #include "machine/watchdog.h" @@ -296,7 +296,7 @@ void aliens_state::aliens(machine_config &config) { // basic machine hardware - KONAMI(config, m_maincpu, XTAL(24'000'000) / 2 / 4); // 052001 (verified on PCB) + KONAMI(config, m_maincpu, XTAL(24'000'000) / 2); // 052001 (verified on PCB) m_maincpu->set_addrmap(AS_PROGRAM, &aliens_state::main_map); m_maincpu->line().set_membank(m_rombank).mask(0x1f); diff -Nru mame-0.250+dfsg.1/src/mame/konami/asterix.cpp mame-0.251+dfsg.1/src/mame/konami/asterix.cpp --- mame-0.250+dfsg.1/src/mame/konami/asterix.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/asterix.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -59,7 +59,7 @@ void asterix_state::sound_arm_nmi_w(uint8_t data) { - // see notes in simpsons driver (though judging from disasm, it seems asterix does not rely on it) + // see notes in simpsons driver m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); m_nmi_blocked->adjust(m_audiocpu->cycles_to_attotime(4)); } diff -Nru mame-0.250+dfsg.1/src/mame/konami/blockhl.cpp mame-0.251+dfsg.1/src/mame/konami/blockhl.cpp --- mame-0.250+dfsg.1/src/mame/konami/blockhl.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/blockhl.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -282,7 +282,7 @@ void blockhl_state::blockhl(machine_config &config) { // basic machine hardware - KONAMI(config, m_maincpu, XTAL(24'000'000)/8); // Konami 052526 + KONAMI(config, m_maincpu, XTAL(24'000'000)/2); // Konami 052526 m_maincpu->set_addrmap(AS_PROGRAM, &blockhl_state::main_map); m_maincpu->line().set(FUNC(blockhl_state::banking_callback)); diff -Nru mame-0.250+dfsg.1/src/mame/konami/chqflag.cpp mame-0.251+dfsg.1/src/mame/konami/chqflag.cpp --- mame-0.250+dfsg.1/src/mame/konami/chqflag.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/chqflag.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -315,7 +315,7 @@ void chqflag_state::chqflag(machine_config &config) { /* basic machine hardware */ - KONAMI(config, m_maincpu, XTAL(24'000'000)/2/4); /* 052001 (verified on pcb) */ + KONAMI(config, m_maincpu, XTAL(24'000'000)/2); /* 052001 (verified on pcb) */ m_maincpu->set_addrmap(AS_PROGRAM, &chqflag_state::chqflag_map); Z80(config, m_audiocpu, XTAL(3'579'545)); /* verified on pcb */ diff -Nru mame-0.250+dfsg.1/src/mame/konami/cobra.cpp mame-0.251+dfsg.1/src/mame/konami/cobra.cpp --- mame-0.250+dfsg.1/src/mame/konami/cobra.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/cobra.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -315,18 +315,21 @@ #include "emu.h" + +#include "k001604.h" +#include "konppc_jvshost.h" +#include "windy2.h" + #include "bus/ata/ataintf.h" #include "bus/ata/idehd.h" #include "cpu/powerpc/ppc.h" #include "machine/lpci.h" -#include "machine/jvshost.h" -#include "machine/jvsdev.h" #include "machine/timekpr.h" -#include "k001604.h" +#include "sound/dmadac.h" +#include "sound/rf5c400.h" #include "video/poly.h" #include "video/rgbutil.h" -#include "sound/rf5c400.h" -#include "sound/dmadac.h" + #include "emupal.h" #include "screen.h" #include "speaker.h" @@ -337,7 +340,6 @@ #define S2MFIFO_VERBOSE 0 #define LOG_DEBUG_STATES 0 -#define LOG_JVS 0 #define LOG_GFX_RAM_WRITES 0 #define LOG_DRAW_COMMANDS 0 @@ -495,205 +497,6 @@ event_delegate m_event_callback; }; - -/* Cobra JVS Device class */ - -class cobra_jvs : public jvs_device -{ -public: - template - cobra_jvs(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&jvs_host_tag, bool enable) - : cobra_jvs(mconfig, tag, owner, clock) - { - host.set_tag(std::forward(jvs_host_tag)); - set_main_board(enable); - } - - cobra_jvs(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - //DECLARE_WRITE_LINE_MEMBER(coin_1_w); - //DECLARE_WRITE_LINE_MEMBER(coin_2_w); - void set_main_board(bool enable) { is_main_board = enable; } - void increase_coin_counter(uint8_t which); - -protected: - virtual bool switches(uint8_t *&buf, uint8_t count_players, uint8_t bytes_per_switch) override; - virtual bool coin_counters(uint8_t *&buf, uint8_t count) override; - virtual void function_list(uint8_t *&buf) override; - -private: - bool is_main_board; - int m_coin_counter[2]; - optional_ioport m_test_port; - optional_ioport_array<2> m_player_ports; -}; - -DEFINE_DEVICE_TYPE(COBRA_JVS, cobra_jvs, "cobra_jvs", "JVS (COBRA)") - -cobra_jvs::cobra_jvs(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : jvs_device(mconfig, COBRA_JVS, tag, owner, clock), - m_test_port(*this, ":TEST"), - m_player_ports(*this, {":P1", ":P2"}) -{ - m_coin_counter[0] = 0; - m_coin_counter[1] = 0; -} - -#if 0 -WRITE_LINE_MEMBER(cobra_jvs::coin_1_w) -{ - if(state) - m_coin_counter[0]++; -} - -WRITE_LINE_MEMBER(cobra_jvs::coin_2_w) -{ - if(state) - m_coin_counter[1]++; -} -#endif - -void cobra_jvs::increase_coin_counter(uint8_t which) -{ - m_coin_counter[which]++; -} - -// TODO: this certainly isn't correct, all three JVS points to the same capabilities! -void cobra_jvs::function_list(uint8_t *&buf) -{ - if(this->is_main_board == false) - return; - - // SW input - 2 players, 13 bits - *buf++ = 0x01; - *buf++ = 2; - *buf++ = 13; - *buf++ = 0; - - // Coin input - 2 slots - *buf++ = 0x02; - *buf++ = 2; - *buf++ = 0; - *buf++ = 0; - - // Analog input - 8 channels - *buf++ = 0x03; - *buf++ = 8; - *buf++ = 16; - *buf++ = 0; - - // Driver out - 6 channels - *buf++ = 0x12; - *buf++ = 6; - *buf++ = 0; - *buf++ = 0; -} - -bool cobra_jvs::switches(uint8_t *&buf, uint8_t count_players, uint8_t bytes_per_switch) -{ -#if LOG_JVS - printf("jvs switch read: num players %d, bytes %d\n", count_players, bytes_per_switch); -#endif - - if(this->is_main_board == false) - return false; - - if (count_players > 2 || bytes_per_switch > 2) - return false; - - *buf++ = m_test_port.read_safe(0); - - for (int i=0; i < count_players; i++) - { - uint32_t pval = m_player_ports[i].read_safe(0); - for (int j=0; j < bytes_per_switch; j++) - { - *buf++ = (uint8_t)(pval >> ((1-j) * 8)); - } - } - return true; -} - -bool cobra_jvs::coin_counters(uint8_t *&buf, uint8_t count) -{ -#if LOG_JVS - printf("jvs coin counter read: count %d\n", count); -#endif - - if(this->is_main_board == false) - return false; - - //printf("recv %04x\n",m_coin_counter[0]); - - if (count > 2) - return false; - - *buf++ = m_coin_counter[0] >> 8; *buf++ = m_coin_counter[0]; - - if(count > 1) - { - *buf++ = m_coin_counter[1] >> 8; *buf++ = m_coin_counter[1]; - } - - return true; -} - - -class cobra_jvs_host : public jvs_host -{ -public: - cobra_jvs_host(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - void write(uint8_t, const uint8_t *&rec_data, uint32_t &rec_size); - -private: - uint8_t m_send[512]; - int m_send_ptr; -}; - -DEFINE_DEVICE_TYPE(COBRA_JVS_HOST, cobra_jvs_host, "cobra_jvs_host", "JVS-HOST (COBRA)") - -cobra_jvs_host::cobra_jvs_host(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : jvs_host(mconfig, COBRA_JVS_HOST, tag, owner, clock) -{ - m_send_ptr = 0; -} - -void cobra_jvs_host::write(uint8_t data, const uint8_t *&rec_data, uint32_t &rec_size) -{ - m_send[m_send_ptr++] = data; - push(data); - - if (m_send[0] == 0xe0) - { - if (m_send_ptr > 2) - { - uint8_t length = m_send[2]; - if (length == 0xff) - length = 4; - else - length = length + 3; - - if (m_send_ptr >= length) - { - commit_encoded(); - - get_encoded_reply(rec_data, rec_size); - - m_send_ptr = 0; - return; - } - } - } - else - { - m_send_ptr = 0; - } - - rec_data = nullptr; - rec_size = 0; -} - - /* Cobra driver class */ class cobra_state : public driver_device @@ -706,14 +509,11 @@ m_gfxcpu(*this, "gfxcpu"), m_gfx_pagetable(*this, "pagetable"), m_k001604(*this, "k001604"), - m_jvs1(*this, "cobra_jvs1"), - m_jvs2(*this, "cobra_jvs2"), - m_jvs3(*this, "cobra_jvs3"), m_ata(*this, "ata"), m_screen(*this, "screen"), m_palette(*this, "palette"), m_legacy_pci(*this, "pcibus"), - m_jvs_host(*this, "cobra_jvs_host"), + m_jvs_host(*this, "jvs_host"), m_dmadac(*this, "dac%u", 1U), m_generic_paletteram_32(*this, "paletteram"), m_main_ram(*this, "main_ram"), @@ -728,14 +528,11 @@ required_device m_gfxcpu; required_shared_ptr m_gfx_pagetable; required_device m_k001604; - required_device m_jvs1; - required_device m_jvs2; - required_device m_jvs3; required_device m_ata; required_device m_screen; required_device m_palette; required_device m_legacy_pci; - required_device m_jvs_host; + required_device m_jvs_host; required_device_array m_dmadac; required_shared_ptr m_generic_paletteram_32; required_shared_ptr m_main_ram; @@ -751,7 +548,7 @@ uint32_t sub_comram_r(offs_t offset); void sub_comram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); - uint32_t sub_unk7e_r(); + uint8_t sub_unk7e_r(offs_t offset); void sub_debug_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); uint32_t sub_unk1_r(offs_t offset, uint32_t mem_mask = ~0); void sub_unk1_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); @@ -842,7 +639,6 @@ void init_racjamdx(); void init_bujutsu(); void init_cobra(); - DECLARE_INPUT_CHANGED_MEMBER(coin_inserted); virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; @@ -851,6 +647,7 @@ void cobra_video_exit(); int decode_debug_state_value(int v); void cobra(machine_config &config); + void bujutsu(machine_config &config); void cobra_gfx_map(address_map &map); void cobra_main_map(address_map &map); void cobra_sub_map(address_map &map); @@ -1465,11 +1262,12 @@ // // 7 6 5 4 3 2 1 0 //---------------- + // x Unknown, must be 0 for coins to be updated // x S2M FIFO interrupt active // x Graphics board/FIFO busy flag // x M2S FIFO interrupt active - int value = 0x01; + int value = 0; value |= (m_main_int_active & MAIN_INT_S2M) ? 0x00 : 0x02; value |= (m_main_int_active & MAIN_INT_M2S) ? 0x00 : 0x08; @@ -1848,9 +1646,16 @@ } } -uint32_t cobra_state::sub_unk7e_r() +uint8_t cobra_state::sub_unk7e_r(offs_t offset) { - return 0xffffffff; + uint8_t r = 0; + + if (offset == 3) + { + r |= !m_jvs_host->sense(); + } + + return ~r; } void cobra_state::sub_debug_w(offs_t offset, uint32_t data, uint32_t mem_mask) @@ -1969,31 +1774,9 @@ void cobra_state::sub_jvs_w(uint8_t data) { -#if LOG_JVS - printf("sub_jvs_w: %02X\n", data); -#endif - - const uint8_t *rec_data; - uint32_t rec_size; - - m_jvs_host->write(data, rec_data, rec_size); - - if (rec_size > 0) - { -#if LOG_JVS - printf("jvs reply "); - for (int i=0; i < rec_size; i++) - { - printf("%02X ", rec_data[i]); - } - printf("\n"); -#endif - - for (int i=0; i < rec_size; i++) - { - m_subcpu->ppc4xx_spu_receive_byte(rec_data[i]); - } - } + bool accepted = m_jvs_host->write(data); + if (accepted) + m_jvs_host->read(); } void cobra_state::cobra_sub_map(address_map &map) @@ -3113,68 +2896,7 @@ /*****************************************************************************/ - -INPUT_CHANGED_MEMBER(cobra_state::coin_inserted) -{ - if(newval) - { - uint8_t coin_chute = (uint8_t)param & 1; - m_jvs1->increase_coin_counter(coin_chute); - m_jvs2->increase_coin_counter(coin_chute); - m_jvs3->increase_coin_counter(coin_chute); - } -} - INPUT_PORTS_START( cobra ) - PORT_START("TEST") - PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_HIGH) /* Test Button */ - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P1") - PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 ) - PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_SERVICE1 ) - PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Punch") - PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 Kick") - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Guard") - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START2 ) - PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_SERVICE2 ) - PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Punch") - PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 Kick") - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Guard") - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("COINS") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_COIN1) PORT_CHANGED_MEMBER(DEVICE_SELF, cobra_state,coin_inserted, 0)//PORT_WRITE_LINE_DEVICE_MEMBER("cobra_jvs1", cobra_jvs, coin_1_w) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_COIN2) PORT_CHANGED_MEMBER(DEVICE_SELF, cobra_state,coin_inserted, 1) //PORT_WRITE_LINE_DEVICE_MEMBER("cobra_jvs1", cobra_jvs, coin_2_w) INPUT_PORTS_END WRITE_LINE_MEMBER(cobra_state::ide_interrupt) @@ -3240,6 +2962,7 @@ m_maincpu->set_vblank_int("screen", FUNC(cobra_state::cobra_vblank)); PPC403GA(config, m_subcpu, 32000000); /* 403GA, 33? MHz */ + m_subcpu->set_serial_clock(XTAL(7'372'800)); // set serial clock to 7.3728MHz to allow for JVS comm at 115200 baud m_subcpu->set_addrmap(AS_PROGRAM, &cobra_state::cobra_sub_map); PPC604(config, m_gfxcpu, 100000000); /* 604, 100? MHz */ @@ -3280,10 +3003,14 @@ K001604(config, m_k001604, 0); // on the LAN board in Racing Jam DX m_k001604->set_palette(m_palette); - COBRA_JVS_HOST(config, m_jvs_host, 4000000); - COBRA_JVS(config, m_jvs1, 0, m_jvs_host, true); - COBRA_JVS(config, m_jvs2, 0, m_jvs_host, true); - COBRA_JVS(config, m_jvs3, 0, m_jvs_host, true); + KONPPC_JVS_HOST(config, m_jvs_host, 4000000); + m_jvs_host->output_callback().set([this](uint8_t c) { m_subcpu->ppc4xx_spu_receive_byte(c); }); +} + +void cobra_state::bujutsu(machine_config &config) +{ + cobra(config); + KONAMI_WINDY2_JVS_IO_2L12B_PANEL(config, "windy2_jvsio", 0, m_jvs_host); } void cobra_state::rf5c400_map(address_map& map) @@ -3557,5 +3284,5 @@ /*************************************************************************/ -GAME( 1997, bujutsu, 0, cobra, cobra, cobra_state, init_bujutsu, ROT0, "Konami", "Fighting Wu-Shu 2nd! (ver JAA)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_TIMING ) -GAME( 1997, racjamdx, 0, cobra, cobra, cobra_state, init_racjamdx, ROT0, "Konami", "Racing Jam DX", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_TIMING | MACHINE_NODEVICE_LAN ) +GAME( 1997, bujutsu, 0, bujutsu, cobra, cobra_state, init_bujutsu, ROT0, "Konami", "Fighting Wu-Shu 2nd! (ver JAA)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_TIMING ) +GAME( 1997, racjamdx, 0, cobra, cobra, cobra_state, init_racjamdx, ROT0, "Konami", "Racing Jam DX", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_TIMING | MACHINE_NODEVICE_LAN ) diff -Nru mame-0.250+dfsg.1/src/mame/konami/combatsc.h mame-0.251+dfsg.1/src/mame/konami/combatsc.h --- mame-0.250+dfsg.1/src/mame/konami/combatsc.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/combatsc.h 2022-12-29 14:20:09.000000000 +0000 @@ -151,7 +151,7 @@ memory_share_creator m_io_ram; memory_view m_bank_io_view; - uint8_t m_bank_select; // 0x00..0x1f + uint8_t m_bank_select = 0; // 0x00..0x1f void priority_w(uint8_t data); void io_w(offs_t offset, uint8_t data); diff -Nru mame-0.250+dfsg.1/src/mame/konami/combatsc_v.cpp mame-0.251+dfsg.1/src/mame/konami/combatsc_v.cpp --- mame-0.250+dfsg.1/src/mame/konami/combatsc_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/combatsc_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -491,7 +491,7 @@ finish = source; source += 0x400; limit = (0x3400 - limit) / 8; - if (limit >= 0) + if (limit >= 0 && limit <= 0x80) finish = source - limit * 8; source -= 8; diff -Nru mame-0.250+dfsg.1/src/mame/konami/crimfght.cpp mame-0.251+dfsg.1/src/mame/konami/crimfght.cpp --- mame-0.250+dfsg.1/src/mame/konami/crimfght.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/crimfght.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -158,8 +158,9 @@ PORT_DIPSETTING( 0x90, DEF_STR( 1C_7C )) PORT_DIPSETTING( 0x00, DEF_STR( Unused )) + // defaults confirmed from World manual PORT_START("DSW2") - PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2") + PORT_DIPNAME( 0x03, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2") PORT_DIPSETTING( 0x03, "1" ) PORT_DIPSETTING( 0x02, "2" ) PORT_DIPSETTING( 0x01, "3" ) @@ -302,7 +303,7 @@ void crimfght_state::crimfght(machine_config &config) { /* basic machine hardware */ - KONAMI(config, m_maincpu, XTAL(24'000'000)/8); /* 052001 (verified on pcb) */ + KONAMI(config, m_maincpu, XTAL(24'000'000)/2); /* 052001 (verified on pcb) */ m_maincpu->set_addrmap(AS_PROGRAM, &crimfght_state::crimfght_map); m_maincpu->line().set(FUNC(crimfght_state::banking_callback)); diff -Nru mame-0.250+dfsg.1/src/mame/konami/crimfght.h mame-0.251+dfsg.1/src/mame/konami/crimfght.h --- mame-0.250+dfsg.1/src/mame/konami/crimfght.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/crimfght.h 2022-12-29 14:20:09.000000000 +0000 @@ -10,7 +10,7 @@ #pragma once -#include "cpu/m6809/konami.h" /* for the callback and the firq irq definition */ +#include "cpu/m6809/konami.h" #include "machine/bankdev.h" #include "machine/gen_latch.h" #include "sound/k007232.h" diff -Nru mame-0.250+dfsg.1/src/mame/konami/hcastle.cpp mame-0.251+dfsg.1/src/mame/konami/hcastle.cpp --- mame-0.250+dfsg.1/src/mame/konami/hcastle.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/hcastle.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -448,7 +448,7 @@ void hcastle_state::hcastle(machine_config &config) { // basic machine hardware - KONAMI(config, m_maincpu, 3000000); // Derived from 24 MHz clock + KONAMI(config, m_maincpu, 12000000); // Derived from 24 MHz clock m_maincpu->set_addrmap(AS_PROGRAM, &hcastle_state::main_map); m_maincpu->set_vblank_int("screen", FUNC(hcastle_state::irq0_line_hold)); diff -Nru mame-0.250+dfsg.1/src/mame/konami/hornet.cpp mame-0.251+dfsg.1/src/mame/konami/hornet.cpp --- mame-0.250+dfsg.1/src/mame/konami/hornet.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/hornet.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -353,6 +353,7 @@ #include "k037122.h" #include "konami_gn676_lan.h" #include "konppc.h" +#include "konppc_jvshost.h" #include "windy2.h" #include "cpu/m68000/m68000.h" @@ -361,8 +362,6 @@ #include "machine/adc1213x.h" #include "machine/ds2401.h" #include "machine/eepromser.h" -#include "machine/jvsdev.h" -#include "machine/jvshost.h" #include "machine/k033906.h" #include "machine/timekpr.h" #include "machine/watchdog.h" @@ -377,65 +376,6 @@ #include "layout/generic.h" - -DECLARE_DEVICE_TYPE(HORNET_JVS_HOST, hornet_jvs_host) - -class hornet_jvs_host : public jvs_host -{ -public: - // construction/destruction - hornet_jvs_host(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - void read(); - void write(uint8_t *data, int length); - - DECLARE_READ_LINE_MEMBER( sense ); - - auto output_callback() { return output_cb.bind(); } - -protected: - virtual void device_start() override; - -private: - devcb_write8 output_cb; -}; - -DEFINE_DEVICE_TYPE(HORNET_JVS_HOST, hornet_jvs_host, "hornet_jvs_host", "JVS Host (Hornet)") - -hornet_jvs_host::hornet_jvs_host(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : jvs_host(mconfig, HORNET_JVS_HOST, tag, owner, clock), - output_cb(*this) -{ -} - -void hornet_jvs_host::device_start() -{ - jvs_host::device_start(); - output_cb.resolve_safe(); -} - -READ_LINE_MEMBER( hornet_jvs_host::sense ) -{ - return !get_address_set_line(); -} - -void hornet_jvs_host::read() -{ - const uint8_t *data; - uint32_t length; - - get_encoded_reply(data, length); - - for (int i = 0; i < length; i++) - output_cb(data[i]); -} - -void hornet_jvs_host::write(uint8_t *data, int length) -{ - for (int i = 0; i < length; i++) - push(data[i]); - commit_raw(); -} - namespace { class hornet_state : public driver_device @@ -452,6 +392,7 @@ m_dsp(*this, {"dsp", "dsp2"}), // TODO: hardcoded tags in machine/konpc.cpp m_k037122(*this, "k037122_%u", 0U), m_adc12138(*this, "adc12138"), + m_adc12138_sscope(*this, "adc12138_sscope"), m_konppc(*this, "konppc"), m_lan_eeprom(*this, "lan_eeprom"), m_x76f041(*this, "security_eeprom"), @@ -465,9 +406,10 @@ m_comm_bank(*this, "comm_bank"), m_lan_ds2401(*this, "lan_serial_id"), m_watchdog(*this, "watchdog"), - m_hornet_jvs_host(*this, "hornet_jvs_host"), + m_jvs_host(*this, "jvs_host"), m_cg_view(*this, "cg_view"), - m_k033906(*this, "k033906_%u", 1U) + m_k033906(*this, "k033906_%u", 1U), + m_gn676_lan(*this, "gn676_lan") { } void hornet(machine_config &config); @@ -492,7 +434,6 @@ private: // TODO: Needs verification on real hardware static const int m_sound_timer_usec = 2800; - static constexpr int JVS_BUFFER_SIZE = 1024; required_shared_ptr m_workram; optional_shared_ptr_array m_sharc_dataram; @@ -503,6 +444,7 @@ optional_device_array m_dsp; optional_device_array m_k037122; required_device m_adc12138; + optional_device m_adc12138_sscope; required_device m_konppc; optional_device m_lan_eeprom; optional_device m_x76f041; @@ -510,24 +452,24 @@ required_ioport_array<3> m_in; required_ioport m_dsw; optional_ioport m_eepromout; - optional_ioport_array<3> m_analog; + optional_ioport_array<4> m_analog; output_finder<2> m_pcb_digit; optional_region_ptr m_comm_board_rom; optional_memory_bank m_comm_bank; optional_device m_lan_ds2401; required_device m_watchdog; - required_device m_hornet_jvs_host; + required_device m_jvs_host; memory_view m_cg_view; optional_device_array m_k033906; + optional_device m_gn676_lan; emu_timer *m_sound_irq_timer; - std::unique_ptr m_jvs_sdata; - uint32_t m_jvs_sdata_ptr; - bool m_jvs_is_escape_byte; uint16_t m_gn680_latch; uint16_t m_gn680_ret0; uint16_t m_gn680_ret1; + uint16_t m_gn680_check; + uint16_t m_gn680_reg0e; bool m_sndres; @@ -536,8 +478,8 @@ void comm1_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); void comm_rombank_w(uint32_t data); uint32_t comm0_unk_r(offs_t offset, uint32_t mem_mask = ~0); - uint32_t gun_r(); - void gun_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); + uint16_t gun_r(offs_t offset); + void gun_w(offs_t offset, uint16_t data); void gn680_sysctrl(uint16_t data); uint16_t gn680_latch_r(); void gn680_latch_w(offs_t offset, uint16_t data); @@ -585,6 +527,11 @@ break; case 1: // I/O port 1 r = m_in[1]->read(); + if (m_adc12138_sscope) + { + r &= ~7; + r |= m_adc12138_sscope->do_r() | (m_adc12138_sscope->eoc_r() << 2); + } break; case 2: // I/O port 2 r = m_in[2]->read(); @@ -601,7 +548,7 @@ 0x01 = ADDO (ADC DO) */ r = 0x70; - r |= m_hornet_jvs_host->sense() << 7; + r |= m_jvs_host->sense() << 7; if (m_x76f041) r |= m_x76f041->read_sda() << 3; r |= m_adc12138->do_r() | (m_adc12138->eoc_r() << 2); @@ -628,6 +575,14 @@ case 2: // Parallel data register osd_printf_debug("Parallel data = %02X\n", data); + + if (m_adc12138_sscope) + { + m_adc12138_sscope->cs_w(BIT(data, 4)); + m_adc12138_sscope->conv_w(BIT(data, 3)); + m_adc12138_sscope->di_w(BIT(data, 5)); + m_adc12138_sscope->sclk_w(BIT(data, 7)); + } break; case 3: // System Register 0 @@ -662,6 +617,11 @@ 0x02 = ADDI (ADC DI) 0x01 = ADDSCLK (ADC SCLK) */ + + // Set FPGA into a state to accept new firmware + if (m_gn676_lan) + m_gn676_lan->reset_fpga_state(BIT(data, 6)); + if (m_x76f041) { // HACK: Figure out a way a better way to differentiate between what device it wants to talk to here. @@ -719,14 +679,21 @@ case 7: // CG Control Register /* - 0x80 = EXRES1 - 0x40 = EXRES0 + 0x80 = EXRES1? + 0x40 = EXRES0? 0x20 = EXID1 0x10 = EXID0 + 0x0C = 0x00 = 24kHz, 0x04 = 31kHz, 0x0c = 15kHz 0x01 = EXRGB */ - if (data & 0x80) - m_maincpu->set_input_line(INPUT_LINE_IRQ1, CLEAR_LINE); + + // TODO: The IRQ1 clear line is causing Silent Scope's screen to not update + // at the correct rate. Bits 6 and 7 always seem to be set even if an IRQ + // hasn't been called so they don't appear to be responsible for clearing IRQs, + // and ends up clearing IRQs out of turn. + // The IRQ0 clear bit is also questionable but games run too fast and crash without it. + // if (data & 0x80) + // m_maincpu->set_input_line(INPUT_LINE_IRQ1, CLEAR_LINE); if (data & 0x40) m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); @@ -771,18 +738,74 @@ } -uint32_t hornet_state::gun_r() +uint16_t hornet_state::gun_r(offs_t offset) { - return m_gn680_ret0<<16 | m_gn680_ret1; + uint16_t r = 0; + + // TODO: Replace this with proper emulation of a CCD camera + // so the GN680's program can handle inputs normally. + // TODO: Check if this works when skip post is disabled (currently causes game to boot loop) + if (m_gn680_reg0e == 0 && (offset == 0 || offset == 1)) + { + // All values are offset so that the range in-game is + // +/- 280 on the X and +/- 220 on the Y axis. + + // Parts of Player 2's Y axis value is included with every read, + // so it doesn't have its own index for reading. + int16_t p2y = (int16_t)m_analog[3].read_safe(0) - 220; + + r = m_gn680_check; + + switch (m_gn680_latch & 3) + { + case 1: + r |= ((int16_t)m_analog[0].read_safe(0) - 281) & 0x7ff; + r |= (p2y & 0x700) << 4; + break; + case 2: + r |= ((int16_t)m_analog[1].read_safe(0) - 220) & 0x7ff; + r |= (p2y & 0xf0) << 7; + break; + case 3: + r |= ((int16_t)m_analog[2].read_safe(0) - 280) & 0x7ff; + r |= (p2y & 0x0f) << 11; + break; + } + + switch (offset) + { + case 0: + r = (r >> 8) & 0xff; + break; + case 1: + r &= 0xff; + m_gn680_check ^= 0x8000; // Must be in sync with the game every read or the update will be rejected + break; + } + } + else + { + if (offset == 0) + r = m_gn680_ret0; + else if (offset == 1) + r = m_gn680_ret1; + } + + return r; } -void hornet_state::gun_w(offs_t offset, uint32_t data, uint32_t mem_mask) +void hornet_state::gun_w(offs_t offset, uint16_t data) { - if (mem_mask == 0xffff0000) + if (offset == 0) { - m_gn680_latch = data>>16; + m_gn680_latch = data; m_gn680->set_input_line(M68K_IRQ_6, HOLD_LINE); } + else if (offset == 0x0e/2) + { + // Always set to 0 when reading the gun inputs + m_gn680_reg0e = data; + } } /******************************************************************/ @@ -839,8 +862,8 @@ { hornet_map(map); - map(0x7d040000, 0x7d04ffff).rw("gn676_lan", FUNC(konami_gn676_lan_device::lanc1_r), FUNC(konami_gn676_lan_device::lanc1_w)); - map(0x7d050000, 0x7d05ffff).rw("gn676_lan", FUNC(konami_gn676_lan_device::lanc2_r), FUNC(konami_gn676_lan_device::lanc2_w)); + map(0x7d040000, 0x7d04ffff).rw(m_gn676_lan, FUNC(konami_gn676_lan_device::lanc1_r), FUNC(konami_gn676_lan_device::lanc1_w)); + map(0x7d050000, 0x7d05ffff).rw(m_gn676_lan, FUNC(konami_gn676_lan_device::lanc2_r), FUNC(konami_gn676_lan_device::lanc2_w)); } void hornet_state::terabrst_map(address_map &map) @@ -1037,33 +1060,13 @@ PORT_DIPSETTING( 0x00, "15KHz" ) INPUT_PORTS_END -static INPUT_PORTS_START(nbapbp) //Need to add inputs for player 3 and 4. +static INPUT_PORTS_START(nbapbp) PORT_INCLUDE(gradius4) PORT_MODIFY("DSW") PORT_DIPNAME(0x02, 0x02, "Cabinet Type") PORT_DIPLOCATION("SW:7") PORT_DIPSETTING(0x02, "2 Player") PORT_DIPSETTING(0x00, "4 Player") - -/* PORT_START("IN3") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START3 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(3) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) - - PORT_START("IN4") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(4) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) */ INPUT_PORTS_END static INPUT_PORTS_START(terabrst) @@ -1078,6 +1081,24 @@ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2) PORT_NAME("P2 Trigger") PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(2) PORT_NAME("P2 Bomb") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(2) PORT_NAME("P2 Temp Cursor Speedup") + + PORT_MODIFY("DSW") + PORT_DIPNAME( 0x40, 0x40, "Disable Machine Init" ) PORT_DIPLOCATION("SW:2") // Default DIPSW2 to OFF + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + // Ranges picked to allow the cursor to go just off screen because the acceptable range is too wide + PORT_START("ANALOG1") // P1 Gun X + PORT_BIT( 0x7ff, 280, IPT_LIGHTGUN_X ) PORT_MINMAX(0, 560) PORT_SENSITIVITY(35) PORT_KEYDELTA(1) PORT_PLAYER(1) + + PORT_START("ANALOG2") // P1 Gun Y + PORT_BIT( 0x7ff, 220, IPT_LIGHTGUN_Y ) PORT_MINMAX(0, 440) PORT_SENSITIVITY(35) PORT_KEYDELTA(1) PORT_PLAYER(1) + + PORT_START("ANALOG3") // P2 Gun X + PORT_BIT( 0x7ff, 280, IPT_LIGHTGUN_X ) PORT_MINMAX(0, 560) PORT_SENSITIVITY(35) PORT_KEYDELTA(1) PORT_PLAYER(2) + + PORT_START("ANALOG4") // P2 Gun Y + PORT_BIT( 0x7ff, 220, IPT_LIGHTGUN_Y ) PORT_MINMAX(0, 440) PORT_SENSITIVITY(35) PORT_KEYDELTA(1) PORT_PLAYER(2) INPUT_PORTS_END static INPUT_PORTS_START( sscope ) @@ -1091,11 +1112,16 @@ PORT_MODIFY("IN1") PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_MODIFY("DSW") + PORT_DIPNAME( 0x40, 0x40, "Disable Machine Init" ) PORT_DIPLOCATION("SW:2") // Default DIPSW2 to OFF + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_START("ANALOG1") // Gun Yaw - PORT_BIT( 0x7ff, 0x400, IPT_AD_STICK_X ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(20) + PORT_BIT( 0x7ff, 0x400, IPT_AD_STICK_X ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(20) PORT_CENTERDELTA(0) PORT_START("ANALOG2") // Gun Pitch - PORT_BIT( 0x7ff, 0x3ff, IPT_AD_STICK_Y ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(20) PORT_INVERT + PORT_BIT( 0x7ff, 0x3ff, IPT_AD_STICK_Y ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(20) PORT_CENTERDELTA(0) PORT_INVERT INPUT_PORTS_END static INPUT_PORTS_START( sscope2 ) @@ -1140,7 +1166,7 @@ IRQ0: Vblank CG Board 0 IRQ1: Vblank CG Board 1 - IRQ2: LANC + IRQ2: LANC (GQ931(H) board), Teraburst (usage unknown) DMA0 NMI: SCI @@ -1151,20 +1177,12 @@ { m_pcb_digit.resolve(); - m_jvs_sdata_ptr = 0; - m_jvs_sdata = make_unique_clear(JVS_BUFFER_SIZE); - m_jvs_is_escape_byte = false; - // set conservative DRC options m_maincpu->ppcdrc_set_options(PPCDRC_COMPATIBLE_OPTIONS); // configure fast RAM regions for DRC m_maincpu->ppcdrc_add_fastram(0x00000000, 0x003fffff, false, m_workram); - save_pointer(NAME(m_jvs_sdata), JVS_BUFFER_SIZE); - save_item(NAME(m_jvs_sdata_ptr)); - save_item(NAME(m_jvs_is_escape_byte)); - m_sound_irq_timer = timer_alloc(FUNC(hornet_state::sound_irq), this); } @@ -1187,8 +1205,7 @@ membank("slave_cgboard_bank")->set_base(memregion("master_cgboard")->base()); } - m_jvs_sdata_ptr = 0; - m_jvs_is_escape_byte = false; + m_gn680_check = 0x8000; } double hornet_state::adc12138_input_callback(uint8_t input) @@ -1270,8 +1287,8 @@ m_konppc->set_num_boards(1); m_konppc->set_cbboard_type(konppc_device::CGBOARD_TYPE_HORNET); - HORNET_JVS_HOST(config, m_hornet_jvs_host, 0); - m_hornet_jvs_host->output_callback().set([this](uint8_t c) { m_maincpu->ppc4xx_spu_receive_byte(c); }); + KONPPC_JVS_HOST(config, m_jvs_host, 0); + m_jvs_host->output_callback().set([this](uint8_t c) { m_maincpu->ppc4xx_spu_receive_byte(c); }); } void hornet_state::hornet_x76(machine_config &config) @@ -1286,7 +1303,7 @@ m_maincpu->set_addrmap(AS_PROGRAM, &hornet_state::hornet_lan_map); - KONAMI_GN676_LAN(config, "gn676_lan", 0, m_workram); + KONAMI_GN676A_LAN(config, m_gn676_lan, 0); } void hornet_state::nbapbp(machine_config &config) @@ -1297,7 +1314,7 @@ // with the 2L6B panel dipswitch settings on the Windy2 board. // NOTE: Harness JVS + cabinet 4 player will work with a second JVS I/O device hooked up, but then // the official recommended setting of cabinet type 4 player + harness JAMMA breaks. - KONAMI_WINDY2_JVS_IO_2L6B_PANEL(config, "windy2_jvsio", 0, m_hornet_jvs_host); + KONAMI_WINDY2_JVS_IO_2L6B_PANEL(config, "windy2_jvsio", 0, m_jvs_host); } void hornet_state::terabrst(machine_config &config) //todo: add K056800 from I/O board @@ -1353,8 +1370,9 @@ rscreen.set_raw(XTAL(64'000'000) / 4, 1017, 106, 106 + 768, 262, 17, 17 + 236); rscreen.set_screen_update(FUNC(hornet_state::screen_update<1>)); -/* ADC12138(config, m_adc12138_2, 0); - m_adc12138->set_ipt_convert_callback(FUNC(hornet_state::sscope_input_callback)); */ + // Comes from the GQ830-PWB(J) board + ADC12138(config, m_adc12138_sscope, 0); + m_adc12138_sscope->set_ipt_convert_callback(FUNC(hornet_state::adc12138_input_callback)); m_konppc->set_num_boards(2); } @@ -1405,41 +1423,13 @@ EEPROM_93C46_16BIT(config, "lan_eeprom"); } - /*****************************************************************************/ void hornet_state::jamma_jvs_w(uint8_t data) { - bool is_escape_byte = m_jvs_is_escape_byte; - m_jvs_is_escape_byte = false; - - // Throw away the buffer and wait for the next sync marker instead of overflowing when - // a invalid packet is filling the entire buffer. - if (m_jvs_sdata_ptr >= JVS_BUFFER_SIZE) - m_jvs_sdata_ptr = 0; - - if (m_jvs_sdata_ptr == 0 && data != 0xe0) - return; - - if (m_jvs_sdata_ptr > 0 && data == 0xd0) - { - m_jvs_is_escape_byte = true; - return; - } - - m_jvs_sdata[m_jvs_sdata_ptr++] = is_escape_byte ? data + 1 : data; - - const bool is_complete_packet = m_jvs_sdata_ptr >= 5 - && m_jvs_sdata_ptr == m_jvs_sdata[2] + 3 - && m_jvs_sdata[0] == 0xe0 - && m_jvs_sdata[1] != 0x00 - && m_jvs_sdata[m_jvs_sdata_ptr - 1] == (std::accumulate(&m_jvs_sdata[1], &m_jvs_sdata[m_jvs_sdata_ptr - 1], 0) & 0xff); - if (is_complete_packet) - { - m_hornet_jvs_host->write(&m_jvs_sdata[1], m_jvs_sdata_ptr - 2); - m_hornet_jvs_host->read(); - m_jvs_sdata_ptr = 0; - } + bool accepted = m_jvs_host->write(data); + if (accepted) + m_jvs_host->read(); } /*****************************************************************************/ @@ -1496,7 +1486,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ua", 0x000000, 0x002000, BAD_DUMP CRC(458900fb) SHA1(ae2f5477e3999ecce5199fc4a53c5ddf78c4406d) ) // hand built ROM_END @@ -1518,7 +1508,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ea", 0x000000, 0x002000, BAD_DUMP CRC(7d94272c) SHA1(ef0b3e5d4fcf3cec71caa8e48776f71f850f3b09) ) // hand built ROM_END @@ -1540,7 +1530,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_aa", 0x000000, 0x002000, BAD_DUMP CRC(e8f7ac69) SHA1(93df4d8cc6ae376460873e4f3a95dc3921e5690e) ) // hand built ROM_END @@ -1562,7 +1552,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ua", 0x000000, 0x002000, BAD_DUMP CRC(458900fb) SHA1(ae2f5477e3999ecce5199fc4a53c5ddf78c4406d) ) // hand built ROM_END @@ -1584,7 +1574,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ea", 0x000000, 0x002000, BAD_DUMP CRC(7d94272c) SHA1(ef0b3e5d4fcf3cec71caa8e48776f71f850f3b09) ) // hand built ROM_END @@ -1606,7 +1596,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_aa", 0x000000, 0x002000, BAD_DUMP CRC(e8f7ac69) SHA1(93df4d8cc6ae376460873e4f3a95dc3921e5690e) ) // hand built ROM_END @@ -1628,7 +1618,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ua", 0x000000, 0x002000, BAD_DUMP CRC(458900fb) SHA1(ae2f5477e3999ecce5199fc4a53c5ddf78c4406d) ) // hand built ROM_END @@ -1650,7 +1640,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ea", 0x000000, 0x002000, BAD_DUMP CRC(7d94272c) SHA1(ef0b3e5d4fcf3cec71caa8e48776f71f850f3b09) ) // hand built ROM_END @@ -1672,7 +1662,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ja", 0x000000, 0x002000, BAD_DUMP CRC(325465c5) SHA1(24524a8eed8f0aa45881bddf65a8fa8ba5270eb1) ) // hand built ROM_END @@ -1694,7 +1684,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_aa", 0x000000, 0x002000, BAD_DUMP CRC(e8f7ac69) SHA1(93df4d8cc6ae376460873e4f3a95dc3921e5690e) ) // hand built ROM_END @@ -1716,7 +1706,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ua", 0x000000, 0x002000, BAD_DUMP CRC(458900fb) SHA1(ae2f5477e3999ecce5199fc4a53c5ddf78c4406d) ) // hand built ROM_END @@ -1738,7 +1728,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ea", 0x000000, 0x002000, BAD_DUMP CRC(7d94272c) SHA1(ef0b3e5d4fcf3cec71caa8e48776f71f850f3b09) ) // hand built ROM_END @@ -1760,7 +1750,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ja", 0x000000, 0x002000, BAD_DUMP CRC(325465c5) SHA1(24524a8eed8f0aa45881bddf65a8fa8ba5270eb1) ) // hand built ROM_END @@ -1782,7 +1772,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_aa", 0x000000, 0x002000, BAD_DUMP CRC(e8f7ac69) SHA1(93df4d8cc6ae376460873e4f3a95dc3921e5690e) ) // hand built ROM_END @@ -1804,7 +1794,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ua", 0x000000, 0x002000, BAD_DUMP CRC(458900fb) SHA1(ae2f5477e3999ecce5199fc4a53c5ddf78c4406d) ) // hand built ROM_END @@ -1826,7 +1816,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ea", 0x000000, 0x002000, BAD_DUMP CRC(7d94272c) SHA1(ef0b3e5d4fcf3cec71caa8e48776f71f850f3b09) ) // hand built ROM_END @@ -1848,7 +1838,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_aa", 0x000000, 0x002000, BAD_DUMP CRC(e8f7ac69) SHA1(93df4d8cc6ae376460873e4f3a95dc3921e5690e) ) // hand built ROM_END @@ -1870,7 +1860,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ua", 0x000000, 0x002000, BAD_DUMP CRC(458900fb) SHA1(ae2f5477e3999ecce5199fc4a53c5ddf78c4406d) ) // hand built ROM_END @@ -1892,7 +1882,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ea", 0x000000, 0x002000, BAD_DUMP CRC(7d94272c) SHA1(ef0b3e5d4fcf3cec71caa8e48776f71f850f3b09) ) // hand built ROM_END @@ -1914,7 +1904,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_aa", 0x000000, 0x002000, BAD_DUMP CRC(e8f7ac69) SHA1(93df4d8cc6ae376460873e4f3a95dc3921e5690e) ) // hand built ROM_END @@ -1936,7 +1926,7 @@ ROM_LOAD( "830a09.16p", 0x000000, 0x400000, CRC(e4b9f305) SHA1(ce2c6f63bdc9374dde48d8359102b57e48b4fdeb) ) ROM_LOAD( "830a10.14p", 0x400000, 0x400000, CRC(8b8aaf7e) SHA1(49b694dc171c149056b87c15410a6bf37ff2987f) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ua", 0x000000, 0x002000, BAD_DUMP CRC(458900fb) SHA1(ae2f5477e3999ecce5199fc4a53c5ddf78c4406d) ) // hand built ROM_END @@ -1962,7 +1952,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, CRC(f7c40218) SHA1(5021089803024a6f552e5c9d42b905e804b9d904) ) ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -1994,7 +1984,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ea", 0x000000, 0x002000, BAD_DUMP CRC(832f9148) SHA1(42a8cc9436eaa79b5bab242692e18c3807f6af74) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2026,7 +2016,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ja", 0x000000, 0x002000, BAD_DUMP CRC(d16ac629) SHA1(92c65a67ef201912e4f81d896126b045c5cc2072) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2058,7 +2048,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_aa", 0x000000, 0x002000, BAD_DUMP CRC(164c1a0d) SHA1(9f7e6cc1acae114aa97d9ed435661bf9c8b845c5) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2090,7 +2080,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, CRC(f7c40218) SHA1(5021089803024a6f552e5c9d42b905e804b9d904) ) ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2122,7 +2112,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ea", 0x000000, 0x002000, BAD_DUMP CRC(832f9148) SHA1(42a8cc9436eaa79b5bab242692e18c3807f6af74) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2154,7 +2144,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ja", 0x000000, 0x002000, BAD_DUMP CRC(d16ac629) SHA1(92c65a67ef201912e4f81d896126b045c5cc2072) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2186,7 +2176,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_aa", 0x000000, 0x002000, BAD_DUMP CRC(164c1a0d) SHA1(9f7e6cc1acae114aa97d9ed435661bf9c8b845c5) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2218,7 +2208,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, CRC(f7c40218) SHA1(5021089803024a6f552e5c9d42b905e804b9d904) ) ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2250,7 +2240,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ea", 0x000000, 0x002000, BAD_DUMP CRC(832f9148) SHA1(42a8cc9436eaa79b5bab242692e18c3807f6af74) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2282,7 +2272,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ja", 0x000000, 0x002000, BAD_DUMP CRC(d16ac629) SHA1(92c65a67ef201912e4f81d896126b045c5cc2072) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2314,7 +2304,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_aa", 0x000000, 0x002000, BAD_DUMP CRC(164c1a0d) SHA1(9f7e6cc1acae114aa97d9ed435661bf9c8b845c5) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2346,7 +2336,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, CRC(f7c40218) SHA1(5021089803024a6f552e5c9d42b905e804b9d904) ) ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2378,7 +2368,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ea", 0x000000, 0x002000, BAD_DUMP CRC(832f9148) SHA1(42a8cc9436eaa79b5bab242692e18c3807f6af74) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2410,7 +2400,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ja", 0x000000, 0x002000, BAD_DUMP CRC(d16ac629) SHA1(92c65a67ef201912e4f81d896126b045c5cc2072) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2442,7 +2432,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_aa", 0x000000, 0x002000, BAD_DUMP CRC(164c1a0d) SHA1(9f7e6cc1acae114aa97d9ed435661bf9c8b845c5) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2474,7 +2464,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, CRC(f7c40218) SHA1(5021089803024a6f552e5c9d42b905e804b9d904) ) ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2506,7 +2496,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ea", 0x000000, 0x002000, BAD_DUMP CRC(832f9148) SHA1(42a8cc9436eaa79b5bab242692e18c3807f6af74) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2538,7 +2528,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ja", 0x000000, 0x002000, BAD_DUMP CRC(d16ac629) SHA1(92c65a67ef201912e4f81d896126b045c5cc2072) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2570,7 +2560,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_aa", 0x000000, 0x002000, BAD_DUMP CRC(164c1a0d) SHA1(9f7e6cc1acae114aa97d9ed435661bf9c8b845c5) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2602,7 +2592,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, CRC(f7c40218) SHA1(5021089803024a6f552e5c9d42b905e804b9d904) ) ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2634,7 +2624,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ea", 0x000000, 0x002000, BAD_DUMP CRC(832f9148) SHA1(42a8cc9436eaa79b5bab242692e18c3807f6af74) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2666,7 +2656,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_ja", 0x000000, 0x002000, BAD_DUMP CRC(d16ac629) SHA1(92c65a67ef201912e4f81d896126b045c5cc2072) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2698,7 +2688,7 @@ ROM_LOAD( "931a10.14p", 0x400000, 0x400000, CRC(78ceb519) SHA1(e61c0d21b6dc37a9293e72814474f5aee59115ad) ) ROM_LOAD( "931a11.12p", 0x800000, 0x400000, CRC(9c8362b2) SHA1(a8158c4db386e2bbd61dc9a600720f07a1eba294) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_aa", 0x000000, 0x002000, BAD_DUMP CRC(164c1a0d) SHA1(9f7e6cc1acae114aa97d9ed435661bf9c8b845c5) ) // hand built ROM_REGION(0x8, "lan_serial_id", 0) // LAN Board DS2401 @@ -2730,7 +2720,7 @@ ROM_LOAD( "837a09.16p", 0x000000, 0x400000, CRC(fb8f3dc2) SHA1(69e314ac06308c5a24309abc3d7b05af6c0302a8) ) ROM_LOAD( "837a10.14p", 0x400000, 0x400000, CRC(1419cad2) SHA1(a6369a5c29813fa51e8246d0c091736f32994f3d) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_jac", 0x000000, 0x002000, BAD_DUMP CRC(935f9d05) SHA1(c3a787dff1b2ac4942858ffa1574405db01292b6) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -2759,7 +2749,7 @@ ROM_LOAD( "837a09.16p", 0x000000, 0x400000, CRC(fb8f3dc2) SHA1(69e314ac06308c5a24309abc3d7b05af6c0302a8) ) ROM_LOAD( "837a10.14p", 0x400000, 0x400000, CRC(1419cad2) SHA1(a6369a5c29813fa51e8246d0c091736f32994f3d) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_uac", 0x000000, 0x002000, BAD_DUMP CRC(cc8986c1) SHA1(a32bc175acae48bede7a97629e215ab4fb6954c6) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -2788,7 +2778,7 @@ ROM_LOAD( "837a09.16p", 0x000000, 0x400000, CRC(fb8f3dc2) SHA1(69e314ac06308c5a24309abc3d7b05af6c0302a8) ) ROM_LOAD( "837a10.14p", 0x400000, 0x400000, CRC(1419cad2) SHA1(a6369a5c29813fa51e8246d0c091736f32994f3d) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_aac", 0x000000, 0x002000, BAD_DUMP CRC(7977736d) SHA1(149ae7bc4987362f928a6c0c1e9671c2396ac811) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -2817,7 +2807,7 @@ ROM_LOAD( "837a09.16p", 0x000000, 0x400000, CRC(fb8f3dc2) SHA1(69e314ac06308c5a24309abc3d7b05af6c0302a8) ) ROM_LOAD( "837a10.14p", 0x400000, 0x400000, CRC(1419cad2) SHA1(a6369a5c29813fa51e8246d0c091736f32994f3d) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_jaa", 0x000000, 0x002000, BAD_DUMP CRC(264dc314) SHA1(1800b93063a6b3d424c329e124acc30814eb7ef0) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -2846,7 +2836,7 @@ ROM_LOAD( "837a09.16p", 0x000000, 0x400000, CRC(fb8f3dc2) SHA1(69e314ac06308c5a24309abc3d7b05af6c0302a8) ) ROM_LOAD( "837a10.14p", 0x400000, 0x400000, CRC(1419cad2) SHA1(a6369a5c29813fa51e8246d0c091736f32994f3d) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_uaa", 0x000000, 0x002000, BAD_DUMP CRC(799bd8d0) SHA1(c69b5bb99657c2fdb71049ba1db0075a024fe8ff) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -2875,7 +2865,7 @@ ROM_LOAD( "837a09.16p", 0x000000, 0x400000, CRC(fb8f3dc2) SHA1(69e314ac06308c5a24309abc3d7b05af6c0302a8) ) ROM_LOAD( "837a10.14p", 0x400000, 0x400000, CRC(1419cad2) SHA1(a6369a5c29813fa51e8246d0c091736f32994f3d) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_aaa", 0x000000, 0x002000, BAD_DUMP CRC(cc652d7c) SHA1(238086ba9eac26e6ae4217e085859e40f98a5050) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -2906,7 +2896,7 @@ ROM_LOAD( "778a11.12p", 0x800000, 0x400000, CRC(40199382) SHA1(bee268adf9b6634a4f6bb39278ecd02f2bdcb1f4) ) ROM_LOAD( "778a12.9p", 0xc00000, 0x400000, CRC(27d0c724) SHA1(48e48cbaea6db0de8c3471a2eda6faaa16eed46e) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, BAD_DUMP CRC(3cff1b1d) SHA1(bed0fc657a785be0c69bb21ad52365635c83d751) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -2937,7 +2927,7 @@ ROM_LOAD( "778a11.12p", 0x800000, 0x400000, CRC(40199382) SHA1(bee268adf9b6634a4f6bb39278ecd02f2bdcb1f4) ) ROM_LOAD( "778a12.9p", 0xc00000, 0x400000, CRC(27d0c724) SHA1(48e48cbaea6db0de8c3471a2eda6faaa16eed46e) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, BAD_DUMP CRC(3cff1b1d) SHA1(bed0fc657a785be0c69bb21ad52365635c83d751) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -2968,7 +2958,7 @@ ROM_LOAD( "778a11.12p", 0x800000, 0x400000, CRC(40199382) SHA1(bee268adf9b6634a4f6bb39278ecd02f2bdcb1f4) ) ROM_LOAD( "778a12.9p", 0xc00000, 0x400000, CRC(27d0c724) SHA1(48e48cbaea6db0de8c3471a2eda6faaa16eed46e) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, BAD_DUMP CRC(3cff1b1d) SHA1(bed0fc657a785be0c69bb21ad52365635c83d751) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -2999,7 +2989,7 @@ ROM_LOAD( "778a11.12p", 0x800000, 0x400000, CRC(40199382) SHA1(bee268adf9b6634a4f6bb39278ecd02f2bdcb1f4) ) ROM_LOAD( "778a12.9p", 0xc00000, 0x400000, CRC(27d0c724) SHA1(48e48cbaea6db0de8c3471a2eda6faaa16eed46e) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, BAD_DUMP CRC(3cff1b1d) SHA1(bed0fc657a785be0c69bb21ad52365635c83d751) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -3030,7 +3020,7 @@ ROM_LOAD( "778a11.12p", 0x800000, 0x400000, CRC(40199382) SHA1(bee268adf9b6634a4f6bb39278ecd02f2bdcb1f4) ) ROM_LOAD( "778a12.9p", 0xc00000, 0x400000, CRC(27d0c724) SHA1(48e48cbaea6db0de8c3471a2eda6faaa16eed46e) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, BAD_DUMP CRC(3cff1b1d) SHA1(bed0fc657a785be0c69bb21ad52365635c83d751) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -3061,7 +3051,7 @@ ROM_LOAD( "778a11.12p", 0x800000, 0x400000, CRC(40199382) SHA1(bee268adf9b6634a4f6bb39278ecd02f2bdcb1f4) ) ROM_LOAD( "778a12.9p", 0xc00000, 0x400000, CRC(27d0c724) SHA1(48e48cbaea6db0de8c3471a2eda6faaa16eed46e) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, BAD_DUMP CRC(3cff1b1d) SHA1(bed0fc657a785be0c69bb21ad52365635c83d751) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -3092,7 +3082,7 @@ ROM_LOAD( "778a11.12p", 0x800000, 0x400000, CRC(40199382) SHA1(bee268adf9b6634a4f6bb39278ecd02f2bdcb1f4) ) ROM_LOAD( "778a12.9p", 0xc00000, 0x400000, CRC(27d0c724) SHA1(48e48cbaea6db0de8c3471a2eda6faaa16eed46e) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, BAD_DUMP CRC(3cff1b1d) SHA1(bed0fc657a785be0c69bb21ad52365635c83d751) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -3123,7 +3113,7 @@ ROM_LOAD( "778a11.12p", 0x800000, 0x400000, CRC(40199382) SHA1(bee268adf9b6634a4f6bb39278ecd02f2bdcb1f4) ) ROM_LOAD( "778a12.9p", 0xc00000, 0x400000, CRC(27d0c724) SHA1(48e48cbaea6db0de8c3471a2eda6faaa16eed46e) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, BAD_DUMP CRC(3cff1b1d) SHA1(bed0fc657a785be0c69bb21ad52365635c83d751) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -3153,7 +3143,7 @@ ROM_REGION(0x20000, "gn680", 0) // 68K Program ROM_LOAD16_WORD_SWAP( "715a17.20k", 0x000000, 0x020000, CRC(f0b7ba0c) SHA1(863b260824b0ae2f890ba84d1c9a8f436891b1ff) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "715uel_m48t58y.35d", 0x000000, 0x002000, CRC(57322db4) SHA1(59cb8cd6ab446bf8781e3dddf902a4ff2484068e) ) ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -3183,7 +3173,7 @@ ROM_REGION(0x20000, "gn680", 0) // 68K Program ROM_LOAD16_WORD_SWAP( "715a17.20k", 0x000000, 0x020000, CRC(f0b7ba0c) SHA1(863b260824b0ae2f890ba84d1c9a8f436891b1ff) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_jel", 0x000000, 0x002000, BAD_DUMP CRC(bcf8610f) SHA1(b52e4ca707cf36f16fb3ba29a8a8f5dc4a42be7b) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -3213,7 +3203,7 @@ ROM_REGION(0x20000, "gn680", 0) // 68K Program ROM_LOAD16_WORD_SWAP( "715a17.20k", 0x000000, 0x020000, CRC(f0b7ba0c) SHA1(863b260824b0ae2f890ba84d1c9a8f436891b1ff) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_hel", 0x000000, 0x002000, BAD_DUMP CRC(1bf1278d) SHA1(40d437eb7428a42c0d8eb47cbcebc95ff8dc1767) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -3243,7 +3233,7 @@ ROM_REGION(0x20000, "gn680", 0) // 68K Program ROM_LOAD16_WORD_SWAP( "715a17.20k", 0x000000, 0x020000, CRC(f0b7ba0c) SHA1(863b260824b0ae2f890ba84d1c9a8f436891b1ff) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_uaa", 0x000000, 0x002000, BAD_DUMP CRC(60509b6a) SHA1(5938587770bdf5569c8b4c7413967869bddfcf84) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -3273,7 +3263,7 @@ ROM_REGION(0x20000, "gn680", 0) // 68K Program ROM_LOAD16_WORD_SWAP( "715a17.20k", 0x000000, 0x020000, CRC(f0b7ba0c) SHA1(863b260824b0ae2f890ba84d1c9a8f436891b1ff) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_jaa", 0x000000, 0x002000, BAD_DUMP CRC(ac54bdf9) SHA1(0139d29db112f9581a94091c2fac008e5c9f855d) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) @@ -3303,14 +3293,86 @@ ROM_REGION(0x20000, "gn680", 0) // 68K Program ROM_LOAD16_WORD_SWAP( "715a17.20k", 0x000000, 0x020000, CRC(f0b7ba0c) SHA1(863b260824b0ae2f890ba84d1c9a8f436891b1ff) ) - ROM_REGION(0x2000, "m48t58",0) + ROM_REGION(0x2000, "m48t58", 0) ROM_LOAD( "m48t58y-70pc1_haa", 0x000000, 0x002000, BAD_DUMP CRC(960b864e) SHA1(9f6d7b81689777b98c0e1b6ac41135604da48429) ) // hand built ROM_REGION( 0x0000224, "security_eeprom", 0 ) ROM_LOAD( "security_eeprom", 0x000000, 0x000224, NO_DUMP ) // Unused? ROM_END -ROM_START(thrilldbu) // GE713UF sticker, does not have the chip at 2G since it uses the rev A network board +ROM_START(thrilldgeu) // GE713UF sticker, does not have the chip at 2G since it uses the rev A network board + ROM_REGION32_BE(0x400000, "prgrom", ROMREGION_ERASEFF) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("713ab01.27p", 0x200000, 0x200000, CRC(a005d728) SHA1(8e265b1bb3adb7db2d342d3c0e3361a7174cb54d) ) + ROM_RELOAD(0x000000, 0x200000) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) ) + ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms + ROM_LOAD32_WORD_SWAP( "713a13.24u", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.32u", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) + ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "ge713uf_m48t58y.35d", 0x000000, 0x002000, CRC(39f521d4) SHA1(2a1a574eb5830d40f5db87464785a159a5ab252d) ) // hand built +ROM_END + +ROM_START(thrilldgnj) + ROM_REGION32_BE(0x400000, "prgrom", ROMREGION_ERASEFF) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("713ab01.27p", 0x200000, 0x200000, CRC(a005d728) SHA1(8e265b1bb3adb7db2d342d3c0e3361a7174cb54d) ) + ROM_RELOAD(0x000000, 0x200000) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) ) + ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms + ROM_LOAD32_WORD_SWAP( "713a13.24u", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.32u", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) + ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gn713ja_m48t58y.35d", 0x000000, 0x002000, CRC(4496250d) SHA1(d433dc63afb3fd1c0ce772a62bec0e026d0e278c) ) // hand built +ROM_END + +ROM_START(thrilldgmj) + ROM_REGION32_BE(0x400000, "prgrom", ROMREGION_ERASEFF) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("713ab01.27p", 0x200000, 0x200000, CRC(a005d728) SHA1(8e265b1bb3adb7db2d342d3c0e3361a7174cb54d) ) + ROM_RELOAD(0x000000, 0x200000) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) ) + ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms + ROM_LOAD32_WORD_SWAP( "713a13.24u", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.32u", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) + ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gm713ja_m48t58y.35d", 0x000000, 0x002000, CRC(96792a3f) SHA1(f05e9f83fc655da2b300e2a17b71a52b7933cfb2) ) // hand built +ROM_END + +ROM_START(thrilldgpj) ROM_REGION32_BE(0x400000, "prgrom", ROMREGION_ERASEFF) // PowerPC program roms ROM_LOAD16_WORD_SWAP("713ab01.27p", 0x200000, 0x200000, CRC(a005d728) SHA1(8e265b1bb3adb7db2d342d3c0e3361a7174cb54d) ) ROM_RELOAD(0x000000, 0x200000) @@ -3330,10 +3392,107 @@ ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) - ROM_REGION(0x2000, "m48t58",0) - ROM_LOAD( "713uab_m48t58y.35d", 0x000000, 0x002000, CRC(33a5250f) SHA1(3ffe2c812b341a9ed805c791c9dcfcb7587fbf3a) ) + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gp713ja_m48t58y.35d", 0x000000, 0x002000, CRC(2a5011ef) SHA1(9bac6d95d2f035ad1fd1b91810be198fa6e4c7ce) ) // hand built ROM_END +ROM_START(thrilldgej) + ROM_REGION32_BE(0x400000, "prgrom", ROMREGION_ERASEFF) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("713ab01.27p", 0x200000, 0x200000, CRC(a005d728) SHA1(8e265b1bb3adb7db2d342d3c0e3361a7174cb54d) ) + ROM_RELOAD(0x000000, 0x200000) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) ) + ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms + ROM_LOAD32_WORD_SWAP( "713a13.24u", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.32u", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) + ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "ge713ja_m48t58y.35d", 0x000000, 0x002000, CRC(f484975b) SHA1(027097109a850d38376b79e5a5f844d357967f2c) ) // hand built +ROM_END + +ROM_START(thrilldgke) + ROM_REGION32_BE(0x400000, "prgrom", ROMREGION_ERASEFF) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("713ab01.27p", 0x200000, 0x200000, CRC(a005d728) SHA1(8e265b1bb3adb7db2d342d3c0e3361a7174cb54d) ) + ROM_RELOAD(0x000000, 0x200000) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) ) + ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms + ROM_LOAD32_WORD_SWAP( "713a13.24u", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.32u", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) + ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gk713ea_m48t58y.35d", 0x000000, 0x002000, CRC(3e77a0b9) SHA1(fdbd0b72447cb8077ae614864452152223fd2b57) ) // hand built +ROM_END + +ROM_START(thrilldgkee) + ROM_REGION32_BE(0x400000, "prgrom", ROMREGION_ERASEFF) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("713ab01.27p", 0x200000, 0x200000, CRC(a005d728) SHA1(8e265b1bb3adb7db2d342d3c0e3361a7174cb54d) ) + ROM_RELOAD(0x000000, 0x200000) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) ) + ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms + ROM_LOAD32_WORD_SWAP( "713a13.24u", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.32u", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) + ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gk713ee_m48t58y.35d", 0x000000, 0x002000, CRC(ac6a7648) SHA1(73d06b219c2d6859a565d1b0d3dea79268cc3795) ) // hand built +ROM_END + +ROM_START(thrilldgkk) + ROM_REGION32_BE(0x400000, "prgrom", ROMREGION_ERASEFF) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("713ab01.27p", 0x200000, 0x200000, CRC(a005d728) SHA1(8e265b1bb3adb7db2d342d3c0e3361a7174cb54d) ) + ROM_RELOAD(0x000000, 0x200000) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) ) + ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms + ROM_LOAD32_WORD_SWAP( "713a13.24u", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.32u", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) + ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gk713ka_m48t58y.35d", 0x000000, 0x002000, CRC(688f5164) SHA1(0617e2e2a0078854e2344412f8c4fbee22452ba1) ) // hand built +ROM_END + + } // Anonymous namespace @@ -3370,7 +3529,24 @@ GAME( 1998, terabrstaa, terabrst, terabrst, terabrst, hornet_state, init_hornet, ROT0, "Konami", "Teraburst (1998/02/25 ver HAA)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // identifies as NWK-LC system -GAME( 1998, thrilldbu, thrilld, hornet_lan, thrilld, hornet_state, init_hornet, ROT0, "Konami", "Thrill Drive (ver UFB)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN ) // heavy GFX glitches, fails wheel motor test, for now it's possible to get in game by switching "SW:2" to on +// heavy GFX glitches, fails wheel motor test, for now it's possible to get in game by switching "SW:2" to on +// notable version differences: +// GN713JA handbrake, 5+R shifter, no clutch +// GM713JA handbrake, up/down shifter, no clutch +// GP713JA no handbrake, up/down shifter, no clutch +// GE713JA handbrake, 5+R shifter, clutch +// GE713UF no handbrake, no clutch. settings configurable on boot: brake pedal, shifter (up/down, 4 pos, 5+R), steering motor type (A, W, H types) +// GK713EA no clutch. settings configurable on boot: handbrake lever, shifter (up/down, 4 pos, 5+R), shifter display position (right/left) +// GK713EE no clutch. settings configurable on boot: handbrake lever, shifter (up/down, 4 pos, 5+R), shifter display position (right/left) +// GK713K* no handbrake, up/down shifter, no clutch, English only version of GP713JA? +GAME( 1998, thrilldgeu, thrilld, hornet_lan, thrilld, hornet_state, init_hornet, ROT0, "Konami", "Thrill Drive (ver GE713UFB)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1998, thrilldgnj, thrilld, hornet_lan, thrilld, hornet_state, init_hornet, ROT0, "Konami", "Thrill Drive (ver GN713JAB)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1998, thrilldgmj, thrilld, hornet_lan, thrilld, hornet_state, init_hornet, ROT0, "Konami", "Thrill Drive (ver GM713JAB)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1998, thrilldgpj, thrilld, hornet_lan, thrilld, hornet_state, init_hornet, ROT0, "Konami", "Thrill Drive (ver GP713JAB)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1998, thrilldgej, thrilld, hornet_lan, thrilld, hornet_state, init_hornet, ROT0, "Konami", "Thrill Drive (ver GE713JAB)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1998, thrilldgke, thrilld, hornet_lan, thrilld, hornet_state, init_hornet, ROT0, "Konami", "Thrill Drive (ver GK713EAB)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1998, thrilldgkee, thrilld, hornet_lan, thrilld, hornet_state, init_hornet, ROT0, "Konami", "Thrill Drive (ver GK713EEB)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1998, thrilldgkk, thrilld, hornet_lan, thrilld, hornet_state, init_hornet, ROT0, "Konami", "Thrill Drive (ver GK713K*B)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // Revisions C and D removed Japanese region support but introduced Voodoo 2 support. GAMEL( 1999, sscope, 0, sscope, sscope, hornet_state, init_sscope, ROT0, "Konami", "Silent Scope (ver UAD, Ver 1.33)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE, layout_dualhsxs ) diff -Nru mame-0.250+dfsg.1/src/mame/konami/k051960.cpp mame-0.251+dfsg.1/src/mame/konami/k051960.cpp --- mame-0.250+dfsg.1/src/mame/konami/k051960.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/k051960.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -19,7 +19,7 @@ Moreover a few games store the gfx data in the ROMs in a format different from the one expected by the 051960, and use external logic to reorder the address and/or data lines. -The 051960 can also genenrate IRQ, FIRQ and NMI signals. +The 051960 can also generate IRQ, FIRQ and NMI signals. memory map: 000-007 is for the 051937, but also seen by the 051960 diff -Nru mame-0.250+dfsg.1/src/mame/konami/k052109.cpp mame-0.251+dfsg.1/src/mame/konami/k052109.cpp --- mame-0.250+dfsg.1/src/mame/konami/k052109.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/k052109.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -331,8 +331,7 @@ { /* B y scroll */ } else if (offset >= 0x3a00 && offset < 0x3c00) { /* B x scroll */ } -// else -//logerror("%s: read from unknown 052109 address %04x\n",m_maincpu->pc(),offset); + //else logerror("%s: read from unknown 052109 address %04x\n",machine().describe_context(),offset); } return m_ram[offset]; @@ -350,15 +349,15 @@ bank |= (m_charrombank_2[(color & 0x0c) >> 2] >> 2); // Surprise Attack uses this 2nd bank in the rom test - if (m_has_extra_video_ram) - code |= color << 8; /* kludge for X-Men */ - else - m_k052109_cb(0, bank, &code, &color, &flags, &priority); + if (m_has_extra_video_ram) + code |= color << 8; /* kludge for X-Men */ + else + m_k052109_cb(0, bank, &code, &color, &flags, &priority); - addr = (code << 5) + (offset & 0x1f); - addr &= m_char_rom.length() - 1; + addr = (code << 5) + (offset & 0x1f); + addr &= m_char_rom.length() - 1; -// logerror("%s: off = %04x sub = %02x (bnk = %x) adr = %06x\n", m_maincpu->pc(), offset, m_romsubbank, bank, addr); + //logerror("%s: off = %04x sub = %02x (bnk = %x) adr = %06x\n", machine().describe_context(), offset, m_romsubbank, bank, addr); return m_char_rom[addr]; } @@ -386,14 +385,14 @@ { if (m_scrollctrl != data) { -//popmessage("scrollcontrol = %02x", data); -//logerror("%s: rowscrollcontrol = %02x\n", m_maincpu->pc(), data); + //popmessage("scrollcontrol = %02x", data); + //logerror("%s: rowscrollcontrol = %02x\n", machine().describe_context(), data); m_scrollctrl = data; } } else if (offset == 0x1d00) { -//logerror("%s: 052109 register 1d00 = %02x\n", m_maincpu->pc(), data); + //logerror("%s: 052109 register 1d00 = %02x\n", machine().describe_context(), data); /* bit 2 = irq enable */ /* the custom chip can also generate NMI and FIRQ, for use with a 6809 */ m_irq_enabled = data & 0x04; @@ -428,12 +427,12 @@ } else if (offset == 0x1e00 || offset == 0x3e00) // Surprise Attack uses offset 0x3e00 { -//logerror("%s: 052109 register 1e00 = %02x\n",m_maincpu->pc(),data); + //logerror("%s: 052109 register 1e00 = %02x\n",machine().describe_context(),data); m_romsubbank = data; } else if (offset == 0x1e80) { -//if ((data & 0xfe)) logerror("%s: 052109 register 1e80 = %02x\n",m_maincpu->pc(),data); + //if ((data & 0xfe)) logerror("%s: 052109 register 1e80 = %02x\n",machine().describe_context(),data); m_tilemap[0]->set_flip((data & 1) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); m_tilemap[1]->set_flip((data & 1) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); m_tilemap[2]->set_flip((data & 1) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); @@ -487,8 +486,7 @@ m_charrombank_2[2] = data & 0x0f; m_charrombank_2[3] = (data >> 4) & 0x0f; } -// else -// logerror("%s: write %02x to unknown 052109 address %04x\n",m_maincpu->pc(),data,offset); + //else logerror("%s: write %02x to unknown 052109 address %04x\n",machine().describe_context(),data,offset); } } @@ -527,16 +525,14 @@ int xscroll, yscroll, offs; #if 0 -{ -popmessage("%x %x %x %x", - m_charrombank[0], - m_charrombank[1], - m_charrombank[2], - m_charrombank[3]); -} + popmessage("%x %x %x %x", + m_charrombank[0], + m_charrombank[1], + m_charrombank[2], + m_charrombank[3]); #endif -// note: this chip can do both per-column and per-row scroll in the same time, currently not emulated. + // note: this chip can do both per-column and per-row scroll in the same time, currently not emulated. if ((m_scrollctrl & 0x03) == 0x02) { @@ -654,24 +650,24 @@ } #if 0 -if ((m_scrollctrl & 0x03) == 0x01 || - (m_scrollctrl & 0x18) == 0x08 || - ((m_scrollctrl & 0x04) && (m_scrollctrl & 0x03)) || - ((m_scrollctrl & 0x20) && (m_scrollctrl & 0x18)) || - (m_scrollctrl & 0xc0) != 0) - popmessage("scrollcontrol = %02x", m_scrollctrl); - -if (machine().input().code_pressed(KEYCODE_F)) -{ - FILE *fp; - fp=fopen("TILE.DMP", "w+b"); - if (fp) - { - fwrite(m_ram, 0x6000, 1, fp); - popmessage("saved"); - fclose(fp); + if ((m_scrollctrl & 0x03) == 0x01 || + (m_scrollctrl & 0x18) == 0x08 || + ((m_scrollctrl & 0x04) && (m_scrollctrl & 0x03)) || + ((m_scrollctrl & 0x20) && (m_scrollctrl & 0x18)) || + (m_scrollctrl & 0xc0) != 0) + popmessage("scrollcontrol = %02x", m_scrollctrl); + + if (machine().input().code_pressed(KEYCODE_F)) + { + FILE *fp; + fp=fopen("TILE.DMP", "w+b"); + if (fp) + { + fwrite(m_ram, 0x6000, 1, fp); + popmessage("saved"); + fclose(fp); + } } -} #endif } diff -Nru mame-0.250+dfsg.1/src/mame/konami/konami_gn676_lan.cpp mame-0.251+dfsg.1/src/mame/konami/konami_gn676_lan.cpp --- mame-0.250+dfsg.1/src/mame/konami/konami_gn676_lan.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/konami_gn676_lan.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Ville Linde +// copyright-holders:Ville Linde, windyfairy /* Hardware info by Guru @@ -22,9 +22,9 @@ CN1 - Connector joining to CPU board CN4 CN2/3 - RCA jacks for network cable HYC2485S - Hybrid ceramic module for RS485 - CY7C199 - 32k x8 SRAM - XC5204 - Xilinx XC5204 FPGA - XC5210 - Xilink XC5210 FPGA + CY7C199 - 32k x8 SRAM (labeled 3C) + XC5204 - Xilinx XC5204 FPGA (labeled 7C) + XC5210 - Xilink XC5210 FPGA (labeled 6F) N676H1 - PALCE16V8Q-15 stamped 'N676H1' Network PCB (Racing Jam 2 and Thrill Drive (NWK-TR)) @@ -52,8 +52,32 @@ timekeeper back to factory settings for the new kitted game installed. If the region ID in serialflash and timekeeper do not match, the game boots with a "hardware error" message. -TODO: -- Add X76F041 device when dumps will be available and get rid of the work_ram hack + +FPGA Bitstreams +--------------- +- Racing Jam (racingj) + - Uses type A board + - Firmware (CRC32 92fde8df, 29491 bytes) + +- Racing Jam 2 (racingj2, racingj2j) + - Uses type B board with x76 chip? (x76 isn't used?) + - Firmware (CRC32 dfc74cc9, 29491 bytes) + +- Thrill Drive (thrilld, thrilldb, thrilldbu) + - Uses type B board with x76 chip (except thrilldbu which uses type A without the x76 chip) + - Firmware #1 (CRC32 3760e3ce, 29490 bytes) + - Used during initial device test (does not get uploaded with skip post) + - Tests every register and expects to be able to read back the values it wrote for every register *except* 0x05, 0x06, and 0x09 on lanc2 + - Seems to be a stubbed version of the normal firmware with the logic for all registers stubbed except memory-related registers + - Firmware #2 (CRC32 a8c97a75, 29490 bytes) + - Uploaded after boot sequence (even with skip post) + - Allows usage of x76 chip + - Firmware #3 (CRC32 93b86e35, 29490 bytes) + - Uploaded after security check (boot finishes, just as it starts the actual game) + - x76 chip capability unknown (TODO: this should be tested on real hardware) + +Racing Jam 1 and 2 are both programmed to send one extra 0xff at the end of the upload sequence. The Thrill Drive a8c97a75 firmware +and the Racing Jam 2 dfc74cc9 firmware are actually the same except for the final 0xff. */ #include "emu.h" @@ -64,177 +88,299 @@ #include "logmacro.h" +#define DUMP_FIRMWARE 0 + -DEFINE_DEVICE_TYPE(KONAMI_GN676_LAN, konami_gn676_lan_device, "konami_gn676_lan", "Konami GN676 Network PCB") +DEFINE_DEVICE_TYPE(KONAMI_GN676A_LAN, konami_gn676a_lan_device, "konami_gn676a_lan", "Konami GN676-PWB(H)A Network PCB") +DEFINE_DEVICE_TYPE(KONAMI_GN676B_LAN, konami_gn676b_lan_device, "konami_gn676b_lan", "Konami GN676-PWB(H)B Network PCB") -konami_gn676_lan_device::konami_gn676_lan_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, KONAMI_GN676_LAN, tag, owner, clock), - m_fpga_uploaded(false), - m_lanc2_ram_r(0), - m_lanc2_ram_w(0), - m_lanc2_ram(nullptr), - m_work_ram(*this, finder_base::DUMMY_TAG) +konami_gn676_lan_device::konami_gn676_lan_device(const machine_config &mconfig, const device_type type, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, type, tag, owner, clock), + m_x76f041(*this, "eeprom"), + m_lanc2_ram(nullptr) { - std::fill(std::begin(m_lanc2_reg), std::end(m_lanc2_reg), 0); } +konami_gn676a_lan_device::konami_gn676a_lan_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : konami_gn676_lan_device(mconfig, KONAMI_GN676A_LAN, tag, owner, clock) +{ +} + +konami_gn676b_lan_device::konami_gn676b_lan_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : konami_gn676_lan_device(mconfig, KONAMI_GN676B_LAN, tag, owner, clock) +{ +} + +void konami_gn676b_lan_device::device_add_mconfig(machine_config &config) +{ + X76F041(config, m_x76f041); +} void konami_gn676_lan_device::device_start() { m_lanc2_ram = std::make_unique(0x8000); - save_item(NAME(m_fpga_uploaded)); save_item(NAME(m_lanc2_ram_r)); save_item(NAME(m_lanc2_ram_w)); save_item(NAME(m_lanc2_reg)); + save_item(NAME(m_network_buffer_max_size)); + save_item(NAME(m_network_id)); + save_item(NAME(m_fpga_reset_state)); + save_item(NAME(m_fpga_uploaded)); + save_item(NAME(m_fpga_waiting_firmware)); + save_item(NAME(m_fpga_receiving)); + save_item(NAME(m_fpga_is_stubbed)); + save_item(NAME(m_fpga_firmware_size)); + save_item(NAME(m_fpga_firmware_crc)); + save_item(NAME(m_x76f041_enabled)); + save_item(NAME(m_x76f041_read_enabled)); + save_item(NAME(m_x76f041_rst_triggered)); + save_pointer(NAME(m_lanc2_ram), 0x8000); } +void konami_gn676_lan_device::device_reset() +{ + std::fill_n(m_lanc2_ram.get(), 0x8000, 0); + m_fpga_reset_state = true; + reset_fpga_state(false); +} -uint32_t konami_gn676_lan_device::lanc1_r(offs_t offset) +uint8_t konami_gn676_lan_device::lanc1_r(offs_t offset) { - switch (offset) - { - case 0x40/4: - { - uint32_t r = 0; - - r |= (m_fpga_uploaded) ? (1 << 6) : 0; - r |= 1 << 5; + uint8_t r = 0xff; - return (r) << 24; - } + if (offset == 0x40) + { + r = (m_fpga_receiving << 6) | (m_fpga_waiting_firmware << 5); - default: - { - LOG("lanc1_r: %08X at %08X\n", offset, machine().describe_context()); - return 0xffffffff; - } + // racingj/racingj2 polls expecting to see bit 5 set and bit 6 unset before + // it'll start uploading the firmware, so only set it after being polled. + m_fpga_receiving = true; } -} -void konami_gn676_lan_device::lanc1_w(offs_t offset, uint32_t data, uint32_t mem_mask) -{ - LOG("lanc1_w: %08X, %08X, %08X at %08X\n", data, offset, mem_mask, machine().describe_context()); + LOG("%s: lanc1_r: read %02X from %08X\n", tag(), r, offset, machine().describe_context()); + + return r; } -uint32_t konami_gn676_lan_device::lanc2_r(offs_t offset, uint32_t mem_mask) +void konami_gn676_lan_device::lanc1_w(offs_t offset, uint8_t data) { - uint32_t r = 0; + LOG("%s: lanc1_w: wrote %02X to %08X\n", machine().describe_context(), data, offset); - if (offset == 0) + if (offset == 0x20) { - if (ACCESSING_BITS_0_7) - { - r |= m_lanc2_ram[m_lanc2_ram_r & 0x7fff]; - m_lanc2_ram_r++; - } - else + if (BIT(data, 7)) { - r |= 0xffffff00; + m_fpga_uploaded = true; + m_fpga_waiting_firmware = false; + m_fpga_receiving = false; + m_fpga_firmware_crc = util::crc32_creator::simple(m_lanc2_ram.get(), m_fpga_firmware_size); + + LOG("%s: lanc1_fpga: Found firmware with hash of %08x\n", tag(), m_fpga_firmware_crc, machine().describe_context()); + + m_x76f041_enabled = m_fpga_firmware_crc == 0xa8c97a75 || m_fpga_firmware_crc == 0xdfc74cc9 || m_fpga_firmware_crc == 0x93b86e35; + m_fpga_is_stubbed = m_fpga_firmware_crc == 0x3760e3ce; + + if (DUMP_FIRMWARE) + { + // DEBUG: Dump firmware for quick comparison + FILE *f = fopen(util::string_format("firmware_%08x.bin", m_fpga_firmware_crc).c_str(), "wb"); + if (f) + { + fwrite(m_lanc2_ram.get(), 1, m_fpga_firmware_size, f); + fclose(f); + } + } + + std::fill_n(m_lanc2_ram.get(), 0x8000, 0); } } - else if (offset == 1) - { - r |= 0x00005555; // set all other machines as disconnected - } - else if (offset == 3) +} + +uint8_t konami_gn676_lan_device::lanc2_r(offs_t offset) +{ + if (m_fpga_waiting_firmware) { - r |= 0xffffffff; + if (offset == 0) + return 0x80; // Required to be set for firmware to be written + return 0; } - else if (offset == 4) + + uint8_t r = m_lanc2_reg[offset]; + switch (offset) { - if (ACCESSING_BITS_24_31) + case 1: + r = BIT(m_lanc2_ram_r, 8, 8); + break; + + case 2: + r = BIT(m_lanc2_ram_r, 0, 8); + break; + + case 3: + r = m_lanc2_ram[m_lanc2_ram_r]; + m_lanc2_ram_r = (m_lanc2_ram_r + 1) & 0x7fff; + + if (!m_fpga_is_stubbed) + r = 0xff; // HACK: network traffic isn't implemented so give dummy data + break; + + case 6: + case 7: + if (m_fpga_is_stubbed) + { + // Thrill Drive's boot test checks for this specific logic + r = (m_lanc2_reg[offset] + 3) & 0x7f; + m_lanc2_reg[offset]++; + } + else + r = 0x55; // HACK: force clients to show as disconnected + break; + + case 9: { - r |= 0x00000000; - } + // Thrill Drive's boot test checks for this specific logic + uint8_t a = m_lanc2_reg[offset] + 6; + uint8_t b = BIT(a, 4, 2) & BIT(a, 5, 2) & BIT(a, 6, 2); + r = (b << 4) | (a & 0x0f); + + if (m_fpga_is_stubbed) + m_lanc2_reg[offset]++; + break; + } + + case 0x0c: + case 0x0d: + // Used with reg 6/7 to determine info about clients + break; + + case 0x10: + if (m_x76f041 && m_x76f041_enabled && m_x76f041_read_enabled) + r = m_x76f041->read_sda(); + break; } - LOG("lanc2_r: %08X, %08X at %08X\n", offset, mem_mask, machine().describe_context()); + LOG("%s: lanc2_r: read %02X from %08X\n", tag(), r, offset, machine().describe_context()); return r; } -void konami_gn676_lan_device::lanc2_w(offs_t offset, uint32_t data, uint32_t mem_mask) +void konami_gn676_lan_device::lanc2_w(offs_t offset, uint8_t data) { - if (offset == 0) + if (m_fpga_waiting_firmware) { - if (ACCESSING_BITS_24_31) - { - uint8_t value = data >> 24; + if (offset == 0) + m_lanc2_ram[m_fpga_firmware_size++] = data; + return; + } - value = ((value >> 7) & 0x01) | - ((value >> 5) & 0x02) | - ((value >> 3) & 0x04) | - ((value >> 1) & 0x08) | - ((value << 1) & 0x10) | - ((value << 3) & 0x20) | - ((value << 5) & 0x40) | - ((value << 7) & 0x80); + LOG("%s: lanc2_w: wrote %02X to %08X\n", tag(), data, offset, machine().describe_context()); - m_fpga_uploaded = true; - m_lanc2_reg[0] = (uint8_t)(data >> 24); + m_lanc2_reg[offset] = data; - LOG("lanc2_fpga_w: %02X at %08X\n", value, machine().describe_context()); - } - if (ACCESSING_BITS_8_15) - { - m_lanc2_ram_r = 0; - m_lanc2_ram_w = 0; - m_lanc2_reg[1] = (uint8_t)(data >> 8); + switch (offset) + { + case 0: + // This shouldn't actually be used in practice but Thrill Drive's boot test explicitly writes + // (addr >> 16) & 1 to this register which would put it out of the available RAM space. + break; + + case 1: + m_lanc2_ram_r = (m_lanc2_ram_r & 0x100ff) | (data << 8); + m_lanc2_ram_w = (m_lanc2_ram_w & 0x100ff) | (data << 8); + break; + + case 2: + m_lanc2_ram_r = (m_lanc2_ram_r & 0x1ff00) | data; + m_lanc2_ram_w = (m_lanc2_ram_w & 0x1ff00) | data; + break; + + case 3: + m_lanc2_ram[m_lanc2_ram_w] = data; + m_lanc2_ram_w = (m_lanc2_ram_w + 1) & 0x7fff; + break; + + case 4: + // Network enabled flag? + // Set to 0 after firmware is uploaded, set to 1 when setting self network ID and similar info + break; + + case 5: + m_network_id = data; + break; - if (data & 0x1000) - { - // send out frame for this machine - } - else + case 0x10: + if (m_x76f041 && m_x76f041_enabled) { - // read from other machines - //int machine_id = (m_lanc2_reg[2] >> 4) & 7; - //int self = m_lanc2_reg[2] & 1; + /* + 0x01 = x76 SDA + 0x02 = x76 RST + 0x04 = x76 CS??? + 0x08 = x76 SCL + 0x10 = Controls direction of x76 SDA + */ + + if (BIT(data, 1)) + m_x76f041_rst_triggered = true; + + m_x76f041_read_enabled = BIT(data, 4); + m_x76f041->write_rst(BIT(data, 1)); + m_x76f041->write_scl(BIT(data, 3)); - for (auto j = 0; j < 0x110; j++) + if (!m_x76f041_read_enabled) { - m_lanc2_ram[j] = 0xff; + if (m_x76f041_rst_triggered && BIT(data, 1) == 0) + { + // HACK: RST was triggered previously and now we're exiting read mode, so reset + // the x76 state so we're not stuck in a loop reading the reset response. + // My guess is bit 2 is used in some way for this but the usage doesn't make + // sense (if used as CS then it'll reset the chip state entirely during ACK + // polling in normal usage). FPGA magic? + m_x76f041->write_cs(1); + m_x76f041->write_cs(0); + m_x76f041_rst_triggered = false; + } + + m_x76f041->write_sda(BIT(data, 0)); } } - } - if (ACCESSING_BITS_16_23) - { - m_lanc2_reg[2] = (uint8_t)(data >> 16); - } - if (ACCESSING_BITS_0_7) - { - m_lanc2_ram[m_lanc2_ram_w & 0x7fff] = data & 0xff; - m_lanc2_ram_w++; - } - } - if (offset == 4) // only type B has the chip at 2G - { - // TODO: HACK! The data below would normally be present on the serialflash at 2G. + break; - if (strcmp(machine().system().name, "thrilld") == 0 || - strcmp(machine().system().name, "thrilldb") == 0 || - strcmp(machine().system().name, "thrilldbe") == 0) - { - m_work_ram[(0x3ffed0/4) + 0] = 0x472a3731; // G*71 - m_work_ram[(0x3ffed0/4) + 1] = 0x33202020; // 3 - m_work_ram[(0x3ffed0/4) + 2] = 0x2d2d2a2a; // --** - m_work_ram[(0x3ffed0/4) + 3] = 0x2a207878; // * - - m_work_ram[(0x3fff40/4) + 0] = 0x47433731; // GC71 - m_work_ram[(0x3fff40/4) + 1] = 0x33000000; // 3 - m_work_ram[(0x3fff40/4) + 2] = 0x19994a41; // JA - m_work_ram[(0x3fff40/4) + 3] = 0x4100a9b1; // A - } - else if (strcmp(machine().system().name, "racingj2") == 0) - { - m_work_ram[(0x3ffc80/4) + 0] = 0x47453838; // GE88 - m_work_ram[(0x3ffc80/4) + 1] = 0x38003030; // 8 00 - m_work_ram[(0x3ffc80/4) + 2] = 0x39374541; // 97EA - m_work_ram[(0x3ffc80/4) + 3] = 0x410058da; // A - } + case 0x1c: + m_network_buffer_max_size = (data << 8) | (m_network_buffer_max_size & 0xff); + break; + + case 0x1d: + m_network_buffer_max_size = (m_network_buffer_max_size & 0xff00) | data; + break; } +} + +void konami_gn676_lan_device::reset_fpga_state(bool state) +{ + if (state == m_fpga_reset_state) + return; + + // Reset state of FPGA so that it's waiting for new firmware until + // bit 7 of lanc1_w addr 0x20 is set. + m_fpga_reset_state = state; + + m_fpga_waiting_firmware = true; + m_fpga_uploaded = false; + m_fpga_receiving = false; + m_fpga_is_stubbed = false; + m_fpga_firmware_size = 0; + m_fpga_firmware_crc = 0; + + m_x76f041_enabled = false; + m_x76f041_read_enabled = false; + m_x76f041_rst_triggered = false; + + m_lanc2_ram_r = m_lanc2_ram_w = 0; - LOG("lanc2_w: %08X, %08X, %08X at %08X\n", data, offset, mem_mask, machine().describe_context()); + m_network_buffer_max_size = 0; + m_network_id = 0; + + std::fill(std::begin(m_lanc2_reg), std::end(m_lanc2_reg), 0); } diff -Nru mame-0.250+dfsg.1/src/mame/konami/konami_gn676_lan.h mame-0.251+dfsg.1/src/mame/konami/konami_gn676_lan.h --- mame-0.250+dfsg.1/src/mame/konami/konami_gn676_lan.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/konami_gn676_lan.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,42 +1,74 @@ // license:BSD-3-Clause -// copyright-holders:Ville Linde +// copyright-holders:Ville Linde, windyfairy -#ifndef MAME_MACHINE_KONAMI_GN676_LAN_H -#define MAME_MACHINE_KONAMI_GN676_LAN_H +#ifndef MAME_KONAMI_GN676_LAN_H +#define MAME_KONAMI_GN676_LAN_H #pragma once -class konami_gn676_lan_device : public device_t +#include "machine/x76f041.h" + +class konami_gn676_lan_device : public device_t { public: - template - konami_gn676_lan_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&work_ram_tag) - : konami_gn676_lan_device(mconfig, tag, owner, clock) - { - m_work_ram.set_tag(std::forward(work_ram_tag)); - } - - konami_gn676_lan_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - uint32_t lanc1_r(offs_t offset); - void lanc1_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); - uint32_t lanc2_r(offs_t offset, uint32_t mem_mask = ~0); - void lanc2_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); + static constexpr feature_type unemulated_features() { return feature::LAN; } + + uint8_t lanc1_r(offs_t offset); + void lanc1_w(offs_t offset, uint8_t data); + uint8_t lanc2_r(offs_t offset); + void lanc2_w(offs_t offset, uint8_t data); + + void reset_fpga_state(bool state); protected: + konami_gn676_lan_device(const machine_config &mconfig, const device_type type, const char *tag, device_t *owner, uint32_t clock = 0); + virtual void device_start() override; + virtual void device_reset() override; + + optional_device m_x76f041; private: - bool m_fpga_uploaded; - int m_lanc2_ram_r; - int m_lanc2_ram_w; - uint8_t m_lanc2_reg[3]; std::unique_ptr m_lanc2_ram; - required_shared_ptr m_work_ram; + uint8_t m_lanc2_reg[0x20]; + + bool m_fpga_uploaded; + bool m_fpga_waiting_firmware; + bool m_fpga_receiving; + bool m_fpga_is_stubbed; + bool m_fpga_reset_state; + + uint32_t m_fpga_firmware_size; + uint32_t m_fpga_firmware_crc; + + uint32_t m_lanc2_ram_r; + uint32_t m_lanc2_ram_w; + + uint16_t m_network_buffer_max_size; + uint8_t m_network_id; + + bool m_x76f041_enabled; + bool m_x76f041_read_enabled; + bool m_x76f041_rst_triggered; }; -DECLARE_DEVICE_TYPE(KONAMI_GN676_LAN, konami_gn676_lan_device) +class konami_gn676a_lan_device : public konami_gn676_lan_device +{ +public: + konami_gn676a_lan_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); +}; + +class konami_gn676b_lan_device : public konami_gn676_lan_device +{ +public: + konami_gn676b_lan_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + +protected: + virtual void device_add_mconfig(machine_config &config) override; +}; +DECLARE_DEVICE_TYPE(KONAMI_GN676A_LAN, konami_gn676a_lan_device) +DECLARE_DEVICE_TYPE(KONAMI_GN676B_LAN, konami_gn676b_lan_device) -#endif // MAME_MACHINE_KONAMI_GN676_LAN_H +#endif // MAME_KONAMI_GN676_LAN_H diff -Nru mame-0.250+dfsg.1/src/mame/konami/konamigx.cpp mame-0.251+dfsg.1/src/mame/konami/konamigx.cpp --- mame-0.250+dfsg.1/src/mame/konami/konamigx.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/konamigx.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4068,7 +4068,7 @@ GAME( 1994, fantjour, konamigx, gokuparo, gokuparo, konamigx_state, init_konamigx, ROT0, "Konami", "Fantastic Journey (ver EAA)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1994, fantjoura, fantjour, gokuparo, gokuparo, konamigx_state, init_konamigx, ROT0, "Konami", "Fantastic Journey (ver AAA)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1994, gokuparo, fantjour, gokuparo, gokuparo, konamigx_state, init_konamigx, ROT0, "Konami", "Gokujyou Parodius (ver JAD)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, gokuparo, fantjour, gokuparo, gokuparo, konamigx_state, init_konamigx, ROT0, "Konami", "Gokujou Parodius: Kako no Eikou o Motomete (ver JAD)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1994, crzcross, konamigx, gokuparo, puzldama, konamigx_state, init_posthack, ROT0, "Konami", "Crazy Cross (ver EAA)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1994, puzldama, crzcross, gokuparo, puzldama, konamigx_state, init_posthack, ROT0, "Konami", "Taisen Puzzle-dama (ver JAA)", MACHINE_IMPERFECT_GRAPHICS ) diff -Nru mame-0.250+dfsg.1/src/mame/konami/konmedal.cpp mame-0.251+dfsg.1/src/mame/konami/konmedal.cpp --- mame-0.250+dfsg.1/src/mame/konami/konmedal.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/konmedal.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1025,7 +1025,7 @@ /* sound hardware */ SPEAKER(config, "mono").front_center(); - K051649(config, "k051649", XTAL(24'000'000) / 6).add_route(ALL_OUTPUTS, "mono", 0.45); // divisor unknown + K051649(config, "k051649", XTAL(24'000'000) / 8).add_route(ALL_OUTPUTS, "mono", 0.45); // divisor unknown UPD7759(config, m_upd7759, XTAL(640'000)).add_route(ALL_OUTPUTS, "mono", 0.60); } diff -Nru mame-0.250+dfsg.1/src/mame/konami/konppc_jvshost.cpp mame-0.251+dfsg.1/src/mame/konami/konppc_jvshost.cpp --- mame-0.250+dfsg.1/src/mame/konami/konppc_jvshost.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/konppc_jvshost.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,93 @@ +// license:BSD-3-Clause +// copyright-holders:windyfairy +// +// JVS Host implementation shared between multiple PowerPC-based Konami platforms +// + +#include "emu.h" + +#include "konppc_jvshost.h" + +DEFINE_DEVICE_TYPE(KONPPC_JVS_HOST, konppc_jvs_host_device, "konppc_jvs_host", "Konami JVS Host (PowerPC Common)") + +konppc_jvs_host_device::konppc_jvs_host_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : jvs_host(mconfig, KONPPC_JVS_HOST, tag, owner, clock), + output_cb(*this) +{ +} + +void konppc_jvs_host_device::device_start() +{ + jvs_host::device_start(); + + output_cb.resolve_safe(); + + m_jvs_sdata = make_unique_clear(JVS_BUFFER_SIZE); + m_jvs_is_escape_byte = false; + m_jvs_sdata_ptr = 0; + + save_pointer(NAME(m_jvs_sdata), JVS_BUFFER_SIZE); + save_item(NAME(m_jvs_sdata_ptr)); + save_item(NAME(m_jvs_is_escape_byte)); +} + +void konppc_jvs_host_device::device_reset() +{ + jvs_host::device_reset(); + + m_jvs_is_escape_byte = false; + m_jvs_sdata_ptr = 0; +} + +READ_LINE_MEMBER( konppc_jvs_host_device::sense ) +{ + return !get_address_set_line(); +} + +void konppc_jvs_host_device::read() +{ + const uint8_t *data; + uint32_t length; + + get_encoded_reply(data, length); + + for (int i = 0; i < length; i++) + output_cb(data[i]); +} + +bool konppc_jvs_host_device::write(uint8_t data) +{ + bool is_escape_byte = m_jvs_is_escape_byte; + m_jvs_is_escape_byte = false; + + // Throw away the buffer and wait for the next sync marker instead of overflowing when + // a invalid packet is filling the entire buffer. + if (m_jvs_sdata_ptr >= JVS_BUFFER_SIZE) + m_jvs_sdata_ptr = 0; + + if (m_jvs_sdata_ptr == 0 && data != 0xe0) + return false; + + if (m_jvs_sdata_ptr > 0 && data == 0xd0) + { + m_jvs_is_escape_byte = true; + return false; + } + + m_jvs_sdata[m_jvs_sdata_ptr++] = is_escape_byte ? data + 1 : data; + + const bool is_complete_packet = m_jvs_sdata_ptr >= 5 + && m_jvs_sdata_ptr == m_jvs_sdata[2] + 3 + && m_jvs_sdata[0] == 0xe0 + && m_jvs_sdata[1] != 0x00 + && m_jvs_sdata[m_jvs_sdata_ptr - 1] == (std::accumulate(&m_jvs_sdata[1], &m_jvs_sdata[m_jvs_sdata_ptr - 1], 0) & 0xff); + if (is_complete_packet) + { + for (int i = 1; i < m_jvs_sdata_ptr - 1; i++) + push(m_jvs_sdata[i]); + commit_raw(); + m_jvs_sdata_ptr = 0; + } + + return is_complete_packet; +} diff -Nru mame-0.250+dfsg.1/src/mame/konami/konppc_jvshost.h mame-0.251+dfsg.1/src/mame/konami/konppc_jvshost.h --- mame-0.250+dfsg.1/src/mame/konami/konppc_jvshost.h 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/konppc_jvshost.h 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,40 @@ +// license:BSD-3-Clause +// copyright-holders:windyfairy +#ifndef MAME_KONAMI_KONPPC_JVSHOST_H +#define MAME_KONAMI_KONPPC_JVSHOST_H + +#pragma once + +#include "machine/jvshost.h" + +class konppc_jvs_host_device : public jvs_host +{ +public: + // construction/destruction + konppc_jvs_host_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + // configuration + auto output_callback() { return output_cb.bind(); } + + void read(); + bool write(uint8_t data); + + DECLARE_READ_LINE_MEMBER( sense ); + +protected: + virtual void device_start() override; + virtual void device_reset() override; + +private: + static constexpr int JVS_BUFFER_SIZE = 1024; + + devcb_write8 output_cb; + + std::unique_ptr m_jvs_sdata; + uint32_t m_jvs_sdata_ptr; + bool m_jvs_is_escape_byte; +}; + +DECLARE_DEVICE_TYPE(KONPPC_JVS_HOST, konppc_jvs_host_device) + +#endif // MAME_KONAMI_KONPPC_JVSHOST_H diff -Nru mame-0.250+dfsg.1/src/mame/konami/nwk-tr.cpp mame-0.251+dfsg.1/src/mame/konami/nwk-tr.cpp --- mame-0.250+dfsg.1/src/mame/konami/nwk-tr.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/nwk-tr.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -268,24 +268,28 @@ */ #include "emu.h" + +#include "k001604.h" +#include "k573mcal.h" +#include "konami_gn676_lan.h" +#include "konppc.h" +#include "konppc_jvshost.h" + #include "cpu/m68000/m68000.h" #include "cpu/powerpc/ppc.h" #include "cpu/sharc/sharc.h" #include "machine/adc1213x.h" #include "machine/k033906.h" -#include "konami_gn676_lan.h" -#include "konppc.h" #include "machine/timekpr.h" -//#include "machine/x76f041.h" +#include "machine/x76f041.h" #include "sound/k056800.h" #include "sound/rf5c400.h" -#include "k001604.h" #include "video/voodoo.h" + #include "emupal.h" #include "screen.h" #include "speaker.h" - namespace { class nwktr_state : public driver_device @@ -309,12 +313,15 @@ m_palette(*this, "palette"), m_generic_paletteram_32(*this, "paletteram"), m_sharc_dataram(*this, "sharc%u_dataram", 0U), - m_cg_view(*this, "cg_view") + m_cg_view(*this, "cg_view"), + m_jvs_host(*this, "jvs_host"), + m_gn676_lan(*this, "gn676_lan") { } - void thrilld(machine_config &config); void nwktr(machine_config &config); + void nwktr_lan_b(machine_config &config); + void init_nwktr(); void init_racingj(); void init_thrilld(); @@ -325,9 +332,10 @@ private: // TODO: Needs verification on real hardware static const int m_sound_timer_usec = 2400; + static constexpr int JVS_BUFFER_SIZE = 1024; required_shared_ptr m_work_ram; - required_device m_maincpu; + required_device m_maincpu; required_device m_audiocpu; required_device_array m_dsp; required_device m_k056800; @@ -343,6 +351,8 @@ required_shared_ptr m_generic_paletteram_32; optional_shared_ptr_array m_sharc_dataram; memory_view m_cg_view; + required_device m_jvs_host; + required_device m_gn676_lan; emu_timer *m_sound_irq_timer; bool m_exrgb; @@ -353,6 +363,7 @@ void soundtimer_en_w(uint16_t data); void soundtimer_count_w(uint16_t data); double adc12138_input_callback(uint8_t input); + void jamma_jvs_w(uint8_t data); TIMER_CALLBACK_MEMBER(sound_irq); @@ -402,7 +413,8 @@ r = m_in[2]->read(); break; case 3: - r = m_adc12138->do_r() | (m_adc12138->eoc_r() << 2); + r |= m_jvs_host->sense() << 7; + r |= m_adc12138->do_r() | (m_adc12138->eoc_r() << 2); break; case 4: r = m_dsw->read(); @@ -423,12 +435,21 @@ m_pcb_digit[offset] = bitswap<7>(~data , 0, 1, 2, 3, 4, 5, 6); break; + case 3: + /* + The bit used for JVSTXEN changes between 3 and 4 based on the lower 2 bits of IN2. + If m_in[2]->read() & 3 != 0, bit 4 is used. Otherwise, bit 3 is used. + */ + break; + case 4: { - int cs = (data >> 3) & 0x1; - int conv = (data >> 2) & 0x1; - int di = (data >> 1) & 0x1; - int sclk = data & 0x1; + m_gn676_lan->reset_fpga_state(BIT(data, 6)); + + int cs = BIT(data, 3); + int conv = BIT(data, 2); + int di = BIT(data, 1); + int sclk = BIT(data, 0); m_adc12138->cs_w(cs); m_adc12138->conv_w(conv); @@ -531,8 +552,8 @@ map(0x7d010000, 0x7d01ffff).w(FUNC(nwktr_state::sysreg_w)); map(0x7d020000, 0x7d021fff).rw("m48t58", FUNC(timekeeper_device::read), FUNC(timekeeper_device::write)); // M48T58Y RTC/NVRAM map(0x7d030000, 0x7d03000f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w)); - map(0x7d040000, 0x7d04ffff).rw("gn676_lan", FUNC(konami_gn676_lan_device::lanc1_r), FUNC(konami_gn676_lan_device::lanc1_w)); - map(0x7d050000, 0x7d05ffff).rw("gn676_lan", FUNC(konami_gn676_lan_device::lanc2_r), FUNC(konami_gn676_lan_device::lanc2_w)); + map(0x7d040000, 0x7d04ffff).rw(m_gn676_lan, FUNC(konami_gn676_lan_device::lanc1_r), FUNC(konami_gn676_lan_device::lanc1_w)); + map(0x7d050000, 0x7d05ffff).rw(m_gn676_lan, FUNC(konami_gn676_lan_device::lanc2_r), FUNC(konami_gn676_lan_device::lanc2_w)); map(0x7e000000, 0x7e7fffff).rom().region("datarom", 0); map(0x7f000000, 0x7f1fffff).rom().region("prgrom", 0); map(0x7fe00000, 0x7fffffff).rom().region("prgrom", 0); @@ -734,24 +755,45 @@ m_konppc->set_num_boards(2); m_konppc->set_cbboard_type(konppc_device::CGBOARD_TYPE_NWKTR); - KONAMI_GN676_LAN(config, "gn676_lan", 0, m_work_ram); + KONAMI_GN676A_LAN(config, m_gn676_lan, 0); + + KONPPC_JVS_HOST(config, m_jvs_host, 0); + m_jvs_host->output_callback().set([this](uint8_t c) { m_maincpu->ppc4xx_spu_receive_byte(c); }); } -void nwktr_state::thrilld(machine_config &config) +void nwktr_state::nwktr_lan_b(machine_config &config) { nwktr(config); + + KONAMI_GN676B_LAN(config.replace(), m_gn676_lan, 0); } /*****************************************************************************/ +void nwktr_state::jamma_jvs_w(uint8_t data) +{ + bool accepted = m_jvs_host->write(data); + if (accepted) + m_jvs_host->read(); +} + +/*****************************************************************************/ + +void nwktr_state::init_nwktr() +{ + m_maincpu->ppc4xx_spu_set_tx_handler(write8smo_delegate(*this, FUNC(nwktr_state::jamma_jvs_w))); +} + void nwktr_state::init_racingj() { + init_nwktr(); m_konppc->set_cgboard_texture_bank(0, "master_cgboard_bank", memregion("master_cgboard")->base()); m_konppc->set_cgboard_texture_bank(0, "slave_cgboard_bank", memregion("slave_cgboard")->base()); // for some reason, additional CG roms are located on the slave CG board... } void nwktr_state::init_thrilld() { + init_nwktr(); m_konppc->set_cgboard_texture_bank(0, "master_cgboard_bank", memregion("master_cgboard")->base()); m_konppc->set_cgboard_texture_bank(0, "slave_cgboard_bank", memregion("master_cgboard")->base()); // ...while this is not the case for thrilld } @@ -781,8 +823,89 @@ ROM_LOAD( "676a09.16p", 0x000000, 0x400000, CRC(f85c8dc6) SHA1(8b302c80be309b5cc68b75945fcd7b87a56a4c9b) ) ROM_LOAD( "676a10.14p", 0x400000, 0x400000, CRC(7b5b7828) SHA1(aec224d62e4b1e8fdb929d7947ce70d84ba676cf) ) - ROM_REGION(0x2000, "m48t58",0) - ROM_LOAD( "676jac_m48t58y.35d", 0x000000, 0x002000, CRC(47e1628c) SHA1(7c42d06ae2f2cd24d083890f333552cbf4f1d3c9) ) + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gq676ua_m48t58y.35d", 0x000000, 0x002000, CRC(cd182438) SHA1(101a4c4b7a9b4a4bb79ec793275c90b050780f6c) ) +ROM_END + +ROM_START(racingjj) + ROM_REGION32_BE(0x200000, "prgrom", 0) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("676gnc01.27p", 0x000000, 0x200000, CRC(690346b5) SHA1(157ab6788382ef4f5a8772f08819f54d0856fcc8) ) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("676a04.16t", 0x000000, 0x200000, CRC(d7808cb6) SHA1(0668fae5bb94cc120fe196d4b18200f7b512317f) ) + ROM_LOAD32_WORD_SWAP("676a05.14t", 0x000002, 0x200000, CRC(fb4de1ad) SHA1(f6aa4eb1b5d22901a2aaf899ed3237a9dfdc55b5) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // Master CG Board texture roms + ROM_LOAD32_WORD_SWAP( "676a13.8x", 0x000000, 0x400000, CRC(29077763) SHA1(ee087ca0d41966ca0fd10727055bb1dcd05a0873) ) + ROM_LOAD32_WORD_SWAP( "676a14.16x", 0x000002, 0x400000, CRC(50a7e3c0) SHA1(7468a66111a3ddf7c043cd400fa175cae5f65632) ) + + ROM_REGION32_BE(0x800000, "slave_cgboard", 0) // Slave CG Board texture roms + ROM_LOAD32_WORD_SWAP( "676a13.8x", 0x000000, 0x400000, CRC(29077763) SHA1(ee087ca0d41966ca0fd10727055bb1dcd05a0873) ) + ROM_LOAD32_WORD_SWAP( "676a14.16x", 0x000002, 0x400000, CRC(50a7e3c0) SHA1(7468a66111a3ddf7c043cd400fa175cae5f65632) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "676gna08.7s", 0x000000, 0x080000, CRC(8973f6f2) SHA1(f5648a7e0205f7e979ccacbb52936809ce14a184) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "676a09.16p", 0x000000, 0x400000, CRC(f85c8dc6) SHA1(8b302c80be309b5cc68b75945fcd7b87a56a4c9b) ) + ROM_LOAD( "676a10.14p", 0x400000, 0x400000, CRC(7b5b7828) SHA1(aec224d62e4b1e8fdb929d7947ce70d84ba676cf) ) + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gq676ja_m48t58y.35d", 0x000000, 0x002000, CRC(0b83d595) SHA1(852600a82f34b3cde378c166368c1fb07004203d) ) +ROM_END + +ROM_START(racingja) + ROM_REGION32_BE(0x200000, "prgrom", 0) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("676gnc01.27p", 0x000000, 0x200000, CRC(690346b5) SHA1(157ab6788382ef4f5a8772f08819f54d0856fcc8) ) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("676a04.16t", 0x000000, 0x200000, CRC(d7808cb6) SHA1(0668fae5bb94cc120fe196d4b18200f7b512317f) ) + ROM_LOAD32_WORD_SWAP("676a05.14t", 0x000002, 0x200000, CRC(fb4de1ad) SHA1(f6aa4eb1b5d22901a2aaf899ed3237a9dfdc55b5) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // Master CG Board texture roms + ROM_LOAD32_WORD_SWAP( "676a13.8x", 0x000000, 0x400000, CRC(29077763) SHA1(ee087ca0d41966ca0fd10727055bb1dcd05a0873) ) + ROM_LOAD32_WORD_SWAP( "676a14.16x", 0x000002, 0x400000, CRC(50a7e3c0) SHA1(7468a66111a3ddf7c043cd400fa175cae5f65632) ) + + ROM_REGION32_BE(0x800000, "slave_cgboard", 0) // Slave CG Board texture roms + ROM_LOAD32_WORD_SWAP( "676a13.8x", 0x000000, 0x400000, CRC(29077763) SHA1(ee087ca0d41966ca0fd10727055bb1dcd05a0873) ) + ROM_LOAD32_WORD_SWAP( "676a14.16x", 0x000002, 0x400000, CRC(50a7e3c0) SHA1(7468a66111a3ddf7c043cd400fa175cae5f65632) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "676gna08.7s", 0x000000, 0x080000, CRC(8973f6f2) SHA1(f5648a7e0205f7e979ccacbb52936809ce14a184) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "676a09.16p", 0x000000, 0x400000, CRC(f85c8dc6) SHA1(8b302c80be309b5cc68b75945fcd7b87a56a4c9b) ) + ROM_LOAD( "676a10.14p", 0x400000, 0x400000, CRC(7b5b7828) SHA1(aec224d62e4b1e8fdb929d7947ce70d84ba676cf) ) + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gq676aa_m48t58y.35d", 0x000000, 0x002000, CRC(0eb8209d) SHA1(eb5bc411378423f05f2708d673d5b06687c59dbf) ) +ROM_END + +ROM_START(racingje) + ROM_REGION32_BE(0x200000, "prgrom", 0) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("676gnc01.27p", 0x000000, 0x200000, CRC(690346b5) SHA1(157ab6788382ef4f5a8772f08819f54d0856fcc8) ) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("676a04.16t", 0x000000, 0x200000, CRC(d7808cb6) SHA1(0668fae5bb94cc120fe196d4b18200f7b512317f) ) + ROM_LOAD32_WORD_SWAP("676a05.14t", 0x000002, 0x200000, CRC(fb4de1ad) SHA1(f6aa4eb1b5d22901a2aaf899ed3237a9dfdc55b5) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // Master CG Board texture roms + ROM_LOAD32_WORD_SWAP( "676a13.8x", 0x000000, 0x400000, CRC(29077763) SHA1(ee087ca0d41966ca0fd10727055bb1dcd05a0873) ) + ROM_LOAD32_WORD_SWAP( "676a14.16x", 0x000002, 0x400000, CRC(50a7e3c0) SHA1(7468a66111a3ddf7c043cd400fa175cae5f65632) ) + + ROM_REGION32_BE(0x800000, "slave_cgboard", 0) // Slave CG Board texture roms + ROM_LOAD32_WORD_SWAP( "676a13.8x", 0x000000, 0x400000, CRC(29077763) SHA1(ee087ca0d41966ca0fd10727055bb1dcd05a0873) ) + ROM_LOAD32_WORD_SWAP( "676a14.16x", 0x000002, 0x400000, CRC(50a7e3c0) SHA1(7468a66111a3ddf7c043cd400fa175cae5f65632) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "676gna08.7s", 0x000000, 0x080000, CRC(8973f6f2) SHA1(f5648a7e0205f7e979ccacbb52936809ce14a184) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "676a09.16p", 0x000000, 0x400000, CRC(f85c8dc6) SHA1(8b302c80be309b5cc68b75945fcd7b87a56a4c9b) ) + ROM_LOAD( "676a10.14p", 0x400000, 0x400000, CRC(7b5b7828) SHA1(aec224d62e4b1e8fdb929d7947ce70d84ba676cf) ) + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gq676ea_m48t58y.35d", 0x000000, 0x002000, CRC(c490ffc1) SHA1(170d736b7a07300f4e560cd384c8fd41f2aaaeff) ) ROM_END ROM_START(racingj2) @@ -809,11 +932,42 @@ ROM_LOAD( "888a09.16p", 0x000000, 0x400000, CRC(11e2fed2) SHA1(24b8a367b59fedb62c56f066342f2fa87b135fc5) ) ROM_LOAD( "888a10.14p", 0x400000, 0x400000, CRC(328ce610) SHA1(dbbc779a1890c53298c0db129d496df048929496) ) - ROM_REGION( 0x0000084, "laneeprom", 0 ) - ROM_LOAD( "ge888ea.2g", 0x000000, 0x000084, NO_DUMP ) + ROM_REGION( 0x0000224, "gn676_lan:eeprom", 0 ) + ROM_LOAD( "ge888ua.2g", 0x000000, 0x000224, NO_DUMP ) // Unused? - ROM_REGION(0x2000, "m48t58",0) - ROM_LOAD( "676eae_m48t58y.35d", 0x000000, 0x002000, CRC(f691f5ab) SHA1(e81f652c5caa2caa8bd1c6d6db488d849bda058e) ) + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gq888ua_m48t58y.35d", 0x000000, 0x002000, CRC(1903f6c1) SHA1(f8b6dedf585c014044c530b73014915874d6fb71) ) +ROM_END + +ROM_START(racingj2a) + ROM_REGION32_BE(0x200000, "prgrom", 0) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("888a01.27p", 0x000000, 0x200000, CRC(d077890a) SHA1(08b252324cf46fbcdb95e8f9312287920cd87c5d) ) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP( "676a04.16t", 0x000000, 0x200000, CRC(d7808cb6) SHA1(0668fae5bb94cc120fe196d4b18200f7b512317f) ) + ROM_LOAD32_WORD_SWAP( "676a05.14t", 0x000002, 0x200000, CRC(fb4de1ad) SHA1(f6aa4eb1b5d22901a2aaf899ed3237a9dfdc55b5) ) + ROM_LOAD32_WORD_SWAP( "888a06.12t", 0x400000, 0x200000, CRC(00cbec4d) SHA1(1ce7807d86e90edbf4eecba462a27c725f5ad862) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // Master CG Board texture roms + ROM_LOAD32_WORD_SWAP( "888a13.8x", 0x000000, 0x400000, CRC(2292f530) SHA1(0f4d1332708fd5366a065e0a928cc9610558b42d) ) + ROM_LOAD32_WORD_SWAP( "888a14.16x", 0x000002, 0x400000, CRC(6a834a26) SHA1(d1fbd7ae6afd05f0edac4efde12a5a45aa2bc7df) ) + + ROM_REGION32_BE(0x800000, "slave_cgboard", 0) // Slave CG Board texture roms + ROM_LOAD32_WORD_SWAP( "888a13.8x", 0x000000, 0x400000, CRC(2292f530) SHA1(0f4d1332708fd5366a065e0a928cc9610558b42d) ) + ROM_LOAD32_WORD_SWAP( "888a14.16x", 0x000002, 0x400000, CRC(6a834a26) SHA1(d1fbd7ae6afd05f0edac4efde12a5a45aa2bc7df) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "888a08.7s", 0x000000, 0x080000, CRC(55fbea65) SHA1(ad953f758181731efccadcabc4326e6634c359e8) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "888a09.16p", 0x000000, 0x400000, CRC(11e2fed2) SHA1(24b8a367b59fedb62c56f066342f2fa87b135fc5) ) + ROM_LOAD( "888a10.14p", 0x400000, 0x400000, CRC(328ce610) SHA1(dbbc779a1890c53298c0db129d496df048929496) ) + + ROM_REGION( 0x0000224, "gn676_lan:eeprom", 0 ) + ROM_LOAD( "ge888aa.2g", 0x000000, 0x000224, NO_DUMP ) // Unused? + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gq888aa_m48t58y.35d", 0x000000, 0x002000, CRC(85e8a67d) SHA1(fd799918437ed5d80247c58dfec7006781af657f) ) ROM_END ROM_START(racingj2j) @@ -840,11 +994,42 @@ ROM_LOAD( "888a09.16p", 0x000000, 0x400000, CRC(11e2fed2) SHA1(24b8a367b59fedb62c56f066342f2fa87b135fc5) ) ROM_LOAD( "888a10.14p", 0x400000, 0x400000, CRC(328ce610) SHA1(dbbc779a1890c53298c0db129d496df048929496) ) - ROM_REGION( 0x0000084, "laneeprom", 0 ) - ROM_LOAD( "ge888ja.2g", 0x000000, 0x000084, NO_DUMP ) + ROM_REGION( 0x0000224, "gn676_lan:eeprom", 0 ) + ROM_LOAD( "ge888ja.2g", 0x000000, 0x000224, NO_DUMP ) + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gq888ja_m48t58y.35d", 0x000000, 0x002000, CRC(0fd00769) SHA1(7d7ea94066bca2e589c0fe0f69c620a8f97916cc) ) +ROM_END + +ROM_START(racingj2e) + ROM_REGION32_BE(0x200000, "prgrom", 0) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("888a01.27p", 0x000000, 0x200000, CRC(d077890a) SHA1(08b252324cf46fbcdb95e8f9312287920cd87c5d) ) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP( "676a04.16t", 0x000000, 0x200000, CRC(d7808cb6) SHA1(0668fae5bb94cc120fe196d4b18200f7b512317f) ) + ROM_LOAD32_WORD_SWAP( "676a05.14t", 0x000002, 0x200000, CRC(fb4de1ad) SHA1(f6aa4eb1b5d22901a2aaf899ed3237a9dfdc55b5) ) + ROM_LOAD32_WORD_SWAP( "888a06.12t", 0x400000, 0x200000, CRC(00cbec4d) SHA1(1ce7807d86e90edbf4eecba462a27c725f5ad862) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // Master CG Board texture roms + ROM_LOAD32_WORD_SWAP( "888a13.8x", 0x000000, 0x400000, CRC(2292f530) SHA1(0f4d1332708fd5366a065e0a928cc9610558b42d) ) + ROM_LOAD32_WORD_SWAP( "888a14.16x", 0x000002, 0x400000, CRC(6a834a26) SHA1(d1fbd7ae6afd05f0edac4efde12a5a45aa2bc7df) ) + + ROM_REGION32_BE(0x800000, "slave_cgboard", 0) // Slave CG Board texture roms + ROM_LOAD32_WORD_SWAP( "888a13.8x", 0x000000, 0x400000, CRC(2292f530) SHA1(0f4d1332708fd5366a065e0a928cc9610558b42d) ) + ROM_LOAD32_WORD_SWAP( "888a14.16x", 0x000002, 0x400000, CRC(6a834a26) SHA1(d1fbd7ae6afd05f0edac4efde12a5a45aa2bc7df) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "888a08.7s", 0x000000, 0x080000, CRC(55fbea65) SHA1(ad953f758181731efccadcabc4326e6634c359e8) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "888a09.16p", 0x000000, 0x400000, CRC(11e2fed2) SHA1(24b8a367b59fedb62c56f066342f2fa87b135fc5) ) + ROM_LOAD( "888a10.14p", 0x400000, 0x400000, CRC(328ce610) SHA1(dbbc779a1890c53298c0db129d496df048929496) ) + + ROM_REGION( 0x0000224, "gn676_lan:eeprom", 0 ) + ROM_LOAD( "ge888ea.2g", 0x000000, 0x000224, NO_DUMP ) - ROM_REGION(0x2000, "m48t58",0) - ROM_LOAD( "676jae_m48t58y.35d", 0x000000, 0x002000, CRC(1aa43a1f) SHA1(814b691b8a358bf1545a13d595d17070e612e9a4) ) + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gq888ea_m48t58y.35d", 0x000000, 0x002000, CRC(108b2d38) SHA1(7c55f592a0fc2b6809ec5d128e78283b77694345) ) ROM_END ROM_START(thrilld) @@ -866,11 +1051,141 @@ ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) - ROM_REGION( 0x0000084, "laneeprom", 0 ) - ROM_LOAD( "gc713jc.2g", 0x000000, 0x000084, NO_DUMP ) + ROM_REGION( 0x000224, "gn676_lan:eeprom", 0) + ROM_LOAD( "gc713ud.2g", 0x000000, 0x000224, BAD_DUMP CRC(fc9563f5) SHA1(1ed08482024f6d4353d4e4ea6c8092f6625d699b) ) // hand built - ROM_REGION(0x2000, "m48t58",0) - ROM_LOAD( "713jae_m48t58y.35d", 0x000000, 0x002000, CRC(5d8fbcb2) SHA1(74ad91544d2a200cf599a565005476623075e7d6) ) + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gm676ua_m48t58y.35d", 0x000000, 0x002000, BAD_DUMP CRC(2aeeda76) SHA1(ed63b5ebbd9ebb90afd7fdebc9ad4b4d9966012b) ) // hand built +ROM_END + +ROM_START(thrilldj) + ROM_REGION32_BE(0x200000, "prgrom", 0) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("713be01.27p", 0x000000, 0x200000, CRC(d84a7723) SHA1(f4e9e08591b7e5e8419266dbe744d56a185384ed) ) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) ) + ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms + ROM_LOAD32_WORD_SWAP( "713a13.8x", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.16x", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) + ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) + + ROM_REGION( 0x000224, "gn676_lan:eeprom", 0) + ROM_LOAD( "gc713jc.2g", 0x000000, 0x000224, BAD_DUMP CRC(98e326b7) SHA1(af532cf84eca02a3ed0bd0d49c2b142c7f21760c) ) // hand built + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gm676ja_m48t58y.35d", 0x000000, 0x002000, BAD_DUMP CRC(e6eafce5) SHA1(167d957f7cf1e94a12070739a4103977512f6737) ) // hand built +ROM_END + +ROM_START(thrilldja) + ROM_REGION32_BE(0x200000, "prgrom", 0) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("713be01.27p", 0x000000, 0x200000, CRC(d84a7723) SHA1(f4e9e08591b7e5e8419266dbe744d56a185384ed) ) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) ) + ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms + ROM_LOAD32_WORD_SWAP( "713a13.8x", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.16x", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) + ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) + + ROM_REGION( 0x000224, "gn676_lan:eeprom", 0) + ROM_LOAD( "gc713ja.2g", 0x000000, 0x000224, BAD_DUMP CRC(600e21e1) SHA1(ca7b30ed4b564aee17a326d1d9729656b5101249) ) // hand built + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gm676ja_m48t58y.35d", 0x000000, 0x002000, BAD_DUMP CRC(e6eafce5) SHA1(167d957f7cf1e94a12070739a4103977512f6737) ) // hand built +ROM_END + +ROM_START(thrillde) + ROM_REGION32_BE(0x200000, "prgrom", 0) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("713be01.27p", 0x000000, 0x200000, CRC(d84a7723) SHA1(f4e9e08591b7e5e8419266dbe744d56a185384ed) ) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) ) + ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms + ROM_LOAD32_WORD_SWAP( "713a13.8x", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.16x", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) + ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) + + ROM_REGION( 0x000224, "gn676_lan:eeprom", 0) + ROM_LOAD( "gc713ed.2g", 0x000000, 0x000224, BAD_DUMP CRC(8a5bdf3c) SHA1(7cb9b0e30177caf8a623af5ee6ff95ead5eae4f2) ) // hand built + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gm676ea_m48t58y.35d", 0x000000, 0x002000, BAD_DUMP CRC(b4afab84) SHA1(e8c653df7ce0a5cb77bf7aedeca4c4ff91669047) ) // hand built +ROM_END + +ROM_START(thrillda) + ROM_REGION32_BE(0x200000, "prgrom", 0) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("713be01.27p", 0x000000, 0x200000, CRC(d84a7723) SHA1(f4e9e08591b7e5e8419266dbe744d56a185384ed) ) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) ) + ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms + ROM_LOAD32_WORD_SWAP( "713a13.8x", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.16x", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) + ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) + + ROM_REGION( 0x000224, "gn676_lan:eeprom", 0) + ROM_LOAD( "gc713ac.2g", 0x000000, 0x000224, BAD_DUMP CRC(8db4eed6) SHA1(f99120c18435866354c5deadfacd47453fb53c15) ) // hand built + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gm676aa_m48t58y.35d", 0x000000, 0x002000, BAD_DUMP CRC(c011dcea) SHA1(39cbbe518bfc256cdb72bdaece03c539f705c807) ) // hand built +ROM_END + +ROM_START(thrilldab) + ROM_REGION32_BE(0x200000, "prgrom", 0) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("713be01.27p", 0x000000, 0x200000, CRC(d84a7723) SHA1(f4e9e08591b7e5e8419266dbe744d56a185384ed) ) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) ) + ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms + ROM_LOAD32_WORD_SWAP( "713a13.8x", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.16x", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) + ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) + + ROM_REGION( 0x000224, "gn676_lan:eeprom", 0) + ROM_LOAD( "gc713ab.2g", 0x000000, 0x000224, BAD_DUMP CRC(f1c26d7d) SHA1(2a3f45d18bc8e9278d077118d478a501531011f4) ) // hand built + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gm676aa_m48t58y.35d", 0x000000, 0x002000, BAD_DUMP CRC(c011dcea) SHA1(39cbbe518bfc256cdb72bdaece03c539f705c807) ) // hand built ROM_END ROM_START(thrilldb) @@ -882,8 +1197,8 @@ ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms - ROM_LOAD32_WORD_SWAP( "713a13.8x", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) - ROM_LOAD32_WORD_SWAP( "713a14.16x", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + ROM_LOAD32_WORD_SWAP( "713a13.8x", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.16x", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) @@ -892,11 +1207,63 @@ ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) - ROM_REGION( 0x0000084, "laneeprom", 0 ) - ROM_LOAD( "gc713jc.2g", 0x000000, 0x000084, NO_DUMP ) + ROM_REGION( 0x000224, "gn676_lan:eeprom", 0) + ROM_LOAD( "gc713ud.2g", 0x000000, 0x000224, BAD_DUMP CRC(fc9563f5) SHA1(1ed08482024f6d4353d4e4ea6c8092f6625d699b) ) // hand built - ROM_REGION(0x2000, "m48t58",0) - ROM_LOAD( "713jab_m48t58y.35d", 0x000000, 0x002000, CRC(5d8fbcb2) SHA1(74ad91544d2a200cf599a565005476623075e7d6) ) + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gm676ua_m48t58y.35d", 0x000000, 0x002000, BAD_DUMP CRC(2aeeda76) SHA1(ed63b5ebbd9ebb90afd7fdebc9ad4b4d9966012b) ) // hand built +ROM_END + +ROM_START(thrilldbj) + ROM_REGION32_BE(0x200000, "prgrom", 0) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("713bb01.27p", 0x000000, 0x200000, CRC(535fe4e8) SHA1(acd8194a4dafce289dbdfd874f0b799f25aeb73f) ) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) ) + ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms + ROM_LOAD32_WORD_SWAP( "713a13.8x", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.16x", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) + ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) + + ROM_REGION( 0x000224, "gn676_lan:eeprom", 0) + ROM_LOAD( "gc713jc.2g", 0x000000, 0x000224, BAD_DUMP CRC(98e326b7) SHA1(af532cf84eca02a3ed0bd0d49c2b142c7f21760c) ) // hand built + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gm676ja_m48t58y.35d", 0x000000, 0x002000, BAD_DUMP CRC(e6eafce5) SHA1(167d957f7cf1e94a12070739a4103977512f6737) ) // hand built +ROM_END + +ROM_START(thrilldbja) + ROM_REGION32_BE(0x200000, "prgrom", 0) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("713bb01.27p", 0x000000, 0x200000, CRC(535fe4e8) SHA1(acd8194a4dafce289dbdfd874f0b799f25aeb73f) ) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) ) + ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms + ROM_LOAD32_WORD_SWAP( "713a13.8x", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.16x", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) + ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) + + ROM_REGION( 0x000224, "gn676_lan:eeprom", 0) + ROM_LOAD( "gc713ja.2g", 0x000000, 0x000224, BAD_DUMP CRC(600e21e1) SHA1(ca7b30ed4b564aee17a326d1d9729656b5101249) ) // hand built + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gm676ja_m48t58y.35d", 0x000000, 0x002000, BAD_DUMP CRC(e6eafce5) SHA1(167d957f7cf1e94a12070739a4103977512f6737) ) // hand built ROM_END ROM_START(thrilldbe) @@ -908,8 +1275,60 @@ ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms - ROM_LOAD32_WORD_SWAP( "713a13.8x", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) - ROM_LOAD32_WORD_SWAP( "713a14.16x", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + ROM_LOAD32_WORD_SWAP( "713a13.8x", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.16x", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) + ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) + + ROM_REGION( 0x000224, "gn676_lan:eeprom", 0) + ROM_LOAD( "gc713ed.2g", 0x000000, 0x000224, BAD_DUMP CRC(8a5bdf3c) SHA1(7cb9b0e30177caf8a623af5ee6ff95ead5eae4f2) ) // hand built + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gm676ea_m48t58y.35d", 0x000000, 0x002000, BAD_DUMP CRC(b4afab84) SHA1(e8c653df7ce0a5cb77bf7aedeca4c4ff91669047) ) // hand built +ROM_END + +ROM_START(thrilldba) + ROM_REGION32_BE(0x200000, "prgrom", 0) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("713bb01.27p", 0x000000, 0x200000, CRC(535fe4e8) SHA1(acd8194a4dafce289dbdfd874f0b799f25aeb73f) ) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) ) + ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms + ROM_LOAD32_WORD_SWAP( "713a13.8x", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.16x", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) + + ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms + ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) + + ROM_REGION16_LE(0x1000000, "rfsnd", 0) // PCM sample roms + ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) + ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) + + ROM_REGION( 0x000224, "gn676_lan:eeprom", 0) + ROM_LOAD( "gc713ac.2g", 0x000000, 0x000224, BAD_DUMP CRC(8db4eed6) SHA1(f99120c18435866354c5deadfacd47453fb53c15) ) // hand built + + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gm676aa_m48t58y.35d", 0x000000, 0x002000, BAD_DUMP CRC(c011dcea) SHA1(39cbbe518bfc256cdb72bdaece03c539f705c807) ) // hand built +ROM_END + +ROM_START(thrilldbab) + ROM_REGION32_BE(0x200000, "prgrom", 0) // PowerPC program roms + ROM_LOAD16_WORD_SWAP("713bb01.27p", 0x000000, 0x200000, CRC(535fe4e8) SHA1(acd8194a4dafce289dbdfd874f0b799f25aeb73f) ) + + ROM_REGION32_BE(0x800000, "datarom", 0) // Data roms + ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) ) + ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) ) + + ROM_REGION32_BE(0x800000, "master_cgboard", 0) // CG Board texture roms + ROM_LOAD32_WORD_SWAP( "713a13.8x", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) ) + ROM_LOAD32_WORD_SWAP( "713a14.16x", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) ) ROM_REGION(0x80000, "audiocpu", 0) // 68k program roms ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) ) @@ -918,11 +1337,11 @@ ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) ) ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) ) - ROM_REGION( 0x0000084, "laneeprom", 0 ) - ROM_LOAD( "gc713ec.2g", 0x000000, 0x000084, NO_DUMP ) + ROM_REGION( 0x000224, "gn676_lan:eeprom", 0) + ROM_LOAD( "gc713ab.2g", 0x000000, 0x000224, BAD_DUMP CRC(f1c26d7d) SHA1(2a3f45d18bc8e9278d077118d478a501531011f4) ) // hand built - ROM_REGION(0x2000, "m48t58",0) - ROM_LOAD( "713eaa_m48t58y.35d", 0x000000, 0x002000, CRC(056ea8fa) SHA1(23574e0c1d011dab8644f3d98763d4a2d11a05b3) ) + ROM_REGION(0x2000, "m48t58", 0) + ROM_LOAD( "gm676aa_m48t58y.35d", 0x000000, 0x002000, BAD_DUMP CRC(c011dcea) SHA1(39cbbe518bfc256cdb72bdaece03c539f705c807) ) // hand built ROM_END } // Anonymous namespace @@ -930,11 +1349,35 @@ /*****************************************************************************/ -#define GAME_FLAGS (MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NODEVICE_LAN ) +#define GAME_FLAGS (MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1998, racingj, 0, nwktr, nwktr, nwktr_state, init_racingj, ROT0, "Konami", "Racing Jam (JAC)", GAME_FLAGS ) -GAME( 1998, racingj2, racingj, nwktr, nwktr, nwktr_state, init_racingj, ROT0, "Konami", "Racing Jam: Chapter 2 (EAE)", GAME_FLAGS ) -GAME( 1998, racingj2j, racingj, nwktr, nwktr, nwktr_state, init_racingj, ROT0, "Konami", "Racing Jam: Chapter 2 (JAE)", GAME_FLAGS ) -GAME( 1998, thrilld, 0, thrilld, nwktr, nwktr_state, init_thrilld, ROT0, "Konami", "Thrill Drive (JAE)", GAME_FLAGS ) -GAME( 1998, thrilldb, thrilld, thrilld, nwktr, nwktr_state, init_thrilld, ROT0, "Konami", "Thrill Drive (JAB)", GAME_FLAGS ) -GAME( 1998, thrilldbe, thrilld, thrilld, nwktr, nwktr_state, init_thrilld, ROT0, "Konami", "Thrill Drive (EAB)", GAME_FLAGS ) +// GYxxx, GNxxx -> 5+R gear shift, clutch pedal, left/right panel buttons, hand brake lever +// GPxxx, GExxx, GMxxx -> up/down gear shift, no left or right panel buttons, no clutch, hand brake lever +// GQxxx -> up/down gear shift, no left or right panel buttons, no clutch, no hand brake lever +// GQ picked because it uses the least number of devices that need to be emulated for controls and boots without device errors. +// Change the first two bytes in the NVRAM and fix the checksum at 0x0e-0x0f (calculated as the negated sum of 0x00-0x0e as 16-bit big endian values) +// to generate new NVRAMs in the future when more of the hardware is emulated. +GAME( 1998, racingj, 0, nwktr, nwktr, nwktr_state, init_racingj, ROT0, "Konami", "Racing Jam (GQ676UAC)", GAME_FLAGS ) +GAME( 1998, racingje, racingj, nwktr, nwktr, nwktr_state, init_racingj, ROT0, "Konami", "Racing Jam (GQ676EAC)", GAME_FLAGS ) +GAME( 1998, racingjj, racingj, nwktr, nwktr, nwktr_state, init_racingj, ROT0, "Konami", "Racing Jam (GQ676JAC)", GAME_FLAGS ) +GAME( 1998, racingja, racingj, nwktr, nwktr, nwktr_state, init_racingj, ROT0, "Konami", "Racing Jam (GQ676AAC)", GAME_FLAGS ) +GAME( 1998, racingj2, racingj, nwktr_lan_b, nwktr, nwktr_state, init_racingj, ROT0, "Konami", "Racing Jam: Chapter 2 (GQ888UAA)", GAME_FLAGS ) +GAME( 1998, racingj2e, racingj, nwktr_lan_b, nwktr, nwktr_state, init_racingj, ROT0, "Konami", "Racing Jam: Chapter 2 (GQ888EAA)", GAME_FLAGS ) +GAME( 1998, racingj2j, racingj, nwktr_lan_b, nwktr, nwktr_state, init_racingj, ROT0, "Konami", "Racing Jam: Chapter 2 (GQ888JAA)", GAME_FLAGS ) +GAME( 1998, racingj2a, racingj, nwktr_lan_b, nwktr, nwktr_state, init_racingj, ROT0, "Konami", "Racing Jam: Chapter 2 (GQ888AAA)", GAME_FLAGS ) + +// JAx and ABx revisions are for the DX cabinet type with a full 5+R type gear shifter and a clutch pedal. +// The EDx version asks you to select if you have a hand brake lever installed, a clutch pedal installed, +// gear shifter type (up/down, 4 pos, or 5+R), and gear shifter's display position. +GAME( 1998, thrilld, 0, nwktr_lan_b, nwktr, nwktr_state, init_thrilld, ROT0, "Konami", "Thrill Drive (UDE)", GAME_FLAGS ) +GAME( 1998, thrilldj, thrilld, nwktr_lan_b, nwktr, nwktr_state, init_thrilld, ROT0, "Konami", "Thrill Drive (JCE)", GAME_FLAGS ) +GAME( 1998, thrilldja, thrilld, nwktr_lan_b, nwktr, nwktr_state, init_thrilld, ROT0, "Konami", "Thrill Drive (JAE)", GAME_FLAGS ) +GAME( 1998, thrillde, thrilld, nwktr_lan_b, nwktr, nwktr_state, init_thrilld, ROT0, "Konami", "Thrill Drive (EDE)", GAME_FLAGS ) +GAME( 1998, thrillda, thrilld, nwktr_lan_b, nwktr, nwktr_state, init_thrilld, ROT0, "Konami", "Thrill Drive (ACE)", GAME_FLAGS ) +GAME( 1998, thrilldab, thrilld, nwktr_lan_b, nwktr, nwktr_state, init_thrilld, ROT0, "Konami", "Thrill Drive (ABE)", GAME_FLAGS ) +GAME( 1998, thrilldb, thrilld, nwktr_lan_b, nwktr, nwktr_state, init_thrilld, ROT0, "Konami", "Thrill Drive (UDB)", GAME_FLAGS ) +GAME( 1998, thrilldbj, thrilld, nwktr_lan_b, nwktr, nwktr_state, init_thrilld, ROT0, "Konami", "Thrill Drive (JCB)", GAME_FLAGS ) +GAME( 1998, thrilldbja, thrilld, nwktr_lan_b, nwktr, nwktr_state, init_thrilld, ROT0, "Konami", "Thrill Drive (JAB)", GAME_FLAGS ) +GAME( 1998, thrilldbe, thrilld, nwktr_lan_b, nwktr, nwktr_state, init_thrilld, ROT0, "Konami", "Thrill Drive (EDB)", GAME_FLAGS ) +GAME( 1998, thrilldba, thrilld, nwktr_lan_b, nwktr, nwktr_state, init_thrilld, ROT0, "Konami", "Thrill Drive (ACB)", GAME_FLAGS ) +GAME( 1998, thrilldbab, thrilld, nwktr_lan_b, nwktr, nwktr_state, init_thrilld, ROT0, "Konami", "Thrill Drive (ABB)", GAME_FLAGS ) diff -Nru mame-0.250+dfsg.1/src/mame/konami/overdriv.cpp mame-0.251+dfsg.1/src/mame/konami/overdriv.cpp --- mame-0.250+dfsg.1/src/mame/konami/overdriv.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/overdriv.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -143,7 +143,7 @@ void overdriv_state::eeprom_w(offs_t offset, uint16_t data, uint16_t mem_mask) { -//logerror("%s: write %04x to eeprom_w\n",machine().describe_context(),data); + //logerror("%s: write %04x to eeprom_w\n",machine().describe_context(),data); if (ACCESSING_BITS_0_7) { /* bit 0 is data */ diff -Nru mame-0.250+dfsg.1/src/mame/konami/parodius.cpp mame-0.251+dfsg.1/src/mame/konami/parodius.cpp --- mame-0.250+dfsg.1/src/mame/konami/parodius.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/parodius.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -16,7 +16,7 @@ #include "k053251.h" #include "konami_helper.h" -#include "cpu/m6809/konami.h" // for the callback and the firq irq definition +#include "cpu/m6809/konami.h" #include "cpu/z80/z80.h" #include "machine/bankdev.h" #include "machine/watchdog.h" @@ -234,7 +234,7 @@ map(0x3fc4, 0x3fc4).w(FUNC(parodius_state::videobank_w)); map(0x3fc8, 0x3fc8).w(FUNC(parodius_state::sh_irqtrigger_w)); map(0x3fcc, 0x3fcd).rw("k053260", FUNC(k053260_device::main_read), FUNC(k053260_device::main_write)); - map(0x6000, 0x9fff).bankr(m_mainbank); // banked ROM + map(0x6000, 0x9fff).bankr(m_mainbank); map(0xa000, 0xffff).rom().region("maincpu", 0x3a000); } @@ -261,7 +261,7 @@ static INPUT_PORTS_START( parodius ) PORT_START("P1") - KONAMI8_ALT_B123(1) // button1 = power-up, button2 = shoot, button3 = missile + KONAMI8_ALT_B123(1) // button1 = power-up, button2 = shoot, button3 = missile PORT_START("P2") KONAMI8_ALT_B123(2) @@ -355,7 +355,7 @@ void parodius_state::parodius(machine_config &config) { // basic machine hardware - KONAMI(config, m_maincpu, 3000000); // 053248 + KONAMI(config, m_maincpu, 12000000); // 053248 m_maincpu->set_addrmap(AS_PROGRAM, &parodius_state::main_map); m_maincpu->line().set(FUNC(parodius_state::banking_callback)); @@ -496,7 +496,8 @@ ***************************************************************************/ -GAME( 1990, parodius, 0, parodius, parodius, parodius_state, empty_init, ROT0, "Konami", "Parodius DA! (World, set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1990, parodiuse, parodius, parodius, parodius, parodius_state, empty_init, ROT0, "Konami", "Parodius DA! (World, set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1990, parodiusj, parodius, parodius, parodius, parodius_state, empty_init, ROT0, "Konami", "Parodius DA! (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1990, parodiusa, parodius, parodius, parodius, parodius_state, empty_init, ROT0, "Konami", "Parodius DA! (Asia)", MACHINE_SUPPORTS_SAVE ) +// note that export versions kept in the Japanese titlescreen +GAME( 1990, parodius, 0, parodius, parodius, parodius_state, empty_init, ROT0, "Konami", "Parodius Da!: Shinwa kara Owarai e (World, set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1990, parodiuse, parodius, parodius, parodius, parodius_state, empty_init, ROT0, "Konami", "Parodius Da!: Shinwa kara Owarai e (World, set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1990, parodiusj, parodius, parodius, parodius, parodius_state, empty_init, ROT0, "Konami", "Parodius Da!: Shinwa kara Owarai e (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1990, parodiusa, parodius, parodius, parodius, parodius_state, empty_init, ROT0, "Konami", "Parodius Da!: Shinwa kara Owarai e (Asia)", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/konami/rollerg.cpp mame-0.251+dfsg.1/src/mame/konami/rollerg.cpp --- mame-0.250+dfsg.1/src/mame/konami/rollerg.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/rollerg.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -17,7 +17,7 @@ #include "k053244_k053245.h" #include "konami_helper.h" -#include "cpu/m6809/konami.h" // for the callback and the firq irq definition +#include "cpu/m6809/konami.h" #include "cpu/z80/z80.h" #include "machine/k053252.h" #include "machine/watchdog.h" @@ -351,7 +351,7 @@ void rollerg_state::rollerg(machine_config &config) { // basic machine hardware - KONAMI(config, m_maincpu, 24_MHz_XTAL / 8); // divider not verified + KONAMI(config, m_maincpu, 24_MHz_XTAL / 2); // divider not verified m_maincpu->set_addrmap(AS_PROGRAM, &rollerg_state::main_map); m_maincpu->set_vblank_int("screen", FUNC(rollerg_state::irq0_line_assert)); m_maincpu->line().set_membank(m_mainbank).mask(0x07); diff -Nru mame-0.250+dfsg.1/src/mame/konami/simpsons.cpp mame-0.251+dfsg.1/src/mame/konami/simpsons.cpp --- mame-0.250+dfsg.1/src/mame/konami/simpsons.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/simpsons.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -313,7 +313,7 @@ void simpsons_state::simpsons(machine_config &config) { /* basic machine hardware */ - KONAMI(config, m_maincpu, XTAL(24'000'000)/2/4); /* 053248, the clock input is 12MHz, and internal CPU divider of 4 */ + KONAMI(config, m_maincpu, XTAL(24'000'000)/2); /* 053248, the clock input is 12MHz, and internal CPU divider of 4 */ m_maincpu->set_addrmap(AS_PROGRAM, &simpsons_state::main_map); m_maincpu->set_vblank_int("screen", FUNC(simpsons_state::periodic_irq)); /* IRQ triggered by the 052109, FIRQ by the sprite hardware */ m_maincpu->line().set(FUNC(simpsons_state::banking_callback)); diff -Nru mame-0.250+dfsg.1/src/mame/konami/simpsons.h mame-0.251+dfsg.1/src/mame/konami/simpsons.h --- mame-0.250+dfsg.1/src/mame/konami/simpsons.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/simpsons.h 2022-12-29 14:20:09.000000000 +0000 @@ -5,7 +5,7 @@ #pragma once -#include "cpu/m6809/konami.h" // for the callback and the firq irq definition +#include "cpu/m6809/konami.h" #include "k052109.h" #include "k053251.h" #include "k053246_k053247_k055673.h" diff -Nru mame-0.250+dfsg.1/src/mame/konami/surpratk.cpp mame-0.251+dfsg.1/src/mame/konami/surpratk.cpp --- mame-0.250+dfsg.1/src/mame/konami/surpratk.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/surpratk.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -18,7 +18,7 @@ #include "k053251.h" #include "konami_helper.h" -#include "cpu/m6809/konami.h" // for the callback and the FIRQ IRQ definition +#include "cpu/m6809/konami.h" #include "machine/bankdev.h" #include "machine/watchdog.h" #include "sound/ymopm.h" @@ -300,7 +300,7 @@ void surpratk_state::surpratk(machine_config &config) { // basic machine hardware - KONAMI(config, m_maincpu, XTAL(24'000'000) / 2 / 4); // 053248, the clock input is 12MHz, and internal CPU divider of 4 + KONAMI(config, m_maincpu, XTAL(24'000'000) / 2); // 053248, the clock input is 12MHz, and internal CPU divider of 4 m_maincpu->set_addrmap(AS_PROGRAM, &surpratk_state::main_map); m_maincpu->line().set(FUNC(surpratk_state::banking_callback)); diff -Nru mame-0.250+dfsg.1/src/mame/konami/thunderx.cpp mame-0.251+dfsg.1/src/mame/konami/thunderx.cpp --- mame-0.250+dfsg.1/src/mame/konami/thunderx.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/thunderx.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -48,7 +48,7 @@ TIMER_CALLBACK_MEMBER(thunderx_state::thunderx_firq_cb) { - m_maincpu->set_input_line(KONAMI_FIRQ_LINE, HOLD_LINE); + m_maincpu->set_input_line(KONAMI_FIRQ_LINE, HOLD_LINE); } #define PMC_BK (m_1f98_latch & 0x02) @@ -179,7 +179,8 @@ int l0, r0, b0, t0; // check valid - if (!(p0[0] & cm)) continue; + if (!(p0[0] & cm)) + continue; // get area l0 = p0[3] - p0[1]; @@ -193,7 +194,8 @@ int l1,r1,b1,t1; // check valid - if (!(p1[0] & hm)) continue; + if (!(p1[0] & hm)) + continue; // get area l1 = p1[3] - p1[1]; @@ -202,10 +204,10 @@ b1 = p1[4] + p1[2]; // overlap check - if (l1 >= r0) continue; - if (l0 >= r1) continue; - if (t1 >= b0) continue; - if (t0 >= b1) continue; + if (l1 >= r0) continue; + if (l0 >= r1) continue; + if (t1 >= b0) continue; + if (t0 >= b1) continue; // set flags p0[0] = (p0[0] & 0x9f) | (p1[0] & 0x04) | 0x10; @@ -628,7 +630,7 @@ void thunderx_state::scontra(machine_config &config) { /* basic machine hardware */ - KONAMI(config, m_maincpu, XTAL(24'000'000)/2/4); /* 052001 (verified on pcb) */ + KONAMI(config, m_maincpu, XTAL(24'000'000)/2); /* 052001 (verified on pcb) */ m_maincpu->set_addrmap(AS_PROGRAM, &thunderx_state::scontra_map); Z80(config, m_audiocpu, XTAL(3'579'545)); /* verified on pcb */ diff -Nru mame-0.250+dfsg.1/src/mame/konami/thunderx.h mame-0.251+dfsg.1/src/mame/konami/thunderx.h --- mame-0.250+dfsg.1/src/mame/konami/thunderx.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/thunderx.h 2022-12-29 14:20:09.000000000 +0000 @@ -10,7 +10,7 @@ #pragma once -#include "cpu/m6809/konami.h" // for the callback and the firq irq definition +#include "cpu/m6809/konami.h" #include "machine/bankdev.h" #include "sound/k007232.h" #include "k051960.h" diff -Nru mame-0.250+dfsg.1/src/mame/konami/tmnt.cpp mame-0.251+dfsg.1/src/mame/konami/tmnt.cpp --- mame-0.250+dfsg.1/src/mame/konami/tmnt.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/tmnt.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -326,27 +326,17 @@ } } -#if 0 -static int sound_nmi_enabled; - -void tmnt_state::sound_nmi_callback( int param ) -{ - m_audiocpu->set_input_line(INPUT_LINE_NMI, ( sound_nmi_enabled ) ? CLEAR_LINE : ASSERT_LINE ); - - sound_nmi_enabled = 0; -} -#endif - -TIMER_CALLBACK_MEMBER(tmnt_state::audio_nmi) +void tmnt_state::sound_arm_nmi_w(uint8_t data) { - m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); + // see notes in simpsons driver + m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); + m_nmi_blocked->adjust(m_audiocpu->cycles_to_attotime(4)); } -void tmnt_state::sound_arm_nmi_w(uint8_t data) +void tmnt_state::z80_nmi_w(int state) { -// sound_nmi_enabled = 1; - m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); - m_audio_nmi_timer->adjust(attotime::from_usec(50)); /* kludge until the K053260 is emulated correctly */ + if (state && !m_nmi_blocked->enabled()) + m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } @@ -1994,16 +1984,22 @@ save_item(NAME(m_sorted_layer)); save_item(NAME(m_irq5_mask)); - m_audio_nmi_timer = timer_alloc(FUNC(tmnt_state::audio_nmi), this); + m_nmi_blocked = timer_alloc(timer_expired_delegate()); } -MACHINE_RESET_MEMBER(tmnt_state,common) +void tmnt_state::machine_reset() { m_toggle = 0; m_last = 0; m_tmnt_soundlatch = 0; m_irq5_mask = 0; - m_audio_nmi_timer->adjust(attotime::never); + + if (m_audiocpu && m_k053260) + { + // Z80 _NMI goes low at same time as reset + m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); + m_audiocpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero); + } } void tmnt_state::cuebrick(machine_config &config) @@ -2013,8 +2009,6 @@ m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::cuebrick_main_map); m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::tmnt_interrupt)); - MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common) - WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ @@ -2066,8 +2060,6 @@ Z80(config, m_audiocpu, XTAL(3'579'545)); m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::mia_audio_map); - MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common) - WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ @@ -2112,6 +2104,8 @@ MACHINE_RESET_MEMBER(tmnt_state,tmnt) { + machine_reset(); + /* the UPD7759 control flip-flops are cleared: /ST is 1, /RESET is 0 */ m_upd7759->start_w(0); m_upd7759->reset_w(1); @@ -2204,8 +2198,6 @@ m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::punkshot_audio_map); /* NMIs are generated by the 053260 */ - MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common) - WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ @@ -2241,6 +2233,7 @@ K053260(config, m_k053260, XTAL(3'579'545)); m_k053260->add_route(ALL_OUTPUTS, "mono", 0.70); + m_k053260->sh1_cb().set(FUNC(tmnt_state::z80_nmi_w)); } void tmnt_state::lgtnfght(machine_config &config) @@ -2253,8 +2246,6 @@ Z80(config, m_audiocpu, XTAL(3'579'545)); m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::lgtnfght_audio_map); - MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common) - WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ @@ -2293,6 +2284,7 @@ K053260(config, m_k053260, XTAL(3'579'545)); m_k053260->add_route(0, "lspeaker", 0.70); m_k053260->add_route(1, "rspeaker", 0.70); + m_k053260->sh1_cb().set(FUNC(tmnt_state::z80_nmi_w)); } void tmnt_state::blswhstl(machine_config &config) @@ -2306,8 +2298,6 @@ m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::ssriders_audio_map); /* NMIs are generated by the 053260 */ - MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common) - EEPROM_ER5911_8BIT(config, "eeprom"); WATCHDOG_TIMER(config, "watchdog"); @@ -2350,6 +2340,7 @@ K053260(config, m_k053260, XTAL(3'579'545)); m_k053260->add_route(0, "rspeaker", 0.50); /* fixed inverted stereo channels */ m_k053260->add_route(1, "lspeaker", 0.50); + m_k053260->sh1_cb().set(FUNC(tmnt_state::z80_nmi_w)); } @@ -2369,8 +2360,6 @@ m_audiocpu->set_addrmap(AS_PROGRAM, &glfgreat_state::glfgreat_audio_map); /* NMIs are generated by the 053260 */ - MCFG_MACHINE_RESET_OVERRIDE(glfgreat_state,common) - WATCHDOG_TIMER(config, "watchdog"); adc0804_device &adc(ADC0804(config, "adc", RES_K(10), CAP_P(150))); @@ -2416,6 +2405,7 @@ K053260(config, m_k053260, XTAL(3'579'545)); m_k053260->add_route(0, "lspeaker", 1.0); m_k053260->add_route(1, "rspeaker", 1.0); + m_k053260->sh1_cb().set(FUNC(glfgreat_state::z80_nmi_w)); } void prmrsocr_state::machine_start() @@ -2436,8 +2426,6 @@ m_audiocpu->set_addrmap(AS_PROGRAM, &prmrsocr_state::prmrsocr_audio_map); /* NMIs are generated by the 054539 */ - MCFG_MACHINE_RESET_OVERRIDE(prmrsocr_state,common) - EEPROM_ER5911_8BIT(config, "eeprom"); WATCHDOG_TIMER(config, "watchdog"); @@ -2500,8 +2488,6 @@ m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::ssriders_audio_map); /* NMIs are generated by the 053260 */ - MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common) - EEPROM_ER5911_8BIT(config, "eeprom"); WATCHDOG_TIMER(config, "watchdog"); @@ -2542,6 +2528,7 @@ K053260(config, m_k053260, XTAL(3'579'545)); m_k053260->add_route(0, "lspeaker", 0.75); m_k053260->add_route(1, "rspeaker", 0.75); + m_k053260->sh1_cb().set(FUNC(tmnt_state::z80_nmi_w)); } void tmnt_state::ssriders(machine_config &config) @@ -2555,8 +2542,6 @@ m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::ssriders_audio_map); /* NMIs are generated by the 053260 */ - MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common) - EEPROM_ER5911_8BIT(config, "eeprom"); WATCHDOG_TIMER(config, "watchdog"); @@ -2597,6 +2582,7 @@ K053260(config, m_k053260, XTAL(3'579'545)); m_k053260->add_route(0, "lspeaker", 0.70); m_k053260->add_route(1, "rspeaker", 0.70); + m_k053260->sh1_cb().set(FUNC(tmnt_state::z80_nmi_w)); } void tmnt_state::sunsetbl(machine_config &config) @@ -2606,8 +2592,6 @@ m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::sunsetbl_main_map); m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::irq4_line_hold)); - MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common) - EEPROM_ER5911_8BIT(config, "eeprom"); /* video hardware */ @@ -2657,8 +2641,6 @@ m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::thndrx2_audio_map); /* NMIs are generated by the 053260 */ - MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common) - EEPROM_ER5911_8BIT(config, "eeprom"); /* video hardware */ @@ -2697,6 +2679,7 @@ K053260(config, m_k053260, XTAL(3'579'545)); m_k053260->add_route(0, "lspeaker", 0.50); m_k053260->add_route(1, "rspeaker", 0.50); + m_k053260->sh1_cb().set(FUNC(tmnt_state::z80_nmi_w)); } @@ -4395,42 +4378,31 @@ for (int A = 0; A < len; A++) { -#define CA0 0 -#define CA1 1 -#define CA2 2 -#define CA3 3 -#define CA4 4 -#define CA5 5 -#define CA6 6 -#define CA7 7 -#define CA8 8 -#define CA9 9 - - /* following table derived from the schematics. It indicates, for each of the */ - /* 9 low bits of the sprite line address, which bit to pick it from. */ - /* For example, when the PROM contains 4, which applies to 4x2 sprites, */ - /* bit OA1 comes from CA5, OA2 from CA0, and so on. */ + // following table derived from the schematics. It indicates, for each of the + // 9 low bits of the sprite line address, which bit to pick it from. + // For example, when the PROM contains 4, which applies to 4x2 sprites, + // bit OA1 comes from CA5, OA2 from CA0, and so on. static const uint8_t bit_pick_table[10][8] = { - /*0(1x1) 1(2x1) 2(1x2) 3(2x2) 4(4x2) 5(2x4) 6(4x4) 7(8x8) */ - { CA3, CA3, CA3, CA3, CA3, CA3, CA3, CA3 }, /* CA3 */ - { CA0, CA0, CA5, CA5, CA5, CA5, CA5, CA5 }, /* OA1 */ - { CA1, CA1, CA0, CA0, CA0, CA7, CA7, CA7 }, /* OA2 */ - { CA2, CA2, CA1, CA1, CA1, CA0, CA0, CA9 }, /* OA3 */ - { CA4, CA4, CA2, CA2, CA2, CA1, CA1, CA0 }, /* OA4 */ - { CA5, CA6, CA4, CA4, CA4, CA2, CA2, CA1 }, /* OA5 */ - { CA6, CA5, CA6, CA6, CA6, CA4, CA4, CA2 }, /* OA6 */ - { CA7, CA7, CA7, CA7, CA8, CA6, CA6, CA4 }, /* OA7 */ - { CA8, CA8, CA8, CA8, CA7, CA8, CA8, CA6 }, /* OA8 */ - { CA9, CA9, CA9, CA9, CA9, CA9, CA9, CA8 } /* OA9 */ + //0(1x1) 1(2x1) 2(1x2) 3(2x2) 4(4x2) 5(2x4) 6(4x4) 7(8x8) + { 3, 3, 3, 3, 3, 3, 3, 3 }, // CA3 + { 0, 0, 5, 5, 5, 5, 5, 5 }, // OA1 + { 1, 1, 0, 0, 0, 7, 7, 7 }, // OA2 + { 2, 2, 1, 1, 1, 0, 0, 9 }, // OA3 + { 4, 4, 2, 2, 2, 1, 1, 0 }, // OA4 + { 5, 6, 4, 4, 4, 2, 2, 1 }, // OA5 + { 6, 5, 6, 6, 6, 4, 4, 2 }, // OA6 + { 7, 7, 7, 7, 8, 6, 6, 4 }, // OA7 + { 8, 8, 8, 8, 7, 8, 8, 6 }, // OA8 + { 9, 9, 9, 9, 9, 9, 9, 8 } // OA9 }; - /* pick the correct entry in the PROM (top 8 bits of the address) */ + // pick the correct entry in the PROM (top 8 bits of the address) int entry = code_conv_table[(A & 0x7f800) >> 11] & 7; int bits[32]; - /* the bits to scramble are the low 10 ones */ + // the bits to scramble are the low 10 ones for (int i = 0; i < 10; i++) bits[i] = (A >> i) & 0x01; diff -Nru mame-0.250+dfsg.1/src/mame/konami/tmnt.h mame-0.251+dfsg.1/src/mame/konami/tmnt.h --- mame-0.250+dfsg.1/src/mame/konami/tmnt.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/tmnt.h 2022-12-29 14:20:09.000000000 +0000 @@ -64,8 +64,7 @@ protected: virtual void machine_start() override; - - TIMER_CALLBACK_MEMBER(audio_nmi); + virtual void machine_reset() override; /* memory pointers */ optional_shared_ptr m_spriteram; @@ -89,7 +88,7 @@ int m_dim_v = 0; /* lgtnfght, ssriders, tmnt2 only */ /* misc */ - emu_timer *m_audio_nmi_timer = nullptr; + emu_timer *m_nmi_blocked = nullptr; int m_tmnt_soundlatch = 0; int m_toggle = 0; int m_last = 0; @@ -127,6 +126,7 @@ uint8_t tmnt_sres_r(); void tmnt_sres_w(uint8_t data); void sound_arm_nmi_w(uint8_t data); + void z80_nmi_w(int state); uint16_t punkshot_kludge_r(); uint16_t ssriders_protection_r(address_space &space); void ssriders_protection_w(address_space &space, offs_t offset, uint16_t data); @@ -149,7 +149,6 @@ void tmnt_upd_start_w(uint8_t data); uint8_t tmnt_upd_busy_r(); - DECLARE_MACHINE_RESET(common); DECLARE_VIDEO_START(cuebrick); DECLARE_VIDEO_START(mia); DECLARE_MACHINE_RESET(tmnt); diff -Nru mame-0.250+dfsg.1/src/mame/konami/twin16.cpp mame-0.251+dfsg.1/src/mame/konami/twin16.cpp --- mame-0.250+dfsg.1/src/mame/konami/twin16.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/twin16.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1256,10 +1256,11 @@ /* Game Drivers */ -// YEAR, NAME, PARENT, MACHINE, INPUT, STATE, INIT, MONITOR,COMPANY, FULLNAME,FLAGS +// YEAR, NAME, PARENT, MACHINE, INPUT, STATE, INIT, MONITOR,COMPANY, FULLNAME,FLAGS GAME( 1987, devilw, 0, devilw, devilw, twin16_state, init_twin16, ROT0, "Konami", "Devil World", MACHINE_SUPPORTS_SAVE ) GAME( 1987, majuu, devilw, devilw, devilw, twin16_state, init_twin16, ROT0, "Konami", "Majuu no Ohkoku", MACHINE_SUPPORTS_SAVE ) GAME( 1987, darkadv, devilw, devilw, darkadv, twin16_state, init_twin16, ROT0, "Konami", "Dark Adventure", MACHINE_SUPPORTS_SAVE ) + GAME( 1988, vulcan, 0, twin16, vulcan, twin16_state, init_twin16, ROT0, "Konami", "Vulcan Venture (New)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, vulcana, vulcan, twin16, vulcan, twin16_state, init_twin16, ROT0, "Konami", "Vulcan Venture (Old)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, vulcanb, vulcan, twin16, vulcan, twin16_state, init_twin16, ROT0, "Konami", "Vulcan Venture (Oldest)", MACHINE_SUPPORTS_SAVE ) @@ -1270,5 +1271,7 @@ GAME( 1988, fround, 0, fround, fround, fround_state, init_fround, ROT0, "Konami", "The Final Round (version M)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, froundl, fround, fround, fround, fround_state, init_fround, ROT0, "Konami", "The Final Round (version L)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, hpuncher, fround, twin16, fround, twin16_state, init_twin16, ROT0, "Konami", "Hard Puncher (Japan)", MACHINE_SUPPORTS_SAVE ) + GAME( 1989, miaj, mia, miaj, miaj, twin16_state, init_twin16, ROT0, "Konami", "M.I.A. - Missing in Action (version R) (Japan)", MACHINE_SUPPORTS_SAVE ) + GAME( 1989, cuebrickj, cuebrick, cuebrickj, cuebrickj, cuebrickj_state, init_cuebrickj, ROT0, "Konami", "Cue Brick (Japan)", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/konami/vendetta.cpp mame-0.251+dfsg.1/src/mame/konami/vendetta.cpp --- mame-0.250+dfsg.1/src/mame/konami/vendetta.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/vendetta.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -96,7 +96,7 @@ #include "k054000.h" #include "konami_helper.h" -#include "cpu/m6809/konami.h" // for the callback and the firq irq definition +#include "cpu/m6809/konami.h" #include "cpu/z80/z80.h" #include "machine/eepromser.h" #include "machine/k053252.h" @@ -132,6 +132,8 @@ void esckids(machine_config &config); void vendetta(machine_config &config); + int obj_busy_r() { return m_obj_busy->enabled() ? 1 : 0; } + protected: virtual void machine_start() override; virtual void machine_reset() override; @@ -145,6 +147,7 @@ // misc uint8_t m_irq_enabled = 0; emu_timer *m_nmi_blocked; + emu_timer *m_obj_busy; // devices required_device m_maincpu; @@ -172,11 +175,10 @@ void z80_nmi_w(int state); void z80_irq_w(uint8_t data = 0); uint8_t z80_irq_r(); + void vblank_irq(int state); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(irq); - K052109_CB_MEMBER(vendetta_tile_callback); K052109_CB_MEMBER(esckids_tile_callback); void banking_callback(uint8_t data); @@ -286,7 +288,6 @@ // bit 6 - IRQ enable // bit 7 - Unused - if (data == 0xff ) // this is a bug in the EEPROM write code return; @@ -294,6 +295,8 @@ m_eeprom_out->write(data, 0xff); m_irq_enabled = (data >> 6) & 1; + if (!m_irq_enabled) + m_maincpu->set_input_line(KONAMI_IRQ_LINE, CLEAR_LINE); m_videoview0.select(BIT(data, 0)); m_videoview1.select(BIT(data, 0)); @@ -465,10 +468,10 @@ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("EEPROM") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) PORT_SERVICE_NO_TOGGLE(0x04, IP_ACTIVE_LOW) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") // not really vblank, object related. It's timed, otherwise sprites flicker + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(vendetta_state, obj_busy_r) PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START( "EEPROMOUT" ) @@ -477,7 +480,17 @@ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) INPUT_PORTS_END -static INPUT_PORTS_START( vendetta ) +static INPUT_PORTS_START( vendettan ) + PORT_INCLUDE( vendet4p ) + + PORT_MODIFY("SERVICE") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE3 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE4 ) +INPUT_PORTS_END + +static INPUT_PORTS_START( vendet2p ) PORT_INCLUDE( vendet4p ) PORT_MODIFY("P3") @@ -497,50 +510,38 @@ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END -static INPUT_PORTS_START( esckids ) - PORT_START("P1") - KONAMI8_RL_B12_COIN(1) // Player 1 Control - - PORT_START("P2") - KONAMI8_RL_B12_COIN(2) // Player 2 Control - - PORT_START("P3") - KONAMI8_RL_B12_COIN(3) // Player 3 Control ??? (Not used) - - PORT_START("P4") - KONAMI8_RL_B12_COIN(4) // Player 4 Control ??? (Not used) +static INPUT_PORTS_START( esckids4p ) + PORT_INCLUDE( vendet4p ) - PORT_START("SERVICE") // Start, Service - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) + PORT_MODIFY("SERVICE") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("EEPROM") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) - PORT_SERVICE_NO_TOGGLE(0x04, IP_ACTIVE_LOW) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") // not really vblank, object related. It's timed, otherwise sprites flicker - PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START( "EEPROMOUT" ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE3 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE4 ) INPUT_PORTS_END -static INPUT_PORTS_START( esckidsj ) - PORT_INCLUDE( esckids ) +static INPUT_PORTS_START( esckids2p ) + PORT_INCLUDE( esckids4p ) PORT_MODIFY("P3") PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_MODIFY("P4") PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_MODIFY("SERVICE") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END /*************************************************************************** @@ -549,10 +550,17 @@ ***************************************************************************/ -INTERRUPT_GEN_MEMBER(vendetta_state::irq) +void vendetta_state::vblank_irq(int state) { - if (m_irq_enabled) - device.execute().set_input_line(KONAMI_IRQ_LINE, HOLD_LINE); + if (state) + { + if (m_irq_enabled) + m_maincpu->set_input_line(KONAMI_IRQ_LINE, ASSERT_LINE); + + // OBJ DMA enabled + if (m_k053246->k053246_is_irq_enabled()) + m_obj_busy->adjust(attotime::from_usec(250)); + } } void vendetta_state::machine_start() @@ -561,6 +569,7 @@ m_mainbank->set_entry(0); m_nmi_blocked = timer_alloc(timer_expired_delegate()); + m_obj_busy = timer_alloc(timer_expired_delegate()); save_item(NAME(m_irq_enabled)); save_item(NAME(m_sprite_colorbase)); @@ -595,9 +604,8 @@ void vendetta_state::vendetta(machine_config &config) { // basic machine hardware - KONAMI(config, m_maincpu, XTAL(24'000'000) / 8); // 052001 (verified on PCB) + KONAMI(config, m_maincpu, XTAL(24'000'000) / 2); // 052001 (verified on PCB) m_maincpu->set_addrmap(AS_PROGRAM, &vendetta_state::main_map); - m_maincpu->set_vblank_int("screen", FUNC(vendetta_state::irq)); m_maincpu->line().set(FUNC(vendetta_state::banking_callback)); Z80(config, m_audiocpu, XTAL(3'579'545)); // verified with PCB @@ -615,6 +623,7 @@ screen.set_visarea(13*8, (64-13)*8-1, 2*8, 30*8-1); screen.set_screen_update(FUNC(vendetta_state::screen_update)); screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(vendetta_state::vblank_irq)); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 2048); m_palette->enable_shadows(); @@ -662,7 +671,7 @@ m_k053246->set_config(NORMAL_PLANE_ORDER, 101, 6); - K053252(config, "k053252", 6000000).set_offsets(12*8, 1*8); + K053252(config, "k053252", XTAL(24'000'000) / 4).set_offsets(12*8, 1*8); } @@ -1059,17 +1068,17 @@ ***************************************************************************/ +GAME( 1991, vendetta, 0, vendetta, vendet4p, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (World, 4 Players, ver. T)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, vendettar, vendetta, vendetta, vendet4p, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (US, 4 Players, ver. R)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, vendettaz, vendetta, vendetta, vendet4p, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (Asia, 4 Players, ver. Z)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, vendettaun, vendetta, vendetta, vendet4p, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (World, 4 Players, ver. ?)", MACHINE_SUPPORTS_SAVE ) // program ROM labeled as 1 +GAME( 1991, vendetta2pw, vendetta, vendetta, vendet2p, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (World, 2 Players, ver. W)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, vendetta2peba,vendetta, vendetta, vendet2p, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (World, 2 Players, ver. EB-A?)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, vendetta2pun, vendetta, vendetta, vendet2p, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (World, 2 Players, ver. ?)", MACHINE_SUPPORTS_SAVE ) // program ROM labeled as 1 +GAME( 1991, vendetta2pu, vendetta, vendetta, vendet2p, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (Asia, 2 Players, ver. U)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, vendetta2pd, vendetta, vendetta, vendet2p, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (Asia, 2 Players, ver. D)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, vendettan, vendetta, vendetta, vendettan, vendetta_state, empty_init, ROT0, "Konami", "Crime Fighters 2 (Japan, 4 Players, ver. N)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, vendetta2pp, vendetta, vendetta, vendet2p, vendetta_state, empty_init, ROT0, "Konami", "Crime Fighters 2 (Japan, 2 Players, ver. P)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, vendetta, 0, vendetta, vendet4p, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (World, 4 Players, ver. T)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, vendettar, vendetta, vendetta, vendet4p, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (US, 4 Players, ver. R)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, vendettaz, vendetta, vendetta, vendet4p, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (Asia, 4 Players, ver. Z)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, vendettaun, vendetta, vendetta, vendet4p, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (World, 4 Players, ver. ?)", MACHINE_SUPPORTS_SAVE ) // program ROM labeled as 1 -GAME( 1991, vendetta2pw, vendetta, vendetta, vendetta, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (World, 2 Players, ver. W)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, vendetta2peba,vendetta, vendetta, vendetta, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (World, 2 Players, ver. EB-A?)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, vendetta2pun, vendetta, vendetta, vendetta, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (World, 2 Players, ver. ?)", MACHINE_SUPPORTS_SAVE ) // program ROM labeled as 1 -GAME( 1991, vendetta2pu, vendetta, vendetta, vendetta, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (Asia, 2 Players, ver. U)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, vendetta2pd, vendetta, vendetta, vendetta, vendetta_state, empty_init, ROT0, "Konami", "Vendetta (Asia, 2 Players, ver. D)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, vendettan, vendetta, vendetta, vendet4p, vendetta_state, empty_init, ROT0, "Konami", "Crime Fighters 2 (Japan, 4 Players, ver. N)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, vendetta2pp, vendetta, vendetta, vendetta, vendetta_state, empty_init, ROT0, "Konami", "Crime Fighters 2 (Japan, 2 Players, ver. P)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, esckids, 0, esckids, esckids, vendetta_state, empty_init, ROT0, "Konami", "Escape Kids (Asia, 4 Players)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, esckidsj, esckids, esckids, esckidsj, vendetta_state, empty_init, ROT0, "Konami", "Escape Kids (Japan, 2 Players)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, esckids, 0, esckids, esckids4p, vendetta_state, empty_init, ROT0, "Konami", "Escape Kids (Asia, 4 Players)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, esckidsj, esckids, esckids, esckids2p, vendetta_state, empty_init, ROT0, "Konami", "Escape Kids (Japan, 2 Players)", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/konami/wecleman.cpp mame-0.251+dfsg.1/src/mame/konami/wecleman.cpp --- mame-0.250+dfsg.1/src/mame/konami/wecleman.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/konami/wecleman.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -941,15 +941,15 @@ static const uint32_t wecleman_road_layout_xoffset[64] = { - 0,7,6,5,4,3,2,1, - 8,15,14,13,12,11,10,9, - 16,23,22,21,20,19,18,17, - 24,31,30,29,28,27,26,25, - - 0+32,7+32,6+32,5+32,4+32,3+32,2+32,1+32, - 8+32,15+32,14+32,13+32,12+32,11+32,10+32,9+32, - 16+32,23+32,22+32,21+32,20+32,19+32,18+32,17+32, - 24+32,31+32,30+32,29+32,28+32,27+32,26+32,25+32 + 0,7,6,5,4,3,2,1, + 8,15,14,13,12,11,10,9, + 16,23,22,21,20,19,18,17, + 24,31,30,29,28,27,26,25, + + 0+32,7+32,6+32,5+32,4+32,3+32,2+32,1+32, + 8+32,15+32,14+32,13+32,12+32,11+32,10+32,9+32, + 16+32,23+32,22+32,21+32,20+32,19+32,18+32,17+32, + 24+32,31+32,30+32,29+32,28+32,27+32,26+32,25+32 }; /* We draw the road, made of 512 pixel lines, using 64x1 tiles */ @@ -979,10 +979,10 @@ static const uint32_t hotchase_road_layout_xoffset[64] = { - 0*4,0*4,1*4,1*4,2*4,2*4,3*4,3*4,4*4,4*4,5*4,5*4,6*4,6*4,7*4,7*4, - 8*4,8*4,9*4,9*4,10*4,10*4,11*4,11*4,12*4,12*4,13*4,13*4,14*4,14*4,15*4,15*4, - 16*4,16*4,17*4,17*4,18*4,18*4,19*4,19*4,20*4,20*4,21*4,21*4,22*4,22*4,23*4,23*4, - 24*4,24*4,25*4,25*4,26*4,26*4,27*4,27*4,28*4,28*4,29*4,29*4,30*4,30*4,31*4,31*4 + 0*4,0*4,1*4,1*4,2*4,2*4,3*4,3*4,4*4,4*4,5*4,5*4,6*4,6*4,7*4,7*4, + 8*4,8*4,9*4,9*4,10*4,10*4,11*4,11*4,12*4,12*4,13*4,13*4,14*4,14*4,15*4,15*4, + 16*4,16*4,17*4,17*4,18*4,18*4,19*4,19*4,20*4,20*4,21*4,21*4,22*4,22*4,23*4,23*4, + 24*4,24*4,25*4,25*4,26*4,26*4,27*4,27*4,28*4,28*4,29*4,29*4,30*4,30*4,31*4,31*4 }; /* We draw the road, made of 512 pixel lines, using 64x1 tiles */ diff -Nru mame-0.250+dfsg.1/src/mame/layout/18w.lay mame-0.251+dfsg.1/src/mame/layout/18w.lay --- mame-0.250+dfsg.1/src/mame/layout/18w.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/18w.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/24cdjuke.lay mame-0.251+dfsg.1/src/mame/layout/24cdjuke.lay --- mame-0.250+dfsg.1/src/mame/layout/24cdjuke.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/24cdjuke.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/280zzzap.lay mame-0.251+dfsg.1/src/mame/layout/280zzzap.lay --- mame-0.250+dfsg.1/src/mame/layout/280zzzap.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/280zzzap.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/30test.lay mame-0.251+dfsg.1/src/mame/layout/30test.lay --- mame-0.250+dfsg.1/src/mame/layout/30test.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/30test.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/3bagflnz.lay mame-0.251+dfsg.1/src/mame/layout/3bagflnz.lay --- mame-0.250+dfsg.1/src/mame/layout/3bagflnz.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/3bagflnz.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/3bagflvt.lay mame-0.251+dfsg.1/src/mame/layout/3bagflvt.lay --- mame-0.250+dfsg.1/src/mame/layout/3bagflvt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/3bagflvt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/4004clk.lay mame-0.251+dfsg.1/src/mame/layout/4004clk.lay --- mame-0.250+dfsg.1/src/mame/layout/4004clk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/4004clk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/4dpi.lay mame-0.251+dfsg.1/src/mame/layout/4dpi.lay --- mame-0.250+dfsg.1/src/mame/layout/4dpi.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/4dpi.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/abaseb.lay mame-0.251+dfsg.1/src/mame/layout/abaseb.lay --- mame-0.250+dfsg.1/src/mame/layout/abaseb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/abaseb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/abc1600.lay mame-0.251+dfsg.1/src/mame/layout/abc1600.lay --- mame-0.250+dfsg.1/src/mame/layout/abc1600.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/abc1600.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ac1clbmn.lay mame-0.251+dfsg.1/src/mame/layout/ac1clbmn.lay --- mame-0.250+dfsg.1/src/mame/layout/ac1clbmn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ac1clbmn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -1158,7 +1158,7 @@ - + @@ -1178,7 +1178,7 @@ - + @@ -1198,7 +1198,7 @@ - + @@ -1218,7 +1218,7 @@ - + @@ -1238,7 +1238,7 @@ - + @@ -1258,7 +1258,7 @@ - + @@ -1518,7 +1518,7 @@ - + @@ -1538,7 +1538,7 @@ - + @@ -1558,7 +1558,7 @@ - + @@ -1578,7 +1578,7 @@ - + @@ -1598,7 +1598,7 @@ - + @@ -1618,7 +1618,7 @@ - + @@ -1638,7 +1638,7 @@ - + @@ -1658,7 +1658,7 @@ - + @@ -1758,7 +1758,7 @@ - + @@ -2075,15 +2075,15 @@ - + - + - + @@ -2099,15 +2099,15 @@ - + - + - + @@ -2117,35 +2117,35 @@ - + - + - + - + - + - + - + - + @@ -2155,27 +2155,27 @@ - + - + - + - + - + - + @@ -2185,7 +2185,7 @@ - + @@ -2199,13 +2199,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/ac1gogld.lay mame-0.251+dfsg.1/src/mame/layout/ac1gogld.lay --- mame-0.250+dfsg.1/src/mame/layout/ac1gogld.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ac1gogld.lay 2022-12-29 14:20:09.000000000 +0000 @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -1086,7 +1086,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/ac1primt.lay mame-0.251+dfsg.1/src/mame/layout/ac1primt.lay --- mame-0.250+dfsg.1/src/mame/layout/ac1primt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ac1primt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -50,7 +50,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -502,7 +502,7 @@ - + @@ -742,7 +742,7 @@ - + @@ -1054,7 +1054,7 @@ - + @@ -1074,7 +1074,7 @@ - + @@ -1094,7 +1094,7 @@ - + @@ -1114,7 +1114,7 @@ - + @@ -1154,7 +1154,7 @@ - + @@ -1242,7 +1242,7 @@ - + @@ -1462,31 +1462,31 @@ - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/ac1pster.lay mame-0.251+dfsg.1/src/mame/layout/ac1pster.lay --- mame-0.250+dfsg.1/src/mame/layout/ac1pster.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ac1pster.lay 2022-12-29 14:20:09.000000000 +0000 @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -578,7 +578,7 @@ - + @@ -602,7 +602,7 @@ - + @@ -782,7 +782,7 @@ - + @@ -802,7 +802,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -842,7 +842,7 @@ - + @@ -862,7 +862,7 @@ - + @@ -942,7 +942,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -2156,23 +2156,23 @@ - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/ac1pstrt.lay mame-0.251+dfsg.1/src/mame/layout/ac1pstrt.lay --- mame-0.250+dfsg.1/src/mame/layout/ac1pstrt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ac1pstrt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -1918,23 +1918,23 @@ - + - + - + - + - + @@ -1968,7 +1968,7 @@ - + @@ -1984,7 +1984,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/ac1taklv.lay mame-0.251+dfsg.1/src/mame/layout/ac1taklv.lay --- mame-0.250+dfsg.1/src/mame/layout/ac1taklv.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ac1taklv.lay 2022-12-29 14:20:09.000000000 +0000 @@ -94,7 +94,7 @@ - + @@ -174,7 +174,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -238,7 +238,7 @@ - + @@ -258,7 +258,7 @@ - + @@ -278,7 +278,7 @@ - + @@ -298,7 +298,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -514,7 +514,7 @@ - + @@ -1102,7 +1102,7 @@ - + @@ -1122,7 +1122,7 @@ - + @@ -1142,7 +1142,7 @@ - + @@ -1162,7 +1162,7 @@ - + @@ -1182,7 +1182,7 @@ - + @@ -1202,7 +1202,7 @@ - + @@ -1222,7 +1222,7 @@ - + @@ -1242,7 +1242,7 @@ - + @@ -1558,7 +1558,7 @@ - + @@ -1602,7 +1602,7 @@ - + @@ -1622,7 +1622,7 @@ - + @@ -1642,7 +1642,7 @@ - + @@ -1702,11 +1702,11 @@ - + - + @@ -1726,7 +1726,7 @@ - + @@ -1866,7 +1866,7 @@ - + @@ -2098,7 +2098,7 @@ - + @@ -2244,23 +2244,23 @@ - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/accomm.lay mame-0.251+dfsg.1/src/mame/layout/accomm.lay --- mame-0.250+dfsg.1/src/mame/layout/accomm.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/accomm.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ace.lay mame-0.251+dfsg.1/src/mame/layout/ace.lay --- mame-0.250+dfsg.1/src/mame/layout/ace.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ace.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/aces1.lay mame-0.251+dfsg.1/src/mame/layout/aces1.lay --- mame-0.250+dfsg.1/src/mame/layout/aces1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/aces1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ace_sp_dmd.lay mame-0.251+dfsg.1/src/mame/layout/ace_sp_dmd.lay --- mame-0.250+dfsg.1/src/mame/layout/ace_sp_dmd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ace_sp_dmd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/aci_borisdpl.lay mame-0.251+dfsg.1/src/mame/layout/aci_borisdpl.lay --- mame-0.250+dfsg.1/src/mame/layout/aci_borisdpl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/aci_borisdpl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/aci_boris.lay mame-0.251+dfsg.1/src/mame/layout/aci_boris.lay --- mame-0.250+dfsg.1/src/mame/layout/aci_boris.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/aci_boris.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/aci_ggm.lay mame-0.251+dfsg.1/src/mame/layout/aci_ggm.lay --- mame-0.250+dfsg.1/src/mame/layout/aci_ggm.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/aci_ggm.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/aci_prodigy.lay mame-0.251+dfsg.1/src/mame/layout/aci_prodigy.lay --- mame-0.250+dfsg.1/src/mame/layout/aci_prodigy.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/aci_prodigy.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/acommand.lay mame-0.251+dfsg.1/src/mame/layout/acommand.lay --- mame-0.250+dfsg.1/src/mame/layout/acommand.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/acommand.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/acrnsys1.lay mame-0.251+dfsg.1/src/mame/layout/acrnsys1.lay --- mame-0.250+dfsg.1/src/mame/layout/acrnsys1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/acrnsys1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/adonisce.lay mame-0.251+dfsg.1/src/mame/layout/adonisce.lay --- mame-0.250+dfsg.1/src/mame/layout/adonisce.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/adonisce.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/adonisu.lay mame-0.251+dfsg.1/src/mame/layout/adonisu.lay --- mame-0.250+dfsg.1/src/mame/layout/adonisu.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/adonisu.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/aim65_40.lay mame-0.251+dfsg.1/src/mame/layout/aim65_40.lay --- mame-0.250+dfsg.1/src/mame/layout/aim65_40.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/aim65_40.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/aim65.lay mame-0.251+dfsg.1/src/mame/layout/aim65.lay --- mame-0.250+dfsg.1/src/mame/layout/aim65.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/aim65.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/akkaarrh.lay mame-0.251+dfsg.1/src/mame/layout/akkaarrh.lay --- mame-0.250+dfsg.1/src/mame/layout/akkaarrh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/akkaarrh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/alinvade.lay mame-0.251+dfsg.1/src/mame/layout/alinvade.lay --- mame-0.250+dfsg.1/src/mame/layout/alinvade.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/alinvade.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/allied.lay mame-0.251+dfsg.1/src/mame/layout/allied.lay --- mame-0.250+dfsg.1/src/mame/layout/allied.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/allied.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/alnchase.lay mame-0.251+dfsg.1/src/mame/layout/alnchase.lay --- mame-0.250+dfsg.1/src/mame/layout/alnchase.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/alnchase.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/alphie.lay mame-0.251+dfsg.1/src/mame/layout/alphie.lay --- mame-0.250+dfsg.1/src/mame/layout/alphie.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/alphie.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/alvg.lay mame-0.251+dfsg.1/src/mame/layout/alvg.lay --- mame-0.250+dfsg.1/src/mame/layout/alvg.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/alvg.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/amaztron.lay mame-0.251+dfsg.1/src/mame/layout/amaztron.lay --- mame-0.250+dfsg.1/src/mame/layout/amaztron.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/amaztron.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/amerihok.lay mame-0.251+dfsg.1/src/mame/layout/amerihok.lay --- mame-0.250+dfsg.1/src/mame/layout/amerihok.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/amerihok.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/amico2k.lay mame-0.251+dfsg.1/src/mame/layout/amico2k.lay --- mame-0.250+dfsg.1/src/mame/layout/amico2k.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/amico2k.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/amiga.lay mame-0.251+dfsg.1/src/mame/layout/amiga.lay --- mame-0.250+dfsg.1/src/mame/layout/amiga.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/amiga.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ampoker2.lay mame-0.251+dfsg.1/src/mame/layout/ampoker2.lay --- mame-0.250+dfsg.1/src/mame/layout/ampoker2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ampoker2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/amusco.lay mame-0.251+dfsg.1/src/mame/layout/amusco.lay --- mame-0.250+dfsg.1/src/mame/layout/amusco.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/amusco.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ap10.lay mame-0.251+dfsg.1/src/mame/layout/ap10.lay --- mame-0.250+dfsg.1/src/mame/layout/ap10.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ap10.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/apollo_15i.lay mame-0.251+dfsg.1/src/mame/layout/apollo_15i.lay --- mame-0.250+dfsg.1/src/mame/layout/apollo_15i.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/apollo_15i.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/apollo_dsp.lay mame-0.251+dfsg.1/src/mame/layout/apollo_dsp.lay --- mame-0.250+dfsg.1/src/mame/layout/apollo_dsp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/apollo_dsp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/apollo.lay mame-0.251+dfsg.1/src/mame/layout/apollo.lay --- mame-0.250+dfsg.1/src/mame/layout/apollo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/apollo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/apricotp.lay mame-0.251+dfsg.1/src/mame/layout/apricotp.lay --- mame-0.250+dfsg.1/src/mame/layout/apricotp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/apricotp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/aquastge.lay mame-0.251+dfsg.1/src/mame/layout/aquastge.lay --- mame-0.250+dfsg.1/src/mame/layout/aquastge.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/aquastge.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/arcmania.lay mame-0.251+dfsg.1/src/mame/layout/arcmania.lay --- mame-0.250+dfsg.1/src/mame/layout/arcmania.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/arcmania.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/arcwins.lay mame-0.251+dfsg.1/src/mame/layout/arcwins.lay --- mame-0.250+dfsg.1/src/mame/layout/arcwins.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/arcwins.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/arimk4nz.lay mame-0.251+dfsg.1/src/mame/layout/arimk4nz.lay --- mame-0.250+dfsg.1/src/mame/layout/arimk4nz.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/arimk4nz.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/aristmk4.lay mame-0.251+dfsg.1/src/mame/layout/aristmk4.lay --- mame-0.250+dfsg.1/src/mame/layout/aristmk4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/aristmk4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/aristmk5.lay mame-0.251+dfsg.1/src/mame/layout/aristmk5.lay --- mame-0.250+dfsg.1/src/mame/layout/aristmk5.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/aristmk5.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/aristmk5_us_200.lay mame-0.251+dfsg.1/src/mame/layout/aristmk5_us_200.lay --- mame-0.250+dfsg.1/src/mame/layout/aristmk5_us_200.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/aristmk5_us_200.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/aristmk5_us.lay mame-0.251+dfsg.1/src/mame/layout/aristmk5_us.lay --- mame-0.250+dfsg.1/src/mame/layout/aristmk5_us.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/aristmk5_us.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/armora.lay mame-0.251+dfsg.1/src/mame/layout/armora.lay --- mame-0.250+dfsg.1/src/mame/layout/armora.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/armora.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/arrball.lay mame-0.251+dfsg.1/src/mame/layout/arrball.lay --- mame-0.250+dfsg.1/src/mame/layout/arrball.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/arrball.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/astdelux.lay mame-0.251+dfsg.1/src/mame/layout/astdelux.lay --- mame-0.250+dfsg.1/src/mame/layout/astdelux.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/astdelux.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/astoneag.lay mame-0.251+dfsg.1/src/mame/layout/astoneag.lay --- mame-0.250+dfsg.1/src/mame/layout/astoneag.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/astoneag.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/astro.lay mame-0.251+dfsg.1/src/mame/layout/astro.lay --- mame-0.250+dfsg.1/src/mame/layout/astro.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/astro.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/atarifb4.lay mame-0.251+dfsg.1/src/mame/layout/atarifb4.lay --- mame-0.250+dfsg.1/src/mame/layout/atarifb4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/atarifb4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/atarifb.lay mame-0.251+dfsg.1/src/mame/layout/atarifb.lay --- mame-0.250+dfsg.1/src/mame/layout/atarifb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/atarifb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/atari_s1.lay mame-0.251+dfsg.1/src/mame/layout/atari_s1.lay --- mame-0.250+dfsg.1/src/mame/layout/atari_s1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/atari_s1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/atari_s2.lay mame-0.251+dfsg.1/src/mame/layout/atari_s2.lay --- mame-0.250+dfsg.1/src/mame/layout/atari_s2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/atari_s2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/atm18mcc.lay mame-0.251+dfsg.1/src/mame/layout/atm18mcc.lay --- mame-0.250+dfsg.1/src/mame/layout/atm18mcc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/atm18mcc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/attackfc.lay mame-0.251+dfsg.1/src/mame/layout/attackfc.lay --- mame-0.250+dfsg.1/src/mame/layout/attackfc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/attackfc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/autorace.lay mame-0.251+dfsg.1/src/mame/layout/autorace.lay --- mame-0.250+dfsg.1/src/mame/layout/autorace.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/autorace.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/avalnche.lay mame-0.251+dfsg.1/src/mame/layout/avalnche.lay --- mame-0.250+dfsg.1/src/mame/layout/avalnche.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/avalnche.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ave_arb.lay mame-0.251+dfsg.1/src/mame/layout/ave_arb.lay --- mame-0.250+dfsg.1/src/mame/layout/ave_arb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ave_arb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/avigo.lay mame-0.251+dfsg.1/src/mame/layout/avigo.lay --- mame-0.250+dfsg.1/src/mame/layout/avigo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/avigo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/avrmax.lay mame-0.251+dfsg.1/src/mame/layout/avrmax.lay --- mame-0.250+dfsg.1/src/mame/layout/avrmax.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/avrmax.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/babbage.lay mame-0.251+dfsg.1/src/mame/layout/babbage.lay --- mame-0.250+dfsg.1/src/mame/layout/babbage.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/babbage.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/babydad.lay mame-0.251+dfsg.1/src/mame/layout/babydad.lay --- mame-0.250+dfsg.1/src/mame/layout/babydad.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/babydad.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/babypkr.lay mame-0.251+dfsg.1/src/mame/layout/babypkr.lay --- mame-0.250+dfsg.1/src/mame/layout/babypkr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/babypkr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/baddog.lay mame-0.251+dfsg.1/src/mame/layout/baddog.lay --- mame-0.250+dfsg.1/src/mame/layout/baddog.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/baddog.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bambball.lay mame-0.251+dfsg.1/src/mame/layout/bambball.lay --- mame-0.250+dfsg.1/src/mame/layout/bambball.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bambball.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bankshot.lay mame-0.251+dfsg.1/src/mame/layout/bankshot.lay --- mame-0.250+dfsg.1/src/mame/layout/bankshot.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bankshot.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/barata.lay mame-0.251+dfsg.1/src/mame/layout/barata.lay --- mame-0.250+dfsg.1/src/mame/layout/barata.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/barata.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/barni.lay mame-0.251+dfsg.1/src/mame/layout/barni.lay --- mame-0.250+dfsg.1/src/mame/layout/barni.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/barni.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/barricad.lay mame-0.251+dfsg.1/src/mame/layout/barricad.lay --- mame-0.250+dfsg.1/src/mame/layout/barricad.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/barricad.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/barrier.lay mame-0.251+dfsg.1/src/mame/layout/barrier.lay --- mame-0.250+dfsg.1/src/mame/layout/barrier.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/barrier.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bbc.lay mame-0.251+dfsg.1/src/mame/layout/bbc.lay --- mame-0.250+dfsg.1/src/mame/layout/bbc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bbc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bbcm.lay mame-0.251+dfsg.1/src/mame/layout/bbcm.lay --- mame-0.250+dfsg.1/src/mame/layout/bbcm.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bbcm.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bcheetah.lay mame-0.251+dfsg.1/src/mame/layout/bcheetah.lay --- mame-0.250+dfsg.1/src/mame/layout/bcheetah.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bcheetah.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/beaminv.lay mame-0.251+dfsg.1/src/mame/layout/beaminv.lay --- mame-0.250+dfsg.1/src/mame/layout/beaminv.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/beaminv.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/beta.lay mame-0.251+dfsg.1/src/mame/layout/beta.lay --- mame-0.250+dfsg.1/src/mame/layout/beta.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/beta.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bfm_sc4.lay mame-0.251+dfsg.1/src/mame/layout/bfm_sc4.lay --- mame-0.250+dfsg.1/src/mame/layout/bfm_sc4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bfm_sc4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bfm_sc5.lay mame-0.251+dfsg.1/src/mame/layout/bfm_sc5.lay --- mame-0.250+dfsg.1/src/mame/layout/bfm_sc5.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bfm_sc5.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bfmsys85.lay mame-0.251+dfsg.1/src/mame/layout/bfmsys85.lay --- mame-0.250+dfsg.1/src/mame/layout/bfmsys85.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bfmsys85.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bigtrak.lay mame-0.251+dfsg.1/src/mame/layout/bigtrak.lay --- mame-0.250+dfsg.1/src/mame/layout/bigtrak.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bigtrak.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bingo.lay mame-0.251+dfsg.1/src/mame/layout/bingo.lay --- mame-0.250+dfsg.1/src/mame/layout/bingo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bingo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bingowng.lay mame-0.251+dfsg.1/src/mame/layout/bingowng.lay --- mame-0.250+dfsg.1/src/mame/layout/bingowng.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bingowng.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/blastit.lay mame-0.251+dfsg.1/src/mame/layout/blastit.lay --- mame-0.250+dfsg.1/src/mame/layout/blastit.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/blastit.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/blckjack.lay mame-0.251+dfsg.1/src/mame/layout/blckjack.lay --- mame-0.250+dfsg.1/src/mame/layout/blckjack.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/blckjack.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/blockade.lay mame-0.251+dfsg.1/src/mame/layout/blockade.lay --- mame-0.250+dfsg.1/src/mame/layout/blockade.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/blockade.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/blockch.lay mame-0.251+dfsg.1/src/mame/layout/blockch.lay --- mame-0.250+dfsg.1/src/mame/layout/blockch.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/blockch.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bmboxing.lay mame-0.251+dfsg.1/src/mame/layout/bmboxing.lay --- mame-0.250+dfsg.1/src/mame/layout/bmboxing.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bmboxing.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bmiidx.lay mame-0.251+dfsg.1/src/mame/layout/bmiidx.lay --- mame-0.250+dfsg.1/src/mame/layout/bmiidx.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bmiidx.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bmsafari.lay mame-0.251+dfsg.1/src/mame/layout/bmsafari.lay --- mame-0.250+dfsg.1/src/mame/layout/bmsafari.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bmsafari.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bob85.lay mame-0.251+dfsg.1/src/mame/layout/bob85.lay --- mame-0.250+dfsg.1/src/mame/layout/bob85.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bob85.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bonuscrd.lay mame-0.251+dfsg.1/src/mame/layout/bonuscrd.lay --- mame-0.250+dfsg.1/src/mame/layout/bonuscrd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bonuscrd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bparty.lay mame-0.251+dfsg.1/src/mame/layout/bparty.lay --- mame-0.250+dfsg.1/src/mame/layout/bparty.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bparty.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/brainbaf.lay mame-0.251+dfsg.1/src/mame/layout/brainbaf.lay --- mame-0.250+dfsg.1/src/mame/layout/brainbaf.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/brainbaf.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/breakout.lay mame-0.251+dfsg.1/src/mame/layout/breakout.lay --- mame-0.250+dfsg.1/src/mame/layout/breakout.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/breakout.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bship82.lay mame-0.251+dfsg.1/src/mame/layout/bship82.lay --- mame-0.250+dfsg.1/src/mame/layout/bship82.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bship82.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bship.lay mame-0.251+dfsg.1/src/mame/layout/bship.lay --- mame-0.250+dfsg.1/src/mame/layout/bship.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bship.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/buckrog.lay mame-0.251+dfsg.1/src/mame/layout/buckrog.lay --- mame-0.250+dfsg.1/src/mame/layout/buckrog.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/buckrog.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,145 +1,129 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + - - - + + - - - + + - - - + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/buggybjr.lay mame-0.251+dfsg.1/src/mame/layout/buggybjr.lay --- mame-0.250+dfsg.1/src/mame/layout/buggybjr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/buggybjr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/buggyboy.lay mame-0.251+dfsg.1/src/mame/layout/buggyboy.lay --- mame-0.250+dfsg.1/src/mame/layout/buggyboy.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/buggyboy.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/buggychl.lay mame-0.251+dfsg.1/src/mame/layout/buggychl.lay --- mame-0.250+dfsg.1/src/mame/layout/buggychl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/buggychl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bumblbug.lay mame-0.251+dfsg.1/src/mame/layout/bumblbug.lay --- mame-0.250+dfsg.1/src/mame/layout/bumblbug.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bumblbug.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/by17.lay mame-0.251+dfsg.1/src/mame/layout/by17.lay --- mame-0.250+dfsg.1/src/mame/layout/by17.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/by17.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/by6803.lay mame-0.251+dfsg.1/src/mame/layout/by6803.lay --- mame-0.250+dfsg.1/src/mame/layout/by6803.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/by6803.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/bzone.lay mame-0.251+dfsg.1/src/mame/layout/bzone.lay --- mame-0.250+dfsg.1/src/mame/layout/bzone.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/bzone.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/c80.lay mame-0.251+dfsg.1/src/mame/layout/c80.lay --- mame-0.250+dfsg.1/src/mame/layout/c80.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/c80.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/calspeed.lay mame-0.251+dfsg.1/src/mame/layout/calspeed.lay --- mame-0.250+dfsg.1/src/mame/layout/calspeed.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/calspeed.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cambrp.lay mame-0.251+dfsg.1/src/mame/layout/cambrp.lay --- mame-0.250+dfsg.1/src/mame/layout/cambrp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cambrp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/captflag.lay mame-0.251+dfsg.1/src/mame/layout/captflag.lay --- mame-0.250+dfsg.1/src/mame/layout/captflag.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/captflag.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cardline.lay mame-0.251+dfsg.1/src/mame/layout/cardline.lay --- mame-0.250+dfsg.1/src/mame/layout/cardline.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cardline.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cashcatnz.lay mame-0.251+dfsg.1/src/mame/layout/cashcatnz.lay --- mame-0.250+dfsg.1/src/mame/layout/cashcatnz.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cashcatnz.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cashchama.lay mame-0.251+dfsg.1/src/mame/layout/cashchama.lay --- mame-0.250+dfsg.1/src/mame/layout/cashchama.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cashchama.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cashcham.lay mame-0.251+dfsg.1/src/mame/layout/cashcham.lay --- mame-0.250+dfsg.1/src/mame/layout/cashcham.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cashcham.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cashchamnz.lay mame-0.251+dfsg.1/src/mame/layout/cashchamnz.lay --- mame-0.250+dfsg.1/src/mame/layout/cashchamnz.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cashchamnz.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cashchamu.lay mame-0.251+dfsg.1/src/mame/layout/cashchamu.lay --- mame-0.250+dfsg.1/src/mame/layout/cashchamu.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cashchamu.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cbombers.lay mame-0.251+dfsg.1/src/mame/layout/cbombers.lay --- mame-0.250+dfsg.1/src/mame/layout/cbombers.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cbombers.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cc40.lay mame-0.251+dfsg.1/src/mame/layout/cc40.lay --- mame-0.250+dfsg.1/src/mame/layout/cc40.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cc40.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cdi.lay mame-0.251+dfsg.1/src/mame/layout/cdi.lay --- mame-0.250+dfsg.1/src/mame/layout/cdi.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cdi.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cgang.lay mame-0.251+dfsg.1/src/mame/layout/cgang.lay --- mame-0.250+dfsg.1/src/mame/layout/cgang.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cgang.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cgold2.lay mame-0.251+dfsg.1/src/mame/layout/cgold2.lay --- mame-0.250+dfsg.1/src/mame/layout/cgold2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cgold2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/chance32.lay mame-0.251+dfsg.1/src/mame/layout/chance32.lay --- mame-0.250+dfsg.1/src/mame/layout/chance32.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/chance32.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/changela.lay mame-0.251+dfsg.1/src/mame/layout/changela.lay --- mame-0.250+dfsg.1/src/mame/layout/changela.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/changela.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/chasehq.lay mame-0.251+dfsg.1/src/mame/layout/chasehq.lay --- mame-0.250+dfsg.1/src/mame/layout/chasehq.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/chasehq.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/checkma5.lay mame-0.251+dfsg.1/src/mame/layout/checkma5.lay --- mame-0.250+dfsg.1/src/mame/layout/checkma5.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/checkma5.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cherryb3.lay mame-0.251+dfsg.1/src/mame/layout/cherryb3.lay --- mame-0.250+dfsg.1/src/mame/layout/cherryb3.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cherryb3.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/chessmstdm.lay mame-0.251+dfsg.1/src/mame/layout/chessmstdm.lay --- mame-0.250+dfsg.1/src/mame/layout/chessmstdm.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/chessmstdm.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/chessmst.lay mame-0.251+dfsg.1/src/mame/layout/chessmst.lay --- mame-0.250+dfsg.1/src/mame/layout/chessmst.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/chessmst.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/chexx.lay mame-0.251+dfsg.1/src/mame/layout/chexx.lay --- mame-0.250+dfsg.1/src/mame/layout/chexx.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/chexx.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/chickna5v.lay mame-0.251+dfsg.1/src/mame/layout/chickna5v.lay --- mame-0.250+dfsg.1/src/mame/layout/chickna5v.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/chickna5v.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/chqflag.lay mame-0.251+dfsg.1/src/mame/layout/chqflag.lay --- mame-0.250+dfsg.1/src/mame/layout/chqflag.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/chqflag.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/chrygld.lay mame-0.251+dfsg.1/src/mame/layout/chrygld.lay --- mame-0.250+dfsg.1/src/mame/layout/chrygld.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/chrygld.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cischeat.lay mame-0.251+dfsg.1/src/mame/layout/cischeat.lay --- mame-0.250+dfsg.1/src/mame/layout/cischeat.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cischeat.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ck_master.lay mame-0.251+dfsg.1/src/mame/layout/ck_master.lay --- mame-0.250+dfsg.1/src/mame/layout/ck_master.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ck_master.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/clowns.lay mame-0.251+dfsg.1/src/mame/layout/clowns.lay --- mame-0.250+dfsg.1/src/mame/layout/clowns.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/clowns.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cmasterb.lay mame-0.251+dfsg.1/src/mame/layout/cmasterb.lay --- mame-0.250+dfsg.1/src/mame/layout/cmasterb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cmasterb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cmsport.lay mame-0.251+dfsg.1/src/mame/layout/cmsport.lay --- mame-0.250+dfsg.1/src/mame/layout/cmsport.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cmsport.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cmv4.lay mame-0.251+dfsg.1/src/mame/layout/cmv4.lay --- mame-0.250+dfsg.1/src/mame/layout/cmv4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cmv4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cnfball2.lay mame-0.251+dfsg.1/src/mame/layout/cnfball2.lay --- mame-0.250+dfsg.1/src/mame/layout/cnfball2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cnfball2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cnfball.lay mame-0.251+dfsg.1/src/mame/layout/cnfball.lay --- mame-0.250+dfsg.1/src/mame/layout/cnfball.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cnfball.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cnsector.lay mame-0.251+dfsg.1/src/mame/layout/cnsector.lay --- mame-0.250+dfsg.1/src/mame/layout/cnsector.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cnsector.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/comp4.lay mame-0.251+dfsg.1/src/mame/layout/comp4.lay --- mame-0.250+dfsg.1/src/mame/layout/comp4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/comp4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/conchess.lay mame-0.251+dfsg.1/src/mame/layout/conchess.lay --- mame-0.250+dfsg.1/src/mame/layout/conchess.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/conchess.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/conic_cchess2.lay mame-0.251+dfsg.1/src/mame/layout/conic_cchess2.lay --- mame-0.250+dfsg.1/src/mame/layout/conic_cchess2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/conic_cchess2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/conic_cchess.lay mame-0.251+dfsg.1/src/mame/layout/conic_cchess.lay --- mame-0.250+dfsg.1/src/mame/layout/conic_cchess.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/conic_cchess.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/connect4.lay mame-0.251+dfsg.1/src/mame/layout/connect4.lay --- mame-0.250+dfsg.1/src/mame/layout/connect4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/connect4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ @@ -217,44 +217,44 @@ - + - + - + - + - + - + - + - + @@ -800,7 +800,15 @@ + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/contcirc.lay mame-0.251+dfsg.1/src/mame/layout/contcirc.lay --- mame-0.250+dfsg.1/src/mame/layout/contcirc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/contcirc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ @@ -96,6 +96,8 @@ + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/cops.lay mame-0.251+dfsg.1/src/mame/layout/cops.lay --- mame-0.250+dfsg.1/src/mame/layout/cops.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cops.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/copsnrob.lay mame-0.251+dfsg.1/src/mame/layout/copsnrob.lay --- mame-0.250+dfsg.1/src/mame/layout/copsnrob.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/copsnrob.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/copycat.lay mame-0.251+dfsg.1/src/mame/layout/copycat.lay --- mame-0.250+dfsg.1/src/mame/layout/copycat.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/copycat.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/copycatm2.lay mame-0.251+dfsg.1/src/mame/layout/copycatm2.lay --- mame-0.250+dfsg.1/src/mame/layout/copycatm2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/copycatm2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/coralrc2.lay mame-0.251+dfsg.1/src/mame/layout/coralrc2.lay --- mame-0.250+dfsg.1/src/mame/layout/coralrc2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/coralrc2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cosmicm.lay mame-0.251+dfsg.1/src/mame/layout/cosmicm.lay --- mame-0.250+dfsg.1/src/mame/layout/cosmicm.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cosmicm.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cosmicos.lay mame-0.251+dfsg.1/src/mame/layout/cosmicos.lay --- mame-0.250+dfsg.1/src/mame/layout/cosmicos.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cosmicos.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cp1.lay mame-0.251+dfsg.1/src/mame/layout/cp1.lay --- mame-0.250+dfsg.1/src/mame/layout/cp1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cp1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cqback.lay mame-0.251+dfsg.1/src/mame/layout/cqback.lay --- mame-0.250+dfsg.1/src/mame/layout/cqback.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cqback.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/crash.lay mame-0.251+dfsg.1/src/mame/layout/crash.lay --- mame-0.250+dfsg.1/src/mame/layout/crash.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/crash.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/crazybon.lay mame-0.251+dfsg.1/src/mame/layout/crazybon.lay --- mame-0.250+dfsg.1/src/mame/layout/crazybon.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/crazybon.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/crmaze2p.lay mame-0.251+dfsg.1/src/mame/layout/crmaze2p.lay --- mame-0.250+dfsg.1/src/mame/layout/crmaze2p.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/crmaze2p.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/crmaze4p.lay mame-0.251+dfsg.1/src/mame/layout/crmaze4p.lay --- mame-0.250+dfsg.1/src/mame/layout/crmaze4p.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/crmaze4p.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/crsbingo.lay mame-0.251+dfsg.1/src/mame/layout/crsbingo.lay --- mame-0.250+dfsg.1/src/mame/layout/crsbingo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/crsbingo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/crusnexo.lay mame-0.251+dfsg.1/src/mame/layout/crusnexo.lay --- mame-0.250+dfsg.1/src/mame/layout/crusnexo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/crusnexo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/crusnusa.lay mame-0.251+dfsg.1/src/mame/layout/crusnusa.lay --- mame-0.250+dfsg.1/src/mame/layout/crusnusa.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/crusnusa.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ctk530.lay mame-0.251+dfsg.1/src/mame/layout/ctk530.lay --- mame-0.250+dfsg.1/src/mame/layout/ctk530.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ctk530.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ctntune.lay mame-0.251+dfsg.1/src/mame/layout/ctntune.lay --- mame-0.250+dfsg.1/src/mame/layout/ctntune.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ctntune.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ctstein.lay mame-0.251+dfsg.1/src/mame/layout/ctstein.lay --- mame-0.250+dfsg.1/src/mame/layout/ctstein.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ctstein.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cuckoou.lay mame-0.251+dfsg.1/src/mame/layout/cuckoou.lay --- mame-0.250+dfsg.1/src/mame/layout/cuckoou.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cuckoou.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cvicny.lay mame-0.251+dfsg.1/src/mame/layout/cvicny.lay --- mame-0.250+dfsg.1/src/mame/layout/cvicny.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cvicny.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cxg_ch2001.lay mame-0.251+dfsg.1/src/mame/layout/cxg_ch2001.lay --- mame-0.250+dfsg.1/src/mame/layout/cxg_ch2001.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cxg_ch2001.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cxg_commander.lay mame-0.251+dfsg.1/src/mame/layout/cxg_commander.lay --- mame-0.250+dfsg.1/src/mame/layout/cxg_commander.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cxg_commander.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cxg_dominator.lay mame-0.251+dfsg.1/src/mame/layout/cxg_dominator.lay --- mame-0.250+dfsg.1/src/mame/layout/cxg_dominator.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cxg_dominator.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cxg_scptchess_v1.lay mame-0.251+dfsg.1/src/mame/layout/cxg_scptchess_v1.lay --- mame-0.250+dfsg.1/src/mame/layout/cxg_scptchess_v1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cxg_scptchess_v1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cxg_scptchess_v2.lay mame-0.251+dfsg.1/src/mame/layout/cxg_scptchess_v2.lay --- mame-0.250+dfsg.1/src/mame/layout/cxg_scptchess_v2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cxg_scptchess_v2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cxg_sphinx40.lay mame-0.251+dfsg.1/src/mame/layout/cxg_sphinx40.lay --- mame-0.250+dfsg.1/src/mame/layout/cxg_sphinx40.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cxg_sphinx40.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/cz101.lay mame-0.251+dfsg.1/src/mame/layout/cz101.lay --- mame-0.250+dfsg.1/src/mame/layout/cz101.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/cz101.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/darius.lay mame-0.251+dfsg.1/src/mame/layout/darius.lay --- mame-0.250+dfsg.1/src/mame/layout/darius.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/darius.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dataman.lay mame-0.251+dfsg.1/src/mame/layout/dataman.lay --- mame-0.250+dfsg.1/src/mame/layout/dataman.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dataman.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/datum.lay mame-0.251+dfsg.1/src/mame/layout/datum.lay --- mame-0.250+dfsg.1/src/mame/layout/datum.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/datum.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/db32016.lay mame-0.251+dfsg.1/src/mame/layout/db32016.lay --- mame-0.250+dfsg.1/src/mame/layout/db32016.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/db32016.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dblcrown.lay mame-0.251+dfsg.1/src/mame/layout/dblcrown.lay --- mame-0.250+dfsg.1/src/mame/layout/dblcrown.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dblcrown.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/de1.lay mame-0.251+dfsg.1/src/mame/layout/de1.lay --- mame-0.250+dfsg.1/src/mame/layout/de1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/de1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/debutm.lay mame-0.251+dfsg.1/src/mame/layout/debutm.lay --- mame-0.250+dfsg.1/src/mame/layout/debutm.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/debutm.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/demon.lay mame-0.251+dfsg.1/src/mame/layout/demon.lay --- mame-0.250+dfsg.1/src/mame/layout/demon.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/demon.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dendego.lay mame-0.251+dfsg.1/src/mame/layout/dendego.lay --- mame-0.250+dfsg.1/src/mame/layout/dendego.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dendego.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/depthch.lay mame-0.251+dfsg.1/src/mame/layout/depthch.lay --- mame-0.250+dfsg.1/src/mame/layout/depthch.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/depthch.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/design6.lay mame-0.251+dfsg.1/src/mame/layout/design6.lay --- mame-0.250+dfsg.1/src/mame/layout/design6.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/design6.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dfs500.lay mame-0.251+dfsg.1/src/mame/layout/dfs500.lay --- mame-0.250+dfsg.1/src/mame/layout/dfs500.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dfs500.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/digel804.lay mame-0.251+dfsg.1/src/mame/layout/digel804.lay --- mame-0.250+dfsg.1/src/mame/layout/digel804.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/digel804.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dimtouch.lay mame-0.251+dfsg.1/src/mame/layout/dimtouch.lay --- mame-0.250+dfsg.1/src/mame/layout/dimtouch.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dimtouch.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dinodino.lay mame-0.251+dfsg.1/src/mame/layout/dinodino.lay --- mame-0.250+dfsg.1/src/mame/layout/dinodino.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dinodino.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ditto.lay mame-0.251+dfsg.1/src/mame/layout/ditto.lay --- mame-0.250+dfsg.1/src/mame/layout/ditto.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ditto.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dlair.lay mame-0.251+dfsg.1/src/mame/layout/dlair.lay --- mame-0.250+dfsg.1/src/mame/layout/dlair.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dlair.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dmv.lay mame-0.251+dfsg.1/src/mame/layout/dmv.lay --- mame-0.250+dfsg.1/src/mame/layout/dmv.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dmv.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dolphntrb.lay mame-0.251+dfsg.1/src/mame/layout/dolphntrb.lay --- mame-0.250+dfsg.1/src/mame/layout/dolphntrb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dolphntrb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dolphntrceb.lay mame-0.251+dfsg.1/src/mame/layout/dolphntrceb.lay --- mame-0.250+dfsg.1/src/mame/layout/dolphntrceb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dolphntrceb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dolphntr.lay mame-0.251+dfsg.1/src/mame/layout/dolphntr.lay --- mame-0.250+dfsg.1/src/mame/layout/dolphntr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dolphntr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dolphunk.lay mame-0.251+dfsg.1/src/mame/layout/dolphunk.lay --- mame-0.250+dfsg.1/src/mame/layout/dolphunk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dolphunk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dpoker.lay mame-0.251+dfsg.1/src/mame/layout/dpoker.lay --- mame-0.250+dfsg.1/src/mame/layout/dpoker.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dpoker.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dragrace.lay mame-0.251+dfsg.1/src/mame/layout/dragrace.lay --- mame-0.250+dfsg.1/src/mame/layout/dragrace.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dragrace.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/drdunk.lay mame-0.251+dfsg.1/src/mame/layout/drdunk.lay --- mame-0.250+dfsg.1/src/mame/layout/drdunk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/drdunk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dreamwv.lay mame-0.251+dfsg.1/src/mame/layout/dreamwv.lay --- mame-0.250+dfsg.1/src/mame/layout/dreamwv.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dreamwv.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/drwho.lay mame-0.251+dfsg.1/src/mame/layout/drwho.lay --- mame-0.250+dfsg.1/src/mame/layout/drwho.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/drwho.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dunksunk.lay mame-0.251+dfsg.1/src/mame/layout/dunksunk.lay --- mame-0.250+dfsg.1/src/mame/layout/dunksunk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dunksunk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dx100.lay mame-0.251+dfsg.1/src/mame/layout/dx100.lay --- mame-0.250+dfsg.1/src/mame/layout/dx100.lay 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dx100.lay 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,999 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/dx9.lay mame-0.251+dfsg.1/src/mame/layout/dx9.lay --- mame-0.250+dfsg.1/src/mame/layout/dx9.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dx9.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dxfootb.lay mame-0.251+dfsg.1/src/mame/layout/dxfootb.lay --- mame-0.250+dfsg.1/src/mame/layout/dxfootb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dxfootb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/dynajack.lay mame-0.251+dfsg.1/src/mame/layout/dynajack.lay --- mame-0.250+dfsg.1/src/mame/layout/dynajack.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/dynajack.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/eacc.lay mame-0.251+dfsg.1/src/mame/layout/eacc.lay --- mame-0.250+dfsg.1/src/mame/layout/eacc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/eacc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ebball2.lay mame-0.251+dfsg.1/src/mame/layout/ebball2.lay --- mame-0.250+dfsg.1/src/mame/layout/ebball2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ebball2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ebball3.lay mame-0.251+dfsg.1/src/mame/layout/ebball3.lay --- mame-0.250+dfsg.1/src/mame/layout/ebball3.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ebball3.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ebball.lay mame-0.251+dfsg.1/src/mame/layout/ebball.lay --- mame-0.250+dfsg.1/src/mame/layout/ebball.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ebball.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ebknight.lay mame-0.251+dfsg.1/src/mame/layout/ebknight.lay --- mame-0.250+dfsg.1/src/mame/layout/ebknight.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ebknight.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ecoinf2.lay mame-0.251+dfsg.1/src/mame/layout/ecoinf2.lay --- mame-0.250+dfsg.1/src/mame/layout/ecoinf2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ecoinf2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ @@ -836,48 +836,13 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/ecoinf3.lay mame-0.251+dfsg.1/src/mame/layout/ecoinf3.lay --- mame-0.250+dfsg.1/src/mame/layout/ecoinf3.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ecoinf3.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ @@ -836,48 +836,13 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/ecoinfr.lay mame-0.251+dfsg.1/src/mame/layout/ecoinfr.lay --- mame-0.250+dfsg.1/src/mame/layout/ecoinfr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ecoinfr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/efball.lay mame-0.251+dfsg.1/src/mame/layout/efball.lay --- mame-0.250+dfsg.1/src/mame/layout/efball.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/efball.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/efootb4.lay mame-0.251+dfsg.1/src/mame/layout/efootb4.lay --- mame-0.250+dfsg.1/src/mame/layout/efootb4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/efootb4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/eforest.lay mame-0.251+dfsg.1/src/mame/layout/eforest.lay --- mame-0.250+dfsg.1/src/mame/layout/eforest.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/eforest.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/einvaderc.lay mame-0.251+dfsg.1/src/mame/layout/einvaderc.lay --- mame-0.250+dfsg.1/src/mame/layout/einvaderc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/einvaderc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/einvader.lay mame-0.251+dfsg.1/src/mame/layout/einvader.lay --- mame-0.250+dfsg.1/src/mame/layout/einvader.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/einvader.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/elecbowl.lay mame-0.251+dfsg.1/src/mame/layout/elecbowl.lay --- mame-0.250+dfsg.1/src/mame/layout/elecbowl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/elecbowl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/elecdet.lay mame-0.251+dfsg.1/src/mame/layout/elecdet.lay --- mame-0.250+dfsg.1/src/mame/layout/elecdet.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/elecdet.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/eleciq.lay mame-0.251+dfsg.1/src/mame/layout/eleciq.lay --- mame-0.250+dfsg.1/src/mame/layout/eleciq.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/eleciq.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/elecyoyo.lay mame-0.251+dfsg.1/src/mame/layout/elecyoyo.lay --- mame-0.250+dfsg.1/src/mame/layout/elecyoyo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/elecyoyo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/elekscmp.lay mame-0.251+dfsg.1/src/mame/layout/elekscmp.lay --- mame-0.250+dfsg.1/src/mame/layout/elekscmp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/elekscmp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/elf2.lay mame-0.251+dfsg.1/src/mame/layout/elf2.lay --- mame-0.250+dfsg.1/src/mame/layout/elf2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/elf2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/emma2.lay mame-0.251+dfsg.1/src/mame/layout/emma2.lay --- mame-0.250+dfsg.1/src/mame/layout/emma2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/emma2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/enforceja.lay mame-0.251+dfsg.1/src/mame/layout/enforceja.lay --- mame-0.250+dfsg.1/src/mame/layout/enforceja.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/enforceja.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ @@ -96,6 +96,8 @@ + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/enmirage.lay mame-0.251+dfsg.1/src/mame/layout/enmirage.lay --- mame-0.250+dfsg.1/src/mame/layout/enmirage.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/enmirage.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/epc.lay mame-0.251+dfsg.1/src/mame/layout/epc.lay --- mame-0.250+dfsg.1/src/mame/layout/epc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/epc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/escmars.lay mame-0.251+dfsg.1/src/mame/layout/escmars.lay --- mame-0.250+dfsg.1/src/mame/layout/escmars.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/escmars.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/esoccer.lay mame-0.251+dfsg.1/src/mame/layout/esoccer.lay --- mame-0.250+dfsg.1/src/mame/layout/esoccer.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/esoccer.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/esq1by22.lay mame-0.251+dfsg.1/src/mame/layout/esq1by22.lay --- mame-0.250+dfsg.1/src/mame/layout/esq1by22.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/esq1by22.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/esq2by16.lay mame-0.251+dfsg.1/src/mame/layout/esq2by16.lay --- mame-0.250+dfsg.1/src/mame/layout/esq2by16.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/esq2by16.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/esq2by40.lay mame-0.251+dfsg.1/src/mame/layout/esq2by40.lay --- mame-0.250+dfsg.1/src/mame/layout/esq2by40.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/esq2by40.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/et3400.lay mame-0.251+dfsg.1/src/mame/layout/et3400.lay --- mame-0.250+dfsg.1/src/mame/layout/et3400.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/et3400.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/f1gpstar.lay mame-0.251+dfsg.1/src/mame/layout/f1gpstar.lay --- mame-0.250+dfsg.1/src/mame/layout/f1gpstar.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/f1gpstar.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/f1superb.lay mame-0.251+dfsg.1/src/mame/layout/f1superb.lay --- mame-0.250+dfsg.1/src/mame/layout/f1superb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/f1superb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/f2pbball.lay mame-0.251+dfsg.1/src/mame/layout/f2pbball.lay --- mame-0.250+dfsg.1/src/mame/layout/f2pbball.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/f2pbball.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/f3in1.lay mame-0.251+dfsg.1/src/mame/layout/f3in1.lay --- mame-0.250+dfsg.1/src/mame/layout/f3in1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/f3in1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/f4431.lay mame-0.251+dfsg.1/src/mame/layout/f4431.lay --- mame-0.250+dfsg.1/src/mame/layout/f4431.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/f4431.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fb01.lay mame-0.251+dfsg.1/src/mame/layout/fb01.lay --- mame-0.250+dfsg.1/src/mame/layout/fb01.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fb01.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fccpu1.lay mame-0.251+dfsg.1/src/mame/layout/fccpu1.lay --- mame-0.250+dfsg.1/src/mame/layout/fccpu1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fccpu1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_acr.lay mame-0.251+dfsg.1/src/mame/layout/fidel_acr.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_acr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_acr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_as12.lay mame-0.251+dfsg.1/src/mame/layout/fidel_as12.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_as12.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_as12.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_bcc.lay mame-0.251+dfsg.1/src/mame/layout/fidel_bcc.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_bcc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_bcc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_bkc.lay mame-0.251+dfsg.1/src/mame/layout/fidel_bkc.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_bkc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_bkc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_brc.lay mame-0.251+dfsg.1/src/mame/layout/fidel_brc.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_brc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_brc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_bv3.lay mame-0.251+dfsg.1/src/mame/layout/fidel_bv3.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_bv3.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_bv3.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_cc10c.lay mame-0.251+dfsg.1/src/mame/layout/fidel_cc10c.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_cc10c.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_cc10c.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_cc10.lay mame-0.251+dfsg.1/src/mame/layout/fidel_cc10.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_cc10.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_cc10.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_cc1.lay mame-0.251+dfsg.1/src/mame/layout/fidel_cc1.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_cc1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_cc1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_cc3.lay mame-0.251+dfsg.1/src/mame/layout/fidel_cc3.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_cc3.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_cc3.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_chesster.lay mame-0.251+dfsg.1/src/mame/layout/fidel_chesster.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_chesster.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_chesster.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_cphantom.lay mame-0.251+dfsg.1/src/mame/layout/fidel_cphantom.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_cphantom.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_cphantom.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_cr.lay mame-0.251+dfsg.1/src/mame/layout/fidel_cr.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_cr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_cr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_csc.lay mame-0.251+dfsg.1/src/mame/layout/fidel_csc.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_csc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_csc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_desdis_68kg.lay mame-0.251+dfsg.1/src/mame/layout/fidel_desdis_68kg.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_desdis_68kg.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_desdis_68kg.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_desdis_68kr.lay mame-0.251+dfsg.1/src/mame/layout/fidel_desdis_68kr.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_desdis_68kr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_desdis_68kr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_desdis.lay mame-0.251+dfsg.1/src/mame/layout/fidel_desdis.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_desdis.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_desdis.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_des.lay mame-0.251+dfsg.1/src/mame/layout/fidel_des.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_des.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_des.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_dsc.lay mame-0.251+dfsg.1/src/mame/layout/fidel_dsc.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_dsc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_dsc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_eag_68k.lay mame-0.251+dfsg.1/src/mame/layout/fidel_eag_68k.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_eag_68k.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_eag_68k.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_eag.lay mame-0.251+dfsg.1/src/mame/layout/fidel_eag.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_eag.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_eag.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_eas.lay mame-0.251+dfsg.1/src/mame/layout/fidel_eas.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_eas.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_eas.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_eldorado.lay mame-0.251+dfsg.1/src/mame/layout/fidel_eldorado.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_eldorado.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_eldorado.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_ex_68k.lay mame-0.251+dfsg.1/src/mame/layout/fidel_ex_68k.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_ex_68k.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_ex_68k.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_exb.lay mame-0.251+dfsg.1/src/mame/layout/fidel_exb.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_exb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_exb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_exd.lay mame-0.251+dfsg.1/src/mame/layout/fidel_exd.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_exd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_exd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_ex.lay mame-0.251+dfsg.1/src/mame/layout/fidel_ex.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_ex.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_ex.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_exv.lay mame-0.251+dfsg.1/src/mame/layout/fidel_exv.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_exv.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_exv.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_gambit.lay mame-0.251+dfsg.1/src/mame/layout/fidel_gambit.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_gambit.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_gambit.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_gin.lay mame-0.251+dfsg.1/src/mame/layout/fidel_gin.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_gin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_gin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_msc_v1.lay mame-0.251+dfsg.1/src/mame/layout/fidel_msc_v1.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_msc_v1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_msc_v1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_msc_v2.lay mame-0.251+dfsg.1/src/mame/layout/fidel_msc_v2.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_msc_v2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_msc_v2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_pc.lay mame-0.251+dfsg.1/src/mame/layout/fidel_pc.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_pc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_pc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_phantom.lay mame-0.251+dfsg.1/src/mame/layout/fidel_phantom.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_phantom.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_phantom.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_playmatic.lay mame-0.251+dfsg.1/src/mame/layout/fidel_playmatic.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_playmatic.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_playmatic.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_rsc.lay mame-0.251+dfsg.1/src/mame/layout/fidel_rsc.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_rsc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_rsc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_sc12.lay mame-0.251+dfsg.1/src/mame/layout/fidel_sc12.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_sc12.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_sc12.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_sc6.lay mame-0.251+dfsg.1/src/mame/layout/fidel_sc6.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_sc6.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_sc6.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_sc8.lay mame-0.251+dfsg.1/src/mame/layout/fidel_sc8.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_sc8.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_sc8.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_sc9.lay mame-0.251+dfsg.1/src/mame/layout/fidel_sc9.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_sc9.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_sc9.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_su9.lay mame-0.251+dfsg.1/src/mame/layout/fidel_su9.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_su9.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_su9.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_vcc.lay mame-0.251+dfsg.1/src/mame/layout/fidel_vcc.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_vcc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_vcc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fidel_vsc.lay mame-0.251+dfsg.1/src/mame/layout/fidel_vsc.lay --- mame-0.250+dfsg.1/src/mame/layout/fidel_vsc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fidel_vsc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/finalapr.lay mame-0.251+dfsg.1/src/mame/layout/finalapr.lay --- mame-0.250+dfsg.1/src/mame/layout/finalapr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/finalapr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/finallap.lay mame-0.251+dfsg.1/src/mame/layout/finallap.lay --- mame-0.250+dfsg.1/src/mame/layout/finallap.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/finallap.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fireball.lay mame-0.251+dfsg.1/src/mame/layout/fireball.lay --- mame-0.250+dfsg.1/src/mame/layout/fireball.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fireball.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/firebeat.lay mame-0.251+dfsg.1/src/mame/layout/firebeat.lay --- mame-0.250+dfsg.1/src/mame/layout/firebeat.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/firebeat.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/flash.lay mame-0.251+dfsg.1/src/mame/layout/flash.lay --- mame-0.250+dfsg.1/src/mame/layout/flash.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/flash.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/flicker.lay mame-0.251+dfsg.1/src/mame/layout/flicker.lay --- mame-0.250+dfsg.1/src/mame/layout/flicker.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/flicker.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fortecrd.lay mame-0.251+dfsg.1/src/mame/layout/fortecrd.lay --- mame-0.250+dfsg.1/src/mame/layout/fortecrd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fortecrd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fortellr.lay mame-0.251+dfsg.1/src/mame/layout/fortellr.lay --- mame-0.250+dfsg.1/src/mame/layout/fortellr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fortellr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fruitstb.lay mame-0.251+dfsg.1/src/mame/layout/fruitstb.lay --- mame-0.250+dfsg.1/src/mame/layout/fruitstb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fruitstb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fts2in1.lay mame-0.251+dfsg.1/src/mame/layout/fts2in1.lay --- mame-0.250+dfsg.1/src/mame/layout/fts2in1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fts2in1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/funrlgl.lay mame-0.251+dfsg.1/src/mame/layout/funrlgl.lay --- mame-0.250+dfsg.1/src/mame/layout/funrlgl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/funrlgl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/funtag.lay mame-0.251+dfsg.1/src/mame/layout/funtag.lay --- mame-0.250+dfsg.1/src/mame/layout/funtag.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/funtag.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fvrpitch.lay mame-0.251+dfsg.1/src/mame/layout/fvrpitch.lay --- mame-0.250+dfsg.1/src/mame/layout/fvrpitch.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fvrpitch.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/fxmcr165.lay mame-0.251+dfsg.1/src/mame/layout/fxmcr165.lay --- mame-0.250+dfsg.1/src/mame/layout/fxmcr165.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/fxmcr165.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/g627.lay mame-0.251+dfsg.1/src/mame/layout/g627.lay --- mame-0.250+dfsg.1/src/mame/layout/g627.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/g627.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/galactic.lay mame-0.251+dfsg.1/src/mame/layout/galactic.lay --- mame-0.250+dfsg.1/src/mame/layout/galactic.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/galactic.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/galaxi.lay mame-0.251+dfsg.1/src/mame/layout/galaxi.lay --- mame-0.250+dfsg.1/src/mame/layout/galaxi.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/galaxi.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gamball.lay mame-0.251+dfsg.1/src/mame/layout/gamball.lay --- mame-0.250+dfsg.1/src/mame/layout/gamball.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gamball.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ @@ -466,6 +466,12 @@ + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/gamecom.lay mame-0.251+dfsg.1/src/mame/layout/gamecom.lay --- mame-0.250+dfsg.1/src/mame/layout/gamecom.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gamecom.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gamemach.lay mame-0.251+dfsg.1/src/mame/layout/gamemach.lay --- mame-0.250+dfsg.1/src/mame/layout/gamemach.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gamemach.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gamepock.lay mame-0.251+dfsg.1/src/mame/layout/gamepock.lay --- mame-0.250+dfsg.1/src/mame/layout/gamepock.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gamepock.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gckong.lay mame-0.251+dfsg.1/src/mame/layout/gckong.lay --- mame-0.250+dfsg.1/src/mame/layout/gckong.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gckong.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/geebee.lay mame-0.251+dfsg.1/src/mame/layout/geebee.lay --- mame-0.250+dfsg.1/src/mame/layout/geebee.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/geebee.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/geisha.lay mame-0.251+dfsg.1/src/mame/layout/geisha.lay --- mame-0.250+dfsg.1/src/mame/layout/geisha.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/geisha.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/genmagi.lay mame-0.251+dfsg.1/src/mame/layout/genmagi.lay --- mame-0.250+dfsg.1/src/mame/layout/genmagi.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/genmagi.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gigatron.lay mame-0.251+dfsg.1/src/mame/layout/gigatron.lay --- mame-0.250+dfsg.1/src/mame/layout/gigatron.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gigatron.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gjackpot.lay mame-0.251+dfsg.1/src/mame/layout/gjackpot.lay --- mame-0.250+dfsg.1/src/mame/layout/gjackpot.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gjackpot.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gl3000s.lay mame-0.251+dfsg.1/src/mame/layout/gl3000s.lay --- mame-0.250+dfsg.1/src/mame/layout/gl3000s.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gl3000s.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gldarrow.lay mame-0.251+dfsg.1/src/mame/layout/gldarrow.lay --- mame-0.250+dfsg.1/src/mame/layout/gldarrow.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gldarrow.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gldncrwn.lay mame-0.251+dfsg.1/src/mame/layout/gldncrwn.lay --- mame-0.250+dfsg.1/src/mame/layout/gldncrwn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gldncrwn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gldnpkr.lay mame-0.251+dfsg.1/src/mame/layout/gldnpkr.lay --- mame-0.250+dfsg.1/src/mame/layout/gldnpkr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gldnpkr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/globalfr.lay mame-0.251+dfsg.1/src/mame/layout/globalfr.lay --- mame-0.250+dfsg.1/src/mame/layout/globalfr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/globalfr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ @@ -10,54 +10,13 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/gmaster.lay mame-0.251+dfsg.1/src/mame/layout/gmaster.lay --- mame-0.250+dfsg.1/src/mame/layout/gmaster.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gmaster.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gnw_dualh.lay mame-0.251+dfsg.1/src/mame/layout/gnw_dualh.lay --- mame-0.250+dfsg.1/src/mame/layout/gnw_dualh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gnw_dualh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gnw_dualv.lay mame-0.251+dfsg.1/src/mame/layout/gnw_dualv.lay --- mame-0.250+dfsg.1/src/mame/layout/gnw_dualv.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gnw_dualv.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/goldenc.lay mame-0.251+dfsg.1/src/mame/layout/goldenc.lay --- mame-0.250+dfsg.1/src/mame/layout/goldenc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/goldenc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/goldenra.lay mame-0.251+dfsg.1/src/mame/layout/goldenra.lay --- mame-0.250+dfsg.1/src/mame/layout/goldenra.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/goldenra.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/goldnpkr.lay mame-0.251+dfsg.1/src/mame/layout/goldnpkr.lay --- mame-0.250+dfsg.1/src/mame/layout/goldnpkr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/goldnpkr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/goldpyrb.lay mame-0.251+dfsg.1/src/mame/layout/goldpyrb.lay --- mame-0.250+dfsg.1/src/mame/layout/goldpyrb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/goldpyrb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/goldstar.lay mame-0.251+dfsg.1/src/mame/layout/goldstar.lay --- mame-0.250+dfsg.1/src/mame/layout/goldstar.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/goldstar.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gotcha.lay mame-0.251+dfsg.1/src/mame/layout/gotcha.lay --- mame-0.250+dfsg.1/src/mame/layout/gotcha.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gotcha.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gp_2.lay mame-0.251+dfsg.1/src/mame/layout/gp_2.lay --- mame-0.250+dfsg.1/src/mame/layout/gp_2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gp_2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gpoker.lay mame-0.251+dfsg.1/src/mame/layout/gpoker.lay --- mame-0.250+dfsg.1/src/mame/layout/gpoker.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gpoker.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gravity.lay mame-0.251+dfsg.1/src/mame/layout/gravity.lay --- mame-0.250+dfsg.1/src/mame/layout/gravity.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gravity.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/grchamp.lay mame-0.251+dfsg.1/src/mame/layout/grchamp.lay --- mame-0.250+dfsg.1/src/mame/layout/grchamp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/grchamp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gridiron.lay mame-0.251+dfsg.1/src/mame/layout/gridiron.lay --- mame-0.250+dfsg.1/src/mame/layout/gridiron.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gridiron.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/grobot9.lay mame-0.251+dfsg.1/src/mame/layout/grobot9.lay --- mame-0.250+dfsg.1/src/mame/layout/grobot9.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/grobot9.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gts1.lay mame-0.251+dfsg.1/src/mame/layout/gts1.lay --- mame-0.250+dfsg.1/src/mame/layout/gts1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gts1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gts3.lay mame-0.251+dfsg.1/src/mame/layout/gts3.lay --- mame-0.250+dfsg.1/src/mame/layout/gts3.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gts3.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gts80a_caveman.lay mame-0.251+dfsg.1/src/mame/layout/gts80a_caveman.lay --- mame-0.250+dfsg.1/src/mame/layout/gts80a_caveman.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gts80a_caveman.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gts80a.lay mame-0.251+dfsg.1/src/mame/layout/gts80a.lay --- mame-0.250+dfsg.1/src/mame/layout/gts80a.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gts80a.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gts80b.lay mame-0.251+dfsg.1/src/mame/layout/gts80b.lay --- mame-0.250+dfsg.1/src/mame/layout/gts80b.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gts80b.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gts80.lay mame-0.251+dfsg.1/src/mame/layout/gts80.lay --- mame-0.250+dfsg.1/src/mame/layout/gts80.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gts80.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/guab.lay mame-0.251+dfsg.1/src/mame/layout/guab.lay --- mame-0.250+dfsg.1/src/mame/layout/guab.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/guab.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gunchamp.lay mame-0.251+dfsg.1/src/mame/layout/gunchamp.lay --- mame-0.250+dfsg.1/src/mame/layout/gunchamp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gunchamp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gunchamps.lay mame-0.251+dfsg.1/src/mame/layout/gunchamps.lay --- mame-0.250+dfsg.1/src/mame/layout/gunchamps.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gunchamps.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gunfight.lay mame-0.251+dfsg.1/src/mame/layout/gunfight.lay --- mame-0.250+dfsg.1/src/mame/layout/gunfight.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gunfight.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gunnrose.lay mame-0.251+dfsg.1/src/mame/layout/gunnrose.lay --- mame-0.250+dfsg.1/src/mame/layout/gunnrose.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gunnrose.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/gypsyjug.lay mame-0.251+dfsg.1/src/mame/layout/gypsyjug.lay --- mame-0.250+dfsg.1/src/mame/layout/gypsyjug.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/gypsyjug.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/h2hbaseb.lay mame-0.251+dfsg.1/src/mame/layout/h2hbaseb.lay --- mame-0.250+dfsg.1/src/mame/layout/h2hbaseb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/h2hbaseb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/h2hbaskbc.lay mame-0.251+dfsg.1/src/mame/layout/h2hbaskbc.lay --- mame-0.250+dfsg.1/src/mame/layout/h2hbaskbc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/h2hbaskbc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/h2hbaskb.lay mame-0.251+dfsg.1/src/mame/layout/h2hbaskb.lay --- mame-0.250+dfsg.1/src/mame/layout/h2hbaskb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/h2hbaskb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/h2hboxing.lay mame-0.251+dfsg.1/src/mame/layout/h2hboxing.lay --- mame-0.250+dfsg.1/src/mame/layout/h2hboxing.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/h2hboxing.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/h2hfootb.lay mame-0.251+dfsg.1/src/mame/layout/h2hfootb.lay --- mame-0.250+dfsg.1/src/mame/layout/h2hfootb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/h2hfootb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/h2hhockeyc.lay mame-0.251+dfsg.1/src/mame/layout/h2hhockeyc.lay --- mame-0.250+dfsg.1/src/mame/layout/h2hhockeyc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/h2hhockeyc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/h2hhockey.lay mame-0.251+dfsg.1/src/mame/layout/h2hhockey.lay --- mame-0.250+dfsg.1/src/mame/layout/h2hhockey.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/h2hhockey.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/h2hsoccerc.lay mame-0.251+dfsg.1/src/mame/layout/h2hsoccerc.lay --- mame-0.250+dfsg.1/src/mame/layout/h2hsoccerc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/h2hsoccerc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/h8.lay mame-0.251+dfsg.1/src/mame/layout/h8.lay --- mame-0.250+dfsg.1/src/mame/layout/h8.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/h8.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hankin.lay mame-0.251+dfsg.1/src/mame/layout/hankin.lay --- mame-0.250+dfsg.1/src/mame/layout/hankin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hankin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hc110.lay mame-0.251+dfsg.1/src/mame/layout/hc110.lay --- mame-0.250+dfsg.1/src/mame/layout/hc110.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hc110.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hccbaskb.lay mame-0.251+dfsg.1/src/mame/layout/hccbaskb.lay --- mame-0.250+dfsg.1/src/mame/layout/hccbaskb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hccbaskb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hh_cop400_test.lay mame-0.251+dfsg.1/src/mame/layout/hh_cop400_test.lay --- mame-0.250+dfsg.1/src/mame/layout/hh_cop400_test.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hh_cop400_test.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hh_cops1_test.lay mame-0.251+dfsg.1/src/mame/layout/hh_cops1_test.lay --- mame-0.250+dfsg.1/src/mame/layout/hh_cops1_test.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hh_cops1_test.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hh_hmcs40_test.lay mame-0.251+dfsg.1/src/mame/layout/hh_hmcs40_test.lay --- mame-0.250+dfsg.1/src/mame/layout/hh_hmcs40_test.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hh_hmcs40_test.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hh_melps4_test.lay mame-0.251+dfsg.1/src/mame/layout/hh_melps4_test.lay --- mame-0.250+dfsg.1/src/mame/layout/hh_melps4_test.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hh_melps4_test.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hh_pic16_test.lay mame-0.251+dfsg.1/src/mame/layout/hh_pic16_test.lay --- mame-0.250+dfsg.1/src/mame/layout/hh_pic16_test.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hh_pic16_test.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hh_pps41_test.lay mame-0.251+dfsg.1/src/mame/layout/hh_pps41_test.lay --- mame-0.250+dfsg.1/src/mame/layout/hh_pps41_test.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hh_pps41_test.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hh_rw5000_test.lay mame-0.251+dfsg.1/src/mame/layout/hh_rw5000_test.lay --- mame-0.250+dfsg.1/src/mame/layout/hh_rw5000_test.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hh_rw5000_test.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hh_sm500_test.lay mame-0.251+dfsg.1/src/mame/layout/hh_sm500_test.lay --- mame-0.250+dfsg.1/src/mame/layout/hh_sm500_test.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hh_sm500_test.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hh_sm510_test.lay mame-0.251+dfsg.1/src/mame/layout/hh_sm510_test.lay --- mame-0.250+dfsg.1/src/mame/layout/hh_sm510_test.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hh_sm510_test.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hh_tms1k_test.lay mame-0.251+dfsg.1/src/mame/layout/hh_tms1k_test.lay --- mame-0.250+dfsg.1/src/mame/layout/hh_tms1k_test.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hh_tms1k_test.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hh_ucom4_test.lay mame-0.251+dfsg.1/src/mame/layout/hh_ucom4_test.lay --- mame-0.250+dfsg.1/src/mame/layout/hh_ucom4_test.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hh_ucom4_test.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hitparade.lay mame-0.251+dfsg.1/src/mame/layout/hitparade.lay --- mame-0.250+dfsg.1/src/mame/layout/hitparade.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hitparade.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/horocomp.lay mame-0.251+dfsg.1/src/mame/layout/horocomp.lay --- mame-0.250+dfsg.1/src/mame/layout/horocomp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/horocomp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/horseran.lay mame-0.251+dfsg.1/src/mame/layout/horseran.lay --- mame-0.250+dfsg.1/src/mame/layout/horseran.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/horseran.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hotchili.lay mame-0.251+dfsg.1/src/mame/layout/hotchili.lay --- mame-0.250+dfsg.1/src/mame/layout/hotchili.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hotchili.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hp2640.lay mame-0.251+dfsg.1/src/mame/layout/hp2640.lay --- mame-0.250+dfsg.1/src/mame/layout/hp2640.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hp2640.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hp3478a.lay mame-0.251+dfsg.1/src/mame/layout/hp3478a.lay --- mame-0.250+dfsg.1/src/mame/layout/hp3478a.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hp3478a.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hp86b.lay mame-0.251+dfsg.1/src/mame/layout/hp86b.lay --- mame-0.250+dfsg.1/src/mame/layout/hp86b.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hp86b.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hp9825.lay mame-0.251+dfsg.1/src/mame/layout/hp9825.lay --- mame-0.250+dfsg.1/src/mame/layout/hp9825.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hp9825.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hp9845b.lay mame-0.251+dfsg.1/src/mame/layout/hp9845b.lay --- mame-0.250+dfsg.1/src/mame/layout/hp9845b.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hp9845b.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hp9k_3xx.lay mame-0.251+dfsg.1/src/mame/layout/hp9k_3xx.lay --- mame-0.250+dfsg.1/src/mame/layout/hp9k_3xx.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hp9k_3xx.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/hyprdriv.lay mame-0.251+dfsg.1/src/mame/layout/hyprdriv.lay --- mame-0.250+dfsg.1/src/mame/layout/hyprdriv.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/hyprdriv.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ibm6580.lay mame-0.251+dfsg.1/src/mame/layout/ibm6580.lay --- mame-0.250+dfsg.1/src/mame/layout/ibm6580.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ibm6580.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/icecold.lay mame-0.251+dfsg.1/src/mame/layout/icecold.lay --- mame-0.250+dfsg.1/src/mame/layout/icecold.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/icecold.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/igspoker.lay mame-0.251+dfsg.1/src/mame/layout/igspoker.lay --- mame-0.250+dfsg.1/src/mame/layout/igspoker.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/igspoker.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/igsslot.lay mame-0.251+dfsg.1/src/mame/layout/igsslot.lay --- mame-0.250+dfsg.1/src/mame/layout/igsslot.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/igsslot.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/im01.lay mame-0.251+dfsg.1/src/mame/layout/im01.lay --- mame-0.250+dfsg.1/src/mame/layout/im01.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/im01.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/im05.lay mame-0.251+dfsg.1/src/mame/layout/im05.lay --- mame-0.250+dfsg.1/src/mame/layout/im05.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/im05.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/imolagp.lay mame-0.251+dfsg.1/src/mame/layout/imolagp.lay --- mame-0.250+dfsg.1/src/mame/layout/imolagp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/imolagp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/incasun.lay mame-0.251+dfsg.1/src/mame/layout/incasun.lay --- mame-0.250+dfsg.1/src/mame/layout/incasun.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/incasun.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/incasunnz.lay mame-0.251+dfsg.1/src/mame/layout/incasunnz.lay --- mame-0.250+dfsg.1/src/mame/layout/incasunnz.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/incasunnz.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/inder.lay mame-0.251+dfsg.1/src/mame/layout/inder.lay --- mame-0.250+dfsg.1/src/mame/layout/inder.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/inder.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/inderp.lay mame-0.251+dfsg.1/src/mame/layout/inderp.lay --- mame-0.250+dfsg.1/src/mame/layout/inderp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/inderp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/indrema5.lay mame-0.251+dfsg.1/src/mame/layout/indrema5.lay --- mame-0.250+dfsg.1/src/mame/layout/indrema5.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/indrema5.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/instruct.lay mame-0.251+dfsg.1/src/mame/layout/instruct.lay --- mame-0.250+dfsg.1/src/mame/layout/instruct.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/instruct.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/intellect02.lay mame-0.251+dfsg.1/src/mame/layout/intellect02.lay --- mame-0.250+dfsg.1/src/mame/layout/intellect02.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/intellect02.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/interpro.lay mame-0.251+dfsg.1/src/mame/layout/interpro.lay --- mame-0.250+dfsg.1/src/mame/layout/interpro.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/interpro.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/invad2ct.lay mame-0.251+dfsg.1/src/mame/layout/invad2ct.lay --- mame-0.250+dfsg.1/src/mame/layout/invad2ct.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/invad2ct.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/invaders.lay mame-0.251+dfsg.1/src/mame/layout/invaders.lay --- mame-0.250+dfsg.1/src/mame/layout/invaders.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/invaders.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/irrmaze.lay mame-0.251+dfsg.1/src/mame/layout/irrmaze.lay --- mame-0.250+dfsg.1/src/mame/layout/irrmaze.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/irrmaze.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2adnote.lay mame-0.251+dfsg.1/src/mame/layout/j2adnote.lay --- mame-0.250+dfsg.1/src/mame/layout/j2adnote.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2adnote.lay 2022-12-29 14:20:09.000000000 +0000 @@ -166,7 +166,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -1958,7 +1958,7 @@ - + @@ -1998,7 +1998,7 @@ - + @@ -2018,7 +2018,7 @@ - + @@ -2038,7 +2038,7 @@ - + @@ -2198,7 +2198,7 @@ - + @@ -2482,7 +2482,7 @@ - + @@ -2500,7 +2500,7 @@ - + @@ -2518,19 +2518,19 @@ - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2always.lay mame-0.251+dfsg.1/src/mame/layout/j2always.lay --- mame-0.250+dfsg.1/src/mame/layout/j2always.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2always.lay 2022-12-29 14:20:09.000000000 +0000 @@ -86,7 +86,7 @@ - + @@ -430,7 +430,7 @@ - + @@ -570,7 +570,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2bankch.lay mame-0.251+dfsg.1/src/mame/layout/j2bankch.lay --- mame-0.250+dfsg.1/src/mame/layout/j2bankch.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2bankch.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -578,7 +578,7 @@ - + @@ -598,7 +598,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -638,7 +638,7 @@ - + @@ -658,7 +658,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -698,7 +698,7 @@ - + @@ -718,7 +718,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -970,7 +970,7 @@ - + @@ -990,7 +990,7 @@ - + @@ -1090,7 +1090,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1754,7 +1754,7 @@ - + @@ -1849,31 +1849,31 @@ - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2bigbnk.lay mame-0.251+dfsg.1/src/mame/layout/j2bigbnk.lay --- mame-0.250+dfsg.1/src/mame/layout/j2bigbnk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2bigbnk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -230,7 +230,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -1310,7 +1310,7 @@ - + @@ -1330,7 +1330,7 @@ - + @@ -1350,7 +1350,7 @@ - + @@ -1370,7 +1370,7 @@ - + @@ -1638,7 +1638,7 @@ - + @@ -1658,7 +1658,7 @@ - + @@ -1678,7 +1678,7 @@ - + @@ -1698,7 +1698,7 @@ - + @@ -2110,7 +2110,7 @@ - + @@ -2319,7 +2319,7 @@ - + @@ -2355,13 +2355,13 @@ - + - + @@ -2371,7 +2371,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2bigbox.lay mame-0.251+dfsg.1/src/mame/layout/j2bigbox.lay --- mame-0.250+dfsg.1/src/mame/layout/j2bigbox.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2bigbox.lay 2022-12-29 14:20:09.000000000 +0000 @@ -266,7 +266,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2blustr.lay mame-0.251+dfsg.1/src/mame/layout/j2blustr.lay --- mame-0.250+dfsg.1/src/mame/layout/j2blustr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2blustr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -1306,7 +1306,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2cashbn.lay mame-0.251+dfsg.1/src/mame/layout/j2cashbn.lay --- mame-0.250+dfsg.1/src/mame/layout/j2cashbn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2cashbn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -190,7 +190,7 @@ - + @@ -374,7 +374,7 @@ - + @@ -394,7 +394,7 @@ - + @@ -414,7 +414,7 @@ - + @@ -434,7 +434,7 @@ - + @@ -454,7 +454,7 @@ - + @@ -474,7 +474,7 @@ - + @@ -494,7 +494,7 @@ - + @@ -514,7 +514,7 @@ - + @@ -534,7 +534,7 @@ - + @@ -554,7 +554,7 @@ - + @@ -1094,7 +1094,7 @@ - + @@ -1114,7 +1114,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1154,7 +1154,7 @@ - + @@ -1174,7 +1174,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1214,7 +1214,7 @@ - + @@ -1234,7 +1234,7 @@ - + @@ -1254,7 +1254,7 @@ - + @@ -1274,7 +1274,7 @@ - + @@ -1294,7 +1294,7 @@ - + @@ -1314,7 +1314,7 @@ - + @@ -1334,7 +1334,7 @@ - + @@ -1354,7 +1354,7 @@ - + @@ -1374,7 +1374,7 @@ - + @@ -1394,7 +1394,7 @@ - + @@ -1414,7 +1414,7 @@ - + @@ -1434,7 +1434,7 @@ - + @@ -1454,7 +1454,7 @@ - + @@ -1474,7 +1474,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -1922,7 +1922,7 @@ - + @@ -2028,85 +2028,85 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2cashrl.lay mame-0.251+dfsg.1/src/mame/layout/j2cashrl.lay --- mame-0.250+dfsg.1/src/mame/layout/j2cashrl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2cashrl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -518,7 +518,7 @@ - + @@ -638,7 +638,7 @@ - + @@ -658,7 +658,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -1318,7 +1318,7 @@ - + @@ -1378,7 +1378,7 @@ - + @@ -1398,7 +1398,7 @@ - + @@ -1538,7 +1538,7 @@ - + @@ -1558,7 +1558,7 @@ - + @@ -2003,13 +2003,13 @@ - + - + @@ -2033,7 +2033,7 @@ - + @@ -2045,7 +2045,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2cashro.lay mame-0.251+dfsg.1/src/mame/layout/j2cashro.lay --- mame-0.250+dfsg.1/src/mame/layout/j2cashro.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2cashro.lay 2022-12-29 14:20:09.000000000 +0000 @@ -810,7 +810,7 @@ - + @@ -830,7 +830,7 @@ - + @@ -850,7 +850,7 @@ - + @@ -870,7 +870,7 @@ - + @@ -890,7 +890,7 @@ - + @@ -1010,7 +1010,7 @@ - + @@ -1050,7 +1050,7 @@ - + @@ -1070,7 +1070,7 @@ - + @@ -1090,7 +1090,7 @@ - + @@ -1110,7 +1110,7 @@ - + @@ -1658,7 +1658,7 @@ - + @@ -1678,7 +1678,7 @@ - + @@ -1766,7 +1766,7 @@ - + @@ -1826,7 +1826,7 @@ - + @@ -2307,7 +2307,7 @@ - + @@ -2323,7 +2323,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2cashrv.lay mame-0.251+dfsg.1/src/mame/layout/j2cashrv.lay --- mame-0.250+dfsg.1/src/mame/layout/j2cashrv.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2cashrv.lay 2022-12-29 14:20:09.000000000 +0000 @@ -598,7 +598,7 @@ - + @@ -638,7 +638,7 @@ - + @@ -658,7 +658,7 @@ - + @@ -1567,19 +1567,19 @@ - + - + - + @@ -1597,7 +1597,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2cashtk.lay mame-0.251+dfsg.1/src/mame/layout/j2cashtk.lay --- mame-0.250+dfsg.1/src/mame/layout/j2cashtk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2cashtk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1338,7 +1338,7 @@ - + @@ -1482,7 +1482,7 @@ - + @@ -1948,7 +1948,7 @@ - + @@ -1972,7 +1972,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2coinsh.lay mame-0.251+dfsg.1/src/mame/layout/j2coinsh.lay --- mame-0.250+dfsg.1/src/mame/layout/j2coinsh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2coinsh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -382,7 +382,7 @@ - + @@ -402,7 +402,7 @@ - + @@ -1507,13 +1507,13 @@ - + - + @@ -1607,13 +1607,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2coppot.lay mame-0.251+dfsg.1/src/mame/layout/j2coppot.lay --- mame-0.250+dfsg.1/src/mame/layout/j2coppot.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2coppot.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1406,7 +1406,7 @@ - + @@ -1446,7 +1446,7 @@ - + @@ -2013,13 +2013,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2criscr.lay mame-0.251+dfsg.1/src/mame/layout/j2criscr.lay --- mame-0.250+dfsg.1/src/mame/layout/j2criscr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2criscr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -258,7 +258,7 @@ - + @@ -278,7 +278,7 @@ - + @@ -298,7 +298,7 @@ - + @@ -318,7 +318,7 @@ - + @@ -338,7 +338,7 @@ - + @@ -378,7 +378,7 @@ - + @@ -398,7 +398,7 @@ - + @@ -778,7 +778,7 @@ - + @@ -893,7 +893,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2crown.lay mame-0.251+dfsg.1/src/mame/layout/j2crown.lay --- mame-0.250+dfsg.1/src/mame/layout/j2crown.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2crown.lay 2022-12-29 14:20:09.000000000 +0000 @@ -130,7 +130,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -505,25 +505,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2cshalm.lay mame-0.251+dfsg.1/src/mame/layout/j2cshalm.lay --- mame-0.250+dfsg.1/src/mame/layout/j2cshalm.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2cshalm.lay 2022-12-29 14:20:09.000000000 +0000 @@ -298,7 +298,7 @@ - + @@ -342,7 +342,7 @@ - + @@ -402,7 +402,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -786,7 +786,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2cshcrd.lay mame-0.251+dfsg.1/src/mame/layout/j2cshcrd.lay --- mame-0.250+dfsg.1/src/mame/layout/j2cshcrd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2cshcrd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -990,7 +990,7 @@ - + @@ -1254,7 +1254,7 @@ - + @@ -1354,7 +1354,7 @@ - + @@ -1914,7 +1914,7 @@ - + @@ -2043,7 +2043,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2cshfil.lay mame-0.251+dfsg.1/src/mame/layout/j2cshfil.lay --- mame-0.250+dfsg.1/src/mame/layout/j2cshfil.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2cshfil.lay 2022-12-29 14:20:09.000000000 +0000 @@ -674,7 +674,7 @@ - + @@ -694,7 +694,7 @@ - + @@ -714,7 +714,7 @@ - + @@ -1858,7 +1858,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2cshnud.lay mame-0.251+dfsg.1/src/mame/layout/j2cshnud.lay --- mame-0.250+dfsg.1/src/mame/layout/j2cshnud.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2cshnud.lay 2022-12-29 14:20:09.000000000 +0000 @@ -126,7 +126,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2cshsmh.lay mame-0.251+dfsg.1/src/mame/layout/j2cshsmh.lay --- mame-0.250+dfsg.1/src/mame/layout/j2cshsmh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2cshsmh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -310,7 +310,7 @@ - + @@ -2066,7 +2066,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2cvault.lay mame-0.251+dfsg.1/src/mame/layout/j2cvault.lay --- mame-0.250+dfsg.1/src/mame/layout/j2cvault.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2cvault.lay 2022-12-29 14:20:09.000000000 +0000 @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -894,7 +894,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -954,7 +954,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -994,7 +994,7 @@ - + @@ -1074,7 +1074,7 @@ - + @@ -1094,7 +1094,7 @@ - + @@ -1114,7 +1114,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1154,7 +1154,7 @@ - + @@ -1294,7 +1294,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2droplt.lay mame-0.251+dfsg.1/src/mame/layout/j2droplt.lay --- mame-0.250+dfsg.1/src/mame/layout/j2droplt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2droplt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -438,7 +438,7 @@ - + @@ -458,7 +458,7 @@ - + @@ -478,7 +478,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -930,7 +930,7 @@ - + @@ -1308,13 +1308,13 @@ - + - + @@ -1330,7 +1330,7 @@ - + @@ -1360,19 +1360,19 @@ - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2ewn.lay mame-0.251+dfsg.1/src/mame/layout/j2ewn.lay --- mame-0.250+dfsg.1/src/mame/layout/j2ewn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2ewn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -759,19 +759,19 @@ - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2ews.lay mame-0.251+dfsg.1/src/mame/layout/j2ews.lay --- mame-0.250+dfsg.1/src/mame/layout/j2ews.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2ews.lay 2022-12-29 14:20:09.000000000 +0000 @@ -110,7 +110,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -767,19 +767,19 @@ - + - + - + @@ -809,7 +809,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2exec.lay mame-0.251+dfsg.1/src/mame/layout/j2exec.lay --- mame-0.250+dfsg.1/src/mame/layout/j2exec.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2exec.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -1406,7 +1406,7 @@ - + @@ -1674,85 +1674,85 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2fasttk.lay mame-0.251+dfsg.1/src/mame/layout/j2fasttk.lay --- mame-0.250+dfsg.1/src/mame/layout/j2fasttk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2fasttk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -854,7 +854,7 @@ - + @@ -874,7 +874,7 @@ - + @@ -994,7 +994,7 @@ - + @@ -1938,7 +1938,7 @@ - + @@ -1958,7 +1958,7 @@ - + @@ -1998,7 +1998,7 @@ - + @@ -2038,7 +2038,7 @@ - + @@ -2098,7 +2098,7 @@ - + @@ -2118,7 +2118,7 @@ - + @@ -2178,7 +2178,7 @@ - + @@ -2218,7 +2218,7 @@ - + @@ -2406,7 +2406,7 @@ - + @@ -2539,13 +2539,13 @@ - + - + @@ -2575,7 +2575,7 @@ - + @@ -2587,7 +2587,7 @@ - + @@ -2605,7 +2605,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2fiveal.lay mame-0.251+dfsg.1/src/mame/layout/j2fiveal.lay --- mame-0.250+dfsg.1/src/mame/layout/j2fiveal.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2fiveal.lay 2022-12-29 14:20:09.000000000 +0000 @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -1866,7 +1866,7 @@ - + @@ -2050,7 +2050,7 @@ - + @@ -2151,7 +2151,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2fiveln.lay mame-0.251+dfsg.1/src/mame/layout/j2fiveln.lay --- mame-0.250+dfsg.1/src/mame/layout/j2fiveln.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2fiveln.lay 2022-12-29 14:20:09.000000000 +0000 @@ -182,7 +182,7 @@ - + @@ -202,7 +202,7 @@ - + @@ -222,7 +222,7 @@ - + @@ -262,7 +262,7 @@ - + @@ -322,7 +322,7 @@ - + @@ -482,7 +482,7 @@ - + @@ -542,7 +542,7 @@ - + @@ -562,7 +562,7 @@ - + @@ -582,7 +582,7 @@ - + @@ -1046,7 +1046,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2fqueen.lay mame-0.251+dfsg.1/src/mame/layout/j2fqueen.lay --- mame-0.250+dfsg.1/src/mame/layout/j2fqueen.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2fqueen.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -870,7 +870,7 @@ - + @@ -910,7 +910,7 @@ - + @@ -930,7 +930,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -970,7 +970,7 @@ - + @@ -990,7 +990,7 @@ - + @@ -1010,7 +1010,7 @@ - + @@ -1030,7 +1030,7 @@ - + @@ -1050,7 +1050,7 @@ - + @@ -1070,7 +1070,7 @@ - + @@ -1090,7 +1090,7 @@ - + @@ -1110,7 +1110,7 @@ - + @@ -1150,7 +1150,7 @@ - + @@ -1170,7 +1170,7 @@ - + @@ -1190,7 +1190,7 @@ - + @@ -1210,7 +1210,7 @@ - + @@ -1230,7 +1230,7 @@ - + @@ -1250,7 +1250,7 @@ - + @@ -1270,7 +1270,7 @@ - + @@ -1654,7 +1654,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2frucnx.lay mame-0.251+dfsg.1/src/mame/layout/j2frucnx.lay --- mame-0.250+dfsg.1/src/mame/layout/j2frucnx.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2frucnx.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1282,7 +1282,7 @@ - + @@ -1541,7 +1541,7 @@ - + @@ -1559,7 +1559,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2fullhs.lay mame-0.251+dfsg.1/src/mame/layout/j2fullhs.lay --- mame-0.250+dfsg.1/src/mame/layout/j2fullhs.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2fullhs.lay 2022-12-29 14:20:09.000000000 +0000 @@ -778,7 +778,7 @@ - + @@ -838,11 +838,11 @@ - + - + @@ -886,15 +886,15 @@ - + - + - + @@ -1474,7 +1474,7 @@ - + @@ -1580,85 +1580,85 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2fws.lay mame-0.251+dfsg.1/src/mame/layout/j2fws.lay --- mame-0.250+dfsg.1/src/mame/layout/j2fws.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2fws.lay 2022-12-29 14:20:09.000000000 +0000 @@ -146,7 +146,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -194,7 +194,7 @@ - + @@ -234,7 +234,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -414,7 +414,7 @@ - + @@ -434,7 +434,7 @@ - + @@ -454,7 +454,7 @@ - + @@ -502,7 +502,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -654,7 +654,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -702,7 +702,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -774,7 +774,7 @@ - + @@ -1178,7 +1178,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2ghostb.lay mame-0.251+dfsg.1/src/mame/layout/j2ghostb.lay --- mame-0.250+dfsg.1/src/mame/layout/j2ghostb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2ghostb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -525,13 +525,13 @@ - + - + @@ -549,13 +549,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2gldchy.lay mame-0.251+dfsg.1/src/mame/layout/j2gldchy.lay --- mame-0.250+dfsg.1/src/mame/layout/j2gldchy.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2gldchy.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -634,7 +634,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2goldbr.lay mame-0.251+dfsg.1/src/mame/layout/j2goldbr.lay --- mame-0.250+dfsg.1/src/mame/layout/j2goldbr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2goldbr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -370,7 +370,7 @@ - + @@ -430,7 +430,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2hilocl.lay mame-0.251+dfsg.1/src/mame/layout/j2hilocl.lay --- mame-0.250+dfsg.1/src/mame/layout/j2hilocl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2hilocl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -658,7 +658,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -698,7 +698,7 @@ - + @@ -718,7 +718,7 @@ - + @@ -738,7 +738,7 @@ - + @@ -758,7 +758,7 @@ - + @@ -778,7 +778,7 @@ - + @@ -798,7 +798,7 @@ - + @@ -818,7 +818,7 @@ - + @@ -978,7 +978,7 @@ - + @@ -1022,7 +1022,7 @@ - + @@ -1042,7 +1042,7 @@ - + @@ -1062,7 +1062,7 @@ - + @@ -1082,7 +1082,7 @@ - + @@ -1102,7 +1102,7 @@ - + @@ -1122,7 +1122,7 @@ - + @@ -1142,7 +1142,7 @@ - + @@ -1162,7 +1162,7 @@ - + @@ -1182,7 +1182,7 @@ - + @@ -1202,7 +1202,7 @@ - + @@ -1634,7 +1634,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2hinote.lay mame-0.251+dfsg.1/src/mame/layout/j2hinote.lay --- mame-0.250+dfsg.1/src/mame/layout/j2hinote.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2hinote.lay 2022-12-29 14:20:09.000000000 +0000 @@ -482,7 +482,7 @@ - + @@ -502,7 +502,7 @@ - + @@ -522,7 +522,7 @@ - + @@ -542,7 +542,7 @@ - + @@ -582,7 +582,7 @@ - + @@ -1466,7 +1466,7 @@ - + @@ -1486,7 +1486,7 @@ - + @@ -1586,7 +1586,7 @@ - + @@ -1606,7 +1606,7 @@ - + @@ -1770,7 +1770,7 @@ - + @@ -1790,7 +1790,7 @@ - + @@ -1810,7 +1810,7 @@ - + @@ -1830,7 +1830,7 @@ - + @@ -1962,7 +1962,7 @@ - + @@ -2128,7 +2128,7 @@ - + @@ -2146,19 +2146,19 @@ - + - + - + @@ -2200,7 +2200,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2hiroll.lay mame-0.251+dfsg.1/src/mame/layout/j2hiroll.lay --- mame-0.250+dfsg.1/src/mame/layout/j2hiroll.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2hiroll.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -1138,7 +1138,7 @@ - + @@ -1158,7 +1158,7 @@ - + @@ -1178,7 +1178,7 @@ - + @@ -1198,7 +1198,7 @@ - + @@ -1322,7 +1322,7 @@ - + @@ -1482,7 +1482,7 @@ - + @@ -1550,7 +1550,7 @@ - + @@ -1954,7 +1954,7 @@ - + @@ -2054,25 +2054,25 @@ - + - + - + - + @@ -2114,7 +2114,7 @@ - + @@ -2132,13 +2132,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2hitmon.lay mame-0.251+dfsg.1/src/mame/layout/j2hitmon.lay --- mame-0.250+dfsg.1/src/mame/layout/j2hitmon.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2hitmon.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -842,7 +842,7 @@ - + @@ -862,7 +862,7 @@ - + @@ -882,7 +882,7 @@ - + @@ -1906,7 +1906,7 @@ - + @@ -1992,7 +1992,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2hotpot.lay mame-0.251+dfsg.1/src/mame/layout/j2hotpot.lay --- mame-0.250+dfsg.1/src/mame/layout/j2hotpot.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2hotpot.lay 2022-12-29 14:20:09.000000000 +0000 @@ -70,7 +70,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1278,7 +1278,7 @@ - + @@ -1306,7 +1306,7 @@ - + @@ -1318,19 +1318,19 @@ - + - + - + @@ -1360,7 +1360,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2hotsht.lay mame-0.251+dfsg.1/src/mame/layout/j2hotsht.lay --- mame-0.250+dfsg.1/src/mame/layout/j2hotsht.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2hotsht.lay 2022-12-29 14:20:09.000000000 +0000 @@ -430,7 +430,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -670,7 +670,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -930,7 +930,7 @@ - + @@ -1010,7 +1010,7 @@ - + @@ -1170,7 +1170,7 @@ - + @@ -1682,7 +1682,7 @@ - + @@ -1830,37 +1830,37 @@ - + - + - + - + - + - + @@ -1878,13 +1878,13 @@ - + - + @@ -1902,31 +1902,31 @@ - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2hypnot.lay mame-0.251+dfsg.1/src/mame/layout/j2hypnot.lay --- mame-0.250+dfsg.1/src/mame/layout/j2hypnot.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2hypnot.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -82,7 +82,7 @@ - + @@ -102,7 +102,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -194,7 +194,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -374,7 +374,7 @@ - + @@ -394,7 +394,7 @@ - + @@ -414,7 +414,7 @@ - + @@ -434,7 +434,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -890,7 +890,7 @@ - + @@ -910,7 +910,7 @@ - + @@ -930,7 +930,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -1874,7 +1874,7 @@ - + @@ -1894,7 +1894,7 @@ - + @@ -1914,7 +1914,7 @@ - + @@ -1934,7 +1934,7 @@ - + @@ -1954,7 +1954,7 @@ - + @@ -1974,7 +1974,7 @@ - + @@ -2018,7 +2018,7 @@ - + @@ -2478,7 +2478,7 @@ - + @@ -2741,19 +2741,19 @@ - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2jackbr.lay mame-0.251+dfsg.1/src/mame/layout/j2jackbr.lay --- mame-0.250+dfsg.1/src/mame/layout/j2jackbr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2jackbr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -577,13 +577,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2kingcl.lay mame-0.251+dfsg.1/src/mame/layout/j2kingcl.lay --- mame-0.250+dfsg.1/src/mame/layout/j2kingcl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2kingcl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -314,7 +314,7 @@ - + @@ -742,7 +742,7 @@ - + @@ -842,79 +842,79 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -926,7 +926,7 @@ - + @@ -944,7 +944,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2litean.lay mame-0.251+dfsg.1/src/mame/layout/j2litean.lay --- mame-0.250+dfsg.1/src/mame/layout/j2litean.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2litean.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -781,7 +781,7 @@ - + @@ -799,19 +799,19 @@ - + - + - + @@ -841,7 +841,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2litnot.lay mame-0.251+dfsg.1/src/mame/layout/j2litnot.lay --- mame-0.250+dfsg.1/src/mame/layout/j2litnot.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2litnot.lay 2022-12-29 14:20:09.000000000 +0000 @@ -106,7 +106,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -1074,7 +1074,7 @@ - + @@ -1094,7 +1094,7 @@ - + @@ -1130,7 +1130,7 @@ - + @@ -1166,7 +1166,7 @@ - + @@ -1366,7 +1366,7 @@ - + @@ -1658,37 +1658,37 @@ - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2lovshd.lay mame-0.251+dfsg.1/src/mame/layout/j2lovshd.lay --- mame-0.250+dfsg.1/src/mame/layout/j2lovshd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2lovshd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -970,7 +970,7 @@ - + @@ -990,7 +990,7 @@ - + @@ -1010,7 +1010,7 @@ - + @@ -1150,7 +1150,7 @@ - + @@ -1551,25 +1551,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2lovsht.lay mame-0.251+dfsg.1/src/mame/layout/j2lovsht.lay --- mame-0.250+dfsg.1/src/mame/layout/j2lovsht.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2lovsht.lay 2022-12-29 14:20:09.000000000 +0000 @@ -90,7 +90,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -1262,7 +1262,7 @@ - + @@ -1569,13 +1569,13 @@ - + - + @@ -1591,19 +1591,19 @@ - + - + - + @@ -1633,7 +1633,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2luckar.lay mame-0.251+dfsg.1/src/mame/layout/j2luckar.lay --- mame-0.250+dfsg.1/src/mame/layout/j2luckar.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2luckar.lay 2022-12-29 14:20:09.000000000 +0000 @@ -406,7 +406,7 @@ - + @@ -667,7 +667,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2lucky2.lay mame-0.251+dfsg.1/src/mame/layout/j2lucky2.lay --- mame-0.250+dfsg.1/src/mame/layout/j2lucky2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2lucky2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -634,7 +634,7 @@ - + @@ -1022,7 +1022,7 @@ - + @@ -1191,19 +1191,19 @@ - + - + - + @@ -1239,7 +1239,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2maxima.lay mame-0.251+dfsg.1/src/mame/layout/j2maxima.lay --- mame-0.250+dfsg.1/src/mame/layout/j2maxima.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2maxima.lay 2022-12-29 14:20:09.000000000 +0000 @@ -286,7 +286,7 @@ - + @@ -619,7 +619,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2missis.lay mame-0.251+dfsg.1/src/mame/layout/j2missis.lay --- mame-0.250+dfsg.1/src/mame/layout/j2missis.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2missis.lay 2022-12-29 14:20:09.000000000 +0000 @@ -674,7 +674,7 @@ - + @@ -694,7 +694,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -850,7 +850,7 @@ - + @@ -870,7 +870,7 @@ - + @@ -890,7 +890,7 @@ - + @@ -910,7 +910,7 @@ - + @@ -930,7 +930,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1300,145 +1300,145 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2monblt.lay mame-0.251+dfsg.1/src/mame/layout/j2monblt.lay --- mame-0.250+dfsg.1/src/mame/layout/j2monblt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2monblt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -70,7 +70,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -670,7 +670,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -1609,7 +1609,7 @@ - + @@ -1645,25 +1645,25 @@ - + - + - + - + @@ -1675,7 +1675,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2mongam.lay mame-0.251+dfsg.1/src/mame/layout/j2mongam.lay --- mame-0.250+dfsg.1/src/mame/layout/j2mongam.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2mongam.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -1766,7 +1766,7 @@ - + @@ -2069,13 +2069,13 @@ - + - + @@ -2099,15 +2099,15 @@ - + - + - + @@ -2119,7 +2119,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2montrp.lay mame-0.251+dfsg.1/src/mame/layout/j2montrp.lay --- mame-0.250+dfsg.1/src/mame/layout/j2montrp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2montrp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1269,25 +1269,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2nolimt.lay mame-0.251+dfsg.1/src/mame/layout/j2nolimt.lay --- mame-0.250+dfsg.1/src/mame/layout/j2nolimt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2nolimt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -854,7 +854,7 @@ - + @@ -1075,31 +1075,31 @@ - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2notesh.lay mame-0.251+dfsg.1/src/mame/layout/j2notesh.lay --- mame-0.250+dfsg.1/src/mame/layout/j2notesh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2notesh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -62,7 +62,7 @@ - + @@ -82,7 +82,7 @@ - + @@ -102,7 +102,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -1334,7 +1334,7 @@ - + @@ -1354,7 +1354,7 @@ - + @@ -1374,7 +1374,7 @@ - + @@ -1394,7 +1394,7 @@ - + @@ -1414,7 +1414,7 @@ - + @@ -1434,7 +1434,7 @@ - + @@ -1454,7 +1454,7 @@ - + @@ -1474,7 +1474,7 @@ - + @@ -1494,7 +1494,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -1534,7 +1534,7 @@ - + @@ -1782,7 +1782,7 @@ - + @@ -1802,7 +1802,7 @@ - + @@ -1822,7 +1822,7 @@ - + @@ -1842,7 +1842,7 @@ - + @@ -1862,7 +1862,7 @@ - + @@ -1882,7 +1882,7 @@ - + @@ -1902,7 +1902,7 @@ - + @@ -1922,7 +1922,7 @@ - + @@ -2030,7 +2030,7 @@ - + @@ -2074,7 +2074,7 @@ - + @@ -2094,7 +2094,7 @@ - + @@ -2114,7 +2114,7 @@ - + @@ -2482,7 +2482,7 @@ - + @@ -2577,25 +2577,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2nudbnz.lay mame-0.251+dfsg.1/src/mame/layout/j2nudbnz.lay --- mame-0.250+dfsg.1/src/mame/layout/j2nudbnz.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2nudbnz.lay 2022-12-29 14:20:09.000000000 +0000 @@ -994,7 +994,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1034,7 +1034,7 @@ - + @@ -1054,7 +1054,7 @@ - + @@ -1074,7 +1074,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1652,7 +1652,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2nudfev.lay mame-0.251+dfsg.1/src/mame/layout/j2nudfev.lay --- mame-0.250+dfsg.1/src/mame/layout/j2nudfev.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2nudfev.lay 2022-12-29 14:20:09.000000000 +0000 @@ -150,7 +150,7 @@ - + @@ -422,7 +422,7 @@ - + @@ -1522,7 +1522,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2nudmon.lay mame-0.251+dfsg.1/src/mame/layout/j2nudmon.lay --- mame-0.250+dfsg.1/src/mame/layout/j2nudmon.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2nudmon.lay 2022-12-29 14:20:09.000000000 +0000 @@ -266,7 +266,7 @@ - + @@ -798,7 +798,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -954,7 +954,7 @@ - + @@ -2802,7 +2802,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2nudshf.lay mame-0.251+dfsg.1/src/mame/layout/j2nudshf.lay --- mame-0.250+dfsg.1/src/mame/layout/j2nudshf.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2nudshf.lay 2022-12-29 14:20:09.000000000 +0000 @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -1230,7 +1230,7 @@ - + @@ -1250,7 +1250,7 @@ - + @@ -1270,7 +1270,7 @@ - + @@ -1625,19 +1625,19 @@ - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2paypkt.lay mame-0.251+dfsg.1/src/mame/layout/j2paypkt.lay --- mame-0.250+dfsg.1/src/mame/layout/j2paypkt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2paypkt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -594,7 +594,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -994,7 +994,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1034,7 +1034,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -1310,7 +1310,7 @@ - + @@ -1330,7 +1330,7 @@ - + @@ -1350,7 +1350,7 @@ - + @@ -1370,7 +1370,7 @@ - + @@ -1678,7 +1678,7 @@ - + @@ -1871,7 +1871,7 @@ - + @@ -1883,7 +1883,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2penny.lay mame-0.251+dfsg.1/src/mame/layout/j2penny.lay --- mame-0.250+dfsg.1/src/mame/layout/j2penny.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2penny.lay 2022-12-29 14:20:09.000000000 +0000 @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -1214,7 +1214,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2plsmnd.lay mame-0.251+dfsg.1/src/mame/layout/j2plsmnd.lay --- mame-0.250+dfsg.1/src/mame/layout/j2plsmnd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2plsmnd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -242,7 +242,7 @@ - + @@ -262,7 +262,7 @@ - + @@ -282,7 +282,7 @@ - + @@ -302,7 +302,7 @@ - + @@ -322,7 +322,7 @@ - + @@ -1798,7 +1798,7 @@ - + @@ -1923,7 +1923,7 @@ - + @@ -2013,25 +2013,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2plsnud.lay mame-0.251+dfsg.1/src/mame/layout/j2plsnud.lay --- mame-0.250+dfsg.1/src/mame/layout/j2plsnud.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2plsnud.lay 2022-12-29 14:20:09.000000000 +0000 @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -966,7 +966,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2pndrsh.lay mame-0.251+dfsg.1/src/mame/layout/j2pndrsh.lay --- mame-0.250+dfsg.1/src/mame/layout/j2pndrsh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2pndrsh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -478,7 +478,7 @@ - + @@ -802,7 +802,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -1130,7 +1130,7 @@ - + @@ -1150,7 +1150,7 @@ - + @@ -1170,7 +1170,7 @@ - + @@ -1190,7 +1190,7 @@ - + @@ -1210,7 +1210,7 @@ - + @@ -1230,7 +1230,7 @@ - + @@ -1250,7 +1250,7 @@ - + @@ -1270,7 +1270,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -1310,7 +1310,7 @@ - + @@ -1430,7 +1430,7 @@ - + @@ -1450,7 +1450,7 @@ - + @@ -1470,7 +1470,7 @@ - + @@ -1490,7 +1490,7 @@ - + @@ -1534,7 +1534,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1594,7 +1594,7 @@ - + @@ -1638,7 +1638,7 @@ - + @@ -1658,7 +1658,7 @@ - + @@ -1678,7 +1678,7 @@ - + @@ -1722,7 +1722,7 @@ - + @@ -1742,7 +1742,7 @@ - + @@ -1762,7 +1762,7 @@ - + @@ -1782,7 +1782,7 @@ - + @@ -1802,7 +1802,7 @@ - + @@ -2330,7 +2330,7 @@ - + @@ -2467,25 +2467,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2rdclb.lay mame-0.251+dfsg.1/src/mame/layout/j2rdclb.lay --- mame-0.250+dfsg.1/src/mame/layout/j2rdclb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2rdclb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -806,7 +806,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -1306,7 +1306,7 @@ - + @@ -1598,7 +1598,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2reelbn.lay mame-0.251+dfsg.1/src/mame/layout/j2reelbn.lay --- mame-0.250+dfsg.1/src/mame/layout/j2reelbn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2reelbn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -162,7 +162,7 @@ - + @@ -182,7 +182,7 @@ - + @@ -202,7 +202,7 @@ - + @@ -222,7 +222,7 @@ - + @@ -242,7 +242,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -1410,7 +1410,7 @@ - + @@ -1550,73 +1550,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2reelbo.lay mame-0.251+dfsg.1/src/mame/layout/j2reelbo.lay --- mame-0.250+dfsg.1/src/mame/layout/j2reelbo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2reelbo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -350,7 +350,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -430,7 +430,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -670,7 +670,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -1058,7 +1058,7 @@ - + @@ -1102,7 +1102,7 @@ - + @@ -1166,7 +1166,7 @@ - + @@ -1474,7 +1474,7 @@ - + @@ -1486,85 +1486,85 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2reelcz.lay mame-0.251+dfsg.1/src/mame/layout/j2reelcz.lay --- mame-0.250+dfsg.1/src/mame/layout/j2reelcz.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2reelcz.lay 2022-12-29 14:20:09.000000000 +0000 @@ -646,7 +646,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -910,7 +910,7 @@ - + @@ -1002,7 +1002,7 @@ - + @@ -1275,19 +1275,19 @@ - + - + - + @@ -1315,7 +1315,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2reelmc.lay mame-0.251+dfsg.1/src/mame/layout/j2reelmc.lay --- mame-0.250+dfsg.1/src/mame/layout/j2reelmc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2reelmc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -370,7 +370,7 @@ - + @@ -810,7 +810,7 @@ - + @@ -830,7 +830,7 @@ - + @@ -850,7 +850,7 @@ - + @@ -870,7 +870,7 @@ - + @@ -890,7 +890,7 @@ - + @@ -910,7 +910,7 @@ - + @@ -1150,7 +1150,7 @@ - + @@ -1210,7 +1210,7 @@ - + @@ -1350,7 +1350,7 @@ - + @@ -1370,7 +1370,7 @@ - + @@ -1390,7 +1390,7 @@ - + @@ -1410,7 +1410,7 @@ - + @@ -1430,7 +1430,7 @@ - + @@ -1450,7 +1450,7 @@ - + @@ -1470,7 +1470,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -1782,7 +1782,7 @@ - + @@ -1888,85 +1888,85 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2reelmo.lay mame-0.251+dfsg.1/src/mame/layout/j2reelmo.lay --- mame-0.250+dfsg.1/src/mame/layout/j2reelmo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2reelmo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1054,7 +1054,7 @@ - + @@ -1074,7 +1074,7 @@ - + @@ -1094,7 +1094,7 @@ - + @@ -1114,7 +1114,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1354,7 +1354,7 @@ - + @@ -1374,7 +1374,7 @@ - + @@ -1394,7 +1394,7 @@ - + @@ -1414,7 +1414,7 @@ - + @@ -1434,7 +1434,7 @@ - + @@ -1454,7 +1454,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1594,7 +1594,7 @@ - + @@ -1614,7 +1614,7 @@ - + @@ -1790,7 +1790,7 @@ - + @@ -2181,19 +2181,19 @@ - + - + - + @@ -2229,7 +2229,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2silvcl.lay mame-0.251+dfsg.1/src/mame/layout/j2silvcl.lay --- mame-0.250+dfsg.1/src/mame/layout/j2silvcl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2silvcl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -226,7 +226,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -490,7 +490,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2silvsh.lay mame-0.251+dfsg.1/src/mame/layout/j2silvsh.lay --- mame-0.250+dfsg.1/src/mame/layout/j2silvsh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2silvsh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -226,7 +226,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -490,7 +490,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2sldgld.lay mame-0.251+dfsg.1/src/mame/layout/j2sldgld.lay --- mame-0.250+dfsg.1/src/mame/layout/j2sldgld.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2sldgld.lay 2022-12-29 14:20:09.000000000 +0000 @@ -310,7 +310,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -762,7 +762,7 @@ - + @@ -782,7 +782,7 @@ - + @@ -802,7 +802,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -842,7 +842,7 @@ - + @@ -922,7 +922,7 @@ - + @@ -942,7 +942,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1302,7 +1302,7 @@ - + @@ -1322,7 +1322,7 @@ - + @@ -1342,7 +1342,7 @@ - + @@ -1362,7 +1362,7 @@ - + @@ -1382,7 +1382,7 @@ - + @@ -1402,7 +1402,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -1442,7 +1442,7 @@ - + @@ -1542,7 +1542,7 @@ - + @@ -1562,7 +1562,7 @@ - + @@ -1582,7 +1582,7 @@ - + @@ -1602,7 +1602,7 @@ - + @@ -1670,7 +1670,7 @@ - + @@ -1976,25 +1976,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2slvrgh.lay mame-0.251+dfsg.1/src/mame/layout/j2slvrgh.lay --- mame-0.250+dfsg.1/src/mame/layout/j2slvrgh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2slvrgh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -709,25 +709,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2spcrsv.lay mame-0.251+dfsg.1/src/mame/layout/j2spcrsv.lay --- mame-0.250+dfsg.1/src/mame/layout/j2spcrsv.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2spcrsv.lay 2022-12-29 14:20:09.000000000 +0000 @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -906,7 +906,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -1694,7 +1694,7 @@ - + @@ -1706,7 +1706,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2sstrea.lay mame-0.251+dfsg.1/src/mame/layout/j2sstrea.lay --- mame-0.250+dfsg.1/src/mame/layout/j2sstrea.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2sstrea.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1266,7 +1266,7 @@ - + @@ -1690,7 +1690,7 @@ - + @@ -1819,19 +1819,19 @@ - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2stahed.lay mame-0.251+dfsg.1/src/mame/layout/j2stahed.lay --- mame-0.250+dfsg.1/src/mame/layout/j2stahed.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2stahed.lay 2022-12-29 14:20:09.000000000 +0000 @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -938,7 +938,7 @@ - + @@ -1050,7 +1050,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2supfrc.lay mame-0.251+dfsg.1/src/mame/layout/j2supfrc.lay --- mame-0.250+dfsg.1/src/mame/layout/j2supfrc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2supfrc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -374,7 +374,7 @@ - + @@ -394,7 +394,7 @@ - + @@ -414,7 +414,7 @@ - + @@ -434,7 +434,7 @@ - + @@ -454,7 +454,7 @@ - + @@ -909,7 +909,7 @@ - + @@ -927,61 +927,61 @@ - + - + - + - + - + - + - + - + - + - + @@ -1017,55 +1017,55 @@ - + - + - + - + - + - + - + - + - + @@ -1095,7 +1095,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2suprsh.lay mame-0.251+dfsg.1/src/mame/layout/j2suprsh.lay --- mame-0.250+dfsg.1/src/mame/layout/j2suprsh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2suprsh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -1130,7 +1130,7 @@ - + @@ -1453,7 +1453,7 @@ - + @@ -1475,25 +1475,25 @@ - + - + - + - + @@ -1523,7 +1523,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2supsft.lay mame-0.251+dfsg.1/src/mame/layout/j2supsft.lay --- mame-0.250+dfsg.1/src/mame/layout/j2supsft.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2supsft.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -842,7 +842,7 @@ - + @@ -862,7 +862,7 @@ - + @@ -882,7 +882,7 @@ - + @@ -902,7 +902,7 @@ - + @@ -922,7 +922,7 @@ - + @@ -1542,7 +1542,7 @@ - + @@ -1562,7 +1562,7 @@ - + @@ -1602,7 +1602,7 @@ - + @@ -1662,7 +1662,7 @@ - + @@ -2662,7 +2662,7 @@ - + @@ -3079,13 +3079,13 @@ - + - + @@ -3097,7 +3097,7 @@ - + @@ -3155,13 +3155,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2supstp.lay mame-0.251+dfsg.1/src/mame/layout/j2supstp.lay --- mame-0.250+dfsg.1/src/mame/layout/j2supstp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2supstp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -110,7 +110,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -970,7 +970,7 @@ - + @@ -1282,19 +1282,19 @@ - + - + - + @@ -1312,7 +1312,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2suptrk.lay mame-0.251+dfsg.1/src/mame/layout/j2suptrk.lay --- mame-0.250+dfsg.1/src/mame/layout/j2suptrk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2suptrk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1150,7 +1150,7 @@ - + @@ -1270,7 +1270,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -1694,7 +1694,7 @@ - + @@ -1989,7 +1989,7 @@ - + @@ -2005,7 +2005,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2swbank.lay mame-0.251+dfsg.1/src/mame/layout/j2swbank.lay --- mame-0.250+dfsg.1/src/mame/layout/j2swbank.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2swbank.lay 2022-12-29 14:20:09.000000000 +0000 @@ -282,7 +282,7 @@ - + @@ -382,7 +382,7 @@ - + @@ -402,7 +402,7 @@ - + @@ -422,7 +422,7 @@ - + @@ -1238,7 +1238,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -1310,7 +1310,7 @@ - + @@ -1394,7 +1394,7 @@ - + @@ -1982,7 +1982,7 @@ - + @@ -2006,7 +2006,7 @@ - + @@ -2050,7 +2050,7 @@ - + @@ -2295,7 +2295,7 @@ - + @@ -2343,25 +2343,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2take2.lay mame-0.251+dfsg.1/src/mame/layout/j2take2.lay --- mame-0.250+dfsg.1/src/mame/layout/j2take2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2take2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -1264,7 +1264,7 @@ - + @@ -1292,7 +1292,7 @@ - + @@ -1304,7 +1304,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2trail.lay mame-0.251+dfsg.1/src/mame/layout/j2trail.lay --- mame-0.250+dfsg.1/src/mame/layout/j2trail.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2trail.lay 2022-12-29 14:20:09.000000000 +0000 @@ -542,7 +542,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1330,7 +1330,7 @@ - + @@ -1602,7 +1602,7 @@ - + @@ -1811,13 +1811,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j2tstplt.lay mame-0.251+dfsg.1/src/mame/layout/j2tstplt.lay --- mame-0.250+dfsg.1/src/mame/layout/j2tstplt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j2tstplt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1578,7 +1578,7 @@ - + @@ -1658,7 +1658,7 @@ - + @@ -1970,7 +1970,7 @@ - + @@ -2494,7 +2494,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5ar80cla.lay mame-0.251+dfsg.1/src/mame/layout/j5ar80cla.lay --- mame-0.250+dfsg.1/src/mame/layout/j5ar80cla.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5ar80cla.lay 2022-12-29 14:20:09.000000000 +0000 @@ -498,7 +498,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -638,7 +638,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -698,7 +698,7 @@ - + @@ -738,7 +738,7 @@ - + @@ -758,7 +758,7 @@ - + @@ -898,7 +898,7 @@ - + @@ -918,7 +918,7 @@ - + @@ -958,7 +958,7 @@ - + @@ -978,7 +978,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1018,7 +1018,7 @@ - + @@ -1038,7 +1038,7 @@ - + @@ -1058,7 +1058,7 @@ - + @@ -1078,7 +1078,7 @@ - + @@ -1098,7 +1098,7 @@ - + @@ -1118,7 +1118,7 @@ - + @@ -1138,7 +1138,7 @@ - + @@ -1158,7 +1158,7 @@ - + @@ -1178,7 +1178,7 @@ - + @@ -1278,7 +1278,7 @@ - + @@ -1326,7 +1326,7 @@ - + @@ -1814,7 +1814,7 @@ - + @@ -1834,7 +1834,7 @@ - + @@ -2194,7 +2194,7 @@ - + @@ -2294,7 +2294,7 @@ - + @@ -2414,7 +2414,7 @@ - + @@ -2434,7 +2434,7 @@ - + @@ -2610,7 +2610,7 @@ - + @@ -2706,9 +2706,9 @@ - + - + @@ -2844,9 +2844,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5cira.lay mame-0.251+dfsg.1/src/mame/layout/j5cira.lay --- mame-0.250+dfsg.1/src/mame/layout/j5cira.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5cira.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -98,7 +98,7 @@ - + @@ -118,7 +118,7 @@ - + @@ -138,7 +138,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -178,7 +178,7 @@ - + @@ -198,7 +198,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -238,7 +238,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -718,7 +718,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1182,7 +1182,7 @@ - + @@ -1202,15 +1202,15 @@ - + - + - + @@ -1430,7 +1430,7 @@ - + @@ -1450,7 +1450,7 @@ - + @@ -2082,7 +2082,7 @@ - + @@ -2173,9 +2173,9 @@ - + - + @@ -2355,9 +2355,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5fairp.lay mame-0.251+dfsg.1/src/mame/layout/j5fairp.lay --- mame-0.250+dfsg.1/src/mame/layout/j5fairp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5fairp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -254,7 +254,7 @@ - + @@ -362,7 +362,7 @@ - + @@ -430,7 +430,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -522,7 +522,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1250,7 +1250,7 @@ - + @@ -1270,7 +1270,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -1310,7 +1310,7 @@ - + @@ -1330,7 +1330,7 @@ - + @@ -1350,7 +1350,7 @@ - + @@ -1370,7 +1370,7 @@ - + @@ -1390,7 +1390,7 @@ - + @@ -1690,7 +1690,7 @@ - + @@ -1790,7 +1790,7 @@ - + @@ -2590,7 +2590,7 @@ - + @@ -2842,9 +2842,9 @@ - + --> @@ -2878,15 +2878,15 @@ - + - + - + @@ -2912,19 +2912,19 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5firebl.lay mame-0.251+dfsg.1/src/mame/layout/j5firebl.lay --- mame-0.250+dfsg.1/src/mame/layout/j5firebl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5firebl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -514,7 +514,7 @@ - + @@ -609,7 +609,7 @@ - + @@ -726,9 +726,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5hollyc.lay mame-0.251+dfsg.1/src/mame/layout/j5hollyc.lay --- mame-0.250+dfsg.1/src/mame/layout/j5hollyc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5hollyc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -1030,7 +1030,7 @@ - + @@ -2452,7 +2452,7 @@ - + @@ -2567,9 +2567,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5hotdoga.lay mame-0.251+dfsg.1/src/mame/layout/j5hotdoga.lay --- mame-0.250+dfsg.1/src/mame/layout/j5hotdoga.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5hotdoga.lay 2022-12-29 14:20:09.000000000 +0000 @@ -466,7 +466,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -942,7 +942,7 @@ - + @@ -962,7 +962,7 @@ - + @@ -1002,7 +1002,7 @@ - + @@ -1022,7 +1022,7 @@ - + @@ -1062,7 +1062,7 @@ - + @@ -1082,7 +1082,7 @@ - + @@ -1122,7 +1122,7 @@ - + @@ -1142,7 +1142,7 @@ - + @@ -1242,7 +1242,7 @@ - + @@ -1262,7 +1262,7 @@ - + @@ -1302,7 +1302,7 @@ - + @@ -1322,7 +1322,7 @@ - + @@ -1362,7 +1362,7 @@ - + @@ -1382,7 +1382,7 @@ - + @@ -1622,7 +1622,7 @@ - + @@ -1642,7 +1642,7 @@ - + @@ -1662,7 +1662,7 @@ - + @@ -1682,7 +1682,7 @@ - + @@ -1702,7 +1702,7 @@ - + @@ -1722,7 +1722,7 @@ - + @@ -1742,7 +1742,7 @@ - + @@ -1762,7 +1762,7 @@ - + @@ -1782,7 +1782,7 @@ - + @@ -1802,7 +1802,7 @@ - + @@ -2870,7 +2870,7 @@ - + @@ -2961,9 +2961,9 @@ - + - + @@ -3101,9 +3101,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5indsum.lay mame-0.251+dfsg.1/src/mame/layout/j5indsum.lay --- mame-0.250+dfsg.1/src/mame/layout/j5indsum.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5indsum.lay 2022-12-29 14:20:09.000000000 +0000 @@ -78,7 +78,7 @@ - + @@ -98,7 +98,7 @@ - + @@ -118,7 +118,7 @@ - + @@ -138,7 +138,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -178,7 +178,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -849,7 +849,7 @@ - + @@ -958,9 +958,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5intr.lay mame-0.251+dfsg.1/src/mame/layout/j5intr.lay --- mame-0.250+dfsg.1/src/mame/layout/j5intr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5intr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -1782,7 +1782,7 @@ - + @@ -2078,7 +2078,7 @@ - + @@ -2178,7 +2178,7 @@ - + @@ -2317,9 +2317,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5movie.lay mame-0.251+dfsg.1/src/mame/layout/j5movie.lay --- mame-0.250+dfsg.1/src/mame/layout/j5movie.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5movie.lay 2022-12-29 14:20:09.000000000 +0000 @@ -114,7 +114,7 @@ - + @@ -698,7 +698,7 @@ - + @@ -718,7 +718,7 @@ - + @@ -738,7 +738,7 @@ - + @@ -802,7 +802,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -842,7 +842,7 @@ - + @@ -862,7 +862,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1086,7 +1086,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1166,7 +1166,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1206,7 +1206,7 @@ - + @@ -1598,7 +1598,7 @@ - + @@ -1622,7 +1622,7 @@ - + @@ -1646,7 +1646,7 @@ - + @@ -1782,7 +1782,7 @@ - + @@ -1842,7 +1842,7 @@ - + @@ -1862,7 +1862,7 @@ - + @@ -2230,7 +2230,7 @@ - + @@ -2370,9 +2370,9 @@ - + - + @@ -2407,13 +2407,13 @@ - + - + @@ -2425,85 +2425,85 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2600,9 +2600,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5nite.lay mame-0.251+dfsg.1/src/mame/layout/j5nite.lay --- mame-0.250+dfsg.1/src/mame/layout/j5nite.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5nite.lay 2022-12-29 14:20:09.000000000 +0000 @@ -194,7 +194,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -234,7 +234,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -274,7 +274,7 @@ - + @@ -294,7 +294,7 @@ - + @@ -314,7 +314,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -774,7 +774,7 @@ - + @@ -794,7 +794,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -834,7 +834,7 @@ - + @@ -854,7 +854,7 @@ - + @@ -874,7 +874,7 @@ - + @@ -894,7 +894,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -954,7 +954,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -994,7 +994,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1034,7 +1034,7 @@ - + @@ -1054,7 +1054,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -1626,7 +1626,7 @@ - + @@ -1950,7 +1950,7 @@ - + @@ -2246,9 +2246,9 @@ - + - + @@ -2265,7 +2265,7 @@ - + @@ -2277,13 +2277,13 @@ - + - + @@ -2390,9 +2390,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5palma.lay mame-0.251+dfsg.1/src/mame/layout/j5palma.lay --- mame-0.250+dfsg.1/src/mame/layout/j5palma.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5palma.lay 2022-12-29 14:20:09.000000000 +0000 @@ -238,7 +238,7 @@ - + @@ -258,7 +258,7 @@ - + @@ -278,7 +278,7 @@ - + @@ -298,7 +298,7 @@ - + @@ -318,7 +318,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -578,7 +578,7 @@ - + @@ -977,9 +977,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5popeye.lay mame-0.251+dfsg.1/src/mame/layout/j5popeye.lay --- mame-0.250+dfsg.1/src/mame/layout/j5popeye.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5popeye.lay 2022-12-29 14:20:09.000000000 +0000 @@ -818,7 +818,7 @@ - + @@ -1098,7 +1098,7 @@ - + @@ -1318,7 +1318,7 @@ - + @@ -1682,7 +1682,7 @@ - + @@ -1750,7 +1750,7 @@ - + @@ -1870,7 +1870,7 @@ - + @@ -2218,7 +2218,7 @@ - + @@ -2282,7 +2282,7 @@ - + @@ -2410,7 +2410,7 @@ - + @@ -2806,7 +2806,7 @@ - + @@ -2914,7 +2914,7 @@ - + @@ -2934,7 +2934,7 @@ - + @@ -2954,7 +2954,7 @@ - + @@ -2994,7 +2994,7 @@ - + @@ -3014,7 +3014,7 @@ - + @@ -3034,7 +3034,7 @@ - + @@ -3054,7 +3054,7 @@ - + @@ -3074,7 +3074,7 @@ - + @@ -3094,7 +3094,7 @@ - + @@ -3114,7 +3114,7 @@ - + @@ -3134,7 +3134,7 @@ - + @@ -3426,7 +3426,7 @@ - + @@ -3538,9 +3538,9 @@ - + --> @@ -3588,7 +3588,7 @@ - + @@ -3602,15 +3602,15 @@ - + - + - + @@ -3705,9 +3705,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5sizl.lay mame-0.251+dfsg.1/src/mame/layout/j5sizl.lay --- mame-0.250+dfsg.1/src/mame/layout/j5sizl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5sizl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -749,7 +749,7 @@ - + @@ -834,9 +834,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5supbara.lay mame-0.251+dfsg.1/src/mame/layout/j5supbara.lay --- mame-0.250+dfsg.1/src/mame/layout/j5supbara.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5supbara.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -774,7 +774,7 @@ - + @@ -794,7 +794,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -1208,7 +1208,7 @@ - + @@ -1315,9 +1315,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5suphi.lay mame-0.251+dfsg.1/src/mame/layout/j5suphi.lay --- mame-0.250+dfsg.1/src/mame/layout/j5suphi.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5suphi.lay 2022-12-29 14:20:09.000000000 +0000 @@ -234,7 +234,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -374,7 +374,7 @@ - + @@ -394,7 +394,7 @@ - + @@ -842,7 +842,7 @@ - + @@ -962,7 +962,7 @@ - + @@ -1182,7 +1182,7 @@ - + @@ -1202,7 +1202,7 @@ - + @@ -2070,7 +2070,7 @@ - + @@ -2330,7 +2330,7 @@ - + @@ -2348,7 +2348,7 @@ - + @@ -2366,7 +2366,7 @@ - + @@ -2511,9 +2511,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5swop.lay mame-0.251+dfsg.1/src/mame/layout/j5swop.lay --- mame-0.250+dfsg.1/src/mame/layout/j5swop.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5swop.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1462,7 +1462,7 @@ - + @@ -1492,13 +1492,13 @@ - + - + @@ -1601,9 +1601,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5term.lay mame-0.251+dfsg.1/src/mame/layout/j5term.lay --- mame-0.250+dfsg.1/src/mame/layout/j5term.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5term.lay 2022-12-29 14:20:09.000000000 +0000 @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -1258,7 +1258,7 @@ - + @@ -1355,9 +1355,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5topshp.lay mame-0.251+dfsg.1/src/mame/layout/j5topshp.lay --- mame-0.250+dfsg.1/src/mame/layout/j5topshp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5topshp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -578,7 +578,7 @@ - + @@ -858,7 +858,7 @@ - + @@ -882,7 +882,7 @@ - + @@ -902,7 +902,7 @@ - + @@ -922,7 +922,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1354,7 +1354,7 @@ - + @@ -1374,7 +1374,7 @@ - + @@ -1394,7 +1394,7 @@ - + @@ -1434,7 +1434,7 @@ - + @@ -1712,73 +1712,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -1875,9 +1875,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5trail.lay mame-0.251+dfsg.1/src/mame/layout/j5trail.lay --- mame-0.250+dfsg.1/src/mame/layout/j5trail.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5trail.lay 2022-12-29 14:20:09.000000000 +0000 @@ -266,7 +266,7 @@ - + @@ -1202,7 +1202,7 @@ - + @@ -1222,7 +1222,7 @@ - + @@ -1242,7 +1242,7 @@ - + @@ -1262,7 +1262,7 @@ - + @@ -1282,7 +1282,7 @@ - + @@ -1302,7 +1302,7 @@ - + @@ -1322,7 +1322,7 @@ - + @@ -1342,7 +1342,7 @@ - + @@ -1362,7 +1362,7 @@ - + @@ -1382,7 +1382,7 @@ - + @@ -1402,7 +1402,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -1442,7 +1442,7 @@ - + @@ -1462,7 +1462,7 @@ - + @@ -1482,7 +1482,7 @@ - + @@ -1502,7 +1502,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -1542,7 +1542,7 @@ - + @@ -1562,7 +1562,7 @@ - + @@ -1582,7 +1582,7 @@ - + @@ -1746,7 +1746,7 @@ - + @@ -1857,7 +1857,7 @@ - + @@ -1869,7 +1869,7 @@ - + @@ -1887,7 +1887,7 @@ - + @@ -1984,9 +1984,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5ujb.lay mame-0.251+dfsg.1/src/mame/layout/j5ujb.lay --- mame-0.250+dfsg.1/src/mame/layout/j5ujb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5ujb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -434,7 +434,7 @@ - + @@ -704,9 +704,9 @@ - + - + @@ -751,25 +751,25 @@ - + - + - + - + @@ -785,25 +785,25 @@ - + - + - + - + @@ -888,9 +888,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j5wsc.lay mame-0.251+dfsg.1/src/mame/layout/j5wsc.lay --- mame-0.250+dfsg.1/src/mame/layout/j5wsc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j5wsc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -450,7 +450,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -670,7 +670,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -1774,7 +1774,7 @@ - + @@ -2095,13 +2095,13 @@ - + - + @@ -2113,7 +2113,7 @@ - + @@ -2210,9 +2210,9 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6aceclb.lay mame-0.251+dfsg.1/src/mame/layout/j6aceclb.lay --- mame-0.250+dfsg.1/src/mame/layout/j6aceclb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6aceclb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1716,7 +1716,7 @@ - + @@ -2060,7 +2060,7 @@ - + @@ -2080,7 +2080,7 @@ - + @@ -2100,7 +2100,7 @@ - + @@ -2120,7 +2120,7 @@ - + @@ -2180,7 +2180,7 @@ - + @@ -2220,7 +2220,7 @@ - + @@ -2240,7 +2240,7 @@ - + @@ -2260,7 +2260,7 @@ - + @@ -2280,7 +2280,7 @@ - + @@ -2300,7 +2300,7 @@ - + @@ -2320,7 +2320,7 @@ - + @@ -2380,7 +2380,7 @@ - + @@ -2400,7 +2400,7 @@ - + @@ -2420,7 +2420,7 @@ - + @@ -2440,7 +2440,7 @@ - + @@ -2480,7 +2480,7 @@ - + @@ -2500,7 +2500,7 @@ - + @@ -2540,7 +2540,7 @@ - + @@ -2880,7 +2880,7 @@ - + @@ -4319,7 +4319,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6acehi.lay mame-0.251+dfsg.1/src/mame/layout/j6acehi.lay --- mame-0.250+dfsg.1/src/mame/layout/j6acehi.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6acehi.lay 2022-12-29 14:20:09.000000000 +0000 @@ -624,7 +624,7 @@ - + @@ -644,7 +644,7 @@ - + @@ -664,7 +664,7 @@ - + @@ -684,7 +684,7 @@ - + @@ -704,7 +704,7 @@ - + @@ -724,7 +724,7 @@ - + @@ -744,7 +744,7 @@ - + @@ -764,7 +764,7 @@ - + @@ -784,7 +784,7 @@ - + @@ -804,7 +804,7 @@ - + @@ -1864,7 +1864,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6amdrm.lay mame-0.251+dfsg.1/src/mame/layout/j6amdrm.lay --- mame-0.250+dfsg.1/src/mame/layout/j6amdrm.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6amdrm.lay 2022-12-29 14:20:09.000000000 +0000 @@ -830,7 +830,7 @@ - + @@ -850,7 +850,7 @@ - + @@ -870,7 +870,7 @@ - + @@ -890,7 +890,7 @@ - + @@ -910,7 +910,7 @@ - + @@ -930,7 +930,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -970,7 +970,7 @@ - + @@ -990,7 +990,7 @@ - + @@ -1010,7 +1010,7 @@ - + @@ -1230,7 +1230,7 @@ - + @@ -1250,7 +1250,7 @@ - + @@ -2314,7 +2314,7 @@ - + @@ -2334,7 +2334,7 @@ - + @@ -2354,7 +2354,7 @@ - + @@ -2374,7 +2374,7 @@ - + @@ -2394,7 +2394,7 @@ - + @@ -2414,7 +2414,7 @@ - + @@ -2434,7 +2434,7 @@ - + @@ -2454,7 +2454,7 @@ - + @@ -2474,7 +2474,7 @@ - + @@ -2494,7 +2494,7 @@ - + @@ -2714,7 +2714,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6arcadee.lay mame-0.251+dfsg.1/src/mame/layout/j6arcadee.lay --- mame-0.250+dfsg.1/src/mame/layout/j6arcadee.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6arcadee.lay 2022-12-29 14:20:09.000000000 +0000 @@ -184,7 +184,7 @@ - + @@ -468,7 +468,7 @@ - + @@ -488,7 +488,7 @@ - + @@ -508,7 +508,7 @@ - + @@ -528,7 +528,7 @@ - + @@ -848,7 +848,7 @@ - + @@ -872,7 +872,7 @@ - + @@ -896,7 +896,7 @@ - + @@ -920,7 +920,7 @@ - + @@ -944,7 +944,7 @@ - + @@ -968,7 +968,7 @@ - + @@ -992,7 +992,7 @@ - + @@ -1016,7 +1016,7 @@ - + @@ -1041,7 +1041,7 @@ - + @@ -2041,7 +2041,7 @@ - + @@ -2061,7 +2061,7 @@ - + @@ -2081,7 +2081,7 @@ - + @@ -2101,7 +2101,7 @@ - + @@ -2121,7 +2121,7 @@ - + @@ -2145,7 +2145,7 @@ - + @@ -2165,7 +2165,7 @@ - + @@ -2185,7 +2185,7 @@ - + @@ -2205,7 +2205,7 @@ - + @@ -2225,7 +2225,7 @@ - + @@ -2245,7 +2245,7 @@ - + @@ -2265,7 +2265,7 @@ - + @@ -2285,7 +2285,7 @@ - + @@ -2305,7 +2305,7 @@ - + @@ -2325,7 +2325,7 @@ - + @@ -2345,7 +2345,7 @@ - + @@ -2365,7 +2365,7 @@ - + @@ -2385,7 +2385,7 @@ - + @@ -2405,7 +2405,7 @@ - + @@ -2425,7 +2425,7 @@ - + @@ -2525,7 +2525,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6big50.lay mame-0.251+dfsg.1/src/mame/layout/j6big50.lay --- mame-0.250+dfsg.1/src/mame/layout/j6big50.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6big50.lay 2022-12-29 14:20:09.000000000 +0000 @@ -2100,7 +2100,7 @@ - + @@ -2124,7 +2124,7 @@ - + @@ -2148,7 +2148,7 @@ - + @@ -2172,7 +2172,7 @@ - + @@ -2196,7 +2196,7 @@ - + @@ -2220,7 +2220,7 @@ - + @@ -2244,7 +2244,7 @@ - + @@ -2268,7 +2268,7 @@ - + @@ -2292,7 +2292,7 @@ - + @@ -2316,7 +2316,7 @@ - + @@ -2920,7 +2920,7 @@ - + @@ -3008,7 +3008,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6bigbukc.lay mame-0.251+dfsg.1/src/mame/layout/j6bigbukc.lay --- mame-0.250+dfsg.1/src/mame/layout/j6bigbukc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6bigbukc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -504,7 +504,7 @@ - + @@ -968,7 +968,7 @@ - + @@ -988,7 +988,7 @@ - + @@ -1008,7 +1008,7 @@ - + @@ -1028,7 +1028,7 @@ - + @@ -1048,7 +1048,7 @@ - + @@ -1068,7 +1068,7 @@ - + @@ -1088,7 +1088,7 @@ - + @@ -1108,7 +1108,7 @@ - + @@ -1128,7 +1128,7 @@ - + @@ -2112,7 +2112,7 @@ - + @@ -2242,7 +2242,7 @@ - + @@ -2258,61 +2258,61 @@ - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6bigtopa.lay mame-0.251+dfsg.1/src/mame/layout/j6bigtopa.lay --- mame-0.250+dfsg.1/src/mame/layout/j6bigtopa.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6bigtopa.lay 2022-12-29 14:20:09.000000000 +0000 @@ -64,7 +64,7 @@ - + @@ -84,7 +84,7 @@ - + @@ -104,7 +104,7 @@ - + @@ -124,7 +124,7 @@ - + @@ -144,7 +144,7 @@ - + @@ -164,7 +164,7 @@ - + @@ -184,7 +184,7 @@ - + @@ -204,7 +204,7 @@ - + @@ -224,7 +224,7 @@ - + @@ -244,7 +244,7 @@ - + @@ -264,7 +264,7 @@ - + @@ -284,7 +284,7 @@ - + @@ -304,7 +304,7 @@ - + @@ -324,7 +324,7 @@ - + @@ -344,7 +344,7 @@ - + @@ -364,7 +364,7 @@ - + @@ -384,7 +384,7 @@ - + @@ -3344,7 +3344,7 @@ - + @@ -3499,13 +3499,13 @@ - + - + @@ -3517,7 +3517,7 @@ - + @@ -3529,7 +3529,7 @@ - + @@ -3573,19 +3573,19 @@ - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6bnza.lay mame-0.251+dfsg.1/src/mame/layout/j6bnza.lay --- mame-0.250+dfsg.1/src/mame/layout/j6bnza.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6bnza.lay 2022-12-29 14:20:09.000000000 +0000 @@ -643,7 +643,7 @@ - + @@ -663,7 +663,7 @@ - + @@ -1043,7 +1043,7 @@ - + @@ -1131,7 +1131,7 @@ - + @@ -1175,7 +1175,7 @@ - + @@ -1327,7 +1327,7 @@ - + @@ -1419,7 +1419,7 @@ - + @@ -1483,7 +1483,7 @@ - + @@ -1679,7 +1679,7 @@ - + @@ -1787,7 +1787,7 @@ - + @@ -1899,7 +1899,7 @@ - + @@ -2811,7 +2811,7 @@ - + @@ -3151,43 +3151,43 @@ - + - + - + - + - + - + - + @@ -4394,7 +4394,16 @@ - + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6btbwd.lay mame-0.251+dfsg.1/src/mame/layout/j6btbwd.lay --- mame-0.250+dfsg.1/src/mame/layout/j6btbwd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6btbwd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -166,7 +166,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1254,7 +1254,7 @@ - + @@ -1274,7 +1274,7 @@ - + @@ -1294,7 +1294,7 @@ - + @@ -2285,6 +2285,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6camelt.lay mame-0.251+dfsg.1/src/mame/layout/j6camelt.lay --- mame-0.250+dfsg.1/src/mame/layout/j6camelt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6camelt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1381,7 +1381,7 @@ - + @@ -1853,7 +1853,7 @@ - + @@ -1873,7 +1873,7 @@ - + @@ -1893,7 +1893,7 @@ - + @@ -1913,7 +1913,7 @@ - + @@ -1933,7 +1933,7 @@ - + @@ -1953,7 +1953,7 @@ - + @@ -1973,7 +1973,7 @@ - + @@ -1993,7 +1993,7 @@ - + @@ -2013,7 +2013,7 @@ - + @@ -2033,7 +2033,7 @@ - + @@ -2053,7 +2053,7 @@ - + @@ -2073,7 +2073,7 @@ - + @@ -2093,7 +2093,7 @@ - + @@ -2113,7 +2113,7 @@ - + @@ -2133,7 +2133,7 @@ - + @@ -2153,7 +2153,7 @@ - + @@ -2173,7 +2173,7 @@ - + @@ -2193,7 +2193,7 @@ - + @@ -2213,7 +2213,7 @@ - + @@ -2233,7 +2233,7 @@ - + @@ -2253,7 +2253,7 @@ - + @@ -2273,7 +2273,7 @@ - + @@ -2293,7 +2293,7 @@ - + @@ -2313,7 +2313,7 @@ - + @@ -2333,7 +2333,7 @@ - + @@ -2357,7 +2357,7 @@ - + @@ -2381,7 +2381,7 @@ - + @@ -2405,7 +2405,7 @@ - + @@ -2429,7 +2429,7 @@ - + @@ -2453,7 +2453,7 @@ - + @@ -2477,7 +2477,7 @@ - + @@ -2501,7 +2501,7 @@ - + @@ -2525,7 +2525,7 @@ - + @@ -2709,7 +2709,7 @@ - + @@ -2899,7 +2899,7 @@ - + @@ -3802,7 +3802,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6casclaf.lay mame-0.251+dfsg.1/src/mame/layout/j6casclaf.lay --- mame-0.250+dfsg.1/src/mame/layout/j6casclaf.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6casclaf.lay 2022-12-29 14:20:09.000000000 +0000 @@ -966,7 +966,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1086,7 +1086,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -2594,7 +2594,7 @@ - + @@ -2614,7 +2614,7 @@ - + @@ -2634,7 +2634,7 @@ - + @@ -2654,7 +2654,7 @@ - + @@ -2674,7 +2674,7 @@ - + @@ -2694,7 +2694,7 @@ - + @@ -2714,7 +2714,7 @@ - + @@ -2734,7 +2734,7 @@ - + @@ -2754,7 +2754,7 @@ - + @@ -2774,7 +2774,7 @@ - + @@ -2794,7 +2794,7 @@ - + @@ -2814,7 +2814,7 @@ - + @@ -2834,7 +2834,7 @@ - + @@ -2854,7 +2854,7 @@ - + @@ -2874,7 +2874,7 @@ - + @@ -2894,7 +2894,7 @@ - + @@ -2914,7 +2914,7 @@ - + @@ -2934,7 +2934,7 @@ - + @@ -2954,7 +2954,7 @@ - + @@ -2974,7 +2974,7 @@ - + @@ -2994,7 +2994,7 @@ - + @@ -3014,7 +3014,7 @@ - + @@ -3038,7 +3038,7 @@ - + @@ -3058,7 +3058,7 @@ - + @@ -3078,7 +3078,7 @@ - + @@ -3098,7 +3098,7 @@ - + @@ -3118,7 +3118,7 @@ - + @@ -4783,6 +4783,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6cascze.lay mame-0.251+dfsg.1/src/mame/layout/j6cascze.lay --- mame-0.250+dfsg.1/src/mame/layout/j6cascze.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6cascze.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1132,7 +1132,7 @@ - + @@ -1156,7 +1156,7 @@ - + @@ -1980,7 +1980,7 @@ - + @@ -2004,7 +2004,7 @@ - + @@ -2028,7 +2028,7 @@ - + @@ -2052,7 +2052,7 @@ - + @@ -2076,7 +2076,7 @@ - + @@ -2104,7 +2104,7 @@ - + @@ -2188,7 +2188,7 @@ - + @@ -2212,7 +2212,7 @@ - + @@ -2260,7 +2260,7 @@ - + @@ -2284,7 +2284,7 @@ - + @@ -2308,7 +2308,7 @@ - + @@ -2332,7 +2332,7 @@ - + @@ -2592,7 +2592,7 @@ - + @@ -3620,7 +3620,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6colcsh.lay mame-0.251+dfsg.1/src/mame/layout/j6colcsh.lay --- mame-0.250+dfsg.1/src/mame/layout/j6colcsh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6colcsh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -188,7 +188,7 @@ - + @@ -208,7 +208,7 @@ - + @@ -228,7 +228,7 @@ - + @@ -248,7 +248,7 @@ - + @@ -268,7 +268,7 @@ - + @@ -288,7 +288,7 @@ - + @@ -308,7 +308,7 @@ - + @@ -328,7 +328,7 @@ - + @@ -348,7 +348,7 @@ - + @@ -368,7 +368,7 @@ - + @@ -388,7 +388,7 @@ - + @@ -408,7 +408,7 @@ - + @@ -428,7 +428,7 @@ - + @@ -452,7 +452,7 @@ - + @@ -476,7 +476,7 @@ - + @@ -2924,7 +2924,7 @@ - + @@ -3368,7 +3368,7 @@ - + @@ -3392,7 +3392,7 @@ - + @@ -3776,7 +3776,7 @@ - + @@ -3800,7 +3800,7 @@ - + @@ -3824,7 +3824,7 @@ - + @@ -3848,7 +3848,7 @@ - + @@ -3872,7 +3872,7 @@ - + @@ -3896,7 +3896,7 @@ - + @@ -4020,7 +4020,7 @@ - + @@ -5944,6 +5944,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6cpal.lay mame-0.251+dfsg.1/src/mame/layout/j6cpal.lay --- mame-0.250+dfsg.1/src/mame/layout/j6cpal.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6cpal.lay 2022-12-29 14:20:09.000000000 +0000 @@ -962,7 +962,7 @@ - + @@ -982,7 +982,7 @@ - + @@ -1002,7 +1002,7 @@ - + @@ -1022,7 +1022,7 @@ - + @@ -1042,7 +1042,7 @@ - + @@ -1062,7 +1062,7 @@ - + @@ -1082,7 +1082,7 @@ - + @@ -1102,7 +1102,7 @@ - + @@ -1122,7 +1122,7 @@ - + @@ -1142,7 +1142,7 @@ - + @@ -1162,7 +1162,7 @@ - + @@ -1182,7 +1182,7 @@ - + @@ -1226,7 +1226,7 @@ - + @@ -1582,7 +1582,7 @@ - + @@ -2548,6 +2548,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6crack.lay mame-0.251+dfsg.1/src/mame/layout/j6crack.lay --- mame-0.250+dfsg.1/src/mame/layout/j6crack.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6crack.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1806,7 +1806,7 @@ - + @@ -1826,7 +1826,7 @@ - + @@ -1846,7 +1846,7 @@ - + @@ -1866,7 +1866,7 @@ - + @@ -1886,7 +1886,7 @@ - + @@ -1906,7 +1906,7 @@ - + @@ -1926,7 +1926,7 @@ - + @@ -1946,7 +1946,7 @@ - + @@ -1966,7 +1966,7 @@ - + @@ -1986,7 +1986,7 @@ - + @@ -2006,7 +2006,7 @@ - + @@ -2026,7 +2026,7 @@ - + @@ -2066,7 +2066,7 @@ - + @@ -2086,7 +2086,7 @@ - + @@ -2106,7 +2106,7 @@ - + @@ -2126,7 +2126,7 @@ - + @@ -2146,7 +2146,7 @@ - + @@ -2166,7 +2166,7 @@ - + @@ -2714,7 +2714,7 @@ - + @@ -4038,6 +4038,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6drdogh.lay mame-0.251+dfsg.1/src/mame/layout/j6drdogh.lay --- mame-0.250+dfsg.1/src/mame/layout/j6drdogh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6drdogh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -900,7 +900,7 @@ - + @@ -920,7 +920,7 @@ - + @@ -940,7 +940,7 @@ - + @@ -960,7 +960,7 @@ - + @@ -980,7 +980,7 @@ - + @@ -1000,7 +1000,7 @@ - + @@ -1020,7 +1020,7 @@ - + @@ -1040,7 +1040,7 @@ - + @@ -1060,7 +1060,7 @@ - + @@ -1080,7 +1080,7 @@ - + @@ -1100,7 +1100,7 @@ - + @@ -1120,7 +1120,7 @@ - + @@ -2096,7 +2096,7 @@ - + @@ -2416,7 +2416,7 @@ - + @@ -2436,7 +2436,7 @@ - + @@ -2456,7 +2456,7 @@ - + @@ -2476,7 +2476,7 @@ - + @@ -2496,7 +2496,7 @@ - + @@ -2516,7 +2516,7 @@ - + @@ -2536,7 +2536,7 @@ - + @@ -2556,7 +2556,7 @@ - + @@ -2576,7 +2576,7 @@ - + @@ -2596,7 +2596,7 @@ - + @@ -2616,7 +2616,7 @@ - + @@ -2636,7 +2636,7 @@ - + @@ -2656,7 +2656,7 @@ - + @@ -2676,7 +2676,7 @@ - + @@ -3268,7 +3268,7 @@ - + @@ -3288,7 +3288,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6euphor.lay mame-0.251+dfsg.1/src/mame/layout/j6euphor.lay --- mame-0.250+dfsg.1/src/mame/layout/j6euphor.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6euphor.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -430,7 +430,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -3917,7 +3917,7 @@ - + @@ -5329,6 +5329,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6ewn.lay mame-0.251+dfsg.1/src/mame/layout/j6ewn.lay --- mame-0.250+dfsg.1/src/mame/layout/j6ewn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6ewn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -450,7 +450,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -790,7 +790,7 @@ - + @@ -830,7 +830,7 @@ - + @@ -910,7 +910,7 @@ - + @@ -930,7 +930,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -970,7 +970,7 @@ - + @@ -990,7 +990,7 @@ - + @@ -1010,7 +1010,7 @@ - + @@ -2404,7 +2404,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6fastfr.lay mame-0.251+dfsg.1/src/mame/layout/j6fastfr.lay --- mame-0.250+dfsg.1/src/mame/layout/j6fastfr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6fastfr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -926,7 +926,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1086,7 +1086,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1166,7 +1166,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1206,7 +1206,7 @@ - + @@ -1226,7 +1226,7 @@ - + @@ -1266,7 +1266,7 @@ - + @@ -1306,7 +1306,7 @@ - + @@ -1526,7 +1526,7 @@ - + @@ -1966,7 +1966,7 @@ - + @@ -2026,7 +2026,7 @@ - + @@ -2086,7 +2086,7 @@ - + @@ -2358,7 +2358,7 @@ - + @@ -2462,7 +2462,7 @@ - + @@ -2482,7 +2482,7 @@ - + @@ -2582,7 +2582,7 @@ - + @@ -2646,7 +2646,7 @@ - + @@ -2666,7 +2666,7 @@ - + @@ -2686,7 +2686,7 @@ - + @@ -2706,7 +2706,7 @@ - + @@ -2806,7 +2806,7 @@ - + @@ -2826,7 +2826,7 @@ - + @@ -2866,7 +2866,7 @@ - + @@ -2886,7 +2886,7 @@ - + @@ -2986,7 +2986,7 @@ - + @@ -3006,7 +3006,7 @@ - + @@ -3026,7 +3026,7 @@ - + @@ -3086,7 +3086,7 @@ - + @@ -3106,7 +3106,7 @@ - + @@ -3166,7 +3166,7 @@ - + @@ -3186,7 +3186,7 @@ - + @@ -3206,7 +3206,7 @@ - + @@ -3226,7 +3226,7 @@ - + @@ -3286,7 +3286,7 @@ - + @@ -3306,7 +3306,7 @@ - + @@ -3346,7 +3346,7 @@ - + @@ -3366,7 +3366,7 @@ - + @@ -3466,7 +3466,7 @@ - + @@ -3486,7 +3486,7 @@ - + @@ -3506,7 +3506,7 @@ - + @@ -3550,7 +3550,7 @@ - + @@ -3570,7 +3570,7 @@ - + @@ -3610,7 +3610,7 @@ - + @@ -3630,7 +3630,7 @@ - + @@ -3794,7 +3794,7 @@ - + @@ -4108,7 +4108,7 @@ - + @@ -5536,7 +5536,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6ffce.lay mame-0.251+dfsg.1/src/mame/layout/j6ffce.lay --- mame-0.250+dfsg.1/src/mame/layout/j6ffce.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6ffce.lay 2022-12-29 14:20:09.000000000 +0000 @@ -70,7 +70,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -370,7 +370,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -414,7 +414,7 @@ - + @@ -1022,7 +1022,7 @@ - + @@ -1042,7 +1042,7 @@ - + @@ -1062,7 +1062,7 @@ - + @@ -1670,7 +1670,7 @@ - + @@ -1690,7 +1690,7 @@ - + @@ -1710,7 +1710,7 @@ - + @@ -1730,7 +1730,7 @@ - + @@ -1750,7 +1750,7 @@ - + @@ -1770,7 +1770,7 @@ - + @@ -1998,7 +1998,7 @@ - + @@ -2018,7 +2018,7 @@ - + @@ -2038,7 +2038,7 @@ - + @@ -2922,7 +2922,7 @@ - + @@ -4184,7 +4184,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6frtpot.lay mame-0.251+dfsg.1/src/mame/layout/j6frtpot.lay --- mame-0.250+dfsg.1/src/mame/layout/j6frtpot.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6frtpot.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -338,7 +338,7 @@ - + @@ -1254,7 +1254,7 @@ - + @@ -1414,7 +1414,7 @@ - + @@ -1434,7 +1434,7 @@ - + @@ -1566,7 +1566,7 @@ - + @@ -2230,7 +2230,7 @@ - + @@ -2254,7 +2254,7 @@ - + @@ -2274,7 +2274,7 @@ - + @@ -2294,7 +2294,7 @@ - + @@ -2314,7 +2314,7 @@ - + @@ -2334,7 +2334,7 @@ - + @@ -2354,7 +2354,7 @@ - + @@ -2374,7 +2374,7 @@ - + @@ -2394,7 +2394,7 @@ - + @@ -2414,7 +2414,7 @@ - + @@ -2434,7 +2434,7 @@ - + @@ -2454,7 +2454,7 @@ - + @@ -2542,7 +2542,7 @@ - + @@ -2562,7 +2562,7 @@ - + @@ -2582,7 +2582,7 @@ - + @@ -2602,7 +2602,7 @@ - + @@ -2622,7 +2622,7 @@ - + @@ -2642,7 +2642,7 @@ - + @@ -2662,7 +2662,7 @@ - + @@ -2682,7 +2682,7 @@ - + @@ -2702,7 +2702,7 @@ - + @@ -2722,7 +2722,7 @@ - + @@ -3058,7 +3058,7 @@ - + @@ -3078,7 +3078,7 @@ - + @@ -3362,7 +3362,7 @@ - + @@ -3382,7 +3382,7 @@ - + @@ -4683,7 +4683,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6gidogh.lay mame-0.251+dfsg.1/src/mame/layout/j6gidogh.lay --- mame-0.250+dfsg.1/src/mame/layout/j6gidogh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6gidogh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -2714,7 +2714,7 @@ - + @@ -2734,7 +2734,7 @@ - + @@ -2754,7 +2754,7 @@ - + @@ -2774,7 +2774,7 @@ - + @@ -2794,7 +2794,7 @@ - + @@ -2814,7 +2814,7 @@ - + @@ -2854,7 +2854,7 @@ - + @@ -4331,6 +4331,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6gldclb.lay mame-0.251+dfsg.1/src/mame/layout/j6gldclb.lay --- mame-0.250+dfsg.1/src/mame/layout/j6gldclb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6gldclb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1086,7 +1086,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1166,7 +1166,7 @@ - + @@ -1218,7 +1218,7 @@ - + @@ -1238,7 +1238,7 @@ - + @@ -2134,7 +2134,7 @@ - + @@ -2154,7 +2154,7 @@ - + @@ -2174,7 +2174,7 @@ - + @@ -2194,7 +2194,7 @@ - + @@ -2214,7 +2214,7 @@ - + @@ -2234,7 +2234,7 @@ - + @@ -2254,7 +2254,7 @@ - + @@ -2274,7 +2274,7 @@ - + @@ -2294,7 +2294,7 @@ - + @@ -2742,7 +2742,7 @@ - + @@ -2762,7 +2762,7 @@ - + @@ -2782,7 +2782,7 @@ - + @@ -2802,7 +2802,7 @@ - + @@ -2822,7 +2822,7 @@ - + @@ -2842,7 +2842,7 @@ - + @@ -2862,7 +2862,7 @@ - + @@ -2882,7 +2882,7 @@ - + @@ -2902,7 +2902,7 @@ - + @@ -2922,7 +2922,7 @@ - + @@ -2942,7 +2942,7 @@ - + @@ -2962,7 +2962,7 @@ - + @@ -2982,7 +2982,7 @@ - + @@ -3002,7 +3002,7 @@ - + @@ -3022,7 +3022,7 @@ - + @@ -3042,7 +3042,7 @@ - + @@ -3062,7 +3062,7 @@ - + @@ -3082,7 +3082,7 @@ - + @@ -3102,7 +3102,7 @@ - + @@ -3358,7 +3358,7 @@ - + @@ -3567,13 +3567,13 @@ - + - + @@ -4872,6 +4872,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6gogold.lay mame-0.251+dfsg.1/src/mame/layout/j6gogold.lay --- mame-0.250+dfsg.1/src/mame/layout/j6gogold.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6gogold.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -1646,7 +1646,7 @@ - + @@ -1666,7 +1666,7 @@ - + @@ -1686,7 +1686,7 @@ - + @@ -1706,7 +1706,7 @@ - + @@ -1726,7 +1726,7 @@ - + @@ -1746,7 +1746,7 @@ - + @@ -1766,7 +1766,7 @@ - + @@ -1786,7 +1786,7 @@ - + @@ -2006,7 +2006,7 @@ - + @@ -2026,7 +2026,7 @@ - + @@ -2046,7 +2046,7 @@ - + @@ -2066,7 +2066,7 @@ - + @@ -2086,7 +2086,7 @@ - + @@ -2106,7 +2106,7 @@ - + @@ -2126,7 +2126,7 @@ - + @@ -2146,7 +2146,7 @@ - + @@ -2166,7 +2166,7 @@ - + @@ -2194,7 +2194,7 @@ - + @@ -3467,6 +3467,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6goldgla.lay mame-0.251+dfsg.1/src/mame/layout/j6goldgla.lay --- mame-0.250+dfsg.1/src/mame/layout/j6goldgla.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6goldgla.lay 2022-12-29 14:20:09.000000000 +0000 @@ -98,7 +98,7 @@ - + @@ -2022,7 +2022,7 @@ - + @@ -2042,7 +2042,7 @@ - + @@ -2062,7 +2062,7 @@ - + @@ -2082,7 +2082,7 @@ - + @@ -2102,7 +2102,7 @@ - + @@ -2122,7 +2122,7 @@ - + @@ -2142,7 +2142,7 @@ - + @@ -2162,7 +2162,7 @@ - + @@ -2182,7 +2182,7 @@ - + @@ -2414,7 +2414,7 @@ - + @@ -2434,7 +2434,7 @@ - + @@ -2454,7 +2454,7 @@ - + @@ -2474,7 +2474,7 @@ - + @@ -2494,7 +2494,7 @@ - + @@ -2554,7 +2554,7 @@ - + @@ -2574,7 +2574,7 @@ - + @@ -2594,7 +2594,7 @@ - + @@ -2614,7 +2614,7 @@ - + @@ -2634,7 +2634,7 @@ - + @@ -2654,7 +2654,7 @@ - + @@ -2674,7 +2674,7 @@ - + @@ -2694,7 +2694,7 @@ - + @@ -2714,7 +2714,7 @@ - + @@ -2734,7 +2734,7 @@ - + @@ -2754,7 +2754,7 @@ - + @@ -3554,7 +3554,7 @@ - + @@ -3798,7 +3798,7 @@ - + @@ -4158,7 +4158,7 @@ - + @@ -5957,7 +5957,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6guabc.lay mame-0.251+dfsg.1/src/mame/layout/j6guabc.lay --- mame-0.250+dfsg.1/src/mame/layout/j6guabc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6guabc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1273,7 +1273,7 @@ - + @@ -1293,7 +1293,7 @@ - + @@ -1333,7 +1333,7 @@ - + @@ -1353,7 +1353,7 @@ - + @@ -1373,7 +1373,7 @@ - + @@ -1393,7 +1393,7 @@ - + @@ -1413,7 +1413,7 @@ - + @@ -1433,7 +1433,7 @@ - + @@ -2079,7 +2079,7 @@ - + @@ -2475,7 +2475,7 @@ - + @@ -2491,7 +2491,7 @@ - + @@ -3460,6 +3460,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6guabcl.lay mame-0.251+dfsg.1/src/mame/layout/j6guabcl.lay --- mame-0.250+dfsg.1/src/mame/layout/j6guabcl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6guabcl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -2380,7 +2380,7 @@ - + @@ -2400,7 +2400,7 @@ - + @@ -2420,7 +2420,7 @@ - + @@ -2440,7 +2440,7 @@ - + @@ -2460,7 +2460,7 @@ - + @@ -2480,7 +2480,7 @@ - + @@ -2500,7 +2500,7 @@ - + @@ -2520,7 +2520,7 @@ - + @@ -2540,7 +2540,7 @@ - + @@ -2560,7 +2560,7 @@ - + @@ -2580,7 +2580,7 @@ - + @@ -2600,7 +2600,7 @@ - + @@ -2620,7 +2620,7 @@ - + @@ -2640,7 +2640,7 @@ - + @@ -2660,7 +2660,7 @@ - + @@ -2680,7 +2680,7 @@ - + @@ -2700,7 +2700,7 @@ - + @@ -3000,7 +3000,7 @@ - + @@ -4266,6 +4266,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6hapyhrb.lay mame-0.251+dfsg.1/src/mame/layout/j6hapyhrb.lay --- mame-0.250+dfsg.1/src/mame/layout/j6hapyhrb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6hapyhrb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -906,7 +906,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -1048,7 +1048,7 @@ - + @@ -1279,7 +1279,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6impuls15.lay mame-0.251+dfsg.1/src/mame/layout/j6impuls15.lay --- mame-0.250+dfsg.1/src/mame/layout/j6impuls15.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6impuls15.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1066,7 +1066,7 @@ - + @@ -1090,7 +1090,7 @@ - + @@ -1114,7 +1114,7 @@ - + @@ -1842,7 +1842,7 @@ - + @@ -1862,7 +1862,7 @@ - + @@ -1882,7 +1882,7 @@ - + @@ -1902,7 +1902,7 @@ - + @@ -1922,7 +1922,7 @@ - + @@ -1942,7 +1942,7 @@ - + @@ -1962,7 +1962,7 @@ - + @@ -1982,7 +1982,7 @@ - + @@ -2002,7 +2002,7 @@ - + @@ -2022,7 +2022,7 @@ - + @@ -2042,7 +2042,7 @@ - + @@ -2062,7 +2062,7 @@ - + @@ -2082,7 +2082,7 @@ - + @@ -2102,7 +2102,7 @@ - + @@ -2122,7 +2122,7 @@ - + @@ -2142,7 +2142,7 @@ - + @@ -2162,7 +2162,7 @@ - + @@ -2182,7 +2182,7 @@ - + @@ -2202,7 +2202,7 @@ - + @@ -2222,7 +2222,7 @@ - + @@ -2262,7 +2262,7 @@ - + @@ -3280,8 +3280,16 @@ - + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6impuls.lay mame-0.251+dfsg.1/src/mame/layout/j6impuls.lay --- mame-0.250+dfsg.1/src/mame/layout/j6impuls.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6impuls.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1830,7 +1830,7 @@ - + @@ -1850,7 +1850,7 @@ - + @@ -1870,7 +1870,7 @@ - + @@ -1890,7 +1890,7 @@ - + @@ -1910,7 +1910,7 @@ - + @@ -1930,7 +1930,7 @@ - + @@ -1950,7 +1950,7 @@ - + @@ -1970,7 +1970,7 @@ - + @@ -1990,7 +1990,7 @@ - + @@ -2010,7 +2010,7 @@ - + @@ -2030,7 +2030,7 @@ - + @@ -2050,7 +2050,7 @@ - + @@ -2070,7 +2070,7 @@ - + @@ -2090,7 +2090,7 @@ - + @@ -2110,7 +2110,7 @@ - + @@ -2130,7 +2130,7 @@ - + @@ -2150,7 +2150,7 @@ - + @@ -2170,7 +2170,7 @@ - + @@ -2190,7 +2190,7 @@ - + @@ -2210,7 +2210,7 @@ - + @@ -2250,7 +2250,7 @@ - + @@ -3270,6 +3270,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6indy6.lay mame-0.251+dfsg.1/src/mame/layout/j6indy6.lay --- mame-0.250+dfsg.1/src/mame/layout/j6indy6.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6indy6.lay 2022-12-29 14:20:09.000000000 +0000 @@ -24,7 +24,7 @@ - + @@ -76,7 +76,7 @@ - + @@ -128,7 +128,7 @@ - + @@ -232,7 +232,7 @@ - + @@ -276,7 +276,7 @@ - + @@ -340,7 +340,7 @@ - + @@ -360,7 +360,7 @@ - + @@ -612,7 +612,7 @@ - + @@ -676,7 +676,7 @@ - + @@ -736,7 +736,7 @@ - + @@ -828,7 +828,7 @@ - + @@ -848,7 +848,7 @@ - + @@ -868,7 +868,7 @@ - + @@ -888,7 +888,7 @@ - + @@ -908,7 +908,7 @@ - + @@ -928,7 +928,7 @@ - + @@ -1580,7 +1580,7 @@ - + @@ -2124,7 +2124,7 @@ - + @@ -2144,7 +2144,7 @@ - + @@ -2164,7 +2164,7 @@ - + @@ -2184,7 +2184,7 @@ - + @@ -2204,7 +2204,7 @@ - + @@ -2224,7 +2224,7 @@ - + @@ -2244,7 +2244,7 @@ - + @@ -2264,7 +2264,7 @@ - + @@ -2344,7 +2344,7 @@ - + @@ -2678,7 +2678,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6indy8.lay mame-0.251+dfsg.1/src/mame/layout/j6indy8.lay --- mame-0.250+dfsg.1/src/mame/layout/j6indy8.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6indy8.lay 2022-12-29 14:20:09.000000000 +0000 @@ -24,7 +24,7 @@ - + @@ -76,7 +76,7 @@ - + @@ -128,7 +128,7 @@ - + @@ -232,7 +232,7 @@ - + @@ -276,7 +276,7 @@ - + @@ -340,7 +340,7 @@ - + @@ -360,7 +360,7 @@ - + @@ -612,7 +612,7 @@ - + @@ -676,7 +676,7 @@ - + @@ -736,7 +736,7 @@ - + @@ -828,7 +828,7 @@ - + @@ -848,7 +848,7 @@ - + @@ -868,7 +868,7 @@ - + @@ -888,7 +888,7 @@ - + @@ -908,7 +908,7 @@ - + @@ -928,7 +928,7 @@ - + @@ -1580,7 +1580,7 @@ - + @@ -2124,7 +2124,7 @@ - + @@ -2144,7 +2144,7 @@ - + @@ -2164,7 +2164,7 @@ - + @@ -2184,7 +2184,7 @@ - + @@ -2204,7 +2204,7 @@ - + @@ -2224,7 +2224,7 @@ - + @@ -2244,7 +2244,7 @@ - + @@ -2264,7 +2264,7 @@ - + @@ -2344,7 +2344,7 @@ - + @@ -2678,7 +2678,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6kfc.lay mame-0.251+dfsg.1/src/mame/layout/j6kfc.lay --- mame-0.250+dfsg.1/src/mame/layout/j6kfc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6kfc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -1946,7 +1946,7 @@ - + @@ -2185,13 +2185,13 @@ - + - + @@ -2203,7 +2203,7 @@ - + @@ -3295,6 +3295,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6kungfu.lay mame-0.251+dfsg.1/src/mame/layout/j6kungfu.lay --- mame-0.250+dfsg.1/src/mame/layout/j6kungfu.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6kungfu.lay 2022-12-29 14:20:09.000000000 +0000 @@ -64,7 +64,7 @@ - + @@ -88,7 +88,7 @@ - + @@ -112,7 +112,7 @@ - + @@ -136,7 +136,7 @@ - + @@ -160,7 +160,7 @@ - + @@ -184,7 +184,7 @@ - + @@ -208,7 +208,7 @@ - + @@ -232,7 +232,7 @@ - + @@ -256,7 +256,7 @@ - + @@ -280,7 +280,7 @@ - + @@ -304,7 +304,7 @@ - + @@ -328,7 +328,7 @@ - + @@ -352,7 +352,7 @@ - + @@ -1680,7 +1680,7 @@ - + @@ -1966,7 +1966,7 @@ - + @@ -2577,7 +2577,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6megbck.lay mame-0.251+dfsg.1/src/mame/layout/j6megbck.lay --- mame-0.250+dfsg.1/src/mame/layout/j6megbck.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6megbck.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -2402,7 +2402,7 @@ - + @@ -2426,7 +2426,7 @@ - + @@ -2446,7 +2446,7 @@ - + @@ -2466,7 +2466,7 @@ - + @@ -2490,7 +2490,7 @@ - + @@ -2514,7 +2514,7 @@ - + @@ -2534,7 +2534,7 @@ - + @@ -2558,7 +2558,7 @@ - + @@ -2582,7 +2582,7 @@ - + @@ -2602,7 +2602,7 @@ - + @@ -2626,7 +2626,7 @@ - + @@ -2646,7 +2646,7 @@ - + @@ -2670,7 +2670,7 @@ - + @@ -2694,7 +2694,7 @@ - + @@ -2718,7 +2718,7 @@ - + @@ -3642,7 +3642,7 @@ - + @@ -5354,6 +5354,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6mono6010.lay mame-0.251+dfsg.1/src/mame/layout/j6mono6010.lay --- mame-0.250+dfsg.1/src/mame/layout/j6mono6010.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6mono6010.lay 2022-12-29 14:20:09.000000000 +0000 @@ -64,7 +64,7 @@ - + @@ -192,7 +192,7 @@ - + @@ -284,7 +284,7 @@ - + @@ -304,7 +304,7 @@ - + @@ -372,7 +372,7 @@ - + @@ -392,7 +392,7 @@ - + @@ -968,7 +968,7 @@ - + @@ -1004,7 +1004,7 @@ - + @@ -1104,7 +1104,7 @@ - + @@ -1180,7 +1180,7 @@ - + @@ -1200,7 +1200,7 @@ - + @@ -1292,7 +1292,7 @@ - + @@ -1360,7 +1360,7 @@ - + @@ -1404,7 +1404,7 @@ - + @@ -1448,7 +1448,7 @@ - + @@ -1524,7 +1524,7 @@ - + @@ -1560,7 +1560,7 @@ - + @@ -1604,7 +1604,7 @@ - + @@ -1656,7 +1656,7 @@ - + @@ -1676,7 +1676,7 @@ - + @@ -2204,7 +2204,7 @@ - + @@ -2224,7 +2224,7 @@ - + @@ -2244,7 +2244,7 @@ - + @@ -2264,7 +2264,7 @@ - + @@ -2284,7 +2284,7 @@ - + @@ -2304,7 +2304,7 @@ - + @@ -2324,7 +2324,7 @@ - + @@ -2344,7 +2344,7 @@ - + @@ -2520,7 +2520,7 @@ - + @@ -3648,6 +3648,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6mono608.lay mame-0.251+dfsg.1/src/mame/layout/j6mono608.lay --- mame-0.250+dfsg.1/src/mame/layout/j6mono608.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6mono608.lay 2022-12-29 14:20:09.000000000 +0000 @@ -64,7 +64,7 @@ - + @@ -192,7 +192,7 @@ - + @@ -284,7 +284,7 @@ - + @@ -304,7 +304,7 @@ - + @@ -372,7 +372,7 @@ - + @@ -392,7 +392,7 @@ - + @@ -968,7 +968,7 @@ - + @@ -1004,7 +1004,7 @@ - + @@ -1104,7 +1104,7 @@ - + @@ -1180,7 +1180,7 @@ - + @@ -1200,7 +1200,7 @@ - + @@ -1292,7 +1292,7 @@ - + @@ -1360,7 +1360,7 @@ - + @@ -1404,7 +1404,7 @@ - + @@ -1448,7 +1448,7 @@ - + @@ -1524,7 +1524,7 @@ - + @@ -1560,7 +1560,7 @@ - + @@ -1604,7 +1604,7 @@ - + @@ -1656,7 +1656,7 @@ - + @@ -1676,7 +1676,7 @@ - + @@ -2204,7 +2204,7 @@ - + @@ -2224,7 +2224,7 @@ - + @@ -2244,7 +2244,7 @@ - + @@ -2264,7 +2264,7 @@ - + @@ -2284,7 +2284,7 @@ - + @@ -2304,7 +2304,7 @@ - + @@ -2324,7 +2324,7 @@ - + @@ -2344,7 +2344,7 @@ - + @@ -2520,7 +2520,7 @@ - + @@ -3648,6 +3648,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6mono60.lay mame-0.251+dfsg.1/src/mame/layout/j6mono60.lay --- mame-0.250+dfsg.1/src/mame/layout/j6mono60.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6mono60.lay 2022-12-29 14:20:09.000000000 +0000 @@ -64,7 +64,7 @@ - + @@ -192,7 +192,7 @@ - + @@ -284,7 +284,7 @@ - + @@ -304,7 +304,7 @@ - + @@ -372,7 +372,7 @@ - + @@ -392,7 +392,7 @@ - + @@ -968,7 +968,7 @@ - + @@ -1004,7 +1004,7 @@ - + @@ -1104,7 +1104,7 @@ - + @@ -1180,7 +1180,7 @@ - + @@ -1200,7 +1200,7 @@ - + @@ -1292,7 +1292,7 @@ - + @@ -1360,7 +1360,7 @@ - + @@ -1404,7 +1404,7 @@ - + @@ -1448,7 +1448,7 @@ - + @@ -1524,7 +1524,7 @@ - + @@ -1560,7 +1560,7 @@ - + @@ -1604,7 +1604,7 @@ - + @@ -1656,7 +1656,7 @@ - + @@ -1676,7 +1676,7 @@ - + @@ -2204,7 +2204,7 @@ - + @@ -2224,7 +2224,7 @@ - + @@ -2244,7 +2244,7 @@ - + @@ -2264,7 +2264,7 @@ - + @@ -2284,7 +2284,7 @@ - + @@ -2304,7 +2304,7 @@ - + @@ -2324,7 +2324,7 @@ - + @@ -2344,7 +2344,7 @@ - + @@ -2520,7 +2520,7 @@ - + @@ -3647,7 +3647,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6monst.lay mame-0.251+dfsg.1/src/mame/layout/j6monst.lay --- mame-0.250+dfsg.1/src/mame/layout/j6monst.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6monst.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1382,7 +1382,7 @@ - + @@ -1402,7 +1402,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -2410,7 +2410,7 @@ - + @@ -3697,6 +3697,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6montlk6.lay mame-0.251+dfsg.1/src/mame/layout/j6montlk6.lay --- mame-0.250+dfsg.1/src/mame/layout/j6montlk6.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6montlk6.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -74,7 +74,7 @@ - + @@ -94,7 +94,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -202,7 +202,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -662,7 +662,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -770,7 +770,7 @@ - + @@ -830,7 +830,7 @@ - + @@ -874,7 +874,7 @@ - + @@ -938,7 +938,7 @@ - + @@ -982,7 +982,7 @@ - + @@ -1002,7 +1002,7 @@ - + @@ -1042,7 +1042,7 @@ - + @@ -1062,7 +1062,7 @@ - + @@ -1082,7 +1082,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1666,7 +1666,7 @@ - + @@ -1686,7 +1686,7 @@ - + @@ -1706,7 +1706,7 @@ - + @@ -1766,7 +1766,7 @@ - + @@ -1786,7 +1786,7 @@ - + @@ -1806,7 +1806,7 @@ - + @@ -1826,7 +1826,7 @@ - + @@ -1846,7 +1846,7 @@ - + @@ -1866,7 +1866,7 @@ - + @@ -1886,7 +1886,7 @@ - + @@ -1906,7 +1906,7 @@ - + @@ -2330,7 +2330,7 @@ - + @@ -2341,17 +2341,17 @@ - + - + - + @@ -3329,6 +3329,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6montlk.lay mame-0.251+dfsg.1/src/mame/layout/j6montlk.lay --- mame-0.250+dfsg.1/src/mame/layout/j6montlk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6montlk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -74,7 +74,7 @@ - + @@ -94,7 +94,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -202,7 +202,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -662,7 +662,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -770,7 +770,7 @@ - + @@ -830,7 +830,7 @@ - + @@ -874,7 +874,7 @@ - + @@ -938,7 +938,7 @@ - + @@ -982,7 +982,7 @@ - + @@ -1002,7 +1002,7 @@ - + @@ -1042,7 +1042,7 @@ - + @@ -1062,7 +1062,7 @@ - + @@ -1082,7 +1082,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1666,7 +1666,7 @@ - + @@ -1686,7 +1686,7 @@ - + @@ -1706,7 +1706,7 @@ - + @@ -1766,7 +1766,7 @@ - + @@ -1786,7 +1786,7 @@ - + @@ -1806,7 +1806,7 @@ - + @@ -1826,7 +1826,7 @@ - + @@ -1846,7 +1846,7 @@ - + @@ -1866,7 +1866,7 @@ - + @@ -1886,7 +1886,7 @@ - + @@ -1906,7 +1906,7 @@ - + @@ -2330,7 +2330,7 @@ - + @@ -2341,17 +2341,17 @@ - + - + - + @@ -3328,7 +3328,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6oxobin10.lay mame-0.251+dfsg.1/src/mame/layout/j6oxobin10.lay --- mame-0.250+dfsg.1/src/mame/layout/j6oxobin10.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6oxobin10.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1284,7 +1284,7 @@ - + @@ -1493,7 +1493,7 @@ - + @@ -1505,25 +1505,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6oxobin.lay mame-0.251+dfsg.1/src/mame/layout/j6oxobin.lay --- mame-0.250+dfsg.1/src/mame/layout/j6oxobin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6oxobin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1284,7 +1284,7 @@ - + @@ -1493,7 +1493,7 @@ - + @@ -1505,25 +1505,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6quick.lay mame-0.251+dfsg.1/src/mame/layout/j6quick.lay --- mame-0.250+dfsg.1/src/mame/layout/j6quick.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6quick.lay 2022-12-29 14:20:09.000000000 +0000 @@ -748,7 +748,7 @@ - + @@ -1008,7 +1008,7 @@ - + @@ -1052,7 +1052,7 @@ - + @@ -1096,7 +1096,7 @@ - + @@ -1284,7 +1284,7 @@ - + @@ -1328,7 +1328,7 @@ - + @@ -1372,7 +1372,7 @@ - + @@ -1608,7 +1608,7 @@ - + @@ -1652,7 +1652,7 @@ - + @@ -1804,7 +1804,7 @@ - + @@ -1824,7 +1824,7 @@ - + @@ -1844,7 +1844,7 @@ - + @@ -1864,7 +1864,7 @@ - + @@ -1884,7 +1884,7 @@ - + @@ -1904,7 +1904,7 @@ - + @@ -1924,7 +1924,7 @@ - + @@ -1944,7 +1944,7 @@ - + @@ -1964,7 +1964,7 @@ - + @@ -1984,7 +1984,7 @@ - + @@ -2292,7 +2292,7 @@ - + @@ -3228,7 +3228,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6ra.lay mame-0.251+dfsg.1/src/mame/layout/j6ra.lay --- mame-0.250+dfsg.1/src/mame/layout/j6ra.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6ra.lay 2022-12-29 14:20:09.000000000 +0000 @@ -386,7 +386,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -1266,7 +1266,7 @@ - + @@ -1546,7 +1546,7 @@ - + @@ -1566,7 +1566,7 @@ - + @@ -1586,7 +1586,7 @@ - + @@ -1606,7 +1606,7 @@ - + @@ -1626,7 +1626,7 @@ - + @@ -1726,7 +1726,7 @@ - + @@ -1746,7 +1746,7 @@ - + @@ -1766,7 +1766,7 @@ - + @@ -1786,7 +1786,7 @@ - + @@ -1806,7 +1806,7 @@ - + @@ -2370,7 +2370,7 @@ - + @@ -2550,49 +2550,49 @@ - + - + - + - + - + - + - + - + @@ -2608,13 +2608,13 @@ - + - + @@ -3498,7 +3498,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6redarwf.lay mame-0.251+dfsg.1/src/mame/layout/j6redarwf.lay --- mame-0.250+dfsg.1/src/mame/layout/j6redarwf.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6redarwf.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -358,7 +358,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -582,7 +582,7 @@ - + @@ -694,7 +694,7 @@ - + @@ -854,7 +854,7 @@ - + @@ -994,7 +994,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1274,7 +1274,7 @@ - + @@ -1354,7 +1354,7 @@ - + @@ -1454,7 +1454,7 @@ - + @@ -1694,7 +1694,7 @@ - + @@ -1714,7 +1714,7 @@ - + @@ -1738,7 +1738,7 @@ - + @@ -1778,7 +1778,7 @@ - + @@ -1798,7 +1798,7 @@ - + @@ -1818,7 +1818,7 @@ - + @@ -1862,7 +1862,7 @@ - + @@ -1882,7 +1882,7 @@ - + @@ -1902,7 +1902,7 @@ - + @@ -1982,7 +1982,7 @@ - + @@ -2002,7 +2002,7 @@ - + @@ -2022,7 +2022,7 @@ - + @@ -2042,7 +2042,7 @@ - + @@ -2458,7 +2458,7 @@ - + @@ -2518,7 +2518,7 @@ - + @@ -2538,7 +2538,7 @@ - + @@ -2558,7 +2558,7 @@ - + @@ -4033,7 +4033,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6reelmn.lay mame-0.251+dfsg.1/src/mame/layout/j6reelmn.lay --- mame-0.250+dfsg.1/src/mame/layout/j6reelmn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6reelmn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -24,7 +24,7 @@ - + @@ -48,7 +48,7 @@ - + @@ -68,7 +68,7 @@ - + @@ -88,7 +88,7 @@ - + @@ -108,7 +108,7 @@ - + @@ -152,7 +152,7 @@ - + @@ -172,7 +172,7 @@ - + @@ -192,7 +192,7 @@ - + @@ -272,7 +272,7 @@ - + @@ -292,7 +292,7 @@ - + @@ -336,7 +336,7 @@ - + @@ -356,7 +356,7 @@ - + @@ -376,7 +376,7 @@ - + @@ -396,7 +396,7 @@ - + @@ -416,7 +416,7 @@ - + @@ -436,7 +436,7 @@ - + @@ -456,7 +456,7 @@ - + @@ -476,7 +476,7 @@ - + @@ -496,7 +496,7 @@ - + @@ -516,7 +516,7 @@ - + @@ -536,7 +536,7 @@ - + @@ -1436,7 +1436,7 @@ - + @@ -1508,7 +1508,7 @@ - + @@ -1752,7 +1752,7 @@ - + @@ -1762,7 +1762,7 @@ - + @@ -1788,7 +1788,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6rh6cld.lay mame-0.251+dfsg.1/src/mame/layout/j6rh6cld.lay --- mame-0.250+dfsg.1/src/mame/layout/j6rh6cld.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6rh6cld.lay 2022-12-29 14:20:09.000000000 +0000 @@ -166,7 +166,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1250,7 +1250,7 @@ - + @@ -1270,7 +1270,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -2281,6 +2281,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6rhchil.lay mame-0.251+dfsg.1/src/mame/layout/j6rhchil.lay --- mame-0.250+dfsg.1/src/mame/layout/j6rhchil.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6rhchil.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -782,7 +782,7 @@ - + @@ -802,7 +802,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -2154,7 +2154,7 @@ - + @@ -3224,6 +3224,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6rico10.lay mame-0.251+dfsg.1/src/mame/layout/j6rico10.lay --- mame-0.250+dfsg.1/src/mame/layout/j6rico10.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6rico10.lay 2022-12-29 14:20:09.000000000 +0000 @@ -24,7 +24,7 @@ - + @@ -828,7 +828,7 @@ - + @@ -848,7 +848,7 @@ - + @@ -868,7 +868,7 @@ - + @@ -888,7 +888,7 @@ - + @@ -908,7 +908,7 @@ - + @@ -928,7 +928,7 @@ - + @@ -948,7 +948,7 @@ - + @@ -968,7 +968,7 @@ - + @@ -1676,7 +1676,7 @@ - + @@ -1700,7 +1700,7 @@ - + @@ -1724,7 +1724,7 @@ - + @@ -1748,7 +1748,7 @@ - + @@ -2208,7 +2208,7 @@ - + @@ -2228,7 +2228,7 @@ - + @@ -2248,7 +2248,7 @@ - + @@ -2268,7 +2268,7 @@ - + @@ -2288,7 +2288,7 @@ - + @@ -2308,7 +2308,7 @@ - + @@ -2328,7 +2328,7 @@ - + @@ -2564,7 +2564,7 @@ - + @@ -2588,7 +2588,7 @@ - + @@ -2612,7 +2612,7 @@ - + @@ -2636,7 +2636,7 @@ - + @@ -2900,7 +2900,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6roller10.lay mame-0.251+dfsg.1/src/mame/layout/j6roller10.lay --- mame-0.250+dfsg.1/src/mame/layout/j6roller10.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6roller10.lay 2022-12-29 14:20:09.000000000 +0000 @@ -170,7 +170,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -578,7 +578,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -1178,7 +1178,7 @@ - + @@ -1882,7 +1882,7 @@ - + @@ -2002,7 +2002,7 @@ - + @@ -2142,7 +2142,7 @@ - + @@ -2182,7 +2182,7 @@ - + @@ -2202,7 +2202,7 @@ - + @@ -2222,7 +2222,7 @@ - + @@ -2242,7 +2242,7 @@ - + @@ -2262,7 +2262,7 @@ - + @@ -2282,7 +2282,7 @@ - + @@ -2302,7 +2302,7 @@ - + @@ -3475,6 +3475,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6roller15.lay mame-0.251+dfsg.1/src/mame/layout/j6roller15.lay --- mame-0.250+dfsg.1/src/mame/layout/j6roller15.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6roller15.lay 2022-12-29 14:20:09.000000000 +0000 @@ -170,7 +170,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -578,7 +578,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -910,7 +910,7 @@ - + @@ -1178,7 +1178,7 @@ - + @@ -1882,7 +1882,7 @@ - + @@ -2002,7 +2002,7 @@ - + @@ -2142,7 +2142,7 @@ - + @@ -2162,7 +2162,7 @@ - + @@ -2182,7 +2182,7 @@ - + @@ -2202,7 +2202,7 @@ - + @@ -2222,7 +2222,7 @@ - + @@ -2242,7 +2242,7 @@ - + @@ -2262,7 +2262,7 @@ - + @@ -2282,7 +2282,7 @@ - + @@ -2302,7 +2302,7 @@ - + @@ -3583,7 +3583,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6roller8.lay mame-0.251+dfsg.1/src/mame/layout/j6roller8.lay --- mame-0.250+dfsg.1/src/mame/layout/j6roller8.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6roller8.lay 2022-12-29 14:20:09.000000000 +0000 @@ -170,7 +170,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -578,7 +578,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -1178,7 +1178,7 @@ - + @@ -1882,7 +1882,7 @@ - + @@ -2002,7 +2002,7 @@ - + @@ -2142,7 +2142,7 @@ - + @@ -2182,7 +2182,7 @@ - + @@ -2202,7 +2202,7 @@ - + @@ -2222,7 +2222,7 @@ - + @@ -2242,7 +2242,7 @@ - + @@ -2262,7 +2262,7 @@ - + @@ -2282,7 +2282,7 @@ - + @@ -2302,7 +2302,7 @@ - + @@ -3475,6 +3475,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6slagng.lay mame-0.251+dfsg.1/src/mame/layout/j6slagng.lay --- mame-0.250+dfsg.1/src/mame/layout/j6slagng.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6slagng.lay 2022-12-29 14:20:09.000000000 +0000 @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -3098,7 +3098,7 @@ - + @@ -4513,7 +4513,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6snakes.lay mame-0.251+dfsg.1/src/mame/layout/j6snakes.lay --- mame-0.250+dfsg.1/src/mame/layout/j6snakes.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6snakes.lay 2022-12-29 14:20:09.000000000 +0000 @@ -24,7 +24,7 @@ - + @@ -44,7 +44,7 @@ - + @@ -64,7 +64,7 @@ - + @@ -84,7 +84,7 @@ - + @@ -104,7 +104,7 @@ - + @@ -124,7 +124,7 @@ - + @@ -144,7 +144,7 @@ - + @@ -164,7 +164,7 @@ - + @@ -184,7 +184,7 @@ - + @@ -892,7 +892,7 @@ - + @@ -1008,7 +1008,7 @@ - + @@ -1132,7 +1132,7 @@ - + @@ -1268,7 +1268,7 @@ - + @@ -1400,7 +1400,7 @@ - + @@ -1512,7 +1512,7 @@ - + @@ -1648,7 +1648,7 @@ - + @@ -1756,7 +1756,7 @@ - + @@ -1892,7 +1892,7 @@ - + @@ -2472,7 +2472,7 @@ - + @@ -2492,7 +2492,7 @@ - + @@ -2512,7 +2512,7 @@ - + @@ -2532,7 +2532,7 @@ - + @@ -3072,7 +3072,7 @@ - + @@ -3092,7 +3092,7 @@ - + @@ -3132,7 +3132,7 @@ - + @@ -3212,7 +3212,7 @@ - + @@ -3292,7 +3292,7 @@ - + @@ -3312,7 +3312,7 @@ - + @@ -3352,7 +3352,7 @@ - + @@ -3372,7 +3372,7 @@ - + @@ -3432,7 +3432,7 @@ - + @@ -3452,7 +3452,7 @@ - + @@ -3644,7 +3644,7 @@ - + @@ -5003,7 +5003,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6sonic10.lay mame-0.251+dfsg.1/src/mame/layout/j6sonic10.lay --- mame-0.250+dfsg.1/src/mame/layout/j6sonic10.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6sonic10.lay 2022-12-29 14:20:09.000000000 +0000 @@ -44,7 +44,7 @@ - + @@ -64,7 +64,7 @@ - + @@ -84,7 +84,7 @@ - + @@ -104,7 +104,7 @@ - + @@ -124,7 +124,7 @@ - + @@ -144,7 +144,7 @@ - + @@ -164,7 +164,7 @@ - + @@ -184,7 +184,7 @@ - + @@ -204,7 +204,7 @@ - + @@ -224,7 +224,7 @@ - + @@ -284,7 +284,7 @@ - + @@ -368,7 +368,7 @@ - + @@ -568,7 +568,7 @@ - + @@ -688,7 +688,7 @@ - + @@ -772,7 +772,7 @@ - + @@ -952,7 +952,7 @@ - + @@ -1012,7 +1012,7 @@ - + @@ -1572,7 +1572,7 @@ - + @@ -1680,7 +1680,7 @@ - + @@ -1760,7 +1760,7 @@ - + @@ -1940,7 +1940,7 @@ - + @@ -2064,7 +2064,7 @@ - + @@ -2084,7 +2084,7 @@ - + @@ -2104,7 +2104,7 @@ - + @@ -2124,7 +2124,7 @@ - + @@ -2144,7 +2144,7 @@ - + @@ -2164,7 +2164,7 @@ - + @@ -2184,7 +2184,7 @@ - + @@ -2204,7 +2204,7 @@ - + @@ -2224,7 +2224,7 @@ - + @@ -2244,7 +2244,7 @@ - + @@ -2264,7 +2264,7 @@ - + @@ -2284,7 +2284,7 @@ - + @@ -2384,7 +2384,7 @@ - + @@ -2444,7 +2444,7 @@ - + @@ -2612,7 +2612,7 @@ - + @@ -3973,7 +3973,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6stards.lay mame-0.251+dfsg.1/src/mame/layout/j6stards.lay --- mame-0.250+dfsg.1/src/mame/layout/j6stards.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6stards.lay 2022-12-29 14:20:09.000000000 +0000 @@ -892,7 +892,7 @@ - + @@ -912,7 +912,7 @@ - + @@ -932,7 +932,7 @@ - + @@ -952,7 +952,7 @@ - + @@ -972,7 +972,7 @@ - + @@ -992,7 +992,7 @@ - + @@ -1012,7 +1012,7 @@ - + @@ -1032,7 +1032,7 @@ - + @@ -1052,7 +1052,7 @@ - + @@ -1072,7 +1072,7 @@ - + @@ -1912,7 +1912,7 @@ - + @@ -1932,7 +1932,7 @@ - + @@ -1952,7 +1952,7 @@ - + @@ -1972,7 +1972,7 @@ - + @@ -1992,7 +1992,7 @@ - + @@ -2012,7 +2012,7 @@ - + @@ -2032,7 +2032,7 @@ - + @@ -2052,7 +2052,7 @@ - + @@ -2544,7 +2544,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6swpdrp.lay mame-0.251+dfsg.1/src/mame/layout/j6swpdrp.lay --- mame-0.250+dfsg.1/src/mame/layout/j6swpdrp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6swpdrp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1910,7 +1910,7 @@ - + @@ -2991,6 +2991,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6tombc.lay mame-0.251+dfsg.1/src/mame/layout/j6tombc.lay --- mame-0.250+dfsg.1/src/mame/layout/j6tombc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6tombc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1622,7 +1622,7 @@ - + @@ -1642,7 +1642,7 @@ - + @@ -1662,7 +1662,7 @@ - + @@ -1682,7 +1682,7 @@ - + @@ -1702,7 +1702,7 @@ - + @@ -1722,7 +1722,7 @@ - + @@ -1742,7 +1742,7 @@ - + @@ -1762,7 +1762,7 @@ - + @@ -1782,7 +1782,7 @@ - + @@ -1802,7 +1802,7 @@ - + @@ -1822,7 +1822,7 @@ - + @@ -2222,7 +2222,7 @@ - + @@ -2364,7 +2364,7 @@ - + @@ -3265,6 +3265,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6topflg.lay mame-0.251+dfsg.1/src/mame/layout/j6topflg.lay --- mame-0.250+dfsg.1/src/mame/layout/j6topflg.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6topflg.lay 2022-12-29 14:20:09.000000000 +0000 @@ -390,7 +390,7 @@ - + @@ -442,7 +442,7 @@ - + @@ -462,7 +462,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -534,7 +534,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -842,7 +842,7 @@ - + @@ -878,7 +878,7 @@ - + @@ -930,7 +930,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -1002,7 +1002,7 @@ - + @@ -1946,7 +1946,7 @@ - + @@ -1966,7 +1966,7 @@ - + @@ -1986,7 +1986,7 @@ - + @@ -2006,7 +2006,7 @@ - + @@ -2026,7 +2026,7 @@ - + @@ -2046,7 +2046,7 @@ - + @@ -2066,7 +2066,7 @@ - + @@ -2086,7 +2086,7 @@ - + @@ -2106,7 +2106,7 @@ - + @@ -2126,7 +2126,7 @@ - + @@ -2146,7 +2146,7 @@ - + @@ -2166,7 +2166,7 @@ - + @@ -4318,7 +4318,7 @@ - + @@ -6029,7 +6029,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6twst.lay mame-0.251+dfsg.1/src/mame/layout/j6twst.lay --- mame-0.250+dfsg.1/src/mame/layout/j6twst.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6twst.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1490,7 +1490,7 @@ - + @@ -2620,7 +2620,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6untch.lay mame-0.251+dfsg.1/src/mame/layout/j6untch.lay --- mame-0.250+dfsg.1/src/mame/layout/j6untch.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6untch.lay 2022-12-29 14:20:09.000000000 +0000 @@ -84,7 +84,7 @@ - + @@ -144,7 +144,7 @@ - + @@ -224,7 +224,7 @@ - + @@ -648,7 +648,7 @@ - + @@ -808,7 +808,7 @@ - + @@ -868,7 +868,7 @@ - + @@ -968,7 +968,7 @@ - + @@ -988,7 +988,7 @@ - + @@ -1088,7 +1088,7 @@ - + @@ -1268,7 +1268,7 @@ - + @@ -1288,7 +1288,7 @@ - + @@ -1308,7 +1308,7 @@ - + @@ -1612,7 +1612,7 @@ - + @@ -1632,7 +1632,7 @@ - + @@ -1652,7 +1652,7 @@ - + @@ -1672,7 +1672,7 @@ - + @@ -1812,7 +1812,7 @@ - + @@ -2192,7 +2192,7 @@ - + @@ -2212,7 +2212,7 @@ - + @@ -2232,7 +2232,7 @@ - + @@ -2252,7 +2252,7 @@ - + @@ -2272,7 +2272,7 @@ - + @@ -2292,7 +2292,7 @@ - + @@ -2312,7 +2312,7 @@ - + @@ -2332,7 +2332,7 @@ - + @@ -2564,7 +2564,7 @@ - + @@ -2896,7 +2896,7 @@ - + @@ -4148,6 +4148,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6vindal.lay mame-0.251+dfsg.1/src/mame/layout/j6vindal.lay --- mame-0.250+dfsg.1/src/mame/layout/j6vindal.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6vindal.lay 2022-12-29 14:20:09.000000000 +0000 @@ -314,7 +314,7 @@ - + @@ -338,7 +338,7 @@ - + @@ -542,7 +542,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -614,7 +614,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -702,7 +702,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -1494,7 +1494,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -1534,7 +1534,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1594,7 +1594,7 @@ - + @@ -1614,7 +1614,7 @@ - + @@ -1634,7 +1634,7 @@ - + @@ -1654,7 +1654,7 @@ - + @@ -1674,7 +1674,7 @@ - + @@ -1714,7 +1714,7 @@ - + @@ -1754,7 +1754,7 @@ - + @@ -1794,7 +1794,7 @@ - + @@ -1834,7 +1834,7 @@ - + @@ -1914,7 +1914,7 @@ - + @@ -1934,7 +1934,7 @@ - + @@ -2234,7 +2234,7 @@ - + @@ -2254,7 +2254,7 @@ - + @@ -2274,7 +2274,7 @@ - + @@ -2314,7 +2314,7 @@ - + @@ -2334,7 +2334,7 @@ - + @@ -2354,7 +2354,7 @@ - + @@ -2374,7 +2374,7 @@ - + @@ -2394,7 +2394,7 @@ - + @@ -2414,7 +2414,7 @@ - + @@ -2434,7 +2434,7 @@ - + @@ -2454,7 +2454,7 @@ - + @@ -2474,7 +2474,7 @@ - + @@ -2734,7 +2734,7 @@ - + @@ -2863,7 +2863,7 @@ - + @@ -3904,7 +3904,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6vivark.lay mame-0.251+dfsg.1/src/mame/layout/j6vivark.lay --- mame-0.250+dfsg.1/src/mame/layout/j6vivark.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6vivark.lay 2022-12-29 14:20:09.000000000 +0000 @@ -622,7 +622,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -730,7 +730,7 @@ - + @@ -774,7 +774,7 @@ - + @@ -798,7 +798,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -2078,7 +2078,7 @@ - + @@ -2102,7 +2102,7 @@ - + @@ -2126,7 +2126,7 @@ - + @@ -2150,7 +2150,7 @@ - + @@ -4150,7 +4150,16 @@ + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6wizardd.lay mame-0.251+dfsg.1/src/mame/layout/j6wizardd.lay --- mame-0.250+dfsg.1/src/mame/layout/j6wizardd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6wizardd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -156,7 +156,7 @@ - + @@ -200,7 +200,7 @@ - + @@ -432,7 +432,7 @@ - + @@ -476,7 +476,7 @@ - + @@ -616,7 +616,7 @@ - + @@ -660,7 +660,7 @@ - + @@ -704,7 +704,7 @@ - + @@ -844,7 +844,7 @@ - + @@ -888,7 +888,7 @@ - + @@ -932,7 +932,7 @@ - + @@ -1072,7 +1072,7 @@ - + @@ -1116,7 +1116,7 @@ - + @@ -1160,7 +1160,7 @@ - + @@ -1912,7 +1912,7 @@ - + @@ -2362,61 +2362,61 @@ - + - + - + - + - + - + - + - + - + - + @@ -3056,6 +3056,9 @@ + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j6wldkng.lay mame-0.251+dfsg.1/src/mame/layout/j6wldkng.lay --- mame-0.250+dfsg.1/src/mame/layout/j6wldkng.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j6wldkng.lay 2022-12-29 14:20:09.000000000 +0000 @@ -396,7 +396,7 @@ - + @@ -416,7 +416,7 @@ - + @@ -436,7 +436,7 @@ - + @@ -456,7 +456,7 @@ - + @@ -476,7 +476,7 @@ - + @@ -496,7 +496,7 @@ - + @@ -516,7 +516,7 @@ - + @@ -536,7 +536,7 @@ - + @@ -556,7 +556,7 @@ - + @@ -576,7 +576,7 @@ - + @@ -596,7 +596,7 @@ - + @@ -616,7 +616,7 @@ - + @@ -1092,7 +1092,7 @@ - + @@ -1328,7 +1328,7 @@ - + @@ -1346,19 +1346,19 @@ - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j80bac.lay mame-0.251+dfsg.1/src/mame/layout/j80bac.lay --- mame-0.250+dfsg.1/src/mame/layout/j80bac.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j80bac.lay 2022-12-29 14:20:09.000000000 +0000 @@ -334,7 +334,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -1312,7 +1312,7 @@ - + @@ -1388,7 +1388,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j80bounc.lay mame-0.251+dfsg.1/src/mame/layout/j80bounc.lay --- mame-0.250+dfsg.1/src/mame/layout/j80bounc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j80bounc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -158,7 +158,7 @@ - + @@ -518,7 +518,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -1350,7 +1350,7 @@ - + @@ -1366,19 +1366,19 @@ - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j80frogh.lay mame-0.251+dfsg.1/src/mame/layout/j80frogh.lay --- mame-0.250+dfsg.1/src/mame/layout/j80frogh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j80frogh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -478,7 +478,7 @@ - + @@ -522,7 +522,7 @@ - + @@ -918,7 +918,7 @@ - + @@ -938,7 +938,7 @@ - + @@ -958,7 +958,7 @@ - + @@ -1520,19 +1520,19 @@ - + - + - + @@ -1562,7 +1562,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j80golds.lay mame-0.251+dfsg.1/src/mame/layout/j80golds.lay --- mame-0.250+dfsg.1/src/mame/layout/j80golds.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j80golds.lay 2022-12-29 14:20:09.000000000 +0000 @@ -178,7 +178,7 @@ - + @@ -198,7 +198,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -278,7 +278,7 @@ - + @@ -298,7 +298,7 @@ - + @@ -318,7 +318,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j80hotln.lay mame-0.251+dfsg.1/src/mame/layout/j80hotln.lay --- mame-0.250+dfsg.1/src/mame/layout/j80hotln.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j80hotln.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -174,7 +174,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -374,7 +374,7 @@ - + @@ -678,7 +678,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j80myspn.lay mame-0.251+dfsg.1/src/mame/layout/j80myspn.lay --- mame-0.250+dfsg.1/src/mame/layout/j80myspn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j80myspn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -202,7 +202,7 @@ - + @@ -222,7 +222,7 @@ - + @@ -242,7 +242,7 @@ - + @@ -262,7 +262,7 @@ - + @@ -722,7 +722,7 @@ - + @@ -1137,13 +1137,13 @@ - + - + @@ -1167,7 +1167,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j80nudg2.lay mame-0.251+dfsg.1/src/mame/layout/j80nudg2.lay --- mame-0.250+dfsg.1/src/mame/layout/j80nudg2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j80nudg2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -310,7 +310,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j80rr.lay mame-0.251+dfsg.1/src/mame/layout/j80rr.lay --- mame-0.250+dfsg.1/src/mame/layout/j80rr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j80rr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -1510,7 +1510,7 @@ - + @@ -1534,7 +1534,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j80supbk.lay mame-0.251+dfsg.1/src/mame/layout/j80supbk.lay --- mame-0.250+dfsg.1/src/mame/layout/j80supbk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j80supbk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -398,7 +398,7 @@ - + @@ -418,7 +418,7 @@ - + @@ -438,7 +438,7 @@ - + @@ -458,7 +458,7 @@ - + @@ -1308,19 +1308,19 @@ - + - + - + @@ -1390,7 +1390,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j80supst.lay mame-0.251+dfsg.1/src/mame/layout/j80supst.lay --- mame-0.250+dfsg.1/src/mame/layout/j80supst.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j80supst.lay 2022-12-29 14:20:09.000000000 +0000 @@ -170,7 +170,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -514,7 +514,7 @@ - + @@ -534,7 +534,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -1361,7 +1361,7 @@ - + @@ -1379,7 +1379,7 @@ - + @@ -1457,13 +1457,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j80topsp.lay mame-0.251+dfsg.1/src/mame/layout/j80topsp.lay --- mame-0.250+dfsg.1/src/mame/layout/j80topsp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j80topsp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -74,7 +74,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -1386,13 +1386,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j80wsprt2.lay mame-0.251+dfsg.1/src/mame/layout/j80wsprt2.lay --- mame-0.250+dfsg.1/src/mame/layout/j80wsprt2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j80wsprt2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -74,7 +74,7 @@ - + @@ -114,7 +114,7 @@ - + @@ -134,7 +134,7 @@ - + @@ -154,7 +154,7 @@ - + @@ -1270,19 +1270,19 @@ - + - + - + @@ -1300,7 +1300,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/jankenmn.lay mame-0.251+dfsg.1/src/mame/layout/jankenmn.lay --- mame-0.250+dfsg.1/src/mame/layout/jankenmn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/jankenmn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/jazz.lay mame-0.251+dfsg.1/src/mame/layout/jazz.lay --- mame-0.250+dfsg.1/src/mame/layout/jazz.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/jazz.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/jclub2o.lay mame-0.251+dfsg.1/src/mame/layout/jclub2o.lay --- mame-0.250+dfsg.1/src/mame/layout/jclub2o.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/jclub2o.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/j_cnudgr.lay mame-0.251+dfsg.1/src/mame/layout/j_cnudgr.lay --- mame-0.250+dfsg.1/src/mame/layout/j_cnudgr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j_cnudgr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/j_dud.lay mame-0.251+dfsg.1/src/mame/layout/j_dud.lay --- mame-0.250+dfsg.1/src/mame/layout/j_dud.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j_dud.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/jeutel.lay mame-0.251+dfsg.1/src/mame/layout/jeutel.lay --- mame-0.250+dfsg.1/src/mame/layout/jeutel.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/jeutel.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/j_ewn.lay mame-0.251+dfsg.1/src/mame/layout/j_ewn.lay --- mame-0.250+dfsg.1/src/mame/layout/j_ewn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j_ewn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/j_ewsdlx.lay mame-0.251+dfsg.1/src/mame/layout/j_ewsdlx.lay --- mame-0.250+dfsg.1/src/mame/layout/j_ewsdlx.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j_ewsdlx.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/j_ews.lay mame-0.251+dfsg.1/src/mame/layout/j_ews.lay --- mame-0.250+dfsg.1/src/mame/layout/j_ews.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j_ews.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/j_la.lay mame-0.251+dfsg.1/src/mame/layout/j_la.lay --- mame-0.250+dfsg.1/src/mame/layout/j_la.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j_la.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/j_lal.lay mame-0.251+dfsg.1/src/mame/layout/j_lal.lay --- mame-0.250+dfsg.1/src/mame/layout/j_lal.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j_lal.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/j_lan.lay mame-0.251+dfsg.1/src/mame/layout/j_lan.lay --- mame-0.250+dfsg.1/src/mame/layout/j_lan.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j_lan.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/j_lc.lay mame-0.251+dfsg.1/src/mame/layout/j_lc.lay --- mame-0.250+dfsg.1/src/mame/layout/j_lc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j_lc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/j_lt.lay mame-0.251+dfsg.1/src/mame/layout/j_lt.lay --- mame-0.250+dfsg.1/src/mame/layout/j_lt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j_lt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/j_ndu.lay mame-0.251+dfsg.1/src/mame/layout/j_ndu.lay --- mame-0.250+dfsg.1/src/mame/layout/j_ndu.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j_ndu.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/jockeyc.lay mame-0.251+dfsg.1/src/mame/layout/jockeyc.lay --- mame-0.250+dfsg.1/src/mame/layout/jockeyc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/jockeyc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/jollycrd.lay mame-0.251+dfsg.1/src/mame/layout/jollycrd.lay --- mame-0.250+dfsg.1/src/mame/layout/jollycrd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/jollycrd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/jp.lay mame-0.251+dfsg.1/src/mame/layout/jp.lay --- mame-0.250+dfsg.1/src/mame/layout/jp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/jp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/jpmimpct.lay mame-0.251+dfsg.1/src/mame/layout/jpmimpct.lay --- mame-0.250+dfsg.1/src/mame/layout/jpmimpct.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/jpmimpct.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ @@ -34,6 +34,12 @@ + + + + + + @@ -65,6 +71,12 @@ + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/jpmmps.lay mame-0.251+dfsg.1/src/mame/layout/jpmmps.lay --- mame-0.250+dfsg.1/src/mame/layout/jpmmps.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/jpmmps.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/jpms80.lay mame-0.251+dfsg.1/src/mame/layout/jpms80.lay --- mame-0.250+dfsg.1/src/mame/layout/jpms80.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/jpms80.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/jpmsru.lay mame-0.251+dfsg.1/src/mame/layout/jpmsru.lay --- mame-0.250+dfsg.1/src/mame/layout/jpmsru.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/jpmsru.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/jpmsys5.lay mame-0.251+dfsg.1/src/mame/layout/jpmsys5.lay --- mame-0.250+dfsg.1/src/mame/layout/jpmsys5.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/jpmsys5.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ @@ -40,6 +40,12 @@ + + + + + + @@ -85,6 +91,12 @@ + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/j_ssh.lay mame-0.251+dfsg.1/src/mame/layout/j_ssh.lay --- mame-0.250+dfsg.1/src/mame/layout/j_ssh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j_ssh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/j_sup2p.lay mame-0.251+dfsg.1/src/mame/layout/j_sup2p.lay --- mame-0.250+dfsg.1/src/mame/layout/j_sup2p.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j_sup2p.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/j_super2.lay mame-0.251+dfsg.1/src/mame/layout/j_super2.lay --- mame-0.250+dfsg.1/src/mame/layout/j_super2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j_super2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/j_supsh.lay mame-0.251+dfsg.1/src/mame/layout/j_supsh.lay --- mame-0.250+dfsg.1/src/mame/layout/j_supsh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/j_supsh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/jungjuic.lay mame-0.251+dfsg.1/src/mame/layout/jungjuic.lay --- mame-0.250+dfsg.1/src/mame/layout/jungjuic.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/jungjuic.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/junior.lay mame-0.251+dfsg.1/src/mame/layout/junior.lay --- mame-0.250+dfsg.1/src/mame/layout/junior.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/junior.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/k1003.lay mame-0.251+dfsg.1/src/mame/layout/k1003.lay --- mame-0.250+dfsg.1/src/mame/layout/k1003.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/k1003.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/k28.lay mame-0.251+dfsg.1/src/mame/layout/k28.lay --- mame-0.250+dfsg.1/src/mame/layout/k28.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/k28.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/k28m2.lay mame-0.251+dfsg.1/src/mame/layout/k28m2.lay --- mame-0.250+dfsg.1/src/mame/layout/k28m2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/k28m2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/kas89.lay mame-0.251+dfsg.1/src/mame/layout/kas89.lay --- mame-0.250+dfsg.1/src/mame/layout/kas89.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/kas89.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/kdt6.lay mame-0.251+dfsg.1/src/mame/layout/kdt6.lay --- mame-0.250+dfsg.1/src/mame/layout/kdt6.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/kdt6.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/kenokb.lay mame-0.251+dfsg.1/src/mame/layout/kenokb.lay --- mame-0.250+dfsg.1/src/mame/layout/kenokb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/kenokb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/kenseim.lay mame-0.251+dfsg.1/src/mame/layout/kenseim.lay --- mame-0.250+dfsg.1/src/mame/layout/kenseim.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/kenseim.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/kgalah.lay mame-0.251+dfsg.1/src/mame/layout/kgalah.lay --- mame-0.250+dfsg.1/src/mame/layout/kgalah.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/kgalah.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/kgbirda5.lay mame-0.251+dfsg.1/src/mame/layout/kgbirda5.lay --- mame-0.250+dfsg.1/src/mame/layout/kgbirda5.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/kgbirda5.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/kgbird.lay mame-0.251+dfsg.1/src/mame/layout/kgbird.lay --- mame-0.250+dfsg.1/src/mame/layout/kgbird.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/kgbird.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/kim1.lay mame-0.251+dfsg.1/src/mame/layout/kim1.lay --- mame-0.250+dfsg.1/src/mame/layout/kim1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/kim1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/kingdrby.lay mame-0.251+dfsg.1/src/mame/layout/kingdrby.lay --- mame-0.250+dfsg.1/src/mame/layout/kingdrby.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/kingdrby.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/kingpin.lay mame-0.251+dfsg.1/src/mame/layout/kingpin.lay --- mame-0.250+dfsg.1/src/mame/layout/kingpin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/kingpin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/konamigt.lay mame-0.251+dfsg.1/src/mame/layout/konamigt.lay --- mame-0.250+dfsg.1/src/mame/layout/konamigt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/konamigt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/kungfur.lay mame-0.251+dfsg.1/src/mame/layout/kungfur.lay --- mame-0.250+dfsg.1/src/mame/layout/kungfur.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/kungfur.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/lafootb.lay mame-0.251+dfsg.1/src/mame/layout/lafootb.lay --- mame-0.250+dfsg.1/src/mame/layout/lafootb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/lafootb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/lagunar.lay mame-0.251+dfsg.1/src/mame/layout/lagunar.lay --- mame-0.250+dfsg.1/src/mame/layout/lagunar.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/lagunar.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/lazercmd.lay mame-0.251+dfsg.1/src/mame/layout/lazercmd.lay --- mame-0.250+dfsg.1/src/mame/layout/lazercmd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/lazercmd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/lbeach.lay mame-0.251+dfsg.1/src/mame/layout/lbeach.lay --- mame-0.250+dfsg.1/src/mame/layout/lbeach.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/lbeach.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/lc80.lay mame-0.251+dfsg.1/src/mame/layout/lc80.lay --- mame-0.250+dfsg.1/src/mame/layout/lc80.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/lc80.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/lchicken.lay mame-0.251+dfsg.1/src/mame/layout/lchicken.lay --- mame-0.250+dfsg.1/src/mame/layout/lchicken.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/lchicken.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/lckydraw.lay mame-0.251+dfsg.1/src/mame/layout/lckydraw.lay --- mame-0.250+dfsg.1/src/mame/layout/lckydraw.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/lckydraw.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/leboom.lay mame-0.251+dfsg.1/src/mame/layout/leboom.lay --- mame-0.250+dfsg.1/src/mame/layout/leboom.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/leboom.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/lependu.lay mame-0.251+dfsg.1/src/mame/layout/lependu.lay --- mame-0.250+dfsg.1/src/mame/layout/lependu.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/lependu.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/lespendu.lay mame-0.251+dfsg.1/src/mame/layout/lespendu.lay --- mame-0.250+dfsg.1/src/mame/layout/lespendu.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/lespendu.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/lightfgt.lay mame-0.251+dfsg.1/src/mame/layout/lightfgt.lay --- mame-0.250+dfsg.1/src/mame/layout/lightfgt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/lightfgt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/liveafb.lay mame-0.251+dfsg.1/src/mame/layout/liveafb.lay --- mame-0.250+dfsg.1/src/mame/layout/liveafb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/liveafb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/lk3000.lay mame-0.251+dfsg.1/src/mame/layout/lk3000.lay --- mame-0.250+dfsg.1/src/mame/layout/lk3000.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/lk3000.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/llc1.lay mame-0.251+dfsg.1/src/mame/layout/llc1.lay --- mame-0.250+dfsg.1/src/mame/layout/llc1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/llc1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/locoloota.lay mame-0.251+dfsg.1/src/mame/layout/locoloota.lay --- mame-0.250+dfsg.1/src/mame/layout/locoloota.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/locoloota.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/lostreas.lay mame-0.251+dfsg.1/src/mame/layout/lostreas.lay --- mame-0.250+dfsg.1/src/mame/layout/lostreas.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/lostreas.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ltcasinn.lay mame-0.251+dfsg.1/src/mame/layout/ltcasinn.lay --- mame-0.250+dfsg.1/src/mame/layout/ltcasinn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ltcasinn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/luckgrln.lay mame-0.251+dfsg.1/src/mame/layout/luckgrln.lay --- mame-0.250+dfsg.1/src/mame/layout/luckgrln.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/luckgrln.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/lucky74.lay mame-0.251+dfsg.1/src/mame/layout/lucky74.lay --- mame-0.250+dfsg.1/src/mame/layout/lucky74.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/lucky74.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/lucky8.lay mame-0.251+dfsg.1/src/mame/layout/lucky8.lay --- mame-0.250+dfsg.1/src/mame/layout/lucky8.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/lucky8.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/lucky8p1.lay mame-0.251+dfsg.1/src/mame/layout/lucky8p1.lay --- mame-0.250+dfsg.1/src/mame/layout/lucky8p1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/lucky8p1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/luckybal.lay mame-0.251+dfsg.1/src/mame/layout/luckybal.lay --- mame-0.250+dfsg.1/src/mame/layout/luckybal.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/luckybal.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/luckyrlt.lay mame-0.251+dfsg.1/src/mame/layout/luckyrlt.lay --- mame-0.250+dfsg.1/src/mame/layout/luckyrlt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/luckyrlt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/lynx.lay mame-0.251+dfsg.1/src/mame/layout/lynx.lay --- mame-0.250+dfsg.1/src/mame/layout/lynx.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/lynx.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1albsqp.lay mame-0.251+dfsg.1/src/mame/layout/m1albsqp.lay --- mame-0.250+dfsg.1/src/mame/layout/m1albsqp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1albsqp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -258,7 +258,7 @@ - + @@ -382,7 +382,7 @@ - + @@ -714,7 +714,7 @@ - + @@ -994,7 +994,7 @@ - + @@ -1054,7 +1054,7 @@ - + @@ -1074,7 +1074,7 @@ - + @@ -1114,7 +1114,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1154,7 +1154,7 @@ - + @@ -1174,7 +1174,7 @@ - + @@ -1214,7 +1214,7 @@ - + @@ -1234,7 +1234,7 @@ - + @@ -1374,7 +1374,7 @@ - + @@ -1394,7 +1394,7 @@ - + @@ -1414,7 +1414,7 @@ - + @@ -1434,7 +1434,7 @@ - + @@ -1454,7 +1454,7 @@ - + @@ -1474,7 +1474,7 @@ - + @@ -1494,7 +1494,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1apollo2.lay mame-0.251+dfsg.1/src/mame/layout/m1apollo2.lay --- mame-0.250+dfsg.1/src/mame/layout/m1apollo2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1apollo2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -990,7 +990,7 @@ - + @@ -1394,7 +1394,7 @@ - + @@ -1414,7 +1414,7 @@ - + @@ -1434,7 +1434,7 @@ - + @@ -1454,7 +1454,7 @@ - + @@ -1474,7 +1474,7 @@ - + @@ -1542,7 +1542,7 @@ - + @@ -1850,7 +1850,7 @@ - + @@ -1910,7 +1910,7 @@ - + @@ -1930,7 +1930,7 @@ - + @@ -1950,7 +1950,7 @@ - + @@ -1970,7 +1970,7 @@ - + @@ -1990,7 +1990,7 @@ - + @@ -2010,7 +2010,7 @@ - + @@ -2190,7 +2190,7 @@ - + @@ -2210,7 +2210,7 @@ - + @@ -2230,7 +2230,7 @@ - + @@ -2250,7 +2250,7 @@ - + @@ -2270,7 +2270,7 @@ - + @@ -2650,7 +2650,7 @@ - + @@ -2670,7 +2670,7 @@ - + @@ -2690,7 +2690,7 @@ - + @@ -2710,7 +2710,7 @@ - + @@ -2730,7 +2730,7 @@ - + @@ -2750,7 +2750,7 @@ - + @@ -2770,7 +2770,7 @@ - + @@ -2790,7 +2790,7 @@ - + @@ -2810,7 +2810,7 @@ - + @@ -3174,7 +3174,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1bargnc.lay mame-0.251+dfsg.1/src/mame/layout/m1bargnc.lay --- mame-0.250+dfsg.1/src/mame/layout/m1bargnc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1bargnc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -246,7 +246,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -802,7 +802,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -842,7 +842,7 @@ - + @@ -862,7 +862,7 @@ - + @@ -1314,7 +1314,7 @@ - + @@ -1620,7 +1620,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1bghou.lay mame-0.251+dfsg.1/src/mame/layout/m1bghou.lay --- mame-0.250+dfsg.1/src/mame/layout/m1bghou.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1bghou.lay 2022-12-29 14:20:09.000000000 +0000 @@ -70,7 +70,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -1866,7 +1866,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1bigdel.lay mame-0.251+dfsg.1/src/mame/layout/m1bigdel.lay --- mame-0.250+dfsg.1/src/mame/layout/m1bigdel.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1bigdel.lay 2022-12-29 14:20:09.000000000 +0000 @@ -426,7 +426,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -1322,7 +1322,7 @@ - + @@ -1810,7 +1810,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1calypsa.lay mame-0.251+dfsg.1/src/mame/layout/m1calypsa.lay --- mame-0.250+dfsg.1/src/mame/layout/m1calypsa.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1calypsa.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -1230,7 +1230,7 @@ - + @@ -1250,7 +1250,7 @@ - + @@ -1270,7 +1270,7 @@ - + @@ -1330,7 +1330,7 @@ - + @@ -1350,7 +1350,7 @@ - + @@ -1390,7 +1390,7 @@ - + @@ -1410,7 +1410,7 @@ - + @@ -2722,7 +2722,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1casclb.lay mame-0.251+dfsg.1/src/mame/layout/m1casclb.lay --- mame-0.250+dfsg.1/src/mame/layout/m1casclb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1casclb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -498,7 +498,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -803,19 +803,19 @@ - + - + - + @@ -839,7 +839,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1casroy1.lay mame-0.251+dfsg.1/src/mame/layout/m1casroy1.lay --- mame-0.250+dfsg.1/src/mame/layout/m1casroy1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1casroy1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -934,7 +934,7 @@ - + @@ -1321,43 +1321,43 @@ - + - + - + - + - + - + - + @@ -1375,7 +1375,7 @@ - + @@ -1463,7 +1463,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1chain.lay mame-0.251+dfsg.1/src/mame/layout/m1chain.lay --- mame-0.250+dfsg.1/src/mame/layout/m1chain.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1chain.lay 2022-12-29 14:20:09.000000000 +0000 @@ -82,7 +82,7 @@ - + @@ -1418,7 +1418,7 @@ - + @@ -1438,7 +1438,7 @@ - + @@ -1458,7 +1458,7 @@ - + @@ -1478,7 +1478,7 @@ - + @@ -1498,7 +1498,7 @@ - + @@ -1518,7 +1518,7 @@ - + @@ -1734,7 +1734,7 @@ - + @@ -1902,7 +1902,7 @@ - + @@ -1920,31 +1920,31 @@ - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1cik51o.lay mame-0.251+dfsg.1/src/mame/layout/m1cik51o.lay --- mame-0.250+dfsg.1/src/mame/layout/m1cik51o.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1cik51o.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1170,7 +1170,7 @@ - + @@ -1190,7 +1190,7 @@ - + @@ -1210,7 +1210,7 @@ - + @@ -1230,7 +1230,7 @@ - + @@ -1250,7 +1250,7 @@ - + @@ -1270,7 +1270,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -1310,7 +1310,7 @@ - + @@ -1330,7 +1330,7 @@ - + @@ -1350,7 +1350,7 @@ - + @@ -1370,7 +1370,7 @@ - + @@ -1390,7 +1390,7 @@ - + @@ -1410,7 +1410,7 @@ - + @@ -1430,7 +1430,7 @@ - + @@ -1450,7 +1450,7 @@ - + @@ -1470,7 +1470,7 @@ - + @@ -1490,7 +1490,7 @@ - + @@ -1510,7 +1510,7 @@ - + @@ -1530,7 +1530,7 @@ - + @@ -1550,7 +1550,7 @@ - + @@ -1570,7 +1570,7 @@ - + @@ -1590,7 +1590,7 @@ - + @@ -2198,7 +2198,7 @@ - + @@ -2274,7 +2274,7 @@ - + @@ -2294,7 +2294,7 @@ - + @@ -2314,7 +2314,7 @@ - + @@ -2334,7 +2334,7 @@ - + @@ -2354,7 +2354,7 @@ - + @@ -2374,7 +2374,7 @@ - + @@ -2746,7 +2746,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1clbfvr.lay mame-0.251+dfsg.1/src/mame/layout/m1clbfvr.lay --- mame-0.250+dfsg.1/src/mame/layout/m1clbfvr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1clbfvr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -854,7 +854,7 @@ - + @@ -874,7 +874,7 @@ - + @@ -894,7 +894,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -978,7 +978,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1018,7 +1018,7 @@ - + @@ -1082,7 +1082,7 @@ - + @@ -2562,7 +2562,7 @@ - + @@ -2586,7 +2586,7 @@ - + @@ -2610,7 +2610,7 @@ - + @@ -2634,7 +2634,7 @@ - + @@ -2654,7 +2654,7 @@ - + @@ -2678,7 +2678,7 @@ - + @@ -2702,7 +2702,7 @@ - + @@ -2726,7 +2726,7 @@ - + @@ -2750,7 +2750,7 @@ - + @@ -2774,7 +2774,7 @@ - + @@ -3734,7 +3734,7 @@ - + @@ -3846,91 +3846,91 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3948,7 +3948,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1cluecb1.lay mame-0.251+dfsg.1/src/mame/layout/m1cluecb1.lay --- mame-0.250+dfsg.1/src/mame/layout/m1cluecb1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1cluecb1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -86,7 +86,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1086,7 +1086,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1166,7 +1166,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1206,7 +1206,7 @@ - + @@ -1226,7 +1226,7 @@ - + @@ -1266,7 +1266,7 @@ - + @@ -1326,7 +1326,7 @@ - + @@ -1346,7 +1346,7 @@ - + @@ -1366,7 +1366,7 @@ - + @@ -1386,7 +1386,7 @@ - + @@ -1406,7 +1406,7 @@ - + @@ -1426,7 +1426,7 @@ - + @@ -1446,7 +1446,7 @@ - + @@ -1466,7 +1466,7 @@ - + @@ -1546,7 +1546,7 @@ - + @@ -1566,7 +1566,7 @@ - + @@ -1586,7 +1586,7 @@ - + @@ -1606,7 +1606,7 @@ - + @@ -1626,7 +1626,7 @@ - + @@ -1646,7 +1646,7 @@ - + @@ -1666,7 +1666,7 @@ - + @@ -1686,7 +1686,7 @@ - + @@ -2258,7 +2258,7 @@ - + @@ -2427,37 +2427,37 @@ - + - + - + - + - + - + @@ -2505,91 +2505,91 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1cluedo4.lay mame-0.251+dfsg.1/src/mame/layout/m1cluedo4.lay --- mame-0.250+dfsg.1/src/mame/layout/m1cluedo4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1cluedo4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -94,7 +94,7 @@ - + @@ -182,7 +182,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -398,7 +398,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -682,7 +682,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -970,7 +970,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1102,7 +1102,7 @@ - + @@ -2018,7 +2018,7 @@ - + @@ -2194,7 +2194,7 @@ - + @@ -2238,7 +2238,7 @@ - + @@ -2532,25 +2532,25 @@ - + - + - + - + @@ -2588,7 +2588,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1cluessf.lay mame-0.251+dfsg.1/src/mame/layout/m1cluessf.lay --- mame-0.250+dfsg.1/src/mame/layout/m1cluessf.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1cluessf.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1342,7 +1342,7 @@ - + @@ -1362,7 +1362,7 @@ - + @@ -1502,7 +1502,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -1542,7 +1542,7 @@ - + @@ -1562,7 +1562,7 @@ - + @@ -1582,7 +1582,7 @@ - + @@ -1622,7 +1622,7 @@ - + @@ -1642,7 +1642,7 @@ - + @@ -1662,7 +1662,7 @@ - + @@ -1842,7 +1842,7 @@ - + @@ -1862,7 +1862,7 @@ - + @@ -1882,7 +1882,7 @@ - + @@ -1902,7 +1902,7 @@ - + @@ -1922,7 +1922,7 @@ - + @@ -1942,7 +1942,7 @@ - + @@ -1962,7 +1962,7 @@ - + @@ -1982,7 +1982,7 @@ - + @@ -2002,7 +2002,7 @@ - + @@ -2022,7 +2022,7 @@ - + @@ -2042,7 +2042,7 @@ - + @@ -2062,7 +2062,7 @@ - + @@ -2082,7 +2082,7 @@ - + @@ -2102,7 +2102,7 @@ - + @@ -2122,7 +2122,7 @@ - + @@ -2142,7 +2142,7 @@ - + @@ -2162,7 +2162,7 @@ - + @@ -2182,7 +2182,7 @@ - + @@ -2202,7 +2202,7 @@ - + @@ -2222,7 +2222,7 @@ - + @@ -2242,7 +2242,7 @@ - + @@ -2262,7 +2262,7 @@ - + @@ -2662,7 +2662,7 @@ - + @@ -3634,7 +3634,7 @@ - + @@ -3654,7 +3654,7 @@ - + @@ -3674,7 +3674,7 @@ - + @@ -3694,7 +3694,7 @@ - + @@ -3714,7 +3714,7 @@ - + @@ -3734,7 +3734,7 @@ - + @@ -3754,7 +3754,7 @@ - + @@ -3938,7 +3938,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1coro21n.lay mame-0.251+dfsg.1/src/mame/layout/m1coro21n.lay --- mame-0.250+dfsg.1/src/mame/layout/m1coro21n.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1coro21n.lay 2022-12-29 14:20:09.000000000 +0000 @@ -290,7 +290,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -1054,7 +1054,7 @@ - + @@ -1114,7 +1114,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1666,7 +1666,7 @@ - + @@ -1876,13 +1876,13 @@ - + - + @@ -1894,25 +1894,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1cororrk.lay mame-0.251+dfsg.1/src/mame/layout/m1cororrk.lay --- mame-0.250+dfsg.1/src/mame/layout/m1cororrk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1cororrk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -794,7 +794,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -962,7 +962,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1366,7 +1366,7 @@ - + @@ -1750,7 +1750,7 @@ - + @@ -1770,7 +1770,7 @@ - + @@ -1790,7 +1790,7 @@ - + @@ -1810,7 +1810,7 @@ - + @@ -1978,7 +1978,7 @@ - + @@ -2146,7 +2146,7 @@ - + @@ -2258,7 +2258,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1dkong91n.lay mame-0.251+dfsg.1/src/mame/layout/m1dkong91n.lay --- mame-0.250+dfsg.1/src/mame/layout/m1dkong91n.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1dkong91n.lay 2022-12-29 14:20:09.000000000 +0000 @@ -70,7 +70,7 @@ - + @@ -422,7 +422,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -674,7 +674,7 @@ - + @@ -694,7 +694,7 @@ - + @@ -794,7 +794,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -854,7 +854,7 @@ - + @@ -922,7 +922,7 @@ - + @@ -982,7 +982,7 @@ - + @@ -1002,7 +1002,7 @@ - + @@ -1022,7 +1022,7 @@ - + @@ -1042,7 +1042,7 @@ - + @@ -1062,7 +1062,7 @@ - + @@ -1082,7 +1082,7 @@ - + @@ -1102,7 +1102,7 @@ - + @@ -1122,7 +1122,7 @@ - + @@ -1142,7 +1142,7 @@ - + @@ -1162,7 +1162,7 @@ - + @@ -1182,7 +1182,7 @@ - + @@ -1202,7 +1202,7 @@ - + @@ -1222,7 +1222,7 @@ - + @@ -1242,7 +1242,7 @@ - + @@ -1262,7 +1262,7 @@ - + @@ -1282,7 +1282,7 @@ - + @@ -1302,7 +1302,7 @@ - + @@ -1322,7 +1322,7 @@ - + @@ -1342,7 +1342,7 @@ - + @@ -1362,7 +1362,7 @@ - + @@ -1382,7 +1382,7 @@ - + @@ -1402,7 +1402,7 @@ - + @@ -1654,7 +1654,7 @@ - + @@ -1678,7 +1678,7 @@ - + @@ -1702,7 +1702,7 @@ - + @@ -1842,7 +1842,7 @@ - + @@ -2046,7 +2046,7 @@ - + @@ -2070,7 +2070,7 @@ - + @@ -2094,7 +2094,7 @@ - + @@ -2118,7 +2118,7 @@ - + @@ -2162,7 +2162,7 @@ - + @@ -2302,7 +2302,7 @@ - + @@ -2582,7 +2582,7 @@ - + @@ -2650,7 +2650,7 @@ - + @@ -2694,7 +2694,7 @@ - + @@ -2990,7 +2990,7 @@ - + @@ -3090,7 +3090,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1dxmono51o.lay mame-0.251+dfsg.1/src/mame/layout/m1dxmono51o.lay --- mame-0.250+dfsg.1/src/mame/layout/m1dxmono51o.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1dxmono51o.lay 2022-12-29 14:20:09.000000000 +0000 @@ -162,7 +162,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -238,7 +238,7 @@ - + @@ -262,7 +262,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -338,7 +338,7 @@ - + @@ -362,7 +362,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -438,7 +438,7 @@ - + @@ -462,7 +462,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -534,7 +534,7 @@ - + @@ -562,7 +562,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -642,7 +642,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -758,7 +758,7 @@ - + @@ -958,7 +958,7 @@ - + @@ -978,7 +978,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1018,7 +1018,7 @@ - + @@ -1038,7 +1038,7 @@ - + @@ -1058,7 +1058,7 @@ - + @@ -1082,7 +1082,7 @@ - + @@ -1406,7 +1406,7 @@ - + @@ -1434,7 +1434,7 @@ - + @@ -1482,7 +1482,7 @@ - + @@ -1810,7 +1810,7 @@ - + @@ -2045,15 +2045,15 @@ - + - + - + @@ -2087,7 +2087,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1eastndl.lay mame-0.251+dfsg.1/src/mame/layout/m1eastndl.lay --- mame-0.250+dfsg.1/src/mame/layout/m1eastndl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1eastndl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -274,7 +274,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -682,7 +682,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1154,7 +1154,7 @@ - + @@ -1174,7 +1174,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1214,7 +1214,7 @@ - + @@ -1234,7 +1234,7 @@ - + @@ -1294,7 +1294,7 @@ - + @@ -1314,7 +1314,7 @@ - + @@ -1354,7 +1354,7 @@ - + @@ -1374,7 +1374,7 @@ - + @@ -1394,7 +1394,7 @@ - + @@ -1414,7 +1414,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -1542,7 +1542,7 @@ - + @@ -2002,7 +2002,7 @@ - + @@ -2138,7 +2138,7 @@ - + @@ -2432,13 +2432,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1eastqv3.lay mame-0.251+dfsg.1/src/mame/layout/m1eastqv3.lay --- mame-0.250+dfsg.1/src/mame/layout/m1eastqv3.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1eastqv3.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -634,7 +634,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -1562,7 +1562,7 @@ - + @@ -1730,7 +1730,7 @@ - + @@ -1874,7 +1874,7 @@ - + @@ -1894,7 +1894,7 @@ - + @@ -1914,7 +1914,7 @@ - + @@ -1934,7 +1934,7 @@ - + @@ -1954,7 +1954,7 @@ - + @@ -1974,7 +1974,7 @@ - + @@ -1994,7 +1994,7 @@ - + @@ -2014,7 +2014,7 @@ - + @@ -2034,7 +2034,7 @@ - + @@ -2054,7 +2054,7 @@ - + @@ -2074,7 +2074,7 @@ - + @@ -2470,7 +2470,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1fantfbb.lay mame-0.251+dfsg.1/src/mame/layout/m1fantfbb.lay --- mame-0.250+dfsg.1/src/mame/layout/m1fantfbb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1fantfbb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -630,7 +630,7 @@ - + @@ -774,7 +774,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -954,7 +954,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -994,7 +994,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1034,7 +1034,7 @@ - + @@ -1174,7 +1174,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1214,7 +1214,7 @@ - + @@ -1234,7 +1234,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -2126,7 +2126,7 @@ - + @@ -2146,7 +2146,7 @@ - + @@ -2166,7 +2166,7 @@ - + @@ -2186,7 +2186,7 @@ - + @@ -2206,7 +2206,7 @@ - + @@ -2246,7 +2246,7 @@ - + @@ -2266,7 +2266,7 @@ - + @@ -2306,7 +2306,7 @@ - + @@ -2542,7 +2542,7 @@ - + @@ -2686,7 +2686,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1fightb.lay mame-0.251+dfsg.1/src/mame/layout/m1fightb.lay --- mame-0.250+dfsg.1/src/mame/layout/m1fightb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1fightb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -426,7 +426,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -1446,7 +1446,7 @@ - + @@ -1466,7 +1466,7 @@ - + @@ -1486,7 +1486,7 @@ - + @@ -1506,7 +1506,7 @@ - + @@ -1526,7 +1526,7 @@ - + @@ -1546,7 +1546,7 @@ - + @@ -1566,7 +1566,7 @@ - + @@ -1586,7 +1586,7 @@ - + @@ -1606,7 +1606,7 @@ - + @@ -1626,7 +1626,7 @@ - + @@ -1646,7 +1646,7 @@ - + @@ -1666,7 +1666,7 @@ - + @@ -1686,7 +1686,7 @@ - + @@ -1706,7 +1706,7 @@ - + @@ -1726,7 +1726,7 @@ - + @@ -1746,7 +1746,7 @@ - + @@ -1766,7 +1766,7 @@ - + @@ -1786,7 +1786,7 @@ - + @@ -1806,7 +1806,7 @@ - + @@ -1826,7 +1826,7 @@ - + @@ -1866,7 +1866,7 @@ - + @@ -1886,7 +1886,7 @@ - + @@ -1906,7 +1906,7 @@ - + @@ -1926,7 +1926,7 @@ - + @@ -1946,7 +1946,7 @@ - + @@ -1966,7 +1966,7 @@ - + @@ -2006,7 +2006,7 @@ - + @@ -2026,7 +2026,7 @@ - + @@ -2046,7 +2046,7 @@ - + @@ -2066,7 +2066,7 @@ - + @@ -2086,7 +2086,7 @@ - + @@ -2206,7 +2206,7 @@ - + @@ -2226,7 +2226,7 @@ - + @@ -2246,7 +2246,7 @@ - + @@ -2266,7 +2266,7 @@ - + @@ -2286,7 +2286,7 @@ - + @@ -2306,7 +2306,7 @@ - + @@ -2326,7 +2326,7 @@ - + @@ -2346,7 +2346,7 @@ - + @@ -2366,7 +2366,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1frexplc.lay mame-0.251+dfsg.1/src/mame/layout/m1frexplc.lay --- mame-0.250+dfsg.1/src/mame/layout/m1frexplc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1frexplc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -774,7 +774,7 @@ - + @@ -794,7 +794,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -834,7 +834,7 @@ - + @@ -854,7 +854,7 @@ - + @@ -874,7 +874,7 @@ - + @@ -1614,7 +1614,7 @@ - + @@ -1634,7 +1634,7 @@ - + @@ -1654,7 +1654,7 @@ - + @@ -3106,7 +3106,7 @@ - + @@ -3126,7 +3126,7 @@ - + @@ -3146,7 +3146,7 @@ - + @@ -3166,7 +3166,7 @@ - + @@ -3186,7 +3186,7 @@ - + @@ -3206,7 +3206,7 @@ - + @@ -3226,7 +3226,7 @@ - + @@ -3246,7 +3246,7 @@ - + @@ -3266,7 +3266,7 @@ - + @@ -3286,7 +3286,7 @@ - + @@ -3306,7 +3306,7 @@ - + @@ -3346,7 +3346,7 @@ - + @@ -3834,7 +3834,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1gladg.lay mame-0.251+dfsg.1/src/mame/layout/m1gladg.lay --- mame-0.250+dfsg.1/src/mame/layout/m1gladg.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1gladg.lay 2022-12-29 14:20:09.000000000 +0000 @@ -182,7 +182,7 @@ - + @@ -222,7 +222,7 @@ - + @@ -262,7 +262,7 @@ - + @@ -302,7 +302,7 @@ - + @@ -342,7 +342,7 @@ - + @@ -382,7 +382,7 @@ - + @@ -422,7 +422,7 @@ - + @@ -442,7 +442,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -638,7 +638,7 @@ - + @@ -658,7 +658,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -698,7 +698,7 @@ - + @@ -718,7 +718,7 @@ - + @@ -1286,7 +1286,7 @@ - + @@ -1366,7 +1366,7 @@ - + @@ -1426,7 +1426,7 @@ - + @@ -1486,7 +1486,7 @@ - + @@ -1566,7 +1566,7 @@ - + @@ -1646,7 +1646,7 @@ - + @@ -1766,7 +1766,7 @@ - + @@ -1826,7 +1826,7 @@ - + @@ -1906,7 +1906,7 @@ - + @@ -2026,7 +2026,7 @@ - + @@ -2106,7 +2106,7 @@ - + @@ -2146,7 +2146,7 @@ - + @@ -2466,7 +2466,7 @@ - + @@ -2486,7 +2486,7 @@ - + @@ -2506,7 +2506,7 @@ - + @@ -2526,7 +2526,7 @@ - + @@ -2546,7 +2546,7 @@ - + @@ -2566,7 +2566,7 @@ - + @@ -2726,7 +2726,7 @@ - + @@ -3106,7 +3106,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1grescb.lay mame-0.251+dfsg.1/src/mame/layout/m1grescb.lay --- mame-0.250+dfsg.1/src/mame/layout/m1grescb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1grescb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -70,7 +70,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -1190,7 +1190,7 @@ - + @@ -1210,7 +1210,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1594,7 +1594,7 @@ - + @@ -1614,7 +1614,7 @@ - + @@ -1634,7 +1634,7 @@ - + @@ -1654,7 +1654,7 @@ - + @@ -1674,7 +1674,7 @@ - + @@ -1714,7 +1714,7 @@ - + @@ -2114,7 +2114,7 @@ - + @@ -2428,7 +2428,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1guvnor.lay mame-0.251+dfsg.1/src/mame/layout/m1guvnor.lay --- mame-0.250+dfsg.1/src/mame/layout/m1guvnor.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1guvnor.lay 2022-12-29 14:20:09.000000000 +0000 @@ -214,7 +214,7 @@ - + @@ -234,7 +234,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -594,7 +594,7 @@ - + @@ -614,7 +614,7 @@ - + @@ -634,7 +634,7 @@ - + @@ -654,7 +654,7 @@ - + @@ -674,7 +674,7 @@ - + @@ -694,7 +694,7 @@ - + @@ -714,7 +714,7 @@ - + @@ -734,7 +734,7 @@ - + @@ -1098,7 +1098,7 @@ - + @@ -1461,25 +1461,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1hotpoth.lay mame-0.251+dfsg.1/src/mame/layout/m1hotpoth.lay --- mame-0.250+dfsg.1/src/mame/layout/m1hotpoth.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1hotpoth.lay 2022-12-29 14:20:09.000000000 +0000 @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -1326,7 +1326,7 @@ - + @@ -1346,7 +1346,7 @@ - + @@ -1366,7 +1366,7 @@ - + @@ -1386,7 +1386,7 @@ - + @@ -1406,7 +1406,7 @@ - + @@ -1426,7 +1426,7 @@ - + @@ -1446,7 +1446,7 @@ - + @@ -1466,7 +1466,7 @@ - + @@ -1486,7 +1486,7 @@ - + @@ -1906,7 +1906,7 @@ - + @@ -1946,7 +1946,7 @@ - + @@ -2026,7 +2026,7 @@ - + @@ -2334,7 +2334,7 @@ - + @@ -2538,7 +2538,7 @@ - + @@ -2658,7 +2658,7 @@ - + @@ -2758,7 +2758,7 @@ - + @@ -2938,7 +2938,7 @@ - + @@ -3018,7 +3018,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1htclb.lay mame-0.251+dfsg.1/src/mame/layout/m1htclb.lay --- mame-0.250+dfsg.1/src/mame/layout/m1htclb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1htclb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -1470,7 +1470,7 @@ - + @@ -1618,7 +1618,7 @@ - + @@ -1672,25 +1672,25 @@ - + - + - + - + @@ -1702,13 +1702,13 @@ - + - + @@ -1720,61 +1720,61 @@ - + - + - + - + - + - + - + - + - + - + @@ -1790,43 +1790,43 @@ - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1imclb.lay mame-0.251+dfsg.1/src/mame/layout/m1imclb.lay --- mame-0.250+dfsg.1/src/mame/layout/m1imclb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1imclb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -494,7 +494,7 @@ - + @@ -514,7 +514,7 @@ - + @@ -534,7 +534,7 @@ - + @@ -554,7 +554,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -594,7 +594,7 @@ - + @@ -614,7 +614,7 @@ - + @@ -634,7 +634,7 @@ - + @@ -654,7 +654,7 @@ - + @@ -674,7 +674,7 @@ - + @@ -694,7 +694,7 @@ - + @@ -714,7 +714,7 @@ - + @@ -1542,7 +1542,7 @@ - + @@ -1562,7 +1562,7 @@ - + @@ -1582,7 +1582,7 @@ - + @@ -1666,7 +1666,7 @@ - + @@ -1686,7 +1686,7 @@ - + @@ -1706,7 +1706,7 @@ - + @@ -1726,7 +1726,7 @@ - + @@ -1926,7 +1926,7 @@ - + @@ -2065,61 +2065,61 @@ - + - + - + - + - + - + - + - + - + - + @@ -2137,37 +2137,37 @@ - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1infern.lay mame-0.251+dfsg.1/src/mame/layout/m1infern.lay --- mame-0.250+dfsg.1/src/mame/layout/m1infern.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1infern.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -1282,7 +1282,7 @@ - + @@ -1342,7 +1342,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -1442,7 +1442,7 @@ - + @@ -1462,7 +1462,7 @@ - + @@ -1482,7 +1482,7 @@ - + @@ -1502,7 +1502,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -1542,7 +1542,7 @@ - + @@ -1562,7 +1562,7 @@ - + @@ -1702,7 +1702,7 @@ - + @@ -2062,7 +2062,7 @@ - + @@ -2082,7 +2082,7 @@ - + @@ -2102,7 +2102,7 @@ - + @@ -2122,7 +2122,7 @@ - + @@ -2142,7 +2142,7 @@ - + @@ -2162,7 +2162,7 @@ - + @@ -2202,7 +2202,7 @@ - + @@ -2222,7 +2222,7 @@ - + @@ -2262,7 +2262,7 @@ - + @@ -2282,7 +2282,7 @@ - + @@ -2302,7 +2302,7 @@ - + @@ -2322,7 +2322,7 @@ - + @@ -2342,7 +2342,7 @@ - + @@ -2362,7 +2362,7 @@ - + @@ -2706,7 +2706,7 @@ - + @@ -2746,7 +2746,7 @@ - + @@ -2766,7 +2766,7 @@ - + @@ -2786,7 +2786,7 @@ - + @@ -2806,7 +2806,7 @@ - + @@ -2846,7 +2846,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1inwinc.lay mame-0.251+dfsg.1/src/mame/layout/m1inwinc.lay --- mame-0.250+dfsg.1/src/mame/layout/m1inwinc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1inwinc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -130,7 +130,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -906,7 +906,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1086,7 +1086,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1206,7 +1206,7 @@ - + @@ -1226,7 +1226,7 @@ - + @@ -1246,7 +1246,7 @@ - + @@ -1266,7 +1266,7 @@ - + @@ -1286,7 +1286,7 @@ - + @@ -1470,7 +1470,7 @@ - + @@ -1630,7 +1630,7 @@ - + @@ -1786,7 +1786,7 @@ - + @@ -1942,7 +1942,7 @@ - + @@ -2102,7 +2102,7 @@ - + @@ -2606,7 +2606,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1itjobc.lay mame-0.251+dfsg.1/src/mame/layout/m1itjobc.lay --- mame-0.250+dfsg.1/src/mame/layout/m1itjobc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1itjobc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -1498,7 +1498,7 @@ - + @@ -1518,7 +1518,7 @@ - + @@ -1538,7 +1538,7 @@ - + @@ -1558,7 +1558,7 @@ - + @@ -1578,7 +1578,7 @@ - + @@ -1598,7 +1598,7 @@ - + @@ -1618,7 +1618,7 @@ - + @@ -1638,7 +1638,7 @@ - + @@ -1658,7 +1658,7 @@ - + @@ -2586,7 +2586,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1itskob.lay mame-0.251+dfsg.1/src/mame/layout/m1itskob.lay --- mame-0.250+dfsg.1/src/mame/layout/m1itskob.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1itskob.lay 2022-12-29 14:20:09.000000000 +0000 @@ -170,7 +170,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -418,7 +418,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -598,7 +598,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -730,7 +730,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -1130,7 +1130,7 @@ - + @@ -1150,7 +1150,7 @@ - + @@ -1210,7 +1210,7 @@ - + @@ -1250,7 +1250,7 @@ - + @@ -1270,7 +1270,7 @@ - + @@ -1330,7 +1330,7 @@ - + @@ -1370,7 +1370,7 @@ - + @@ -1550,7 +1550,7 @@ - + @@ -1778,7 +1778,7 @@ - + @@ -1798,7 +1798,7 @@ - + @@ -1818,7 +1818,7 @@ - + @@ -1838,7 +1838,7 @@ - + @@ -1858,7 +1858,7 @@ - + @@ -1878,7 +1878,7 @@ - + @@ -1898,7 +1898,7 @@ - + @@ -1918,7 +1918,7 @@ - + @@ -1938,7 +1938,7 @@ - + @@ -1958,7 +1958,7 @@ - + @@ -1978,7 +1978,7 @@ - + @@ -1998,7 +1998,7 @@ - + @@ -2018,7 +2018,7 @@ - + @@ -2038,7 +2038,7 @@ - + @@ -2058,7 +2058,7 @@ - + @@ -2078,7 +2078,7 @@ - + @@ -2098,7 +2098,7 @@ - + @@ -2118,7 +2118,7 @@ - + @@ -2138,7 +2138,7 @@ - + @@ -2158,7 +2158,7 @@ - + @@ -3050,7 +3050,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1jpmult.lay mame-0.251+dfsg.1/src/mame/layout/m1jpmult.lay --- mame-0.250+dfsg.1/src/mame/layout/m1jpmult.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1jpmult.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -734,7 +734,7 @@ - + @@ -992,7 +992,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1lucknon.lay mame-0.251+dfsg.1/src/mame/layout/m1lucknon.lay --- mame-0.250+dfsg.1/src/mame/layout/m1lucknon.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1lucknon.lay 2022-12-29 14:20:09.000000000 +0000 @@ -146,11 +146,11 @@ - + - + @@ -174,7 +174,7 @@ - + @@ -202,11 +202,11 @@ - + - + @@ -230,7 +230,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -822,7 +822,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1luxorb.lay mame-0.251+dfsg.1/src/mame/layout/m1luxorb.lay --- mame-0.250+dfsg.1/src/mame/layout/m1luxorb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1luxorb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -502,7 +502,7 @@ - + @@ -522,7 +522,7 @@ - + @@ -638,7 +638,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -794,7 +794,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -1042,7 +1042,7 @@ - + @@ -1062,7 +1062,7 @@ - + @@ -2006,7 +2006,7 @@ - + @@ -2026,7 +2026,7 @@ - + @@ -2046,7 +2046,7 @@ - + @@ -2066,7 +2066,7 @@ - + @@ -2106,7 +2106,7 @@ - + @@ -2126,7 +2126,7 @@ - + @@ -2570,7 +2570,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1manhat.lay mame-0.251+dfsg.1/src/mame/layout/m1manhat.lay --- mame-0.250+dfsg.1/src/mame/layout/m1manhat.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1manhat.lay 2022-12-29 14:20:09.000000000 +0000 @@ -302,7 +302,7 @@ - + @@ -942,7 +942,7 @@ - + @@ -962,7 +962,7 @@ - + @@ -982,7 +982,7 @@ - + @@ -1002,7 +1002,7 @@ - + @@ -1022,7 +1022,7 @@ - + @@ -1042,7 +1042,7 @@ - + @@ -1062,7 +1062,7 @@ - + @@ -1082,7 +1082,7 @@ - + @@ -1102,7 +1102,7 @@ - + @@ -1122,7 +1122,7 @@ - + @@ -1302,7 +1302,7 @@ - + @@ -1322,7 +1322,7 @@ - + @@ -1346,7 +1346,7 @@ - + @@ -1366,7 +1366,7 @@ - + @@ -1386,7 +1386,7 @@ - + @@ -1406,7 +1406,7 @@ - + @@ -1790,7 +1790,7 @@ - + @@ -2124,7 +2124,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1monclb.lay mame-0.251+dfsg.1/src/mame/layout/m1monclb.lay --- mame-0.250+dfsg.1/src/mame/layout/m1monclb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1monclb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -534,7 +534,7 @@ - + @@ -602,7 +602,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -674,7 +674,7 @@ - + @@ -770,7 +770,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -878,7 +878,7 @@ - + @@ -906,7 +906,7 @@ - + @@ -958,7 +958,7 @@ - + @@ -1010,7 +1010,7 @@ - + @@ -1034,7 +1034,7 @@ - + @@ -2718,7 +2718,7 @@ - + @@ -2778,7 +2778,7 @@ - + @@ -2798,7 +2798,7 @@ - + @@ -2818,7 +2818,7 @@ - + @@ -2838,7 +2838,7 @@ - + @@ -2858,7 +2858,7 @@ - + @@ -2878,7 +2878,7 @@ - + @@ -2898,7 +2898,7 @@ - + @@ -2918,7 +2918,7 @@ - + @@ -3334,7 +3334,7 @@ - + @@ -3354,7 +3354,7 @@ - + @@ -3374,7 +3374,7 @@ - + @@ -3394,7 +3394,7 @@ - + @@ -3414,7 +3414,7 @@ - + @@ -3454,7 +3454,7 @@ - + @@ -3474,7 +3474,7 @@ - + @@ -3494,7 +3494,7 @@ - + @@ -3514,7 +3514,7 @@ - + @@ -3534,7 +3534,7 @@ - + @@ -3554,7 +3554,7 @@ - + @@ -3574,7 +3574,7 @@ - + @@ -3594,7 +3594,7 @@ - + @@ -3614,7 +3614,7 @@ - + @@ -3634,7 +3634,7 @@ - + @@ -3654,7 +3654,7 @@ - + @@ -3674,7 +3674,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1mongam.lay mame-0.251+dfsg.1/src/mame/layout/m1mongam.lay --- mame-0.250+dfsg.1/src/mame/layout/m1mongam.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1mongam.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1286,7 +1286,7 @@ - + @@ -1306,7 +1306,7 @@ - + @@ -1326,7 +1326,7 @@ - + @@ -1346,7 +1346,7 @@ - + @@ -1366,7 +1366,7 @@ - + @@ -1386,7 +1386,7 @@ - + @@ -1406,7 +1406,7 @@ - + @@ -1426,7 +1426,7 @@ - + @@ -1446,7 +1446,7 @@ - + @@ -1466,7 +1466,7 @@ - + @@ -1486,7 +1486,7 @@ - + @@ -1506,7 +1506,7 @@ - + @@ -1526,7 +1526,7 @@ - + @@ -1546,7 +1546,7 @@ - + @@ -1566,7 +1566,7 @@ - + @@ -1586,7 +1586,7 @@ - + @@ -1606,7 +1606,7 @@ - + @@ -1626,7 +1626,7 @@ - + @@ -1646,7 +1646,7 @@ - + @@ -1666,7 +1666,7 @@ - + @@ -1706,7 +1706,7 @@ - + @@ -1726,7 +1726,7 @@ - + @@ -1746,7 +1746,7 @@ - + @@ -2062,7 +2062,7 @@ - + @@ -2205,13 +2205,13 @@ - + - + @@ -2229,127 +2229,127 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1monmon.lay mame-0.251+dfsg.1/src/mame/layout/m1monmon.lay --- mame-0.250+dfsg.1/src/mame/layout/m1monmon.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1monmon.lay 2022-12-29 14:20:09.000000000 +0000 @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1346,7 +1346,7 @@ - + @@ -1370,49 +1370,49 @@ - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1monou.lay mame-0.251+dfsg.1/src/mame/layout/m1monou.lay --- mame-0.250+dfsg.1/src/mame/layout/m1monou.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1monou.lay 2022-12-29 14:20:09.000000000 +0000 @@ -154,7 +154,7 @@ - + @@ -198,7 +198,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -302,7 +302,7 @@ - + @@ -322,7 +322,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -598,7 +598,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -770,7 +770,7 @@ - + @@ -790,7 +790,7 @@ - + @@ -810,7 +810,7 @@ - + @@ -830,7 +830,7 @@ - + @@ -850,7 +850,7 @@ - + @@ -870,7 +870,7 @@ - + @@ -890,7 +890,7 @@ - + @@ -1174,7 +1174,7 @@ - + @@ -1222,7 +1222,7 @@ - + @@ -1242,7 +1242,7 @@ - + @@ -1302,7 +1302,7 @@ - + @@ -1322,7 +1322,7 @@ - + @@ -1770,7 +1770,7 @@ - + @@ -1981,7 +1981,7 @@ - + @@ -2005,19 +2005,19 @@ - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1nhp.lay mame-0.251+dfsg.1/src/mame/layout/m1nhp.lay --- mame-0.250+dfsg.1/src/mame/layout/m1nhp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1nhp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -790,7 +790,7 @@ - + @@ -890,7 +890,7 @@ - + @@ -1158,7 +1158,7 @@ - + @@ -1178,7 +1178,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -1390,7 +1390,7 @@ - + @@ -1826,7 +1826,7 @@ - + @@ -1866,7 +1866,7 @@ - + @@ -1986,7 +1986,7 @@ - + @@ -2006,7 +2006,7 @@ - + @@ -2026,7 +2026,7 @@ - + @@ -2046,7 +2046,7 @@ - + @@ -2066,7 +2066,7 @@ - + @@ -2146,7 +2146,7 @@ - + @@ -2726,7 +2726,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1nudbnke.lay mame-0.251+dfsg.1/src/mame/layout/m1nudbnke.lay --- mame-0.250+dfsg.1/src/mame/layout/m1nudbnke.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1nudbnke.lay 2022-12-29 14:20:09.000000000 +0000 @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1390,7 +1390,7 @@ - + @@ -1542,7 +1542,7 @@ - + @@ -1582,7 +1582,7 @@ - + @@ -1622,7 +1622,7 @@ - + @@ -1662,7 +1662,7 @@ - + @@ -1682,7 +1682,7 @@ - + @@ -1702,7 +1702,7 @@ - + @@ -1722,7 +1722,7 @@ - + @@ -1742,7 +1742,7 @@ - + @@ -3034,7 +3034,7 @@ - + @@ -3054,7 +3054,7 @@ - + @@ -3074,7 +3074,7 @@ - + @@ -3094,7 +3094,7 @@ - + @@ -3114,7 +3114,7 @@ - + @@ -3134,7 +3134,7 @@ - + @@ -3154,7 +3154,7 @@ - + @@ -3174,7 +3174,7 @@ - + @@ -3194,7 +3194,7 @@ - + @@ -3282,7 +3282,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1omega.lay mame-0.251+dfsg.1/src/mame/layout/m1omega.lay --- mame-0.250+dfsg.1/src/mame/layout/m1omega.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1omega.lay 2022-12-29 14:20:09.000000000 +0000 @@ -350,7 +350,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -514,7 +514,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -1266,7 +1266,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1onbusa.lay mame-0.251+dfsg.1/src/mame/layout/m1onbusa.lay --- mame-0.250+dfsg.1/src/mame/layout/m1onbusa.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1onbusa.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -358,7 +358,7 @@ - + @@ -378,7 +378,7 @@ - + @@ -398,7 +398,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -1534,7 +1534,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1594,7 +1594,7 @@ - + @@ -1634,7 +1634,7 @@ - + @@ -1654,7 +1654,7 @@ - + @@ -1674,7 +1674,7 @@ - + @@ -1694,7 +1694,7 @@ - + @@ -1714,7 +1714,7 @@ - + @@ -1734,7 +1734,7 @@ - + @@ -1778,7 +1778,7 @@ - + @@ -1818,7 +1818,7 @@ - + @@ -1838,7 +1838,7 @@ - + @@ -1878,7 +1878,7 @@ - + @@ -1918,7 +1918,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1pinkpc.lay mame-0.251+dfsg.1/src/mame/layout/m1pinkpc.lay --- mame-0.250+dfsg.1/src/mame/layout/m1pinkpc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1pinkpc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -430,7 +430,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -1098,7 +1098,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1318,7 +1318,7 @@ - + @@ -1338,7 +1338,7 @@ - + @@ -1362,7 +1362,7 @@ - + @@ -1382,7 +1382,7 @@ - + @@ -1402,7 +1402,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -1446,7 +1446,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1przeeb.lay mame-0.251+dfsg.1/src/mame/layout/m1przeeb.lay --- mame-0.250+dfsg.1/src/mame/layout/m1przeeb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1przeeb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -250,7 +250,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -874,7 +874,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1058,7 +1058,7 @@ - + @@ -1078,7 +1078,7 @@ - + @@ -1098,7 +1098,7 @@ - + @@ -1118,7 +1118,7 @@ - + @@ -1198,7 +1198,7 @@ - + @@ -1218,7 +1218,7 @@ - + @@ -1318,7 +1318,7 @@ - + @@ -1338,7 +1338,7 @@ - + @@ -1358,7 +1358,7 @@ - + @@ -1378,7 +1378,7 @@ - + @@ -1398,7 +1398,7 @@ - + @@ -1418,7 +1418,7 @@ - + @@ -1438,7 +1438,7 @@ - + @@ -1782,7 +1782,7 @@ - + @@ -1892,7 +1892,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1retpp.lay mame-0.251+dfsg.1/src/mame/layout/m1retpp.lay --- mame-0.250+dfsg.1/src/mame/layout/m1retpp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1retpp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -70,7 +70,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -178,7 +178,7 @@ - + @@ -222,7 +222,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -382,7 +382,7 @@ - + @@ -402,7 +402,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -1658,7 +1658,7 @@ - + @@ -1678,7 +1678,7 @@ - + @@ -1698,7 +1698,7 @@ - + @@ -1718,7 +1718,7 @@ - + @@ -1738,7 +1738,7 @@ - + @@ -1758,7 +1758,7 @@ - + @@ -1986,7 +1986,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1search.lay mame-0.251+dfsg.1/src/mame/layout/m1search.lay --- mame-0.250+dfsg.1/src/mame/layout/m1search.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1search.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -925,7 +925,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1startr.lay mame-0.251+dfsg.1/src/mame/layout/m1startr.lay --- mame-0.250+dfsg.1/src/mame/layout/m1startr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1startr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1222,7 +1222,7 @@ - + @@ -1702,7 +1702,7 @@ - + @@ -2446,7 +2446,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1sudnima.lay mame-0.251+dfsg.1/src/mame/layout/m1sudnima.lay --- mame-0.250+dfsg.1/src/mame/layout/m1sudnima.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1sudnima.lay 2022-12-29 14:20:09.000000000 +0000 @@ -266,7 +266,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -818,7 +818,7 @@ - + @@ -1102,7 +1102,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1taknot.lay mame-0.251+dfsg.1/src/mame/layout/m1taknot.lay --- mame-0.250+dfsg.1/src/mame/layout/m1taknot.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1taknot.lay 2022-12-29 14:20:09.000000000 +0000 @@ -966,7 +966,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1246,7 +1246,7 @@ - + @@ -1266,7 +1266,7 @@ - + @@ -1286,7 +1286,7 @@ - + @@ -1306,7 +1306,7 @@ - + @@ -2010,7 +2010,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1thatlfc.lay mame-0.251+dfsg.1/src/mame/layout/m1thatlfc.lay --- mame-0.250+dfsg.1/src/mame/layout/m1thatlfc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1thatlfc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -734,7 +734,7 @@ - + @@ -778,7 +778,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -978,7 +978,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1142,7 +1142,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1230,7 +1230,7 @@ - + @@ -1250,7 +1250,7 @@ - + @@ -1270,7 +1270,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -1310,7 +1310,7 @@ - + @@ -1334,7 +1334,7 @@ - + @@ -1354,7 +1354,7 @@ - + @@ -1494,7 +1494,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -1594,7 +1594,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1topstr.lay mame-0.251+dfsg.1/src/mame/layout/m1topstr.lay --- mame-0.250+dfsg.1/src/mame/layout/m1topstr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1topstr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1triviax.lay mame-0.251+dfsg.1/src/mame/layout/m1triviax.lay --- mame-0.250+dfsg.1/src/mame/layout/m1triviax.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1triviax.lay 2022-12-29 14:20:09.000000000 +0000 @@ -182,7 +182,7 @@ - + @@ -274,7 +274,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -482,7 +482,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -1382,7 +1382,7 @@ - + @@ -1494,7 +1494,7 @@ - + @@ -1518,7 +1518,7 @@ - + @@ -1590,7 +1590,7 @@ - + @@ -1610,7 +1610,7 @@ - + @@ -1682,7 +1682,7 @@ - + @@ -2010,7 +2010,7 @@ - + @@ -2030,7 +2030,7 @@ - + @@ -2050,7 +2050,7 @@ - + @@ -2094,7 +2094,7 @@ - + @@ -2114,7 +2114,7 @@ - + @@ -2134,7 +2134,7 @@ - + @@ -2154,7 +2154,7 @@ - + @@ -2174,7 +2174,7 @@ - + @@ -2194,7 +2194,7 @@ - + @@ -2214,7 +2214,7 @@ - + @@ -2234,7 +2234,7 @@ - + @@ -2254,7 +2254,7 @@ - + @@ -2274,7 +2274,7 @@ - + @@ -2766,7 +2766,7 @@ - + @@ -3234,7 +3234,7 @@ - + @@ -3254,7 +3254,7 @@ - + @@ -3274,7 +3274,7 @@ - + @@ -3294,7 +3294,7 @@ - + @@ -3314,7 +3314,7 @@ - + @@ -3334,7 +3334,7 @@ - + @@ -3354,7 +3354,7 @@ - + @@ -3374,7 +3374,7 @@ - + @@ -3394,7 +3394,7 @@ - + @@ -3414,7 +3414,7 @@ - + @@ -3434,7 +3434,7 @@ - + @@ -3454,7 +3454,7 @@ - + @@ -3702,7 +3702,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1trtr.lay mame-0.251+dfsg.1/src/mame/layout/m1trtr.lay --- mame-0.250+dfsg.1/src/mame/layout/m1trtr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1trtr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -858,7 +858,7 @@ - + @@ -878,7 +878,7 @@ - + @@ -898,7 +898,7 @@ - + @@ -918,7 +918,7 @@ - + @@ -938,7 +938,7 @@ - + @@ -958,7 +958,7 @@ - + @@ -978,7 +978,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1018,7 +1018,7 @@ - + @@ -1038,7 +1038,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1ttcash.lay mame-0.251+dfsg.1/src/mame/layout/m1ttcash.lay --- mame-0.250+dfsg.1/src/mame/layout/m1ttcash.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1ttcash.lay 2022-12-29 14:20:09.000000000 +0000 @@ -194,7 +194,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -818,7 +818,7 @@ - + @@ -1116,7 +1116,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1150,7 +1150,7 @@ - + @@ -1168,7 +1168,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1wldzner.lay mame-0.251+dfsg.1/src/mame/layout/m1wldzner.lay --- mame-0.250+dfsg.1/src/mame/layout/m1wldzner.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1wldzner.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1486,7 +1486,7 @@ - + @@ -1826,7 +1826,7 @@ - + @@ -1846,7 +1846,7 @@ - + @@ -1866,7 +1866,7 @@ - + @@ -1886,7 +1886,7 @@ - + @@ -1906,7 +1906,7 @@ - + @@ -1926,7 +1926,7 @@ - + @@ -2146,7 +2146,7 @@ - + @@ -2166,7 +2166,7 @@ - + @@ -2186,7 +2186,7 @@ - + @@ -2206,7 +2206,7 @@ - + @@ -2744,7 +2744,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m1wotwa.lay mame-0.251+dfsg.1/src/mame/layout/m1wotwa.lay --- mame-0.250+dfsg.1/src/mame/layout/m1wotwa.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m1wotwa.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1886,7 +1886,7 @@ - + @@ -1906,7 +1906,7 @@ - + @@ -1926,7 +1926,7 @@ - + @@ -1946,7 +1946,7 @@ - + @@ -2262,7 +2262,7 @@ - + @@ -2322,7 +2322,7 @@ - + @@ -2342,7 +2342,7 @@ - + @@ -2362,7 +2362,7 @@ - + @@ -2382,7 +2382,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3acech.lay mame-0.251+dfsg.1/src/mame/layout/m3acech.lay --- mame-0.250+dfsg.1/src/mame/layout/m3acech.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3acech.lay 2022-12-29 14:20:09.000000000 +0000 @@ -126,7 +126,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -614,7 +614,7 @@ - + @@ -634,7 +634,7 @@ - + @@ -654,7 +654,7 @@ - + @@ -674,7 +674,7 @@ - + @@ -890,7 +890,7 @@ - + @@ -1440,25 +1440,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3autort.lay mame-0.251+dfsg.1/src/mame/layout/m3autort.lay --- mame-0.250+dfsg.1/src/mame/layout/m3autort.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3autort.lay 2022-12-29 14:20:09.000000000 +0000 @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1544,7 +1544,7 @@ - + @@ -1580,25 +1580,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3biggam.lay mame-0.251+dfsg.1/src/mame/layout/m3biggam.lay --- mame-0.250+dfsg.1/src/mame/layout/m3biggam.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3biggam.lay 2022-12-29 14:20:09.000000000 +0000 @@ -974,7 +974,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1426,7 +1426,7 @@ - + @@ -1436,7 +1436,7 @@ - + @@ -1472,13 +1472,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3bigsht.lay mame-0.251+dfsg.1/src/mame/layout/m3bigsht.lay --- mame-0.250+dfsg.1/src/mame/layout/m3bigsht.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3bigsht.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -754,7 +754,7 @@ - + @@ -918,7 +918,7 @@ - + @@ -1268,13 +1268,13 @@ - + - + @@ -1304,13 +1304,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3cabreta.lay mame-0.251+dfsg.1/src/mame/layout/m3cabreta.lay --- mame-0.250+dfsg.1/src/mame/layout/m3cabreta.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3cabreta.lay 2022-12-29 14:20:09.000000000 +0000 @@ -570,7 +570,7 @@ - + @@ -1285,73 +1285,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3chase.lay mame-0.251+dfsg.1/src/mame/layout/m3chase.lay --- mame-0.250+dfsg.1/src/mame/layout/m3chase.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3chase.lay 2022-12-29 14:20:09.000000000 +0000 @@ -126,7 +126,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -614,7 +614,7 @@ - + @@ -890,7 +890,7 @@ - + @@ -1424,13 +1424,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3circle.lay mame-0.251+dfsg.1/src/mame/layout/m3circle.lay --- mame-0.250+dfsg.1/src/mame/layout/m3circle.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3circle.lay 2022-12-29 14:20:09.000000000 +0000 @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -1332,7 +1332,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3cskill.lay mame-0.251+dfsg.1/src/mame/layout/m3cskill.lay --- mame-0.250+dfsg.1/src/mame/layout/m3cskill.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3cskill.lay 2022-12-29 14:20:09.000000000 +0000 @@ -174,7 +174,7 @@ - + @@ -194,7 +194,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -326,19 +326,19 @@ - + - + - + - + @@ -982,7 +982,7 @@ - + @@ -1440,25 +1440,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3cunlim.lay mame-0.251+dfsg.1/src/mame/layout/m3cunlim.lay --- mame-0.250+dfsg.1/src/mame/layout/m3cunlim.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3cunlim.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3fortun.lay mame-0.251+dfsg.1/src/mame/layout/m3fortun.lay --- mame-0.250+dfsg.1/src/mame/layout/m3fortun.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3fortun.lay 2022-12-29 14:20:09.000000000 +0000 @@ -498,7 +498,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -1508,25 +1508,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3gmine.lay mame-0.251+dfsg.1/src/mame/layout/m3gmine.lay --- mame-0.250+dfsg.1/src/mame/layout/m3gmine.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3gmine.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -1154,25 +1154,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3lineup.lay mame-0.251+dfsg.1/src/mame/layout/m3lineup.lay --- mame-0.250+dfsg.1/src/mame/layout/m3lineup.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3lineup.lay 2022-12-29 14:20:09.000000000 +0000 @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -1540,7 +1540,7 @@ - + @@ -1552,19 +1552,19 @@ - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3loony.lay mame-0.251+dfsg.1/src/mame/layout/m3loony.lay --- mame-0.250+dfsg.1/src/mame/layout/m3loony.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3loony.lay 2022-12-29 14:20:09.000000000 +0000 @@ -330,7 +330,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -1314,7 +1314,7 @@ - + @@ -1488,13 +1488,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3nnice.lay mame-0.251+dfsg.1/src/mame/layout/m3nnice.lay --- mame-0.250+dfsg.1/src/mame/layout/m3nnice.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3nnice.lay 2022-12-29 14:20:09.000000000 +0000 @@ -130,7 +130,7 @@ - + @@ -970,7 +970,7 @@ - + @@ -1352,7 +1352,7 @@ - + @@ -1448,37 +1448,37 @@ - + - + - + - + - + - + @@ -1490,7 +1490,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3oddson.lay mame-0.251+dfsg.1/src/mame/layout/m3oddson.lay --- mame-0.250+dfsg.1/src/mame/layout/m3oddson.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3oddson.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1438,25 +1438,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3online.lay mame-0.251+dfsg.1/src/mame/layout/m3online.lay --- mame-0.250+dfsg.1/src/mame/layout/m3online.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3online.lay 2022-12-29 14:20:09.000000000 +0000 @@ -330,7 +330,7 @@ - + @@ -968,7 +968,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3oxo.lay mame-0.251+dfsg.1/src/mame/layout/m3oxo.lay --- mame-0.250+dfsg.1/src/mame/layout/m3oxo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3oxo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1204,13 +1204,13 @@ - + - + @@ -1222,7 +1222,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3razdaza.lay mame-0.251+dfsg.1/src/mame/layout/m3razdaza.lay --- mame-0.250+dfsg.1/src/mame/layout/m3razdaza.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3razdaza.lay 2022-12-29 14:20:09.000000000 +0000 @@ -90,7 +90,7 @@ - + @@ -1476,25 +1476,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3replay.lay mame-0.251+dfsg.1/src/mame/layout/m3replay.lay --- mame-0.250+dfsg.1/src/mame/layout/m3replay.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3replay.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -1252,25 +1252,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3rockpl.lay mame-0.251+dfsg.1/src/mame/layout/m3rockpl.lay --- mame-0.250+dfsg.1/src/mame/layout/m3rockpl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3rockpl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -658,7 +658,7 @@ - + @@ -698,7 +698,7 @@ - + @@ -718,7 +718,7 @@ - + @@ -738,7 +738,7 @@ - + @@ -758,7 +758,7 @@ - + @@ -1516,25 +1516,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3rollem.lay mame-0.251+dfsg.1/src/mame/layout/m3rollem.lay --- mame-0.250+dfsg.1/src/mame/layout/m3rollem.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3rollem.lay 2022-12-29 14:20:09.000000000 +0000 @@ -278,7 +278,7 @@ - + @@ -322,7 +322,7 @@ - + @@ -342,7 +342,7 @@ - + @@ -362,7 +362,7 @@ - + @@ -1470,7 +1470,7 @@ - + @@ -1482,19 +1482,19 @@ - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3rxchng.lay mame-0.251+dfsg.1/src/mame/layout/m3rxchng.lay --- mame-0.250+dfsg.1/src/mame/layout/m3rxchng.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3rxchng.lay 2022-12-29 14:20:09.000000000 +0000 @@ -230,7 +230,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1445,103 +1445,103 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1553,7 +1553,7 @@ - + @@ -1565,19 +1565,19 @@ - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3sexcu.lay mame-0.251+dfsg.1/src/mame/layout/m3sexcu.lay --- mame-0.250+dfsg.1/src/mame/layout/m3sexcu.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3sexcu.lay 2022-12-29 14:20:09.000000000 +0000 @@ -470,7 +470,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -1062,31 +1062,31 @@ - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3slight.lay mame-0.251+dfsg.1/src/mame/layout/m3slight.lay --- mame-0.250+dfsg.1/src/mame/layout/m3slight.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3slight.lay 2022-12-29 14:20:09.000000000 +0000 @@ -50,7 +50,7 @@ - + @@ -1514,37 +1514,37 @@ - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3snaphp.lay mame-0.251+dfsg.1/src/mame/layout/m3snaphp.lay --- mame-0.250+dfsg.1/src/mame/layout/m3snaphp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3snaphp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -1462,7 +1462,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3spoof.lay mame-0.251+dfsg.1/src/mame/layout/m3spoof.lay --- mame-0.250+dfsg.1/src/mame/layout/m3spoof.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3spoof.lay 2022-12-29 14:20:09.000000000 +0000 @@ -486,7 +486,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -638,11 +638,11 @@ - + - + @@ -678,15 +678,15 @@ - + - + - + @@ -1480,7 +1480,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3supadr.lay mame-0.251+dfsg.1/src/mame/layout/m3supadr.lay --- mame-0.250+dfsg.1/src/mame/layout/m3supadr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3supadr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -572,25 +572,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3supnud.lay mame-0.251+dfsg.1/src/mame/layout/m3supnud.lay --- mame-0.250+dfsg.1/src/mame/layout/m3supnud.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3supnud.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -868,25 +868,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3supspo.lay mame-0.251+dfsg.1/src/mame/layout/m3supspo.lay --- mame-0.250+dfsg.1/src/mame/layout/m3supspo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3supspo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -74,7 +74,7 @@ - + @@ -94,7 +94,7 @@ - + @@ -154,7 +154,7 @@ - + @@ -234,7 +234,7 @@ - + @@ -1286,7 +1286,7 @@ - + @@ -1462,7 +1462,7 @@ - + @@ -1474,19 +1474,19 @@ - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3supwin.lay mame-0.251+dfsg.1/src/mame/layout/m3supwin.lay --- mame-0.250+dfsg.1/src/mame/layout/m3supwin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3supwin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -674,7 +674,7 @@ - + @@ -694,7 +694,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -1232,13 +1232,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3sweep.lay mame-0.251+dfsg.1/src/mame/layout/m3sweep.lay --- mame-0.250+dfsg.1/src/mame/layout/m3sweep.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3sweep.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -878,7 +878,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3tfair.lay mame-0.251+dfsg.1/src/mame/layout/m3tfair.lay --- mame-0.250+dfsg.1/src/mame/layout/m3tfair.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3tfair.lay 2022-12-29 14:20:09.000000000 +0000 @@ -566,7 +566,7 @@ - + @@ -970,13 +970,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3toplin.lay mame-0.251+dfsg.1/src/mame/layout/m3toplin.lay --- mame-0.250+dfsg.1/src/mame/layout/m3toplin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3toplin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -182,7 +182,7 @@ - + @@ -1120,7 +1120,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3winagnb.lay mame-0.251+dfsg.1/src/mame/layout/m3winagnb.lay --- mame-0.250+dfsg.1/src/mame/layout/m3winagnb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3winagnb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -210,7 +210,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -1208,7 +1208,7 @@ - + @@ -1226,7 +1226,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3winstr.lay mame-0.251+dfsg.1/src/mame/layout/m3winstr.lay --- mame-0.250+dfsg.1/src/mame/layout/m3winstr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3winstr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -166,7 +166,7 @@ - + @@ -1284,7 +1284,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m3xchngg.lay mame-0.251+dfsg.1/src/mame/layout/m3xchngg.lay --- mame-0.250+dfsg.1/src/mame/layout/m3xchngg.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m3xchngg.lay 2022-12-29 14:20:09.000000000 +0000 @@ -478,7 +478,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -1210,13 +1210,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m4aao.lay mame-0.251+dfsg.1/src/mame/layout/m4aao.lay --- mame-0.250+dfsg.1/src/mame/layout/m4aao.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m4aao.lay 2022-12-29 14:20:09.000000000 +0000 @@ -110,7 +110,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -510,7 +510,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m4actbnk.lay mame-0.251+dfsg.1/src/mame/layout/m4actbnk.lay --- mame-0.250+dfsg.1/src/mame/layout/m4actbnk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m4actbnk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -1206,7 +1206,7 @@ - + @@ -1246,7 +1246,7 @@ - + @@ -1587,43 +1587,43 @@ - + - + - + - + - + - + - + @@ -1633,13 +1633,13 @@ - + - + @@ -2147,54 +2147,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m4actclb.lay mame-0.251+dfsg.1/src/mame/layout/m4actclb.lay --- mame-0.250+dfsg.1/src/mame/layout/m4actclb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m4actclb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -418,7 +418,7 @@ - + @@ -438,7 +438,7 @@ - + @@ -458,7 +458,7 @@ - + @@ -478,7 +478,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -818,7 +818,7 @@ - + @@ -1218,7 +1218,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1318,7 +1318,7 @@ - + @@ -1338,7 +1338,7 @@ - + @@ -1358,7 +1358,7 @@ - + @@ -1378,7 +1378,7 @@ - + @@ -1398,7 +1398,7 @@ - + @@ -1418,7 +1418,7 @@ - + @@ -1534,7 +1534,7 @@ - + @@ -1862,67 +1862,67 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -1942,37 +1942,37 @@ - + - + - + - + - + - + @@ -1984,7 +1984,7 @@ - + @@ -2022,7 +2022,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m4actpak.lay mame-0.251+dfsg.1/src/mame/layout/m4actpak.lay --- mame-0.250+dfsg.1/src/mame/layout/m4actpak.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m4actpak.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -1610,7 +1610,7 @@ - + @@ -1879,7 +1879,7 @@ - + @@ -1967,7 +1967,7 @@ - + @@ -1979,13 +1979,13 @@ - + - + @@ -2001,7 +2001,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m4addr.lay mame-0.251+dfsg.1/src/mame/layout/m4addr.lay --- mame-0.250+dfsg.1/src/mame/layout/m4addr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m4addr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -206,7 +206,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1606,7 +1606,7 @@ - + @@ -1626,7 +1626,7 @@ - + @@ -1646,7 +1646,7 @@ - + @@ -1666,7 +1666,7 @@ - + @@ -1686,7 +1686,7 @@ - + @@ -2106,7 +2106,7 @@ - + @@ -3260,54 +3260,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m4alladv.lay mame-0.251+dfsg.1/src/mame/layout/m4alladv.lay --- mame-0.250+dfsg.1/src/mame/layout/m4alladv.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m4alladv.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -850,7 +850,7 @@ - + @@ -963,13 +963,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m4alpha.lay mame-0.251+dfsg.1/src/mame/layout/m4alpha.lay --- mame-0.250+dfsg.1/src/mame/layout/m4alpha.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m4alpha.lay 2022-12-29 14:20:09.000000000 +0000 @@ -74,7 +74,7 @@ - + @@ -98,7 +98,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -178,7 +178,7 @@ - + @@ -458,7 +458,7 @@ - + @@ -482,7 +482,7 @@ - + @@ -2318,7 +2318,7 @@ - + @@ -2480,25 +2480,25 @@ - + - + - + - + @@ -3353,54 +3353,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m4andybt.lay mame-0.251+dfsg.1/src/mame/layout/m4andybt.lay --- mame-0.250+dfsg.1/src/mame/layout/m4andybt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m4andybt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -82,7 +82,7 @@ - + @@ -138,7 +138,7 @@ - + @@ -194,7 +194,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -362,7 +362,7 @@ - + @@ -382,7 +382,7 @@ - + @@ -402,7 +402,7 @@ - + @@ -422,7 +422,7 @@ - + @@ -442,7 +442,7 @@ - + @@ -462,7 +462,7 @@ - + @@ -482,7 +482,7 @@ - + @@ -502,7 +502,7 @@ - + @@ -522,7 +522,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -634,7 +634,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -906,7 +906,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1086,7 +1086,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1210,7 +1210,7 @@ - + @@ -1230,7 +1230,7 @@ - + @@ -1314,7 +1314,7 @@ - + @@ -1426,7 +1426,7 @@ - + @@ -1494,7 +1494,7 @@ - + @@ -1538,7 +1538,7 @@ - + @@ -1878,7 +1878,7 @@ - + @@ -1942,7 +1942,7 @@ - + @@ -2126,7 +2126,7 @@ - + @@ -2194,7 +2194,7 @@ - + @@ -2214,7 +2214,7 @@ - + @@ -2234,7 +2234,7 @@ - + @@ -2254,7 +2254,7 @@ - + @@ -2274,7 +2274,7 @@ - + @@ -2294,7 +2294,7 @@ - + @@ -2314,7 +2314,7 @@ - + @@ -2334,7 +2334,7 @@ - + @@ -2354,7 +2354,7 @@ - + @@ -2374,7 +2374,7 @@ - + @@ -2394,7 +2394,7 @@ - + @@ -2414,7 +2414,7 @@ - + @@ -2674,7 +2674,7 @@ - + @@ -2694,7 +2694,7 @@ - + @@ -2714,7 +2714,7 @@ - + @@ -2734,7 +2734,7 @@ - + @@ -2754,7 +2754,7 @@ - + @@ -2774,7 +2774,7 @@ - + @@ -2794,7 +2794,7 @@ - + @@ -2814,7 +2814,7 @@ - + @@ -2834,7 +2834,7 @@ - + @@ -2854,7 +2854,7 @@ - + @@ -2874,7 +2874,7 @@ - + @@ -2894,7 +2894,7 @@ - + @@ -2914,7 +2914,7 @@ - + @@ -2934,7 +2934,7 @@ - + @@ -3138,7 +3138,7 @@ - + @@ -3487,7 +3487,7 @@ - + @@ -3519,7 +3519,7 @@ - + @@ -3537,7 +3537,7 @@ - + @@ -4682,54 +4682,23 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m4andycp.lay mame-0.251+dfsg.1/src/mame/layout/m4andycp.lay --- mame-0.250+dfsg.1/src/mame/layout/m4andycp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m4andycp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -290,7 +290,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -902,7 +902,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1090,7 +1090,7 @@ - + @@ -1234,7 +1234,7 @@ - + @@ -1322,7 +1322,7 @@ - + @@ -1606,7 +1606,7 @@ - + @@ -2379,54 +2379,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m4andyfh.lay mame-0.251+dfsg.1/src/mame/layout/m4andyfh.lay --- mame-0.250+dfsg.1/src/mame/layout/m4andyfh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m4andyfh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -410,7 +410,7 @@ - + @@ -535,37 +535,37 @@ - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m4andyge.lay mame-0.251+dfsg.1/src/mame/layout/m4andyge.lay --- mame-0.250+dfsg.1/src/mame/layout/m4andyge.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m4andyge.lay 2022-12-29 14:20:09.000000000 +0000 @@ -106,7 +106,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -670,7 +670,7 @@ - + @@ -774,7 +774,7 @@ - + @@ -798,7 +798,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -870,7 +870,7 @@ - + @@ -894,7 +894,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1839,54 +1839,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m4apachg.lay mame-0.251+dfsg.1/src/mame/layout/m4apachg.lay --- mame-0.250+dfsg.1/src/mame/layout/m4apachg.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m4apachg.lay 2022-12-29 14:20:09.000000000 +0000 @@ -290,7 +290,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -370,7 +370,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -430,7 +430,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -1674,7 +1674,7 @@ - + @@ -1694,7 +1694,7 @@ - + @@ -1714,7 +1714,7 @@ - + @@ -1734,7 +1734,7 @@ - + @@ -1754,7 +1754,7 @@ - + @@ -1774,7 +1774,7 @@ - + @@ -1794,7 +1794,7 @@ - + @@ -1814,7 +1814,7 @@ - + @@ -1990,7 +1990,7 @@ - + @@ -2884,54 +2884,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m4tenten.lay mame-0.251+dfsg.1/src/mame/layout/m4tenten.lay --- mame-0.250+dfsg.1/src/mame/layout/m4tenten.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m4tenten.lay 2022-12-29 14:20:09.000000000 +0000 @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1270,7 +1270,7 @@ - + @@ -1371,43 +1371,43 @@ - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5addams.lay mame-0.251+dfsg.1/src/mame/layout/m5addams.lay --- mame-0.250+dfsg.1/src/mame/layout/m5addams.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5addams.lay 2022-12-29 14:20:09.000000000 +0000 @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -906,7 +906,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -2186,7 +2186,7 @@ - + @@ -2206,7 +2206,7 @@ - + @@ -2226,7 +2226,7 @@ - + @@ -2426,7 +2426,7 @@ - + @@ -2446,7 +2446,7 @@ - + @@ -2466,7 +2466,7 @@ - + @@ -2486,7 +2486,7 @@ - + @@ -2506,7 +2506,7 @@ - + @@ -2526,7 +2526,7 @@ - + @@ -2930,7 +2930,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5all41d.lay mame-0.251+dfsg.1/src/mame/layout/m5all41d.lay --- mame-0.250+dfsg.1/src/mame/layout/m5all41d.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5all41d.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -670,7 +670,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -730,7 +730,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -770,7 +770,7 @@ - + @@ -1372,55 +1372,55 @@ - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5arab.lay mame-0.251+dfsg.1/src/mame/layout/m5arab.lay --- mame-0.250+dfsg.1/src/mame/layout/m5arab.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5arab.lay 2022-12-29 14:20:09.000000000 +0000 @@ -86,7 +86,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -154,7 +154,7 @@ - + @@ -342,7 +342,7 @@ - + @@ -362,7 +362,7 @@ - + @@ -382,7 +382,7 @@ - + @@ -402,7 +402,7 @@ - + @@ -422,7 +422,7 @@ - + @@ -442,7 +442,7 @@ - + @@ -462,7 +462,7 @@ - + @@ -482,7 +482,7 @@ - + @@ -502,7 +502,7 @@ - + @@ -522,7 +522,7 @@ - + @@ -542,7 +542,7 @@ - + @@ -562,7 +562,7 @@ - + @@ -622,7 +622,7 @@ - + @@ -1122,7 +1122,7 @@ - + @@ -1142,7 +1142,7 @@ - + @@ -1162,7 +1162,7 @@ - + @@ -1182,7 +1182,7 @@ - + @@ -1202,7 +1202,7 @@ - + @@ -1222,7 +1222,7 @@ - + @@ -1242,7 +1242,7 @@ - + @@ -1262,7 +1262,7 @@ - + @@ -1282,7 +1282,7 @@ - + @@ -1854,7 +1854,7 @@ - + @@ -1914,7 +1914,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5austin11.lay mame-0.251+dfsg.1/src/mame/layout/m5austin11.lay --- mame-0.250+dfsg.1/src/mame/layout/m5austin11.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5austin11.lay 2022-12-29 14:20:09.000000000 +0000 @@ -562,7 +562,7 @@ - + @@ -582,7 +582,7 @@ - + @@ -602,7 +602,7 @@ - + @@ -622,7 +622,7 @@ - + @@ -642,7 +642,7 @@ - + @@ -662,7 +662,7 @@ - + @@ -682,7 +682,7 @@ - + @@ -702,7 +702,7 @@ - + @@ -722,7 +722,7 @@ - + @@ -742,7 +742,7 @@ - + @@ -762,7 +762,7 @@ - + @@ -782,7 +782,7 @@ - + @@ -802,7 +802,7 @@ - + @@ -2922,7 +2922,7 @@ - + @@ -2942,7 +2942,7 @@ - + @@ -2962,7 +2962,7 @@ - + @@ -2982,7 +2982,7 @@ - + @@ -3002,7 +3002,7 @@ - + @@ -3022,7 +3022,7 @@ - + @@ -3042,7 +3042,7 @@ - + @@ -3062,7 +3062,7 @@ - + @@ -3290,7 +3290,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5barkng.lay mame-0.251+dfsg.1/src/mame/layout/m5barkng.lay --- mame-0.250+dfsg.1/src/mame/layout/m5barkng.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5barkng.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -362,7 +362,7 @@ - + @@ -382,7 +382,7 @@ - + @@ -402,7 +402,7 @@ - + @@ -422,7 +422,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1086,7 +1086,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1567,7 +1567,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5barmy.lay mame-0.251+dfsg.1/src/mame/layout/m5barmy.lay --- mame-0.250+dfsg.1/src/mame/layout/m5barmy.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5barmy.lay 2022-12-29 14:20:09.000000000 +0000 @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -990,7 +990,7 @@ - + @@ -1090,7 +1090,7 @@ - + @@ -1190,7 +1190,7 @@ - + @@ -1210,7 +1210,7 @@ - + @@ -1294,7 +1294,7 @@ - + @@ -1918,7 +1918,7 @@ - + @@ -1958,7 +1958,7 @@ - + @@ -2038,7 +2038,7 @@ - + @@ -2406,7 +2406,7 @@ - + @@ -2426,7 +2426,7 @@ - + @@ -2446,7 +2446,7 @@ - + @@ -2466,7 +2466,7 @@ - + @@ -2486,7 +2486,7 @@ - + @@ -2506,7 +2506,7 @@ - + @@ -2526,7 +2526,7 @@ - + @@ -2546,7 +2546,7 @@ - + @@ -2566,7 +2566,7 @@ - + @@ -2586,7 +2586,7 @@ - + @@ -2606,7 +2606,7 @@ - + @@ -3146,7 +3146,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5baxe04.lay mame-0.251+dfsg.1/src/mame/layout/m5baxe04.lay --- mame-0.250+dfsg.1/src/mame/layout/m5baxe04.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5baxe04.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -430,7 +430,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -774,7 +774,7 @@ - + @@ -794,7 +794,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -834,7 +834,7 @@ - + @@ -854,7 +854,7 @@ - + @@ -874,7 +874,7 @@ - + @@ -894,7 +894,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -954,7 +954,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -994,7 +994,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1034,7 +1034,7 @@ - + @@ -1054,7 +1054,7 @@ - + @@ -1074,7 +1074,7 @@ - + @@ -1094,7 +1094,7 @@ - + @@ -1114,7 +1114,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1154,7 +1154,7 @@ - + @@ -1174,7 +1174,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1518,7 +1518,7 @@ - + @@ -1538,7 +1538,7 @@ - + @@ -2166,7 +2166,7 @@ - + @@ -2542,7 +2542,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5bbrocl.lay mame-0.251+dfsg.1/src/mame/layout/m5bbrocl.lay --- mame-0.250+dfsg.1/src/mame/layout/m5bbrocl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5bbrocl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1206,7 +1206,7 @@ - + @@ -1246,7 +1246,7 @@ - + @@ -1306,7 +1306,7 @@ - + @@ -1346,7 +1346,7 @@ - + @@ -1366,7 +1366,7 @@ - + @@ -1406,7 +1406,7 @@ - + @@ -1746,7 +1746,7 @@ - + @@ -1766,7 +1766,7 @@ - + @@ -1786,7 +1786,7 @@ - + @@ -1970,7 +1970,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5bbro.lay mame-0.251+dfsg.1/src/mame/layout/m5bbro.lay --- mame-0.250+dfsg.1/src/mame/layout/m5bbro.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5bbro.lay 2022-12-29 14:20:09.000000000 +0000 @@ -854,7 +854,7 @@ - + @@ -874,7 +874,7 @@ - + @@ -894,7 +894,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -954,7 +954,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -994,7 +994,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1034,7 +1034,7 @@ - + @@ -1094,7 +1094,7 @@ - + @@ -1138,7 +1138,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1230,7 +1230,7 @@ - + @@ -1638,7 +1638,7 @@ - + @@ -1682,7 +1682,7 @@ - + @@ -1750,7 +1750,7 @@ - + @@ -1794,7 +1794,7 @@ - + @@ -1842,7 +1842,7 @@ - + @@ -1890,7 +1890,7 @@ - + @@ -1934,7 +1934,7 @@ - + @@ -1978,7 +1978,7 @@ - + @@ -2022,7 +2022,7 @@ - + @@ -2066,7 +2066,7 @@ - + @@ -2110,7 +2110,7 @@ - + @@ -2130,7 +2130,7 @@ - + @@ -2178,7 +2178,7 @@ - + @@ -2250,7 +2250,7 @@ - + @@ -2270,7 +2270,7 @@ - + @@ -2402,7 +2402,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5beansa.lay mame-0.251+dfsg.1/src/mame/layout/m5beansa.lay --- mame-0.250+dfsg.1/src/mame/layout/m5beansa.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5beansa.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1590,7 +1590,7 @@ - + @@ -1610,7 +1610,7 @@ - + @@ -1630,7 +1630,7 @@ - + @@ -1650,7 +1650,7 @@ - + @@ -1674,7 +1674,7 @@ - + @@ -1694,7 +1694,7 @@ - + @@ -1714,7 +1714,7 @@ - + @@ -1734,7 +1734,7 @@ - + @@ -1754,7 +1754,7 @@ - + @@ -1774,7 +1774,7 @@ - + @@ -1794,7 +1794,7 @@ - + @@ -1814,7 +1814,7 @@ - + @@ -1834,7 +1834,7 @@ - + @@ -1854,7 +1854,7 @@ - + @@ -1874,7 +1874,7 @@ - + @@ -2074,7 +2074,7 @@ - + @@ -2094,7 +2094,7 @@ - + @@ -2114,7 +2114,7 @@ - + @@ -2134,7 +2134,7 @@ - + @@ -2154,7 +2154,7 @@ - + @@ -2174,7 +2174,7 @@ - + @@ -2194,7 +2194,7 @@ - + @@ -2214,7 +2214,7 @@ - + @@ -2234,7 +2234,7 @@ - + @@ -2594,7 +2594,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5bigchs.lay mame-0.251+dfsg.1/src/mame/layout/m5bigchs.lay --- mame-0.250+dfsg.1/src/mame/layout/m5bigchs.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5bigchs.lay 2022-12-29 14:20:09.000000000 +0000 @@ -442,7 +442,7 @@ - + @@ -462,7 +462,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -594,7 +594,7 @@ - + @@ -614,7 +614,7 @@ - + @@ -634,7 +634,7 @@ - + @@ -654,7 +654,7 @@ - + @@ -674,7 +674,7 @@ - + @@ -1650,7 +1650,7 @@ - + @@ -1670,7 +1670,7 @@ - + @@ -1694,7 +1694,7 @@ - + @@ -1742,7 +1742,7 @@ - + @@ -1862,7 +1862,7 @@ - + @@ -1882,7 +1882,7 @@ - + @@ -1906,7 +1906,7 @@ - + @@ -1930,7 +1930,7 @@ - + @@ -1950,7 +1950,7 @@ - + @@ -1970,7 +1970,7 @@ - + @@ -1990,7 +1990,7 @@ - + @@ -2010,7 +2010,7 @@ - + @@ -2034,7 +2034,7 @@ - + @@ -2222,7 +2222,7 @@ - + @@ -2242,7 +2242,7 @@ - + @@ -2262,7 +2262,7 @@ - + @@ -2286,7 +2286,7 @@ - + @@ -2306,7 +2306,7 @@ - + @@ -2326,7 +2326,7 @@ - + @@ -2346,7 +2346,7 @@ - + @@ -2366,7 +2366,7 @@ - + @@ -2386,7 +2386,7 @@ - + @@ -2406,7 +2406,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5biggam.lay mame-0.251+dfsg.1/src/mame/layout/m5biggam.lay --- mame-0.250+dfsg.1/src/mame/layout/m5biggam.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5biggam.lay 2022-12-29 14:20:09.000000000 +0000 @@ -214,7 +214,7 @@ - + @@ -234,7 +234,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -274,7 +274,7 @@ - + @@ -294,7 +294,7 @@ - + @@ -314,7 +314,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -374,7 +374,7 @@ - + @@ -394,7 +394,7 @@ - + @@ -414,7 +414,7 @@ - + @@ -434,7 +434,7 @@ - + @@ -454,7 +454,7 @@ - + @@ -474,7 +474,7 @@ - + @@ -494,7 +494,7 @@ - + @@ -514,7 +514,7 @@ - + @@ -534,7 +534,7 @@ - + @@ -554,7 +554,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -594,7 +594,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -954,7 +954,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1034,7 +1034,7 @@ - + @@ -1074,7 +1074,7 @@ - + @@ -1094,7 +1094,7 @@ - + @@ -1114,7 +1114,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1154,7 +1154,7 @@ - + @@ -1174,7 +1174,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1214,7 +1214,7 @@ - + @@ -1234,7 +1234,7 @@ - + @@ -1254,7 +1254,7 @@ - + @@ -1274,7 +1274,7 @@ - + @@ -1294,7 +1294,7 @@ - + @@ -1594,7 +1594,7 @@ - + @@ -1614,7 +1614,7 @@ - + @@ -1634,7 +1634,7 @@ - + @@ -1654,7 +1654,7 @@ - + @@ -1674,7 +1674,7 @@ - + @@ -1694,7 +1694,7 @@ - + @@ -1714,7 +1714,7 @@ - + @@ -1734,7 +1734,7 @@ - + @@ -1778,7 +1778,7 @@ - + @@ -1798,7 +1798,7 @@ - + @@ -1818,7 +1818,7 @@ - + @@ -1838,7 +1838,7 @@ - + @@ -1858,7 +1858,7 @@ - + @@ -1878,7 +1878,7 @@ - + @@ -1958,7 +1958,7 @@ - + @@ -1978,7 +1978,7 @@ - + @@ -3166,7 +3166,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5bling.lay mame-0.251+dfsg.1/src/mame/layout/m5bling.lay --- mame-0.250+dfsg.1/src/mame/layout/m5bling.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5bling.lay 2022-12-29 14:20:09.000000000 +0000 @@ -630,7 +630,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -810,7 +810,7 @@ - + @@ -910,7 +910,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -1030,7 +1030,7 @@ - + @@ -1050,7 +1050,7 @@ - + @@ -1070,7 +1070,7 @@ - + @@ -1090,7 +1090,7 @@ - + @@ -1110,7 +1110,7 @@ - + @@ -1130,7 +1130,7 @@ - + @@ -1150,7 +1150,7 @@ - + @@ -1170,7 +1170,7 @@ - + @@ -1190,7 +1190,7 @@ - + @@ -1210,7 +1210,7 @@ - + @@ -1230,7 +1230,7 @@ - + @@ -1250,7 +1250,7 @@ - + @@ -1330,7 +1330,7 @@ - + @@ -1442,7 +1442,7 @@ - + @@ -1462,7 +1462,7 @@ - + @@ -1482,7 +1482,7 @@ - + @@ -1502,7 +1502,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -1542,7 +1542,7 @@ - + @@ -1562,7 +1562,7 @@ - + @@ -1582,7 +1582,7 @@ - + @@ -2714,7 +2714,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5blkwht11.lay mame-0.251+dfsg.1/src/mame/layout/m5blkwht11.lay --- mame-0.250+dfsg.1/src/mame/layout/m5blkwht11.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5blkwht11.lay 2022-12-29 14:20:09.000000000 +0000 @@ -106,7 +106,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -582,7 +582,7 @@ - + @@ -602,7 +602,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -982,7 +982,7 @@ - + @@ -1002,7 +1002,7 @@ - + @@ -1022,7 +1022,7 @@ - + @@ -1042,7 +1042,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5bnzclb.lay mame-0.251+dfsg.1/src/mame/layout/m5bnzclb.lay --- mame-0.250+dfsg.1/src/mame/layout/m5bnzclb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5bnzclb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -70,7 +70,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -234,7 +234,7 @@ - + @@ -314,7 +314,7 @@ - + @@ -462,7 +462,7 @@ - + @@ -582,7 +582,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -1430,7 +1430,7 @@ - + @@ -1470,7 +1470,7 @@ - + @@ -1490,7 +1490,7 @@ - + @@ -1854,7 +1854,7 @@ - + @@ -1874,7 +1874,7 @@ - + @@ -1894,7 +1894,7 @@ - + @@ -1914,7 +1914,7 @@ - + @@ -1934,7 +1934,7 @@ - + @@ -1954,7 +1954,7 @@ - + @@ -1974,7 +1974,7 @@ - + @@ -1994,7 +1994,7 @@ - + @@ -2014,7 +2014,7 @@ - + @@ -2034,7 +2034,7 @@ - + @@ -2054,7 +2054,7 @@ - + @@ -2074,7 +2074,7 @@ - + @@ -2094,7 +2094,7 @@ - + @@ -2114,7 +2114,7 @@ - + @@ -2134,7 +2134,7 @@ - + @@ -2154,7 +2154,7 @@ - + @@ -2174,7 +2174,7 @@ - + @@ -2194,7 +2194,7 @@ - + @@ -2894,7 +2894,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5btlbnk.lay mame-0.251+dfsg.1/src/mame/layout/m5btlbnk.lay --- mame-0.250+dfsg.1/src/mame/layout/m5btlbnk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5btlbnk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1978,7 +1978,7 @@ - + @@ -1998,7 +1998,7 @@ - + @@ -2018,7 +2018,7 @@ - + @@ -2058,7 +2058,7 @@ - + @@ -2098,7 +2098,7 @@ - + @@ -2118,7 +2118,7 @@ - + @@ -2198,7 +2198,7 @@ - + @@ -2218,7 +2218,7 @@ - + @@ -2498,7 +2498,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5bttf.lay mame-0.251+dfsg.1/src/mame/layout/m5bttf.lay --- mame-0.250+dfsg.1/src/mame/layout/m5bttf.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5bttf.lay 2022-12-29 14:20:09.000000000 +0000 @@ -934,7 +934,7 @@ - + @@ -954,7 +954,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -994,7 +994,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1034,7 +1034,7 @@ - + @@ -1054,7 +1054,7 @@ - + @@ -1074,7 +1074,7 @@ - + @@ -1094,7 +1094,7 @@ - + @@ -1114,7 +1114,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1154,7 +1154,7 @@ - + @@ -1174,7 +1174,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1214,7 +1214,7 @@ - + @@ -2790,7 +2790,7 @@ - + @@ -2830,7 +2830,7 @@ - + @@ -2870,7 +2870,7 @@ - + @@ -2890,7 +2890,7 @@ - + @@ -2910,7 +2910,7 @@ - + @@ -2950,7 +2950,7 @@ - + @@ -2970,7 +2970,7 @@ - + @@ -2990,7 +2990,7 @@ - + @@ -3862,7 +3862,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5bwaves.lay mame-0.251+dfsg.1/src/mame/layout/m5bwaves.lay --- mame-0.250+dfsg.1/src/mame/layout/m5bwaves.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5bwaves.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1082,7 +1082,7 @@ - + @@ -1162,7 +1162,7 @@ - + @@ -1182,7 +1182,7 @@ - + @@ -1202,7 +1202,7 @@ - + @@ -1222,7 +1222,7 @@ - + @@ -1242,7 +1242,7 @@ - + @@ -1262,7 +1262,7 @@ - + @@ -1282,7 +1282,7 @@ - + @@ -1302,7 +1302,7 @@ - + @@ -1322,7 +1322,7 @@ - + @@ -1342,7 +1342,7 @@ - + @@ -1362,7 +1362,7 @@ - + @@ -1382,7 +1382,7 @@ - + @@ -1402,7 +1402,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -1442,7 +1442,7 @@ - + @@ -1462,7 +1462,7 @@ - + @@ -1486,7 +1486,7 @@ - + @@ -1506,7 +1506,7 @@ - + @@ -1526,7 +1526,7 @@ - + @@ -1546,7 +1546,7 @@ - + @@ -1566,7 +1566,7 @@ - + @@ -1586,7 +1586,7 @@ - + @@ -1606,7 +1606,7 @@ - + @@ -1626,7 +1626,7 @@ - + @@ -1646,7 +1646,7 @@ - + @@ -1666,7 +1666,7 @@ - + @@ -2230,7 +2230,7 @@ - + @@ -2363,7 +2363,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5carou.lay mame-0.251+dfsg.1/src/mame/layout/m5carou.lay --- mame-0.250+dfsg.1/src/mame/layout/m5carou.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5carou.lay 2022-12-29 14:20:09.000000000 +0000 @@ -350,7 +350,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -514,7 +514,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -634,7 +634,7 @@ - + @@ -694,7 +694,7 @@ - + @@ -754,7 +754,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -1534,7 +1534,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1594,7 +1594,7 @@ - + @@ -1614,7 +1614,7 @@ - + @@ -1634,7 +1634,7 @@ - + @@ -1654,7 +1654,7 @@ - + @@ -1674,7 +1674,7 @@ - + @@ -1754,7 +1754,7 @@ - + @@ -1974,7 +1974,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5cashat.lay mame-0.251+dfsg.1/src/mame/layout/m5cashat.lay --- mame-0.250+dfsg.1/src/mame/layout/m5cashat.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5cashat.lay 2022-12-29 14:20:09.000000000 +0000 @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -1978,7 +1978,7 @@ - + @@ -1998,7 +1998,7 @@ - + @@ -2018,7 +2018,7 @@ - + @@ -2038,7 +2038,7 @@ - + @@ -2058,7 +2058,7 @@ - + @@ -2082,7 +2082,7 @@ - + @@ -2102,7 +2102,7 @@ - + @@ -2182,7 +2182,7 @@ - + @@ -2206,7 +2206,7 @@ - + @@ -2226,7 +2226,7 @@ - + @@ -2246,7 +2246,7 @@ - + @@ -2266,7 +2266,7 @@ - + @@ -2286,7 +2286,7 @@ - + @@ -2306,7 +2306,7 @@ - + @@ -2326,7 +2326,7 @@ - + @@ -2346,7 +2346,7 @@ - + @@ -2366,7 +2366,7 @@ - + @@ -2386,7 +2386,7 @@ - + @@ -2406,7 +2406,7 @@ - + @@ -2426,7 +2426,7 @@ - + @@ -2446,7 +2446,7 @@ - + @@ -2566,7 +2566,7 @@ - + @@ -2586,7 +2586,7 @@ - + @@ -2606,7 +2606,7 @@ - + @@ -2626,7 +2626,7 @@ - + @@ -2646,7 +2646,7 @@ - + @@ -2666,7 +2666,7 @@ - + @@ -2686,7 +2686,7 @@ - + @@ -2706,7 +2706,7 @@ - + @@ -2726,7 +2726,7 @@ - + @@ -2906,7 +2906,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5cashrn.lay mame-0.251+dfsg.1/src/mame/layout/m5cashrn.lay --- mame-0.250+dfsg.1/src/mame/layout/m5cashrn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5cashrn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -1414,7 +1414,7 @@ - + @@ -1434,7 +1434,7 @@ - + @@ -1454,7 +1454,7 @@ - + @@ -1474,7 +1474,7 @@ - + @@ -1494,7 +1494,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -1534,7 +1534,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1890,7 +1890,7 @@ - + @@ -2146,7 +2146,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5cbw.lay mame-0.251+dfsg.1/src/mame/layout/m5cbw.lay --- mame-0.250+dfsg.1/src/mame/layout/m5cbw.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5cbw.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1966,7 +1966,7 @@ - + @@ -1986,7 +1986,7 @@ - + @@ -2006,7 +2006,7 @@ - + @@ -2026,7 +2026,7 @@ - + @@ -2046,7 +2046,7 @@ - + @@ -2066,7 +2066,7 @@ - + @@ -2086,7 +2086,7 @@ - + @@ -2106,7 +2106,7 @@ - + @@ -2126,7 +2126,7 @@ - + @@ -2530,7 +2530,7 @@ - + @@ -2550,7 +2550,7 @@ - + @@ -2574,7 +2574,7 @@ - + @@ -2594,7 +2594,7 @@ - + @@ -2614,7 +2614,7 @@ - + @@ -2634,7 +2634,7 @@ - + @@ -2654,7 +2654,7 @@ - + @@ -2674,7 +2674,7 @@ - + @@ -2694,7 +2694,7 @@ - + @@ -2714,7 +2714,7 @@ - + @@ -2734,7 +2734,7 @@ - + @@ -2754,7 +2754,7 @@ - + @@ -2774,7 +2774,7 @@ - + @@ -2798,7 +2798,7 @@ - + @@ -2818,7 +2818,7 @@ - + @@ -2898,7 +2898,7 @@ - + @@ -3698,7 +3698,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5centcl.lay mame-0.251+dfsg.1/src/mame/layout/m5centcl.lay --- mame-0.250+dfsg.1/src/mame/layout/m5centcl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5centcl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -986,7 +986,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1086,7 +1086,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1226,7 +1226,7 @@ - + @@ -1286,7 +1286,7 @@ - + @@ -1306,7 +1306,7 @@ - + @@ -1466,7 +1466,7 @@ - + @@ -1486,7 +1486,7 @@ - + @@ -1526,7 +1526,7 @@ - + @@ -1566,7 +1566,7 @@ - + @@ -1606,7 +1606,7 @@ - + @@ -1846,7 +1846,7 @@ - + @@ -1870,7 +1870,7 @@ - + @@ -1890,7 +1890,7 @@ - + @@ -1910,7 +1910,7 @@ - + @@ -1930,7 +1930,7 @@ - + @@ -1970,7 +1970,7 @@ - + @@ -1990,7 +1990,7 @@ - + @@ -2010,7 +2010,7 @@ - + @@ -2030,7 +2030,7 @@ - + @@ -2050,7 +2050,7 @@ - + @@ -2070,7 +2070,7 @@ - + @@ -2114,7 +2114,7 @@ - + @@ -2902,7 +2902,7 @@ - + @@ -3246,7 +3246,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5circlb33.lay mame-0.251+dfsg.1/src/mame/layout/m5circlb33.lay --- mame-0.250+dfsg.1/src/mame/layout/m5circlb33.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5circlb33.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -340,7 +340,7 @@ - + @@ -358,13 +358,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5circus0a.lay mame-0.251+dfsg.1/src/mame/layout/m5circus0a.lay --- mame-0.250+dfsg.1/src/mame/layout/m5circus0a.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5circus0a.lay 2022-12-29 14:20:09.000000000 +0000 @@ -106,7 +106,7 @@ - + @@ -329,7 +329,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5clifhn.lay mame-0.251+dfsg.1/src/mame/layout/m5clifhn.lay --- mame-0.250+dfsg.1/src/mame/layout/m5clifhn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5clifhn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -318,7 +318,7 @@ - + @@ -342,7 +342,7 @@ - + @@ -362,7 +362,7 @@ - + @@ -382,7 +382,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -430,7 +430,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -474,7 +474,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -522,7 +522,7 @@ - + @@ -542,7 +542,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -2582,7 +2582,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5clown11.lay mame-0.251+dfsg.1/src/mame/layout/m5clown11.lay --- mame-0.250+dfsg.1/src/mame/layout/m5clown11.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5clown11.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1670,7 +1670,7 @@ - + @@ -1690,7 +1690,7 @@ - + @@ -1710,7 +1710,7 @@ - + @@ -1730,7 +1730,7 @@ - + @@ -1750,7 +1750,7 @@ - + @@ -1770,7 +1770,7 @@ - + @@ -2190,7 +2190,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5codft.lay mame-0.251+dfsg.1/src/mame/layout/m5codft.lay --- mame-0.250+dfsg.1/src/mame/layout/m5codft.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5codft.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -74,7 +74,7 @@ - + @@ -102,7 +102,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -670,7 +670,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -730,7 +730,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -770,7 +770,7 @@ - + @@ -790,7 +790,7 @@ - + @@ -810,7 +810,7 @@ - + @@ -830,7 +830,7 @@ - + @@ -858,7 +858,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -3310,7 +3310,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5cosclb.lay mame-0.251+dfsg.1/src/mame/layout/m5cosclb.lay --- mame-0.250+dfsg.1/src/mame/layout/m5cosclb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5cosclb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -370,7 +370,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -430,7 +430,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -858,7 +858,7 @@ - + @@ -938,7 +938,7 @@ - + @@ -1098,7 +1098,7 @@ - + @@ -1198,7 +1198,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1338,7 +1338,7 @@ - + @@ -1758,7 +1758,7 @@ - + @@ -1778,7 +1778,7 @@ - + @@ -1798,7 +1798,7 @@ - + @@ -1818,7 +1818,7 @@ - + @@ -1838,7 +1838,7 @@ - + @@ -1858,7 +1858,7 @@ - + @@ -1878,7 +1878,7 @@ - + @@ -1898,7 +1898,7 @@ - + @@ -1918,7 +1918,7 @@ - + @@ -1938,7 +1938,7 @@ - + @@ -1958,7 +1958,7 @@ - + @@ -1978,7 +1978,7 @@ - + @@ -1998,7 +1998,7 @@ - + @@ -2018,7 +2018,7 @@ - + @@ -2038,7 +2038,7 @@ - + @@ -2258,7 +2258,7 @@ - + @@ -2278,7 +2278,7 @@ - + @@ -2298,7 +2298,7 @@ - + @@ -2318,7 +2318,7 @@ - + @@ -2338,7 +2338,7 @@ - + @@ -2922,7 +2922,7 @@ - + @@ -3054,91 +3054,91 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5crzkni.lay mame-0.251+dfsg.1/src/mame/layout/m5crzkni.lay --- mame-0.250+dfsg.1/src/mame/layout/m5crzkni.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5crzkni.lay 2022-12-29 14:20:09.000000000 +0000 @@ -70,7 +70,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -1754,7 +1754,7 @@ - + @@ -1934,7 +1934,7 @@ - + @@ -1954,7 +1954,7 @@ - + @@ -1974,7 +1974,7 @@ - + @@ -1994,7 +1994,7 @@ - + @@ -2014,7 +2014,7 @@ - + @@ -2058,7 +2058,7 @@ - + @@ -2078,7 +2078,7 @@ - + @@ -2098,7 +2098,7 @@ - + @@ -2118,7 +2118,7 @@ - + @@ -2138,7 +2138,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5cshkcb.lay mame-0.251+dfsg.1/src/mame/layout/m5cshkcb.lay --- mame-0.250+dfsg.1/src/mame/layout/m5cshkcb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5cshkcb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -3398,7 +3398,7 @@ - + @@ -3418,7 +3418,7 @@ - + @@ -3438,7 +3438,7 @@ - + @@ -3458,7 +3458,7 @@ - + @@ -3478,7 +3478,7 @@ - + @@ -3498,7 +3498,7 @@ - + @@ -3518,7 +3518,7 @@ - + @@ -3538,7 +3538,7 @@ - + @@ -3558,7 +3558,7 @@ - + @@ -3578,7 +3578,7 @@ - + @@ -3598,7 +3598,7 @@ - + @@ -3618,7 +3618,7 @@ - + @@ -3638,7 +3638,7 @@ - + @@ -3658,7 +3658,7 @@ - + @@ -3678,7 +3678,7 @@ - + @@ -3698,7 +3698,7 @@ - + @@ -3718,7 +3718,7 @@ - + @@ -3738,7 +3738,7 @@ - + @@ -3758,7 +3758,7 @@ - + @@ -4042,7 +4042,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5cshstx.lay mame-0.251+dfsg.1/src/mame/layout/m5cshstx.lay --- mame-0.250+dfsg.1/src/mame/layout/m5cshstx.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5cshstx.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1490,7 +1490,7 @@ - + @@ -1510,7 +1510,7 @@ - + @@ -1530,7 +1530,7 @@ - + @@ -1550,7 +1550,7 @@ - + @@ -1570,7 +1570,7 @@ - + @@ -1590,7 +1590,7 @@ - + @@ -1610,7 +1610,7 @@ - + @@ -1630,7 +1630,7 @@ - + @@ -1650,7 +1650,7 @@ - + @@ -1670,7 +1670,7 @@ - + @@ -1690,7 +1690,7 @@ - + @@ -1710,7 +1710,7 @@ - + @@ -1730,7 +1730,7 @@ - + @@ -1950,7 +1950,7 @@ - + @@ -1970,7 +1970,7 @@ - + @@ -1990,7 +1990,7 @@ - + @@ -2010,7 +2010,7 @@ - + @@ -2030,7 +2030,7 @@ - + @@ -2070,7 +2070,7 @@ - + @@ -2090,7 +2090,7 @@ - + @@ -2110,7 +2110,7 @@ - + @@ -2130,7 +2130,7 @@ - + @@ -2270,7 +2270,7 @@ - + @@ -2290,7 +2290,7 @@ - + @@ -2310,7 +2310,7 @@ - + @@ -2330,7 +2330,7 @@ - + @@ -2350,7 +2350,7 @@ - + @@ -2370,7 +2370,7 @@ - + @@ -2390,7 +2390,7 @@ - + @@ -2410,7 +2410,7 @@ - + @@ -2430,7 +2430,7 @@ - + @@ -2450,7 +2450,7 @@ - + @@ -2470,7 +2470,7 @@ - + @@ -2490,7 +2490,7 @@ - + @@ -2510,7 +2510,7 @@ - + @@ -2530,7 +2530,7 @@ - + @@ -2550,7 +2550,7 @@ - + @@ -2570,7 +2570,7 @@ - + @@ -2590,7 +2590,7 @@ - + @@ -2610,7 +2610,7 @@ - + @@ -2630,7 +2630,7 @@ - + @@ -2650,7 +2650,7 @@ - + @@ -2670,7 +2670,7 @@ - + @@ -2690,7 +2690,7 @@ - + @@ -2710,7 +2710,7 @@ - + @@ -2730,7 +2730,7 @@ - + @@ -2750,7 +2750,7 @@ - + @@ -2770,7 +2770,7 @@ - + @@ -2790,7 +2790,7 @@ - + @@ -2810,7 +2810,7 @@ - + @@ -2830,7 +2830,7 @@ - + @@ -2850,7 +2850,7 @@ - + @@ -2930,7 +2930,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5dblqtsb.lay mame-0.251+dfsg.1/src/mame/layout/m5dblqtsb.lay --- mame-0.250+dfsg.1/src/mame/layout/m5dblqtsb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5dblqtsb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1746,7 +1746,7 @@ - + @@ -1766,7 +1766,7 @@ - + @@ -1786,7 +1786,7 @@ - + @@ -1806,7 +1806,7 @@ - + @@ -1826,7 +1826,7 @@ - + @@ -1846,7 +1846,7 @@ - + @@ -1866,7 +1866,7 @@ - + @@ -1886,7 +1886,7 @@ - + @@ -1906,7 +1906,7 @@ - + @@ -1926,7 +1926,7 @@ - + @@ -1946,7 +1946,7 @@ - + @@ -2350,7 +2350,7 @@ - + @@ -2370,7 +2370,7 @@ - + @@ -2590,7 +2590,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5devil.lay mame-0.251+dfsg.1/src/mame/layout/m5devil.lay --- mame-0.250+dfsg.1/src/mame/layout/m5devil.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5devil.lay 2022-12-29 14:20:09.000000000 +0000 @@ -30,7 +30,7 @@ - + @@ -54,7 +54,7 @@ - + @@ -78,7 +78,7 @@ - + @@ -102,7 +102,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -174,7 +174,7 @@ - + @@ -198,7 +198,7 @@ - + @@ -222,7 +222,7 @@ - + @@ -3394,7 +3394,7 @@ - + @@ -3414,7 +3414,7 @@ - + @@ -3454,7 +3454,7 @@ - + @@ -3474,7 +3474,7 @@ - + @@ -3494,7 +3494,7 @@ - + @@ -3534,7 +3534,7 @@ - + @@ -3594,7 +3594,7 @@ - + @@ -3654,7 +3654,7 @@ - + @@ -3694,7 +3694,7 @@ - + @@ -3714,7 +3714,7 @@ - + @@ -3734,7 +3734,7 @@ - + @@ -3754,7 +3754,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5dick10.lay mame-0.251+dfsg.1/src/mame/layout/m5dick10.lay --- mame-0.250+dfsg.1/src/mame/layout/m5dick10.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5dick10.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -742,7 +742,7 @@ - + @@ -762,7 +762,7 @@ - + @@ -782,7 +782,7 @@ - + @@ -802,7 +802,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -842,7 +842,7 @@ - + @@ -862,7 +862,7 @@ - + @@ -882,7 +882,7 @@ - + @@ -902,7 +902,7 @@ - + @@ -1570,7 +1570,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5doshpk05.lay mame-0.251+dfsg.1/src/mame/layout/m5doshpk05.lay --- mame-0.250+dfsg.1/src/mame/layout/m5doshpk05.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5doshpk05.lay 2022-12-29 14:20:09.000000000 +0000 @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -1642,7 +1642,7 @@ - + @@ -1662,7 +1662,7 @@ - + @@ -1682,7 +1682,7 @@ - + @@ -1702,7 +1702,7 @@ - + @@ -1722,7 +1722,7 @@ - + @@ -1742,7 +1742,7 @@ - + @@ -1762,7 +1762,7 @@ - + @@ -1782,7 +1782,7 @@ - + @@ -2798,7 +2798,7 @@ - + @@ -2818,7 +2818,7 @@ - + @@ -2838,7 +2838,7 @@ - + @@ -2858,7 +2858,7 @@ - + @@ -2878,7 +2878,7 @@ - + @@ -2898,7 +2898,7 @@ - + @@ -2918,7 +2918,7 @@ - + @@ -2938,7 +2938,7 @@ - + @@ -2958,7 +2958,7 @@ - + @@ -3498,7 +3498,7 @@ - + @@ -3518,7 +3518,7 @@ - + @@ -3868,55 +3868,55 @@ - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5egr.lay mame-0.251+dfsg.1/src/mame/layout/m5egr.lay --- mame-0.250+dfsg.1/src/mame/layout/m5egr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5egr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -302,7 +302,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -438,7 +438,7 @@ - + @@ -538,7 +538,7 @@ - + @@ -558,7 +558,7 @@ - + @@ -578,7 +578,7 @@ - + @@ -598,7 +598,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -638,7 +638,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5elband.lay mame-0.251+dfsg.1/src/mame/layout/m5elband.lay --- mame-0.250+dfsg.1/src/mame/layout/m5elband.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5elband.lay 2022-12-29 14:20:09.000000000 +0000 @@ -574,7 +574,7 @@ - + @@ -598,7 +598,7 @@ - + @@ -622,7 +622,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -670,7 +670,7 @@ - + @@ -694,7 +694,7 @@ - + @@ -718,7 +718,7 @@ - + @@ -742,7 +742,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -790,7 +790,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -838,7 +838,7 @@ - + @@ -862,7 +862,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -910,7 +910,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -958,7 +958,7 @@ - + @@ -982,7 +982,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1030,7 +1030,7 @@ - + @@ -1054,7 +1054,7 @@ - + @@ -1078,7 +1078,7 @@ - + @@ -2102,7 +2102,7 @@ - + @@ -2122,7 +2122,7 @@ - + @@ -2342,7 +2342,7 @@ - + @@ -2362,7 +2362,7 @@ - + @@ -2382,7 +2382,7 @@ - + @@ -2402,7 +2402,7 @@ - + @@ -2422,7 +2422,7 @@ - + @@ -2442,7 +2442,7 @@ - + @@ -2642,7 +2642,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5elim.lay mame-0.251+dfsg.1/src/mame/layout/m5elim.lay --- mame-0.250+dfsg.1/src/mame/layout/m5elim.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5elim.lay 2022-12-29 14:20:09.000000000 +0000 @@ -214,7 +214,7 @@ - + @@ -234,7 +234,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -438,7 +438,7 @@ - + @@ -458,7 +458,7 @@ - + @@ -478,7 +478,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -1366,7 +1366,7 @@ - + @@ -1614,7 +1614,7 @@ - + @@ -1638,7 +1638,7 @@ - + @@ -1662,7 +1662,7 @@ - + @@ -1682,7 +1682,7 @@ - + @@ -1702,7 +1702,7 @@ - + @@ -1722,7 +1722,7 @@ - + @@ -1742,7 +1742,7 @@ - + @@ -1762,7 +1762,7 @@ - + @@ -1782,7 +1782,7 @@ - + @@ -1802,7 +1802,7 @@ - + @@ -2342,7 +2342,7 @@ - + @@ -2362,7 +2362,7 @@ - + @@ -2382,7 +2382,7 @@ - + @@ -2402,7 +2402,7 @@ - + @@ -2422,7 +2422,7 @@ - + @@ -2442,7 +2442,7 @@ - + @@ -2462,7 +2462,7 @@ - + @@ -2482,7 +2482,7 @@ - + @@ -2502,7 +2502,7 @@ - + @@ -2522,7 +2522,7 @@ - + @@ -2542,7 +2542,7 @@ - + @@ -3014,7 +3014,7 @@ - + @@ -3034,7 +3034,7 @@ - + @@ -3054,7 +3054,7 @@ - + @@ -3074,7 +3074,7 @@ - + @@ -3094,7 +3094,7 @@ - + @@ -3114,7 +3114,7 @@ - + @@ -3134,7 +3134,7 @@ - + @@ -3518,7 +3518,7 @@ - + @@ -3618,7 +3618,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5evgrhr.lay mame-0.251+dfsg.1/src/mame/layout/m5evgrhr.lay --- mame-0.250+dfsg.1/src/mame/layout/m5evgrhr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5evgrhr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -342,7 +342,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -562,7 +562,7 @@ - + @@ -582,7 +582,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5ewn.lay mame-0.251+dfsg.1/src/mame/layout/m5ewn.lay --- mame-0.250+dfsg.1/src/mame/layout/m5ewn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5ewn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -186,7 +186,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -1682,7 +1682,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5extrm.lay mame-0.251+dfsg.1/src/mame/layout/m5extrm.lay --- mame-0.250+dfsg.1/src/mame/layout/m5extrm.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5extrm.lay 2022-12-29 14:20:09.000000000 +0000 @@ -2154,7 +2154,7 @@ - + @@ -2194,7 +2194,7 @@ - + @@ -2234,7 +2234,7 @@ - + @@ -2886,7 +2886,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5fiddle.lay mame-0.251+dfsg.1/src/mame/layout/m5fiddle.lay --- mame-0.250+dfsg.1/src/mame/layout/m5fiddle.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5fiddle.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -658,7 +658,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -698,7 +698,7 @@ - + @@ -718,7 +718,7 @@ - + @@ -738,7 +738,7 @@ - + @@ -1004,31 +1004,31 @@ - + - + - + - + - + @@ -1046,7 +1046,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5firebl.lay mame-0.251+dfsg.1/src/mame/layout/m5firebl.lay --- mame-0.250+dfsg.1/src/mame/layout/m5firebl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5firebl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -138,7 +138,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -178,7 +178,7 @@ - + @@ -198,7 +198,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -238,7 +238,7 @@ - + @@ -258,7 +258,7 @@ - + @@ -278,7 +278,7 @@ - + @@ -298,7 +298,7 @@ - + @@ -318,7 +318,7 @@ - + @@ -338,7 +338,7 @@ - + @@ -358,7 +358,7 @@ - + @@ -378,7 +378,7 @@ - + @@ -398,7 +398,7 @@ - + @@ -418,7 +418,7 @@ - + @@ -438,7 +438,7 @@ - + @@ -458,7 +458,7 @@ - + @@ -478,7 +478,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -518,7 +518,7 @@ - + @@ -538,7 +538,7 @@ - + @@ -558,7 +558,7 @@ - + @@ -578,7 +578,7 @@ - + @@ -598,7 +598,7 @@ - + @@ -2066,7 +2066,7 @@ - + @@ -2086,7 +2086,7 @@ - + @@ -2106,7 +2106,7 @@ - + @@ -2126,7 +2126,7 @@ - + @@ -2146,7 +2146,7 @@ - + @@ -2166,7 +2166,7 @@ - + @@ -2186,7 +2186,7 @@ - + @@ -2206,7 +2206,7 @@ - + @@ -2566,7 +2566,7 @@ - + @@ -2586,7 +2586,7 @@ - + @@ -2606,7 +2606,7 @@ - + @@ -2626,7 +2626,7 @@ - + @@ -2646,7 +2646,7 @@ - + @@ -2666,7 +2666,7 @@ - + @@ -2686,7 +2686,7 @@ - + @@ -2706,7 +2706,7 @@ - + @@ -2786,7 +2786,7 @@ - + @@ -3862,7 +3862,7 @@ - + @@ -3882,7 +3882,7 @@ - + @@ -4052,55 +4052,55 @@ - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5fire.lay mame-0.251+dfsg.1/src/mame/layout/m5fire.lay --- mame-0.250+dfsg.1/src/mame/layout/m5fire.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5fire.lay 2022-12-29 14:20:09.000000000 +0000 @@ -2158,7 +2158,7 @@ - + @@ -2178,7 +2178,7 @@ - + @@ -2198,7 +2198,7 @@ - + @@ -2218,7 +2218,7 @@ - + @@ -2242,7 +2242,7 @@ - + @@ -2262,7 +2262,7 @@ - + @@ -2282,7 +2282,7 @@ - + @@ -2302,7 +2302,7 @@ - + @@ -2322,7 +2322,7 @@ - + @@ -2342,7 +2342,7 @@ - + @@ -2362,7 +2362,7 @@ - + @@ -2382,7 +2382,7 @@ - + @@ -3242,7 +3242,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5flipcr.lay mame-0.251+dfsg.1/src/mame/layout/m5flipcr.lay --- mame-0.250+dfsg.1/src/mame/layout/m5flipcr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5flipcr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -86,7 +86,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -654,7 +654,7 @@ - + @@ -694,7 +694,7 @@ - + @@ -714,7 +714,7 @@ - + @@ -734,7 +734,7 @@ - + @@ -754,7 +754,7 @@ - + @@ -774,7 +774,7 @@ - + @@ -794,7 +794,7 @@ - + @@ -834,7 +834,7 @@ - + @@ -874,7 +874,7 @@ - + @@ -894,7 +894,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -1034,7 +1034,7 @@ - + @@ -1094,7 +1094,7 @@ - + @@ -1114,7 +1114,7 @@ - + @@ -1154,7 +1154,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1254,7 +1254,7 @@ - + @@ -1274,7 +1274,7 @@ - + @@ -1314,7 +1314,7 @@ - + @@ -1546,7 +1546,7 @@ - + @@ -1626,7 +1626,7 @@ - + @@ -1646,7 +1646,7 @@ - + @@ -1918,7 +1918,7 @@ - + @@ -2072,7 +2072,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5fortby.lay mame-0.251+dfsg.1/src/mame/layout/m5fortby.lay --- mame-0.250+dfsg.1/src/mame/layout/m5fortby.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5fortby.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -1442,7 +1442,7 @@ - + @@ -1462,7 +1462,7 @@ - + @@ -1482,7 +1482,7 @@ - + @@ -1502,7 +1502,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -2046,7 +2046,7 @@ - + @@ -2202,55 +2202,55 @@ - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5frnzy.lay mame-0.251+dfsg.1/src/mame/layout/m5frnzy.lay --- mame-0.250+dfsg.1/src/mame/layout/m5frnzy.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5frnzy.lay 2022-12-29 14:20:09.000000000 +0000 @@ -150,7 +150,7 @@ - + @@ -318,7 +318,7 @@ - + @@ -338,7 +338,7 @@ - + @@ -358,7 +358,7 @@ - + @@ -1086,7 +1086,7 @@ - + @@ -1154,7 +1154,7 @@ - + @@ -1174,7 +1174,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1238,7 +1238,7 @@ - + @@ -1326,7 +1326,7 @@ - + @@ -1370,7 +1370,7 @@ - + @@ -1390,7 +1390,7 @@ - + @@ -1410,7 +1410,7 @@ - + @@ -1450,7 +1450,7 @@ - + @@ -1538,7 +1538,7 @@ - + @@ -1578,7 +1578,7 @@ - + @@ -1598,7 +1598,7 @@ - + @@ -1618,7 +1618,7 @@ - + @@ -1662,7 +1662,7 @@ - + @@ -1706,7 +1706,7 @@ - + @@ -1750,7 +1750,7 @@ - + @@ -1842,7 +1842,7 @@ - + @@ -1862,7 +1862,7 @@ - + @@ -1906,7 +1906,7 @@ - + @@ -2110,7 +2110,7 @@ - + @@ -2130,7 +2130,7 @@ - + @@ -2150,7 +2150,7 @@ - + @@ -2170,7 +2170,7 @@ - + @@ -2190,7 +2190,7 @@ - + @@ -2210,7 +2210,7 @@ - + @@ -2706,7 +2706,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5funsun.lay mame-0.251+dfsg.1/src/mame/layout/m5funsun.lay --- mame-0.250+dfsg.1/src/mame/layout/m5funsun.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5funsun.lay 2022-12-29 14:20:09.000000000 +0000 @@ -74,7 +74,7 @@ - + @@ -2082,7 +2082,7 @@ - + @@ -3010,7 +3010,7 @@ - + @@ -3030,7 +3030,7 @@ - + @@ -3050,7 +3050,7 @@ - + @@ -3070,7 +3070,7 @@ - + @@ -3090,7 +3090,7 @@ - + @@ -3110,7 +3110,7 @@ - + @@ -3130,7 +3130,7 @@ - + @@ -3150,7 +3150,7 @@ - + @@ -3170,7 +3170,7 @@ - + @@ -3190,7 +3190,7 @@ - + @@ -3210,7 +3210,7 @@ - + @@ -3230,7 +3230,7 @@ - + @@ -3250,7 +3250,7 @@ - + @@ -3270,7 +3270,7 @@ - + @@ -3290,7 +3290,7 @@ - + @@ -3310,7 +3310,7 @@ - + @@ -3330,7 +3330,7 @@ - + @@ -3696,7 +3696,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5gdrag.lay mame-0.251+dfsg.1/src/mame/layout/m5gdrag.lay --- mame-0.250+dfsg.1/src/mame/layout/m5gdrag.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5gdrag.lay 2022-12-29 14:20:09.000000000 +0000 @@ -74,7 +74,7 @@ - + @@ -94,7 +94,7 @@ - + @@ -114,7 +114,7 @@ - + @@ -134,7 +134,7 @@ - + @@ -154,7 +154,7 @@ - + @@ -174,7 +174,7 @@ - + @@ -194,7 +194,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -890,7 +890,7 @@ - + @@ -910,7 +910,7 @@ - + @@ -930,7 +930,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -970,7 +970,7 @@ - + @@ -1150,7 +1150,7 @@ - + @@ -1190,7 +1190,7 @@ - + @@ -1210,7 +1210,7 @@ - + @@ -1230,7 +1230,7 @@ - + @@ -2426,7 +2426,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5ggems20.lay mame-0.251+dfsg.1/src/mame/layout/m5ggems20.lay --- mame-0.250+dfsg.1/src/mame/layout/m5ggems20.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5ggems20.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -2015,7 +2015,7 @@ - + @@ -2049,19 +2049,19 @@ - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5gimmie.lay mame-0.251+dfsg.1/src/mame/layout/m5gimmie.lay --- mame-0.250+dfsg.1/src/mame/layout/m5gimmie.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5gimmie.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -1986,7 +1986,7 @@ - + @@ -2006,7 +2006,7 @@ - + @@ -2026,7 +2026,7 @@ - + @@ -2046,7 +2046,7 @@ - + @@ -2066,7 +2066,7 @@ - + @@ -2086,7 +2086,7 @@ - + @@ -2106,7 +2106,7 @@ - + @@ -2126,7 +2126,7 @@ - + @@ -2146,7 +2146,7 @@ - + @@ -2486,7 +2486,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5grush5.lay mame-0.251+dfsg.1/src/mame/layout/m5grush5.lay --- mame-0.250+dfsg.1/src/mame/layout/m5grush5.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5grush5.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -298,7 +298,7 @@ - + @@ -318,7 +318,7 @@ - + @@ -338,7 +338,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -558,7 +558,7 @@ - + @@ -578,7 +578,7 @@ - + @@ -598,7 +598,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -918,7 +918,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5grush.lay mame-0.251+dfsg.1/src/mame/layout/m5grush.lay --- mame-0.250+dfsg.1/src/mame/layout/m5grush.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5grush.lay 2022-12-29 14:20:09.000000000 +0000 @@ -186,7 +186,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -838,7 +838,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5gsstrk07.lay mame-0.251+dfsg.1/src/mame/layout/m5gsstrk07.lay --- mame-0.250+dfsg.1/src/mame/layout/m5gsstrk07.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5gsstrk07.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -154,7 +154,7 @@ - + @@ -174,7 +174,7 @@ - + @@ -194,7 +194,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -234,7 +234,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -274,7 +274,7 @@ - + @@ -294,7 +294,7 @@ - + @@ -314,7 +314,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -374,7 +374,7 @@ - + @@ -394,7 +394,7 @@ - + @@ -857,7 +857,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5gstrik.lay mame-0.251+dfsg.1/src/mame/layout/m5gstrik.lay --- mame-0.250+dfsg.1/src/mame/layout/m5gstrik.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5gstrik.lay 2022-12-29 14:20:09.000000000 +0000 @@ -78,7 +78,7 @@ - + @@ -102,7 +102,7 @@ - + @@ -122,7 +122,7 @@ - + @@ -322,7 +322,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -370,7 +370,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -414,7 +414,7 @@ - + @@ -434,7 +434,7 @@ - + @@ -482,7 +482,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -2726,7 +2726,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5hellrz.lay mame-0.251+dfsg.1/src/mame/layout/m5hellrz.lay --- mame-0.250+dfsg.1/src/mame/layout/m5hellrz.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5hellrz.lay 2022-12-29 14:20:09.000000000 +0000 @@ -578,7 +578,7 @@ - + @@ -638,7 +638,7 @@ - + @@ -658,7 +658,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -2202,7 +2202,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5hgl14.lay mame-0.251+dfsg.1/src/mame/layout/m5hgl14.lay --- mame-0.250+dfsg.1/src/mame/layout/m5hgl14.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5hgl14.lay 2022-12-29 14:20:09.000000000 +0000 @@ -998,7 +998,7 @@ - + @@ -1018,7 +1018,7 @@ - + @@ -1038,7 +1038,7 @@ - + @@ -1058,7 +1058,7 @@ - + @@ -1078,7 +1078,7 @@ - + @@ -1098,7 +1098,7 @@ - + @@ -1118,7 +1118,7 @@ - + @@ -1718,7 +1718,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5hiclau.lay mame-0.251+dfsg.1/src/mame/layout/m5hiclau.lay --- mame-0.250+dfsg.1/src/mame/layout/m5hiclau.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5hiclau.lay 2022-12-29 14:20:09.000000000 +0000 @@ -110,7 +110,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5hifly.lay mame-0.251+dfsg.1/src/mame/layout/m5hifly.lay --- mame-0.250+dfsg.1/src/mame/layout/m5hifly.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5hifly.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -1762,7 +1762,7 @@ - + @@ -1782,7 +1782,7 @@ - + @@ -1802,7 +1802,7 @@ - + @@ -1822,7 +1822,7 @@ - + @@ -1842,7 +1842,7 @@ - + @@ -1862,7 +1862,7 @@ - + @@ -1882,7 +1882,7 @@ - + @@ -1902,7 +1902,7 @@ - + @@ -1922,7 +1922,7 @@ - + @@ -1942,7 +1942,7 @@ - + @@ -1962,7 +1962,7 @@ - + @@ -1982,7 +1982,7 @@ - + @@ -2142,7 +2142,7 @@ - + @@ -2282,7 +2282,7 @@ - + @@ -2302,7 +2302,7 @@ - + @@ -2322,7 +2322,7 @@ - + @@ -2342,7 +2342,7 @@ - + @@ -2362,7 +2362,7 @@ - + @@ -2382,7 +2382,7 @@ - + @@ -2402,7 +2402,7 @@ - + @@ -2422,7 +2422,7 @@ - + @@ -2442,7 +2442,7 @@ - + @@ -2462,7 +2462,7 @@ - + @@ -2482,7 +2482,7 @@ - + @@ -2502,7 +2502,7 @@ - + @@ -2686,7 +2686,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5hilok.lay mame-0.251+dfsg.1/src/mame/layout/m5hilok.lay --- mame-0.250+dfsg.1/src/mame/layout/m5hilok.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5hilok.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1890,7 +1890,7 @@ - + @@ -1914,7 +1914,7 @@ - + @@ -1934,7 +1934,7 @@ - + @@ -1954,7 +1954,7 @@ - + @@ -1974,7 +1974,7 @@ - + @@ -1994,7 +1994,7 @@ - + @@ -2014,7 +2014,7 @@ - + @@ -2034,7 +2034,7 @@ - + @@ -2054,7 +2054,7 @@ - + @@ -2074,7 +2074,7 @@ - + @@ -2094,7 +2094,7 @@ - + @@ -2114,7 +2114,7 @@ - + @@ -2134,7 +2134,7 @@ - + @@ -2174,7 +2174,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5hisprt.lay mame-0.251+dfsg.1/src/mame/layout/m5hisprt.lay --- mame-0.250+dfsg.1/src/mame/layout/m5hisprt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5hisprt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -906,7 +906,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -1610,7 +1610,7 @@ - + @@ -1850,7 +1850,7 @@ - + @@ -1870,7 +1870,7 @@ - + @@ -1890,7 +1890,7 @@ - + @@ -1910,7 +1910,7 @@ - + @@ -1930,7 +1930,7 @@ - + @@ -1950,7 +1950,7 @@ - + @@ -1970,7 +1970,7 @@ - + @@ -1990,7 +1990,7 @@ - + @@ -2010,7 +2010,7 @@ - + @@ -2310,7 +2310,7 @@ - + @@ -2370,7 +2370,7 @@ - + @@ -2718,7 +2718,7 @@ - + @@ -2738,7 +2738,7 @@ - + @@ -2758,7 +2758,7 @@ - + @@ -2778,7 +2778,7 @@ - + @@ -3022,7 +3022,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5hlsumo.lay mame-0.251+dfsg.1/src/mame/layout/m5hlsumo.lay --- mame-0.250+dfsg.1/src/mame/layout/m5hlsumo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5hlsumo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -430,7 +430,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -670,7 +670,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -730,7 +730,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -770,7 +770,7 @@ - + @@ -790,7 +790,7 @@ - + @@ -810,7 +810,7 @@ - + @@ -830,7 +830,7 @@ - + @@ -850,7 +850,7 @@ - + @@ -870,7 +870,7 @@ - + @@ -2078,7 +2078,7 @@ - + @@ -2098,7 +2098,7 @@ - + @@ -2178,7 +2178,7 @@ - + @@ -2278,7 +2278,7 @@ - + @@ -2398,7 +2398,7 @@ - + @@ -2438,7 +2438,7 @@ - + @@ -2606,7 +2606,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5holy.lay mame-0.251+dfsg.1/src/mame/layout/m5holy.lay --- mame-0.250+dfsg.1/src/mame/layout/m5holy.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5holy.lay 2022-12-29 14:20:09.000000000 +0000 @@ -90,7 +90,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -670,7 +670,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -870,7 +870,7 @@ - + @@ -890,7 +890,7 @@ - + @@ -910,7 +910,7 @@ - + @@ -930,7 +930,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -970,7 +970,7 @@ - + @@ -2090,7 +2090,7 @@ - + @@ -2110,7 +2110,7 @@ - + @@ -2130,7 +2130,7 @@ - + @@ -2150,7 +2150,7 @@ - + @@ -2170,7 +2170,7 @@ - + @@ -2190,7 +2190,7 @@ - + @@ -2230,7 +2230,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5hopidl.lay mame-0.251+dfsg.1/src/mame/layout/m5hopidl.lay --- mame-0.250+dfsg.1/src/mame/layout/m5hopidl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5hopidl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1754,7 +1754,7 @@ - + @@ -1774,7 +1774,7 @@ - + @@ -1794,7 +1794,7 @@ - + @@ -1918,7 +1918,7 @@ - + @@ -1938,7 +1938,7 @@ - + @@ -1998,7 +1998,7 @@ - + @@ -2018,7 +2018,7 @@ - + @@ -2058,7 +2058,7 @@ - + @@ -2502,7 +2502,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5hotslt.lay mame-0.251+dfsg.1/src/mame/layout/m5hotslt.lay --- mame-0.250+dfsg.1/src/mame/layout/m5hotslt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5hotslt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -730,7 +730,7 @@ - + @@ -831,7 +831,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5hotstf.lay mame-0.251+dfsg.1/src/mame/layout/m5hotstf.lay --- mame-0.250+dfsg.1/src/mame/layout/m5hotstf.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5hotstf.lay 2022-12-29 14:20:09.000000000 +0000 @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -770,7 +770,7 @@ - + @@ -2346,7 +2346,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5hypvip.lay mame-0.251+dfsg.1/src/mame/layout/m5hypvip.lay --- mame-0.250+dfsg.1/src/mame/layout/m5hypvip.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5hypvip.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -2630,7 +2630,7 @@ - + @@ -2650,7 +2650,7 @@ - + @@ -2846,7 +2846,7 @@ - + @@ -2866,7 +2866,7 @@ - + @@ -2886,7 +2886,7 @@ - + @@ -2906,7 +2906,7 @@ - + @@ -2926,7 +2926,7 @@ - + @@ -2946,7 +2946,7 @@ - + @@ -2966,7 +2966,7 @@ - + @@ -2986,7 +2986,7 @@ - + @@ -3386,7 +3386,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5jackp2.lay mame-0.251+dfsg.1/src/mame/layout/m5jackp2.lay --- mame-0.250+dfsg.1/src/mame/layout/m5jackp2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5jackp2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -70,7 +70,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -2922,7 +2922,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5jackpt.lay mame-0.251+dfsg.1/src/mame/layout/m5jackpt.lay --- mame-0.250+dfsg.1/src/mame/layout/m5jackpt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5jackpt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -770,7 +770,7 @@ - + @@ -790,7 +790,7 @@ - + @@ -810,7 +810,7 @@ - + @@ -830,7 +830,7 @@ - + @@ -854,7 +854,7 @@ - + @@ -874,7 +874,7 @@ - + @@ -894,7 +894,7 @@ - + @@ -1650,7 +1650,7 @@ - + @@ -1674,7 +1674,7 @@ - + @@ -1766,7 +1766,7 @@ - + @@ -1834,7 +1834,7 @@ - + @@ -1858,7 +1858,7 @@ - + @@ -2050,7 +2050,7 @@ - + @@ -2230,7 +2230,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5jlyjwl.lay mame-0.251+dfsg.1/src/mame/layout/m5jlyjwl.lay --- mame-0.250+dfsg.1/src/mame/layout/m5jlyjwl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5jlyjwl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -1027,37 +1027,37 @@ - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5jmpgem01.lay mame-0.251+dfsg.1/src/mame/layout/m5jmpgem01.lay --- mame-0.250+dfsg.1/src/mame/layout/m5jmpgem01.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5jmpgem01.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -2270,7 +2270,7 @@ - + @@ -2294,7 +2294,7 @@ - + @@ -2314,7 +2314,7 @@ - + @@ -2494,7 +2494,7 @@ - + @@ -2514,7 +2514,7 @@ - + @@ -2534,7 +2534,7 @@ - + @@ -2554,7 +2554,7 @@ - + @@ -2574,7 +2574,7 @@ - + @@ -2594,7 +2594,7 @@ - + @@ -2614,7 +2614,7 @@ - + @@ -2634,7 +2634,7 @@ - + @@ -2654,7 +2654,7 @@ - + @@ -2674,7 +2674,7 @@ - + @@ -2694,7 +2694,7 @@ - + @@ -3094,7 +3094,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5kingqc06.lay mame-0.251+dfsg.1/src/mame/layout/m5kingqc06.lay --- mame-0.250+dfsg.1/src/mame/layout/m5kingqc06.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5kingqc06.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -370,7 +370,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -430,7 +430,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5kkebab.lay mame-0.251+dfsg.1/src/mame/layout/m5kkebab.lay --- mame-0.250+dfsg.1/src/mame/layout/m5kkebab.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5kkebab.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -1826,7 +1826,7 @@ - + @@ -2306,7 +2306,7 @@ - + @@ -2326,7 +2326,7 @@ - + @@ -3070,7 +3070,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5korma.lay mame-0.251+dfsg.1/src/mame/layout/m5korma.lay --- mame-0.250+dfsg.1/src/mame/layout/m5korma.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5korma.lay 2022-12-29 14:20:09.000000000 +0000 @@ -2150,7 +2150,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5loony.lay mame-0.251+dfsg.1/src/mame/layout/m5loony.lay --- mame-0.250+dfsg.1/src/mame/layout/m5loony.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5loony.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -2762,7 +2762,7 @@ - + @@ -3110,73 +3110,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5loot.lay mame-0.251+dfsg.1/src/mame/layout/m5loot.lay --- mame-0.250+dfsg.1/src/mame/layout/m5loot.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5loot.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -516,37 +516,37 @@ - + - + - + - + - + - + @@ -556,7 +556,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5lotta.lay mame-0.251+dfsg.1/src/mame/layout/m5lotta.lay --- mame-0.250+dfsg.1/src/mame/layout/m5lotta.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5lotta.lay 2022-12-29 14:20:09.000000000 +0000 @@ -998,7 +998,7 @@ - + @@ -1018,7 +1018,7 @@ - + @@ -1038,7 +1038,7 @@ - + @@ -1058,7 +1058,7 @@ - + @@ -1078,7 +1078,7 @@ - + @@ -1098,7 +1098,7 @@ - + @@ -1118,7 +1118,7 @@ - + @@ -1718,7 +1718,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5martns07.lay mame-0.251+dfsg.1/src/mame/layout/m5martns07.lay --- mame-0.250+dfsg.1/src/mame/layout/m5martns07.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5martns07.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1214,7 +1214,7 @@ - + @@ -1274,7 +1274,7 @@ - + @@ -1294,7 +1294,7 @@ - + @@ -1434,7 +1434,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -1534,7 +1534,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -2118,7 +2118,7 @@ - + @@ -2138,7 +2138,7 @@ - + @@ -2158,7 +2158,7 @@ - + @@ -2178,7 +2178,7 @@ - + @@ -2198,7 +2198,7 @@ - + @@ -2218,7 +2218,7 @@ - + @@ -2238,7 +2238,7 @@ - + @@ -2258,7 +2258,7 @@ - + @@ -2278,7 +2278,7 @@ - + @@ -2298,7 +2298,7 @@ - + @@ -2318,7 +2318,7 @@ - + @@ -2338,7 +2338,7 @@ - + @@ -2358,7 +2358,7 @@ - + @@ -2378,7 +2378,7 @@ - + @@ -2962,7 +2962,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5mega.lay mame-0.251+dfsg.1/src/mame/layout/m5mega.lay --- mame-0.250+dfsg.1/src/mame/layout/m5mega.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5mega.lay 2022-12-29 14:20:09.000000000 +0000 @@ -590,7 +590,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -670,7 +670,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -730,7 +730,7 @@ - + @@ -810,7 +810,7 @@ - + @@ -850,7 +850,7 @@ - + @@ -1794,7 +1794,7 @@ - + @@ -1814,7 +1814,7 @@ - + @@ -1834,7 +1834,7 @@ - + @@ -1854,7 +1854,7 @@ - + @@ -1874,7 +1874,7 @@ - + @@ -2878,7 +2878,7 @@ - + @@ -3314,7 +3314,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5mmak06.lay mame-0.251+dfsg.1/src/mame/layout/m5mmak06.lay --- mame-0.250+dfsg.1/src/mame/layout/m5mmak06.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5mmak06.lay 2022-12-29 14:20:09.000000000 +0000 @@ -550,7 +550,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -730,7 +730,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -770,7 +770,7 @@ - + @@ -810,7 +810,7 @@ - + @@ -830,7 +830,7 @@ - + @@ -850,7 +850,7 @@ - + @@ -870,7 +870,7 @@ - + @@ -890,7 +890,7 @@ - + @@ -910,7 +910,7 @@ - + @@ -930,7 +930,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -970,7 +970,7 @@ - + @@ -990,7 +990,7 @@ - + @@ -1218,7 +1218,7 @@ - + @@ -1238,7 +1238,7 @@ - + @@ -1258,7 +1258,7 @@ - + @@ -1278,7 +1278,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1318,7 +1318,7 @@ - + @@ -1338,7 +1338,7 @@ - + @@ -1358,7 +1358,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5monmst.lay mame-0.251+dfsg.1/src/mame/layout/m5monmst.lay --- mame-0.250+dfsg.1/src/mame/layout/m5monmst.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5monmst.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + @@ -74,7 +74,7 @@ - + @@ -94,7 +94,7 @@ - + @@ -118,7 +118,7 @@ - + @@ -142,7 +142,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -278,7 +278,7 @@ - + @@ -3174,7 +3174,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5mpfc.lay mame-0.251+dfsg.1/src/mame/layout/m5mpfc.lay --- mame-0.250+dfsg.1/src/mame/layout/m5mpfc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5mpfc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -546,7 +546,7 @@ - + @@ -1218,7 +1218,7 @@ - + @@ -1238,7 +1238,7 @@ - + @@ -1258,7 +1258,7 @@ - + @@ -1278,7 +1278,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1318,7 +1318,7 @@ - + @@ -1338,7 +1338,7 @@ - + @@ -1358,7 +1358,7 @@ - + @@ -1378,7 +1378,7 @@ - + @@ -1398,7 +1398,7 @@ - + @@ -1418,7 +1418,7 @@ - + @@ -1438,7 +1438,7 @@ - + @@ -1458,7 +1458,7 @@ - + @@ -1710,7 +1710,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5mprio.lay mame-0.251+dfsg.1/src/mame/layout/m5mprio.lay --- mame-0.250+dfsg.1/src/mame/layout/m5mprio.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5mprio.lay 2022-12-29 14:20:09.000000000 +0000 @@ -438,7 +438,7 @@ - + @@ -558,7 +558,7 @@ - + @@ -578,7 +578,7 @@ - + @@ -598,7 +598,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -638,7 +638,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -1010,7 +1010,7 @@ - + @@ -1160,7 +1160,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5neptun.lay mame-0.251+dfsg.1/src/mame/layout/m5neptun.lay --- mame-0.250+dfsg.1/src/mame/layout/m5neptun.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5neptun.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1414,7 +1414,7 @@ - + @@ -1434,7 +1434,7 @@ - + @@ -1454,7 +1454,7 @@ - + @@ -1474,7 +1474,7 @@ - + @@ -1494,7 +1494,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -1534,7 +1534,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -1794,7 +1794,7 @@ - + @@ -1814,7 +1814,7 @@ - + @@ -1834,7 +1834,7 @@ - + @@ -1854,7 +1854,7 @@ - + @@ -1874,7 +1874,7 @@ - + @@ -1894,7 +1894,7 @@ - + @@ -1914,7 +1914,7 @@ - + @@ -1934,7 +1934,7 @@ - + @@ -1954,7 +1954,7 @@ - + @@ -1974,7 +1974,7 @@ - + @@ -1994,7 +1994,7 @@ - + @@ -2014,7 +2014,7 @@ - + @@ -2034,7 +2034,7 @@ - + @@ -2058,7 +2058,7 @@ - + @@ -2150,7 +2150,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5nnww.lay mame-0.251+dfsg.1/src/mame/layout/m5nnww.lay --- mame-0.250+dfsg.1/src/mame/layout/m5nnww.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5nnww.lay 2022-12-29 14:20:09.000000000 +0000 @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -955,7 +955,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5oohaah.lay mame-0.251+dfsg.1/src/mame/layout/m5oohaah.lay --- mame-0.250+dfsg.1/src/mame/layout/m5oohaah.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5oohaah.lay 2022-12-29 14:20:09.000000000 +0000 @@ -230,7 +230,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -370,7 +370,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -818,7 +818,7 @@ - + @@ -838,7 +838,7 @@ - + @@ -858,7 +858,7 @@ - + @@ -878,7 +878,7 @@ - + @@ -898,7 +898,7 @@ - + @@ -1666,7 +1666,7 @@ - + @@ -1686,7 +1686,7 @@ - + @@ -1706,7 +1706,7 @@ - + @@ -1726,7 +1726,7 @@ - + @@ -1746,7 +1746,7 @@ - + @@ -1766,7 +1766,7 @@ - + @@ -1786,7 +1786,7 @@ - + @@ -1806,7 +1806,7 @@ - + @@ -1826,7 +1826,7 @@ - + @@ -1886,7 +1886,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5oohrio.lay mame-0.251+dfsg.1/src/mame/layout/m5oohrio.lay --- mame-0.250+dfsg.1/src/mame/layout/m5oohrio.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5oohrio.lay 2022-12-29 14:20:09.000000000 +0000 @@ -126,7 +126,7 @@ - + @@ -178,7 +178,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -282,7 +282,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -438,7 +438,7 @@ - + @@ -698,7 +698,7 @@ - + @@ -718,7 +718,7 @@ - + @@ -738,7 +738,7 @@ - + @@ -758,7 +758,7 @@ - + @@ -778,7 +778,7 @@ - + @@ -798,7 +798,7 @@ - + @@ -1002,7 +1002,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5openbx05.lay mame-0.251+dfsg.1/src/mame/layout/m5openbx05.lay --- mame-0.250+dfsg.1/src/mame/layout/m5openbx05.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5openbx05.lay 2022-12-29 14:20:09.000000000 +0000 @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -430,7 +430,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -658,7 +658,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -722,7 +722,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -1278,7 +1278,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5overld.lay mame-0.251+dfsg.1/src/mame/layout/m5overld.lay --- mame-0.250+dfsg.1/src/mame/layout/m5overld.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5overld.lay 2022-12-29 14:20:09.000000000 +0000 @@ -130,7 +130,7 @@ - + @@ -298,7 +298,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -382,7 +382,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -438,7 +438,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -1490,7 +1490,7 @@ - + @@ -1590,7 +1590,7 @@ - + @@ -1690,7 +1690,7 @@ - + @@ -1710,7 +1710,7 @@ - + @@ -2094,7 +2094,7 @@ - + @@ -2178,7 +2178,7 @@ - + @@ -2262,7 +2262,7 @@ - + @@ -2302,7 +2302,7 @@ - + @@ -2342,7 +2342,7 @@ - + @@ -2654,7 +2654,7 @@ - + @@ -3390,7 +3390,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5peepsh.lay mame-0.251+dfsg.1/src/mame/layout/m5peepsh.lay --- mame-0.250+dfsg.1/src/mame/layout/m5peepsh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5peepsh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -2110,7 +2110,7 @@ - + @@ -2130,7 +2130,7 @@ - + @@ -2150,7 +2150,7 @@ - + @@ -2170,7 +2170,7 @@ - + @@ -2190,7 +2190,7 @@ - + @@ -2230,7 +2230,7 @@ - + @@ -2250,7 +2250,7 @@ - + @@ -2270,7 +2270,7 @@ - + @@ -2290,7 +2290,7 @@ - + @@ -2310,7 +2310,7 @@ - + @@ -2330,7 +2330,7 @@ - + @@ -2350,7 +2350,7 @@ - + @@ -2370,7 +2370,7 @@ - + @@ -2390,7 +2390,7 @@ - + @@ -2410,7 +2410,7 @@ - + @@ -2430,7 +2430,7 @@ - + @@ -2450,7 +2450,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5piefac.lay mame-0.251+dfsg.1/src/mame/layout/m5piefac.lay --- mame-0.250+dfsg.1/src/mame/layout/m5piefac.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5piefac.lay 2022-12-29 14:20:09.000000000 +0000 @@ -346,15 +346,15 @@ - + - + - + @@ -1806,7 +1806,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5piefcr.lay mame-0.251+dfsg.1/src/mame/layout/m5piefcr.lay --- mame-0.250+dfsg.1/src/mame/layout/m5piefcr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5piefcr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -350,7 +350,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5ppussy.lay mame-0.251+dfsg.1/src/mame/layout/m5ppussy.lay --- mame-0.250+dfsg.1/src/mame/layout/m5ppussy.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5ppussy.lay 2022-12-29 14:20:09.000000000 +0000 @@ -290,7 +290,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -454,7 +454,7 @@ - + @@ -542,7 +542,7 @@ - + @@ -582,7 +582,7 @@ - + @@ -602,7 +602,7 @@ - + @@ -622,7 +622,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -906,7 +906,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1226,7 +1226,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5psyccl01.lay mame-0.251+dfsg.1/src/mame/layout/m5psyccl01.lay --- mame-0.250+dfsg.1/src/mame/layout/m5psyccl01.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5psyccl01.lay 2022-12-29 14:20:09.000000000 +0000 @@ -650,7 +650,7 @@ - + @@ -1342,7 +1342,7 @@ - + @@ -1406,7 +1406,7 @@ - + @@ -1590,7 +1590,7 @@ - + @@ -1654,7 +1654,7 @@ - + @@ -1694,7 +1694,7 @@ - + @@ -1738,7 +1738,7 @@ - + @@ -1802,7 +1802,7 @@ - + @@ -1890,7 +1890,7 @@ - + @@ -1950,7 +1950,7 @@ - + @@ -2014,7 +2014,7 @@ - + @@ -2054,7 +2054,7 @@ - + @@ -2098,7 +2098,7 @@ - + @@ -2158,7 +2158,7 @@ - + @@ -2198,7 +2198,7 @@ - + @@ -2238,7 +2238,7 @@ - + @@ -2322,7 +2322,7 @@ - + @@ -2366,7 +2366,7 @@ - + @@ -2386,7 +2386,7 @@ - + @@ -2406,7 +2406,7 @@ - + @@ -2426,7 +2426,7 @@ - + @@ -2446,7 +2446,7 @@ - + @@ -2466,7 +2466,7 @@ - + @@ -2486,7 +2486,7 @@ - + @@ -2506,7 +2506,7 @@ - + @@ -2526,7 +2526,7 @@ - + @@ -2546,7 +2546,7 @@ - + @@ -2566,7 +2566,7 @@ - + @@ -2586,7 +2586,7 @@ - + @@ -2606,7 +2606,7 @@ - + @@ -2626,7 +2626,7 @@ - + @@ -2646,7 +2646,7 @@ - + @@ -2666,7 +2666,7 @@ - + @@ -2826,7 +2826,7 @@ - + @@ -2846,7 +2846,7 @@ - + @@ -2866,7 +2866,7 @@ - + @@ -2886,7 +2886,7 @@ - + @@ -2906,7 +2906,7 @@ - + @@ -3126,7 +3126,7 @@ - + @@ -3661,75 +3661,75 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5psycho.lay mame-0.251+dfsg.1/src/mame/layout/m5psycho.lay --- mame-0.250+dfsg.1/src/mame/layout/m5psycho.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5psycho.lay 2022-12-29 14:20:09.000000000 +0000 @@ -158,7 +158,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -1094,7 +1094,7 @@ - + @@ -1162,7 +1162,7 @@ - + @@ -1182,7 +1182,7 @@ - + @@ -1202,7 +1202,7 @@ - + @@ -1246,7 +1246,7 @@ - + @@ -1334,7 +1334,7 @@ - + @@ -1378,7 +1378,7 @@ - + @@ -1398,7 +1398,7 @@ - + @@ -1418,7 +1418,7 @@ - + @@ -1458,7 +1458,7 @@ - + @@ -1546,7 +1546,7 @@ - + @@ -1586,7 +1586,7 @@ - + @@ -1606,7 +1606,7 @@ - + @@ -1626,7 +1626,7 @@ - + @@ -1670,7 +1670,7 @@ - + @@ -1714,7 +1714,7 @@ - + @@ -1758,7 +1758,7 @@ - + @@ -1850,7 +1850,7 @@ - + @@ -1870,7 +1870,7 @@ - + @@ -1914,7 +1914,7 @@ - + @@ -2118,7 +2118,7 @@ - + @@ -2138,7 +2138,7 @@ - + @@ -2158,7 +2158,7 @@ - + @@ -2178,7 +2178,7 @@ - + @@ -2198,7 +2198,7 @@ - + @@ -2218,7 +2218,7 @@ - + @@ -2714,7 +2714,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5ptyani.lay mame-0.251+dfsg.1/src/mame/layout/m5ptyani.lay --- mame-0.250+dfsg.1/src/mame/layout/m5ptyani.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5ptyani.lay 2022-12-29 14:20:09.000000000 +0000 @@ -402,7 +402,7 @@ - + @@ -454,7 +454,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -598,7 +598,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -654,7 +654,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -2190,7 +2190,7 @@ - + @@ -2210,7 +2210,7 @@ - + @@ -2250,7 +2250,7 @@ - + @@ -2270,7 +2270,7 @@ - + @@ -2330,7 +2330,7 @@ - + @@ -2370,7 +2370,7 @@ - + @@ -2390,7 +2390,7 @@ - + @@ -2430,7 +2430,7 @@ - + @@ -2470,7 +2470,7 @@ - + @@ -2510,7 +2510,7 @@ - + @@ -2570,7 +2570,7 @@ - + @@ -2630,7 +2630,7 @@ - + @@ -2650,7 +2650,7 @@ - + @@ -2790,7 +2790,7 @@ - + @@ -3030,7 +3030,7 @@ - + @@ -3140,19 +3140,19 @@ - + - + - + @@ -3166,7 +3166,7 @@ - + @@ -3208,37 +3208,37 @@ - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5qdrawb.lay mame-0.251+dfsg.1/src/mame/layout/m5qdrawb.lay --- mame-0.250+dfsg.1/src/mame/layout/m5qdrawb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5qdrawb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -958,7 +958,7 @@ - + @@ -982,7 +982,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1030,7 +1030,7 @@ - + @@ -1054,7 +1054,7 @@ - + @@ -1078,7 +1078,7 @@ - + @@ -1102,7 +1102,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1250,7 +1250,7 @@ - + @@ -1270,7 +1270,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -1310,7 +1310,7 @@ - + @@ -1330,7 +1330,7 @@ - + @@ -1350,7 +1350,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5qshot04.lay mame-0.251+dfsg.1/src/mame/layout/m5qshot04.lay --- mame-0.250+dfsg.1/src/mame/layout/m5qshot04.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5qshot04.lay 2022-12-29 14:20:09.000000000 +0000 @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -827,37 +827,37 @@ - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5ratpka.lay mame-0.251+dfsg.1/src/mame/layout/m5ratpka.lay --- mame-0.250+dfsg.1/src/mame/layout/m5ratpka.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5ratpka.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -3334,7 +3334,7 @@ - + @@ -3354,7 +3354,7 @@ - + @@ -3374,7 +3374,7 @@ - + @@ -3394,7 +3394,7 @@ - + @@ -3414,7 +3414,7 @@ - + @@ -3434,7 +3434,7 @@ - + @@ -3454,7 +3454,7 @@ - + @@ -3474,7 +3474,7 @@ - + @@ -3494,7 +3494,7 @@ - + @@ -3854,7 +3854,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5razdz10.lay mame-0.251+dfsg.1/src/mame/layout/m5razdz10.lay --- mame-0.250+dfsg.1/src/mame/layout/m5razdz10.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5razdz10.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -774,7 +774,7 @@ - + @@ -794,7 +794,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -834,7 +834,7 @@ - + @@ -854,7 +854,7 @@ - + @@ -874,7 +874,7 @@ - + @@ -894,7 +894,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -954,7 +954,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1034,7 +1034,7 @@ - + @@ -1054,7 +1054,7 @@ - + @@ -1074,7 +1074,7 @@ - + @@ -1114,7 +1114,7 @@ - + @@ -1134,7 +1134,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5redbal.lay mame-0.251+dfsg.1/src/mame/layout/m5redbal.lay --- mame-0.250+dfsg.1/src/mame/layout/m5redbal.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5redbal.lay 2022-12-29 14:20:09.000000000 +0000 @@ -234,7 +234,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -274,7 +274,7 @@ - + @@ -294,7 +294,7 @@ - + @@ -314,7 +314,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -374,7 +374,7 @@ - + @@ -394,7 +394,7 @@ - + @@ -414,7 +414,7 @@ - + @@ -434,7 +434,7 @@ - + @@ -454,7 +454,7 @@ - + @@ -474,7 +474,7 @@ - + @@ -494,7 +494,7 @@ - + @@ -514,7 +514,7 @@ - + @@ -534,7 +534,7 @@ - + @@ -554,7 +554,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -594,7 +594,7 @@ - + @@ -614,7 +614,7 @@ - + @@ -634,7 +634,7 @@ - + @@ -654,7 +654,7 @@ - + @@ -674,7 +674,7 @@ - + @@ -694,7 +694,7 @@ - + @@ -714,7 +714,7 @@ - + @@ -734,7 +734,7 @@ - + @@ -754,7 +754,7 @@ - + @@ -774,7 +774,7 @@ - + @@ -794,7 +794,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -834,7 +834,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5redrcka.lay mame-0.251+dfsg.1/src/mame/layout/m5redrcka.lay --- mame-0.250+dfsg.1/src/mame/layout/m5redrcka.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5redrcka.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -370,7 +370,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -430,7 +430,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -770,7 +770,7 @@ - + @@ -794,7 +794,7 @@ - + @@ -818,7 +818,7 @@ - + @@ -842,7 +842,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -890,7 +890,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1262,7 +1262,7 @@ - + @@ -2626,7 +2626,7 @@ - + @@ -2646,7 +2646,7 @@ - + @@ -2666,7 +2666,7 @@ - + @@ -2686,7 +2686,7 @@ - + @@ -2706,7 +2706,7 @@ - + @@ -2726,7 +2726,7 @@ - + @@ -2746,7 +2746,7 @@ - + @@ -2766,7 +2766,7 @@ - + @@ -3154,7 +3154,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5resfrg.lay mame-0.251+dfsg.1/src/mame/layout/m5resfrg.lay --- mame-0.250+dfsg.1/src/mame/layout/m5resfrg.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5resfrg.lay 2022-12-29 14:20:09.000000000 +0000 @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -906,7 +906,7 @@ - + @@ -2250,7 +2250,7 @@ - + @@ -2270,7 +2270,7 @@ - + @@ -2290,7 +2290,7 @@ - + @@ -2310,7 +2310,7 @@ - + @@ -2330,7 +2330,7 @@ - + @@ -2750,7 +2750,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5revo13.lay mame-0.251+dfsg.1/src/mame/layout/m5revo13.lay --- mame-0.250+dfsg.1/src/mame/layout/m5revo13.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5revo13.lay 2022-12-29 14:20:09.000000000 +0000 @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -878,7 +878,7 @@ - + @@ -898,7 +898,7 @@ - + @@ -918,7 +918,7 @@ - + @@ -938,7 +938,7 @@ - + @@ -958,7 +958,7 @@ - + @@ -978,7 +978,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1018,7 +1018,7 @@ - + @@ -1262,7 +1262,7 @@ - + @@ -1282,7 +1282,7 @@ - + @@ -1302,7 +1302,7 @@ - + @@ -1322,7 +1322,7 @@ - + @@ -1342,7 +1342,7 @@ - + @@ -1362,7 +1362,7 @@ - + @@ -1382,7 +1382,7 @@ - + @@ -1402,7 +1402,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -1442,7 +1442,7 @@ - + @@ -1462,7 +1462,7 @@ - + @@ -1482,7 +1482,7 @@ - + @@ -1502,7 +1502,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -1542,7 +1542,7 @@ - + @@ -1562,7 +1562,7 @@ - + @@ -1582,7 +1582,7 @@ - + @@ -1602,7 +1602,7 @@ - + @@ -1622,7 +1622,7 @@ - + @@ -1642,7 +1642,7 @@ - + @@ -1662,7 +1662,7 @@ - + @@ -1682,7 +1682,7 @@ - + @@ -2014,7 +2014,7 @@ - + @@ -2034,7 +2034,7 @@ - + @@ -2318,7 +2318,7 @@ - + @@ -2550,7 +2550,7 @@ - + @@ -2660,55 +2660,55 @@ - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5rfymc.lay mame-0.251+dfsg.1/src/mame/layout/m5rfymc.lay --- mame-0.250+dfsg.1/src/mame/layout/m5rfymc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5rfymc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -810,7 +810,7 @@ - + @@ -850,7 +850,7 @@ - + @@ -874,7 +874,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -1391,7 +1391,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5rgclb12.lay mame-0.251+dfsg.1/src/mame/layout/m5rgclb12.lay --- mame-0.250+dfsg.1/src/mame/layout/m5rgclb12.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5rgclb12.lay 2022-12-29 14:20:09.000000000 +0000 @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -1044,97 +1044,97 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5rhrgt02.lay mame-0.251+dfsg.1/src/mame/layout/m5rhrgt02.lay --- mame-0.250+dfsg.1/src/mame/layout/m5rhrgt02.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5rhrgt02.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -357,37 +357,37 @@ - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5ritj.lay mame-0.251+dfsg.1/src/mame/layout/m5ritj.lay --- mame-0.250+dfsg.1/src/mame/layout/m5ritj.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5ritj.lay 2022-12-29 14:20:09.000000000 +0000 @@ -126,7 +126,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -734,7 +734,7 @@ - + @@ -774,7 +774,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -1418,7 +1418,7 @@ - + @@ -1438,7 +1438,7 @@ - + @@ -1458,7 +1458,7 @@ - + @@ -1478,7 +1478,7 @@ - + @@ -1498,7 +1498,7 @@ - + @@ -1518,7 +1518,7 @@ - + @@ -1698,7 +1698,7 @@ - + @@ -1718,7 +1718,7 @@ - + @@ -1738,7 +1738,7 @@ - + @@ -2386,7 +2386,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5rollup.lay mame-0.251+dfsg.1/src/mame/layout/m5rollup.lay --- mame-0.250+dfsg.1/src/mame/layout/m5rollup.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5rollup.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -380,37 +380,37 @@ - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5rthh.lay mame-0.251+dfsg.1/src/mame/layout/m5rthh.lay --- mame-0.250+dfsg.1/src/mame/layout/m5rthh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5rthh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + @@ -138,7 +138,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -234,7 +234,7 @@ - + @@ -258,7 +258,7 @@ - + @@ -282,7 +282,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -1946,7 +1946,7 @@ - + @@ -3982,7 +3982,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5rub.lay mame-0.251+dfsg.1/src/mame/layout/m5rub.lay --- mame-0.250+dfsg.1/src/mame/layout/m5rub.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5rub.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -378,7 +378,7 @@ - + @@ -398,7 +398,7 @@ - + @@ -418,7 +418,7 @@ - + @@ -438,7 +438,7 @@ - + @@ -458,7 +458,7 @@ - + @@ -478,7 +478,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -862,7 +862,7 @@ - + @@ -882,7 +882,7 @@ - + @@ -902,7 +902,7 @@ - + @@ -1152,7 +1152,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5rwb.lay mame-0.251+dfsg.1/src/mame/layout/m5rwb.lay --- mame-0.250+dfsg.1/src/mame/layout/m5rwb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5rwb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -110,7 +110,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -210,7 +210,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5scharg.lay mame-0.251+dfsg.1/src/mame/layout/m5scharg.lay --- mame-0.250+dfsg.1/src/mame/layout/m5scharg.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5scharg.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -754,7 +754,7 @@ - + @@ -778,7 +778,7 @@ - + @@ -798,7 +798,7 @@ - + @@ -818,7 +818,7 @@ - + @@ -838,7 +838,7 @@ - + @@ -858,7 +858,7 @@ - + @@ -878,7 +878,7 @@ - + @@ -898,7 +898,7 @@ - + @@ -918,7 +918,7 @@ - + @@ -938,7 +938,7 @@ - + @@ -958,7 +958,7 @@ - + @@ -978,7 +978,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1078,7 +1078,7 @@ - + @@ -1098,7 +1098,7 @@ - + @@ -1118,7 +1118,7 @@ - + @@ -1138,7 +1138,7 @@ - + @@ -1158,7 +1158,7 @@ - + @@ -1178,7 +1178,7 @@ - + @@ -1198,7 +1198,7 @@ - + @@ -1218,7 +1218,7 @@ - + @@ -1238,7 +1238,7 @@ - + @@ -1258,7 +1258,7 @@ - + @@ -1458,7 +1458,7 @@ - + @@ -1622,7 +1622,7 @@ - + @@ -1834,7 +1834,7 @@ - + @@ -2154,7 +2154,7 @@ - + @@ -2338,7 +2338,7 @@ - + @@ -2358,7 +2358,7 @@ - + @@ -2378,7 +2378,7 @@ - + @@ -2398,7 +2398,7 @@ - + @@ -2754,7 +2754,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5seven.lay mame-0.251+dfsg.1/src/mame/layout/m5seven.lay --- mame-0.250+dfsg.1/src/mame/layout/m5seven.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5seven.lay 2022-12-29 14:20:09.000000000 +0000 @@ -246,7 +246,7 @@ - + @@ -298,7 +298,7 @@ - + @@ -382,7 +382,7 @@ - + @@ -434,7 +434,7 @@ - + @@ -518,7 +518,7 @@ - + @@ -538,7 +538,7 @@ - + @@ -558,7 +558,7 @@ - + @@ -578,7 +578,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -658,7 +658,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -698,7 +698,7 @@ - + @@ -718,7 +718,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5shark.lay mame-0.251+dfsg.1/src/mame/layout/m5shark.lay --- mame-0.250+dfsg.1/src/mame/layout/m5shark.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5shark.lay 2022-12-29 14:20:09.000000000 +0000 @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -842,7 +842,7 @@ - + @@ -3506,7 +3506,7 @@ - + @@ -3824,7 +3824,7 @@ - + @@ -3852,7 +3852,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5sheik.lay mame-0.251+dfsg.1/src/mame/layout/m5sheik.lay --- mame-0.250+dfsg.1/src/mame/layout/m5sheik.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5sheik.lay 2022-12-29 14:20:09.000000000 +0000 @@ -874,7 +874,7 @@ - + @@ -894,7 +894,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -954,7 +954,7 @@ - + @@ -978,7 +978,7 @@ - + @@ -1018,7 +1018,7 @@ - + @@ -1038,7 +1038,7 @@ - + @@ -1058,7 +1058,7 @@ - + @@ -1078,7 +1078,7 @@ - + @@ -1098,7 +1098,7 @@ - + @@ -1118,7 +1118,7 @@ - + @@ -1138,7 +1138,7 @@ - + @@ -1258,7 +1258,7 @@ - + @@ -1302,7 +1302,7 @@ - + @@ -1326,7 +1326,7 @@ - + @@ -1398,7 +1398,7 @@ - + @@ -1470,7 +1470,7 @@ - + @@ -1494,7 +1494,7 @@ - + @@ -1566,7 +1566,7 @@ - + @@ -2402,7 +2402,7 @@ - + @@ -2482,7 +2482,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5skulcl20.lay mame-0.251+dfsg.1/src/mame/layout/m5skulcl20.lay --- mame-0.250+dfsg.1/src/mame/layout/m5skulcl20.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5skulcl20.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -1454,7 +1454,7 @@ - + @@ -1474,7 +1474,7 @@ - + @@ -1494,7 +1494,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -1534,7 +1534,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1594,7 +1594,7 @@ - + @@ -1614,7 +1614,7 @@ - + @@ -1634,7 +1634,7 @@ - + @@ -1654,7 +1654,7 @@ - + @@ -1674,7 +1674,7 @@ - + @@ -1694,7 +1694,7 @@ - + @@ -1714,7 +1714,7 @@ - + @@ -1734,7 +1734,7 @@ - + @@ -1754,7 +1754,7 @@ - + @@ -1774,7 +1774,7 @@ - + @@ -1894,7 +1894,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5sondra.lay mame-0.251+dfsg.1/src/mame/layout/m5sondra.lay --- mame-0.250+dfsg.1/src/mame/layout/m5sondra.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5sondra.lay 2022-12-29 14:20:09.000000000 +0000 @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -2462,7 +2462,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5speccl.lay mame-0.251+dfsg.1/src/mame/layout/m5speccl.lay --- mame-0.250+dfsg.1/src/mame/layout/m5speccl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5speccl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -30,7 +30,7 @@ - + @@ -54,7 +54,7 @@ - + @@ -78,7 +78,7 @@ - + @@ -102,7 +102,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -174,7 +174,7 @@ - + @@ -198,7 +198,7 @@ - + @@ -222,7 +222,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -294,7 +294,7 @@ - + @@ -318,7 +318,7 @@ - + @@ -342,7 +342,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -430,7 +430,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -670,7 +670,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -730,7 +730,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -770,7 +770,7 @@ - + @@ -790,7 +790,7 @@ - + @@ -810,7 +810,7 @@ - + @@ -834,7 +834,7 @@ - + @@ -858,7 +858,7 @@ - + @@ -878,7 +878,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5spiker.lay mame-0.251+dfsg.1/src/mame/layout/m5spiker.lay --- mame-0.250+dfsg.1/src/mame/layout/m5spiker.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5spiker.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1898,7 +1898,7 @@ - + @@ -1918,7 +1918,7 @@ - + @@ -1938,7 +1938,7 @@ - + @@ -1958,7 +1958,7 @@ - + @@ -1978,7 +1978,7 @@ - + @@ -1998,7 +1998,7 @@ - + @@ -2018,7 +2018,7 @@ - + @@ -2038,7 +2038,7 @@ - + @@ -2058,7 +2058,7 @@ - + @@ -2106,7 +2106,7 @@ - + @@ -2126,7 +2126,7 @@ - + @@ -2166,7 +2166,7 @@ - + @@ -2354,7 +2354,7 @@ - + @@ -2374,7 +2374,7 @@ - + @@ -2394,7 +2394,7 @@ - + @@ -2414,7 +2414,7 @@ - + @@ -2434,7 +2434,7 @@ - + @@ -2454,7 +2454,7 @@ - + @@ -2474,7 +2474,7 @@ - + @@ -2494,7 +2494,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5spins.lay mame-0.251+dfsg.1/src/mame/layout/m5spins.lay --- mame-0.250+dfsg.1/src/mame/layout/m5spins.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5spins.lay 2022-12-29 14:20:09.000000000 +0000 @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -974,7 +974,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5squids06.lay mame-0.251+dfsg.1/src/mame/layout/m5squids06.lay --- mame-0.250+dfsg.1/src/mame/layout/m5squids06.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5squids06.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1554,7 +1554,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1594,7 +1594,7 @@ - + @@ -1614,7 +1614,7 @@ - + @@ -1794,7 +1794,7 @@ - + @@ -1814,7 +1814,7 @@ - + @@ -1834,7 +1834,7 @@ - + @@ -1854,7 +1854,7 @@ - + @@ -1874,7 +1874,7 @@ - + @@ -1894,7 +1894,7 @@ - + @@ -1914,7 +1914,7 @@ - + @@ -1934,7 +1934,7 @@ - + @@ -2706,7 +2706,7 @@ - + @@ -2726,7 +2726,7 @@ - + @@ -2746,7 +2746,7 @@ - + @@ -2766,7 +2766,7 @@ - + @@ -2786,7 +2786,7 @@ - + @@ -2806,7 +2806,7 @@ - + @@ -2826,7 +2826,7 @@ - + @@ -2846,7 +2846,7 @@ - + @@ -2866,7 +2866,7 @@ - + @@ -3226,7 +3226,7 @@ - + @@ -3246,7 +3246,7 @@ - + @@ -3266,7 +3266,7 @@ - + @@ -3286,7 +3286,7 @@ - + @@ -3306,7 +3306,7 @@ - + @@ -3326,7 +3326,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5sstrk.lay mame-0.251+dfsg.1/src/mame/layout/m5sstrk.lay --- mame-0.250+dfsg.1/src/mame/layout/m5sstrk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5sstrk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -178,7 +178,7 @@ - + @@ -198,7 +198,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -238,7 +238,7 @@ - + @@ -258,7 +258,7 @@ - + @@ -278,7 +278,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5starcl.lay mame-0.251+dfsg.1/src/mame/layout/m5starcl.lay --- mame-0.250+dfsg.1/src/mame/layout/m5starcl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5starcl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -498,7 +498,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5stars26.lay mame-0.251+dfsg.1/src/mame/layout/m5stars26.lay --- mame-0.250+dfsg.1/src/mame/layout/m5stars26.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5stars26.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -470,7 +470,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5stax.lay mame-0.251+dfsg.1/src/mame/layout/m5stax.lay --- mame-0.250+dfsg.1/src/mame/layout/m5stax.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5stax.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -478,7 +478,7 @@ - + @@ -658,7 +658,7 @@ - + @@ -758,7 +758,7 @@ - + @@ -778,7 +778,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -1366,43 +1366,43 @@ - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5supnov.lay mame-0.251+dfsg.1/src/mame/layout/m5supnov.lay --- mame-0.250+dfsg.1/src/mame/layout/m5supnov.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5supnov.lay 2022-12-29 14:20:09.000000000 +0000 @@ -962,7 +962,7 @@ - + @@ -982,7 +982,7 @@ - + @@ -1002,7 +1002,7 @@ - + @@ -1022,7 +1022,7 @@ - + @@ -1042,7 +1042,7 @@ - + @@ -1062,7 +1062,7 @@ - + @@ -1082,7 +1082,7 @@ - + @@ -1102,7 +1102,7 @@ - + @@ -1122,7 +1122,7 @@ - + @@ -1142,7 +1142,7 @@ - + @@ -1162,7 +1162,7 @@ - + @@ -1182,7 +1182,7 @@ - + @@ -1202,7 +1202,7 @@ - + @@ -1222,7 +1222,7 @@ - + @@ -1262,7 +1262,7 @@ - + @@ -1282,7 +1282,7 @@ - + @@ -1302,7 +1302,7 @@ - + @@ -1322,7 +1322,7 @@ - + @@ -1342,7 +1342,7 @@ - + @@ -1362,7 +1362,7 @@ - + @@ -1382,7 +1382,7 @@ - + @@ -1402,7 +1402,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -2582,7 +2582,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5supro.lay mame-0.251+dfsg.1/src/mame/layout/m5supro.lay --- mame-0.250+dfsg.1/src/mame/layout/m5supro.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5supro.lay 2022-12-29 14:20:09.000000000 +0000 @@ -106,7 +106,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5tbird.lay mame-0.251+dfsg.1/src/mame/layout/m5tbird.lay --- mame-0.250+dfsg.1/src/mame/layout/m5tbird.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5tbird.lay 2022-12-29 14:20:09.000000000 +0000 @@ -166,7 +166,7 @@ - + @@ -194,7 +194,7 @@ - + @@ -258,7 +258,7 @@ - + @@ -322,7 +322,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -514,7 +514,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -642,7 +642,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -1022,7 +1022,7 @@ - + @@ -1326,7 +1326,7 @@ - + @@ -1350,7 +1350,7 @@ - + @@ -1926,7 +1926,7 @@ - + @@ -1946,7 +1946,7 @@ - + @@ -1966,7 +1966,7 @@ - + @@ -1986,7 +1986,7 @@ - + @@ -2226,7 +2226,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5tempcl.lay mame-0.251+dfsg.1/src/mame/layout/m5tempcl.lay --- mame-0.250+dfsg.1/src/mame/layout/m5tempcl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5tempcl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -906,7 +906,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1166,7 +1166,7 @@ - + @@ -1286,7 +1286,7 @@ - + @@ -1406,7 +1406,7 @@ - + @@ -1426,7 +1426,7 @@ - + @@ -1566,7 +1566,7 @@ - + @@ -1686,7 +1686,7 @@ - + @@ -1706,7 +1706,7 @@ - + @@ -1866,7 +1866,7 @@ - + @@ -1886,7 +1886,7 @@ - + @@ -1946,7 +1946,7 @@ - + @@ -2066,7 +2066,7 @@ - + @@ -2086,7 +2086,7 @@ - + @@ -2166,7 +2166,7 @@ - + @@ -2186,7 +2186,7 @@ - + @@ -2366,7 +2366,7 @@ - + @@ -2426,7 +2426,7 @@ - + @@ -2546,7 +2546,7 @@ - + @@ -2566,7 +2566,7 @@ - + @@ -2646,7 +2646,7 @@ - + @@ -2806,7 +2806,7 @@ - + @@ -2826,7 +2826,7 @@ - + @@ -3006,7 +3006,7 @@ - + @@ -3306,7 +3306,7 @@ - + @@ -3326,7 +3326,7 @@ - + @@ -3346,7 +3346,7 @@ - + @@ -3366,7 +3366,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5tempp.lay mame-0.251+dfsg.1/src/mame/layout/m5tempp.lay --- mame-0.250+dfsg.1/src/mame/layout/m5tempp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5tempp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -218,7 +218,7 @@ - + @@ -238,7 +238,7 @@ - + @@ -258,7 +258,7 @@ - + @@ -278,7 +278,7 @@ - + @@ -298,7 +298,7 @@ - + @@ -318,7 +318,7 @@ - + @@ -338,7 +338,7 @@ - + @@ -378,7 +378,7 @@ - + @@ -398,7 +398,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -638,7 +638,7 @@ - + @@ -658,7 +658,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -698,7 +698,7 @@ - + @@ -718,7 +718,7 @@ - + @@ -838,7 +838,7 @@ - + @@ -878,7 +878,7 @@ - + @@ -898,7 +898,7 @@ - + @@ -922,7 +922,7 @@ - + @@ -1186,7 +1186,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5tempt2.lay mame-0.251+dfsg.1/src/mame/layout/m5tempt2.lay --- mame-0.250+dfsg.1/src/mame/layout/m5tempt2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5tempt2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -294,7 +294,7 @@ - + @@ -314,7 +314,7 @@ - + @@ -342,7 +342,7 @@ - + @@ -422,7 +422,7 @@ - + @@ -442,7 +442,7 @@ - + @@ -462,7 +462,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -518,7 +518,7 @@ - + @@ -538,7 +538,7 @@ - + @@ -558,7 +558,7 @@ - + @@ -578,7 +578,7 @@ - + @@ -598,7 +598,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -638,7 +638,7 @@ - + @@ -1638,7 +1638,7 @@ - + @@ -1658,7 +1658,7 @@ - + @@ -1678,7 +1678,7 @@ - + @@ -1698,7 +1698,7 @@ - + @@ -1718,7 +1718,7 @@ - + @@ -1738,7 +1738,7 @@ - + @@ -1758,7 +1758,7 @@ - + @@ -1778,7 +1778,7 @@ - + @@ -1798,7 +1798,7 @@ - + @@ -2326,7 +2326,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5tictacbwb.lay mame-0.251+dfsg.1/src/mame/layout/m5tictacbwb.lay --- mame-0.250+dfsg.1/src/mame/layout/m5tictacbwb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5tictacbwb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -30,7 +30,7 @@ - + @@ -54,7 +54,7 @@ - + @@ -78,7 +78,7 @@ - + @@ -102,7 +102,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -150,7 +150,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5trail.lay mame-0.251+dfsg.1/src/mame/layout/m5trail.lay --- mame-0.250+dfsg.1/src/mame/layout/m5trail.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5trail.lay 2022-12-29 14:20:09.000000000 +0000 @@ -122,7 +122,7 @@ - + @@ -142,7 +142,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -182,7 +182,7 @@ - + @@ -202,7 +202,7 @@ - + @@ -222,7 +222,7 @@ - + @@ -242,7 +242,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -670,7 +670,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -730,7 +730,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -770,7 +770,7 @@ - + @@ -790,7 +790,7 @@ - + @@ -810,7 +810,7 @@ - + @@ -830,7 +830,7 @@ - + @@ -850,7 +850,7 @@ - + @@ -870,7 +870,7 @@ - + @@ -890,7 +890,7 @@ - + @@ -910,7 +910,7 @@ - + @@ -930,7 +930,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -970,7 +970,7 @@ - + @@ -990,7 +990,7 @@ - + @@ -1010,7 +1010,7 @@ - + @@ -1030,7 +1030,7 @@ - + @@ -3686,7 +3686,7 @@ - + @@ -3825,71 +3825,71 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5ultimo04.lay mame-0.251+dfsg.1/src/mame/layout/m5ultimo04.lay --- mame-0.250+dfsg.1/src/mame/layout/m5ultimo04.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5ultimo04.lay 2022-12-29 14:20:09.000000000 +0000 @@ -242,7 +242,7 @@ - + @@ -414,7 +414,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -538,7 +538,7 @@ - + @@ -622,7 +622,7 @@ - + @@ -642,7 +642,7 @@ - + @@ -682,7 +682,7 @@ - + @@ -722,7 +722,7 @@ - + @@ -1850,7 +1850,7 @@ - + @@ -1890,7 +1890,7 @@ - + @@ -1910,7 +1910,7 @@ - + @@ -1930,7 +1930,7 @@ - + @@ -1950,7 +1950,7 @@ - + @@ -1970,7 +1970,7 @@ - + @@ -1990,7 +1990,7 @@ - + @@ -2070,7 +2070,7 @@ - + @@ -2310,7 +2310,7 @@ - + @@ -2330,7 +2330,7 @@ - + @@ -2350,7 +2350,7 @@ - + @@ -2370,7 +2370,7 @@ - + @@ -2410,7 +2410,7 @@ - + @@ -2434,7 +2434,7 @@ - + @@ -2458,7 +2458,7 @@ - + @@ -2482,7 +2482,7 @@ - + @@ -2502,7 +2502,7 @@ - + @@ -2526,7 +2526,7 @@ - + @@ -2550,7 +2550,7 @@ - + @@ -2570,7 +2570,7 @@ - + @@ -2590,7 +2590,7 @@ - + @@ -2614,7 +2614,7 @@ - + @@ -2638,7 +2638,7 @@ - + @@ -2682,7 +2682,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5upover.lay mame-0.251+dfsg.1/src/mame/layout/m5upover.lay --- mame-0.250+dfsg.1/src/mame/layout/m5upover.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5upover.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -70,7 +70,7 @@ - + @@ -94,7 +94,7 @@ - + @@ -114,7 +114,7 @@ - + @@ -1950,7 +1950,7 @@ - + @@ -1970,7 +1970,7 @@ - + @@ -1994,7 +1994,7 @@ - + @@ -2014,7 +2014,7 @@ - + @@ -2038,7 +2038,7 @@ - + @@ -2062,7 +2062,7 @@ - + @@ -2086,7 +2086,7 @@ - + @@ -2110,7 +2110,7 @@ - + @@ -2134,7 +2134,7 @@ - + @@ -2158,7 +2158,7 @@ - + @@ -2438,7 +2438,7 @@ - + @@ -2458,7 +2458,7 @@ - + @@ -2478,7 +2478,7 @@ - + @@ -2522,7 +2522,7 @@ - + @@ -2906,7 +2906,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5vampup.lay mame-0.251+dfsg.1/src/mame/layout/m5vampup.lay --- mame-0.250+dfsg.1/src/mame/layout/m5vampup.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5vampup.lay 2022-12-29 14:20:09.000000000 +0000 @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -2046,7 +2046,7 @@ - + @@ -2198,7 +2198,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5vertgo.lay mame-0.251+dfsg.1/src/mame/layout/m5vertgo.lay --- mame-0.250+dfsg.1/src/mame/layout/m5vertgo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5vertgo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -2350,7 +2350,7 @@ - + @@ -2370,7 +2370,7 @@ - + @@ -2390,7 +2390,7 @@ - + @@ -2410,7 +2410,7 @@ - + @@ -2430,7 +2430,7 @@ - + @@ -2450,7 +2450,7 @@ - + @@ -2750,7 +2750,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5wking05.lay mame-0.251+dfsg.1/src/mame/layout/m5wking05.lay --- mame-0.250+dfsg.1/src/mame/layout/m5wking05.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5wking05.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -601,7 +601,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5wonga.lay mame-0.251+dfsg.1/src/mame/layout/m5wonga.lay --- mame-0.250+dfsg.1/src/mame/layout/m5wonga.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5wonga.lay 2022-12-29 14:20:09.000000000 +0000 @@ -122,7 +122,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -2918,7 +2918,7 @@ - + @@ -3329,55 +3329,55 @@ - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5wthing20.lay mame-0.251+dfsg.1/src/mame/layout/m5wthing20.lay --- mame-0.250+dfsg.1/src/mame/layout/m5wthing20.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5wthing20.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1598,7 +1598,7 @@ - + @@ -1618,7 +1618,7 @@ - + @@ -1638,7 +1638,7 @@ - + @@ -1658,7 +1658,7 @@ - + @@ -1678,7 +1678,7 @@ - + @@ -1698,7 +1698,7 @@ - + @@ -1718,7 +1718,7 @@ - + @@ -1738,7 +1738,7 @@ - + @@ -1938,7 +1938,7 @@ - + @@ -2406,7 +2406,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m5xfact11.lay mame-0.251+dfsg.1/src/mame/layout/m5xfact11.lay --- mame-0.250+dfsg.1/src/mame/layout/m5xfact11.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m5xfact11.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/m68705prg.lay mame-0.251+dfsg.1/src/mame/layout/m68705prg.lay --- mame-0.250+dfsg.1/src/mame/layout/m68705prg.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m68705prg.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/magibombb.lay mame-0.251+dfsg.1/src/mame/layout/magibombb.lay --- mame-0.250+dfsg.1/src/mame/layout/magibombb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/magibombb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/magibomb.lay mame-0.251+dfsg.1/src/mame/layout/magibomb.lay --- mame-0.250+dfsg.1/src/mame/layout/magibomb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/magibomb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/magimaska.lay mame-0.251+dfsg.1/src/mame/layout/magimaska.lay --- mame-0.250+dfsg.1/src/mame/layout/magimaska.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/magimaska.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/majorpkr.lay mame-0.251+dfsg.1/src/mame/layout/majorpkr.lay --- mame-0.250+dfsg.1/src/mame/layout/majorpkr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/majorpkr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/maniac.lay mame-0.251+dfsg.1/src/mame/layout/maniac.lay --- mame-0.250+dfsg.1/src/mame/layout/maniac.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/maniac.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/marmagic.lay mame-0.251+dfsg.1/src/mame/layout/marmagic.lay --- mame-0.250+dfsg.1/src/mame/layout/marmagic.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/marmagic.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/marmagicu.lay mame-0.251+dfsg.1/src/mame/layout/marmagicu.lay --- mame-0.250+dfsg.1/src/mame/layout/marmagicu.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/marmagicu.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/marywu.lay mame-0.251+dfsg.1/src/mame/layout/marywu.lay --- mame-0.250+dfsg.1/src/mame/layout/marywu.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/marywu.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mastmind.lay mame-0.251+dfsg.1/src/mame/layout/mastmind.lay --- mame-0.250+dfsg.1/src/mame/layout/mastmind.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mastmind.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/matchme.lay mame-0.251+dfsg.1/src/mame/layout/matchme.lay --- mame-0.250+dfsg.1/src/mame/layout/matchme.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/matchme.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/matchnum.lay mame-0.251+dfsg.1/src/mame/layout/matchnum.lay --- mame-0.250+dfsg.1/src/mame/layout/matchnum.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/matchnum.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mathmagi.lay mame-0.251+dfsg.1/src/mame/layout/mathmagi.lay --- mame-0.250+dfsg.1/src/mame/layout/mathmagi.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mathmagi.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mathmarv.lay mame-0.251+dfsg.1/src/mame/layout/mathmarv.lay --- mame-0.250+dfsg.1/src/mame/layout/mathmarv.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mathmarv.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/maxaflex.lay mame-0.251+dfsg.1/src/mame/layout/maxaflex.lay --- mame-0.250+dfsg.1/src/mame/layout/maxaflex.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/maxaflex.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/maygay1b.lay mame-0.251+dfsg.1/src/mame/layout/maygay1b.lay --- mame-0.250+dfsg.1/src/mame/layout/maygay1b.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/maygay1b.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/maze.lay mame-0.251+dfsg.1/src/mame/layout/maze.lay --- mame-0.250+dfsg.1/src/mame/layout/maze.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/maze.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/m_bappl2.lay mame-0.251+dfsg.1/src/mame/layout/m_bappl2.lay --- mame-0.250+dfsg.1/src/mame/layout/m_bappl2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m_bappl2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/m_bapple.lay mame-0.251+dfsg.1/src/mame/layout/m_bapple.lay --- mame-0.250+dfsg.1/src/mame/layout/m_bapple.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m_bapple.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mbaseb.lay mame-0.251+dfsg.1/src/mame/layout/mbaseb.lay --- mame-0.250+dfsg.1/src/mame/layout/mbaseb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mbaseb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mbaskb2.lay mame-0.251+dfsg.1/src/mame/layout/mbaskb2.lay --- mame-0.250+dfsg.1/src/mame/layout/mbaskb2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mbaskb2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mbaskb.lay mame-0.251+dfsg.1/src/mame/layout/mbaskb.lay --- mame-0.250+dfsg.1/src/mame/layout/mbaskb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mbaskb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mbdtower.lay mame-0.251+dfsg.1/src/mame/layout/mbdtower.lay --- mame-0.250+dfsg.1/src/mame/layout/mbdtower.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mbdtower.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mchess.lay mame-0.251+dfsg.1/src/mame/layout/mchess.lay --- mame-0.250+dfsg.1/src/mame/layout/mchess.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mchess.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mcompgin.lay mame-0.251+dfsg.1/src/mame/layout/mcompgin.lay --- mame-0.250+dfsg.1/src/mame/layout/mcompgin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mcompgin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/md6802.lay mame-0.251+dfsg.1/src/mame/layout/md6802.lay --- mame-0.250+dfsg.1/src/mame/layout/md6802.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/md6802.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mdndclab.lay mame-0.251+dfsg.1/src/mame/layout/mdndclab.lay --- mame-0.250+dfsg.1/src/mame/layout/mdndclab.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mdndclab.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mdrawpkr.lay mame-0.251+dfsg.1/src/mame/layout/mdrawpkr.lay --- mame-0.250+dfsg.1/src/mame/layout/mdrawpkr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mdrawpkr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/medlanes.lay mame-0.251+dfsg.1/src/mame/layout/medlanes.lay --- mame-0.250+dfsg.1/src/mame/layout/medlanes.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/medlanes.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/megacd.lay mame-0.251+dfsg.1/src/mame/layout/megacd.lay --- mame-0.250+dfsg.1/src/mame/layout/megacd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/megacd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mekd2.lay mame-0.251+dfsg.1/src/mame/layout/mekd2.lay --- mame-0.250+dfsg.1/src/mame/layout/mekd2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mekd2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mekd3.lay mame-0.251+dfsg.1/src/mame/layout/mekd3.lay --- mame-0.250+dfsg.1/src/mame/layout/mekd3.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mekd3.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mekd4.lay mame-0.251+dfsg.1/src/mame/layout/mekd4.lay --- mame-0.250+dfsg.1/src/mame/layout/mekd4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mekd4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mekd5.lay mame-0.251+dfsg.1/src/mame/layout/mekd5.lay --- mame-0.250+dfsg.1/src/mame/layout/mekd5.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mekd5.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/melodym.lay mame-0.251+dfsg.1/src/mame/layout/melodym.lay --- mame-0.250+dfsg.1/src/mame/layout/melodym.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/melodym.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/memoquiz.lay mame-0.251+dfsg.1/src/mame/layout/memoquiz.lay --- mame-0.250+dfsg.1/src/mame/layout/memoquiz.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/memoquiz.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_1.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_1.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_3.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_3.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_3.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_3.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_academy.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_academy.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_academy.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_academy.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_alm16.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_alm16.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_alm16.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_alm16.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_alm32.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_alm32.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_alm32.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_alm32.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_amsterdam.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_amsterdam.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_amsterdam.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_amsterdam.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_berlin.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_berlin.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_berlin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_berlin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_bup.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_bup.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_bup.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_bup.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_esb2.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_esb2.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_esb2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_esb2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_gen32.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_gen32.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_gen32.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_gen32.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_glasgow.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_glasgow.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_glasgow.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_glasgow.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_junior.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_junior.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_junior.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_junior.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_milano.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_milano.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_milano.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_milano.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_mirage.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_mirage.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_mirage.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_mirage.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_mm1.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_mm1.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_mm1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_mm1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_mm2.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_mm2.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_mm2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_mm2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_mm5.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_mm5.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_mm5.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_mm5.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_modena.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_modena.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_modena.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_modena.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_modular_tm.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_modular_tm.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_modular_tm.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_modular_tm.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_mondial2.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_mondial2.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_mondial2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_mondial2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_mondial68k.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_mondial68k.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_mondial68k.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_mondial68k.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_mondial.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_mondial.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_mondial.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_mondial.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_montec.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_montec.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_montec.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_montec.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_montreux.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_montreux.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_montreux.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_montreux.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_polgar.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_polgar.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_polgar.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_polgar.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_risc.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_risc.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_risc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_risc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_smondial2.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_smondial2.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_smondial2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_smondial2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mephisto_smondial.lay mame-0.251+dfsg.1/src/mame/layout/mephisto_smondial.lay --- mame-0.250+dfsg.1/src/mame/layout/mephisto_smondial.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mephisto_smondial.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/merlin.lay mame-0.251+dfsg.1/src/mame/layout/merlin.lay --- mame-0.250+dfsg.1/src/mame/layout/merlin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/merlin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/metalman.lay mame-0.251+dfsg.1/src/mame/layout/metalman.lay --- mame-0.250+dfsg.1/src/mame/layout/metalman.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/metalman.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/meybjack.lay mame-0.251+dfsg.1/src/mame/layout/meybjack.lay --- mame-0.250+dfsg.1/src/mame/layout/meybjack.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/meybjack.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mfootb2.lay mame-0.251+dfsg.1/src/mame/layout/mfootb2.lay --- mame-0.250+dfsg.1/src/mame/layout/mfootb2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mfootb2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mfootb.lay mame-0.251+dfsg.1/src/mame/layout/mfootb.lay --- mame-0.250+dfsg.1/src/mame/layout/mfootb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mfootb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mg1.lay mame-0.251+dfsg.1/src/mame/layout/mg1.lay --- mame-0.250+dfsg.1/src/mame/layout/mg1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mg1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mgavegas.lay mame-0.251+dfsg.1/src/mame/layout/mgavegas.lay --- mame-0.250+dfsg.1/src/mame/layout/mgavegas.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mgavegas.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/m_gndgit.lay mame-0.251+dfsg.1/src/mame/layout/m_gndgit.lay --- mame-0.250+dfsg.1/src/mame/layout/m_gndgit.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m_gndgit.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mhockeya.lay mame-0.251+dfsg.1/src/mame/layout/mhockeya.lay --- mame-0.250+dfsg.1/src/mame/layout/mhockeya.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mhockeya.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mhockey.lay mame-0.251+dfsg.1/src/mame/layout/mhockey.lay --- mame-0.250+dfsg.1/src/mame/layout/mhockey.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mhockey.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/micon2.lay mame-0.251+dfsg.1/src/mame/layout/micon2.lay --- mame-0.250+dfsg.1/src/mame/layout/micon2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/micon2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/micropin.lay mame-0.251+dfsg.1/src/mame/layout/micropin.lay --- mame-0.250+dfsg.1/src/mame/layout/micropin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/micropin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/microvision.lay mame-0.251+dfsg.1/src/mame/layout/microvision.lay --- mame-0.250+dfsg.1/src/mame/layout/microvision.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/microvision.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mil4000.lay mame-0.251+dfsg.1/src/mame/layout/mil4000.lay --- mame-0.250+dfsg.1/src/mame/layout/mil4000.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mil4000.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/milton.lay mame-0.251+dfsg.1/src/mame/layout/milton.lay --- mame-0.250+dfsg.1/src/mame/layout/milton.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/milton.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mindset.lay mame-0.251+dfsg.1/src/mame/layout/mindset.lay --- mame-0.250+dfsg.1/src/mame/layout/mindset.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mindset.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/minferno.lay mame-0.251+dfsg.1/src/mame/layout/minferno.lay --- mame-0.250+dfsg.1/src/mame/layout/minferno.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/minferno.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/miniboy7.lay mame-0.251+dfsg.1/src/mame/layout/miniboy7.lay --- mame-0.250+dfsg.1/src/mame/layout/miniboy7.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/miniboy7.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/misatk.lay mame-0.251+dfsg.1/src/mame/layout/misatk.lay --- mame-0.250+dfsg.1/src/mame/layout/misatk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/misatk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/missamer.lay mame-0.251+dfsg.1/src/mame/layout/missamer.lay --- mame-0.250+dfsg.1/src/mame/layout/missamer.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/missamer.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mk14vdu.lay mame-0.251+dfsg.1/src/mame/layout/mk14vdu.lay --- mame-0.250+dfsg.1/src/mame/layout/mk14vdu.lay 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mk14vdu.lay 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/mkit09.lay mame-0.251+dfsg.1/src/mame/layout/mkit09.lay --- mame-0.250+dfsg.1/src/mame/layout/mkit09.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mkit09.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ml20.lay mame-0.251+dfsg.1/src/mame/layout/ml20.lay --- mame-0.250+dfsg.1/src/mame/layout/ml20.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ml20.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mmarvin.lay mame-0.251+dfsg.1/src/mame/layout/mmarvin.lay --- mame-0.250+dfsg.1/src/mame/layout/mmarvin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mmarvin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mmd1.lay mame-0.251+dfsg.1/src/mame/layout/mmd1.lay --- mame-0.250+dfsg.1/src/mame/layout/mmd1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mmd1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mmd2.lay mame-0.251+dfsg.1/src/mame/layout/mmd2.lay --- mame-0.250+dfsg.1/src/mame/layout/mmd2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mmd2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mmerlin.lay mame-0.251+dfsg.1/src/mame/layout/mmerlin.lay --- mame-0.250+dfsg.1/src/mame/layout/mmerlin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mmerlin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/m_mtchit.lay mame-0.251+dfsg.1/src/mame/layout/m_mtchit.lay --- mame-0.250+dfsg.1/src/mame/layout/m_mtchit.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m_mtchit.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/m_mtchup.lay mame-0.251+dfsg.1/src/mame/layout/m_mtchup.lay --- mame-0.250+dfsg.1/src/mame/layout/m_mtchup.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/m_mtchup.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/model1io2.lay mame-0.251+dfsg.1/src/mame/layout/model1io2.lay --- mame-0.250+dfsg.1/src/mame/layout/model1io2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/model1io2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/modulab.lay mame-0.251+dfsg.1/src/mame/layout/modulab.lay --- mame-0.250+dfsg.1/src/mame/layout/modulab.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/modulab.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/montree.lay mame-0.251+dfsg.1/src/mame/layout/montree.lay --- mame-0.250+dfsg.1/src/mame/layout/montree.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/montree.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/monty.lay mame-0.251+dfsg.1/src/mame/layout/monty.lay --- mame-0.250+dfsg.1/src/mame/layout/monty.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/monty.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/monzagp.lay mame-0.251+dfsg.1/src/mame/layout/monzagp.lay --- mame-0.250+dfsg.1/src/mame/layout/monzagp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/monzagp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mountmon.lay mame-0.251+dfsg.1/src/mame/layout/mountmon.lay --- mame-0.250+dfsg.1/src/mame/layout/mountmon.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mountmon.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mp68a.lay mame-0.251+dfsg.1/src/mame/layout/mp68a.lay --- mame-0.250+dfsg.1/src/mame/layout/mp68a.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mp68a.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mpf1b.lay mame-0.251+dfsg.1/src/mame/layout/mpf1b.lay --- mame-0.250+dfsg.1/src/mame/layout/mpf1b.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mpf1b.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mpf1.lay mame-0.251+dfsg.1/src/mame/layout/mpf1.lay --- mame-0.250+dfsg.1/src/mame/layout/mpf1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mpf1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mpf1p.lay mame-0.251+dfsg.1/src/mame/layout/mpf1p.lay --- mame-0.250+dfsg.1/src/mame/layout/mpf1p.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mpf1p.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mpu1.lay mame-0.251+dfsg.1/src/mame/layout/mpu1.lay --- mame-0.250+dfsg.1/src/mame/layout/mpu1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mpu1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mpu3.lay mame-0.251+dfsg.1/src/mame/layout/mpu3.lay --- mame-0.250+dfsg.1/src/mame/layout/mpu3.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mpu3.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ @@ -34,6 +34,12 @@ + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/mpu4ext.lay mame-0.251+dfsg.1/src/mame/layout/mpu4ext.lay --- mame-0.250+dfsg.1/src/mame/layout/mpu4ext.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mpu4ext.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ @@ -34,6 +34,12 @@ + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/mpu4.lay mame-0.251+dfsg.1/src/mame/layout/mpu4.lay --- mame-0.250+dfsg.1/src/mame/layout/mpu4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mpu4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ @@ -297,6 +297,12 @@ + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/mpu4plasma.lay mame-0.251+dfsg.1/src/mame/layout/mpu4plasma.lay --- mame-0.250+dfsg.1/src/mame/layout/mpu4plasma.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mpu4plasma.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mpu5.lay mame-0.251+dfsg.1/src/mame/layout/mpu5.lay --- mame-0.250+dfsg.1/src/mame/layout/mpu5.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mpu5.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mrmusical.lay mame-0.251+dfsg.1/src/mame/layout/mrmusical.lay --- mame-0.250+dfsg.1/src/mame/layout/mrmusical.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mrmusical.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ms0515.lay mame-0.251+dfsg.1/src/mame/layout/ms0515.lay --- mame-0.250+dfsg.1/src/mame/layout/ms0515.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ms0515.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/msoccer2.lay mame-0.251+dfsg.1/src/mame/layout/msoccer2.lay --- mame-0.250+dfsg.1/src/mame/layout/msoccer2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/msoccer2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/msoccer.lay mame-0.251+dfsg.1/src/mame/layout/msoccer.lay --- mame-0.250+dfsg.1/src/mame/layout/msoccer.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/msoccer.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/msthawk.lay mame-0.251+dfsg.1/src/mame/layout/msthawk.lay --- mame-0.250+dfsg.1/src/mame/layout/msthawk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/msthawk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mulcd.lay mame-0.251+dfsg.1/src/mame/layout/mulcd.lay --- mame-0.250+dfsg.1/src/mame/layout/mulcd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mulcd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/multidrw.lay mame-0.251+dfsg.1/src/mame/layout/multidrw.lay --- mame-0.250+dfsg.1/src/mame/layout/multidrw.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/multidrw.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/musicsrt.lay mame-0.251+dfsg.1/src/mame/layout/musicsrt.lay --- mame-0.250+dfsg.1/src/mame/layout/musicsrt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/musicsrt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mvbfree.lay mame-0.251+dfsg.1/src/mame/layout/mvbfree.lay --- mame-0.250+dfsg.1/src/mame/layout/mvbfree.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mvbfree.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mwcbaseb.lay mame-0.251+dfsg.1/src/mame/layout/mwcbaseb.lay --- mame-0.250+dfsg.1/src/mame/layout/mwcbaseb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mwcbaseb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mwcfootb.lay mame-0.251+dfsg.1/src/mame/layout/mwcfootb.lay --- mame-0.250+dfsg.1/src/mame/layout/mwcfootb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mwcfootb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/mystgard.lay mame-0.251+dfsg.1/src/mame/layout/mystgard.lay --- mame-0.250+dfsg.1/src/mame/layout/mystgard.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/mystgard.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/navarone.lay mame-0.251+dfsg.1/src/mame/layout/navarone.lay --- mame-0.250+dfsg.1/src/mame/layout/navarone.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/navarone.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/nbmj8688.lay mame-0.251+dfsg.1/src/mame/layout/nbmj8688.lay --- mame-0.250+dfsg.1/src/mame/layout/nbmj8688.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/nbmj8688.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/neogeo.lay mame-0.251+dfsg.1/src/mame/layout/neogeo.lay --- mame-0.250+dfsg.1/src/mame/layout/neogeo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/neogeo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/newbraina.lay mame-0.251+dfsg.1/src/mame/layout/newbraina.lay --- mame-0.250+dfsg.1/src/mame/layout/newbraina.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/newbraina.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/newbrain.lay mame-0.251+dfsg.1/src/mame/layout/newbrain.lay --- mame-0.250+dfsg.1/src/mame/layout/newbrain.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/newbrain.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/newufo.lay mame-0.251+dfsg.1/src/mame/layout/newufo.lay --- mame-0.250+dfsg.1/src/mame/layout/newufo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/newufo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/nfb96.lay mame-0.251+dfsg.1/src/mame/layout/nfb96.lay --- mame-0.250+dfsg.1/src/mame/layout/nfb96.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/nfb96.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/noraut11.lay mame-0.251+dfsg.1/src/mame/layout/noraut11.lay --- mame-0.250+dfsg.1/src/mame/layout/noraut11.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/noraut11.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/noraut12.lay mame-0.251+dfsg.1/src/mame/layout/noraut12.lay --- mame-0.250+dfsg.1/src/mame/layout/noraut12.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/noraut12.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/notechan.lay mame-0.251+dfsg.1/src/mame/layout/notechan.lay --- mame-0.250+dfsg.1/src/mame/layout/notechan.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/notechan.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_cforte.lay mame-0.251+dfsg.1/src/mame/layout/novag_cforte.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_cforte.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_cforte.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_const.lay mame-0.251+dfsg.1/src/mame/layout/novag_const.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_const.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_const.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_constq.lay mame-0.251+dfsg.1/src/mame/layout/novag_constq.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_constq.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_constq.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_diablo68k.lay mame-0.251+dfsg.1/src/mame/layout/novag_diablo68k.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_diablo68k.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_diablo68k.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_micro2.lay mame-0.251+dfsg.1/src/mame/layout/novag_micro2.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_micro2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_micro2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_micro.lay mame-0.251+dfsg.1/src/mame/layout/novag_micro.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_micro.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_micro.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_mk1.lay mame-0.251+dfsg.1/src/mame/layout/novag_mk1.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_mk1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_mk1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_mk2a.lay mame-0.251+dfsg.1/src/mame/layout/novag_mk2a.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_mk2a.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_mk2a.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_mk2.lay mame-0.251+dfsg.1/src/mame/layout/novag_mk2.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_mk2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_mk2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_savant.lay mame-0.251+dfsg.1/src/mame/layout/novag_savant.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_savant.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_savant.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_scorpio68k.lay mame-0.251+dfsg.1/src/mame/layout/novag_scorpio68k.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_scorpio68k.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_scorpio68k.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_sexpert.lay mame-0.251+dfsg.1/src/mame/layout/novag_sexpert.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_sexpert.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_sexpert.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_sforte.lay mame-0.251+dfsg.1/src/mame/layout/novag_sforte.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_sforte.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_sforte.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_snova.lay mame-0.251+dfsg.1/src/mame/layout/novag_snova.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_snova.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_snova.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_ssensor4.lay mame-0.251+dfsg.1/src/mame/layout/novag_ssensor4.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_ssensor4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_ssensor4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_supercon.lay mame-0.251+dfsg.1/src/mame/layout/novag_supercon.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_supercon.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_supercon.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novag_supremo.lay mame-0.251+dfsg.1/src/mame/layout/novag_supremo.lay --- mame-0.250+dfsg.1/src/mame/layout/novag_supremo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novag_supremo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/novoplay.lay mame-0.251+dfsg.1/src/mame/layout/novoplay.lay --- mame-0.250+dfsg.1/src/mame/layout/novoplay.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/novoplay.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/nsm.lay mame-0.251+dfsg.1/src/mame/layout/nsm.lay --- mame-0.250+dfsg.1/src/mame/layout/nsm.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/nsm.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/omegrace.lay mame-0.251+dfsg.1/src/mame/layout/omegrace.lay --- mame-0.250+dfsg.1/src/mame/layout/omegrace.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/omegrace.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/one4all.lay mame-0.251+dfsg.1/src/mame/layout/one4all.lay --- mame-0.250+dfsg.1/src/mame/layout/one4all.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/one4all.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/orchidms.lay mame-0.251+dfsg.1/src/mame/layout/orchidms.lay --- mame-0.250+dfsg.1/src/mame/layout/orchidms.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/orchidms.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/orchidmsnz.lay mame-0.251+dfsg.1/src/mame/layout/orchidmsnz.lay --- mame-0.250+dfsg.1/src/mame/layout/orchidmsnz.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/orchidmsnz.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/outrun.lay mame-0.251+dfsg.1/src/mame/layout/outrun.lay --- mame-0.250+dfsg.1/src/mame/layout/outrun.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/outrun.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/overdriv.lay mame-0.251+dfsg.1/src/mame/layout/overdriv.lay --- mame-0.250+dfsg.1/src/mame/layout/overdriv.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/overdriv.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/packmon.lay mame-0.251+dfsg.1/src/mame/layout/packmon.lay --- mame-0.250+dfsg.1/src/mame/layout/packmon.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/packmon.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pairmtch.lay mame-0.251+dfsg.1/src/mame/layout/pairmtch.lay --- mame-0.250+dfsg.1/src/mame/layout/pairmtch.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pairmtch.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/palmf31.lay mame-0.251+dfsg.1/src/mame/layout/palmf31.lay --- mame-0.250+dfsg.1/src/mame/layout/palmf31.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/palmf31.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/palmmd8.lay mame-0.251+dfsg.1/src/mame/layout/palmmd8.lay --- mame-0.250+dfsg.1/src/mame/layout/palmmd8.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/palmmd8.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pantmaga.lay mame-0.251+dfsg.1/src/mame/layout/pantmaga.lay --- mame-0.250+dfsg.1/src/mame/layout/pantmaga.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pantmaga.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pantmag.lay mame-0.251+dfsg.1/src/mame/layout/pantmag.lay --- mame-0.250+dfsg.1/src/mame/layout/pantmag.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pantmag.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/paradice.lay mame-0.251+dfsg.1/src/mame/layout/paradice.lay --- mame-0.250+dfsg.1/src/mame/layout/paradice.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/paradice.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pasha2.lay mame-0.251+dfsg.1/src/mame/layout/pasha2.lay --- mame-0.250+dfsg.1/src/mame/layout/pasha2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pasha2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pc1500.lay mame-0.251+dfsg.1/src/mame/layout/pc1500.lay --- mame-0.250+dfsg.1/src/mame/layout/pc1500.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pc1500.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pc8500.lay mame-0.251+dfsg.1/src/mame/layout/pc8500.lay --- mame-0.250+dfsg.1/src/mame/layout/pc8500.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pc8500.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pcw.lay mame-0.251+dfsg.1/src/mame/layout/pcw.lay --- mame-0.250+dfsg.1/src/mame/layout/pcw.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pcw.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pdrift.lay mame-0.251+dfsg.1/src/mame/layout/pdrift.lay --- mame-0.250+dfsg.1/src/mame/layout/pdrift.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pdrift.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pe_bjack.lay mame-0.251+dfsg.1/src/mame/layout/pe_bjack.lay --- mame-0.250+dfsg.1/src/mame/layout/pe_bjack.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pe_bjack.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pe_keno.lay mame-0.251+dfsg.1/src/mame/layout/pe_keno.lay --- mame-0.250+dfsg.1/src/mame/layout/pe_keno.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pe_keno.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pengpayce.lay mame-0.251+dfsg.1/src/mame/layout/pengpayce.lay --- mame-0.250+dfsg.1/src/mame/layout/pengpayce.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pengpayce.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pengpuck.lay mame-0.251+dfsg.1/src/mame/layout/pengpuck.lay --- mame-0.250+dfsg.1/src/mame/layout/pengpuck.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pengpuck.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/penpir2.lay mame-0.251+dfsg.1/src/mame/layout/penpir2.lay --- mame-0.250+dfsg.1/src/mame/layout/penpir2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/penpir2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/peplus.lay mame-0.251+dfsg.1/src/mame/layout/peplus.lay --- mame-0.250+dfsg.1/src/mame/layout/peplus.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/peplus.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pe_poker.lay mame-0.251+dfsg.1/src/mame/layout/pe_poker.lay --- mame-0.250+dfsg.1/src/mame/layout/pe_poker.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pe_poker.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pe_schip.lay mame-0.251+dfsg.1/src/mame/layout/pe_schip.lay --- mame-0.250+dfsg.1/src/mame/layout/pe_schip.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pe_schip.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pe_slots.lay mame-0.251+dfsg.1/src/mame/layout/pe_slots.lay --- mame-0.250+dfsg.1/src/mame/layout/pe_slots.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pe_slots.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/petshop.lay mame-0.251+dfsg.1/src/mame/layout/petshop.lay --- mame-0.250+dfsg.1/src/mame/layout/petshop.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/petshop.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/peyper.lay mame-0.251+dfsg.1/src/mame/layout/peyper.lay --- mame-0.250+dfsg.1/src/mame/layout/peyper.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/peyper.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/phantom2.lay mame-0.251+dfsg.1/src/mame/layout/phantom2.lay --- mame-0.250+dfsg.1/src/mame/layout/phantom2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/phantom2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/phpball.lay mame-0.251+dfsg.1/src/mame/layout/phpball.lay --- mame-0.250+dfsg.1/src/mame/layout/phpball.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/phpball.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/piggypas.lay mame-0.251+dfsg.1/src/mame/layout/piggypas.lay --- mame-0.250+dfsg.1/src/mame/layout/piggypas.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/piggypas.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pilot1k.lay mame-0.251+dfsg.1/src/mame/layout/pilot1k.lay --- mame-0.250+dfsg.1/src/mame/layout/pilot1k.lay 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pilot1k.lay 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/pirpok2.lay mame-0.251+dfsg.1/src/mame/layout/pirpok2.lay --- mame-0.250+dfsg.1/src/mame/layout/pirpok2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pirpok2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/play_1.lay mame-0.251+dfsg.1/src/mame/layout/play_1.lay --- mame-0.250+dfsg.1/src/mame/layout/play_1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/play_1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/play_2.lay mame-0.251+dfsg.1/src/mame/layout/play_2.lay --- mame-0.250+dfsg.1/src/mame/layout/play_2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/play_2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/play_3.lay mame-0.251+dfsg.1/src/mame/layout/play_3.lay --- mame-0.250+dfsg.1/src/mame/layout/play_3.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/play_3.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/playch10.lay mame-0.251+dfsg.1/src/mame/layout/playch10.lay --- mame-0.250+dfsg.1/src/mame/layout/playch10.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/playch10.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/playmaker.lay mame-0.251+dfsg.1/src/mame/layout/playmaker.lay --- mame-0.250+dfsg.1/src/mame/layout/playmaker.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/playmaker.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pmi80.lay mame-0.251+dfsg.1/src/mame/layout/pmi80.lay --- mame-0.250+dfsg.1/src/mame/layout/pmi80.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pmi80.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pmpoker.lay mame-0.251+dfsg.1/src/mame/layout/pmpoker.lay --- mame-0.250+dfsg.1/src/mame/layout/pmpoker.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pmpoker.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pmroulet.lay mame-0.251+dfsg.1/src/mame/layout/pmroulet.lay --- mame-0.250+dfsg.1/src/mame/layout/pmroulet.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pmroulet.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pnchmn.lay mame-0.251+dfsg.1/src/mame/layout/pnchmn.lay --- mame-0.250+dfsg.1/src/mame/layout/pnchmn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pnchmn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/poker41.lay mame-0.251+dfsg.1/src/mame/layout/poker41.lay --- mame-0.250+dfsg.1/src/mame/layout/poker41.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/poker41.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pokio.lay mame-0.251+dfsg.1/src/mame/layout/pokio.lay --- mame-0.250+dfsg.1/src/mame/layout/pokio.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pokio.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pokonl97.lay mame-0.251+dfsg.1/src/mame/layout/pokonl97.lay --- mame-0.250+dfsg.1/src/mame/layout/pokonl97.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pokonl97.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/poly880.lay mame-0.251+dfsg.1/src/mame/layout/poly880.lay --- mame-0.250+dfsg.1/src/mame/layout/poly880.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/poly880.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/polyplay.lay mame-0.251+dfsg.1/src/mame/layout/polyplay.lay --- mame-0.250+dfsg.1/src/mame/layout/polyplay.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/polyplay.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ppsatan.lay mame-0.251+dfsg.1/src/mame/layout/ppsatan.lay --- mame-0.250+dfsg.1/src/mame/layout/ppsatan.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ppsatan.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pr8210.lay mame-0.251+dfsg.1/src/mame/layout/pr8210.lay --- mame-0.250+dfsg.1/src/mame/layout/pr8210.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pr8210.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pro80.lay mame-0.251+dfsg.1/src/mame/layout/pro80.lay --- mame-0.250+dfsg.1/src/mame/layout/pro80.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pro80.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/proconn.lay mame-0.251+dfsg.1/src/mame/layout/proconn.lay --- mame-0.250+dfsg.1/src/mame/layout/proconn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/proconn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/prophet600.lay mame-0.251+dfsg.1/src/mame/layout/prophet600.lay --- mame-0.250+dfsg.1/src/mame/layout/prophet600.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/prophet600.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/przfight.lay mame-0.251+dfsg.1/src/mame/layout/przfight.lay --- mame-0.250+dfsg.1/src/mame/layout/przfight.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/przfight.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/psr60.lay mame-0.251+dfsg.1/src/mame/layout/psr60.lay --- mame-0.250+dfsg.1/src/mame/layout/psr60.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/psr60.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/psr70.lay mame-0.251+dfsg.1/src/mame/layout/psr70.lay --- mame-0.250+dfsg.1/src/mame/layout/psr70.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/psr70.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pulltabs.lay mame-0.251+dfsg.1/src/mame/layout/pulltabs.lay --- mame-0.250+dfsg.1/src/mame/layout/pulltabs.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pulltabs.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pve500.lay mame-0.251+dfsg.1/src/mame/layout/pve500.lay --- mame-0.250+dfsg.1/src/mame/layout/pve500.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pve500.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pvmil.lay mame-0.251+dfsg.1/src/mame/layout/pvmil.lay --- mame-0.250+dfsg.1/src/mame/layout/pvmil.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pvmil.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/px4.lay mame-0.251+dfsg.1/src/mame/layout/px4.lay --- mame-0.250+dfsg.1/src/mame/layout/px4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/px4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/px8.lay mame-0.251+dfsg.1/src/mame/layout/px8.lay --- mame-0.250+dfsg.1/src/mame/layout/px8.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/px8.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/pyramid.lay mame-0.251+dfsg.1/src/mame/layout/pyramid.lay --- mame-0.250+dfsg.1/src/mame/layout/pyramid.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/pyramid.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/qfire.lay mame-0.251+dfsg.1/src/mame/layout/qfire.lay --- mame-0.250+dfsg.1/src/mame/layout/qfire.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/qfire.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/qkracer.lay mame-0.251+dfsg.1/src/mame/layout/qkracer.lay --- mame-0.250+dfsg.1/src/mame/layout/qkracer.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/qkracer.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/qkracerm.lay mame-0.251+dfsg.1/src/mame/layout/qkracerm.lay --- mame-0.250+dfsg.1/src/mame/layout/qkracerm.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/qkracerm.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/qkspeller.lay mame-0.251+dfsg.1/src/mame/layout/qkspeller.lay --- mame-0.250+dfsg.1/src/mame/layout/qkspeller.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/qkspeller.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/qnilecea.lay mame-0.251+dfsg.1/src/mame/layout/qnilecea.lay --- mame-0.250+dfsg.1/src/mame/layout/qnilecea.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/qnilecea.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/qnilec.lay mame-0.251+dfsg.1/src/mame/layout/qnilec.lay --- mame-0.250+dfsg.1/src/mame/layout/qnilec.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/qnilec.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/qniled.lay mame-0.251+dfsg.1/src/mame/layout/qniled.lay --- mame-0.250+dfsg.1/src/mame/layout/qniled.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/qniled.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/qnile.lay mame-0.251+dfsg.1/src/mame/layout/qnile.lay --- mame-0.250+dfsg.1/src/mame/layout/qnile.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/qnile.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/qnilenl.lay mame-0.251+dfsg.1/src/mame/layout/qnilenl.lay --- mame-0.250+dfsg.1/src/mame/layout/qnilenl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/qnilenl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/qtbird.lay mame-0.251+dfsg.1/src/mame/layout/qtbird.lay --- mame-0.250+dfsg.1/src/mame/layout/qtbird.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/qtbird.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/quintoon.lay mame-0.251+dfsg.1/src/mame/layout/quintoon.lay --- mame-0.250+dfsg.1/src/mame/layout/quintoon.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/quintoon.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/quizshow.lay mame-0.251+dfsg.1/src/mame/layout/quizshow.lay --- mame-0.250+dfsg.1/src/mame/layout/quizshow.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/quizshow.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/quizwizc.lay mame-0.251+dfsg.1/src/mame/layout/quizwizc.lay --- mame-0.250+dfsg.1/src/mame/layout/quizwizc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/quizwizc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/racedrivpan.lay mame-0.251+dfsg.1/src/mame/layout/racedrivpan.lay --- mame-0.250+dfsg.1/src/mame/layout/racedrivpan.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/racedrivpan.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/radr.lay mame-0.251+dfsg.1/src/mame/layout/radr.lay --- mame-0.250+dfsg.1/src/mame/layout/radr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/radr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/rainbow.lay mame-0.251+dfsg.1/src/mame/layout/rainbow.lay --- mame-0.250+dfsg.1/src/mame/layout/rainbow.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/rainbow.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/raisedvl.lay mame-0.251+dfsg.1/src/mame/layout/raisedvl.lay --- mame-0.250+dfsg.1/src/mame/layout/raisedvl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/raisedvl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ravens.lay mame-0.251+dfsg.1/src/mame/layout/ravens.lay --- mame-0.250+dfsg.1/src/mame/layout/ravens.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ravens.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/rdqa.lay mame-0.251+dfsg.1/src/mame/layout/rdqa.lay --- mame-0.250+dfsg.1/src/mame/layout/rdqa.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/rdqa.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/re800.lay mame-0.251+dfsg.1/src/mame/layout/re800.lay --- mame-0.250+dfsg.1/src/mame/layout/re800.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/re800.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/re900.lay mame-0.251+dfsg.1/src/mame/layout/re900.lay --- mame-0.250+dfsg.1/src/mame/layout/re900.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/re900.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/rebound.lay mame-0.251+dfsg.1/src/mame/layout/rebound.lay --- mame-0.250+dfsg.1/src/mame/layout/rebound.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/rebound.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/recel.lay mame-0.251+dfsg.1/src/mame/layout/recel.lay --- mame-0.250+dfsg.1/src/mame/layout/recel.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/recel.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/redbaron.lay mame-0.251+dfsg.1/src/mame/layout/redbaron.lay --- mame-0.250+dfsg.1/src/mame/layout/redbaron.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/redbaron.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/reelrock.lay mame-0.251+dfsg.1/src/mame/layout/reelrock.lay --- mame-0.250+dfsg.1/src/mame/layout/reelrock.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/reelrock.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/regence.lay mame-0.251+dfsg.1/src/mame/layout/regence.lay --- mame-0.250+dfsg.1/src/mame/layout/regence.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/regence.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/retrsamb.lay mame-0.251+dfsg.1/src/mame/layout/retrsamb.lay --- mame-0.250+dfsg.1/src/mame/layout/retrsamb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/retrsamb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/retrsam.lay mame-0.251+dfsg.1/src/mame/layout/retrsam.lay --- mame-0.250+dfsg.1/src/mame/layout/retrsam.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/retrsam.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/rocknms.lay mame-0.251+dfsg.1/src/mame/layout/rocknms.lay --- mame-0.250+dfsg.1/src/mame/layout/rocknms.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/rocknms.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/rockpin.lay mame-0.251+dfsg.1/src/mame/layout/rockpin.lay --- mame-0.250+dfsg.1/src/mame/layout/rockpin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/rockpin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/roul.lay mame-0.251+dfsg.1/src/mame/layout/roul.lay --- mame-0.250+dfsg.1/src/mame/layout/roul.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/roul.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/roundup5.lay mame-0.251+dfsg.1/src/mame/layout/roundup5.lay --- mame-0.250+dfsg.1/src/mame/layout/roundup5.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/roundup5.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/rowamet.lay mame-0.251+dfsg.1/src/mame/layout/rowamet.lay --- mame-0.250+dfsg.1/src/mame/layout/rowamet.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/rowamet.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/royalcrd.lay mame-0.251+dfsg.1/src/mame/layout/royalcrd.lay --- mame-0.250+dfsg.1/src/mame/layout/royalcrd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/royalcrd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/roypok96.lay mame-0.251+dfsg.1/src/mame/layout/roypok96.lay --- mame-0.250+dfsg.1/src/mame/layout/roypok96.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/roypok96.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/rulechan.lay mame-0.251+dfsg.1/src/mame/layout/rulechan.lay --- mame-0.250+dfsg.1/src/mame/layout/rulechan.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/rulechan.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/rungun_dual.lay mame-0.251+dfsg.1/src/mame/layout/rungun_dual.lay --- mame-0.250+dfsg.1/src/mame/layout/rungun_dual.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/rungun_dual.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/rw10r.lay mame-0.251+dfsg.1/src/mame/layout/rw10r.lay --- mame-0.250+dfsg.1/src/mame/layout/rw10r.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/rw10r.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/rw24k.lay mame-0.251+dfsg.1/src/mame/layout/rw24k.lay --- mame-0.250+dfsg.1/src/mame/layout/rw24k.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/rw24k.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/rw30r.lay mame-0.251+dfsg.1/src/mame/layout/rw30r.lay --- mame-0.250+dfsg.1/src/mame/layout/rw30r.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/rw30r.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/rz1.lay mame-0.251+dfsg.1/src/mame/layout/rz1.lay --- mame-0.250+dfsg.1/src/mame/layout/rz1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/rz1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/s11a.lay mame-0.251+dfsg.1/src/mame/layout/s11a.lay --- mame-0.250+dfsg.1/src/mame/layout/s11a.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/s11a.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/s11b.lay mame-0.251+dfsg.1/src/mame/layout/s11b.lay --- mame-0.250+dfsg.1/src/mame/layout/s11b.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/s11b.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/s11c.lay mame-0.251+dfsg.1/src/mame/layout/s11c.lay --- mame-0.250+dfsg.1/src/mame/layout/s11c.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/s11c.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/s11.lay mame-0.251+dfsg.1/src/mame/layout/s11.lay --- mame-0.250+dfsg.1/src/mame/layout/s11.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/s11.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/s3.lay mame-0.251+dfsg.1/src/mame/layout/s3.lay --- mame-0.250+dfsg.1/src/mame/layout/s3.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/s3.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/s4.lay mame-0.251+dfsg.1/src/mame/layout/s4.lay --- mame-0.250+dfsg.1/src/mame/layout/s4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/s4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/s6a.lay mame-0.251+dfsg.1/src/mame/layout/s6a.lay --- mame-0.250+dfsg.1/src/mame/layout/s6a.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/s6a.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/s6.lay mame-0.251+dfsg.1/src/mame/layout/s6.lay --- mame-0.250+dfsg.1/src/mame/layout/s6.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/s6.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/s7.lay mame-0.251+dfsg.1/src/mame/layout/s7.lay --- mame-0.250+dfsg.1/src/mame/layout/s7.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/s7.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/s8pfevr.lay mame-0.251+dfsg.1/src/mame/layout/s8pfevr.lay --- mame-0.250+dfsg.1/src/mame/layout/s8pfevr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/s8pfevr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/s8ratrc.lay mame-0.251+dfsg.1/src/mame/layout/s8ratrc.lay --- mame-0.250+dfsg.1/src/mame/layout/s8ratrc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/s8ratrc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/s8scrzy.lay mame-0.251+dfsg.1/src/mame/layout/s8scrzy.lay --- mame-0.250+dfsg.1/src/mame/layout/s8scrzy.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/s8scrzy.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/s9.lay mame-0.251+dfsg.1/src/mame/layout/s9.lay --- mame-0.250+dfsg.1/src/mame/layout/s9.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/s9.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sag.lay mame-0.251+dfsg.1/src/mame/layout/sag.lay --- mame-0.250+dfsg.1/src/mame/layout/sag.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sag.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_ccompan.lay mame-0.251+dfsg.1/src/mame/layout/saitek_ccompan.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_ccompan.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_ccompan.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_chesstrvi.lay mame-0.251+dfsg.1/src/mame/layout/saitek_chesstrvi.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_chesstrvi.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_chesstrvi.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_chesstrv.lay mame-0.251+dfsg.1/src/mame/layout/saitek_chesstrv.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_chesstrv.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_chesstrv.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_corona.lay mame-0.251+dfsg.1/src/mame/layout/saitek_corona.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_corona.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_corona.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_cp2000.lay mame-0.251+dfsg.1/src/mame/layout/saitek_cp2000.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_cp2000.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_cp2000.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_delta1.lay mame-0.251+dfsg.1/src/mame/layout/saitek_delta1.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_delta1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_delta1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_exchess.lay mame-0.251+dfsg.1/src/mame/layout/saitek_exchess.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_exchess.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_exchess.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_galileo.lay mame-0.251+dfsg.1/src/mame/layout/saitek_galileo.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_galileo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_galileo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_intchess.lay mame-0.251+dfsg.1/src/mame/layout/saitek_intchess.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_intchess.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_intchess.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_leonardo.lay mame-0.251+dfsg.1/src/mame/layout/saitek_leonardo.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_leonardo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_leonardo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_mark5.lay mame-0.251+dfsg.1/src/mame/layout/saitek_mark5.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_mark5.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_mark5.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_mark6.lay mame-0.251+dfsg.1/src/mame/layout/saitek_mark6.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_mark6.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_mark6.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_minichess.lay mame-0.251+dfsg.1/src/mame/layout/saitek_minichess.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_minichess.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_minichess.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_prschess.lay mame-0.251+dfsg.1/src/mame/layout/saitek_prschess.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_prschess.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_prschess.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_renaissance.lay mame-0.251+dfsg.1/src/mame/layout/saitek_renaissance.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_renaissance.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_renaissance.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_risc2500.lay mame-0.251+dfsg.1/src/mame/layout/saitek_risc2500.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_risc2500.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_risc2500.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_schess.lay mame-0.251+dfsg.1/src/mame/layout/saitek_schess.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_schess.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_schess.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_simultano.lay mame-0.251+dfsg.1/src/mame/layout/saitek_simultano.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_simultano.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_simultano.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_sstar28k.lay mame-0.251+dfsg.1/src/mame/layout/saitek_sstar28k.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_sstar28k.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_sstar28k.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_ssystem3.lay mame-0.251+dfsg.1/src/mame/layout/saitek_ssystem3.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_ssystem3.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_ssystem3.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_ssystem4.lay mame-0.251+dfsg.1/src/mame/layout/saitek_ssystem4.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_ssystem4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_ssystem4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_stratos.lay mame-0.251+dfsg.1/src/mame/layout/saitek_stratos.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_stratos.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_stratos.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_tking.lay mame-0.251+dfsg.1/src/mame/layout/saitek_tking.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_tking.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_tking.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saitek_tstar432.lay mame-0.251+dfsg.1/src/mame/layout/saitek_tstar432.lay --- mame-0.250+dfsg.1/src/mame/layout/saitek_tstar432.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saitek_tstar432.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/saiyukip.lay mame-0.251+dfsg.1/src/mame/layout/saiyukip.lay --- mame-0.250+dfsg.1/src/mame/layout/saiyukip.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/saiyukip.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sanremo.lay mame-0.251+dfsg.1/src/mame/layout/sanremo.lay --- mame-0.250+dfsg.1/src/mame/layout/sanremo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sanremo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/savia84.lay mame-0.251+dfsg.1/src/mame/layout/savia84.lay --- mame-0.250+dfsg.1/src/mame/layout/savia84.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/savia84.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sbrkout.lay mame-0.251+dfsg.1/src/mame/layout/sbrkout.lay --- mame-0.250+dfsg.1/src/mame/layout/sbrkout.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sbrkout.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sbuk2a.lay mame-0.251+dfsg.1/src/mame/layout/sbuk2a.lay --- mame-0.250+dfsg.1/src/mame/layout/sbuk2a.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sbuk2a.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sbuk2.lay mame-0.251+dfsg.1/src/mame/layout/sbuk2.lay --- mame-0.250+dfsg.1/src/mame/layout/sbuk2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sbuk2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sbuk3.lay mame-0.251+dfsg.1/src/mame/layout/sbuk3.lay --- mame-0.250+dfsg.1/src/mame/layout/sbuk3.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sbuk3.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc1barcd.lay mame-0.251+dfsg.1/src/mame/layout/sc1barcd.lay --- mame-0.250+dfsg.1/src/mame/layout/sc1barcd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc1barcd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -1010,7 +1010,7 @@ - + @@ -1264,7 +1264,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc1bartk.lay mame-0.251+dfsg.1/src/mame/layout/sc1bartk.lay --- mame-0.250+dfsg.1/src/mame/layout/sc1bartk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc1bartk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc1cl65.lay mame-0.251+dfsg.1/src/mame/layout/sc1cl65.lay --- mame-0.250+dfsg.1/src/mame/layout/sc1cl65.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc1cl65.lay 2022-12-29 14:20:09.000000000 +0000 @@ -38,7 +38,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -238,7 +238,7 @@ - + @@ -258,7 +258,7 @@ - + @@ -278,7 +278,7 @@ - + @@ -298,7 +298,7 @@ - + @@ -318,7 +318,7 @@ - + @@ -338,7 +338,7 @@ - + @@ -358,7 +358,7 @@ - + @@ -378,7 +378,7 @@ - + @@ -398,7 +398,7 @@ - + @@ -418,7 +418,7 @@ - + @@ -438,7 +438,7 @@ - + @@ -458,7 +458,7 @@ - + @@ -478,7 +478,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -518,7 +518,7 @@ - + @@ -538,7 +538,7 @@ - + @@ -558,7 +558,7 @@ - + @@ -578,7 +578,7 @@ - + @@ -598,7 +598,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -1038,7 +1038,7 @@ - + @@ -1058,7 +1058,7 @@ - + @@ -1226,7 +1226,7 @@ - + @@ -1378,7 +1378,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc1clbtma.lay mame-0.251+dfsg.1/src/mame/layout/sc1clbtma.lay --- mame-0.250+dfsg.1/src/mame/layout/sc1clbtma.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc1clbtma.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1034,7 +1034,7 @@ - + @@ -1094,7 +1094,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1154,7 +1154,7 @@ - + @@ -1174,7 +1174,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1214,7 +1214,7 @@ - + @@ -1234,7 +1234,7 @@ - + @@ -1254,7 +1254,7 @@ - + @@ -1274,7 +1274,7 @@ - + @@ -1294,7 +1294,7 @@ - + @@ -1314,7 +1314,7 @@ - + @@ -1334,7 +1334,7 @@ - + @@ -1754,7 +1754,7 @@ - + @@ -1794,7 +1794,7 @@ - + @@ -1814,7 +1814,7 @@ - + @@ -1834,7 +1834,7 @@ - + @@ -1914,7 +1914,7 @@ - + @@ -1934,7 +1934,7 @@ - + @@ -1954,7 +1954,7 @@ - + @@ -1974,7 +1974,7 @@ - + @@ -1994,7 +1994,7 @@ - + @@ -2014,7 +2014,7 @@ - + @@ -2034,7 +2034,7 @@ - + @@ -2334,7 +2334,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc1cwcl.lay mame-0.251+dfsg.1/src/mame/layout/sc1cwcl.lay --- mame-0.250+dfsg.1/src/mame/layout/sc1cwcl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc1cwcl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -98,7 +98,7 @@ - + @@ -118,7 +118,7 @@ - + @@ -138,7 +138,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -178,7 +178,7 @@ - + @@ -198,7 +198,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -238,7 +238,7 @@ - + @@ -258,7 +258,7 @@ - + @@ -278,7 +278,7 @@ - + @@ -298,7 +298,7 @@ - + @@ -338,7 +338,7 @@ - + @@ -398,7 +398,7 @@ - + @@ -462,7 +462,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -1061,85 +1061,85 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc1dblch.lay mame-0.251+dfsg.1/src/mame/layout/sc1dblch.lay --- mame-0.250+dfsg.1/src/mame/layout/sc1dblch.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc1dblch.lay 2022-12-29 14:20:09.000000000 +0000 @@ -30,7 +30,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -954,7 +954,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -994,7 +994,7 @@ - + @@ -1982,7 +1982,7 @@ - + @@ -2238,7 +2238,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc1pwrl.lay mame-0.251+dfsg.1/src/mame/layout/sc1pwrl.lay --- mame-0.250+dfsg.1/src/mame/layout/sc1pwrl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc1pwrl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -990,7 +990,7 @@ - + @@ -1255,7 +1255,7 @@ - + @@ -1279,25 +1279,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc1sirb.lay mame-0.251+dfsg.1/src/mame/layout/sc1sirb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc1sirb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc1sirb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1130,7 +1130,7 @@ - + @@ -1250,7 +1250,7 @@ - + @@ -1586,7 +1586,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc1spct.lay mame-0.251+dfsg.1/src/mame/layout/sc1spct.lay --- mame-0.250+dfsg.1/src/mame/layout/sc1spct.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc1spct.lay 2022-12-29 14:20:09.000000000 +0000 @@ -90,7 +90,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -234,7 +234,7 @@ - + @@ -978,7 +978,7 @@ - + @@ -1230,7 +1230,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc1_vfd.lay mame-0.251+dfsg.1/src/mame/layout/sc1_vfd.lay --- mame-0.250+dfsg.1/src/mame/layout/sc1_vfd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc1_vfd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ @@ -185,13 +185,13 @@ - - + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc1_vid.lay mame-0.251+dfsg.1/src/mame/layout/sc1_vid.lay --- mame-0.250+dfsg.1/src/mame/layout/sc1_vid.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc1_vid.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc2casr2.lay mame-0.251+dfsg.1/src/mame/layout/sc2casr2.lay --- mame-0.250+dfsg.1/src/mame/layout/sc2casr2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc2casr2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1142,7 +1142,7 @@ - + @@ -1162,7 +1162,7 @@ - + @@ -1182,7 +1182,7 @@ - + @@ -1202,7 +1202,7 @@ - + @@ -1222,7 +1222,7 @@ - + @@ -1242,7 +1242,7 @@ - + @@ -1262,7 +1262,7 @@ - + @@ -1282,7 +1282,7 @@ - + @@ -1462,7 +1462,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc2copcl7.lay mame-0.251+dfsg.1/src/mame/layout/sc2copcl7.lay --- mame-0.250+dfsg.1/src/mame/layout/sc2copcl7.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc2copcl7.lay 2022-12-29 14:20:09.000000000 +0000 @@ -318,7 +318,7 @@ - + @@ -358,7 +358,7 @@ - + @@ -378,7 +378,7 @@ - + @@ -398,7 +398,7 @@ - + @@ -418,7 +418,7 @@ - + @@ -438,7 +438,7 @@ - + @@ -478,7 +478,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -518,7 +518,7 @@ - + @@ -754,7 +754,7 @@ - + @@ -882,7 +882,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -1098,7 +1098,7 @@ - + @@ -1118,7 +1118,7 @@ - + @@ -1138,7 +1138,7 @@ - + @@ -1158,7 +1158,7 @@ - + @@ -1178,7 +1178,7 @@ - + @@ -1198,7 +1198,7 @@ - + @@ -1218,7 +1218,7 @@ - + @@ -1238,7 +1238,7 @@ - + @@ -1258,7 +1258,7 @@ - + @@ -1278,7 +1278,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1318,7 +1318,7 @@ - + @@ -1338,7 +1338,7 @@ - + @@ -1358,7 +1358,7 @@ - + @@ -1378,7 +1378,7 @@ - + @@ -1418,7 +1418,7 @@ - + @@ -1438,7 +1438,7 @@ - + @@ -1698,7 +1698,7 @@ - + @@ -1814,13 +1814,13 @@ - + - + @@ -1870,91 +1870,91 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc2cpe.lay mame-0.251+dfsg.1/src/mame/layout/sc2cpe.lay --- mame-0.250+dfsg.1/src/mame/layout/sc2cpe.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc2cpe.lay 2022-12-29 14:20:09.000000000 +0000 @@ -402,7 +402,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -534,7 +534,7 @@ - + @@ -598,7 +598,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -638,7 +638,7 @@ - + @@ -658,7 +658,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -722,7 +722,7 @@ - + @@ -742,7 +742,7 @@ - + @@ -782,7 +782,7 @@ - + @@ -802,7 +802,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1086,7 +1086,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1166,7 +1166,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1206,7 +1206,7 @@ - + @@ -1226,7 +1226,7 @@ - + @@ -1246,7 +1246,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -1828,7 +1828,7 @@ - + @@ -1878,91 +1878,91 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1974,7 +1974,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc2cpg.lay mame-0.251+dfsg.1/src/mame/layout/sc2cpg.lay --- mame-0.250+dfsg.1/src/mame/layout/sc2cpg.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc2cpg.lay 2022-12-29 14:20:09.000000000 +0000 @@ -358,7 +358,7 @@ - + @@ -378,7 +378,7 @@ - + @@ -398,7 +398,7 @@ - + @@ -418,7 +418,7 @@ - + @@ -438,7 +438,7 @@ - + @@ -458,7 +458,7 @@ - + @@ -478,7 +478,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -518,7 +518,7 @@ - + @@ -538,7 +538,7 @@ - + @@ -558,7 +558,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1018,7 +1018,7 @@ - + @@ -1038,7 +1038,7 @@ - + @@ -1078,7 +1078,7 @@ - + @@ -1098,7 +1098,7 @@ - + @@ -1118,7 +1118,7 @@ - + @@ -1138,7 +1138,7 @@ - + @@ -1158,7 +1158,7 @@ - + @@ -1178,7 +1178,7 @@ - + @@ -1258,7 +1258,7 @@ - + @@ -1278,7 +1278,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1318,7 +1318,7 @@ - + @@ -1338,7 +1338,7 @@ - + @@ -1418,7 +1418,7 @@ - + @@ -1438,7 +1438,7 @@ - + @@ -1458,7 +1458,7 @@ - + @@ -1478,7 +1478,7 @@ - + @@ -1498,7 +1498,7 @@ - + @@ -1518,7 +1518,7 @@ - + @@ -1538,7 +1538,7 @@ - + @@ -1558,7 +1558,7 @@ - + @@ -1578,7 +1578,7 @@ - + @@ -1598,7 +1598,7 @@ - + @@ -1618,7 +1618,7 @@ - + @@ -1638,7 +1638,7 @@ - + @@ -1658,7 +1658,7 @@ - + @@ -1678,7 +1678,7 @@ - + @@ -1698,7 +1698,7 @@ - + @@ -1718,7 +1718,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc2_dmd.lay mame-0.251+dfsg.1/src/mame/layout/sc2_dmd.lay --- mame-0.250+dfsg.1/src/mame/layout/sc2_dmd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc2_dmd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc2eggs1.lay mame-0.251+dfsg.1/src/mame/layout/sc2eggs1.lay --- mame-0.250+dfsg.1/src/mame/layout/sc2eggs1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc2eggs1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -338,7 +338,7 @@ - + @@ -358,7 +358,7 @@ - + @@ -378,7 +378,7 @@ - + @@ -398,7 +398,7 @@ - + @@ -418,7 +418,7 @@ - + @@ -438,7 +438,7 @@ - + @@ -670,7 +670,7 @@ - + @@ -830,7 +830,7 @@ - + @@ -1090,7 +1090,7 @@ - + @@ -1150,7 +1150,7 @@ - + @@ -1170,7 +1170,7 @@ - + @@ -1210,7 +1210,7 @@ - + @@ -1294,7 +1294,7 @@ - + @@ -1334,7 +1334,7 @@ - + @@ -1438,7 +1438,7 @@ - + @@ -1498,7 +1498,7 @@ - + @@ -1538,7 +1538,7 @@ - + @@ -1578,7 +1578,7 @@ - + @@ -1618,7 +1618,7 @@ - + @@ -1678,7 +1678,7 @@ - + @@ -1742,7 +1742,7 @@ - + @@ -1822,7 +1822,7 @@ - + @@ -1842,7 +1842,7 @@ - + @@ -1862,7 +1862,7 @@ - + @@ -1902,7 +1902,7 @@ - + @@ -1922,7 +1922,7 @@ - + @@ -1942,7 +1942,7 @@ - + @@ -1962,7 +1962,7 @@ - + @@ -1982,7 +1982,7 @@ - + @@ -2182,7 +2182,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc2heypr.lay mame-0.251+dfsg.1/src/mame/layout/sc2heypr.lay --- mame-0.250+dfsg.1/src/mame/layout/sc2heypr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc2heypr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -973,7 +973,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc2.lay mame-0.251+dfsg.1/src/mame/layout/sc2.lay --- mame-0.250+dfsg.1/src/mame/layout/sc2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc2majes.lay mame-0.251+dfsg.1/src/mame/layout/sc2majes.lay --- mame-0.250+dfsg.1/src/mame/layout/sc2majes.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc2majes.lay 2022-12-29 14:20:09.000000000 +0000 @@ -394,7 +394,7 @@ - + @@ -434,7 +434,7 @@ - + @@ -454,7 +454,7 @@ - + @@ -474,7 +474,7 @@ - + @@ -494,7 +494,7 @@ - + @@ -514,7 +514,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -594,7 +594,7 @@ - + @@ -1010,7 +1010,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc2prem2.lay mame-0.251+dfsg.1/src/mame/layout/sc2prem2.lay --- mame-0.250+dfsg.1/src/mame/layout/sc2prem2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc2prem2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -74,7 +74,7 @@ - + @@ -94,7 +94,7 @@ - + @@ -114,7 +114,7 @@ - + @@ -134,7 +134,7 @@ - + @@ -154,7 +154,7 @@ - + @@ -174,7 +174,7 @@ - + @@ -194,7 +194,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -234,7 +234,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -274,7 +274,7 @@ - + @@ -294,7 +294,7 @@ - + @@ -314,7 +314,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -374,7 +374,7 @@ - + @@ -394,7 +394,7 @@ - + @@ -878,7 +878,7 @@ - + @@ -1170,7 +1170,7 @@ - + @@ -1314,7 +1314,7 @@ - + @@ -1334,7 +1334,7 @@ - + @@ -1354,7 +1354,7 @@ - + @@ -1374,7 +1374,7 @@ - + @@ -1442,7 +1442,7 @@ - + @@ -1462,7 +1462,7 @@ - + @@ -1482,7 +1482,7 @@ - + @@ -1502,7 +1502,7 @@ - + @@ -1598,7 +1598,7 @@ - + @@ -1938,13 +1938,13 @@ - + - + @@ -2004,7 +2004,7 @@ - + @@ -2022,91 +2022,91 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc2prom.lay mame-0.251+dfsg.1/src/mame/layout/sc2prom.lay --- mame-0.250+dfsg.1/src/mame/layout/sc2prom.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc2prom.lay 2022-12-29 14:20:09.000000000 +0000 @@ -162,7 +162,7 @@ - + @@ -770,7 +770,7 @@ - + @@ -790,7 +790,7 @@ - + @@ -810,7 +810,7 @@ - + @@ -830,7 +830,7 @@ - + @@ -850,7 +850,7 @@ - + @@ -870,7 +870,7 @@ - + @@ -890,7 +890,7 @@ - + @@ -1178,7 +1178,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc2ptytm1.lay mame-0.251+dfsg.1/src/mame/layout/sc2ptytm1.lay --- mame-0.250+dfsg.1/src/mame/layout/sc2ptytm1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc2ptytm1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -154,7 +154,7 @@ - + @@ -174,7 +174,7 @@ - + @@ -194,7 +194,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -234,7 +234,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -993,7 +993,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc2suprz1.lay mame-0.251+dfsg.1/src/mame/layout/sc2suprz1.lay --- mame-0.250+dfsg.1/src/mame/layout/sc2suprz1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc2suprz1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -826,7 +826,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc2town2.lay mame-0.251+dfsg.1/src/mame/layout/sc2town2.lay --- mame-0.250+dfsg.1/src/mame/layout/sc2town2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc2town2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1006,7 +1006,7 @@ - + @@ -1190,7 +1190,7 @@ - + @@ -1210,7 +1210,7 @@ - + @@ -1230,7 +1230,7 @@ - + @@ -1250,7 +1250,7 @@ - + @@ -1270,7 +1270,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -1310,7 +1310,7 @@ - + @@ -1717,7 +1717,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc2_vfd.lay mame-0.251+dfsg.1/src/mame/layout/sc2_vfd.lay --- mame-0.250+dfsg.1/src/mame/layout/sc2_vfd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc2_vfd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc2_vid.lay mame-0.251+dfsg.1/src/mame/layout/sc2_vid.lay --- mame-0.250+dfsg.1/src/mame/layout/sc2_vid.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc2_vid.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4acesh.lay mame-0.251+dfsg.1/src/mame/layout/sc4acesh.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4acesh.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4acesh.lay 2022-12-29 14:20:09.000000000 +0000 @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -1114,7 +1114,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1354,7 +1354,7 @@ - + @@ -1374,7 +1374,7 @@ - + @@ -1534,7 +1534,7 @@ - + @@ -1790,7 +1790,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4bantm.lay mame-0.251+dfsg.1/src/mame/layout/sc4bantm.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4bantm.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4bantm.lay 2022-12-29 14:20:09.000000000 +0000 @@ -694,7 +694,7 @@ - + @@ -714,7 +714,7 @@ - + @@ -734,7 +734,7 @@ - + @@ -754,7 +754,7 @@ - + @@ -774,7 +774,7 @@ - + @@ -794,7 +794,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -834,7 +834,7 @@ - + @@ -854,7 +854,7 @@ - + @@ -894,7 +894,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -954,7 +954,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -994,7 +994,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1034,7 +1034,7 @@ - + @@ -1054,7 +1054,7 @@ - + @@ -1074,7 +1074,7 @@ - + @@ -1094,7 +1094,7 @@ - + @@ -1114,7 +1114,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1154,7 +1154,7 @@ - + @@ -1174,7 +1174,7 @@ - + @@ -1214,7 +1214,7 @@ - + @@ -1234,7 +1234,7 @@ - + @@ -1254,7 +1254,7 @@ - + @@ -1278,7 +1278,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1382,7 +1382,7 @@ - + @@ -1402,7 +1402,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -1442,7 +1442,7 @@ - + @@ -1462,7 +1462,7 @@ - + @@ -1502,7 +1502,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -1542,7 +1542,7 @@ - + @@ -2542,7 +2542,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4bedcl.lay mame-0.251+dfsg.1/src/mame/layout/sc4bedcl.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4bedcl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4bedcl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -234,7 +234,7 @@ - + @@ -294,7 +294,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -414,7 +414,7 @@ - + @@ -474,7 +474,7 @@ - + @@ -534,7 +534,7 @@ - + @@ -594,7 +594,7 @@ - + @@ -654,7 +654,7 @@ - + @@ -674,7 +674,7 @@ - + @@ -734,7 +734,7 @@ - + @@ -754,7 +754,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -834,7 +834,7 @@ - + @@ -894,7 +894,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -994,7 +994,7 @@ - + @@ -1054,7 +1054,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1214,7 +1214,7 @@ - + @@ -1362,7 +1362,7 @@ - + @@ -1486,7 +1486,7 @@ - + @@ -1594,7 +1594,7 @@ - + @@ -1686,7 +1686,7 @@ - + @@ -1886,7 +1886,7 @@ - + @@ -1906,7 +1906,7 @@ - + @@ -2006,7 +2006,7 @@ - + @@ -2346,7 +2346,7 @@ - + @@ -3666,7 +3666,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4blast.lay mame-0.251+dfsg.1/src/mame/layout/sc4blast.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4blast.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4blast.lay 2022-12-29 14:20:09.000000000 +0000 @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -2286,7 +2286,7 @@ - + @@ -2306,7 +2306,7 @@ - + @@ -2326,7 +2326,7 @@ - + @@ -2346,7 +2346,7 @@ - + @@ -2366,7 +2366,7 @@ - + @@ -2386,7 +2386,7 @@ - + @@ -2406,7 +2406,7 @@ - + @@ -2426,7 +2426,7 @@ - + @@ -2446,7 +2446,7 @@ - + @@ -2726,7 +2726,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4blokq.lay mame-0.251+dfsg.1/src/mame/layout/sc4blokq.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4blokq.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4blokq.lay 2022-12-29 14:20:09.000000000 +0000 @@ -3582,7 +3582,7 @@ - + @@ -3622,7 +3622,7 @@ - + @@ -3642,7 +3642,7 @@ - + @@ -3682,7 +3682,7 @@ - + @@ -3722,7 +3722,7 @@ - + @@ -3742,7 +3742,7 @@ - + @@ -4306,7 +4306,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4bobcl.lay mame-0.251+dfsg.1/src/mame/layout/sc4bobcl.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4bobcl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4bobcl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -122,7 +122,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -554,7 +554,7 @@ - + @@ -578,7 +578,7 @@ - + @@ -602,7 +602,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -1162,7 +1162,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1354,7 +1354,7 @@ - + @@ -1378,7 +1378,7 @@ - + @@ -1642,7 +1642,7 @@ - + @@ -1666,7 +1666,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4brksp.lay mame-0.251+dfsg.1/src/mame/layout/sc4brksp.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4brksp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4brksp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -30,7 +30,7 @@ - + @@ -54,7 +54,7 @@ - + @@ -78,7 +78,7 @@ - + @@ -102,7 +102,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -174,7 +174,7 @@ - + @@ -422,7 +422,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1206,7 +1206,7 @@ - + @@ -1226,7 +1226,7 @@ - + @@ -1246,7 +1246,7 @@ - + @@ -1266,7 +1266,7 @@ - + @@ -1286,7 +1286,7 @@ - + @@ -1306,7 +1306,7 @@ - + @@ -1326,7 +1326,7 @@ - + @@ -1346,7 +1346,7 @@ - + @@ -2306,7 +2306,7 @@ - + @@ -2326,7 +2326,7 @@ - + @@ -2346,7 +2346,7 @@ - + @@ -2366,7 +2366,7 @@ - + @@ -2386,7 +2386,7 @@ - + @@ -2406,7 +2406,7 @@ - + @@ -2426,7 +2426,7 @@ - + @@ -2446,7 +2446,7 @@ - + @@ -2466,7 +2466,7 @@ - + @@ -2486,7 +2486,7 @@ - + @@ -2506,7 +2506,7 @@ - + @@ -2526,7 +2526,7 @@ - + @@ -3802,7 +3802,7 @@ - + @@ -3826,7 +3826,7 @@ - + @@ -3850,7 +3850,7 @@ - + @@ -3874,7 +3874,7 @@ - + @@ -3974,7 +3974,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4brollb.lay mame-0.251+dfsg.1/src/mame/layout/sc4brollb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4brollb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4brollb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -2158,7 +2158,7 @@ - + @@ -2178,7 +2178,7 @@ - + @@ -2198,7 +2198,7 @@ - + @@ -2218,7 +2218,7 @@ - + @@ -2238,7 +2238,7 @@ - + @@ -2258,7 +2258,7 @@ - + @@ -2298,7 +2298,7 @@ - + @@ -2318,7 +2318,7 @@ - + @@ -2338,7 +2338,7 @@ - + @@ -2358,7 +2358,7 @@ - + @@ -2378,7 +2378,7 @@ - + @@ -2398,7 +2398,7 @@ - + @@ -2418,7 +2418,7 @@ - + @@ -3274,7 +3274,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4cabin.lay mame-0.251+dfsg.1/src/mame/layout/sc4cabin.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4cabin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4cabin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -906,7 +906,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1166,7 +1166,7 @@ - + @@ -1226,7 +1226,7 @@ - + @@ -1246,7 +1246,7 @@ - + @@ -1266,7 +1266,7 @@ - + @@ -1286,7 +1286,7 @@ - + @@ -1366,7 +1366,7 @@ - + @@ -1386,7 +1386,7 @@ - + @@ -1406,7 +1406,7 @@ - + @@ -1426,7 +1426,7 @@ - + @@ -1546,7 +1546,7 @@ - + @@ -1566,7 +1566,7 @@ - + @@ -1586,7 +1586,7 @@ - + @@ -1606,7 +1606,7 @@ - + @@ -1626,7 +1626,7 @@ - + @@ -1646,7 +1646,7 @@ - + @@ -1666,7 +1666,7 @@ - + @@ -1686,7 +1686,7 @@ - + @@ -1766,7 +1766,7 @@ - + @@ -1786,7 +1786,7 @@ - + @@ -1806,7 +1806,7 @@ - + @@ -2246,7 +2246,7 @@ - + @@ -2266,7 +2266,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4canca.lay mame-0.251+dfsg.1/src/mame/layout/sc4canca.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4canca.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4canca.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -230,7 +230,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4captn.lay mame-0.251+dfsg.1/src/mame/layout/sc4captn.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4captn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4captn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -1150,7 +1150,7 @@ - + @@ -1170,7 +1170,7 @@ - + @@ -1190,7 +1190,7 @@ - + @@ -1258,7 +1258,7 @@ - + @@ -1278,7 +1278,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1318,7 +1318,7 @@ - + @@ -1338,7 +1338,7 @@ - + @@ -1358,7 +1358,7 @@ - + @@ -1378,7 +1378,7 @@ - + @@ -1398,7 +1398,7 @@ - + @@ -1418,7 +1418,7 @@ - + @@ -3436,67 +3436,67 @@ - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4cariqd.lay mame-0.251+dfsg.1/src/mame/layout/sc4cariqd.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4cariqd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4cariqd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -50,7 +50,7 @@ - + @@ -70,7 +70,7 @@ - + @@ -94,7 +94,7 @@ - + @@ -118,7 +118,7 @@ - + @@ -138,7 +138,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -182,7 +182,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -358,7 +358,7 @@ - + @@ -382,7 +382,7 @@ - + @@ -402,7 +402,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -1822,7 +1822,7 @@ - + @@ -1842,7 +1842,7 @@ - + @@ -1862,7 +1862,7 @@ - + @@ -1906,7 +1906,7 @@ - + @@ -1926,7 +1926,7 @@ - + @@ -1946,7 +1946,7 @@ - + @@ -1966,7 +1966,7 @@ - + @@ -1986,7 +1986,7 @@ - + @@ -2006,7 +2006,7 @@ - + @@ -2026,7 +2026,7 @@ - + @@ -2046,7 +2046,7 @@ - + @@ -2090,7 +2090,7 @@ - + @@ -2650,7 +2650,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4carrya.lay mame-0.251+dfsg.1/src/mame/layout/sc4carrya.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4carrya.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4carrya.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -1460,7 +1460,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4cashm.lay mame-0.251+dfsg.1/src/mame/layout/sc4cashm.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4cashm.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4cashm.lay 2022-12-29 14:20:09.000000000 +0000 @@ -142,7 +142,7 @@ - + @@ -242,7 +242,7 @@ - + @@ -738,7 +738,7 @@ - + @@ -1110,7 +1110,7 @@ - + @@ -1130,7 +1130,7 @@ - + @@ -1150,7 +1150,7 @@ - + @@ -1170,7 +1170,7 @@ - + @@ -1190,7 +1190,7 @@ - + @@ -1210,7 +1210,7 @@ - + @@ -1230,7 +1230,7 @@ - + @@ -2602,7 +2602,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4cclasd.lay mame-0.251+dfsg.1/src/mame/layout/sc4cclasd.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4cclasd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4cclasd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -1206,7 +1206,7 @@ - + @@ -1382,7 +1382,7 @@ - + @@ -1402,7 +1402,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -1462,7 +1462,7 @@ - + @@ -1600,7 +1600,7 @@ - + @@ -1618,61 +1618,61 @@ - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4cclim.lay mame-0.251+dfsg.1/src/mame/layout/sc4cclim.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4cclim.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4cclim.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -463,7 +463,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4chainb.lay mame-0.251+dfsg.1/src/mame/layout/sc4chainb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4chainb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4chainb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -1922,7 +1922,7 @@ - + @@ -1942,7 +1942,7 @@ - + @@ -1962,7 +1962,7 @@ - + @@ -1982,7 +1982,7 @@ - + @@ -2022,7 +2022,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4chavy.lay mame-0.251+dfsg.1/src/mame/layout/sc4chavy.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4chavy.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4chavy.lay 2022-12-29 14:20:09.000000000 +0000 @@ -2998,7 +2998,7 @@ - + @@ -3018,7 +3018,7 @@ - + @@ -3038,7 +3038,7 @@ - + @@ -3058,7 +3058,7 @@ - + @@ -3078,7 +3078,7 @@ - + @@ -3098,7 +3098,7 @@ - + @@ -3118,7 +3118,7 @@ - + @@ -3138,7 +3138,7 @@ - + @@ -3158,7 +3158,7 @@ - + @@ -3178,7 +3178,7 @@ - + @@ -3218,7 +3218,7 @@ - + @@ -3238,7 +3238,7 @@ - + @@ -3258,7 +3258,7 @@ - + @@ -3278,7 +3278,7 @@ - + @@ -3298,7 +3298,7 @@ - + @@ -3318,7 +3318,7 @@ - + @@ -3338,7 +3338,7 @@ - + @@ -3378,7 +3378,7 @@ - + @@ -3418,7 +3418,7 @@ - + @@ -3438,7 +3438,7 @@ - + @@ -3538,7 +3538,7 @@ - + @@ -3895,7 +3895,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4chick.lay mame-0.251+dfsg.1/src/mame/layout/sc4chick.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4chick.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4chick.lay 2022-12-29 14:20:09.000000000 +0000 @@ -206,7 +206,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4chuba.lay mame-0.251+dfsg.1/src/mame/layout/sc4chuba.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4chuba.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4chuba.lay 2022-12-29 14:20:09.000000000 +0000 @@ -214,7 +214,7 @@ - + @@ -234,7 +234,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -274,7 +274,7 @@ - + @@ -294,7 +294,7 @@ - + @@ -314,7 +314,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1086,7 +1086,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1166,7 +1166,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1206,7 +1206,7 @@ - + @@ -1226,7 +1226,7 @@ - + @@ -1246,7 +1246,7 @@ - + @@ -1266,7 +1266,7 @@ - + @@ -1286,7 +1286,7 @@ - + @@ -1490,7 +1490,7 @@ - + @@ -1510,7 +1510,7 @@ - + @@ -1530,7 +1530,7 @@ - + @@ -1734,7 +1734,7 @@ - + @@ -1754,7 +1754,7 @@ - + @@ -1774,7 +1774,7 @@ - + @@ -1794,7 +1794,7 @@ - + @@ -1814,7 +1814,7 @@ - + @@ -1834,7 +1834,7 @@ - + @@ -2174,7 +2174,7 @@ - + @@ -2194,7 +2194,7 @@ - + @@ -2214,7 +2214,7 @@ - + @@ -2234,7 +2234,7 @@ - + @@ -2254,7 +2254,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4clashd.lay mame-0.251+dfsg.1/src/mame/layout/sc4clashd.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4clashd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4clashd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -642,7 +642,7 @@ - + @@ -662,7 +662,7 @@ - + @@ -682,7 +682,7 @@ - + @@ -722,7 +722,7 @@ - + @@ -742,7 +742,7 @@ - + @@ -802,7 +802,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -882,7 +882,7 @@ - + @@ -962,7 +962,7 @@ - + @@ -1038,7 +1038,7 @@ - + @@ -1098,7 +1098,7 @@ - + @@ -1158,7 +1158,7 @@ - + @@ -1218,7 +1218,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1358,7 +1358,7 @@ - + @@ -1378,7 +1378,7 @@ - + @@ -1438,7 +1438,7 @@ - + @@ -1458,7 +1458,7 @@ - + @@ -2426,7 +2426,7 @@ - + @@ -2518,7 +2518,7 @@ - + @@ -2786,7 +2786,7 @@ - + @@ -3026,7 +3026,7 @@ - + @@ -3586,7 +3586,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4clue.lay mame-0.251+dfsg.1/src/mame/layout/sc4clue.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4clue.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4clue.lay 2022-12-29 14:20:09.000000000 +0000 @@ -3442,7 +3442,7 @@ - + @@ -3462,7 +3462,7 @@ - + @@ -3482,7 +3482,7 @@ - + @@ -3502,7 +3502,7 @@ - + @@ -3522,7 +3522,7 @@ - + @@ -3542,7 +3542,7 @@ - + @@ -3562,7 +3562,7 @@ - + @@ -3582,7 +3582,7 @@ - + @@ -3602,7 +3602,7 @@ - + @@ -3622,7 +3622,7 @@ - + @@ -3642,7 +3642,7 @@ - + @@ -3662,7 +3662,7 @@ - + @@ -4002,7 +4002,7 @@ - + @@ -4401,7 +4401,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4cmania.lay mame-0.251+dfsg.1/src/mame/layout/sc4cmania.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4cmania.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4cmania.lay 2022-12-29 14:20:09.000000000 +0000 @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -2486,7 +2486,7 @@ - + @@ -2982,7 +2982,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4cmous.lay mame-0.251+dfsg.1/src/mame/layout/sc4cmous.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4cmous.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4cmous.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1490,7 +1490,7 @@ - + @@ -1510,7 +1510,7 @@ - + @@ -1530,7 +1530,7 @@ - + @@ -1550,7 +1550,7 @@ - + @@ -1570,7 +1570,7 @@ - + @@ -1590,7 +1590,7 @@ - + @@ -1610,7 +1610,7 @@ - + @@ -1630,7 +1630,7 @@ - + @@ -1650,7 +1650,7 @@ - + @@ -1670,7 +1670,7 @@ - + @@ -1690,7 +1690,7 @@ - + @@ -2906,7 +2906,7 @@ - + @@ -2946,7 +2946,7 @@ - + @@ -2966,7 +2966,7 @@ - + @@ -2986,7 +2986,7 @@ - + @@ -3006,7 +3006,7 @@ - + @@ -3246,7 +3246,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4cnfr.lay mame-0.251+dfsg.1/src/mame/layout/sc4cnfr.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4cnfr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4cnfr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -206,7 +206,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -314,7 +314,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -398,7 +398,7 @@ - + @@ -418,7 +418,7 @@ - + @@ -438,7 +438,7 @@ - + @@ -458,7 +458,7 @@ - + @@ -478,7 +478,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -518,7 +518,7 @@ - + @@ -538,7 +538,7 @@ - + @@ -558,7 +558,7 @@ - + @@ -1570,7 +1570,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4coro.lay mame-0.251+dfsg.1/src/mame/layout/sc4coro.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4coro.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4coro.lay 2022-12-29 14:20:09.000000000 +0000 @@ -574,7 +574,7 @@ - + @@ -598,7 +598,7 @@ - + @@ -830,7 +830,7 @@ - + @@ -854,7 +854,7 @@ - + @@ -878,7 +878,7 @@ - + @@ -902,7 +902,7 @@ - + @@ -1102,7 +1102,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1398,7 +1398,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -1654,7 +1654,7 @@ - + @@ -1678,7 +1678,7 @@ - + @@ -2214,7 +2214,7 @@ - + @@ -2238,7 +2238,7 @@ - + @@ -3742,7 +3742,7 @@ - + @@ -3762,7 +3762,7 @@ - + @@ -3782,7 +3782,7 @@ - + @@ -3802,7 +3802,7 @@ - + @@ -3822,7 +3822,7 @@ - + @@ -3842,7 +3842,7 @@ - + @@ -3902,7 +3902,7 @@ - + @@ -3922,7 +3922,7 @@ - + @@ -3942,7 +3942,7 @@ - + @@ -4346,7 +4346,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4crcla.lay mame-0.251+dfsg.1/src/mame/layout/sc4crcla.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4crcla.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4crcla.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -906,7 +906,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1326,7 +1326,7 @@ - + @@ -1346,7 +1346,7 @@ - + @@ -1510,7 +1510,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1618,7 +1618,7 @@ - + @@ -1722,7 +1722,7 @@ - + @@ -1842,7 +1842,7 @@ - + @@ -2186,7 +2186,7 @@ - + @@ -2206,7 +2206,7 @@ - + @@ -2346,7 +2346,7 @@ - + @@ -2366,7 +2366,7 @@ - + @@ -2386,7 +2386,7 @@ - + @@ -2406,7 +2406,7 @@ - + @@ -2426,7 +2426,7 @@ - + @@ -2446,7 +2446,7 @@ - + @@ -2466,7 +2466,7 @@ - + @@ -2486,7 +2486,7 @@ - + @@ -2506,7 +2506,7 @@ - + @@ -2526,7 +2526,7 @@ - + @@ -2546,7 +2546,7 @@ - + @@ -2566,7 +2566,7 @@ - + @@ -2586,7 +2586,7 @@ - + @@ -2606,7 +2606,7 @@ - + @@ -2626,7 +2626,7 @@ - + @@ -2646,7 +2646,7 @@ - + @@ -2670,7 +2670,7 @@ - + @@ -2690,7 +2690,7 @@ - + @@ -2710,7 +2710,7 @@ - + @@ -2730,7 +2730,7 @@ - + @@ -2750,7 +2750,7 @@ - + @@ -2770,7 +2770,7 @@ - + @@ -2790,7 +2790,7 @@ - + @@ -2810,7 +2810,7 @@ - + @@ -2830,7 +2830,7 @@ - + @@ -2850,7 +2850,7 @@ - + @@ -2870,7 +2870,7 @@ - + @@ -2890,7 +2890,7 @@ - + @@ -2910,7 +2910,7 @@ - + @@ -2930,7 +2930,7 @@ - + @@ -2950,7 +2950,7 @@ - + @@ -2970,7 +2970,7 @@ - + @@ -2990,7 +2990,7 @@ - + @@ -3290,7 +3290,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4crc.lay mame-0.251+dfsg.1/src/mame/layout/sc4crc.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4crc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4crc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -790,7 +790,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -834,7 +834,7 @@ - + @@ -854,7 +854,7 @@ - + @@ -874,7 +874,7 @@ - + @@ -894,7 +894,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -954,7 +954,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1278,7 +1278,7 @@ - + @@ -1322,7 +1322,7 @@ - + @@ -1510,7 +1510,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -1902,7 +1902,7 @@ - + @@ -1970,7 +1970,7 @@ - + @@ -2158,7 +2158,7 @@ - + @@ -2226,7 +2226,7 @@ - + @@ -2306,7 +2306,7 @@ - + @@ -2326,7 +2326,7 @@ - + @@ -2346,7 +2346,7 @@ - + @@ -2366,7 +2366,7 @@ - + @@ -2386,7 +2386,7 @@ - + @@ -2406,7 +2406,7 @@ - + @@ -2426,7 +2426,7 @@ - + @@ -3034,7 +3034,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4crzgna.lay mame-0.251+dfsg.1/src/mame/layout/sc4crzgna.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4crzgna.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4crzgna.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + @@ -307,7 +307,7 @@ - + @@ -325,31 +325,31 @@ - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4crzkya.lay mame-0.251+dfsg.1/src/mame/layout/sc4crzkya.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4crzkya.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4crzkya.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -374,7 +374,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4cvanif.lay mame-0.251+dfsg.1/src/mame/layout/sc4cvanif.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4cvanif.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4cvanif.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -1730,7 +1730,7 @@ - + @@ -1750,7 +1750,7 @@ - + @@ -1770,7 +1770,7 @@ - + @@ -2514,7 +2514,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4cvclb.lay mame-0.251+dfsg.1/src/mame/layout/sc4cvclb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4cvclb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4cvclb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1478,7 +1478,7 @@ - + @@ -1498,7 +1498,7 @@ - + @@ -1518,7 +1518,7 @@ - + @@ -1538,7 +1538,7 @@ - + @@ -1558,7 +1558,7 @@ - + @@ -1578,7 +1578,7 @@ - + @@ -1598,7 +1598,7 @@ - + @@ -1618,7 +1618,7 @@ - + @@ -1638,7 +1638,7 @@ - + @@ -1658,7 +1658,7 @@ - + @@ -1678,7 +1678,7 @@ - + @@ -1698,7 +1698,7 @@ - + @@ -1718,7 +1718,7 @@ - + @@ -1738,7 +1738,7 @@ - + @@ -1758,7 +1758,7 @@ - + @@ -1778,7 +1778,7 @@ - + @@ -1798,7 +1798,7 @@ - + @@ -1818,7 +1818,7 @@ - + @@ -1838,7 +1838,7 @@ - + @@ -1858,7 +1858,7 @@ - + @@ -2478,7 +2478,7 @@ - + @@ -2598,7 +2598,7 @@ - + @@ -2794,7 +2794,7 @@ - + @@ -3014,7 +3014,7 @@ - + @@ -3154,7 +3154,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4dayltf.lay mame-0.251+dfsg.1/src/mame/layout/sc4dayltf.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4dayltf.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4dayltf.lay 2022-12-29 14:20:09.000000000 +0000 @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1086,7 +1086,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1166,7 +1166,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -3550,7 +3550,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4deepi.lay mame-0.251+dfsg.1/src/mame/layout/sc4deepi.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4deepi.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4deepi.lay 2022-12-29 14:20:09.000000000 +0000 @@ -554,7 +554,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -594,7 +594,7 @@ - + @@ -614,7 +614,7 @@ - + @@ -634,7 +634,7 @@ - + @@ -654,7 +654,7 @@ - + @@ -674,7 +674,7 @@ - + @@ -694,7 +694,7 @@ - + @@ -714,7 +714,7 @@ - + @@ -734,7 +734,7 @@ - + @@ -754,7 +754,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1214,7 +1214,7 @@ - + @@ -1234,7 +1234,7 @@ - + @@ -1254,7 +1254,7 @@ - + @@ -1274,7 +1274,7 @@ - + @@ -1294,7 +1294,7 @@ - + @@ -2398,7 +2398,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4derby.lay mame-0.251+dfsg.1/src/mame/layout/sc4derby.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4derby.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4derby.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -430,7 +430,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -718,7 +718,7 @@ - + @@ -738,7 +738,7 @@ - + @@ -758,7 +758,7 @@ - + @@ -778,7 +778,7 @@ - + @@ -798,7 +798,7 @@ - + @@ -818,7 +818,7 @@ - + @@ -838,7 +838,7 @@ - + @@ -858,7 +858,7 @@ - + @@ -878,7 +878,7 @@ - + @@ -898,7 +898,7 @@ - + @@ -918,7 +918,7 @@ - + @@ -938,7 +938,7 @@ - + @@ -978,7 +978,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1018,7 +1018,7 @@ - + @@ -1038,7 +1038,7 @@ - + @@ -1058,7 +1058,7 @@ - + @@ -1102,7 +1102,7 @@ - + @@ -1122,7 +1122,7 @@ - + @@ -1142,7 +1142,7 @@ - + @@ -1826,7 +1826,7 @@ - + @@ -1850,7 +1850,7 @@ - + @@ -2442,7 +2442,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4_dmd.lay mame-0.251+dfsg.1/src/mame/layout/sc4_dmd.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4_dmd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4_dmd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4dmineb.lay mame-0.251+dfsg.1/src/mame/layout/sc4dmineb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4dmineb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4dmineb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -838,7 +838,7 @@ - + @@ -858,7 +858,7 @@ - + @@ -878,7 +878,7 @@ - + @@ -898,7 +898,7 @@ - + @@ -918,7 +918,7 @@ - + @@ -938,7 +938,7 @@ - + @@ -958,7 +958,7 @@ - + @@ -978,7 +978,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1018,7 +1018,7 @@ - + @@ -1038,7 +1038,7 @@ - + @@ -1058,7 +1058,7 @@ - + @@ -1078,7 +1078,7 @@ - + @@ -1098,7 +1098,7 @@ - + @@ -1118,7 +1118,7 @@ - + @@ -1138,7 +1138,7 @@ - + @@ -1158,7 +1158,7 @@ - + @@ -1178,7 +1178,7 @@ - + @@ -1198,7 +1198,7 @@ - + @@ -1218,7 +1218,7 @@ - + @@ -1238,7 +1238,7 @@ - + @@ -1258,7 +1258,7 @@ - + @@ -1278,7 +1278,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1318,7 +1318,7 @@ - + @@ -1338,7 +1338,7 @@ - + @@ -1358,7 +1358,7 @@ - + @@ -1378,7 +1378,7 @@ - + @@ -1622,7 +1622,7 @@ - + @@ -1646,7 +1646,7 @@ - + @@ -1838,7 +1838,7 @@ - + @@ -1858,7 +1858,7 @@ - + @@ -1878,7 +1878,7 @@ - + @@ -1898,7 +1898,7 @@ - + @@ -1918,7 +1918,7 @@ - + @@ -1938,7 +1938,7 @@ - + @@ -1958,7 +1958,7 @@ - + @@ -1978,7 +1978,7 @@ - + @@ -1998,7 +1998,7 @@ - + @@ -2018,7 +2018,7 @@ - + @@ -2574,7 +2574,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4dnddw.lay mame-0.251+dfsg.1/src/mame/layout/sc4dnddw.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4dnddw.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4dnddw.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4dnd.lay mame-0.251+dfsg.1/src/mame/layout/sc4dnd.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4dnd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4dnd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4dndtp.lay mame-0.251+dfsg.1/src/mame/layout/sc4dndtp.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4dndtp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4dndtp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4drubyb.lay mame-0.251+dfsg.1/src/mame/layout/sc4drubyb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4drubyb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4drubyb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -310,7 +310,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4duckqa.lay mame-0.251+dfsg.1/src/mame/layout/sc4duckqa.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4duckqa.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4duckqa.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -3590,7 +3590,7 @@ - + @@ -3610,7 +3610,7 @@ - + @@ -3630,7 +3630,7 @@ - + @@ -3690,7 +3690,7 @@ - + @@ -3710,7 +3710,7 @@ - + @@ -3750,7 +3750,7 @@ - + @@ -3770,7 +3770,7 @@ - + @@ -3790,7 +3790,7 @@ - + @@ -3830,7 +3830,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4dyna.lay mame-0.251+dfsg.1/src/mame/layout/sc4dyna.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4dyna.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4dyna.lay 2022-12-29 14:20:09.000000000 +0000 @@ -390,7 +390,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -430,7 +430,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1338,7 +1338,7 @@ - + @@ -1462,7 +1462,7 @@ - + @@ -1482,7 +1482,7 @@ - + @@ -1502,7 +1502,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -1542,7 +1542,7 @@ - + @@ -1710,7 +1710,7 @@ - + @@ -1774,7 +1774,7 @@ - + @@ -2102,7 +2102,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4eascsc.lay mame-0.251+dfsg.1/src/mame/layout/sc4eascsc.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4eascsc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4eascsc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -186,7 +186,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4emmerc.lay mame-0.251+dfsg.1/src/mame/layout/sc4emmerc.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4emmerc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4emmerc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -2754,7 +2754,7 @@ - + @@ -2774,7 +2774,7 @@ - + @@ -2794,7 +2794,7 @@ - + @@ -2814,7 +2814,7 @@ - + @@ -2834,7 +2834,7 @@ - + @@ -2854,7 +2854,7 @@ - + @@ -2874,7 +2874,7 @@ - + @@ -2894,7 +2894,7 @@ - + @@ -3034,7 +3034,7 @@ - + @@ -3054,7 +3054,7 @@ - + @@ -3074,7 +3074,7 @@ - + @@ -3178,7 +3178,7 @@ - + @@ -3346,7 +3346,7 @@ - + @@ -3406,7 +3406,7 @@ - + @@ -3486,7 +3486,7 @@ - + @@ -3590,7 +3590,7 @@ - + @@ -3610,7 +3610,7 @@ - + @@ -3874,7 +3874,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4fastfb.lay mame-0.251+dfsg.1/src/mame/layout/sc4fastfb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4fastfb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4fastfb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -2978,7 +2978,7 @@ - + @@ -2998,7 +2998,7 @@ - + @@ -3018,7 +3018,7 @@ - + @@ -3038,7 +3038,7 @@ - + @@ -3058,7 +3058,7 @@ - + @@ -3078,7 +3078,7 @@ - + @@ -3098,7 +3098,7 @@ - + @@ -3118,7 +3118,7 @@ - + @@ -3138,7 +3138,7 @@ - + @@ -3270,7 +3270,7 @@ - + @@ -3290,7 +3290,7 @@ - + @@ -3310,7 +3310,7 @@ - + @@ -3350,7 +3350,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4fd7tha.lay mame-0.251+dfsg.1/src/mame/layout/sc4fd7tha.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4fd7tha.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4fd7tha.lay 2022-12-29 14:20:09.000000000 +0000 @@ -738,7 +738,7 @@ - + @@ -758,7 +758,7 @@ - + @@ -778,7 +778,7 @@ - + @@ -798,7 +798,7 @@ - + @@ -818,7 +818,7 @@ - + @@ -838,7 +838,7 @@ - + @@ -858,7 +858,7 @@ - + @@ -878,7 +878,7 @@ - + @@ -898,7 +898,7 @@ - + @@ -2218,7 +2218,7 @@ - + @@ -2242,7 +2242,7 @@ - + @@ -2266,7 +2266,7 @@ - + @@ -2290,7 +2290,7 @@ - + @@ -2314,7 +2314,7 @@ - + @@ -2338,7 +2338,7 @@ - + @@ -2998,7 +2998,7 @@ - + @@ -3018,7 +3018,7 @@ - + @@ -3038,7 +3038,7 @@ - + @@ -3058,7 +3058,7 @@ - + @@ -3078,7 +3078,7 @@ - + @@ -3098,7 +3098,7 @@ - + @@ -3118,7 +3118,7 @@ - + @@ -3138,7 +3138,7 @@ - + @@ -3158,7 +3158,7 @@ - + @@ -3178,7 +3178,7 @@ - + @@ -3198,7 +3198,7 @@ - + @@ -3218,7 +3218,7 @@ - + @@ -3462,7 +3462,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4fever.lay mame-0.251+dfsg.1/src/mame/layout/sc4fever.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4fever.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4fever.lay 2022-12-29 14:20:09.000000000 +0000 @@ -926,7 +926,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1166,7 +1166,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1206,7 +1206,7 @@ - + @@ -1286,7 +1286,7 @@ - + @@ -1366,7 +1366,7 @@ - + @@ -1386,7 +1386,7 @@ - + @@ -2614,7 +2614,7 @@ - + @@ -2634,7 +2634,7 @@ - + @@ -2658,7 +2658,7 @@ - + @@ -2678,7 +2678,7 @@ - + @@ -2698,7 +2698,7 @@ - + @@ -2718,7 +2718,7 @@ - + @@ -2742,7 +2742,7 @@ - + @@ -2762,7 +2762,7 @@ - + @@ -2782,7 +2782,7 @@ - + @@ -2806,7 +2806,7 @@ - + @@ -3018,7 +3018,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4fire.lay mame-0.251+dfsg.1/src/mame/layout/sc4fire.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4fire.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4fire.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1542,7 +1542,7 @@ - + @@ -1562,7 +1562,7 @@ - + @@ -1582,7 +1582,7 @@ - + @@ -1602,7 +1602,7 @@ - + @@ -1622,7 +1622,7 @@ - + @@ -1642,7 +1642,7 @@ - + @@ -1662,7 +1662,7 @@ - + @@ -1682,7 +1682,7 @@ - + @@ -1702,7 +1702,7 @@ - + @@ -2234,7 +2234,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4fpitcb.lay mame-0.251+dfsg.1/src/mame/layout/sc4fpitcb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4fpitcb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4fpitcb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -310,7 +310,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -370,7 +370,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -430,7 +430,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1614,7 +1614,7 @@ - + @@ -1634,7 +1634,7 @@ - + @@ -1654,7 +1654,7 @@ - + @@ -1674,7 +1674,7 @@ - + @@ -1694,7 +1694,7 @@ - + @@ -1734,7 +1734,7 @@ - + @@ -1754,7 +1754,7 @@ - + @@ -2150,7 +2150,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4ftopib.lay mame-0.251+dfsg.1/src/mame/layout/sc4ftopib.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4ftopib.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4ftopib.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -114,7 +114,7 @@ - + @@ -154,7 +154,7 @@ - + @@ -174,7 +174,7 @@ - + @@ -194,7 +194,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -234,7 +234,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -598,7 +598,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -638,7 +638,7 @@ - + @@ -658,7 +658,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -698,7 +698,7 @@ - + @@ -718,7 +718,7 @@ - + @@ -738,7 +738,7 @@ - + @@ -758,7 +758,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -1902,7 +1902,7 @@ - + @@ -1986,7 +1986,7 @@ - + @@ -2006,7 +2006,7 @@ - + @@ -2262,7 +2262,7 @@ - + @@ -2302,7 +2302,7 @@ - + @@ -2398,7 +2398,7 @@ - + @@ -2418,7 +2418,7 @@ - + @@ -2438,7 +2438,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4fullt.lay mame-0.251+dfsg.1/src/mame/layout/sc4fullt.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4fullt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4fullt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -2270,7 +2270,7 @@ - + @@ -2290,7 +2290,7 @@ - + @@ -2310,7 +2310,7 @@ - + @@ -2330,7 +2330,7 @@ - + @@ -2350,7 +2350,7 @@ - + @@ -2370,7 +2370,7 @@ - + @@ -2390,7 +2390,7 @@ - + @@ -2410,7 +2410,7 @@ - + @@ -2430,7 +2430,7 @@ - + @@ -2450,7 +2450,7 @@ - + @@ -2470,7 +2470,7 @@ - + @@ -2498,7 +2498,7 @@ - + @@ -2526,7 +2526,7 @@ - + @@ -2546,7 +2546,7 @@ - + @@ -2822,7 +2822,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4fwpcs.lay mame-0.251+dfsg.1/src/mame/layout/sc4fwpcs.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4fwpcs.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4fwpcs.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -600,25 +600,25 @@ - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4gaga.lay mame-0.251+dfsg.1/src/mame/layout/sc4gaga.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4gaga.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4gaga.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -1258,7 +1258,7 @@ - + @@ -1278,7 +1278,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1318,7 +1318,7 @@ - + @@ -1338,7 +1338,7 @@ - + @@ -1358,7 +1358,7 @@ - + @@ -1378,7 +1378,7 @@ - + @@ -1398,7 +1398,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4gball.lay mame-0.251+dfsg.1/src/mame/layout/sc4gball.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4gball.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4gball.lay 2022-12-29 14:20:09.000000000 +0000 @@ -738,7 +738,7 @@ - + @@ -758,7 +758,7 @@ - + @@ -778,7 +778,7 @@ - + @@ -898,7 +898,7 @@ - + @@ -918,7 +918,7 @@ - + @@ -962,7 +962,7 @@ - + @@ -1002,7 +1002,7 @@ - + @@ -1042,7 +1042,7 @@ - + @@ -1062,7 +1062,7 @@ - + @@ -1102,7 +1102,7 @@ - + @@ -1122,7 +1122,7 @@ - + @@ -2558,7 +2558,7 @@ - + @@ -2578,7 +2578,7 @@ - + @@ -2598,7 +2598,7 @@ - + @@ -2618,7 +2618,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4gdclb.lay mame-0.251+dfsg.1/src/mame/layout/sc4gdclb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4gdclb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4gdclb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -218,7 +218,7 @@ - + @@ -238,7 +238,7 @@ - + @@ -258,7 +258,7 @@ - + @@ -278,7 +278,7 @@ - + @@ -298,7 +298,7 @@ - + @@ -318,7 +318,7 @@ - + @@ -378,7 +378,7 @@ - + @@ -398,7 +398,7 @@ - + @@ -418,7 +418,7 @@ - + @@ -482,7 +482,7 @@ - + @@ -502,7 +502,7 @@ - + @@ -542,7 +542,7 @@ - + @@ -562,7 +562,7 @@ - + @@ -582,7 +582,7 @@ - + @@ -602,7 +602,7 @@ - + @@ -622,7 +622,7 @@ - + @@ -642,7 +642,7 @@ - + @@ -1494,7 +1494,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -1534,7 +1534,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1594,7 +1594,7 @@ - + @@ -1614,7 +1614,7 @@ - + @@ -1634,7 +1634,7 @@ - + @@ -1654,7 +1654,7 @@ - + @@ -1674,7 +1674,7 @@ - + @@ -1694,7 +1694,7 @@ - + @@ -1714,7 +1714,7 @@ - + @@ -1734,7 +1734,7 @@ - + @@ -1754,7 +1754,7 @@ - + @@ -1774,7 +1774,7 @@ - + @@ -1798,7 +1798,7 @@ - + @@ -1822,7 +1822,7 @@ - + @@ -1846,7 +1846,7 @@ - + @@ -1870,7 +1870,7 @@ - + @@ -1894,7 +1894,7 @@ - + @@ -1918,7 +1918,7 @@ - + @@ -1942,7 +1942,7 @@ - + @@ -1966,7 +1966,7 @@ - + @@ -1990,7 +1990,7 @@ - + @@ -2014,7 +2014,7 @@ - + @@ -2038,7 +2038,7 @@ - + @@ -2062,7 +2062,7 @@ - + @@ -2086,7 +2086,7 @@ - + @@ -2110,7 +2110,7 @@ - + @@ -2134,7 +2134,7 @@ - + @@ -2158,7 +2158,7 @@ - + @@ -2182,7 +2182,7 @@ - + @@ -2498,7 +2498,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4gd.lay mame-0.251+dfsg.1/src/mame/layout/sc4gd.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4gd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4gd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -1102,7 +1102,7 @@ - + @@ -1274,7 +1274,7 @@ - + @@ -1294,7 +1294,7 @@ - + @@ -1314,7 +1314,7 @@ - + @@ -2574,7 +2574,7 @@ - + @@ -2594,7 +2594,7 @@ - + @@ -2614,7 +2614,7 @@ - + @@ -2634,7 +2634,7 @@ - + @@ -2654,7 +2654,7 @@ - + @@ -2674,7 +2674,7 @@ - + @@ -2694,7 +2694,7 @@ - + @@ -2714,7 +2714,7 @@ - + @@ -2734,7 +2734,7 @@ - + @@ -2754,7 +2754,7 @@ - + @@ -2774,7 +2774,7 @@ - + @@ -2794,7 +2794,7 @@ - + @@ -2814,7 +2814,7 @@ - + @@ -2834,7 +2834,7 @@ - + @@ -2854,7 +2854,7 @@ - + @@ -2874,7 +2874,7 @@ - + @@ -2894,7 +2894,7 @@ - + @@ -2914,7 +2914,7 @@ - + @@ -2934,7 +2934,7 @@ - + @@ -2954,7 +2954,7 @@ - + @@ -2974,7 +2974,7 @@ - + @@ -2994,7 +2994,7 @@ - + @@ -3014,7 +3014,7 @@ - + @@ -3094,7 +3094,7 @@ - + @@ -3114,7 +3114,7 @@ - + @@ -3194,7 +3194,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4ggdlxf.lay mame-0.251+dfsg.1/src/mame/layout/sc4ggdlxf.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4ggdlxf.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4ggdlxf.lay 2022-12-29 14:20:09.000000000 +0000 @@ -146,7 +146,7 @@ - + @@ -335,7 +335,7 @@ - + @@ -353,7 +353,7 @@ - + @@ -401,13 +401,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4gldcl.lay mame-0.251+dfsg.1/src/mame/layout/sc4gldcl.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4gldcl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4gldcl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -2434,7 +2434,7 @@ - + @@ -2454,7 +2454,7 @@ - + @@ -2474,7 +2474,7 @@ - + @@ -2494,7 +2494,7 @@ - + @@ -2514,7 +2514,7 @@ - + @@ -2534,7 +2534,7 @@ - + @@ -2554,7 +2554,7 @@ - + @@ -2574,7 +2574,7 @@ - + @@ -2594,7 +2594,7 @@ - + @@ -2614,7 +2614,7 @@ - + @@ -2634,7 +2634,7 @@ - + @@ -2654,7 +2654,7 @@ - + @@ -2674,7 +2674,7 @@ - + @@ -2694,7 +2694,7 @@ - + @@ -2714,7 +2714,7 @@ - + @@ -2734,7 +2734,7 @@ - + @@ -2754,7 +2754,7 @@ - + @@ -2774,7 +2774,7 @@ - + @@ -2794,7 +2794,7 @@ - + @@ -2814,7 +2814,7 @@ - + @@ -2834,7 +2834,7 @@ - + @@ -2854,7 +2854,7 @@ - + @@ -2874,7 +2874,7 @@ - + @@ -2894,7 +2894,7 @@ - + @@ -2914,7 +2914,7 @@ - + @@ -2934,7 +2934,7 @@ - + @@ -2954,7 +2954,7 @@ - + @@ -2974,7 +2974,7 @@ - + @@ -2994,7 +2994,7 @@ - + @@ -3014,7 +3014,7 @@ - + @@ -3034,7 +3034,7 @@ - + @@ -3054,7 +3054,7 @@ - + @@ -3074,7 +3074,7 @@ - + @@ -3094,7 +3094,7 @@ - + @@ -3114,7 +3114,7 @@ - + @@ -3134,7 +3134,7 @@ - + @@ -3154,7 +3154,7 @@ - + @@ -3174,7 +3174,7 @@ - + @@ -3194,7 +3194,7 @@ - + @@ -3214,7 +3214,7 @@ - + @@ -3234,7 +3234,7 @@ - + @@ -3254,7 +3254,7 @@ - + @@ -3274,7 +3274,7 @@ - + @@ -3294,7 +3294,7 @@ - + @@ -3314,7 +3314,7 @@ - + @@ -3334,7 +3334,7 @@ - + @@ -3354,7 +3354,7 @@ - + @@ -3374,7 +3374,7 @@ - + @@ -3394,7 +3394,7 @@ - + @@ -3414,7 +3414,7 @@ - + @@ -3434,7 +3434,7 @@ - + @@ -3458,7 +3458,7 @@ - + @@ -3482,7 +3482,7 @@ - + @@ -3931,97 +3931,97 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4033,7 +4033,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4gslam.lay mame-0.251+dfsg.1/src/mame/layout/sc4gslam.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4gslam.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4gslam.lay 2022-12-29 14:20:09.000000000 +0000 @@ -426,7 +426,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -906,7 +906,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1174,7 +1174,7 @@ - + @@ -1198,7 +1198,7 @@ - + @@ -1222,7 +1222,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4gx.lay mame-0.251+dfsg.1/src/mame/layout/sc4gx.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4gx.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4gx.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -411,13 +411,13 @@ - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4hdd.lay mame-0.251+dfsg.1/src/mame/layout/sc4hdd.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4hdd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4hdd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -62,7 +62,7 @@ - + @@ -82,7 +82,7 @@ - + @@ -102,7 +102,7 @@ - + @@ -122,7 +122,7 @@ - + @@ -142,7 +142,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -182,7 +182,7 @@ - + @@ -202,7 +202,7 @@ - + @@ -1342,7 +1342,7 @@ - + @@ -1382,7 +1382,7 @@ - + @@ -1402,7 +1402,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -1442,7 +1442,7 @@ - + @@ -1482,7 +1482,7 @@ - + @@ -1502,7 +1502,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -1542,7 +1542,7 @@ - + @@ -2382,7 +2382,7 @@ - + @@ -2442,7 +2442,7 @@ - + @@ -2482,7 +2482,7 @@ - + @@ -2522,7 +2522,7 @@ - + @@ -2542,7 +2542,7 @@ - + @@ -2602,7 +2602,7 @@ - + @@ -2622,7 +2622,7 @@ - + @@ -2682,7 +2682,7 @@ - + @@ -2722,7 +2722,7 @@ - + @@ -2762,7 +2762,7 @@ - + @@ -2782,7 +2782,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4hi5.lay mame-0.251+dfsg.1/src/mame/layout/sc4hi5.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4hi5.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4hi5.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -1198,7 +1198,7 @@ - + @@ -1218,7 +1218,7 @@ - + @@ -1238,7 +1238,7 @@ - + @@ -1258,7 +1258,7 @@ - + @@ -1278,7 +1278,7 @@ - + @@ -1838,7 +1838,7 @@ - + @@ -1858,7 +1858,7 @@ - + @@ -1898,7 +1898,7 @@ - + @@ -1918,7 +1918,7 @@ - + @@ -1958,7 +1958,7 @@ - + @@ -1978,7 +1978,7 @@ - + @@ -1998,7 +1998,7 @@ - + @@ -2018,7 +2018,7 @@ - + @@ -2038,7 +2038,7 @@ - + @@ -2058,7 +2058,7 @@ - + @@ -2078,7 +2078,7 @@ - + @@ -2098,7 +2098,7 @@ - + @@ -2158,7 +2158,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4hilo.lay mame-0.251+dfsg.1/src/mame/layout/sc4hilo.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4hilo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4hilo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -1946,7 +1946,7 @@ - + @@ -1966,7 +1966,7 @@ - + @@ -1986,7 +1986,7 @@ - + @@ -2006,7 +2006,7 @@ - + @@ -2026,7 +2026,7 @@ - + @@ -2046,7 +2046,7 @@ - + @@ -2066,7 +2066,7 @@ - + @@ -2086,7 +2086,7 @@ - + @@ -2106,7 +2106,7 @@ - + @@ -2126,7 +2126,7 @@ - + @@ -2146,7 +2146,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4himi.lay mame-0.251+dfsg.1/src/mame/layout/sc4himi.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4himi.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4himi.lay 2022-12-29 14:20:09.000000000 +0000 @@ -2038,7 +2038,7 @@ - + @@ -2058,7 +2058,7 @@ - + @@ -2078,7 +2078,7 @@ - + @@ -2098,7 +2098,7 @@ - + @@ -2118,7 +2118,7 @@ - + @@ -2138,7 +2138,7 @@ - + @@ -2158,7 +2158,7 @@ - + @@ -2178,7 +2178,7 @@ - + @@ -2198,7 +2198,7 @@ - + @@ -2278,7 +2278,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4hissa.lay mame-0.251+dfsg.1/src/mame/layout/sc4hissa.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4hissa.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4hissa.lay 2022-12-29 14:20:09.000000000 +0000 @@ -978,7 +978,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1018,7 +1018,7 @@ - + @@ -1042,7 +1042,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1086,7 +1086,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1166,7 +1166,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1210,7 +1210,7 @@ - + @@ -1234,7 +1234,7 @@ - + @@ -1254,7 +1254,7 @@ - + @@ -1274,7 +1274,7 @@ - + @@ -1294,7 +1294,7 @@ - + @@ -1314,7 +1314,7 @@ - + @@ -1334,7 +1334,7 @@ - + @@ -1354,7 +1354,7 @@ - + @@ -1378,7 +1378,7 @@ - + @@ -1402,7 +1402,7 @@ - + @@ -1426,7 +1426,7 @@ - + @@ -1450,7 +1450,7 @@ - + @@ -1470,7 +1470,7 @@ - + @@ -1490,7 +1490,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -1538,7 +1538,7 @@ - + @@ -1562,7 +1562,7 @@ - + @@ -1586,7 +1586,7 @@ - + @@ -1606,7 +1606,7 @@ - + @@ -1626,7 +1626,7 @@ - + @@ -1646,7 +1646,7 @@ - + @@ -1666,7 +1666,7 @@ - + @@ -1686,7 +1686,7 @@ - + @@ -1706,7 +1706,7 @@ - + @@ -1726,7 +1726,7 @@ - + @@ -1746,7 +1746,7 @@ - + @@ -3326,7 +3326,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4holyw.lay mame-0.251+dfsg.1/src/mame/layout/sc4holyw.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4holyw.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4holyw.lay 2022-12-29 14:20:09.000000000 +0000 @@ -914,7 +914,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -954,7 +954,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -994,7 +994,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1034,7 +1034,7 @@ - + @@ -1054,7 +1054,7 @@ - + @@ -1074,7 +1074,7 @@ - + @@ -2510,7 +2510,7 @@ - + @@ -2530,7 +2530,7 @@ - + @@ -2550,7 +2550,7 @@ - + @@ -2570,7 +2570,7 @@ - + @@ -2590,7 +2590,7 @@ - + @@ -2610,7 +2610,7 @@ - + @@ -2630,7 +2630,7 @@ - + @@ -2650,7 +2650,7 @@ - + @@ -2670,7 +2670,7 @@ - + @@ -2690,7 +2690,7 @@ - + @@ -2750,7 +2750,7 @@ - + @@ -3072,7 +3072,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4hotpr.lay mame-0.251+dfsg.1/src/mame/layout/sc4hotpr.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4hotpr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4hotpr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1910,7 +1910,7 @@ - + @@ -1934,7 +1934,7 @@ - + @@ -1958,7 +1958,7 @@ - + @@ -1982,7 +1982,7 @@ - + @@ -2006,7 +2006,7 @@ - + @@ -2030,7 +2030,7 @@ - + @@ -2054,7 +2054,7 @@ - + @@ -2078,7 +2078,7 @@ - + @@ -2102,7 +2102,7 @@ - + @@ -2126,7 +2126,7 @@ - + @@ -2150,7 +2150,7 @@ - + @@ -2174,7 +2174,7 @@ - + @@ -2198,7 +2198,7 @@ - + @@ -2218,7 +2218,7 @@ - + @@ -2238,7 +2238,7 @@ - + @@ -2258,7 +2258,7 @@ - + @@ -2278,7 +2278,7 @@ - + @@ -2298,7 +2298,7 @@ - + @@ -2318,7 +2318,7 @@ - + @@ -2338,7 +2338,7 @@ - + @@ -2358,7 +2358,7 @@ - + @@ -2378,7 +2378,7 @@ - + @@ -2398,7 +2398,7 @@ - + @@ -2418,7 +2418,7 @@ - + @@ -2458,7 +2458,7 @@ - + @@ -2478,7 +2478,7 @@ - + @@ -2498,7 +2498,7 @@ - + @@ -2946,7 +2946,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4hotwd.lay mame-0.251+dfsg.1/src/mame/layout/sc4hotwd.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4hotwd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4hotwd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -414,7 +414,7 @@ - + @@ -434,7 +434,7 @@ - + @@ -454,7 +454,7 @@ - + @@ -474,7 +474,7 @@ - + @@ -494,7 +494,7 @@ - + @@ -514,7 +514,7 @@ - + @@ -534,7 +534,7 @@ - + @@ -554,7 +554,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -1458,7 +1458,7 @@ - + @@ -1478,7 +1478,7 @@ - + @@ -1498,7 +1498,7 @@ - + @@ -1518,7 +1518,7 @@ - + @@ -1598,7 +1598,7 @@ - + @@ -1638,7 +1638,7 @@ - + @@ -1818,7 +1818,7 @@ - + @@ -1838,7 +1838,7 @@ - + @@ -1858,7 +1858,7 @@ - + @@ -1878,7 +1878,7 @@ - + @@ -1898,7 +1898,7 @@ - + @@ -1918,7 +1918,7 @@ - + @@ -1938,7 +1938,7 @@ - + @@ -1958,7 +1958,7 @@ - + @@ -1978,7 +1978,7 @@ - + @@ -1998,7 +1998,7 @@ - + @@ -2018,7 +2018,7 @@ - + @@ -2038,7 +2038,7 @@ - + @@ -2058,7 +2058,7 @@ - + @@ -2078,7 +2078,7 @@ - + @@ -2098,7 +2098,7 @@ - + @@ -2118,7 +2118,7 @@ - + @@ -2138,7 +2138,7 @@ - + @@ -2158,7 +2158,7 @@ - + @@ -2178,7 +2178,7 @@ - + @@ -2198,7 +2198,7 @@ - + @@ -2218,7 +2218,7 @@ - + @@ -2238,7 +2238,7 @@ - + @@ -2258,7 +2258,7 @@ - + @@ -2438,7 +2438,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4hyde.lay mame-0.251+dfsg.1/src/mame/layout/sc4hyde.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4hyde.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4hyde.lay 2022-12-29 14:20:09.000000000 +0000 @@ -254,7 +254,7 @@ - + @@ -274,7 +274,7 @@ - + @@ -294,7 +294,7 @@ - + @@ -314,7 +314,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -374,7 +374,7 @@ - + @@ -394,7 +394,7 @@ - + @@ -414,7 +414,7 @@ - + @@ -434,7 +434,7 @@ - + @@ -1954,7 +1954,7 @@ - + @@ -1974,7 +1974,7 @@ - + @@ -1994,7 +1994,7 @@ - + @@ -2014,7 +2014,7 @@ - + @@ -2034,7 +2034,7 @@ - + @@ -2054,7 +2054,7 @@ - + @@ -2074,7 +2074,7 @@ - + @@ -2094,7 +2094,7 @@ - + @@ -2114,7 +2114,7 @@ - + @@ -2134,7 +2134,7 @@ - + @@ -2390,7 +2390,7 @@ - + @@ -2410,7 +2410,7 @@ - + @@ -2430,7 +2430,7 @@ - + @@ -2730,7 +2730,7 @@ - + @@ -2750,7 +2750,7 @@ - + @@ -2770,7 +2770,7 @@ - + @@ -2790,7 +2790,7 @@ - + @@ -2810,7 +2810,7 @@ - + @@ -2830,7 +2830,7 @@ - + @@ -2850,7 +2850,7 @@ - + @@ -2870,7 +2870,7 @@ - + @@ -2890,7 +2890,7 @@ - + @@ -3242,7 +3242,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4jack.lay mame-0.251+dfsg.1/src/mame/layout/sc4jack.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4jack.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4jack.lay 2022-12-29 14:20:09.000000000 +0000 @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -562,7 +562,7 @@ - + @@ -582,7 +582,7 @@ - + @@ -602,7 +602,7 @@ - + @@ -622,7 +622,7 @@ - + @@ -642,7 +642,7 @@ - + @@ -662,7 +662,7 @@ - + @@ -682,7 +682,7 @@ - + @@ -702,7 +702,7 @@ - + @@ -722,7 +722,7 @@ - + @@ -742,7 +742,7 @@ - + @@ -762,7 +762,7 @@ - + @@ -782,7 +782,7 @@ - + @@ -802,7 +802,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -2278,7 +2278,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4kalei.lay mame-0.251+dfsg.1/src/mame/layout/sc4kalei.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4kalei.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4kalei.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1114,7 +1114,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1154,7 +1154,7 @@ - + @@ -1174,7 +1174,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1214,7 +1214,7 @@ - + @@ -1234,7 +1234,7 @@ - + @@ -1254,7 +1254,7 @@ - + @@ -1274,7 +1274,7 @@ - + @@ -1294,7 +1294,7 @@ - + @@ -1314,7 +1314,7 @@ - + @@ -1334,7 +1334,7 @@ - + @@ -1354,7 +1354,7 @@ - + @@ -3566,7 +3566,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4knokb.lay mame-0.251+dfsg.1/src/mame/layout/sc4knokb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4knokb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4knokb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -1910,7 +1910,7 @@ - + @@ -2065,7 +2065,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4lined.lay mame-0.251+dfsg.1/src/mame/layout/sc4lined.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4lined.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4lined.lay 2022-12-29 14:20:09.000000000 +0000 @@ -369,7 +369,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4lions.lay mame-0.251+dfsg.1/src/mame/layout/sc4lions.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4lions.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4lions.lay 2022-12-29 14:20:09.000000000 +0000 @@ -86,7 +86,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -670,7 +670,7 @@ - + @@ -730,7 +730,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -794,7 +794,7 @@ - + @@ -1154,7 +1154,7 @@ - + @@ -1174,7 +1174,7 @@ - + @@ -1194,7 +1194,7 @@ - + @@ -1214,7 +1214,7 @@ - + @@ -1234,7 +1234,7 @@ - + @@ -1254,7 +1254,7 @@ - + @@ -1274,7 +1274,7 @@ - + @@ -1294,7 +1294,7 @@ - + @@ -1314,7 +1314,7 @@ - + @@ -1334,7 +1334,7 @@ - + @@ -2038,7 +2038,7 @@ - + @@ -2058,7 +2058,7 @@ - + @@ -2078,7 +2078,7 @@ - + @@ -2098,7 +2098,7 @@ - + @@ -2118,7 +2118,7 @@ - + @@ -2138,7 +2138,7 @@ - + @@ -2158,7 +2158,7 @@ - + @@ -2566,7 +2566,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4lirb.lay mame-0.251+dfsg.1/src/mame/layout/sc4lirb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4lirb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4lirb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -954,7 +954,7 @@ - + @@ -1014,7 +1014,7 @@ - + @@ -1054,7 +1054,7 @@ - + @@ -1074,7 +1074,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1174,7 +1174,7 @@ - + @@ -1434,7 +1434,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1754,7 +1754,7 @@ - + @@ -1774,7 +1774,7 @@ - + @@ -1794,7 +1794,7 @@ - + @@ -1814,7 +1814,7 @@ - + @@ -1834,7 +1834,7 @@ - + @@ -1854,7 +1854,7 @@ - + @@ -1874,7 +1874,7 @@ - + @@ -1894,7 +1894,7 @@ - + @@ -1914,7 +1914,7 @@ - + @@ -1938,7 +1938,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4lkbcl.lay mame-0.251+dfsg.1/src/mame/layout/sc4lkbcl.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4lkbcl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4lkbcl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -890,7 +890,7 @@ - + @@ -1070,7 +1070,7 @@ - + @@ -1090,7 +1090,7 @@ - + @@ -1342,7 +1342,7 @@ - + @@ -1362,7 +1362,7 @@ - + @@ -1606,7 +1606,7 @@ - + @@ -1850,7 +1850,7 @@ - + @@ -1870,7 +1870,7 @@ - + @@ -2150,7 +2150,7 @@ - + @@ -2170,7 +2170,7 @@ - + @@ -2190,7 +2190,7 @@ - + @@ -2482,7 +2482,7 @@ - + @@ -2502,7 +2502,7 @@ - + @@ -2806,7 +2806,7 @@ - + @@ -2826,7 +2826,7 @@ - + @@ -3098,7 +3098,7 @@ - + @@ -3118,7 +3118,7 @@ - + @@ -3382,7 +3382,7 @@ - + @@ -3402,7 +3402,7 @@ - + @@ -4106,7 +4106,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4lockb.lay mame-0.251+dfsg.1/src/mame/layout/sc4lockb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4lockb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4lockb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1022,7 +1022,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1070,7 +1070,7 @@ - + @@ -1094,7 +1094,7 @@ - + @@ -1118,7 +1118,7 @@ - + @@ -1142,7 +1142,7 @@ - + @@ -1166,7 +1166,7 @@ - + @@ -1190,7 +1190,7 @@ - + @@ -1214,7 +1214,7 @@ - + @@ -1234,7 +1234,7 @@ - + @@ -1258,7 +1258,7 @@ - + @@ -1282,7 +1282,7 @@ - + @@ -1306,7 +1306,7 @@ - + @@ -1330,7 +1330,7 @@ - + @@ -1354,7 +1354,7 @@ - + @@ -1378,7 +1378,7 @@ - + @@ -3096,7 +3096,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4mgr.lay mame-0.251+dfsg.1/src/mame/layout/sc4mgr.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4mgr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4mgr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -210,7 +210,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -370,7 +370,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4mmmg.lay mame-0.251+dfsg.1/src/mame/layout/sc4mmmg.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4mmmg.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4mmmg.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1222,7 +1222,7 @@ - + @@ -1242,7 +1242,7 @@ - + @@ -1262,7 +1262,7 @@ - + @@ -1282,7 +1282,7 @@ - + @@ -1302,7 +1302,7 @@ - + @@ -1322,7 +1322,7 @@ - + @@ -1342,7 +1342,7 @@ - + @@ -1362,7 +1362,7 @@ - + @@ -1382,7 +1382,7 @@ - + @@ -1402,7 +1402,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -1442,7 +1442,7 @@ - + @@ -1502,7 +1502,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -1542,7 +1542,7 @@ - + @@ -1562,7 +1562,7 @@ - + @@ -1582,7 +1582,7 @@ - + @@ -1602,7 +1602,7 @@ - + @@ -1622,7 +1622,7 @@ - + @@ -1642,7 +1642,7 @@ - + @@ -1662,7 +1662,7 @@ - + @@ -1682,7 +1682,7 @@ - + @@ -1702,7 +1702,7 @@ - + @@ -1722,7 +1722,7 @@ - + @@ -1742,7 +1742,7 @@ - + @@ -1762,7 +1762,7 @@ - + @@ -1782,7 +1782,7 @@ - + @@ -1802,7 +1802,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4mondxe.lay mame-0.251+dfsg.1/src/mame/layout/sc4mondxe.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4mondxe.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4mondxe.lay 2022-12-29 14:20:09.000000000 +0000 @@ -106,7 +106,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4monoba.lay mame-0.251+dfsg.1/src/mame/layout/sc4monoba.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4monoba.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4monoba.lay 2022-12-29 14:20:09.000000000 +0000 @@ -930,7 +930,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -970,7 +970,7 @@ - + @@ -1030,7 +1030,7 @@ - + @@ -1382,7 +1382,7 @@ - + @@ -1402,7 +1402,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -1442,7 +1442,7 @@ - + @@ -1462,7 +1462,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -1602,7 +1602,7 @@ - + @@ -1662,7 +1662,7 @@ - + @@ -1702,7 +1702,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4monot.lay mame-0.251+dfsg.1/src/mame/layout/sc4monot.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4monot.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4monot.lay 2022-12-29 14:20:09.000000000 +0000 @@ -110,7 +110,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -471,7 +471,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4motor.lay mame-0.251+dfsg.1/src/mame/layout/sc4motor.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4motor.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4motor.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -554,7 +554,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -594,7 +594,7 @@ - + @@ -614,7 +614,7 @@ - + @@ -634,7 +634,7 @@ - + @@ -654,7 +654,7 @@ - + @@ -674,7 +674,7 @@ - + @@ -694,7 +694,7 @@ - + @@ -734,7 +734,7 @@ - + @@ -2102,7 +2102,7 @@ - + @@ -2358,7 +2358,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4mou.lay mame-0.251+dfsg.1/src/mame/layout/sc4mou.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4mou.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4mou.lay 2022-12-29 14:20:09.000000000 +0000 @@ -458,7 +458,7 @@ - + @@ -598,7 +598,7 @@ - + @@ -790,7 +790,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -1054,7 +1054,7 @@ - + @@ -1078,7 +1078,7 @@ - + @@ -1198,7 +1198,7 @@ - + @@ -1222,7 +1222,7 @@ - + @@ -1846,7 +1846,7 @@ - + @@ -1898,7 +1898,7 @@ - + @@ -1918,7 +1918,7 @@ - + @@ -1938,7 +1938,7 @@ - + @@ -1958,7 +1958,7 @@ - + @@ -1978,7 +1978,7 @@ - + @@ -1998,7 +1998,7 @@ - + @@ -2098,7 +2098,7 @@ - + @@ -2190,7 +2190,7 @@ - + @@ -2534,7 +2534,7 @@ - + @@ -2554,7 +2554,7 @@ - + @@ -2574,7 +2574,7 @@ - + @@ -2594,7 +2594,7 @@ - + @@ -2614,7 +2614,7 @@ - + @@ -2634,7 +2634,7 @@ - + @@ -2654,7 +2654,7 @@ - + @@ -2674,7 +2674,7 @@ - + @@ -2694,7 +2694,7 @@ - + @@ -2714,7 +2714,7 @@ - + @@ -2734,7 +2734,7 @@ - + @@ -2754,7 +2754,7 @@ - + @@ -2774,7 +2774,7 @@ - + @@ -2794,7 +2794,7 @@ - + @@ -2814,7 +2814,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4mr2rc.lay mame-0.251+dfsg.1/src/mame/layout/sc4mr2rc.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4mr2rc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4mr2rc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -258,7 +258,7 @@ - + @@ -278,7 +278,7 @@ - + @@ -298,7 +298,7 @@ - + @@ -318,7 +318,7 @@ - + @@ -338,7 +338,7 @@ - + @@ -358,7 +358,7 @@ - + @@ -378,7 +378,7 @@ - + @@ -398,7 +398,7 @@ - + @@ -418,7 +418,7 @@ - + @@ -438,7 +438,7 @@ - + @@ -458,7 +458,7 @@ - + @@ -478,7 +478,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -518,7 +518,7 @@ - + @@ -538,7 +538,7 @@ - + @@ -558,7 +558,7 @@ - + @@ -658,7 +658,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -698,7 +698,7 @@ - + @@ -718,7 +718,7 @@ - + @@ -738,7 +738,7 @@ - + @@ -758,7 +758,7 @@ - + @@ -778,7 +778,7 @@ - + @@ -798,7 +798,7 @@ - + @@ -818,7 +818,7 @@ - + @@ -838,7 +838,7 @@ - + @@ -3586,7 +3586,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4mspid.lay mame-0.251+dfsg.1/src/mame/layout/sc4mspid.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4mspid.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4mspid.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -282,31 +282,31 @@ - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4mtbb.lay mame-0.251+dfsg.1/src/mame/layout/sc4mtbb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4mtbb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4mtbb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1178,7 +1178,7 @@ - + @@ -1282,7 +1282,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -1758,7 +1758,7 @@ - + @@ -1778,7 +1778,7 @@ - + @@ -1798,7 +1798,7 @@ - + @@ -1818,7 +1818,7 @@ - + @@ -1838,7 +1838,7 @@ - + @@ -1858,7 +1858,7 @@ - + @@ -1878,7 +1878,7 @@ - + @@ -1898,7 +1898,7 @@ - + @@ -1938,7 +1938,7 @@ - + @@ -1958,7 +1958,7 @@ - + @@ -1978,7 +1978,7 @@ - + @@ -2266,7 +2266,7 @@ - + @@ -2350,7 +2350,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4mtbclb.lay mame-0.251+dfsg.1/src/mame/layout/sc4mtbclb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4mtbclb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4mtbclb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -770,7 +770,7 @@ - + @@ -838,7 +838,7 @@ - + @@ -858,7 +858,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -1018,7 +1018,7 @@ - + @@ -1158,7 +1158,7 @@ - + @@ -1202,7 +1202,7 @@ - + @@ -1222,7 +1222,7 @@ - + @@ -1266,7 +1266,7 @@ - + @@ -1382,7 +1382,7 @@ - + @@ -1846,7 +1846,7 @@ - + @@ -1866,7 +1866,7 @@ - + @@ -1886,7 +1886,7 @@ - + @@ -1906,7 +1906,7 @@ - + @@ -1926,7 +1926,7 @@ - + @@ -1946,7 +1946,7 @@ - + @@ -1966,7 +1966,7 @@ - + @@ -1986,7 +1986,7 @@ - + @@ -2006,7 +2006,7 @@ - + @@ -2026,7 +2026,7 @@ - + @@ -2046,7 +2046,7 @@ - + @@ -2066,7 +2066,7 @@ - + @@ -2086,7 +2086,7 @@ - + @@ -2106,7 +2106,7 @@ - + @@ -2126,7 +2126,7 @@ - + @@ -2146,7 +2146,7 @@ - + @@ -2166,7 +2166,7 @@ - + @@ -2186,7 +2186,7 @@ - + @@ -2206,7 +2206,7 @@ - + @@ -2226,7 +2226,7 @@ - + @@ -2246,7 +2246,7 @@ - + @@ -2266,7 +2266,7 @@ - + @@ -2398,7 +2398,7 @@ - + @@ -3510,7 +3510,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4nmtj.lay mame-0.251+dfsg.1/src/mame/layout/sc4nmtj.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4nmtj.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4nmtj.lay 2022-12-29 14:20:09.000000000 +0000 @@ -310,7 +310,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -378,7 +378,7 @@ - + @@ -398,7 +398,7 @@ - + @@ -422,7 +422,7 @@ - + @@ -442,7 +442,7 @@ - + @@ -462,7 +462,7 @@ - + @@ -482,7 +482,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -594,7 +594,7 @@ - + @@ -1806,7 +1806,7 @@ - + @@ -1826,7 +1826,7 @@ - + @@ -1846,7 +1846,7 @@ - + @@ -2002,7 +2002,7 @@ - + @@ -2062,7 +2062,7 @@ - + @@ -2082,7 +2082,7 @@ - + @@ -2102,7 +2102,7 @@ - + @@ -2122,7 +2122,7 @@ - + @@ -2142,7 +2142,7 @@ - + @@ -2162,7 +2162,7 @@ - + @@ -2182,7 +2182,7 @@ - + @@ -2202,7 +2202,7 @@ - + @@ -2222,7 +2222,7 @@ - + @@ -2242,7 +2242,7 @@ - + @@ -2262,7 +2262,7 @@ - + @@ -2282,7 +2282,7 @@ - + @@ -2302,7 +2302,7 @@ - + @@ -2322,7 +2322,7 @@ - + @@ -2342,7 +2342,7 @@ - + @@ -2362,7 +2362,7 @@ - + @@ -2382,7 +2382,7 @@ - + @@ -2402,7 +2402,7 @@ - + @@ -2422,7 +2422,7 @@ - + @@ -2442,7 +2442,7 @@ - + @@ -2462,7 +2462,7 @@ - + @@ -2482,7 +2482,7 @@ - + @@ -2502,7 +2502,7 @@ - + @@ -2522,7 +2522,7 @@ - + @@ -2542,7 +2542,7 @@ - + @@ -2562,7 +2562,7 @@ - + @@ -2582,7 +2582,7 @@ - + @@ -2602,7 +2602,7 @@ - + @@ -2622,7 +2622,7 @@ - + @@ -2642,7 +2642,7 @@ - + @@ -2662,7 +2662,7 @@ - + @@ -2682,7 +2682,7 @@ - + @@ -2742,7 +2742,7 @@ - + @@ -2762,7 +2762,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4nudita.lay mame-0.251+dfsg.1/src/mame/layout/sc4nudita.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4nudita.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4nudita.lay 2022-12-29 14:20:09.000000000 +0000 @@ -266,7 +266,7 @@ - + @@ -545,49 +545,49 @@ - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4paccl.lay mame-0.251+dfsg.1/src/mame/layout/sc4paccl.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4paccl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4paccl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1246,7 +1246,7 @@ - + @@ -1266,7 +1266,7 @@ - + @@ -1286,7 +1286,7 @@ - + @@ -1306,7 +1306,7 @@ - + @@ -2710,7 +2710,7 @@ - + @@ -2730,7 +2730,7 @@ - + @@ -3074,7 +3074,7 @@ - + @@ -3218,7 +3218,7 @@ - + @@ -3238,7 +3238,7 @@ - + @@ -3258,7 +3258,7 @@ - + @@ -3398,7 +3398,7 @@ - + @@ -3854,7 +3854,7 @@ - + @@ -3975,7 +3975,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4pacqpa.lay mame-0.251+dfsg.1/src/mame/layout/sc4pacqpa.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4pacqpa.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4pacqpa.lay 2022-12-29 14:20:09.000000000 +0000 @@ -170,7 +170,7 @@ - + @@ -194,7 +194,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -242,7 +242,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -1334,7 +1334,7 @@ - + @@ -1374,7 +1374,7 @@ - + @@ -1394,7 +1394,7 @@ - + @@ -1434,7 +1434,7 @@ - + @@ -1494,7 +1494,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1594,7 +1594,7 @@ - + @@ -1634,7 +1634,7 @@ - + @@ -2826,7 +2826,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4pgold.lay mame-0.251+dfsg.1/src/mame/layout/sc4pgold.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4pgold.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4pgold.lay 2022-12-29 14:20:09.000000000 +0000 @@ -70,7 +70,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -1686,7 +1686,7 @@ - + @@ -1706,7 +1706,7 @@ - + @@ -1726,7 +1726,7 @@ - + @@ -1746,7 +1746,7 @@ - + @@ -1766,7 +1766,7 @@ - + @@ -1786,7 +1786,7 @@ - + @@ -1806,7 +1806,7 @@ - + @@ -1826,7 +1826,7 @@ - + @@ -1846,7 +1846,7 @@ - + @@ -2358,7 +2358,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4pipe.lay mame-0.251+dfsg.1/src/mame/layout/sc4pipe.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4pipe.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4pipe.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1130,7 +1130,7 @@ - + @@ -1150,7 +1150,7 @@ - + @@ -1170,7 +1170,7 @@ - + @@ -2398,7 +2398,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4plumb.lay mame-0.251+dfsg.1/src/mame/layout/sc4plumb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4plumb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4plumb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -2054,7 +2054,7 @@ - + @@ -2074,7 +2074,7 @@ - + @@ -2094,7 +2094,7 @@ - + @@ -2114,7 +2114,7 @@ - + @@ -2134,7 +2134,7 @@ - + @@ -2154,7 +2154,7 @@ - + @@ -2174,7 +2174,7 @@ - + @@ -2194,7 +2194,7 @@ - + @@ -2214,7 +2214,7 @@ - + @@ -2234,7 +2234,7 @@ - + @@ -2254,7 +2254,7 @@ - + @@ -2274,7 +2274,7 @@ - + @@ -2294,7 +2294,7 @@ - + @@ -2314,7 +2314,7 @@ - + @@ -2334,7 +2334,7 @@ - + @@ -2354,7 +2354,7 @@ - + @@ -2374,7 +2374,7 @@ - + @@ -2394,7 +2394,7 @@ - + @@ -2414,7 +2414,7 @@ - + @@ -2434,7 +2434,7 @@ - + @@ -2454,7 +2454,7 @@ - + @@ -2474,7 +2474,7 @@ - + @@ -2494,7 +2494,7 @@ - + @@ -2514,7 +2514,7 @@ - + @@ -2534,7 +2534,7 @@ - + @@ -2554,7 +2554,7 @@ - + @@ -2574,7 +2574,7 @@ - + @@ -2594,7 +2594,7 @@ - + @@ -2614,7 +2614,7 @@ - + @@ -2634,7 +2634,7 @@ - + @@ -2654,7 +2654,7 @@ - + @@ -2674,7 +2674,7 @@ - + @@ -2694,7 +2694,7 @@ - + @@ -2714,7 +2714,7 @@ - + @@ -2734,7 +2734,7 @@ - + @@ -2754,7 +2754,7 @@ - + @@ -2774,7 +2774,7 @@ - + @@ -2794,7 +2794,7 @@ - + @@ -2814,7 +2814,7 @@ - + @@ -2834,7 +2834,7 @@ - + @@ -2854,7 +2854,7 @@ - + @@ -2874,7 +2874,7 @@ - + @@ -2894,7 +2894,7 @@ - + @@ -2914,7 +2914,7 @@ - + @@ -2934,7 +2934,7 @@ - + @@ -2954,7 +2954,7 @@ - + @@ -2974,7 +2974,7 @@ - + @@ -2994,7 +2994,7 @@ - + @@ -3014,7 +3014,7 @@ - + @@ -3034,7 +3034,7 @@ - + @@ -3054,7 +3054,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4po8.lay mame-0.251+dfsg.1/src/mame/layout/sc4po8.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4po8.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4po8.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -730,7 +730,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -770,7 +770,7 @@ - + @@ -910,7 +910,7 @@ - + @@ -930,7 +930,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1418,7 +1418,7 @@ - + @@ -1462,7 +1462,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1666,7 +1666,7 @@ - + @@ -2864,7 +2864,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4polic.lay mame-0.251+dfsg.1/src/mame/layout/sc4polic.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4polic.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4polic.lay 2022-12-29 14:20:09.000000000 +0000 @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -906,7 +906,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -2786,7 +2786,7 @@ - + @@ -2806,7 +2806,7 @@ - + @@ -2826,7 +2826,7 @@ - + @@ -2846,7 +2846,7 @@ - + @@ -2866,7 +2866,7 @@ - + @@ -2886,7 +2886,7 @@ - + @@ -2906,7 +2906,7 @@ - + @@ -2926,7 +2926,7 @@ - + @@ -2946,7 +2946,7 @@ - + @@ -2966,7 +2966,7 @@ - + @@ -3126,7 +3126,7 @@ - + @@ -3146,7 +3146,7 @@ - + @@ -3166,7 +3166,7 @@ - + @@ -3186,7 +3186,7 @@ - + @@ -3206,7 +3206,7 @@ - + @@ -3226,7 +3226,7 @@ - + @@ -3246,7 +3246,7 @@ - + @@ -3266,7 +3266,7 @@ - + @@ -3286,7 +3286,7 @@ - + @@ -3306,7 +3306,7 @@ - + @@ -3326,7 +3326,7 @@ - + @@ -3346,7 +3346,7 @@ - + @@ -3366,7 +3366,7 @@ - + @@ -3390,7 +3390,7 @@ - + @@ -3410,7 +3410,7 @@ - + @@ -3430,7 +3430,7 @@ - + @@ -3450,7 +3450,7 @@ - + @@ -3470,7 +3470,7 @@ - + @@ -3490,7 +3490,7 @@ - + @@ -3510,7 +3510,7 @@ - + @@ -3530,7 +3530,7 @@ - + @@ -3554,7 +3554,7 @@ - + @@ -3578,7 +3578,7 @@ - + @@ -3602,7 +3602,7 @@ - + @@ -3626,7 +3626,7 @@ - + @@ -3650,7 +3650,7 @@ - + @@ -3670,7 +3670,7 @@ - + @@ -3690,7 +3690,7 @@ - + @@ -3714,7 +3714,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4pony.lay mame-0.251+dfsg.1/src/mame/layout/sc4pony.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4pony.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4pony.lay 2022-12-29 14:20:09.000000000 +0000 @@ -434,7 +434,7 @@ - + @@ -454,7 +454,7 @@ - + @@ -474,7 +474,7 @@ - + @@ -494,7 +494,7 @@ - + @@ -514,7 +514,7 @@ - + @@ -534,7 +534,7 @@ - + @@ -554,7 +554,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -594,7 +594,7 @@ - + @@ -614,7 +614,7 @@ - + @@ -634,7 +634,7 @@ - + @@ -654,7 +654,7 @@ - + @@ -674,7 +674,7 @@ - + @@ -694,7 +694,7 @@ - + @@ -714,7 +714,7 @@ - + @@ -734,7 +734,7 @@ - + @@ -754,7 +754,7 @@ - + @@ -774,7 +774,7 @@ - + @@ -794,7 +794,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -834,7 +834,7 @@ - + @@ -854,7 +854,7 @@ - + @@ -874,7 +874,7 @@ - + @@ -894,7 +894,7 @@ - + @@ -914,7 +914,7 @@ - + @@ -934,7 +934,7 @@ - + @@ -954,7 +954,7 @@ - + @@ -974,7 +974,7 @@ - + @@ -1958,7 +1958,7 @@ - + @@ -1982,7 +1982,7 @@ - + @@ -2006,7 +2006,7 @@ - + @@ -2030,7 +2030,7 @@ - + @@ -2050,7 +2050,7 @@ - + @@ -2074,7 +2074,7 @@ - + @@ -2098,7 +2098,7 @@ - + @@ -2122,7 +2122,7 @@ - + @@ -2146,7 +2146,7 @@ - + @@ -2190,7 +2190,7 @@ - + @@ -2394,7 +2394,7 @@ - + @@ -2434,7 +2434,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4potsha.lay mame-0.251+dfsg.1/src/mame/layout/sc4potsha.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4potsha.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4potsha.lay 2022-12-29 14:20:09.000000000 +0000 @@ -2106,7 +2106,7 @@ - + @@ -2558,7 +2558,7 @@ - + @@ -2578,7 +2578,7 @@ - + @@ -2598,7 +2598,7 @@ - + @@ -2618,7 +2618,7 @@ - + @@ -2638,7 +2638,7 @@ - + @@ -2658,7 +2658,7 @@ - + @@ -2678,7 +2678,7 @@ - + @@ -2698,7 +2698,7 @@ - + @@ -2718,7 +2718,7 @@ - + @@ -2738,7 +2738,7 @@ - + @@ -2758,7 +2758,7 @@ - + @@ -2778,7 +2778,7 @@ - + @@ -2798,7 +2798,7 @@ - + @@ -2818,7 +2818,7 @@ - + @@ -2938,7 +2938,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4ppclb.lay mame-0.251+dfsg.1/src/mame/layout/sc4ppclb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4ppclb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4ppclb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -3094,7 +3094,7 @@ - + @@ -3114,7 +3114,7 @@ - + @@ -3134,7 +3134,7 @@ - + @@ -3154,7 +3154,7 @@ - + @@ -3174,7 +3174,7 @@ - + @@ -3194,7 +3194,7 @@ - + @@ -3214,7 +3214,7 @@ - + @@ -3234,7 +3234,7 @@ - + @@ -3254,7 +3254,7 @@ - + @@ -3274,7 +3274,7 @@ - + @@ -3294,7 +3294,7 @@ - + @@ -3314,7 +3314,7 @@ - + @@ -3334,7 +3334,7 @@ - + @@ -3354,7 +3354,7 @@ - + @@ -3374,7 +3374,7 @@ - + @@ -3394,7 +3394,7 @@ - + @@ -3414,7 +3414,7 @@ - + @@ -3434,7 +3434,7 @@ - + @@ -3454,7 +3454,7 @@ - + @@ -3474,7 +3474,7 @@ - + @@ -3494,7 +3494,7 @@ - + @@ -3514,7 +3514,7 @@ - + @@ -3534,7 +3534,7 @@ - + @@ -3554,7 +3554,7 @@ - + @@ -3574,7 +3574,7 @@ - + @@ -3594,7 +3594,7 @@ - + @@ -3614,7 +3614,7 @@ - + @@ -3634,7 +3634,7 @@ - + @@ -3654,7 +3654,7 @@ - + @@ -3674,7 +3674,7 @@ - + @@ -3694,7 +3694,7 @@ - + @@ -3714,7 +3714,7 @@ - + @@ -3734,7 +3734,7 @@ - + @@ -3754,7 +3754,7 @@ - + @@ -3774,7 +3774,7 @@ - + @@ -3794,7 +3794,7 @@ - + @@ -3814,7 +3814,7 @@ - + @@ -3834,7 +3834,7 @@ - + @@ -3854,7 +3854,7 @@ - + @@ -3874,7 +3874,7 @@ - + @@ -3894,7 +3894,7 @@ - + @@ -3914,7 +3914,7 @@ - + @@ -3934,7 +3934,7 @@ - + @@ -3954,7 +3954,7 @@ - + @@ -3974,7 +3974,7 @@ - + @@ -3994,7 +3994,7 @@ - + @@ -4014,7 +4014,7 @@ - + @@ -4034,7 +4034,7 @@ - + @@ -4054,7 +4054,7 @@ - + @@ -4074,7 +4074,7 @@ - + @@ -4094,7 +4094,7 @@ - + @@ -4114,7 +4114,7 @@ - + @@ -4674,7 +4674,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4pstata.lay mame-0.251+dfsg.1/src/mame/layout/sc4pstata.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4pstata.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4pstata.lay 2022-12-29 14:20:09.000000000 +0000 @@ -50,7 +50,7 @@ - + @@ -70,7 +70,7 @@ - + @@ -138,7 +138,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -538,7 +538,7 @@ - + @@ -582,7 +582,7 @@ - + @@ -902,7 +902,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1030,7 +1030,7 @@ - + @@ -1142,7 +1142,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1206,7 +1206,7 @@ - + @@ -1230,7 +1230,7 @@ - + @@ -1250,7 +1250,7 @@ - + @@ -1274,7 +1274,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1322,7 +1322,7 @@ - + @@ -1346,7 +1346,7 @@ - + @@ -1370,7 +1370,7 @@ - + @@ -1414,7 +1414,7 @@ - + @@ -1482,7 +1482,7 @@ - + @@ -1502,7 +1502,7 @@ - + @@ -1546,7 +1546,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4pwrbq.lay mame-0.251+dfsg.1/src/mame/layout/sc4pwrbq.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4pwrbq.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4pwrbq.lay 2022-12-29 14:20:09.000000000 +0000 @@ -50,7 +50,7 @@ - + @@ -74,7 +74,7 @@ - + @@ -98,7 +98,7 @@ - + @@ -118,7 +118,7 @@ - + @@ -138,7 +138,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -178,7 +178,7 @@ - + @@ -198,7 +198,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -238,7 +238,7 @@ - + @@ -638,7 +638,7 @@ - + @@ -658,7 +658,7 @@ - + @@ -678,7 +678,7 @@ - + @@ -698,7 +698,7 @@ - + @@ -718,7 +718,7 @@ - + @@ -738,7 +738,7 @@ - + @@ -758,7 +758,7 @@ - + @@ -778,7 +778,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -906,7 +906,7 @@ - + @@ -926,7 +926,7 @@ - + @@ -946,7 +946,7 @@ - + @@ -966,7 +966,7 @@ - + @@ -986,7 +986,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1246,7 +1246,7 @@ - + @@ -1266,7 +1266,7 @@ - + @@ -1286,7 +1286,7 @@ - + @@ -1306,7 +1306,7 @@ - + @@ -2902,7 +2902,7 @@ - + @@ -2922,7 +2922,7 @@ - + @@ -2942,7 +2942,7 @@ - + @@ -2962,7 +2962,7 @@ - + @@ -2982,7 +2982,7 @@ - + @@ -3002,7 +3002,7 @@ - + @@ -3022,7 +3022,7 @@ - + @@ -3090,7 +3090,7 @@ - + @@ -3110,7 +3110,7 @@ - + @@ -3854,7 +3854,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4pwrsg.lay mame-0.251+dfsg.1/src/mame/layout/sc4pwrsg.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4pwrsg.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4pwrsg.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -594,7 +594,7 @@ - + @@ -614,7 +614,7 @@ - + @@ -634,7 +634,7 @@ - + @@ -654,7 +654,7 @@ - + @@ -674,7 +674,7 @@ - + @@ -694,7 +694,7 @@ - + @@ -714,7 +714,7 @@ - + @@ -2522,7 +2522,7 @@ - + @@ -2542,7 +2542,7 @@ - + @@ -2562,7 +2562,7 @@ - + @@ -2582,7 +2582,7 @@ - + @@ -2662,7 +2662,7 @@ - + @@ -2682,7 +2682,7 @@ - + @@ -2702,7 +2702,7 @@ - + @@ -2742,7 +2742,7 @@ - + @@ -2762,7 +2762,7 @@ - + @@ -2782,7 +2782,7 @@ - + @@ -2802,7 +2802,7 @@ - + @@ -2822,7 +2822,7 @@ - + @@ -2842,7 +2842,7 @@ - + @@ -2862,7 +2862,7 @@ - + @@ -2882,7 +2882,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4qmodo.lay mame-0.251+dfsg.1/src/mame/layout/sc4qmodo.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4qmodo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4qmodo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -718,7 +718,7 @@ - + @@ -738,7 +738,7 @@ - + @@ -758,7 +758,7 @@ - + @@ -818,7 +818,7 @@ - + @@ -838,7 +838,7 @@ - + @@ -858,7 +858,7 @@ - + @@ -878,7 +878,7 @@ - + @@ -1218,7 +1218,7 @@ - + @@ -1238,7 +1238,7 @@ - + @@ -1258,7 +1258,7 @@ - + @@ -1278,7 +1278,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1318,7 +1318,7 @@ - + @@ -1338,7 +1338,7 @@ - + @@ -3434,7 +3434,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4quidrb.lay mame-0.251+dfsg.1/src/mame/layout/sc4quidrb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4quidrb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4quidrb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1406,7 +1406,7 @@ - + @@ -1426,7 +1426,7 @@ - + @@ -1446,7 +1446,7 @@ - + @@ -1466,7 +1466,7 @@ - + @@ -1486,7 +1486,7 @@ - + @@ -1546,7 +1546,7 @@ - + @@ -1566,7 +1566,7 @@ - + @@ -1586,7 +1586,7 @@ - + @@ -1606,7 +1606,7 @@ - + @@ -1626,7 +1626,7 @@ - + @@ -1646,7 +1646,7 @@ - + @@ -1666,7 +1666,7 @@ - + @@ -1726,7 +1726,7 @@ - + @@ -1746,7 +1746,7 @@ - + @@ -1910,7 +1910,7 @@ - + @@ -1930,7 +1930,7 @@ - + @@ -1950,7 +1950,7 @@ - + @@ -1970,7 +1970,7 @@ - + @@ -1990,7 +1990,7 @@ - + @@ -2010,7 +2010,7 @@ - + @@ -2166,7 +2166,7 @@ - + @@ -2186,7 +2186,7 @@ - + @@ -2206,7 +2206,7 @@ - + @@ -2226,7 +2226,7 @@ - + @@ -2294,7 +2294,7 @@ - + @@ -2314,7 +2314,7 @@ - + @@ -2382,7 +2382,7 @@ - + @@ -2402,7 +2402,7 @@ - + @@ -2578,7 +2578,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4redsq.lay mame-0.251+dfsg.1/src/mame/layout/sc4redsq.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4redsq.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4redsq.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1730,7 +1730,7 @@ - + @@ -2042,7 +2042,7 @@ - + @@ -2062,7 +2062,7 @@ - + @@ -2082,7 +2082,7 @@ - + @@ -2102,7 +2102,7 @@ - + @@ -2122,7 +2122,7 @@ - + @@ -2142,7 +2142,7 @@ - + @@ -2162,7 +2162,7 @@ - + @@ -2182,7 +2182,7 @@ - + @@ -2202,7 +2202,7 @@ - + @@ -2222,7 +2222,7 @@ - + @@ -2242,7 +2242,7 @@ - + @@ -2262,7 +2262,7 @@ - + @@ -2282,7 +2282,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4revod.lay mame-0.251+dfsg.1/src/mame/layout/sc4revod.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4revod.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4revod.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1026,7 +1026,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1634,7 +1634,7 @@ - + @@ -1654,7 +1654,7 @@ - + @@ -1674,7 +1674,7 @@ - + @@ -1694,7 +1694,7 @@ - + @@ -1714,7 +1714,7 @@ - + @@ -1734,7 +1734,7 @@ - + @@ -1754,7 +1754,7 @@ - + @@ -1774,7 +1774,7 @@ - + @@ -1794,7 +1794,7 @@ - + @@ -1834,7 +1834,7 @@ - + @@ -1854,7 +1854,7 @@ - + @@ -1874,7 +1874,7 @@ - + @@ -1894,7 +1894,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4rhxcl.lay mame-0.251+dfsg.1/src/mame/layout/sc4rhxcl.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4rhxcl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4rhxcl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -440,7 +440,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4rhxcsa.lay mame-0.251+dfsg.1/src/mame/layout/sc4rhxcsa.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4rhxcsa.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4rhxcsa.lay 2022-12-29 14:20:09.000000000 +0000 @@ -154,7 +154,7 @@ - + @@ -194,7 +194,7 @@ - + @@ -474,7 +474,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4richl.lay mame-0.251+dfsg.1/src/mame/layout/sc4richl.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4richl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4richl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -2658,7 +2658,7 @@ - + @@ -2678,7 +2678,7 @@ - + @@ -2698,7 +2698,7 @@ - + @@ -2718,7 +2718,7 @@ - + @@ -2738,7 +2738,7 @@ - + @@ -2758,7 +2758,7 @@ - + @@ -2778,7 +2778,7 @@ - + @@ -2798,7 +2798,7 @@ - + @@ -2818,7 +2818,7 @@ - + @@ -2838,7 +2838,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4rmo.lay mame-0.251+dfsg.1/src/mame/layout/sc4rmo.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4rmo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4rmo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -610,7 +610,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4rogds.lay mame-0.251+dfsg.1/src/mame/layout/sc4rogds.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4rogds.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4rogds.lay 2022-12-29 14:20:09.000000000 +0000 @@ -642,7 +642,7 @@ - + @@ -662,7 +662,7 @@ - + @@ -722,7 +722,7 @@ - + @@ -742,7 +742,7 @@ - + @@ -762,7 +762,7 @@ - + @@ -782,7 +782,7 @@ - + @@ -802,7 +802,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -842,7 +842,7 @@ - + @@ -862,7 +862,7 @@ - + @@ -882,7 +882,7 @@ - + @@ -902,7 +902,7 @@ - + @@ -922,7 +922,7 @@ - + @@ -942,7 +942,7 @@ - + @@ -1058,7 +1058,7 @@ - + @@ -1078,7 +1078,7 @@ - + @@ -1490,7 +1490,7 @@ - + @@ -1510,7 +1510,7 @@ - + @@ -1530,7 +1530,7 @@ - + @@ -1550,7 +1550,7 @@ - + @@ -1570,7 +1570,7 @@ - + @@ -1590,7 +1590,7 @@ - + @@ -1690,7 +1690,7 @@ - + @@ -1790,7 +1790,7 @@ - + @@ -1810,7 +1810,7 @@ - + @@ -1830,7 +1830,7 @@ - + @@ -1850,7 +1850,7 @@ - + @@ -1870,7 +1870,7 @@ - + @@ -1890,7 +1890,7 @@ - + @@ -1910,7 +1910,7 @@ - + @@ -1930,7 +1930,7 @@ - + @@ -2658,7 +2658,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4roksc.lay mame-0.251+dfsg.1/src/mame/layout/sc4roksc.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4roksc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4roksc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -90,7 +90,7 @@ - + @@ -1770,7 +1770,7 @@ - + @@ -1790,7 +1790,7 @@ - + @@ -1810,7 +1810,7 @@ - + @@ -1830,7 +1830,7 @@ - + @@ -1850,7 +1850,7 @@ - + @@ -1870,7 +1870,7 @@ - + @@ -1890,7 +1890,7 @@ - + @@ -1910,7 +1910,7 @@ - + @@ -1930,7 +1930,7 @@ - + @@ -1950,7 +1950,7 @@ - + @@ -1970,7 +1970,7 @@ - + @@ -1990,7 +1990,7 @@ - + @@ -2010,7 +2010,7 @@ - + @@ -2030,7 +2030,7 @@ - + @@ -2050,7 +2050,7 @@ - + @@ -2070,7 +2070,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4rotc.lay mame-0.251+dfsg.1/src/mame/layout/sc4rotc.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4rotc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4rotc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -62,7 +62,7 @@ - + @@ -202,7 +202,7 @@ - + @@ -242,7 +242,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -594,7 +594,7 @@ - + @@ -614,7 +614,7 @@ - + @@ -698,7 +698,7 @@ - + @@ -738,7 +738,7 @@ - + @@ -758,7 +758,7 @@ - + @@ -798,7 +798,7 @@ - + @@ -818,7 +818,7 @@ - + @@ -858,7 +858,7 @@ - + @@ -1482,7 +1482,7 @@ - + @@ -1502,7 +1502,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -1542,7 +1542,7 @@ - + @@ -1566,7 +1566,7 @@ - + @@ -1590,7 +1590,7 @@ - + @@ -1610,7 +1610,7 @@ - + @@ -1634,7 +1634,7 @@ - + @@ -1658,7 +1658,7 @@ - + @@ -1682,7 +1682,7 @@ - + @@ -1706,7 +1706,7 @@ - + @@ -1730,7 +1730,7 @@ - + @@ -1754,7 +1754,7 @@ - + @@ -1778,7 +1778,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4rtc.lay mame-0.251+dfsg.1/src/mame/layout/sc4rtc.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4rtc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4rtc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1890,7 +1890,7 @@ - + @@ -1910,7 +1910,7 @@ - + @@ -1930,7 +1930,7 @@ - + @@ -1950,7 +1950,7 @@ - + @@ -1970,7 +1970,7 @@ - + @@ -1990,7 +1990,7 @@ - + @@ -2010,7 +2010,7 @@ - + @@ -2030,7 +2030,7 @@ - + @@ -2050,7 +2050,7 @@ - + @@ -2070,7 +2070,7 @@ - + @@ -2090,7 +2090,7 @@ - + @@ -2130,7 +2130,7 @@ - + @@ -2150,7 +2150,7 @@ - + @@ -2170,7 +2170,7 @@ - + @@ -2190,7 +2190,7 @@ - + @@ -2210,7 +2210,7 @@ - + @@ -2230,7 +2230,7 @@ - + @@ -2250,7 +2250,7 @@ - + @@ -2270,7 +2270,7 @@ - + @@ -2290,7 +2290,7 @@ - + @@ -2310,7 +2310,7 @@ - + @@ -2330,7 +2330,7 @@ - + @@ -2350,7 +2350,7 @@ - + @@ -3150,7 +3150,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4rttt.lay mame-0.251+dfsg.1/src/mame/layout/sc4rttt.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4rttt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4rttt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -3302,7 +3302,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4s6cd.lay mame-0.251+dfsg.1/src/mame/layout/sc4s6cd.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4s6cd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4s6cd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -266,7 +266,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -906,7 +906,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -1090,7 +1090,7 @@ - + @@ -1252,7 +1252,7 @@ - + @@ -1270,73 +1270,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4sahed.lay mame-0.251+dfsg.1/src/mame/layout/sc4sahed.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4sahed.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4sahed.lay 2022-12-29 14:20:09.000000000 +0000 @@ -762,7 +762,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -862,7 +862,7 @@ - + @@ -942,7 +942,7 @@ - + @@ -1122,7 +1122,7 @@ - + @@ -1222,7 +1222,7 @@ - + @@ -1282,7 +1282,7 @@ - + @@ -1422,7 +1422,7 @@ - + @@ -1482,7 +1482,7 @@ - + @@ -2066,7 +2066,7 @@ - + @@ -2086,7 +2086,7 @@ - + @@ -2106,7 +2106,7 @@ - + @@ -2126,7 +2126,7 @@ - + @@ -2146,7 +2146,7 @@ - + @@ -2166,7 +2166,7 @@ - + @@ -2186,7 +2186,7 @@ - + @@ -2386,7 +2386,7 @@ - + @@ -2406,7 +2406,7 @@ - + @@ -2426,7 +2426,7 @@ - + @@ -2446,7 +2446,7 @@ - + @@ -2466,7 +2466,7 @@ - + @@ -2486,7 +2486,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4sbust.lay mame-0.251+dfsg.1/src/mame/layout/sc4sbust.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4sbust.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4sbust.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -1722,7 +1722,7 @@ - + @@ -1742,7 +1742,7 @@ - + @@ -1762,7 +1762,7 @@ - + @@ -1782,7 +1782,7 @@ - + @@ -1802,7 +1802,7 @@ - + @@ -1822,7 +1822,7 @@ - + @@ -1842,7 +1842,7 @@ - + @@ -1862,7 +1862,7 @@ - + @@ -2302,7 +2302,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4slci.lay mame-0.251+dfsg.1/src/mame/layout/sc4slci.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4slci.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4slci.lay 2022-12-29 14:20:09.000000000 +0000 @@ -946,7 +946,7 @@ - + @@ -1006,7 +1006,7 @@ - + @@ -1090,7 +1090,7 @@ - + @@ -1110,7 +1110,7 @@ - + @@ -1130,7 +1130,7 @@ - + @@ -1190,7 +1190,7 @@ - + @@ -1210,7 +1210,7 @@ - + @@ -1230,7 +1230,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -1330,7 +1330,7 @@ - + @@ -1350,7 +1350,7 @@ - + @@ -2090,7 +2090,7 @@ - + @@ -2259,19 +2259,19 @@ - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4slihd.lay mame-0.251+dfsg.1/src/mame/layout/sc4slihd.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4slihd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4slihd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -486,7 +486,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -786,7 +786,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -826,7 +826,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -866,7 +866,7 @@ - + @@ -1450,7 +1450,7 @@ - + @@ -1534,7 +1534,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1594,7 +1594,7 @@ - + @@ -1614,7 +1614,7 @@ - + @@ -1634,7 +1634,7 @@ - + @@ -1654,7 +1654,7 @@ - + @@ -1698,7 +1698,7 @@ - + @@ -1718,7 +1718,7 @@ - + @@ -1738,7 +1738,7 @@ - + @@ -2566,7 +2566,7 @@ - + @@ -2646,7 +2646,7 @@ - + @@ -2666,7 +2666,7 @@ - + @@ -2686,7 +2686,7 @@ - + @@ -2706,7 +2706,7 @@ - + @@ -2726,7 +2726,7 @@ - + @@ -2746,7 +2746,7 @@ - + @@ -2906,7 +2906,7 @@ - + @@ -2926,7 +2926,7 @@ - + @@ -2946,7 +2946,7 @@ - + @@ -2966,7 +2966,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4smk7.lay mame-0.251+dfsg.1/src/mame/layout/sc4smk7.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4smk7.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4smk7.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -665,7 +665,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4solgl.lay mame-0.251+dfsg.1/src/mame/layout/sc4solgl.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4solgl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4solgl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -546,7 +546,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -1066,7 +1066,7 @@ - + @@ -1086,7 +1086,7 @@ - + @@ -1106,7 +1106,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1146,7 +1146,7 @@ - + @@ -1166,7 +1166,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1206,7 +1206,7 @@ - + @@ -1226,7 +1226,7 @@ - + @@ -1246,7 +1246,7 @@ - + @@ -1266,7 +1266,7 @@ - + @@ -1286,7 +1286,7 @@ - + @@ -1810,7 +1810,7 @@ - + @@ -1830,7 +1830,7 @@ - + @@ -1850,7 +1850,7 @@ - + @@ -1870,7 +1870,7 @@ - + @@ -1890,7 +1890,7 @@ - + @@ -1910,7 +1910,7 @@ - + @@ -1930,7 +1930,7 @@ - + @@ -1950,7 +1950,7 @@ - + @@ -1970,7 +1970,7 @@ - + @@ -1990,7 +1990,7 @@ - + @@ -2566,7 +2566,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4sparkd.lay mame-0.251+dfsg.1/src/mame/layout/sc4sparkd.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4sparkd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4sparkd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1018,7 +1018,7 @@ - + @@ -1038,7 +1038,7 @@ - + @@ -1058,7 +1058,7 @@ - + @@ -1078,7 +1078,7 @@ - + @@ -1098,7 +1098,7 @@ - + @@ -1118,7 +1118,7 @@ - + @@ -1138,7 +1138,7 @@ - + @@ -1158,7 +1158,7 @@ - + @@ -1922,7 +1922,7 @@ - + @@ -1946,7 +1946,7 @@ - + @@ -1970,7 +1970,7 @@ - + @@ -1994,7 +1994,7 @@ - + @@ -2018,7 +2018,7 @@ - + @@ -2042,7 +2042,7 @@ - + @@ -2066,7 +2066,7 @@ - + @@ -2090,7 +2090,7 @@ - + @@ -2114,7 +2114,7 @@ - + @@ -2138,7 +2138,7 @@ - + @@ -2182,7 +2182,7 @@ - + @@ -2202,7 +2202,7 @@ - + @@ -2222,7 +2222,7 @@ - + @@ -2242,7 +2242,7 @@ - + @@ -2262,7 +2262,7 @@ - + @@ -2282,7 +2282,7 @@ - + @@ -2302,7 +2302,7 @@ - + @@ -2422,7 +2422,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4sprng.lay mame-0.251+dfsg.1/src/mame/layout/sc4sprng.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4sprng.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4sprng.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -1534,7 +1534,7 @@ - + @@ -1554,7 +1554,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1594,7 +1594,7 @@ - + @@ -1614,7 +1614,7 @@ - + @@ -1634,7 +1634,7 @@ - + @@ -1654,7 +1654,7 @@ - + @@ -1674,7 +1674,7 @@ - + @@ -1754,7 +1754,7 @@ - + @@ -1774,7 +1774,7 @@ - + @@ -1794,7 +1794,7 @@ - + @@ -1814,7 +1814,7 @@ - + @@ -1834,7 +1834,7 @@ - + @@ -1854,7 +1854,7 @@ - + @@ -1874,7 +1874,7 @@ - + @@ -1894,7 +1894,7 @@ - + @@ -2294,7 +2294,7 @@ - + @@ -2314,7 +2314,7 @@ - + @@ -2334,7 +2334,7 @@ - + @@ -2354,7 +2354,7 @@ - + @@ -2374,7 +2374,7 @@ - + @@ -2394,7 +2394,7 @@ - + @@ -2414,7 +2414,7 @@ - + @@ -2434,7 +2434,7 @@ - + @@ -3158,7 +3158,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4srrca.lay mame-0.251+dfsg.1/src/mame/layout/sc4srrca.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4srrca.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4srrca.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -186,7 +186,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4starpk.lay mame-0.251+dfsg.1/src/mame/layout/sc4starpk.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4starpk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4starpk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -142,7 +142,7 @@ - + @@ -202,7 +202,7 @@ - + @@ -262,7 +262,7 @@ - + @@ -838,7 +838,7 @@ - + @@ -858,7 +858,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -1030,7 +1030,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1318,7 +1318,7 @@ - + @@ -1338,7 +1338,7 @@ - + @@ -1358,7 +1358,7 @@ - + @@ -1378,7 +1378,7 @@ - + @@ -1418,7 +1418,7 @@ - + @@ -1438,7 +1438,7 @@ - + @@ -1458,7 +1458,7 @@ - + @@ -1478,7 +1478,7 @@ - + @@ -1498,7 +1498,7 @@ - + @@ -1518,7 +1518,7 @@ - + @@ -1538,7 +1538,7 @@ - + @@ -1558,7 +1558,7 @@ - + @@ -1578,7 +1578,7 @@ - + @@ -1598,7 +1598,7 @@ - + @@ -1618,7 +1618,7 @@ - + @@ -1638,7 +1638,7 @@ - + @@ -1658,7 +1658,7 @@ - + @@ -1678,7 +1678,7 @@ - + @@ -1698,7 +1698,7 @@ - + @@ -1718,7 +1718,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4strk.lay mame-0.251+dfsg.1/src/mame/layout/sc4strk.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4strk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4strk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -198,7 +198,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -493,7 +493,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4suscl.lay mame-0.251+dfsg.1/src/mame/layout/sc4suscl.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4suscl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4suscl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -378,7 +378,7 @@ - + @@ -474,7 +474,7 @@ - + @@ -494,7 +494,7 @@ - + @@ -514,7 +514,7 @@ - + @@ -534,7 +534,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -618,7 +618,7 @@ - + @@ -638,7 +638,7 @@ - + @@ -682,7 +682,7 @@ - + @@ -1730,7 +1730,7 @@ - + @@ -2298,7 +2298,7 @@ - + @@ -2322,7 +2322,7 @@ - + @@ -2346,7 +2346,7 @@ - + @@ -2366,7 +2366,7 @@ - + @@ -2386,7 +2386,7 @@ - + @@ -2406,7 +2406,7 @@ - + @@ -2426,7 +2426,7 @@ - + @@ -2446,7 +2446,7 @@ - + @@ -2466,7 +2466,7 @@ - + @@ -2490,7 +2490,7 @@ - + @@ -2514,7 +2514,7 @@ - + @@ -2534,7 +2534,7 @@ - + @@ -2554,7 +2554,7 @@ - + @@ -2578,7 +2578,7 @@ - + @@ -2602,7 +2602,7 @@ - + @@ -2622,7 +2622,7 @@ - + @@ -2642,7 +2642,7 @@ - + @@ -2662,7 +2662,7 @@ - + @@ -2682,7 +2682,7 @@ - + @@ -2702,7 +2702,7 @@ - + @@ -2722,7 +2722,7 @@ - + @@ -2742,7 +2742,7 @@ - + @@ -2762,7 +2762,7 @@ - + @@ -2786,7 +2786,7 @@ - + @@ -2810,7 +2810,7 @@ - + @@ -2834,7 +2834,7 @@ - + @@ -3482,7 +3482,7 @@ - + @@ -3502,7 +3502,7 @@ - + @@ -3522,7 +3522,7 @@ - + @@ -3542,7 +3542,7 @@ - + @@ -3562,7 +3562,7 @@ - + @@ -3582,7 +3582,7 @@ - + @@ -3602,7 +3602,7 @@ - + @@ -3622,7 +3622,7 @@ - + @@ -3642,7 +3642,7 @@ - + @@ -3662,7 +3662,7 @@ - + @@ -3682,7 +3682,7 @@ - + @@ -3702,7 +3702,7 @@ - + @@ -3722,7 +3722,7 @@ - + @@ -3742,7 +3742,7 @@ - + @@ -3762,7 +3762,7 @@ - + @@ -3782,7 +3782,7 @@ - + @@ -3802,7 +3802,7 @@ - + @@ -3822,7 +3822,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4susk.lay mame-0.251+dfsg.1/src/mame/layout/sc4susk.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4susk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4susk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -330,7 +330,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -370,7 +370,7 @@ - + @@ -390,7 +390,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -430,7 +430,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -470,7 +470,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -530,7 +530,7 @@ - + @@ -550,7 +550,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -590,7 +590,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -630,7 +630,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -670,7 +670,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -710,7 +710,7 @@ - + @@ -730,7 +730,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -770,7 +770,7 @@ - + @@ -790,7 +790,7 @@ - + @@ -810,7 +810,7 @@ - + @@ -830,7 +830,7 @@ - + @@ -850,7 +850,7 @@ - + @@ -870,7 +870,7 @@ - + @@ -3538,7 +3538,7 @@ - + @@ -3578,7 +3578,7 @@ - + @@ -3598,7 +3598,7 @@ - + @@ -3618,7 +3618,7 @@ - + @@ -3638,7 +3638,7 @@ - + @@ -3658,7 +3658,7 @@ - + @@ -3678,7 +3678,7 @@ - + @@ -3698,7 +3698,7 @@ - + @@ -3902,7 +3902,7 @@ - + @@ -3926,7 +3926,7 @@ - + @@ -3946,7 +3946,7 @@ - + @@ -3970,7 +3970,7 @@ - + @@ -3990,7 +3990,7 @@ - + @@ -4010,7 +4010,7 @@ - + @@ -4030,7 +4030,7 @@ - + @@ -4054,7 +4054,7 @@ - + @@ -4074,7 +4074,7 @@ - + @@ -4094,7 +4094,7 @@ - + @@ -4118,7 +4118,7 @@ - + @@ -4138,7 +4138,7 @@ - + @@ -4158,7 +4158,7 @@ - + @@ -4178,7 +4178,7 @@ - + @@ -4426,7 +4426,7 @@ - + @@ -4788,7 +4788,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4taekw.lay mame-0.251+dfsg.1/src/mame/layout/sc4taekw.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4taekw.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4taekw.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1094,7 +1094,7 @@ - + @@ -1114,7 +1114,7 @@ - + @@ -1134,7 +1134,7 @@ - + @@ -1262,7 +1262,7 @@ - + @@ -1302,7 +1302,7 @@ - + @@ -1342,7 +1342,7 @@ - + @@ -1402,7 +1402,7 @@ - + @@ -1442,7 +1442,7 @@ - + @@ -1482,7 +1482,7 @@ - + @@ -1522,7 +1522,7 @@ - + @@ -1562,7 +1562,7 @@ - + @@ -3266,7 +3266,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4takcl.lay mame-0.251+dfsg.1/src/mame/layout/sc4takcl.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4takcl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4takcl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -154,7 +154,7 @@ - + @@ -174,7 +174,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -234,7 +234,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -274,7 +274,7 @@ - + @@ -294,7 +294,7 @@ - + @@ -314,7 +314,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -374,7 +374,7 @@ - + @@ -394,7 +394,7 @@ - + @@ -414,7 +414,7 @@ - + @@ -482,7 +482,7 @@ - + @@ -502,7 +502,7 @@ - + @@ -522,7 +522,7 @@ - + @@ -542,7 +542,7 @@ - + @@ -562,7 +562,7 @@ - + @@ -582,7 +582,7 @@ - + @@ -1262,7 +1262,7 @@ - + @@ -1562,7 +1562,7 @@ - + @@ -1746,7 +1746,7 @@ - + @@ -1766,7 +1766,7 @@ - + @@ -1790,7 +1790,7 @@ - + @@ -1894,7 +1894,7 @@ - + @@ -1954,7 +1954,7 @@ - + @@ -2078,7 +2078,7 @@ - + @@ -2142,7 +2142,7 @@ - + @@ -2162,7 +2162,7 @@ - + @@ -2246,7 +2246,7 @@ - + @@ -2286,7 +2286,7 @@ - + @@ -2306,7 +2306,7 @@ - + @@ -2570,7 +2570,7 @@ - + @@ -2709,31 +2709,31 @@ - + - + - + - + - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4tbana.lay mame-0.251+dfsg.1/src/mame/layout/sc4tbana.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4tbana.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4tbana.lay 2022-12-29 14:20:09.000000000 +0000 @@ -386,7 +386,7 @@ - + @@ -434,7 +434,7 @@ - + @@ -454,7 +454,7 @@ - + @@ -494,7 +494,7 @@ - + @@ -514,7 +514,7 @@ - + @@ -534,7 +534,7 @@ - + @@ -554,7 +554,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -594,7 +594,7 @@ - + @@ -2082,7 +2082,7 @@ - + @@ -2417,7 +2417,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4tempt.lay mame-0.251+dfsg.1/src/mame/layout/sc4tempt.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4tempt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4tempt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -814,7 +814,7 @@ - + @@ -1274,7 +1274,7 @@ - + @@ -1294,7 +1294,7 @@ - + @@ -1334,7 +1334,7 @@ - + @@ -1354,7 +1354,7 @@ - + @@ -1374,7 +1374,7 @@ - + @@ -1394,7 +1394,7 @@ - + @@ -1474,7 +1474,7 @@ - + @@ -1514,7 +1514,7 @@ - + @@ -1534,7 +1534,7 @@ - + @@ -1574,7 +1574,7 @@ - + @@ -1594,7 +1594,7 @@ - + @@ -1634,7 +1634,7 @@ - + @@ -1694,7 +1694,7 @@ - + @@ -1714,7 +1714,7 @@ - + @@ -1734,7 +1734,7 @@ - + @@ -1774,7 +1774,7 @@ - + @@ -2762,7 +2762,7 @@ - + @@ -2802,7 +2802,7 @@ - + @@ -2822,7 +2822,7 @@ - + @@ -2842,7 +2842,7 @@ - + @@ -2862,7 +2862,7 @@ - + @@ -2882,7 +2882,7 @@ - + @@ -3234,7 +3234,7 @@ - + @@ -3662,7 +3662,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4tfclb.lay mame-0.251+dfsg.1/src/mame/layout/sc4tfclb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4tfclb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4tfclb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -678,7 +678,7 @@ - + @@ -1270,7 +1270,7 @@ - + @@ -1450,7 +1450,7 @@ - + @@ -1558,7 +1558,7 @@ - + @@ -1646,7 +1646,7 @@ - + @@ -1738,7 +1738,7 @@ - + @@ -1758,7 +1758,7 @@ - + @@ -1870,7 +1870,7 @@ - + @@ -1938,7 +1938,7 @@ - + @@ -2002,7 +2002,7 @@ - + @@ -2022,7 +2022,7 @@ - + @@ -2042,7 +2042,7 @@ - + @@ -2062,7 +2062,7 @@ - + @@ -2082,7 +2082,7 @@ - + @@ -2102,7 +2102,7 @@ - + @@ -2122,7 +2122,7 @@ - + @@ -2142,7 +2142,7 @@ - + @@ -2162,7 +2162,7 @@ - + @@ -2182,7 +2182,7 @@ - + @@ -2202,7 +2202,7 @@ - + @@ -2222,7 +2222,7 @@ - + @@ -2242,7 +2242,7 @@ - + @@ -2262,7 +2262,7 @@ - + @@ -2282,7 +2282,7 @@ - + @@ -2302,7 +2302,7 @@ - + @@ -2322,7 +2322,7 @@ - + @@ -2342,7 +2342,7 @@ - + @@ -2406,7 +2406,7 @@ - + @@ -2430,7 +2430,7 @@ - + @@ -2454,7 +2454,7 @@ - + @@ -2478,7 +2478,7 @@ - + @@ -2502,7 +2502,7 @@ - + @@ -2526,7 +2526,7 @@ - + @@ -2550,7 +2550,7 @@ - + @@ -2574,7 +2574,7 @@ - + @@ -2598,7 +2598,7 @@ - + @@ -2622,7 +2622,7 @@ - + @@ -2646,7 +2646,7 @@ - + @@ -2670,7 +2670,7 @@ - + @@ -2694,7 +2694,7 @@ - + @@ -2718,7 +2718,7 @@ - + @@ -2742,7 +2742,7 @@ - + @@ -2766,7 +2766,7 @@ - + @@ -2786,7 +2786,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4tic2.lay mame-0.251+dfsg.1/src/mame/layout/sc4tic2.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4tic2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4tic2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -306,7 +306,7 @@ - + @@ -567,25 +567,25 @@ - + - + - + - + @@ -597,7 +597,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4tload.lay mame-0.251+dfsg.1/src/mame/layout/sc4tload.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4tload.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4tload.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1166,7 +1166,7 @@ - + @@ -1186,7 +1186,7 @@ - + @@ -1206,7 +1206,7 @@ - + @@ -1226,7 +1226,7 @@ - + @@ -1246,7 +1246,7 @@ - + @@ -1266,7 +1266,7 @@ - + @@ -1286,7 +1286,7 @@ - + @@ -1306,7 +1306,7 @@ - + @@ -1326,7 +1326,7 @@ - + @@ -1346,7 +1346,7 @@ - + @@ -1366,7 +1366,7 @@ - + @@ -1706,7 +1706,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4tpshta.lay mame-0.251+dfsg.1/src/mame/layout/sc4tpshta.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4tpshta.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4tpshta.lay 2022-12-29 14:20:09.000000000 +0000 @@ -46,7 +46,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -466,7 +466,7 @@ - + @@ -542,7 +542,7 @@ - + @@ -662,7 +662,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -886,7 +886,7 @@ - + @@ -942,7 +942,7 @@ - + @@ -962,7 +962,7 @@ - + @@ -982,7 +982,7 @@ - + @@ -1002,7 +1002,7 @@ - + @@ -1022,7 +1022,7 @@ - + @@ -1042,7 +1042,7 @@ - + @@ -1062,7 +1062,7 @@ - + @@ -1082,7 +1082,7 @@ - + @@ -1102,7 +1102,7 @@ - + @@ -1122,7 +1122,7 @@ - + @@ -1142,7 +1142,7 @@ - + @@ -1162,7 +1162,7 @@ - + @@ -1182,7 +1182,7 @@ - + @@ -1202,7 +1202,7 @@ - + @@ -1222,7 +1222,7 @@ - + @@ -1242,7 +1242,7 @@ - + @@ -1262,7 +1262,7 @@ - + @@ -1282,7 +1282,7 @@ - + @@ -1302,7 +1302,7 @@ - + @@ -1322,7 +1322,7 @@ - + @@ -1342,7 +1342,7 @@ - + @@ -1362,7 +1362,7 @@ - + @@ -1382,7 +1382,7 @@ - + @@ -1402,7 +1402,7 @@ - + @@ -1422,7 +1422,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4trail.lay mame-0.251+dfsg.1/src/mame/layout/sc4trail.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4trail.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4trail.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1538,7 +1538,7 @@ - + @@ -1558,7 +1558,7 @@ - + @@ -1718,7 +1718,7 @@ - + @@ -1738,7 +1738,7 @@ - + @@ -2058,7 +2058,7 @@ - + @@ -2078,7 +2078,7 @@ - + @@ -2358,7 +2358,7 @@ - + @@ -2378,7 +2378,7 @@ - + @@ -2618,7 +2618,7 @@ - + @@ -2698,7 +2698,7 @@ - + @@ -3022,7 +3022,7 @@ - + @@ -3042,7 +3042,7 @@ - + @@ -3062,7 +3062,7 @@ - + @@ -3102,7 +3102,7 @@ - + @@ -3122,7 +3122,7 @@ - + @@ -3142,7 +3142,7 @@ - + @@ -3446,7 +3446,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4tridn.lay mame-0.251+dfsg.1/src/mame/layout/sc4tridn.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4tridn.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4tridn.lay 2022-12-29 14:20:09.000000000 +0000 @@ -566,7 +566,7 @@ - + @@ -586,7 +586,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -626,7 +626,7 @@ - + @@ -646,7 +646,7 @@ - + @@ -666,7 +666,7 @@ - + @@ -686,7 +686,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -726,7 +726,7 @@ - + @@ -746,7 +746,7 @@ - + @@ -766,7 +766,7 @@ - + @@ -2090,7 +2090,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4ttomb.lay mame-0.251+dfsg.1/src/mame/layout/sc4ttomb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4ttomb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4ttomb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -506,7 +506,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -566,7 +566,7 @@ - + @@ -706,7 +706,7 @@ - + @@ -2202,7 +2202,7 @@ - + @@ -2222,7 +2222,7 @@ - + @@ -2242,7 +2242,7 @@ - + @@ -2262,7 +2262,7 @@ - + @@ -2282,7 +2282,7 @@ - + @@ -2302,7 +2302,7 @@ - + @@ -2322,7 +2322,7 @@ - + @@ -2342,7 +2342,7 @@ - + @@ -2362,7 +2362,7 @@ - + @@ -2382,7 +2382,7 @@ - + @@ -2402,7 +2402,7 @@ - + @@ -2422,7 +2422,7 @@ - + @@ -2442,7 +2442,7 @@ - + @@ -2462,7 +2462,7 @@ - + @@ -2482,7 +2482,7 @@ - + @@ -2502,7 +2502,7 @@ - + @@ -2522,7 +2522,7 @@ - + @@ -2542,7 +2542,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4vrgclb.lay mame-0.251+dfsg.1/src/mame/layout/sc4vrgclb.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4vrgclb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4vrgclb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -426,7 +426,7 @@ - + @@ -1378,7 +1378,7 @@ - + @@ -1398,7 +1398,7 @@ - + @@ -1418,7 +1418,7 @@ - + @@ -1438,7 +1438,7 @@ - + @@ -1458,7 +1458,7 @@ - + @@ -1478,7 +1478,7 @@ - + @@ -1498,7 +1498,7 @@ - + @@ -1518,7 +1518,7 @@ - + @@ -1538,7 +1538,7 @@ - + @@ -1598,7 +1598,7 @@ - + @@ -1618,7 +1618,7 @@ - + @@ -1638,7 +1638,7 @@ - + @@ -1658,7 +1658,7 @@ - + @@ -1678,7 +1678,7 @@ - + @@ -2386,7 +2386,7 @@ - + @@ -2406,7 +2406,7 @@ - + @@ -2426,7 +2426,7 @@ - + @@ -2446,7 +2446,7 @@ - + @@ -2466,7 +2466,7 @@ - + @@ -2486,7 +2486,7 @@ - + @@ -2506,7 +2506,7 @@ - + @@ -2526,7 +2526,7 @@ - + @@ -2546,7 +2546,7 @@ - + @@ -2566,7 +2566,7 @@ - + @@ -2586,7 +2586,7 @@ - + @@ -2606,7 +2606,7 @@ - + @@ -2626,7 +2626,7 @@ - + @@ -2646,7 +2646,7 @@ - + @@ -2666,7 +2666,7 @@ - + @@ -2686,7 +2686,7 @@ - + @@ -2706,7 +2706,7 @@ - + @@ -2726,7 +2726,7 @@ - + @@ -2766,7 +2766,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4wldjkc.lay mame-0.251+dfsg.1/src/mame/layout/sc4wldjkc.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4wldjkc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4wldjkc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -66,7 +66,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -366,7 +366,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/sc4xmarka.lay mame-0.251+dfsg.1/src/mame/layout/sc4xmarka.lay --- mame-0.250+dfsg.1/src/mame/layout/sc4xmarka.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sc4xmarka.lay 2022-12-29 14:20:09.000000000 +0000 @@ -126,7 +126,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -326,7 +326,7 @@ - + @@ -346,7 +346,7 @@ - + @@ -846,7 +846,7 @@ - + @@ -1038,7 +1038,7 @@ - + @@ -1110,7 +1110,7 @@ - + @@ -1182,7 +1182,7 @@ - + @@ -1414,7 +1414,7 @@ - + @@ -1754,7 +1754,7 @@ - + diff -Nru mame-0.250+dfsg.1/src/mame/layout/scat.lay mame-0.251+dfsg.1/src/mame/layout/scat.lay --- mame-0.250+dfsg.1/src/mame/layout/scat.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/scat.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/scrablex.lay mame-0.251+dfsg.1/src/mame/layout/scrablex.lay --- mame-0.250+dfsg.1/src/mame/layout/scrablex.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/scrablex.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/scrabsen.lay mame-0.251+dfsg.1/src/mame/layout/scrabsen.lay --- mame-0.250+dfsg.1/src/mame/layout/scrabsen.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/scrabsen.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/scruiser.lay mame-0.251+dfsg.1/src/mame/layout/scruiser.lay --- mame-0.250+dfsg.1/src/mame/layout/scruiser.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/scruiser.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sda5708.lay mame-0.251+dfsg.1/src/mame/layout/sda5708.lay --- mame-0.250+dfsg.1/src/mame/layout/sda5708.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sda5708.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sderby.lay mame-0.251+dfsg.1/src/mame/layout/sderby.lay --- mame-0.250+dfsg.1/src/mame/layout/sderby.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sderby.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sdk85.lay mame-0.251+dfsg.1/src/mame/layout/sdk85.lay --- mame-0.250+dfsg.1/src/mame/layout/sdk85.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sdk85.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sdk86.lay mame-0.251+dfsg.1/src/mame/layout/sdk86.lay --- mame-0.250+dfsg.1/src/mame/layout/sdk86.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sdk86.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/seabattl.lay mame-0.251+dfsg.1/src/mame/layout/seabattl.lay --- mame-0.250+dfsg.1/src/mame/layout/seabattl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/seabattl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/seawolf2.lay mame-0.251+dfsg.1/src/mame/layout/seawolf2.lay --- mame-0.250+dfsg.1/src/mame/layout/seawolf2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/seawolf2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/seawolf.lay mame-0.251+dfsg.1/src/mame/layout/seawolf.lay --- mame-0.250+dfsg.1/src/mame/layout/seawolf.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/seawolf.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/segabill.lay mame-0.251+dfsg.1/src/mame/layout/segabill.lay --- mame-0.250+dfsg.1/src/mame/layout/segabill.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/segabill.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/selz80.lay mame-0.251+dfsg.1/src/mame/layout/selz80.lay --- mame-0.250+dfsg.1/src/mame/layout/selz80.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/selz80.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sentx6p.lay mame-0.251+dfsg.1/src/mame/layout/sentx6p.lay --- mame-0.250+dfsg.1/src/mame/layout/sentx6p.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sentx6p.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/setaroul.lay mame-0.251+dfsg.1/src/mame/layout/setaroul.lay --- mame-0.250+dfsg.1/src/mame/layout/setaroul.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/setaroul.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sf2049.lay mame-0.251+dfsg.1/src/mame/layout/sf2049.lay --- mame-0.250+dfsg.1/src/mame/layout/sf2049.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sf2049.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sfiii2.lay mame-0.251+dfsg.1/src/mame/layout/sfiii2.lay --- mame-0.250+dfsg.1/src/mame/layout/sfiii2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sfiii2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sfrush.lay mame-0.251+dfsg.1/src/mame/layout/sfrush.lay --- mame-0.250+dfsg.1/src/mame/layout/sfrush.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sfrush.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sgsafari.lay mame-0.251+dfsg.1/src/mame/layout/sgsafari.lay --- mame-0.250+dfsg.1/src/mame/layout/sgsafari.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sgsafari.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sharkpye.lay mame-0.251+dfsg.1/src/mame/layout/sharkpye.lay --- mame-0.250+dfsg.1/src/mame/layout/sharkpye.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sharkpye.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sharkpy.lay mame-0.251+dfsg.1/src/mame/layout/sharkpy.lay --- mame-0.250+dfsg.1/src/mame/layout/sharkpy.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sharkpy.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/showhanc.lay mame-0.251+dfsg.1/src/mame/layout/showhanc.lay --- mame-0.250+dfsg.1/src/mame/layout/showhanc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/showhanc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/showhand.lay mame-0.251+dfsg.1/src/mame/layout/showhand.lay --- mame-0.250+dfsg.1/src/mame/layout/showhand.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/showhand.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/shuffle11.lay mame-0.251+dfsg.1/src/mame/layout/shuffle11.lay --- mame-0.250+dfsg.1/src/mame/layout/shuffle11.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/shuffle11.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/shuffle4.lay mame-0.251+dfsg.1/src/mame/layout/shuffle4.lay --- mame-0.250+dfsg.1/src/mame/layout/shuffle4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/shuffle4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/shuffle9.lay mame-0.251+dfsg.1/src/mame/layout/shuffle9.lay --- mame-0.250+dfsg.1/src/mame/layout/shuffle9.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/shuffle9.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/shuttlei.lay mame-0.251+dfsg.1/src/mame/layout/shuttlei.lay --- mame-0.250+dfsg.1/src/mame/layout/shuttlei.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/shuttlei.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sidewndr.lay mame-0.251+dfsg.1/src/mame/layout/sidewndr.lay --- mame-0.250+dfsg.1/src/mame/layout/sidewndr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sidewndr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sigmab52.lay mame-0.251+dfsg.1/src/mame/layout/sigmab52.lay --- mame-0.250+dfsg.1/src/mame/layout/sigmab52.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sigmab52.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sigmapkr.lay mame-0.251+dfsg.1/src/mame/layout/sigmapkr.lay --- mame-0.250+dfsg.1/src/mame/layout/sigmapkr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sigmapkr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/simon.lay mame-0.251+dfsg.1/src/mame/layout/simon.lay --- mame-0.250+dfsg.1/src/mame/layout/simon.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/simon.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sitcom.lay mame-0.251+dfsg.1/src/mame/layout/sitcom.lay --- mame-0.250+dfsg.1/src/mame/layout/sitcom.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sitcom.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sitcomtmr.lay mame-0.251+dfsg.1/src/mame/layout/sitcomtmr.lay --- mame-0.250+dfsg.1/src/mame/layout/sitcomtmr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sitcomtmr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/skill98.lay mame-0.251+dfsg.1/src/mame/layout/skill98.lay --- mame-0.250+dfsg.1/src/mame/layout/skill98.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/skill98.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/skydiver.lay mame-0.251+dfsg.1/src/mame/layout/skydiver.lay --- mame-0.250+dfsg.1/src/mame/layout/skydiver.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/skydiver.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/slc1.lay mame-0.251+dfsg.1/src/mame/layout/slc1.lay --- mame-0.250+dfsg.1/src/mame/layout/slc1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/slc1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/slots.lay mame-0.251+dfsg.1/src/mame/layout/slots.lay --- mame-0.250+dfsg.1/src/mame/layout/slots.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/slots.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sltblgpo.lay mame-0.251+dfsg.1/src/mame/layout/sltblgpo.lay --- mame-0.250+dfsg.1/src/mame/layout/sltblgpo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sltblgpo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sltblgtk.lay mame-0.251+dfsg.1/src/mame/layout/sltblgtk.lay --- mame-0.250+dfsg.1/src/mame/layout/sltblgtk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sltblgtk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/smastmind.lay mame-0.251+dfsg.1/src/mame/layout/smastmind.lay --- mame-0.250+dfsg.1/src/mame/layout/smastmind.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/smastmind.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/smoto.lay mame-0.251+dfsg.1/src/mame/layout/smoto.lay --- mame-0.250+dfsg.1/src/mame/layout/smoto.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/smoto.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sms1.lay mame-0.251+dfsg.1/src/mame/layout/sms1.lay --- mame-0.250+dfsg.1/src/mame/layout/sms1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sms1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/snmath.lay mame-0.251+dfsg.1/src/mame/layout/snmath.lay --- mame-0.250+dfsg.1/src/mame/layout/snmath.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/snmath.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/snookr10.lay mame-0.251+dfsg.1/src/mame/layout/snookr10.lay --- mame-0.250+dfsg.1/src/mame/layout/snookr10.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/snookr10.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/snowcat.lay mame-0.251+dfsg.1/src/mame/layout/snowcat.lay --- mame-0.250+dfsg.1/src/mame/layout/snowcat.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/snowcat.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/snread.lay mame-0.251+dfsg.1/src/mame/layout/snread.lay --- mame-0.250+dfsg.1/src/mame/layout/snread.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/snread.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/snspell.lay mame-0.251+dfsg.1/src/mame/layout/snspell.lay --- mame-0.250+dfsg.1/src/mame/layout/snspell.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/snspell.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/snspellsp.lay mame-0.251+dfsg.1/src/mame/layout/snspellsp.lay --- mame-0.250+dfsg.1/src/mame/layout/snspellsp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/snspellsp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/solarq.lay mame-0.251+dfsg.1/src/mame/layout/solarq.lay --- mame-0.250+dfsg.1/src/mame/layout/solarq.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/solarq.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/spacecom.lay mame-0.251+dfsg.1/src/mame/layout/spacecom.lay --- mame-0.250+dfsg.1/src/mame/layout/spacecom.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/spacecom.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/spacewin.lay mame-0.251+dfsg.1/src/mame/layout/spacewin.lay --- mame-0.250+dfsg.1/src/mame/layout/spacewin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/spacewin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/spacezap.lay mame-0.251+dfsg.1/src/mame/layout/spacezap.lay --- mame-0.250+dfsg.1/src/mame/layout/spacezap.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/spacezap.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/spacwalk.lay mame-0.251+dfsg.1/src/mame/layout/spacwalk.lay --- mame-0.250+dfsg.1/src/mame/layout/spacwalk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/spacwalk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/spbactnp.lay mame-0.251+dfsg.1/src/mame/layout/spbactnp.lay --- mame-0.250+dfsg.1/src/mame/layout/spbactnp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/spbactnp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/spcenctr.lay mame-0.251+dfsg.1/src/mame/layout/spcenctr.lay --- mame-0.250+dfsg.1/src/mame/layout/spcenctr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/spcenctr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/spectra.lay mame-0.251+dfsg.1/src/mame/layout/spectra.lay --- mame-0.250+dfsg.1/src/mame/layout/spectra.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/spectra.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/speechp.lay mame-0.251+dfsg.1/src/mame/layout/speechp.lay --- mame-0.250+dfsg.1/src/mame/layout/speechp.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/speechp.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/speedbal.lay mame-0.251+dfsg.1/src/mame/layout/speedbal.lay --- mame-0.250+dfsg.1/src/mame/layout/speedbal.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/speedbal.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/speedbsk.lay mame-0.251+dfsg.1/src/mame/layout/speedbsk.lay --- mame-0.250+dfsg.1/src/mame/layout/speedbsk.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/speedbsk.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,7 +1,7 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/speedrs.lay mame-0.251+dfsg.1/src/mame/layout/speedrs.lay --- mame-0.250+dfsg.1/src/mame/layout/speedrs.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/speedrs.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/speedup.lay mame-0.251+dfsg.1/src/mame/layout/speedup.lay --- mame-0.250+dfsg.1/src/mame/layout/speedup.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/speedup.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/spellb.lay mame-0.251+dfsg.1/src/mame/layout/spellb.lay --- mame-0.250+dfsg.1/src/mame/layout/spellb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/spellb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/spirit76.lay mame-0.251+dfsg.1/src/mame/layout/spirit76.lay --- mame-0.250+dfsg.1/src/mame/layout/spirit76.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/spirit76.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/splasfgt.lay mame-0.251+dfsg.1/src/mame/layout/splasfgt.lay --- mame-0.250+dfsg.1/src/mame/layout/splasfgt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/splasfgt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/splitsec.lay mame-0.251+dfsg.1/src/mame/layout/splitsec.lay --- mame-0.250+dfsg.1/src/mame/layout/splitsec.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/splitsec.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/splus.lay mame-0.251+dfsg.1/src/mame/layout/splus.lay --- mame-0.250+dfsg.1/src/mame/layout/splus.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/splus.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sprachmg.lay mame-0.251+dfsg.1/src/mame/layout/sprachmg.lay --- mame-0.250+dfsg.1/src/mame/layout/sprachmg.lay 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sprachmg.lay 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,525 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/spyhunt.lay mame-0.251+dfsg.1/src/mame/layout/spyhunt.lay --- mame-0.250+dfsg.1/src/mame/layout/spyhunt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/spyhunt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/spyhunttec.lay mame-0.251+dfsg.1/src/mame/layout/spyhunttec.lay --- mame-0.250+dfsg.1/src/mame/layout/spyhunttec.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/spyhunttec.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sr16.lay mame-0.251+dfsg.1/src/mame/layout/sr16.lay --- mame-0.250+dfsg.1/src/mame/layout/sr16.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sr16.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ssimon.lay mame-0.251+dfsg.1/src/mame/layout/ssimon.lay --- mame-0.250+dfsg.1/src/mame/layout/ssimon.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ssimon.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sspeedr.lay mame-0.251+dfsg.1/src/mame/layout/sspeedr.lay --- mame-0.250+dfsg.1/src/mame/layout/sspeedr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sspeedr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ssports4.lay mame-0.251+dfsg.1/src/mame/layout/ssports4.lay --- mame-0.250+dfsg.1/src/mame/layout/ssports4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ssports4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sstrangr.lay mame-0.251+dfsg.1/src/mame/layout/sstrangr.lay --- mame-0.250+dfsg.1/src/mame/layout/sstrangr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sstrangr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/stactics.lay mame-0.251+dfsg.1/src/mame/layout/stactics.lay --- mame-0.250+dfsg.1/src/mame/layout/stactics.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/stactics.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/starcas.lay mame-0.251+dfsg.1/src/mame/layout/starcas.lay --- mame-0.250+dfsg.1/src/mame/layout/starcas.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/starcas.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/stargame.lay mame-0.251+dfsg.1/src/mame/layout/stargame.lay --- mame-0.250+dfsg.1/src/mame/layout/stargame.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/stargame.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/starwbc.lay mame-0.251+dfsg.1/src/mame/layout/starwbc.lay --- mame-0.250+dfsg.1/src/mame/layout/starwbc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/starwbc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/stepstag.lay mame-0.251+dfsg.1/src/mame/layout/stepstag.lay --- mame-0.250+dfsg.1/src/mame/layout/stepstag.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/stepstag.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/stisub.lay mame-0.251+dfsg.1/src/mame/layout/stisub.lay --- mame-0.250+dfsg.1/src/mame/layout/stisub.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/stisub.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/st_mp100.lay mame-0.251+dfsg.1/src/mame/layout/st_mp100.lay --- mame-0.250+dfsg.1/src/mame/layout/st_mp100.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/st_mp100.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/st_mp200.lay mame-0.251+dfsg.1/src/mame/layout/st_mp200.lay --- mame-0.250+dfsg.1/src/mame/layout/st_mp200.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/st_mp200.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/stocker.lay mame-0.251+dfsg.1/src/mame/layout/stocker.lay --- mame-0.250+dfsg.1/src/mame/layout/stocker.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/stocker.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/stopthief.lay mame-0.251+dfsg.1/src/mame/layout/stopthief.lay --- mame-0.250+dfsg.1/src/mame/layout/stopthief.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/stopthief.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/submar.lay mame-0.251+dfsg.1/src/mame/layout/submar.lay --- mame-0.250+dfsg.1/src/mame/layout/submar.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/submar.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/subroc3d.lay mame-0.251+dfsg.1/src/mame/layout/subroc3d.lay --- mame-0.250+dfsg.1/src/mame/layout/subroc3d.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/subroc3d.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,95 +1,219 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/subwars.lay mame-0.251+dfsg.1/src/mame/layout/subwars.lay --- mame-0.250+dfsg.1/src/mame/layout/subwars.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/subwars.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/summit.lay mame-0.251+dfsg.1/src/mame/layout/summit.lay --- mame-0.250+dfsg.1/src/mame/layout/summit.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/summit.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/super80.lay mame-0.251+dfsg.1/src/mame/layout/super80.lay --- mame-0.250+dfsg.1/src/mame/layout/super80.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/super80.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/superbug.lay mame-0.251+dfsg.1/src/mame/layout/superbug.lay --- mame-0.250+dfsg.1/src/mame/layout/superbug.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/superbug.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/superchs.lay mame-0.251+dfsg.1/src/mame/layout/superchs.lay --- mame-0.250+dfsg.1/src/mame/layout/superchs.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/superchs.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/suprstar.lay mame-0.251+dfsg.1/src/mame/layout/suprstar.lay --- mame-0.250+dfsg.1/src/mame/layout/suprstar.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/suprstar.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/svision.lay mame-0.251+dfsg.1/src/mame/layout/svision.lay --- mame-0.250+dfsg.1/src/mame/layout/svision.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/svision.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/svmu.lay mame-0.251+dfsg.1/src/mame/layout/svmu.lay --- mame-0.250+dfsg.1/src/mame/layout/svmu.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/svmu.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/swhr2.lay mame-0.251+dfsg.1/src/mame/layout/swhr2.lay --- mame-0.250+dfsg.1/src/mame/layout/swhr2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/swhr2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/swhr2u.lay mame-0.251+dfsg.1/src/mame/layout/swhr2u.lay --- mame-0.250+dfsg.1/src/mame/layout/swhr2u.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/swhr2u.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/sym1.lay mame-0.251+dfsg.1/src/mame/layout/sym1.lay --- mame-0.250+dfsg.1/src/mame/layout/sym1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/sym1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/t3in1sa.lay mame-0.251+dfsg.1/src/mame/layout/t3in1sa.lay --- mame-0.250+dfsg.1/src/mame/layout/t3in1sa.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/t3in1sa.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/t7in1ss.lay mame-0.251+dfsg.1/src/mame/layout/t7in1ss.lay --- mame-0.250+dfsg.1/src/mame/layout/t7in1ss.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/t7in1ss.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tactix.lay mame-0.251+dfsg.1/src/mame/layout/tactix.lay --- mame-0.250+dfsg.1/src/mame/layout/tactix.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tactix.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tailg.lay mame-0.251+dfsg.1/src/mame/layout/tailg.lay --- mame-0.250+dfsg.1/src/mame/layout/tailg.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tailg.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/taito.lay mame-0.251+dfsg.1/src/mame/layout/taito.lay --- mame-0.250+dfsg.1/src/mame/layout/taito.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/taito.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/talkingbb.lay mame-0.251+dfsg.1/src/mame/layout/talkingbb.lay --- mame-0.250+dfsg.1/src/mame/layout/talkingbb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/talkingbb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tama.lay mame-0.251+dfsg.1/src/mame/layout/tama.lay --- mame-0.250+dfsg.1/src/mame/layout/tama.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tama.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tandy12.lay mame-0.251+dfsg.1/src/mame/layout/tandy12.lay --- mame-0.250+dfsg.1/src/mame/layout/tandy12.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tandy12.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tascr30.lay mame-0.251+dfsg.1/src/mame/layout/tascr30.lay --- mame-0.250+dfsg.1/src/mame/layout/tascr30.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tascr30.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tb303.lay mame-0.251+dfsg.1/src/mame/layout/tb303.lay --- mame-0.250+dfsg.1/src/mame/layout/tb303.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tb303.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tbreakup.lay mame-0.251+dfsg.1/src/mame/layout/tbreakup.lay --- mame-0.250+dfsg.1/src/mame/layout/tbreakup.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tbreakup.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tc4.lay mame-0.251+dfsg.1/src/mame/layout/tc4.lay --- mame-0.250+dfsg.1/src/mame/layout/tc4.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tc4.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tc7atc.lay mame-0.251+dfsg.1/src/mame/layout/tc7atc.lay --- mame-0.250+dfsg.1/src/mame/layout/tc7atc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tc7atc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tccombat.lay mame-0.251+dfsg.1/src/mame/layout/tccombat.lay --- mame-0.250+dfsg.1/src/mame/layout/tccombat.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tccombat.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tceptor2.lay mame-0.251+dfsg.1/src/mame/layout/tceptor2.lay --- mame-0.250+dfsg.1/src/mame/layout/tceptor2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tceptor2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ @@ -16,6 +16,12 @@ + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/tcfballa.lay mame-0.251+dfsg.1/src/mame/layout/tcfballa.lay --- mame-0.250+dfsg.1/src/mame/layout/tcfballa.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tcfballa.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tcfball.lay mame-0.251+dfsg.1/src/mame/layout/tcfball.lay --- mame-0.250+dfsg.1/src/mame/layout/tcfball.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tcfball.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tdracula.lay mame-0.251+dfsg.1/src/mame/layout/tdracula.lay --- mame-0.250+dfsg.1/src/mame/layout/tdracula.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tdracula.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/teammate.lay mame-0.251+dfsg.1/src/mame/layout/teammate.lay --- mame-0.250+dfsg.1/src/mame/layout/teammate.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/teammate.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tec1.lay mame-0.251+dfsg.1/src/mame/layout/tec1.lay --- mame-0.250+dfsg.1/src/mame/layout/tec1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tec1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/techno.lay mame-0.251+dfsg.1/src/mame/layout/techno.lay --- mame-0.250+dfsg.1/src/mame/layout/techno.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/techno.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tecnbras.lay mame-0.251+dfsg.1/src/mame/layout/tecnbras.lay --- mame-0.250+dfsg.1/src/mame/layout/tecnbras.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tecnbras.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tenpindx.lay mame-0.251+dfsg.1/src/mame/layout/tenpindx.lay --- mame-0.250+dfsg.1/src/mame/layout/tenpindx.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tenpindx.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/thayers.lay mame-0.251+dfsg.1/src/mame/layout/thayers.lay --- mame-0.250+dfsg.1/src/mame/layout/thayers.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/thayers.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ti1250.lay mame-0.251+dfsg.1/src/mame/layout/ti1250.lay --- mame-0.250+dfsg.1/src/mame/layout/ti1250.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ti1250.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ti1270.lay mame-0.251+dfsg.1/src/mame/layout/ti1270.lay --- mame-0.250+dfsg.1/src/mame/layout/ti1270.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ti1270.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ti1680.lay mame-0.251+dfsg.1/src/mame/layout/ti1680.lay --- mame-0.250+dfsg.1/src/mame/layout/ti1680.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ti1680.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ti25503.lay mame-0.251+dfsg.1/src/mame/layout/ti25503.lay --- mame-0.250+dfsg.1/src/mame/layout/ti25503.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ti25503.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ti30.lay mame-0.251+dfsg.1/src/mame/layout/ti30.lay --- mame-0.250+dfsg.1/src/mame/layout/ti30.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ti30.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ti5100.lay mame-0.251+dfsg.1/src/mame/layout/ti5100.lay --- mame-0.250+dfsg.1/src/mame/layout/ti5100.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ti5100.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ti74.lay mame-0.251+dfsg.1/src/mame/layout/ti74.lay --- mame-0.250+dfsg.1/src/mame/layout/ti74.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ti74.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ti95.lay mame-0.251+dfsg.1/src/mame/layout/ti95.lay --- mame-0.250+dfsg.1/src/mame/layout/ti95.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ti95.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/timaze.lay mame-0.251+dfsg.1/src/mame/layout/timaze.lay --- mame-0.250+dfsg.1/src/mame/layout/timaze.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/timaze.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/timetrv.lay mame-0.251+dfsg.1/src/mame/layout/timetrv.lay --- mame-0.250+dfsg.1/src/mame/layout/timetrv.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/timetrv.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tinv2650.lay mame-0.251+dfsg.1/src/mame/layout/tinv2650.lay --- mame-0.250+dfsg.1/src/mame/layout/tinv2650.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tinv2650.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tisr16.lay mame-0.251+dfsg.1/src/mame/layout/tisr16.lay --- mame-0.250+dfsg.1/src/mame/layout/tisr16.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tisr16.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tisubb.lay mame-0.251+dfsg.1/src/mame/layout/tisubb.lay --- mame-0.250+dfsg.1/src/mame/layout/tisubb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tisubb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tisub.lay mame-0.251+dfsg.1/src/mame/layout/tisub.lay --- mame-0.250+dfsg.1/src/mame/layout/tisub.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tisub.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tithermos.lay mame-0.251+dfsg.1/src/mame/layout/tithermos.lay --- mame-0.250+dfsg.1/src/mame/layout/tithermos.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tithermos.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tk80.lay mame-0.251+dfsg.1/src/mame/layout/tk80.lay --- mame-0.250+dfsg.1/src/mame/layout/tk80.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tk80.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tm990189.lay mame-0.251+dfsg.1/src/mame/layout/tm990189.lay --- mame-0.250+dfsg.1/src/mame/layout/tm990189.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tm990189.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tm990189v.lay mame-0.251+dfsg.1/src/mame/layout/tm990189v.lay --- mame-0.250+dfsg.1/src/mame/layout/tm990189v.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tm990189v.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tmtennis.lay mame-0.251+dfsg.1/src/mame/layout/tmtennis.lay --- mame-0.250+dfsg.1/src/mame/layout/tmtennis.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tmtennis.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tntell.lay mame-0.251+dfsg.1/src/mame/layout/tntell.lay --- mame-0.250+dfsg.1/src/mame/layout/tntell.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tntell.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tonypok.lay mame-0.251+dfsg.1/src/mame/layout/tonypok.lay --- mame-0.250+dfsg.1/src/mame/layout/tonypok.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tonypok.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/topracer.lay mame-0.251+dfsg.1/src/mame/layout/topracer.lay --- mame-0.250+dfsg.1/src/mame/layout/topracer.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/topracer.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/topspeed.lay mame-0.251+dfsg.1/src/mame/layout/topspeed.lay --- mame-0.250+dfsg.1/src/mame/layout/topspeed.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/topspeed.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/touchme.lay mame-0.251+dfsg.1/src/mame/layout/touchme.lay --- mame-0.250+dfsg.1/src/mame/layout/touchme.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/touchme.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/toutangonl.lay mame-0.251+dfsg.1/src/mame/layout/toutangonl.lay --- mame-0.250+dfsg.1/src/mame/layout/toutangonl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/toutangonl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tranz330.lay mame-0.251+dfsg.1/src/mame/layout/tranz330.lay --- mame-0.250+dfsg.1/src/mame/layout/tranz330.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tranz330.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/triton.lay mame-0.251+dfsg.1/src/mame/layout/triton.lay --- mame-0.250+dfsg.1/src/mame/layout/triton.lay 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/triton.lay 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/tritreat.lay mame-0.251+dfsg.1/src/mame/layout/tritreat.lay --- mame-0.250+dfsg.1/src/mame/layout/tritreat.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tritreat.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/trstrove.lay mame-0.251+dfsg.1/src/mame/layout/trstrove.lay --- mame-0.250+dfsg.1/src/mame/layout/trstrove.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/trstrove.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/trvmadns.lay mame-0.251+dfsg.1/src/mame/layout/trvmadns.lay --- mame-0.250+dfsg.1/src/mame/layout/trvmadns.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/trvmadns.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/turbo.lay mame-0.251+dfsg.1/src/mame/layout/turbo.lay --- mame-0.250+dfsg.1/src/mame/layout/turbo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/turbo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,205 +1,449 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + - - - + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + - - - + + + + - - + + + + + + + - - - + + + + - - + + + + + + + + + + - - + + + + + + - - - + + + + - - + + + + + + - - - + + + + - - + + + + + + diff -Nru mame-0.250+dfsg.1/src/mame/layout/turbotag.lay mame-0.251+dfsg.1/src/mame/layout/turbotag.lay --- mame-0.250+dfsg.1/src/mame/layout/turbotag.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/turbotag.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tx1.lay mame-0.251+dfsg.1/src/mame/layout/tx1.lay --- mame-0.250+dfsg.1/src/mame/layout/tx1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tx1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/tx81z.lay mame-0.251+dfsg.1/src/mame/layout/tx81z.lay --- mame-0.250+dfsg.1/src/mame/layout/tx81z.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/tx81z.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ufo21.lay mame-0.251+dfsg.1/src/mame/layout/ufo21.lay --- mame-0.250+dfsg.1/src/mame/layout/ufo21.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ufo21.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ufo800.lay mame-0.251+dfsg.1/src/mame/layout/ufo800.lay --- mame-0.250+dfsg.1/src/mame/layout/ufo800.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ufo800.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ufombs.lay mame-0.251+dfsg.1/src/mame/layout/ufombs.lay --- mame-0.250+dfsg.1/src/mame/layout/ufombs.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ufombs.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ufomini.lay mame-0.251+dfsg.1/src/mame/layout/ufomini.lay --- mame-0.250+dfsg.1/src/mame/layout/ufomini.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ufomini.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/unixpc.lay mame-0.251+dfsg.1/src/mame/layout/unixpc.lay --- mame-0.250+dfsg.1/src/mame/layout/unixpc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/unixpc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/unkch.lay mame-0.251+dfsg.1/src/mame/layout/unkch.lay --- mame-0.250+dfsg.1/src/mame/layout/unkch.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/unkch.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/upndown.lay mame-0.251+dfsg.1/src/mame/layout/upndown.lay --- mame-0.250+dfsg.1/src/mame/layout/upndown.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/upndown.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/us2pfball.lay mame-0.251+dfsg.1/src/mame/layout/us2pfball.lay --- mame-0.250+dfsg.1/src/mame/layout/us2pfball.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/us2pfball.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/ut88mini.lay mame-0.251+dfsg.1/src/mame/layout/ut88mini.lay --- mame-0.250+dfsg.1/src/mame/layout/ut88mini.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/ut88mini.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/v4addlad.lay mame-0.251+dfsg.1/src/mame/layout/v4addlad.lay --- mame-0.250+dfsg.1/src/mame/layout/v4addlad.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/v4addlad.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/v4barqst.lay mame-0.251+dfsg.1/src/mame/layout/v4barqst.lay --- mame-0.250+dfsg.1/src/mame/layout/v4barqst.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/v4barqst.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/v4dbltak.lay mame-0.251+dfsg.1/src/mame/layout/v4dbltak.lay --- mame-0.250+dfsg.1/src/mame/layout/v4dbltak.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/v4dbltak.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/v4in1eg.lay mame-0.251+dfsg.1/src/mame/layout/v4in1eg.lay --- mame-0.250+dfsg.1/src/mame/layout/v4in1eg.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/v4in1eg.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/v4psi.lay mame-0.251+dfsg.1/src/mame/layout/v4psi.lay --- mame-0.250+dfsg.1/src/mame/layout/v4psi.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/v4psi.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/v4strike.lay mame-0.251+dfsg.1/src/mame/layout/v4strike.lay --- mame-0.250+dfsg.1/src/mame/layout/v4strike.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/v4strike.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/vaportrx.lay mame-0.251+dfsg.1/src/mame/layout/vaportrx.lay --- mame-0.250+dfsg.1/src/mame/layout/vaportrx.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/vaportrx.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/vboy.lay mame-0.251+dfsg.1/src/mame/layout/vboy.lay --- mame-0.250+dfsg.1/src/mame/layout/vboy.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/vboy.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/vcs80.lay mame-0.251+dfsg.1/src/mame/layout/vcs80.lay --- mame-0.250+dfsg.1/src/mame/layout/vcs80.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/vcs80.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/vd.lay mame-0.251+dfsg.1/src/mame/layout/vd.lay --- mame-0.250+dfsg.1/src/mame/layout/vd.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/vd.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/venicea5.lay mame-0.251+dfsg.1/src/mame/layout/venicea5.lay --- mame-0.250+dfsg.1/src/mame/layout/venicea5.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/venicea5.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/vgmplay.lay mame-0.251+dfsg.1/src/mame/layout/vgmplay.lay --- mame-0.250+dfsg.1/src/mame/layout/vgmplay.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/vgmplay.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/victor5.lay mame-0.251+dfsg.1/src/mame/layout/victor5.lay --- mame-0.250+dfsg.1/src/mame/layout/victor5.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/victor5.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/vidbrain.lay mame-0.251+dfsg.1/src/mame/layout/vidbrain.lay --- mame-0.250+dfsg.1/src/mame/layout/vidbrain.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/vidbrain.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/vidchal.lay mame-0.251+dfsg.1/src/mame/layout/vidchal.lay --- mame-0.250+dfsg.1/src/mame/layout/vidchal.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/vidchal.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/video21.lay mame-0.251+dfsg.1/src/mame/layout/video21.lay --- mame-0.250+dfsg.1/src/mame/layout/video21.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/video21.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/videocba.lay mame-0.251+dfsg.1/src/mame/layout/videocba.lay --- mame-0.250+dfsg.1/src/mame/layout/videocba.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/videocba.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/videodad.lay mame-0.251+dfsg.1/src/mame/layout/videodad.lay --- mame-0.250+dfsg.1/src/mame/layout/videodad.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/videodad.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/videopin.lay mame-0.251+dfsg.1/src/mame/layout/videopin.lay --- mame-0.250+dfsg.1/src/mame/layout/videopin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/videopin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/videopkr.lay mame-0.251+dfsg.1/src/mame/layout/videopkr.lay --- mame-0.250+dfsg.1/src/mame/layout/videopkr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/videopkr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/videosaa.lay mame-0.251+dfsg.1/src/mame/layout/videosaa.lay --- mame-0.250+dfsg.1/src/mame/layout/videosaa.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/videosaa.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/vk100.lay mame-0.251+dfsg.1/src/mame/layout/vk100.lay --- mame-0.250+dfsg.1/src/mame/layout/vk100.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/vk100.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/votrpss.lay mame-0.251+dfsg.1/src/mame/layout/votrpss.lay --- mame-0.250+dfsg.1/src/mame/layout/votrpss.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/votrpss.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/votrtnt.lay mame-0.251+dfsg.1/src/mame/layout/votrtnt.lay --- mame-0.250+dfsg.1/src/mame/layout/votrtnt.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/votrtnt.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/vr.lay mame-0.251+dfsg.1/src/mame/layout/vr.lay --- mame-0.250+dfsg.1/src/mame/layout/vr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/vr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/vsmile.lay mame-0.251+dfsg.1/src/mame/layout/vsmile.lay --- mame-0.250+dfsg.1/src/mame/layout/vsmile.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/vsmile.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/vt100.lay mame-0.251+dfsg.1/src/mame/layout/vt100.lay --- mame-0.250+dfsg.1/src/mame/layout/vt100.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/vt100.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wackygtr.lay mame-0.251+dfsg.1/src/mame/layout/wackygtr.lay --- mame-0.250+dfsg.1/src/mame/layout/wackygtr.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wackygtr.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wamazona.lay mame-0.251+dfsg.1/src/mame/layout/wamazona.lay --- mame-0.250+dfsg.1/src/mame/layout/wamazona.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wamazona.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wamazon.lay mame-0.251+dfsg.1/src/mame/layout/wamazon.lay --- mame-0.250+dfsg.1/src/mame/layout/wamazon.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wamazon.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/warp1bl.lay mame-0.251+dfsg.1/src/mame/layout/warp1bl.lay --- mame-0.250+dfsg.1/src/mame/layout/warp1bl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/warp1bl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/warrior.lay mame-0.251+dfsg.1/src/mame/layout/warrior.lay --- mame-0.250+dfsg.1/src/mame/layout/warrior.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/warrior.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wcougar.lay mame-0.251+dfsg.1/src/mame/layout/wcougar.lay --- mame-0.250+dfsg.1/src/mame/layout/wcougar.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wcougar.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wecleman.lay mame-0.251+dfsg.1/src/mame/layout/wecleman.lay --- mame-0.250+dfsg.1/src/mame/layout/wecleman.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wecleman.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/whousetc.lay mame-0.251+dfsg.1/src/mame/layout/whousetc.lay --- mame-0.250+dfsg.1/src/mame/layout/whousetc.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/whousetc.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wico.lay mame-0.251+dfsg.1/src/mame/layout/wico.lay --- mame-0.250+dfsg.1/src/mame/layout/wico.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wico.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wikwin.lay mame-0.251+dfsg.1/src/mame/layout/wikwin.lay --- mame-0.250+dfsg.1/src/mame/layout/wikwin.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wikwin.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wildbill.lay mame-0.251+dfsg.1/src/mame/layout/wildbill.lay --- mame-0.250+dfsg.1/src/mame/layout/wildbill.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wildbill.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wildfire.lay mame-0.251+dfsg.1/src/mame/layout/wildfire.lay --- mame-0.250+dfsg.1/src/mame/layout/wildfire.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wildfire.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wildone.lay mame-0.251+dfsg.1/src/mame/layout/wildone.lay --- mame-0.250+dfsg.1/src/mame/layout/wildone.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wildone.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/winbingo.lay mame-0.251+dfsg.1/src/mame/layout/winbingo.lay --- mame-0.250+dfsg.1/src/mame/layout/winbingo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/winbingo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wizatron.lay mame-0.251+dfsg.1/src/mame/layout/wizatron.lay --- mame-0.250+dfsg.1/src/mame/layout/wizatron.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wizatron.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wizways.lay mame-0.251+dfsg.1/src/mame/layout/wizways.lay --- mame-0.250+dfsg.1/src/mame/layout/wizways.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wizways.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wldarrow.lay mame-0.251+dfsg.1/src/mame/layout/wldarrow.lay --- mame-0.250+dfsg.1/src/mame/layout/wldarrow.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wldarrow.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wnpost.lay mame-0.251+dfsg.1/src/mame/layout/wnpost.lay --- mame-0.250+dfsg.1/src/mame/layout/wnpost.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wnpost.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wotw.lay mame-0.251+dfsg.1/src/mame/layout/wotw.lay --- mame-0.250+dfsg.1/src/mame/layout/wotw.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wotw.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wpc_an.lay mame-0.251+dfsg.1/src/mame/layout/wpc_an.lay --- mame-0.250+dfsg.1/src/mame/layout/wpc_an.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wpc_an.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wswan.lay mame-0.251+dfsg.1/src/mame/layout/wswan.lay --- mame-0.250+dfsg.1/src/mame/layout/wswan.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wswan.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/wtiger.lay mame-0.251+dfsg.1/src/mame/layout/wtiger.lay --- mame-0.250+dfsg.1/src/mame/layout/wtiger.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/wtiger.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/x68000.lay mame-0.251+dfsg.1/src/mame/layout/x68000.lay --- mame-0.250+dfsg.1/src/mame/layout/x68000.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/x68000.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/xl25.lay mame-0.251+dfsg.1/src/mame/layout/xl25.lay --- mame-0.250+dfsg.1/src/mame/layout/xl25.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/xl25.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/yeno_532xl.lay mame-0.251+dfsg.1/src/mame/layout/yeno_532xl.lay --- mame-0.250+dfsg.1/src/mame/layout/yeno_532xl.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/yeno_532xl.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/yosakdon.lay mame-0.251+dfsg.1/src/mame/layout/yosakdon.lay --- mame-0.250+dfsg.1/src/mame/layout/yosakdon.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/yosakdon.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/yukongl5.lay mame-0.251+dfsg.1/src/mame/layout/yukongl5.lay --- mame-0.250+dfsg.1/src/mame/layout/yukongl5.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/yukongl5.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/z80clock.lay mame-0.251+dfsg.1/src/mame/layout/z80clock.lay --- mame-0.250+dfsg.1/src/mame/layout/z80clock.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/z80clock.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/z80dev.lay mame-0.251+dfsg.1/src/mame/layout/z80dev.lay --- mame-0.250+dfsg.1/src/mame/layout/z80dev.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/z80dev.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/z80ne.lay mame-0.251+dfsg.1/src/mame/layout/z80ne.lay --- mame-0.250+dfsg.1/src/mame/layout/z80ne.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/z80ne.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/z80netb.lay mame-0.251+dfsg.1/src/mame/layout/z80netb.lay --- mame-0.250+dfsg.1/src/mame/layout/z80netb.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/z80netb.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/z80netf.lay mame-0.251+dfsg.1/src/mame/layout/z80netf.lay --- mame-0.250+dfsg.1/src/mame/layout/z80netf.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/z80netf.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/z80net.lay mame-0.251+dfsg.1/src/mame/layout/z80net.lay --- mame-0.250+dfsg.1/src/mame/layout/z80net.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/z80net.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/zac_1.lay mame-0.251+dfsg.1/src/mame/layout/zac_1.lay --- mame-0.250+dfsg.1/src/mame/layout/zac_1.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/zac_1.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/zac_2.lay mame-0.251+dfsg.1/src/mame/layout/zac_2.lay --- mame-0.250+dfsg.1/src/mame/layout/zac_2.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/zac_2.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/zac_proto.lay mame-0.251+dfsg.1/src/mame/layout/zac_proto.lay --- mame-0.250+dfsg.1/src/mame/layout/zac_proto.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/zac_proto.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/zapcomputer.lay mame-0.251+dfsg.1/src/mame/layout/zapcomputer.lay --- mame-0.250+dfsg.1/src/mame/layout/zapcomputer.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/zapcomputer.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/zodiac.lay mame-0.251+dfsg.1/src/mame/layout/zodiac.lay --- mame-0.250+dfsg.1/src/mame/layout/zodiac.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/zodiac.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/layout/zoo.lay mame-0.251+dfsg.1/src/mame/layout/zoo.lay --- mame-0.250+dfsg.1/src/mame/layout/zoo.lay 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/layout/zoo.lay 2022-12-29 14:20:09.000000000 +0000 @@ -1,6 +1,6 @@ diff -Nru mame-0.250+dfsg.1/src/mame/mame.lst mame-0.251+dfsg.1/src/mame/mame.lst --- mame-0.250+dfsg.1/src/mame/mame.lst 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/mame.lst 2022-12-29 14:20:09.000000000 +0000 @@ -2530,6 +2530,7 @@ bonzeadv // B41 (c) 1988 Taito Corporation Japan (World) bonzeadvo // B41 (c) 1988 Taito Corporation Japan (World) bonzeadvp // +bonzeadvp2 // bonzeadvu // B41 (c) 1988 Taito America Corporation (US) cadash // C21 (c) 1989 Taito Corporation Japan cadashf // C21 (c) 1989 Taito Corporation Japan @@ -4524,6 +4525,7 @@ sltblgp1 // 1996 sltblgpo // 1996 sltblgtk // 1996 +sltblgtka // 1996 @source:bfm/bfm_sc4.cpp ad4ctl // @@ -9369,12 +9371,6 @@ b85scard // (c) 198? BFM b85sngam // -@source:misc/bgt.cpp -bg_barmy // -bg_ddb // -bg_max // -bg_maxa // - @source:msx/big10.cpp big10 // (c) 198? Unknown @@ -10162,6 +10158,7 @@ plegendsj // (c) 1994 Atlus ppsatan // (c) 1996 pwrinst2 // (c) 1994 Atlus +pwrinst2a // (c) 1994 Atlus pwrinst2j // (c) 1994 Atlus sailormn // (c) 1995 Banpresto (Ver. 95/03/22B, country is in EEPROM) sailormnh // (c) 1995 Banpresto (Ver. 95/03/22B, country is in EEPROM) @@ -10733,6 +10730,7 @@ cocoh // Color Computer with HD6309 CPU cp400 // Prológica CP400 cp400c2 // Prológica CP400 Color II +deluxecoco // Deluxe Color Computer lzcolor64 // Novo Tempo / LZ Equipamentos Color64 ms1600 // ILCE / SEP Micro-SEP 1600 mx1600 // Dynacom MX-1600 @@ -10988,6 +10986,7 @@ dynwarjr // 4/1989 (c) 1989 (Japan) ffight // 12/1989 (c) 1989 (World) ffighta // 12/1989 (c) 1989 (World) +ffightae ffightj // 12/1989 (c) 1989 (Japan) ffightj1 // 12/01/1990 (c) 1989 (Japan) ffightj2 // 05/03/1990 (c) 1989 (Japan) @@ -11011,7 +11010,6 @@ ghouls // 12/1988 (c) 1988 (World) ghoulsu // 12/1988 (c) 1988 (USA) gulunpa // -hkittymp // 12/07/1996 (c) 1996 (Japan) knights // 27/11/1991 (c) 1991 (World) knightsb2 // bootleg knightsj // 27/11/1991 (c) 1991 (Japan) @@ -11034,6 +11032,7 @@ mercsj // 02/03/1990 (c) 1990 (Japan) mercsu // 08/06/1990 (c) 1990 (USA) mercsur1 // 02/03/1990 (c) 1990 (USA) +mpumpkin // 12/07/1996 (c) 1996 (Japan) msword // 25/07/1990 (c) 1990 (World) mswordj // 23/06/1990 (c) 1990 (Japan) mswordr1 // 23/06/1990 (c) 1990 (World) @@ -12430,6 +12429,7 @@ cluckypo // 15 1981.?? Lucky Poker cmanhat // 03 1981.01 Manhattan cmissnx // 21 1982.04 Mission-X/Zoar +cnebula // 1980.12 Nebula cnightst // 32 1983.04 Night Star cnightst2 // 32 cocean1a // DT-1[10]1-A 1981.03.17 Ocean to Ocean (Slot) (Japan) (DECO Cassette MD) (Ver 1) // version verified, no lever used @@ -12460,6 +12460,9 @@ ctsttape // ? czeroize // 37 1983.10 Zeroize decocass // +decodark // +decodark16 // +decodark15 // decomult // @source:dec/decstation.cpp @@ -12781,6 +12784,9 @@ @source:quantel/dpb7000.cpp dpb7000 // +@source:trs/dgnalpha.cpp +dgnalpha // Dragon Alpha + @source:skeleton/dps1.cpp dps1 // @@ -12789,7 +12795,6 @@ @source:trs/dragon.cpp d64plus // Dragon 64 + Compusense Plus addon -dgnalpha // Dragon Alpha dragon200 // Dragon 200 dragon200e // Dragon 200E dragon32 // Dragon 32 @@ -13610,12 +13615,7 @@ equites // (c) 1984 Alpha Denshi Co. equitess // (c) 1984 Alpha Denshi Co./Sega gekisou // (c) 1985 Eastern -hvoltage // (c) 1985 Alpha Denshi Co. kouyakyu // (c) 1985 Alpha Denshi Co. -splndrbt // (c) 1985 Alpha Denshi Co. -splndrbt2 // (c) 1985 Alpha Denshi Co. -splndrbta // (c) 1985 Alpha Denshi Co. -splndrbtb // (c) 1985 Alpha Denshi Co. @source:ericsson/eispc.cpp epc // 1984 Ericsson PC @@ -16412,10 +16412,11 @@ gunsmoke // 11/1985 (c) 1985 (World) gunsmokeb // gunsmokej // 11/1985 (c) 1985 (Japan) -gunsmokeu // 11/1985 (c) 1985 + Romstar (US) -gunsmokeua // 11/1985 (c) 1985 (US) -gunsmokeub // 11/1985 (c) 1985 (US) -gunsmokeg // +gunsmokeu // 04/1986 (c) 1986 + Romstar (US) +gunsmokeua // 01/1986 (c) 1985 + Romstar (US) +gunsmokeub // 11/1985 (c) 1985 + Romstar (US) +gunsmokeuc // 11/1985 (c) 1985 + Romstar (US) +gunsmokeg // 11/1985 (c) 1985 (Germany) @source:konami/gyruss.cpp gyruss // GX347 (c) 1983 @@ -16423,7 +16424,7 @@ gyrussce // GX347 (c) 1983 + Centuri license venus // bootleg -@source:h01x/h01x.cpp +@source:misc/h01x.cpp h01b // H-01B - TRS-80 Level II BASIC nf500a // NF500A - TRS-80 Level II BASIC h01jce // H-01 JCE - TRS-80 Level II BASIC @@ -16763,10 +16764,12 @@ kgarfld // Konami kgradius // Konami kloneran // Konami +knascar // Konami knfl // Konami kosmicmt // Elektronika kosmicpt // Elektronika krybolov // Elektronika +kskatedie // Konami ktmnt // Konami ktopgun // Konami kvakazad // Elektronika @@ -17189,7 +17192,14 @@ terabrstj // GX715 (c)1998 Japan JEL 1998/07/17 terabrstja // GX715 (c)1998 Japan JAA 1998/02/25 terabrstua // GX715 (c)1998 USA UAA 1998/02/25 -thrilldbu // GE713UF (c)1998 ?AB +thrilldgej // GE713JA (c)1998 GE713JAB +thrilldgeu // GE713UF (c)1998 GE713UFB +thrilldgke // GK713EA (c)1998 GK713EAB +thrilldgkee // GK713EE (c)1998 GK713EEB +thrilldgkk // GK713K* (c)1998 GK713K*B +thrilldgmj // GM713JA (c)1998 GM713JAB +thrilldgnj // GN713JA (c)1998 GN713JAB +thrilldgpj // GP713JA (c)1998 GP713JAB @source:misc/hotblock.cpp hotblock // (c) 1993 Nics? / NIX? @@ -17252,8 +17262,10 @@ hp95lx // @source:hp/hp9825.cpp +hp9825a // HP 9825A hp9825b // HP 9825B hp9825t // HP 9825T +hp9831 // HP 9831A @source:hp/hp9845.cpp hp9835a // @@ -23321,12 +23333,10 @@ bk3ssrmb // MegaDrive-based hack jparkmb // MegaDrive-based hack mk3mdb // MegaDrive-based hack -sbubsm // (c) 1996 Sun Mixing sonic2mb // MegaDrive-based hack sonic3mb // MegaDrive-based hack srmdb // MegaDrive-based hack ssf2mdb // MegaDrive-based hack -topshoot // (c) 1995 Sun Mixing twinktmb // MegaDrive-based hack @source:sega/megadriv_rad.cpp @@ -23344,6 +23354,10 @@ dgunl3227 ra145 +@source:sega/megadriv_sunmix.cpp +sbubsm // (c) 1996 Sun Mixing +topshoot // (c) 1995 Sun Mixing + @source:sega/megadriv_sunplus_hybrid.cpp reactmd @@ -24159,6 +24173,9 @@ @source:skeleton/mini2440.cpp mini2440 // +@source:homebrew/minib.cpp +minib // + @source:misc/miniboy7.cpp bejpoker // (c) 1992?, Bonanza Enterprises miniboy7 // (c) 1983, Bonanza Enterprises @@ -24290,6 +24307,7 @@ @source:trainer/mk14.cpp mk14 // +mk14vdu // @source:ussr/mk85.cpp mk85 // @@ -24556,6 +24574,9 @@ mpf1b // 1979 Multitech Micro Professor 1B mpf1p // +@source:multitech/mpf1_88.cpp +mpf1_88 // 1985 Multitech Micro-Professor I/88 + @source:commodore/mps1230.cpp mps1000 // 1986 Commodore MPS-1000 (dot matrix printer) mps1230 // 1988 Commodore MPS-1230 near-letter-quality dot matrix printer @@ -26450,6 +26471,7 @@ m4toptena // m4tribnk // Triple Bank (Barcrest) m4tricol // Tricolor (Barcrest) +m4tst // MPU4 Unit Test (Program 4) m4tst2 // MPU4 Unit Test (Program 2) m4ttak // Tic Tac Take (unknown) m4tupen // Tuppenny Cracker (Barcrest - Bootleg) @@ -30206,7 +30228,6 @@ m4tropclb // m4tropclc // m4tropcld // -m4tst // MPU4 Unit Test (Program 4) m4vivalv // Viva Las Vegas (Barcrest) m4vivalv__0 // m4vivalv__1 // @@ -33537,6 +33558,10 @@ npusagif // @source:cirsa/neptunp2.cpp +bg_barmy // +bg_ddb // +bg_max // +bg_maxa // ccorsario // (c) 2002 Cirsa / Unidesa mltpoints // (c) 2006 Cirsa / Unidesa neptunp2 // (c) 2003 Cirsa / Unidesa @@ -33975,7 +34000,8 @@ vandykejal2 // UPL-90064 (c) Jaleco @source:nmk/nmkmedal.cpp -hpierrot // NMK +drail // NTC / NMK +hpierrot // NTC / NMK trocana // NTC / NMK @source:efo/nightmare.cpp @@ -34151,12 +34177,26 @@ nss_sten // 199? Nintendo @source:konami/nwk-tr.cpp -racingj // GX676 (c)1998 -racingj2 // GX888 (c)1999 (EAE) -racingj2j // GX888 (c)1999 (JAE) -thrilld // GX713 (c)1998 Japan JAE -thrilldb // GX713 (c)1998 Japan JAB -thrilldbe // GX713 (c)1998 Europe EAB +racingj // GQ676 (c)1998 (UAC) +racingj2 // GQ888 (c)1999 (UAA) +racingj2a // GQ888 (c)1999 (AAA) +racingj2e // GQ888 (c)1999 (EAA) +racingj2j // GQ888 (c)1999 (JAA) +racingja // GQ676 (c)1998 (AAC) +racingje // GQ676 (c)1998 (EAC) +racingjj // GQ676 (c)1998 (JAC) +thrilld // GC713 (c)1998 Japan UDE +thrillda // GC713 (c)1998 Japan ACE +thrilldab // GC713 (c)1998 Japan ABE +thrilldb // GC713 (c)1998 Japan UDB +thrilldba // GC713 (c)1998 Japan ACB +thrilldbab // GC713 (c)1998 Japan ABB +thrilldbe // GC713 (c)1998 Japan EDB +thrilldbj // GC713 (c)1998 Japan JCB +thrilldbja // GC713 (c)1998 Japan JAB +thrillde // GC713 (c)1998 Japan EDE +thrilldj // GC713 (c)1998 Japan JCE +thrilldja // GC713 (c)1998 Japan JAE @source:taito/nycaptor.cpp bronx // bootleg @@ -34803,6 +34843,7 @@ pcktgal2 // (c) 1989 Data East Corporation (World?) pcktgal2j // (c) 1989 Data East Corporation (World?) pcktgalb // bootleg +pcktgalba // bootleg spool3 // (c) 1989 Data East Corporation (World?) spool3i // (c) 1990 Data East Corporation + I-Vics license @@ -36937,6 +36978,7 @@ rbmk // (c) 1998 GMS rbspm // (c) 1998 GMS sc2in1 // (c) 2001 GMS +super555 // (c) 1999 GMS @source:namco/rbowlorama.cpp rbowlorama // (c) 2008 Cosmodog / Namco @@ -38627,6 +38669,7 @@ dinoki4 // 2008.08 Kodai Ouja Kyouryuu King - Mezame yo! Arata-naru Chikara!! (Japan, Ver 4.000) (MDA-C0061) dinoking // 2005.09 Kodai Ouja Kyouryuu King / Ancient Ruler Dinosaur King dinokior // +huhimage // 2019.01 Heat Up Hockey Image (Ver.1.003R) kingyo // 2009.10 Yataimura Kingyosukui (1-player, Japan, Ver 1.005) kingyoch // 2009.03 Yataimura Kingyosukui (4-player, China, Ver 1.000) loveber3 // @@ -38639,6 +38682,7 @@ ochaken // puyomedal // 2009.03 Puyo Puyo! The Medal Edition segasp // +shateki // 2010.07 Yataimura Shateki (1-player, Japan, Ver 1.000) tetgiano // tetgiant // unomedal // 2009.01 UNO the Medal @@ -39523,6 +39567,10 @@ @source:sony/smc777.cpp smc777 // +@source:misc/smd2144c.cpp +thecastle // +therock // + @source:sega/sms.cpp gamegeaj // Sega GameGear (Japan) gamegear // Sega GameGear @@ -40164,6 +40212,13 @@ @source:gaelco/splash_ms.cpp splashms +@source:alpha/splendor.cpp +hvoltage // (c) 1985 Alpha Denshi Co. +splndrbt // (c) 1985 Alpha Denshi Co. +splndrbt2 // (c) 1985 Alpha Denshi Co. +splndrbta // (c) 1985 Alpha Denshi Co. +splndrbtb // (c) 1985 Alpha Denshi Co. + @source:igt/splus.cpp spset005 // (c) 1993 IGT - International Game Technology spset015 // (c) 1993 IGT - International Game Technology @@ -40527,6 +40582,7 @@ micrombc // 1999.03 Microman Battle Charge myfairld // 1998.07 My Fair Lady (Micronet) nameclub // 1996.03 Name Club +nclubdis // 1998.06 Name Club Disney nclubv2 // 1996.03 Name Club Ver. 2 nclubv3 // 1997.07 Name Club Ver. 3 othellos // 1998.07 Othello Shiyouyo (Success) @@ -41700,6 +41756,7 @@ @source:tecmo/tehkanwc.cpp gridiron // (c) 1985 Tehkan teedoff // 6102 - (c) 1986 Tecmo +teedoffj // tehkanwc // (c) 1985 Tehkan tehkanwcb // bootleg tehkanwcc // bootleg @@ -42503,6 +42560,12 @@ @source:atari/triplhnt.cpp triplhnt // 008422-008791 1977/04 [6800] +@source:misc/triton.cpp +triton41 // 1978 Transam Triton L4.1 +triton51 // 1979 Transam Triton L5.1 +triton52 // 1979 Transam Triton L5.2 +triton72 // 1980 Transam Triton L7.2 + @source:misc/triviaquiz.cpp triviaqz // 1985 Intermatic Manufacturing triviaqz2 // 1985 Intermatic Manufacturing @@ -43005,8 +43068,8 @@ vec1200 // vector06 // -@source:skeleton/vector4.cpp -vector4 // +@source:skeleton/vector3.cpp +vector3 // @source:miltonbradley/vectrex.cpp raaspec // (c) Roy Abel & Associates 1984 @@ -44270,7 +44333,7 @@ ww_l5 // ww_lh5 // ww_lh6 // -ww_p1 // +ww_p6 // ww_p8 // @source:pinball/wpc_s.cpp @@ -44441,6 +44504,7 @@ epo_guru // evio // gcslottv // +gungunad // has_wamg // jarajal // jpopira // @@ -44626,6 +44690,7 @@ psr36 // 1988 PSR-36 pss480 // 1988 PSS-480 pss680 // 1988 PSS-680 +pss780 // 1989 PSS-780 @source:yamaha/ympsr40.cpp psr40 // 1985 PSR-40 @@ -45077,3 +45142,6 @@ @source:yamaha/ymvl1.cpp vl1 + +@source:ddr/sprachmg.cpp +sprachmg // 1985 Institut für Kosmosforschung diff -Nru mame-0.250+dfsg.1/src/mame/mess.flt mame-0.251+dfsg.1/src/mame/mess.flt --- mame-0.250+dfsg.1/src/mame/mess.flt 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/mess.flt 2022-12-29 14:20:09.000000000 +0000 @@ -195,6 +195,7 @@ ddr/poly880.cpp ddr/sc2.cpp ddr/slc1.cpp +ddr/sprachmg.cpp ddr/vcs80.cpp dec/dct11em.cpp dec/decmate2.cpp @@ -288,7 +289,6 @@ gamepark/gp32.cpp gridcomp/gridcomp.cpp grundy/newbrain.cpp -h01x/h01x.cpp handheld/gameking.cpp handheld/gmaster.cpp handheld/hh_cop400.cpp @@ -354,6 +354,7 @@ homebrew/lft_chiptune.cpp homebrew/lft_craft.cpp homebrew/lft_phasor.cpp +homebrew/minib.cpp homebrew/mk1forth.cpp homebrew/p112.cpp homebrew/phunsy.cpp @@ -484,8 +485,10 @@ mips/mips.cpp misc/3do.cpp misc/eva.cpp +misc/h01x.cpp misc/monon_color.cpp misc/mtu130.cpp +misc/triton.cpp misc/z80ne.cpp mit/tx0.cpp mits/altair.cpp @@ -518,6 +521,7 @@ msx/msx2.cpp multitech/mkit09.cpp multitech/mpf1.cpp +multitech/mpf1_88.cpp mupid/mdisk.cpp mupid/mupid2.cpp nakajima/nakajies.cpp @@ -977,7 +981,7 @@ skeleton/v6809.cpp skeleton/vanguardmk1.cpp skeleton/vd56sp.cpp -skeleton/vector4.cpp +skeleton/vector3.cpp skeleton/vectrix.cpp skeleton/vp415.cpp skeleton/vp60.cpp @@ -1100,6 +1104,7 @@ trs/coco12.cpp trs/coco3.cpp trs/dgn_beta.cpp +trs/dgnalpha.cpp trs/dragon.cpp trs/lnw80.cpp trs/max80.cpp diff -Nru mame-0.250+dfsg.1/src/mame/midw8080/nl_280zzzap.cpp mame-0.251+dfsg.1/src/mame/midw8080/nl_280zzzap.cpp --- mame-0.250+dfsg.1/src/mame/midw8080/nl_280zzzap.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/midw8080/nl_280zzzap.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Colin Douglas Howell #include "netlist/devices/net_lib.h" diff -Nru mame-0.250+dfsg.1/src/mame/midw8080/nl_280zzzap.h mame-0.251+dfsg.1/src/mame/midw8080/nl_280zzzap.h --- mame-0.250+dfsg.1/src/mame/midw8080/nl_280zzzap.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/midw8080/nl_280zzzap.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Colin Douglas Howell #ifndef MAME_AUDIO_NL_280ZZZAP_H #define MAME_AUDIO_NL_280ZZZAP_H diff -Nru mame-0.250+dfsg.1/src/mame/midw8080/nl_gunfight.cpp mame-0.251+dfsg.1/src/mame/midw8080/nl_gunfight.cpp --- mame-0.250+dfsg.1/src/mame/midw8080/nl_gunfight.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/midw8080/nl_gunfight.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Colin Douglas Howell #include "netlist/devices/net_lib.h" diff -Nru mame-0.250+dfsg.1/src/mame/midw8080/nl_gunfight.h mame-0.251+dfsg.1/src/mame/midw8080/nl_gunfight.h --- mame-0.250+dfsg.1/src/mame/midw8080/nl_gunfight.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/midw8080/nl_gunfight.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Colin Douglas Howell #ifndef MAME_AUDIO_NL_GUNFIGHT_H #define MAME_AUDIO_NL_GUNFIGHT_H diff -Nru mame-0.250+dfsg.1/src/mame/midway/nl_sspeedr.cpp mame-0.251+dfsg.1/src/mame/midway/nl_sspeedr.cpp --- mame-0.250+dfsg.1/src/mame/midway/nl_sspeedr.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/midway/nl_sspeedr.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Colin Douglas Howell #include "netlist/devices/net_lib.h" diff -Nru mame-0.250+dfsg.1/src/mame/midway/nl_sspeedr.h mame-0.251+dfsg.1/src/mame/midway/nl_sspeedr.h --- mame-0.250+dfsg.1/src/mame/midway/nl_sspeedr.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/midway/nl_sspeedr.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Colin Douglas Howell #ifndef MAME_AUDIO_NL_SSPEEDR_H #define MAME_AUDIO_NL_SSPEEDR_H diff -Nru mame-0.250+dfsg.1/src/mame/midway/omegrace.cpp mame-0.251+dfsg.1/src/mame/midway/omegrace.cpp --- mame-0.250+dfsg.1/src/mame/midway/omegrace.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/midway/omegrace.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -109,8 +109,7 @@ 15 I encoder 1 (d7-d2) - The encoder is a 64 position Grey Code encoder, or a - pot and A to D converter. + The encoder is a 64 position Gray code encoder. Unlike the quadrature inputs on Atari and Sega games, Omega Race's controller is an absolute angle. @@ -126,8 +125,7 @@ 16 I encoder 2 (d5-d0) - The inputs aren't scrambled as they are on the 1 player - encoder + The encoder is a 64 position Gray code encoder. 17 I DIP SW C6 (coin/cocktail settings) @@ -269,6 +267,7 @@ TIMER_CALLBACK_MEMBER(periodic_int); uint8_t vg_go_r(); + static constexpr uint8_t encode_spinner(uint8_t data); uint8_t spinner1_r(); uint8_t spinner2_r(); void outputs_w(uint8_t data); @@ -327,38 +326,20 @@ * *************************************/ -/* - * Encoder bit mappings - * The encoder is a 64 way switch, with the inputs scrambled - * on the input port (and shifted 2 bits to the left for the - * 1 player encoder) - * - * 3 6 5 4 7 2 for encoder 1 (shifted two bits left..) - * - * 1 4 3 2 5 0 for encoder 2 (not shifted..) - */ - -static const uint8_t spinnerTable[64] = +constexpr uint8_t omegrace_state::encode_spinner(uint8_t data) { - 0x00, 0x01, 0x05, 0x04, 0x06, 0x07, 0x17, 0x16, - 0x14, 0x15, 0x11, 0x10, 0x12, 0x13, 0x1b, 0x1a, - 0x18, 0x19, 0x1d, 0x1c, 0x1e, 0x1f, 0x3f, 0x3e, - 0x3c, 0x3d, 0x39, 0x38, 0x3a, 0x3b, 0x33, 0x32, - 0x30, 0x31, 0x35, 0x34, 0x36, 0x37, 0x27, 0x26, - 0x24, 0x25, 0x21, 0x20, 0x22, 0x23, 0x2b, 0x2a, - 0x28, 0x29, 0x2d, 0x2c, 0x2e, 0x2f, 0x0f, 0x0e, - 0x0c, 0x0d, 0x09, 0x08, 0x0a, 0x0b, 0x03, 0x02 -}; - + data &= 0x3f; + return data ^ (data >> 1) ^ 0x3f; // Inverted 6-bit Gray code +} uint8_t omegrace_state::spinner1_r() { - return spinnerTable[m_spinner[0]->read() & 0x3f] << 2; + return encode_spinner(m_spinner[0]->read()) << 2; } uint8_t omegrace_state::spinner2_r() { - return spinnerTable[m_spinner[1]->read() & 0x3f]; + return encode_spinner(m_spinner[1]->read()); } diff -Nru mame-0.250+dfsg.1/src/mame/misc/bgt.cpp mame-0.251+dfsg.1/src/mame/misc/bgt.cpp --- mame-0.250+dfsg.1/src/mame/misc/bgt.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/misc/bgt.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:David Haywood -/* BGT Fruit Machines - BGT (British Gaming Technology) were a small Spanish company - - x86 based (186/188 or equivalent) - -*/ - - -#include "emu.h" -#include "cpu/i86/i186.h" - - -class bgt_state : public driver_device -{ -public: - bgt_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu") - { } - - void bgt(machine_config &config); - void bgt_io(address_map &map); - void bgt_map(address_map &map); -protected: - - // devices - required_device m_maincpu; -}; - - -void bgt_state::bgt_map(address_map &map) -{ - map(0x00000, 0x7ffff).rom(); - map(0xf8000, 0xfffff).rom(); -} - - - -void bgt_state::bgt_io(address_map &map) -{ -} - - - -static INPUT_PORTS_START( bgt ) -INPUT_PORTS_END - - -void bgt_state::bgt(machine_config &config) -{ - I80186(config, m_maincpu, 12000000); // ? - m_maincpu->set_addrmap(AS_PROGRAM, &bgt_state::bgt_map); - m_maincpu->set_addrmap(AS_IO, &bgt_state::bgt_io); -} - -ROM_START( bg_ddb ) - ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD( "nkyky_0-15_5", 0x0000, 0x080000, CRC(ac4a5094) SHA1(db4eab0be63e5daddca603af290debd8e929757e) ) - ROM_RELOAD(0x80000,0x80000) - - ROM_REGION( 0x100000, "oki", ROMREGION_ERASE00 ) - /* there were sound roms in the 'CoinWorld Ding Dong Bells' set which might belong here, otherwise - roms are probably missing */ -ROM_END - -ROM_START( bg_barmy ) - ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD( "barmyarmy_ndp16", 0x0000, 0x080000, CRC(ae488f48) SHA1(c417a3d1a79a0ca54ade2d9a4f6d70467e6c5cb4) ) - ROM_RELOAD(0x80000,0x80000) - - ROM_REGION( 0x100000, "oki", 0 ) - ROM_LOAD( "barmyarmy_sound1", 0x000000, 0x080000, CRC(3530d77c) SHA1(c7a42f698090fcd9644f9929b92935cf85183d23) ) - ROM_LOAD( "barmyarmy_sound2", 0x080000, 0x080000, CRC(48d4c2f3) SHA1(71e64e3e76a55275484a7c72ce2a17232b27a4eb) ) -ROM_END - - -ROM_START( bg_max ) - ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD( "max_a_million_v014", 0x0000, 0x080000, CRC(32fe9c3b) SHA1(77519657e6e478b3cd1bf2ad2aecc6e191abe554) ) - ROM_RELOAD(0x80000,0x80000) - - ROM_REGION( 0x100000, "oki", ROMREGION_ERASE00 ) - /* probably missing */ -ROM_END - -ROM_START( bg_maxa ) - ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD( "max_a_million_v114", 0x0000, 0x080000, CRC(a66851e9) SHA1(733ec52fa01615e740ebd40fba4a88efe9d9f24f) ) - ROM_RELOAD(0x80000,0x80000) - - ROM_REGION( 0x100000, "oki", ROMREGION_ERASE00 ) - /* probably missing */ -ROM_END - - -GAME( 199?, bg_ddb, 0, bgt, bgt, bgt_state, empty_init, ROT0, "BGT", "Ding Dong Bells (BGT)", MACHINE_IS_SKELETON_MECHANICAL ) -GAME( 199?, bg_barmy, 0, bgt, bgt, bgt_state, empty_init, ROT0, "BGT", "Barmy Army (BGT)", MACHINE_IS_SKELETON_MECHANICAL ) -GAME( 199?, bg_max, 0, bgt, bgt, bgt_state, empty_init, ROT0, "BGT", "Max A Million (BGT) (set 1)", MACHINE_IS_SKELETON_MECHANICAL ) -GAME( 199?, bg_maxa, bg_max, bgt, bgt, bgt_state, empty_init, ROT0, "BGT", "Max A Million (BGT) (set 2)", MACHINE_IS_SKELETON_MECHANICAL ) diff -Nru mame-0.250+dfsg.1/src/mame/misc/cave.cpp mame-0.251+dfsg.1/src/mame/misc/cave.cpp --- mame-0.250+dfsg.1/src/mame/misc/cave.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/misc/cave.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -21,7 +21,7 @@ Year + Game License PCB Tilemaps Sprites Other ----------------------------------------------------------------------------------------- 94 Mazinger Z Banpresto BP943A 038 9335EX706 013 9341E7009 Z80 -94 Power Instinct 2 Atlus ATG02? 038 9429WX709 013 9341E7009 Z80 NMK 112 +94 Power Instinct 2 Atlus AT047G2-B 038 9429WX709 013 9341E7009 Z80 NMK 112 95 Gogetsuji Legends Atlus AT047G2-B 038 9429WX709 013 9341E7009 Z80 NMK 112 95 Metamoqester Banpresto BP947A 038 9437WX711 013 9346E7002 Z80 95 Sailor Moon Banpresto BP945A 038 9437WX711 013 9346E7002 Z80 @@ -4272,21 +4272,109 @@ ROM_END -/*************************************************************************** +/* - Power Instinct 2 (USA) / Gouketsuji Ichizoku 2 (Japan) +Power Instinct 2 (US) / Gouketsuji Ichizoku 2 (Japan) +Atlus, 1994 -(c)1994 Atlus -CPU: 68000, Z80 -Sound: YM2203, AR17961 (x2) -Custom: NMK 112 (M6295 sample ROM banking), Atlus 8647-01 013, 038 (x4) -X1 = 12 MHz -X2 = 28 MHz -X3 = 16 MHz +PCB Layout +---------- -***************************************************************************/ +AT047G2-B ATLUS +|---------------------------------------------------------------| +|LM324 M6295 G02_U53 Z80 16MHz 28MHz 12MHz TA8030S | +|VOL G02_U54 |------| G02_U3A G02_U82A | +| M6295 G02_U55 |NMK112| 6264 6264 | +|uPC2505 G02_U56 | | |------| | +| 4558 |------| 6264 |038 | | +| Y3014 YM2203 PAL |9429WX| | +| G02_U89 |------| | +|J TEST_SW 62256 | +|A 93C46 62256 6264 |------| | +|M |038 | | +|M |---| G G G G PAL 6264 |9429WX| | +|A | | 0 0 0 0 |------| | +| | 6 | 2 2 2 2 G02_U81 | +| | 8 | - - - - |------| | +| | 0 | U U U U 6264 |038 | | +| | 0 | 4 4 4 4 |9429WX| | +| | 0 | 5 3 4 2 62256 6264 |------| | +| | | A A A A 62256 | +| |---| PAL |-------| G02_U78 |------| | +| |8647-01| |038 | | +| |013 | KM416C256 |9429WX| | +| |9341E70| |------| | +| G02_U66 G02_U63 |-------| 6264 | +| G02_U65 G02_U62 62256 KM416C256 | +| G02_U67 G02_U64 G02_U61 62256 6264 | +|---------------------------------------------------------------| +Notes: + 68000 clock - 16.000MHz + Z80 clock - 8.000MHz [16/2] + 6295 clocks - 3.000MHz [12/4], sample rate = 3000000 / 165 + YM2203 clock- 4.000MHz [16/4] + VSync - 57.5Hz + HSync - 15.23kHz + + ROMs - + U3 : 27C1001 EPROM + U82 : 27C040 EPROM + U42-45 : 27C040 EPROMs + U81, U89 : 8M 42 pin mask ROM (read as 27C800) + ALL other ROMs are soldered-in 16M 42 pin mask ROM (read as 27C160) +*/ + +ROM_START( pwrinst2 ) /* 94.04.08 */ + ROM_REGION( 0x200000, "maincpu", 0 ) /* 68000 code */ + ROM_LOAD16_BYTE( "g02.u45a", 0x000000, 0x80000, CRC(ddfff811) SHA1(720f577dc77fc12aeb67511251e995169df754b6) ) + ROM_LOAD16_BYTE( "g02.u44a", 0x000001, 0x80000, CRC(5561f620) SHA1(3241ccc47e909930d79ad0a1a1b11a11879b17be) ) + ROM_LOAD16_BYTE( "g02.u43a", 0x100000, 0x80000, CRC(c4fd5d62) SHA1(8d00adfe5da9b0d0134fc9921c12f20b80954c3b) ) + ROM_LOAD16_BYTE( "g02.u42a", 0x100001, 0x80000, CRC(56279c1c) SHA1(f86edc2264758f9dc920a162d2dc71cc1f63d22e) ) + + ROM_REGION16_BE( 0x100000, "user1", ROMREGION_ERASE00 ) /* 68000 extra data roms */ + /* not used */ + + ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */ + ROM_LOAD( "g02.u3a", 0x00000, 0x20000, CRC(ebea5e1e) SHA1(4d3af9e5f29d0c1b26563f51250039c9e8bd3735) ) + + ROM_REGION( 0xe00000, "sprites0", 0 ) /* Sprites: * 2 */ + ROM_LOAD( "g02.u61", 0x000000, 0x200000, CRC(91e30398) SHA1(2b59a5e40bed2a988382054fe30d92808dad3348) ) + ROM_LOAD( "g02.u62", 0x200000, 0x200000, CRC(d9455dd7) SHA1(afa69fe9a540cd78b8cfecf09cffa1401c01141a) ) + ROM_LOAD( "g02.u63", 0x400000, 0x200000, CRC(4d20560b) SHA1(ceaee8cf0b69cc366b95ddcb689a5594d79e5114) ) + ROM_LOAD( "g02.u64", 0x600000, 0x200000, CRC(b17b9b6e) SHA1(fc6213d8322cda4c7f653e2d7d6d314ce84c97b7) ) + ROM_LOAD( "g02.u65", 0x800000, 0x200000, CRC(08541878) SHA1(138cf077a49a26440a3da1bdc2c399a208359e57) ) + ROM_LOAD( "g02.u66", 0xa00000, 0x200000, CRC(becf2a36) SHA1(f8b386d0292b1dc745b7253a3df51d1aa8d5e9db) ) + ROM_LOAD( "g02.u67", 0xc00000, 0x200000, CRC(52fe2b8b) SHA1(dd50aa62f7db995e28f47de9b3fb749aeeaaa5b0) ) + + ROM_REGION( 0x200000, "layer0", 0 ) /* Layer 0 */ + ROM_LOAD( "g02.u78", 0x000000, 0x200000, CRC(1eca63d2) SHA1(538942b43301f950e3d5139461331c54dc90129d) ) + + ROM_REGION( 0x100000, "layer1", 0 ) /* Layer 1 */ + ROM_LOAD( "g02.u81", 0x000000, 0x100000, CRC(8a3ff685) SHA1(4a59ec50ec4470453374fe10f76d3e894494b49f) ) + + ROM_REGION( 0x100000, "layer2", 0 ) /* Layer 2 */ + ROM_LOAD( "g02.u89", 0x000000, 0x100000, CRC(373e1f73) SHA1(ec1ae9fab37eee41be8e1bc6dad03809b62fdbce) ) + + ROM_REGION( 0x080000, "layer3", 0 ) /* Layer 3 */ + ROM_LOAD( "g02.82a", 0x000000, 0x080000, CRC(4b3567d6) SHA1(d3e14783b312d2bea9722a8e3c22bcec81e26166) ) -ROM_START( pwrinst2 ) + ROM_REGION( 0x440000, "oki1", 0 ) /* OKIM6295 #1 Samples */ + /* Leave the 0x40000 bytes addressable by the chip empty */ + ROM_LOAD( "g02.u53", 0x040000, 0x200000, CRC(c4bdd9e0) SHA1(a938a831e789ddf6f3cc5f3e5f3877ec7bd62d4e) ) + ROM_LOAD( "g02.u54", 0x240000, 0x200000, CRC(1357d50e) SHA1(433766177ce9d6933f90de85ba91bfc6d8d5d664) ) + + ROM_REGION( 0x440000, "oki2", 0 ) /* OKIM6295 #2 Samples */ + /* Leave the 0x40000 bytes addressable by the chip empty */ + ROM_LOAD( "g02.u55", 0x040000, 0x200000, CRC(2d102898) SHA1(bd81f4cd2ba100707db0c5bb1419f0b23c998574) ) + ROM_LOAD( "g02.u56", 0x240000, 0x200000, CRC(9ff50dda) SHA1(1121685e387c20e228032f2b0f5cbb606376fc15) ) + + ROM_REGION( 0x03ff, "pal", 0 ) + ROM_LOAD( "peel18cv8p-15.u7", 0x0000, 0x0155, CRC(e02b2d2b) SHA1(26293538ca17674e1b249ed82a6df2570c6e5155) ) /* PEEL18CV8P-15 */ + ROM_LOAD( "peel18cv8p-15.u21", 0x0155, 0x0155, CRC(7ca78400) SHA1(1cebdd64e08bbc535f23592daf9380696bd2c281) ) /* PEEL18CV8P-15 */ + ROM_LOAD( "peel18cv8p-15.u25", 0x02aa, 0x0155, CRC(61b414df) SHA1(f12c5e62f83114f83108895ee58ceea31cdcb9fd) ) /* PEEL18CV8P-15 */ +ROM_END + +ROM_START( pwrinst2a ) /* also 94.04.08 like pwrinst2, but different program roms */ ROM_REGION( 0x200000, "maincpu", 0 ) /* 68000 code */ ROM_LOAD16_BYTE( "g02.u45", 0x000000, 0x80000, CRC(7b33bc43) SHA1(a68eb94e679f03c354932b8c5cd1bb2922fec0aa) ) ROM_LOAD16_BYTE( "g02.u44", 0x000001, 0x80000, CRC(8f6f6637) SHA1(024b12c0fe40e27c79e38bd7601a9183a62d75fd) ) @@ -4329,6 +4417,11 @@ /* Leave the 0x40000 bytes addressable by the chip empty */ ROM_LOAD( "g02.u55", 0x040000, 0x200000, CRC(2d102898) SHA1(bd81f4cd2ba100707db0c5bb1419f0b23c998574) ) ROM_LOAD( "g02.u56", 0x240000, 0x200000, CRC(9ff50dda) SHA1(1121685e387c20e228032f2b0f5cbb606376fc15) ) + + ROM_REGION( 0x03ff, "pal", 0 ) + ROM_LOAD( "peel18cv8p-15.u7", 0x0000, 0x0155, CRC(e02b2d2b) SHA1(26293538ca17674e1b249ed82a6df2570c6e5155) ) /* PEEL18CV8P-15 */ + ROM_LOAD( "peel18cv8p-15.u21", 0x0155, 0x0155, CRC(7ca78400) SHA1(1cebdd64e08bbc535f23592daf9380696bd2c281) ) /* PEEL18CV8P-15 */ + ROM_LOAD( "peel18cv8p-15.u25", 0x02aa, 0x0155, CRC(61b414df) SHA1(f12c5e62f83114f83108895ee58ceea31cdcb9fd) ) /* PEEL18CV8P-15 */ ROM_END ROM_START( pwrinst2j ) @@ -4374,6 +4467,11 @@ /* Leave the 0x40000 bytes addressable by the chip empty */ ROM_LOAD( "g02.u55", 0x040000, 0x200000, CRC(2d102898) SHA1(bd81f4cd2ba100707db0c5bb1419f0b23c998574) ) ROM_LOAD( "g02.u56", 0x240000, 0x200000, CRC(9ff50dda) SHA1(1121685e387c20e228032f2b0f5cbb606376fc15) ) + + ROM_REGION( 0x03ff, "pal", 0 ) + ROM_LOAD( "peel18cv8p-15.u7", 0x0000, 0x0155, CRC(e02b2d2b) SHA1(26293538ca17674e1b249ed82a6df2570c6e5155) ) /* PEEL18CV8P-15 */ + ROM_LOAD( "peel18cv8p-15.u21", 0x0155, 0x0155, CRC(7ca78400) SHA1(1cebdd64e08bbc535f23592daf9380696bd2c281) ) /* PEEL18CV8P-15 */ + ROM_LOAD( "peel18cv8p-15.u25", 0x02aa, 0x0155, CRC(61b414df) SHA1(f12c5e62f83114f83108895ee58ceea31cdcb9fd) ) /* PEEL18CV8P-15 */ ROM_END /* @@ -4474,6 +4572,11 @@ /* Leave the 0x40000 bytes addressable by the chip empty */ ROM_LOAD( "g02.u55", 0x040000, 0x200000, CRC(2d102898) SHA1(bd81f4cd2ba100707db0c5bb1419f0b23c998574) ) ROM_LOAD( "g02.u56", 0x240000, 0x200000, CRC(9ff50dda) SHA1(1121685e387c20e228032f2b0f5cbb606376fc15) ) + + ROM_REGION( 0x03ff, "pal", 0 ) + ROM_LOAD( "peel18cv8p-15.u7", 0x0000, 0x0155, CRC(e02b2d2b) SHA1(26293538ca17674e1b249ed82a6df2570c6e5155) ) /* PEEL18CV8P-15 */ + ROM_LOAD( "peel18cv8p-15.u21", 0x0155, 0x0155, CRC(7ca78400) SHA1(1cebdd64e08bbc535f23592daf9380696bd2c281) ) /* PEEL18CV8P-15 */ + ROM_LOAD( "peel18cv8p-15.u25", 0x02aa, 0x0155, CRC(61b414df) SHA1(f12c5e62f83114f83108895ee58ceea31cdcb9fd) ) /* PEEL18CV8P-15 */ ROM_END ROM_START( plegendsj ) @@ -4521,6 +4624,11 @@ /* Leave the 0x40000 bytes addressable by the chip empty */ ROM_LOAD( "g02.u55", 0x040000, 0x200000, CRC(2d102898) SHA1(bd81f4cd2ba100707db0c5bb1419f0b23c998574) ) ROM_LOAD( "g02.u56", 0x240000, 0x200000, CRC(9ff50dda) SHA1(1121685e387c20e228032f2b0f5cbb606376fc15) ) + + ROM_REGION( 0x03ff, "pal", 0 ) + ROM_LOAD( "peel18cv8p-15.u7", 0x0000, 0x0155, CRC(e02b2d2b) SHA1(26293538ca17674e1b249ed82a6df2570c6e5155) ) /* PEEL18CV8P-15 */ + ROM_LOAD( "peel18cv8p-15.u21", 0x0155, 0x0155, CRC(7ca78400) SHA1(1cebdd64e08bbc535f23592daf9380696bd2c281) ) /* PEEL18CV8P-15 */ + ROM_LOAD( "peel18cv8p-15.u25", 0x02aa, 0x0155, CRC(61b414df) SHA1(f12c5e62f83114f83108895ee58ceea31cdcb9fd) ) /* PEEL18CV8P-15 */ ROM_END @@ -5195,7 +5303,7 @@ save_item(NAME(m_ppsatan_io_mux)); } -void cave_state::init_pwrinst2j() +void cave_state::init_pwrinst2() { u8 *src = m_spriteregion[0]->base(); const u32 len = m_spriteregion[0]->bytes(); @@ -5223,11 +5331,11 @@ m_time_vblank_irq = 2000; /**/ } -void cave_state::init_pwrinst2() +void cave_state::init_pwrinst2a() { /* this patch fixes on of the moves, why is it needed? is the rom bad or is there another problem? does the Japan set need it or not? */ - init_pwrinst2j(); + init_pwrinst2(); #if 1 //ROM PATCH { @@ -5311,9 +5419,10 @@ ***************************************************************************/ - -GAME( 1994, pwrinst2, 0, pwrinst2, metmqstr, cave_state, init_pwrinst2, ROT0, "Atlus", "Power Instinct 2 (US, Ver. 94.04.08)", MACHINE_SUPPORTS_SAVE ) -GAME( 1994, pwrinst2j, pwrinst2, pwrinst2, metmqstr, cave_state, init_pwrinst2j, ROT0, "Atlus", "Gouketsuji Ichizoku 2 (Japan, Ver. 94.04.08)", MACHINE_SUPPORTS_SAVE ) +// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS +GAME( 1994, pwrinst2, 0, pwrinst2, metmqstr, cave_state, init_pwrinst2, ROT0, "Atlus", "Power Instinct 2 (US, Ver. 94.04.08, set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1994, pwrinst2a, pwrinst2, pwrinst2, metmqstr, cave_state, init_pwrinst2a, ROT0, "Atlus", "Power Instinct 2 (US, Ver. 94.04.08, set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1994, pwrinst2j, pwrinst2, pwrinst2, metmqstr, cave_state, init_pwrinst2, ROT0, "Atlus", "Gouketsuji Ichizoku 2 (Japan, Ver. 94.04.08)", MACHINE_SUPPORTS_SAVE ) // Version/Date string is stored at 68000 ROM 0x1200-0x121f // The EEPROM determines the region, program roms are the same between sets @@ -5330,8 +5439,8 @@ GAME( 1995, metmqstr, 0, metmqstr, metmqstr, cave_state, init_metmqstr, ROT0, "Banpresto / Pandorabox", "Metamoqester (World)", MACHINE_SUPPORTS_SAVE ) GAME( 1995, nmaster, metmqstr, metmqstr, metmqstr, cave_state, init_metmqstr, ROT0, "Banpresto / Pandorabox", "Oni - The Ninja Master (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1995, plegends, 0, pwrinst2, metmqstr, cave_state, init_pwrinst2j, ROT0, "Atlus", "Gogetsuji Legends (US, Ver. 95.06.20)", MACHINE_SUPPORTS_SAVE ) -GAME( 1995, plegendsj, plegends, pwrinst2, metmqstr, cave_state, init_pwrinst2j, ROT0, "Atlus", "Gouketsuji Gaiden - Saikyou Densetsu (Japan, Ver. 95.06.20)", MACHINE_SUPPORTS_SAVE ) +GAME( 1995, plegends, 0, pwrinst2, metmqstr, cave_state, init_pwrinst2, ROT0, "Atlus", "Gogetsuji Legends (US, Ver. 95.06.20)", MACHINE_SUPPORTS_SAVE ) +GAME( 1995, plegendsj, plegends, pwrinst2, metmqstr, cave_state, init_pwrinst2, ROT0, "Atlus", "Gouketsuji Gaiden - Saikyou Densetsu (Japan, Ver. 95.06.20)", MACHINE_SUPPORTS_SAVE ) // The EEPROM determines the region, program roms are the same between sets GAME( 1995, sailormn, 0, sailormn, cave, cave_state, init_sailormn, ROT0, "Gazelle (Banpresto license)", "Pretty Soldier Sailor Moon (Version 95/03/22B, Europe)", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/misc/cave.h mame-0.251+dfsg.1/src/mame/misc/cave.h --- mame-0.250+dfsg.1/src/mame/misc/cave.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/misc/cave.h 2022-12-29 14:20:09.000000000 +0000 @@ -65,13 +65,13 @@ void init_mazinger(); void init_gaia(); void init_pwrinst2(); + void init_pwrinst2a(); void init_ddonpach(); void init_agallet(); void init_hotdogst(); void init_tjumpman(); void init_korokoro(); void init_esprade(); - void init_pwrinst2j(); void init_guwange(); void init_feversos(); void init_sailormn(); diff -Nru mame-0.250+dfsg.1/src/mame/misc/epos.cpp mame-0.251+dfsg.1/src/mame/misc/epos.cpp --- mame-0.250+dfsg.1/src/mame/misc/epos.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/misc/epos.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -25,13 +25,12 @@ - I think theglob2 is earlier than theglob. They only differ in one routine, but it appears to be a bug fix. Also, theglob3 appears to be even older. - To Do: + TODO: - Super Glob uses a busy loop during the color test to split the screen between the two palettes. This effect is not emulated, but since both halves of the palette are identical, this is not an issue. See $039c. The other games have a different color test, not using the busy loop. - - dealer/beastf/revngr84: "PSG registers not OK" in service mode thru sound menu, internal ay8910 not right? @@ -110,7 +109,7 @@ required_device m_palette; // video-related - uint8_t m_palette_bank = 0U; + uint8_t m_palette_bank = 0; uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); }; @@ -125,14 +124,19 @@ void tristar8000(machine_config &config); + DECLARE_CUSTOM_INPUT_MEMBER(coin_r) { return m_coin_latch; } + DECLARE_INPUT_CHANGED_MEMBER(coin_switch) { if (newval) m_coin_latch |= param; } + protected: - virtual void machine_start() override { m_leds.resolve(); } + virtual void machine_start() override; private: // I/O output_finder<2> m_leds; + uint8_t m_coin_latch = 0; - void port_1_w(uint8_t data); + void output_w(uint8_t data); + void coin_reset_w(uint8_t data) { m_coin_latch = 0; } void palette(palette_device &palette) const; void io_map(address_map &map); @@ -147,7 +151,7 @@ m_mainbank(*this, "mainbank%u", 1U), m_inputs(*this, { "INPUTS", "INPUTS2" }), m_dsw(*this, "DSW") - { } + { } void tristar9000(machine_config &config); @@ -230,14 +234,14 @@ set_pal_color(*m_palette, offset, data); } -void tristar8000_state::port_1_w(uint8_t data) +void tristar8000_state::output_w(uint8_t data) { /* D0 - start light #1 D1 - start light #2 D2 - coin counter D3 - palette select D4-D7 - unused - */ + */ m_leds[0] = BIT(data, 0); m_leds[1] = BIT(data, 1); @@ -322,9 +326,9 @@ { map.global_mask(0xff); map(0x00, 0x00).portr("DSW").w("watchdog", FUNC(watchdog_timer_device::reset_w)); - map(0x01, 0x01).portr("SYSTEM").w(FUNC(tristar8000_state::port_1_w)); + map(0x01, 0x01).portr("SYSTEM").w(FUNC(tristar8000_state::output_w)); map(0x02, 0x02).portr("INPUTS").w("aysnd", FUNC(ay8910_device::data_w)); - map(0x03, 0x03).portr("UNK"); + map(0x03, 0x03).w(FUNC(tristar8000_state::coin_reset_w)); map(0x06, 0x06).w("aysnd", FUNC(ay8910_device::address_w)); } @@ -416,14 +420,13 @@ PORT_DIPSETTING( 0x80, "Contest" ) PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(tristar8000_state, coin_r) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) PORT_SERVICE_NO_TOGGLE(0x10, IP_ACTIVE_LOW) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) // this has to be HI - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) // this has to be HI + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) // this has to be HI + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) // this has to be HI PORT_START("INPUTS") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) @@ -432,15 +435,19 @@ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("UNK") - PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + // 2 inputs connected to 74ls74 CLK pins, only one is actually hooked up + PORT_START("COIN") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, tristar8000_state, coin_switch, 0x01) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_CHANGED_MEMBER(DEVICE_SELF, tristar8000_state, coin_switch, 0x02) INPUT_PORTS_END static INPUT_PORTS_START( suprglob ) + PORT_INCLUDE( megadon ) + // There are odd port mappings (old=new) // 02=10, 04=40, 08=20, 10=02, 20=04, 40=08 - PORT_START("DSW") + PORT_MODIFY("DSW") PORT_DIPNAME( 0x01, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1") PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) ) @@ -465,35 +472,24 @@ PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) - PORT_SERVICE_NO_TOGGLE(0x10, IP_ACTIVE_LOW) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) // this has to be LO - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) // this has to be HI + PORT_MODIFY("SYSTEM") + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) // this has to be LO + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) // this has to be HI - PORT_START("INPUTS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_MODIFY("INPUTS") PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("UNK") - PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) INPUT_PORTS_END static INPUT_PORTS_START( igmo ) + PORT_INCLUDE( suprglob ) + // There are odd port mappings (old=new) // 02=10, 04=40, 08=20, 10=02, 20=04, 40=08 - PORT_START("DSW") + PORT_MODIFY("DSW") PORT_DIPNAME( 0x01, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1") PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) ) @@ -517,32 +513,14 @@ PORT_DIPSETTING( 0x88, "7" ) PORT_DIPSETTING( 0x8c, "8" ) - PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) - PORT_SERVICE_NO_TOGGLE(0x10, IP_ACTIVE_LOW) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) // this has to be HI - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) // this has to be HI - - PORT_START("INPUTS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("UNK") - PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_MODIFY("SYSTEM") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) // this has to be HI + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) // this has to be HI INPUT_PORTS_END static INPUT_PORTS_START( catapult ) - PORT_INCLUDE( igmo ) + PORT_INCLUDE( suprglob ) // There are odd port mappings (old=new) // 02=08, 04=20, 08=40, 10=02, 20=10, 40=04 @@ -568,13 +546,19 @@ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_MODIFY("SYSTEM") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) // this has to be HI + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) // this has to be HI INPUT_PORTS_END static INPUT_PORTS_START( eeekk ) + PORT_INCLUDE( suprglob ) + // There are odd port mappings (old=new) // 02=10, 04=40, 08=02, 10=20, 20=04, 40=08 - PORT_START("DSW") + PORT_MODIFY("DSW") PORT_DIPNAME( 0x01, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1") PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) ) @@ -599,28 +583,9 @@ PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) - PORT_SERVICE_NO_TOGGLE(0x10, IP_ACTIVE_LOW) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) // this has to be LO - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) // this has to be LO - - PORT_START("INPUTS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("UNK") - PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_MODIFY("SYSTEM") + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) // this has to be LO + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) // this has to be LO INPUT_PORTS_END @@ -708,6 +673,12 @@ save_item(NAME(m_palette_bank)); } +void tristar8000_state::machine_start() +{ + m_leds.resolve(); + save_item(NAME(m_coin_latch)); +} + void tristar9000_state::machine_start() { uint8_t *rom = memregion("maincpu")->base(); @@ -737,7 +708,7 @@ void tristar8000_state::tristar8000(machine_config &config) // EPOS TRISTAR 8000 PCB { // basic machine hardware - Z80(config, m_maincpu, XTAL(11'000'000) / 4); // 2.75 MHz schematics confirm 11MHz XTAL (see notes) + Z80(config, m_maincpu, XTAL(11'000'000) / 4); // 2.75 MHz schematics confirm 11MHz XTAL (see notes) m_maincpu->set_addrmap(AS_PROGRAM, &tristar8000_state::prg_map); m_maincpu->set_addrmap(AS_IO, &tristar8000_state::io_map); m_maincpu->set_vblank_int("screen", FUNC(tristar8000_state::irq0_line_hold)); @@ -756,14 +727,14 @@ // sound hardware SPEAKER(config, "mono").front_center(); - AY8912(config, "aysnd", XTAL(11'000'000) / 16).add_route(ALL_OUTPUTS, "mono", 1.0); // 0.6875 MHz, confirmed from schematics + AY8912(config, "aysnd", XTAL(11'000'000) / 16).add_route(ALL_OUTPUTS, "mono", 1.0); // 0.6875 MHz, confirmed from schematics } void tristar9000_state::tristar9000(machine_config &config) // EPOS TRISTAR 9000 PCB { // basic machine hardware - Z80(config, m_maincpu, XTAL(22'118'400) / 8); // 2.7648 MHz (measured) + Z80(config, m_maincpu, XTAL(22'118'400) / 8); // 2.7648 MHz (measured) m_maincpu->set_addrmap(AS_PROGRAM, &tristar9000_state::prg_map); m_maincpu->set_addrmap(AS_IO, &tristar9000_state::io_map); m_maincpu->set_vblank_int("screen", FUNC(tristar9000_state::irq0_line_hold)); @@ -1074,14 +1045,14 @@ *************************************/ // EPOS TRISTAR 8000 PCB based -GAME( 1982, megadon, 0, tristar8000, megadon, tristar8000_state, empty_init, ROT270, "Epos Corporation (Photar Industries license)", "Megadon", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, catapult, 0, tristar8000, catapult, tristar8000_state, empty_init, ROT270, "Epos Corporation", "Catapult", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // bad ROM, hold f2 for test mode -GAME( 1983, suprglob, 0, tristar8000, suprglob, tristar8000_state, empty_init, ROT270, "Epos Corporation", "Super Glob", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, theglob, suprglob, tristar8000, suprglob, tristar8000_state, empty_init, ROT270, "Epos Corporation", "The Glob", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, theglob2, suprglob, tristar8000, suprglob, tristar8000_state, empty_init, ROT270, "Epos Corporation", "The Glob (earlier)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, theglob3, suprglob, tristar8000, suprglob, tristar8000_state, empty_init, ROT270, "Epos Corporation", "The Glob (set 3)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, igmo, 0, tristar8000, igmo, tristar8000_state, empty_init, ROT270, "Epos Corporation", "IGMO", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, eeekk, 0, tristar8000, eeekk, tristar8000_state, empty_init, ROT270, "Epos Corporation", "Eeekk!", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, megadon, 0, tristar8000, megadon, tristar8000_state, empty_init, ROT270, "Epos Corporation (Photar Industries license)", "Megadon", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, catapult, 0, tristar8000, catapult, tristar8000_state, empty_init, ROT270, "Epos Corporation", "Catapult", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // bad ROM, hold f2 for test mode +GAME( 1983, suprglob, 0, tristar8000, suprglob, tristar8000_state, empty_init, ROT270, "Epos Corporation", "Super Glob", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, theglob, suprglob, tristar8000, suprglob, tristar8000_state, empty_init, ROT270, "Epos Corporation", "The Glob", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, theglob2, suprglob, tristar8000, suprglob, tristar8000_state, empty_init, ROT270, "Epos Corporation", "The Glob (earlier)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, theglob3, suprglob, tristar8000, suprglob, tristar8000_state, empty_init, ROT270, "Epos Corporation", "The Glob (set 3)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, igmo, 0, tristar8000, igmo, tristar8000_state, empty_init, ROT270, "Epos Corporation", "IGMO", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, eeekk, 0, tristar8000, eeekk, tristar8000_state, empty_init, ROT270, "Epos Corporation", "Eeekk!", MACHINE_SUPPORTS_SAVE ) // EPOS TRISTAR 9000 PCB based GAME( 1984, dealer, 0, tristar9000, dealer, tristar9000_state, init_tristar9000, ROT270, "Epos Corporation", "The Dealer", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/misc/gamtor.cpp mame-0.251+dfsg.1/src/mame/misc/gamtor.cpp --- mame-0.250+dfsg.1/src/mame/misc/gamtor.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/misc/gamtor.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -68,11 +68,11 @@ /* standard VGA */ //map(0x40000000, 0x40000fff).ram(); // regs - map(0x400003b0, 0x400003bf).rw("vga", FUNC(vga_device::port_03b0_r), FUNC(vga_device::port_03b0_w)); - map(0x400003c0, 0x400003cf).rw("vga", FUNC(vga_device::port_03c0_r), FUNC(vga_device::port_03c0_w)); - map(0x400003d0, 0x400003df).rw("vga", FUNC(vga_device::port_03d0_r), FUNC(vga_device::port_03d0_w)); + map(0x400003b0, 0x400003bf).rw("vga", FUNC(gamtor_vga_device::port_03b0_r), FUNC(gamtor_vga_device::port_03b0_w)); + map(0x400003c0, 0x400003cf).rw("vga", FUNC(gamtor_vga_device::port_03c0_r), FUNC(gamtor_vga_device::port_03c0_w)); + map(0x400003d0, 0x400003df).rw("vga", FUNC(gamtor_vga_device::port_03d0_r), FUNC(gamtor_vga_device::port_03d0_w)); - map(0x44000000, 0x4401ffff).rw("vga", FUNC(vga_device::mem_r), FUNC(vga_device::mem_w)); // VRAM + map(0x44000000, 0x4401ffff).rw("vga", FUNC(gamtor_vga_device::mem_r), FUNC(gamtor_vga_device::mem_w)); // VRAM // map(0x44000000, 0x44007fff).ram().share("tmapram1"); // puts strings here, looks almost like a tilemap, but where are the tiles? // map(0x440a0000, 0x440a1fff).ram().share("tmapram2"); // beetlem (like above, mirror?) diff -Nru mame-0.250+dfsg.1/src/mame/misc/h01x.cpp mame-0.251+dfsg.1/src/mame/misc/h01x.cpp --- mame-0.250+dfsg.1/src/mame/misc/h01x.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/misc/h01x.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,633 @@ +// license:BSD-3-Clause +// copyright-holders:zzemu-cn, Robbbert +/*************************************************************************** +NF500A (TRS80 Level II Basic) + 09/01/2019 + +H-01B (TRS80 Level II Basic) + 10/05/2019 + +Despite the references to the TRS-80, the machines are entirely incompatible. + +TODO: +- Need schematics and technical info. +- Need confirmation of clock speeds for each machine. + (Cassettes made on machines of different clocks are not shareable) +- JCE's 16KB extended ROM functionality is not understood, functionality is + unemulated +- Need software. + +****************************************************************************/ + +#include "emu.h" +#include "screen.h" +#include "speaker.h" +#include "emupal.h" +#include "cpu/z80/z80.h" +#include "video/mc6845.h" +#include "machine/ram.h" +#include "sound/spkrdev.h" +#include "imagedev/cassette.h" + +class h01x_state : public driver_device +{ +public: + h01x_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_ram(*this, RAM_TAG) + , m_vram(*this, "vram") + , m_rom(*this, "maincpu") + , m_hzrom(*this, "hzrom") + , m_exrom(*this, "exrom") + , m_palette(*this, "palette") + , m_crtc(*this, "crtc") + , m_speaker(*this, "speaker") + , m_cassette(*this, "cassette") + , m_io_keyboard(*this, "LINE%u", 0U) + { } + + void h01x(machine_config &config); + void h01b(machine_config &config); + void nf500a(machine_config &config); + void h01jce(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + +private: + void h01x_mem_map(address_map &map); + void h01x_io_map(address_map &map); + + uint8_t mem_0000_r(offs_t offset); + void mem_0000_w(uint8_t data); + uint8_t mem_4000_r(offs_t offset); + void mem_4000_w(offs_t offset, uint8_t data); + uint8_t mem_8000_r(offs_t offset); + void mem_8000_w(offs_t offset, uint8_t data); + uint8_t mem_c000_r(offs_t offset); + void mem_c000_w(offs_t offset, uint8_t data); + + void port_70_w(uint8_t data); + uint8_t port_50_r(); + + required_device m_maincpu; + required_device m_ram; + required_device m_vram; + required_region_ptr m_rom; + required_region_ptr m_hzrom; + optional_region_ptr m_exrom; + required_device m_palette; + required_device m_crtc; + required_device m_speaker; + required_device m_cassette; + required_ioport_array<11> m_io_keyboard; + + uint8_t m_bank = 0U; + MC6845_UPDATE_ROW(crtc_update_row); + + uint8_t *m_ram_ptr = nullptr; + uint8_t *m_vram_ptr = nullptr; + + TIMER_CALLBACK_MEMBER(cassette_data_callback); + bool m_cassette_data = false; + emu_timer *m_cassette_data_timer = nullptr; +}; + + +void h01x_state::h01x(machine_config &config) +{ + // basic machine hardware + Z80(config, m_maincpu, 16_MHz_XTAL / 8); + m_maincpu->set_addrmap(AS_PROGRAM, &h01x_state::h01x_mem_map); + m_maincpu->set_addrmap(AS_IO, &h01x_state::h01x_io_map); + + // RAM + RAM(config, m_ram).set_default_size("32K").set_default_value(0x00); + // VRAM 16K 4bit + RAM(config, m_vram).set_default_size("16K").set_default_value(0xf0); + + // video hardware + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(10.6445_MHz_XTAL, 336, 0, 336, 192, 0, 192); + screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update)); + PALETTE(config, m_palette, palette_device::MONOCHROME); + + MC6845(config, m_crtc, 10.6445_MHz_XTAL / 8); // freq guess + m_crtc->set_screen("screen"); + m_crtc->set_show_border_area(false); + m_crtc->set_char_width(4); + m_crtc->set_update_row_callback(FUNC(h01x_state::crtc_update_row)); + + // sound hardware + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, m_speaker); + m_speaker->add_route(ALL_OUTPUTS, "mono", 0.50); + + /* devices */ + CASSETTE(config, m_cassette); + m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05); + m_cassette->set_default_state(CASSETTE_STOPPED); +} + +void h01x_state::h01b(machine_config &config) +{ + // H-01B CPU: 2MHz ROM: 16KB + 32KB + h01x(config); + m_maincpu->set_clock(16_MHz_XTAL/8); // to confirm +} + +void h01x_state::nf500a(machine_config &config) +{ + // NF-500A CPU: 4MHz ROM: 16KB + 32KB + h01x(config); + m_maincpu->set_clock(16_MHz_XTAL/4); // to confirm +} + +void h01x_state::h01jce(machine_config &config) +{ + // JCE CPU: 4MHz ROM: 16KB + 32KB + 16KB + h01x(config); + m_maincpu->set_clock(16_MHz_XTAL/4); // to confirm +} + +void h01x_state::h01x_mem_map(address_map &map) +{ + map(0x0000, 0x3fff).rw(FUNC(h01x_state::mem_0000_r), FUNC(h01x_state::mem_0000_w)); + map(0x4000, 0x7fff).rw(FUNC(h01x_state::mem_4000_r), FUNC(h01x_state::mem_4000_w)); + map(0x8000, 0xbfff).rw(FUNC(h01x_state::mem_8000_r), FUNC(h01x_state::mem_8000_w)); + map(0xc000, 0xffff).rw(FUNC(h01x_state::mem_c000_r), FUNC(h01x_state::mem_c000_w)); +} + +void h01x_state::h01x_io_map(address_map &map) +{ + map.global_mask(0xff); + map.unmap_value_high(); + + map(0x60, 0x60).rw(m_crtc, FUNC(mc6845_device::status_r), FUNC(mc6845_device::address_w)); + map(0x64, 0x64).rw(m_crtc, FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)); + map(0x50, 0x50).r(FUNC(h01x_state::port_50_r)); + map(0x70, 0x70).w(FUNC(h01x_state::port_70_w)); +} + +/* +H-01B + KD7 KD6 KD5 KD4 KD3 KD2 KD1 KD0 scan address +A0 space Z A Q 1 BFFEH +A1 BRK X S W 2 BFFDH +A2 (16) C D E 3 BFFBH +A3 E/C V F R 4 BFF7H +A4 - B G T 5 BFEFH +A5 右 N H Y 6 BFDFH +A6 RETN M J U 7 BFBFH +A7 [ , K I 8 BF7FH +A8 BS 左 . L O 9 BEFFH +A9 : / ; P 0 BDFFH +A10 SHIFT 下 BBFFH + +need to determine keys: +Ctrl ESC +*/ + +static INPUT_PORTS_START( h01b ) + PORT_START("LINE0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR('1') PORT_CHAR('!') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR('2') PORT_CHAR('"') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Break") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END)) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR('3') PORT_CHAR('#') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c') +// PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Clear") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE3") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR('4') PORT_CHAR('$') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E/C") PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE4") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR('5') PORT_CHAR('%') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("- =") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('-') PORT_CHAR('=') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE5") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR('6') PORT_CHAR('&') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE6") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR('7') PORT_CHAR('\'') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(13) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE7") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR('8') PORT_CHAR('(') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(", <") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE8") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('9') PORT_CHAR(')') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE9") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR('0') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("; +") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(": *") PORT_CODE(KEYCODE_MINUS) PORT_CHAR(':') PORT_CHAR('*') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE10") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) +INPUT_PORTS_END + + +/* + +模拟器中的按键位置安排参照 TRS-80 + +NF-500A + + KD7 KD6 KD5 KD4 KD3 KD2 KD1 KD0 scan address +A0 R E 5 CTRL? 6 T W BFFEH +A1 3 2 Y E/C U 4 1 BFFDH +A2 9 : 8 - 7 0 下 BFFBH +A3 D S G ESC H F Q BFF7H +A4 X A V Z C BRK BFEFH +A5 L BS 左 K space J ; 右 BFDFH +A6 M . N B , / BFBFH +A7 P RETN O SHIFT I [ BF7FH + +3 56 34 51 key functions not verified, temporarily mapped to ] TAB \ ' + +E/C E汉 = ~ translates to ASCII 20 +ESC translates to ASCII 31 +BS translates to ASCII 8 +61 translates to ASCII 13 enter +16 translates to ASCII 10 down +56 translates to ASCII 16 +27 3 34 51 no action + +Program to test key ASCII codes +10 A$=INKEY$ +20 IF LEN(A$)>0 THEN PRINT ASC(A$) +30 GOTO 10 + +TRS-80 +left 8 right 9 up 91 down 10 +Clear 31 +@ 64 +backspace 8 + +*/ + +/* Input ports */ +static INPUT_PORTS_START( h01x ) + PORT_START("LINE0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR('6') PORT_CHAR('&') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR('5') PORT_CHAR('%') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR('1') PORT_CHAR('!') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR('4') PORT_CHAR('$') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E/C") PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR('2') PORT_CHAR('"') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR('3') PORT_CHAR('#') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR('0') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR('7') PORT_CHAR('\'') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("- =") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('-') PORT_CHAR('=') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR('8') PORT_CHAR('(') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(": *") PORT_CODE(KEYCODE_MINUS) PORT_CHAR(':') PORT_CHAR('*') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('9') PORT_CHAR(')') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE3") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27) + //PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Clear") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE4") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Break") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END)) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE5") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("; +") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE6") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(", <") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE7") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(13) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE8") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE9") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("LINE10") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) +INPUT_PORTS_END + + +/* Machine */ + +void h01x_state::machine_start() +{ + save_item(NAME(m_bank)); + save_item(NAME(m_cassette_data)); + + m_cassette_data_timer = timer_alloc(FUNC(h01x_state::cassette_data_callback), this); + m_cassette_data_timer->adjust(attotime::zero, 0, attotime::from_hz(48000)); +} + +void h01x_state::machine_reset() +{ + m_bank = 0x00; + + m_ram_ptr = m_ram->pointer(); + m_vram_ptr = m_vram->pointer(); +} + +MC6845_UPDATE_ROW( h01x_state::crtc_update_row ) +{ + rgb_t const *const palette = m_palette->palette()->entry_list_raw(); + u32 *p = &bitmap.pix(y); + + for (u16 x = 0; x < x_count; x++) + { + u16 mem = ((ma+x)*16 + ra) & 0x3fff; + u8 gfx = 0; + if (ra < 16) + gfx = m_vram_ptr[mem] ^ ((x == cursor_x) ? 15 : 0); + + *p++ = palette[BIT(gfx, 3)]; + *p++ = palette[BIT(gfx, 2)]; + *p++ = palette[BIT(gfx, 1)]; + *p++ = palette[BIT(gfx, 0)]; + } +} + +void h01x_state::port_70_w(uint8_t data) +{ + m_bank = data & 0xc0; + + // bit5, speaker + m_speaker->level_w(BIT(data, 5)); + + // bit4, cassette + m_cassette->output(BIT(data, 4) ? 1.0 : -1.0); +} + +uint8_t h01x_state::port_50_r() +{ + // bit 7, cassette input + return m_cassette_data ? 0xff : 0x7f; +} + + +// 0x0000 --- 0x3FFF +uint8_t h01x_state::mem_0000_r(offs_t offset) +{ + return m_rom[offset]; +} + +void h01x_state::mem_0000_w(uint8_t data) +{ +} + +// 0x4000 --- 0x7FFF +uint8_t h01x_state::mem_4000_r(offs_t offset) +{ + return m_ram_ptr[offset]; +} + +void h01x_state::mem_4000_w(offs_t offset, uint8_t data) +{ + m_ram_ptr[offset] = data; +} + +// 0x8000 --- 0xBFFF +uint8_t h01x_state::mem_8000_r(offs_t offset) +{ + switch (m_bank) { + case 0xc0: + return m_hzrom[offset]; + case 0x40: + if ((offset & 0xf000) == 0x3000) { + u8 result = 0xff; + for (int i = 0; i < 11; i++) { + if (!BIT(offset, i)) + result &= m_io_keyboard[i]->read(); + } + return result; + } else { + return 0xff; + } + case 0x00: + return m_ram_ptr[offset + 0x4000]; + default: + return 0xff; + } +} + +void h01x_state::mem_8000_w(offs_t offset, uint8_t data) +{ + if (m_bank == 0x00) + m_ram_ptr[offset + 0x4000] = data; +} + + +// 0xC000 --- 0xFFFF +uint8_t h01x_state::mem_c000_r(offs_t offset) +{ + if (m_bank == 0xc0) + return m_hzrom[offset + 0x4000]; + else if (m_bank == 0x40) + return m_vram_ptr[offset]; + else + return 0xff; +} + +void h01x_state::mem_c000_w(offs_t offset, uint8_t data) +{ + if (m_bank == 0x40) + m_vram_ptr[offset] = (data & 0x0f) | 0xf0; +} + + +TIMER_CALLBACK_MEMBER(h01x_state::cassette_data_callback) +{ + m_cassette_data = false; + + if (m_cassette->input() > 0.2) + m_cassette_data = true; +} + + +/* ROM definition */ +ROM_START(h01b) + ROM_REGION(0x4000, "maincpu",0) + ROM_LOAD("h-01b_sysrom.bin", 0x0000, 0x4000, CRC(b52093a7) SHA1(8c874765033444688c906b1a987a73f2c3ec83fb)) + + ROM_REGION(0x8000,"hzrom",0) + ROM_LOAD("h-01b_hzrom.bin", 0x0000, 0x8000, CRC(f0d6a7ac) SHA1(72151d3215bc8b26f983466221fe5f4009727ce8)) +ROM_END + +ROM_START(nf500a) + ROM_REGION(0x4000, "maincpu",0) + ROM_LOAD("u2-hn27128-9adc.bin", 0x0000, 0x4000, CRC(147dae83) SHA1(856b0970c603e88707ce8638be5dbd8ab1c42a1b)) + + ROM_REGION(0x8000,"hzrom",0) + ROM_LOAD("u4-hn27256-32aa.bin", 0x0000, 0x8000, CRC(9ecfddaa) SHA1(54b6e1b43f79b7705e95edda845b21d7326d48e2)) +ROM_END + +ROM_START(h01jce) + ROM_REGION(0x4000, "maincpu",0) + ROM_LOAD("m5l27128k_9b99.bin", 0x0000, 0x4000, CRC(59be30df) SHA1(21ccc765d13992753ec0457e09ac97cea82888a9)) + + ROM_REGION(0x8000,"hzrom",0) + ROM_LOAD("u4-hn27256-32aa.bin", 0x0000, 0x8000, CRC(9ecfddaa) SHA1(54b6e1b43f79b7705e95edda845b21d7326d48e2)) + + ROM_REGION(0x4000, "exrom",0) + ROM_LOAD("hn4827128g_f0f9.bin", 0x0000, 0x4000, CRC(36bffec0) SHA1(5b4b24c54eba0a8b69f291ca656ea27a3685f42e)) +ROM_END + +/* Driver */ + +// H-01B中文教育电脑 +// 普乐电器公司 +// cpu Z-80A 2MHz + +// NF500A教学电脑 +// 国营八三〇厂制造 +// cpu Z-80A 4MHz +// video MC6845P +// sysrom 16KB EPROM +// hzrom 32KB EPROM +// ram 32KB SRAM +// vram 16Kx4bit DRAM + +// JCE +// 广东江门计算机应用设备厂 +// video HD6845SP +// sysrom 16KB EPROM +// hzrom 32KB EPROM +// extrom 16KB EPROM + +// Startup screens +// H-01B : H-01型中文教育电脑 普乐电器公司制造 +// NF500A : H-01型汉字微电脑 中国科学院H电脑公司 +// JCE : H-01型中文普及电脑 北岳电子有限公司制造 + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 1985, h01b, 0, 0, h01b, h01b, h01x_state, empty_init, "China H Computer Company", "H-01B", MACHINE_SUPPORTS_SAVE ) +COMP( 1985, nf500a, 0, 0, nf500a, h01x, h01x_state, empty_init, "China State-owned 830 Factory", "NF500A", MACHINE_SUPPORTS_SAVE ) +COMP( 1987, h01jce, 0, 0, h01jce, h01x, h01x_state, empty_init, "China Jiangmen Computer Equipment Factory", "H-01 JCE", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/misc/highvdeo.cpp mame-0.251+dfsg.1/src/mame/misc/highvdeo.cpp --- mame-0.250+dfsg.1/src/mame/misc/highvdeo.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/misc/highvdeo.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -148,11 +148,18 @@ private: required_shared_ptr m_blit_ram; optional_memory_bank m_mainbank; - output_finder<6> m_lamps; - uint16_t m_vblank_bit; - uint16_t m_brasil_prot_latch; - uint16_t m_grancapi_prot_latch; + + required_device m_maincpu; + required_device m_okim6376; + required_device m_palette; + required_ioport_array<3> m_inputs; + + uint16_t m_vblank_bit = 0; + uint16_t m_brasil_prot_latch = 0; + uint16_t m_grancapi_prot_latch = 0; + uint8_t m_resetpulse = 0; + uint16_t read0_r(); uint16_t read1_r(); uint16_t read2_r(); @@ -188,11 +195,6 @@ uint32_t screen_update_tourvisn(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); uint32_t screen_update_brasil(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - required_device m_maincpu; - required_device m_okim6376; - required_device m_palette; - required_ioport_array<3> m_inputs; - void brasil_io(address_map &map); void brasil_map(address_map &map); void ciclone_io(address_map &map); @@ -214,8 +216,6 @@ void tv_tcf_map(address_map &map); void tv_vcf_io(address_map &map); void tv_vcf_map(address_map &map); - - uint8_t m_resetpulse; }; void highvdeo_state::machine_start() @@ -361,7 +361,7 @@ { map(0x00000, 0x003ff).ram(); /*irq vector area*/ map(0x00400, 0x03fff).ram().share("nvram"); - map(0x40000, 0x4ffff).ram().share("blit_ram"); /*blitter ram*/ + map(0x40000, 0x4ffff).writeonly().share("blit_ram"); map(0x80000, 0xbffff).bankr("mainbank"); map(0xc0000, 0xfffff).rom().region("maincpu", 0xc0000); } @@ -401,7 +401,7 @@ { map(0x00000, 0x003ff).ram(); /*irq vector area*/ map(0x00400, 0x03fff).ram().share("nvram"); - map(0x20000, 0x2ffff).ram().share("blit_ram"); /*blitter ram*/ + map(0x20000, 0x2ffff).writeonly().share("blit_ram"); map(0x40000, 0xfffff).rom().region("maincpu", 0x40000); } @@ -424,7 +424,7 @@ { map(0x00000, 0x003ff).ram(); /*irq vector area*/ map(0x00400, 0x03fff).ram().share("nvram"); - map(0x10000, 0x1ffff).ram().share("blit_ram"); /*blitter ram*/ + map(0x10000, 0x1ffff).writeonly().share("blit_ram"); map(0x40000, 0xfffff).rom().region("maincpu", 0x40000); } @@ -466,7 +466,7 @@ { map(0x00000, 0x003ff).ram(); /*irq vector area*/ map(0x00400, 0x03fff).ram().share("nvram"); - map(0x40000, 0x5d4bf).ram().share("blit_ram"); /*blitter ram*/ + map(0x40000, 0x5ffff).writeonly().share("blit_ram"); map(0x7fe00, 0x7ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x80000, 0xbffff).bankr("mainbank"); map(0xc0000, 0xfffff).rom().region("maincpu", 0x1c0000); @@ -574,7 +574,7 @@ { map(0x00000, 0x003ff).ram(); /*irq vector area*/ map(0x00400, 0x0ffff).ram().share("nvram"); - map(0x40000, 0x7ffff).ram().share("blit_ram"); /*blitter ram*/ + map(0x40000, 0x7ffff).writeonly().share("blit_ram"); map(0x80000, 0xbffff).bankr("mainbank"); map(0xc0000, 0xfffff).rom().region("maincpu", 0xc0000); } @@ -675,7 +675,7 @@ { map(0x00000, 0x003ff).ram(); /*irq vector area*/ map(0x00400, 0x0ffff).ram().share("nvram"); - map(0x40000, 0x7ffff).ram().share("blit_ram"); /*blitter ram*/ + map(0x40000, 0x7ffff).writeonly().share("blit_ram"); map(0x80000, 0xbffff).bankr("mainbank"); map(0xc0000, 0xfffff).rom().region("maincpu", 0x1c0000); } diff -Nru mame-0.250+dfsg.1/src/mame/misc/nl_cocoloco.cpp mame-0.251+dfsg.1/src/mame/misc/nl_cocoloco.cpp --- mame-0.250+dfsg.1/src/mame/misc/nl_cocoloco.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/misc/nl_cocoloco.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud #include "netlist/devices/net_lib.h" diff -Nru mame-0.250+dfsg.1/src/mame/misc/nl_cocoloco.h mame-0.251+dfsg.1/src/mame/misc/nl_cocoloco.h --- mame-0.250+dfsg.1/src/mame/misc/nl_cocoloco.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/misc/nl_cocoloco.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud #include "netlist/nl_setup.h" diff -Nru mame-0.250+dfsg.1/src/mame/misc/othello.cpp mame-0.251+dfsg.1/src/mame/misc/othello.cpp --- mame-0.250+dfsg.1/src/mame/misc/othello.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/misc/othello.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -64,9 +64,9 @@ m_i8243(*this, "n7751_8243"), m_palette(*this, "palette"), m_soundlatch(*this, "soundlatch"), + m_gfx_data(*this, "gfx"), m_n7751_data(*this, "n7751data") - { - } + { } void othello(machine_config &config); @@ -96,6 +96,7 @@ required_device m_palette; required_device m_soundlatch; + required_region_ptr m_gfx_data; required_region_ptr m_n7751_data; uint8_t unk_87_r(); @@ -129,18 +130,17 @@ MC6845_UPDATE_ROW( othello_state::crtc_update_row ) { rgb_t const *const palette = m_palette->palette()->entry_list_raw(); - - uint8_t const *const gfx = memregion("gfx")->base(); + uint8_t const *const gfx = m_gfx_data; for(int cx = 0; cx < x_count; ++cx) { - uint32_t data_address = ((m_videoram[ma + cx] + m_tile_bank) << 4) | ra; - uint32_t tmp = gfx[data_address] | (gfx[data_address + 0x2000] << 8) | (gfx[data_address + 0x4000] << 16); + uint32_t address = ((m_videoram[ma + cx] + m_tile_bank) << 4) | ra; + uint32_t tile_data = gfx[address] | (gfx[address + 0x2000] << 8) | (gfx[address + 0x4000] << 16); for(int x = 0; x < TILE_WIDTH; ++x) { - bitmap.pix(y, (cx * TILE_WIDTH + x) ^ 1) = palette[tmp & 0x0f]; - tmp >>= 4; + bitmap.pix(y, (cx * TILE_WIDTH + x) ^ 1) = palette[tile_data & 0x0f]; + tile_data >>= 4; } } } diff -Nru mame-0.250+dfsg.1/src/mame/misc/pntnpuzl.cpp mame-0.251+dfsg.1/src/mame/misc/pntnpuzl.cpp --- mame-0.250+dfsg.1/src/mame/misc/pntnpuzl.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/misc/pntnpuzl.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -272,7 +272,7 @@ uint16_t pntnpuzl_state::pntnpuzl_28001a_r() { - return 0x4c00; + return 0x0c00 | (m_via->read(0x1a/2) << 8); } uint16_t pntnpuzl_state::irq1_ack_r() @@ -337,7 +337,7 @@ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, pntnpuzl_state,coin_inserted, 1) PORT_IMPULSE(1) PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_HIGH )PORT_CHANGED_MEMBER(DEVICE_SELF, pntnpuzl_state,coin_inserted, 2) PORT_IMPULSE(1) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, pntnpuzl_state,coin_inserted, 4) PORT_IMPULSE(1) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Touch screen"); /* game uses a touch screen */ PORT_START("TOUCHX") @@ -347,22 +347,22 @@ PORT_BIT( 0x7f, 0x40, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(Y, -1.0, 0.0, 0) PORT_MINMAX(0,0x7f) PORT_SENSITIVITY(25) PORT_KEYDELTA(13) PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_S) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_A) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_NAME("Brown") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_NAME("Tan") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Ticket Notch PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) PORT_BIT( 0x70, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Ticket Motor PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_B) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_V) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_C) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_X) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Z) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_G) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_D) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("White") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Yellow") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Green") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Blue") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Red") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("Pink") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_NAME("Light Blue") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_NAME("Light Green") INPUT_PORTS_END void pntnpuzl_state::pntnpuzl(machine_config &config) @@ -392,10 +392,11 @@ TVGA9000_VGA(config, m_svga, 0); m_svga->set_screen(m_screen); - m_svga->set_vram_size(0x200000); + m_svga->set_vram_size(0x100000); - // TODO: runs in external clock mode, needs setter to pc_vga. ~70 Hz is best guess SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + // TODO: XTAL is not right and likely not the source, + // selects xtal mode 3 (36 MHz) / 2 plus another / 2 for module testing bit 7 m_screen->set_raw(XTAL(40'000'000) / 2, 1080, 0, 400, 265, 0, 240); m_screen->set_screen_update(m_svga, FUNC(tvga9000_device::screen_update)); } diff -Nru mame-0.250+dfsg.1/src/mame/misc/rbmk.cpp mame-0.251+dfsg.1/src/mame/misc/rbmk.cpp --- mame-0.250+dfsg.1/src/mame/misc/rbmk.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/misc/rbmk.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -88,6 +88,7 @@ void rbspm(machine_config &config); void magslot(machine_config &config); + void super555(machine_config &config); protected: virtual void video_start() override; @@ -106,6 +107,7 @@ uint16_t m_tilebank = 0; uint8_t m_mux_data = 0; uint16_t m_dip_mux = 0; + //uint16_t m_prot_data = 0; void mcu_io(address_map &map); void mcu_mem(address_map &map); @@ -113,6 +115,7 @@ void rbspm_mem(address_map &map); void magslot_mem(address_map &map); + void super555_mem(address_map &map); uint16_t unk_r(); uint16_t dip_mux_r(); @@ -209,23 +212,31 @@ map(0x9c0000, 0x9c0fff).ram().share(m_vidram[0]); } -void rbmk_state::magslot_mem(address_map &map) +void rbmk_state::super555_mem(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x100000, 0x10ffff).ram(); map(0x600000, 0x600001).rw(FUNC(rbmk_state::dip_mux_r), FUNC(rbmk_state::dip_mux_w)); map(0x608000, 0x608001).portr("IN1").w(FUNC(rbmk_state::tilebank_w)); // ok map(0x610000, 0x610001).portr("IN2"); + // map(0x618080, 0x618081).lr16(NAME([this] () -> uint16_t { return m_prot_data; })); // reads something here from below, if these are hooked up booting stops with '0x09 U64 ERROR', like it's failing some checksum test map(0x620000, 0x620001).portr("IN3"); + // map(0x620080, 0x620081).lw16(NAME([this] (uint16_t data) { m_prot_data = data; })); // writes something here that expects to read above map(0x628000, 0x628001).w(FUNC(rbmk_state::unk_w)); map(0x900000, 0x900fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x940000, 0x940fff).ram().share(m_vidram[1]); map(0x980000, 0x983fff).ram(); map(0x9c0000, 0x9c0fff).ram().share(m_vidram[0]); - map(0x9e0000, 0x9e0fff).ram().share(m_vidram[2]); //map(0xf00000, 0xf00001).w(FUNC(rbmk_state::eeprom_w)); // wrong? } +void rbmk_state::magslot_mem(address_map &map) +{ + super555_mem(map); + + map(0x9e0000, 0x9e0fff).ram().share(m_vidram[2]); +} + void rbmk_state::mcu_mem(address_map &map) { // map(0x0000, 0x0fff).rom(); @@ -880,12 +891,18 @@ // PIC16F84 but no CPU core available } -void rbmk_state::magslot(machine_config &config) +void rbmk_state::super555(machine_config &config) { rbmk(config); - m_maincpu->set_addrmap(AS_PROGRAM, &rbmk_state::magslot_mem); + m_maincpu->set_addrmap(AS_PROGRAM, &rbmk_state::super555_mem); config.device_remove("mcu"); +} + +void rbmk_state::magslot(machine_config &config) +{ + super555(config); + m_maincpu->set_addrmap(AS_PROGRAM, &rbmk_state::magslot_mem); m_gfxdecode->set_info(gfx_magslot); } @@ -950,6 +967,24 @@ ROM_END +ROM_START( super555 ) + ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */ + ROM_LOAD( "super555-v1.5e-0d9b.u64", 0x00000, 0x80000, CRC(9a9c16cc) SHA1(95609dbd45feb591190a2b62dee8846cdcec3462) ) + + ROM_REGION( 0x080000, "oki", 0 ) + ROM_LOAD( "pk-s1-s06.u83", 0x00000, 0x80000, CRC(e329b9ce) SHA1(9fc31daaacc7b3a1a1cf99ab30035021b7cbb78f) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD( "pk-a1-a09.u41", 0x00000, 0x80000, CRC(f48e74bd) SHA1(68e2a0384964e04c526e4002ffae5fa4f2835d66) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD( "super555-t1-e67d.u39", 0x00000, 0x80000, CRC(ee092a9c) SHA1(4123d45d21ca60b0d38f36f59353c56d4fdfcddf) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) + ROM_LOAD16_WORD_SWAP( "93c46.u138", 0x00, 0x080, CRC(60407223) SHA1(10f766b5431709ab11b16bf5ad7adbfdced0e7ac) ) +ROM_END + + ROM_START( sc2in1 ) // Basically same PCB as magslot, but with only 1 dip bank. Most labels have been covered with other labels with 'TETRIS' hand-written ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */ ROM_LOAD( "u64", 0x00000, 0x80000, CRC(c0ad5df0) SHA1(a51f30e76493ea9fb5313c0064dac9a2a4f70cc3) ) @@ -996,11 +1031,12 @@ // mahjong -GAME( 1998, rbmk, 0, rbmk, rbmk, rbmk_state, empty_init, ROT0, "GMS", "Shizhan Majiang Wang (Version 8.8)", MACHINE_NOT_WORKING ) -GAME( 1998, rbspm, 0, rbspm, rbspm, rbmk_state, empty_init, ROT0, "GMS", "Shizhan Ding Huang Maque (Version 4.1)", MACHINE_NOT_WORKING ) +GAME( 1998, rbmk, 0, rbmk, rbmk, rbmk_state, empty_init, ROT0, "GMS", "Shizhan Majiang Wang (Version 8.8)", MACHINE_NOT_WORKING ) +GAME( 1998, rbspm, 0, rbspm, rbspm, rbmk_state, empty_init, ROT0, "GMS", "Shizhan Ding Huang Maque (Version 4.1)", MACHINE_NOT_WORKING ) -// card game -GAME( 2001, sc2in1, 0, magslot, magslot, rbmk_state, empty_init, ROT0, "GMS", "Super Card 2 in 1 (English version 03.23)", MACHINE_NOT_WORKING ) // stops during boot +// card games +GAME( 1999, super555, 0, super555, magslot, rbmk_state, empty_init, ROT0, "GMS", "Super 555 (English version V1.5)", MACHINE_NOT_WORKING ) // stops during boot +GAME( 2001, sc2in1, 0, magslot, magslot, rbmk_state, empty_init, ROT0, "GMS", "Super Card 2 in 1 (English version 03.23)", MACHINE_NOT_WORKING ) // stops during boot // slot, on slightly different PCB -GAME( 2003, magslot, 0, magslot, magslot, rbmk_state, empty_init, ROT0, "GMS", "Magic Slot (normal 1.0C)", MACHINE_NOT_WORKING ) // needs implementing of 3rd GFX layer, correct GFX decode for 1st layer, inputs +GAME( 2003, magslot, 0, magslot, magslot, rbmk_state, empty_init, ROT0, "GMS", "Magic Slot (normal 1.0C)", MACHINE_NOT_WORKING ) // needs implementing of 3rd GFX layer, correct GFX decode for 1st layer, inputs diff -Nru mame-0.250+dfsg.1/src/mame/misc/rcorsair.cpp mame-0.251+dfsg.1/src/mame/misc/rcorsair.cpp --- mame-0.250+dfsg.1/src/mame/misc/rcorsair.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/misc/rcorsair.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,8 +1,8 @@ // license:BSD-3-Clause // copyright-holders:David Haywood -/* Red Corsair */ +// Red Corsair -/* skeleton driver */ +// skeleton driver /* This driver is not being worked on by the original author. Somebody will probably need to do extensive research on the PCB to establish what the custom block actually contains, @@ -56,11 +56,19 @@ #include "emu.h" + #include "cpu/mcs48/mcs48.h" #include "cpu/z80/z80.h" +#include "machine/i8255.h" +#include "sound/ay8910.h" +#include "video/mc6845.h" + #include "emupal.h" #include "screen.h" +#include "speaker.h" + +namespace { class rcorsair_state : public driver_device { @@ -73,19 +81,20 @@ void rcorsair(machine_config &config); +protected: + // driver_device overrides + virtual void video_start() override; + private: + // devices + required_device m_maincpu; + required_device m_subcpu; + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void rcorsair_main_map(address_map &map); void rcorsair_sub_io_map(address_map &map); void rcorsair_sub_map(address_map &map); - - // devices - required_device m_maincpu; - required_device m_subcpu; - - // driver_device overrides - virtual void video_start() override; }; @@ -158,8 +167,7 @@ void rcorsair_state::rcorsair(machine_config &config) { - /* Main CPU is probably inside Custom Block with - program code, unknown type */ + // Main CPU is probably inside Custom Block with program code, unknown type Z80(config, m_maincpu, 8000000); m_maincpu->set_addrmap(AS_PROGRAM, &rcorsair_state::rcorsair_main_map); @@ -169,6 +177,8 @@ m_subcpu->set_addrmap(AS_PROGRAM, &rcorsair_state::rcorsair_sub_map); m_subcpu->set_addrmap(AS_IO, &rcorsair_state::rcorsair_sub_io_map); + I8255(config, "ppi"); + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); @@ -179,6 +189,14 @@ GFXDECODE(config, "gfxdecode", "palette", gfx_rcorsair); PALETTE(config, "palette").set_entries(0x100); + + HD6845S(config, "crtc", 8000000 / 8).set_screen("screen"); + + SPEAKER(config, "speaker").front_center(); + + AY8910(config, "ay1", 8000000 / 8).add_route(ALL_OUTPUTS, "speaker", 0.5); + + AY8910(config, "ay2", 8000000 / 8).add_route(ALL_OUTPUTS, "speaker", 0.5); } ROM_START( rcorsair ) @@ -190,7 +208,7 @@ ROM_REGION( 0x2000, "subcpu", 0 ) ROM_LOAD( "rcs_6d.bin", 0x00000, 0x2000, CRC(b7f34f91) SHA1(16d5ed6a60db09f04727be8500c1c8c869281a8a) ) // sound code? (or part of the game code?) - ROM_REGION( 0x6000, "gfx1", 0 ) /* there looks to be a slight scramble per tile, probably simle address xor */ + ROM_REGION( 0x6000, "gfx1", 0 ) // there looks to be a slight scramble per tile, probably simple address XOR ROM_LOAD( "rcd2_2b.bin", 0x0000, 0x2000, CRC(d52b39f1) SHA1(20ce812fb4a9157d7c1d45902645695f0dd84add) ) ROM_LOAD( "rcd1_2c.bin", 0x2000, 0x2000, CRC(9ec5dd51) SHA1(84939799f64d9d3e9a67b51046dd0c3403904d97) ) ROM_LOAD( "rcd0_2d.bin", 0x4000, 0x2000, CRC(b86fe547) SHA1(30dc51f65d2bd807d2498829087ba1a8eaa2e146) ) @@ -200,5 +218,7 @@ ROM_LOAD( "prom_3c.bin", 0x00000, 0x100, CRC(edca1d4a) SHA1(a5ff659cffcd09cc161960da8f5cdd234e0db92c) ) // ? ROM_END +} // anonymous namespace + GAME( 1984, rcorsair, 0, rcorsair, inports, rcorsair_state, empty_init, ROT90, "Nakasawa", "Red Corsair", MACHINE_IS_SKELETON ) diff -Nru mame-0.250+dfsg.1/src/mame/misc/smd2144c.cpp mame-0.251+dfsg.1/src/mame/misc/smd2144c.cpp --- mame-0.250+dfsg.1/src/mame/misc/smd2144c.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/misc/smd2144c.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,133 @@ +// license:BSD-3-Clause +// copyright-holders: + +/* +'SMD2144C' PCB by unknown manufacturer + +1x HD64F2144FA20 (H8S/2144) +1x 16.000 MHz XTAL +1x Xilinx XC9572XL +1x Xilinx XC9536 +1x Analog Devices ADM691AR Microprocessor Supervisory Circuit +2x BS62LV256SC-70 Very Low Power CMOS SRAM (32K X 8 bit) + +These games appear to be Tetris clones, but it wouldn't be surprising +if they had stealth gambling games, too. +Both dumped PCBs shared the same main CPU ROM and 2 of the 4 GFX ROMs. Same game with different GFX. +*/ + + +#include "emu.h" + +#include "cpu/h8/h8s2245.h" + +#include "emupal.h" +#include "screen.h" +#include "speaker.h" + + +namespace { + +class smd2144c_state : public driver_device +{ +public: + smd2144c_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu") + {} + + void smd2144c(machine_config &config); + +private: + required_device m_maincpu; + + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void program_map(address_map &map); +}; + + +uint32_t smd2144c_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + return 0; +} + + +void smd2144c_state::program_map(address_map &map) +{ + map(0x000000, 0x07ffff).rom(); +} + + +static INPUT_PORTS_START( smd2144c ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + // no dips on PCB +INPUT_PORTS_END + + +void smd2144c_state::smd2144c(machine_config &config) +{ + H8S2245(config, m_maincpu, 16_MHz_XTAL); // actually HD64F2144FA20 (TODO: H8S/2100 series not implemented yet) + m_maincpu->set_addrmap(AS_PROGRAM, &smd2144c_state::program_map); + + // all wrong + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(smd2144c_state::screen_update)); + screen.set_palette("palette"); + + PALETTE(config, "palette").set_format(palette_device::xRGB_888, 256); // TODO: wrong + + SPEAKER(config, "mono").front_center(); // TODO: sound? directly from H8? +} + + +ROM_START( thecastle ) + ROM_REGION(0x80000, "maincpu", 0) + ROM_LOAD( "tetrix 0a98.u3", 0x00000, 0x80000, CRC(7dc03a3f) SHA1(a2928dea91a68542fce932f986f288d269b3def3) ) // labeled Tetrix but game pics show 'The Castle' + + ROM_REGION(0x400000, "gfx", 0) // TODO: ROM loading not verified + ROM_LOAD( "mx27c8000.ic11", 0x000000, 0x100000, CRC(10cee0cb) SHA1(57daa974b9de38921a3c75edcf759cc803f22ec8) ) + ROM_LOAD( "mx27c8000.ic12", 0x100000, 0x100000, CRC(d5940d05) SHA1(5a3e8eccaf1934d9ae6c0e01bb1745225929a627) ) + ROM_LOAD( "mx27c8000.ic13", 0x200000, 0x100000, CRC(757d12b7) SHA1(8a7794c2bce70226dd047972a47fa1afec4bb0f1) ) + ROM_LOAD( "mx27c8000.ic14", 0x300000, 0x100000, CRC(f1a0898d) SHA1(32c2ed41e2f04e3b7d756a15f6e476baeb641669) ) +ROM_END + +ROM_START( therock ) + ROM_REGION(0x80000, "maincpu", 0) + ROM_LOAD( "the rock 1920.u3", 0x00000, 0x80000, CRC(7dc03a3f) SHA1(a2928dea91a68542fce932f986f288d269b3def3) ) // same as the castle set + + ROM_REGION(0x400000, "gfx", 0) // TODO: ROM loading not verified + ROM_LOAD( "mx27c8000.ic11", 0x000000, 0x100000, CRC(bc89920d) SHA1(904d4fae2f7d0172b06aca9ffa48a1bdfa42bf58) ) + ROM_LOAD( "mx27c8000.ic12", 0x100000, 0x100000, CRC(ad496cb3) SHA1(ded21b9c60404a692d3c6d3f579fb7ecb0575a13) ) + ROM_LOAD( "mx27c8000.ic13", 0x200000, 0x100000, CRC(757d12b7) SHA1(8a7794c2bce70226dd047972a47fa1afec4bb0f1) ) // same as the castle set + ROM_LOAD( "mx27c8000.ic14", 0x300000, 0x100000, CRC(f1a0898d) SHA1(32c2ed41e2f04e3b7d756a15f6e476baeb641669) ) // same as the castle set +ROM_END + +} // Anonymous namespace + + +GAME( 200?, thecastle, 0, smd2144c, smd2144c, smd2144c_state, empty_init, ROT0, "", "The Castle", MACHINE_IS_SKELETON ) +GAME( 200?, therock, thecastle, smd2144c, smd2144c, smd2144c_state, empty_init, ROT0, "", "The Rock", MACHINE_IS_SKELETON ) diff -Nru mame-0.250+dfsg.1/src/mame/misc/triton.cpp mame-0.251+dfsg.1/src/mame/misc/triton.cpp --- mame-0.250+dfsg.1/src/mame/misc/triton.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/misc/triton.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,656 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/******************************************************************************* + + Transam Triton + + TODO: + - cassette interface + - keyboard auto repeat (optional) + - parallel printer on port 3, uses INT3 (optional) + +*******************************************************************************/ + +#include "emu.h" +#include "cpu/i8085/i8085.h" +#include "machine/ay31015.h" +#include "machine/clock.h" +#include "machine/kr2376.h" +#include "machine/timer.h" +#include "sound/beep.h" +#include "video/ef9364.h" +#include "bus/generic/slot.h" +#include "bus/generic/carts.h" +#include "bus/rs232/rs232.h" +#include "imagedev/cassette.h" + +#include "emupal.h" +#include "screen.h" +#include "softlist_dev.h" +#include "speaker.h" + +#include "triton.lh" + + +namespace { + +class triton_state : public driver_device +{ +public: + triton_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_ef9364(*this, "ef9364") + , m_charset(*this, "ef9364") + , m_kr2376(*this, "kr2376") + , m_uart(*this, "uart") + , m_cassette(*this, "cassette") + , m_beeper(*this, "beeper") + , m_led(*this, "led%u", 0U) + , m_rom(*this, "rom") + , m_vidcon(*this, "vidcon") + , m_chargen(*this, "chargen") + , m_graphics(*this, "graphics") + , m_palette(*this, "palette") + , m_user1(*this, "user1") + , m_user2(*this, "user2") + , m_serial(*this, "serial") + , m_modifiers(*this, "MODIFIERS") + , m_config(*this, "CONFIG") + { } + + void triton1(machine_config &config); + void triton2(machine_config &config); + + DECLARE_INPUT_CHANGED_MEMBER(pushbutton_changed); + DECLARE_INPUT_CHANGED_MEMBER(charset_changed); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + +private: + required_device m_maincpu; + required_device m_ef9364; + required_region_ptr m_charset; + required_device m_kr2376; + required_device m_uart; + required_device m_cassette; + required_device m_beeper; + output_finder<8> m_led; + required_region_ptr m_rom; + required_region_ptr m_vidcon; + required_region_ptr m_chargen; + required_region_ptr m_graphics; + required_device m_palette; + required_device m_user1; + required_device m_user2; + required_device m_serial; + required_ioport m_modifiers; + required_ioport m_config; + + void mem_map(address_map &map); + void io_map(address_map &map); + + IRQ_CALLBACK_MEMBER(inta_cb); + + void update_charset(); + + uint8_t rom_r(offs_t offset); + + uint8_t port0_r(); + uint8_t port1_r(); + void port3_w(uint8_t data); + void port5_w(uint8_t data); + void port6_w(uint8_t data); + void port7_w(uint8_t data); + + uint16_t m_int_vector; + std::unique_ptr m_exp_ram; +}; + + +void triton_state::mem_map(address_map &map) +{ + map.unmap_value_high(); + map(0x0000, 0x0fff).r(FUNC(triton_state::rom_r)); + map(0x1000, 0x13ff).rw(m_ef9364, FUNC(ef9364_device::videoram_r), FUNC(ef9364_device::videoram_w)); + map(0x1400, 0x1fff).ram(); + map(0xc000, 0xdfff).rom().region("eprom_6", 0); // 8K Eprom card + map(0xe000, 0xffff).rom().region("eprom_7", 0); // 8K Eprom card +} + +void triton_state::io_map(address_map &map) +{ + map.unmap_value_high(); + map.global_mask(0xff); + map(0x00, 0x00).r(FUNC(triton_state::port0_r)); // Keyboard INPUT + map(0x01, 0x01).r(FUNC(triton_state::port1_r)); // Tape I/O UART status INPUT + map(0x02, 0x02).w(m_uart, FUNC(ay51013_device::transmit)); // Tape I/O UART data strobe OUTPUT + map(0x03, 0x03).w(FUNC(triton_state::port3_w)); // LEDs OUTPUT (note LEDs are on for "0") + map(0x04, 0x04).r(m_uart, FUNC(ay51013_device::receive)); // Tape I/O UART receive data enable INPUT + map(0x05, 0x05).w(FUNC(triton_state::port5_w)); // VDU OUTPUT (note strobe - bit 8 - has to be specially formatted by software) + map(0x06, 0x06).w(FUNC(triton_state::port6_w)); // Serial OUTPUT on bit 8, bit 7 spare + map(0x07, 0x07).w(FUNC(triton_state::port7_w)); // Bit 8 = Relay, Bit 7 = Oscillator (speaker) +} + + +static INPUT_PORTS_START(triton) + // GRI.756 Keyboard (Encoded by KR2376-12) + PORT_START("X0") // 3 2 1 RS SUB GS SYN STX NAK DC4 NUL + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("X1") // 6 5 4 ] [ ETX CAN GS DEL DLE SOH + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}') + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("X2") // 9 8 7 | ~ FS EM ESC SUB HT ACK + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR('|') PORT_CHAR('\\') PORT_NAME(u8"¦ \\ FS") + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('~') PORT_CHAR('^') PORT_NAME(u8"~ \u2191 RS") // up arrow ↑ + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) PORT_NAME("Esc") + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("X3") // US VT DC1 BS SI HT LF FF CR SP ETB + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) PORT_NAME("Del") + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_NAME("Return") + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("X4") // - 0 9 8 7 6 5 4 3 2 1 + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=') + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'') + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&') + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"') + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') + + PORT_START("X5") // \ p o i u y t r e w q + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\\') PORT_CHAR('@') + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p') + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o') + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i') + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u') + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y') + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t') + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r') + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e') + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w') + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q') + + PORT_START("X6") // : ; l k j h g f d s a + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(':') PORT_CHAR('*') + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR(';') PORT_CHAR('+') + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l') + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k') + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j') + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h') + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g') + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f') + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d') + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s') + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a') + + PORT_START("X7") // _ / . , m n b v c x z + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('_') + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m') + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n') + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b') + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v') + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c') + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x') + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z') + + PORT_START("MODIFIERS") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Shift Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_TOGGLE + + PORT_START("PUSHBUTTONS") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CODE(KEYCODE_F1) PORT_NAME("Reset") PORT_CHANGED_MEMBER(DEVICE_SELF, triton_state, pushbutton_changed, 0) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CODE(KEYCODE_F2) PORT_NAME("Clear Screen") PORT_CHANGED_MEMBER(DEVICE_SELF, triton_state, pushbutton_changed, 0xcf) // INT1 + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_CODE(KEYCODE_F3) PORT_NAME("Initialise") PORT_CHANGED_MEMBER(DEVICE_SELF, triton_state, pushbutton_changed, 0xd7) // INT2 + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_CODE(KEYCODE_F4) PORT_NAME("Menu") PORT_CHANGED_MEMBER(DEVICE_SELF, triton_state, pushbutton_changed, 0xdf) // INT3 + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_CODE(KEYCODE_F5) PORT_NAME("Pause") PORT_CHANGED_MEMBER(DEVICE_SELF, triton_state, pushbutton_changed, 1) PORT_TOGGLE + + PORT_START("CONFIG") + PORT_CONFNAME(0x07, 0x00, "8K RAM Card") + PORT_CONFSETTING(0x00, "0x8K No RAM Card") + PORT_CONFSETTING(0x01, "1x8K 2000-3FFF") + PORT_CONFSETTING(0x02, "2x8K 2000-5FFF") + PORT_CONFSETTING(0x03, "3x8K 2000-7FFF") + PORT_CONFSETTING(0x04, "4x8K 2000-9FFF") + PORT_CONFSETTING(0x05, "5x8K 2000-BFFF") + PORT_CONFNAME(0x10, 0x00, "Graphics PROM") PORT_CHANGED_MEMBER(DEVICE_SELF, triton_state, charset_changed, 0) + PORT_CONFSETTING(0x00, "Graphics") + PORT_CONFSETTING(0x10, "Lower Case") + //PORT_CONFNAME(0x20, 0x00, "Auto repeat") + //PORT_CONFSETTING(0x00, DEF_STR( No )) + //PORT_CONFSETTING(0x20, DEF_STR( Yes )) + //PORT_CONFNAME(0x40, 0x00, "Port 3") + //PORT_CONFSETTING(0x00, "LED's") + //PORT_CONFSETTING(0x40, "Parallel Printer") +INPUT_PORTS_END + +INPUT_CHANGED_MEMBER(triton_state::pushbutton_changed) +{ + switch (param) + { + case 0: + m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); + break; + case 1: + m_maincpu->set_input_line(INPUT_LINE_HALT, newval ? ASSERT_LINE : CLEAR_LINE); + break; + default: + m_int_vector = param; + m_maincpu->set_input_line(INPUT_LINE_IRQ0, newval ? ASSERT_LINE : CLEAR_LINE); + break; + } +} + +INPUT_CHANGED_MEMBER(triton_state::charset_changed) +{ + update_charset(); +} + + +void triton_state::update_charset() +{ + // copy selected charset to ef9364 region + memcpy(&m_charset[0x0000], &m_graphics[BIT(m_config->read(), 4) * 0x200], 0x200); + memcpy(&m_charset[0x0200], &m_graphics[BIT(m_config->read(), 4) * 0x200], 0x200); + memcpy(&m_charset[0x0100], &m_chargen[0x100], 0x100); + memcpy(&m_charset[0x0200], &m_chargen[0x000], 0x100); +} + + +uint8_t triton_state::rom_r(offs_t offset) +{ + uint8_t data = m_rom[offset]; + + switch (offset & 0x0c00) + { + case 0x0400: // User1 + if (m_user1->exists()) + { + data = m_user1->read_rom(offset & 0x3ff); + } + break; + case 0x0800: // User2 + if (m_user2->exists()) + { + data = m_user2->read_rom(offset & 0x3ff); + } + break; + } + + return data; +} + + +uint8_t triton_state::port0_r() +{ + // TODO: strobe goes low on a timer (capacitance discharge) for auto repeat + return m_kr2376->data_r() | (m_kr2376->get_output_pin(kr2376_device::KR2376_SO) << 7); +} + +uint8_t triton_state::port1_r() +{ + uint8_t data = 0x00; + + data |= m_uart->dav_r() << 0; + data |= m_uart->pe_r() << 1; + data |= m_uart->fe_r() << 2; + data |= m_uart->or_r() << 3; + data |= m_uart->tbmt_r() << 4; + + return data; +} + +void triton_state::port3_w(uint8_t data) +{ + for (int i = 0; i < 8; i++) + m_led[i] = BIT(data, i); +} + +void triton_state::port5_w(uint8_t data) +{ + if (data & 0x80) + m_ef9364->command_w(m_vidcon[data & 0x7f]); + else + m_ef9364->char_latch_w(data & 0x7f); +} + +void triton_state::port6_w(uint8_t data) +{ + m_serial->write_txd(!BIT(data, 7)); +} + +void triton_state::port7_w(uint8_t data) +{ + m_beeper->set_state(BIT(data, 6)); + + m_cassette->change_state(BIT(data, 7) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR); +} + + +IRQ_CALLBACK_MEMBER(triton_state::inta_cb) +{ + return m_int_vector; +} + + +void triton_state::machine_start() +{ + for (int i = 0; i < 0x400; i++) + { + m_graphics[i] = bitswap<8>(m_graphics[i], 4, 3, 5, 2, 6, 1, 7, 0); + } + + m_exp_ram = make_unique_clear(0xe000); + + m_led.resolve(); + + save_pointer(NAME(m_exp_ram), 0xe000); +} + +void triton_state::machine_reset() +{ + uint16_t ramsize = (m_config->read() & 7) * 0x2000; + + m_maincpu->space(AS_PROGRAM).unmap_readwrite(0x2000, 0xbfff); + + if (ramsize) + { + m_maincpu->space(AS_PROGRAM).install_ram(0x2000, 0x2000 + ramsize - 1, m_exp_ram.get()); // 8K RAM cards + } + + m_kr2376->set_input_pin(kr2376_device::KR2376_DSII, 0); + m_kr2376->set_input_pin(kr2376_device::KR2376_PII, 0); + + update_charset(); +} + + +static const gfx_layout charlayout = +{ + 8, 12, /* 8 x 12 characters */ + 64, /* 64 characters */ + 1, /* 1 bits per pixel */ + { 0 }, /* no bitplanes */ + /* x offsets */ + { 0, 1, 2, 3, 4, 5, 6, 7, 8 }, + /* y offsets */ + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 0*8, 0*8, 0*8, 0*8 }, + 8*8 /* every char takes 8 bytes */ +}; + +static GFXDECODE_START(gfx_tritan) + GFXDECODE_ENTRY("chargen", 0, charlayout, 0, 1) + GFXDECODE_ENTRY("graphics", 0x000, charlayout, 0, 1) + GFXDECODE_ENTRY("graphics", 0x200, charlayout, 0, 1) +GFXDECODE_END + + +static DEVICE_INPUT_DEFAULTS_START(printer) + DEVICE_INPUT_DEFAULTS("RS232_RXBAUD", 0xff, RS232_BAUD_110) + DEVICE_INPUT_DEFAULTS("RS232_TXBAUD", 0xff, RS232_BAUD_110) + DEVICE_INPUT_DEFAULTS("RS232_DATABITS", 0xff, RS232_DATABITS_8) + DEVICE_INPUT_DEFAULTS("RS232_PARITY", 0xff, RS232_PARITY_MARK) + DEVICE_INPUT_DEFAULTS("RS232_STOPBITS", 0xff, RS232_STOPBITS_2) +DEVICE_INPUT_DEFAULTS_END + + +void triton_state::triton1(machine_config &config) +{ + I8080A(config, m_maincpu, 7.2_MHz_XTAL / 9); + m_maincpu->set_addrmap(AS_PROGRAM, &triton_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &triton_state::io_map); + m_maincpu->set_irq_acknowledge_callback(FUNC(triton_state::inta_cb)); + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_screen_update("ef9364", FUNC(ef9364_device::screen_update)); + screen.set_size(64 * 8, 16 * 12); + screen.set_visarea(0, 64 * 8 - 1, 0, 16 * 12 - 1); + GFXDECODE(config, "gfxdecode", "palette", gfx_tritan); + PALETTE(config, m_palette, palette_device::MONOCHROME); + + EF9364(config, m_ef9364, 1.008_MHz_XTAL); // SFF96364 + m_ef9364->set_screen("screen"); + m_ef9364->set_palette_tag("palette"); + m_ef9364->set_nb_of_pages(1); + m_ef9364->set_erase(0x20); + + config.set_default_layout(layout_triton); + + KR2376_12(config, m_kr2376, 50000); + m_kr2376->x<0>().set_ioport("X0"); + m_kr2376->x<1>().set_ioport("X1"); + m_kr2376->x<2>().set_ioport("X2"); + m_kr2376->x<3>().set_ioport("X3"); + m_kr2376->x<4>().set_ioport("X4"); + m_kr2376->x<5>().set_ioport("X5"); + m_kr2376->x<6>().set_ioport("X6"); + m_kr2376->x<7>().set_ioport("X7"); + m_kr2376->shift().set([this]() { return int(BIT(m_modifiers->read(), 0) || BIT(m_modifiers->read(), 2)); }); + m_kr2376->control().set([this]() { return int(BIT(m_modifiers->read(), 1)); }); + //m_kr2376->strobe().set([this](int state) { auto repeat timer }); + + AY51013(config, m_uart); + //m_uart->read_si_callback().set(FUNC(triton_state::si)); + //m_uart->write_so_callback().set(FUNC(triton_state::so)); + + //CLOCK(config, m_uart_clock, 4800); + //m_uart_clock->signal_handler().set(m_uart, FUNC(ay51013_device::write_rcp)); + //m_uart_clock->signal_handler().append(m_uart, FUNC(ay51013_device::write_tcp)); + + //clock_device &uart_clock(CLOCK(config, "uart_clock", 4800)); + //uart_clock.signal_handler().set(FUNC(triton_state::kansas_w)); + //TIMER(config, "kansas_r").configure_periodic(FUNC(triton_state::kansas_r), attotime::from_hz(40000)); + + CASSETTE(config, m_cassette); + m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED); + m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05); + + SPEAKER(config, "mono").front_center(); + BEEP(config, m_beeper, 800).add_route(ALL_OUTPUTS, "mono", 1.00); + + GENERIC_SOCKET(config, m_user1, generic_plain_slot, "triton_rom", "rom,bin"); + GENERIC_SOCKET(config, m_user2, generic_plain_slot, "triton_rom", "rom,bin"); + + RS232_PORT(config, m_serial, default_rs232_devices, "printer"); + m_serial->set_option_device_input_defaults("printer", DEVICE_INPUT_DEFAULTS_NAME(printer)); + + SOFTWARE_LIST(config, "rom_ls").set_original("triton_rom"); +} + +void triton_state::triton2(machine_config &config) +{ + triton1(config); + + m_maincpu->set_clock(18_MHz_XTAL / 9); +} + + +ROM_START(triton41) + ROM_REGION(0x1000, "rom", ROMREGION_ERASEFF) + ROM_SYSTEM_BIOS(0, "l41", "L4.1") + ROMX_LOAD("monitor_4.1.rom", 0x0000, 0x0400, CRC(2228040d) SHA1(0e92fa1c0a1327dd77b6f9403a5f34aa8b464e9b), ROM_BIOS(0)) + ROMX_LOAD("basic_l4.1a.rom", 0x0400, 0x0400, CRC(468264b0) SHA1(bcd2705be359eb727f00ae54562afd75028ee34f), ROM_BIOS(0)) + ROMX_LOAD("basic_l4.1b.rom", 0x0800, 0x0400, CRC(858aa55c) SHA1(a49bf12a1f11d9c04ef30b4ca0278782e93bd95c), ROM_BIOS(0)) + + ROM_REGION(0x2000, "eprom_6", ROMREGION_ERASEFF) + ROM_REGION(0x2000, "eprom_7", ROMREGION_ERASEFF) + + ROM_REGION(0x0100, "vidcon", 0) + ROM_LOAD("vducontrol.ic54", 0x0000, 0x0100, CRC(ad5d426e) SHA1(3db409fe7e3e9fc350acd5500594965c5f2bb5be)) // 74S287 (256 x 4bit) + + ROM_REGION(0x0200, "chargen", 0) + ROM_LOAD("cgr-001.ic69", 0x0000, 0x0200, CRC(a7e567fc) SHA1(b18aae0a2d4f92f5a7e22640719bbc4652f3f4ee)) // RO-3-2513 + + ROM_REGION(0x0400, "graphics", 0) + ROM_LOAD("graphics.ic70", 0x0000, 0x0200, CRC(77364e43) SHA1(b6ec6543acacab544e8568f700a1b581025897a1)) // 74S472 (512 x 8bit) + ROM_LOAD("lowercase.ic70", 0x0200, 0x0200, CRC(fd677f54) SHA1(7d5a907f97df1f7f7379df3eedbd36c5c071abd1)) // alternate lower case + + ROM_REGION(0x0400, "ef9364", ROMREGION_ERASE00) +ROM_END + +ROM_START(triton51) + ROM_REGION(0x1000, "rom", ROMREGION_ERASEFF) + ROM_SYSTEM_BIOS(0, "l51", "L5.1") + ROMX_LOAD("humbug_5.1a.rom", 0x0000, 0x0400, CRC(502a7b4f) SHA1(b2e4dc177676c528c5f11518e0d0d4b40385be25), ROM_BIOS(0)) + ROMX_LOAD("basic_l5.1a.rom", 0x0400, 0x0400, CRC(08830f6f) SHA1(1467e35aa8e4d5c7e73a7b5bc0d1ef06ef1e0b4b), ROM_BIOS(0)) + ROMX_LOAD("basic_l5.1b.rom", 0x0800, 0x0400, CRC(4470590a) SHA1(a7aa5b900f33a4e7e973ccf4fc07cc7b02dbd336), ROM_BIOS(0)) + ROMX_LOAD("humbug_5.1b.rom", 0x0c00, 0x0400, CRC(6d47d54e) SHA1(c672ce87944a91f481c66202b7f1109348c3c6d1), ROM_BIOS(0)) + ROM_SYSTEM_BIOS(1, "l51p", "L5.1P") // supports parallel printer, implementation unknown. + ROMX_LOAD("humbug_5.1p.rom", 0x0000, 0x0400, CRC(f68b10ac) SHA1(30b19012df1507781d2d8a070021dec50c1d8461), ROM_BIOS(1)) + ROMX_LOAD("basic_l5.1a.rom", 0x0400, 0x0400, CRC(08830f6f) SHA1(1467e35aa8e4d5c7e73a7b5bc0d1ef06ef1e0b4b), ROM_BIOS(1)) + ROMX_LOAD("basic_l5.1b.rom", 0x0800, 0x0400, CRC(4470590a) SHA1(a7aa5b900f33a4e7e973ccf4fc07cc7b02dbd336), ROM_BIOS(1)) + ROMX_LOAD("humbug_5.1b.rom", 0x0c00, 0x0400, CRC(6d47d54e) SHA1(c672ce87944a91f481c66202b7f1109348c3c6d1), ROM_BIOS(1)) + + ROM_REGION(0x2000, "eprom_6", ROMREGION_ERASEFF) + ROM_REGION(0x2000, "eprom_7", ROMREGION_ERASEFF) + + ROM_REGION(0x0100, "vidcon", 0) + ROM_LOAD("vducontrol.ic54", 0x0000, 0x0100, CRC(ad5d426e) SHA1(3db409fe7e3e9fc350acd5500594965c5f2bb5be)) // 74S287 (256 x 4bit) + + ROM_REGION(0x0200, "chargen", 0) + ROM_LOAD("cgr-001.ic69", 0x0000, 0x0200, CRC(a7e567fc) SHA1(b18aae0a2d4f92f5a7e22640719bbc4652f3f4ee)) // RO-3-2513 + + ROM_REGION(0x0400, "graphics", 0) + ROM_LOAD("graphics.ic70", 0x0000, 0x0200, CRC(77364e43) SHA1(b6ec6543acacab544e8568f700a1b581025897a1)) // 74S472 (512 x 8bit) + ROM_LOAD("lowercase.ic70", 0x0200, 0x0200, CRC(fd677f54) SHA1(7d5a907f97df1f7f7379df3eedbd36c5c071abd1)) // alternate lower case + + ROM_REGION(0x400, "ef9364", ROMREGION_ERASE00) +ROM_END + +ROM_START(triton52) + ROM_REGION(0x1000, "rom", ROMREGION_ERASEFF) + ROM_SYSTEM_BIOS(0, "l52", "L5.2") + ROMX_LOAD("humbug_5.2a.rom", 0x0000, 0x0400, CRC(9020f7ed) SHA1(ad0561c51b20684e49b180fb5d2535e2cf0e05e7), ROM_BIOS(0)) + ROMX_LOAD("basic_l5.1a.rom", 0x0400, 0x0400, CRC(08830f6f) SHA1(1467e35aa8e4d5c7e73a7b5bc0d1ef06ef1e0b4b), ROM_BIOS(0)) + ROMX_LOAD("basic_l5.1b.rom", 0x0800, 0x0400, CRC(4470590a) SHA1(a7aa5b900f33a4e7e973ccf4fc07cc7b02dbd336), ROM_BIOS(0)) + ROMX_LOAD("humbug_5.2b.rom", 0x0c00, 0x0400, CRC(47bc3961) SHA1(37f5c09e43f84227e6b4b76e02ba95721dcbf2f1), ROM_BIOS(0)) + ROM_SYSTEM_BIOS(1, "l52p", "L5.2P") // supports parallel printer, implementation unknown. + ROMX_LOAD("humbug_5.2p.rom", 0x0000, 0x0400, CRC(eb2ded3d) SHA1(4e5b291f7a84deb629e351ec5166aadb6477d436), ROM_BIOS(1)) + ROMX_LOAD("basic_l5.1a.rom", 0x0400, 0x0400, CRC(08830f6f) SHA1(1467e35aa8e4d5c7e73a7b5bc0d1ef06ef1e0b4b), ROM_BIOS(1)) + ROMX_LOAD("basic_l5.1b.rom", 0x0800, 0x0400, CRC(4470590a) SHA1(a7aa5b900f33a4e7e973ccf4fc07cc7b02dbd336), ROM_BIOS(1)) + ROMX_LOAD("humbug_5.2b.rom", 0x0c00, 0x0400, CRC(47bc3961) SHA1(37f5c09e43f84227e6b4b76e02ba95721dcbf2f1), ROM_BIOS(1)) + + ROM_REGION(0x2000, "eprom_6", ROMREGION_ERASEFF) + ROM_LOAD("trap_2.1a.rom", 0x0000, 0x0400, CRC(115d1c80) SHA1(6b7a5b9f75432c012f1cc37ad3fe82d92adcd1e7)) + ROM_LOAD("trap_2.1b.rom", 0x0400, 0x0400, CRC(c8d4ba47) SHA1(e89b087630bf1deb4542a2ab6d697047430bd8a1)) + ROM_LOAD("trap_2.1c.rom", 0x0800, 0x0400, CRC(ad383c51) SHA1(95dac006c1e22bb9e820d9aee9b0ab0fdc745045)) + ROM_LOAD("trap_2.1d.rom", 0x0c00, 0x0400, CRC(cf0c1358) SHA1(9ad965f17589490753fb81e7781dc1bf4c82663d)) + ROM_LOAD("trap_2.1e.rom", 0x1000, 0x0400, CRC(211e5173) SHA1(e4cbd7b852ecd4fe46557efa0b3b2db24f83d5a1)) + ROM_LOAD("trap_2.1f.rom", 0x1400, 0x0400, CRC(5f45fe51) SHA1(4218328b697d52a5b85cf3c0280e0e097af3bf44)) + ROM_LOAD("trap_2.1g.rom", 0x1800, 0x0400, CRC(455e3212) SHA1(17e01b3a9b0a358cc483952d25a92823ced15698)) + ROM_LOAD("trap_2.1h.rom", 0x1c00, 0x0400, CRC(4fc2666d) SHA1(fdae9a762d10be5a69e0c5f889ffc86d370b2ae4)) + + ROM_REGION(0x2000, "eprom_7", ROMREGION_ERASEFF) + + ROM_REGION(0x0100, "vidcon", 0) + ROM_LOAD("vducontrol.ic54", 0x0000, 0x0100, CRC(ad5d426e) SHA1(3db409fe7e3e9fc350acd5500594965c5f2bb5be)) // 74S287 (256 x 4bit) + + ROM_REGION(0x0200, "chargen", 0) + ROM_LOAD("cgr-001.ic69", 0x0000, 0x0200, CRC(a7e567fc) SHA1(b18aae0a2d4f92f5a7e22640719bbc4652f3f4ee)) // RO-3-2513 + + ROM_REGION(0x0400, "graphics", 0) + ROM_LOAD("graphics.ic70", 0x0000, 0x0200, CRC(77364e43) SHA1(b6ec6543acacab544e8568f700a1b581025897a1)) // 74S472 (512 x 8bit) + ROM_LOAD("lowercase.ic70", 0x0200, 0x0200, CRC(fd677f54) SHA1(7d5a907f97df1f7f7379df3eedbd36c5c071abd1)) // alternate lower case + + ROM_REGION(0x400, "ef9364", ROMREGION_ERASE00) +ROM_END + +ROM_START(triton72) + ROM_REGION(0x1000, "rom", ROMREGION_ERASEFF) + ROM_SYSTEM_BIOS(0, "l72", "L7.2") + ROMX_LOAD("monitor_7.2a.rom", 0x0000, 0x0400, CRC(0ea43528) SHA1(40fd2d435879dbb4931eec1c091c8c7531a1a96f), ROM_BIOS(0)) + ROMX_LOAD("monitor_7.2b.rom", 0x0c00, 0x0400, CRC(0e75d714) SHA1(bfc9c68dc8e86503c5ecacd454b633f95b407727), ROM_BIOS(0)) + + ROM_REGION(0x2000, "eprom_6", ROMREGION_ERASEFF) + ROM_LOAD("trap_2.1a.rom", 0x0000, 0x0400, CRC(115d1c80) SHA1(6b7a5b9f75432c012f1cc37ad3fe82d92adcd1e7)) + ROM_LOAD("trap_2.1b.rom", 0x0400, 0x0400, CRC(c8d4ba47) SHA1(e89b087630bf1deb4542a2ab6d697047430bd8a1)) + ROM_LOAD("trap_2.1c.rom", 0x0800, 0x0400, CRC(ad383c51) SHA1(95dac006c1e22bb9e820d9aee9b0ab0fdc745045)) + ROM_LOAD("trap_2.1d.rom", 0x0c00, 0x0400, CRC(cf0c1358) SHA1(9ad965f17589490753fb81e7781dc1bf4c82663d)) + ROM_LOAD("trap_2.1e.rom", 0x1000, 0x0400, CRC(211e5173) SHA1(e4cbd7b852ecd4fe46557efa0b3b2db24f83d5a1)) + ROM_LOAD("trap_2.1f.rom", 0x1400, 0x0400, CRC(5f45fe51) SHA1(4218328b697d52a5b85cf3c0280e0e097af3bf44)) + ROM_LOAD("trap_2.1g.rom", 0x1800, 0x0400, CRC(455e3212) SHA1(17e01b3a9b0a358cc483952d25a92823ced15698)) + ROM_LOAD("trap_2.1h.rom", 0x1c00, 0x0400, CRC(4fc2666d) SHA1(fdae9a762d10be5a69e0c5f889ffc86d370b2ae4)) + + ROM_REGION(0x2000, "eprom_7", ROMREGION_ERASEFF) + ROM_LOAD("basic_l7.2a.rom", 0x0000, 0x0400, CRC(d0713894) SHA1(f56ad2af91f25b86737f70c25e08d3aa358eb009)) + ROM_LOAD("basic_l7.2b.rom", 0x0400, 0x0400, CRC(7604032f) SHA1(103cbf0a9f8706cf6a8e0e759bab587636a4fff6)) + ROM_LOAD("basic_l7.2c.rom", 0x0800, 0x0400, CRC(1255fb1e) SHA1(6cb76813a3604c4fcc689fdf861b9e1de361f3fa)) + ROM_LOAD("basic_l7.2d.rom", 0x0c00, 0x0400, CRC(df2db6a1) SHA1(da0b185707fe30596b25a560709a1eeb535070ed)) + ROM_LOAD("basic_l7.2e.rom", 0x1000, 0x0400, CRC(9fc0a643) SHA1(5d1758a4cf6741e1e5ef6f655f21a4704ac72125)) + ROM_LOAD("basic_l7.2f.rom", 0x1400, 0x0400, CRC(002723ad) SHA1(146ff347d893d4aba4148fc2ce88bbe08abab479)) + ROM_LOAD("basic_l7.2g.rom", 0x1800, 0x0400, CRC(b43d50de) SHA1(dde0d26713b3a346c8bbcff9c40e2c1d448fb8d5)) + ROM_LOAD("basic_l7.2h.rom", 0x1c00, 0x0400, CRC(2af7f180) SHA1(7f18375147eb18f90b15606cd9b1578fd3fb3e76)) + + ROM_REGION(0x0100, "vidcon", 0) + ROM_LOAD("vducontrol.ic54", 0x0000, 0x0100, CRC(ad5d426e) SHA1(3db409fe7e3e9fc350acd5500594965c5f2bb5be)) // 74S287 (256 x 4bit) + + ROM_REGION(0x0200, "chargen", 0) + ROM_LOAD("cgr-001.ic69", 0x0000, 0x0200, CRC(a7e567fc) SHA1(b18aae0a2d4f92f5a7e22640719bbc4652f3f4ee)) // RO-3-2513 + + ROM_REGION(0x0400, "graphics", 0) + ROM_LOAD("graphics.ic70", 0x0000, 0x0200, CRC(77364e43) SHA1(b6ec6543acacab544e8568f700a1b581025897a1)) // 74S472 (512 x 8bit) + ROM_LOAD("lowercase.ic70", 0x0200, 0x0200, CRC(fd677f54) SHA1(7d5a907f97df1f7f7379df3eedbd36c5c071abd1)) // alternate lower case + + ROM_REGION(0x400, "ef9364", ROMREGION_ERASE00) +ROM_END + +} // anonymous namespace + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 1978, triton41, triton72, 0, triton1, triton, triton_state, empty_init, "Transam", "Triton L4.1", MACHINE_NOT_WORKING ) +COMP( 1979, triton51, triton72, 0, triton1, triton, triton_state, empty_init, "Transam", "Triton L5.1", MACHINE_NOT_WORKING ) +//COMP( 1979, triton61, triton72, 0, triton1, triton, triton_state, empty_init, "Transam", "Triton L6.1", MACHINE_NOT_WORKING ) +COMP( 1980, triton52, triton72, 0, triton2, triton, triton_state, empty_init, "Transam", "Triton L5.2", MACHINE_NOT_WORKING ) +//COMP( 1980, triton62, triton72, 0, triton2, triton, triton_state, empty_init, "Transam", "Triton L6.2", MACHINE_NOT_WORKING ) +COMP( 1980, triton72, 0, 0, triton2, triton, triton_state, empty_init, "Transam", "Triton L7.2", MACHINE_NOT_WORKING ) +//COMP( 1980, triton82, 0, 0, triton2, triton, triton_state, empty_init, "Transam", "Triton L8.2 Pascal System", MACHINE_NOT_WORKING ) +//COMP( 1980, triton92, 0, 0, triton2, triton, triton_state, empty_init, "Transam", "Triton L9.2 Disk System", MACHINE_NOT_WORKING ) diff -Nru mame-0.250+dfsg.1/src/mame/msx/msx.cpp mame-0.251+dfsg.1/src/mame/msx/msx.cpp --- mame-0.250+dfsg.1/src/mame/msx/msx.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/msx/msx.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -26,9 +26,6 @@ ** ** ** Todo/known issues: -** - Get rid of trampolines. -** - Get rid of code duplication between msx_slot and msx_cart (eg, kanji roms, disk interfaces) -** - Use standard game controller slot interface for joystick and mouse ** - general: - Add support for kana lock ** - - Expansion slots not emulated ** - kanji: The direct rom dump from FS-A1FX shows that the kanji font roms are accessed slightly differently. Most diff -Nru mame-0.250+dfsg.1/src/mame/multitech/mpf1_88.cpp mame-0.251+dfsg.1/src/mame/multitech/mpf1_88.cpp --- mame-0.250+dfsg.1/src/mame/multitech/mpf1_88.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/multitech/mpf1_88.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,385 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/*************************************************************************** + + Multitech Micro-Professor I/88 + + TODO: + - IFM-I/88 interrupts, need documentation/schematic. + +***************************************************************************/ + +#include "emu.h" +#include "cpu/i86/i86.h" +#include "machine/ram.h" +#include "machine/timer.h" +#include "sound/spkrdev.h" +#include "video/hd44780.h" +#include "bus/centronics/ctronics.h" +#include "bus/generic/carts.h" +#include "bus/generic/slot.h" +#include "bus/isa/isa.h" +#include "bus/isa/cga.h" +#include "bus/isa/com.h" +#include "bus/isa/mda.h" +//#include "bus/mpf1/slot.h" +#include "imagedev/cassette.h" + +#include "emupal.h" +#include "screen.h" +#include "softlist_dev.h" +#include "speaker.h" + + +namespace { + +class mpf1_88_state : public driver_device +{ +public: + mpf1_88_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_ram(*this, "ram") + , m_speaker(*this, "speaker") + , m_cassette(*this, "cassette") + , m_key(*this, "KC%u", 0U) + , m_ctrl(*this, "CTRL") + , m_centronics(*this, "centronics") + , m_cent_data_out(*this, "cent_data_out") + , m_leds(*this, "led%u", 0U) + , m_centronics_busy(0) + { } + + void mpf1_88(machine_config &config); + + DECLARE_INPUT_CHANGED_MEMBER( trigger_res ); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + +private: + required_device m_maincpu; + required_device m_ram; + required_device m_speaker; + required_device m_cassette; + required_ioport_array<12> m_key; + required_ioport m_ctrl; + required_device m_centronics; + required_device m_cent_data_out; + output_finder<2> m_leds; + + TIMER_DEVICE_CALLBACK_MEMBER(check_halt_callback); + TIMER_DEVICE_CALLBACK_MEMBER(key_nmi); + + HD44780_PIXEL_UPDATE(lcd_pixel_update); + + void lcd_palette(palette_device &palette) const; + + void io_map(address_map &map); + void mem_map(address_map &map); + + uint8_t ipd_port_r(); + void opd_port1_w(uint8_t data); + void opd_port2_w(uint8_t data); + + uint16_t m_key_col = 0; + + int m_centronics_busy; + bool m_nmi_enable = false; +}; + + +void mpf1_88_state::mem_map(address_map &map) +{ + map.unmap_value_high(); + map(0xf4000, 0xf7fff).r("rom_2", FUNC(generic_slot_device::read_rom)); + map(0xf8000, 0xfbfff).r("rom_1", FUNC(generic_slot_device::read_rom)); + map(0xfc000, 0xfffff).rom().region("rom_0", 0); +} + +void mpf1_88_state::io_map(address_map &map) +{ + map.unmap_value_high(); + map(0x0160, 0x0160).w(FUNC(mpf1_88_state::opd_port2_w)); + map(0x0180, 0x0180).w(FUNC(mpf1_88_state::opd_port1_w)); + map(0x01a0, 0x01a1).w("lcdc", FUNC(hd44780_device::write)); + map(0x01a2, 0x01a3).r("lcdc", FUNC(hd44780_device::read)); + map(0x01c0, 0x01c0).r(FUNC(mpf1_88_state::ipd_port_r)); + map(0x01e0, 0x01e0).w(m_cent_data_out, FUNC(output_latch_device::write)); +} + + +INPUT_CHANGED_MEMBER( mpf1_88_state::trigger_res ) +{ + m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? CLEAR_LINE : ASSERT_LINE); +} + + +static INPUT_PORTS_START( mpf1_88 ) + PORT_START("KC0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v') + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b') + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("KC1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k') + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t') + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR('\\') PORT_CHAR('|') + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u') + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("KC2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c') + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q') + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y') + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("KC3") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l') + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f') + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*') + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("KC4") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x') + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w') + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j') + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("KC5") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s') + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("KC6") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+') + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_') + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d') + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z') + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h') + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("KC7") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"') + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e') + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n') + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("KC8") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}') + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p') + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a') + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g') + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("KC9") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('`') PORT_CHAR('~') + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m') + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r') + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i') + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("KC10") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o') + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END)) PORT_NAME("\xe2\x87\xa5 \xe2\x87\xa4") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^') + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("KC11") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT)) + PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("CTRL") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) + PORT_BIT( 0xdf, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("RESET") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F3) PORT_NAME("RESET") PORT_CHANGED_MEMBER(DEVICE_SELF, mpf1_88_state, trigger_res, 0) +INPUT_PORTS_END + + +uint8_t mpf1_88_state::ipd_port_r() +{ + uint8_t data = 0x3f; + + // bit 0 to 4, keyboard array input + for (int row = 0; row < 12; row++) + if (!BIT(m_key_col, row)) + data &= m_key[row]->read(); + + // bit 5, control key + data &= m_ctrl->read(); + + // bit 6, printer busy + data |= m_centronics_busy ? 0x40 : 0; + + // bit 7, tape in + data |= ((m_cassette)->input() > 0) ? 0x80 : 0; + + return data; +} + +void mpf1_88_state::opd_port1_w(uint8_t data) +{ + // bit 0-3, keyboard array output + m_key_col = (m_key_col & 0x00ff) | (data << 8); + + // bit 4, NMI enable */ + m_nmi_enable = BIT(data, 4); + + // bit 6, tape out (beep) + m_leds[0] = !BIT(data, 6); + m_speaker->level_w(BIT(data, 6)); + m_cassette->output(BIT(data, 6) ? 1.0 : -1.0); + + // bit 7, printer strobe + m_centronics->write_strobe(BIT(data, 7)); +} + +void mpf1_88_state::opd_port2_w(uint8_t data) +{ + // bit 0-7, keyboard array output + m_key_col = (m_key_col & 0xff00) | data; +} + + +HD44780_PIXEL_UPDATE(mpf1_88_state::lcd_pixel_update) +{ + if (line < 2 && pos < 20) + bitmap.pix(6 + line * (8 + 1) + y, 6 + pos * 6 + x) = state ? 1 : 2; +} + +void mpf1_88_state::lcd_palette(palette_device &palette) const +{ + palette.set_pen_color(0, rgb_t(138, 146, 148)); // background + palette.set_pen_color(1, rgb_t( 92, 83, 88)); // lcd pixel on + palette.set_pen_color(2, rgb_t(131, 136, 139)); // lcd pixel off +} + + +TIMER_DEVICE_CALLBACK_MEMBER(mpf1_88_state::check_halt_callback) +{ + // hold-LED; the red one, is turned on when the processor is halted + int led_halt = m_maincpu->state_int(I8086_HALT); + m_leds[1] = led_halt; +} + +TIMER_DEVICE_CALLBACK_MEMBER(mpf1_88_state::key_nmi) +{ + if (m_nmi_enable) + m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); +} + + +void mpf1_88_state::machine_start() +{ + m_leds.resolve(); + + m_maincpu->space(AS_PROGRAM).install_ram(0, m_ram->mask(), m_ram->pointer()); + + // register for state saving + save_item(NAME(m_nmi_enable)); +} + +void mpf1_88_state::machine_reset() +{ + m_nmi_enable = false; + + m_key_col = 0x00; +} + + +static void mpf1_88_isa8_cards(device_slot_interface &device) +{ + device.option_add("com", ISA8_COM); + device.option_add("cga", ISA8_CGA); + device.option_add("mda", ISA8_MDA); +} + + +void mpf1_88_state::mpf1_88(machine_config &config) +{ + I8088(config, m_maincpu, 14.318181_MHz_XTAL/3); + m_maincpu->set_addrmap(AS_PROGRAM, &mpf1_88_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &mpf1_88_state::io_map); + + TIMER(config, "halt_timer").configure_periodic(FUNC(mpf1_88_state::check_halt_callback), attotime::from_hz(1)); + + TIMER(config, "nmi_timer").configure_periodic(FUNC(mpf1_88_state::key_nmi), attotime::from_msec(15)); + + auto &screen = SCREEN(config, "screen", SCREEN_TYPE_LCD); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_size(132, 28); + screen.set_visarea_full(); + screen.set_screen_update("lcdc", FUNC(hd44780_device::screen_update)); + screen.set_palette("palette"); + + PALETTE(config, "palette", FUNC(mpf1_88_state::lcd_palette), 3); + + hd44780_device &lcdc(HD44780(config, "lcdc", 0)); + lcdc.set_lcd_size(2, 20); + lcdc.set_pixel_update_cb(FUNC(mpf1_88_state::lcd_pixel_update)); + lcdc.set_function_set_at_any_time(true); + + RAM(config, m_ram).set_default_size("8K").set_extra_options("2K,4K,6K,16K,24K"); + + CASSETTE(config, m_cassette); + m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED); + + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); + + CENTRONICS(config, m_centronics, centronics_devices, "printer"); + m_centronics->busy_handler().set([this](int state) { m_centronics_busy = state; }); + output_latch_device &latch(OUTPUT_LATCH(config, "cent_data_out")); + m_centronics->set_output_latch(latch); + + GENERIC_SOCKET(config, "rom_1", generic_linear_slot, "mpf1_rom", "bin,rom"); + GENERIC_SOCKET(config, "rom_2", generic_linear_slot, "mpf1_rom", "bin,rom"); + + SOFTWARE_LIST(config, "rom_ls").set_original("mpf1_rom").set_filter("I88"); + + // IFM-I/88 (Interface Module) + //mpf1_exp_device &exp(MPF1_EXP(config, "exp", 3.579545_MHz_XTAL/2, mpf1_88_exp_devices, nullptr)); + //exp.set_program_space(m_maincpu, AS_PROGRAM); + //exp.set_io_space(m_maincpu, AS_IO); + isa8_device &isa8(ISA8(config, "isa", 3.579545_MHz_XTAL/2)); + isa8.set_memspace(m_maincpu, AS_PROGRAM); + isa8.set_iospace(m_maincpu, AS_IO); + ISA8_SLOT(config, "isa1", 0, "isa", mpf1_88_isa8_cards, nullptr, false); + ISA8_SLOT(config, "isa2", 0, "isa", mpf1_88_isa8_cards, nullptr, false); + ISA8_SLOT(config, "isa3", 0, "isa", mpf1_88_isa8_cards, nullptr, false); +} + +} // anonymous namespace + + +ROM_START( mpf1_88 ) + ROM_REGION(0x4000, "rom_0", 0) + ROM_LOAD("mon88_v1.11.u18", 0x0000, 0x4000, CRC(caa200f3) SHA1(9dfdd618e4cf94b3d3ed97a41d2fb0bf2842b4de)) +ROM_END + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 1985, mpf1_88, 0, 0, mpf1_88, mpf1_88, mpf1_88_state, empty_init, "Multitech", "Micro-Professor I/88", 0 ) diff -Nru mame-0.250+dfsg.1/src/mame/namco/mappy.cpp mame-0.251+dfsg.1/src/mame/namco/mappy.cpp --- mame-0.250+dfsg.1/src/mame/namco/mappy.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/namco/mappy.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -776,48 +776,48 @@ PORT_DIPSETTING( 0x01, "Rank E-Auto" ) PORT_DIPSETTING( 0x00, "Rank F-Hard Auto" ) PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:5,6") - PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x20, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 1C_2C ) ) PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:7") - PORT_DIPSETTING( 0x40, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) // When Freeze is on, press P1 button 1 to skip levels - PORT_DIPNAME( 0x80, 0x80, "Freeze / Rack Test (Cheat)" ) PORT_CODE(KEYCODE_F1) PORT_TOGGLE PORT_DIPLOCATION("SW1:8") + PORT_DIPNAME( 0x80, 0x80, "Freeze / Rack Test (Cheat)" ) PORT_TOGGLE PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("DSW2") // 56XX #1 pins 38-41 multiplexed PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2,3") + PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 2C_3C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_6C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_7C ) ) - PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x01, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) PORT_DIPNAME( 0x38, 0x38, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:4,5,6") - PORT_DIPSETTING( 0x38, "30k & 100k Only" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x00) + PORT_DIPSETTING( 0x08, "30k Only" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x00) PORT_DIPSETTING( 0x30, "30k & 80k Only" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x00) - PORT_DIPSETTING( 0x28, "30k & 120k Only" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x00) PORT_DIPSETTING( 0x20, "30k, 80k & Every 80k" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x00) + PORT_DIPSETTING( 0x38, "30k & 100k Only" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x00) PORT_DIPSETTING( 0x18, "30k, 100k & Every 100k" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x00) + PORT_DIPSETTING( 0x28, "30k & 120k Only" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x00) PORT_DIPSETTING( 0x10, "30k, 120k & Every 120k" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x00) - PORT_DIPSETTING( 0x08, "30k Only" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x00) + PORT_DIPSETTING( 0x10, "30k Only" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x00) // Manual shows 100k only, Test Mode shows 30k which is what we use PORT_DIPSETTING( 0x38, "30k & 100k Only" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x00) + PORT_DIPSETTING( 0x20, "30k, 100k & Every 100k" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x00) PORT_DIPSETTING( 0x30, "30k & 120k Only" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x00) + PORT_DIPSETTING( 0x08, "40k Only" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x00) PORT_DIPSETTING( 0x28, "40k & 120k Only" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x00) - PORT_DIPSETTING( 0x20, "30k, 100k & Every 100k" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x00) PORT_DIPSETTING( 0x18, "40k, 120k & Every 120k" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x00) - PORT_DIPSETTING( 0x10, "30k Only" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x00) // Manual shows 100k only, Test Mode shows 30k which is what we use - PORT_DIPSETTING( 0x08, "40k Only" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x00) PORT_DIPSETTING( 0x00, DEF_STR( None ) ) PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:7,8") - PORT_DIPSETTING( 0xc0, "3" ) PORT_DIPSETTING( 0x80, "1" ) PORT_DIPSETTING( 0x40, "2" ) + PORT_DIPSETTING( 0xc0, "3" ) PORT_DIPSETTING( 0x00, "5" ) INPUT_PORTS_END @@ -829,30 +829,31 @@ PORT_START("DSW1") // ???? #1 pins ??-?? PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2,3") + PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 2C_3C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_6C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_7C ) ) - PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x01, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) PORT_DIPNAME( 0x38, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:4,5,6") - PORT_DIPSETTING( 0x30, "20k, 70k & Every 70k" ) PORT_CONDITION("DSW1",0xc0,NOTEQUALS,0x00) - PORT_DIPSETTING( 0x28, "30k, 100k & Every 80k" ) PORT_CONDITION("DSW1",0xc0,NOTEQUALS,0x00) PORT_DIPSETTING( 0x20, "20k & 70k Only" ) PORT_CONDITION("DSW1",0xc0,NOTEQUALS,0x00) + PORT_DIPSETTING( 0x30, "20k, 70k & Every 70k" ) PORT_CONDITION("DSW1",0xc0,NOTEQUALS,0x00) + PORT_DIPSETTING( 0x00, "30k Only" ) PORT_CONDITION("DSW1",0xc0,NOTEQUALS,0x00) PORT_DIPSETTING( 0x18, "30k & 70k Only" ) PORT_CONDITION("DSW1",0xc0,NOTEQUALS,0x00) PORT_DIPSETTING( 0x10, "30k & 80k Only" ) PORT_CONDITION("DSW1",0xc0,NOTEQUALS,0x00) + PORT_DIPSETTING( 0x28, "30k, 100k & Every 80k" ) PORT_CONDITION("DSW1",0xc0,NOTEQUALS,0x00) PORT_DIPSETTING( 0x08, "30k & 100k Only" ) PORT_CONDITION("DSW1",0xc0,NOTEQUALS,0x00) - PORT_DIPSETTING( 0x00, "30k Only" ) PORT_CONDITION("DSW1",0xc0,NOTEQUALS,0x00) - PORT_DIPSETTING( 0x30, "30k, 80k & Every 80k" ) PORT_CONDITION("DSW1",0xc0,EQUALS,0x00) - PORT_DIPSETTING( 0x28, "40k, 100k & Every 100k" ) PORT_CONDITION("DSW1",0xc0,EQUALS,0x00) + PORT_DIPSETTING( 0x08, "30k Only" ) PORT_CONDITION("DSW1",0xc0,EQUALS,0x00) + PORT_DIPSETTING( 0x00, "40k Only" ) PORT_CONDITION("DSW1",0xc0,EQUALS,0x00) PORT_DIPSETTING( 0x20, "30k & 80k Only" ) PORT_CONDITION("DSW1",0xc0,EQUALS,0x00) + PORT_DIPSETTING( 0x30, "30k, 80k & Every 80k" ) PORT_CONDITION("DSW1",0xc0,EQUALS,0x00) PORT_DIPSETTING( 0x18, "30k & 100k Only" ) PORT_CONDITION("DSW1",0xc0,EQUALS,0x00) PORT_DIPSETTING( 0x10, "40k & 120k Only" ) PORT_CONDITION("DSW1",0xc0,EQUALS,0x00) - PORT_DIPSETTING( 0x08, "30k Only" ) PORT_CONDITION("DSW1",0xc0,EQUALS,0x00) - PORT_DIPSETTING( 0x00, "40k Only" ) PORT_CONDITION("DSW1",0xc0,EQUALS,0x00) + PORT_DIPSETTING( 0x28, "40k, 100k & Every 100k" ) PORT_CONDITION("DSW1",0xc0,EQUALS,0x00) PORT_DIPSETTING( 0x38, DEF_STR( None ) ) + PORT_DIPNAME( 0xc0, 0x40, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:7,8") PORT_DIPSETTING( 0xc0, "1" ) PORT_DIPSETTING( 0x80, "2" ) @@ -861,10 +862,10 @@ PORT_START("DSW2") // ???? #1 pins ??-?? PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW2:1,2") - PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:3,4") PORT_DIPSETTING( 0x0c, "Rank A" ) PORT_DIPSETTING( 0x08, "Rank B" ) @@ -892,32 +893,32 @@ PORT_START("DSW1") // 56XX #1 pins 22-29 PORT_SERVICE_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW1:1" ) PORT_DIPNAME( 0x0e, 0x08, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:2,3,4") - PORT_DIPSETTING( 0x0e, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) ) - PORT_DIPSETTING( 0x0a, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x08, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0a, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0e, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) ) PORT_DIPNAME( 0x70, 0x40, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:5,6,7") - PORT_DIPSETTING( 0x70, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x60, DEF_STR( 1C_4C ) ) - PORT_DIPSETTING( 0x50, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x40, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x30, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x20, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x10, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x50, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x70, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x60, DEF_STR( 1C_4C ) ) PORT_DIPNAME( 0x80, 0x80, "Freeze" ) PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("DSW2") // 56XX #1 pins 38-41 multiplexed PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2") - PORT_DIPSETTING( 0x03, "3" ) PORT_DIPSETTING( 0x02, "1" ) PORT_DIPSETTING( 0x01, "2" ) + PORT_DIPSETTING( 0x03, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:3,4") PORT_DIPSETTING( 0x0c, "Rank A" ) @@ -925,16 +926,16 @@ PORT_DIPSETTING( 0x04, "Rank C" ) PORT_DIPSETTING( 0x00, "Rank D" ) PORT_DIPNAME( 0x10, 0x10, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:5") - PORT_DIPSETTING( 0x10, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) PORT_DIPNAME( 0x20, 0x20, DEF_STR( Level_Select ) ) PORT_DIPLOCATION("SW2:6") - PORT_DIPSETTING( 0x20, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:7,8") + PORT_DIPSETTING( 0x00, "10k, 50k & Every 50k" ) + PORT_DIPSETTING( 0x40, "10k & 30k Only" ) PORT_DIPSETTING( 0xc0, "10k Only" ) PORT_DIPSETTING( 0x80, DEF_STR( None ) ) - PORT_DIPSETTING( 0x40, "10k & 30k Only" ) - PORT_DIPSETTING( 0x00, "10k, 50k & Every 50k" ) INPUT_PORTS_END @@ -965,42 +966,42 @@ PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:7,8") - PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) ) PORT_START("DSW2") // 56XX #1 pins 38-41 multiplexed and interleaved PORT_DIPNAME( 0x11, 0x11, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:2,1") + PORT_DIPSETTING( 0x01, "1" ) // 1 on, 2 off PORT_DIPSETTING( 0x11, "3" ) PORT_DIPSETTING( 0x10, "4" ) // 2 on, 1 off - PORT_DIPSETTING( 0x01, "1" ) // 1 on, 2 off PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x62, 0x62, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:4,3,5") + PORT_DIPSETTING( 0x02, "20k & 80k Only" ) PORT_CONDITION("DSW2",0x01,NOTEQUALS,0x00) + PORT_DIPSETTING( 0x40, "20k, 80k & Every 80k" ) PORT_CONDITION("DSW2",0x01,NOTEQUALS,0x00) + PORT_DIPSETTING( 0x20, "30k Only" ) PORT_CONDITION("DSW2",0x01,NOTEQUALS,0x00) + PORT_DIPSETTING( 0x42, "30k & 60k Only" ) PORT_CONDITION("DSW2",0x01,NOTEQUALS,0x00) PORT_DIPSETTING( 0x62, "30k & 100k Only" ) PORT_CONDITION("DSW2",0x01,NOTEQUALS,0x00) PORT_DIPSETTING( 0x60, "30k & 100k Only" ) PORT_CONDITION("DSW2",0x01,NOTEQUALS,0x00) // repeated - PORT_DIPSETTING( 0x42, "30k & 60k Only" ) PORT_CONDITION("DSW2",0x01,NOTEQUALS,0x00) - PORT_DIPSETTING( 0x40, "20k, 80k & Every 80k" ) PORT_CONDITION("DSW2",0x01,NOTEQUALS,0x00) PORT_DIPSETTING( 0x22, "30k, 120k & Every 120k" ) PORT_CONDITION("DSW2",0x01,NOTEQUALS,0x00) - PORT_DIPSETTING( 0x20, "30k Only" ) PORT_CONDITION("DSW2",0x01,NOTEQUALS,0x00) - PORT_DIPSETTING( 0x02, "20k & 80k Only" ) PORT_CONDITION("DSW2",0x01,NOTEQUALS,0x00) + PORT_DIPSETTING( 0x22, "20k & 80k Only" ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_DIPSETTING( 0x02, "30k Only" ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_DIPSETTING( 0x40, "30k, 100k & Every 100k" ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) PORT_DIPSETTING( 0x62, "30k & 100k Only" ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) PORT_DIPSETTING( 0x60, "30k & 100k Only" ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) // repeated PORT_DIPSETTING( 0x42, "40k & 80k Only" ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) - PORT_DIPSETTING( 0x40, "30k, 100k & Every 100k" ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) PORT_DIPSETTING( 0x20, "100k Only" ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) - PORT_DIPSETTING( 0x22, "20k & 80k Only" ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) - PORT_DIPSETTING( 0x02, "30k Only" ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) PORT_DIPSETTING( 0x00, DEF_STR( None ) ) PORT_DIPNAME( 0x8c, 0x8c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:6,8,7") + PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x8c, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 2C_3C ) ) PORT_DIPSETTING( 0x88, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x84, DEF_STR( 1C_7C ) ) - PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_6C ) ) - PORT_DIPSETTING( 0x04, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x84, DEF_STR( 1C_7C ) ) INPUT_PORTS_END @@ -1032,13 +1033,13 @@ PORT_DIPSETTING( 0x01, "Rank G" ) PORT_DIPSETTING( 0x00, "Rank H" ) PORT_DIPNAME( 0x18, 0x18, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:4,5") + PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x18, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x10, DEF_STR( 1C_5C) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_7C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:6") - PORT_DIPSETTING( 0x20, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) PORT_DIPNAME( 0x40, 0x40, "Rack Test (Cheat)" ) PORT_CODE(KEYCODE_F1) PORT_DIPLOCATION("SW1:7") PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) @@ -1048,35 +1049,35 @@ PORT_START("DSW2") // 58XX #1 pins 38-41 multiplexed PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2,3") + PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 3C_2C ) ) PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 2C_3C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_6C ) ) - PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x02, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 3C_2C ) ) PORT_DIPNAME( 0x38, 0x38, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:4,5,6") - PORT_DIPSETTING( 0x38, "20k & 70k Only" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x80) - PORT_DIPSETTING( 0x30, "20k & 60k Only" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x80) - PORT_DIPSETTING( 0x28, "20k & 80k Only" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x80) - PORT_DIPSETTING( 0x20, "30k & 100k Only" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x80) PORT_DIPSETTING( 0x18, "20k Only" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x80) + PORT_DIPSETTING( 0x30, "20k & 60k Only" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x80) + PORT_DIPSETTING( 0x38, "20k & 70k Only" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x80) PORT_DIPSETTING( 0x10, "20k, 70k & Every 70k" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x80) + PORT_DIPSETTING( 0x28, "20k & 80k Only" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x80) PORT_DIPSETTING( 0x08, "20k, 80k & Every 80k" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x80) + PORT_DIPSETTING( 0x20, "30k & 100k Only" ) PORT_CONDITION("DSW2",0xc0,NOTEQUALS,0x80) + PORT_DIPSETTING( 0x20, "30k Only" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x80) PORT_DIPSETTING( 0x38, "30k & 80k Only" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x80) PORT_DIPSETTING( 0x30, "30k & 100k Only" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x80) + PORT_DIPSETTING( 0x10, "30k, 100k & Every 100k" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x80) PORT_DIPSETTING( 0x28, "30k & 120k Only" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x80) - PORT_DIPSETTING( 0x20, "30k Only" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x80) PORT_DIPSETTING( 0x18, "40k Only" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x80) - PORT_DIPSETTING( 0x10, "30k, 100k & Every 100k" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x80) PORT_DIPSETTING( 0x08, "40k, 120k & Every 120k" ) PORT_CONDITION("DSW2",0xc0,EQUALS,0x80) PORT_DIPSETTING( 0x00, DEF_STR( None ) ) PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:7,8") - PORT_DIPSETTING( 0xc0, "3" ) - PORT_DIPSETTING( 0x80, "5" ) PORT_DIPSETTING( 0x40, "1" ) PORT_DIPSETTING( 0x00, "2" ) + PORT_DIPSETTING( 0xc0, "3" ) + PORT_DIPSETTING( 0x80, "5" ) INPUT_PORTS_END @@ -1094,24 +1095,24 @@ PORT_START("DSW1") // 56XX #1 pins 22-29 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2") - PORT_DIPSETTING( 0x03, "3" ) - PORT_DIPSETTING( 0x02, "2" ) PORT_DIPSETTING( 0x01, "1" ) + PORT_DIPSETTING( 0x02, "2" ) + PORT_DIPSETTING( 0x03, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4") - PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) PORT_DIPNAME( 0x10, 0x10, "Freeze" ) PORT_DIPLOCATION("SW1:5") PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_SERVICE_DIPLOC( 0x20, IP_ACTIVE_LOW, "SW1:6" ) PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:7,8") - PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x40, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) PORT_START("DSW2") // 56XX #1 pins 38-41 multiplexed PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW2:1" ) @@ -1186,10 +1187,10 @@ PORT_START("DSW1") // 56XX #1 pins 22-29 PORT_SERVICE_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW1:1" ) PORT_DIPNAME( 0x06, 0x06, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:2,3") + PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:4") PORT_DIPSETTING( 0x08, "3" ) PORT_DIPSETTING( 0x00, "5" ) @@ -1202,8 +1203,8 @@ PORT_DIPSETTING( 0x20, "30k and every 70k" ) PORT_DIPSETTING( 0x00, "20k 70k" ) PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:8") - PORT_DIPSETTING( 0x80, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) PORT_START("DSW2") // 56XX #1 pins 38-41 multiplexed PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW2:1" ) diff -Nru mame-0.250+dfsg.1/src/mame/namco/namcos1.cpp mame-0.251+dfsg.1/src/mame/namco/namcos1.cpp --- mame-0.250+dfsg.1/src/mame/namco/namcos1.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/namco/namcos1.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ Namco System 1 -Shadow Land / Yokai Douchuuki (c) 1987 Namco +Shadow Land / Youkai Douchuuki (c) 1987 Namco Dragon Spirit (c) 1987 Namco Blazer (c) 1987 Namco Quester (c) 1987 Namco @@ -301,7 +301,7 @@ Date Name Key Screen ----- ------------------------------------- ---- ------ - 4/87 Yokai Douchuuki / Shadowland NONE H + 4/87 Youkai Douchuuki / Shadowland NONE H 6/87 Dragon Spirit (old version) 136 V ??/87 Dragon Spirit (new version) 136 V 7/87 Blazer 144 V @@ -2887,8 +2887,8 @@ GAME( 1987, shadowld, 0, ns1, shadowld, namcos1_state, init_shadowld, ROT180, "Namco", "Shadowland (YD3)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, youkaidk2, shadowld, ns1, shadowld, namcos1_state, init_shadowld, ROT180, "Namco", "Yokai Douchuuki (Japan, new version (YD2, Rev B))", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, youkaidk1, shadowld, ns1, shadowld, namcos1_state, init_shadowld, ROT180, "Namco", "Yokai Douchuuki (Japan, old version (YD1))", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, youkaidk2, shadowld, ns1, shadowld, namcos1_state, init_shadowld, ROT180, "Namco", "Youkai Douchuuki (Japan, new version (YD2, Rev B))", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, youkaidk1, shadowld, ns1, shadowld, namcos1_state, init_shadowld, ROT180, "Namco", "Youkai Douchuuki (Japan, old version (YD1))", MACHINE_SUPPORTS_SAVE ) GAME( 1987, dspirit, 0, ns1, dspirit, namcos1_state, init_dspirit, ROT90, "Namco", "Dragon Spirit (new version (DS3))", MACHINE_SUPPORTS_SAVE ) GAME( 1987, dspirit2, dspirit, ns1, dspirit, namcos1_state, init_dspirit, ROT90, "Namco", "Dragon Spirit (DS2)", MACHINE_SUPPORTS_SAVE ) /* Atari had rights to US market */ GAME( 1987, dspirit1, dspirit, ns1, dspirit, namcos1_state, init_dspirit, ROT90, "Namco", "Dragon Spirit (old version (DS1))", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/namco/namcos22.cpp mame-0.251+dfsg.1/src/mame/namco/namcos22.cpp --- mame-0.250+dfsg.1/src/mame/namco/namcos22.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/namco/namcos22.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -25,6 +25,7 @@ the MOTHER PCB at J2 Pin 7 /TXD - tokyowar garbage tile at right edge in attract mode. It's part of the cabinet link message, maybe BTANB? - texture u/v mapping is often 1 pixel off, resulting in many glitch lines/gaps between textures +- improve vertex lighting (is it phong shading?) - global offset is wrong in non-super22 testmode video test - acedrive/victlap testmode video test flickers - ss22 testmode video test screen#04 translucent polygon should be higher priority than sprite @@ -38,17 +39,6 @@ + timecris stage 2-1 final section, steel beam appears through plank + cybrcycc speed dial should be more to the left + most of it is zsort related, there's plenty more, but need clearly visible cases with PCB evidence -- improve ss22 lighting: - + acedrive/victlap sparks - + adillor title logo - + alpinr2b spinning yellow best times in attract mode - + alpinr2b mountains in selection screen - + propcycl score/time - + propcycl Solitar pillars - + ridgerac car when entering highscore - + ridgerac waving flag - + ridgerac rotating sign before 2nd tunnel - + timecris Sherudo's knives - improve ss22 spot, used in dirtdash, alpines highscore entry, testmode screen#14 - not understood well: + does not work at all in alpines (uses spot_factor, not spotram, should show a spotlight with darkened background) + should be done before global fade, see dirtdash when starting at jungle level @@ -5288,10 +5278,10 @@ ROM_START( alpinr2b ) ROM_REGION( 0x800000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "ars2ver-b.2", 0x000003, 0x200000, CRC(ed977f83) SHA1(26c57cdfc15f799a999ee22f141e1c0cabfc91dc) ) - ROM_LOAD32_BYTE( "ars2ver-b.3", 0x000001, 0x200000, CRC(8e7a9983) SHA1(34c82e5f080efe04d6b77a77a8391cb48b69c1af) ) - ROM_LOAD32_BYTE( "ars2ver-b.4", 0x000002, 0x200000, CRC(610e49c2) SHA1(433c6d2216551bac31584306f748af1c912c3b07) ) - ROM_LOAD32_BYTE( "ars2ver-b.5", 0x000000, 0x200000, CRC(7f3517b0) SHA1(3e6ba1a51bf235f40f933aae1f00638b88bba522) ) + ROM_LOAD32_BYTE( "ars2ver-b.2", 0x000003, 0x200000, CRC(ed977f83) SHA1(26c57cdfc15f799a999ee22f141e1c0cabfc91dc) ) // 2nd half empty + ROM_LOAD32_BYTE( "ars2ver-b.3", 0x000001, 0x200000, CRC(8e7a9983) SHA1(34c82e5f080efe04d6b77a77a8391cb48b69c1af) ) // " + ROM_LOAD32_BYTE( "ars2ver-b.4", 0x000002, 0x200000, CRC(610e49c2) SHA1(433c6d2216551bac31584306f748af1c912c3b07) ) // " + ROM_LOAD32_BYTE( "ars2ver-b.5", 0x000000, 0x200000, CRC(7f3517b0) SHA1(3e6ba1a51bf235f40f933aae1f00638b88bba522) ) // " ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) @@ -5341,10 +5331,10 @@ ROM_START( alpinr2a ) ROM_REGION( 0x800000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "ars2ver-a.2", 0x000003, 0x200000, CRC(b07b15a4) SHA1(ea3b2d7b4ef4ccf3aafeef7e7eac92e8d446f4e7) ) - ROM_LOAD32_BYTE( "ars2ver-a.3", 0x000002, 0x200000, CRC(90a92e40) SHA1(bf8083256e56e7e33e61b4cdaf9fd03dabfb36ba) ) - ROM_LOAD32_BYTE( "ars2ver-a.4", 0x000001, 0x200000, CRC(9e9d771d) SHA1(6fb983e3f4f8233544667b1bbf87864e4fb8698c) ) - ROM_LOAD32_BYTE( "ars2ver-a.5", 0x000000, 0x200000, CRC(e93c7771) SHA1(305f35488a55be1b845702df972bba8334c0726c) ) + ROM_LOAD32_BYTE( "ars2ver-a.2", 0x000003, 0x200000, CRC(b07b15a4) SHA1(ea3b2d7b4ef4ccf3aafeef7e7eac92e8d446f4e7) ) // 2nd half empty + ROM_LOAD32_BYTE( "ars2ver-a.3", 0x000002, 0x200000, CRC(90a92e40) SHA1(bf8083256e56e7e33e61b4cdaf9fd03dabfb36ba) ) // " + ROM_LOAD32_BYTE( "ars2ver-a.4", 0x000001, 0x200000, CRC(9e9d771d) SHA1(6fb983e3f4f8233544667b1bbf87864e4fb8698c) ) // " + ROM_LOAD32_BYTE( "ars2ver-a.5", 0x000000, 0x200000, CRC(e93c7771) SHA1(305f35488a55be1b845702df972bba8334c0726c) ) // " ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) diff -Nru mame-0.250+dfsg.1/src/mame/namco/namcos22_v.cpp mame-0.251+dfsg.1/src/mame/namco/namcos22_v.cpp --- mame-0.250+dfsg.1/src/mame/namco/namcos22_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/namco/namcos22_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -786,7 +786,13 @@ // transform normal vector transform_normal(&nx, &ny, &nz, m); - float dotproduct = nx*m_camera_lx + ny*m_camera_ly + nz*m_camera_lz; + + float cx = m_camera_lx; + float cy = m_camera_ly; + float cz = m_camera_lz; + transform_normal(&cx, &cy, &cz, m_viewmatrix); + + float dotproduct = nx*cx + ny*cy + nz*cz; if (dotproduct < 0.0f) dotproduct = 0.0f; @@ -797,6 +803,23 @@ void namcos22_state::draw_direct_poly(const u16 *src) { + /** + * master DSP can write directly to render device via port 0xc. + * This is used for "direct drawn" polygons, and "direct draw from point rom" + * feature - both opcodes exist in Ridge Racer's display-list processing + * + * record format: + * header (3 words) + * polyshift + * color + * flags + * + * per-vertex data (4*6 words) + * u,v + * sx,sy + * intensity;z.exponent + * z.mantissa + */ if (machine().video().skip_this_frame()) return; @@ -900,41 +923,41 @@ node->data.quad.vr = -640; } -/** - * @brief render a single quad - * - * @param flags - * 00-1.----.01-0.001- ? (always set/clear) - * --x-.----.----.---- ? - * ----.xx--.----.---- cz table - * ----.--xx.----.---- representative z algorithm? - * ----.----.--x-.---- backface cull enable - * ----.----.----.---x lighting related? - * - * 1163 // sky - * 1262 // score (front) - * 1242 // score (hinge) - * 1243 // ? - * 1063 // n/a - * 1243 // various (2-sided?) - * 1263 // everything else (1-sided?) - * 1663 // ? - * - * @param color - * xxxxxxxx -------- -------- flat shading factor - * -------- x------- -------- fog enable - * -------- -xxxxxxx -------- palette select - * -------- -------- xxxxxxxx unused? - * - * @param polyshift - * 0x1fbd0 - sky+sea - * 0x0c350 - mountains - * 0x09c40 - boats, surf, road, buildings - * 0x07350 - guardrail - * 0x061a8 - red car - */ void namcos22_state::blit_single_quad(u32 color, u32 addr, float m[4][4], int polyshift, int flags, int packetformat) { + /** + * @brief render a single quad + * + * @param flags + * 00-1.----.01-0.001- ? (always set/clear) + * --x-.----.----.---- ? + * ----.xx--.----.---- cz table + * ----.--xx.----.---- representative z algorithm? + * ----.----.--x-.---- backface cull enable + * ----.----.----.---x lighting related? + * + * 1163 // sky + * 1262 // score (front) + * 1242 // score (hinge) + * 1243 // ? + * 1063 // n/a + * 1243 // various (2-sided?) + * 1263 // everything else (1-sided?) + * 1663 // ? + * + * @param color + * xxxxxxxx -------- -------- flat shading factor + * -------- x------- -------- fog enable + * -------- -xxxxxxx -------- palette select + * -------- -------- xxxxxxxx unused? + * + * @param polyshift + * 0x1fbd0 - sky+sea + * 0x0c350 - mountains + * 0x09c40 - boats, surf, road, buildings + * 0x07350 - guardrail + * 0x061a8 - red car + */ namcos22_polyvertex v[4]; for (int i = 0; i < 4; i++) @@ -1032,22 +1055,15 @@ v[i].u = point_read(0 + i * 2 + addr); v[i].v = point_read(1 + i * 2 + addr); - if (m_LitSurfaceCount) + if (m_LitSurfaceCount > 0) { // lighting (prelim) - bri = m_LitSurfaceInfo[m_LitSurfaceIndex % m_LitSurfaceCount]; + int index = m_LitSurfaceIndex++; + if (m_LitSurfaceCount > 4) + index >>= 2; + index %= m_LitSurfaceCount; - if (m_SurfaceNormalFormat == 0x6666) - { - if (i == 3) - m_LitSurfaceIndex++; - } - else if (m_SurfaceNormalFormat == 0x4000) - { - m_LitSurfaceIndex++; - } - else - logerror("blit_single_quad:unknown normal format: 0x%x\n", m_SurfaceNormalFormat); + bri = m_LitSurfaceInfo[index]; } else if (packetformat & 0x40) { @@ -1096,7 +1112,6 @@ void namcos22_state::blit_quads(int addr, int len, float m[4][4]) { - //int additionalnormals = 0; int finish = addr + len; while (addr < finish) @@ -1153,8 +1168,20 @@ 000000 000000 007fff // normal vector 000000 000000 007fff // normal vector 000000 000000 007fff // normal vector + + used in: + - acedrive/victlap sparks + - adillor title logo + - alpinr2b mountains in selection screen + - alpinr2b spinning yellow best times in attract mode + - alpinr2b highscore entry letters + - propcycl score/time + - propcycl Solitar pillars + - ridgerac car when entering highscore + - ridgerac waving flag + - ridgerac rotating sign before 2nd tunnel + - timecris Sherudo's knives */ - //additionalnormals = point_read(addr+2); m_SurfaceNormalFormat = point_read(addr + 3); m_LitSurfaceCount = 0; m_LitSurfaceIndex = 0; @@ -1177,6 +1204,12 @@ return; } addr += packetlength; + + if (packetformat & 0x800000 && addr != finish) + { + logerror("blit_quads unexpected end: addr=0x%06x\n", addr); + return; + } } } @@ -1227,35 +1260,6 @@ } -/** - * master DSP can write directly to render device via port 0xc. - * This is used for "direct drawn" polygons, and "direct draw from point rom" - * feature - both opcodes exist in Ridge Racer's display-list processing - * - * record format: - * header (3 words) - * polyshift - * color - * flags - * - * per-vertex data (4*6 words) - * u,v - * sx,sy - * intensity;z.exponent - * z.mantissa - * - * master DSP can specify 3d objects indirectly (along with view transforms), - * via the "transmit" PDP opcode. the "render device" sends quad data to the slave DSP - * viewspace clipping and projection - * - * most "3d object" references are 0x45 and greater. references less than 0x45 are "special" - * commands, using a similar point rom format. the point rom header may point to point ram. - * - * slave DSP reads records via port 4 - * its primary purpose is applying lighting calculations - * the slave DSP forwards draw commands to a "draw device" - */ - /*******************************************************************************/ void namcos22_state::slavesim_handle_bb0003(const s32 *src) @@ -1323,7 +1327,6 @@ m_viewmatrix[2][2] = dspfixed_to_nativefloat(src[0x14]); matrix3d_apply_reflection(m_viewmatrix); - transform_normal(&m_camera_lx, &m_camera_ly, &m_camera_lz, m_viewmatrix); } void namcos22_state::slavesim_handle_200002(const s32 *src, int code) @@ -1422,6 +1425,18 @@ void namcos22_state::simulate_slavedsp() { + /** + * master DSP can specify 3d objects indirectly (along with view transforms), + * via the "transmit" PDP opcode. the "render device" sends quad data to the slave DSP + * viewspace clipping and projection + * + * most "3d object" references are 0x45 and greater. references less than 0x45 are "special" + * commands, using a similar point rom format. the point rom header may point to point ram. + * + * slave DSP reads records via port 4 + * its primary purpose is applying lighting calculations + * the slave DSP forwards draw commands to a "draw device" + */ const s32 *src = 0x300 + (s32 *)m_polygonram.target(); if (m_is_ss22) @@ -2387,38 +2402,38 @@ if (m_is_ss22) { -/* - 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 14 18 1c -00824000: ffffff00 00000000 0000007f 00ff006f fe00eded 0f700000 0000037f 00010007 // alpine surfer -00824000: ffffff00 00000000 0000007f 00ff0000 1000ff00 0f000000 00ff007f 00010007 // time crisis -00824000: ffffff00 00000000 1830407f 00800000 0000007f 0f000000 0000037f 00010007 // trans sprite -00824000: ffffff00 00000000 3040307f 00000000 0080007f 0f000000 0000037f 00010007 // trans poly -00824000: ffffff00 00000000 1800187f 00800000 0080007f 0f000000 0000037f 00010007 // trans poly(2) -00824000: ffffff00 00000000 1800187f 00000000 0000007f 0f800000 0000037f 00010007 // trans text - - 00,01,02 polygon fade rgb - 03 - 04 - 05,06,07 world fog rgb - 08,09,0a background color - 0b - 0c - 0d,0e spot factor - 0f polygon alpha color mask - 10 polygon alpha pen mask - 11 global polygon alpha factor - 12,13 textlayer alpha pen comparison - 14 textlayer alpha pen mask? - 15 textlayer alpha factor - 16,17,18 global fade rgb - 19 global fade factor - 1a fade target flags - 1b textlayer palette base - 1c - 1d - 1e - 1f layer enable -*/ + /* + 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 14 18 1c + 00824000: ffffff00 00000000 0000007f 00ff006f fe00eded 0f700000 0000037f 00010007 // alpine surfer + 00824000: ffffff00 00000000 0000007f 00ff0000 1000ff00 0f000000 00ff007f 00010007 // time crisis + 00824000: ffffff00 00000000 1830407f 00800000 0000007f 0f000000 0000037f 00010007 // trans sprite + 00824000: ffffff00 00000000 3040307f 00000000 0080007f 0f000000 0000037f 00010007 // trans poly + 00824000: ffffff00 00000000 1800187f 00800000 0080007f 0f000000 0000037f 00010007 // trans poly(2) + 00824000: ffffff00 00000000 1800187f 00000000 0000007f 0f800000 0000037f 00010007 // trans text + + 00,01,02 polygon fade rgb + 03 + 04 + 05,06,07 world fog rgb + 08,09,0a background color + 0b + 0c + 0d,0e spot factor + 0f polygon alpha color mask + 10 polygon alpha pen mask + 11 global polygon alpha factor + 12,13 textlayer alpha pen comparison + 14 textlayer alpha pen mask? + 15 textlayer alpha factor + 16,17,18 global fade rgb + 19 global fade factor + 1a fade target flags + 1b textlayer palette base + 1c + 1d + 1e + 1f layer enable + */ m_poly_fade_r = nthbyte(m_mixer, 0x00); m_poly_fade_g = nthbyte(m_mixer, 0x01); m_poly_fade_b = nthbyte(m_mixer, 0x02); @@ -2440,34 +2455,34 @@ } else { -/* -90020000: 4f030000 7f00007f 4d4d4d42 0c00c0c0 -90020010: c0010001 00010000 00000000 00000000 -90020080: 00010101 01010102 00000000 00000000 -900200c0: 00000000 00000000 00000000 03000000 -90020100: fff35000 00000000 00000000 00000000 -90020180: ff713700 00000000 00000000 00000000 -90020200: ff100000 00000000 00000000 00000000 - - 00,01 display flags - 02 - 03 - 04 bgcolor palette base? - 05 - 06 - 07 textlayer palette base? - 08,09,0a textlayer pen c shadow rgb - 0b,0c,0d textlayer pen d shadow rgb - 0e,0f,10 textlayer pen e shadow rgb - 11,12 global fade factor red - 13,14 global fade factor green - 15,16 global fade factor blue - 80-87 fog color mask? - 100,180,200 fog rgb 0 - 101,181,201 fog rgb 1 - 102,182,202 fog rgb 2 - 103,183,203 fog rgb 3 -*/ + /* + 90020000: 4f030000 7f00007f 4d4d4d42 0c00c0c0 + 90020010: c0010001 00010000 00000000 00000000 + 90020080: 00010101 01010102 00000000 00000000 + 900200c0: 00000000 00000000 00000000 03000000 + 90020100: fff35000 00000000 00000000 00000000 + 90020180: ff713700 00000000 00000000 00000000 + 90020200: ff100000 00000000 00000000 00000000 + + 00,01 display flags + 02 + 03 + 04 bgcolor palette base? + 05 + 06 + 07 textlayer palette base? + 08,09,0a textlayer pen c shadow rgb + 0b,0c,0d textlayer pen d shadow rgb + 0e,0f,10 textlayer pen e shadow rgb + 11,12 global fade factor red + 13,14 global fade factor green + 15,16 global fade factor blue + 80-87 fog color mask? + 100,180,200 fog rgb 0 + 101,181,201 fog rgb 1 + 102,182,202 fog rgb 2 + 103,183,203 fog rgb 3 + */ m_mixer_flags = nthbyte(m_mixer, 0x00) << 8 | nthbyte(m_mixer, 0x01); m_bg_palbase = nthbyte(m_mixer, 0x04) << 8 & 0x7f00; m_text_palbase = nthbyte(m_mixer, 0x07) << 8 & 0x7f00; diff -Nru mame-0.250+dfsg.1/src/mame/namco/tceptor.cpp mame-0.251+dfsg.1/src/mame/namco/tceptor.cpp --- mame-0.250+dfsg.1/src/mame/namco/tceptor.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/namco/tceptor.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -126,11 +126,11 @@ map(0x0000, 0x17ff).ram(); map(0x1800, 0x1bff).ram().w(FUNC(tceptor_state::tceptor_tile_ram_w)).share("tile_ram"); map(0x1c00, 0x1fff).ram().w(FUNC(tceptor_state::tceptor_tile_attr_w)).share("tile_attr"); - map(0x2000, 0x3fff).ram().w(FUNC(tceptor_state::tceptor_bg_ram_w)).share("bg_ram"); // background (VIEW RAM) + map(0x2000, 0x3fff).ram().w(FUNC(tceptor_state::tceptor_bg_ram_w)).share("bg_ram"); // background (VIEW RAM) map(0x4000, 0x43ff).rw(m_cus30, FUNC(namco_cus30_device::namcos1_cus30_r), FUNC(namco_cus30_device::namcos1_cus30_w)); map(0x4800, 0x4800).w(FUNC(tceptor_state::tceptor2_shutter_w)); map(0x4f00, 0x4f07).rw("adc", FUNC(adc0808_device::data_r), FUNC(adc0808_device::address_offset_start_w)); - map(0x5000, 0x5006).w(FUNC(tceptor_state::tceptor_bg_scroll_w)); // bg scroll + map(0x5000, 0x5006).w(FUNC(tceptor_state::tceptor_bg_scroll_w)); map(0x6000, 0x7fff).ram().share("m68k_shared_ram"); // COM RAM map(0x8000, 0x8000).w(FUNC(tceptor_state::m6809_irq_disable_w)); map(0x8800, 0x8800).w(FUNC(tceptor_state::m6809_irq_enable_w)); @@ -156,20 +156,20 @@ map(0x0000, 0x00ff).ram().share("share2"); map(0x0100, 0x01ff).ram(); map(0x4000, 0x4000).w("dac", FUNC(dac_byte_interface::data_w)); - map(0x5000, 0x5000).nopw(); // voice ctrl?? + map(0x5000, 0x5000).nopw(); // voice ctrl?? map(0x8000, 0xffff).rom(); } void tceptor_state::m68k_map(address_map &map) { - map(0x000000, 0x00ffff).rom(); // M68K ERROR 1 - map(0x100000, 0x10ffff).rom(); // not sure - map(0x200000, 0x203fff).ram(); // M68K ERROR 0 + map(0x000000, 0x00ffff).rom(); // M68K ERROR 1 + map(0x100000, 0x10ffff).rom(); // not sure + map(0x200000, 0x203fff).ram(); // M68K ERROR 0 map(0x300000, 0x300001).nopw(); map(0x400000, 0x4001ff).writeonly().share("sprite_ram"); map(0x500000, 0x51ffff).w(m_c45_road, FUNC(namco_c45_road_device::write)); - map(0x600000, 0x600001).w(FUNC(tceptor_state::m68k_irq_enable_w)); // not sure + map(0x600000, 0x600001).w(FUNC(tceptor_state::m68k_irq_enable_w)); // not sure map(0x700000, 0x703fff).rw(FUNC(tceptor_state::m68k_shared_r), FUNC(tceptor_state::m68k_shared_w)).umask16(0x00ff); } @@ -190,7 +190,7 @@ map(0x8800, 0x8800).w(FUNC(tceptor_state::mcu_irq_enable_w)); map(0x8000, 0xbfff).rom(); map(0xc000, 0xc7ff).ram(); - map(0xc800, 0xdfff).ram().share("nvram"); // Battery Backup + map(0xc800, 0xdfff).ram().share("nvram"); // Battery Backup map(0xf000, 0xffff).rom(); } @@ -199,7 +199,7 @@ /*******************************************************************/ static INPUT_PORTS_START( tceptor ) - PORT_START("DSW1") /* DSW 1 */ + PORT_START("DSW1") // DSW 1 PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) ) PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) @@ -222,7 +222,7 @@ PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("DSW2") /* DSW 2 */ + PORT_START("DSW2") // DSW 2 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x02, "A" ) PORT_DIPSETTING( 0x03, "B" ) @@ -230,35 +230,35 @@ PORT_DIPSETTING( 0x00, "D" ) PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("BUTTONS") /* Memory Mapped Port */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) // shot - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) // bomb - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) // shot - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) // bomb + PORT_START("BUTTONS") // Memory Mapped Port + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) // shot + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) // bomb + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) // shot + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) // bomb PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("SERVICE") /* Memory Mapped Port */ + PORT_START("SERVICE") // Memory Mapped Port PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_SERVICE( 0x04, IP_ACTIVE_LOW ) // TEST SW + PORT_SERVICE( 0x04, IP_ACTIVE_LOW ) // TEST SW PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("PEDAL") /* ADC0809 - 8 CHANNEL ANALOG - CHANNEL 1 */ + PORT_START("PEDAL") // ADC0809 - 8 CHANNEL ANALOG - CHANNEL 1 PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00,0xd6) PORT_SENSITIVITY(100) PORT_KEYDELTA(16) PORT_CODE_INC(KEYCODE_Z) - PORT_START("STICKX") /* ADC0809 - 8 CHANNEL ANALOG - CHANNEL 2 */ - PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_MINMAX(0x00,0xfe) PORT_SENSITIVITY(100) PORT_KEYDELTA(16) + PORT_START("STICKX") // ADC0809 - 8 CHANNEL ANALOG - CHANNEL 2 + PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_MINMAX(0x00,0xfe) PORT_SENSITIVITY(100) PORT_KEYDELTA(16) - PORT_START("STICKY") /* ADC08090 - 8 CHANNEL ANALOG - CHANNEL 3 */ - PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(0x00,0xfe) PORT_SENSITIVITY(100) PORT_KEYDELTA(16) + PORT_START("STICKY") // ADC08090 - 8 CHANNEL ANALOG - CHANNEL 3 + PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(0x00,0xfe) PORT_SENSITIVITY(100) PORT_KEYDELTA(16) INPUT_PORTS_END static INPUT_PORTS_START( tceptor2 ) PORT_INCLUDE( tceptor ) PORT_MODIFY("DSW2") - PORT_DIPNAME( 0x04, 0x04, "Mode" ) + PORT_DIPNAME( 0x04, 0x00, "Mode" ) PORT_DIPSETTING( 0x00, "2D" ) PORT_DIPSETTING( 0x04, "3D" ) PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -314,7 +314,7 @@ void tceptor_state::tceptor(machine_config &config) { /* basic machine hardware */ - M6809(config, m_maincpu, XTAL(49'152'000)/32); + MC6809E(config, m_maincpu, XTAL(49'152'000)/32); m_maincpu->set_addrmap(AS_PROGRAM, &tceptor_state::m6809_map); M65C02(config, m_audiocpu[0], XTAL(49'152'000)/24); diff -Nru mame-0.250+dfsg.1/src/mame/namco/tceptor_v.cpp mame-0.251+dfsg.1/src/mame/namco/tceptor_v.cpp --- mame-0.250+dfsg.1/src/mame/namco/tceptor_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/namco/tceptor_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -321,8 +321,8 @@ 6*8, 6*8+1, 6*8+2, 6*8+3, 7*8, 7*8+1, 7*8+2, 7*8+3 }, { - 0*2*32, 1*2*32, 2*2*32, 3*2*32, 4*2*32, 5*2*32, 6*2*32, 7*2*32, - 8*2*32, 9*2*32, 10*2*32, 11*2*32, 12*2*32, 13*2*32, 14*2*32, 15*2*32, + 0*2*32, 1*2*32, 2*2*32, 3*2*32, 4*2*32, 5*2*32, 6*2*32, 7*2*32, + 8*2*32, 9*2*32, 10*2*32, 11*2*32, 12*2*32, 13*2*32, 14*2*32, 15*2*32, 16*2*32, 17*2*32, 18*2*32, 19*2*32, 20*2*32, 21*2*32, 22*2*32, 23*2*32, 24*2*32, 25*2*32, 26*2*32, 27*2*32, 28*2*32, 29*2*32, 30*2*32, 31*2*32 }, diff -Nru mame-0.250+dfsg.1/src/mame/namco/ygv608.cpp mame-0.251+dfsg.1/src/mame/namco/ygv608.cpp --- mame-0.250+dfsg.1/src/mame/namco/ygv608.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/namco/ygv608.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -251,7 +251,6 @@ // we use decimals here to match documentation void ygv608_device::regs_map(address_map &map) { - // address pointers map(0, 0).rw(FUNC(ygv608_device::pattern_name_table_y_r), FUNC(ygv608_device::pattern_name_table_y_w)); map(1, 1).rw(FUNC(ygv608_device::pattern_name_table_x_r), FUNC(ygv608_device::pattern_name_table_x_w)); @@ -315,101 +314,101 @@ // ygv608_device - constructor //------------------------------------------------- -ygv608_device::ygv608_device( const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock ) - : device_t(mconfig, YGV608, tag, owner, clock), - device_gfx_interface(mconfig, *this, gfx_ygv608, DEVICE_SELF), - device_memory_interface(mconfig, *this), - device_palette_interface(mconfig, *this), - device_video_interface(mconfig, *this), - m_io_space_config("io", ENDIANNESS_BIG, 8, 6, 0, address_map_constructor(FUNC(ygv608_device::regs_map), this)), - m_namcond1_gfxbank(0), - m_tilemap_A(nullptr), - m_tilemap_B(nullptr), - m_work_bitmap(0), - m_bits16(0), - m_page_x(0), - m_page_y(0), - m_pny_shift(0), - m_na8_mask(0), - m_col_shift(0), - m_base_y_shift(0), - m_screen_resize(false), - m_tilemap_resize(false), - m_color_state_r(0), - m_color_state_w(0), - m_p0_state(0), - m_pattern_name_base_r(0), - m_pattern_name_base_w(0), - m_screen_status(0), - m_dma_status(0), - m_register_address(0), - m_register_autoinc_r(false), - m_register_autoinc_w(false), - m_raster_irq_mask(false), - m_vblank_irq_mask(false), - m_raster_irq_hpos(0), - m_raster_irq_vpos(0), - m_raster_irq_mode(false), - m_scroll_address(0), - m_palette_address(0), - m_sprite_address(0), - m_sprite_bank(0), - m_xtile_ptr(0), - m_ytile_ptr(0), - m_xtile_autoinc(false), - m_ytile_autoinc(false), - m_plane_select_access(false), - m_mosaic_aplane(0), - m_mosaic_bplane(0), - m_sprite_disable(0), - m_sprite_aux_mode(0), - m_sprite_aux_reg(0), - m_border_color(0), - m_saar(false), - m_saaw(false), - m_scar(false), - m_scaw(false), - m_cpar(false), - m_cpaw(false), - m_ba_plane_scroll_select(false), - m_dspe(false), - m_md(0), - m_zron(false), - m_flip(false), - m_dckm(false), - m_page_size(false), - m_h_display_size(0), - m_v_display_size(0), - m_roz_wrap_disable(false), - m_scroll_wrap_disable(false), - m_pattern_size(0), - m_h_div_size(0), - m_v_div_size(0), - m_planeA_trans_enable(false), - m_planeB_trans_enable(false), - m_priority_mode(0), - m_cbdr(false), - m_yse(false), - m_scm(0), - m_planeA_color_fetch(0), - m_planeB_color_fetch(0), - m_sprite_color_fetch(0), - m_vblank_handler(*this), - m_raster_handler(*this), - m_vblank_timer(nullptr), - m_raster_timer(nullptr), - m_ax(0), - m_dx(0), - m_dxy(0), - m_ay(0), - m_dy(0), - m_dyx(0), - m_raw_ax(0), - m_raw_dx(0), - m_raw_dxy(0), - m_raw_ay(0), - m_raw_dy(0), - m_raw_dyx(0) +ygv608_device::ygv608_device( const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock ) : + device_t(mconfig, YGV608, tag, owner, clock), + device_gfx_interface(mconfig, *this, gfx_ygv608, DEVICE_SELF), + device_memory_interface(mconfig, *this), + device_palette_interface(mconfig, *this), + device_video_interface(mconfig, *this), + m_io_space_config("io", ENDIANNESS_BIG, 8, 6, 0, address_map_constructor(FUNC(ygv608_device::regs_map), this)), + m_namcond1_gfxbank(0), + m_tilemap_A(nullptr), + m_tilemap_B(nullptr), + m_work_bitmap(0), + m_bits16(0), + m_page_x(0), + m_page_y(0), + m_pny_shift(0), + m_na8_mask(0), + m_col_shift(0), + m_base_y_shift(0), + m_screen_resize(false), + m_tilemap_resize(false), + m_color_state_r(0), + m_color_state_w(0), + m_p0_state(0), + m_pattern_name_base_r(0), + m_pattern_name_base_w(0), + m_screen_status(0), + m_dma_status(0), + m_register_address(0), + m_register_autoinc_r(false), + m_register_autoinc_w(false), + m_raster_irq_mask(false), + m_vblank_irq_mask(false), + m_raster_irq_hpos(0), + m_raster_irq_vpos(0), + m_raster_irq_mode(false), + m_scroll_address(0), + m_palette_address(0), + m_sprite_address(0), + m_sprite_bank(0), + m_xtile_ptr(0), + m_ytile_ptr(0), + m_xtile_autoinc(false), + m_ytile_autoinc(false), + m_plane_select_access(false), + m_mosaic_aplane(0), + m_mosaic_bplane(0), + m_sprite_disable(0), + m_sprite_aux_mode(0), + m_sprite_aux_reg(0), + m_border_color(0), + m_saar(false), + m_saaw(false), + m_scar(false), + m_scaw(false), + m_cpar(false), + m_cpaw(false), + m_ba_plane_scroll_select(false), + m_dspe(false), + m_md(0), + m_zron(false), + m_flip(false), + m_dckm(false), + m_page_size(false), + m_h_display_size(0), + m_v_display_size(0), + m_roz_wrap_disable(false), + m_scroll_wrap_disable(false), + m_pattern_size(0), + m_h_div_size(0), + m_v_div_size(0), + m_planeA_trans_enable(false), + m_planeB_trans_enable(false), + m_priority_mode(0), + m_cbdr(false), + m_yse(false), + m_scm(0), + m_planeA_color_fetch(0), + m_planeB_color_fetch(0), + m_sprite_color_fetch(0), + m_vblank_handler(*this), + m_raster_handler(*this), + m_vblank_timer(nullptr), + m_raster_timer(nullptr), + m_ax(0), + m_dx(0), + m_dxy(0), + m_ay(0), + m_dy(0), + m_dyx(0), + m_raw_ax(0), + m_raw_dx(0), + m_raw_dxy(0), + m_raw_ay(0), + m_raw_dy(0), + m_raw_dyx(0) { std::fill(std::begin(m_pattern_name_table), std::end(m_pattern_name_table), 0); std::fill(std::begin(m_tilemap_A_cache_8), std::end(m_tilemap_A_cache_8), nullptr); @@ -560,21 +559,17 @@ return( ( col << 6 ) | row ); } -#define layout_total(x) \ -(gfx(x)->elements()) - TILE_GET_INFO_MEMBER( ygv608_device::get_tile_info_A_8 ) { // extract row,col packed into tile_index - int col = tile_index >> 6; - int row = tile_index & 0x3f; + int col = tile_index >> 6; + int row = tile_index & 0x3f; int translated_column = get_col_division(col); - uint8_t attr = 0; - int pattern_name_base = 0; - int set = (m_md == MD_1PLANE_256COLOUR - ? GFX_8X8_8BIT : GFX_8X8_4BIT ); - int base = row >> m_base_y_shift; + uint8_t attr = 0; + int pattern_name_base = 0; + int set = (m_md == MD_1PLANE_256COLOUR ? GFX_8X8_8BIT : GFX_8X8_4BIT ); + int base = row >> m_base_y_shift; if( col >= m_page_x ) { @@ -612,9 +607,9 @@ } else { sy = (int)m_scroll_data_table[0][translated_column] + - (((int)m_scroll_data_table[0][translated_column+1] & 0x0f ) << 8); + (((int)m_scroll_data_table[0][translated_column+1] & 0x0f ) << 8); sx = (int)m_scroll_data_table[0][0x80] + - (((int)m_scroll_data_table[0][0x81] & 0x0f ) << 8); + (((int)m_scroll_data_table[0][0x81] & 0x0f ) << 8); if (m_md == MD_2PLANE_16BIT) { @@ -639,7 +634,7 @@ j += ( (int)m_scroll_data_table[0][0xc0+page] << 10 ); j += ( m_base_addr[0][base] << 8 ); - if( j >= layout_total(set) ) + if( j >= gfx(set)->elements() ) { logerror( "A_8X8: tilemap=%d\n", j ); j = 0; @@ -667,15 +662,14 @@ TILE_GET_INFO_MEMBER( ygv608_device::get_tile_info_B_8 ) { // extract row,col packed into tile_index - int col = tile_index >> 6; - int row = tile_index & 0x3f; + int col = tile_index >> 6; + int row = tile_index & 0x3f; int translated_column = get_col_division(col); - uint8_t attr = 0; - int pattern_name_base = ( ( m_page_y << m_pny_shift ) - << m_bits16 ); - int set = GFX_8X8_4BIT; - int base = row >> m_base_y_shift; + uint8_t attr = 0; + int pattern_name_base = ( ( m_page_y << m_pny_shift ) << m_bits16 ); + int set = GFX_8X8_4BIT; + int base = row >> m_base_y_shift; if (m_md & MD_1PLANE ) { @@ -715,9 +709,9 @@ } else { sy = (int)m_scroll_data_table[1][translated_column] + - (((int)m_scroll_data_table[1][translated_column+1] & 0x0f ) << 8); + (((int)m_scroll_data_table[1][translated_column+1] & 0x0f ) << 8); sx = (int)m_scroll_data_table[1][0x80] + - (((int)m_scroll_data_table[1][0x81] & 0x0f ) << 8); + (((int)m_scroll_data_table[1][0x81] & 0x0f ) << 8); if (m_md == MD_2PLANE_16BIT) { @@ -742,7 +736,7 @@ j += ( (int)m_scroll_data_table[1][0xc0+page] << 10 ); j += ( m_base_addr[1][base] << 8 ); - if( j >= layout_total(set) ) + if( j >= gfx(set)->elements() ) { logerror( "B_8X8: tilemap=%d\n", j ); j = 0; @@ -772,15 +766,14 @@ TILE_GET_INFO_MEMBER( ygv608_device::get_tile_info_A_16 ) { // extract row,col packed into tile_index - int col = tile_index >> 6; - int row = tile_index & 0x3f; + int col = tile_index >> 6; + int row = tile_index & 0x3f; int translated_column = get_col_division(col); uint8_t attr = 0; - int pattern_name_base = 0; - int set = (m_md == MD_1PLANE_256COLOUR - ? GFX_16X16_8BIT : GFX_16X16_4BIT ); - int base = row >> m_base_y_shift; + int pattern_name_base = 0; + int set = (m_md == MD_1PLANE_256COLOUR ? GFX_16X16_8BIT : GFX_16X16_4BIT ); + int base = row >> m_base_y_shift; if( col >= m_page_x ) { tileinfo.set(set, 0, 0, 0 ); @@ -804,8 +797,8 @@ if (m_flip == true) { - if (m_pattern_name_table[i+1] & (1<<3)) f |= TILE_FLIPX; - if (m_pattern_name_table[i+1] & (1<<2)) f |= TILE_FLIPY; + if (m_pattern_name_table[i+1] & (1<<3)) f |= TILE_FLIPX; + if (m_pattern_name_table[i+1] & (1<<2)) f |= TILE_FLIPY; } } @@ -816,9 +809,9 @@ } else { sy = (int)m_scroll_data_table[0][translated_column] + - (((int)m_scroll_data_table[0][translated_column+1] & 0x0f ) << 8); + (((int)m_scroll_data_table[0][translated_column+1] & 0x0f ) << 8); sx = (int)m_scroll_data_table[0][0x80] + - (((int)m_scroll_data_table[0][0x81] & 0x0f ) << 8); + (((int)m_scroll_data_table[0][0x81] & 0x0f ) << 8); if (m_md == MD_2PLANE_16BIT) { page = ( ( sx + col * 16 ) % 2048 ) / 512; @@ -840,7 +833,7 @@ j += ( (int)m_scroll_data_table[0][0xc0+page] << 8 ); j += ( m_base_addr[0][base] << 8 ); - if( j >= layout_total(set) ) { + if( j >= gfx(set)->elements() ) { logerror( "A_16X16: tilemap=%d\n", j ); j = 0; } @@ -862,7 +855,6 @@ j += m_namcond1_gfxbank * 0x2000; } - tileinfo.set(set, j, attr, f ); } } @@ -870,15 +862,14 @@ TILE_GET_INFO_MEMBER( ygv608_device::get_tile_info_B_16 ) { // extract row,col packed into tile_index - int col = tile_index >> 6; - int row = tile_index & 0x3f; + int col = tile_index >> 6; + int row = tile_index & 0x3f; int translated_column = get_col_division(col); - uint8_t attr = 0; - int pattern_name_base = ( ( m_page_y << m_pny_shift ) - << m_bits16 ); - int set = GFX_16X16_4BIT; - int base = row >> m_base_y_shift; + uint8_t attr = 0; + int pattern_name_base = ( ( m_page_y << m_pny_shift ) << m_bits16 ); + int set = GFX_16X16_4BIT; + int base = row >> m_base_y_shift; if(m_md & MD_1PLANE ) { tileinfo.set(set, 0, 0, 0 ); @@ -939,7 +930,7 @@ j += ( (int)m_scroll_data_table[1][0xc0+page] << 8 ); j += ( m_base_addr[1][base] << 8 ); - if( j >= layout_total(set) ) { + if( j >= gfx(set)->elements() ) { logerror( "B_16X16: tilemap=%d\n", j ); j = 0; } @@ -1127,7 +1118,7 @@ if (spf != 0) color = ( code >> ( (spf + spf_shift[size]) * 2 ) ) & 0x0f; // check code boundary (TODO: do we really need this?) - if( code >= layout_total(size) ) + if( code >= gfx(size)->elements() ) { logerror( "SZ_%d: sprite=%d\n", size, code ); code = 0; @@ -1142,20 +1133,20 @@ if(sx > sprite_limits[size] || sy > sprite_limits[size] ) { gfx(size)->transpen(bitmap,spriteClip, - code+m_namcond1_gfxbank*spritebank_size[size], - color, - flipx,flipy, - sx-512,sy,0x00); + code+m_namcond1_gfxbank*spritebank_size[size], + color, + flipx,flipy, + sx-512,sy,0x00); gfx(size)->transpen(bitmap,spriteClip, - code+m_namcond1_gfxbank*spritebank_size[size], - color, - flipx,flipy, - sx,sy-512,0x00); + code+m_namcond1_gfxbank*spritebank_size[size], + color, + flipx,flipy, + sx,sy-512,0x00); gfx(size)->transpen(bitmap,spriteClip, - code+m_namcond1_gfxbank*spritebank_size[size], - color, - flipx,flipy, - sx-512,sy-512,0x00); + code+m_namcond1_gfxbank*spritebank_size[size], + color, + flipx,flipy, + sx-512,sy-512,0x00); } } @@ -1184,9 +1175,9 @@ int ba_select = (source_tilemap == m_tilemap_A) ? 0 : 1; sy = (int)m_scroll_data_table[ba_select][0x00] + - (((int)m_scroll_data_table[ba_select][0x01] & 0x0f ) << 8); + (((int)m_scroll_data_table[ba_select][0x01] & 0x0f ) << 8); sx = (int)m_scroll_data_table[ba_select][0x80] + - (((int)m_scroll_data_table[ba_select][0x81] & 0x0f ) << 8); + (((int)m_scroll_data_table[ba_select][0x81] & 0x0f ) << 8); if( m_zron == true ) { @@ -1321,12 +1312,12 @@ int translated_column = get_col_division(col); m_tilemap_B->set_scrolly(col, - ( (int)m_scroll_data_table[1][translated_column] + - ( (int)m_scroll_data_table[1][translated_column+1] << 8 ) ) ); + ( (int)m_scroll_data_table[1][translated_column] + + ( (int)m_scroll_data_table[1][translated_column+1] << 8 ) ) ); m_tilemap_A->set_scrolly(col, - ( (int)m_scroll_data_table[0][translated_column] + - ( (int)m_scroll_data_table[0][translated_column+1] << 8 ) ) ); + ( (int)m_scroll_data_table[0][translated_column] + + ( (int)m_scroll_data_table[0][translated_column+1] << 8 ) ) ); } #endif @@ -1338,12 +1329,12 @@ int translated_row = get_row_division(row); m_tilemap_B->set_scrollx(row, - ( (int)m_scroll_data_table[1][translated_row+0x80] + - ( (int)m_scroll_data_table[1][translated_row+0x81] << 8 ) ) ); + ( (int)m_scroll_data_table[1][translated_row+0x80] + + ( (int)m_scroll_data_table[1][translated_row+0x81] << 8 ) ) ); m_tilemap_A->set_scrollx(row, - ( (int)m_scroll_data_table[0][translated_row+0x80] + - ( (int)m_scroll_data_table[0][translated_row+0x81] << 8 ) ) ); + ( (int)m_scroll_data_table[0][translated_row+0x80] + + ( (int)m_scroll_data_table[0][translated_row+0x81] << 8 ) ) ); } #endif @@ -1412,16 +1403,16 @@ ui_draw_text( buffer, 0, 16 ); ui_draw_text( psize[m_pattern_size], 0, 32 ); sprintf( buffer, "A: SX:%d SY:%d", - (int)m_scroll_data_table[0][0x80] + - ( ( (int)m_scroll_data_table[0][0x81] & 0x0f ) << 8 ), - (int)m_scroll_data_table[0][0x00] + - ( ( (int)m_scroll_data_table[0][0x01] & 0x0f ) << 8 ) ); + (int)m_scroll_data_table[0][0x80] + + ( ( (int)m_scroll_data_table[0][0x81] & 0x0f ) << 8 ), + (int)m_scroll_data_table[0][0x00] + + ( ( (int)m_scroll_data_table[0][0x01] & 0x0f ) << 8 ) ); ui_draw_text( buffer, 0, 48 ); sprintf( buffer, "B: SX:%d SY:%d", - (int)m_scroll_data_table[1][0x80] + - ( ( (int)m_scroll_data_table[1][0x81] & 0x0f ) << 8 ), - (int)m_scroll_data_table[1][0x00] + - ( ( (int)m_scroll_data_table[1][0x01] & 0x0f ) << 8 ) ); + (int)m_scroll_data_table[1][0x80] + + ( ( (int)m_scroll_data_table[1][0x81] & 0x0f ) << 8 ), + (int)m_scroll_data_table[1][0x00] + + ( ( (int)m_scroll_data_table[1][0x01] & 0x0f ) << 8 ) ); ui_draw_text( buffer, 0, 64 ); #endif return 0; @@ -1458,15 +1449,15 @@ if (pn > 4095) { logerror( "attempt (%d) to read pattern name %d\n" - "mode = %d, pgs = %d (%dx%d)\n" - "m_pattern_name_base_r = %d\n" - "pnx = %d, pny = %d, pny_shift = %d, bits16 = %d\n", - m_p0_state, - pn, m_md, m_page_size, - m_page_x, m_page_y, - m_pattern_name_base_r, - m_xtile_ptr, m_ytile_ptr, m_pny_shift, - m_bits16 ); + "mode = %d, pgs = %d (%dx%d)\n" + "m_pattern_name_base_r = %d\n" + "pnx = %d, pny = %d, pny_shift = %d, bits16 = %d\n", + m_p0_state, + pn, m_md, m_page_size, + m_page_x, m_page_y, + m_pattern_name_base_r, + m_xtile_ptr, m_ytile_ptr, m_pny_shift, + m_bits16 ); pn = 0; } @@ -1596,15 +1587,15 @@ if (pn > 4095) { logerror( "attempt (%d) to write pattern name %d\n" - "mode = %d, pgs = %d (%dx%d)\n" - "m_pattern_name_base_w = %d\n" - "pnx = %d, pny = %d, pny_shift = %d, bits16 = %d\n", - m_p0_state, - pn, m_md, m_page_size, - m_page_x, m_page_y, - m_pattern_name_base_w, - m_xtile_ptr, m_ytile_ptr, m_pny_shift, - m_bits16 ); + "mode = %d, pgs = %d (%dx%d)\n" + "m_pattern_name_base_w = %d\n" + "pnx = %d, pny = %d, pny_shift = %d, bits16 = %d\n", + m_p0_state, + pn, m_md, m_page_size, + m_page_x, m_page_y, + m_pattern_name_base_w, + m_xtile_ptr, m_ytile_ptr, m_pny_shift, + m_bits16 ); pn = 0; } @@ -1689,12 +1680,12 @@ if (++m_color_state_w == 3) { m_color_state_w = 0; -// if(m_colour_palette[m_palette_address][0] & 0x80) // Transparency designation, none of the Namco games enables it? + //if(m_colour_palette[m_palette_address][0] & 0x80) // Transparency designation, none of the Namco games enables it? set_pen_color(m_palette_address, - pal6bit( m_colour_palette[m_palette_address][0] ), - pal6bit( m_colour_palette[m_palette_address][1] ), - pal6bit( m_colour_palette[m_palette_address][2] )); + pal6bit( m_colour_palette[m_palette_address][0] ), + pal6bit( m_colour_palette[m_palette_address][1] ), + pal6bit( m_colour_palette[m_palette_address][2] )); if(m_cpaw == true) m_palette_address++; @@ -1776,13 +1767,12 @@ for(i=47;i<50;i++) m_iospace->write_byte(i, 0x00); -// memset( &m_regs.b[0], 0, 39 ); -// memset( &m_regs.b[47], 0, 3 ); + //memset( &m_regs.b[0], 0, 39 ); + //memset( &m_regs.b[47], 0, 3 ); /* Clear internal ram */ memset( m_pattern_name_table, 0, 4096 ); - memset( m_sprite_attribute_table.b, 0, - SPRITE_ATTR_TABLE_SIZE ); + memset( m_sprite_attribute_table.b, 0, SPRITE_ATTR_TABLE_SIZE ); memset( m_scroll_data_table, 0, 2*256 ); memset( m_colour_palette, 0, 256*3 ); } @@ -1806,8 +1796,7 @@ uint8_t *RAM = machine.memory_region[0]; int i; - int src = ( ( (int)m_regs.s.tb13 << 8 ) + - (int)m_regs.s.tb5 ) << 5; + int src = ( ( (int)m_regs.s.tb13 << 8 ) + (int)m_regs.s.tb5 ) << 5; int bytes = (int)m_regs.s.tn4 << 4; logerror( "Transferring data from rom...\n" ); @@ -1818,32 +1807,30 @@ /* scroll table */ if( m_ports.s.tl ) { - int dest = (int)m_regs.s.sca; - if( m_regs.s.p2_b_a ) - dest += 0x100; + int dest = (int)m_regs.s.sca; + if( m_regs.s.p2_b_a ) + dest += 0x100; - /* fudge a transfer for now... */ - for( i=0; i m_crtc.htotal || m_raster_irq_vpos > m_crtc.vtotal ) return attotime::never; @@ -2446,5 +2432,3 @@ //m_vblank_timer->adjust(screen().time_until_pos(m_crtc.display_vstart+m_crtc.display_height,0), 0, screen().frame_period()); m_vblank_timer->adjust(screen().time_until_pos(m_crtc.display_height,0), 0, screen().frame_period()); } - - diff -Nru mame-0.250+dfsg.1/src/mame/namco/ygv608.h mame-0.251+dfsg.1/src/mame/namco/ygv608.h --- mame-0.250+dfsg.1/src/mame/namco/ygv608.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/namco/ygv608.h 2022-12-29 14:20:09.000000000 +0000 @@ -89,9 +89,7 @@ uint32_t update_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - auto vblank_callback() { return m_vblank_handler.bind(); } - auto raster_callback() { return m_raster_handler.bind(); } void regs_map(address_map &map); @@ -155,8 +153,8 @@ uint8_t m_pattern_name_table[4096]; union { - uint8_t b[SPRITE_ATTR_TABLE_SIZE]; - SPRITE_ATTR s[MAX_SPRITES]; + uint8_t b[SPRITE_ATTR_TABLE_SIZE]; + SPRITE_ATTR s[MAX_SPRITES]; } m_sprite_attribute_table; uint8_t m_scroll_data_table[2][256]; @@ -253,10 +251,10 @@ uint8_t m_sprite_color_fetch; /**< SPF: sprite color fetch mode */ // screen section - devcb_write_line m_vblank_handler; - devcb_write_line m_raster_handler; - emu_timer *m_vblank_timer; - emu_timer *m_raster_timer; + devcb_write_line m_vblank_handler; + devcb_write_line m_raster_handler; + emu_timer *m_vblank_timer; + emu_timer *m_raster_timer; void screen_configure(); /**< Adjust screen parameters based off CRTC ones */ attotime raster_sync_offset(); /**< Adjust timing based off raster & CRTC parameters */ @@ -284,7 +282,7 @@ int display_vsync = 0; /**< VSW: vertical sync signal x 1 */ int border_width = 0; /**< HBW: horizontal border size x 16 */ int border_height = 0; /**< VBW: vertical border size x 8 */ - }m_crtc; + } m_crtc; // rotation, zoom shortcuts uint32_t m_ax; /**< AX */ @@ -306,7 +304,6 @@ // for raw to ROZ conversion uint32_t roz_convert_raw24(uint32_t *raw_reg, uint8_t offset, uint8_t data); uint32_t roz_convert_raw16(uint16_t *raw_reg, uint8_t offset, uint8_t data); - }; // device type definition diff -Nru mame-0.250+dfsg.1/src/mame/nec/pc6001.cpp mame-0.251+dfsg.1/src/mame/nec/pc6001.cpp --- mame-0.250+dfsg.1/src/mame/nec/pc6001.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nec/pc6001.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -257,6 +257,42 @@ m_ppi->write(offset,data); } +uint8_t pc6001_state::joystick_r() +{ + uint8_t data = m_joymux->output_r(); + + // FIXME: bits 6 and 7 are supposed to be nHSYNC and nVSYNC + if (m_screen->hblank()) + data &= 0xbf; + else + data |= 0x40; + if (m_screen->vblank()) + data &= 0x7f; + else + data |= 0x80; + + return data; +} + +uint8_t pc6001_state::joystick_out_r() +{ + return m_joystick_out; +} + +void pc6001_state::joystick_out_w(uint8_t data) +{ + // bit 7 is output enable for first part of 74LS367 buffer + m_joy[1]->pin_6_w(BIT(data, 7) ? 1 : BIT(data, 0)); + m_joy[1]->pin_7_w(BIT(data, 7) ? 1 : BIT(data, 1)); + m_joy[0]->pin_6_w(BIT(data, 7) ? 1 : BIT(data, 2)); + m_joy[0]->pin_7_w(BIT(data, 7) ? 1 : BIT(data, 3)); + m_joy[1]->pin_8_w(BIT(data, 4)); + m_joy[0]->pin_8_w(BIT(data, 5)); + m_joymux->select_w(BIT(data, 6)); + + m_joystick_out = data; +} + void pc6001_state::pc6001_map(address_map &map) { map.unmap_value_high(); @@ -1078,27 +1114,6 @@ PORT_DIPSETTING( 0x04, "Green/Pink" ) //5-6-7 is presumably invalid - /* TODO: these two are unchecked */ - PORT_START("P1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("P2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("key1") //0x00-0x1f PORT_BIT(0x00000001,IP_ACTIVE_HIGH,IPT_UNUSED) //0x00 null PORT_BIT(0x00000002,IP_ACTIVE_HIGH,IPT_UNUSED) //0x01 soh @@ -1404,7 +1419,7 @@ uint8_t pc6001_state::check_joy_press() { // TODO: this may really just rearrange keyboard key presses in a joystick like fashion, somehow akin to Sharp X1 mode - uint8_t p1_key = m_io_p1->read() ^ 0xff; + uint8_t p1_key = m_joymux->output_r() ^ 0xff; uint8_t shift_key = m_io_key_modifiers->read() & 0x02; uint8_t space_key = m_io_keys[1]->read() & 0x01; uint8_t joy_press; @@ -1485,7 +1500,7 @@ uint32_t key2 = m_io_keys[1]->read(); uint32_t key3 = m_io_keys[2]->read(); u8 key_fn = m_io_fn_keys->read(); -// uint8_t p1_key = m_io_p1->read(); +// uint8_t p1_key = m_joy[0]->read(); if(m_cas_switch == 0) { @@ -1715,6 +1730,13 @@ /* uart */ I8251(config, "uart", 0); + MSX_GENERAL_PURPOSE_PORT(config, m_joy[0], msx_general_purpose_port_devices, "joystick"); + MSX_GENERAL_PURPOSE_PORT(config, m_joy[1], msx_general_purpose_port_devices, "joystick"); + + LS157_X2(config, m_joymux); + m_joymux->a_in_callback().set(m_joy[1], FUNC(msx_general_purpose_port_device::read)); + m_joymux->b_in_callback().set(m_joy[0], FUNC(msx_general_purpose_port_device::read)); + GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "pc6001_cart"); SOFTWARE_LIST(config, "cart_list_pc6001").set_original("pc6001_cart"); @@ -1726,11 +1748,12 @@ SPEAKER(config, "mono").front_center(); AY8910(config, m_ay, PC6001_MAIN_CLOCK/4); - m_ay->port_a_read_callback().set_ioport("P1"); - m_ay->port_b_read_callback().set_ioport("P2"); + m_ay->port_a_read_callback().set(FUNC(pc6001_state::joystick_r)); + m_ay->port_b_read_callback().set(FUNC(pc6001_state::joystick_out_r)); + m_ay->port_b_write_callback().set(FUNC(pc6001_state::joystick_out_w)); m_ay->add_route(ALL_OUTPUTS, "mono", 1.00); - /* TODO: accurate timing on this */ + // TODO: accurate timing on this TIMER(config, "keyboard_timer").configure_periodic(FUNC(pc6001_state::keyboard_callback), attotime::from_hz(250)); TIMER(config, "cassette_timer").configure_periodic(FUNC(pc6001_state::cassette_callback), attotime::from_hz(1200/12)); } @@ -1820,9 +1843,10 @@ pc6601_fdc_config(config); config.device_remove("aysnd"); - YM2203(config, m_ym, PC6001_MAIN_CLOCK/4); - m_ym->port_a_read_callback().set_ioport("P1"); - m_ym->port_b_read_callback().set_ioport("P2"); + YM2203(config, m_ym, 4_MHz_XTAL); + m_ym->port_a_read_callback().set(FUNC(pc6001mk2sr_state::joystick_r)); + m_ym->port_b_read_callback().set(FUNC(pc6001mk2sr_state::joystick_out_r)); + m_ym->port_b_write_callback().set(FUNC(pc6001mk2sr_state::joystick_out_w)); m_ym->add_route(ALL_OUTPUTS, "mono", 1.00); // TODO: 1D 3'5" floppy drive diff -Nru mame-0.250+dfsg.1/src/mame/nec/pc6001.h mame-0.251+dfsg.1/src/mame/nec/pc6001.h --- mame-0.250+dfsg.1/src/mame/nec/pc6001.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nec/pc6001.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,20 +1,19 @@ // license:BSD-3-Clause // copyright-holders:Angelo Salese -#ifndef MAME_INCLUDES_PC6001_H -#define MAME_INCLUDES_PC6001_H +#ifndef MAME_NEC_PC6001_H +#define MAME_NEC_PC6001_H #pragma once +#include "pc80s31k.h" #include "cpu/z80/z80.h" -#include "formats/dsk_dsk.h" -#include "formats/msx_dsk.h" #include "imagedev/cassette.h" #include "imagedev/floppy.h" +#include "machine/74157.h" #include "machine/bankdev.h" #include "machine/i8251.h" #include "machine/i8255.h" -#include "pc80s31k.h" #include "machine/timer.h" #include "machine/upd765.h" #include "sound/ay8910.h" @@ -24,13 +23,17 @@ #include "bus/generic/slot.h" #include "bus/generic/carts.h" +#include "bus/msx/ctrl/ctrl.h" #include "emupal.h" #include "speaker.h" #include "screen.h" +#include "formats/dsk_dsk.h" +#include "formats/msx_dsk.h" #include "formats/p6001_cas.h" + class pc6001_state : public driver_device { public: @@ -40,6 +43,8 @@ , m_ram(*this, "ram") , m_maincpu(*this, "maincpu") , m_screen(*this, "screen") + , m_joy(*this, "joy%u", 1U) + , m_joymux(*this, "joymux") , m_cassette(*this, "cassette") , m_cas_hack(*this, "cas_hack") , m_cart(*this, "cartslot") @@ -47,8 +52,6 @@ , m_region_maincpu(*this, "maincpu") , m_region_gfx1(*this, "gfx1") , m_io_mode4_dsw(*this, "MODE4_DSW") - , m_io_p1(*this, "P1") - , m_io_p2(*this, "P2") , m_io_keys(*this, "key%u", 1U) , m_io_fn_keys(*this, "key_fn") , m_io_key_modifiers(*this, "key_modifiers") @@ -77,12 +80,18 @@ void ppi_portc_w(uint8_t data); uint8_t ppi_portc_r(); + uint8_t joystick_r(); + uint8_t joystick_out_r(); + void joystick_out_w(uint8_t data); + void pc6001(machine_config &config); protected: required_device m_ppi; optional_shared_ptr m_ram; required_device m_maincpu; required_device m_screen; + required_device_array m_joy; + required_device m_joymux; optional_device m_cassette; optional_device m_cas_hack; required_device m_cart; @@ -90,8 +99,6 @@ optional_memory_region m_region_maincpu; required_memory_region m_region_gfx1; required_ioport m_io_mode4_dsw; - required_ioport m_io_p1; - required_ioport m_io_p2; required_ioport_array<3> m_io_keys; required_ioport m_io_fn_keys; required_ioport m_io_key_modifiers; @@ -150,6 +157,8 @@ uint32_t m_old_key3 = 0; u8 m_old_key_fn; + uint8_t m_joystick_out = 0xff; + emu_timer *m_sub_trig_timer = nullptr; // IRQ model @@ -369,4 +378,4 @@ virtual u8 hw_rev_r() override; }; -#endif +#endif // MAME_NEC_PC6001_H diff -Nru mame-0.250+dfsg.1/src/mame/nec/pc8001.cpp mame-0.251+dfsg.1/src/mame/nec/pc8001.cpp --- mame-0.250+dfsg.1/src/mame/nec/pc8001.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nec/pc8001.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -123,6 +123,8 @@ } lowerline = bool(BIT(attr, 5)); + // FIXME: ninjakmb (pc8801) sets 0x50 0x50 for all attribute strips + // bit 6 is undefined in the specs, is it for masking decoration(s)? upperline = bool(BIT(attr, 4)); reverse = bool(BIT(attr, 2)); attr_blink = bool(BIT(attr, 1)); @@ -198,7 +200,7 @@ /* Read/Write Handlers */ -void pc8001_state::port10_w(uint8_t data) +void pc8001_base_state::port10_w(uint8_t data) { /* @@ -269,12 +271,12 @@ membank("bank2")->set_entry(data & 1); } -WRITE_LINE_MEMBER( pc8001_state::write_centronics_busy ) +WRITE_LINE_MEMBER( pc8001_base_state::write_centronics_busy ) { m_centronics_busy = state; } -WRITE_LINE_MEMBER( pc8001_state::write_centronics_ack ) +WRITE_LINE_MEMBER( pc8001_base_state::write_centronics_ack ) { m_centronics_ack = state; } @@ -654,6 +656,10 @@ { m_screen_reverse = false; + /* initialize RTC */ + m_rtc->cs_w(1); + m_rtc->oe_w(1); + save_item(NAME(m_width80)); save_item(NAME(m_color)); save_item(NAME(m_screen_reverse)); @@ -666,10 +672,6 @@ address_space &program = m_maincpu->space(AS_PROGRAM); - /* initialize RTC */ - m_rtc->cs_w(1); - m_rtc->oe_w(1); - /* initialize DMA */ m_dma->ready_w(1); diff -Nru mame-0.250+dfsg.1/src/mame/nec/pc8001.h mame-0.251+dfsg.1/src/mame/nec/pc8001.h --- mame-0.250+dfsg.1/src/mame/nec/pc8001.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nec/pc8001.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,23 +1,24 @@ // license:BSD-3-Clause // copyright-holders:Curt Coder, Angelo Salese +#ifndef MAME_NEC_PC8001_H +#define MAME_NEC_PC8001_H #pragma once -#ifndef MAME_INCLUDES_PC8001_H -#define MAME_INCLUDES_PC8001_H +#include "pc80s31k.h" +#include "bus/centronics/ctronics.h" #include "cpu/z80/z80.h" #include "imagedev/cassette.h" #include "machine/buffer.h" -#include "bus/centronics/ctronics.h" -#include "machine/i8257.h" -#include "machine/i8255.h" #include "machine/i8251.h" +#include "machine/i8255.h" +#include "machine/i8257.h" #include "machine/ram.h" #include "machine/upd1990a.h" -#include "pc80s31k.h" #include "sound/beep.h" #include "video/upd3301.h" + #include "emupal.h" #include "screen.h" @@ -36,6 +37,9 @@ pc8001_base_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, Z80_TAG) + , m_rtc(*this, UPD1990A_TAG) + , m_centronics(*this, CENTRONICS_TAG) + , m_cent_data_out(*this, "cent_data_out") , m_crtc(*this, UPD3301_TAG) , m_crtc_palette(*this, "crtc_palette") , m_dma(*this, I8257_TAG) @@ -43,14 +47,24 @@ , m_cgrom(*this, CGROM_TAG) {} + // feature::PRINTER more to do with lacking specific PC-88 options + // cfr. -flop1 multipla:flop2 setprt.com + static constexpr feature_type unemulated_features() { return feature::TAPE | feature::PRINTER; } + + protected: required_device m_maincpu; + required_device m_rtc; + required_device m_centronics; + required_device m_cent_data_out; required_device m_crtc; required_device m_crtc_palette; required_device m_dma; required_device m_cassette; required_memory_region m_cgrom; + void port10_w(uint8_t data); + void port30_w(u8 data); virtual void machine_start() override; void set_screen_frequency(bool is_24KHz) { m_screen_is_24KHz = is_24KHz; } @@ -62,6 +76,11 @@ DECLARE_WRITE_LINE_MEMBER( hrq_w ); virtual uint8_t dma_mem_r(offs_t offset); + DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); + DECLARE_WRITE_LINE_MEMBER(write_centronics_ack); + + int m_centronics_busy = 0; + int m_centronics_ack = 0; private: bool m_screen_reverse = false; bool m_screen_is_24KHz = false; @@ -78,10 +97,7 @@ pc8001_state(const machine_config &mconfig, device_type type, const char *tag) : pc8001_base_state(mconfig, type, tag) , m_pc80s31(*this, "pc80s31") - , m_rtc(*this, UPD1990A_TAG) , m_screen(*this, "screen") - , m_centronics(*this, CENTRONICS_TAG) - , m_cent_data_out(*this, "cent_data_out") , m_beep(*this, "beeper") , m_ram(*this, RAM_TAG) , m_rom(*this, Z80_TAG) @@ -99,24 +115,14 @@ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); required_device m_pc80s31; - required_device m_rtc; required_device m_screen; - required_device m_centronics; - required_device m_cent_data_out; required_device m_beep; required_device m_ram; required_memory_region m_rom; private: - void port10_w(uint8_t data); uint8_t port40_r(); void port40_w(uint8_t data); - - int m_centronics_busy = 0; - int m_centronics_ack = 0; - - DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); - DECLARE_WRITE_LINE_MEMBER(write_centronics_ack); }; class pc8001mk2_state : public pc8001_state @@ -164,4 +170,4 @@ u8 m_n80sr_bank = 0; }; -#endif +#endif // MAME_NEC_PC8001_H diff -Nru mame-0.250+dfsg.1/src/mame/nec/pc80s31k.cpp mame-0.251+dfsg.1/src/mame/nec/pc80s31k.cpp --- mame-0.250+dfsg.1/src/mame/nec/pc80s31k.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nec/pc80s31k.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -11,8 +11,14 @@ Design is decidedly derived from Epson TF-20 and friends, cfr. devices/bus/epson_sio/tf20.cpp + PC-80S32 is the external version of what PC-8801mkII uses built-in, + capabilities are unknown at current time. + + Eventually internalized in later PC-88 models, + Observed PCBs for internal boards are marked PWD-516 with a 8 digit revision number. + For simpicity's sake we just name these board over host classes instead. + TODO: - - What's PC-80S32? Is it the 88VA version or a different beast? - PC=0x7dd reads from FDC bit 3 in ST3 (twosid_r fn), expecting a bit 3 high for all the PC8001 games otherwise keeps looping and eventually dies. Are those incorrectly identified as 2DD? Hacked to work for now; @@ -32,6 +38,8 @@ Bottom line: Is it trying to access some custom HW? - Hookup a bridge for internal BIOSes (later PC8801 models); - Save state support (resuming fails latch hookups here); + - pc88va2_fd_if_device: currently not hooked up to pc88va2, deasserts DRQ too fast, sub CPU + incorrectly tells to master that floppies aren't 2HD? =================================================================================================== @@ -157,6 +165,9 @@ //#define VERBOSE 1 #include "logmacro.h" +#include "formats/pc98fdi_dsk.h" +#include "formats/xdf_dsk.h" + //************************************************************************** // GLOBAL VARIABLES //************************************************************************** @@ -165,7 +176,7 @@ // device type definition DEFINE_DEVICE_TYPE(PC80S31, pc80s31_device, "pc80s31", "NEC PC-80S31 Mini Disk Unit I/F") DEFINE_DEVICE_TYPE(PC80S31K, pc80s31k_device, "pc80s31k", "NEC PC-80S31K Mini Disk Unit I/F") - +DEFINE_DEVICE_TYPE(PC88VA2_FD_IF, pc88va2_fd_if_device, "pc88va2_fd_if", "NEC PC-88VA2 floppy disk interface \"PWD-516 72405162\"") //************************************************************************** // LIVE DEVICE @@ -193,7 +204,6 @@ pc80s31_device::pc80s31_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : pc80s31_device(mconfig, PC80S31, tag, owner, clock) { - } ROM_START( pc80s31 ) @@ -247,6 +257,7 @@ static void pc88_floppies(device_slot_interface &device) { // TODO: definitely not correct for base device + // TODO: eventually needs inheriting for pc88va3 (2TD with 9.3 MB capacity) device.option_add("525hd", FLOPPY_525_HD); } @@ -255,6 +266,14 @@ return m_irq_vector; } +// need FDI and XDF for PC-88VA +static void pc88_floppy_formats(format_registration &fr) +{ + fr.add_mfm_containers(); + fr.add(FLOPPY_XDF_FORMAT); + fr.add(FLOPPY_PC98FDI_FORMAT); +} + void pc80s31_device::device_add_mconfig(machine_config &config) { // TODO: confirm clock arrangement @@ -269,7 +288,7 @@ for (auto &floppy : m_floppy) { - FLOPPY_CONNECTOR(config, floppy, pc88_floppies, "525hd", floppy_image_device::default_mfm_floppy_formats); + FLOPPY_CONNECTOR(config, floppy, pc88_floppies, "525hd", pc88_floppy_formats); floppy->enable_sound(true); } @@ -311,6 +330,7 @@ // ST2 & 0x73 // Data doesn't matter, it also seems to have some activity to the printer port // (debugging left on?) + // Update: mostly fixed by separating upd765 irq types when the event above occurs. if ((u8)m_fdc_cpu->state_int(Z80_HALT) == 1) { logerror("%s: attempt to trigger TC while in HALT state (read ID copy protection warning)\n", machine().describe_context()); @@ -416,10 +436,13 @@ // //************************************************************************** +pc80s31k_device::pc80s31k_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) + : pc80s31_device(mconfig, type, tag, owner, clock) +{} + pc80s31k_device::pc80s31k_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : pc80s31_device(mconfig, PC80S31K, tag, owner, clock) + : pc80s31k_device(mconfig, PC80S31K, tag, owner, clock) { - } ROM_START( pc80s31k ) @@ -431,9 +454,6 @@ ROMX_LOAD( "m2mr_disk.rom", 0x0000, 0x2000, CRC(2447516b) SHA1(1492116f15c426f9796dc2bb6fcccf2656c0ca75), ROM_BIOS(1) ) ROM_SYSTEM_BIOS( 2, "mh", "MH disk BIOS" ) ROMX_LOAD( "mh_disk.rom", 0x0000, 0x2000, CRC(a222ecf0) SHA1(79e9c0786a14142f7a83690bf41fb4f60c5c1004), ROM_BIOS(2) ) - // TODO: this may belong to PC-80S32 - ROM_SYSTEM_BIOS( 3, "88va", "PC88VA disk BIOS") - ROMX_LOAD( "vasubsys.rom", 0x0000, 0x2000, CRC(08962850) SHA1(a9375aa480f85e1422a0e1385acb0ea170c5c2e0), ROM_BIOS(3) ) ROM_END const tiny_rom_entry *pc80s31k_device::device_rom_region() const @@ -459,3 +479,286 @@ map(0xf0, 0xf0).lw8(NAME([this] (u8 data) { m_irq_vector = data; })); map(0xf4, 0xf4).w(FUNC(pc80s31k_device::drive_mode_w)); } + +//************************************************************************** +// +// PC-88VA2 internal board overrides +// +// FD-55GFR-351 disk drives +// +//************************************************************************** + +pc88va2_fd_if_device::pc88va2_fd_if_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : pc80s31k_device(mconfig, PC88VA2_FD_IF, tag, owner, clock) + , m_write_irq(*this) + , m_write_drq(*this) +{ +} + + +ROM_START( pc88va2_fd_if ) + ROM_REGION( 0x2000, "fdc_rom", ROMREGION_ERASEFF ) + ROM_LOAD( "vasubsys.rom", 0x0000, 0x2000, CRC(08962850) SHA1(a9375aa480f85e1422a0e1385acb0ea170c5c2e0) ) +ROM_END + +const tiny_rom_entry *pc88va2_fd_if_device::device_rom_region() const +{ + return ROM_NAME( pc88va2_fd_if ); +} + +void pc88va2_fd_if_device::device_add_mconfig(machine_config &config) +{ + pc80s31k_device::device_add_mconfig(config); + m_fdc->intrq_wr_callback().append([this](int state) { if(m_fdc_mode & 1) { m_write_irq(state); } }); + m_fdc->drq_wr_callback().set([this](int state) { printf("%d %d\n", m_fdc_mode, state); if(m_fdc_mode & 1) { m_write_drq(state); } }); + +// m_fdc->set_ready_line_connected(false); +} + +void pc88va2_fd_if_device::device_start() +{ + pc80s31k_device::device_start(); + + m_write_irq.resolve_safe(); + m_write_drq.resolve_safe(); + + m_fdc_timer = timer_alloc(FUNC(pc88va2_fd_if_device::fdc_timer_cb), this); + m_fdc_timer->adjust(attotime::never); + + m_motor_start_timer[0] = timer_alloc(FUNC(pc88va2_fd_if_device::motor_start_timer_cb<0>), this); + m_motor_start_timer[1] = timer_alloc(FUNC(pc88va2_fd_if_device::motor_start_timer_cb<1>), this); + m_motor_start_timer[0]->adjust(attotime::never); + m_motor_start_timer[1]->adjust(attotime::never); + + floppy_image_device *floppy; + floppy = m_floppy[0]->get_device(); + if(floppy) + floppy->setup_ready_cb(floppy_image_device::ready_cb(&pc88va2_fd_if_device::fdc_update_ready, this)); + + floppy = m_floppy[1]->get_device(); + if(floppy) + floppy->setup_ready_cb(floppy_image_device::ready_cb(&pc88va2_fd_if_device::fdc_update_ready, this)); +} + +void pc88va2_fd_if_device::device_reset() +{ + pc80s31k_device::device_reset(); + + m_fdc_mode = 0; +// m_fdc_irq_opcode = 0x00; //0x7f ld a,a ! + m_xtmask = false; + m_dmae = false; +} + +void pc88va2_fd_if_device::host_io(address_map &map) +{ + map(0x00, 0x00).w(FUNC(pc88va2_fd_if_device::host_mode_w)); + map(0x02, 0x02).w(FUNC(pc88va2_fd_if_device::host_drive_rate_w)); + map(0x04, 0x04).w(FUNC(pc88va2_fd_if_device::host_motor_control_w)); + map(0x06, 0x06).rw(FUNC(pc88va2_fd_if_device::host_ready_r), FUNC(pc88va2_fd_if_device::host_fdc_control_w)); + map(0x08, 0x08).r(m_fdc, FUNC(upd765a_device::msr_r)); + map(0x0a, 0x0a).rw(m_fdc, FUNC(upd765a_device::fifo_r), FUNC(upd765a_device::fifo_w)); +} + +template TIMER_CALLBACK_MEMBER(pc88va2_fd_if_device::motor_start_timer_cb) +{ + m_floppy[DriveN]->get_device()->mon_w(0); +} + +TIMER_CALLBACK_MEMBER(pc88va2_fd_if_device::fdc_timer_cb) +{ + if(m_xtmask) + { + m_write_irq(1); +// m_write_irq(0); + } +} + +void pc88va2_fd_if_device::fdc_update_ready(floppy_image_device *, int) +{ + if (!BIT(m_fdc_ctrl_2, 5)) + return; + bool force_ready = bool(BIT(m_fdc_ctrl_2, 6)); + + floppy_image_device *floppy0, *floppy1; + floppy0 = m_floppy[0]->get_device(); + floppy1 = m_floppy[1]->get_device(); + if (!floppy0 && !floppy1) + force_ready = false; + + //if(floppy && force_ready) + // ready = floppy->ready_r(); + + //if(floppy && force_ready) + // ready = floppy->ready_r(); + + LOG("Force ready signal %d\n", force_ready); + + if (force_ready) + { + m_fdc->set_ready_line_connected(false); + m_fdc->ready_w(0); + } + else + m_fdc->ready_w(1); +} + +void pc88va2_fd_if_device::host_mode_w(u8 data) +{ + m_fdc_mode = data & 1; + LOG("$1b0 FDC op mode (%02x) %s mode\n" + , data + , m_fdc_mode ? "DMA" : "Intelligent (PIO)" + ); +// m_fdc_cpu->set_input_line(INPUT_LINE_HALT, (m_fdc_mode) ? ASSERT_LINE : CLEAR_LINE); +} + +/* + * --x- ---- CLK: FDC clock selection (0) 4.8MHz (1) 8 MHz + * ---x ---- DS1: Prohibition of the drive selection of FDC (0) Permission (1) Prohibition + * ---- xx-- TD1/TD0: Drive 1/0 track density (0) 48 TPI (1) 96 TPI + * ---- --xx RV1/RV0: Drive 1/0 mode selection (0) 2D and 2DD mode (1) 2HD mode + */ +void pc88va2_fd_if_device::host_drive_rate_w(u8 data) +{ + const bool clk = bool(BIT(data, 5)); + const bool rv1 = bool(BIT(data, 1)); + const bool rv0 = bool(BIT(data, 0)); + LOG("$1b2 FDC control port 0 (%02x) %s CLK| %d DS1| %d%d TD1/TD0| %d%d RV1/RV0\n" + , data + , clk ? " 8 MHz" : "4.8 MHz" + , !bool(BIT(data, 4)) + , bool(BIT(data, 3)) + , bool(BIT(data, 2)) + , rv1 + , rv0 + ); + m_floppy[0]->get_device()->set_rpm(rv0 ? 360 : 300); + m_floppy[1]->get_device()->set_rpm(rv1 ? 360 : 300); + + //m_fdd[0]->get_device()->ds_w(!BIT(data, 4)); + //m_fdd[1]->get_device()->ds_w(!BIT(data, 4)); + + // TODO: is this correct? sounds more like a controller clock change, while TD1/TD0 should do the rate change + m_fdc->set_rate(clk ? 500000 : 250000); +} + +/* + * ---- x--- PCM: precompensation control (1) on + * ---- --xx M1/M0: Drive 1/0 motor control (0) NOP (1) Change motor status + */ +void pc88va2_fd_if_device::host_motor_control_w(u8 data) +{ + const bool m0 = bool(BIT(data, 0)); + const bool m1 = bool(BIT(data, 1)); + + LOG("$1b4 FDC control port 1 (%02x) %d PCM| %d%d M1/M0\n" + , data + , bool(BIT(data, 3)) + , m1 + , m0 + ); + + // TODO: fine grain motor timings + // docs claims 600 msecs, must be more complex than that + if( m0 ) + m_motor_start_timer[0]->adjust(attotime::from_msec(505)); + else + m_floppy[0]->get_device()->mon_w(1); + + + if( m1 ) + m_motor_start_timer[1]->adjust(attotime::from_msec(505)); + else + m_floppy[1]->get_device()->mon_w(1); +} + +/* + * FDC control port 2 + * x--- ---- FDCRST: FDC Reset + * -xx- ---- FDCFRY FRYCEN: FDC force ready control + * -x0- ---- ignored + * -01- ---- force ready release + * -11- ---- force ready assert + * ---x ---- DMAE: DMA Enable (0) Prohibit DMA (1) Enable DMA + * ---- -x-- XTMASK: FDC timer IRQ mask (0) Disable (1) Enable + * ---- ---x TTRG: FDC timer trigger (0) FDC timer clearing (1) FDC timer start + */ +void pc88va2_fd_if_device::host_fdc_control_w(u8 data) +{ + const bool fdcrst = bool(BIT(data, 7)); + const bool ttrg = bool(BIT(data, 0)); + const bool cur_xtmask = bool(BIT(data, 2)); + const bool cur_dmae = bool(BIT(data, 4)); + LOG("$1b6 FDC control port 2 (%02x) %d FDCRST| %d%d FDCFRY| %d DMAE| %d XTMASK| %d TTRG\n" + , data + , fdcrst + , bool(BIT(data, 6)) + , bool(BIT(data, 5)) + , cur_dmae + , cur_xtmask + , ttrg + ); + + if( ttrg ) + m_fdc_timer->adjust(attotime::from_msec(100)); + +// if (cur_dmae && !m_dmae) + { +// m_fdc->set_ready_line_connected(0); +// m_fdc->ready_w(0); + } + + m_dmae = cur_dmae; + + // TODO: confirm condition + // shanghai and famista (at very least) sends a motor off if left idle for a while, + // then any attempt to load/save will fail because there's no explicit motor on + // written back to $1b4. + // Note that this still isn't enough to avoid floppy errors, but makes failures + // to be eventually recoverable for now. + if (!m_xtmask && cur_xtmask && ttrg) + { + floppy_image_device *floppy0, *floppy1; + floppy0 = m_floppy[0]->get_device(); + floppy1 = m_floppy[1]->get_device(); + + // TODO: check me out + if (floppy0) + if (m_floppy[0]->get_device()->mon_r() == 1) + m_motor_start_timer[0]->adjust(attotime::from_msec(505)); + + if (floppy1) + if (m_floppy[1]->get_device()->mon_r() == 1) + m_motor_start_timer[1]->adjust(attotime::from_msec(505)); + } + + m_xtmask = cur_xtmask; + + //if (!BIT(m_fdc_ctrl_2, 4) && BIT(data, 4)) + // m_maincpu->dreq_w<2>(1); + //m_dmac->dreq2_w(1); + + // TODO: 0 -> 1 transition? + if( fdcrst ) + m_fdc->reset(); + + m_fdc_ctrl_2 = data; + + //m_fdd[0]->get_device()->mon_w(!(BIT(data, 5))); + + // TODO: verify if this requires updating drive B: as well + fdc_update_ready(nullptr, 0); +} + +/* + * ---x ---- RDY: (0) Busy (1) Ready + */ +u8 pc88va2_fd_if_device::host_ready_r() +{ + // TODO: easy to implement, but no SW accesses it so far + if (!machine().side_effects_disabled()) + logerror("Unhandled read $1b6!\n"); + + return 0; +} diff -Nru mame-0.250+dfsg.1/src/mame/nec/pc80s31k.h mame-0.251+dfsg.1/src/mame/nec/pc80s31k.h --- mame-0.250+dfsg.1/src/mame/nec/pc80s31k.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nec/pc80s31k.h 2022-12-29 14:20:09.000000000 +0000 @@ -47,8 +47,8 @@ required_device_array m_floppy; u8 m_irq_vector = 0; -private: required_device m_fdc_cpu; +private: required_memory_region m_fdc_rom; required_device m_ppi_host; required_device m_ppi_fdc; @@ -73,6 +73,8 @@ pc80s31k_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: + pc80s31k_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + virtual const tiny_rom_entry *device_rom_region() const override; virtual void fdc_io(address_map &map) override; @@ -80,8 +82,53 @@ void drive_mode_w(u8 data); }; +class pc88va2_fd_if_device : public pc80s31k_device +{ +public: + pc88va2_fd_if_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + auto int_wr_callback() { return m_write_irq.bind(); } + auto drq_wr_callback() { return m_write_drq.bind(); } + + void host_io(address_map &map); + + void tc_w(int state) { m_fdc->tc_w(state); } + u8 dack_r() { return m_fdc->dma_r(); } + void dack_w(u8 data) { m_fdc->dma_w(data); } + +protected: + virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + +private: + devcb_write_line m_write_irq; + devcb_write_line m_write_drq; + + emu_timer *m_motor_start_timer[2]{}; + emu_timer *m_fdc_timer = nullptr; + + template TIMER_CALLBACK_MEMBER(motor_start_timer_cb); + TIMER_CALLBACK_MEMBER(fdc_timer_cb); + + void fdc_update_ready(floppy_image_device *, int); + + void host_mode_w(u8 data); + void host_drive_rate_w(u8 data); + void host_motor_control_w(u8 data); + void host_fdc_control_w(u8 data); + u8 host_ready_r(); + + u8 m_fdc_ctrl_2 = 0; + u8 m_fdc_mode = 0; + bool m_xtmask = false; + bool m_dmae = false; +}; + // device type definition -DECLARE_DEVICE_TYPE(PC80S31, pc80s31_device) -DECLARE_DEVICE_TYPE(PC80S31K, pc80s31k_device) +DECLARE_DEVICE_TYPE(PC80S31, pc80s31_device) +DECLARE_DEVICE_TYPE(PC80S31K, pc80s31k_device) +DECLARE_DEVICE_TYPE(PC88VA2_FD_IF, pc88va2_fd_if_device) #endif // MAME_MACHINE_PC80S31K_H diff -Nru mame-0.250+dfsg.1/src/mame/nec/pc8401a.cpp mame-0.251+dfsg.1/src/mame/nec/pc8401a.cpp --- mame-0.250+dfsg.1/src/mame/nec/pc8401a.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nec/pc8401a.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -21,6 +21,9 @@ - MC6845 palette - MC6845 chargen ROM - MC6845 screen update + - Merge keyboard with pc8001 / pc8801 / pc88va (same keys, running on a MCU like VA) + - PC-8431A FDC is same family as PC-80S31K, basically the 3.5" version of it. + Likely none of the available BIOSes fits here. - peripherals * PC-8431A Dual Floppy Drive diff -Nru mame-0.250+dfsg.1/src/mame/nec/pc8801.cpp mame-0.251+dfsg.1/src/mame/nec/pc8801.cpp --- mame-0.250+dfsg.1/src/mame/nec/pc8801.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nec/pc8801.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -152,7 +152,7 @@ const u8 attr_max_size = 80; std::array attr_extend_info = pc8001_base_state::attr_fetch(attr_row, gfx_mode, y, attr_fifo_size, row_size); // In case we are in a b&w mode copy the attribute structure in an internal buffer for color processing. - // TBD if decoration attributes applies to bitmap as well (very likely) + // It's unknown at this time if decoration attributes applies to bitmap as well if ((m_gfx_ctrl & 0x18) == 0x08 && gfx_mode == 2) { for (int ey = y; ey < y + m_crtc->lines_per_char(); ey ++) @@ -235,7 +235,7 @@ if (!res) return 0; - return m_crtc->get_display_status() ? (m_attr_info[y][x] >> 13) & 7 : 7; + return m_crtc->is_gfx_color_mode() ? (m_attr_info[y][x] >> 13) & 7 : 7; }); } else @@ -244,20 +244,25 @@ // - p1demo2d expects to use CRTC palette on demonstration // (white text that is set to black on previous title screen animation, // that runs in 3bpp) + // - byoin set a transparent text layer (ASCII=0x20 / attribute = 0x80 0x00) + // but it's in gfx_mode = 0 (b&w) so it just draw white from here. draw_bitmap(bitmap, cliprect, m_crtc_palette, [&](u32 bitmap_offset, int y, int x, int xi){ u8 res = 0; // HW pick ups just the first two planes (R and B), G is unused for drawing purposes. // Plane switch happens at half screen, VRAM areas 0x3e80-0x3fff is unused again. // TODO: confirm that a 15 kHz monitor cannot work with this // - jettermi just uses the other b&w mode; - // - casablan doesn't bother in changing resolution so only the upper part is drawn; + // - casablan/byoin doesn't bother in changing resolution so only the upper part is drawn. + // Update: real HW capture shows an ugly overlap with the two layers, + // implying that the second plane just latches on the same signals as the first, + // YAGNI unless found in concrete example. int plane_offset = y >= 200 ? 384 : 0; res |= ((m_gvram[bitmap_offset + plane_offset] >> xi) & 1); if (!res) return 0; - return m_crtc->get_display_status() ? (m_attr_info[y][x] >> 13) & 7 : 7; + return m_crtc->is_gfx_color_mode() ? (m_attr_info[y][x] >> 13) & 7 : 7; }); } } @@ -576,6 +581,8 @@ void pc8801_state::ext_rom_bank_w(uint8_t data) { + // TODO: bits 1 to 3 written to at POST + // selection for EXP slot ROMs? m_ext_rom_bank = data; } @@ -627,26 +634,17 @@ */ uint8_t pc8801_state::port40_r() { + // TODO: merge with PC8001 uint8_t data = 0x00; - data |= ioport("CTRL")->read() & 0xcf; + data |= m_centronics_busy; +// data |= m_centronics_ack << 1; + data |= ioport("CTRL")->read() & 0xca; data |= m_rtc->data_out_r() << 4; data |= m_crtc->vrtc_r() << 5; // TODO: enable line from pc80s31k (bit 3, active_low) return data; - -// return ioport("CTRL")->read(); -} - -inline attotime pc8801_state::mouse_limit_hz() -{ - return attotime::from_hz(900); -} - -inline attotime pc8801fh_state::mouse_limit_hz() -{ - return attotime::from_hz(m_clock_setting ? 900 : 1800); } /* @@ -667,6 +665,9 @@ */ void pc8801_state::port40_w(uint8_t data) { + // TODO: merge with PC8001 + m_centronics->write_strobe(BIT(data, 0)); + m_rtc->stb_w((data & 2) >> 1); m_rtc->clk_w((data & 4) >> 2); @@ -676,35 +677,7 @@ if(((m_device_ctrl_data & 0x20) == 0x20) && ((data & 0x20) == 0x00)) m_beeper->set_state(0); - // TODO: send to joyport implementation - if((m_device_ctrl_data & 0x40) != (data & 0x40)) - { - attotime new_time = machine().time(); - - if(data & 0x40 && (new_time - m_mouse.time) > mouse_limit_hz()) - { - m_mouse.phase = 0; - } - else - { - m_mouse.phase ++; - m_mouse.phase &= 3; - } - - if(m_mouse.phase == 0) - { - const u8 mouse_x = ioport("MOUSEX")->read(); - const u8 mouse_y = ioport("MOUSEY")->read(); - - m_mouse.lx = (mouse_x - m_mouse.prev_dx) & 0xff; - m_mouse.ly = (mouse_y - m_mouse.prev_dy) & 0xff; - - m_mouse.prev_dx = mouse_x; - m_mouse.prev_dy = mouse_y; - } - - m_mouse.time = machine().time(); - } + m_mouse_port->pin_8_w(BIT(data, 6)); // TODO: is SING a buzzer mask? bastard leaves beeper to ON state otherwise if(m_device_ctrl_data & 0x80) @@ -879,6 +852,7 @@ void pc8801_state::extram_bank_w(uint8_t data) { + // TODO: bits 2 and 3 also accesses bank for PC-8801-17 "VAB" card m_extram_bank = data; } @@ -924,6 +898,7 @@ // https://retrocomputerpeople.web.fc2.com/machines/nec/8801/io_map88.html } +#if 0 void pc8801_state::rtc_w(uint8_t data) { m_rtc->c0_w((data & 1) >> 0); @@ -933,6 +908,7 @@ // TODO: remaining bits } +#endif /* * PC8801FH overrides (CPU clock switch) @@ -1011,7 +987,7 @@ map(0x0d, 0x0d).portr("KEY13"); map(0x0e, 0x0e).portr("KEY14"); map(0x0f, 0x0f).portr("KEY15"); - map(0x10, 0x10).w(FUNC(pc8801_state::rtc_w)); + map(0x10, 0x10).w(FUNC(pc8801_state::port10_w)); map(0x20, 0x21).mirror(0x0e).rw(m_usart, FUNC(i8251_device::read), FUNC(i8251_device::write)); // CMT / RS-232C ch. 0 map(0x30, 0x30).portr("DSW1").w(FUNC(pc8801_state::port30_w)); map(0x31, 0x31).portr("DSW2").w(FUNC(pc8801_state::port31_w)); @@ -1039,6 +1015,7 @@ map(0x70, 0x70).rw(FUNC(pc8801_state::window_bank_r), FUNC(pc8801_state::window_bank_w)); map(0x71, 0x71).rw(FUNC(pc8801_state::ext_rom_bank_r), FUNC(pc8801_state::ext_rom_bank_w)); map(0x78, 0x78).w(FUNC(pc8801_state::window_bank_inc_w)); +// map(0x82, 0x82).w access window for PC8801-16 // map(0x8e, 0x8e).r , accessed by scruiser on boot (a board ID?) // map(0x90, 0x9f) PC-8801-31 CD-ROM i/f (8801MC) // map(0xa0, 0xa3) GSX-8800 or network board @@ -1066,7 +1043,7 @@ map(0xe8, 0xeb).rw(FUNC(pc8801_state::kanji_r<0>), FUNC(pc8801_state::kanji_w<0>)); map(0xec, 0xef).rw(FUNC(pc8801_state::kanji_r<1>), FUNC(pc8801_state::kanji_w<1>)); // map(0xf0, 0xf1) dictionary bank (8801MA and later) -// map(0xf3, 0xf3) DMA floppy (unknown) +// map(0xf3, 0xf3) DMA floppy (direct access like PC88VA?) // map(0xf4, 0xf7) DMA 5'25-inch floppy (?) // map(0xf8, 0xfb) DMA 8-inch floppy (?) map(0xfc, 0xff).m(m_pc80s31, FUNC(pc80s31_device::host_map)); @@ -1343,27 +1320,6 @@ PORT_DIPSETTING( 0x00, "Slow" ) PORT_DIPSETTING( 0x40, DEF_STR( High ) ) - PORT_START("OPN_PA") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("BOARD_CONFIG", 0x02, EQUALS, 0x00) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("BOARD_CONFIG", 0x02, EQUALS, 0x00) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("BOARD_CONFIG", 0x02, EQUALS, 0x00) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("BOARD_CONFIG", 0x02, EQUALS, 0x00) - PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("OPN_PB") - // TODO: yojukiko and grobda maps Joystick buttons in reverse than expected? - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Joystick Button 1") PORT_CONDITION("BOARD_CONFIG", 0x02, EQUALS, 0x00) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Joystick Button 2") PORT_CONDITION("BOARD_CONFIG", 0x02, EQUALS, 0x00) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Mouse Button 1") PORT_CONDITION("BOARD_CONFIG", 0x02, EQUALS, 0x02) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Mouse Button 2") PORT_CONDITION("BOARD_CONFIG", 0x02, EQUALS, 0x02) - PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("MOUSEX") - PORT_BIT( 0xff, 0x00, IPT_MOUSE_X ) PORT_REVERSE PORT_SENSITIVITY(20) PORT_KEYDELTA(20) PORT_PLAYER(1) PORT_CONDITION("BOARD_CONFIG", 0x02, EQUALS, 0x02) - - PORT_START("MOUSEY") - PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y ) PORT_REVERSE PORT_SENSITIVITY(20) PORT_KEYDELTA(20) PORT_PLAYER(1) PORT_CONDITION("BOARD_CONFIG", 0x02, EQUALS, 0x02) - PORT_START("MEM") PORT_CONFNAME( 0x0f, 0x0a, "Extension memory" ) PORT_CONFSETTING( 0x00, DEF_STR( None ) ) @@ -1386,9 +1342,6 @@ // PORT_CONFNAME( 0x01, 0x01, "Sound Board" ) // PORT_CONFSETTING( 0x00, "OPN (YM2203)" ) // PORT_CONFSETTING( 0x01, "OPNA (YM2608)" ) - PORT_CONFNAME( 0x02, 0x00, "Port 1 Connection" ) - PORT_CONFSETTING( 0x00, "Joystick" ) - PORT_CONFSETTING( 0x02, "Mouse" ) INPUT_PORTS_END static INPUT_PORTS_START( pc8801fh ) @@ -1441,9 +1394,6 @@ { pc8001_base_state::machine_start(); - m_rtc->cs_w(1); - m_rtc->oe_w(1); - // TODO: ready signal connected to FDRDY, presumably for the floppy ch.0 and 1 m_dma->ready_w(1); @@ -1456,13 +1406,6 @@ save_pointer(NAME(m_hi_work_ram), 0x1000); save_pointer(NAME(m_ext_work_ram), 0x8000*0x100); save_pointer(NAME(m_gvram), 0xc000); - save_item(STRUCT_MEMBER(m_mouse, phase)); - save_item(STRUCT_MEMBER(m_mouse, prev_dx)); - save_item(STRUCT_MEMBER(m_mouse, prev_dy)); - save_item(STRUCT_MEMBER(m_mouse, lx)); - save_item(STRUCT_MEMBER(m_mouse, ly)); -// save_item(STRUCT_MEMBER(m_mouse, time)); - save_item(NAME(m_mouse.time)); save_item(NAME(m_gfx_ctrl)); save_item(NAME(m_ext_rom_bank)); save_item(NAME(m_vram_sel)); @@ -1504,15 +1447,9 @@ m_bitmap_layer_mask = 0; m_vram_sel = 3; - m_mouse.phase = 0; - // initialize ALU - { - int i; - - for(i = 0; i < 3; i++) - m_alu_reg[i] = 0x00; - } + for(int i = 0; i < 3; i++) + m_alu_reg[i] = 0x00; m_beeper->set_state(0); @@ -1592,25 +1529,18 @@ m_cdrom_bank = true; } -// TODO: to joyport DB9 option slot +// DE-9 mouse port on front panel (labelled "マウス") - MSX-compatible uint8_t pc8801mk2sr_state::opn_porta_r() { - if(ioport("BOARD_CONFIG")->read() & 2) - { - uint8_t shift, res; - - shift = (m_mouse.phase & 1) ? 0 : 4; - res = (m_mouse.phase & 2) ? m_mouse.ly : m_mouse.lx; - -// logerror("%d\n",m_mouse.phase); - - return ((res >> shift) & 0x0f) | 0xf0; - } + return BIT(m_mouse_port->read(), 0, 4) | 0xf0; +} - return ioport("OPN_PA")->read(); +uint8_t pc8801mk2sr_state::opn_portb_r() +{ + return BIT(m_mouse_port->read(), 4, 2) | 0xfc; } -/* Cassette Configuration */ +// Cassette Configuration WRITE_LINE_MEMBER( pc8801_state::txdata_callback ) { //m_cassette->output( (state) ? 1.0 : -1.0); @@ -1726,7 +1656,13 @@ m_pic->set_int_dis_hack(true); UPD1990A(config, m_rtc); - //CENTRONICS(config, "centronics", centronics_devices, "printer"); + + CENTRONICS(config, m_centronics, centronics_devices, "printer"); + m_centronics->ack_handler().set(FUNC(pc8801_state::write_centronics_ack)); + m_centronics->busy_handler().set(FUNC(pc8801_state::write_centronics_busy)); + + OUTPUT_LATCH(config, m_cent_data_out); + m_centronics->set_output_latch(*m_cent_data_out); // TODO: needs T88 format support CASSETTE(config, m_cassette); @@ -1788,6 +1724,8 @@ m_beeper->add_route(ALL_OUTPUTS, speaker, 0.10); } + MSX_GENERAL_PURPOSE_PORT(config, m_mouse_port, msx_general_purpose_port_devices, "joystick"); + PC8801_EXP_SLOT(config, m_exp, pc8801_exp_devices, nullptr); m_exp->set_iospace(m_maincpu, AS_IO); m_exp->int3_callback().set([this] (bool state) { m_pic->r_w(7 ^ INT3_IRQ_LEVEL, !state); }); @@ -1802,7 +1740,7 @@ YM2203(config, m_opn, MASTER_CLOCK); m_opn->irq_handler().set(FUNC(pc8801mk2sr_state::int4_irq_w)); m_opn->port_a_read_callback().set(FUNC(pc8801mk2sr_state::opn_porta_r)); - m_opn->port_b_read_callback().set_ioport("OPN_PB"); + m_opn->port_b_read_callback().set(FUNC(pc8801mk2sr_state::opn_portb_r)); for (auto &speaker : { m_lspeaker, m_rspeaker }) { @@ -1830,7 +1768,8 @@ m_opna->set_addrmap(0, &pc8801fh_state::opna_map); m_opna->irq_handler().set(FUNC(pc8801fh_state::int4_irq_w)); m_opna->port_a_read_callback().set(FUNC(pc8801fh_state::opn_porta_r)); - m_opna->port_b_read_callback().set_ioport("OPN_PB"); + m_opna->port_b_read_callback().set(FUNC(pc8801fh_state::opn_portb_r)); + // TODO: per-channel mixing is unconfirmed m_opna->add_route(0, m_lspeaker, 0.25); m_opna->add_route(0, m_rspeaker, 0.25); @@ -2076,29 +2015,27 @@ ROM_LOAD( "mc_jisyo.rom", 0x00000, 0x80000, CRC(bd6eb062) SHA1(deef0cc2a9734ba891a6d6c022aa70ffc66f783e) ) ROM_END -/* System Drivers */ - -/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */ -COMP( 1981, pc8801, 0, 0, pc8801, pc8801, pc8801_state, empty_init, "NEC", "PC-8801", MACHINE_NOT_WORKING ) -COMP( 1983, pc8801mk2, pc8801, 0, pc8801, pc8801, pc8801_state, empty_init, "NEC", "PC-8801mkII", MACHINE_NOT_WORKING ) +COMP( 1981, pc8801, 0, 0, pc8801, pc8801, pc8801_state, empty_init, "NEC", "PC-8801", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_GRAPHICS ) +COMP( 1983, pc8801mk2, pc8801, 0, pc8801, pc8801, pc8801_state, empty_init, "NEC", "PC-8801mkII", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_GRAPHICS ) // internal OPN -COMP( 1985, pc8801mk2sr, 0, 0, pc8801mk2sr, pc8801, pc8801mk2sr_state, empty_init, "NEC", "PC-8801mkIISR", MACHINE_NOT_WORKING ) -//COMP( 1985, pc8801mk2tr, pc8801mk2sr, 0, pc8801mk2sr, pc8801, pc8801mk2sr_state, empty_init, "NEC", "PC-8801mkIITR", MACHINE_NOT_WORKING ) -COMP( 1985, pc8801mk2fr, pc8801mk2sr, 0, pc8801mk2sr, pc8801, pc8801mk2sr_state, empty_init, "NEC", "PC-8801mkIIFR", MACHINE_NOT_WORKING ) -COMP( 1985, pc8801mk2mr, pc8801mk2sr, 0, pc8801mk2mr, pc8801, pc8801mk2sr_state, empty_init, "NEC", "PC-8801mkIIMR", MACHINE_NOT_WORKING ) +COMP( 1985, pc8801mk2sr, 0, 0, pc8801mk2sr, pc8801, pc8801mk2sr_state, empty_init, "NEC", "PC-8801mkIISR", MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_GRAPHICS ) +//COMP( 1985, pc8801mk2tr, pc8801mk2sr, 0, pc8801mk2sr, pc8801, pc8801mk2sr_state, empty_init, "NEC", "PC-8801mkIITR", MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_GRAPHICS ) +COMP( 1985, pc8801mk2fr, pc8801mk2sr, 0, pc8801mk2sr, pc8801, pc8801mk2sr_state, empty_init, "NEC", "PC-8801mkIIFR", MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_GRAPHICS ) +COMP( 1985, pc8801mk2mr, pc8801mk2sr, 0, pc8801mk2mr, pc8801, pc8801mk2sr_state, empty_init, "NEC", "PC-8801mkIIMR", MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_GRAPHICS ) // internal OPNA -//COMP( 1986, pc8801fh, pc8801mh, 0, pc8801fh, pc8801fh, pc8801fh_state, empty_init, "NEC", "PC-8801FH", MACHINE_NOT_WORKING ) -COMP( 1986, pc8801mh, 0, 0, pc8801fh, pc8801fh, pc8801fh_state, empty_init, "NEC", "PC-8801MH", MACHINE_NOT_WORKING ) -COMP( 1987, pc8801fa, pc8801mh, 0, pc8801fh, pc8801fh, pc8801fh_state, empty_init, "NEC", "PC-8801FA", MACHINE_NOT_WORKING ) -COMP( 1987, pc8801ma, 0, 0, pc8801ma, pc8801fh, pc8801ma_state, empty_init, "NEC", "PC-8801MA", MACHINE_NOT_WORKING ) -//COMP( 1988, pc8801fe, pc8801ma, 0, pc8801fa, pc8801fh, pc8801ma_state, empty_init, "NEC", "PC-8801FE", MACHINE_NOT_WORKING ) -COMP( 1988, pc8801ma2, pc8801ma, 0, pc8801ma, pc8801fh, pc8801ma_state, empty_init, "NEC", "PC-8801MA2", MACHINE_NOT_WORKING ) -//COMP( 1989, pc8801fe2, pc8801ma, 0, pc8801fa, pc8801fh, pc8801ma_state, empty_init, "NEC", "PC-8801FE2", MACHINE_NOT_WORKING ) -COMP( 1989, pc8801mc, pc8801ma, 0, pc8801mc, pc8801fh, pc8801mc_state, empty_init, "NEC", "PC-8801MC", MACHINE_NOT_WORKING ) +//COMP( 1986, pc8801fh, pc8801mh, 0, pc8801fh, pc8801fh, pc8801fh_state, empty_init, "NEC", "PC-8801FH", MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_GRAPHICS ) +COMP( 1986, pc8801mh, 0, 0, pc8801fh, pc8801fh, pc8801fh_state, empty_init, "NEC", "PC-8801MH", MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_GRAPHICS ) +COMP( 1987, pc8801fa, pc8801mh, 0, pc8801fh, pc8801fh, pc8801fh_state, empty_init, "NEC", "PC-8801FA", MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_GRAPHICS ) +COMP( 1987, pc8801ma, 0, 0, pc8801ma, pc8801fh, pc8801ma_state, empty_init, "NEC", "PC-8801MA", MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_GRAPHICS ) +//COMP( 1988, pc8801fe, pc8801ma, 0, pc8801fa, pc8801fh, pc8801ma_state, empty_init, "NEC", "PC-8801FE", MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_GRAPHICS ) +COMP( 1988, pc8801ma2, pc8801ma, 0, pc8801ma, pc8801fh, pc8801ma_state, empty_init, "NEC", "PC-8801MA2", MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_GRAPHICS ) +//COMP( 1989, pc8801fe2, pc8801ma, 0, pc8801fa, pc8801fh, pc8801ma_state, empty_init, "NEC", "PC-8801FE2", MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_GRAPHICS ) +COMP( 1989, pc8801mc, pc8801ma, 0, pc8801mc, pc8801fh, pc8801mc_state, empty_init, "NEC", "PC-8801MC", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_GRAPHICS ) // PC98DO (PC88+PC98, V33 + μPD70008AC) +// belongs to own driver //COMP( 1989, pc98do, 0, 0, pc98do, pc98do, pc8801_state, empty_init, "NEC", "PC-98DO", MACHINE_NOT_WORKING ) //COMP( 1990, pc98dop, 0, 0, pc98do, pc98do, pc8801_state, empty_init, "NEC", "PC-98DO+", MACHINE_NOT_WORKING ) diff -Nru mame-0.250+dfsg.1/src/mame/nec/pc8801.h mame-0.251+dfsg.1/src/mame/nec/pc8801.h --- mame-0.250+dfsg.1/src/mame/nec/pc8801.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nec/pc8801.h 2022-12-29 14:20:09.000000000 +0000 @@ -6,12 +6,17 @@ ********************************************************************************************/ -#ifndef MAME_INCLUDES_PC8801_H -#define MAME_INCLUDES_PC8801_H +#ifndef MAME_NEC_PC8801_H +#define MAME_NEC_PC8801_H #pragma once #include "pc8001.h" + +#include "bus/centronics/ctronics.h" +#include "bus/msx/ctrl/ctrl.h" +#include "bus/pc8801/pc8801_31.h" +#include "bus/pc8801/pc8801_exp.h" #include "cpu/z80/z80.h" #include "imagedev/cassette.h" #include "imagedev/floppy.h" @@ -23,16 +28,14 @@ #include "pc80s31k.h" #include "sound/beep.h" #include "sound/ymopn.h" -#include "bus/centronics/ctronics.h" -#include "bus/pc8801/pc8801_31.h" -#include "bus/pc8801/pc8801_exp.h" + #include "emupal.h" #include "screen.h" #include "softlist.h" #include "speaker.h" + #define I8214_TAG "i8214" -#define UPD1990A_TAG "upd1990a" class pc8801_state : public pc8001_base_state { @@ -43,7 +46,6 @@ , m_screen(*this, "screen") , m_pc80s31(*this, "pc80s31") , m_pic(*this, I8214_TAG) - , m_rtc(*this, UPD1990A_TAG) , m_usart(*this, "usart") // , m_cassette(*this, "cassette") , m_beeper(*this, "beeper") @@ -55,6 +57,7 @@ // , m_cg_rom(*this, "cgrom") , m_kanji_rom(*this, "kanji") , m_kanji_lv2_rom(*this, "kanji_lv2") + , m_mouse_port(*this, "mouseport") // labelled "マウス" (mouse) - can't use "mouse" because of core -mouse option , m_exp(*this, "exp") { } @@ -73,8 +76,6 @@ virtual uint8_t dma_mem_r(offs_t offset) override; - virtual attotime mouse_limit_hz(); - virtual uint8_t dictionary_rom_r(offs_t offset); virtual bool dictionary_rom_enable(); @@ -86,7 +87,7 @@ required_device m_screen; required_device m_pc80s31; optional_device m_pic; - required_device m_rtc; +// required_device m_rtc; required_device m_usart; // required_device m_cassette; required_device m_beeper; @@ -98,19 +99,11 @@ // required_region_ptr m_cg_rom; required_region_ptr m_kanji_rom; required_region_ptr m_kanji_lv2_rom; + required_device m_mouse_port; required_device m_exp; DECLARE_WRITE_LINE_MEMBER(int4_irq_w); - struct mouse_t { - uint8_t phase = 0; - int8_t prev_dx = 0, prev_dy = 0; - uint8_t lx = 0, ly = 0; - - attotime time = attotime::never; - }; - - mouse_t m_mouse; uint8_t m_gfx_ctrl = 0; private: @@ -183,7 +176,7 @@ void alu_ctrl2_w(uint8_t data); template uint8_t kanji_r(offs_t offset); template void kanji_w(offs_t offset, uint8_t data); - void rtc_w(uint8_t data); +// void rtc_w(uint8_t data); DECLARE_WRITE_LINE_MEMBER(txdata_callback); @@ -238,6 +231,7 @@ virtual void main_io(address_map &map) override; uint8_t opn_porta_r(); + uint8_t opn_portb_r(); private: optional_device m_opn; @@ -259,8 +253,6 @@ virtual void machine_reset() override; virtual void main_io(address_map &map) override; - virtual attotime mouse_limit_hz() override; - private: required_device m_opna; void opna_map(address_map &map); @@ -328,4 +320,4 @@ bool m_cdrom_bank = true; }; -#endif // MAME_INCLUDES_PC8801_H +#endif // MAME_NEC_PC8801_H diff -Nru mame-0.250+dfsg.1/src/mame/nec/pc88va.cpp mame-0.251+dfsg.1/src/mame/nec/pc88va.cpp --- mame-0.250+dfsg.1/src/mame/nec/pc88va.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nec/pc88va.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,733 +1,185 @@ // license:BSD-3-Clause // copyright-holders:Angelo Salese -/******************************************************************************************** +// thanks-to: Fujix +/************************************************************************************************** PC-88VA (c) 1987 NEC - A follow up of the regular PC-8801. It can also run PC-8801 software in compatible mode + Here be dragons, a mostly compatible PC-8801 with extra V3 Mode for superset. preliminary driver by Angelo Salese Special thanks to Fujix for his documentation translation help TODO: - - What exact kind of garbage happens if you try to enable both direct and palette color - modes to a graphic layer? - - unemulated upd71071 demand mode; - - What is exactly supposed to be a "bus slot"? Does it have an official name? + - pc88va (stock version) has two bogus opcodes. + One is at 0xf0b15 (0x0f 0xfe), another at 0xf0b31 (br 1000h:0c003h). + Latter will make the program flow to jump to lalaland. + This also happens if you load a regular V1/V2 game assuming you have FDC PIO properly + hooked up, is the first opcode actually a Z80 mode switch? + - pc88va is also known to have a slightly different banking scheme and + regular YM2203 as default sound board. + - video emulation is lacking many features, cfr. pc88va_v.cpp; + - keyboard runs on undumped MCU, we currently stick irqs together on + selected keys in order to have an easier QoL while testing this. + - Backport from PC-8801 main map, apply supersets where applicable; + \- IDP has EMUL for upd3301 + \- In emulation mode HW still relies to a i8214, so it bridges thru + main ICU in cascaded mode via IRQ7; + \- beeper or dac1bit (to be confirmed); + \- (other stuff ...) + - Convert FDC usage to pc88va2_fd_if_device, we also need PIO comms for sorcer anyway; + - irq dispatch needs to be revisited, too many instances of sound irq failing for example. + The current hook-ups aren't legal, V50 core bug? + - Very inconsistent SW boot behaviours, either down to: + \- the current hack in FDC PIO port returning RNG; + \- V50 timings; + \- FDC; + - Every PC Engine OS boot tries to write TVRAM ASCII data on every boot to + $exxxx ROM region, banking bug? + - all N88 BASIC entries tries to do stuff with EMM, more banking? + - Convert SASI from PC-9801 to a shared device, apparently it's same i/f; + - Implement bus slot, which should still be PC-8801 EXPansion bus. + + (old notes, to be reordered) - fdc "intelligent mode" has 0x7f as irq vector ... 0x7f is ld a,a and it IS NOT correctly hooked up by the current z80 core - - PC-88VA stock version has two bogus opcodes. One is at 0xf0b15, another at 0xf0b31. - Making a patch for the latter makes the system to jump into a "DIP-Switch" display. - bp f0b31,pc=0xf0b36,g - Update: it never reaches latter with V30->V50 CPU switch fix; - Fix floppy motor hook-up (floppy believes to be always in even if empty drive); - Support for PC8801 compatible mode & PC80S31K (floppy interface); -********************************************************************************************/ + Notes: + - hold F8 at POST to bring software dip settings menu + - PC-88VA-91 is a ROM upgrade kit for a PC-88VA -> VA2/VA3. + Has four roms, marked by VAEG as VUROM00.ROM, VUROM08.ROM, VUROM1.ROM, VUDIC.ROM. + + References: + - PC-88VAテクニカルマニュアル + - http://www.pc88.gr.jp/vafaq/view.php/articlelist/88va/vafaq + +=================================================================================================== + +irq table (line - vector - source): +ICU +irq 0 - 08h - timer 1 +irq 1 - 09h - keyboard irq +irq 2 - 0Ah - VRTC +irq 3 - 0Bh - UINT0 (B24) +irq 4 - 0Ch - RS-232C +irq 5 - 0Dh - UINT1 (B25) +irq 6 - 0Eh - UINT2 (B26) +irq 7 - N/A - Slave (either secondary i8259 or i8214) +i8259 slave +irq 8 - 10H - SGP +irq 9 - 11H - UINT3 (HDD, B27) +irq 10 - 12H - UINT4 (B28) +irq 11 - 13H - FDC +irq 12 - 14H - Sound +irq 13 - 15H - General timer 3 (mouse) +irq 14 - 16H - +irq 15 - 17H - + +trap list (brief, for quick consultation): +brk 82h AH=01h , animefrm uses it +brk 8Ch AH=02h read calendar clock -> CH = hour, CL = minutes, DH = seconds, DL = 0 + +**************************************************************************************************/ #include "emu.h" #include "pc88va.h" #include "softlist_dev.h" +#include +#include "utf8.h" -// TODO: verify clocks -#define MASTER_CLOCK XTAL(8'000'000) // may be XTAL(31'948'800) / 4? (based on PC-8801 and PC-9801) -#define FM_CLOCK (XTAL(31'948'800) / 8) // 3993600 - - -void pc88va_state::video_start() -{ - m_kanjiram = std::make_unique(0x4000); - m_gfxdecode->gfx(2)->set_source(m_kanjiram.get()); - m_gfxdecode->gfx(3)->set_source(m_kanjiram.get()); -} - -void pc88va_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect) -{ - uint16_t const *const tvram = m_tvram; +#define LOG_FDC (1U << 2) // $1b0-$1b2 accesses +#define LOG_FDC2 (1U << 3) // $1b4-$1b6 accesses (verbose) - int offs = m_tsp.spr_offset; - for(int i=0;i<(0x100);i+=(8)) - { - int spr_count; +#define VERBOSE (LOG_GENERAL | LOG_FDC) +//#define LOG_OUTPUT_STREAM std::cout - int ysize = (tvram[(offs + i + 0) / 2] & 0xfc00) >> 10; - int sw = (tvram[(offs + i + 0) / 2] & 0x200) >> 9; - int yp = (tvram[(offs + i + 0) / 2] & 0x1ff); - int xsize = (tvram[(offs + i + 2) / 2] & 0xf800) >> 11; - int md = (tvram[(offs + i + 2) / 2] & 0x400) >> 10; - int xp = (tvram[(offs + i + 2) / 2] & 0x3ff); - int spda = (tvram[(offs + i + 4) / 2] & 0xffff); - int fg_col = (tvram[(offs + i + 6) / 2] & 0xf0) >> 4; - int bc = (tvram[(offs + i + 6) / 2] & 0x08) >> 3; +#include "logmacro.h" - if(!sw) - continue; - - if(yp & 0x100) - { - yp &= 0xff; - yp = 0x100 - yp; - } +#define LOGFDC(...) LOGMASKED(LOG_FDC, __VA_ARGS__) +#define LOGFDC2(...) LOGMASKED(LOG_FDC2, __VA_ARGS__) - if(0) // uhm, makes more sense without the sign? - if(xp & 0x200) - { - xp &= 0x1ff; - xp = 0x200 - xp; - } - - if(md) // 1bpp mode - { - xsize = (xsize + 1) * 32; - ysize = (ysize + 1) * 4; - - if(!(spda & 0x8000)) // correct? - spda *= 2; - - spr_count = 0; - - for(int y_i=0;y_i(tvram[(spda+spr_count) / 2],7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8) >> (15-x_s)) & 1; - - pen = pen & 1 ? fg_col : (bc) ? 8 : -1; - - if(pen != -1) //transparent pen - bitmap.pix(yp+y_i, xp+x_i+(x_s)) = m_palette->pen(pen); - } - spr_count+=2; - } - } - } - else // 4bpp mode (UNTESTED) - { - xsize = (xsize + 1) * 8; - ysize = (ysize + 1) * 4; - - if(!(spda & 0x8000)) // correct? - spda *= 2; - - spr_count = 0; - - for(int y_i=0;y_i(tvram[(spda+spr_count) / 2],7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8)) >> (16-(x_s*8)) & 0xf; - - //if(bc != -1) //transparent pen - bitmap.pix(yp+y_i, xp+x_i+(x_s)) = m_palette->pen(pen); - } - spr_count+=2; - } - } - } - } -} - -/* TODO: this is either a result of an hand-crafted ROM or the JIS stuff is really attribute related ... */ -uint32_t pc88va_state::calc_kanji_rom_addr(uint8_t jis1,uint8_t jis2,int x,int y) -{ - if(jis1 < 0x30) - return ((jis2 & 0x60) << 8) + ((jis1 & 0x07) << 10) + ((jis2 & 0x1f) << 5); - else if(jis1 >= 0x30 && jis1 < 0x3f) - return ((jis2 & 0x60) << 10) + ((jis1 & 0x0f) << 10) + ((jis2 & 0x1f) << 5); - else if(jis1 >= 0x40 && jis1 < 0x50) - return 0x4000 + ((jis2 & 0x60) << 10) + ((jis1 & 0x0f) << 10) + ((jis2 & 0x1f) << 5); - else if(x == 0 && y == 0 && jis1 != 0) // debug stuff, to be nuked in the end - printf("%02x\n",jis1); - - return 0; -} - -void pc88va_state::draw_text(bitmap_rgb32 &bitmap, const rectangle &cliprect) -{ - uint16_t const *const tvram = m_tvram; - // TODO: PCG select won't work with this arrangement - uint8_t const *const kanji = memregion("kanji")->base(); - - uint32_t count = tvram[m_tsp.tvram_vreg_offset/2]; - - uint8_t attr_mode = tvram[(m_tsp.tvram_vreg_offset+0xa) / 2] & 0x1f; - /* Note: bug in docs has the following two reversed */ - uint8_t screen_fg_col = (tvram[(m_tsp.tvram_vreg_offset+0xa) / 2] & 0xf000) >> 12; - uint8_t screen_bg_col = (tvram[(m_tsp.tvram_vreg_offset+0xa) / 2] & 0x0f00) >> 8; - - for(int y=0;y<13;y++) - { - for(int x=0;x<80;x++) - { - uint8_t jis1 = (tvram[count] & 0x7f) + 0x20; - uint8_t jis2 = (tvram[count] & 0x7f00) >> 8; - uint16_t lr_half_gfx = ((tvram[count] & 0x8000) >> 15); - - uint32_t tile_num = calc_kanji_rom_addr(jis1,jis2,x,y); - - uint16_t attr = (tvram[count+(m_tsp.attr_offset/2)] & 0x00ff); - - uint8_t fg_col,bg_col,secret,reverse; - //uint8_t blink,dwidc,dwid,uline,hline; - fg_col = bg_col = reverse = secret = 0; //blink = dwidc = dwid = uline = hline = 0; - - switch(attr_mode) - { - /* - xxxx ---- foreground color - ---- xxxx background color - */ - case 0: - fg_col = (attr & 0xf0) >> 4; - bg_col = (attr & 0x0f) >> 0; - break; - /* - xxxx ---- foreground color - ---- x--- horizontal line - ---- -x-- reverse - ---- --x- blink - ---- ---x secret (hide text) - background color is defined by screen control table values - */ - case 1: - fg_col = (attr & 0xf0) >> 4; - bg_col = screen_bg_col; - //hline = (attr & 0x08) >> 3; - reverse = (attr & 0x04) >> 2; - //blink = (attr & 0x02) >> 1; - secret = (attr & 0x01) >> 0; - break; - /* - x--- ---- dwidc - -x-- ---- dwid - --x- ---- uline - ---x ---- hline - ---- -x-- reverse - ---- --x- blink - ---- ---x secret (hide text) - background and foreground colors are defined by screen control table values - */ - case 2: - fg_col = screen_fg_col; - bg_col = screen_bg_col; - //dwidc = (attr & 0x80) >> 7; - //dwid = (attr & 0x40) >> 6; - //uline = (attr & 0x20) >> 5; - //hline = (attr & 0x10) >> 4; - reverse = (attr & 0x04) >> 2; - //blink = (attr & 0x02) >> 1; - secret = (attr & 0x01) >> 0; - break; - /* - ---- x--- mixes between mode 0 and 2 - - xxxx 1--- foreground color - ---- 1xxx background color - 2) - x--- 0--- dwidc - -x-- 0--- dwid - --x- 0--- uline - ---x 0--- hline - ---- 0x-- reverse - ---- 0-x- blink - ---- 0--x secret (hide text) - background and foreground colors are defined by screen control table values - */ - case 3: - { - if(attr & 0x8) - { - fg_col = (attr & 0xf0) >> 4; - bg_col = (attr & 0x07) >> 0; - } - else - { - fg_col = screen_fg_col; - bg_col = screen_bg_col; - //dwidc = (attr & 0x80) >> 7; - //dwid = (attr & 0x40) >> 6; - //uline = (attr & 0x20) >> 5; - //hline = (attr & 0x10) >> 4; - reverse = (attr & 0x04) >> 2; - //blink = (attr & 0x02) >> 1; - secret = (attr & 0x01) >> 0; - } - } - break; - /* - x--- ---- blink - -xxx ---- background color - ---- xxxx foreground color - */ - case 4: - fg_col = (attr & 0x0f) >> 0; - bg_col = (attr & 0x70) >> 4; - //blink = (attr & 0x80) >> 7; - break; - /* - x--- ---- blink - -xxx ---- background color - ---- xxxx foreground color - hline is enabled if foreground color is 1 or 9 - */ - case 5: - fg_col = (attr & 0x0f) >> 0; - bg_col = (attr & 0x70) >> 4; - //blink = (attr & 0x80) >> 7; - //if((fg_col & 7) == 1) - //hline = 1; - break; - default: - popmessage("Illegal text tilemap attribute mode %02x, contact MESSdev",attr_mode); - return; - } - - for(int yi=0;yi<16;yi++) - { - for(int xi=0;xi<8;xi++) - { - int res_x = x*8+xi; - int res_y = y*16+yi; - - if(!cliprect.contains(res_x, res_y)) - continue; - - int pen = kanji[((yi*2)+lr_half_gfx)+tile_num] >> (7-xi) & 1; - - if(reverse) - pen = pen & 1 ? bg_col : fg_col; - else - pen = pen & 1 ? fg_col : bg_col; - - if(secret) { pen = 0; } //hide text - - if(pen != -1) //transparent - bitmap.pix(res_y, res_x) = m_palette->pen(pen); - } - } - - count++; - count&=0xffff; - } - } -} - -uint32_t pc88va_state::screen_update_pc88va(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) -{ - uint8_t pri,cur_pri_lv; - uint32_t screen_pri; - bitmap.fill(0, cliprect); - - if(m_tsp.disp_on == 0) // don't bother if we are under DSPOFF command - return 0; - - /* - m_video_pri_reg[0] - xxxx ---- ---- ---- priority 3 - ---- xxxx ---- ---- priority 2 - ---- ---- xxxx ---- priority 1 - ---- ---- ---- xxxx priority 0 - m_video_pri_reg[1] - ---- ---- xxxx ---- priority 5 - ---- ---- ---- xxxx priority 4 - - Note that orthogonality level is actually REVERSED than the level number it indicates, so we have to play a little with the data for an easier usage ... - */ - - screen_pri = (m_video_pri_reg[1] & 0x00f0) >> 4; // priority 5 - screen_pri|= (m_video_pri_reg[1] & 0x000f) << 4; // priority 4 - screen_pri|= (m_video_pri_reg[0] & 0xf000) >> 4; // priority 3 - screen_pri|= (m_video_pri_reg[0] & 0x0f00) << 4; // priority 2 - screen_pri|= (m_video_pri_reg[0] & 0x00f0) << 12; // priority 1 - screen_pri|= (m_video_pri_reg[0] & 0x000f) << 20; // priority 0 - - for(pri=0;pri<6;pri++) - { - cur_pri_lv = (screen_pri >> (pri*4)) & 0xf; - - if(cur_pri_lv & 8) // enable layer - { - if(pri <= 1) // (direct color mode, priority 5 and 4) - { - // 8 = graphic 0 - // 9 = graphic 1 - } - else - { - switch(cur_pri_lv & 3) // (palette color mode) - { - case 0: draw_text(bitmap,cliprect); break; - case 1: if(m_tsp.spr_on) { draw_sprites(bitmap,cliprect); } break; - case 2: /* A = graphic 0 */ break; - case 3: /* B = graphic 1 */ break; - } - } - } - } +// TODO: verify clocks +#define MASTER_CLOCK XTAL(8'000'000) // may be XTAL(31'948'800) / 4? (based on PC-8801 and PC-9801) +#define FM_CLOCK (XTAL(31'948'800) / 4) // 3993600 - return 0; -} -void pc88va_state::pc88va_map(address_map &map) -{ - map(0x00000, 0x7ffff).ram(); -// map(0x80000, 0x9ffff).ram(); // EMM - map(0xa0000, 0xdffff).m(m_sysbank, FUNC(address_map_bank_device::amap16)); - map(0xe0000, 0xeffff).bankr("rom00_bank"); - map(0xf0000, 0xfffff).bankr("rom10_bank"); -} -/* 0x00000 - 0x3ffff Kanji ROM 1*/ -/* 0x40000 - 0x4ffff Kanji ROM 2*/ -/* 0x50000 - 0x53fff Backup RAM */ -/* above that is a NOP presumably */ uint8_t pc88va_state::kanji_ram_r(offs_t offset) { return m_kanjiram[offset]; } +// TODO: settings area should be write protected depending on the m_backupram_wp bit, separate from this void pc88va_state::kanji_ram_w(offs_t offset, uint8_t data) { - // TODO: there's an area that can be write protected m_kanjiram[offset] = data; m_gfxdecode->gfx(2)->mark_dirty(offset / 8); m_gfxdecode->gfx(3)->mark_dirty(offset / 32); } - -void pc88va_state::sysbank_map(address_map &map) +u8 pc88va_state::port40_r() { - // 0 select bus slot (?) - // 1 tvram - map(0x040000, 0x04ffff).ram().share("tvram"); - // 4 gvram - map(0x100000, 0x13ffff).ram().share("gvram"); - // 8-9 kanji - map(0x200000, 0x23ffff).rom().region("kanji", 0x00000); - map(0x240000, 0x24ffff).rom().region("kanji", 0x40000); - map(0x250000, 0x253fff).rw(FUNC(pc88va_state::kanji_ram_r),FUNC(pc88va_state::kanji_ram_w)); - // c-d dictionary - map(0x300000, 0x37ffff).rom().region("dictionary", 0); -} + u8 data = 0; + // vrtc + data = m_screen->vblank() << 5; + data |= m_rtc->data_out_r() << 4; + data |= (ioport("DSW")->read() & 1) ? 2 : 0; -/* IDP = NEC uPD72022 */ -uint8_t pc88va_state::idp_status_r() -{ -/* - x--- ---- LP Light-pen signal detection (with VA use failure) - -x-- ---- VB Vertical elimination period - --x- ---- SC Sprite control (sprite over/collision) - ---x ---- ER Error occurrence - ---- x--- In the midst of execution of EMEN emulation development - ---- -x-- In the midst of BUSY command execution - ---- --x- OBF output data buffer full - ---- ---x IBF input data buffer full (command/parameter commonness) -*/ - return 0x00; + return data | 0xc0; } - -#define SYNC 0x10 -#define DSPON 0x12 -#define DSPOFF 0x13 -#define DSPDEF 0x14 -#define CURDEF 0x15 -#define ACTSCR 0x16 -#define CURS 0x1e -#define EMUL 0x8c -#define EXIT 0x88 -#define SPRON 0x82 -#define SPROFF 0x83 -#define SPRSW 0x85 -#define SPROV 0x81 - -void pc88va_state::idp_command_w(uint8_t data) +void pc88va_state::port40_w(offs_t offset, u8 data) { - switch(data) - { - /* 0x10 - SYNC: sets CRTC values */ - case SYNC: m_cmd = SYNC; m_buf_size = 14; m_buf_index = 0; break; - - /* 0x12 - DSPON: set DiSPlay ON and set up tvram table vreg */ - case DSPON: m_cmd = DSPON; m_buf_size = 3; m_buf_index = 0; break; - - /* 0x13 - DSPOFF: set DiSPlay OFF */ - case DSPOFF: m_cmd = DSPOFF; m_tsp.disp_on = 0; break; - - /* 0x14 - DSPDEF: set DiSPlay DEFinitions */ - case DSPDEF: m_cmd = DSPDEF; m_buf_size = 6; m_buf_index = 0; break; - - /* 0x15 - CURDEF: set CURsor DEFinition */ - case CURDEF: m_cmd = CURDEF; m_buf_size = 1; m_buf_index = 0; break; - - /* 0x16 - ACTSCR: ??? */ - case ACTSCR: m_cmd = ACTSCR; m_buf_size = 1; m_buf_index = 0; break; - - /* 0x15 - CURS: set CURSor position */ - case CURS: m_cmd = CURS; m_buf_size = 4; m_buf_index = 0; break; + m_rtc->stb_w((data & 2) >> 1); + m_rtc->clk_w((data & 4) >> 2); - /* 0x8c - EMUL: set 3301 EMULation */ - case EMUL: m_cmd = EMUL; m_buf_size = 4; m_buf_index = 0; break; - - /* 0x88 - EXIT: ??? */ - case EXIT: m_cmd = EXIT; break; - - /* 0x82 - SPRON: set SPRite ON */ - case SPRON: m_cmd = SPRON; m_buf_size = 3; m_buf_index = 0; break; - - /* 0x83 - SPROFF: set SPRite OFF */ - case SPROFF: m_cmd = SPROFF; m_tsp.spr_on = 0; break; - - /* 0x85 - SPRSW: ??? */ - case SPRSW: m_cmd = SPRSW; m_buf_size = 1; m_buf_index = 0; break; - - /* 0x81 - SPROV: set SPRite OVerflow information */ - /* - -x-- ---- Sprite Over flag - --x- ---- Sprite Collision flag - ---x xxxx First sprite that caused Sprite Over event - */ - case SPROV: m_cmd = SPROV; /* TODO: where it returns the info? */ break; + m_mouse_port->pin_8_w(BIT(data, 6)); - /* TODO: 0x89 shouldn't trigger, should be one of the above commands */ - /* Update: actually 0x89 is mask command */ - default: m_cmd = 0x00; printf("PC=%05x: Unknown IDP %02x cmd set\n",m_maincpu->pc(),data); break; - } + m_device_ctrl_data = data; } -// TODO: checkout this one -void pc88va_state::tsp_sprite_enable(uint32_t spr_offset, uint16_t sw_bit) -{ - uint32_t target_offset = (spr_offset & 0xffff)/2; -// address_space &space = m_maincpu->space(AS_PROGRAM); -// space.write_word(spr_offset, space.read_word(spr_offset) & ~0x200); -// space.write_word(spr_offset, space.read_word(spr_offset) | (sw_bit & 0x200)); - m_tvram[target_offset] = (m_tvram[target_offset] & ~0x200) | (sw_bit & 0x200); -} - -/* TODO: very preliminary, needs something showable first */ -void pc88va_state::execute_sync_cmd() +// DE-9 mouse port (labelled "マウス") - MSX-compatible +uint8_t pc88va_state::opn_porta_r() { - /* - ???? ???? [0] - unknown - ???? ???? [1] - unknown - --xx xxxx [2] - h blank start - --xx xxxx [3] - h border start - xxxx xxxx [4] - h visible area - --xx xxxx [5] - h border end - --xx xxxx [6] - h blank end - --xx xxxx [7] - h sync - --xx xxxx [8] - v blank start - --xx xxxx [9] - v border start - xxxx xxxx [A] - v visible area - -x-- ---- [B] - v visible area (bit 9) - --xx xxxx [C] - v border end - --xx xxxx [D] - v blank end - --xx xxxx [E] - v sync - */ - rectangle visarea; - attoseconds_t refresh; - uint16_t x_vis_area,y_vis_area; - - //printf("V blank start: %d\n",(sync_cmd[0x8])); - //printf("V border start: %d\n",(sync_cmd[0x9])); - //printf("V Visible Area: %d\n",(sync_cmd[0xa])|((sync_cmd[0xb] & 0x40)<<2)); - //printf("V border end: %d\n",(sync_cmd[0xc])); - //printf("V blank end: %d\n",(sync_cmd[0xd])); - - x_vis_area = m_buf_ram[4] * 4; - y_vis_area = (m_buf_ram[0xa])|((m_buf_ram[0xb] & 0x40)<<2); - - visarea.set(0, x_vis_area - 1, 0, y_vis_area - 1); - - //if(y_vis_area == 400) - // refresh = HZ_TO_ATTOSECONDS(24800) * x_vis_area * y_vis_area; //24.8 KHz - //else - // refresh = HZ_TO_ATTOSECONDS(15730) * x_vis_area * y_vis_area; //15.73 KHz - - refresh = HZ_TO_ATTOSECONDS(60); - - m_screen->configure(640, 480, visarea, refresh); + return BIT(m_mouse_port->read(), 0, 4) | 0xf0; } -void pc88va_state::execute_dspon_cmd() +uint8_t pc88va_state::opn_portb_r() { - /* - [0] text table offset (hi word) - [1] unknown - [2] unknown - */ - m_tsp.tvram_vreg_offset = m_buf_ram[0] << 8; - m_tsp.disp_on = 1; + return BIT(m_mouse_port->read(), 4, 2) | 0xfc; } -void pc88va_state::execute_dspdef_cmd() +void pc88va_state::rtc_w(offs_t offset, u8 data) { - /* - [0] attr offset (lo word) - [1] attr offset (hi word) - [2] pitch (character code interval x 16, i.e. 0x20 = 2 bytes - [3] line height - [4] hline vertical position - [5] blink number - */ - m_tsp.attr_offset = m_buf_ram[0] | m_buf_ram[1] << 8; - m_tsp.pitch = (m_buf_ram[2] & 0xf0) >> 4; - m_tsp.line_height = m_buf_ram[3] + 1; - m_tsp.h_line_pos = m_buf_ram[4]; - m_tsp.blink = (m_buf_ram[5] & 0xf8) >> 3; -} + m_rtc->c0_w((data & 1) >> 0); + m_rtc->c1_w((data & 2) >> 1); + m_rtc->c2_w((data & 4) >> 2); + m_rtc->data_in_w((data & 8) >> 3); -void pc88va_state::execute_curdef_cmd() -{ - /* - xxxx x--- [0] Sprite Cursor number (sprite RAM entry) - ---- --x- [0] show cursor bit (actively modifies the spriteram entry) - ---- ---x [0] Blink Enable - */ - - /* TODO: needs basic sprite emulation */ - m_tsp.curn = (m_buf_ram[0] & 0xf8); - m_tsp.curn_blink = (m_buf_ram[0] & 1); - - tsp_sprite_enable(m_tsp.spr_offset + m_tsp.curn, (m_buf_ram[0] & 2) << 8); -} - -void pc88va_state::execute_actscr_cmd() -{ - /* - This command assigns a strip where the cursor is located. - xxxx xxxx [0] strip ID * 32 (???) - */ - - /* TODO: no idea about this command */ - //printf("ACTSCR: %02x\n",m_buf_ram[0]); -} - -void pc88va_state::execute_curs_cmd() -{ - /* - [0] Cursor Position Y (lo word) - [1] Cursor Position Y (hi word) - [2] Cursor Position X (lo word) - [3] Cursor Position X (hi word) - */ - - m_tsp.cur_pos_y = m_buf_ram[0] | m_buf_ram[1] << 8; - m_tsp.cur_pos_x = m_buf_ram[2] | m_buf_ram[3] << 8; -} - -void pc88va_state::execute_emul_cmd() -{ - /* - [0] Emulate target strip ID x 32 - [1] The number of chars - [2] The number of attributes - [3] The number of lines - */ - - // TODO: this starts 3301 video emulation - //popmessage("Warning: TSP executes EMUL command, contact MESSdev"); -} - -void pc88va_state::execute_spron_cmd() -{ - /* - [0] Sprite Table Offset (hi word) - [1] (unknown / reserved) - xxxx x--- [2] HSPN: Maximum number of sprites in one raster (num + 1) for Sprite Over - ---- --x- [2] MG: all sprites are 2x zoomed vertically when 1 - ---- ---x [2] GR: 1 to enable the group collision detection - */ - m_tsp.spr_offset = m_buf_ram[0] << 8; - m_tsp.spr_on = 1; - printf("SPR TABLE %02x %02x %02x\n",m_buf_ram[0],m_buf_ram[1],m_buf_ram[2]); -} - -void pc88va_state::execute_sprsw_cmd() -{ - /* - Toggle an individual sprite in the sprite ram entry - [0] xxxx x--- target sprite number - [0] ---- --x- sprite off/on switch - */ - - tsp_sprite_enable(m_tsp.spr_offset + (m_buf_ram[0] & 0xf8), (m_buf_ram[0] & 2) << 8); -} - -void pc88va_state::idp_param_w(uint8_t data) -{ - if(m_cmd == DSPOFF || m_cmd == EXIT || m_cmd == SPROFF || m_cmd == SPROV) // no param commands - return; - - m_buf_ram[m_buf_index] = data; - m_buf_index++; - - if(m_buf_index >= m_buf_size) - { - m_buf_index = 0; - switch(m_cmd) - { - case SYNC: execute_sync_cmd(); break; - case DSPON: execute_dspon_cmd(); break; - case DSPDEF: execute_dspdef_cmd(); break; - case CURDEF: execute_curdef_cmd(); break; - case ACTSCR: execute_actscr_cmd(); break; - case CURS: execute_curs_cmd(); break; - case EMUL: execute_emul_cmd(); break; - case SPRON: execute_spron_cmd(); break; - case SPRSW: execute_sprsw_cmd(); break; - - default: - //printf("%02x\n",data); - break; - } - } -} - -void pc88va_state::palette_ram_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - int r,g,b; - COMBINE_DATA(&m_palram[offset]); - - b = (m_palram[offset] & 0x001e) >> 1; - r = (m_palram[offset] & 0x03c0) >> 6; - g = (m_palram[offset] & 0x7800) >> 11; - - m_palette->set_pen_color(offset,pal4bit(r),pal4bit(g),pal4bit(b)); -} - -uint16_t pc88va_state::sys_port4_r() -{ - uint8_t vrtc,sw1; - vrtc = (m_screen->vpos() < 200) ? 0x20 : 0x00; // vblank - - sw1 = (ioport("DSW")->read() & 1) ? 2 : 0; - - return vrtc | sw1 | 0xc0; -} - -uint16_t pc88va_state::bios_bank_r() -{ - return m_bank_reg; + // TODO: remaining bits } +/* + * $152 + * -x-- ---- ---- ---- SMM compatibility mode (1) V3 (0) V1/V2 + * ---x ---- ---- ---- GMSP VRAM drawing mode (0) multiplane (1) single plane + * ---- xxxx ---- ---- SMBC (0xa0000 - 0xdffff RAM bank) + * ---- ---- xxxx ---- RBC13-RBC10 (0xf0000 - 0xfffff ROM bank) + * ---- ---- 0xxx ---- internal ROM entry + * \- settings 2 to 5 are + * \- settings 6 and 7 are reserved + * ---- ---- 1xxx ---- select bus slot ROM + * ---- ---- ---- xxxx RBC03-RBC00 (0xe0000 - 0xeffff ROM bank) + * ---- ---- ---- 0xxx internal ROM entry + * ---- ---- ---- 1xxx select bus slot ROM + */ void pc88va_state::bios_bank_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - /* - -x-- ---- ---- ---- SMM (compatibility mode) - ---x ---- ---- ---- GMSP (VRAM drawing mode) - ---- xxxx ---- ---- SMBC (0xa0000 - 0xdffff RAM bank) - ---- ---- xxxx ---- RBC1 (0xf0000 - 0xfffff ROM bank) - ---- ---- ---- xxxx RBC0 (0xe0000 - 0xeffff ROM bank) - */ COMBINE_DATA(&m_bank_reg); /* SMBC */ @@ -744,19 +196,24 @@ /* RBC0 */ { uint8_t *ROM00 = memregion("rom00")->base(); - - membank("rom00_bank")->set_base(&ROM00[(m_bank_reg & 0xf)*0x10000]); // TODO: docs says that only 0 - 5 are used, dunno why ... + membank("rom00_bank")->set_base(&ROM00[(m_bank_reg & 0xf) * 0x10000]); } } +uint16_t pc88va_state::bios_bank_r() +{ + return m_bank_reg; +} + +// TODO: status for bus slot ROM banking, at 0xf0000-0xfffff uint8_t pc88va_state::rom_bank_r() { - return 0xff; // bit 7 low is va91 rom bank status + // bit 7 low is PC-88VA-91 rom bank status + return 0xff; } uint8_t pc88va_state::key_r(offs_t offset) { - // note row D bit 2 does something at POST ... some kind of test mode? static const char *const keynames[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4", "KEY5", "KEY6", "KEY7", "KEY8", "KEY9", "KEYA", "KEYB", @@ -775,16 +232,44 @@ m_backupram_wp = 0; } +/* + * $190 system port 5 + * ---x ---- FBEEP Force BEEP (1) allow + * ---- xx-- AVC2/AVC1 video output control + * ---- 00-- TV/video mode, offline (?) + * ---- 10-- Analog RGB mode (at reset, default) + * ---- x1-- + * ---- ---x RSTMD reset status + * \- works as software Power On Reset flag during VA POST + */ +void pc88va_state::sys_port5_w(u8 data) +{ + m_rstmd = bool(BIT(data, 0)); + LOG("I/O $190 %02x\n", data); +} + +u8 pc88va_state::sys_port5_r() +{ + return m_rstmd | 8; +} + uint8_t pc88va_state::hdd_status_r() { return 0x20; } +// TODO: convert to pc80s31k family +uint8_t pc88va_state::fake_subfdc_r() +{ + return machine().rand(); +} + uint8_t pc88va_state::pc88va_fdc_r(offs_t offset) { - printf("%08x\n",offset); + if (!machine().side_effects_disabled()) + LOGFDC("Unhandled read $%04x\n", (offset << 1) + 0x1b0); - switch(offset*2) + switch(offset << 1) { case 0x00: return 0; // FDC mode register case 0x02: return 0; // FDC control port 0 @@ -799,53 +284,67 @@ TIMER_CALLBACK_MEMBER(pc88va_state::pc88va_fdc_timer) { - if(m_fdc_ctrl_2 & 4) // XTMASK + if(m_xtmask) { m_pic2->ir3_w(0); m_pic2->ir3_w(1); } + + m_fdc_timer->adjust(attotime::from_msec(100)); } TIMER_CALLBACK_MEMBER(pc88va_state::pc88va_fdc_motor_start_0) { m_fdd[0]->get_device()->mon_w(0); - m_fdc_motor_status[0] = 1; } TIMER_CALLBACK_MEMBER(pc88va_state::pc88va_fdc_motor_start_1) { m_fdd[1]->get_device()->mon_w(0); - m_fdc_motor_status[1] = 1; } void pc88va_state::pc88va_fdc_update_ready(floppy_image_device *, int) { - bool ready = m_fdc_ctrl_2 & 0x40; + if (!BIT(m_fdc_ctrl_2, 5)) + return; + bool force_ready = (BIT(m_fdc_ctrl_2, 6)); - floppy_image_device *floppy; - floppy = m_fdd[0]->get_device(); - if(floppy && ready) - ready = floppy->ready_r(); - floppy = m_fdd[1]->get_device(); - if(floppy && ready) - ready = floppy->ready_r(); + floppy_image_device *floppy0, *floppy1; + floppy0 = m_fdd[0]->get_device(); + floppy1 = m_fdd[1]->get_device(); + if (!floppy0 && !floppy1) + force_ready = false; + + //if(floppy && force_ready) + // ready = floppy->ready_r(); + + //if(floppy && force_ready) + // ready = floppy->ready_r(); + + LOGFDC2("Force ready signal %d\n", force_ready); - m_fdc->ready_w(ready); + if (force_ready) + { + m_fdc->set_ready_line_connected(0); + m_fdc->ready_w(0); + } + else + m_fdc->set_ready_line_connected(1); } void pc88va_state::pc88va_fdc_w(offs_t offset, uint8_t data) { - printf("%08x %02x\n",offset<<1,data); - switch(offset<<1) + switch(offset << 1) { /* ---- ---x MODE: FDC op mode (0) Intelligent (1) DMA */ case 0x00: // FDC mode register m_fdc_mode = data & 1; - #if TEST_SUBFDC - m_fdccpu->set_input_line(INPUT_LINE_HALT, (m_fdc_mode) ? ASSERT_LINE : CLEAR_LINE); - #endif + LOGFDC("$1b0 FDC op mode (%02x) %s mode\n" + , data + , m_fdc_mode ? "DMA" : "Intelligent (PIO)" + ); break; /* --x- ---- CLK: FDC clock selection (0) 4.8MHz (1) 8 MHz @@ -854,58 +353,110 @@ ---- --xx RV1/RV0: Drive 1/0 mode selection (0) 2D and 2DD mode (1) 2HD mode */ case 0x02: // FDC control port 0 - m_fdd[0]->get_device()->set_rpm(data & 0x01 ? 360 : 300); - m_fdd[1]->get_device()->set_rpm(data & 0x02 ? 360 : 300); + { + const bool clk = bool(BIT(data, 5)); + const bool rv1 = bool(BIT(data, 1)); + const bool rv0 = bool(BIT(data, 0)); + LOGFDC("$1b2 FDC control port 0 (%02x) %s CLK| %d DS1| %d%d TD1/TD0| %d%d RV1/RV0\n" + , data + , clk ? " 8 MHz" : "4.8 MHz" + , !bool(BIT(data, 4)) + , bool(BIT(data, 3)) + , bool(BIT(data, 2)) + , rv1 + , rv0 + ); + m_fdd[0]->get_device()->set_rpm(rv0 ? 360 : 300); + m_fdd[1]->get_device()->set_rpm(rv1 ? 360 : 300); + + //m_fdd[0]->get_device()->ds_w(!BIT(data, 4)); + //m_fdd[1]->get_device()->ds_w(!BIT(data, 4)); - m_fdc->set_rate(data & 0x20 ? 500000 : 250000); + // TODO: is this correct? sounds more like a controller clock change, while TD1/TD0 should do the rate change + m_fdc->set_rate(clk ? 500000 : 250000); break; + } /* - ---- x--- PCM: ? + ---- x--- PCM: precompensation control (1) on ---- --xx M1/M0: Drive 1/0 motor control (0) NOP (1) Change motor status */ case 0x04: - if(data & 1) - { + { + const bool m0 = bool(BIT(data, 0)); + const bool m1 = bool(BIT(data, 1)); + + LOGFDC2("$1b4 FDC control port 1 (%02x) %d PCM| %d%d M1/M0\n" + , data + , bool(BIT(data, 3)) + , m1 + , m0 + ); + + // TODO: fine grain motor timings + // docs claims 600 msecs, must be more complex than that + if( m0 ) + m_motor_start_timer[0]->adjust(attotime::from_msec(505)); + else m_fdd[0]->get_device()->mon_w(1); - if(m_fdc_motor_status[0] == 0) - m_motor_start_timer[0]->adjust(attotime::from_msec(505)); - else - m_fdc_motor_status[0] = 0; - } - if(data & 2) - { + + if( m1 ) + m_motor_start_timer[1]->adjust(attotime::from_msec(505)); + else m_fdd[1]->get_device()->mon_w(1); - if(m_fdc_motor_status[1] == 0) - m_motor_start_timer[1]->adjust(attotime::from_msec(505)); - else - m_fdc_motor_status[1] = 0; - } break; + } + /* - x--- ---- FDCRST: FDC Reset - -xx- ---- FDCFRY FRYCEN: FDC force ready control - ---x ---- DMAE: DMA Enable (0) Prohibit DMA (1) Enable DMA - ---- -x-- XTMASK: FDC timer IRQ mask (0) Disable (1) Enable - ---- ---x TTRG: FDC timer trigger (0) FDC timer clearing (1) FDC timer start - */ + * FDC control port 2 + * x--- ---- FDCRST: FDC Reset + * -xx- ---- FDCFRY FRYCEN: FDC force ready control + * -x0- ---- ignored + * -01- ---- force ready release + * -11- ---- force ready assert + * ---x ---- DMAE: DMA Enable (0) Prohibit DMA (1) Enable DMA + * ---- -x-- XTMASK: FDC timer IRQ mask (0) Disable (1) Enable + * ---- ---x TTRG: FDC timer trigger (0) FDC timer clearing (1) FDC timer start + */ case 0x06: - //printf("%02x\n",data); - if(data & 1) + { + const bool fdcrst = bool(BIT(data, 7)); + const bool ttrg = bool(BIT(data, 0)); + const bool cur_xtmask = bool(BIT(data, 2)); + LOGFDC2("$1b6 FDC control port 2 (%02x) %d FDCRST| %d%d FDCFRY| %d DMAE| %d XTMASK| %d TTRG\n" + , data + , fdcrst + , bool(BIT(data, 6)) + , bool(BIT(data, 5)) + , bool(BIT(data, 4)) + , cur_xtmask + , ttrg + ); + + if( ttrg && !BIT(m_fdc_ctrl_2, 0) ) m_fdc_timer->adjust(attotime::from_msec(100)); + else if (!ttrg && BIT(m_fdc_ctrl_2, 0) ) + m_fdc_timer->adjust(attotime::never); - if((m_fdc_ctrl_2 & 0x10) != (data & 0x10)) - m_dmac->dreq2_w(1); + m_xtmask = cur_xtmask; - if(data & 0x80) // correct? + //if (!BIT(m_fdc_ctrl_2, 4) && BIT(data, 4)) + // m_maincpu->dreq_w<2>(1); + //m_dmac->dreq2_w(1); + + // TODO: 0 -> 1 transition? + if( fdcrst ) m_fdc->reset(); m_fdc_ctrl_2 = data; + //m_fdd[0]->get_device()->mon_w(!(BIT(data, 5))); + pc88va_fdc_update_ready(nullptr, 0); - break; // FDC control port 2 + break; + } } } @@ -919,14 +470,26 @@ return 0xfffc | sys_op; // docs says all the other bits are high } -uint16_t pc88va_state::screen_ctrl_r() +/* + * x--- ---- MINTEN (TCU irq enable) + * ---- --xx MTP1/MTP0 general purpose timer 3 interval + * ---- --00 120 Hz + * ---- --01 60 Hz + * ---- --10 30 Hz + * ---- --11 15 Hz + */ +void pc88va_state::timer3_ctrl_reg_w(uint8_t data) { - return m_screen_ctrl_reg; -} + m_timer3_io_reg = data; -void pc88va_state::screen_ctrl_w(uint16_t data) -{ - m_screen_ctrl_reg = data; + if(data & 0x80) + m_t3_mouse_timer->adjust(attotime::from_hz(120 >> (m_timer3_io_reg & 3))); + else + { + // TODO: confirm me + //m_pic2->ir5_w(0); + m_t3_mouse_timer->adjust(attotime::never); + } } TIMER_CALLBACK_MEMBER(pc88va_state::t3_mouse_callback) @@ -939,61 +502,100 @@ } } -void pc88va_state::timer3_ctrl_reg_w(uint8_t data) + +uint8_t pc88va_state::backupram_dsw_r(offs_t offset) { - /* - x--- ---- MINTEN (TCU irq enable) - ---- --xx general purpose timer 3 interval (120, 60, 30, 15) - */ - m_timer3_io_reg = data; + if(offset == 0) + return m_kanjiram[0x1fc2 / 2] & 0xff; - if(data & 0x80) - m_t3_mouse_timer->adjust(attotime::from_hz(120 >> (m_timer3_io_reg & 3))); - else - { - m_pic2->ir5_w(0); - m_t3_mouse_timer->adjust(attotime::never); - } + return m_kanjiram[0x1fc6 / 2] & 0xff; } -void pc88va_state::video_pri_w(offs_t offset, uint16_t data, uint16_t mem_mask) +// TODO: pc8801_state::port31_w +void pc88va_state::sys_port1_w(uint8_t data) { - COMBINE_DATA(&m_video_pri_reg[offset]); + LOG("I/O $31 %02x\n", data); } -uint8_t pc88va_state::backupram_dsw_r(offs_t offset) +uint8_t pc88va_state::misc_ctrl_r() { - if(offset == 0) - return m_kanjiram[0x1fc2 / 2] & 0xff; + return m_misc_ctrl; +} - return m_kanjiram[0x1fc6 / 2] & 0xff; +void pc88va_state::misc_ctrl_w(uint8_t data) +{ + m_misc_ctrl = data; + + m_sound_irq_enable = ((data & 0x80) == 0); + + if (m_sound_irq_enable) + int4_irq_w(m_sound_irq_pending); } -void pc88va_state::sys_port1_w(uint8_t data) + +/**************************************** + * Address maps + ***************************************/ + +void pc88va_state::main_map(address_map &map) { - // ... + map(0x00000, 0x7ffff).ram().share("workram"); +// map(0x80000, 0x9ffff).ram(); // EMM + map(0xa0000, 0xdffff).m(m_sysbank, FUNC(address_map_bank_device::amap16)); + map(0xe0000, 0xeffff).bankr("rom00_bank"); + map(0xf0000, 0xfffff).bankr("rom10_bank"); } -#if !TEST_SUBFDC -uint8_t pc88va_state::no_subfdc_r() +void pc88va_state::sysbank_map(address_map &map) { - return machine().rand(); + // 0 select bus slot + // 1 tvram + map(0x040000, 0x04ffff).ram().share("tvram"); + // FIXME: BASIC and pacmana expects to r/w to 0x60000-0x7ffff on loading, assume mirror if not a core bug. + map(0x050000, 0x07ffff).ram(); + // 4 gvram + map(0x100000, 0x13ffff).ram().share("gvram"); + // 8-9 kanji + // Kanji ROM + map(0x200000, 0x23ffff).rom().region("kanji", 0x00000); + // ANK ROM + map(0x240000, 0x24ffff).rom().region("kanji", 0x40000); + // Backup RAM & PCG + map(0x250000, 0x253fff).rw(FUNC(pc88va_state::kanji_ram_r),FUNC(pc88va_state::kanji_ram_w)); + // c-d dictionary + map(0x300000, 0x37ffff).rom().region("dictionary", 0); } -#endif -void pc88va_state::pc88va_io_map(address_map &map) +// SGP has its own window space about how and what it can see on RMW +void pc88va_state::sgp_map(address_map &map) +{ + map(0x000000, 0x07ffff).ram().share("workram"); +// map(0x080000, 0x09ffff) more main RAM or EMM +// map(0x0a0000, 0x0fffff) EMM $a0000 to $fffff (?) + map(0x100000, 0x13ffff).rom().region("kanji", 0x00000); + map(0x140000, 0x14ffff).rom().region("kanji", 0x40000); + map(0x150000, 0x153fff).rw(FUNC(pc88va_state::kanji_ram_r),FUNC(pc88va_state::kanji_ram_w)); + map(0x180000, 0x18ffff).ram().share("tvram"); + map(0x200000, 0x23ffff).ram().share("gvram"); +} + +// TODO: I/O 0x00xx is almost same as pc8801 +// (*) are specific N88 V1 / V2 ports +void pc88va_state::io_map(address_map &map) { map(0x0000, 0x000f).r(FUNC(pc88va_state::key_r)); // Keyboard ROW reading -// map(0x0010, 0x0010) Printer / Calendar Clock Interface + map(0x0010, 0x0010).w(FUNC(pc88va_state::rtc_w)); // Printer / Calendar Clock Interface map(0x0020, 0x0021).noprw(); // RS-232C map(0x0030, 0x0031).rw(FUNC(pc88va_state::backupram_dsw_r), FUNC(pc88va_state::sys_port1_w)); // 0x30 (R) DSW1 (W) Text Control Port 0 / 0x31 (R) DSW2 (W) System Port 1 -// map(0x0032, 0x0032) (R) ? (W) System Port 2 + map(0x0032, 0x0032).rw(FUNC(pc88va_state::misc_ctrl_r), FUNC(pc88va_state::misc_ctrl_w)); // map(0x0034, 0x0034) GVRAM Control Port 1 // map(0x0035, 0x0035) GVRAM Control Port 2 - map(0x0040, 0x0041).r(FUNC(pc88va_state::sys_port4_r)); // (R) System Port 4 (W) System port 3 (strobe port) - map(0x0044, 0x0045).mirror(0x0002).rw("ym", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); + map(0x0040, 0x0040).rw(FUNC(pc88va_state::port40_r), FUNC(pc88va_state::port40_w)); // (R) System Port 4 (W) System port 3 (strobe port) + map(0x0044, 0x0047).rw(m_opna, FUNC(ym2608_device::read), FUNC(ym2608_device::write)); +// map(0x0050, 0x005b) CRTC/backdrop on PC8801, causes HW trap on VA // map(0x005c, 0x005c) (R) GVRAM status // map(0x005c, 0x005f) (W) GVRAM selection +// map(0x0060, 0x0068) DMA on PC8801, causes HW trap on VA // map(0x0070, 0x0070) ? (*) // map(0x0071, 0x0071) Expansion ROM select (*) // map(0x0078, 0x0078) Memory offset increment (*) @@ -1005,243 +607,248 @@ // map(0x00e6, 0x00e6) 8214 IRQ mask (*) // map(0x00e8, 0x00e9) ? (*) // map(0x00ec, 0x00ed) ? (*) - #if TEST_SUBFDC - map(0x00fc, 0x00ff).rw("d8255_2", FUNC(i8255_device::read), FUNC(i8255_device::write)); // d8255 2, FDD - #else - map(0x00fc, 0x00ff).r(FUNC(pc88va_state::no_subfdc_r)).nopw(); - #endif + map(0x00fc, 0x00ff).r(FUNC(pc88va_state::fake_subfdc_r)).nopw(); map(0x0100, 0x0101).rw(FUNC(pc88va_state::screen_ctrl_r), FUNC(pc88va_state::screen_ctrl_w)); // Screen Control Register -// map(0x0102, 0x0103) Graphic Screen Control Register + map(0x0102, 0x0103).rw(FUNC(pc88va_state::gfx_ctrl_r), FUNC(pc88va_state::gfx_ctrl_w)); map(0x0106, 0x0109).w(FUNC(pc88va_state::video_pri_w)); // Palette Control Register (priority) / Direct Color Control Register (priority) // map(0x010a, 0x010b) Picture Mask Mode Register -// map(0x010c, 0x010d) Color Palette Mode Register + map(0x010c, 0x010d).w(FUNC(pc88va_state::color_mode_w)); // Color Palette Mode Register // map(0x010e, 0x010f) Backdrop Color Register // map(0x0110, 0x0111) Color Code/Plain Mask Register // map(0x0124, 0x0125) ? (related to Transparent Color of Graphic Screen 0) // map(0x0126, 0x0127) ? (related to Transparent Color of Graphic Screen 1) -// map(0x012e, 0x012f) ? (related to Transparent Color of Text/Sprite) -// map(0x0130, 0x0137) Picture Mask Parameter + map(0x012e, 0x012f).w(FUNC(pc88va_state::text_transpen_w)); +// map(0x0130, 0x0137) Picture Mask Parameter (global cliprect, olteus gameplay) map(0x0142, 0x0142).rw(FUNC(pc88va_state::idp_status_r), FUNC(pc88va_state::idp_command_w)); //Text Controller (IDP) - (R) Status (W) command map(0x0146, 0x0146).w(FUNC(pc88va_state::idp_param_w)); //Text Controller (IDP) - (R/W) Parameter -// map(0x0148, 0x0149) Text control port 1 -// map(0x014c, 0x014f) ? CG Port + map(0x0148, 0x0148).w(FUNC(pc88va_state::text_control_1_w)); +// map(0x014c, 0x014f) Kanji CG Port, animefrm + map(0x014c, 0x014d).w(FUNC(pc88va_state::kanji_cg_address_w)); + map(0x014e, 0x014e).r(FUNC(pc88va_state::kanji_cg_r)); + map(0x014f, 0x014f).w(FUNC(pc88va_state::kanji_cg_raster_w)); map(0x0150, 0x0151).r(FUNC(pc88va_state::sysop_r)); // System Operational Mode map(0x0152, 0x0153).rw(FUNC(pc88va_state::bios_bank_r), FUNC(pc88va_state::bios_bank_w)); // Memory Map Register // map(0x0154, 0x0155) Refresh Register (wait states) map(0x0156, 0x0156).r(FUNC(pc88va_state::rom_bank_r)); // ROM bank status -// map(0x0158, 0x0159) Interruption Mode Modification +// map(0x0158, 0x0159) Interruption Mode Modification (strobe), changes i8214 mode to i8259, cannot be changed back // map(0x015c, 0x015f) NMI mask port (strobe port) - map(0x0160, 0x016f).rw(m_dmac, FUNC(am9517a_device::read), FUNC(am9517a_device::write)); // DMA Controller +// map(0x0160, 0x016f) V50 DMAC +// map(0x0180, 0x0180) read by Olteus map(0x0184, 0x0187).rw("pic8259_slave", FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff); - map(0x0188, 0x018b).rw("pic8259_master", FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff); // ICU, also controls 8214 emulation +// map(0x0188, 0x018b) V50 ICU // map(0x0190, 0x0191) System Port 5 + map(0x0190, 0x0190).rw(FUNC(pc88va_state::sys_port5_r), FUNC(pc88va_state::sys_port5_w)); // map(0x0196, 0x0197) Keyboard sub CPU command port map(0x0198, 0x0199).w(FUNC(pc88va_state::backupram_wp_1_w)); //Backup RAM write inhibit map(0x019a, 0x019b).w(FUNC(pc88va_state::backupram_wp_0_w)); //Backup RAM write permission - map(0x01a0, 0x01a7).rw("pit8253", FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0x00ff);// vTCU (timer counter unit) +// map(0x01a0, 0x01a7) V50 TCU map(0x01a8, 0x01a8).w(FUNC(pc88va_state::timer3_ctrl_reg_w)); // General-purpose timer 3 control port - map(0x01b0, 0x01b7).rw(FUNC(pc88va_state::pc88va_fdc_r), FUNC(pc88va_state::pc88va_fdc_w)).umask16(0x00ff);// FDC related (765) + map(0x01b0, 0x01b7).rw(FUNC(pc88va_state::pc88va_fdc_r), FUNC(pc88va_state::pc88va_fdc_w)).umask16(0x00ff); // FDC related (765) map(0x01b8, 0x01bb).m(m_fdc, FUNC(upd765a_device::map)).umask16(0x00ff); -// map(0x01c0, 0x01c1) ? +// map(0x01c0, 0x01c1) keyboard scan code, polled thru IRQ1 ... + map(0x01c1, 0x01c1).lr8(NAME([this] () { return m_keyb.data; })); map(0x01c6, 0x01c7).nopw(); // ??? map(0x01c8, 0x01cf).rw("d8255_3", FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0xff00); //i8255 3 (byte access) // map(0x01d0, 0x01d1) Expansion RAM bank selection - map(0x0200, 0x021f).ram(); // Frame buffer 0 control parameter - map(0x0220, 0x023f).ram(); // Frame buffer 1 control parameter - map(0x0240, 0x025f).ram(); // Frame buffer 2 control parameter - map(0x0260, 0x027f).ram(); // Frame buffer 3 control parameter + map(0x0200, 0x027f).ram().share("fb_regs"); // Frame buffer 0-1-2-3 control parameter + // TODO: shinraba writes to 0x340-0x37f on transition between opening and title screens (mirror? core bug?) map(0x0300, 0x033f).ram().w(FUNC(pc88va_state::palette_ram_w)).share("palram"); // Palette RAM (xBBBBxRRRRxGGGG format) -// map(0x0500, 0x05ff) GVRAM -// map(0x1000, 0xfeff) user area (???) - map(0xff00, 0xffff).noprw(); // CPU internal use -} -// (*) are specific N88 V1 / V2 ports - -TIMER_CALLBACK_MEMBER(pc88va_state::pc8801fd_upd765_tc_to_zero) -{ - m_fdc->tc_w(false); -} - -/* FDC subsytem CPU */ -#if TEST_SUBFDC -void pc88va_state::pc88va_z80_map(address_map &map) -{ - map(0x0000, 0x1fff).rom(); - map(0x4000, 0x7fff).ram(); -} - -uint8_t pc88va_state::upd765_tc_r() + map(0x0500, 0x0507).m(m_sgp, FUNC(pc88va_sgp_device::sgp_io)); + // GVRAM multiplane access regs (ROP section) +// map(0x0510, 0x0510) AACC extend access mode +// map(0x0512, 0x0512) GMAP block switch +// map(0x0514, 0x0514) XRPMn plane readback select +// map(0x0516, 0x0516) XWPMn plane write select +// map(0x0518, 0x0518) multiplane enable +// map(0x0520, 0x0527).umask16(0x00ff) extended access bit comparison +// map(0x0528, 0x0528) extended access plane comparison +// map(0x0530, 0x0537).umask16(0x00ff) extended access pattern low byte +// map(0x0540, 0x0547).umask16(0x00ff) extended access pattern high byte +// map(0x0550, 0x0550) PRRPn plane pattern usage start byte on read +// map(0x0552, 0x0552) PRWPn plane pattern usage start byte on write +// map(0x0560, 0x0567).umask16(0x00ff) ROP plane code + // GVRAM single plane access regs +// map(0x0580, 0x0580) single plane enable +// map(0x0590, 0x0593) GVRAM pattern register settings +// map(0x05a0, 0x05a3) ROP plane code + +// map(0x1000, 0xfeff) PC-88VA expansion boards +// map(0xe2d2, 0xe2d2) MIDI status in micromus +// map(0xff00, 0xffff).noprw(); // CPU internal use +} + +void pc88va_state::opna_map(address_map &map) +{ + // TODO: confirm it really is ROMless + // TODO: confirm size + map(0x000000, 0x1fffff).ram(); +} + +// TODO: quick and dirty support +// should really inherit from the PC8001/PC8801 family as a device, applying the fact that is running on (undumped) MCU instead +INPUT_CHANGED_MEMBER(pc88va_state::key_stroke) { - m_fdc->tc_w(true); - m_tc_clear_timer->adjust(attotime::from_usec(50)); - return 0; -} - -void pc88va_state::fdc_irq_vector_w(uint8_t data) -{ - m_fdc_irq_opcode = data; -} + if(newval && !oldval) + { + m_keyb.data = uint8_t(param & 0xff); + //m_keyb.status &= ~1; + m_maincpu->set_input_line(INPUT_LINE_IRQ1, CLEAR_LINE); + m_maincpu->set_input_line(INPUT_LINE_IRQ1, ASSERT_LINE); + } -void pc88va_state::upd765_mc_w(uint8_t data) -{ - m_fdd[0]->get_device()->mon_w(!(data & 1)); - m_fdd[1]->get_device()->mon_w(!(data & 2)); + // TODO: eventually thrown away by the MCU after set time + if(oldval && !newval) + { + m_keyb.data = 0xff; + //m_keyb.status |= 1; + } } -void pc88va_state::pc88va_z80_io_map(address_map &map) -{ - map.global_mask(0xff); - map(0xf0, 0xf0).w(FUNC(pc88va_state::fdc_irq_vector_w)); // Interrupt Opcode Port -// map(0xf4, 0xf4) // Drive Control Port - map(0xf8, 0xf8).rw(FUNC(pc88va_state::upd765_tc_r), FUNC(pc88va_state::upd765_mc_w)); // (R) Terminal Count Port (W) Motor Control Port - map(0xfa, 0xfb).m(m_fdc, FUNC(upd765a_device::map)); - map(0xfc, 0xff).rw("d8255_2s", FUNC(i8255_device::read), FUNC(i8255_device::write)); -} -#endif +#define VA_PORT_SCAN(_scancode_) \ + PORT_CHANGED_MEMBER(DEVICE_SELF, pc88va_state, key_stroke, _scancode_) -/* TODO: active low or active high? */ static INPUT_PORTS_START( pc88va ) PORT_START("KEY0") - PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("0 (PAD)") PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) - PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("1 (PAD)") PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) - PORT_BIT(0x04,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("2 (PAD)") PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) - PORT_BIT(0x08,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("3 (PAD)") PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) - PORT_BIT(0x10,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("4 (PAD)") PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) - PORT_BIT(0x20,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("5 (PAD)") PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) - PORT_BIT(0x40,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("6 (PAD)") PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) - PORT_BIT(0x80,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("7 (PAD)") PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) + PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) VA_PORT_SCAN(0x4e) + PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) VA_PORT_SCAN(0x4a) + PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) VA_PORT_SCAN(0x4b) + PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) VA_PORT_SCAN(0x4c) + PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) VA_PORT_SCAN(0x46) + PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) VA_PORT_SCAN(0x47) + PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) VA_PORT_SCAN(0x48) + PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) VA_PORT_SCAN(0x42) PORT_START("KEY1") - PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("8 (PAD)") PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) - PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("9 (PAD)") PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) - PORT_BIT(0x04,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("* (PAD)") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) - PORT_BIT(0x08,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("+ (PAD)") PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) - PORT_BIT(0x10,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("= (PAD)") // PORT_CODE(KEYCODE_EQUAL_PAD) PORT_CHAR(UCHAR_MAMEKEY(EQUAL_PAD)) - PORT_BIT(0x20,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME(", (PAD)") // PORT_CODE(KEYCODE_EQUAL_PAD) PORT_CHAR(UCHAR_MAMEKEY(EQUAL_PAD)) - PORT_BIT(0x40,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME(". (PAD)") // PORT_CODE(KEYCODE_EQUAL_PAD) PORT_CHAR(UCHAR_MAMEKEY(EQUAL_PAD)) - PORT_BIT(0x80,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("RETURN (PAD)") //PORT_CODE(KEYCODE_RETURN_PAD) PORT_CHAR(UCHAR_MAMEKEY(RETURN_PAD)) + PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) VA_PORT_SCAN(0x43) + PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) VA_PORT_SCAN(0x44) + PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) VA_PORT_SCAN(0x45) + PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) VA_PORT_SCAN(0x49) + PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(EQUALS_PAD)) VA_PORT_SCAN(0x4d) + PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PGDN) PORT_CHAR(UCHAR_MAMEKEY(COMMA_PAD)) VA_PORT_SCAN(0x4f) + PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) VA_PORT_SCAN(0x39) + PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) VA_PORT_SCAN(0x1c) PORT_START("KEY2") - PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("@") // PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) - PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') - PORT_BIT(0x04,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') - PORT_BIT(0x08,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') - PORT_BIT(0x10,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') - PORT_BIT(0x20,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') - PORT_BIT(0x40,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') - PORT_BIT(0x80,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') + PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@') VA_PORT_SCAN(0x1a) + PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') VA_PORT_SCAN(0x1d) + PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') VA_PORT_SCAN(0x2d) + PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') VA_PORT_SCAN(0x2b) + PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') VA_PORT_SCAN(0x1f) + PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') VA_PORT_SCAN(0x12) + PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') VA_PORT_SCAN(0x20) + PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') VA_PORT_SCAN(0x21) PORT_START("KEY3") - PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') - PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') - PORT_BIT(0x04,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') - PORT_BIT(0x08,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') - PORT_BIT(0x10,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') - PORT_BIT(0x20,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') - PORT_BIT(0x40,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') - PORT_BIT(0x80,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') + PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') VA_PORT_SCAN(0x22) + PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') VA_PORT_SCAN(0x17) + PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') VA_PORT_SCAN(0x23) + PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') VA_PORT_SCAN(0x24) + PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') VA_PORT_SCAN(0x25) + PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') VA_PORT_SCAN(0x2f) + PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') VA_PORT_SCAN(0x2e) + PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') VA_PORT_SCAN(0x18) PORT_START("KEY4") - PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') - PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') - PORT_BIT(0x04,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') - PORT_BIT(0x08,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') - PORT_BIT(0x10,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') - PORT_BIT(0x20,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') - PORT_BIT(0x40,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') - PORT_BIT(0x80,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') + PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') VA_PORT_SCAN(0x19) + PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') VA_PORT_SCAN(0x10) + PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') VA_PORT_SCAN(0x13) + PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') VA_PORT_SCAN(0x1e) + PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') VA_PORT_SCAN(0x14) + PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') VA_PORT_SCAN(0x16) + PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') VA_PORT_SCAN(0x2c) + PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') VA_PORT_SCAN(0x11) PORT_START("KEY5") - PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') - PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') - PORT_BIT(0x04,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') - PORT_BIT(0x08,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("[") - PORT_BIT(0x10,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("\xC2\xA5") /* Yen */ - PORT_BIT(0x20,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("]") - PORT_BIT(0x40,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("^") - PORT_BIT(0x80,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("-") + PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') VA_PORT_SCAN(0x2a) + PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') VA_PORT_SCAN(0x15) + PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') VA_PORT_SCAN(0x29) + PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('[') PORT_CHAR('{') + PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR(0xA5) PORT_CHAR('|') + PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(']') PORT_CHAR('}') + PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('^') + PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=') PORT_START("KEY6") - PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') - PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("1 !") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') - PORT_BIT(0x04,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("2 \"") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"') - PORT_BIT(0x08,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("3 #") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') - PORT_BIT(0x10,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("4 $") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') - PORT_BIT(0x20,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("5 %") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') - PORT_BIT(0x40,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("6 &") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&') - PORT_BIT(0x80,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("7 '") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'') + PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') + PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') + PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"') + PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') + PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') + PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') + PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&') + PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'') PORT_START("KEY7") - PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("8 (") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') - PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("9 )") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') - PORT_BIT(0x04,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME(": *") //PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') - PORT_BIT(0x08,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("; +") //PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') - PORT_BIT(0x10,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME(", <") //PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') - PORT_BIT(0x20,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME(". >") //PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') - PORT_BIT(0x40,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("/ ?") //PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') - PORT_BIT(0x80,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("/ ?") //PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') + PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') + PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') + PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*') VA_PORT_SCAN(0x27) + PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+') VA_PORT_SCAN(0x26) + PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') + PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') VA_PORT_SCAN(0x50) + PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') + PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(" _") PORT_CODE(KEYCODE_DEL) PORT_CHAR(0) PORT_CHAR('_') PORT_START("KEY8") - PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("CLR") // PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') - PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP) /* Up */ - PORT_BIT(0x04,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) /* Right */ - PORT_BIT(0x08,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("INSDEL") - PORT_BIT(0x10,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("GRPH") - PORT_BIT(0x20,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("KANA") PORT_CODE(KEYCODE_LALT) - PORT_BIT(0x40,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) - PORT_BIT(0x80,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) + PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Clr Home") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) + PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) VA_PORT_SCAN(0x3a) + PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) VA_PORT_SCAN(0x3c) + PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Del Ins") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_CHAR(UCHAR_MAMEKEY(INSERT)) + PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Grph") PORT_CODE(KEYCODE_LALT) PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(F7)) + PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Kana") PORT_CODE(KEYCODE_LCONTROL) PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(F6)) + PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) + PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2) PORT_START("KEY9") - PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("STOP") // PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') - PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F1 (mirror)") PORT_CODE(KEYCODE_F1) - PORT_BIT(0x04,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F2 (mirror)") PORT_CODE(KEYCODE_F2) - PORT_BIT(0x08,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F3 (mirror)") PORT_CODE(KEYCODE_F3) - PORT_BIT(0x10,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F4 (mirror)") PORT_CODE(KEYCODE_F4) - PORT_BIT(0x20,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F5 (mirror)") PORT_CODE(KEYCODE_F5) - PORT_BIT(0x40,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("SPACES") // PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') - PORT_BIT(0x80,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC) + PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Stop") PORT_CHAR(UCHAR_MAMEKEY(PAUSE)) VA_PORT_SCAN(0x60) + PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) + PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) + PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) + PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) + PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) VA_PORT_SCAN(0x66) + PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') VA_PORT_SCAN(0x34) + PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) PORT_START("KEYA") - PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("TAB") PORT_CODE(KEYCODE_TAB) - PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) /* Down */ - PORT_BIT(0x04,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) /* Left */ - PORT_BIT(0x08,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("HELP") // PORT_CODE(KEYCODE_TAB) - PORT_BIT(0x10,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("COPY") // PORT_CODE(KEYCODE_TAB) - PORT_BIT(0x20,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("- (mirror)") // PORT_CODE(KEYCODE_TAB) - PORT_BIT(0x40,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("/") // PORT_CODE(KEYCODE_TAB) - PORT_BIT(0x80,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) + PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t') + PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) VA_PORT_SCAN(0x3d) + PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) VA_PORT_SCAN(0x3b) + PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Help") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(F8)) + PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Copy") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(PRTSCR)) + PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) + PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) + PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Caps") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_START("KEYB") - PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("Roll Up") PORT_CODE(KEYCODE_PGUP) /* Roll Up */ - PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("Roll Down") PORT_CODE(KEYCODE_PGDN) /* Roll Down */ - PORT_BIT(0xfc,IP_ACTIVE_LOW,IPT_UNUSED) + PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Roll Up") PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(PGUP)) + PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Roll Down") PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(PGDN)) + // TODO: definitely other bits in here, cfr. pc8801ma extra keys + PORT_BIT(0xfc,IP_ACTIVE_LOW, IPT_UNUSED) PORT_START("KEYC") - PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) - PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F2") PORT_CODE(KEYCODE_F2) - PORT_BIT(0x04,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F3") PORT_CODE(KEYCODE_F3) - PORT_BIT(0x08,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F4") PORT_CODE(KEYCODE_F4) - PORT_BIT(0x10,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F5") PORT_CODE(KEYCODE_F5) - PORT_BIT(0x20,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) + PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) VA_PORT_SCAN(0x62) + PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F2") PORT_CODE(KEYCODE_F2) VA_PORT_SCAN(0x63) + PORT_BIT(0x04,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F3") PORT_CODE(KEYCODE_F3) VA_PORT_SCAN(0x64) + PORT_BIT(0x08,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F4") PORT_CODE(KEYCODE_F4) VA_PORT_SCAN(0x65) + PORT_BIT(0x10,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F5") PORT_CODE(KEYCODE_F5) VA_PORT_SCAN(0x66) + PORT_BIT(0x20,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) VA_PORT_SCAN(0x0e) PORT_BIT(0x40,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("INS") PORT_CODE(KEYCODE_INSERT) PORT_BIT(0x80,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("DEL") PORT_CODE(KEYCODE_DEL) PORT_START("KEYD") - PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F6") PORT_CODE(KEYCODE_F6) - PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F7") PORT_CODE(KEYCODE_F7) - PORT_BIT(0x04,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F8") PORT_CODE(KEYCODE_F8) - PORT_BIT(0x08,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F9") PORT_CODE(KEYCODE_F9) - PORT_BIT(0x10,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F10") PORT_CODE(KEYCODE_F10) + PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F6") PORT_CODE(KEYCODE_F6) VA_PORT_SCAN(0x67) + PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F7") PORT_CODE(KEYCODE_F7) VA_PORT_SCAN(0x68) + PORT_BIT(0x04,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F8") PORT_CODE(KEYCODE_F8) VA_PORT_SCAN(0x69) + PORT_BIT(0x08,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F9") PORT_CODE(KEYCODE_F9) VA_PORT_SCAN(0x6a) + PORT_BIT(0x10,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("F10") PORT_CODE(KEYCODE_F10) VA_PORT_SCAN(0x6b) PORT_BIT(0x20,IP_ACTIVE_LOW,IPT_KEYBOARD) // Conversion? PORT_BIT(0x40,IP_ACTIVE_LOW,IPT_KEYBOARD) // Decision? - PORT_BIT(0x80,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) + PORT_BIT(0x80,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("Space") // ? - /* TODO: I don't understand the meaning of several of these */ PORT_START("KEYE") PORT_BIT(0x01,IP_ACTIVE_LOW,IPT_KEYBOARD) - PORT_BIT(0x02,IP_ACTIVE_LOW,IPT_KEYBOARD) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad Enter") PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(13) VA_PORT_SCAN(0x79) PORT_BIT(0x04,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("Left Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_BIT(0x08,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_BIT(0x10,IP_ACTIVE_LOW,IPT_KEYBOARD) @@ -1252,7 +859,7 @@ PORT_BIT(0xff,IP_ACTIVE_LOW,IPT_UNUSED) PORT_START("DSW") - PORT_DIPNAME( 0x01, 0x01, "CRT Mode" ) + PORT_DIPNAME( 0x01, 0x00, "CRT Mode" ) PORT_DIPSETTING( 0x01, "15.7 KHz" ) PORT_DIPSETTING( 0x00, "24.8 KHz" ) PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) @@ -1335,33 +942,14 @@ 16*16 }; -// TODO: decoded for debugging purpose, this will be nuked in the end ... +// debug only static GFXDECODE_START( gfx_pc88va ) - GFXDECODE_ENTRY( "kanji", 0x00000, pc88va_chars_8x8, 0, 1 ) - GFXDECODE_ENTRY( "kanji", 0x00000, pc88va_chars_16x16, 0, 1 ) - GFXDECODE_ENTRY( nullptr, 0x00000, pc88va_kanji_8x8, 0, 1 ) - GFXDECODE_ENTRY( nullptr, 0x00000, pc88va_kanji_16x16, 0, 1 ) + GFXDECODE_ENTRY( "kanji", 0x00000, pc88va_chars_8x8, 0, 16 ) + GFXDECODE_ENTRY( "kanji", 0x00000, pc88va_chars_16x16, 0, 16 ) + GFXDECODE_ENTRY( nullptr, 0x00000, pc88va_kanji_8x8, 0, 16 ) + GFXDECODE_ENTRY( nullptr, 0x00000, pc88va_kanji_16x16, 0, 16 ) GFXDECODE_END -uint8_t pc88va_state::cpu_8255_c_r() -{ - return m_i8255_1_pc >> 4; -} - -void pc88va_state::cpu_8255_c_w(uint8_t data) -{ - m_i8255_0_pc = data; -} - -uint8_t pc88va_state::fdc_8255_c_r() -{ - return m_i8255_0_pc >> 4; -} - -void pc88va_state::fdc_8255_c_w(uint8_t data) -{ - m_i8255_1_pc = data; -} uint8_t pc88va_state::r232_ctrl_porta_r() { @@ -1405,18 +993,76 @@ // ... } +/**************************************** + * IRQ lines + ***************************************/ + uint8_t pc88va_state::get_slave_ack(offs_t offset) { - if (offset==7) { // IRQ = 7 + if (offset == 7) { return m_pic2->acknowledge(); } return 0x00; } +TIMER_DEVICE_CALLBACK_MEMBER(pc88va_state::vrtc_irq) +{ + int scanline = param; + + // upo and ballbrkr have a working vrtc irq routine and a vblank $40 readback at same time. + // there's no clear /VRMF write to $e6 so presuming the irq happening later than default + // screen_device first line after visible. + if (scanline == m_vrtc_irq_line) + { + // TODO: verify when ack should happen + m_maincpu->set_input_line(INPUT_LINE_IRQ2, CLEAR_LINE); + m_maincpu->set_input_line(INPUT_LINE_IRQ2, ASSERT_LINE); + } +} + +WRITE_LINE_MEMBER( pc88va_state::fdc_irq ) +{ + if(m_fdc_mode && state) + { + m_pic2->ir3_w(0); + m_pic2->ir3_w(1); + } +} + +WRITE_LINE_MEMBER(pc88va_state::int4_irq_w) +{ + bool irq_state = m_sound_irq_enable & state; + + if (irq_state) + { + m_pic2->ir4_w(0); + m_pic2->ir4_w(1); + } +// m_pic->r_w(7 ^ INT4_IRQ_LEVEL, !irq_state); + m_sound_irq_pending = state; +} + +WRITE_LINE_MEMBER( pc88va_state::tc_w ) +{ + m_fdc->tc_w(state); +} + +void pc88va_state::floppy_formats(format_registration &fr) +{ + fr.add_mfm_containers(); + fr.add(FLOPPY_XDF_FORMAT); + fr.add(FLOPPY_PC98FDI_FORMAT); +} + +static void pc88va_floppies(device_slot_interface &device) +{ + device.option_add("525hd", FLOPPY_525_HD); +} + void pc88va_state::machine_start() { - m_tc_clear_timer = timer_alloc(FUNC(pc88va_state::pc8801fd_upd765_tc_to_zero), this); - m_tc_clear_timer->adjust(attotime::never); + m_rtc->cs_w(1); + m_rtc->oe_w(1); m_fdc_timer = timer_alloc(FUNC(pc88va_state::pc88va_fdc_timer), this); m_fdc_timer->adjust(attotime::never); @@ -1441,7 +1087,6 @@ m_fdd[0]->get_device()->set_rpm(300); m_fdd[1]->get_device()->set_rpm(300); m_fdc->set_rate(250000); - } void pc88va_state::machine_reset() @@ -1455,146 +1100,49 @@ m_bank_reg = 0x4100; m_sysbank->set_bank(1); m_backupram_wp = 1; - - /* default palette */ - { - uint8_t i; - for(i=0;i<32;i++) - m_palette->set_pen_color(i,pal1bit((i & 2) >> 1),pal1bit((i & 4) >> 2),pal1bit(i & 1)); - } + m_rstmd = false; m_tsp.tvram_vreg_offset = 0; m_fdc_mode = 0; - m_fdc_irq_opcode = 0x00; //0x7f ld a,a ! - - #if TEST_SUBFDC - m_fdccpu->set_input_line_vector(0, 0); // Z80 - #endif + m_xtmask = false; - m_fdc_motor_status[0] = 0; - m_fdc_motor_status[1] = 0; + // shinraba never write to port $32, + // and it expects that the sound irq actually runs otherwise it enters in debug mode + m_misc_ctrl = 0x00; + m_sound_irq_enable = true; + m_sound_irq_pending = false; } -INTERRUPT_GEN_MEMBER(pc88va_state::pc88va_vrtc_irq) -{ - m_pic1->ir2_w(0); - m_pic1->ir2_w(1); -} - -WRITE_LINE_MEMBER(pc88va_state::pc88va_pit_out0_changed) -{ - if(state) - { - m_pic1->ir0_w(0); - m_pic1->ir0_w(1); - } -} - -WRITE_LINE_MEMBER( pc88va_state::fdc_drq ) -{ - printf("%02x DRQ\n",state); - m_dmac->dreq2_w(state); -} - -WRITE_LINE_MEMBER( pc88va_state::fdc_irq ) -{ - if(m_fdc_mode && state) - { - //printf("%d\n",state); - m_pic2->ir3_w(0); - m_pic2->ir3_w(1); - } - #if TEST_SUBFDC - else - m_fdccpu->set_input_line(0, HOLD_LINE); - #endif -} - -WRITE_LINE_MEMBER(pc88va_state::pc88va_hlda_w) -{ -// m_maincpu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE); - - m_dmac->hack_w(state); - -// printf("%02x HLDA\n",state); -} - -WRITE_LINE_MEMBER( pc88va_state::pc88va_tc_w ) -{ - /* floppy terminal count */ - m_fdc->tc_w(state); - -// printf("TC %02x\n",state); -} - - -uint8_t pc88va_state::fdc_dma_r() -{ - printf("R DMA\n"); - return m_fdc->dma_r(); -} - -void pc88va_state::fdc_dma_w(uint8_t data) -{ - printf("W DMA %08x\n",data); - m_fdc->dma_w(data); -} - -void pc88va_state::floppy_formats(format_registration &fr) -{ - fr.add_mfm_containers(); - fr.add(FLOPPY_XDF_FORMAT); -} - -static void pc88va_floppies(device_slot_interface &device) -{ - device.option_add("525hd", FLOPPY_525_HD); -} - -uint8_t pc88va_state::dma_memr_cb(offs_t offset) -{ - printf("%08x\n",offset); - return 0; -} - -void pc88va_state::dma_memw_cb(offs_t offset, uint8_t data) -{ - printf("%08x %02x\n",offset,data); -} - - void pc88va_state::pc88va(machine_config &config) { - V50(config, m_maincpu, MASTER_CLOCK); // μPD9002, aka V30 + μPD70008AC (for PC8801 compatibility mode) - m_maincpu->set_addrmap(AS_PROGRAM, &pc88va_state::pc88va_map); - m_maincpu->set_addrmap(AS_IO, &pc88va_state::pc88va_io_map); - m_maincpu->set_vblank_int("screen", FUNC(pc88va_state::pc88va_vrtc_irq)); - m_maincpu->set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb)); - -#if TEST_SUBFDC - z80_device &fdccpu(Z80(config, "fdccpu", 8000000)); /* 8 MHz */ - fdccpu.set_addrmap(AS_PROGRAM, &pc88va_state::pc88va_z80_map); - fdccpu.set_addrmap(AS_IO, &pc88va_state::pc88va_z80_io_map); + V50(config, m_maincpu, MASTER_CLOCK); // μPD9002, aka V50 + μPD70008AC (for PC8801 compatibility mode) in place of 8080 + m_maincpu->set_addrmap(AS_PROGRAM, &pc88va_state::main_map); + m_maincpu->set_addrmap(AS_IO, &pc88va_state::io_map); + TIMER(config, "scantimer").configure_scanline(FUNC(pc88va_state::vrtc_irq), "screen", 0, 1); + m_maincpu->icu_slave_ack_cb().set(m_pic2, FUNC(pic8259_device::acknowledge)); + m_maincpu->set_tclk(MASTER_CLOCK); + // "timer 1" + m_maincpu->tout1_cb().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + // ch2 is FDC, ch0/3 are "user". ch1 is unused + m_maincpu->out_hreq_cb().set(m_maincpu, FUNC(v50_device::hack_w)); + m_maincpu->out_eop_cb().set(FUNC(pc88va_state::tc_w)); + m_maincpu->in_ior_cb<2>().set(m_fdc, FUNC(upd765a_device::dma_r)); + m_maincpu->out_iow_cb<2>().set(m_fdc, FUNC(upd765a_device::dma_w)); + m_maincpu->in_memr_cb().set([this] (offs_t offset) { return m_maincpu->space(AS_PROGRAM).read_byte(offset); }); + m_maincpu->out_memw_cb().set([this] (offs_t offset, u8 data) { m_maincpu->space(AS_PROGRAM).write_byte(offset, data); }); - config.m_perfect_cpu_quantum = subtag("maincpu"); -#endif + // TODO: pc80s31k here SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_refresh_hz(60); - m_screen->set_size(640, 480); - m_screen->set_visarea(0, 640-1, 0, 200-1); - m_screen->set_screen_update(FUNC(pc88va_state::screen_update_pc88va)); + m_screen->set_raw(XTAL(42'105'200) / 2, 848, 0, 640, 448, 0, 400); + m_screen->set_screen_update(FUNC(pc88va_state::screen_update)); - PALETTE(config, m_palette).set_entries(32); -// m_palette->set_init(FUNC(pc88va_state::pc8801)); + PALETTE(config, m_palette, FUNC(pc88va_state::palette_init)).set_entries(32); GFXDECODE(config, m_gfxdecode, m_palette, gfx_pc88va); - i8255_device &d8255_2(I8255(config, "d8255_2")); - d8255_2.in_pa_callback().set("d8255_2s", FUNC(i8255_device::pb_r)); - d8255_2.in_pb_callback().set("d8255_2s", FUNC(i8255_device::pa_r)); - d8255_2.in_pc_callback().set(FUNC(pc88va_state::cpu_8255_c_r)); - d8255_2.out_pc_callback().set(FUNC(pc88va_state::cpu_8255_c_w)); + PC88VA_SGP(config, m_sgp); + m_sgp->set_map(&pc88va_state::sgp_map); i8255_device &d8255_3(I8255(config, "d8255_3")); d8255_3.in_pa_callback().set(FUNC(pc88va_state::r232_ctrl_porta_r)); @@ -1604,104 +1152,102 @@ d8255_3.in_pc_callback().set(FUNC(pc88va_state::r232_ctrl_portc_r)); d8255_3.out_pc_callback().set(FUNC(pc88va_state::r232_ctrl_portc_w)); - i8255_device &d8255_2s(I8255(config, "d8255_2s")); - d8255_2s.in_pa_callback().set("d8255_2", FUNC(i8255_device::pb_r)); - d8255_2s.in_pb_callback().set("d8255_2", FUNC(i8255_device::pa_r)); - d8255_2s.in_pc_callback().set(FUNC(pc88va_state::fdc_8255_c_r)); - d8255_2s.out_pc_callback().set(FUNC(pc88va_state::fdc_8255_c_w)); - - PIC8259(config, m_pic1, 0); - m_pic1->out_int_callback().set_inputline(m_maincpu, 0); - m_pic1->in_sp_callback().set_constant(1); - m_pic1->read_slave_ack_callback().set(FUNC(pc88va_state::get_slave_ack)); - + // external PIC PIC8259(config, m_pic2, 0); - m_pic2->out_int_callback().set(m_pic1, FUNC(pic8259_device::ir7_w)); + m_pic2->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ7); m_pic2->in_sp_callback().set_constant(0); - AM9517A(config, m_dmac, MASTER_CLOCK); // ch2 is FDC, ch0/3 are "user". ch1 is unused - m_dmac->out_hreq_callback().set(FUNC(pc88va_state::pc88va_hlda_w)); - m_dmac->out_eop_callback().set(FUNC(pc88va_state::pc88va_tc_w)); - m_dmac->in_ior_callback<2>().set(FUNC(pc88va_state::fdc_dma_r)); - m_dmac->out_iow_callback<2>().set(FUNC(pc88va_state::fdc_dma_w)); - m_dmac->in_memr_callback().set(FUNC(pc88va_state::dma_memr_cb)); - m_dmac->out_memw_callback().set(FUNC(pc88va_state::dma_memw_cb)); - - UPD765A(config, m_fdc, 8000000, false, true); + UPD765A(config, m_fdc, 4000000, true, true); m_fdc->intrq_wr_callback().set(FUNC(pc88va_state::fdc_irq)); - m_fdc->drq_wr_callback().set(FUNC(pc88va_state::fdc_drq)); - FLOPPY_CONNECTOR(config, m_fdd[0], pc88va_floppies, "525hd", pc88va_state::floppy_formats); - FLOPPY_CONNECTOR(config, m_fdd[1], pc88va_floppies, "525hd", pc88va_state::floppy_formats); + m_fdc->drq_wr_callback().set(m_maincpu, FUNC(v50_device::dreq_w<2>)); + FLOPPY_CONNECTOR(config, m_fdd[0], pc88va_floppies, "525hd", pc88va_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_fdd[1], pc88va_floppies, "525hd", pc88va_state::floppy_formats).enable_sound(true); + + // TODO: set pc98 compatible + // Needs a MS-Engine disk dump first, that applies an overlay on PC Engine OS so that it can run PC-98 software SOFTWARE_LIST(config, "disk_list").set_original("pc88va"); - pit8253_device &pit8253(PIT8253(config, "pit8253", 0)); - pit8253.set_clk<0>(MASTER_CLOCK); /* general purpose timer 1 */ - pit8253.out_handler<0>().set(FUNC(pc88va_state::pc88va_pit_out0_changed)); - pit8253.set_clk<1>(MASTER_CLOCK); /* BEEP frequency setting */ - pit8253.set_clk<2>(MASTER_CLOCK); /* RS232C baud rate setting */ - - ADDRESS_MAP_BANK(config, "sysbank").set_map(&pc88va_state::sysbank_map).set_options(ENDIANNESS_LITTLE, 16, 18+4, 0x40000); - - SPEAKER(config, "mono").front_center(); - ym2203_device &ym(YM2203(config, "ym", FM_CLOCK)); //unknown clock / divider - ym.add_route(0, "mono", 0.25); - ym.add_route(1, "mono", 0.25); - ym.add_route(2, "mono", 0.50); - ym.add_route(3, "mono", 0.50); + UPD4990A(config, m_rtc); + + ADDRESS_MAP_BANK(config, "sysbank").set_map(&pc88va_state::sysbank_map).set_options(ENDIANNESS_LITTLE, 16, 22, 0x40000); + + MSX_GENERAL_PURPOSE_PORT(config, m_mouse_port, msx_general_purpose_port_devices, "joystick"); + + SPEAKER(config, m_lspeaker).front_left(); + SPEAKER(config, m_rspeaker).front_right(); + + // PC-88VA-12 "Sound Board II", YM2608B + YM2608(config, m_opna, FM_CLOCK); + m_opna->set_addrmap(0, &pc88va_state::opna_map); + m_opna->irq_handler().set(FUNC(pc88va_state::int4_irq_w)); + m_opna->port_a_read_callback().set(FUNC(pc88va_state::opn_porta_r)); + m_opna->port_b_read_callback().set(FUNC(pc88va_state::opn_portb_r)); + // TODO: per-channel mixing is unconfirmed + m_opna->add_route(0, m_lspeaker, 0.25); + m_opna->add_route(0, m_rspeaker, 0.25); + m_opna->add_route(1, m_lspeaker, 0.75); + m_opna->add_route(2, m_rspeaker, 0.75); } -ROM_START( pc88va2 ) +ROM_START( pc88va ) ROM_REGION( 0x100000, "maincpu", ROMREGION_ERASEFF ) - ROM_REGION( 0x100000, "fdccpu", ROMREGION_ERASEFF ) - ROM_LOAD( "vasubsys.rom", 0x0000, 0x2000, CRC(08962850) SHA1(a9375aa480f85e1422a0e1385acb0ea170c5c2e0) ) + // In pc80s31k device +// ROM_REGION( 0x100000, "fdccpu", ROMREGION_ERASEFF ) +// ROM_LOAD( "vasubsys.rom", 0x0000, 0x2000, CRC(08962850) SHA1(a9375aa480f85e1422a0e1385acb0ea170c5c2e0) ) ROM_REGION( 0x100000, "rom00", ROMREGION_ERASEFF ) // 0xe0000 - 0xeffff - ROM_LOAD( "varom00_va2.rom", 0x00000, 0x80000, CRC(98c9959a) SHA1(bcaea28c58816602ca1e8290f534360f1ca03fe8) ) - ROM_LOAD( "varom08_va2.rom", 0x80000, 0x20000, CRC(eef6d4a0) SHA1(47e5f89f8b0ce18ff8d5d7b7aef8ca0a2a8e3345) ) + ROM_LOAD( "varom00.rom", 0x00000, 0x80000, CRC(8a853b00) SHA1(1266ba969959ff25433ecc900a2caced26ef1a9e)) + ROM_LOAD( "varom08.rom", 0x80000, 0x20000, CRC(154803cc) SHA1(7e6591cd465cbb35d6d3446c5a83b46d30fafe95)) - ROM_REGION( 0x20000, "rom10", 0 ) // 0xf0000 - 0xfffff - ROM_LOAD( "varom1_va2.rom", 0x00000, 0x20000, CRC(7e767f00) SHA1(dd4f4521bfbb068f15ab3bcdb8d47c7d82b9d1d4) ) + ROM_REGION( 0x20000, "rom10", ROMREGION_ERASEFF ) // 0xf0000 - 0xfffff + ROM_LOAD( "varom1.rom", 0x00000, 0x20000, CRC(0783b16a) SHA1(54536dc03238b4668c8bb76337efade001ec7826)) - /* No idea of the proper size: it has never been dumped */ + // TODO: identify this, likely don't even belong to pc88va internals ROM_REGION( 0x2000, "audiocpu", 0) ROM_LOAD( "soundbios.rom", 0x0000, 0x2000, NO_DUMP ) + // TODO: identify this + ROM_REGION( 0x1000, "mcu", 0) + ROM_LOAD( "kbd.rom", 0x0000, 0x1000, NO_DUMP ) + ROM_REGION16_LE( 0x80000, "kanji", ROMREGION_ERASEFF ) - ROM_LOAD( "vafont_va2.rom", 0x00000, 0x50000, BAD_DUMP CRC(b40d34e4) SHA1(a0227d1fbc2da5db4b46d8d2c7e7a9ac2d91379f) ) // should be splitted + ROM_LOAD( "vafont.rom", 0x0000, 0x50000, BAD_DUMP CRC(faf7c466) SHA1(196b3d5b7407cb4f286ffe5c1e34ebb1f6905a8c)) // should be splitted ROM_REGION16_LE( 0x80000, "dictionary", 0 ) - ROM_LOAD( "vadic_va2.rom", 0x00000, 0x80000, CRC(a6108f4d) SHA1(3665db538598abb45d9dfe636423e6728a812b12) ) + ROM_LOAD( "vadic.rom", 0x0000, 0x80000, CRC(f913c605) SHA1(5ba1f3578d0aaacdaf7194a80e6d520c81ae55fb)) ROM_END -ROM_START( pc88va ) +ROM_START( pc88va2 ) ROM_REGION( 0x100000, "maincpu", ROMREGION_ERASEFF ) - ROM_REGION( 0x100000, "fdccpu", ROMREGION_ERASEFF ) - ROM_LOAD( "vasubsys.rom", 0x0000, 0x2000, CRC(08962850) SHA1(a9375aa480f85e1422a0e1385acb0ea170c5c2e0) ) +// ROM_REGION( 0x100000, "fdccpu", ROMREGION_ERASEFF ) +// ROM_LOAD( "vasubsys.rom", 0x0000, 0x2000, CRC(08962850) SHA1(a9375aa480f85e1422a0e1385acb0ea170c5c2e0) ) ROM_REGION( 0x100000, "rom00", ROMREGION_ERASEFF ) // 0xe0000 - 0xeffff - ROM_LOAD( "varom00.rom", 0x00000, 0x80000, CRC(8a853b00) SHA1(1266ba969959ff25433ecc900a2caced26ef1a9e)) - ROM_LOAD( "varom08.rom", 0x80000, 0x20000, CRC(154803cc) SHA1(7e6591cd465cbb35d6d3446c5a83b46d30fafe95)) + ROM_LOAD( "varom00_va2.rom", 0x00000, 0x80000, CRC(98c9959a) SHA1(bcaea28c58816602ca1e8290f534360f1ca03fe8) ) + ROM_LOAD( "varom08_va2.rom", 0x80000, 0x20000, CRC(eef6d4a0) SHA1(47e5f89f8b0ce18ff8d5d7b7aef8ca0a2a8e3345) ) - ROM_REGION( 0x20000, "rom10", 0 ) // 0xf0000 - 0xfffff - ROM_LOAD( "varom1.rom", 0x00000, 0x20000, CRC(0783b16a) SHA1(54536dc03238b4668c8bb76337efade001ec7826)) + ROM_REGION( 0x20000, "rom10", ROMREGION_ERASEFF ) // 0xf0000 - 0xfffff + ROM_LOAD( "varom1_va2.rom", 0x00000, 0x20000, CRC(7e767f00) SHA1(dd4f4521bfbb068f15ab3bcdb8d47c7d82b9d1d4) ) - /* No idea of the proper size: it has never been dumped */ + // TODO: identify this, likely don't even belong to pc88va internals ROM_REGION( 0x2000, "audiocpu", 0) ROM_LOAD( "soundbios.rom", 0x0000, 0x2000, NO_DUMP ) + // TODO: identify this + ROM_REGION( 0x1000, "mcu", 0) + ROM_LOAD( "kbd.rom", 0x0000, 0x1000, NO_DUMP ) + ROM_REGION16_LE( 0x80000, "kanji", ROMREGION_ERASEFF ) - ROM_LOAD( "vafont.rom", 0x0000, 0x50000, BAD_DUMP CRC(faf7c466) SHA1(196b3d5b7407cb4f286ffe5c1e34ebb1f6905a8c)) // should be splitted + ROM_LOAD( "vafont_va2.rom", 0x00000, 0x50000, BAD_DUMP CRC(b40d34e4) SHA1(a0227d1fbc2da5db4b46d8d2c7e7a9ac2d91379f) ) // should be splitted ROM_REGION16_LE( 0x80000, "dictionary", 0 ) - ROM_LOAD( "vadic.rom", 0x0000, 0x80000, CRC(f913c605) SHA1(5ba1f3578d0aaacdaf7194a80e6d520c81ae55fb)) + ROM_LOAD( "vadic_va2.rom", 0x00000, 0x80000, CRC(a6108f4d) SHA1(3665db538598abb45d9dfe636423e6728a812b12) ) ROM_END - - - -COMP( 1987, pc88va, 0, 0, pc88va, pc88va, pc88va_state, empty_init, "NEC", "PC-88VA", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) -COMP( 1988, pc88va2, pc88va, 0, pc88va, pc88va, pc88va_state, empty_init, "NEC", "PC-88VA2", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +COMP( 1987, pc88va, 0, 0, pc88va, pc88va, pc88va_state, empty_init, "NEC", "PC-88VA", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_SOUND ) +COMP( 1988, pc88va2, pc88va, 0, pc88va, pc88va, pc88va_state, empty_init, "NEC", "PC-88VA2", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_SOUND ) +// VA3 has 3.5" 2TD drives with about 9.3 MB capacity //COMP( 1988, pc88va3, pc88va, 0, pc88va, pc88va, pc88va_state, empty_init, "NEC", "PC-88VA3", MACHINE_NOT_WORKING ) diff -Nru mame-0.250+dfsg.1/src/mame/nec/pc88va.h mame-0.251+dfsg.1/src/mame/nec/pc88va.h --- mame-0.250+dfsg.1/src/mame/nec/pc88va.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nec/pc88va.h 2022-12-29 14:20:09.000000000 +0000 @@ -6,21 +6,24 @@ ********************************************************************************************/ +#ifndef MAME_NEC_PC88VA_H +#define MAME_NEC_PC88VA_H + #pragma once -#ifndef MAME_INCLUDES_PC88VA_H -#define MAME_INCLUDES_PC88VA_H +//#include "pc80s31k.h" +#include "pc88va_sgp.h" +#include "bus/msx/ctrl/ctrl.h" #include "cpu/nec/v5x.h" #include "cpu/z80/z80.h" #include "imagedev/floppy.h" -#include "machine/am9517a.h" +#include "machine/bankdev.h" #include "machine/i8255.h" #include "machine/pic8259.h" -#include "machine/pit8253.h" -//#include "machine/upd71071.h" +#include "machine/timer.h" +#include "machine/upd1990a.h" #include "machine/upd765.h" -#include "machine/bankdev.h" #include "sound/ymopn.h" #include "emupal.h" @@ -28,101 +31,122 @@ #include "softlist.h" #include "speaker.h" +#include "formats/pc98fdi_dsk.h" #include "formats/xdf_dsk.h" -// TODO: for the time being, just disable FDC CPU, it's for PC-8801 compatibility mode anyway. -// the whole FDC device should be converted (it's also used by PC-9801) -#define TEST_SUBFDC 0 - - class pc88va_state : public driver_device { public: - pc88va_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_screen(*this, "screen"), - m_fdc(*this, "upd765"), - m_fdd(*this, "upd765:%u", 0U), - m_dmac(*this, "dmac"), - m_pic1(*this, "pic8259_master"), - m_pic2(*this, "pic8259_slave"), - m_palram(*this, "palram"), - m_sysbank(*this, "sysbank"), - m_tvram(*this, "tvram"), - m_gvram(*this, "gvram"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") + pc88va_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_screen(*this, "screen") + , m_fdc(*this, "upd765") + , m_fdd(*this, "upd765:%u", 0U) + , m_pic2(*this, "pic8259_slave") + , m_rtc(*this, "rtc") + , m_mouse_port(*this, "mouseport") // labelled "マウス" (mouse) - can't use "mouse" because of core -mouse option + , m_opna(*this, "opna") + , m_lspeaker(*this, "lspeaker") + , m_rspeaker(*this, "rspeaker") + , m_palram(*this, "palram") + , m_sysbank(*this, "sysbank") + , m_workram(*this, "workram") + , m_tvram(*this, "tvram") + , m_gvram(*this, "gvram") + , m_fb_regs(*this, "fb_regs") + , m_kanji_rom(*this, "kanji") + , m_sgp(*this, "sgp") + , m_gfxdecode(*this, "gfxdecode") + , m_palette(*this, "palette") { } void pc88va(machine_config &config); + DECLARE_INPUT_CHANGED_MEMBER(key_stroke); + protected: struct tsp_t { - uint16_t tvram_vreg_offset = 0; - uint16_t attr_offset = 0; - uint16_t spr_offset = 0; - uint8_t disp_on = 0; - uint8_t spr_on = 0; - uint8_t pitch = 0; - uint8_t line_height = 0; - uint8_t h_line_pos = 0; - uint8_t blink = 0; - uint16_t cur_pos_x = 0, cur_pos_y = 0; - uint8_t curn = 0; - uint8_t curn_blink = 0; + u16 tvram_vreg_offset = 0; + u32 attr_offset = 0; + u32 spr_offset = 0; + u8 spr_mg = 0; + bool disp_on = false; + bool spr_on = false; + u8 pitch = 0; + u8 line_height = 0; + u8 h_line_pos = 0; + u16 blink = 0; + u16 cur_pos_x = 0, cur_pos_y = 0; + u8 curn = 0; + bool curn_blink = false; + bool spwr_define = false; + u8 spwr_offset = 0; + }; + + struct keyb_t + { + u8 data = 0; }; + keyb_t m_keyb; virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; + void palette_init(palette_device &palette) const; private: - required_device m_maincpu; + required_device m_maincpu; required_device m_screen; required_device m_fdc; required_device_array m_fdd; - required_device m_dmac; - required_device m_pic1; +// required_device m_dmac; +// required_device m_pic1; required_device m_pic2; + required_device m_rtc; + required_device m_mouse_port; + required_device m_opna; + required_device m_lspeaker; + required_device m_rspeaker; required_shared_ptr m_palram; required_device m_sysbank; + required_shared_ptr m_workram; required_shared_ptr m_tvram; required_shared_ptr m_gvram; + required_shared_ptr m_fb_regs; + required_region_ptr m_kanji_rom; + required_device m_sgp; std::unique_ptr m_kanjiram; uint16_t m_bank_reg = 0; - uint16_t m_screen_ctrl_reg = 0; uint8_t m_timer3_io_reg = 0; emu_timer *m_t3_mouse_timer = nullptr; - tsp_t m_tsp; - uint16_t m_video_pri_reg[2]{}; uint8_t m_backupram_wp = 0; - uint8_t m_cmd = 0; - uint8_t m_buf_size = 0; - uint8_t m_buf_index = 0; - uint8_t m_buf_ram[16]{}; - uint8_t m_portc_test = 0; - uint8_t m_fdc_motor_status[2]{}; + bool m_rstmd = false; - /* timers */ - emu_timer *m_tc_clear_timer = nullptr; + // FDC emu_timer *m_fdc_timer = nullptr; emu_timer *m_motor_start_timer[2]{}; - /* floppy state */ - uint8_t m_i8255_0_pc = 0; - uint8_t m_i8255_1_pc = 0; uint8_t m_fdc_mode = 0; - uint8_t m_fdc_irq_opcode = 0; - uint8_t idp_status_r(); - void idp_command_w(uint8_t data); - void idp_param_w(uint8_t data); - void palette_ram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - uint16_t sys_port4_r(); + uint8_t m_fdc_ctrl_2 = 0; + bool m_xtmask = false; + TIMER_CALLBACK_MEMBER(t3_mouse_callback); + TIMER_CALLBACK_MEMBER(pc88va_fdc_timer); + TIMER_CALLBACK_MEMBER(pc88va_fdc_motor_start_0); + TIMER_CALLBACK_MEMBER(pc88va_fdc_motor_start_1); + DECLARE_WRITE_LINE_MEMBER(tc_w); + + DECLARE_WRITE_LINE_MEMBER(fdc_irq); + static void floppy_formats(format_registration &fr); + void pc88va_fdc_update_ready(floppy_image_device *, int); + uint8_t fake_subfdc_r(); + uint8_t pc88va_fdc_r(offs_t offset); + void pc88va_fdc_w(offs_t offset, uint8_t data); + uint16_t bios_bank_r(); void bios_bank_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); uint8_t rom_bank_r(); @@ -131,28 +155,18 @@ void backupram_wp_0_w(uint16_t data); uint8_t kanji_ram_r(offs_t offset); void kanji_ram_w(offs_t offset, uint8_t data); + uint8_t hdd_status_r(); - #if TEST_SUBFDC - uint8_t upd765_tc_r(); - void upd765_mc_w(uint8_t data); - #else - uint8_t no_subfdc_r(); - #endif - uint8_t pc88va_fdc_r(offs_t offset); - void pc88va_fdc_w(offs_t offset, uint8_t data); + uint16_t sysop_r(); - uint16_t screen_ctrl_r(); - void screen_ctrl_w(uint16_t data); void timer3_ctrl_reg_w(uint8_t data); - void video_pri_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); uint8_t backupram_dsw_r(offs_t offset); void sys_port1_w(uint8_t data); - uint32_t screen_update_pc88va(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(pc88va_vrtc_irq); - uint8_t cpu_8255_c_r(); - void cpu_8255_c_w(uint8_t data); - uint8_t fdc_8255_c_r(); - void fdc_8255_c_w(uint8_t data); + u8 sys_port5_r(); + void sys_port5_w(u8 data); + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + TIMER_DEVICE_CALLBACK_MEMBER(vrtc_irq); + uint8_t r232_ctrl_porta_r(); uint8_t r232_ctrl_portb_r(); uint8_t r232_ctrl_portc_r(); @@ -160,31 +174,70 @@ void r232_ctrl_portb_w(uint8_t data); void r232_ctrl_portc_w(uint8_t data); uint8_t get_slave_ack(offs_t offset); - DECLARE_WRITE_LINE_MEMBER(pc88va_pit_out0_changed); -// DECLARE_WRITE_LINE_MEMBER(pc88va_upd765_interrupt); - uint8_t m_fdc_ctrl_2; - TIMER_CALLBACK_MEMBER(pc8801fd_upd765_tc_to_zero); - TIMER_CALLBACK_MEMBER(t3_mouse_callback); - TIMER_CALLBACK_MEMBER(pc88va_fdc_timer); - TIMER_CALLBACK_MEMBER(pc88va_fdc_motor_start_0); - TIMER_CALLBACK_MEMBER(pc88va_fdc_motor_start_1); -// uint16_t m_fdc_dma_r(); -// void m_fdc_dma_w(uint16_t data); - DECLARE_WRITE_LINE_MEMBER(pc88va_hlda_w); - DECLARE_WRITE_LINE_MEMBER(pc88va_tc_w); - uint8_t fdc_dma_r(); - void fdc_dma_w(uint8_t data); - uint8_t dma_memr_cb(offs_t offset); - void dma_memw_cb(offs_t offset, uint8_t data); - DECLARE_WRITE_LINE_MEMBER(fdc_irq); - DECLARE_WRITE_LINE_MEMBER(fdc_drq); - static void floppy_formats(format_registration &fr); - void pc88va_fdc_update_ready(floppy_image_device *, int); + uint16_t m_video_pri_reg[2]{}; + + u16 m_screen_ctrl_reg = 0; + bool m_dm = false; + bool m_ymmd = false; + u16 m_gfx_ctrl_reg = 0; + + u16 m_color_mode = 0; + u8 m_pltm, m_pltp = 0; + + u16 m_text_transpen = 0; + bool m_td = false; + bitmap_rgb32 m_graphic_bitmap[2]; + + u16 screen_ctrl_r(); + void screen_ctrl_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u16 gfx_ctrl_r(); + void gfx_ctrl_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void video_pri_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + + void color_mode_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void text_transpen_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void text_control_1_w(u8 data); + + u8 m_kanji_cg_line = 0; + u8 m_kanji_cg_jis[2]{}; + u8 m_kanji_cg_lr = 0; + + u8 kanji_cg_r(); + void kanji_cg_raster_w(u8 data); + void kanji_cg_address_w(offs_t offset, u8 data); + + void palette_ram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + + u8 get_layer_pal_bank(u8 which); void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect); + void draw_graphic_layer(bitmap_rgb32 &bitmap, const rectangle &cliprect, u8 which); + + void draw_indexed_gfx_1bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u8 pal_base); + void draw_indexed_gfx_4bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u32 display_start_offset, u8 pal_base, u16 fb_width, u16 fb_height); + void draw_direct_gfx_8bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u16 fb_width, u16 fb_height); + void draw_direct_gfx_rgb565(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u16 fb_width, u16 fb_height); + + void draw_packed_gfx_4bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u32 display_start_offset, u8 pal_base, u16 fb_width, u16 fb_height); + void draw_packed_gfx_5bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u32 display_start_offset, u8 pal_base, u16 fb_width, u16 fb_height); + uint32_t calc_kanji_rom_addr(uint8_t jis1,uint8_t jis2,int x,int y); void draw_text(bitmap_rgb32 &bitmap, const rectangle &cliprect); - void tsp_sprite_enable(uint32_t spr_offset, uint16_t sw_bit); + + // IDP + tsp_t m_tsp; + + uint8_t m_cmd = 0; + uint8_t m_buf_size = 0; + uint8_t m_buf_index = 0; + uint8_t m_buf_ram[16]{}; + u16 m_vrtc_irq_line = 432; + + uint8_t idp_status_r(); + void idp_command_w(uint8_t data); + void idp_param_w(uint8_t data); + + void tsp_sprite_enable(u32 sprite_number, bool sprite_enable, bool blink_enable); void execute_sync_cmd(); void execute_dspon_cmd(); void execute_dspdef_cmd(); @@ -194,17 +247,35 @@ void execute_emul_cmd(); void execute_spron_cmd(); void execute_sprsw_cmd(); + void execute_spwr_cmd(u8 data); - void pc88va_map(address_map &map); - void pc88va_io_map(address_map &map); + void main_map(address_map &map); + void io_map(address_map &map); void sysbank_map(address_map &map); + void opna_map(address_map &map); + + void sgp_map(address_map &map); - void pc88va_z80_io_map(address_map &map); - void pc88va_z80_map(address_map &map); protected: required_device m_gfxdecode; required_device m_palette; + +// TODO: stuff backported from PC8801 as QoL that should really be common +private: + uint8_t misc_ctrl_r(); + void misc_ctrl_w(uint8_t data); + uint8_t port40_r(); + void port40_w(offs_t offset, u8 data); + void rtc_w(offs_t offset, u8 data); + u8 opn_porta_r(); + u8 opn_portb_r(); + + u8 m_device_ctrl_data = 0; + u8 m_misc_ctrl = 0x80; + bool m_sound_irq_enable = false; + bool m_sound_irq_pending = false; + DECLARE_WRITE_LINE_MEMBER(int4_irq_w); }; -#endif +#endif // MAME_NEC_PC88VA_H diff -Nru mame-0.250+dfsg.1/src/mame/nec/pc88va_sgp.cpp mame-0.251+dfsg.1/src/mame/nec/pc88va_sgp.cpp --- mame-0.250+dfsg.1/src/mame/nec/pc88va_sgp.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nec/pc88va_sgp.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,403 @@ +// license:BSD-3-Clause +// copyright-holders:Angelo Salese +/************************************************************************************************** + +NEC SGP (スーパーグラフィックプロセッサ / Super Graphic Processor) + +Unknown part number, used as GPU for PC88VA + +TODO: +- timing details +- specifics about what exactly happens in work area when either SGP runs or is idle. +- famista: during gameplay it BITBLT same source to destination 0x00037076 + with tp_mode = 3 and pitch = 0 (!?); +- rtype: during gameplay it does transfers with Pitch = 0xfff0, alias for negative draw? +- basic fires a VABOT on loading; + +**************************************************************************************************/ + +#include "emu.h" +#include "pc88va_sgp.h" + +#include + + +#define LOG_COMMAND (1U << 2) + +#define VERBOSE (LOG_GENERAL) +//#define LOG_OUTPUT_STREAM std::cout + +#include "logmacro.h" + +#define LOGCOMMAND(...) LOGMASKED(LOG_COMMAND, __VA_ARGS__) + +// device type definition +DEFINE_DEVICE_TYPE(PC88VA_SGP, pc88va_sgp_device, "pc88va_sgp", "NEC PC88VA Super Graphic Processor") + +pc88va_sgp_device::pc88va_sgp_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + device_t(mconfig, PC88VA_SGP, tag, owner, clock), + device_memory_interface(mconfig, *this), + m_data(nullptr) +{ +} + +device_memory_interface::space_config_vector pc88va_sgp_device::memory_space_config() const +{ + return space_config_vector { + std::make_pair(AS_DATA, &m_data_config) + }; +} + + +void pc88va_sgp_device::device_config_complete() +{ + m_data_config = address_space_config( "data", ENDIANNESS_LITTLE, 16, 22, 0 ); +} + +void pc88va_sgp_device::device_start() +{ + m_data = &space(AS_DATA); +} + +void pc88va_sgp_device::device_reset() +{ + +} + +/**************************************** + * I/Os + ***************************************/ + +void pc88va_sgp_device::sgp_io(address_map &map) +{ + // TODO: check if readable + map(0x00, 0x03).w(FUNC(pc88va_sgp_device::vdp_address_w)); + map(0x04, 0x04).w(FUNC(pc88va_sgp_device::control_w)); + map(0x06, 0x06).rw(FUNC(pc88va_sgp_device::status_r), FUNC(pc88va_sgp_device::trigger_w)); +} + +void pc88va_sgp_device::vdp_address_w(offs_t offset, u16 data, u16 mem_mask) +{ + COMBINE_DATA(&m_vdp_address[offset]); +} + +/* + * ---- -x-- VINTF (1) enable irq on END execution, (0) clear irq + * ---- --x- VABOT suspend SGP execution (1) + */ +void pc88va_sgp_device::control_w(u8 data) +{ + if (data) + popmessage("SGP warning write %02x", data); +} + +/* + * ---- ---x VBUSY (1) busy flag + */ +u8 pc88va_sgp_device::status_r() +{ + return 0; +} + +/* + * ---- ---x SGPCA start SGP execution (1) + */ +void pc88va_sgp_device::trigger_w(u8 data) +{ + // TODO: under a timer + if (BIT(data, 0)) + start_exec(); + + if (data != 1) + LOG("Warning: SGP trigger write %02x\n", data); +} + +void pc88va_sgp_device::start_exec() +{ + u32 vdp_pointer = (m_vdp_address[0]) | (m_vdp_address[1] << 16); + // TODO: the SGP should go indefinitely until an END is issued + // for now punt early until we find something that warrants a parallel execution + // boomer is the current upper limit, uses SGP to transfer rows on vertical scrolling. + const u32 end_pointer = vdp_pointer + 0x800; + LOGCOMMAND("SGP: trigger start %08x\n", vdp_pointer); + + bool end_issued = false; + + while( vdp_pointer < end_pointer ) + { + const u16 cur_opcode = m_data->read_word(vdp_pointer); + u16 next_pc = 2; + + switch(cur_opcode) + { + // END + case 0x0001: + LOGCOMMAND("SGP: (PC=%08x) END\n", vdp_pointer); + end_issued = true; + break; + // NOP + case 0x0002: + LOGCOMMAND("SGP: (PC=%08x) NOP\n", vdp_pointer); + break; + // SET WORK + case 0x0003: + { + // This sets a work RAM address so that SGP can store internal data + // This buffer needs 58 bytes, and nothing else is known other than + // SGP needing this command issued as first before it can work with + // any meaningful command. + // Speculation is that assuming the host can r/w this area without + // huge penalties it can also observe or even override the + // SGP internals ... + const u16 lower_offset = m_data->read_word(vdp_pointer + 2); + const u16 upper_offset = m_data->read_word(vdp_pointer + 4); + + m_work_address = lower_offset | upper_offset << 16; + LOGCOMMAND("SGP: (PC=%08x) SET WORK %08x\n", + vdp_pointer, + m_work_address + ); + + next_pc += 4; + break; + } + // SET SOURCE + case 0x0004: + // SET DESTINATION + case 0x0005: + { + const bool mode = cur_opcode == 5; + BufferArea *ptr = mode ? &m_dst : &m_src; + + /* + * ---- ---- xxxx ---- start dot position + * ---- ---- ---- --xx SCRN_M: pixel mode + * ---- ---- ---- --00 1bpp + * ---- ---- ---- --01 4bpp + * ---- ---- ---- --10 8bpp + * ---- ---- ---- --11 RGB565 + */ + const u16 param1 = m_data->read_word(vdp_pointer + 2); + + ptr->start_dot = (param1 & 0xf0) >> 4; + ptr->pixel_mode = (param1 & 0x03); + ptr->hsize = m_data->read_word(vdp_pointer + 4) & 0x0fff; + ptr->vsize = m_data->read_word(vdp_pointer + 6) & 0x0fff; + ptr->fb_pitch = m_data->read_word(vdp_pointer + 8) & 0xfffc; + ptr->address = (m_data->read_word(vdp_pointer + 10) & 0xfffe) + | (m_data->read_word(vdp_pointer + 12) << 16); + + LOGCOMMAND("SGP: (PC=%08x) SET %s %02x|H %4u|V %4u|Pitch %5u| address %08x\n" + , vdp_pointer + , mode ? "DESTINATION" : "SOURCE " + , param1 + , ptr->hsize + , ptr->vsize + , ptr->fb_pitch + , ptr->address + ); + + next_pc += 12; + break; + } + case 0x0006: + { + const u16 color_code = m_data->read_word(vdp_pointer + 2); + LOGCOMMAND("SGP: (PC=%08x) SET COLOR %04x\n" + , vdp_pointer + , color_code + ); + next_pc += 2; + break; + } + // BitBLT + case 0x0007: + // PATBLT + case 0x0008: + { + const bool cmd_mode = cur_opcode == 0x0008; + const u16 draw_mode = m_data->read_word(vdp_pointer + 2); + + LOGCOMMAND("SGP: (PC=%08x) %s %04x\n" + , vdp_pointer + , cmd_mode ? "PATBLT" : "BITBLT" + , draw_mode + ); + cmd_blit(draw_mode, cmd_mode); + + next_pc += 2; + break; + } + // LINE + case 0x0009: + { + // mostly same as above + const u16 draw_mode = m_data->read_word(vdp_pointer + 2); + // documentation omits there's an extra parameter here + // cfr. animefrm, hardcoded to 2 there + const u16 unk_param = m_data->read_word(vdp_pointer + 4); + // in pixels + const u16 h_size = m_data->read_word(vdp_pointer + 6); + const u16 v_size = m_data->read_word(vdp_pointer + 8); + const u16 fb_pitch = m_data->read_word(vdp_pointer + 10) & 0xfffc; + const u32 src_address = (m_data->read_word(vdp_pointer + 12) & 0xfffe) + | (m_data->read_word(vdp_pointer + 14) << 16); + + // Note: start dot position and pixel mode set by SET SOURCE + LOGCOMMAND("SGP: (PC=%08x) LINE %04x %04x %04x %04x %04x %08x\n" + , vdp_pointer + , draw_mode + , unk_param + , h_size + , v_size + , fb_pitch + , src_address + ); + next_pc += 14; + break; + } + // CLS + case 0x000a: + { + const u32 src_address = (m_data->read_word(vdp_pointer + 2) & 0xfffe) + | (m_data->read_word(vdp_pointer + 4) << 16); + const u32 word_size = (m_data->read_word(vdp_pointer + 6)) + | (m_data->read_word(vdp_pointer + 8) << 16); + + LOGCOMMAND("SGP: (PC=%08x) CLS %08x %08x\n" + , vdp_pointer + , src_address + , word_size + ); + next_pc += 8; + break; + } + // SCAN RIGHT + case 0x000b: + // SCAN LEFT + case 0x000c: + { + // This uses the destination block data to find a specific pixel + // thru the SET COLOR command. + // It updates the horizontal size of destination if the color is found, + // returns 0 if the pixel is at origin, doesn't update if not found. + const u8 mode = cur_opcode == 0x000c; + LOGCOMMAND("SGP: (PC=%08x) %s\n" + , vdp_pointer + , mode ? "SCAN LEFT" : "SCAN RIGHT" + ); + break; + } + default: + LOGCOMMAND("SGP: (PC=%08x) %04x???\n", vdp_pointer, cur_opcode); + } + + if (end_issued == true) + break; + + vdp_pointer += next_pc; + } + + if (vdp_pointer >= end_pointer) + LOG("Warning: execution punt without an END issued\n"); +} + +/**************************************** + * Commands + ***************************************/ + + +/* + * ---x ---- ---- ---- SF (0) shift source according to destination position + * ---- x--- ---- ---- VD vertical transfer direction (1) negative (0) positive + * ---- -x-- ---- ---- HD horizontal transfer direction (1) negative (0) positive + * ---- --xx ---- ---- TP/MOD + * ---- --00 ---- ---- transfer source as-is + * ---- --01 ---- ---- do not transfer if source is 0 (transparent pen) + * ---- --10 ---- ---- transfer only if destination is 0 + * ---- --11 ---- ---- + * ---- ---- ---- xxxx LOGICAL OP + * ---- ---- ---- 0000 0 + * ---- ---- ---- 0001 Src AND Dst + * ---- ---- ---- 0010 /Src AND Dst + * ---- ---- ---- 0011 NOP + * ---- ---- ---- 0100 Src AND /Dst + * ---- ---- ---- 0101 Src + * ---- ---- ---- 0110 Src XOR Dst + * ---- ---- ---- 0111 Src OR Dst + * ---- ---- ---- 1000 /(Src OR Dst) + * ---- ---- ---- 1001 /(Src XOR Dst) + * ---- ---- ---- 1010 /Src + * ---- ---- ---- 1011 /Src OR Dst + * ---- ---- ---- 1100 /Dst + * ---- ---- ---- 1101 Src OR /Dst + * ---- ---- ---- 1110 /(Src AND Dst) + * ---- ---- ---- 1111 1 + * + * PATBLT is identical to BITBLT except it repeats source copy + * if it exceeds the clipping range. + */ +void pc88va_sgp_device::cmd_blit(u16 draw_mode, bool is_patblt) +{ + const u8 logical_op = draw_mode & 0xf; + const u8 tp_mod = (draw_mode >> 8) & 0x3; + + // TODO: boomer title screen + if (is_patblt == true) + { + LOG("PATBLT\n"); + // return; + } + + // ballbrkr: 6 + if (logical_op != 5) + { + LOG("BITBLT logical_op == %d\n", logical_op); + return; + } + + if (tp_mod > 1) + { + LOG("BITBLT tp_mod == %d\n", tp_mod); + return; + } + + if (m_src.hsize != m_dst.hsize || m_src.vsize != m_dst.vsize) + { + LOG("BITBLT non-even sizes (%d x %d) x (%d x %d)\n", m_src.hsize, m_src.vsize, m_dst.hsize, m_dst.vsize); + return; + } + + if (m_src.pixel_mode == 0 || m_src.pixel_mode == 3 || m_src.pixel_mode != m_dst.pixel_mode) + { + LOG("BITBLT pixel mode %d x %d\n", m_src.pixel_mode, m_dst.pixel_mode); + return; + } + + for (int yi = 0; yi < m_src.vsize; yi ++) + { + u32 src_address = m_src.address + (yi * m_src.fb_pitch); + u32 dst_address = m_dst.address + (yi * m_dst.fb_pitch); + + for (int xi = 0; xi < (m_src.hsize >> 2); xi ++) + { + // TODO: not very efficient, we need a cleaner per-pixel RMW phase + const u16 src_dot = m_data->read_word(src_address); + const u16 dst_dot = m_data->read_word(dst_address); + u16 result = 0; + + for (int pixi = 0; pixi < 4; pixi ++) + { + u8 cur_pixel = (src_dot & 0xf); + if (cur_pixel || tp_mod == 0) + result |= (src_dot & 0xf) << (pixi * 4); + else + result |= (dst_dot & 0xf) << (pixi * 4); + } + + m_data->write_word(dst_address, result); + src_address += 2; + dst_address += 2; + } + } +} diff -Nru mame-0.250+dfsg.1/src/mame/nec/pc88va_sgp.h mame-0.251+dfsg.1/src/mame/nec/pc88va_sgp.h --- mame-0.250+dfsg.1/src/mame/nec/pc88va_sgp.h 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nec/pc88va_sgp.h 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,59 @@ +// license:BSD-3-Clause +// copyright-holders:Angelo Salese + +#ifndef MAME_NEC_PC88VA_SGP_H +#define MAME_NEC_PC88VA_SGP_H + +#pragma once + +class pc88va_sgp_device : + public device_t, + public device_memory_interface +{ +public: + pc88va_sgp_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0); + + template pc88va_sgp_device& set_map(T &&... args) { set_addrmap(AS_DATA, std::forward(args)...); return *this; } + + void sgp_io(address_map &map); + +protected: + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_config_complete() override; + + virtual space_config_vector memory_space_config() const override; + +private: + address_space_config m_data_config; + address_space *m_data; + + u16 m_vdp_address[2]{}; + u32 m_work_address = 0; + + struct BufferArea { + u8 start_dot = 0; + u8 pixel_mode = 0; + u16 hsize = 0; + u16 vsize = 0; + u16 fb_pitch = 0; + u32 address = 0; + }; + + BufferArea m_src, m_dst; + + void vdp_address_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u8 status_r(); + void control_w(u8 data); + void trigger_w(u8 data); + + void start_exec(); + + // commands + void cmd_blit(u16 draw_mode, bool is_patblt); +}; + + +DECLARE_DEVICE_TYPE(PC88VA_SGP, pc88va_sgp_device) + +#endif // MAME_NEC_PC88VA_SGP_H diff -Nru mame-0.250+dfsg.1/src/mame/nec/pc88va_v.cpp mame-0.251+dfsg.1/src/mame/nec/pc88va_v.cpp --- mame-0.250+dfsg.1/src/mame/nec/pc88va_v.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nec/pc88va_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,1654 @@ +// license:BSD-3-Clause +// copyright-holders:Angelo Salese + +#include "emu.h" +#include "pc88va.h" + +#include + + +#define LOG_IDP (1U << 2) // TSP data +#define LOG_FB (1U << 3) // framebuffer strips (verbose) +#define LOG_KANJI (1U << 4) // empty Kanji data warnings +#define LOG_CRTC (1U << 5) +#define LOG_COLOR (1U << 6) // current color mode +#define LOG_TEXT (1U << 7) // text strips (verbose) + +#define VERBOSE (LOG_GENERAL | LOG_IDP) +//#define LOG_OUTPUT_STREAM std::cout + +#include "logmacro.h" + +#define LOGIDP(...) LOGMASKED(LOG_IDP, __VA_ARGS__) +#define LOGFB(...) LOGMASKED(LOG_FB, __VA_ARGS__) +#define LOGKANJI(...) LOGMASKED(LOG_KANJI, __VA_ARGS__) +#define LOGCRTC(...) LOGMASKED(LOG_CRTC, __VA_ARGS__) +#define LOGCOLOR(...) LOGMASKED(LOG_COLOR, __VA_ARGS__) +#define LOGTEXT(...) LOGMASKED(LOG_TEXT, __VA_ARGS__) + +void pc88va_state::video_start() +{ + const u32 kanjiram_size = 0x4000; + m_kanjiram = std::make_unique(kanjiram_size); + m_gfxdecode->gfx(2)->set_source(m_kanjiram.get()); + m_gfxdecode->gfx(3)->set_source(m_kanjiram.get()); + m_vrtc_irq_line = 432; + + for (int i = 0; i < 2; i++) + m_screen->register_screen_bitmap(m_graphic_bitmap[i]); + + save_item(NAME(m_screen_ctrl_reg)); + save_item(NAME(m_gfx_ctrl_reg)); + save_item(NAME(m_color_mode)); + save_item(NAME(m_pltm)); + save_item(NAME(m_pltp)); + + save_item(NAME(m_text_transpen)); + save_pointer(NAME(m_video_pri_reg), 2); + save_pointer(NAME(m_kanjiram), kanjiram_size); + + save_item(NAME(m_vrtc_irq_line)); +} + +void pc88va_state::palette_init(palette_device &palette) const +{ + // default palette + const u16 default_palette[16] = { + 0x0000, 0x001f, 0x03e0, 0x03ff, 0xfc00, 0xfc1f, 0xffe0, 0xffff, + 0x7def, 0x0015, 0x02a0, 0x02b5, 0xac00, 0xac15, 0xaea0, 0xaeb5 + }; + int i, pal_base; + for (i = 0; i < 16; i++) + { + const u16 color = default_palette[i]; + u8 b = pal5bit((color & 0x001f)); + u8 r = pal5bit((color & 0x03e0) >> 5); + u8 g = pal6bit((color & 0xfc00) >> 10); + for (pal_base = 0; pal_base < 2; pal_base ++) + palette.set_pen_color(i + pal_base * 16, r, g, b); + } +} + + +uint32_t pc88va_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + uint8_t pri, cur_pri_lv; + uint32_t screen_pri; + bitmap.fill(0, cliprect); + + // don't bother if we are under DSPOFF command + if(m_tsp.disp_on == false) + return 0; + + // rollback to V1/V2 mode + if (!BIT(m_pltm, 2)) + { + // BIOS doesn't explicitly set a color mode for the V1/V2 Mode printout at POST + // pc8801_state::screen_update(bitmap, cliprect); + //return 0; + } + + /* + m_video_pri_reg[0] + xxxx ---- ---- ---- priority 3 + ---- xxxx ---- ---- priority 2 + ---- ---- xxxx ---- priority 1 + ---- ---- ---- xxxx priority 0 + m_video_pri_reg[1] + ---- ---- xxxx ---- priority 5 + ---- ---- ---- xxxx priority 4 + + Note that orthogonality level is actually REVERSED than the level number it indicates, so we have to play a little with the data for an easier usage ... + */ + + // TODO: this should be calculated only in video_pri_w for cache + screen_pri = (m_video_pri_reg[1] & 0x00f0) >> 4; // priority 5 + screen_pri|= (m_video_pri_reg[1] & 0x000f) << 4; // priority 4 + screen_pri|= (m_video_pri_reg[0] & 0xf000) >> 4; // priority 3 + screen_pri|= (m_video_pri_reg[0] & 0x0f00) << 4; // priority 2 + screen_pri|= (m_video_pri_reg[0] & 0x00f0) << 12; // priority 1 + screen_pri|= (m_video_pri_reg[0] & 0x000f) << 20; // priority 0 + + //popmessage("%08x", screen_pri); + + for(pri = 0; pri < 6; pri++) + { + cur_pri_lv = (screen_pri >> (pri * 4)) & 0xf; + + if(cur_pri_lv & 8) // enable layer + { + // TODO: ballbrkr and tetris definitely wants this to have an higher priority + if(pri <= 1) // (direct color mode, priority 5 and 4) + { + switch(cur_pri_lv & 3) + { + // 8 = graphic 0 + case 0: + draw_graphic_layer(bitmap, cliprect, 0); + break; + // 9 = graphic 1 + case 1: + draw_graphic_layer(bitmap, cliprect, 1); + break; + default: + popmessage("Undocumented pri level %d", cur_pri_lv); + } + } + else + { + switch(cur_pri_lv & 3) // (palette color mode) + { + case 0: draw_text(bitmap, cliprect); break; + case 1: draw_sprites(bitmap,cliprect); break; + /* A = graphic 0 */ + case 2: + draw_graphic_layer(bitmap, cliprect, 0); + break; + /* B = graphic 1 */ + case 3: + draw_graphic_layer(bitmap, cliprect, 1); + break; + } + } + } + } + + return 0; +} + +/**************************************** + * Drawing fns + ***************************************/ + +inline u8 pc88va_state::get_layer_pal_bank(u8 which) +{ + if (!(BIT(m_pltm, 1))) + return (m_pltm & 1) << 4; + + if (m_pltm == 3) + return 0; + + // TODO: text and sprites may be joined when either one is selected in PLTP + // olteus sets sprite = 1, wants text to follow with the other bank too + // ballbrkr goes the other way around: writes 0, wants sprites to be 1 + return (m_pltp == which) << 4; +} + +void pc88va_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + // punt if we are under SPROFF + if(m_tsp.spr_on == false) + return; + + uint16_t const *const tvram = m_tvram; + + int offs = m_tsp.spr_offset; + const u8 layer_pal_bank = get_layer_pal_bank(1); + + // top to bottom for priority (shanghai menuing) + for(int i = 0x100 - 8; i >= 0; i -= 8) + { + int spr_count; + + int ysize = (tvram[(offs + i + 0) / 2] & 0xfc00) >> 10; + int sw = (tvram[(offs + i + 0) / 2] & 0x200) >> 9; + int yp = (tvram[(offs + i + 0) / 2] & 0x1ff); + int xsize = (tvram[(offs + i + 2) / 2] & 0xf800) >> 11; + int md = (tvram[(offs + i + 2) / 2] & 0x400) >> 10; + int xp = (tvram[(offs + i + 2) / 2] & 0x3ff); + int spda = (tvram[(offs + i + 4) / 2] & 0xffff); + + const bool is_cursor_sprite = + i == m_tsp.curn + && m_tsp.curn_blink == true + && (m_screen->frame_number() % (m_tsp.blink * 2)) >= m_tsp.blink; + + // assume cursor sprite just going transparent with blink effect + if(!sw || is_cursor_sprite) + continue; + + // shanghai hand (4bpp) and rtype beam sparks (1bpp) wants this arrangement + // Apparently TSP runs on its own translation unit for addresses + if (spda & 0x8000) + spda -= 0x4000; + + spda <<= 1; + + // TODO: verify this disabled code path + // makes more sense without the sign? + if(0) + { + // olteus wants this off + if(yp & 0x100) + { + yp &= 0xff; + yp = 0x100 - yp; + } + + // TODO: shinraba needs wrap-around during gameplay (touching left edge of screen). + if(xp & 0x200) + { + xp &= 0x1ff; + xp = 0x200 - xp; + } + } + + if(md) // 1bpp mode + { + int fg_col = (tvram[(offs + i + 6) / 2] & 0xf0) >> 4; + int bc = (tvram[(offs + i + 6) / 2] & 0x08) >> 3; + + // sprites don't draw if color is zero + // (shanghai exit from menuing) + if (!fg_col && !bc) + continue; + + xsize = (xsize + 1) * 32; + ysize = (ysize + 1) * 4; + + spr_count = 0; + + for(int y_i = 0; y_i < ysize; y_i++) + { + for(int x_i = 0; x_i < xsize; x_i+=16) + { + for(int x_s = 0; x_s < 16; x_s++) + { + int res_x = xp + x_i + x_s; + // TODO: MG actually doubles Y size + int res_y = (yp + y_i) << m_tsp.spr_mg; + + if (!cliprect.contains(res_x, res_y)) + continue; + + const u32 data_offset = ((spda + spr_count) & 0xffff) / 2; + u8 pen = (bitswap<16>(tvram[data_offset],7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8) >> (15 - x_s)) & 1; + + pen = pen & 1 ? fg_col : (bc) ? 8 : 0; + + if(pen != 0) + bitmap.pix(res_y, res_x) = m_palette->pen(pen + layer_pal_bank); + } + + spr_count += 2; + } + } + } + else + { + // 4bpp mode + xsize = (xsize + 1) * 8; + ysize = (ysize + 1) * 4; + + spr_count = 0; + + for(int y_i = 0; y_i < ysize; y_i++) + { + for(int x_i = 0; x_i < xsize; x_i += 4) + { + for(int x_s = 0; x_s < 4; x_s ++) + { + int res_x = xp + x_i + x_s; + int res_y = (yp + y_i) << m_tsp.spr_mg; + + if (!cliprect.contains(res_x, res_y)) + continue; + + const u32 data_offset = ((spda + spr_count) & 0xffff) / 2; + + int pen = (bitswap<16>(tvram[data_offset],7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8)) >> (12 - (x_s * 4)) & 0xf; + + //if (pen != 0 && pen != m_text_transpen) + if (pen != 0) + bitmap.pix(res_y, res_x) = m_palette->pen(pen + layer_pal_bank); + } + + spr_count += 2; + } + } + } + } +} + +// TODO: handcrafted kanji ROM causes this, should be simplified by a more accurate dump +// (or a better rearrange from driver_init, but that implies getting everything in place). +uint32_t pc88va_state::calc_kanji_rom_addr(uint8_t jis1, uint8_t jis2, int x, int y) +{ + // famista uses jis1 = 0x2c for the text box lines + // xak2 also wants jis1 bit 3 arranged this way for 8x16 English menuing plus other stuff + if(jis1 < 0x30) + return ((jis2 & 0x60) << 8) + ((jis1 & 0x07) << 10) + ((jis2 & 0x1f) << 5) + ((jis1 & 0x8) << 15); + + if((jis1 & 0xf0) == 0x30) + return ((jis2 & 0x60) << 10) + ((jis1 & 0x0f) << 10) + ((jis2 & 0x1f) << 5); + + if((jis1 & 0xf0) == 0x40) + return 0x4000 + ((jis2 & 0x60) << 10) + ((jis1 & 0x0f) << 10) + ((jis2 & 0x1f) << 5); + + LOGKANJI("%d %d %02x %02x\n",x, y, jis1, jis2); + + return 0; +} + +/* + * Text is handled in strips at the location stored in TSP + * [+00] Frame buffer start address (VSA) + * [+02] ---- ---- ---- -xxx Upper VSA + * [+04] ---- -xxx xxxx xxxx Frame buffer height (VH) + * [+06] + * [+08] ---- --xx xxxx xxxx Frame buffer width (VW), in bytes + * [+0a] xxxx ---- ---- ---- background color + * ---- xxxx ---- ---- foreground color + * ---- ---- ---x xxxx display mode + * [+0c] ---x xxxx ---- ---- Raster address offset + * [+0e] + * [+10] Split screen start address (RSA) + * [+12] / Upper RSA + * [+14] Split screen height (RH) + * [+16] Split screen width (RW) + * [+18] Split screen vertical start position (RYP) + * [+1a] Split screen horizontal start position (RXP) + * [+1c] + * [+1e] + */ +void pc88va_state::draw_text(bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + // punt if text disable is on + if(m_td == true) + return; + + uint16_t const *const tvram = m_tvram; + uint8_t const *const kanji = memregion("kanji")->base(); + + LOGTEXT("=== Start TEXT frame\n"); + + // four layers + for (int layer_n = 0; layer_n < 4; layer_n ++) + { + uint16_t const *const tsp_regs = &tvram[(layer_n * 0x20 + m_tsp.tvram_vreg_offset) / 2]; + + const u32 vsa = tsp_regs[0 / 2]; // | (tsp_regs[2 / 2] & 7) << 16; + const u32 rsa = tsp_regs[0x10 / 2]; // | (tsp_regs[0x12 / 2] & 7) << 16; + + // as-is it doesn't make much sense to enable either of these two, + // since TVRAM is really 16-bit address lines here. + // Since we are in IDP domain it may be used on another system ... + if (tsp_regs[2 / 2] || tsp_regs[0x12 / 2]) + popmessage("Upper VSA enabled!"); + + const u8 layer_pal_bank = get_layer_pal_bank(0); + + const u8 attr_mode = tsp_regs[0xa / 2] & 0x1f; + // TODO: check this out, diverges with documentation + const u8 screen_fg_col = (tsp_regs[0xa / 2] & 0xf000) >> 12; + const u8 screen_bg_col = (tsp_regs[0xa / 2] & 0x0f00) >> 8; + + // TODO: how even vh/vw can run have all these bytes? + const u8 vh = (tsp_regs[4 / 2] & 0x7ff); + const u16 vw = (tsp_regs[8 / 2] & 0x3ff) / 2; + + + if (vh == 0 || vw == 0) + { + LOGTEXT("\t%d skip VW = %d VH = %d\n" + , layer_n + , vw + , vh + ); + continue; + } + + LOGTEXT("\t%d %08x VSA - %08x RSA| %02x DISPLAY MODE|%d VW x %d VH\n" + , layer_n + , vsa + , rsa + , attr_mode + , vw + , vh + ); + + const u16 rh = tsp_regs[0x14 /2]; + const u16 rw = tsp_regs[0x16 /2]; + const u16 ryp = tsp_regs[0x18 / 2]; + const u16 rxp = tsp_regs[0x1a / 2]; + + const int raster_offset = (tsp_regs[0x0c / 2] >> 8) & 0x1f; + + LOGTEXT("\t%d RXP x %d RYP|%d RW x %d RH %d\n", rxp, ryp, rw, rh, raster_offset); + + rectangle split_cliprect(rxp, rxp + rw - 1, ryp, ryp + rh - 1); + split_cliprect &= cliprect; + + for(int y = 0; y < vh; y++) + { + int y_base = y * 16 + ryp - raster_offset; + + // TODO: consult with OG + if (!split_cliprect.contains(rxp, y_base) && + !split_cliprect.contains(rxp, y_base + 16)) + continue; + + for(int x = 0; x < vw; x++) + { + int x_base = x * 8; + if (!split_cliprect.contains(x_base, y_base) && + !split_cliprect.contains(x_base, y_base + 16)) + continue; + + // TODO: understand where VSA comes into equation + const u32 cur_offset = ((rsa >> 1) + x + (y * vw)); + + uint16_t attr = (tvram[cur_offset + (m_tsp.attr_offset / 2)] & 0x00ff); + + uint8_t fg_col, bg_col, secret, reverse; + //uint8_t blink,dwidc,dwid,uline,hline; + fg_col = bg_col = reverse = secret = 0; //blink = dwidc = dwid = uline = hline = 0; + + // TODO: convert to functional programming + switch(attr_mode) + { + /* + xxxx ---- foreground color + ---- xxxx background color + */ + case 0: + fg_col = (attr & 0x0f) >> 0; + bg_col = (attr & 0xf0) >> 4; + break; + /* + xxxx ---- foreground color + ---- x--- horizontal line + ---- -x-- reverse + ---- --x- blink + ---- ---x secret (hide text) + background color is defined by screen control table values + */ + case 1: + fg_col = (attr & 0xf0) >> 4; + bg_col = screen_bg_col; + //hline = (attr & 0x08) >> 3; + reverse = (attr & 0x04) >> 2; + //blink = (attr & 0x02) >> 1; + secret = (attr & 0x01) >> 0; + break; + /* + x--- ---- dwidc + -x-- ---- dwid + --x- ---- uline + ---x ---- hline + ---- -x-- reverse + ---- --x- blink + ---- ---x secret (hide text) + background and foreground colors are defined by screen control table values + */ + case 2: + fg_col = screen_fg_col; + bg_col = screen_bg_col; + //dwidc = (attr & 0x80) >> 7; + //dwid = (attr & 0x40) >> 6; + //uline = (attr & 0x20) >> 5; + //hline = (attr & 0x10) >> 4; + reverse = (attr & 0x04) >> 2; + //blink = (attr & 0x02) >> 1; + secret = (attr & 0x01) >> 0; + break; + /* + ---- x--- mixes between mode 0 and 2 + + xxxx 1--- foreground color + ---- 1xxx background color + 2) + x--- 0--- dwidc + -x-- 0--- dwid + --x- 0--- uline + ---x 0--- hline + ---- 0x-- reverse + ---- 0-x- blink + ---- 0--x secret (hide text) + background and foreground colors are defined by screen control table values + */ + case 3: + { + // TODO: similar to 3301 drawing (where it should save previous attribute setup) + if(attr & 0x8) + { + fg_col = (attr & 0xf0) >> 4; + bg_col = (attr & 0x07) >> 0; + } + else + { + fg_col = screen_fg_col; + bg_col = screen_bg_col; + //dwidc = (attr & 0x80) >> 7; + //dwid = (attr & 0x40) >> 6; + //uline = (attr & 0x20) >> 5; + //hline = (attr & 0x10) >> 4; + reverse = (attr & 0x04) >> 2; + //blink = (attr & 0x02) >> 1; + secret = (attr & 0x01) >> 0; + } + } + break; + /* + x--- ---- blink + -xxx ---- background color + ---- xxxx foreground color + */ + case 4: + fg_col = (attr & 0x0f) >> 0; + bg_col = (attr & 0x70) >> 4; + //blink = (attr & 0x80) >> 7; + break; + /* + x--- ---- blink + -xxx ---- background color + ---- xxxx foreground color + hline is enabled if foreground color is 1 or 9 + */ + case 5: + fg_col = (attr & 0x0f) >> 0; + bg_col = (attr & 0x70) >> 4; + //blink = (attr & 0x80) >> 7; + //if((fg_col & 7) == 1) + //hline = 1; + break; + default: + popmessage("Illegal text tilemap attribute mode %02x",attr_mode); + return; + } + + // TODO: more functional programming + if ((tvram[cur_offset] & 0xff00) == 0) // ANK + { + u32 tile_num = ((tvram[cur_offset] & 0xff) * 16) | 0x40000; + + for(int yi = 0; yi < 16; yi++) + { + for(int xi = 0; xi < 8; xi++) + { + int res_x = x_base + xi; + int res_y = y_base + yi; + + if(!split_cliprect.contains(res_x, res_y)) + continue; + + int pen = kanji[yi + tile_num] >> (7-xi) & 1; + + if(reverse) + pen = pen & 1 ? bg_col : fg_col; + else + pen = pen & 1 ? fg_col : bg_col; + + if(secret) { pen = 0; } //hide text + + if(pen != 0 && pen != m_text_transpen) + bitmap.pix(res_y, res_x) = m_palette->pen(pen + layer_pal_bank); + } + } + } + else if ((tvram[cur_offset] & 0x00ff) == 0x56) + { + // famista draws cursor/team letters/referee calls with PCG + // boomer draws HP bar on gameplay + // both shifts bits 5-6 by 1 for upper tiles to be properly accessed, + // cfr. gfxdecoding where there's an hole every 0x20 chars + // (no way to access these?) + const u8 base_tile = (tvram[cur_offset] & 0xff00) >> 8; + u32 tile_num = ((base_tile & 0x1f) + ((base_tile & 0x60) << 1)) * 0x20; + u8 lr_half_gfx = BIT(base_tile, 7); + + for(int yi = 0; yi < 16; yi++) + { + for(int xi = 0; xi < 8; xi++) + { + int res_x = x_base + xi; + int res_y = y_base + yi; + + if(!split_cliprect.contains(res_x, res_y)) + continue; + + int pen = m_kanjiram[(( yi * 2 ) + lr_half_gfx) + tile_num] >> (7 - xi) & 1; + + if(reverse) + pen = pen & 1 ? bg_col : fg_col; + else + pen = pen & 1 ? fg_col : bg_col; + + if(secret) { pen = 0; } //hide text + + if(pen != 0 && pen != m_text_transpen) + bitmap.pix(res_y, res_x) = m_palette->pen(pen + layer_pal_bank); + } + } + } + else // kanji + { + uint8_t jis1 = (tvram[cur_offset] & 0x7f) + 0x20; + uint8_t jis2 = (tvram[cur_offset] & 0x7f00) >> 8; + uint16_t lr_half_gfx = ((tvram[cur_offset] & 0x8000) >> 15); + + uint32_t tile_num = calc_kanji_rom_addr(jis1, jis2, x, y); + + for(int yi = 0; yi < 16; yi++) + { + for(int xi = 0; xi < 8; xi++) + { + int res_x = x_base + xi; + int res_y = y_base + yi; + + if(!split_cliprect.contains(res_x, res_y)) + continue; + + int pen = kanji[((yi*2)+lr_half_gfx)+tile_num] >> (7-xi) & 1; + + if(reverse) + pen = pen & 1 ? bg_col : fg_col; + else + pen = pen & 1 ? fg_col : bg_col; + + if(secret) { pen = 0; } //hide text + + if(pen != 0) + bitmap.pix(res_y, res_x) = m_palette->pen(pen + layer_pal_bank); + } + } + } + } + } + } +} + +/* + * as above, graphics are stored in 4 strips in I/O $200-$27f + * [+00] xxxx xxxx xxxx xx-- frame buffer start address (FSA), 4 byte boundary + * [+02] ---- ---- ---- --xx FSA upper bit address + * \- fixed at 0x20000 for frame buffer 1 + * [+04] ---- -xxx xxxx xx-- frame buffer width (FBW), 4 byte boundary + * [+06] ---- --xx xxxx xxxx frame buffer height (FBL) - 1 + * \- cannot be set for frame buffer 1 (?) + * [+08] ---- ---- ---x xxxx X dot offset (fractional shift) + * \- changes depending on single/multiplane mode + * [+0a] ---- -xxx xxxx xx-- X scroll offset (OFX), 4 byte boundary + * [+0c] ---- --xx xxxx xxxx Y scroll offset (OFY) + * [+0e] xxxx xxxx xxxx xx-- Display start address (DSA) + * [+10] ---- ---- ---- --xx DSA upper bit address + * [+12] ---- ---x xxxx xxxx Sub screen height (DSH) + * [+14] + * [+16] ---- ---x xxxx xxxx Sub screen display position (DSP) + */ + +void pc88va_state::draw_graphic_layer(bitmap_rgb32 &bitmap, const rectangle &cliprect, u8 which) +{ + // disable graphic B if screen 0 only setting is enabled + if (which > m_ymmd) + return; + + // ditto for 5bpp color mode + const bool is_5bpp = m_pltm == 7; + if (is_5bpp && which == 1) + return; + + uint16_t const *const fb_regs = m_fb_regs; + + const u8 gfx_ctrl = (m_gfx_ctrl_reg >> (which * 8)) & 0x13; + + // TODO: xak2 wants independent doubled Y axis on setup menu & Micro Cabin logo + // i.e. 200 lines draw on a 400 lines canvas + const u32 pixel_size = 0x10000 >> BIT(gfx_ctrl, 4); + + const u8 layer_pal_bank = get_layer_pal_bank(2 + which); + + LOGFB("=== %02x GFX MODE graphic %s color bank %02x\n" + , gfx_ctrl + , which ? "B" : "A" + , layer_pal_bank + ); + + m_graphic_bitmap[which].fill(0, cliprect); + + const int layer_inc = (!is_5bpp) + 1; + const int layer_fixed = is_5bpp + 1; + + for (int layer_n = which; layer_n < 4; layer_n += layer_inc) + { + uint16_t const *const fb_strip_regs = &fb_regs[(layer_n * 0x20) / 2]; + const u16 fbw = fb_strip_regs[0x04 / 2] & 0x7fc; + + // assume that a fbw = 0 don't generate a layer at all + if (fbw == 0) + { + LOGFB("%d FBW = 0\n", layer_n); + continue; + } + + // on layer = 1 fsa is always 0x20000, cfr. shanghai + // (almost likely an HW quirk, described in the docs) + // also animefrm swaps this with layer 2 (main canvas) + const u32 fsa = (layer_n == layer_fixed) ? 0x20000 + : (fb_strip_regs[0x00 / 2] & 0xfffc) | ((fb_strip_regs[0x02 / 2] & 0x3) << 16) >> 1; + + const u16 fbl = (fb_strip_regs[0x06 / 2] & 0x3ff) + 1; + const u8 x_dot_offs = fb_strip_regs[0x08 / 2]; + const u16 ofx = fb_strip_regs[0x0a / 2] & 0x7fc; + const u16 ofy = fb_strip_regs[0x0c / 2] & 0x3ff; + const u32 dsa = ((fb_strip_regs[0x0e / 2] & 0xfffc) | ((fb_strip_regs[0x10 / 2] & 0x3) << 16)); + const u16 dsh = fb_strip_regs[0x12 / 2] & 0x1ff; + const u16 dsp = fb_strip_regs[0x16 / 2] & 0x1ff; + + LOGFB("%d %08x FSA|\n\t%d FBW | %d FBL |\n\t %d OFX (%d dot)| %d OFY|\n\t %08x DSA|\n\t %04x (%d) DSH | %04x (%d) DSP\n" + , layer_n + , fsa << 1 + , fbw + , fbl + , ofx + , x_dot_offs + , ofy + , dsa + , dsh + , dsh + , dsp + , dsp + ); + + rectangle split_cliprect(cliprect.min_x, cliprect.max_x, dsp, dsh + dsp - 1); + split_cliprect &= cliprect; + + // animefrm uses layer 1 with fbl = 1 for the color cycling bar on top + // rtype definitely don't want to be clipped on fbw, assume valid for pitch calc only. + rectangle fb_cliprect(cliprect.min_x, cliprect.max_x, dsp, dsp + fbl - 1); + split_cliprect &= fb_cliprect; + + if (!m_dm) + { + switch(gfx_ctrl & 3) + { + case 1: draw_packed_gfx_4bpp(m_graphic_bitmap[which], split_cliprect, fsa, dsa, layer_pal_bank, fbw, fbl); break; + } + } + else + { + switch(gfx_ctrl & 3) + { + //case 0: draw_indexed_gfx_1bpp(bitmap, cliprect, dsa, layer_pal_bank); break; + case 1: draw_indexed_gfx_4bpp(m_graphic_bitmap[which], split_cliprect, fsa, dsa, layer_pal_bank, fbw, fbl); break; + case 2: + if (m_pltm == 7) + { + draw_packed_gfx_5bpp(m_graphic_bitmap[which], split_cliprect, fsa, dsa, layer_pal_bank, fbw, fbl); + } + else + draw_direct_gfx_8bpp(m_graphic_bitmap[which], split_cliprect, fsa, fbw, fbl); + break; + case 3: draw_direct_gfx_rgb565(m_graphic_bitmap[which], split_cliprect, fsa, fbw, fbl); break; + } + } + } + + // TODO: we eventually need primask_copyrozbitmap_trans here, or a custom copy, depending on what the "transpen" registers really do. + copyrozbitmap_trans( + bitmap, cliprect, m_graphic_bitmap[which], + 0, 0, + pixel_size, 0, 0, pixel_size, + false, 0 + ); +} + +void pc88va_state::draw_indexed_gfx_1bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u8 pal_base) +{ + uint8_t *gvram = (uint8_t *)m_gvram.target(); + + for(int y = cliprect.min_y; y <= cliprect.max_y; y++) + { + const u32 line_offset = (((y * 640) / 8) + fb_start_offset) & 0x3ffff; + + for(int x = cliprect.min_x; x <= cliprect.max_x; x += 8) + { + u16 x_char = (x >> 3); + u32 bitmap_offset = line_offset + x_char; + + for (int xi = 0; xi < 8; xi ++) + { + uint32_t color = (gvram[bitmap_offset] >> (7 - xi)) & 1; + int res_x = x + xi; + + if(color && cliprect.contains(res_x, y)) + bitmap.pix(y, res_x) = m_palette->pen(color + pal_base); + } + } + } +} + +void pc88va_state::draw_indexed_gfx_4bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u32 display_start_offset, u8 pal_base, u16 fb_width, u16 fb_height) +{ + uint8_t *gvram = (uint8_t *)m_gvram.target(); + +// const u16 y_min = std::max(cliprect.min_y, y_start); +// const u16 y_max = std::min(cliprect.max_y, y_min + fb_height); + + //printf("%d %d %d %08x %d\n", y_min, y_max, fb_width, start_offset, fb_height); + + for(int y = cliprect.min_y; y <= cliprect.max_y; y++) + { + const u32 line_offset = ((y * fb_width) + fb_start_offset) & 0x3ffff; + + for(int x = cliprect.min_x; x <= cliprect.max_x; x += 2) + { + u16 x_char = (x >> 1); + u32 bitmap_offset = line_offset + x_char; + + for (int xi = 0; xi < 2; xi ++) + { + u8 color = (gvram[bitmap_offset] >> (xi ? 0 : 4)) & 0xf; + + if(color && cliprect.contains(x + xi, y)) + bitmap.pix(y, x + xi) = m_palette->pen(color + pal_base); + } + } + } +} + +void pc88va_state::draw_packed_gfx_5bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u32 display_start_offset, u8 pal_base, u16 fb_width, u16 fb_height) +{ + uint8_t *gvram = (uint8_t *)m_gvram.target(); + +// const u16 y_min = std::max(cliprect.min_y, y_start); +// const u16 y_max = std::min(cliprect.max_y, y_min + fb_height); + + //printf("%d %d %d %08x %d\n", y_min, y_max, fb_width, start_offset, fb_height); + + for(int y = cliprect.min_y; y <= cliprect.max_y; y++) + { + const u32 line_offset = ((y * fb_width) + fb_start_offset) & 0x3ffff; + + for(int x = cliprect.min_x; x <= cliprect.max_x; x++) + { + u32 bitmap_offset = line_offset + x; + + u8 color = gvram[bitmap_offset] & 0x1f; + + if(color && cliprect.contains(x, y)) + bitmap.pix(y, x) = m_palette->pen(color); + } + } +} + +void pc88va_state::draw_direct_gfx_8bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u16 fb_width, u16 fb_height) +{ + uint8_t *gvram = (uint8_t *)m_gvram.target(); + +// const u16 y_min = std::max(cliprect.min_y, y_start); +// const u16 y_max = std::min(cliprect.max_y, y_min + fb_height); + + for(int y = cliprect.min_y; y <= cliprect.max_y; y++) + { + const u32 line_offset = ((y * fb_width) + fb_start_offset) & 0x3ffff; + + for(int x = cliprect.min_x; x <= cliprect.max_x; x++) + { + u32 bitmap_offset = line_offset + x; + + uint32_t color = (gvram[bitmap_offset] & 0xff); + + // boomer suggests that transparency is calculated over just color = 0, may be settable? + // TODO: may not be clamped to palNbit + if(color && cliprect.contains(x, y)) + { + u8 b = pal2bit(color & 0x03); + u8 r = pal3bit((color & 0x1c) >> 2); + u8 g = pal3bit((color & 0xe0) >> 5); + bitmap.pix(y, x) = (b) | (g << 8) | (r << 16); + } + } + } +} + +void pc88va_state::draw_direct_gfx_rgb565(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u16 fb_width, u16 fb_height) +{ + uint8_t *gvram = (uint8_t *)m_gvram.target(); + +// const u16 y_min = std::max(cliprect.min_y, y_start); +// const u16 y_max = std::min(cliprect.max_y, y_min + fb_height); + + for(int y = cliprect.min_y; y <= cliprect.max_y; y++) + { + const u32 line_offset = ((y * fb_width) + fb_start_offset) & 0x3ffff; + + for(int x = cliprect.min_x; x <= cliprect.max_x; x++) + { + u32 bitmap_offset = (line_offset + x) << 1; + + uint16_t color = (gvram[bitmap_offset] & 0xff) | (gvram[bitmap_offset + 1] << 8); + + if(cliprect.contains(x, y)) + { + u8 b = pal5bit((color & 0x001f)); + u8 r = pal5bit((color & 0x03e0) >> 5); + u8 g = pal6bit((color & 0xfc00) >> 10); + bitmap.pix(y, x) = (b) | (g << 8) | (r << 16); + } + } + } +} + +void pc88va_state::draw_packed_gfx_4bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u32 display_start_offset, u8 pal_base, u16 fb_width, u16 fb_height) +{ + uint8_t *gvram = (uint8_t *)m_gvram.target(); + +// const u16 y_min = std::max(cliprect.min_y, y_start); +// const u16 y_max = std::min(cliprect.max_y, y_min + fb_height); + + for(int y = cliprect.min_y; y <= cliprect.max_y; y++) + { + const u32 line_offset = ((y * (fb_width >> 2)) + fb_start_offset) & 0x0ffff; + + for(int x = cliprect.min_x; x <= cliprect.max_x; x += 8) + { + u16 x_char = (x >> 3); + u32 bitmap_offset = line_offset + x_char; + + for (int xi = 0; xi < 8; xi ++) + { + u8 color = 0; + for (int bank_num = 0; bank_num < 4; bank_num ++) + color |= ((gvram[bitmap_offset + bank_num * 0x10000] >> (7 - xi)) & 1) << bank_num; + + if(color && cliprect.contains(x + xi, y)) + bitmap.pix(y, x + xi) = m_palette->pen(color + pal_base); + } + } + } +} + +/**************************************** + * IDP - NEC μPD72022 + * "Intelligent Display Processor" + ***************************************/ + +/* + * x--- ---- LP Light-Pen signal detection + * -x-- ---- VB Vertical Blank + * --x- ---- SC Sprite control (sprite over/collision) + * ---x ---- ER IDP Error + * \- set when required parameters aren't entered or are malformed, + * or mishandling of command/parameter ports. IDP won't accept any + * further commands and requires an EXIT to be issued to resume operations. + * ---- x--- In the midst of execution of EMEN emulation development + * \- undocumented, PC88VA specific? + * ---- -x-- BUSY set high when IDP is processing commands, + * clear when all commands in FIFO have been completed + * ---- --x- OBF output data buffer full + * \- output FIFO from IDP to host (for commands that implies reading to param port), + * reset on host reading, causes ready pin low when flag is (un?)set. + * ---- ---x IBF input data buffer full + * \- command/parameter FIFO, high when IDP cannot accept any more from host, + * causes ready pin low if any further param write is written (host stalls?). + */ +uint8_t pc88va_state::idp_status_r() +{ + u8 data = 0; + + data |= (m_screen->vblank()) ? 0x40 : 0x00; + + return data; +} + + +#define SYNC 0x10 +#define DSPON 0x12 +#define DSPOFF 0x13 +#define DSPDEF 0x14 +#define CURDEF 0x15 +#define ACTSCR 0x16 +#define CURS 0x1e +#define EMUL 0x8c +#define EXIT 0x88 +#define SPRON 0x82 +#define SPROFF 0x83 +#define SPRSW 0x85 +#define SPROV 0x81 +#define SPWR 0x84 + +void pc88va_state::idp_command_w(uint8_t data) +{ + switch(data) + { + /* 0x10 - SYNC: sets CRTC values */ + case SYNC: m_cmd = SYNC; m_buf_size = 14; m_buf_index = 0; break; + + /* 0x12 - DSPON: set DiSPlay ON and set up tvram table vreg */ + case DSPON: m_cmd = DSPON; m_buf_size = 3; m_buf_index = 0; break; + + /* 0x13 - DSPOFF: set DiSPlay OFF */ + case DSPOFF: m_cmd = DSPOFF; m_tsp.disp_on = false; break; + + /* 0x14 - DSPDEF: set DiSPlay DEFinitions */ + case DSPDEF: m_cmd = DSPDEF; m_buf_size = 6; m_buf_index = 0; break; + + /* 0x15 - CURDEF: set CURsor DEFinition */ + case CURDEF: m_cmd = CURDEF; m_buf_size = 1; m_buf_index = 0; break; + + /* 0x16 - ACTSCR: set ACTive SCReen for CURSor command */ + case ACTSCR: m_cmd = ACTSCR; m_buf_size = 1; m_buf_index = 0; break; + + /* 0x15 - CURS: set CURSor position */ + case CURS: m_cmd = CURS; m_buf_size = 4; m_buf_index = 0; break; + + /* 0x8c - EMUL: set 3301 EMULation (PC88VA specific, undocumented in 72022 specs) */ + case EMUL: m_cmd = EMUL; m_buf_size = 4; m_buf_index = 0; break; + + /* 0x88 - EXIT: aborts current command attribute selection, or clear an ERror state */ + case EXIT: m_cmd = EXIT; break; + + /* 0x82 - SPRON: set SPRite ON */ + case SPRON: m_cmd = SPRON; m_buf_size = 3; m_buf_index = 0; break; + + /* 0x83 - SPROFF: set SPRite OFF */ + case SPROFF: m_cmd = SPROFF; m_tsp.spr_on = false; break; + + /* 0x85 - SPRSW: flip SPRite SW bit */ + case SPRSW: m_cmd = SPRSW; m_buf_size = 1; m_buf_index = 0; break; + + /* 0x81 - SPROV: set SPRite OVerflow information */ + /* + -x-- ---- Sprite Over flag + --x- ---- Sprite Collision flag + ---x xxxx First sprite that caused Sprite Over event + */ + // TODO: data is readback in $146 + case SPROV: m_cmd = SPROV; break; + + /* 0x84 - SPRW: SPRite Write */ + case SPWR: m_cmd = SPWR; m_tsp.spwr_define = true; break; + + // TODO: 0x80 - SPRRD (same as SPWR but on read) + // TODO: 0x1a - LPNR (returns current light pen latch) + // TODO: 0x89 - MASK (ANDs successive VRAM writes for block write commands) + // TODO: 0x8e/0x8f - DPLD (set internal DPTR0/DPTR1 address variables) + // TODO: 0x8a - DPRD (get internal DPTR0 address) + // TODO: 0x90/0x91/0x92/0x93 - RDAT (Read DATa) + // TODO: 0x94/0x95/0x96/0x97 - WDAT (Write DATa) + // TODO: 0x99/0x9a/0x9b - BLKTOT (DMA block output) + // TODO: 0x9d/0x9e/0x9f - BLKTIN (DMA block input) + + default: + m_cmd = 0x00; + LOG("Unemulated IDP %02x cmd set\n", data); + break; + } +} + +void pc88va_state::tsp_sprite_enable(u32 sprite_number, bool sprite_enable, bool blink_enable) +{ + const u32 target_offset = (m_tsp.spr_offset + sprite_number) / 2; + + m_tvram[target_offset] = (m_tvram[target_offset] & ~0x200) | (sprite_enable << 9); + // disable blink if an override of CURN occurs + if (m_tsp.spr_offset == m_tsp.curn) + m_tsp.curn_blink = blink_enable; +} + +/* + * IDP SYNC command + * xx-- ---- [0] RM raster mode + * 00-- ---- \- non-interlace 640 x 400 24kHz + * 01-- ---- \- interlace 640 x 400 15kHz + * 10-- ---- \- vertical magnify 640 x 200 24kHz + * 11-- ---- \- normal 640 x 200 15kHz + * \- PC88VA POST sets either 00 or 11, depending on the monitor setting + * --x- ---- [0] EL Enable Light Pen IRQ + * ---x ---- [0] EV Enable Vertical Blank IRQ + * \- Generated to INT pin line, assume same as uPD3301 where VRTC != INT + * (therefore unconnected in PC88VA) + * ---- x--- [0] VM VRAM Access Mode (0) Random access mode (1) serial access mode + * ---- --xx [0] ILM, DPM Interleave and Dual Port Modes + * ---- --00 \- standalone mode + * ---- --01 \- interleave mode + * ---- --10 \- dual-port mode (VM must be 1) + * ---- --11 \- disabled + * \- Related to comms between host, IDP and VRAM, PC88VA POST sets 01. + * -x-- ---- [1] RF video memory refresh (0) no refresh (1) refresh + * \- enabled by PC88VA POST + * --x- ---- [1] EC external clock (1) output to DTCLK pin + * ---x ---- [1] ES external sync (1) output sync signals to /HSYN and /VSYN pins + * \- enabled by PC88VA POST + * ---- x--- [1] RV reverse screen (1) reverse color in text display + * \- sounds similar to the correlated function in uPD3301 + * ---- -xxx [1] RS Resolution Select, divides dot clock + * ---- -000 \- divide by 4 + * ---- -001 \- divide by 3 + * ---- -010 \- divide by 2 + * ---- -011 \- divide by 1.5 + * ---- -100 \- divide by 1 + * ---- -1xx \- disabled, no dot clock output + * \- NB: PC88VA POST sets 7 + * --xx xxxx [2] - LBL h blank start + * --xx xxxx [3] - LBR h border start + * xxxx xxxx [4] - HAD (h visible area - 1) / 4 + * --xx xxxx [5] - RBR h border end + * --xx xxxx [6] - RBL h blank end + * --xx xxxx [7] - HS h sync + * \- assume all params to be val - 1 / 4 + * --xx xxxx [8] - TBL v blank start + * --xx xxxx [9] - TBR v border start + * xxxx xxxx [A] - VAD (L) v visible area + * -x-- ---- [B] - VAD (H) v visible area (bit 9) + * --xx xxxx [B] - BBR v border end + * --xx xxxx [C] - BBL v blank end + * --xx xxxx [D] - VS v sync + */ +void pc88va_state::execute_sync_cmd() +{ + // olteus will punt loading on PC Engine OS if the vblank bit is completely off + // illcity expects the actual IDP vblank bit to work, from setup menu to opening transition PC=0x418f6 + // upo wants precise vblank bit readouts plus something else (SGP irq?) + + rectangle visarea; + attoseconds_t refresh; + + LOGCRTC("IDP SYNC: "); + + for (int i = 0; i < 15; i++) + LOGCRTC("%02x ", m_buf_ram[i]); + + const u8 h_blank_start = (m_buf_ram[0x02] & 0x3f) + 1; + const u8 h_border_start = (m_buf_ram[0x03] & 0x3f) + 1; + const u16 h_vis_area = (m_buf_ram[0x04] + 1) * 4; + const u8 h_border_end = (m_buf_ram[0x05] & 0x3f) + 1; + const u8 h_blank_end = (m_buf_ram[0x06] & 0x3f) + 1; + const u8 h_sync = (m_buf_ram[0x07] & 0x3f) + 1; + + LOGCRTC("\n\t"); + LOGCRTC("H blank start %d - end %d|", h_blank_start, h_blank_end); + LOGCRTC("H visible area: %d|", h_vis_area); + LOGCRTC("H border start %d - end %d|", h_border_start, h_border_end); + LOGCRTC("H sync: %d", h_sync); + + LOGCRTC("\n\t"); + const u16 h_total = + (h_blank_start + h_blank_end + h_border_start + h_border_end + h_sync) * 4 + h_vis_area; + + LOGCRTC("H Total calc = %d", h_total); + LOGCRTC("\n\t"); + + const u8 v_blank_start = m_buf_ram[0x08] & 0x3f; + const u8 v_border_start = m_buf_ram[0x09] & 0x3f; + const u16 v_vis_area = (m_buf_ram[0x0a]) | ((m_buf_ram[0x0b] & 0x40) << 2); + const u8 v_border_end = m_buf_ram[0x0b] & 0x3f; + const u8 v_blank_end = m_buf_ram[0x0c] & 0x3f; + const u8 v_sync = (m_buf_ram[0x0d] & 0x3f); + + LOGCRTC("V blank start %d - end %d|", v_blank_start, v_blank_end); + LOGCRTC("V visible area: %d|", v_vis_area); + LOGCRTC("V border start: %d - end %d|", v_border_start, v_border_end); + LOGCRTC("V sync: %d", v_sync); + + LOGCRTC("\n\t"); + m_vrtc_irq_line = v_blank_start + v_blank_end + v_vis_area + v_border_start + v_border_end; + const u16 v_total = m_vrtc_irq_line + v_sync; + + LOGCRTC("V Total calc = %d (VRTC %d)\n", v_total, m_vrtc_irq_line); + + // punt with message if values are off (shouldn't happen) + // TODO: more validation: + // HS >= 4 + // LBL >= 3 + // HAD & 1 == 1 + // VS >= 4 + // TBL + TBR >= 16 for non-sprite display, >= 32 for sprite display + // VAD >= 4 + // BBR + BBL >= 2 + if (h_vis_area <= 1 || v_vis_area <= 1 || h_total <= h_vis_area || v_total <= v_vis_area) + { + popmessage("CRTC assertion failed total (%d x %d) visible (%d x %d)", h_total, v_total, h_vis_area, v_vis_area); + return; + } + + visarea.set(0, h_vis_area - 1, 0, v_vis_area - 1); + + // TODO: interlace / vertical magnify, bit 7 + // TODO: actual clock source must be external, assume known PC-88 XTALs, a bit off compared to PC-88 with the values above + const int clock_speed = BIT(m_buf_ram[0x00], 6) ? (31'948'800 / 4) : (28'636'363 / 2); + + refresh = HZ_TO_ATTOSECONDS(clock_speed) * h_vis_area * v_vis_area; + + m_screen->configure(h_total, v_total, visarea, refresh); +} + +/* + * xxxx x??? [0] lower text attribute table offset + * ---- -xxx [1] upper text attribute, unused on PC88VA + * \- Multiplied by 256, lower 3 bits of [0] separated on datasheet (typo?) + * ---- xxxx [2] BC Backdrop Color + */ +void pc88va_state::execute_dspon_cmd() +{ + m_tsp.tvram_vreg_offset = m_buf_ram[0] << 8; + m_tsp.disp_on = true; + LOGIDP("DSPON (%02x %02x %02x) %05x\n" + , m_buf_ram[0] + , m_buf_ram[1] + , m_buf_ram[2] + , m_tsp.tvram_vreg_offset | 0x40000 + ); +} + +/* + * xxxx xxxx [0] ATROFF attribute offset (L) + * xxxx xxxx [1] ^ (M) + * ---- -xxx [2] ^ (H), possibly unused on PC88VA, signed in two's complement (!) + * -xxx ---- [2] PITCH for character code + * x--- ---- [2] (undocumented pitch bit?) + * ---x xxxx [3] MRA Maximum Raster Address, line height + 1 + * \- affects underline, disables layer if setting < 7 + * ---x xxxx [4] HRA Horizontal Raster Address, horizontal position for hline vertical attribute + * ---x xxxx [5] BR Blinking Rate, affects both attribute and cursor in number of frames, max value on 0 + * \- attribute x24 on, x8 off + * \- cursor x8 on, x8 off + */ +void pc88va_state::execute_dspdef_cmd() +{ + m_tsp.attr_offset = m_buf_ram[0] | m_buf_ram[1] << 8; + // m_buf_ram[2] & 1 used on POST (?) + if (m_buf_ram[2] & 0x6) + popmessage("TSP: unimplemented (H) attribute "); + + m_tsp.pitch = (m_buf_ram[2] & 0x70) >> 4; + if (BIT(m_buf_ram[2], 7)) + popmessage("TSP: undocumented PITCH bit set"); + + m_tsp.line_height = (m_buf_ram[3] & 0x1f) + 1; + if (m_tsp.line_height < 8) + popmessage("TSP: line height disable"); + m_tsp.h_line_pos = m_buf_ram[4]; + m_tsp.blink = (m_buf_ram[5] & 0xf8); + if (m_tsp.blink == 0) + m_tsp.blink = 0x100; + LOGIDP("DSPDEF (%02x %02x %02x %02x %02x %02x) %05x ATTR | %02x pitch | %02x line height| %02x hline | %d blink rate\n" + , m_buf_ram[0], m_buf_ram[1], m_buf_ram[2], m_buf_ram[3], m_buf_ram[4], m_buf_ram[5] + , m_tsp.attr_offset | 0x40000 + , m_tsp.pitch + , m_tsp.line_height + , m_tsp.h_line_pos + , m_tsp.blink + ); +} + +/* + * xxxx x--- [0] CURN Sprite Cursor number (sprite RAM entry) + * ---- --x- [0] CE show cursor bit (actively modifies the spriteram entry) + * ---- ---x [0] BE Blink Enable + */ +void pc88va_state::execute_curdef_cmd() +{ + m_tsp.curn = (m_buf_ram[0] & 0xf8); + const bool cursor_enable = bool(BIT(m_buf_ram[0], 1)); + const bool blink_enable = bool(BIT(m_buf_ram[0], 0)); + LOGIDP("CURDEF %02x|%d show|%d blink\n" + , m_buf_ram[0] & 0xf8 + , cursor_enable + , blink_enable + ); + tsp_sprite_enable(m_tsp.curn, cursor_enable, blink_enable); +} + +/* + * -xx- ---- [0] strip layer ID for cursor (attribute?) and light pen + */ +void pc88va_state::execute_actscr_cmd() +{ + const u8 active_screen_area = (m_buf_ram[0] & 0x60) >> 5; + LOGIDP("ACTSCR (%02x) %d\n", m_buf_ram[0], active_screen_area); +} + +/* + * xxxx xxxx [0] Cursor Position Y (lo word) + * ---- -xxx [1] Cursor Position Y (hi word) + * xxxx xxxx [2] Cursor Position X (lo word) + * ---- --xx [3] Cursor Position X (hi word) + */ +void pc88va_state::execute_curs_cmd() +{ + m_tsp.cur_pos_y = m_buf_ram[0] | (m_buf_ram[1] & 0x7) << 8; + m_tsp.cur_pos_x = m_buf_ram[2] | (m_buf_ram[3] & 0x3) << 8; + LOGIDP("CURS X: %d Y: %d\n", m_tsp.cur_pos_x, m_tsp.cur_pos_y); +} + +/* + * [0] Emulate target strip ID x 32 + * [1] The number of chars + * [2] The number of attributes + * [3] The number of lines + */ +void pc88va_state::execute_emul_cmd() +{ + // TODO: PC88VA specific, starts 3301 video emulation + //popmessage("TSP: executed EMUL command"); +} + +/* + * xxxx xxxx [0] SAB Sprite Table Offset (lo word) + * ---- -xxx [1] SAB hi word + * \- again multiplied by 256 + * xxxx x--- [2] HSPN: Maximum number of sprites in one raster (num + 1) for Sprite Over + * ---- -x-- [2] ESP: Enable Sprite Interrupt + * \- causes INT pin high for sprite collision or maximum sprite detected + * ---- --x- [2] MG: all sprites are 2x zoomed vertically when 1 + * ---- ---x [2] GR: 1 to enable the group collision detection + */ +void pc88va_state::execute_spron_cmd() +{ + + m_tsp.spr_offset = m_buf_ram[0] << 8; + m_tsp.spr_on = true; + m_tsp.spr_mg = BIT(m_buf_ram[2], 1); + LOGIDP("SPRON (%02x %02x %02x) %05x offs| %d max sprites| %d MG| %d GR|\n" + , m_buf_ram[0] + , m_buf_ram[1] + , m_buf_ram[2] + , m_tsp.spr_offset + 0x40000 + , (m_buf_ram[2] & 0xf8) + 1 + , m_tsp.spr_mg + , bool(BIT(m_buf_ram[2], 0)) + ); + // TODO: reset sprite status +} + +/* + * Toggle an individual sprite in the sprite ram entry + * xxxx x--- [0] SPN target sprite number + * ---- --x- [0] SPSW sprite off/on switch + */ +void pc88va_state::execute_sprsw_cmd() +{ + const u8 spn = m_buf_ram[0] & 0xf8; + const bool spsw = bool(BIT(m_buf_ram[0], 1)); + LOGIDP("SPRSW (%02x) %08x offset| %s SW\n" + , m_buf_ram[0] + , m_tsp.spr_offset + 0x40000 + , spsw ? "enable" : "disable" + ); + tsp_sprite_enable(spn, spsw, false); +} + +// 88va2d and friends during transitions +/* + * xxxx x--- [0] target SPN + * ---- -xxx [0] target attribute + * Afterwards, data written to the param port will indefinitely write to sprite area + * until command is cancelled, auto-incrementing per byte and eventually moving on to + * the next SPN when attribute overruns past 7. + */ +void pc88va_state::execute_spwr_cmd(u8 data) +{ + if (m_tsp.spwr_define == true) + { + m_tsp.spwr_define = false; + m_tsp.spwr_offset = data; + } + else + { + // TODO: likely going in FIFO full state + // 88va2d delays on status & 0x1f being all off then checks for IBF before every data dispatch. + const u32 target_offset = (m_tsp.spr_offset + m_tsp.spwr_offset) / 2; + + if (m_tsp.spwr_offset & 1) + m_tvram[target_offset] = (m_tvram[target_offset] & 0x00ff) | (data << 8); + else + m_tvram[target_offset] = (m_tvram[target_offset] & 0xff00) | (data & 0xff); + m_tsp.spwr_offset ++; + } +} + +void pc88va_state::idp_param_w(uint8_t data) +{ + if(m_cmd == DSPOFF || m_cmd == EXIT || m_cmd == SPROFF || m_cmd == SPROV) // no param commands + return; + + // special: until a different command is issued just route to SPWR + if (m_cmd == SPWR) + { + execute_spwr_cmd(data); + return; + } + + m_buf_ram[m_buf_index] = data; + m_buf_index++; + + if(m_buf_index >= m_buf_size) + { + m_buf_index = 0; + switch(m_cmd) + { + case SYNC: execute_sync_cmd(); break; + case DSPON: execute_dspon_cmd(); break; + case DSPDEF: execute_dspdef_cmd(); break; + case CURDEF: execute_curdef_cmd(); break; + case ACTSCR: execute_actscr_cmd(); break; + case CURS: execute_curs_cmd(); break; + case EMUL: execute_emul_cmd(); break; + case SPRON: execute_spron_cmd(); break; + case SPRSW: execute_sprsw_cmd(); break; + + default: + //printf("%02x\n",data); + break; + } + } +} + +/**************************************** + * I/O handlers + ***************************************/ + +/* + * $100 + * x--- ---- ---- ---- GDEN0 graphics display enable + * -x-- ---- ---- ---- GVM superimpose if 1? + * --x- ---- ---- ---- XVSP video signal output mode (0) inhibit scan signals + * ---x ---- ---- ---- SYNCEN horizontal sync output (0) inhibit hsync + * TODO: confirm following two + * ---- x--- ---- ---- YMMD GVRAM mode (0) screen 0 only (1) screens 0 and 1 + * ---- -x-- ---- ---- DM gfx display mode (0) multiplane (1) single plane -> cfr. $153 GMSP + * ---- ---- xx-- ---- RSM CRT raster scan mode + * ---- ---- 0x-- ---- Non-interlace mode 0/1 + * ---- ---- 1x-- ---- Interlace mode 0/1 + * ---- ---- --x- ---- GDEN1 gfx display circuit reset (0) reset + * ---- ---- ---x ---- SYNCM sync signal mode (0) internal (1) external + * ---- ---- ---- --xx VW vertical resolution + * ---- ---- ---- --00 400 lines + * ---- ---- ---- --01 408 lines + * ---- ---- ---- --10 200 lines + * ---- ---- ---- --11 204 lines + */ +void pc88va_state::screen_ctrl_w(offs_t offset, u16 data, u16 mem_mask) +{ + COMBINE_DATA(&m_screen_ctrl_reg); + + m_ymmd = bool(BIT(m_screen_ctrl_reg, 11)); + m_dm = bool(BIT(m_screen_ctrl_reg, 10)); + // YMMD DM + // mightmag 0xb060 (0) screen 0 (0) multiplane +} + +u16 pc88va_state::screen_ctrl_r() +{ + return m_screen_ctrl_reg; +} + +/* + * $102 + * ---x --xx ---- ---- screen 1 regs + * ---x ---- ---- ---- HW1 screen 1 hres (0) 640 dots (1) 320 + * ---- --xx ---- ---- PM1 screen 1 pixel mode + * ---- --00 ---- ---- 1bpp + * ---- --01 ---- ---- 4bpp + * ---- --10 ---- ---- 8bpp + * ---- --11 ---- ---- RGB565 + * ---- ---- ---x ---- HW0 screen 0 hres, as above + * ---- ---- ---- --xx PM0 screen 0 pixel mode, as above + */ +void pc88va_state::gfx_ctrl_w(offs_t offset, u16 data, u16 mem_mask) +{ + COMBINE_DATA(&m_gfx_ctrl_reg); +} + +// upo wants a readback otherwise no layer appears on title/gameplay +u16 pc88va_state::gfx_ctrl_r() +{ + return m_gfx_ctrl_reg; +} + +/* + * $10c + * --xx ---- ---- ---- BDM1/BDM0 color backdrop mode # + * --00 ---- ---- ---- inner background color, outer transparent + * --01 ---- ---- ---- inner transparent, outer background + * --10 ---- ---- ---- inside/outside background color + * --11 ---- ---- ---- inside/outside transparent + * \- mode 0 only available on 24.8KHz monitor + * ---- ---x xx-- ---- PLTM2/PLTM1/PLTM0 color palette mode + * ---- ---0 xx-- ---- + * ---- ---1 00-- ---- use palette bank 0 + * ---- ---1 01-- ---- use palette bank 1 + * ---- ---1 10-- ---- mixed mode + * ---- ---1 11-- ---- combined 32-color mode + * ---- ---- --xx ---- PLTP1/PLTP0 layer select for PLTM mixed mode + * ---- ---- --00 ---- text layer + * ---- ---- --01 ---- sprites + * ---- ---- --10 ---- graphic 0 + * ---- ---- --11 ---- graphic 1 + * ---- ---- ---- xx-- BLKM1/BLKM0 color blink rate + * ---- ---- ---- 00-- blink off + * ---- ---- ---- 01-- blink every 32 frames + * ---- ---- ---- 10-- blink every 64 frames + * ---- ---- ---- 11-- blink every 128 frames + * ---- ---- ---- --xx BLKD blink duty + * ---- ---- ---- --00 12.5% + * ---- ---- ---- --01 25% + * ---- ---- ---- --10 50% + * ---- ---- ---- --11 75% + */ +void pc88va_state::color_mode_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + COMBINE_DATA(&m_color_mode); + + const u8 bdm = (m_color_mode & 0x3000) >> 12; + m_pltm = (m_color_mode & 0x01c0) >> 6; + m_pltp = (m_color_mode & 0x0030) >> 4; + const u8 blkm = (m_color_mode & 0x000c) >> 2; + const u8 blkd = (m_color_mode & 0x0003) >> 0; + LOGCOLOR("Color Mode (%04x & %04x)|%02x BDM|%s PLTM2|%02x PLTM1/PLTM0|%02x PLTP|%02x BLKM|%02x BLKD\n" + , m_color_mode, mem_mask + , bdm + , m_pltm & 4 ? "V3 mode" : "V1/V2 mode" + , m_pltm & 3 + , m_pltp + , blkm + , blkd + ); + // PLTM - PLTP + // rtype, shinraba: + // 0x02 (mixed) 0x03 graphics 1 + // micromus, famista, shanghai, ballbrkr: + // 0x02 (mixed) 0x02 graphics 0 + // olteus: + // 0x02 (mixed) 0x01 sprites + // mightmag: + // 0x02 (mixed) 0x00 text + // animefrm: + // 0x03 (combined) 0x00 text + // boomer (gameplay): + // 0x01 (bank 1) 0x02 graphic 0 (left on for previous 0x02 - 0x02 mode) + // illcity, xak2 (pre-loading screens): + // 0x00 (bank 0) 0x00 text + +} + +void pc88va_state::palette_ram_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + COMBINE_DATA(&m_palram[offset]); + + const u16 color = m_palram[offset]; + u8 b = pal5bit((color & 0x001f)); + u8 r = pal5bit((color & 0x03e0) >> 5); + u8 g = pal6bit((color & 0xfc00) >> 10); + + // TODO: docs suggests this arrangement but it's wrong + // may be just one bit always on? +// b = (m_palram[offset] & 0x001e) >> 1; +// r = (m_palram[offset] & 0x03c0) >> 6; +// g = (m_palram[offset] & 0x7800) >> 11; + + m_palette->set_pen_color(offset, r, g, b); +} + +void pc88va_state::video_pri_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + COMBINE_DATA(&m_video_pri_reg[offset]); +} + +void pc88va_state::text_transpen_w(offs_t offset, u16 data, u16 mem_mask) +{ + // TODO: understand what these are for, docs blabbers about text/sprite color separation? + // cfr. rogueall, olteus on disk swap screen + // shanghai on winning animation (flips 0xf801 / 0x07c1, intentional?) + COMBINE_DATA(&m_text_transpen); + if (m_text_transpen & 0xfff0) + popmessage("text transpen > 15 (%04x)", m_text_transpen); +} + +/* + * $14c-$14f Kanji CG ports + * Alt method for access kanji ROM for drawing to graphic layers + */ +u8 pc88va_state::kanji_cg_r() +{ + uint8_t *kanji_rom = (uint8_t *)m_kanji_rom.target(); + + // ANK + if (m_kanji_cg_jis[1] == 0) + return kanji_rom[0x40000 + (m_kanji_cg_jis[0] * 0x10) + (m_kanji_cg_line)]; + + // PCG + if (m_kanji_cg_jis[0] == 0x56) + { + // jis2 = 0x21 / 0x22 "PC" on hovered top status bar for animefrm + // NB: software reverts the two chars once it gets upped to bitmap layer. + const u32 pcg_addr = ((m_kanji_cg_jis[1] & 0x1f) + ((m_kanji_cg_jis[1] & 0x60) << 1)) * 0x20; + return m_kanjiram[pcg_addr + (m_kanji_cg_line << 1) + (m_kanji_cg_lr ^ 1)]; + } + + const u32 kanji_address = calc_kanji_rom_addr(m_kanji_cg_jis[0] + 0x20, m_kanji_cg_jis[1], 0, 0); + + return kanji_rom[kanji_address + (m_kanji_cg_line << 1) + (m_kanji_cg_lr ^ 1)]; +} + +void pc88va_state::kanji_cg_raster_w(u8 data) +{ + m_kanji_cg_line = data & 0xf; + m_kanji_cg_lr = BIT(data, 5); +} + +void pc88va_state::kanji_cg_address_w(offs_t offset, u8 data) +{ + m_kanji_cg_jis[offset] = data; +} + +/* + * $148 Text Control 1 + * x--- ---- TD Text Disable (1) + * -xxx ---- VALT2/VALT1/VALT0 TVRAM access restriction (?) + * -000 ---- No limit + * -??? ---- value x4 + * ---- x--- ATM text attribute mode (1) V3 Mode (0) V1/V2 + * ---- -x-- ANKM character font mode (1) 16 (0) 8 + * ---- --x- IDP memory mode (1) word mode + * ---- ---1 + */ +void pc88va_state::text_control_1_w(u8 data) +{ + m_td = bool(BIT(data, 7)); + + if ((data & 0x7d) != 1) + LOG("I/O $148 write %02x\n", data); +} diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/cclimber.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/cclimber.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/cclimber.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/cclimber.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1524,8 +1524,8 @@ // 0x3800-0x3fff - empty ROM_REGION( 0x1000, "gfx2", 0 ) - ROM_LOAD( "9_mm", 0x0000, 0x0800, BAD_DUMP CRC(98c5cfcd) SHA1(b4c1a6d0be5c5af1a33ffd8f2432ddc7227699ee) ) - ROM_LOAD( "8_mm", 0x0800, 0x0800, BAD_DUMP CRC(21acf226) SHA1(ebc9c13ea8645af2a80975e8612174efd2da64eb) ) + ROM_LOAD( "9_mm", 0x0000, 0x0800, BAD_DUMP CRC(943858c2) SHA1(255473793cae7ef40d3a738cb7e7b2b767859a6d) ) // hand fixed, needs redump + ROM_LOAD( "8_mm", 0x0800, 0x0800, BAD_DUMP CRC(76d75e83) SHA1(8f7232155d5c70b0056e59a29aaa19892a1de102) ) // " ROM_REGION( 0x0160, "proms", 0 ) ROM_LOAD( "cclimber.pr1", 0x0000, 0x0020, CRC(751c3325) SHA1(edce2bc883996c1d72dc6c1c9f62799b162d415a) ) diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/galivan.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/galivan.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/galivan.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/galivan.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -14,7 +14,7 @@ Youma Ninpou Chou (Japan) (c)1986 NihonBussan Co.,Ltd. Driver by -Takahiro Nogi (nogi@kt.rim.or.jp) 1999/12/17 - +Takahiro Nogi 1999/12/17 - TODO - Find out how layers are enabled\disabled diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/gomoku.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/gomoku.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/gomoku.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/gomoku.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,25 +1,17 @@ // license:BSD-3-Clause // copyright-holders: Takahiro Nogi, David Haywood - /****************************************************************************** Gomoku Narabe Renju (c)1981 Nihon Bussan Co.,Ltd. - Driver by Takahiro Nogi 1999/11/06 - + Driver by Takahiro Nogi 1999/11/06 - Updated to compile again by David Haywood 19th Oct 2002 -******************************************************************************/ -/****************************************************************************** - -todo: - +TODO: - Refactor sound emulation. - - BG(Go table) is generated by board circuitry, so not fully emulated. - - Couldn't figure out the method to specify palette, so I modified palette number manually. - - Couldn't figure out oneshot sound playback parameter, so I adjusted it manually. ******************************************************************************/ @@ -47,7 +39,7 @@ m_videoram(*this, "videoram"), m_colorram(*this, "colorram"), m_bgram(*this, "bgram"), - m_inputs(*this, {"IN0", "IN1", "DSW", "UNUSED0", "UNUSED1", "UNUSED2", "UNUSED3", "UNUSED4"}), + m_inputs(*this, { "IN0", "IN1", "DSW" }), m_maincpu(*this, "maincpu"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), @@ -65,7 +57,7 @@ required_shared_ptr m_videoram; required_shared_ptr m_colorram; required_shared_ptr m_bgram; - optional_ioport_array<8> m_inputs; + required_ioport_array<3> m_inputs; required_device m_maincpu; required_device m_gfxdecode; required_device m_screen; @@ -141,10 +133,7 @@ int const color = (attr & 0x0f); int const flipyx = (attr & 0xc0) >> 6; - tileinfo.set(0, - code, - color, - TILE_FLIPYX(flipyx)); + tileinfo.set(0, code, color, TILE_FLIPYX(flipyx)); } void gomoku_state::videoram_w(offs_t offset, uint8_t data) @@ -194,10 +183,10 @@ { int const bgdata = m_bg_d[m_bg_x[x] + (m_bg_y[y] << 4)]; - int color = 0x20; // outside frame (black) + int color = 0x20; // outside frame (black) if (bgdata & 0x01) color = 0x21; // board (brown) - if (bgdata & 0x02) color = 0x20; // frame line (while) + if (bgdata & 0x02) color = 0x20; // frame line (black) m_bg_bitmap.pix((255 - y - 1) & 0xff, (255 - x + 7) & 0xff) = color; } @@ -270,7 +259,7 @@ } else if (bgram & 0x08) { - color = 0x22; // cursor (white) + color = 0x22; // cursor (white) } else continue; } @@ -292,14 +281,15 @@ // machine -// input ports are rotated 90 degrees uint8_t gomoku_state::input_port_r(offs_t offset) { int res = 0; - for (int i = 0; i < 8; i++) - res |= ((m_inputs[i].read_safe(0xff) >> offset) & 1) << i; - return res; + // input ports are rotated 90 degrees + for (int i = 0; i < 3; i++) + res |= BIT(m_inputs[i]->read(), offset) << i; + + return res | 0xf8; } diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/hyhoo.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/hyhoo.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/hyhoo.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/hyhoo.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -10,7 +10,7 @@ Taisen Quiz HYHOO 2 (c)1987 Nihon Bussan Co.,Ltd. - Driver by Takahiro Nogi 2000/01/28 - + Driver by Takahiro Nogi 2000/01/28 - ******************************************************************************/ /****************************************************************************** diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/hyhoo_v.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/hyhoo_v.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/hyhoo_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/hyhoo_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ Video Hardware for Nichibutsu Mahjong series. - Driver by Takahiro Nogi 2000/01/28 - + Driver by Takahiro Nogi 2000/01/28 - ******************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/magmax.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/magmax.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/magmax.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/magmax.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -5,7 +5,7 @@ MAGMAX (c)1985 NihonBussan Co.,Ltd. -Driver by Takahiro Nogi (nogi@kt.rim.or.jp) 1999/11/05 - +Driver by Takahiro Nogi 1999/11/05 - Additional tweaking by Jarek Burczynski diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/magmax_v.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/magmax_v.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/magmax_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/magmax_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ Video Hardware for MAGMAX. -Driver by Takahiro Nogi (nogi@kt.rim.or.jp) 1999/11/05 - +Driver by Takahiro Nogi 1999/11/05 - Additional tweaking by Jarek Burczynski ***************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/nb1413m3.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/nb1413m3.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/nb1413m3.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/nb1413m3.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ Machine Hardware for Nichibutsu Mahjong series. - Driver by Takahiro Nogi 1999/11/05 - + Driver by Takahiro Nogi 1999/11/05 - ******************************************************************************/ /****************************************************************************** diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/nb1413m3.h mame-0.251+dfsg.1/src/mame/nichibutsu/nb1413m3.h --- mame-0.250+dfsg.1/src/mame/nichibutsu/nb1413m3.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/nb1413m3.h 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ Machine Hardware for Nichibutsu Mahjong series. - Driver by Takahiro Nogi 1999/11/05 - + Driver by Takahiro Nogi 1999/11/05 - ******************************************************************************/ #ifndef MAME_MACHINE_NB1413M3_H diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj8688.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj8688.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj8688.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj8688.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ nbmj8688 - Nichibutsu Mahjong games for years 1986-1988 - Driver by Takahiro Nogi 2000/01/28 - + Driver by Takahiro Nogi 2000/01/28 - ******************************************************************************/ /****************************************************************************** diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj8688_v.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj8688_v.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj8688_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj8688_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ Video Hardware for Nichibutsu Mahjong series. - Driver by Takahiro Nogi 1999/11/05 - + Driver by Takahiro Nogi 1999/11/05 - ******************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj8891.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj8891.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj8891.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj8891.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ nbmj8891 - Nichibutsu Mahjong games for years 1988-1991 - Driver by Takahiro Nogi 1999/11/05 - + Driver by Takahiro Nogi 1999/11/05 - ******************************************************************************/ /****************************************************************************** diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj8891_v.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj8891_v.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj8891_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj8891_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ Video Hardware for Nichibutsu Mahjong series. - Driver by Takahiro Nogi 1999/11/05 - + Driver by Takahiro Nogi 1999/11/05 - ******************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj8900.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj8900.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj8900.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj8900.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ nbmj8900 - Nichibutsu Mahjong games for years 1989 - Driver by Takahiro Nogi 2007/05/13 - + Driver by Takahiro Nogi 2007/05/13 - ******************************************************************************/ /****************************************************************************** diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj8900_v.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj8900_v.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj8900_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj8900_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ Video Hardware for Nichibutsu Mahjong series. - Driver by Takahiro Nogi 1999/11/05 - + Driver by Takahiro Nogi 1999/11/05 - ******************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj8991.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj8991.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj8991.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj8991.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ nbmj8991 - Nichibutsu Mahjong games for years 1989-1991 - Driver by Takahiro Nogi 1999/12/02 - + Driver by Takahiro Nogi 1999/12/02 - ******************************************************************************/ /****************************************************************************** diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj8991_v.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj8991_v.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj8991_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj8991_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ Video Hardware for Nichibutsu Mahjong series. - Driver by Takahiro Nogi 1999/11/05 - + Driver by Takahiro Nogi 1999/11/05 - ******************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj9195.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj9195.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj9195.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj9195.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ nbmj9195 - Nichibutsu Mahjong games for years 1991-1995 - Driver by Takahiro Nogi 2000/03/13 - + Driver by Takahiro Nogi 2000/03/13 - Special thanks to Tatsuyuki Satoh ******************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj9195_v.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj9195_v.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/nbmj9195_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/nbmj9195_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ Video Hardware for Nichibutsu Mahjong series. - Driver by Takahiro Nogi 1999/11/05 - + Driver by Takahiro Nogi 1999/11/05 - Special thanks to Tatsuyuki Satoh ******************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/niyanpai.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/niyanpai.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/niyanpai.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/niyanpai.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -19,7 +19,7 @@ Zoku Mahjong Housoukyoku Honbanchuu (c)199? Nihon Bussan Co.,Ltd. - Driver by Takahiro Nogi 2000/12/23 - + Driver by Takahiro Nogi 2000/12/23 - ******************************************************************************/ /****************************************************************************** diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/niyanpai_v.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/niyanpai_v.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/niyanpai_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/niyanpai_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ Video Hardware for Nichibutsu Mahjong series. - Driver by Takahiro Nogi 2000/12/23 - + Driver by Takahiro Nogi 2000/12/23 - ******************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/pastelg.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/pastelg.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/pastelg.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/pastelg.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -7,7 +7,7 @@ Pastel Gal (c)1985 Nihon Bussan Co.,Ltd. - Driver by Takahiro Nogi 2000/06/07 - + Driver by Takahiro Nogi 2000/06/07 - ******************************************************************************/ /****************************************************************************** diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/seicross.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/seicross.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/seicross.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/seicross.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -375,9 +375,8 @@ INTERRUPT_GEN_MEMBER(seicross_state::vblank_irq) { - if(m_irq_mask) + if (m_irq_mask) device.execute().set_input_line(0, HOLD_LINE); - } diff -Nru mame-0.250+dfsg.1/src/mame/nichibutsu/tubep.cpp mame-0.251+dfsg.1/src/mame/nichibutsu/tubep.cpp --- mame-0.250+dfsg.1/src/mame/nichibutsu/tubep.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nichibutsu/tubep.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -558,27 +558,32 @@ void tubep_state::ay8910_portA_0_w(uint8_t data) { - //analog sound control + //analog sound control } + void tubep_state::ay8910_portB_0_w(uint8_t data) { - //analog sound control + //analog sound control } + void tubep_state::ay8910_portA_1_w(uint8_t data) { - //analog sound control + //analog sound control } + void tubep_state::ay8910_portB_1_w(uint8_t data) { - //analog sound control + //analog sound control } + void tubep_state::ay8910_portA_2_w(uint8_t data) { - //analog sound control + //analog sound control } + void tubep_state::ay8910_portB_2_w(uint8_t data) { - //analog sound control + //analog sound control } @@ -1108,8 +1113,8 @@ * *************************************/ -// year rom parent machine inp state init -GAME( 1984, tubep, 0, tubep, tubep, tubep_state, empty_init, ROT0, "Nichibutsu / Fujitek", "Tube Panic", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) -GAME( 1984, tubepb, tubep, tubepb, tubepb, tubep_state, empty_init, ROT0, "bootleg", "Tube Panic (bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) +// year rom parent machine inp state init +GAME( 1984, tubep, 0, tubep, tubep, tubep_state, empty_init, ROT0, "Nichibutsu / Fujitek", "Tube Panic", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) +GAME( 1984, tubepb, tubep, tubepb, tubepb, tubep_state, empty_init, ROT0, "bootleg", "Tube Panic (bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) GAME( 1984, rjammer, 0, rjammer, rjammer, rjammer_state, empty_init, ROT0, "Nichibutsu / Alice", "Roller Jammer", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/cham24.cpp mame-0.251+dfsg.1/src/mame/nintendo/cham24.cpp --- mame-0.250+dfsg.1/src/mame/nintendo/cham24.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/cham24.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -29,7 +29,7 @@ | |NTA0002| | | |(QFP80)| 24-1.U1 | | -------- | -| 2003 ----------- | +| ULN2003A ----------- | | |LATTICE | | | DSW1 |PLSI 1016| | |J |(PLCC44) | 24-2.U2 | @@ -38,8 +38,8 @@ |M SW1 21.4771MHz | |A | | GW6582 LS02 | -| |-----------| 4040 | -| 74HC245 |Philips | 4040 | +| |-----------| MC14040BCP | +| 74HC245 |Philips | MC14040BCP | | |SAA71111AH2| | | |20505650 | | | |bP0219 | 24-3.U3 | @@ -71,12 +71,13 @@ { public: cham24_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_ppu(*this, "ppu"), - m_nt_page(*this, "nt_page%u", 0U), - m_prg_banks(*this, "prg%u", 0U), - m_chr_bank(*this, "chr") + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_ppu(*this, "ppu") + , m_nt_page(*this, "nt_page%u", 0U) + , m_prg_banks(*this, "prg%u", 0U) + , m_chr_bank(*this, "chr") + , m_in(*this, "P%u", 1U) { } void cham24(machine_config &config); @@ -93,18 +94,16 @@ required_memory_bank_array<2> m_prg_banks; required_memory_bank m_chr_bank; - uint8_t m_prg_chunks; + required_ioport_array<2> m_in; - std::unique_ptr m_nt_ram; - uint32_t m_in_0; - uint32_t m_in_1; - uint32_t m_in_0_shift; - uint32_t m_in_1_shift; - void sprite_dma_w(address_space &space, uint8_t data); - uint8_t cham24_IN0_r(); - void cham24_IN0_w(uint8_t data); - uint8_t cham24_IN1_r(); - void cham24_mapper_w(offs_t offset, uint8_t data); + std::unique_ptr m_nt_ram; + u8 m_prg_chunks; + u8 m_input_latch[2]; + u8 m_input_strobe; + + template u8 cham24_in_r(); + void cham24_in0_w(u8 data); + void cham24_mapper_w(offs_t offset, u8 data); void cham24_set_mirroring(int mirroring); void cham24_map(address_map &map); void cham24_ppu_map(address_map &map); @@ -114,61 +113,46 @@ void cham24_state::cham24_set_mirroring(int mirroring) { - switch (mirroring) - { - case PPU_MIRROR_HORZ: - for (int i = 0; i < 4; i++) - m_nt_page[i]->set_entry(BIT(i, 1)); - break; - case PPU_MIRROR_VERT: - default: - for (int i = 0; i < 4; i++) - m_nt_page[i]->set_entry(i & 1); - break; - } -} + int bit = mirroring == PPU_MIRROR_HORZ; -void cham24_state::sprite_dma_w(address_space &space, uint8_t data) -{ - int source = (data & 7); - m_ppu->spriteram_dma(space, source); + for (int i = 0; i < 4; i++) + m_nt_page[i]->set_entry(BIT(i, bit)); } -uint8_t cham24_state::cham24_IN0_r() +template +u8 cham24_state::cham24_in_r() { - return ((m_in_0 >> m_in_0_shift++) & 0x01) | 0x40; + if (m_input_strobe) + m_input_latch[Which] = m_in[Which]->read(); + + u8 ret = 0x40; + + ret |= m_input_latch[Which] & 1; + if (!machine().side_effects_disabled()) + m_input_latch[Which] >>= 1; + + return ret; } -void cham24_state::cham24_IN0_w(uint8_t data) +void cham24_state::cham24_in0_w(u8 data) { if (data & 0xfe) { - //logerror("Unhandled cham24_IN0_w write: data = %02X\n", data); + //logerror("Unhandled cham24_in0_w write: data = %02X\n", data); } - if (data & 0x01) - { - return; - } - - m_in_0_shift = 0; - m_in_1_shift = 0; - - m_in_0 = ioport("P1")->read(); - m_in_1 = ioport("P2")->read(); - -} + if (m_input_strobe & ~data & 1) + for (int i = 0; i < 2; i++) + m_input_latch[i] = m_in[i]->read(); -uint8_t cham24_state::cham24_IN1_r() -{ - return ((m_in_1 >> m_in_1_shift++) & 0x01) | 0x40; + m_input_strobe = data & 1; } -void cham24_state::cham24_mapper_w(offs_t offset, uint8_t data) +void cham24_state::cham24_mapper_w(offs_t offset, u8 data) { // switch PRG bank - uint8_t prg_bank = BIT(offset, 6, 6); - uint8_t prg_mode = !BIT(offset, 12); + u8 prg_bank = BIT(offset, 6, 6); + u8 prg_mode = !BIT(offset, 12); m_prg_banks[0]->set_entry(prg_bank & ~prg_mode); m_prg_banks[1]->set_entry(prg_bank | prg_mode); @@ -181,11 +165,11 @@ void cham24_state::cham24_map(address_map &map) { - map(0x0000, 0x07ff).ram(); /* NES RAM */ + map(0x0000, 0x07ff).mirror(0x1800).ram(); // NES RAM map(0x2000, 0x3fff).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); - map(0x4014, 0x4014).w(FUNC(cham24_state::sprite_dma_w)); - map(0x4016, 0x4016).rw(FUNC(cham24_state::cham24_IN0_r), FUNC(cham24_state::cham24_IN0_w)); /* IN0 - input port 1 */ - map(0x4017, 0x4017).r(FUNC(cham24_state::cham24_IN1_r)); /* IN1 - input port 2 / PSG second control register */ + map(0x4014, 0x4014).w(m_ppu, FUNC(ppu2c0x_device::spriteram_dma)); + map(0x4016, 0x4016).rw(FUNC(cham24_state::cham24_in_r<0>), FUNC(cham24_state::cham24_in0_w)); // IN0 - input port 1 + map(0x4017, 0x4017).r(FUNC(cham24_state::cham24_in_r<1>)); // IN1 - input port 2 / PSG second control register map(0x8000, 0xbfff).bankr(m_prg_banks[0]).w(FUNC(cham24_state::cham24_mapper_w)); map(0xc000, 0xffff).bankr(m_prg_banks[1]).w(FUNC(cham24_state::cham24_mapper_w)); } @@ -201,20 +185,20 @@ } static INPUT_PORTS_START( cham24 ) - PORT_START("P1") /* IN0 */ + PORT_START("P1") // IN0 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1) /* Select */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1) // Select PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START1 ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - PORT_START("P2") /* IN1 */ + PORT_START("P2") // IN1 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2) /* Select */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2) // Select PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) @@ -226,8 +210,8 @@ void cham24_state::machine_start() { m_nt_ram = std::make_unique(0x800); - for (int i = 0; i < 4; i++) - m_nt_page[i]->configure_entries(0, 2, m_nt_ram.get(), 0x400); + for (auto &page : m_nt_page) + page->configure_entries(0, 2, m_nt_ram.get(), 0x400); // set up code banking to be done in 16K chunks m_prg_chunks = memregion("user1")->bytes() / 0x4000; @@ -236,6 +220,10 @@ // gfx banking always done in 8K chunks m_chr_bank->configure_entries(0, memregion("gfx1")->bytes() / 0x2000, memregion("gfx1")->base(), 0x2000); + + save_item(NAME(m_input_latch)); + save_item(NAME(m_input_strobe)); + save_pointer(NAME(m_nt_ram), 0x800); } void cham24_state::machine_reset() @@ -251,23 +239,23 @@ void cham24_state::cham24(machine_config &config) { - /* basic machine hardware */ + // basic machine hardware RP2A03G(config, m_maincpu, NTSC_APU_CLOCK); m_maincpu->set_addrmap(AS_PROGRAM, &cham24_state::cham24_map); - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_size(32*8, 262); screen.set_visarea(0*8, 32*8-1, 0*8, 30*8-1); - screen.set_screen_update("ppu", FUNC(ppu2c0x_device::screen_update)); + screen.set_screen_update(m_ppu, FUNC(ppu2c0x_device::screen_update)); PPU_2C02(config, m_ppu); m_ppu->set_addrmap(0, &cham24_state::cham24_ppu_map); m_ppu->set_cpu_tag(m_maincpu); m_ppu->int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); m_maincpu->add_route(ALL_OUTPUTS, "mono", 0.50); } @@ -291,4 +279,4 @@ } // Anonymous namespace -GAME( 2002, cham24, 0, cham24, cham24, cham24_state, empty_init, ROT0, "bootleg", "Chameleon 24", MACHINE_NOT_WORKING ) +GAME( 2002, cham24, 0, cham24, cham24, cham24_state, empty_init, ROT0, "bootleg", "Chameleon 24", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/dkong_a.cpp mame-0.251+dfsg.1/src/mame/nintendo/dkong_a.cpp --- mame-0.250+dfsg.1/src/mame/nintendo/dkong_a.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/dkong_a.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1292,17 +1292,18 @@ void dkong_state::dkong3_sound1_map(address_map &map) { - map(0x0000, 0x07ff).ram(); - map(0x4016, 0x4016).r("latch1", FUNC(latch8_device::read)); /* overwrite default */ + map(0x0000, 0x07ff).mirror(0x7800).ram(); + map(0x4016, 0x4016).r("latch1", FUNC(latch8_device::read)); map(0x4017, 0x4017).r("latch2", FUNC(latch8_device::read)); - map(0xe000, 0xffff).rom(); + map(0x8000, 0x9fff).mirror(0x6000).rom(); } void dkong_state::dkong3_sound2_map(address_map &map) { - map(0x0000, 0x07ff).ram(); - map(0x4016, 0x4016).r("latch3", FUNC(latch8_device::read)); /* overwrite default */ - map(0xe000, 0xffff).rom(); + map(0x0000, 0x07ff).mirror(0x7800).ram(); + map(0x4016, 0x4016).r("latch3", FUNC(latch8_device::read)); + map(0x4017, 0x4017).nopr(); + map(0x8000, 0x9fff).mirror(0x6000).rom(); } /************************************* diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/dkong.cpp mame-0.251+dfsg.1/src/mame/nintendo/dkong.cpp --- mame-0.250+dfsg.1/src/mame/nintendo/dkong.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/dkong.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -7,7 +7,6 @@ **************************************************************************** TODO: - - write a shootgal palette_init - Pestplce colors and origin - Shooting Gallery: Shootgal.txt mentions speech pcb, @@ -566,8 +565,8 @@ uint8_t dkong_state::hb_dma_read_byte(offs_t offset) { - int bucket = m_rev_map[(offset>>10) & 0x1ff]; - int addr; + int bucket = m_rev_map[(offset>>10) & 0x1ff]; + int addr; if (bucket < 0) fatalerror("hb_dma_read_byte - unmapped access for 0x%02x - bucket 0x%02x\n", offset, bucket); @@ -579,8 +578,8 @@ void dkong_state::hb_dma_write_byte(offs_t offset, uint8_t data) { - int bucket = m_rev_map[(offset>>10) & 0x1ff]; - int addr; + int bucket = m_rev_map[(offset>>10) & 0x1ff]; + int addr; if (bucket < 0) fatalerror("hb_dma_read_byte - unmapped access for 0x%02x - bucket 0x%02x\n", offset, bucket); @@ -2906,10 +2905,10 @@ ROM_LOAD( "dk3c.7e", 0x8000, 0x2000, CRC(615f14b7) SHA1(145674073e95d97c9131b6f2b03303eadb57ca78) ) ROM_REGION( 0x10000, "rp2a03a", 0 ) /* sound #1 */ - ROM_LOAD( "dk3c.5l", 0xe000, 0x2000, CRC(7ff88885) SHA1(d530581778aab260e21f04c38e57ba34edea7c64) ) + ROM_LOAD( "dk3c.5l", 0x8000, 0x2000, CRC(7ff88885) SHA1(d530581778aab260e21f04c38e57ba34edea7c64) ) ROM_REGION( 0x10000, "rp2a03b", 0 ) /* sound #2 */ - ROM_LOAD( "dk3c.6h", 0xe000, 0x2000, CRC(36d7200c) SHA1(7965fcb9bc1c0fdcae8a8e79df9c7b7439c506d8) ) + ROM_LOAD( "dk3c.6h", 0x8000, 0x2000, CRC(36d7200c) SHA1(7965fcb9bc1c0fdcae8a8e79df9c7b7439c506d8) ) ROM_REGION( 0x2000, "gfx1", 0 ) ROM_LOAD( "dk3v.3n", 0x0000, 0x1000, CRC(415a99c7) SHA1(e0855b03bb1dc0d8ae46da9fe33ca30ecf6a2e96) ) @@ -2939,10 +2938,10 @@ ROM_LOAD( "dk3cj.7e", 0x8000, 0x2000, CRC(25b5be23) SHA1(43cf2a676922e60d9d637777a7721ab7582129fc) ) ROM_REGION( 0x10000, "rp2a03a", 0 ) /* sound #1 */ - ROM_LOAD( "dk3c.5l", 0xe000, 0x2000, CRC(7ff88885) SHA1(d530581778aab260e21f04c38e57ba34edea7c64) ) + ROM_LOAD( "dk3c.5l", 0x8000, 0x2000, CRC(7ff88885) SHA1(d530581778aab260e21f04c38e57ba34edea7c64) ) ROM_REGION( 0x10000, "rp2a03b", 0 ) /* sound #2 */ - ROM_LOAD( "dk3c.6h", 0xe000, 0x2000, CRC(36d7200c) SHA1(7965fcb9bc1c0fdcae8a8e79df9c7b7439c506d8) ) + ROM_LOAD( "dk3c.6h", 0x8000, 0x2000, CRC(36d7200c) SHA1(7965fcb9bc1c0fdcae8a8e79df9c7b7439c506d8) ) ROM_REGION( 0x2000, "gfx1", 0 ) ROM_LOAD( "dk3v.3n", 0x0000, 0x1000, CRC(415a99c7) SHA1(e0855b03bb1dc0d8ae46da9fe33ca30ecf6a2e96) ) @@ -3009,10 +3008,10 @@ ROM_LOAD( "dk3_10a.bin", 0x0000, 0x10000, CRC(0008652b) SHA1(f1d90bb18373a6f24634b6d2cd766a28d07ab9f4) ) /* Version 1.0a */ ROM_REGION( 0x10000, "rp2a03a", 0 ) /* sound #1 */ - ROM_LOAD( "dk3c.5l", 0xe000, 0x2000, CRC(7ff88885) SHA1(d530581778aab260e21f04c38e57ba34edea7c64) ) + ROM_LOAD( "dk3c.5l", 0x8000, 0x2000, CRC(7ff88885) SHA1(d530581778aab260e21f04c38e57ba34edea7c64) ) ROM_REGION( 0x10000, "rp2a03b", 0 ) /* sound #2 */ - ROM_LOAD( "dk3c.6h", 0xe000, 0x2000, CRC(36d7200c) SHA1(7965fcb9bc1c0fdcae8a8e79df9c7b7439c506d8) ) + ROM_LOAD( "dk3c.6h", 0x8000, 0x2000, CRC(36d7200c) SHA1(7965fcb9bc1c0fdcae8a8e79df9c7b7439c506d8) ) ROM_REGION( 0x2000, "gfx1", 0 ) ROM_LOAD( "dk3v.3n", 0x0000, 0x1000, CRC(415a99c7) SHA1(e0855b03bb1dc0d8ae46da9fe33ca30ecf6a2e96) ) @@ -3618,7 +3617,6 @@ /* While the PAL supports up to 16 decryption methods, only four are actually used in the PAL. Therefore, we'll take a little memory overhead and decrypt the ROMs using each method in advance. */ - drakton_decrypt_rom(0x02, 0x10000, bs[0]); drakton_decrypt_rom(0x40, 0x14000, bs[1]); drakton_decrypt_rom(0x8a, 0x18000, bs[2]); @@ -3645,7 +3643,7 @@ drakton_decrypt_rom(0x0a, 0x18000, bs[2]); drakton_decrypt_rom(0x88, 0x1c000, bs[3]); - /* custom handlers supporting Joystick or Steering Wheel */ + // custom handlers supporting Joystick or Steering Wheel m_maincpu->space(AS_PROGRAM).install_read_handler(0x7c00, 0x7c00, read8smo_delegate(*this, FUNC(dkong_state::strtheat_inputport_0_r))); m_maincpu->space(AS_PROGRAM).install_read_handler(0x7c80, 0x7c80, read8smo_delegate(*this, FUNC(dkong_state::strtheat_inputport_1_r))); } @@ -3685,8 +3683,36 @@ space.install_write_handler(0xc800, 0xc800, write8smo_delegate(*this, FUNC(dkong_state::braze_eeprom_w))); } +void dkong_state::init_dkong3() +{ + // RP2A03 bus conflict between internal APU and external RAM. + // dkong3 relies on it, eg. sound effects when player dies, jumps down a platform, Creepy inchworm appears/gets hit + // BTANB: squeak that randomly interrupts Creepy inchworm's sound effect + m_dkong3_tap[0] = m_dev_rp2a03a->space(AS_PROGRAM).install_write_tap( + 0x4000, 0x4017, + "rp2a03a_conflict_w", + [this] (offs_t offset, u8 &data, u8 mem_mask) + { + // write to RAM + m_dev_rp2a03a->space(AS_PROGRAM).write_byte(offset & 0x07ff, data); + }, + &m_dkong3_tap[0]); + + m_dkong3_tap[1] = m_dev_rp2a03b->space(AS_PROGRAM).install_write_tap( + 0x4000, 0x4017, + "rp2a03b_conflict_w", + [this] (offs_t offset, u8 &data, u8 mem_mask) + { + // write to RAM + m_dev_rp2a03b->space(AS_PROGRAM).write_byte(offset & 0x07ff, data); + }, + &m_dkong3_tap[1]); +} + void dkong_state::init_dkong3hs() { + init_dkong3(); + m_decrypted = std::make_unique(0x10000); braze_decrypt_rom(m_decrypted.get()); @@ -3749,10 +3775,10 @@ GAME( 1982, dkingjr, dkongjr, dkongjr, dkongjr, dkong_state, init_dkingjr, ROT270, "bootleg", "Donkey King Jr. (bootleg of Donkey Kong Jr.)", MACHINE_SUPPORTS_SAVE ) GAME( 1982, maguila, dkongjr, dkongjr, dkongjr, dkong_state, init_dkingjr, ROT270, "bootleg (Aguipa)", "Up Maguila (bootleg of Donkey Kong Jr.)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, dkong3, 0, dkong3, dkong3, dkong_state, empty_init, ROT270, "Nintendo of America", "Donkey Kong 3 (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, dkong3j, dkong3, dkong3, dkong3, dkong_state, empty_init, ROT270, "Nintendo", "Donkey Kong 3 (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, dkong3, 0, dkong3, dkong3, dkong_state, init_dkong3, ROT270, "Nintendo of America", "Donkey Kong 3 (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, dkong3j, dkong3, dkong3, dkong3, dkong_state, init_dkong3, ROT270, "Nintendo", "Donkey Kong 3 (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1984, dkong3b, dkong3, dkong3b, dkong3b, dkong_state, empty_init, ROT270, "bootleg", "Donkey Kong 3 (bootleg on Donkey Kong Jr. hardware)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, dkong3hs, dkong3, dk3_braze, dkong3, dkong_state, init_dkong3hs, ROT270, "hack (Braze Technologies)", "Donkey Kong High Score Kit (hack,V1.0a)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, dkong3hs, dkong3, dk3_braze, dkong3, dkong_state, init_dkong3hs, ROT270, "hack (Braze Technologies)", "Donkey Kong High Score Kit (hack,V1.0a)", MACHINE_SUPPORTS_SAVE ) GAME( 1983, pestplce, mario, pestplce, pestplce, dkong_state, empty_init, ROT0, "bootleg", "Pest Place", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/dkong.h mame-0.251+dfsg.1/src/mame/nintendo/dkong.h --- mame-0.250+dfsg.1/src/mame/nintendo/dkong.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/dkong.h 2022-12-29 14:20:09.000000000 +0000 @@ -70,8 +70,6 @@ * CONSTANTS ****************************************************************************/ -#define HARDWARE_TYPE_TAG "HARDWARE_TYPE" - enum { HARDWARE_TKG04 = 0, @@ -119,19 +117,6 @@ , m_video_ram(*this,"video_ram") , m_sprite_ram(*this,"sprite_ram") , m_snd_rom(*this, "soundcpu") - , m_vidhw(DKONG_BOARD) - , m_sig30Hz(0) - , m_star_ff(0) - , m_blue_level(0) - , m_cv1(0) - , m_cv2(0) - , m_vg1(0) - , m_vg2(0) - , m_vg3(0) - , m_cv3(0) - , m_cv4(0) - , m_vc17(0) - , m_pixelcnt(0) , m_gfxdecode(*this, "gfxdecode") , m_screen(*this, "screen") , m_palette(*this, "palette") @@ -172,6 +157,7 @@ void init_drakton(); void init_dkonghs(); void init_dkongx(); + void init_dkong3(); void init_dkong3hs(); DECLARE_WRITE_LINE_MEMBER(dk_braze_a15); @@ -195,65 +181,70 @@ required_shared_ptr m_sprite_ram; /* machine states */ - uint8_t m_hardware_type = 0; - uint8_t m_nmi_mask = 0U; + uint8_t m_hardware_type = 0; + uint8_t m_nmi_mask = 0U; std::unique_ptr m_decrypted; /* sound state */ - optional_region_ptr m_snd_rom; + optional_region_ptr m_snd_rom; /* video state */ - tilemap_t *m_bg_tilemap = nullptr; + tilemap_t *m_bg_tilemap = nullptr; - bitmap_ind16 m_bg_bits; - const uint8_t * m_color_codes = nullptr; - emu_timer * m_scanline_timer = nullptr; - int8_t m_vidhw; /* Selected video hardware RS Conversion / TKG04 */ + bitmap_ind16 m_bg_bits; + const uint8_t *m_color_codes = nullptr; + emu_timer *m_scanline_timer = nullptr; + int8_t m_vidhw = DKONG_BOARD; // Selected video hardware RS Conversion / TKG04 /* radar scope */ - - uint8_t * m_gfx4 = nullptr; - uint8_t * m_gfx3 = nullptr; + uint8_t *m_gfx4 = nullptr; + uint8_t *m_gfx3 = nullptr; int m_gfx3_len = 0; - uint8_t m_sig30Hz; - uint8_t m_lfsr_5I = 0U; - uint8_t m_grid_sig = 0U; - uint8_t m_rflip_sig = 0U; - uint8_t m_star_ff; - uint8_t m_blue_level; - double m_cd4049_a = 0; - double m_cd4049_b = 0; + uint8_t m_sig30Hz = 0; + uint8_t m_lfsr_5I = 0; + uint8_t m_grid_sig = 0; + uint8_t m_rflip_sig = 0; + uint8_t m_star_ff = 0; + uint8_t m_blue_level = 0; + double m_cd4049_a = 0.0; + double m_cd4049_b = 0.0; /* Specific states */ - int8_t m_decrypt_counter = 0; + int8_t m_decrypt_counter = 0; /* 2650 protection */ - uint8_t m_protect_type = 0U; - uint8_t m_hunchloopback = 0U; - uint8_t m_prot_cnt = 0U; - uint8_t m_main_fo = 0U; + uint8_t m_protect_type = 0; + uint8_t m_hunchloopback = 0; + uint8_t m_prot_cnt = 0; + uint8_t m_main_fo = 0; /* Save state relevant */ - uint8_t m_gfx_bank = 0U; - uint8_t m_palette_bank = 0U; - uint8_t m_grid_on = 0U; - uint16_t m_grid_col = 0U; - uint8_t m_sprite_bank = 0U; - uint8_t m_dma_latch = 0U; - uint8_t m_flip = 0U; + uint8_t m_gfx_bank = 0; + uint8_t m_palette_bank = 0; + uint8_t m_grid_on = 0; + uint16_t m_grid_col = 0; + uint8_t m_sprite_bank = 0; + uint8_t m_dma_latch = 0; + uint8_t m_flip = 0; /* radarscp_step */ - double m_cv1; - double m_cv2; - double m_vg1; - double m_vg2; - double m_vg3; - double m_cv3; - double m_cv4; - double m_vc17; - int m_pixelcnt; + double m_cv1 = 0.0; + double m_cv2 = 0.0; + double m_vg1 = 0.0; + double m_vg2 = 0.0; + double m_vg3 = 0.0; + double m_cv3 = 0.0; + double m_cv4 = 0.0; + double m_vc17 = 0.0; + int m_pixelcnt = 0; + + /* radarscp_scanline */ + int m_counter = 0; + + /* reverse address lookup map - hunchbkd */ + int16_t m_rev_map[0x200] = { }; required_device m_gfxdecode; required_device m_screen; @@ -262,12 +253,8 @@ optional_device m_dma8257; memory_bank_creator m_bank1; memory_bank_creator m_bank2; + memory_passthrough_handler m_dkong3_tap[2]; - /* radarscp_scanline */ - int m_counter = 0; - - /* reverse address lookup map - hunchbkd */ - int16_t m_rev_map[0x200]; uint8_t hb_dma_read_byte(offs_t offset); void hb_dma_write_byte(offs_t offset, uint8_t data); void dkong3_coin_counter_w(offs_t offset, uint8_t data); @@ -357,7 +344,6 @@ void check_palette(void); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, uint32_t mask_bank, uint32_t shift_bits); void radarscp_draw_background(bitmap_ind16 &bitmap, const rectangle &cliprect); - }; #endif // MAME_INCLUDES_DKONG_H diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/famibox.cpp mame-0.251+dfsg.1/src/mame/nintendo/famibox.cpp --- mame-0.250+dfsg.1/src/mame/nintendo/famibox.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/famibox.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -126,7 +126,6 @@ uint8_t m_money_reg = 0; void set_mirroring(int mirroring); - void sprite_dma_w(address_space &space, uint8_t data); uint8_t famibox_IN0_r(); uint8_t famibox_IN1_r(); void famibox_IN0_w(uint8_t data); @@ -172,19 +171,6 @@ /****************************************************** - NES interface - -*******************************************************/ - -void famibox_state::sprite_dma_w(address_space &space, uint8_t data) -{ - int source = data & 7; - m_ppu->spriteram_dma(space, source); -} - - -/****************************************************** - Inputs *******************************************************/ @@ -396,7 +382,7 @@ { map(0x0000, 0x1fff).ram(); map(0x2000, 0x3fff).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); - map(0x4014, 0x4014).w(FUNC(famibox_state::sprite_dma_w)); + map(0x4014, 0x4014).w(m_ppu, FUNC(ppu2c0x_device::spriteram_dma)); map(0x4016, 0x4016).rw(FUNC(famibox_state::famibox_IN0_r), FUNC(famibox_state::famibox_IN0_w)); // IN0 - input port 1 map(0x4017, 0x4017).r(FUNC(famibox_state::famibox_IN1_r)); // IN1 - input port 2 / PSG second control register map(0x5000, 0x5fff).rw(FUNC(famibox_state::famibox_system_r), FUNC(famibox_state::famibox_system_w)); diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/multigam.cpp mame-0.251+dfsg.1/src/mame/nintendo/multigam.cpp --- mame-0.250+dfsg.1/src/mame/nintendo/multigam.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/multigam.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -191,7 +191,6 @@ uint8_t m_supergm3_prg_bank; uint8_t m_supergm3_chr_bank; - void sprite_dma_w(address_space &space, uint8_t data); uint8_t multigam_IN0_r(); void multigam_IN0_w(uint8_t data); uint8_t multigam_IN1_r(); @@ -281,18 +280,6 @@ } } -/****************************************************** - - NES interface - -*******************************************************/ - -void multigam_state::sprite_dma_w(address_space &space, uint8_t data) -{ - int source = (data & 7); - m_ppu->spriteram_dma(space, source); -} - /****************************************************** @@ -395,7 +382,7 @@ map(0x0000, 0x07ff).ram(); /* NES RAM */ map(0x0800, 0x0fff).ram(); /* additional RAM */ map(0x2000, 0x3fff).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); - map(0x4014, 0x4014).w(FUNC(multigam_state::sprite_dma_w)); + map(0x4014, 0x4014).w(m_ppu, FUNC(ppu2c0x_device::spriteram_dma)); map(0x4016, 0x4016).rw(FUNC(multigam_state::multigam_IN0_r), FUNC(multigam_state::multigam_IN0_w)); /* IN0 - input port 1 */ map(0x4017, 0x4017).r(FUNC(multigam_state::multigam_IN1_r)); /* IN1 - input port 2 / PSG second control register */ map(0x5000, 0x5ffe).rom(); @@ -414,7 +401,7 @@ map(0x2000, 0x3fff).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); map(0x3000, 0x3000).w(FUNC(multigam_state::multigam_switch_prg_rom)); map(0x3fff, 0x3fff).w(FUNC(multigam_state::multigam_switch_gfx_rom)); - map(0x4014, 0x4014).w(FUNC(multigam_state::sprite_dma_w)); + map(0x4014, 0x4014).w(m_ppu, FUNC(ppu2c0x_device::spriteram_dma)); map(0x4016, 0x4016).rw(FUNC(multigam_state::multigam_IN0_r), FUNC(multigam_state::multigam_IN0_w)); /* IN0 - input port 1 */ map(0x4017, 0x4017).r(FUNC(multigam_state::multigam_IN1_r)); /* IN1 - input port 2 / PSG second control register */ map(0x5000, 0x5ffe).rom(); @@ -686,7 +673,7 @@ map(0x0000, 0x07ff).ram(); /* NES RAM */ map(0x0800, 0x0fff).ram(); /* additional RAM */ map(0x2000, 0x3fff).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); - map(0x4014, 0x4014).w(FUNC(multigam_state::sprite_dma_w)); + map(0x4014, 0x4014).w(m_ppu, FUNC(ppu2c0x_device::spriteram_dma)); map(0x4016, 0x4016).rw(FUNC(multigam_state::multigam_IN0_r), FUNC(multigam_state::multigam_IN0_w)); /* IN0 - input port 1 */ map(0x4017, 0x4017).r(FUNC(multigam_state::multigam_IN1_r)); /* IN1 - input port 2 / PSG second control register */ map(0x5001, 0x5001).w(FUNC(multigam_state::multigm3_switch_prg_rom)); @@ -980,7 +967,7 @@ map(0x0000, 0x07ff).ram(); /* NES RAM */ map(0x0800, 0x0fff).ram(); /* additional RAM */ map(0x2000, 0x3fff).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); - map(0x4014, 0x4014).w(FUNC(multigam_state::sprite_dma_w)); + map(0x4014, 0x4014).w(m_ppu, FUNC(ppu2c0x_device::spriteram_dma)); map(0x4016, 0x4016).rw(FUNC(multigam_state::multigam_IN0_r), FUNC(multigam_state::multigam_IN0_w)); /* IN0 - input port 1 */ map(0x4017, 0x4017).r(FUNC(multigam_state::multigam_IN1_r)); /* IN1 - input port 2 / PSG second control register */ map(0x4fff, 0x4fff).portr("IN0"); diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/nes_arcade_bl.cpp mame-0.251+dfsg.1/src/mame/nintendo/nes_arcade_bl.cpp --- mame-0.250+dfsg.1/src/mame/nintendo/nes_arcade_bl.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/nes_arcade_bl.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -182,7 +182,7 @@ { map(0x0000, 0x07ff).mirror(0x1800).ram(); map(0x2000, 0x3fff).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); - map(0x4014, 0x4014).lw8(NAME([this] (address_space &space, u8 data) { m_ppu->spriteram_dma(space, data); })); + map(0x4014, 0x4014).w(m_ppu, FUNC(ppu2c0x_device::spriteram_dma)); map(0x4016, 0x4016).rw(FUNC(nes_arcade_bl_state::in_r<0>), FUNC(nes_arcade_bl_state::in0_w)); // IN0 - input port 1 map(0x4017, 0x4017).r(FUNC(nes_arcade_bl_state::in_r<1>)); // IN1 - input port 2 / PSG second control register diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/nes_clone.cpp mame-0.251+dfsg.1/src/mame/nintendo/nes_clone.cpp --- mame-0.250+dfsg.1/src/mame/nintendo/nes_clone.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/nes_clone.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -35,8 +35,6 @@ virtual void machine_reset() override; virtual void video_start() override; - void sprite_dma_w(address_space &space, uint8_t data); - virtual uint8_t in0_r(); virtual uint8_t in1_r(); virtual void in0_w(uint8_t data); @@ -246,12 +244,6 @@ }; -void nes_clone_state::sprite_dma_w(address_space &space, uint8_t data) -{ - int source = (data & 7); - m_ppu->spriteram_dma(space, source); -} - // Standard NES style inputs (not using bus device as there are no real NES controller ports etc. these are all-in-one units and can be custom uint8_t nes_clone_state::in0_r() { @@ -292,10 +284,10 @@ map(0x0000, 0x07ff).ram(); map(0x2000, 0x3fff).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); + map(0x4014, 0x4014).w(m_ppu, FUNC(ppu2c0x_device::spriteram_dma)); + map(0x4016, 0x4016).rw(FUNC(nes_clone_state::in0_r), FUNC(nes_clone_state::in0_w)); map(0x4017, 0x4017).r(FUNC(nes_clone_state::in1_r)); - - map(0x4014, 0x4014).w(FUNC(nes_clone_state::sprite_dma_w)); } void nes_clone_state::nes_clone_map(address_map& map) diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/nes.cpp mame-0.251+dfsg.1/src/mame/nintendo/nes.cpp --- mame-0.250+dfsg.1/src/mame/nintendo/nes.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/nes.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -20,16 +20,11 @@ #include "speaker.h" -void nes_state::nes_vh_sprite_dma_w(address_space &space, uint8_t data) -{ - m_ppu->spriteram_dma(space, data); -} - void nes_state::nes_map(address_map &map) { map(0x0000, 0x07ff).ram().mirror(0x1800).share("mainram"); // RAM map(0x2000, 0x3fff).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); // PPU registers - map(0x4014, 0x4014).w(FUNC(nes_state::nes_vh_sprite_dma_w)); // stupid address space hole + map(0x4014, 0x4014).w(m_ppu, FUNC(ppu2c0x_device::spriteram_dma)); // stupid address space hole map(0x4016, 0x4016).rw(FUNC(nes_state::nes_in0_r), FUNC(nes_state::nes_in0_w)); // IN0 - input port 1 map(0x4017, 0x4017).r(FUNC(nes_state::nes_in1_r)); // IN1 - input port 2 // 0x4100-0x5fff -> LOW HANDLER defined on a pcb base diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/nes.h mame-0.251+dfsg.1/src/mame/nintendo/nes.h --- mame-0.250+dfsg.1/src/mame/nintendo/nes.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/nes.h 2022-12-29 14:20:09.000000000 +0000 @@ -64,7 +64,6 @@ uint8_t fc_in0_r(); uint8_t fc_in1_r(); void fc_in0_w(uint8_t data); - void nes_vh_sprite_dma_w(address_space &space, uint8_t data); virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/nes_m82.cpp mame-0.251+dfsg.1/src/mame/nintendo/nes_m82.cpp --- mame-0.250+dfsg.1/src/mame/nintendo/nes_m82.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/nes_m82.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -131,7 +131,7 @@ { map(0x0000, 0x07ff).mirror(0x1800).ram(); map(0x2000, 0x3fff).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); - map(0x4014, 0x4014).lw8(NAME([this] (address_space &space, u8 data) { m_ppu->spriteram_dma(space, data); })); + map(0x4014, 0x4014).w(m_ppu, FUNC(ppu2c0x_device::spriteram_dma)); map(0x4016, 0x4016).rw(FUNC(m82_state::m82_in0_r), FUNC(m82_state::m82_in0_w)); // IN0 - input port 1 map(0x4017, 0x4017).r(FUNC(m82_state::m82_in1_r)); // IN1 - input port 2 / PSG second control register diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/nes_m8.cpp mame-0.251+dfsg.1/src/mame/nintendo/nes_m8.cpp --- mame-0.250+dfsg.1/src/mame/nintendo/nes_m8.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/nes_m8.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -187,7 +187,7 @@ { map(0x0000, 0x07ff).mirror(0x1800).ram(); map(0x2000, 0x3fff).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); - map(0x4014, 0x4014).lw8(NAME([this] (address_space &space, u8 data) { m_ppu->spriteram_dma(space, data); })); + map(0x4014, 0x4014).w(m_ppu, FUNC(ppu2c0x_device::spriteram_dma)); map(0x4016, 0x4016).rw(FUNC(m8_state::m8_in0_r), FUNC(m8_state::m8_in0_w)); // IN0 - input port 1 map(0x4017, 0x4017).r(FUNC(m8_state::m8_in1_r)); // IN1 - input port 2 / PSG second control register diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/nes_sh6578.cpp mame-0.251+dfsg.1/src/mame/nintendo/nes_sh6578.cpp --- mame-0.250+dfsg.1/src/mame/nintendo/nes_sh6578.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/nes_sh6578.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -55,8 +55,6 @@ virtual void machine_reset() override; virtual void video_start() override; - void sprite_dma_w(address_space &space, uint8_t data); - virtual void io_w(uint8_t data); virtual void extio_w(uint8_t data); bool m_isbanked; @@ -106,10 +104,6 @@ uint8_t io0_r(); uint8_t io1_r(); - uint8_t psg1_4014_r(); - uint8_t psg1_4015_r(); - void psg1_4015_w(uint8_t data); - void psg1_4017_w(uint8_t data); uint8_t apu_read_mem(offs_t offset); DECLARE_WRITE_LINE_MEMBER(apu_irq); @@ -183,11 +177,6 @@ m_fullrom->write8(address, data); } -void nes_sh6578_state::sprite_dma_w(address_space &space, uint8_t data) -{ - m_ppu->spriteram_dma(space, data); -} - uint8_t nes_sh6578_state::bankswitch_r(offs_t offset) { return m_bankswitch[offset]; @@ -452,26 +441,6 @@ -uint8_t nes_sh6578_state::psg1_4014_r() -{ - return m_apu->read(0x14); -} - -uint8_t nes_sh6578_state::psg1_4015_r() -{ - return m_apu->read(0x15); -} - -void nes_sh6578_state::psg1_4015_w(uint8_t data) -{ - m_apu->write(0x15, data); -} - -void nes_sh6578_state::psg1_4017_w(uint8_t data) -{ - m_apu->write(0x17, data); -} - WRITE_LINE_MEMBER(nes_sh6578_state::apu_irq) { // unimplemented @@ -492,11 +461,11 @@ map(0x2040, 0x207f).rw(m_ppu, FUNC(ppu_sh6578_device::palette_read), FUNC(ppu_sh6578_device::palette_write)); - map(0x4000, 0x4013).rw(m_apu, FUNC(nesapu_device::read), FUNC(nesapu_device::write)); - map(0x4014, 0x4014).rw(FUNC(nes_sh6578_state::psg1_4014_r), FUNC(nes_sh6578_state::sprite_dma_w)); - map(0x4015, 0x4015).rw(FUNC(nes_sh6578_state::psg1_4015_r), FUNC(nes_sh6578_state::psg1_4015_w)); + map(0x4000, 0x4017).w(m_apu, FUNC(nesapu_device::write)); + map(0x4014, 0x4014).w(m_ppu, FUNC(ppu_sh6578_device::spriteram_dma)); + map(0x4015, 0x4015).r(m_apu, FUNC(nesapu_device::status_r)); map(0x4016, 0x4016).rw(FUNC(nes_sh6578_state::io0_r), FUNC(nes_sh6578_state::io_w)); - map(0x4017, 0x4017).rw(FUNC(nes_sh6578_state::io1_r), FUNC(nes_sh6578_state::psg1_4017_w)); + map(0x4017, 0x4017).r(FUNC(nes_sh6578_state::io1_r)); map(0x4020, 0x4020).w(FUNC(nes_sh6578_state::timing_setting_control_w)); //4021 write keyboard output port diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/nes_vt369_vtunknown_soc.cpp mame-0.251+dfsg.1/src/mame/nintendo/nes_vt369_vtunknown_soc.cpp --- mame-0.250+dfsg.1/src/mame/nintendo/nes_vt369_vtunknown_soc.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/nes_vt369_vtunknown_soc.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -101,12 +101,12 @@ map(0x2000, 0x2007).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); // standard PPU registers map(0x2010, 0x201f).rw(m_ppu, FUNC(ppu_vt03_device::read_extended), FUNC(ppu_vt03_device::write_extended)); // extra VT PPU registers - map(0x4000, 0x4013).rw(m_apu, FUNC(nesapu_device::read), FUNC(nesapu_device::write)); + map(0x4000, 0x4017).w(m_apu, FUNC(nes_apu_vt_device::write)); - map(0x4014, 0x4014).r(FUNC(nes_vt369_soc_device::psg1_4014_r)).w(FUNC(nes_vt369_soc_device::vt_dma_w)); - map(0x4015, 0x4015).rw(FUNC(nes_vt369_soc_device::psg1_4015_r), FUNC(nes_vt369_soc_device::psg1_4015_w)); // PSG status / first control register + map(0x4014, 0x4014).w(FUNC(nes_vt369_soc_device::vt_dma_w)); + map(0x4015, 0x4015).r(m_apu, FUNC(nes_apu_vt_device::status_r)); // PSG status / first control register map(0x4016, 0x4016).rw(FUNC(nes_vt369_soc_device::in0_r), FUNC(nes_vt369_soc_device::in0_w)); - map(0x4017, 0x4017).r(FUNC(nes_vt369_soc_device::in1_r)).w(FUNC(nes_vt369_soc_device::psg1_4017_w)); + map(0x4017, 0x4017).r(FUNC(nes_vt369_soc_device::in1_r)); map(0x4034, 0x4034).w(FUNC(nes_vt369_soc_device::vt03_4034_w)); // secondary DMA diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/nes_vt_soc.cpp mame-0.251+dfsg.1/src/mame/nintendo/nes_vt_soc.cpp --- mame-0.250+dfsg.1/src/mame/nintendo/nes_vt_soc.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/nes_vt_soc.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -849,29 +849,6 @@ //logerror("%s: vt03_8000_mapper_w (%04x) %02x\n", machine().describe_context(), offset+0x8000, data ); } -/* APU plumbing, this is because we have a plain M6502 core in the VT03, otherwise this is handled in the core */ - -uint8_t nes_vt02_vt03_soc_device::psg1_4014_r() -{ - //return m_apu->read(0x14); - return 0x00; -} - -uint8_t nes_vt02_vt03_soc_device::psg1_4015_r() -{ - return m_apu->read(0x15); -} - -void nes_vt02_vt03_soc_device::psg1_4015_w(uint8_t data) -{ - m_apu->write(0x15, data); -} - -void nes_vt02_vt03_soc_device::psg1_4017_w(uint8_t data) -{ - m_apu->write(0x17, data); -} - // early units (VT03?) have a DMA bug in NTSC mode void nes_vt02_vt03_soc_device::vt_dma_w(uint8_t data) { @@ -1066,13 +1043,11 @@ map(0x2000, 0x2007).mirror(0x00e0).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); // standard PPU registers map(0x2010, 0x201f).mirror(0x00e0).rw(m_ppu, FUNC(ppu_vt03_device::read_extended), FUNC(ppu_vt03_device::write_extended)); // extra VT PPU registers - map(0x4000, 0x4013).rw(m_apu, FUNC(nesapu_device::read), FUNC(nesapu_device::write)); - - map(0x4014, 0x4014).r(FUNC(nes_vt02_vt03_soc_device::psg1_4014_r)).w(FUNC(nes_vt02_vt03_soc_device::vt_dma_w)); - map(0x4015, 0x4015).rw(FUNC(nes_vt02_vt03_soc_device::psg1_4015_r), FUNC(nes_vt02_vt03_soc_device::psg1_4015_w)); // PSG status / first control register + map(0x4000, 0x4017).w(m_apu, FUNC(nes_apu_vt_device::write)); + map(0x4014, 0x4014).w(FUNC(nes_vt02_vt03_soc_device::vt_dma_w)); + map(0x4015, 0x4015).r(m_apu, FUNC(nes_apu_vt_device::status_r)); // PSG status / first control register map(0x4016, 0x4016).rw(FUNC(nes_vt02_vt03_soc_device::in0_r), FUNC(nes_vt02_vt03_soc_device::in0_w)); - map(0x4017, 0x4017).r(FUNC(nes_vt02_vt03_soc_device::in1_r)).w(FUNC(nes_vt02_vt03_soc_device::psg1_4017_w)); - + map(0x4017, 0x4017).r(FUNC(nes_vt02_vt03_soc_device::in1_r)); map(0x4034, 0x4034).w(FUNC(nes_vt02_vt03_soc_device::vt03_4034_w)); // secondary DMA diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/nes_vt_soc.h mame-0.251+dfsg.1/src/mame/nintendo/nes_vt_soc.h --- mame-0.250+dfsg.1/src/mame/nintendo/nes_vt_soc.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/nes_vt_soc.h 2022-12-29 14:20:09.000000000 +0000 @@ -87,10 +87,6 @@ void nt_w(offs_t offset, uint8_t data); int calculate_real_video_address(int addr, int extended, int readtype); void scrambled_8000_w(uint16_t offset, uint8_t data); - uint8_t psg1_4014_r(); - uint8_t psg1_4015_r(); - void psg1_4015_w(uint8_t data); - void psg1_4017_w(uint8_t data); void vt_dma_w(uint8_t data); void do_dma(uint8_t data, bool has_ntsc_bug); void vt03_4034_w(uint8_t data); diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/playch10.cpp mame-0.251+dfsg.1/src/mame/nintendo/playch10.cpp --- mame-0.250+dfsg.1/src/mame/nintendo/playch10.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/playch10.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -324,6 +324,7 @@ , m_in(*this, "P%u", 1U) , m_gunx(*this, "GUNX") , m_guny(*this, "GUNY") + , m_trigger(*this, "TRIGGER") , m_nt_page(*this, "nt_page%u", 0U) , m_prg_banks(*this, "prg%u", 0U) , m_prg_view(*this, "prg_view") @@ -367,7 +368,6 @@ DECLARE_WRITE_LINE_MEMBER(up8w_w); u8 ram_8w_r(offs_t offset); void ram_8w_w(offs_t offset, u8 data); - void sprite_dma_w(address_space &space, u8 data); void time_w(offs_t offset, u8 data); DECLARE_WRITE_LINE_MEMBER(sdcs_w); DECLARE_WRITE_LINE_MEMBER(cntrl_mask_w); @@ -451,6 +451,7 @@ required_ioport_array<2> m_in; optional_ioport m_gunx; optional_ioport m_guny; + optional_ioport m_trigger; required_memory_bank_array<4> m_nt_page; std::unique_ptr m_nt_ram; @@ -646,11 +647,6 @@ m_ram_8w[offset] = data; } -void playch10_state::sprite_dma_w(address_space &space, u8 data) -{ - m_ppu->spriteram_dma(space, data); -} - // Only used in single monitor bios void playch10_state::time_w(offs_t offset, u8 data) @@ -864,14 +860,12 @@ // do the gun thing if (m_pc10_gun_controller) { - int trigger = m_in[0]->read(); - if (!m_sensor->detect_light(m_gunx->read(), m_guny->read())) ret |= 0x08; // now, add the trigger if not masked if (!m_cntrl_mask) - ret |= (trigger & 2) << 3; + ret |= m_trigger->read() << 4; } // some games expect bit 6 to be set because the last entry on the data bus shows up @@ -1519,7 +1513,7 @@ { map(0x0000, 0x07ff).mirror(0x1800).ram(); map(0x2000, 0x3fff).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); - map(0x4014, 0x4014).w(FUNC(playch10_state::sprite_dma_w)); + map(0x4014, 0x4014).w(m_ppu, FUNC(ppu2c0x_device::spriteram_dma)); map(0x4016, 0x4016).rw(FUNC(playch10_state::pc10_in0_r), FUNC(playch10_state::pc10_in0_w)); map(0x4017, 0x4017).r(FUNC(playch10_state::pc10_in1_r)); // IN1 - input port 2 / PSG second control register // Games that don't bank PRG @@ -1840,18 +1834,18 @@ PORT_DIPSETTING( 0x80, DEF_STR( Free_Play ) ) PORT_START("P1") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Button A") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Button B") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("%p A") PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("%p B") PORT_PLAYER(1) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START2 ) PORT_NAME("Game Select") PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START1 ) PORT_NAME("Start") - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_START("P2") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P2 Button A") PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P2 Button B") PORT_PLAYER(2) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("%p A") PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("%p B") PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) // wired to 1p select button PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) // wired to 1p start button PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) @@ -1864,6 +1858,9 @@ static INPUT_PORTS_START( playc10g ) PORT_INCLUDE(playch10) + PORT_START("TRIGGER") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Gun Trigger") + PORT_START("GUNX") // IN2 - FAKE - Gun X pos PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(30) PORT_MINMAX(0, 255) diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/punchout.cpp mame-0.251+dfsg.1/src/mame/nintendo/punchout.cpp --- mame-0.250+dfsg.1/src/mame/nintendo/punchout.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/punchout.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -256,6 +256,7 @@ void punchout_state::punchout_sound_map(address_map &map) { map(0x0000, 0x07ff).ram(); + map(0x4000, 0x400f).nopr(); map(0x4016, 0x4016).r("soundlatch", FUNC(generic_latch_8_device::read)); map(0x4017, 0x4017).r("soundlatch2", FUNC(generic_latch_8_device::read)); map(0xe000, 0xffff).rom(); diff -Nru mame-0.250+dfsg.1/src/mame/nintendo/vsnes.cpp mame-0.251+dfsg.1/src/mame/nintendo/vsnes.cpp --- mame-0.250+dfsg.1/src/mame/nintendo/vsnes.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nintendo/vsnes.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -186,7 +186,6 @@ virtual void machine_reset() override; - template void sprite_dma_w(address_space &space, u8 data); template void vsnes_coin_counter_w(offs_t offset, u8 data); template u8 vsnes_coin_counter_r(offs_t offset); template void vsnes_in0_w(u8 data); @@ -356,15 +355,6 @@ template -void vs_base_state::sprite_dma_w(address_space &space, u8 data) -{ - if (Side == MAIN) - m_ppu1->spriteram_dma(space, data & 0x07); - else - m_ppu2->spriteram_dma(space, data & 0x07); -} - -template void vs_base_state::vsnes_coin_counter_w(offs_t offset, u8 data) { machine().bookkeeping().coin_counter_w(Side, data & 0x01); @@ -996,7 +986,7 @@ { map(0x0000, 0x07ff).mirror(0x1800).ram(); map(0x2000, 0x3fff).rw(m_ppu1, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); - map(0x4014, 0x4014).w(FUNC(vs_base_state::sprite_dma_w
)); + map(0x4014, 0x4014).w(m_ppu1, FUNC(ppu2c0x_device::spriteram_dma)); map(0x4016, 0x4016).rw(FUNC(vs_base_state::vsnes_in0_r
), FUNC(vs_base_state::vsnes_in0_w
)); map(0x4017, 0x4017).r(FUNC(vs_base_state::vsnes_in1_r
)); // IN1 - input port 2 / PSG second control register map(0x4020, 0x5fff).rw(FUNC(vs_base_state::vsnes_coin_counter_r
), FUNC(vs_base_state::vsnes_coin_counter_w
)); @@ -1015,7 +1005,7 @@ { map(0x0000, 0x07ff).mirror(0x1800).ram(); map(0x2000, 0x3fff).rw(m_ppu2, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); - map(0x4014, 0x4014).w(FUNC(vs_base_state::sprite_dma_w)); + map(0x4014, 0x4014).w(m_ppu2, FUNC(ppu2c0x_device::spriteram_dma)); map(0x4016, 0x4016).rw(FUNC(vs_base_state::vsnes_in0_r), FUNC(vs_base_state::vsnes_in0_w)); map(0x4017, 0x4017).r(FUNC(vs_base_state::vsnes_in1_r)); // IN1 - input port 2 / PSG second control register map(0x4020, 0x5fff).rw(FUNC(vs_base_state::vsnes_coin_counter_r), FUNC(vs_base_state::vsnes_coin_counter_w)); @@ -1231,10 +1221,12 @@ static INPUT_PORTS_START( vsnes_zapper ) PORT_START("IN0") PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) // low 6 bits always read 0b010000 + PORT_CONFNAME( 0x10, 0x10, "Gun Alarm Wire" ) // ALM wire (ignored by Gumshoe and Freedom Force?) + PORT_CONFSETTING( 0x00, "Disconnected" ) + PORT_CONFSETTING( 0x10, "Connected" ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) // sprite hit - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // gun trigger + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) // gun HIT + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // gun TRG PORT_START("IN1") PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) @@ -1296,7 +1288,7 @@ PORT_DIPSETTING( 0x08, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x10, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x18, DEF_STR( Hard ) ) - PORT_DIPNAME( 0xE0, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!6,!7,!8") + PORT_DIPNAME( 0xe0, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!6,!7,!8") PORT_DIPSETTING( 0xc0, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0xa0, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) ) @@ -1341,7 +1333,7 @@ Tie 0 0 Lose Hole -1 -2 */ - PORT_DIPNAME( 0x60, 0x00, "Starting Points" ) PORT_DIPLOCATION("SW1:!6,7") + PORT_DIPNAME( 0x60, 0x20, "Starting Points" ) PORT_DIPLOCATION("SW1:!6,7") PORT_DIPSETTING( 0x00, "10" ) PORT_DIPSETTING( 0x40, "13" ) PORT_DIPSETTING( 0x20, "16" ) @@ -1351,6 +1343,17 @@ PORT_DIPSETTING( 0x80, DEF_STR( Hard ) ) INPUT_PORTS_END +static INPUT_PORTS_START( golfj ) + PORT_INCLUDE( golf ) + + PORT_MODIFY("DSW0") + PORT_DIPNAME( 0x60, 0x20, "Starting Points" ) PORT_DIPLOCATION("SW1:!6,7") + PORT_DIPSETTING( 0x00, "300" ) + PORT_DIPSETTING( 0x40, "400" ) + PORT_DIPSETTING( 0x20, "500" ) + PORT_DIPSETTING( 0x60, "600" ) +INPUT_PORTS_END + // Same as 'golf', but 4 start buttons // FIXME: since UniSystems only have P1/P2 start buttons this implies the golf4s versions are for DualSystem only static INPUT_PORTS_START( golf4s ) @@ -1557,12 +1560,12 @@ PORT_INCLUDE( vsnes_dual_rev ) PORT_START("DSW0") // bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 - PORT_DIPNAME( 0x03, 0x02, "Player Defense Strength" ) PORT_DIPLOCATION("SW1:!1,!2") + PORT_DIPNAME( 0x03, 0x01, "Player Defense Strength" ) PORT_DIPLOCATION("SW1:!1,!2") PORT_DIPSETTING( 0x00, "Weak" ) PORT_DIPSETTING( 0x02, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x01, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x03, "Strong" ) - PORT_DIPNAME( 0x0c, 0x08, "Player Offense Strength" ) PORT_DIPLOCATION("SW1:!3,!4") + PORT_DIPNAME( 0x0c, 0x04, "Player Offense Strength" ) PORT_DIPLOCATION("SW1:!3,!4") PORT_DIPSETTING( 0x00, "Weak" ) PORT_DIPSETTING( 0x08, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x04, DEF_STR( Medium ) ) @@ -1585,7 +1588,7 @@ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x06, DEF_STR( Free_Play ) ) - PORT_DIPNAME( 0x38, 0x00, "Starting Points" ) PORT_DIPLOCATION("SW2:!4,!5,!6") + PORT_DIPNAME( 0x38, 0x30, "Starting Points" ) PORT_DIPLOCATION("SW2:!4,!5,!6") PORT_DIPSETTING( 0x00, "80 Pts" ) PORT_DIPSETTING( 0x20, "100 Pts" ) PORT_DIPSETTING( 0x10, "150 Pts" ) @@ -1776,7 +1779,7 @@ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:!7") // Damage taken PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) // Normal PORT_DIPSETTING( 0x40, DEF_STR( Hard ) ) // Double - PORT_DIPUNUSED_DIPLOC( 0x80, 0x00, "SW1:!8" ) // Manual states "Must be Set to "OFF" + PORT_DIPUNUSED_DIPLOC( 0x80, 0x00, "SW1:!8" ) // Manual states Must be Set to "OFF" INPUT_PORTS_END static INPUT_PORTS_START( iceclimb ) @@ -1945,7 +1948,7 @@ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:!4") PORT_DIPSETTING( 0x08, "2" ) PORT_DIPSETTING( 0x00, "3" ) - PORT_DIPNAME( 0x30, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:!5,!6") + PORT_DIPNAME( 0x30, 0x10, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:!5,!6") PORT_DIPSETTING( 0x00, "100 Coins" ) PORT_DIPSETTING( 0x20, "150 Coins" ) PORT_DIPSETTING( 0x10, "200 Coins" ) @@ -1953,7 +1956,7 @@ PORT_DIPNAME( 0x40, 0x00, "Timer" ) PORT_DIPLOCATION("SW1:!7") PORT_DIPSETTING( 0x00, "Slow" ) PORT_DIPSETTING( 0x40, "Fast" ) - PORT_DIPNAME( 0x80, 0x80, "Continue Lives" ) PORT_DIPLOCATION("SW1:!8") + PORT_DIPNAME( 0x80, 0x00, "Continue Lives" ) PORT_DIPLOCATION("SW1:!8") PORT_DIPSETTING( 0x80, "3" ) PORT_DIPSETTING( 0x00, "4" ) INPUT_PORTS_END @@ -1999,7 +2002,7 @@ PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x07, DEF_STR( Free_Play ) ) - PORT_DIPNAME( 0x18, 0x08, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:!4,!5") + PORT_DIPNAME( 0x18, 0x10, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:!4,!5") PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x08, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x10, DEF_STR( Medium ) ) @@ -2027,12 +2030,12 @@ PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x07, DEF_STR( Free_Play ) ) - PORT_DIPNAME( 0x18, 0x08, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:!4,!5") + PORT_DIPNAME( 0x18, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:!4,!5") PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x08, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x18, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:!6") + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:!6") PORT_DIPSETTING( 0x20, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x40, 0x00, "Bullets per Balloon" ) PORT_DIPLOCATION("SW1:!7") @@ -2203,11 +2206,11 @@ PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x07, DEF_STR( Free_Play ) ) - PORT_DIPNAME( 0x18, 0x08, "Points Timer" ) PORT_DIPLOCATION("SW1:!4,!5") - PORT_DIPSETTING( 0x00, "600 Pts" ) - PORT_DIPSETTING( 0x10, "800 Pts" ) - PORT_DIPSETTING( 0x08, "1000 Pts" ) - PORT_DIPSETTING( 0x18, "1200 Pts" ) + PORT_DIPNAME( 0x18, 0x00, "Points Timer" ) PORT_DIPLOCATION("SW1:!4,!5") + PORT_DIPSETTING( 0x00, "1000 Pts" ) + PORT_DIPSETTING( 0x10, "1500 Pts" ) + PORT_DIPSETTING( 0x08, "2000 Pts" ) + PORT_DIPSETTING( 0x18, "600 Pts" ) PORT_DIPNAME( 0x60, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:!6,!7") PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x40, DEF_STR( Normal ) ) @@ -2216,6 +2219,17 @@ PORT_DIPUNUSED_DIPLOC( 0x80, 0x00, "SW1:!8" ) INPUT_PORTS_END +static INPUT_PORTS_START( vssoccera ) + PORT_INCLUDE( vssoccer ) + + PORT_MODIFY("DSW0") + PORT_DIPNAME( 0x18, 0x18, "Points Timer" ) PORT_DIPLOCATION("SW1:!4,!5") + PORT_DIPSETTING( 0x00, "600 Pts" ) + PORT_DIPSETTING( 0x10, "800 Pts" ) + PORT_DIPSETTING( 0x08, "1000 Pts" ) + PORT_DIPSETTING( 0x18, "1200 Pts" ) +INPUT_PORTS_END + static INPUT_PORTS_START( vsgradus ) PORT_INCLUDE( vsnes_rev ) @@ -2229,7 +2243,7 @@ PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x07, DEF_STR( Free_Play ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:!4") + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:!4") PORT_DIPSETTING( 0x08, "3" ) PORT_DIPSETTING( 0x00, "4" ) PORT_DIPNAME( 0x30, 0x00, "Bonus" ) PORT_DIPLOCATION("SW1:!5,!6") @@ -2269,7 +2283,7 @@ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW1:!7") PORT_DIPSETTING( 0x40, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x80, 0x00, "Inverted input" ) PORT_DIPLOCATION("SW1:!8") + PORT_DIPNAME( 0x80, 0x00, "Inverted input" ) PORT_DIPLOCATION("SW1:!8") // Manual states Not Used - Must be Set to "OFF" PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x80, DEF_STR( On ) ) INPUT_PORTS_END @@ -2307,11 +2321,11 @@ PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) ) - PORT_DIPNAME( 0x0C, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:!3,!4") + PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:!3,!4") PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x04, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x08, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0C, DEF_STR( Very_Hard ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( Very_Hard ) ) PORT_DIPUNUSED_DIPLOC( 0x10, 0x00, "SW1:!5" ) PORT_DIPNAME( 0xe0, 0x00, "PPU Type" ) PORT_DIPLOCATION("SW1:!6,!7,!8") PORT_DIPSETTING( 0x00, "RP2C04-0003" ) @@ -3555,14 +3569,14 @@ GAME( 1987, tkoboxng, 0, vsnes, tkoboxng, vs_uni_state, init_tkoboxng, ROT0, "Namco / Data East USA", "Vs. T.K.O. Boxing", 0 ) GAME( 1984, smgolf, 0, vsnes, golf, vs_uni_state, init_vsnormal, ROT0, "Nintendo", "Vs. Stroke & Match Golf (Men Version, set GF4-2 F)", 0 ) GAME( 1984, smgolfb, smgolf, vsnes, golf4s, vs_uni_state, init_vsnormal, ROT0, "Nintendo", "Vs. Stroke & Match Golf (Men Version, set GF4-2 ?)", 0 ) -GAME( 1984, smgolfj, smgolf, vsnes, golf, vs_uni_state, init_vsnormal, ROT0, "Nintendo Co., Ltd.", "Vs. Stroke & Match Golf (Men Version) (Japan, set GF3 B)", 0 ) +GAME( 1984, smgolfj, smgolf, vsnes, golfj, vs_uni_state, init_vsnormal, ROT0, "Nintendo Co., Ltd.", "Vs. Stroke & Match Golf (Men Version) (Japan, set GF3 B)", 0 ) GAME( 1984, ladygolfe, smgolf, vsnes, golf4s, vs_uni_state, init_vsnormal, ROT0, "Nintendo", "Vs. Stroke & Match Golf (Ladies Version, set LG4 E)", 0 ) GAME( 1984, ladygolf, smgolf, vsnes, golf, vs_uni_state, init_vsnormal, ROT0, "Nintendo", "Vs. Stroke & Match Golf (Ladies Version, set LG4 ?)", 0 ) GAME( 1984, vspinbal, 0, vsnes, vspinbal, vs_uni_state, init_vsnormal, ROT0, "Nintendo", "Vs. Pinball (US, set PN4 E-1)", 0 ) GAME( 1984, vspinbalj, vspinbal, vsnes, vspinbal, vs_uni_state, init_vsnormal, ROT0, "Nintendo Co., Ltd.", "Vs. Pinball (Japan, set PN3 B)", 0 ) GAME( 1986, vsslalom, 0, vsnes, vsslalom, vs_uni_state, init_vsnormal, ROT0, "Rare Coin-It Inc.", "Vs. Slalom", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1985, vssoccer, 0, vsnes, vssoccer, vs_uni_state, init_vsnormal, ROT0, "Nintendo", "Vs. Soccer (set SC4-2 A)", 0 ) -GAME( 1985, vssoccera, vssoccer, vsnes, vssoccer, vs_uni_state, init_vsnormal, ROT0, "Nintendo", "Vs. Soccer (set SC4-3 ?)", 0 ) +GAME( 1985, vssoccera, vssoccer, vsnes, vssoccera, vs_uni_state, init_vsnormal, ROT0, "Nintendo", "Vs. Soccer (set SC4-3 ?)", 0 ) GAME( 1986, vsgradus, 0, vsnes, vsgradus, vs_uni_state, init_vskonami, ROT0, "Konami", "Vs. Gradius (US, set GR E)", 0 ) GAME( 1987, nvs_platoon, 0, vsnes, platoon, vs_uni_state, init_platoon, ROT0, "Ocean Software Limited", "Vs. Platoon", 0 ) GAME( 1987, vstetris, 0, vsnes, vstetris, vs_uni_state, init_vsnormal, ROT0, "Academysoft-Elorg", "Vs. Tetris" , 0 ) diff -Nru mame-0.250+dfsg.1/src/mame/nmk/nmkmedal.cpp mame-0.251+dfsg.1/src/mame/nmk/nmkmedal.cpp --- mame-0.250+dfsg.1/src/mame/nmk/nmkmedal.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nmk/nmkmedal.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,9 +4,12 @@ // Skeleton driver for medal games on NMK hardware. #include "emu.h" + #include "cpu/tlcs90/tlcs90.h" +#include "machine/nmk112.h" #include "sound/okim6295.h" #include "sound/okim6376.h" + #include "speaker.h" @@ -18,10 +21,10 @@ PCBs: -NMK MEC95110 - maincpu board +NMK MEC95110 - main CPU board - Toshiba TMP90C041AN - 16.5000 MHz XTAL -- maincpu ROM +- main CPU ROM - Oki M6650 - OKI ROM - 8 x connectors @@ -39,7 +42,7 @@ PCBs: -NMK MAC96112 - maincpu board, stickered 961409 +NMK MAC96112 - main CPU board, stickered 961409 - Toshiba TMP90C041AN - 16.0000 MHz XTAL - main CPU ROM @@ -49,6 +52,24 @@ - 7 x connectors Other PCBs unknown + +------- +Dream Rail by NMK + +PCBs: + +NMK MAC94104 - main CPU board, stickered 957G. 0144 +- Toshiba TMP90C041? Empty socket marked TMP041 +- 16.0000 MHz XTAL +- main CPU ROM +- Oki M6295 +- Oki ROM +- NMK005 custom +- NMK112 custom +- 2 x 8-dip banks +- 5 x connectors + +Other PCBs unknown */ @@ -92,9 +113,11 @@ , m_oki(*this, "oki") { } + void drail(machine_config &config); void hpierrot(machine_config &config); private: + void drail_mem_map(address_map &map); void mem_map(address_map &map); required_device m_oki; @@ -125,6 +148,22 @@ void hpierrot_state::mem_map(address_map &map) { map(0x0000, 0x7fff).rom().region("maincpu", 0); + //map(0xa800, 0xa80f).w() // to the mechanical parts?? or leds / lamps? + map(0xc000, 0xc7ff).ram(); +} + +void hpierrot_state::drail_mem_map(address_map &map) +{ + map(0x0000, 0x7fff).rom().region("maincpu", 0); + map(0x8004, 0x8004).portr("IN4"); // probably 1 of the 2 dip banks + map(0x8005, 0x8005).portr("IN5"); // " + map(0x8800, 0x8800).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); + map(0x8820, 0x8827).w("nmk112", FUNC(nmk112_device::okibank_w)); + map(0xa000, 0xa000).portr("IN0"); + map(0xa001, 0xa001).portr("IN1"); + map(0xa002, 0xa002).portr("IN2"); + //map(0xa800, 0xa80f).w() // to the mechanical parts?? or leds / lamps? + map(0xc000, 0xc7ff).ram(); } static INPUT_PORTS_START( trocana ) @@ -183,25 +222,47 @@ PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED) INPUT_PORTS_END + void trocana_state::trocana(machine_config &config) { - TMP90841(config, m_maincpu, 16000000 / 2); // actually TMP90C041AN + TMP90841(config, m_maincpu, 16'000'000 / 2); // actually TMP90C041AN m_maincpu->set_addrmap(AS_PROGRAM, &trocana_state::mem_map); SPEAKER(config, "mono").front_center(); - OKIM6650(config, m_oki, 16500000 / 4).add_route(ALL_OUTPUTS, "mono", 1.0); + OKIM6650(config, m_oki, 16'500'000 / 4).add_route(ALL_OUTPUTS, "mono", 1.0); } void hpierrot_state::hpierrot(machine_config &config) { - TMP90841(config, m_maincpu, 16000000 / 2); // actually TMP90C041AN + TMP90841(config, m_maincpu, 16_MHz_XTAL / 2); // actually TMP90C041AN m_maincpu->set_addrmap(AS_PROGRAM, &hpierrot_state::mem_map); SPEAKER(config, "mono").front_center(); - OKIM6295(config, m_oki, 16000000 / 16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // divider and pin not verified + OKIM6295(config, m_oki, 16_MHz_XTAL / 16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // divider and pin not verified +} + +void hpierrot_state::drail(machine_config &config) +{ + TMP90841(config, m_maincpu, 16_MHz_XTAL / 2); // exact model unknown as the socket was empty + m_maincpu->set_addrmap(AS_PROGRAM, &hpierrot_state::drail_mem_map); + + nmk112_device &nmk112(NMK112(config, "nmk112", 0)); + nmk112.set_rom0_tag("oki"); + + SPEAKER(config, "mono").front_center(); + OKIM6295(config, m_oki, 16_MHz_XTAL / 16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // divider and pin not verified } +ROM_START( drail ) // handwritten labels + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD( "1_dream rail v08c 2c0c v957220.u4", 0x00000, 0x10000, CRC(c14fae88) SHA1(f0478b563ac851372bc0b93772d89ab70ad61877) ) // 通ドリームレール V08C 2C0C V957220, 1xxxxxxxxxxxxxxx = 0xFF + + ROM_REGION(0xc0000, "oki", 0) // NMK112 device expects the first 0x40000 bytes to be left empty. + ROM_LOAD( "2_dream rail pcm.u11", 0x40000, 0x80000, CRC(efdc1eea) SHA1(c39fed6f97b71556b468e0872a8240fe7b6495e6) ) // ドリームレールPCM + // empty socket 3.u10 +ROM_END + ROM_START( trocana ) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD( "tro1e.u12", 0x00000, 0x10000, CRC(f285043f) SHA1(6691091c1ecdab10c390db1d82c9d1d1dd0ded1f) ) // 1xxxxxxxxxxxxxxx = 0xFF @@ -221,5 +282,6 @@ } // Anonymous namespace +GAME( 1995, drail, 0, drail, trocana, hpierrot_state, empty_init, ROT0, "NTC / NMK", "Dream Rail", MACHINE_IS_SKELETON_MECHANICAL ) // NMK LTD, N.T.C., H07051, V39, TEST2, V07 strings GAME( 1996, trocana, 0, trocana, trocana, trocana_state, empty_init, ROT0, "NTC / NMK", "Trocana", MACHINE_IS_SKELETON_MECHANICAL ) // NMK LTD, NTC LTD, V96313 strings GAME( 1996, hpierrot, 0, hpierrot, trocana, hpierrot_state, empty_init, ROT0, "NTC / NMK", "Happy Pierrot", MACHINE_IS_SKELETON_MECHANICAL ) // NTC LTD, NMK LTD, V96821 strings diff -Nru mame-0.250+dfsg.1/src/mame/nmk/quizpani.cpp mame-0.251+dfsg.1/src/mame/nmk/quizpani.cpp --- mame-0.250+dfsg.1/src/mame/nmk/quizpani.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/nmk/quizpani.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -16,7 +16,7 @@ CUSTOM: NMK112 (QFP64, near ROMs 31,32,4, M6295 sample ROM banking) NMK111 (QFP64, 1x input-related near JAMMA, 2x gfx related near ROMs 11,12,21,22) NMK903 (QFP44, x2, near ROMs 11,12,21,22) - NMK005 (QFP64, near DIPs, possible MCU?) + NMK005 (QFP64, near DIPs, GPIO controller) ROMs : 93094-51.127 27c4002 near 68000 diff -Nru mame-0.250+dfsg.1/src/mame/palm/palm.cpp mame-0.251+dfsg.1/src/mame/palm/palm.cpp --- mame-0.250+dfsg.1/src/mame/palm/palm.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/palm/palm.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -16,58 +16,184 @@ #include "machine/mc68328.h" #include "machine/ram.h" #include "sound/dac.h" -#include "emupal.h" +#include "video/mc68328lcd.h" +#include "video/sed1375.h" + #include "screen.h" #include "speaker.h" -class palm_state : public driver_device +#include "pilot1k.lh" + +#define VERBOSE (0) +#include "logmacro.h" + +namespace { + +class palm_base_state : public driver_device { public: - palm_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_ram(*this, RAM_TAG), - m_io_penx(*this, "PENX"), - m_io_peny(*this, "PENY"), - m_io_penb(*this, "PENB"), - m_io_portd(*this, "PORTD") + DECLARE_INPUT_CHANGED_MEMBER(pen_check); + +protected: + palm_base_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_ram(*this, RAM_TAG) + , m_screen(*this, "screen") + , m_io_penx(*this, "PENX") + , m_io_peny(*this, "PENY") + , m_io_penb(*this, "PENB") + { } + + virtual void machine_start() override; + virtual void machine_reset() override; + + offs_t dasm_override(std::ostream &stream, offs_t pc, const util::disasm_interface::data_buffer &opcodes, const util::disasm_interface::data_buffer ¶ms); + + virtual int spi_from_hw(); + + required_device m_maincpu; + required_device m_ram; + required_device m_screen; + required_ioport m_io_penx; + required_ioport m_io_peny; + required_ioport m_io_penb; + + u16 m_spim_data; +}; + +class palm_state : public palm_base_state +{ +public: + palm_state(const machine_config &mconfig, device_type type, const char *tag) + : palm_base_state(mconfig, type, tag) + , m_lcdctrl(*this, "lcdctrl") + , m_io_portd(*this, "PORTD") { } void palmiii(machine_config &config); void pilot1k(machine_config &config); void palmvx(machine_config &config); void palmv(machine_config &config); - void palm(machine_config &config); void palmpro(machine_config &config); void pilot5k(machine_config &config); - DECLARE_INPUT_CHANGED_MEMBER(pen_check); DECLARE_INPUT_CHANGED_MEMBER(button_check); protected: virtual void machine_start() override; virtual void machine_reset() override; -private: - void palm_port_f_out(uint8_t data); - uint8_t palm_port_c_in(); - uint8_t palm_port_f_in(); - void palm_spim_out(uint16_t data); - uint16_t palm_spim_in(); - DECLARE_WRITE_LINE_MEMBER(palm_spim_exchange); - void palm_palette(palette_device &palette) const; + void palm_base(machine_config &config); - offs_t palm_dasm_override(std::ostream &stream, offs_t pc, const util::disasm_interface::data_buffer &opcodes, const util::disasm_interface::data_buffer ¶ms); - void palm_map(address_map &map); + void mem_map(address_map &map); - required_device m_maincpu; - required_device m_ram; - uint8_t m_port_f_latch; - uint16_t m_spim_data; - required_ioport m_io_penx; - required_ioport m_io_peny; - required_ioport m_io_penb; + u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void check_pen_adc_read(); + void adc_vcc_y_w(int state); + void adc_gnd_y_w(int state); + void adc_vcc_x_w(int state); + void adc_gnd_x_w(int state); + void adc_csn_w(int state); + int power_nmi_r(); + + enum : int + { + PORTF_Y_VCCN_BIT = 0, + PORTF_Y_GND_BIT = 1, + PORTF_X_VCCN_BIT = 2, + PORTF_X_GND_BIT = 3, + PORTF_ADC_CSN_BIT = 7 + }; + + required_device m_lcdctrl; required_ioport m_io_portd; + + u8 m_port_f_latch; + bool m_adc_csn; + bool m_adc_vcc_x; + bool m_adc_gnd_x; + bool m_adc_vcc_y; + bool m_adc_gnd_y; +}; + +class palmez_base_state : public palm_base_state +{ +public: + DECLARE_INPUT_CHANGED_MEMBER(button_check); + +protected: + palmez_base_state(const machine_config &mconfig, device_type type, const char *tag, const u8 hardware_id) + : palm_base_state(mconfig, type, tag) + , m_rows(*this, "ROW%u", 0u) + , m_hardware_id(hardware_id) + { } + + virtual void machine_start() override; + virtual void machine_reset() override; + + void palmez_base(machine_config &config); + + void mem_map(address_map &map); + + void adc_enable_w(int state); + + template void kbd_row_w(int state); + template void kbd_col_w(int state); + template int kbd_scan_r(); + + void hardware_id_req_w(int state); + + void spi_to_hw(int state); + virtual int spi_from_hw() override; + + required_ioport_array<3> m_rows; + + u8 m_key_row_mask; + u8 m_key_col_mask; + + bool m_hardware_id_asserted; + const u8 m_hardware_id; + + bool m_adc_enabled; + u8 m_adc_cmd_bit_count; + u8 m_adc_response_bit_count; + u8 m_adc_cmd; +}; + +class palmiiic_state : public palmez_base_state +{ +public: + palmiiic_state(const machine_config &mconfig, device_type type, const char *tag) + : palmez_base_state(mconfig, type, tag, 0x09) + , m_sed1375(*this, "lcdctrl") + { } + + void palmiiic(machine_config &config); + +protected: + void mem_map(address_map &map); + + required_device m_sed1375; +}; + +class palmm100_state : public palmez_base_state +{ +public: + palmm100_state(const machine_config &mconfig, device_type type, const char *tag) + : palmez_base_state(mconfig, type, tag, 0x05) + , m_lcdctrl(*this, "lcdctrl") + { } + + void palmm100(machine_config &config); + +protected: + template int hardware_subid_r(); + + u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + required_device m_lcdctrl; }; @@ -75,86 +201,281 @@ MACHINE HARDWARE ***************************************************************************/ -INPUT_CHANGED_MEMBER(palm_state::pen_check) -{ - uint8_t button = m_io_penb->read(); +// Shared platform hardware - if(button) - m_maincpu->set_penirq_line(1); - else - m_maincpu->set_penirq_line(0); +void palm_base_state::machine_start() +{ + save_item(NAME(m_spim_data)); } -INPUT_CHANGED_MEMBER(palm_state::button_check) +void palm_base_state::machine_reset() { - uint8_t button_state = m_io_portd->read(); - m_maincpu->set_port_d_lines(button_state, (int)param); + // Copy boot ROM + u8* bios = memregion("bios")->base(); + memset(m_ram->pointer(), 0, m_ram->size()); + memcpy(m_ram->pointer(), bios, 0x20000); + + m_spim_data = 0xffff; } -void palm_state::palm_port_f_out(uint8_t data) +INPUT_CHANGED_MEMBER(palm_base_state::pen_check) { - m_port_f_latch = data; + m_maincpu->irq5_w(m_io_penb->read() & 1); } -uint8_t palm_state::palm_port_c_in() +int palm_base_state::spi_from_hw() { - return 0x10; + int out_state = BIT(m_spim_data, 15); + m_spim_data <<= 1; + m_spim_data |= 1; + return out_state; } -uint8_t palm_state::palm_port_f_in() + +// First-generation Palm hardware ("IDT") + +void palm_state::machine_start() { - return m_port_f_latch; + palm_base_state::machine_start(); + address_space &space = m_maincpu->space(AS_PROGRAM); + space.install_ram(0x000000, m_ram->size() - 1, m_ram->pointer()); + + //save_item(NAME(m_port_f_latch)); + save_item(NAME(m_adc_csn)); + save_item(NAME(m_adc_vcc_x)); + save_item(NAME(m_adc_gnd_x)); + save_item(NAME(m_adc_vcc_y)); + save_item(NAME(m_adc_gnd_y)); } -void palm_state::palm_spim_out(uint16_t data) +void palm_state::machine_reset() { - m_spim_data = data; + palm_base_state::machine_reset(); + + m_adc_csn = false; + m_adc_vcc_x = false; + m_adc_gnd_x = false; + m_adc_vcc_y = false; + m_adc_gnd_y = false; } -uint16_t palm_state::palm_spim_in() +u32 palm_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - return m_spim_data; + m_lcdctrl->video_update(bitmap, cliprect); + return 0; } -WRITE_LINE_MEMBER(palm_state::palm_spim_exchange) +INPUT_CHANGED_MEMBER(palm_state::button_check) { - uint8_t x = m_io_penx->read(); - uint8_t y = m_io_peny->read(); + const u8 button_state = m_io_portd->read(); + m_maincpu->port_d_in_w(BIT(button_state, param), param); +} - switch (m_port_f_latch & 0x0f) +void palm_state::check_pen_adc_read() +{ + if (!m_adc_csn) { - case 0x06: - m_spim_data = (0xff - x) * 2; - break; - - case 0x09: - m_spim_data = (0xff - y) * 2; - break; + if (m_adc_vcc_x && m_adc_gnd_y) + { + m_spim_data = (0xff - m_io_penx->read()) * 2; + } + else if (m_adc_vcc_y && m_adc_gnd_x) + { + m_spim_data = (0xff - m_io_peny->read()) * 2; + } } } -void palm_state::machine_start() +void palm_state::adc_vcc_y_w(int state) +{ + m_adc_vcc_y = state; + check_pen_adc_read(); +} + +void palm_state::adc_gnd_y_w(int state) { + m_adc_gnd_y = state; + check_pen_adc_read(); +} + +void palm_state::adc_vcc_x_w(int state) +{ + m_adc_vcc_x = state; + check_pen_adc_read(); +} + +void palm_state::adc_gnd_x_w(int state) +{ + m_adc_gnd_x = state; + check_pen_adc_read(); +} + +void palm_state::adc_csn_w(int state) +{ + m_adc_csn = state; + check_pen_adc_read(); +} + +int palm_state::power_nmi_r() +{ + return 1; +} + + +// Basic 68EZ328-based Palm hardware + +void palmez_base_state::machine_start() +{ + palm_base_state::machine_start(); address_space &space = m_maincpu->space(AS_PROGRAM); space.install_ram(0x000000, m_ram->size() - 1, m_ram->pointer()); - save_item(NAME(m_port_f_latch)); - save_item(NAME(m_spim_data)); + save_item(NAME(m_key_row_mask)); + save_item(NAME(m_key_col_mask)); + + save_item(NAME(m_hardware_id_asserted)); + + save_item(NAME(m_adc_enabled)); + save_item(NAME(m_adc_cmd_bit_count)); + save_item(NAME(m_adc_response_bit_count)); + save_item(NAME(m_adc_cmd)); } -void palm_state::machine_reset() +void palmez_base_state::machine_reset() { - // Copy boot ROM - uint8_t* bios = memregion("bios")->base(); - memset(m_ram->pointer(), 0, m_ram->size()); - memcpy(m_ram->pointer(), bios, 0x20000); + palm_base_state::machine_reset(); + + m_key_row_mask = 0; + m_key_col_mask = 0; + + m_hardware_id_asserted = false; + + m_adc_enabled = false; + m_adc_cmd_bit_count = 8; + m_adc_response_bit_count = 0; + m_adc_cmd = 0; +} + +INPUT_CHANGED_MEMBER(palmez_base_state::button_check) +{ + const u8 button_state = m_rows[param]->read(); + for (int bit = 0; bit < 4; bit++) + { + m_maincpu->port_d_in_w(BIT(button_state, bit), bit); + } +} + +void palmez_base_state::adc_enable_w(int state) +{ + const bool was_enabled = m_adc_enabled; + m_adc_enabled = !state; + if (!was_enabled && m_adc_enabled) + { + m_adc_cmd_bit_count = 8; + m_spim_data = 0; + } +} + +template +void palmez_base_state::kbd_row_w(int state) +{ + m_key_row_mask &= ~(1 << Line); + m_key_row_mask |= !state << Line; +} + +template +void palmez_base_state::kbd_col_w(int state) +{ + m_key_col_mask &= ~(1 << Line); + m_key_col_mask |= state << Line; +} + +template +int palmez_base_state::kbd_scan_r() +{ + if (m_hardware_id_asserted) + { + return BIT(~m_hardware_id, Line); + } + + int state = 0; + for (int i = 0; i < 3; i++) + { + if (BIT(m_key_row_mask, i)) + { + state |= BIT(m_rows[i]->read(), Line); + } + } + return state; +} + +void palmez_base_state::spi_to_hw(int state) +{ + if (m_adc_enabled && m_adc_cmd_bit_count > 0) + { + m_adc_cmd_bit_count--; + m_adc_cmd &= ~(1 << m_adc_cmd_bit_count); + m_adc_cmd |= state << m_adc_cmd_bit_count; + } +} + +int palmez_base_state::spi_from_hw() +{ + int state = palm_base_state::spi_from_hw(); + if (m_adc_enabled && m_adc_cmd_bit_count == 0) + { + if (m_adc_response_bit_count == 0) + { + m_adc_response_bit_count = 16; + const u8 channel = (m_adc_cmd >> 4) & 7; + switch (channel) + { + case 1: // Pen Y + m_spim_data = ((0xff - m_io_peny->read()) * 2) << 3; + break; + case 2: // Battery Level + m_spim_data = 0x7ff8; + break; + case 5: // Pen X + m_spim_data = ((0xff - m_io_penx->read()) * 2) << 3; + break; + case 6: // Dock Serial + m_spim_data = 0; + break; + default: + LOG("%s: Unknown ADC Channel: %d (command %02x)\n", machine().describe_context(), channel, m_adc_cmd); + break; + } + } + else + { + m_adc_response_bit_count--; + if (m_adc_response_bit_count == 0) + { + m_adc_cmd_bit_count = 8; + } + } + } + return state; +} + +void palmez_base_state::hardware_id_req_w(int state) +{ + m_hardware_id_asserted = !state; +} + + +// Palm m100 ("Brad") hardware + +u32 palmm100_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + m_lcdctrl->video_update(bitmap, cliprect); + return 0; } -/* THIS IS PRETTY MUCH TOTALLY WRONG AND DOESN'T REFLECT THE MC68328'S INTERNAL FUNCTIONALITY AT ALL! */ -void palm_state::palm_palette(palette_device &palette) const +template int palmm100_state::hardware_subid_r() { - palette.set_pen_color(0, 0x7b, 0x8c, 0x5a); - palette.set_pen_color(1, 0x00, 0x00, 0x00); + return BIT(~0x00, Line); } @@ -162,69 +483,316 @@ ADDRESS MAPS ***************************************************************************/ -void palm_state::palm_map(address_map &map) +void palm_state::mem_map(address_map &map) { map(0xc00000, 0xe07fff).rom().region("bios", 0); } +void palmez_base_state::mem_map(address_map &map) +{ + map(0x00c00000, 0x00e07fff).rom().region("bios", 0); + map(0x10c00000, 0x10e07fff).rom().region("bios", 0); +} + +void palmiiic_state::mem_map(address_map &map) +{ + palmez_base_state::mem_map(map); + map(0x1f000000, 0x1f01ffff).m(m_sed1375, FUNC(sed1375_device::map)); +} + /*************************************************************************** - MACHINE DRIVERS + INPUTS ***************************************************************************/ -void palm_state::palm(machine_config &config) +static INPUT_PORTS_START(palm_base) + PORT_START("PENX") + PORT_BIT(0xff, 0x50, IPT_LIGHTGUN_X) PORT_NAME("Pen X") PORT_MINMAX(0, 0xa0) PORT_SENSITIVITY(50) PORT_CROSSHAIR(X, 1.0, 0.0, 0) + + PORT_START("PENY") + PORT_BIT(0xff, 0x50, IPT_LIGHTGUN_Y) PORT_NAME("Pen Y") PORT_MINMAX(0, 0xa0) PORT_SENSITIVITY(50) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) + + PORT_START("PENB") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_NAME("Pen Button") PORT_CODE(MOUSECODE_BUTTON1) PORT_CHANGED_MEMBER(DEVICE_SELF, palm_base_state, pen_check, 0) +INPUT_PORTS_END + +static INPUT_PORTS_START(palm) + PORT_INCLUDE(palm_base) + + PORT_START("PORTD") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_NAME("Power") PORT_CODE(KEYCODE_D) PORT_CHANGED_MEMBER(DEVICE_SELF, palm_state, button_check, 0) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_NAME("Up") PORT_CODE(KEYCODE_Y) PORT_CHANGED_MEMBER(DEVICE_SELF, palm_state, button_check, 1) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_NAME("Down") PORT_CODE(KEYCODE_H) PORT_CHANGED_MEMBER(DEVICE_SELF, palm_state, button_check, 2) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_NAME("Button 1") PORT_CODE(KEYCODE_F) PORT_CHANGED_MEMBER(DEVICE_SELF, palm_state, button_check, 3) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_NAME("Button 2") PORT_CODE(KEYCODE_G) PORT_CHANGED_MEMBER(DEVICE_SELF, palm_state, button_check, 4) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_NAME("Button 3") PORT_CODE(KEYCODE_J) PORT_CHANGED_MEMBER(DEVICE_SELF, palm_state, button_check, 5) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_NAME("Button 4") PORT_CODE(KEYCODE_K) PORT_CHANGED_MEMBER(DEVICE_SELF, palm_state, button_check, 6) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED) +INPUT_PORTS_END + +static INPUT_PORTS_START(palmiiic) + PORT_INCLUDE(palm_base) + + PORT_START("ROW0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_NAME("Button 1") PORT_CODE(KEYCODE_F) PORT_CHANGED_MEMBER(DEVICE_SELF, palmiiic_state, button_check, 0) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_NAME("Button 2") PORT_CODE(KEYCODE_G) PORT_CHANGED_MEMBER(DEVICE_SELF, palmiiic_state, button_check, 0) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_NAME("Button 3") PORT_CODE(KEYCODE_J) PORT_CHANGED_MEMBER(DEVICE_SELF, palmiiic_state, button_check, 0) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_NAME("Button 4") PORT_CODE(KEYCODE_K) PORT_CHANGED_MEMBER(DEVICE_SELF, palmiiic_state, button_check, 0) + PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_UNUSED) + + PORT_START("ROW1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_NAME("Up") PORT_CODE(KEYCODE_Y) PORT_CHANGED_MEMBER(DEVICE_SELF, palmiiic_state, button_check, 1) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_NAME("Down") PORT_CODE(KEYCODE_H) PORT_CHANGED_MEMBER(DEVICE_SELF, palmiiic_state, button_check, 1) + PORT_BIT(0xfc, IP_ACTIVE_HIGH, IPT_UNUSED) + + PORT_START("ROW2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_NAME("Power") PORT_CODE(KEYCODE_D) PORT_CHANGED_MEMBER(DEVICE_SELF, palmiiic_state, button_check, 2) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON9) PORT_NAME("Contrast") PORT_CODE(KEYCODE_C) PORT_CHANGED_MEMBER(DEVICE_SELF, palmiiic_state, button_check, 2) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON3) + PORT_BIT(0xf8, IP_ACTIVE_HIGH, IPT_UNUSED) +INPUT_PORTS_END + +static INPUT_PORTS_START(palmm100) + PORT_INCLUDE(palm_base) + + PORT_START("ROW0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_NAME("Button 1") PORT_CODE(KEYCODE_F) PORT_CHANGED_MEMBER(DEVICE_SELF, palmm100_state, button_check, 0) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_NAME("Button 2") PORT_CODE(KEYCODE_G) PORT_CHANGED_MEMBER(DEVICE_SELF, palmm100_state, button_check, 0) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_NAME("Button 3") PORT_CODE(KEYCODE_J) PORT_CHANGED_MEMBER(DEVICE_SELF, palmm100_state, button_check, 0) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_NAME("Button 4") PORT_CODE(KEYCODE_K) PORT_CHANGED_MEMBER(DEVICE_SELF, palmm100_state, button_check, 0) + PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_UNUSED) + + PORT_START("ROW1") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_NAME("Down") PORT_CODE(KEYCODE_H) PORT_CHANGED_MEMBER(DEVICE_SELF, palmm100_state, button_check, 1) + PORT_BIT(0xfd, IP_ACTIVE_HIGH, IPT_UNUSED) + + PORT_START("ROW2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_NAME("Power") PORT_CODE(KEYCODE_D) PORT_CHANGED_MEMBER(DEVICE_SELF, palmm100_state, button_check, 2) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_NAME("Up") PORT_CODE(KEYCODE_Y) PORT_CHANGED_MEMBER(DEVICE_SELF, palmm100_state, button_check, 2) + PORT_BIT(0xfc, IP_ACTIVE_HIGH, IPT_UNUSED) +INPUT_PORTS_END + + +/*************************************************************************** + MACHINE/DEVICE DRIVERS +***************************************************************************/ + +void palm_state::palm_base(machine_config &config) { /* basic machine hardware */ MC68328(config, m_maincpu, 32768*506); /* 16.580608 MHz */ - m_maincpu->set_addrmap(AS_PROGRAM, &palm_state::palm_map); - m_maincpu->set_dasm_override(FUNC(palm_state::palm_dasm_override)); - m_maincpu->out_port_f().set(FUNC(palm_state::palm_port_f_out)); - m_maincpu->in_port_c().set(FUNC(palm_state::palm_port_c_in)); - m_maincpu->in_port_f().set(FUNC(palm_state::palm_port_f_in)); + m_maincpu->set_addrmap(AS_PROGRAM, &palm_state::mem_map); + m_maincpu->set_dasm_override(FUNC(palm_state::dasm_override)); + + m_maincpu->out_port_f().set(FUNC(palm_state::adc_vcc_y_w)); + m_maincpu->out_port_f().set(FUNC(palm_state::adc_gnd_y_w)); + m_maincpu->out_port_f().set(FUNC(palm_state::adc_vcc_x_w)); + m_maincpu->out_port_f().set(FUNC(palm_state::adc_gnd_x_w)); + m_maincpu->out_port_f().set(FUNC(palm_state::adc_csn_w)); + + m_maincpu->in_port_c<4>().set(FUNC(palm_state::power_nmi_r)); + + m_maincpu->in_port_d<0>().set_ioport(m_io_penb).bit(0); + m_maincpu->in_port_d<1>().set_ioport(m_io_penb).bit(1); + m_maincpu->in_port_d<2>().set_ioport(m_io_penb).bit(2); + m_maincpu->in_port_d<3>().set_ioport(m_io_penb).bit(3); + m_maincpu->in_port_d<4>().set_ioport(m_io_penb).bit(4); + m_maincpu->in_port_d<5>().set_ioport(m_io_penb).bit(5); + m_maincpu->in_port_d<6>().set_ioport(m_io_penb).bit(6); + m_maincpu->in_port_d<7>().set_ioport(m_io_penb).bit(7); + m_maincpu->out_pwm().set("dac", FUNC(dac_bit_interface::write)); - m_maincpu->out_spim().set(FUNC(palm_state::palm_spim_out)); - m_maincpu->in_spim().set(FUNC(palm_state::palm_spim_in)); - m_maincpu->spim_xch_trigger().set(FUNC(palm_state::palm_spim_exchange)); + m_maincpu->in_spim().set(FUNC(palm_state::spi_from_hw)); - config.set_maximum_quantum(attotime::from_hz(60)); + m_maincpu->out_flm().set(m_lcdctrl, FUNC(mc68328_lcd_device::flm_w)); + m_maincpu->out_llp().set(m_lcdctrl, FUNC(mc68328_lcd_device::llp_w)); + m_maincpu->out_lsclk().set(m_lcdctrl, FUNC(mc68328_lcd_device::lsclk_w)); + m_maincpu->out_ld().set(m_lcdctrl, FUNC(mc68328_lcd_device::ld_w)); + m_maincpu->set_lcd_info_changed(m_lcdctrl, FUNC(mc68328_lcd_device::lcd_info_changed)); /* video hardware */ - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); - screen.set_refresh_hz(60); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(1260)); - screen.set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); - screen.set_size(160, 220); - screen.set_visarea(0, 159, 0, 219); - screen.set_screen_update("maincpu", FUNC(mc68328_device::screen_update)); - screen.set_palette("palette"); + SCREEN(config, m_screen, SCREEN_TYPE_LCD); + m_screen->set_refresh_hz(60); + m_screen->set_size(160, 220); + m_screen->set_visarea(0, 160 - 1, 0, 220 - 1); + m_screen->set_screen_update(FUNC(palm_state::screen_update)); - PALETTE(config, "palette", FUNC(palm_state::palm_palette), 2); + MC68328_LCD(config, m_lcdctrl, 0); /* audio hardware */ SPEAKER(config, "speaker").front_center(); DAC_1BIT(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.25); } -static INPUT_PORTS_START( palm ) - PORT_START( "PENX" ) - PORT_BIT( 0xff, 0x50, IPT_LIGHTGUN_X ) PORT_NAME("Pen X") PORT_MINMAX(0, 0xa0) PORT_SENSITIVITY(50) PORT_CROSSHAIR(X, 1.0, 0.0, 0) - - PORT_START( "PENY" ) - PORT_BIT( 0xff, 0x50, IPT_LIGHTGUN_Y ) PORT_NAME("Pen Y") PORT_MINMAX(0, 0xa0) PORT_SENSITIVITY(50) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) - - PORT_START( "PENB" ) - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Pen Button") PORT_CODE(MOUSECODE_BUTTON1) PORT_CHANGED_MEMBER(DEVICE_SELF, palm_state, pen_check, 0) - - PORT_START( "PORTD" ) - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Power") PORT_CODE(KEYCODE_D) PORT_CHANGED_MEMBER(DEVICE_SELF, palm_state, button_check, 0) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Up") PORT_CODE(KEYCODE_Y) PORT_CHANGED_MEMBER(DEVICE_SELF, palm_state, button_check, 1) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Down") PORT_CODE(KEYCODE_H) PORT_CHANGED_MEMBER(DEVICE_SELF, palm_state, button_check, 2) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Button 1") PORT_CODE(KEYCODE_F) PORT_CHANGED_MEMBER(DEVICE_SELF, palm_state, button_check, 3) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Button 2") PORT_CODE(KEYCODE_G) PORT_CHANGED_MEMBER(DEVICE_SELF, palm_state, button_check, 4) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Button 3") PORT_CODE(KEYCODE_J) PORT_CHANGED_MEMBER(DEVICE_SELF, palm_state, button_check, 5) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_NAME("Button 4") PORT_CODE(KEYCODE_K) PORT_CHANGED_MEMBER(DEVICE_SELF, palm_state, button_check, 6) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) -INPUT_PORTS_END +void palmiiic_state::palmiiic(machine_config &config) +{ + /* basic machine hardware */ + MC68EZ328(config, m_maincpu, 32768*506); /* 16.580608 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &palmiiic_state::mem_map); + m_maincpu->set_dasm_override(FUNC(palmiiic_state::dasm_override)); + + m_maincpu->out_port_b<1>().set(FUNC(palmiiic_state::adc_enable_w)); + + m_maincpu->out_port_c<0>().set(FUNC(palmiiic_state::kbd_row_w<0>)); + m_maincpu->out_port_c<1>().set(FUNC(palmiiic_state::kbd_row_w<1>)); + m_maincpu->out_port_c<2>().set(FUNC(palmiiic_state::kbd_row_w<2>)); + + m_maincpu->out_port_d<0>().set(FUNC(palmiiic_state::kbd_col_w<0>)); + m_maincpu->out_port_d<1>().set(FUNC(palmiiic_state::kbd_col_w<1>)); + m_maincpu->out_port_d<2>().set(FUNC(palmiiic_state::kbd_col_w<2>)); + m_maincpu->out_port_d<3>().set(FUNC(palmiiic_state::kbd_col_w<3>)); + + m_maincpu->out_port_g<2>().set(FUNC(palmiiic_state::hardware_id_req_w)); + + m_maincpu->in_port_d<0>().set(FUNC(palmiiic_state::kbd_scan_r<0>)); + m_maincpu->in_port_d<1>().set(FUNC(palmiiic_state::kbd_scan_r<1>)); + m_maincpu->in_port_d<2>().set(FUNC(palmiiic_state::kbd_scan_r<2>)); + m_maincpu->in_port_d<3>().set(FUNC(palmiiic_state::kbd_scan_r<3>)); + m_maincpu->in_port_d<4>().set_constant(1); // Active-low, indicates hotsync/dock button press + m_maincpu->in_port_d<6>().set_constant(1); // Active-low, indicates external adapter installed + m_maincpu->in_port_d<7>().set_constant(1); // Active-low, indicates pending power failure + + m_maincpu->in_port_f<0>().set_constant(1); // Active-high, indicates LCD is at full power + m_maincpu->in_port_f<6>().set_constant(1); // Active-high, indicates battery enabled + m_maincpu->in_port_f<7>().set_constant(1); // Active-low, determines sync port attachment + + m_maincpu->out_pwm().set("dac", FUNC(dac_bit_interface::write)); + m_maincpu->in_spim().set(FUNC(palmiiic_state::spi_from_hw)); + m_maincpu->out_spim().set(FUNC(palmiiic_state::spi_to_hw)); + + /* internal ram */ + RAM(config, RAM_TAG).set_default_size("8M"); + + /* video hardware */ + SED1375(config, m_sed1375); + + SCREEN(config, m_screen, SCREEN_TYPE_LCD); + m_screen->set_refresh_hz(60); + m_screen->set_size(160, 262); + m_screen->set_visarea(0, 160-1, 0, 220-1); + m_screen->set_screen_update(m_sed1375, FUNC(sed1375_device::screen_update)); + + /* audio hardware */ + SPEAKER(config, "speaker").front_center(); + DAC_1BIT(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.25); +} + +void palmm100_state::palmm100(machine_config &config) +{ + /* basic machine hardware */ + MC68EZ328(config, m_maincpu, 32768*506); /* 16.580608 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &palmm100_state::mem_map); + m_maincpu->set_dasm_override(FUNC(palmm100_state::dasm_override)); + + m_maincpu->out_port_b<1>().set(FUNC(palmm100_state::kbd_row_w<0>)); + m_maincpu->out_port_b<3>().set(FUNC(palmm100_state::kbd_row_w<1>)); + m_maincpu->out_port_b<6>().set(FUNC(palmm100_state::kbd_row_w<2>)); + + m_maincpu->out_port_d<0>().set(FUNC(palmm100_state::kbd_col_w<0>)); + m_maincpu->out_port_d<1>().set(FUNC(palmm100_state::kbd_col_w<1>)); + m_maincpu->out_port_d<2>().set(FUNC(palmm100_state::kbd_col_w<2>)); + m_maincpu->out_port_d<3>().set(FUNC(palmm100_state::kbd_col_w<3>)); + + m_maincpu->out_port_g<2>().set(FUNC(palmm100_state::hardware_id_req_w)); + m_maincpu->out_port_g<5>().set(FUNC(palmm100_state::adc_enable_w)); + + m_maincpu->in_port_d<0>().set(FUNC(palmm100_state::kbd_scan_r<0>)); + m_maincpu->in_port_d<1>().set(FUNC(palmm100_state::kbd_scan_r<1>)); + m_maincpu->in_port_d<2>().set(FUNC(palmm100_state::kbd_scan_r<2>)); + m_maincpu->in_port_d<3>().set(FUNC(palmm100_state::kbd_scan_r<3>)); + m_maincpu->in_port_d<4>().set_constant(1); // Active-low, indicates hotsync/dock button press + m_maincpu->in_port_d<6>().set_constant(1); // Active-low, indicates external adapter installed + m_maincpu->in_port_d<7>().set_constant(1); // Active-low, indicates pending power failure + + m_maincpu->in_port_e<0>().set(FUNC(palmm100_state::hardware_subid_r<0>)); + m_maincpu->in_port_e<1>().set(FUNC(palmm100_state::hardware_subid_r<1>)); + m_maincpu->in_port_e<2>().set(FUNC(palmm100_state::hardware_subid_r<2>)); + m_maincpu->in_port_e<3>().set(FUNC(palmm100_state::hardware_subid_r<3>)); + m_maincpu->in_port_e<4>().set(FUNC(palmm100_state::hardware_subid_r<4>)); + m_maincpu->in_port_e<5>().set(FUNC(palmm100_state::hardware_subid_r<5>)); + m_maincpu->in_port_e<6>().set(FUNC(palmm100_state::hardware_subid_r<6>)); + m_maincpu->in_port_e<7>().set(FUNC(palmm100_state::hardware_subid_r<7>)); + + m_maincpu->in_port_f<0>().set_constant(1); // Active-high, indicates LCD is at full power + m_maincpu->in_port_f<6>().set_constant(1); // Active-high, indicates battery enabled + m_maincpu->in_port_f<7>().set_constant(1); // Active-low, determines sync port attachment + + m_maincpu->out_pwm().set("dac", FUNC(dac_bit_interface::write)); + m_maincpu->in_spim().set(FUNC(palmm100_state::spi_from_hw)); + m_maincpu->out_spim().set(FUNC(palmm100_state::spi_to_hw)); + + m_maincpu->out_flm().set(m_lcdctrl, FUNC(mc68328_lcd_device::flm_w)); + m_maincpu->out_llp().set(m_lcdctrl, FUNC(mc68328_lcd_device::llp_w)); + m_maincpu->out_lsclk().set(m_lcdctrl, FUNC(mc68328_lcd_device::lsclk_w)); + m_maincpu->out_ld().set(m_lcdctrl, FUNC(mc68328_lcd_device::ld_w)); + m_maincpu->set_lcd_info_changed(m_lcdctrl, FUNC(mc68328_lcd_device::lcd_info_changed)); + + /* internal ram */ + RAM(config, RAM_TAG).set_default_size("2M"); + + /* video hardware */ + SCREEN(config, m_screen, SCREEN_TYPE_LCD); + m_screen->set_refresh_hz(60); + m_screen->set_size(160, 220); + m_screen->set_visarea(0, 160 - 1, 0, 220 - 1); + m_screen->set_screen_update(FUNC(palmm100_state::screen_update)); + + MC68328_LCD(config, m_lcdctrl, 0); + + /* audio hardware */ + SPEAKER(config, "speaker").front_center(); + DAC_1BIT(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.25); +} + +void palm_state::pilot1k(machine_config &config) +{ + palm_base(config); + + /* internal ram */ + RAM(config, RAM_TAG).set_default_size("128K").set_extra_options("512K,1M,2M,4M,8M"); + + config.set_default_layout(layout_pilot1k); +} + +void palm_state::pilot5k(machine_config &config) +{ + palm_base(config); + + /* internal ram */ + RAM(config, RAM_TAG).set_default_size("512K").set_extra_options("1M,2M,4M,8M"); +} + +void palm_state::palmpro(machine_config &config) +{ + palm_base(config); + + /* internal ram */ + RAM(config, RAM_TAG).set_default_size("1M").set_extra_options("2M,4M,8M"); +} + +void palm_state::palmiii(machine_config &config) +{ + palm_base(config); + + /* internal ram */ + RAM(config, RAM_TAG).set_default_size("2M").set_extra_options("4M,8M"); +} + +void palm_state::palmv(machine_config &config) +{ + palm_base(config); + + /* internal ram */ + RAM(config, RAM_TAG).set_default_size("2M").set_extra_options("4M,8M"); +} + +void palm_state::palmvx(machine_config &config) +{ + palm_base(config); + + /* internal ram */ + RAM(config, RAM_TAG).set_default_size("8M"); +} /*************************************************************************** @@ -417,70 +985,24 @@ ROM_RELOAD(0x000000, 0x004000) ROM_END -void palm_state::pilot1k(machine_config &config) -{ - palm(config); - - /* internal ram */ - RAM(config, RAM_TAG).set_default_size("128K").set_extra_options("512K,1M,2M,4M,8M"); -} - -void palm_state::pilot5k(machine_config &config) -{ - palm(config); - - /* internal ram */ - RAM(config, RAM_TAG).set_default_size("512K").set_extra_options("1M,2M,4M,8M"); -} - -void palm_state::palmpro(machine_config &config) -{ - palm(config); - - /* internal ram */ - RAM(config, RAM_TAG).set_default_size("1M").set_extra_options("2M,4M,8M"); -} - -void palm_state::palmiii(machine_config &config) -{ - palm(config); - - /* internal ram */ - RAM(config, RAM_TAG).set_default_size("2M").set_extra_options("4M,8M"); -} - -void palm_state::palmv(machine_config &config) -{ - palm(config); - - /* internal ram */ - RAM(config, RAM_TAG).set_default_size("2M").set_extra_options("4M,8M"); -} - -void palm_state::palmvx(machine_config &config) -{ - palm(config); - - /* internal ram */ - RAM(config, RAM_TAG).set_default_size("8M"); -} +} // anonymous namespace -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1996, pilot1k, 0, 0, pilot1k, palm, palm_state, empty_init, "U.S. Robotics", "Pilot 1000", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND ) -COMP( 1996, pilot5k, pilot1k, 0, pilot5k, palm, palm_state, empty_init, "U.S. Robotics", "Pilot 5000", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND ) -COMP( 1997, palmpers, pilot1k, 0, pilot5k, palm, palm_state, empty_init, "U.S. Robotics", "Palm Pilot Personal", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND ) -COMP( 1997, palmpro, pilot1k, 0, palmpro, palm, palm_state, empty_init, "U.S. Robotics", "Palm Pilot Pro", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND ) -COMP( 1998, palmiii, pilot1k, 0, palmiii, palm, palm_state, empty_init, "3Com", "Palm III", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND ) -COMP( 1998, palmiiic, pilot1k, 0, palmiii, palm, palm_state, empty_init, "Palm Inc", "Palm IIIc", MACHINE_NOT_WORKING ) -COMP( 2000, palmm100, pilot1k, 0, palmiii, palm, palm_state, empty_init, "Palm Inc", "Palm m100", MACHINE_NOT_WORKING ) -COMP( 2000, palmm130, pilot1k, 0, palmiii, palm, palm_state, empty_init, "Palm Inc", "Palm m130", MACHINE_NOT_WORKING ) -COMP( 2001, palmm505, pilot1k, 0, palmiii, palm, palm_state, empty_init, "Palm Inc", "Palm m505", MACHINE_NOT_WORKING ) -COMP( 2001, palmm515, pilot1k, 0, palmiii, palm, palm_state, empty_init, "Palm Inc", "Palm m515", MACHINE_NOT_WORKING ) -COMP( 1999, palmv, pilot1k, 0, palmv, palm, palm_state, empty_init, "3Com", "Palm V", MACHINE_NOT_WORKING ) -COMP( 1999, palmvx, pilot1k, 0, palmvx, palm, palm_state, empty_init, "Palm Inc", "Palm Vx", MACHINE_NOT_WORKING ) -COMP( 2001, visor, pilot1k, 0, palmvx, palm, palm_state, empty_init, "Handspring", "Visor Edge", MACHINE_NOT_WORKING ) -COMP( 19??, spt1500, pilot1k, 0, palmvx, palm, palm_state, empty_init, "Symbol", "SPT 1500", MACHINE_NOT_WORKING ) -COMP( 19??, spt1700, pilot1k, 0, palmvx, palm, palm_state, empty_init, "Symbol", "SPT 1700", MACHINE_NOT_WORKING ) -COMP( 19??, spt1740, pilot1k, 0, palmvx, palm, palm_state, empty_init, "Symbol", "SPT 1740", MACHINE_NOT_WORKING ) +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 1996, pilot1k, 0, 0, pilot1k, palm, palm_state, empty_init, "U.S. Robotics", "Pilot 1000", MACHINE_SUPPORTS_SAVE ) +COMP( 1996, pilot5k, pilot1k, 0, pilot5k, palm, palm_state, empty_init, "U.S. Robotics", "Pilot 5000", MACHINE_SUPPORTS_SAVE ) +COMP( 1997, palmpers, pilot1k, 0, pilot5k, palm, palm_state, empty_init, "U.S. Robotics", "Palm Pilot Personal", MACHINE_SUPPORTS_SAVE ) +COMP( 1997, palmpro, pilot1k, 0, palmpro, palm, palm_state, empty_init, "U.S. Robotics", "Palm Pilot Pro", MACHINE_SUPPORTS_SAVE ) +COMP( 1998, palmiii, pilot1k, 0, palmiii, palm, palm_state, empty_init, "3Com", "Palm III", MACHINE_SUPPORTS_SAVE ) +COMP( 1998, palmiiic, pilot1k, 0, palmiiic, palmiiic, palmiiic_state, empty_init, "3Com", "Palm IIIc", MACHINE_SUPPORTS_SAVE ) +COMP( 2000, palmm100, pilot1k, 0, palmm100, palmm100, palmm100_state, empty_init, "3Com", "Palm m100", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +COMP( 2000, palmm130, pilot1k, 0, palmiii, palm, palm_state, empty_init, "3Com", "Palm m130", MACHINE_NOT_WORKING ) +COMP( 2001, palmm505, pilot1k, 0, palmiii, palm, palm_state, empty_init, "3Com", "Palm m505", MACHINE_NOT_WORKING ) +COMP( 2001, palmm515, pilot1k, 0, palmiii, palm, palm_state, empty_init, "3Com", "Palm m515", MACHINE_NOT_WORKING ) +COMP( 1999, palmv, pilot1k, 0, palmv, palm, palm_state, empty_init, "3Com", "Palm V", MACHINE_NOT_WORKING ) +COMP( 1999, palmvx, pilot1k, 0, palmvx, palm, palm_state, empty_init, "3Com", "Palm Vx", MACHINE_NOT_WORKING ) +COMP( 2001, visor, pilot1k, 0, palmvx, palm, palm_state, empty_init, "Handspring", "Visor Edge", MACHINE_NOT_WORKING ) +COMP( 19??, spt1500, pilot1k, 0, palmvx, palm, palm_state, empty_init, "Symbol", "SPT 1500", MACHINE_NOT_WORKING ) +COMP( 19??, spt1700, pilot1k, 0, palmvx, palm, palm_state, empty_init, "Symbol", "SPT 1700", MACHINE_NOT_WORKING ) +COMP( 19??, spt1740, pilot1k, 0, palmvx, palm, palm_state, empty_init, "Symbol", "SPT 1740", MACHINE_NOT_WORKING ) #include "palm_dbg.ipp" diff -Nru mame-0.250+dfsg.1/src/mame/palm/palm_dbg.ipp mame-0.251+dfsg.1/src/mame/palm/palm_dbg.ipp --- mame-0.250+dfsg.1/src/mame/palm/palm_dbg.ipp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/palm/palm_dbg.ipp 2022-12-29 14:20:09.000000000 +0000 @@ -1162,7 +1162,7 @@ return nullptr; } -offs_t palm_state::palm_dasm_override(std::ostream &stream, offs_t pc, const util::disasm_interface::data_buffer &opcodes, const util::disasm_interface::data_buffer ¶ms) +offs_t palm_base_state::dasm_override(std::ostream &stream, offs_t pc, const util::disasm_interface::data_buffer &opcodes, const util::disasm_interface::data_buffer ¶ms) { unsigned result = 0; const char *trap; diff -Nru mame-0.250+dfsg.1/src/mame/philips/p2000t.h mame-0.251+dfsg.1/src/mame/philips/p2000t.h --- mame-0.250+dfsg.1/src/mame/philips/p2000t.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/philips/p2000t.h 2022-12-29 14:20:09.000000000 +0000 @@ -14,7 +14,7 @@ #include "cpu/z80/z80.h" #include "sound/spkrdev.h" #include "video/saa5050.h" -#include "p2000t_mdcr.h" +#include "machine/mdcr.h" #include "machine/ram.h" #include "emupal.h" diff -Nru mame-0.250+dfsg.1/src/mame/philips/p2000t_mdcr.cpp mame-0.251+dfsg.1/src/mame/philips/p2000t_mdcr.cpp --- mame-0.250+dfsg.1/src/mame/philips/p2000t_mdcr.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/philips/p2000t_mdcr.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,327 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Erwin Jansen -/********************************************************************** - - Philips P2000T Mini Digital Cassette Recorder emulation - -**********************************************************************/ - -#include "emu.h" -#include "p2000t_mdcr.h" -#include "formats/p2000t_cas.h" - -DEFINE_DEVICE_TYPE(MDCR, mdcr_device, "mdcr", "Philips Mini DCR") - -READ_LINE_MEMBER(mdcr_device::rdc) -{ - // According to mdcr spec there is cross talk on the wires when writing, - // hence the clock signal is always false when writing. - if (m_recording) - return false; - - return m_fwd ? m_rdc : m_rda; -} - -READ_LINE_MEMBER(mdcr_device::rda) -{ - return m_fwd ? m_rda : m_rdc; -} - -READ_LINE_MEMBER(mdcr_device::bet) -{ - return tape_start_or_end(); -} - -READ_LINE_MEMBER(mdcr_device::cip) -{ - return m_cassette->get_image() != nullptr; -} - -READ_LINE_MEMBER(mdcr_device::wen) -{ - return m_cassette->get_image() != nullptr && m_cassette->is_writeable(); -} - -WRITE_LINE_MEMBER(mdcr_device::rev) -{ - m_rev = state; - if (m_rev) - { - rewind(); - } - - if (!m_rev && !m_fwd) - { - stop(); - } -} - -WRITE_LINE_MEMBER(mdcr_device::fwd) -{ - m_fwd = state; - if (m_fwd) - { - forward(); - } - - if (!m_rev && !m_fwd) - { - stop(); - } -} - -WRITE_LINE_MEMBER(mdcr_device::wda) -{ - m_wda = state; -} - -WRITE_LINE_MEMBER(mdcr_device::wdc) -{ - if (state) - { - write_bit(m_wda); - }; -} - -void mdcr_device::device_add_mconfig(machine_config &config) -{ - CASSETTE(config, m_cassette); - m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_DISABLED | - CASSETTE_SPEAKER_MUTED); - m_cassette->set_interface("p2000_cass"); - m_cassette->set_formats(p2000t_cassette_formats); -} - -mdcr_device::mdcr_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock) -: device_t(mconfig, MDCR, tag, owner, clock) -, m_cassette(*this, "cassette") -, m_read_timer(nullptr) -{ -} - -void mdcr_device::device_start() -{ - m_read_timer = timer_alloc(FUNC(mdcr_device::read_timer_tick), this); - m_read_timer->adjust(attotime::from_hz(44100), 0, attotime::from_hz(44100)); - - save_item(NAME(m_fwd)); - save_item(NAME(m_rev)); - save_item(NAME(m_rdc)); - save_item(NAME(m_rda)); - save_item(NAME(m_wda)); - save_item(NAME(m_recording)); - save_item(NAME(m_fwd_pulse_time)); - save_item(NAME(m_last_tape_time)); - save_item(NAME(m_save_tape_time)); - // Phase decoder - save_item(STRUCT_MEMBER(m_phase_decoder, m_last_signal)); - save_item(STRUCT_MEMBER(m_phase_decoder, m_needs_sync)); - save_item(STRUCT_MEMBER(m_phase_decoder, m_bit_queue)); - save_item(STRUCT_MEMBER(m_phase_decoder, m_bit_place)); - save_item(STRUCT_MEMBER(m_phase_decoder, m_current_clock)); - save_item(STRUCT_MEMBER(m_phase_decoder, m_clock_period)); -} - -void mdcr_device::device_pre_save() -{ - m_save_tape_time = m_cassette->get_position(); -} - -void mdcr_device::device_post_load() -{ - m_cassette->seek(m_save_tape_time, SEEK_SET); -} - -TIMER_CALLBACK_MEMBER(mdcr_device::read_timer_tick) -{ - if (!m_recording && m_cassette->motor_on()) - { - // Account for moving backwards. - auto delay = std::abs(m_cassette->get_position() - m_last_tape_time); - - // Decode the signal using the fake phase decode circuit - bool newBit = m_phase_decoder.signal((m_cassette->input() > +0.04), delay); - if (newBit) - { - // Flip rdc - m_rdc = !m_rdc; - m_rda = m_phase_decoder.pull_bit(); - } - } - m_last_tape_time = m_cassette->get_position(); -} - -void mdcr_device::write_bit(bool bit) -{ - m_recording = true; - m_cassette->change_state(CASSETTE_RECORD, CASSETTE_MASK_UISTATE); - m_cassette->output(bit ? +1.0 : -1.0); - m_phase_decoder.reset(); -} - -void mdcr_device::rewind() -{ - m_fwd = false; - m_recording = false; - m_cassette->set_motor(true); - m_cassette->change_state(CASSETTE_PLAY, CASSETTE_MASK_UISTATE); - m_cassette->go_reverse(); -} - -void mdcr_device::forward() -{ - // A pulse of 1us < T < 20 usec should reset the phase decoder. - // See mdcr spec for details. - constexpr double RESET_PULSE_TIMING = 2.00e-05; - auto now = machine().time().as_double(); - auto pulse_delay = now - m_fwd_pulse_time; - m_fwd_pulse_time = now; - - if (pulse_delay < RESET_PULSE_TIMING) - { - m_phase_decoder.reset(); - } - - m_fwd = true; - m_cassette->set_motor(true); - m_cassette->change_state(m_recording ? CASSETTE_RECORD : CASSETTE_PLAY, - CASSETTE_MASK_UISTATE); - m_cassette->go_forward(); -} - -void mdcr_device::stop() -{ - m_cassette->change_state(CASSETTE_PLAY, CASSETTE_MASK_UISTATE); - m_cassette->set_motor(false); -} - -bool mdcr_device::tape_start_or_end() -{ - auto pos = m_cassette->get_position(); - auto bet = m_cassette->motor_on() && - (pos <= 0 || pos >= m_cassette->get_length()); - - // Reset phase decoder at tape start/end. - if (bet) - m_phase_decoder.reset(); - - return bet; -} - -void p2000_mdcr_devices(device_slot_interface &device) -{ - device.option_add("mdcr", MDCR); -} - -// -// phase_decoder -// - -mdcr_device::phase_decoder::phase_decoder(double tolerance) -: m_tolerance(tolerance) -{ - reset(); -} - -bool mdcr_device::phase_decoder::pull_bit() -{ - if (m_bit_place == 0) - return false; - auto res = BIT(m_bit_queue, 0); - m_bit_place--; - m_bit_queue >>= 1; - return res; -} - -bool mdcr_device::phase_decoder::signal(bool state, double delay) -{ - m_current_clock += delay; - if (state == m_last_signal) - { - if (m_needs_sync == 0 && m_current_clock > m_clock_period && - !within_tolerance(m_current_clock, m_clock_period)) - { - // We might be at the last bit in a sequence, meaning we - // are only getting the reference signal for a while. - // so we produce one last clock signal. - reset(); - return true; - } - return false; - } - - // A transition happened! - m_last_signal = state; - if (m_needs_sync > 0) - { - // We have not yet determined our clock period. - return sync_signal(state); - } - - // We are within bounds of the current clock - if (within_tolerance(m_current_clock, m_clock_period)) - { - add_bit(state); - return true; - }; - - // We went out of sync, our clock is wayyy out of bounds. - if (m_current_clock > m_clock_period) - reset(); - - // We are likely halfway in our clock signal.. - return false; -}; - -void mdcr_device::phase_decoder::reset() -{ - m_last_signal = false; - m_current_clock = {}; - m_clock_period = {}; - m_needs_sync = SYNCBITS; -} - -void mdcr_device::phase_decoder::add_bit(bool bit) -{ - if (bit) - m_bit_queue |= bit << m_bit_place; - else - m_bit_queue &= ~(bit << m_bit_place); - - if (m_bit_place <= QUEUE_DELAY) - m_bit_place++; - - m_current_clock = {}; -} - -bool mdcr_device::phase_decoder::sync_signal(bool state) -{ - m_needs_sync--; - if (m_needs_sync == SYNCBITS - 1) - { - // We can only synchronize when we go up - // on the first bit. - if (state) - add_bit(true); - return false; - } - if (m_clock_period != 0 && !within_tolerance(m_current_clock, m_clock_period)) - { - // Clock is way off! - reset(); - return false; - } - - // We've derived a clock period, we will use the average. - auto div = SYNCBITS - m_needs_sync - 1; - m_clock_period = ((div - 1) * m_clock_period + m_current_clock) / div; - add_bit(state); - return true; -} - -// y * (1 - tolerance) < x < y * (1 + tolerance) -bool mdcr_device::phase_decoder::within_tolerance(double x, double y) -{ - assert(m_tolerance > 0 && m_tolerance < 1); - return (y * (1 - m_tolerance)) < x && x < (y * (1 + m_tolerance)); -} diff -Nru mame-0.250+dfsg.1/src/mame/philips/p2000t_mdcr.h mame-0.251+dfsg.1/src/mame/philips/p2000t_mdcr.h --- mame-0.250+dfsg.1/src/mame/philips/p2000t_mdcr.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/philips/p2000t_mdcr.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,177 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Erwin Jansen -/********************************************************************** - - Philips P2000t Mini Digital Cassette Recorder Emulation - -********************************************************************** - - +12V 1 8 !WCD - OV (signal) 2 9 !REV - OV (power) 3 A !FWD - GND 4 B RDC - !WDA 6 C !RDA - !BET 7 D !CIP - E !WEN - -**********************************************************************/ - -#ifndef MAME_MACHINE_P2000T_MDCR_H -#define MAME_MACHINE_P2000T_MDCR_H - -#pragma once - -#include "imagedev/cassette.h" - -/// \brief Models a MCR220 Micro Cassette Recorder -/// -/// Detailed documentation on the device can be found in this repository: -/// https://github.com/p2000t/documentation/tree/master/hardware -/// -/// This device was built in the P2000t and was used as tape storage. -/// It used mini-cassettes that were also used in dictation devices. -/// The P2000t completely controls this device without user intervention. -class mdcr_device : public device_t -{ -public: - mdcr_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock); - - /// \brief The read clock, switches state when a bit is available. - /// - /// This is the read clock. The read clock is a flip flop that switches - /// whenever a new bit is available on rda. The original flips every 167us - /// This system flips at 154 / 176 usec, which is within the tolerance for - /// the rom and system diagnostics. - /// - /// Note that rdc & rda are flipped when the tape is moving in reverse. - DECLARE_READ_LINE_MEMBER(rdc); - - /// The current active data bit. - DECLARE_READ_LINE_MEMBER(rda); - - /// False indicates we have reached end/beginning of tape - DECLARE_READ_LINE_MEMBER(bet); - - /// False if a cassette is in place. - DECLARE_READ_LINE_MEMBER(cip); - - /// False when the cassette is write enabled. - DECLARE_READ_LINE_MEMBER(wen); - - /// True if we should activate the reverse motor. - DECLARE_WRITE_LINE_MEMBER(rev); - - /// True if we should activate the forward motor. - /// Note: A quick pulse (<20usec) will reset the phase decoder. - DECLARE_WRITE_LINE_MEMBER(fwd); - - /// The bit to write to tape. Make sure to set wda after wdc. - DECLARE_WRITE_LINE_MEMBER(wda); - - /// True if the current wda should be written to tape. - DECLARE_WRITE_LINE_MEMBER(wdc); - -protected: - virtual void device_start() override; - virtual void device_pre_save() override; - virtual void device_post_load() override; - virtual void device_add_mconfig(machine_config &config) override; - - TIMER_CALLBACK_MEMBER(read_timer_tick); - -private: - /// \brief A Phase Decoder used in a Philips MDCR220 Mini Cassette Recorder - /// - /// A phase decoder is capable of converting a signal stream into a - /// a series of bits that go together with a clock signal. This phase - /// decoder is conform to what you would find in an Philips MDCR220 - /// - /// Signals are converted into bits whenever the line signal - /// changes from low to high and vice versa on a clock signal. - /// - /// A transition on a clock boundary from low to high is a 1. - /// A transition on a clock boundary from high to low is a 0 - /// An intermediate transition halfway between the clock boundary - /// can occur when there are consecutive 0s or 1s. See the example - /// below where the clock is marked by a | - /// - /// 1 0 1 1 0 0 - /// RDA: _|----|____|--__|----|__--|__-- - /// RDC: _|-___|-___|-___|-___|-___|-___ - /// ^ ^ - /// |-- clock signal |-- intermediate transition. - /// - /// This particular phase decoder expects a signal of - /// 1010 1010 which is used to derive the clock T. - /// after a reset. - class phase_decoder - { - using time_in_seconds = double; - - public: - /// Creates a phase decoder with the given tolerance. - phase_decoder(double tolerance = 0.15); - - /// Pulls the bit out of the queue. - bool pull_bit(); - - /// Returns true if a new bit can be read, you can now pull the bit. - bool signal(bool state, double delay); - - /// Reset the clock state, the system will now need to resynchronize on 0xAA. - void reset(); - - private: - // add a bit and reset the current clock. - void add_bit(bool bit); - - // tries to sync up the signal and calculate the clockperiod. - bool sync_signal(bool state); - - // y * (1 - tolerance) < x < y * (1 + tolerance) - bool within_tolerance(double x, double y); - - double m_tolerance; - - static constexpr int SYNCBITS = 7; - static constexpr int QUEUE_DELAY = 2; - - public: - // Needed for save state. - bool m_last_signal{ false }; - int m_needs_sync{ SYNCBITS }; - uint8_t m_bit_queue{ 0 }; - uint8_t m_bit_place{ 0 }; - time_in_seconds m_current_clock{ 0 }; - time_in_seconds m_clock_period{ 0 }; - }; - - - void write_bit(bool bit); - void rewind(); - void forward(); - void stop(); - bool tape_start_or_end(); - - bool m_fwd{ false }; - bool m_rev{ false }; - bool m_rdc{ false }; - bool m_rda{ false }; - bool m_wda{ false }; - - bool m_recording{ false }; - double m_fwd_pulse_time{ 0 }; - double m_last_tape_time{ 0 }; - double m_save_tape_time{ 0 }; - - required_device m_cassette; - phase_decoder m_phase_decoder; - - // timers - emu_timer *m_read_timer; -}; - - -DECLARE_DEVICE_TYPE(MDCR, mdcr_device) - -#endif // MAME_MACHINE_P2000T_MDCR_H diff -Nru mame-0.250+dfsg.1/src/mame/pinball/wpc_flip2.cpp mame-0.251+dfsg.1/src/mame/pinball/wpc_flip2.cpp --- mame-0.250+dfsg.1/src/mame/pinball/wpc_flip2.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/pinball/wpc_flip2.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -853,10 +853,10 @@ ROM_RELOAD( 0x100000 + 0x60000, 0x20000) ROM_END -ROM_START(ww_p1) +ROM_START(ww_p6) // versions as taken from the labels on the chip (handwritten): U6 = P6, U18 = P0, U15 = P0, but the sound ROMs actually report as P1 ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF) ROM_REGION(0x80000, "code", 0) - ROM_LOAD("ww_p8.u6", 0x00000, 0x80000, CRC(251a7f14) SHA1(8e36efc9a14d3cd31967f072bfc185461022864d)) + ROM_LOAD("ww_p6.u6", 0x00000, 0x80000, CRC(97dd311f) SHA1(7a0079365479fd4af7465a48cafd10a6ef169073)) ROM_REGION(0x180000, "sound1", 0) ROM_LOAD("ww_u14.l1", 0x000000, 0x80000, CRC(f3faa427) SHA1(fb0a266b80571b4717caa69f078b7e73e2866b6b)) ROM_LOAD("ww_u15.p1", 0x080000, 0x40000, CRC(a2a8e005) SHA1(bdbfc3f6c403d1ebef822a6381574f4a7bd19897)) @@ -975,8 +975,8 @@ GAME(1993, ww_l4, ww_l5, wpc_flip2, wpc_flip2, wpc_flip2_state, init_wpc_flip2, ROT0, "Williams", "White Water (L-4)", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1993, ww_l3, ww_l5, wpc_flip2, wpc_flip2, wpc_flip2_state, init_wpc_flip2, ROT0, "Williams", "White Water (L-3)", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1992, ww_l2, ww_l5, wpc_flip2, wpc_flip2, wpc_flip2_state, init_wpc_flip2, ROT0, "Williams", "White Water (L-2)", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) -GAME(1992, ww_p8, ww_l5, wpc_flip2, wpc_flip2, wpc_flip2_state, init_wpc_flip2, ROT0, "Williams", "White Water (P-8 P-2 sound)", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) -GAME(1992, ww_p1, ww_l5, wpc_flip2, wpc_flip2, wpc_flip2_state, init_wpc_flip2, ROT0, "Williams", "White Water (P-8 P-1 sound)", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) +GAME(1992, ww_p8, ww_l5, wpc_flip2, wpc_flip2, wpc_flip2_state, init_wpc_flip2, ROT0, "Williams", "White Water (P-8)", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) +GAME(1992, ww_p6, ww_l5, wpc_flip2, wpc_flip2, wpc_flip2_state, init_wpc_flip2, ROT0, "Williams", "White Water (P-6)", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1992, strik_l4, 0, wpc_flip2, wpc_flip2, wpc_flip2_state, init_wpc_flip2, ROT0, "Williams", "Strike Master (L-4) (Shuffle)", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1996, lc_11, 0, wpc_flip2, wpc_flip2, wpc_flip2_state, init_wpc_flip2, ROT0, "Bally", "League Champ (1.1) (Shuffle)", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(20??, rush, 0, wpc_flip2, wpc_flip2, wpc_flip2_state, init_wpc_flip2, ROT0, "Dave Astill", "Rush (1.0)", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/sega/dotrikun.cpp mame-0.251+dfsg.1/src/mame/sega/dotrikun.cpp --- mame-0.250+dfsg.1/src/mame/sega/dotrikun.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/dotrikun.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -5,7 +5,7 @@ Dottori Kun (Head On's mini game) (c)1990 SEGA -Driver by Takahiro Nogi (nogi@kt.rim.or.jp) 1999/12/15 - +Driver by Takahiro Nogi 1999/12/15 - CPU : Z-80 (4MHz) diff -Nru mame-0.250+dfsg.1/src/mame/sega/hshavoc.cpp mame-0.251+dfsg.1/src/mame/sega/hshavoc.cpp --- mame-0.250+dfsg.1/src/mame/sega/hshavoc.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/hshavoc.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -38,8 +38,6 @@ #include "emu.h" - -#include "megadriv.h" #include "megadriv_acbl.h" #include "cpu/m68000/m68000.h" @@ -55,7 +53,7 @@ { public: hshavoc_state(const machine_config &mconfig, device_type type, const char *tag) - : md_boot_state(mconfig, type, tag) + : md_boot_state(mconfig, type, tag) { } void hshavoc(machine_config &config); @@ -64,7 +62,7 @@ }; -static INPUT_PORTS_START( hshavoc ) +INPUT_PORTS_START( hshavoc ) PORT_START("IN0") // 16 bit PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) diff -Nru mame-0.250+dfsg.1/src/mame/sega/mdconsole.cpp mame-0.251+dfsg.1/src/mame/sega/mdconsole.cpp --- mame-0.250+dfsg.1/src/mame/sega/mdconsole.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/mdconsole.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -6,6 +6,7 @@ #include "bus/generic/carts.h" #include "bus/generic/slot.h" +#include "bus/sms_ctrl/controllers.h" #include "imagedev/chd_cd.h" #include "sound/sn76496.h" @@ -20,143 +21,31 @@ * *************************************/ -/* These overwrite the MAME ones in DRIVER_INIT */ -/* They're needed to give the users the choice between different controllers */ -uint8_t md_cons_state::mess_md_io_read_data_port(offs_t offset) -{ - int portnum = offset; - - uint8_t retdata; - int controller; - uint8_t helper_6b = (m_megadrive_io_ctrl_regs[portnum] & 0x3f) | 0xc0; // bits 6 & 7 always come from megadrive_io_data_regs - uint8_t helper_3b = (m_megadrive_io_ctrl_regs[portnum] & 0x7f) | 0x80; // bit 7 always comes from megadrive_io_data_regs - - switch (portnum) - { - case 0: - controller = (m_io_ctrlr->read() & 0x0f); - break; - - case 1: - controller = (m_io_ctrlr->read() & 0xf0); - break; - - default: - controller = 0; - break; - } - - /* Are we using a 6 buttons Joypad? */ - if (controller) - { - if (m_megadrive_io_data_regs[portnum] & 0x40) - { - if (m_io_stage[portnum] == 2) - { - /* here we read B, C & the additional buttons */ - retdata = (m_megadrive_io_data_regs[portnum] & helper_6b) | - ((((m_io_pad6b[0][portnum] ? m_io_pad6b[0][portnum]->read() : 0) & 0x30) | - ((m_io_pad6b[1][portnum] ? m_io_pad6b[1][portnum]->read() : 0) & 0x0f)) & ~helper_6b); - } - else - { - /* here we read B, C & the directional buttons */ - retdata = (m_megadrive_io_data_regs[portnum] & helper_6b) | - (((m_io_pad6b[0][portnum] ? m_io_pad6b[0][portnum]->read() : 0) & 0x3f) & ~helper_6b); - } - } - else - { - if (m_io_stage[portnum] == 1) - { - /* here we read ((Start & A) >> 2) | 0x00 */ - retdata = (m_megadrive_io_data_regs[portnum] & helper_6b) | - ((((m_io_pad6b[0][portnum] ? m_io_pad6b[0][portnum]->read() : 0) & 0xc0) >> 2) & ~helper_6b); - } - else if (m_io_stage[portnum]==2) - { - /* here we read ((Start & A) >> 2) | 0x0f */ - retdata = (m_megadrive_io_data_regs[portnum] & helper_6b) | - (((((m_io_pad6b[0][portnum] ? m_io_pad6b[0][portnum]->read() : 0) & 0xc0) >> 2) | 0x0f) & ~helper_6b); - } - else - { - /* here we read ((Start & A) >> 2) | Up and Down */ - retdata = (m_megadrive_io_data_regs[portnum] & helper_6b) | - (((((m_io_pad6b[0][portnum] ? m_io_pad6b[0][portnum]->read() : 0) & 0xc0) >> 2) | - ((m_io_pad6b[0][portnum] ? m_io_pad6b[0][portnum]->read() : 0) & 0x03)) & ~helper_6b); - } - } - - // osd_printf_debug("read io data port stage %d port %d %02x\n",mess_io_stage[portnum],portnum,retdata); +void md_cons_state::md_ctrl_ports(machine_config &config) +{ + SMS_CONTROL_PORT(config, m_ctrl_ports[0], sms_control_port_devices, SMS_CTRL_OPTION_MD_PAD); + m_ctrl_ports[0]->th_handler().set(m_ioports[0], FUNC(megadrive_io_port_device::th_w)); + m_ctrl_ports[0]->set_screen(m_screen); - retdata |= (retdata << 8); - } - /* Otherwise it's a 3 buttons Joypad */ - else - { - uint8_t svp_test = 0; - if (m_cart) - svp_test = m_cart->read_test(); + m_ioports[0]->set_in_handler(m_ctrl_ports[0], FUNC(sms_control_port_device::in_r)); + m_ioports[0]->set_out_handler(m_ctrl_ports[0], FUNC(sms_control_port_device::out_w)); - // handle test input for SVP test - if (portnum == 0 && svp_test) - { - retdata = (m_megadrive_io_data_regs[0] & 0xc0); - } - else if (m_megadrive_io_data_regs[portnum] & 0x40) - { - /* here we read B, C & the directional buttons */ - retdata = (m_megadrive_io_data_regs[portnum] & helper_3b) | - ((((m_io_pad3b[portnum] ? m_io_pad3b[portnum]->read() : 0) & 0x3f) | 0x40) & ~helper_3b); - } - else - { - /* here we read ((Start & A) >> 2) | Up and Down */ - retdata = (m_megadrive_io_data_regs[portnum] & helper_3b) | - (((((m_io_pad3b[portnum] ? m_io_pad3b[portnum]->read() : 0) & 0xc0) >> 2) | - ((m_io_pad3b[portnum] ? m_io_pad3b[portnum]->read() : 0) & 0x03) | 0x40) & ~helper_3b); - } - } + SMS_CONTROL_PORT(config, m_ctrl_ports[1], sms_control_port_devices, SMS_CTRL_OPTION_MD_PAD); + m_ctrl_ports[1]->th_handler().set(m_ioports[1], FUNC(megadrive_io_port_device::th_w)); + m_ctrl_ports[1]->set_screen(m_screen); - return retdata; + m_ioports[1]->set_in_handler(m_ctrl_ports[1], FUNC(sms_control_port_device::in_r)); + m_ioports[1]->set_out_handler(m_ctrl_ports[1], FUNC(sms_control_port_device::out_w)); } - -void md_cons_state::mess_md_io_write_data_port(offs_t offset, uint16_t data) +void md_cons_state::md_exp_port(machine_config &config) { - int portnum = offset; - int controller; - - switch (portnum) - { - case 0: - controller = (m_io_ctrlr->read() & 0x0f); - break; - - case 1: - controller = (m_io_ctrlr->read() & 0xf0); - break; - - default: - controller = 0; - break; - } - - if (controller) - { - if (m_megadrive_io_ctrl_regs[portnum] & 0x40) - { - if (((m_megadrive_io_data_regs[portnum] & 0x40) == 0x00) && ((data & 0x40) == 0x40)) - { - m_io_stage[portnum]++; - m_io_timeout[portnum]->adjust(m_maincpu->cycles_to_attotime(8192)); - } + SMS_CONTROL_PORT(config, m_ctrl_ports[2], sms_control_port_devices, nullptr); + m_ctrl_ports[2]->th_handler().set(m_ioports[2], FUNC(megadrive_io_port_device::th_w)); + m_ctrl_ports[2]->set_screen(m_screen); - } - } - m_megadrive_io_data_regs[portnum] = data; - //osd_printf_debug("Writing IO Data Register #%d data %04x\n",portnum,data); + m_ioports[2]->set_in_handler(m_ctrl_ports[2], FUNC(sms_control_port_device::in_r)); + m_ioports[2]->set_out_handler(m_ctrl_ports[2], FUNC(sms_control_port_device::out_w)); } @@ -167,98 +56,13 @@ *************************************/ -static INPUT_PORTS_START( md_base ) - PORT_START("PAD1_3B") /* Joypad 1 (3 button + start) NOT READ DIRECTLY */ - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x00) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x00) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x00) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x00) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 B") PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x00) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 C") PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x00) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 A") PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x00) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x00) - - PORT_START("PAD2_3B") /* Joypad 2 (3 button + start) NOT READ DIRECTLY */ - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x00) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x00) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x00) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x00) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 B") PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x00) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 C") PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x00) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 A") PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x00) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x00) - - PORT_START("PAD1_6B") /* Joypad 1 (6 button + start + mode) NOT READ DIRECTLY */ - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 B") PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 C") PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 A") PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x01) - - PORT_START("EXTRA1") /* Extra buttons for Joypad 1 (6 button + start + mode) NOT READ DIRECTLY */ - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) PORT_NAME("P1 Z") PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) PORT_NAME("P1 Y") PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("P1 X") PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(1) PORT_NAME("P1 Mode") PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x01) - - PORT_START("PAD2_6B") /* Joypad 2 (6 button + start + mode) NOT READ DIRECTLY */ - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 B") PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 C") PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 A") PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x10) - - PORT_START("EXTRA2") /* Extra buttons for Joypad 2 (6 button + start + mode) NOT READ DIRECTLY */ - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) PORT_NAME("P2 Z") PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) PORT_NAME("P2 Y") PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_NAME("P2 X") PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(2) PORT_NAME("P2 Mode") PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x10) - - PORT_START("RESET") /* Buttons on Genesis Console */ - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_NAME("Reset Button") PORT_IMPULSE(1) // reset, resets 68k (and..?) -INPUT_PORTS_END - static INPUT_PORTS_START( md ) - PORT_INCLUDE( md_base ) - - PORT_START("CTRLSEL") /* Controller selection */ - PORT_CONFNAME( 0x0f, 0x00, "Player 1 Controller" ) - PORT_CONFSETTING( 0x00, "Joystick 3 Buttons" ) - PORT_CONFSETTING( 0x01, "Joystick 6 Buttons" ) -// PORT_CONFSETTING( 0x02, "Sega Mouse" ) -/* there exists both a 2 buttons version of the Mouse (Jpn ver, to be used with RPGs, it - can aslo be used as trackball) and a 3 buttons version (US ver, no trackball feats.) */ -// PORT_CONFSETTING( 0x03, "Sega Menacer" ) -// PORT_CONFSETTING( 0x04, "Konami Justifier" ) -// PORT_CONFSETTING( 0x05, "Team Player (Sega Multitap)" ) -// PORT_CONFSETTING( 0x06, "4-Play (EA Multitap)" ) -// PORT_CONFSETTING( 0x07, "J-Cart" ) - PORT_CONFNAME( 0xf0, 0x00, "Player 2 Controller" ) - PORT_CONFSETTING( 0x00, "Joystick 3 Buttons" ) - PORT_CONFSETTING( 0x10, "Joystick 6 Buttons" ) -INPUT_PORTS_END - -static INPUT_PORTS_START( megajet ) - PORT_INCLUDE( md_base ) - - PORT_START("CTRLSEL") /* Fixed controller setting for Player 1 */ - PORT_CONFNAME( 0x0f, 0x01, "Player 1 Controller" ) // Fixed - PORT_CONFSETTING( 0x01, "Joystick 6 Buttons" ) - PORT_CONFNAME( 0xf0, 0x00, "Player 2 Controller" ) - PORT_CONFSETTING( 0x00, "Joystick 3 Buttons" ) - PORT_CONFSETTING( 0x10, "Joystick 6 Buttons" ) + PORT_START("RESET") // Buttons on Mega Drive console + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_NAME("Reset Button") PORT_IMPULSE(1) // reset, resets 68k (and..?) INPUT_PORTS_END static INPUT_PORTS_START( gen_nomd ) - PORT_INCLUDE( megajet ) - - PORT_MODIFY("RESET") /* No reset button */ + PORT_START("RESET") // No reset button PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNUSED ) INPUT_PORTS_END @@ -271,32 +75,12 @@ void md_cons_state::machine_start() { - static const char *const pad6names[2][4] = { - { "PAD1_6B", "PAD2_6B", "UNUSED", "UNUSED" }, - { "EXTRA1", "EXTRA2", "UNUSED", "UNUSED" } - }; - static const char *const pad3names[4] = { "PAD1_3B", "PAD2_3B", "UNUSED", "UNUSED" }; - - m_io_ctrlr = ioport("CTRLSEL"); - - for (int i = 0; i < 4; i++) - { - m_io_pad3b[i] = ioport(pad3names[i]); - m_io_pad6b[0][i] = ioport(pad6names[0][i]); - m_io_pad6b[1][i] = ioport(pad6names[1][i]); - } - - // setup timers for 6 button pads - for (int i = 0; i < 3; i++) - m_io_timeout[i] = timer_alloc(FUNC(md_base_state::io_timeout_timer_callback), this); - m_vdp->stop_timers(); if (m_cart) m_cart->save_nvram(); - if (m_z80snd) - m_genz80.z80_run_timer = timer_alloc(FUNC(md_base_state::megadriv_z80_run_state), this); + m_genz80.z80_run_timer = timer_alloc(FUNC(md_cons_state::megadriv_z80_run_state), this); } void md_cons_state::install_cartslot() @@ -334,6 +118,14 @@ } +void md_cons_state::dcat16_megadriv_map(address_map &map) +{ + megadriv_68k_base_map(map); + + map(0x000000, 0x7fffff).rom(); +} + + void md_cons_state::install_tmss() { m_maincpu->space(AS_PROGRAM).unmap_readwrite(0x000000, 0x7fffff); @@ -408,14 +200,17 @@ { md_ntsc(config); - m_maincpu->set_addrmap(AS_PROGRAM, &md_base_state::dcat16_megadriv_map); + m_maincpu->set_addrmap(AS_PROGRAM, &md_cons_state::dcat16_megadriv_map); } void md_cons_slot_state::ms_megadriv(machine_config &config) { md_ntsc(config); - subdevice("megadriv")->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); + m_screen->screen_vblank().set(FUNC(md_cons_slot_state::screen_vblank_console)); + + md_ctrl_ports(config); + md_exp_port(config); MD_CART_SLOT(config, m_cart, md_cart, nullptr).set_must_be_loaded(true); SOFTWARE_LIST(config, "cart_list").set_original("megadriv"); @@ -425,7 +220,10 @@ { md_pal(config); - subdevice("megadriv")->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); + m_screen->screen_vblank().set(FUNC(md_cons_slot_state::screen_vblank_console)); + + md_ctrl_ports(config); + md_exp_port(config); MD_CART_SLOT(config, m_cart, md_cart, nullptr).set_must_be_loaded(true); SOFTWARE_LIST(config, "cart_list").set_original("megadriv"); @@ -435,12 +233,23 @@ { md2_ntsc(config); - subdevice("megadriv")->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); + m_screen->screen_vblank().set(FUNC(md_cons_slot_state::screen_vblank_console)); + + md_ctrl_ports(config); MD_CART_SLOT(config, m_cart, md_cart, nullptr).set_must_be_loaded(true); SOFTWARE_LIST(config, "cart_list").set_original("megadriv"); } +void md_cons_slot_state::ms_megajet(machine_config &config) +{ + ms_megadriv2(config); + + // P1 controller is integrated + m_ctrl_ports[0]->set_default_option(SMS_CTRL_OPTION_MD_6BUTTON); + m_ctrl_ports[0]->set_fixed(true); +} + void md_cons_slot_state::genesis_tmss(machine_config &config) { ms_megadriv(config); @@ -451,7 +260,9 @@ { dcat16_megadriv_base(config); - subdevice("megadriv")->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); + m_screen->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); + + md_ctrl_ports(config); // has SD card slot instead? // MD_CART_SLOT(config, m_cart, md_cart, nullptr).set_must_be_loaded(true); @@ -465,7 +276,7 @@ *************************************/ -/* we don't use the bios rom (it's not needed and only provides security on early models) */ +/* we don't use the BIOS ROM (it's not needed and only provides security on early models) */ ROM_START(genesis) ROM_REGION(MD_CPU_REGION_SIZE, "maincpu", ROMREGION_ERASEFF) @@ -513,16 +324,9 @@ * *************************************/ -void md_cons_state::init_mess_md_common() -{ - m_megadrive_io_read_data_port_ptr = read8sm_delegate(*this, FUNC(md_cons_state::mess_md_io_read_data_port)); - m_megadrive_io_write_data_port_ptr = write16sm_delegate(*this, FUNC(md_cons_state::mess_md_io_write_data_port)); -} - void md_cons_state::init_genesis() { init_megadriv(); - init_mess_md_common(); if (m_32x) { @@ -544,7 +348,6 @@ void md_cons_state::init_md_eur() { init_megadrie(); - init_mess_md_common(); if (m_32x) { @@ -566,7 +369,6 @@ void md_cons_state::init_md_jpn() { init_megadrij(); - init_mess_md_common(); if (m_32x) { @@ -660,7 +462,7 @@ m_32x->add_route(0, "lspeaker", 1.00); m_32x->add_route(1, "rspeaker", 1.00); - subdevice("megadriv")->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); + m_screen->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); // we need to remove and re-add the YM because the balance is different // due to MAME having severe issues if the dac output is > 0.40? (sound is corrupted even if DAC is silent?!) @@ -668,6 +470,9 @@ m_ymsnd->add_route(0, "lspeaker", (0.50)/2); m_ymsnd->add_route(1, "rspeaker", (0.50)/2); + md_ctrl_ports(config); + md_exp_port(config); + generic_cartslot_device &cartslot(GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "_32x_cart", "32x,bin")); cartslot.set_must_be_loaded(true); cartslot.set_device_load(FUNC(md_cons_state::_32x_cart)); @@ -692,7 +497,7 @@ m_32x->add_route(0, "lspeaker", 1.00); m_32x->add_route(1, "rspeaker", 1.00); - subdevice("megadriv")->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); + m_screen->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); // we need to remove and re-add the sound system because the balance is different // due to MAME having severe issues if the dac output is > 0.40? (sound is corrupted even if DAC is silent?!) @@ -700,6 +505,9 @@ m_ymsnd->add_route(0, "lspeaker", (0.50)/2); m_ymsnd->add_route(1, "rspeaker", (0.50)/2); + md_ctrl_ports(config); + md_exp_port(config); + generic_cartslot_device &cartslot(GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "_32x_cart", "32x,bin")); cartslot.set_must_be_loaded(true); cartslot.set_device_load(FUNC(md_cons_state::_32x_cart)); @@ -724,7 +532,7 @@ m_32x->add_route(0, "lspeaker", 1.00); m_32x->add_route(1, "rspeaker", 1.00); - subdevice("megadriv")->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); + m_screen->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); // we need to remove and re-add the sound system because the balance is different // due to MAME having severe issues if the dac output is > 0.40? (sound is corrupted even if DAC is silent?!) @@ -732,6 +540,9 @@ m_ymsnd->add_route(0, "lspeaker", (0.50)/2); m_ymsnd->add_route(1, "rspeaker", (0.50)/2); + md_ctrl_ports(config); + md_exp_port(config); + generic_cartslot_device &cartslot(GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "_32x_cart", "32x,bin")); cartslot.set_must_be_loaded(true); cartslot.set_device_load(FUNC(md_cons_state::_32x_cart)); @@ -776,7 +587,7 @@ { md_ntsc(config); - subdevice("megadriv")->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); + m_screen->screen_vblank().set(FUNC(md_cons_cd_state::screen_vblank_console)); SEGA_SEGACD_US(config, m_segacd, 0); m_segacd->set_palette("gen_vdp:gfx_palette"); @@ -785,6 +596,9 @@ config.set_perfect_quantum("segacd:segacd_68k"); // perfect sync to the fastest cpu + md_ctrl_ports(config); + md_exp_port(config); + CDROM(config, "cdrom").set_interface("scd_cdrom"); SOFTWARE_LIST(config, "cd_list").set_original("segacd"); @@ -794,7 +608,7 @@ { md2_ntsc(config); - subdevice("megadriv")->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); + m_screen->screen_vblank().set(FUNC(md_cons_cd_state::screen_vblank_console)); SEGA_SEGACD_US(config, m_segacd, 0); m_segacd->set_palette("gen_vdp:gfx_palette"); @@ -803,6 +617,8 @@ config.set_perfect_quantum("segacd:segacd_68k"); // perfect sync to the fastest cpu + md_ctrl_ports(config); + CDROM(config, "cdrom").set_interface("scd_cdrom"); SOFTWARE_LIST(config, "cd_list").set_original("segacd"); @@ -812,7 +628,7 @@ { md_pal(config); - subdevice("megadriv")->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); + m_screen->screen_vblank().set(FUNC(md_cons_cd_state::screen_vblank_console)); SEGA_SEGACD_EUROPE(config, m_segacd, 0); m_segacd->set_palette("gen_vdp:gfx_palette"); @@ -821,6 +637,9 @@ config.set_perfect_quantum("segacd:segacd_68k"); // perfect sync to the fastest cpu + md_ctrl_ports(config); + md_exp_port(config); + CDROM(config, "cdrom").set_interface("scd_cdrom"); SOFTWARE_LIST(config, "cd_list").set_original("megacd"); @@ -830,7 +649,7 @@ { md2_pal(config); - subdevice("megadriv")->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); + m_screen->screen_vblank().set(FUNC(md_cons_cd_state::screen_vblank_console)); SEGA_SEGACD_EUROPE(config, m_segacd, 0); m_segacd->set_palette("gen_vdp:gfx_palette"); @@ -839,6 +658,8 @@ config.set_perfect_quantum("segacd:segacd_68k"); // perfect sync to the fastest cpu + md_ctrl_ports(config); + CDROM(config, "cdrom").set_interface("scd_cdrom"); SOFTWARE_LIST(config, "cd_list").set_original("megacd"); @@ -848,7 +669,7 @@ { md_ntsc(config); - subdevice("megadriv")->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); + m_screen->screen_vblank().set(FUNC(md_cons_cd_state::screen_vblank_console)); SEGA_SEGACD_JAPAN(config, m_segacd, 0); m_segacd->set_palette("gen_vdp:gfx_palette"); @@ -857,6 +678,9 @@ config.set_perfect_quantum("segacd:segacd_68k"); // perfect sync to the fastest cpu + md_ctrl_ports(config); + md_exp_port(config); + CDROM(config, "cdrom").set_interface("scd_cdrom"); SOFTWARE_LIST(config, "cd_list").set_original("megacdj"); @@ -866,7 +690,7 @@ { md2_ntsc(config); - subdevice("megadriv")->screen_vblank().set(FUNC(md_cons_state::screen_vblank_console)); + m_screen->screen_vblank().set(FUNC(md_cons_cd_state::screen_vblank_console)); SEGA_SEGACD_JAPAN(config, m_segacd, 0); m_segacd->set_palette("gen_vdp:gfx_palette"); @@ -875,6 +699,8 @@ config.set_perfect_quantum("segacd:segacd_68k"); // perfect sync to the fastest cpu + md_ctrl_ports(config); + CDROM(config, "cdrom").set_interface("scd_cdrom"); SOFTWARE_LIST(config, "cd_list").set_original("megacdj"); @@ -896,7 +722,7 @@ CDROM(config, "cdrom").set_interface("scd_cdrom"); config.device_remove("cartslot"); - GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "_32x_cart", "32x,bin").set_device_load(FUNC(md_cons_state::_32x_cart)); + GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "_32x_cart", "32x,bin").set_device_load(FUNC(md_cons_cd_state::_32x_cart)); //config.m_perfect_cpu_quantum = subtag("32x_master_sh2"); SOFTWARE_LIST(config, "cd_list").set_original("segacd"); @@ -916,7 +742,7 @@ CDROM(config, "cdrom").set_interface("scd_cdrom"); config.device_remove("cartslot"); - GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "_32x_cart", "32x,bin").set_device_load(FUNC(md_cons_state::_32x_cart)); + GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "_32x_cart", "32x,bin").set_device_load(FUNC(md_cons_cd_state::_32x_cart)); //config.m_perfect_cpu_quantum = subtag("32x_master_sh2"); SOFTWARE_LIST(config, "cd_list").set_original("megacd"); @@ -936,7 +762,7 @@ CDROM(config, "cdrom").set_interface("scd_cdrom"); config.device_remove("cartslot"); - GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "_32x_cart", "32x,bin").set_device_load(FUNC(md_cons_state::_32x_cart)); + GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "_32x_cart", "32x,bin").set_device_load(FUNC(md_cons_cd_state::_32x_cart)); //config.m_perfect_cpu_quantum = subtag("32x_master_sh2"); SOFTWARE_LIST(config, "cd_list").set_original("megacdj"); @@ -1190,10 +1016,10 @@ CONS( 1994, 32x_mcdj, 32x_scd, 0, mdj_32x_scd, md, md_cons_cd_state, init_md_jpn, "Sega", "Mega-CD with 32X (Japan, NTSC)", MACHINE_NOT_WORKING ) // handheld hardware -CONS( 1995, gen_nomd, 0, 0, ms_megadriv2, gen_nomd, md_cons_slot_state, init_genesis, "Sega", "Genesis Nomad (USA Genesis handheld)", MACHINE_SUPPORTS_SAVE ) +CONS( 1995, gen_nomd, 0, 0, ms_megajet, gen_nomd, md_cons_slot_state, init_genesis, "Sega", "Genesis Nomad (USA Genesis handheld)", MACHINE_SUPPORTS_SAVE ) // handheld without LCD -CONS( 1993, megajet, gen_nomd, 0, ms_megadriv2, megajet, md_cons_slot_state, init_md_jpn, "Sega", "Mega Jet (Japan Mega Drive handheld)", MACHINE_SUPPORTS_SAVE ) +CONS( 1993, megajet, gen_nomd, 0, ms_megajet, md, md_cons_slot_state, init_md_jpn, "Sega", "Mega Jet (Japan Mega Drive handheld)", MACHINE_SUPPORTS_SAVE ) // LaserActive (Laserdisc Player(ex: CLD-A100) with 'Control Pack' Addon slot) // Mega Drive Pack(PAC-S1)/Genesis Pack(PAC-S10) plugged into the Control Pack slot, for plays Mega Drive/Genesis Cartridge, Mega-CD/Sega CD, Mega-LD stuffs diff -Nru mame-0.250+dfsg.1/src/mame/sega/mdconsole.h mame-0.251+dfsg.1/src/mame/sega/mdconsole.h --- mame-0.250+dfsg.1/src/mame/sega/mdconsole.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/mdconsole.h 2022-12-29 14:20:09.000000000 +0000 @@ -12,6 +12,7 @@ #include "bus/megadrive/md_slot.h" #include "bus/megadrive/md_carts.h" +#include "bus/sms_ctrl/smsctrl.h" class md_cons_state : public md_base_state @@ -19,53 +20,56 @@ public: md_cons_state(const machine_config &mconfig, device_type type, const char *tag) : md_base_state(mconfig, type, tag), + m_ctrl_ports(*this, { "ctrl1", "ctrl2", "exp" }), m_32x(*this,"sega32x"), m_segacd(*this,"segacd"), m_cart(*this, "mdslot"), m_tmss(*this, "tmss") { } - ioport_port *m_io_ctrlr = nullptr; - ioport_port *m_io_pad3b[4]{}; - ioport_port *m_io_pad6b[2][4]{}; - - optional_device m_32x; - optional_device m_segacd; - optional_device m_cart; - optional_region_ptr m_tmss; - - void init_mess_md_common(); void init_genesis(); void init_md_eur(); void init_md_jpn(); - uint8_t mess_md_io_read_data_port(offs_t offset); - void mess_md_io_write_data_port(offs_t offset, uint16_t data); + void md_32x(machine_config &config); + void genesis_32x(machine_config &config); + void mdj_32x(machine_config &config); + void dcat16_megadriv(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; DECLARE_WRITE_LINE_MEMBER(screen_vblank_console); DECLARE_DEVICE_IMAGE_LOAD_MEMBER( _32x_cart ); + void install_cartslot(); + void install_tmss(); + + void md_ctrl_ports(machine_config &config); + void md_exp_port(machine_config &config); + + optional_device_array m_ctrl_ports; + optional_device m_32x; + optional_device m_segacd; + optional_device m_cart; + optional_region_ptr m_tmss; + +private: void _32x_scanline_callback(int x, uint32_t priority, uint32_t &lineptr); void _32x_interrupt_callback(int scanline, int irq6); void _32x_scanline_helper_callback(int scanline); - void install_cartslot(); - void install_tmss(); uint16_t tmss_r(offs_t offset); void tmss_swap_w(uint16_t data); - void dcat16_megadriv_base(machine_config &config); - void dcat16_megadriv(machine_config &config); - void md_32x(machine_config &config); - void genesis_32x(machine_config &config); - void mdj_32x(machine_config &config); + void dcat16_megadriv_base(machine_config &config); -protected: - virtual void machine_start() override; - virtual void machine_reset() override; + void dcat16_megadriv_map(address_map &map); }; + class md_cons_slot_state : public md_cons_state { public: @@ -76,6 +80,7 @@ void ms_megadpal(machine_config &config); void ms_megadriv(machine_config &config); void ms_megadriv2(machine_config &config); + void ms_megajet(machine_config &config); void genesis_tmss(machine_config &config); @@ -84,6 +89,7 @@ virtual void machine_start() override; }; + class md_cons_cd_state : public md_cons_state { public: diff -Nru mame-0.250+dfsg.1/src/mame/sega/mdioport.cpp mame-0.251+dfsg.1/src/mame/sega/mdioport.cpp --- mame-0.250+dfsg.1/src/mame/sega/mdioport.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/mdioport.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,525 @@ +// license:BSD-3-Clause +// copyright-holders:Vas Crabb +/*********************************************************************** + + Sega Mega Drive I/O Port + + TODO: + * How is the serial clock generated? What's the base clock + input? + * Serial reception - requires peripherals to be reworked. + * Is the transmit data register separate from the transmit shift + register? + * Does receive overrun set the receive error bit? + +***********************************************************************/ + +#include "emu.h" +#include "mdioport.h" + +#include + +//#define LOG_OUTPUT_FUNC osd_printf_info +//#define VERBOSE 1 +#include "logmacro.h" + + + +/*********************************** + Device type definitions +***********************************/ + +DEFINE_DEVICE_TYPE(MEGADRIVE_IO_PORT, megadrive_io_port_device, "megadrive_io_port", "Sega Mega Drive I/O Port Controller") +DEFINE_DEVICE_TYPE(GAMEGEAR_IO_PORT, gamegear_io_port_device, "gamegear_io_port", "Sega Game Gear I/O Port Controller") + + + +/*********************************** + Common behaviour +***********************************/ + +megadrive_io_port_device_base::megadrive_io_port_device_base( + machine_config const &mconfig, + device_type type, + char const *tag, + device_t *owner, + u32 clock) : + device_t(mconfig, type, tag, owner, clock), + device_serial_interface(mconfig, *this), + m_in_callback(*this), + m_out_callback(*this), + m_hl_callback(*this), + m_th_in(DATA_TH_MASK), + m_txd(DATA_TXD_MASK), + m_data(0), + m_ctrl(0), + m_s_ctrl(0), + m_txdata(0), + m_rxdata(0) +{ +} + + +u8 megadrive_io_port_device_base::data_r() +{ + // TODO: confirm what's read from pins set to input and configured for serial I/O + u8 const serialmask = + (s_ctrl_sin() ? DATA_RXD_MASK : 0x00) | + (s_ctrl_sout() ? DATA_TXD_MASK : 0x00); + u8 const outmask = m_ctrl | 0x80; + u8 const inmask = ~(serialmask | outmask); + + u8 result = (m_data & outmask) | (serialmask & ~outmask) | (m_th_in & inmask); + if (inmask & 0x3f) + result |= (!m_in_callback.isnull() ? m_in_callback() : 0x3f) & inmask; + + return result; +} + + +void megadrive_io_port_device_base::txdata_w(u8 data) +{ + if (s_ctrl_tful()) + { + LOG( + "%s: TxDATA = 0x%02X, previous byte 0x%02X lost\n", + machine().describe_context(), + data, + m_txdata); + } + else if (is_transmit_register_empty()) + { + LOG( + "%s: TxDATA = 0x%02X, start transmission\n", + machine().describe_context(), + data); + transmit_register_setup(data); + } + else + { + LOG("%s: TxDATA = 0x%02X\n", machine().describe_context(), data); + m_s_ctrl |= S_CTRL_TFUL_MASK; + } + + m_txdata = data; +} + + +void megadrive_io_port_device_base::device_resolve_objects() +{ + m_th_in = DATA_TH_MASK; + + m_in_callback.resolve(); + m_out_callback.resolve(); + m_hl_callback.resolve_safe(); +} + + +void megadrive_io_port_device_base::device_start() +{ + save_item(NAME(m_txd)); + save_item(NAME(m_th_in)); + save_item(NAME(m_data)); + save_item(NAME(m_ctrl)); + save_item(NAME(m_s_ctrl)); + save_item(NAME(m_txdata)); + save_item(NAME(m_rxdata)); + + set_data_frame(1, 8, PARITY_NONE, STOP_BITS_1); +} + + +void megadrive_io_port_device_base::device_reset() +{ + // TODO: proper reset state for DATA, TxDATA and RxDATA + m_txd = DATA_TXD_MASK; + m_data = 0xff; + m_ctrl = 0x00; + m_s_ctrl = 0x00; + m_txdata = 0x00; + m_rxdata = 0x00; + + receive_register_reset(); + transmit_register_reset(); + set_rate(4800); + + if (!m_out_callback.isnull()) + m_out_callback(0x7f, 0x00); + m_hl_callback(0); +} + + +void megadrive_io_port_device_base::tra_callback() +{ + u8 const txd = transmit_register_get_data_bit() ? DATA_TXD_MASK : 0x00; + if (txd != m_txd) + { + m_txd = txd; + if (!m_out_callback.isnull() && s_ctrl_sout()) + update_out(); + } +} + + +void megadrive_io_port_device_base::tra_complete() +{ + if (s_ctrl_tful()) + { + LOG("serial transmit complete, load next byte 0x%02X\n", m_txdata); + transmit_register_setup(m_txdata); + m_s_ctrl &= ~S_CTRL_TFUL_MASK; + } + else + { + LOG("serial transmit complete\n"); + } +} + + +inline bool megadrive_io_port_device_base::rrdy_int() const +{ + return s_ctrl_rint() && s_ctrl_rrdy(); +} + + +inline u8 megadrive_io_port_device_base::out_drive() const +{ + return + (m_ctrl & (s_ctrl_sin() ? 0x5f : 0x7f)) | + (s_ctrl_sout() ? DATA_TXD_MASK : 0x00); +} + + +inline void megadrive_io_port_device_base::update_out() +{ + assert(!m_out_callback.isnull()); + + u8 const drive = out_drive(); + u8 const data = (m_data | ~drive) & (s_ctrl_sout() ? 0x6f : 0x7f); + m_out_callback(data | (s_ctrl_sout() ? m_txd : 0x00), drive); +} + + +inline void megadrive_io_port_device_base::set_data(u8 data) +{ + u8 const outmask = + (m_ctrl & 0x7f) & + (s_ctrl_sin() ? ~DATA_RXD_MASK : 0xff) & + (s_ctrl_sout() ? ~DATA_TXD_MASK : 0xff); + bool const outupdate = + !m_out_callback.isnull() && + ((data & outmask) != (m_data & outmask)); + + m_data = data; + if (outupdate) + update_out(); +} + + +inline void megadrive_io_port_device_base::set_ctrl(u8 data) +{ + u8 const changed = data ^ m_ctrl; + u8 const parallelmask = + 0x4f | + (s_ctrl_sin() ? 0x00 : DATA_RXD_MASK) | + (s_ctrl_sout() ? 0x00 : DATA_TXD_MASK); + bool const outupdate = !m_out_callback.isnull() && (changed & parallelmask); + + m_ctrl = data; + if (outupdate) + update_out(); +} + + +inline bool megadrive_io_port_device_base::set_s_ctrl(u8 data) +{ + u8 const changed = data ^ m_s_ctrl; + + if (changed & 0xc0) + { + int rate; + switch (data & 0xc0) + { + default: // shut up stupid compilers + case 0x00: rate = 4800; break; + case 0x40: rate = 2400; break; + case 0x80: rate = 1200; break; + case 0xc0: rate = 300; break; + } + LOG( + "%s: serial data rate = %u bits/second\n", + machine().describe_context(), + rate); + set_rate(rate); + } + + bool const rintchanged = + ((data ^ m_s_ctrl) & S_CTRL_RINT_MASK) && + s_ctrl_rrdy(); + bool const outchanged = + ((changed & S_CTRL_SIN_MASK) && BIT(m_ctrl, DATA_RXD_BIT)) || + ((changed & S_CTRL_SOUT_MASK) && BIT(~m_ctrl | (m_data ^ m_txd), DATA_TXD_BIT)); + + m_s_ctrl = (data & 0xf8) | (m_s_ctrl & 0x07); + if (!m_out_callback.isnull() && outchanged) + update_out(); + + return rintchanged; +} + + +inline bool megadrive_io_port_device_base::data_received() +{ + receive_register_extract(); + u8 const data = get_received_char(); + bool const rintchanged = s_ctrl_rint() && !s_ctrl_rrdy(); + + if (s_ctrl_rrdy()) + { + // TODO: confirm whether receive overrun sets RERR + LOG( + "received byte 0x%02X%s, previous received byte 0x%02X lost\n", + data, + is_receive_framing_error() ? ", framing error" : "", + m_rxdata); + m_s_ctrl |= S_CTRL_RERR_MASK; + } + else if (is_receive_framing_error()) + { + LOG("received byte 0x%02X, framing error\n", data); + m_s_ctrl |= S_CTRL_RERR_MASK | S_CTRL_RRDY_MASK; + } + else + { + LOG("received byte 0x%02X\n", data); + m_s_ctrl |= S_CTRL_RRDY_MASK; + } + + m_rxdata = data; + + return rintchanged; +} + + + +/*********************************** + Mega Drive variant +***********************************/ + +megadrive_io_port_device::megadrive_io_port_device( + machine_config const &mconfig, + char const *tag, + device_t *owner, + u32 clock) : + megadrive_io_port_device_base(mconfig, MEGADRIVE_IO_PORT, tag, owner, clock) +{ +} + + +WRITE_LINE_MEMBER(megadrive_io_port_device::th_w) +{ + u8 const th = state ? DATA_TH_MASK : 0x00; + if (th != m_th_in) + { + LOG(state ? "TH rising\n" : "TH falling\n"); + bool const hlupdate = + ctrl_int() && + !BIT(m_ctrl, DATA_TH_BIT) && + !rrdy_int(); + m_th_in = th; + if (hlupdate) + m_hl_callback(state ? 0 : 1); + } +} + + +u8 megadrive_io_port_device::rxdata_r() +{ + if (!machine().side_effects_disabled()) + { + LOG( + "%s: read RxDATA 0x%02X\n%s%s", + machine().describe_context(), + m_rxdata, + s_ctrl_rerr() ? ", clear RERR" : "", + s_ctrl_rrdy() ? ", clear RRDY" : ""); + bool const hlupdate = rrdy_int() && !th_int(); + m_s_ctrl &= ~(S_CTRL_RERR_MASK | S_CTRL_RRDY_MASK); + if (hlupdate) + m_hl_callback(0); + } + + return m_rxdata; +} + + +void megadrive_io_port_device::data_w(u8 data) +{ + // TODO: confirm whether TH-INT follows TH as output + bool const hlupdate = + ctrl_int() && + !rrdy_int() && + BIT(m_ctrl & (data ^ m_data), DATA_TH_BIT); + set_data(data); + if (hlupdate) + m_hl_callback(BIT(~data, DATA_TH_BIT)); +} + + +void megadrive_io_port_device::ctrl_w(u8 data) +{ + // TODO: confirm whether TH-INT follows TH as output + u8 const changed = data ^ m_ctrl; + bool const hlupdate = + (BIT(changed, 7) || (BIT(data, 7) && BIT(changed & (m_data ^ m_th_in), DATA_TH_BIT))) && + !rrdy_int(); + set_ctrl(data); + if (hlupdate) + m_hl_callback(th_int() ? 1 : 0); +} + + +void megadrive_io_port_device::s_ctrl_w(u8 data) +{ + bool const rintchanged = set_s_ctrl(data); + if (rintchanged && !th_int()) + m_hl_callback(s_ctrl_rint() ? 1 : 0); +} + + +void megadrive_io_port_device::rcv_complete() +{ + bool const rintchanged = data_received(); + if (rintchanged && !th_int()) + m_hl_callback(1); +} + + +inline bool megadrive_io_port_device::th_int() const +{ + // TODO: confirm whether TH-INT follows TH as output + return + ctrl_int() && + (BIT(m_ctrl, DATA_TH_BIT) ? !BIT(m_data, DATA_TH_BIT) : !m_th_in); +} + + + +/*********************************** + Game Gear variant +***********************************/ + +gamegear_io_port_device::gamegear_io_port_device( + machine_config const &mconfig, + char const *tag, + device_t *owner, + u32 clock) : + megadrive_io_port_device_base(mconfig, GAMEGEAR_IO_PORT, tag, owner, clock), + m_pc6int(0) +{ +} + + +WRITE_LINE_MEMBER(gamegear_io_port_device::th_w) +{ + u8 const th = state ? DATA_TH_MASK : 0x00; + if (th != m_th_in) + { + LOG(state ? "PC6 rising\n" : "PC6 falling\n"); + m_th_in = th; + if (!state && ctrl_int() && !BIT(m_ctrl, DATA_TH_BIT) && !m_pc6int) + { + LOG("PC6 interrupt triggered\n"); + m_pc6int = 1; + if (!rrdy_int()) + m_hl_callback(1); + } + } +} + + +u8 gamegear_io_port_device::rxdata_r() +{ + if (!machine().side_effects_disabled()) + { + LOG( + "%s: read RxDATA 0x%02X\n%s%s", + machine().describe_context(), + m_rxdata, + s_ctrl_rerr() ? ", clear RERR" : "", + s_ctrl_rrdy() ? ", clear RRDY" : ""); + bool const hlupdate = rrdy_int() && !m_pc6int; + m_s_ctrl &= ~(S_CTRL_RERR_MASK | S_CTRL_RRDY_MASK); + if (hlupdate) + m_hl_callback(0); + } + + return m_rxdata; +} + + +void gamegear_io_port_device::data_w(u8 data) +{ + // TODO: can changing PC6 as an output set the interrupt latch? + set_data(data); +} + + +void gamegear_io_port_device::ctrl_w(u8 data) +{ + // TODO: can changing the direction of the TH pin set the interrupt latch? + bool const intchanged = BIT(~data ^ m_ctrl, 7); + set_ctrl(~data); + if (intchanged) + { + if (m_pc6int) + { + if (!ctrl_int()) + { + LOG("%s: PC6 interrupt cleared\n", machine().describe_context()); + m_pc6int = 0; + if (!rrdy_int()) + m_hl_callback(0); + } + } + else if (ctrl_int() && !BIT(m_data & m_ctrl, DATA_TH_BIT)) + { + LOG("%s: PC6 interrupt triggered\n", machine().describe_context()); + m_pc6int = 1; + if (!rrdy_int()) + m_hl_callback(1); + } + } +} + + +void gamegear_io_port_device::s_ctrl_w(u8 data) +{ + bool const rintchanged = set_s_ctrl(data); + if (rintchanged && !m_pc6int) + m_hl_callback(s_ctrl_rint() ? 1 : 0); +} + + +void gamegear_io_port_device::device_start() +{ + megadrive_io_port_device_base::device_start(); + + save_item(NAME(m_pc6int)); +} + + +void gamegear_io_port_device::device_reset() +{ + megadrive_io_port_device_base::device_reset(); + + m_pc6int = 0; +} + + +void gamegear_io_port_device::rcv_complete() +{ + bool const rintchanged = data_received(); + if (rintchanged && !m_pc6int) + m_hl_callback(1); +} diff -Nru mame-0.250+dfsg.1/src/mame/sega/mdioport.h mame-0.251+dfsg.1/src/mame/sega/mdioport.h --- mame-0.250+dfsg.1/src/mame/sega/mdioport.h 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/mdioport.h 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,209 @@ +// license:BSD-3-Clause +// copyright-holders:Vas Crabb +/*********************************************************************** + + Sega Mega Drive I/O Port + + Seven I/O lines with individually selectable direction, UART, + and interrupt output. + + Mega Drive has three instances of this block connected to the + CTRL1, CTRL2 and EXP connectors. + + Game Gear has one instance of this block connected to the EXT + connector. + +***********************************************************************/ +#ifndef MAME_SEGA_MDIOPORT_H +#define MAME_SEGA_MDIOPORT_H + +#pragma once + +#include "diserial.h" + +#include + + +class megadrive_io_port_device_base : public device_t, public device_serial_interface +{ +public: + using parallel_in_delegate = device_delegate; + using parallel_out_delegate = device_delegate; + + // external signal handler configuration + template + void set_in_handler(T &&... args) + { + m_in_callback.set(std::forward(args)...); + } + template + void set_out_handler(T &&... args) + { + m_out_callback.set(std::forward(args)...); + } + + // host output configuration + auto hl_handler() { return m_hl_callback.bind(); } + + // host read registers + u8 data_r(); + u8 s_ctrl_r() { return m_s_ctrl; } + u8 txdata_r() { return m_txdata; } + + // host write registers + void txdata_w(u8 data); + +protected: + enum : unsigned + { + DATA_UP_BIT = 0, + DATA_DOWN_BIT, + DATA_LEFT_BIT, + DATA_RIGHT_BIT, + DATA_TL_BIT, + DATA_TR_BIT, + DATA_TH_BIT, + + DATA_TXD_BIT = DATA_TL_BIT, + DATA_RXD_BIT = DATA_TR_BIT + }; + + enum : u8 + { + DATA_TH_MASK = 1U << DATA_TH_BIT, + DATA_TR_MASK = 1U << DATA_TR_BIT, + DATA_TL_MASK = 1U << DATA_TL_BIT, + DATA_RIGHT_MASK = 1U << DATA_RIGHT_BIT, + DATA_LEFT_MASK = 1U << DATA_LEFT_BIT, + DATA_DOWN_MASK = 1U << DATA_DOWN_BIT, + DATA_UP_MASK = 1U << DATA_UP_BIT, + + DATA_RXD_MASK = DATA_TR_MASK, + DATA_TXD_MASK = DATA_TL_MASK + }; + + enum : u8 + { + S_CTRL_SIN_MASK = 0x20, + S_CTRL_SOUT_MASK = 0x10, + S_CTRL_RINT_MASK = 0x08, + S_CTRL_RERR_MASK = 0x04, + S_CTRL_RRDY_MASK = 0x02, + S_CTRL_TFUL_MASK = 0x01 + }; + + megadrive_io_port_device_base( + machine_config const &mconfig, + device_type type, + char const *tag, + device_t *owner, + u32 clock) ATTR_COLD; + + // device_t implementation + virtual void device_resolve_objects() override ATTR_COLD; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; + + // device_serial_interface implementation + virtual void tra_callback() override; + virtual void tra_complete() override; + + bool ctrl_int() const { return BIT(m_ctrl, 7); } + + bool s_ctrl_sin() const { return m_s_ctrl & S_CTRL_SIN_MASK; } + bool s_ctrl_sout() const { return m_s_ctrl & S_CTRL_SOUT_MASK; } + bool s_ctrl_rint() const { return m_s_ctrl & S_CTRL_RINT_MASK; } + bool s_ctrl_rerr() const { return m_s_ctrl & S_CTRL_RERR_MASK; } + bool s_ctrl_rrdy() const { return m_s_ctrl & S_CTRL_RRDY_MASK; } + bool s_ctrl_tful() const { return m_s_ctrl & S_CTRL_TFUL_MASK; } + + bool rrdy_int() const; + u8 out_drive() const; + void update_out(); + void set_data(u8 data); + void set_ctrl(u8 data); + bool set_s_ctrl(u8 data); + bool data_received(); + + parallel_in_delegate m_in_callback; + parallel_out_delegate m_out_callback; + devcb_write_line m_hl_callback; + + u8 m_th_in; + u8 m_txd; + u8 m_data; + u8 m_ctrl; + u8 m_s_ctrl; + u8 m_txdata; + u8 m_rxdata; +}; + + +class megadrive_io_port_device : public megadrive_io_port_device_base +{ +public: + megadrive_io_port_device( + machine_config const &mconfig, + char const *tag, + device_t *owner, + u32 clock) ATTR_COLD; + + // external signal inputs + DECLARE_WRITE_LINE_MEMBER(th_w); + + // host read registers + u8 ctrl_r() { return m_ctrl; } + u8 rxdata_r(); + + // host write registers + void data_w(u8 data); + void ctrl_w(u8 data); + void s_ctrl_w(u8 data); + +protected: + // device_serial_interface implementation + virtual void rcv_complete() override; + +private: + bool th_int() const; +}; + + +class gamegear_io_port_device : public megadrive_io_port_device_base +{ +public: + gamegear_io_port_device( + machine_config const &mconfig, + char const *tag, + device_t *owner, + u32 clock) ATTR_COLD; + + // external signal inputs + DECLARE_WRITE_LINE_MEMBER(th_w); + + // host read registers + u8 ctrl_r() { return ~m_ctrl; } + u8 rxdata_r(); + + // host write registers + void data_w(u8 data); + void ctrl_w(u8 data); + void s_ctrl_w(u8 data); + +protected: + // device_t implementation + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; + + // device_serial_interface implementation + virtual void rcv_complete() override; + +private: + u8 m_pc6int; +}; + + +DECLARE_DEVICE_TYPE(MEGADRIVE_IO_PORT, megadrive_io_port_device) +DECLARE_DEVICE_TYPE(GAMEGEAR_IO_PORT, gamegear_io_port_device) + +#endif // MAME_SEGA_MDIOPORT_H diff -Nru mame-0.250+dfsg.1/src/mame/sega/megadriv_acbl.cpp mame-0.251+dfsg.1/src/mame/sega/megadriv_acbl.cpp --- mame-0.250+dfsg.1/src/mame/sega/megadriv_acbl.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/megadriv_acbl.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -15,7 +15,6 @@ * Sonic The Hedgehog 3 * Super Street Fighter II - The New Challengers * Sunset Riders - * Top Shooter * Twinkle Tale @@ -145,122 +144,9 @@ - title raster effect is broken (bug in Mega Drive code, happens with normal set too) -**************************************************************************** - -Top Shooter PCB info -==================== - - Sun Mixing board, looks like a hacked up Genesis clone. - - Original driver by David Haywood - Inputs by Mariusz Wojcieszek - - Top Shooter - (c)1995 - older board, look more like an actual hacked cart system, has an MCU - -TOP SHOOTER - Sun Mixing Co. Ltd. 1995 - -To me it seems like an original cartridge-based arcade board -hacked to use an external ROM board and a standard JAMMA -connector, but of course, I can be wrong. - - - UPPER BOARD - - _________________________________________________________ - | ___________ ___________ _____ __ | - | 74LS245P |U14 Empty | |U12 ROM1 | |IC1| |B| | - | 74LS245P |__________| |__________| |___| | - | 74LS245P ___________ ___________ _____________ | - __| |U13 Empty | |U11 ROM2 | | AT89C51 | | - |_ J |__________| |__________| |____________| |_ - |_ A ______________________ _____ |_ J - |_ M | U10 MC68000P10 | |OSC| |_ P - |_ M | Motorola | |_ 2 - |_ A |______________________| 74HC00P |_ - |_ 74LS245P ______________________ ________ | - |_ | U9 Empty | |HM6116L | - |_ | | |_______| |_ J - |_ |______________________| |_ P - |_ 74LS245P TD62oo3AP 74LS373P |_ 3 - |_ __________ | - |_ 74LS245P |GALv20V8B| | - |_ ______ | - |_ _____ |DIPS| |_ P - | |U24 | |_ 1 - | 74LS245P | - | TD62oo3AP | - | | - |_ 97 ____________ _____| - |_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|_|_|_| - - - IC1 = Surface scratched out, don't know what it is - U24 = Surface scratched out, seems like a PROM - DIPs = Fixed as: 00001000 - ROMs = Toshiba TC574000AD - - JP2, JP3 and P1 connects both boards, also another - on-board connector is used, see notes for the 68K socket - for the lower board. - - - LOWER BOARD - - _________________________________________________________ - | ____ ____ | - | ___ | I| | I| | - | |I| | C| | C| | - | |C| | 3| | 2| | - | |1| |__| |__| | - | |3| |__ - | _ _________________________ __| - | |_| ||||||||||||||||||||||||| __| - | IC14 ---------- SLOT --------- __| - | ______________________ __| - | | | __| - | ___ | 68K (to upper board) | _______ __| - | |I| |______________________| |SE-94| __| - | |C| |JDDB | _| - | |1| _______ |_____| | - | |2| |SE-93| IC4 | - | |JDDA | | - | |_____| ___________ |_ - | IC8 |Z8400A PS| | - | |_________| | - | ______ _________ _________ | - | | OSC| | IC11 | | IC7 | | - | _____________ |_______| |_______| | - | RST | | CN5 CN6 | - |___________| |______________________________| - - - IC3 = IC2 = Winbond W24257V - IC7 = 6264LD 9440 - IC11 = SE-95 JDDC - IC12 = Sony CXA1634P - IC13 = Sony CXA1145P - IC14 = GL358 N16 - - RST is a reset button. - - OSC = 53.693175 MHz - - CN5 and CN6 are 9-pin connectors... serial ports? - - There are two wires soldered directly to two connectors - of the slot, going to the upper board (via P1). - - The whole upper board is plugged using the 68000 socket, - there is no 68K on the lower board. - - There is an edge connector, but it isn't JAMMA. - - "HK-986 (KINYO)" is written on the PCB, near the slot. - ****************************************************************************/ #include "emu.h" -#include "megadriv.h" #include "megadriv_acbl.h" @@ -269,31 +155,40 @@ // smaller ROM region because some bootlegs check for RAM there (used by topshoot and hshavoc) void md_boot_state::md_bootleg_map(address_map &map) { + megadriv_68k_base_map(map); + map(0x000000, 0x1fffff).rom(); // Cartridge Program ROM map(0x200000, 0x2023ff).ram(); // Tested +} + +void md_boot_6button_state::ssf2mdb_68k_map(address_map &map) +{ + megadriv_68k_map(map); - map(0xa00000, 0xa01fff).rw(FUNC(md_boot_state::megadriv_68k_read_z80_ram), FUNC(md_boot_state::megadriv_68k_write_z80_ram)); - map(0xa02000, 0xa03fff).w(FUNC(md_boot_state::megadriv_68k_write_z80_ram)); - map(0xa04000, 0xa04003).rw(FUNC(md_boot_state::megadriv_68k_YM2612_read), FUNC(md_boot_state::megadriv_68k_YM2612_write)); - map(0xa06000, 0xa06001).w(FUNC(md_boot_state::megadriv_68k_z80_bank_write)); - - map(0xa10000, 0xa1001f).rw(FUNC(md_boot_state::megadriv_68k_io_read), FUNC(md_boot_state::megadriv_68k_io_write)); - map(0xa11100, 0xa11101).rw(FUNC(md_boot_state::megadriv_68k_check_z80_bus), FUNC(md_boot_state::megadriv_68k_req_z80_bus)); - map(0xa11200, 0xa11201).w(FUNC(md_boot_state::megadriv_68k_req_z80_reset)); + map(0x400000, 0x5fffff).rom().region("maincpu", 0x400000).unmapw(); + map(0x770070, 0x770075).r(FUNC(md_boot_6button_state::dsw_r)); + map(0xa130f0, 0xa130ff).nopw(); // custom banking is disabled (!) +} - map(0xc00000, 0xc0001f).rw(m_vdp, FUNC(sega315_5313_device::vdp_r), FUNC(sega315_5313_device::vdp_w)); - map(0xd00000, 0xd0001f).rw(m_vdp, FUNC(sega315_5313_device::vdp_r), FUNC(sega315_5313_device::vdp_w)); - map(0xe00000, 0xe0ffff).ram().mirror(0x1f0000).share("megadrive_ram"); +void md_boot_state::megadrvb(machine_config &config) +{ + md_ntsc(config); + + ctrl1_3button(config); + ctrl2_3button(config); + + m_ioports[2]->set_in_handler(NAME([this] () { return m_io_exp.read_safe(0x3f); })); } void md_boot_state::md_bootleg(machine_config &config) { - md_ntsc(config); + megadrvb(config); m_maincpu->set_addrmap(AS_PROGRAM, &md_boot_state::md_bootleg_map); } + /************************************* * * Games memory handlers @@ -407,94 +302,6 @@ return ioport(dswname[offset])->read(); } -uint16_t md_boot_state::topshoot_200051_r() -{ - return -0x5b; -} - -uint16_t md_boot_state::sbubsm_400000_r() -{ - logerror("%s: sbubsm_400000_r\n", machine().describe_context().c_str()); - return 0x5500; -} - -uint16_t md_boot_state::sbubsm_400002_r() -{ - logerror("%s: sbubsm_400002_r\n", machine().describe_context().c_str()); - return 0x0f00; -} - -// jzth protection -void md_boot_state::bl_710000_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - int pc = m_maincpu->pc(); - - logerror("%06x writing to bl_710000_w %04x %04x\n", pc, data, mem_mask); - - // protection value is read from 0x710000 after a series of writes.. and stored at ff0007 - // startup - /* - 059ce0 writing to bl_710000_w ff08 ffff - 059d04 writing to bl_710000_w 000a ffff - 059d04 writing to bl_710000_w 000b ffff - 059d04 writing to bl_710000_w 000c ffff - 059d04 writing to bl_710000_w 000f ffff - 059d1c writing to bl_710000_w ff09 ffff - 059d2a reading from bl_710000_r (wants 0xe) - 059ce0 writing to bl_710000_w ff08 ffff - 059d04 writing to bl_710000_w 000a ffff - 059d04 writing to bl_710000_w 000b ffff - 059d04 writing to bl_710000_w 000c ffff - 059d04 writing to bl_710000_w 000f ffff - 059d1c writing to bl_710000_w ff09 ffff - 059d2a reading from bl_710000_r (wants 0xe) - */ - // before lv stage 3 - /* - 059ce0 writing to bl_710000_w 0008 ffff - 059d04 writing to bl_710000_w 000b ffff - 059d04 writing to bl_710000_w 000f ffff - 059d1c writing to bl_710000_w ff09 ffff - 059d2a reading from bl_710000_r (wants 0x4) - */ - // start level 3 - /* - 059ce0 writing to bl_710000_w ff08 ffff - 059d04 writing to bl_710000_w 000b ffff - 059d04 writing to bl_710000_w 000c ffff - 059d04 writing to bl_710000_w 000e ffff - 059d1c writing to bl_710000_w ff09 ffff - 059d2a reading from bl_710000_r (wants 0x5) - - // after end sequence - 059ce0 writing to bl_710000_w 0008 ffff - 059d04 writing to bl_710000_w 000a ffff - 059d04 writing to bl_710000_w 000b ffff - 059d04 writing to bl_710000_w 000c ffff - 059d04 writing to bl_710000_w 000f ffff - 059d1c writing to bl_710000_w ff09 ffff - 059d2a reading from bl_710000_r (wants 0xe) - - */ - m_protcount++; -} - - -uint16_t md_boot_state::bl_710000_r() -{ - uint16_t ret; - int pc = m_maincpu->pc(); - logerror("%06x reading from bl_710000_r\n", pc); - - if (m_protcount==6) { ret = 0xe; } - else if (m_protcount==5) { ret = 0x5; } - else if (m_protcount==4) { ret = 0x4; } - else ret = 0xf; - - m_protcount = 0; - return ret; -} - /************************************* * @@ -511,26 +318,22 @@ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNUSED ) // no MODE button PORT_MODIFY("PAD2") PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNUSED ) // no MODE button - PORT_START("EXTRA1") // Extra buttons for Joypad 1 (6 button + start + mode) NOT READ DIRECTLY - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("EXTRA2") // Extra buttons for Joypad 2 (6 button + start + mode) NOT READ DIRECTLY - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("IN0") // 3rd I/O port + PORT_START("EXP") // 3rd I/O port PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) @@ -585,26 +388,22 @@ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNUSED ) // no MODE button PORT_MODIFY("PAD2") PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNUSED ) // no MODE button - PORT_START("EXTRA1") // Extra buttons for Joypad 1 (6 button + start + mode) NOT READ DIRECTLY - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("EXTRA2") // Extra buttons for Joypad 2 (6 button + start + mode) NOT READ DIRECTLY - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("IN0") + PORT_START("EXP") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) @@ -782,7 +581,7 @@ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED ) // c (duplicate shoot button) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 ) - PORT_START("IN0") // 3rd I/O port + PORT_START("EXP") // 3rd I/O port PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) @@ -812,83 +611,6 @@ PORT_DIPSETTING( 0x00, "6" ) INPUT_PORTS_END -static INPUT_PORTS_START( topshoot ) // Top Shooter Input Ports - - PORT_START("IN0") - PORT_BIT( 0x4f, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Bet") PORT_IMPULSE(1) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Start") PORT_IMPULSE(1) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Fire") PORT_IMPULSE(1) - - PORT_START("IN1") - PORT_BIT( 0xe7, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Test mode down") PORT_IMPULSE(1) - - PORT_START("IN2") - PORT_BIT( 0xfd, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) - - PORT_START("IN3") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1) - PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNKNOWN ) -INPUT_PORTS_END - -static INPUT_PORTS_START( sbubsm ) - // the bit ordering in the ports is strange here because this is being read through shared RAM, the MCU presumably reads the real inputs then scrambles them in RAM for the 68k to sort out - PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) - - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("IN3") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("IN4") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - // no service mode here? -INPUT_PORTS_END - INPUT_PORTS_START( barekch ) // TODO: identify dips. PCB has 3 x 8-dip banks, but probably most unused PORT_INCLUDE( md_common ) @@ -904,7 +626,7 @@ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 ) - PORT_START("IN0") + PORT_START("EXP") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) @@ -1051,14 +773,16 @@ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0f00, IP_ACTIVE_LOW, IPT_UNUSED ) // no Z/Y/X/MODE buttons PORT_MODIFY("PAD2") PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0f00, IP_ACTIVE_LOW, IPT_UNUSED ) // no Z/Y/X/MODE buttons - PORT_START("IN0") // 3rd I/O port + PORT_START("EXP") // 3rd I/O port PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) @@ -1111,30 +835,25 @@ * *************************************/ -void md_boot_state::megadrvb(machine_config &config) +void md_boot_6button_state::machine_start() { - md_ntsc(config); + md_boot_state::machine_start(); + m_vdp->stop_timers(); } - -void md_boot_6button_state::machine_start() +void md_boot_6button_state::megadrvb_6b(machine_config &config) { - md_base_state::machine_start(); - m_vdp->stop_timers(); + megadrvb(config); - m_io_pad_6b[0] = ioport("EXTRA1"); - m_io_pad_6b[1] = ioport("EXTRA2"); - m_io_pad_6b[2] = ioport("IN0"); - m_io_pad_6b[3] = ioport("UNK"); - - // Setup timers for 6 button pads - for (int i = 0; i < 3; i++) - m_io_timeout[i] = timer_alloc(FUNC(md_base_state::io_timeout_timer_callback), this); + ctrl1_6button(config); + ctrl2_6button(config); } -void md_boot_6button_state::megadrvb_6b(machine_config &config) +void md_boot_6button_state::ssf2mdb(machine_config &config) { - md_ntsc(config); + megadrvb_6b(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &md_boot_6button_state::ssf2mdb_68k_map); } @@ -1150,10 +869,10 @@ void md_boot_state::init_aladmdb() { // Game does a check @ 1afc00 with work RAM fff57c that makes it play like the original console version (i.e. 8 energy hits instead of 2) - #if ENERGY_CONSOLE_MODE +#if ENERGY_CONSOLE_MODE uint16_t *rom = (uint16_t *)memregion("maincpu")->base(); rom[0x1afc08/2] = 0x6600; - #endif +#endif // 220000 = writes to mcu? 330000 = reads? m_maincpu->space(AS_PROGRAM).install_write_handler(0x220000, 0x220001, write16smo_delegate(*this, FUNC(md_boot_state::aladmdb_w))); @@ -1164,7 +883,7 @@ // This should be correct, the areas of the ROM that differ to the original // after this decode look like intentional changes -void md_boot_state::init_mk3mdb() +void md_boot_6button_state::init_mk3mdb() { uint8_t *rom = memregion("maincpu")->base(); @@ -1205,25 +924,9 @@ rom[0x07] = 0x02; rom[0x06] = 0x10; - m_maincpu->space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16sm_delegate(*this, FUNC(md_boot_state::dsw_r))); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16sm_delegate(*this, FUNC(md_boot_6button_state::dsw_r))); init_megadriv(); - // 6 button game, so overwrite 3 button io handlers - m_megadrive_io_read_data_port_ptr = read8sm_delegate(*this, FUNC(md_base_state::megadrive_io_read_data_port_6button)); - m_megadrive_io_write_data_port_ptr = write16sm_delegate(*this, FUNC(md_base_state::megadrive_io_write_data_port_6button)); -} - -void md_boot_state::init_ssf2mdb() -{ - m_maincpu->space(AS_PROGRAM).nop_write(0xA130F0, 0xA130FF); // custom banking is disabled (!) - m_maincpu->space(AS_PROGRAM).install_rom(0x400000, 0x5fffff, memregion( "maincpu" )->base() + 0x400000); - m_maincpu->space(AS_PROGRAM).unmap_write(0x400000, 0x5fffff); - m_maincpu->space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16sm_delegate(*this, FUNC(md_boot_state::dsw_r))); - - init_megadrij(); - // 6 button game, so overwrite 3 button io handlers - m_megadrive_io_read_data_port_ptr = read8sm_delegate(*this, FUNC(md_base_state::megadrive_io_read_data_port_6button)); - m_megadrive_io_write_data_port_ptr = write16sm_delegate(*this, FUNC(md_base_state::megadrive_io_write_data_port_6button)); } void md_boot_state::init_srmdb() @@ -1254,37 +957,6 @@ init_megadriv(); } -void md_boot_state::init_topshoot() -{ - - // these are shared RAM, MCU puts the inputs here - m_maincpu->space(AS_PROGRAM).install_read_handler(0x200050, 0x200051, read16smo_delegate(*this, FUNC(md_boot_state::topshoot_200051_r))); - m_maincpu->space(AS_PROGRAM).install_read_port(0x200042, 0x200043, "IN0"); - m_maincpu->space(AS_PROGRAM).install_read_port(0x200044, 0x200045, "IN1"); - m_maincpu->space(AS_PROGRAM).install_read_port(0x200046, 0x200047, "IN2"); - m_maincpu->space(AS_PROGRAM).install_read_port(0x200048, 0x200049, "IN3"); - - init_megadriv(); -} - - -void md_boot_state::init_sbubsm() -{ - // needed to boot, somme kind of hardware ident? - m_maincpu->space(AS_PROGRAM).install_read_handler(0x400000, 0x400001, read16smo_delegate(*this, FUNC(md_boot_state::sbubsm_400000_r))); - m_maincpu->space(AS_PROGRAM).install_read_handler(0x400002, 0x400003, read16smo_delegate(*this, FUNC(md_boot_state::sbubsm_400002_r))); - - // these are shared RAM, MCU puts the inputs here - m_maincpu->space(AS_PROGRAM).install_read_handler(0x200050, 0x200051, read16smo_delegate(*this, FUNC(md_boot_state::topshoot_200051_r))); // needed for coins to work - m_maincpu->space(AS_PROGRAM).install_read_port(0x200042, 0x200043, "IN0"); - m_maincpu->space(AS_PROGRAM).install_read_port(0x200044, 0x200045, "IN1"); - m_maincpu->space(AS_PROGRAM).install_read_port(0x200046, 0x200047, "IN2"); - m_maincpu->space(AS_PROGRAM).install_read_port(0x200048, 0x200049, "IN3"); - m_maincpu->space(AS_PROGRAM).install_read_port(0x20007e, 0x20007f, "IN4"); - - init_megadriv(); -} - void md_boot_state::init_barek2() { @@ -1294,14 +966,14 @@ init_megadrij(); } -void md_boot_state::init_barekch() +void md_boot_6button_state::init_barekch() { uint16_t *src = (uint16_t *)memregion("maincpu")->base(); for (int i = 0x000000; i < 0x80000 / 2; i++) src[i] = bitswap<16>(src[i] ^ 0xff00, 15, 9, 12, 8, 14, 13, 11, 10, 7, 6, 5, 4, 3, 2, 1, 0); - m_maincpu->space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16sm_delegate(*this, FUNC(md_boot_state::dsw_r))); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16sm_delegate(*this, FUNC(md_boot_6button_state::dsw_r))); init_megadrij(); } @@ -1337,7 +1009,7 @@ init_megadrij(); } -void md_boot_state::init_bk3ssrmb() +void md_boot_6button_state::init_bk3ssrmb() { uint8_t* rom = memregion("maincpu")->base(); @@ -1361,7 +1033,7 @@ rom[x] = bitswap<8>(rom[x] ^ 0xff, 3, 1, 6, 4, 7, 0, 2, 5); } - m_maincpu->space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16sm_delegate(*this, FUNC(md_boot_state::dsw_r))); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16sm_delegate(*this, FUNC(md_boot_6button_state::dsw_r))); init_megadrij(); @@ -1466,25 +1138,6 @@ ROM_LOAD16_BYTE( "u4", 0x040000, 0x020000, CRC(fc2aed41) SHA1(27eb3957f5ed26ee5276523b1df46fa7eb298e1f) ) ROM_END -ROM_START( topshoot ) // Top Shooter (c)1995 Sun Mixing - ROM_REGION( 0x200000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "tc574000ad_u11_2.bin", 0x000000, 0x080000, CRC(b235c4d9) SHA1(fbb308a5f6e769f3277824cb6a3b50c308969ac2) ) - ROM_LOAD16_BYTE( "tc574000ad_u12_1.bin", 0x000001, 0x080000, CRC(e826f6ad) SHA1(23ec8bb608f954d3b915f061e7076c0c63b8259e) ) - - // Not hooked up yet - ROM_REGION( 0x1000, "mcu", 0 ) - ROM_LOAD( "89c51.bin", 0x0000, 0x1000, CRC(595475c8) SHA1(8313819ba06cc92b54f88c1ca9f34be8d1ec94d0) ) -ROM_END - -ROM_START( sbubsm ) - ROM_REGION( 0x200000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "u11.bin", 0x000000, 0x080000, CRC(4f9337ea) SHA1(b245eb615f80afd25e29b2efdddb7f61c1deff6b) ) - ROM_LOAD16_BYTE( "u12.bin", 0x000001, 0x080000, CRC(f5374835) SHA1(3a97910f5f7327ec7ad6425dfdfa72c86196ed33) ) - - ROM_REGION( 0x1000, "mcu", 0 ) // could be the same as topshoot (same PCB) - ROM_LOAD( "89c51.bin", 0x0000, 0x1000, NO_DUMP ) -ROM_END - ROM_START( sonic2mb ) ROM_REGION( 0x400000, "maincpu", 0 ) // 68000 Code ROM_LOAD16_BYTE( "m1", 0x000001, 0x080000, CRC(7b40aa24) SHA1(247882cd1f412366d61aeb4d85bbeefd5f108e1d) ) @@ -1579,19 +1232,17 @@ * *************************************/ -GAME( 1993, aladmdb, 0, megadrvb, aladmdb, md_boot_state, init_aladmdb, ROT0, "bootleg / Sega", "Aladdin (bootleg of Japanese Mega Drive version)", 0 ) +GAME( 1993, aladmdb, 0, megadrvb, aladmdb, md_boot_state, init_aladmdb, ROT0, "bootleg / Sega", "Aladdin (bootleg of Japanese Mega Drive version)", 0 ) GAME( 1996, mk3mdb, 0, megadrvb_6b, mk3mdb, md_boot_6button_state, init_mk3mdb, ROT0, "bootleg / Midway", "Mortal Kombat 3 (bootleg of Mega Drive version)", 0 ) -GAME( 1994, ssf2mdb, 0, megadrvb_6b, ssf2mdb, md_boot_6button_state, init_ssf2mdb, ROT0, "bootleg / Capcom", "Super Street Fighter II - The New Challengers (bootleg of Japanese Mega Drive version)", 0 ) -GAME( 1993, srmdb, 0, megadrvb, srmdb, md_boot_state, init_srmdb, ROT0, "bootleg / Konami", "Sunset Riders (bootleg of Mega Drive version)", 0 ) -GAME( 1995, topshoot, 0, md_bootleg, topshoot, md_boot_state, init_topshoot, ROT0, "Sun Mixing", "Top Shooter", 0 ) -GAME( 1996, sbubsm, 0, md_bootleg, sbubsm, md_boot_state, init_sbubsm, ROT0, "Sun Mixing", "Super Bubble Bobble (Sun Mixing, Mega Drive clone hardware)", 0 ) -GAME( 1993, sonic2mb, 0, md_bootleg, sonic2mb, md_boot_state, init_sonic2mb, ROT0, "bootleg / Sega", "Sonic The Hedgehog 2 (bootleg of Mega Drive version)", 0 ) // Flying wires going through the empty PIC space aren't completely understood -GAME( 1993, sonic3mb, 0, md_bootleg, sonic3mb, md_sonic3bl_state, init_sonic3mb, ROT0, "bootleg / Sega", "Sonic The Hedgehog 3 (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // undumped PIC -GAME( 1994, barek2mb, 0, md_bootleg, barek2, md_boot_state, init_barek2, ROT0, "bootleg / Sega", "Bare Knuckle II (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // Needs PIC hook up -GAME( 1994, barek3mb, 0, megadrvb, barek3, md_boot_state, init_barek3, ROT0, "bootleg / Sega", "Bare Knuckle III (bootleg of Mega Drive version)", 0 ) +GAME( 1994, ssf2mdb, 0, ssf2mdb, ssf2mdb, md_boot_6button_state, init_megadrij, ROT0, "bootleg / Capcom", "Super Street Fighter II - The New Challengers (bootleg of Japanese Mega Drive version)", 0 ) +GAME( 1993, srmdb, 0, megadrvb, srmdb, md_boot_state, init_srmdb, ROT0, "bootleg / Konami", "Sunset Riders (bootleg of Mega Drive version)", 0 ) +GAME( 1993, sonic2mb, 0, md_bootleg, sonic2mb, md_boot_state, init_sonic2mb, ROT0, "bootleg / Sega", "Sonic The Hedgehog 2 (bootleg of Mega Drive version)", 0 ) // Flying wires going through the empty PIC space aren't completely understood +GAME( 1993, sonic3mb, 0, md_bootleg, sonic3mb, md_sonic3bl_state, init_sonic3mb, ROT0, "bootleg / Sega", "Sonic The Hedgehog 3 (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // undumped PIC +GAME( 1994, barek2mb, 0, md_bootleg, barek2, md_boot_state, init_barek2, ROT0, "bootleg / Sega", "Bare Knuckle II (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // Needs PIC hook up +GAME( 1994, barek3mb, 0, megadrvb, barek3, md_boot_state, init_barek3, ROT0, "bootleg / Sega", "Bare Knuckle III (bootleg of Mega Drive version)", 0 ) GAME( 1994, bk3ssrmb, 0, megadrvb_6b, bk3ssrmb, md_boot_6button_state, init_bk3ssrmb, ROT0, "bootleg / Sega", "Bare Knuckle III / Sunset Riders (bootleg of Mega Drive versions)", MACHINE_NOT_WORKING ) // Currently boots as Bare Knuckle III, mechanism to switch game not found yet -GAME( 1993, twinktmb, 0, md_bootleg, twinktmb, md_boot_state, init_twinktmb, ROT0, "bootleg / Sega", "Twinkle Tale (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // Needs PIC decap or simulation -GAME( 1993, jparkmb, 0, md_bootleg, twinktmb, md_boot_state, init_jparkmb, ROT0, "bootleg / Sega", "Jurassic Park (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // Needs PIC decap or simulation +GAME( 1993, twinktmb, 0, md_bootleg, twinktmb, md_boot_state, init_twinktmb, ROT0, "bootleg / Sega", "Twinkle Tale (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // Needs PIC decap or simulation +GAME( 1993, jparkmb, 0, md_bootleg, twinktmb, md_boot_state, init_jparkmb, ROT0, "bootleg / Sega", "Jurassic Park (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // Needs PIC decap or simulation // Chinese bootlegs. Very clean looking with custom chips marked TA-04, TA-05 and TA-06. GAME( 1994, barekch, 0, megadrvb_6b, barekch, md_boot_6button_state, init_barekch, ROT0, "bootleg", "Bare Knuckle (Chinese bootleg of Mega Drive version)", 0 ) diff -Nru mame-0.250+dfsg.1/src/mame/sega/megadriv_acbl.h mame-0.251+dfsg.1/src/mame/sega/megadriv_acbl.h --- mame-0.250+dfsg.1/src/mame/sega/megadriv_acbl.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/megadriv_acbl.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,97 +1,90 @@ // license:BSD-3-Clause // copyright-holders:David Haywood - #ifndef MAME_INCLUDES_MEGADRIV_ACBL_H #define MAME_INCLUDES_MEGADRIV_ACBL_H -class md_boot_state : public md_base_state +#include "megadriv.h" + + +class md_boot_state : public md_ctrl_state { public: - md_boot_state(const machine_config &mconfig, device_type type, const char *tag) - : md_base_state(mconfig, type, tag) { m_protcount = 0; } + md_boot_state(const machine_config &mconfig, device_type type, const char *tag) : + md_ctrl_state(mconfig, type, tag), + m_io_exp(*this, "EXP") + { } void megadrvb(machine_config &config); void md_bootleg(machine_config &config); - void puckpkmn(machine_config &config); - void jzth(machine_config &config); - void puckpkmna(machine_config &config); void init_aladmdb(); - void init_mk3mdb(); - void init_ssf2mdb(); void init_srmdb(); - void init_topshoot(); - void init_puckpkmn(); void init_barek2(); void init_barek2ch(); void init_barek3(); - void init_barekch(); - void init_bk3ssrmb(); void init_sonic2mb(); void init_twinktmb(); void init_jparkmb(); - void init_sbubsm(); + +protected: + uint16_t dsw_r(offs_t offset); + + void md_bootleg_map(address_map &map); private: - void bl_710000_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - uint16_t bl_710000_r(); void aladmdb_w(uint16_t data); uint16_t aladmdb_r(); uint16_t barek2mb_r(); uint16_t jparkmb_r(); uint16_t twinktmb_r(); - uint16_t dsw_r(offs_t offset); - uint16_t topshoot_200051_r(); - uint16_t sbubsm_400000_r(); - uint16_t sbubsm_400002_r(); - uint16_t puckpkmna_70001c_r(); - uint16_t puckpkmna_4b2476_r(); - void jzth_map(address_map &map); - void md_bootleg_map(address_map &map); - void puckpkmn_map(address_map &map); - void puckpkmna_map(address_map &map); + optional_ioport m_io_exp; // bootleg specific int m_aladmdb_mcu_port = 0; - - int m_protcount; }; class md_sonic3bl_state : public md_boot_state { public: - md_sonic3bl_state(const machine_config &mconfig, device_type type, const char *tag) - : md_boot_state(mconfig, type, tag) - , m_in_coin(*this, "COIN") - , m_in_mcu(*this, "MCU") + md_sonic3bl_state(const machine_config &mconfig, device_type type, const char *tag) : + md_boot_state(mconfig, type, tag), + m_in_coin(*this, "COIN"), + m_in_mcu(*this, "MCU") { } void init_sonic3mb(); private: - required_ioport m_in_coin; - required_ioport m_in_mcu; - void prot_w(u8 data); uint16_t prot_r(); + required_ioport m_in_coin; + required_ioport m_in_mcu; + u8 m_prot_cmd = 0; }; class md_boot_6button_state : public md_boot_state { public: - md_boot_6button_state(const machine_config& mconfig, device_type type, const char* tag) - : md_boot_state(mconfig, type, tag) + md_boot_6button_state(const machine_config& mconfig, device_type type, const char* tag) : + md_boot_state(mconfig, type, tag) { } void megadrvb_6b(machine_config &config); + void ssf2mdb(machine_config &config); + + void init_mk3mdb(); + void init_bk3ssrmb(); + void init_barekch(); protected: virtual void machine_start() override; +private: + void ssf2mdb_68k_map(address_map &map); }; #endif // MAME_INCLUDES_MEGADRIV_ACBL_H diff -Nru mame-0.250+dfsg.1/src/mame/sega/megadriv.cpp mame-0.251+dfsg.1/src/mame/sega/megadriv.cpp --- mame-0.250+dfsg.1/src/mame/sega/megadriv.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/megadriv.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -25,6 +25,9 @@ #include "emu.h" #include "megadriv.h" + +#include "machine/input_merger.h" + #include "speaker.h" #define LOG_AUDIOBANK (1U << 1) // z80 to 68k space window access at $8000-$ffff @@ -75,9 +78,6 @@ LOG("%s: 68000 attempting to access YM2612 (read) without bus\n", machine().describe_context()); return 0; } - - // never executed - //return -1; } @@ -95,9 +95,9 @@ } // this is used by 6 button pads and gets installed in machine_start for drivers requiring it -TIMER_CALLBACK_MEMBER(md_base_state::io_timeout_timer_callback) +TIMER_CALLBACK_MEMBER(md_ctrl_state::ioport_timeout) { - m_io_stage[(int)param] = -1; + m_ioport_phase[param] = 0; } @@ -141,25 +141,27 @@ */ INPUT_PORTS_START( md_common ) - PORT_START("PAD1") /* Joypad 1 (3 button + start) NOT READ DIRECTLY */ - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_START("PAD1") // Joypad 1 (3 button + start) + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 B") // b - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 C") // c - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 A") // a - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("P1 START") // start - - PORT_START("PAD2") /* Joypad 2 (3 button + start) NOT READ DIRECTLY */ - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("%p B") + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("%p C") + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("%p A") + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(1) + PORT_BIT( 0x0f00, IP_ACTIVE_LOW, IPT_UNUSED ) // extra buttons on 6-button pad + + PORT_START("PAD2") // Joypad 2 (3 button + start) + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 B") // b - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 C") // c - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 A") // a - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_NAME("P2 START") // start + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("%p B") + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("%p C") + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("%p A") + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(2) + PORT_BIT( 0x0f00, IP_ACTIVE_LOW, IPT_UNUSED ) // extra buttons on 6-button pad INPUT_PORTS_END @@ -170,310 +172,163 @@ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_NAME("Reset Button") PORT_IMPULSE(1) // reset, resets 68k (and..?) INPUT_PORTS_END -INPUT_PORTS_START( megadri6 ) - PORT_INCLUDE( megadriv ) - PORT_START("EXTRA1") /* Extra buttons for Joypad 1 (6 button + start + mode) NOT READ DIRECTLY */ - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(1) PORT_NAME("P1 Z") // z - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) PORT_NAME("P1 Y") // y - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) PORT_NAME("P1 X") // x - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_PLAYER(1) PORT_NAME("P1 MODE") // mode - - PORT_START("EXTRA2") /* Extra buttons for Joypad 2 (6 button + start + mode) NOT READ DIRECTLY */ - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(2) PORT_NAME("P2 Z") // z - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) PORT_NAME("P2 Y") // y - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) PORT_NAME("P2 X") // x - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_PLAYER(2) PORT_NAME("P2 MODE") // mode -INPUT_PORTS_END - -void md_base_state::megadrive_reset_io() +template +uint8_t md_ctrl_state::ioport_in_3button() { - int i; - - m_megadrive_io_data_regs[0] = 0x7f; - m_megadrive_io_data_regs[1] = 0x7f; - m_megadrive_io_data_regs[2] = 0x7f; - m_megadrive_io_ctrl_regs[0] = 0x00; - m_megadrive_io_ctrl_regs[1] = 0x00; - m_megadrive_io_ctrl_regs[2] = 0x00; - m_megadrive_io_tx_regs[0] = 0xff; - m_megadrive_io_tx_regs[1] = 0xff; - m_megadrive_io_tx_regs[2] = 0xff; - - for (i=0; i<3; i++) - { - m_io_stage[i] = -1; - } + ioport_value const pad = m_io_pad[N]->read(); + if (m_ioport_th[N]) + return BIT(pad, 0, 6); + else + return (BIT(pad, 6, 2) << 4) | BIT(pad, 0, 2); } -/************* 6 buttons version **************************/ -uint8_t md_base_state::megadrive_io_read_data_port_6button(offs_t offset) +template +uint8_t md_ctrl_state::ioport_in_6button() { - int portnum = offset; - uint8_t retdata, helper = (m_megadrive_io_ctrl_regs[portnum] & 0x3f) | 0xc0; // bits 6 & 7 always come from m_megadrive_io_data_regs - - if (m_megadrive_io_data_regs[portnum] & 0x40) + ioport_value const pad = m_io_pad[N]->read(); + switch (m_ioport_phase[N]) { - if (m_io_stage[portnum] == 2) - { - /* here we read B, C & the additional buttons */ - retdata = (m_megadrive_io_data_regs[portnum] & helper) | - ((((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0x30) | - ((m_io_pad_6b[portnum] ? m_io_pad_6b[portnum]->read() : 0) & 0x0f)) & ~helper); - } + default: + case 0: + case 1: + if (m_ioport_th[N]) + return BIT(pad, 0, 6); else - { - /* here we read B, C & the directional buttons */ - retdata = (m_megadrive_io_data_regs[portnum] & helper) | - (((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0x3f) & ~helper); - } - } - else - { - if (m_io_stage[portnum] == 1) - { - /* here we read ((Start & A) >> 2) | 0x00 */ - retdata = (m_megadrive_io_data_regs[portnum] & helper) | - ((((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0xc0) >> 2) & ~helper); - } - else if (m_io_stage[portnum]==2) - { - /* here we read ((Start & A) >> 2) | 0x0f */ - retdata = (m_megadrive_io_data_regs[portnum] & helper) | - (((((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0xc0) >> 2) | 0x0f) & ~helper); - } + return (BIT(pad, 6, 2) << 4) | BIT(pad, 0, 2); + case 2: + if (m_ioport_th[N]) + return BIT(pad, 0, 6); else - { - /* here we read ((Start & A) >> 2) | Up and Down */ - retdata = (m_megadrive_io_data_regs[portnum] & helper) | - (((((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0xc0) >> 2) | - ((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0x03)) & ~helper); - } + return BIT(pad, 6, 2) << 4; + case 3: + if (m_ioport_th[N]) + return (BIT(pad, 4, 2) << 4) | BIT(pad, 8, 4); + else + return (BIT(pad, 6, 2) << 4) | 0x0f; } - -// osd_printf_debug("read io data port stage %d port %d %02x\n",m_io_stage[portnum],portnum,retdata); - - return retdata | (retdata << 8); } - -/************* 3 buttons version **************************/ -uint8_t md_base_state::megadrive_io_read_data_port_3button(offs_t offset) +template +void md_ctrl_state::ioport_out_3button(uint8_t data, uint8_t mem_mask) { - int portnum = offset; - uint8_t retdata, helper = (m_megadrive_io_ctrl_regs[portnum] & 0x7f) | 0x80; // bit 7 always comes from m_megadrive_io_data_regs + m_ioport_th[N] = BIT(data, 6); +} - if (m_megadrive_io_data_regs[portnum] & 0x40) +template +void md_ctrl_state::ioport_out_6button(uint8_t data, uint8_t mem_mask) +{ + uint8_t const th = BIT(data, 6); + if (!th) { - /* here we read B, C & the directional buttons */ - retdata = (m_megadrive_io_data_regs[portnum] & helper) | - ((((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0x3f) | 0x40) & ~helper); + m_ioport_idle[N]->reset(); } - else + else if (!m_ioport_th[N]) { - /* here we read ((Start & A) >> 2) | Up and Down */ - retdata = (m_megadrive_io_data_regs[portnum] & helper) | - (((((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0xc0) >> 2) | - ((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0x03) | 0x40) & ~helper); + m_ioport_idle[N]->adjust(attotime::from_usec(1500), N); + m_ioport_phase[N] = (m_ioport_phase[N] + 1) & 0x03; } - - return retdata; + m_ioport_th[N] = th; } -uint8_t md_base_state::megadrive_io_read_ctrl_port(int portnum) + +uint16_t md_base_state::m68k_version_read() { - uint8_t retdata; - retdata = m_megadrive_io_ctrl_regs[portnum]; - //osd_printf_debug("read io ctrl port %d %02x\n",portnum,retdata); + /* Charles MacDonald ( http://cgfm2.emuviews.com/ ) + D7 : Console is 1= Export (USA, Europe, etc.) 0= Domestic (Japan) + D6 : Video type is 1= PAL, 0= NTSC + D5 : Sega CD unit is 1= not present, 0= connected. + D4 : Unused (always returns zero) + D3 : Bit 3 of version number + D2 : Bit 2 of version number + D1 : Bit 1 of version number + D0 : Bit 0 of version number + */ + LOG("%s: read version register\n", machine().describe_context()); + // Version number contained in bits 3-0 + // TODO: non-TMSS BIOSes must return 0 here + uint16_t const retdata = m_version_hi_nibble | 0x01; return retdata | (retdata << 8); } -uint8_t md_base_state::megadrive_io_read_tx_port(int portnum) +uint16_t md_base_state::m68k_ioport_data_read(offs_t offset) { - uint8_t retdata; - retdata = m_megadrive_io_tx_regs[portnum]; + uint16_t retdata = m_ioports[offset]->data_r(); return retdata | (retdata << 8); } -uint8_t md_base_state::megadrive_io_read_rx_port(int portnum) -{ - return 0x00; -} - -uint8_t md_base_state::megadrive_io_read_sctrl_port(int portnum) +uint16_t md_base_state::m68k_ioport_ctrl_read(offs_t offset) { - return 0x00; -} - - -uint16_t md_base_state::megadriv_68k_io_read(offs_t offset) -{ - uint8_t retdata; - - retdata = 0; - /* Charles MacDonald ( http://cgfm2.emuviews.com/ ) - D7 : Console is 1= Export (USA, Europe, etc.) 0= Domestic (Japan) - D6 : Video type is 1= PAL, 0= NTSC - D5 : Sega CD unit is 1= not present, 0= connected. - D4 : Unused (always returns zero) - D3 : Bit 3 of version number - D2 : Bit 2 of version number - D1 : Bit 1 of version number - D0 : Bit 0 of version number - */ - - //return (machine().rand()&0x0f0f)|0xf0f0;//0x0000; - switch (offset) - { - case 0: - LOG("%06x read version register\n", m_maincpu->pc()); - // Version number contained in bits 3-0 - // TODO: non-TMSS BIOSes must return 0 here - retdata = m_version_hi_nibble | 0x01; - break; - - /* Joystick Port Registers */ - - case 0x1: - case 0x2: - case 0x3: - retdata = m_megadrive_io_read_data_port_ptr(offset-1); - break; - - case 0x4: - case 0x5: - case 0x6: - retdata = megadrive_io_read_ctrl_port(offset-4); - break; - - /* Serial I/O Registers */ - - case 0x7: retdata = megadrive_io_read_tx_port(0); break; - case 0x8: retdata = megadrive_io_read_rx_port(0); break; - case 0x9: retdata = megadrive_io_read_sctrl_port(0); break; - - case 0xa: retdata = megadrive_io_read_tx_port(1); break; - case 0xb: retdata = megadrive_io_read_rx_port(1); break; - case 0xc: retdata = megadrive_io_read_sctrl_port(1); break; - - case 0xd: retdata = megadrive_io_read_tx_port(2); break; - case 0xe: retdata = megadrive_io_read_rx_port(2); break; - case 0xf: retdata = megadrive_io_read_sctrl_port(2); break; - - } - + uint16_t retdata = m_ioports[offset]->ctrl_r(); return retdata | (retdata << 8); } - -void md_base_state::megadrive_io_write_data_port_3button(offs_t offset, uint16_t data) +template +uint16_t md_base_state::m68k_ioport_txdata_read() { - int portnum = offset; - m_megadrive_io_data_regs[portnum] = data; - //osd_printf_debug("Writing IO Data Register #%d data %04x\n",portnum,data); - + uint16_t retdata = m_ioports[N]->txdata_r(); + return retdata | (retdata << 8); } - -/****************************** 6 buttons version*****************************/ - -void md_base_state::megadrive_io_write_data_port_6button(offs_t offset, uint16_t data) +template +uint16_t md_base_state::m68k_ioport_rxdata_read() { - int portnum = offset; - if (m_megadrive_io_ctrl_regs[portnum]&0x40) - { - if (((m_megadrive_io_data_regs[portnum]&0x40)==0x00) && ((data&0x40) == 0x40)) - { - m_io_stage[portnum]++; - m_io_timeout[portnum]->adjust(m_maincpu->cycles_to_attotime(8192), portnum); - } - - } - - m_megadrive_io_data_regs[portnum] = data; - //osd_printf_debug("Writing IO Data Register #%d data %04x\n",portnum,data); - + uint16_t retdata = m_ioports[N]->rxdata_r(); + return retdata | (retdata << 8); } - -/*************************** 3 buttons version ****************************/ - -void md_base_state::megadrive_io_write_ctrl_port(int portnum, uint16_t data) +template +uint16_t md_base_state::m68k_ioport_s_ctrl_read() { - m_megadrive_io_ctrl_regs[portnum] = data; -// osd_printf_debug("Setting IO Control Register #%d data %04x\n",portnum,data); + uint16_t retdata = m_ioports[N]->s_ctrl_r(); + return retdata | (retdata << 8); } -void md_base_state::megadrive_io_write_tx_port(int portnum, uint16_t data) +void md_base_state::m68k_ioport_data_write(offs_t offset, uint16_t data) { - m_megadrive_io_tx_regs[portnum] = data; + m_ioports[offset]->data_w(uint8_t(data)); } -void md_base_state::megadrive_io_write_rx_port(int portnum, uint16_t data) +void md_base_state::m68k_ioport_ctrl_write(offs_t offset, uint16_t data) { + m_ioports[offset]->ctrl_w(uint8_t(data)); } -void md_base_state::megadrive_io_write_sctrl_port(int portnum, uint16_t data) +template +void md_base_state::m68k_ioport_txdata_write(uint16_t data) { + m_ioports[N]->txdata_w(uint8_t(data)); } - -void md_base_state::megadriv_68k_io_write(offs_t offset, uint16_t data, uint16_t mem_mask) +template +void md_base_state::m68k_ioport_s_ctrl_write(uint16_t data) { -// osd_printf_debug("IO Write #%02x data %04x mem_mask %04x\n",offset,data,mem_mask); - - - switch (offset) - { - case 0x0: - osd_printf_debug("Write to Version Register?!\n"); - break; - - /* Joypad Port Registers */ - - case 0x1: - case 0x2: - case 0x3: - m_megadrive_io_write_data_port_ptr(offset-1,data); - break; - - case 0x4: - case 0x5: - case 0x6: - megadrive_io_write_ctrl_port(offset-4,data); - break; - - /* Serial I/O Registers */ - - case 0x7: megadrive_io_write_tx_port(0,data); break; - case 0x8: megadrive_io_write_rx_port(0,data); break; - case 0x9: megadrive_io_write_sctrl_port(0,data); break; - - case 0xa: megadrive_io_write_tx_port(1,data); break; - case 0xb: megadrive_io_write_rx_port(1,data); break; - case 0xc: megadrive_io_write_sctrl_port(1,data); break; - - case 0xd: megadrive_io_write_tx_port(2,data); break; - case 0xe: megadrive_io_write_rx_port(2,data); break; - case 0xf: megadrive_io_write_sctrl_port(2,data); break; - } + m_ioports[N]->s_ctrl_w(uint8_t(data)); } -void md_base_state::megadriv_map(address_map &map) +void md_base_state::megadriv_68k_base_map(address_map &map) { - map(0x000000, 0x3fffff).rom(); - /* (0x000000 - 0x3fffff) == GAME ROM (4Meg Max, Some games have special banking too) */ - map(0xa00000, 0xa01fff).rw(FUNC(md_base_state::megadriv_68k_read_z80_ram), FUNC(md_base_state::megadriv_68k_write_z80_ram)); map(0xa02000, 0xa03fff).w(FUNC(md_base_state::megadriv_68k_write_z80_ram)); map(0xa04000, 0xa04003).rw(FUNC(md_base_state::megadriv_68k_YM2612_read), FUNC(md_base_state::megadriv_68k_YM2612_write)); map(0xa06000, 0xa06001).w(FUNC(md_base_state::megadriv_68k_z80_bank_write)); - map(0xa10000, 0xa1001f).rw(FUNC(md_base_state::megadriv_68k_io_read), FUNC(md_base_state::megadriv_68k_io_write)); + map(0xa10000, 0xa10001).r(FUNC(md_base_state::m68k_version_read)); + map(0xa10002, 0xa10007).rw(FUNC(md_base_state::m68k_ioport_data_read), FUNC(md_base_state::m68k_ioport_data_write)); + map(0xa10008, 0xa1000d).rw(FUNC(md_base_state::m68k_ioport_ctrl_read), FUNC(md_base_state::m68k_ioport_ctrl_write)); + map(0xa1000e, 0xa1000f).rw(FUNC(md_base_state::m68k_ioport_txdata_read<0>), FUNC(md_base_state::m68k_ioport_txdata_write<0>)); + map(0xa10010, 0xa10011).r(FUNC(md_base_state::m68k_ioport_rxdata_read<0>)); + map(0xa10012, 0xa10013).rw(FUNC(md_base_state::m68k_ioport_s_ctrl_read<0>), FUNC(md_base_state::m68k_ioport_s_ctrl_write<0>)); + map(0xa10014, 0xa10015).rw(FUNC(md_base_state::m68k_ioport_txdata_read<1>), FUNC(md_base_state::m68k_ioport_txdata_write<1>)); + map(0xa10016, 0xa10017).r(FUNC(md_base_state::m68k_ioport_rxdata_read<1>)); + map(0xa10018, 0xa10019).rw(FUNC(md_base_state::m68k_ioport_s_ctrl_read<1>), FUNC(md_base_state::m68k_ioport_s_ctrl_write<1>)); + map(0xa1001a, 0xa1001b).rw(FUNC(md_base_state::m68k_ioport_txdata_read<2>), FUNC(md_base_state::m68k_ioport_txdata_write<2>)); + map(0xa1001c, 0xa1001d).r(FUNC(md_base_state::m68k_ioport_rxdata_read<2>)); + map(0xa1001e, 0xa1001f).rw(FUNC(md_base_state::m68k_ioport_s_ctrl_read<2>), FUNC(md_base_state::m68k_ioport_s_ctrl_write<2>)); map(0xa11100, 0xa11101).rw(FUNC(md_base_state::megadriv_68k_check_z80_bus), FUNC(md_base_state::megadriv_68k_req_z80_bus)); map(0xa11200, 0xa11201).w(FUNC(md_base_state::megadriv_68k_req_z80_reset)); @@ -485,11 +340,12 @@ /* 0xe00000 - 0xffffff) == MAIN RAM (64kb, Mirrored, most games use ff0000 - ffffff) */ } - -void md_base_state::dcat16_megadriv_map(address_map &map) +void md_base_state::megadriv_68k_map(address_map &map) { - megadriv_map(map); - map(0x000000, 0x7fffff).rom(); + megadriv_68k_base_map(map); + + map(0x000000, 0x3fffff).rom(); + /* (0x000000 - 0x3fffff) == GAME ROM (4Meg Max, Some games have special banking too) */ } @@ -782,9 +638,9 @@ map(0x00, 0xff).noprw(); } -uint32_t md_base_state::screen_update_megadriv(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +uint32_t md_core_state::screen_update_megadriv(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - /* Copy our screen buffer here */ + // Copy our screen buffer here for (int y = cliprect.min_y; y <= cliprect.max_y; y++) { uint32_t *const desty = &bitmap.pix(y, 0); @@ -808,55 +664,58 @@ /*****************************************************************************************/ -void md_base_state::video_start() +void md_core_state::machine_reset() { - // nothing? + if (!m_vdp->m_use_alt_timing) + { + m_vdp->m_megadriv_scanline_timer = m_scan_timer; + m_vdp->m_megadriv_scanline_timer->adjust(attotime::zero); + } + + m_vdp->device_reset_old(); } + void md_base_state::machine_start() { - m_io_pad_3b[0] = ioport("PAD1"); - m_io_pad_3b[1] = ioport("PAD2"); - m_io_pad_3b[2] = ioport("IN0"); - m_io_pad_3b[3] = ioport("UNK"); - - save_item(NAME(m_io_stage)); - save_item(NAME(m_megadrive_io_data_regs)); - save_item(NAME(m_megadrive_io_ctrl_regs)); - save_item(NAME(m_megadrive_io_tx_regs)); + md_core_state::machine_start(); - if (m_z80snd) - m_genz80.z80_run_timer = timer_alloc(FUNC(md_base_state::megadriv_z80_run_state), this); + m_genz80.z80_run_timer = timer_alloc(FUNC(md_base_state::megadriv_z80_run_state), this); } void md_base_state::machine_reset() { - /* default state of z80 = reset, with bus */ - osd_printf_debug("Resetting Megadrive / Genesis\n"); - - if (m_z80snd) - { - m_genz80.z80_is_reset = 1; - m_genz80.z80_has_bus = 1; - m_genz80.z80_bank_addr = 0; - m_vdp->set_scanline_counter(-1); - m_genz80.z80_run_timer->adjust(attotime::zero); - } + md_core_state::machine_reset(); - megadrive_reset_io(); + // default state of z80 = reset, with bus + osd_printf_debug("Resetting Megadrive / Genesis\n"); - if (!m_vdp->m_use_alt_timing) - { - m_vdp->m_megadriv_scanline_timer = m_scan_timer; - m_vdp->m_megadriv_scanline_timer->adjust(attotime::zero); - } + m_genz80.z80_is_reset = 1; + m_genz80.z80_has_bus = 1; + m_genz80.z80_bank_addr = 0; + m_vdp->set_scanline_counter(-1); + m_genz80.z80_run_timer->adjust(attotime::zero); if (m_megadrive_ram) memset(m_megadrive_ram, 0x00, 0x10000); +} - m_vdp->device_reset_old(); + +void md_ctrl_state::machine_start() +{ + md_base_state::machine_start(); + + m_ioport_idle[0] = timer_alloc(FUNC(md_ctrl_state::ioport_timeout), this); + m_ioport_idle[1] = timer_alloc(FUNC(md_ctrl_state::ioport_timeout), this); + + std::fill(std::begin(m_ioport_th), std::end(m_ioport_th), 1); + std::fill(std::begin(m_ioport_phase), std::end(m_ioport_phase), 0); + + save_item(NAME(m_ioport_th)); + save_item(NAME(m_ioport_phase)); } + void md_base_state::megadriv_stop_scanline_timer() { if (!m_vdp->m_use_alt_timing) @@ -868,22 +727,19 @@ // this comes from the VDP on lines 240 (on) 241 (off) and is connected to the z80 irq 0 WRITE_LINE_MEMBER(md_base_state::vdp_sndirqline_callback_genesis_z80) { - if (m_z80snd) + if (state == ASSERT_LINE) { - if (state == ASSERT_LINE) - { - if ((m_genz80.z80_has_bus == 1) && (m_genz80.z80_is_reset == 0)) - m_z80snd->set_input_line(0, HOLD_LINE); - } - else if (state == CLEAR_LINE) - { - m_z80snd->set_input_line(0, CLEAR_LINE); - } + if ((m_genz80.z80_has_bus == 1) && (m_genz80.z80_is_reset == 0)) + m_z80snd->set_input_line(0, HOLD_LINE); + } + else if (state == CLEAR_LINE) + { + m_z80snd->set_input_line(0, CLEAR_LINE); } } // this comes from the vdp, and is connected to 68k irq level 6 (main vbl interrupt) -WRITE_LINE_MEMBER(md_base_state::vdp_lv6irqline_callback_genesis_68k) +WRITE_LINE_MEMBER(md_core_state::vdp_lv6irqline_callback_genesis_68k) { if (state == ASSERT_LINE) m_maincpu->set_input_line(6, HOLD_LINE); @@ -892,7 +748,7 @@ } // this comes from the vdp, and is connected to 68k irq level 4 (raster interrupt) -WRITE_LINE_MEMBER(md_base_state::vdp_lv4irqline_callback_genesis_68k) +WRITE_LINE_MEMBER(md_core_state::vdp_lv4irqline_callback_genesis_68k) { if (state == ASSERT_LINE) m_maincpu->set_input_line(4, HOLD_LINE); @@ -901,7 +757,7 @@ } /* Callback when the 68k takes an IRQ */ -IRQ_CALLBACK_MEMBER(md_base_state::genesis_int_callback) +IRQ_CALLBACK_MEMBER(md_core_state::genesis_int_callback) { if (irqline==4) { @@ -916,50 +772,126 @@ return (0x60+irqline*4)/4; // vector address } -void md_base_state::megadriv_timers(machine_config &config) + +void md_core_state::megadriv_timers(machine_config &config) { - TIMER(config, m_scan_timer).configure_generic("gen_vdp", FUNC(sega315_5313_device::megadriv_scanline_timer_callback)); + TIMER(config, m_scan_timer).configure_generic(m_vdp, FUNC(sega315_5313_device::megadriv_scanline_timer_callback)); } - -void md_base_state::md_ntsc(machine_config &config) +void md_core_state::md_core_ntsc(machine_config &config) { - M68000(config, m_maincpu, MASTER_CLOCK_NTSC / 7); /* 7.67 MHz */ - m_maincpu->set_addrmap(AS_PROGRAM, &md_base_state::megadriv_map); - m_maincpu->set_irq_acknowledge_callback(FUNC(md_base_state::genesis_int_callback)); - - /* IRQs are handled via the timers */ - - Z80(config, m_z80snd, MASTER_CLOCK_NTSC / 15); /* 3.58 MHz */ - m_z80snd->set_addrmap(AS_PROGRAM, &md_base_state::megadriv_z80_map); - m_z80snd->set_addrmap(AS_IO, &md_base_state::megadriv_z80_io_map); - /* IRQ handled via the timers */ + M68000(config, m_maincpu, MASTER_CLOCK_NTSC / 7); // 7.67 MHz + m_maincpu->set_irq_acknowledge_callback(FUNC(md_core_state::genesis_int_callback)); + // IRQs are handled via the timers megadriv_timers(config); SEGA315_5313(config, m_vdp, MASTER_CLOCK_NTSC, m_maincpu); m_vdp->set_is_pal(false); - m_vdp->snd_irq().set(FUNC(md_base_state::vdp_sndirqline_callback_genesis_z80)); - m_vdp->lv6_irq().set(FUNC(md_base_state::vdp_lv6irqline_callback_genesis_68k)); - m_vdp->lv4_irq().set(FUNC(md_base_state::vdp_lv4irqline_callback_genesis_68k)); + m_vdp->lv6_irq().set(FUNC(md_core_state::vdp_lv6irqline_callback_genesis_68k)); + m_vdp->lv4_irq().set(FUNC(md_core_state::vdp_lv4irqline_callback_genesis_68k)); + m_vdp->set_screen("megadriv"); + + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(MASTER_CLOCK_NTSC / 10 / 262 / 342); // same as SMS? +// m_screen->set_refresh_hz(double(MASTER_CLOCK_NTSC) / 8 / 262 / 427); // or 427 Htotal? + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); // Vblank handled manually. + m_screen->set_size(64*8, 620); + m_screen->set_visarea(0, 32*8-1, 0, 28*8-1); + m_screen->set_screen_update(FUNC(md_core_state::screen_update_megadriv)); /* Copies a bitmap */ + m_screen->screen_vblank().set(FUNC(md_core_state::screen_vblank_megadriv)); /* Used to Sync the timing */ +} + +void md_core_state::md_core_pal(machine_config &config) +{ + M68000(config, m_maincpu, MASTER_CLOCK_PAL / 7); // 7.67 MHz + m_maincpu->set_irq_acknowledge_callback(FUNC(md_core_state::genesis_int_callback)); + // IRQs are handled via the timers + + megadriv_timers(config); + + SEGA315_5313(config, m_vdp, MASTER_CLOCK_PAL, m_maincpu); + m_vdp->set_is_pal(true); + m_vdp->lv6_irq().set(FUNC(md_core_state::vdp_lv6irqline_callback_genesis_68k)); + m_vdp->lv4_irq().set(FUNC(md_core_state::vdp_lv4irqline_callback_genesis_68k)); m_vdp->set_screen("megadriv"); - m_vdp->add_route(ALL_OUTPUTS, "lspeaker", 0.50); - m_vdp->add_route(ALL_OUTPUTS, "rspeaker", 0.50); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_refresh_hz(double(MASTER_CLOCK_NTSC) / 10.0 / 262.0 / 342.0); // same as SMS? -// m_screen->set_refresh_hz(double(MASTER_CLOCK_NTSC) / 8.0 / 262.0 / 427.0); // or 427 Htotal? + m_screen->set_refresh_hz(MASTER_CLOCK_PAL / 10 / 313 / 342); // same as SMS? +// m_screen->set_refresh_hz(MASTER_CLOCK_PAL / 8 / 313 / 423); // or 423 Htotal? m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); // Vblank handled manually. m_screen->set_size(64*8, 620); m_screen->set_visarea(0, 32*8-1, 0, 28*8-1); - m_screen->set_screen_update(FUNC(md_base_state::screen_update_megadriv)); /* Copies a bitmap */ - m_screen->screen_vblank().set(FUNC(md_base_state::screen_vblank_megadriv)); /* Used to Sync the timing */ + m_screen->set_screen_update(FUNC(md_core_state::screen_update_megadriv)); /* Copies a bitmap */ + m_screen->screen_vblank().set(FUNC(md_core_state::screen_vblank_megadriv)); /* Used to Sync the timing */ +} + + +void md_base_state::megadriv_ioports(machine_config &config) +{ + // TODO: this latches video counters as well as setting interrupt level 2 + auto &hl(INPUT_MERGER_ANY_HIGH(config, "hl")); + hl.output_handler().set_inputline(m_maincpu, 2); + + MEGADRIVE_IO_PORT(config, m_ioports[0], 0); + m_ioports[0]->hl_handler().set("hl", FUNC(input_merger_device::in_w<0>)); + + MEGADRIVE_IO_PORT(config, m_ioports[1], 0); + m_ioports[1]->hl_handler().set("hl", FUNC(input_merger_device::in_w<1>)); + + MEGADRIVE_IO_PORT(config, m_ioports[2], 0); + m_ioports[2]->hl_handler().set("hl", FUNC(input_merger_device::in_w<2>)); +} + + +void md_ctrl_state::ctrl1_3button(machine_config &config) +{ + m_ioports[0]->set_in_handler(FUNC(md_ctrl_state::ioport_in_3button<0>)); + m_ioports[0]->set_out_handler(FUNC(md_ctrl_state::ioport_out_3button<0>)); +} + +void md_ctrl_state::ctrl2_3button(machine_config &config) +{ + m_ioports[1]->set_in_handler(FUNC(md_ctrl_state::ioport_in_3button<1>)); + m_ioports[1]->set_out_handler(FUNC(md_ctrl_state::ioport_out_3button<1>)); +} + +void md_ctrl_state::ctrl1_6button(machine_config &config) +{ + m_ioports[0]->set_in_handler(FUNC(md_ctrl_state::ioport_in_6button<0>)); + m_ioports[0]->set_out_handler(FUNC(md_ctrl_state::ioport_out_6button<0>)); +} + +void md_ctrl_state::ctrl2_6button(machine_config &config) +{ + m_ioports[1]->set_in_handler(FUNC(md_ctrl_state::ioport_in_6button<1>)); + m_ioports[1]->set_out_handler(FUNC(md_ctrl_state::ioport_out_6button<1>)); +} + - /* sound hardware */ +void md_base_state::md_ntsc(machine_config &config) +{ + md_core_ntsc(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &md_base_state::megadriv_68k_map); + + Z80(config, m_z80snd, MASTER_CLOCK_NTSC / 15); // 3.58 MHz + m_z80snd->set_addrmap(AS_PROGRAM, &md_base_state::megadriv_z80_map); + m_z80snd->set_addrmap(AS_IO, &md_base_state::megadriv_z80_io_map); + // IRQ handled via the timers + + // I/O port controllers + megadriv_ioports(config); + + m_vdp->snd_irq().set(FUNC(md_base_state::vdp_sndirqline_callback_genesis_z80)); + m_vdp->add_route(ALL_OUTPUTS, "lspeaker", 0.50); + m_vdp->add_route(ALL_OUTPUTS, "rspeaker", 0.50); + + // sound hardware SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - YM2612(config, m_ymsnd, MASTER_CLOCK_NTSC/7); /* 7.67 MHz */ + YM2612(config, m_ymsnd, MASTER_CLOCK_NTSC / 7); // 7.67 MHz m_ymsnd->add_route(0, "lspeaker", 0.50); m_ymsnd->add_route(1, "rspeaker", 0.50); } @@ -969,7 +901,7 @@ md_ntsc(config); // Internalized YM3438 in VDP ASIC - YM3438(config.replace(), m_ymsnd, MASTER_CLOCK_NTSC/7); /* 7.67 MHz */ + YM3438(config.replace(), m_ymsnd, MASTER_CLOCK_NTSC / 7); // 7.67 MHz m_ymsnd->add_route(0, "lspeaker", 0.50); m_ymsnd->add_route(1, "rspeaker", 0.50); } @@ -978,41 +910,27 @@ void md_base_state::md_pal(machine_config &config) { - M68000(config, m_maincpu, MASTER_CLOCK_PAL / 7); /* 7.67 MHz */ - m_maincpu->set_addrmap(AS_PROGRAM, &md_base_state::megadriv_map); - m_maincpu->set_irq_acknowledge_callback(FUNC(md_base_state::genesis_int_callback)); - /* IRQs are handled via the timers */ + md_core_pal(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &md_base_state::megadriv_68k_map); - Z80(config, m_z80snd, MASTER_CLOCK_PAL / 15); /* 3.58 MHz */ + Z80(config, m_z80snd, MASTER_CLOCK_PAL / 15); // 3.58 MHz m_z80snd->set_addrmap(AS_PROGRAM, &md_base_state::megadriv_z80_map); m_z80snd->set_addrmap(AS_IO, &md_base_state::megadriv_z80_io_map); - /* IRQ handled via the timers */ + // IRQ handled via the timers - megadriv_timers(config); + // I/O port controllers + megadriv_ioports(config); - SEGA315_5313(config, m_vdp, MASTER_CLOCK_PAL, m_maincpu); - m_vdp->set_is_pal(true); m_vdp->snd_irq().set(FUNC(md_base_state::vdp_sndirqline_callback_genesis_z80)); - m_vdp->lv6_irq().set(FUNC(md_base_state::vdp_lv6irqline_callback_genesis_68k)); - m_vdp->lv4_irq().set(FUNC(md_base_state::vdp_lv4irqline_callback_genesis_68k)); - m_vdp->set_screen("megadriv"); m_vdp->add_route(ALL_OUTPUTS, "lspeaker", 0.50); m_vdp->add_route(ALL_OUTPUTS, "rspeaker", 0.50); - SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_refresh_hz(double(MASTER_CLOCK_PAL) / 10.0 / 313.0 / 342.0); // same as SMS? -// m_screen->set_refresh_hz(double(MASTER_CLOCK_PAL) / 8.0 / 313.0 / 423.0); // or 423 Htotal? - m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); // Vblank handled manually. - m_screen->set_size(64*8, 620); - m_screen->set_visarea(0, 32*8-1, 0, 28*8-1); - m_screen->set_screen_update(FUNC(md_base_state::screen_update_megadriv)); /* Copies a bitmap */ - m_screen->screen_vblank().set(FUNC(md_base_state::screen_vblank_megadriv)); /* Used to Sync the timing */ - - /* sound hardware */ + // sound hardware SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - YM2612(config, m_ymsnd, MASTER_CLOCK_PAL / 7); /* 7.67 MHz */ + YM2612(config, m_ymsnd, MASTER_CLOCK_PAL / 7); // 7.67 MHz m_ymsnd->add_route(0, "lspeaker", 0.50); m_ymsnd->add_route(1, "rspeaker", 0.50); } @@ -1028,35 +946,29 @@ } -void md_base_state::megadriv_tas_callback(offs_t offset, uint8_t data) +void md_core_state::megadriv_tas_callback(offs_t offset, uint8_t data) { // writeback not allowed } void md_base_state::megadriv_init_common() { - /* Look to see if this system has the standard Sound Z80 */ - if (m_z80snd) - { - m_genz80.z80_prgram = std::make_unique(0x2000); - membank("bank1")->set_base(m_genz80.z80_prgram.get()); - save_item(NAME(m_genz80.z80_is_reset)); - save_item(NAME(m_genz80.z80_has_bus)); - save_item(NAME(m_genz80.z80_bank_addr)); - save_pointer(NAME(m_genz80.z80_prgram), 0x2000); - } + // This system has the standard Sound Z80 + m_genz80.z80_prgram = std::make_unique(0x2000); + membank("bank1")->set_base(m_genz80.z80_prgram.get()); + save_item(NAME(m_genz80.z80_is_reset)); + save_item(NAME(m_genz80.z80_has_bus)); + save_item(NAME(m_genz80.z80_bank_addr)); + save_pointer(NAME(m_genz80.z80_prgram), 0x2000); m_maincpu->set_tas_write_callback(*this, FUNC(md_base_state::megadriv_tas_callback)); - - m_megadrive_io_read_data_port_ptr = read8sm_delegate(*this, FUNC(md_base_state::megadrive_io_read_data_port_3button)); - m_megadrive_io_write_data_port_ptr = write16sm_delegate(*this, FUNC(md_base_state::megadrive_io_write_data_port_3button)); } void md_base_state::init_megadriv() { megadriv_init_common(); - // todo: move this to the device interface? + // TODO: move this to the device interface? m_vdp->set_use_cram(1); m_vdp->set_vdp_pal(false); m_vdp->set_framerate(60); @@ -1069,7 +981,7 @@ { megadriv_init_common(); - // todo: move this to the device interface? + // TODO: move this to the device interface? m_vdp->set_use_cram(1); m_vdp->set_vdp_pal(false); m_vdp->set_framerate(60); @@ -1082,7 +994,7 @@ { megadriv_init_common(); - // todo: move this to the device interface? + // TODO: move this to the device interface? m_vdp->set_use_cram(1); m_vdp->set_vdp_pal(true); m_vdp->set_framerate(50); @@ -1091,7 +1003,7 @@ m_version_hi_nibble = 0xe0; // Export PAL no-SCD } -WRITE_LINE_MEMBER(md_base_state::screen_vblank_megadriv) +WRITE_LINE_MEMBER(md_core_state::screen_vblank_megadriv) { if (m_io_reset.read_safe(0) & 0x01) m_maincpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero); diff -Nru mame-0.250+dfsg.1/src/mame/sega/megadriv.h mame-0.251+dfsg.1/src/mame/sega/megadriv.h --- mame-0.250+dfsg.1/src/mame/sega/megadriv.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/megadriv.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,60 +1,76 @@ // license:BSD-3-Clause // copyright-holders:David Haywood -#ifndef MAME_SHARED_MEGADRIV_H -#define MAME_SHARED_MEGADRIV_H +#ifndef MAME_SEGA_MEGADRIV_H +#define MAME_SEGA_MEGADRIV_H #pragma once +#include "mdioport.h" + #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" #include "sound/sn76496.h" #include "sound/ymopn.h" #include "video/315_5313.h" -#define MASTER_CLOCK_NTSC 53693175 -#define MASTER_CLOCK_PAL 53203424 - #define MD_CPU_REGION_SIZE 0x800000 -/*----------- defined in machine/megadriv.cpp -----------*/ - INPUT_PORTS_EXTERN( md_common ); INPUT_PORTS_EXTERN( megadriv ); -INPUT_PORTS_EXTERN( megadri6 ); -INPUT_PORTS_EXTERN( ssf2mdb ); -INPUT_PORTS_EXTERN( mk3mdb ); -class md_base_state : public driver_device +class md_core_state : public driver_device { -public: - md_base_state(const machine_config &mconfig, device_type type, const char *tag) : +protected: + static inline constexpr XTAL MASTER_CLOCK_NTSC = 53.693175_MHz_XTAL; + static inline constexpr XTAL MASTER_CLOCK_PAL = 53.203424_MHz_XTAL; + + md_core_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this,"maincpu"), - m_z80snd(*this,"genesis_snd_z80"), - m_ymsnd(*this,"ymsnd"), m_scan_timer(*this, "md_scan_timer"), m_vdp(*this,"gen_vdp"), - m_megadrive_ram(*this,"megadrive_ram"), m_screen(*this,"megadriv"), - m_io_reset(*this, "RESET"), - m_megadrive_io_read_data_port_ptr(*this), - m_megadrive_io_write_data_port_ptr(*this) - { } + m_io_reset(*this, "RESET") + { + } + + virtual void machine_reset() override; + + void md_core_ntsc(machine_config &config); + void md_core_pal(machine_config &config); + + void megadriv_tas_callback(offs_t offset, uint8_t data); + + uint32_t screen_update_megadriv(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + DECLARE_WRITE_LINE_MEMBER(screen_vblank_megadriv); required_device m_maincpu; - optional_device m_z80snd; - optional_device m_ymsnd; - optional_device m_scan_timer; + required_device m_scan_timer; required_device m_vdp; - optional_shared_ptr m_megadrive_ram; optional_device m_screen; optional_ioport m_io_reset; - ioport_port *m_io_pad_3b[4]; - ioport_port *m_io_pad_6b[4]; +private: + IRQ_CALLBACK_MEMBER(genesis_int_callback); + + WRITE_LINE_MEMBER(vdp_lv6irqline_callback_genesis_68k); + WRITE_LINE_MEMBER(vdp_lv4irqline_callback_genesis_68k); + + void megadriv_timers(machine_config &config); +}; + + +class md_base_state : public md_core_state +{ +public: + void init_megadrie(); + void init_megadriv(); + void init_megadrij(); + +protected: struct genesis_z80_vars { int z80_is_reset = 0; @@ -64,23 +80,22 @@ emu_timer *z80_run_timer = nullptr; }; - genesis_z80_vars m_genz80; - int m_version_hi_nibble; - - void init_megadrie(); - void init_megadriv(); - void init_megadrij(); + md_base_state(const machine_config &mconfig, device_type type, const char *tag) : + md_core_state(mconfig, type, tag), + m_z80snd(*this,"genesis_snd_z80"), + m_ymsnd(*this,"ymsnd"), + m_megadrive_ram(*this,"megadrive_ram"), + m_ioports(*this, "ioport%u", 1U) + { } uint8_t megadriv_68k_YM2612_read(offs_t offset, uint8_t mem_mask = ~0); void megadriv_68k_YM2612_write(offs_t offset, uint8_t data, uint8_t mem_mask = ~0); - IRQ_CALLBACK_MEMBER(genesis_int_callback); + void megadriv_init_common(); void megadriv_z80_bank_w(uint16_t data); void megadriv_68k_z80_bank_write(uint16_t data); void megadriv_z80_z80_bank_w(uint8_t data); - uint16_t megadriv_68k_io_read(offs_t offset); - void megadriv_68k_io_write(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); uint16_t megadriv_68k_read_z80_ram(offs_t offset, uint16_t mem_mask = ~0); void megadriv_68k_write_z80_ram(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); uint16_t megadriv_68k_check_z80_bus(offs_t offset, uint16_t mem_mask = ~0); @@ -93,59 +108,81 @@ uint8_t megadriv_z80_unmapped_read(); TIMER_CALLBACK_MEMBER(megadriv_z80_run_state); - /* Megadrive / Genesis has 3 I/O ports */ - emu_timer *m_io_timeout[3]; - int m_io_stage[3]; - uint8_t m_megadrive_io_data_regs[3]; - uint8_t m_megadrive_io_ctrl_regs[3]; - uint8_t m_megadrive_io_tx_regs[3]; - read8sm_delegate m_megadrive_io_read_data_port_ptr; - write16sm_delegate m_megadrive_io_write_data_port_ptr; - WRITE_LINE_MEMBER(vdp_sndirqline_callback_genesis_z80); - WRITE_LINE_MEMBER(vdp_lv6irqline_callback_genesis_68k); - WRITE_LINE_MEMBER(vdp_lv4irqline_callback_genesis_68k); - - TIMER_CALLBACK_MEMBER( io_timeout_timer_callback ); - void megadrive_reset_io(); - uint8_t megadrive_io_read_data_port_6button(offs_t offset); - uint8_t megadrive_io_read_data_port_3button(offs_t offset); - uint8_t megadrive_io_read_ctrl_port(int portnum); - uint8_t megadrive_io_read_tx_port(int portnum); - uint8_t megadrive_io_read_rx_port(int portnum); - uint8_t megadrive_io_read_sctrl_port(int portnum); - - void megadrive_io_write_data_port_3button(offs_t offset, uint16_t data); - void megadrive_io_write_data_port_6button(offs_t offset, uint16_t data); - void megadrive_io_write_ctrl_port(int portnum, uint16_t data); - void megadrive_io_write_tx_port(int portnum, uint16_t data); - void megadrive_io_write_rx_port(int portnum, uint16_t data); - void megadrive_io_write_sctrl_port(int portnum, uint16_t data); void megadriv_stop_scanline_timer(); - uint32_t screen_update_megadriv(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(screen_vblank_megadriv); - - void megadriv_tas_callback(offs_t offset, uint8_t data); - - void megadriv_timers(machine_config &config); void md_ntsc(machine_config &config); void md2_ntsc(machine_config &config); void md_pal(machine_config &config); void md2_pal(machine_config &config); void md_bootleg(machine_config &config); - void dcat16_megadriv_base(machine_config &config); - void dcat16_megadriv_map(address_map &map); - void megadriv_map(address_map &map); + virtual void machine_start() override; + virtual void machine_reset() override; + + void megadriv_68k_base_map(address_map &map); + void megadriv_68k_map(address_map &map); void megadriv_z80_io_map(address_map &map); void megadriv_z80_map(address_map &map); + required_device m_z80snd; + required_device m_ymsnd; + optional_shared_ptr m_megadrive_ram; + + genesis_z80_vars m_genz80; + int m_version_hi_nibble; + + required_device_array m_ioports; + +private: + uint16_t m68k_version_read(); + uint16_t m68k_ioport_data_read(offs_t offset); + uint16_t m68k_ioport_ctrl_read(offs_t offset); + template uint16_t m68k_ioport_txdata_read(); + template uint16_t m68k_ioport_rxdata_read(); + template uint16_t m68k_ioport_s_ctrl_read(); + + void m68k_ioport_data_write(offs_t offset, uint16_t data); + void m68k_ioport_ctrl_write(offs_t offset, uint16_t data); + template void m68k_ioport_txdata_write(uint16_t data); + template void m68k_ioport_s_ctrl_write(uint16_t data); + + void megadriv_ioports(machine_config &config); +}; + + +class md_ctrl_state : public md_base_state +{ protected: + md_ctrl_state(const machine_config &mconfig, device_type type, const char *tag) : + md_base_state(mconfig, type, tag), + m_io_pad(*this, "PAD%u", 1U) + { + } + + void ctrl1_3button(machine_config &config); + void ctrl2_3button(machine_config &config); + void ctrl1_6button(machine_config &config); + void ctrl2_6button(machine_config &config); + virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; + +private: + template uint8_t ioport_in_3button(); + template uint8_t ioport_in_6button(); + + template void ioport_out_3button(uint8_t data, uint8_t mem_mask); + template void ioport_out_6button(uint8_t data, uint8_t mem_mask); + + TIMER_CALLBACK_MEMBER(ioport_timeout); + + optional_ioport_array<2> m_io_pad; + + emu_timer *m_ioport_idle[2]; + + uint8_t m_ioport_th[2]; + uint8_t m_ioport_phase[2]; }; -#endif // MAME_SHARED_MEGADRIV_H +#endif // MAME_SEGA_MEGADRIV_H diff -Nru mame-0.250+dfsg.1/src/mame/sega/megadriv_rad.cpp mame-0.251+dfsg.1/src/mame/sega/megadriv_rad.cpp --- mame-0.250+dfsg.1/src/mame/sega/megadriv_rad.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/megadriv_rad.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -21,27 +21,112 @@ #include "emu.h" #include "megadriv.h" -#include "megadriv_rad.h" -// todo, use actual MD map, easier once maps are part of base class. -void megadriv_radica_state::megadriv_base_map(address_map &map) + +namespace { + +class megadriv_radica_state_base : public md_ctrl_state +{ +public: + megadriv_radica_state_base(const machine_config &mconfig, device_type type, const char *tag) : + md_ctrl_state(mconfig, type, tag), + m_bank(0), + m_romsize(0x400000), + m_rom(*this, "maincpu") + { } + +protected: + uint16_t read(offs_t offset); + uint16_t read_a13(offs_t offset); + + void megadriv_radica_map(address_map &map); + + void radica_base_map(address_map &map); + + int m_bank; + int m_romsize; + +private: + required_region_ptr m_rom; +}; + + +class megadriv_radica_state : public megadriv_radica_state_base +{ +public: + megadriv_radica_state(const machine_config& mconfig, device_type type, const char* tag) : + megadriv_radica_state_base(mconfig, type, tag) + { } + + void megadriv_radica_3button_ntsc(machine_config &config); + void megadriv_radica_3button_pal(machine_config &config); + + void megadriv_radica_6button_ntsc(machine_config &config); + void megadriv_radica_6button_pal(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; +}; + + +class megadriv_dgunl_state : public megadriv_radica_state +{ +public: + megadriv_dgunl_state(const machine_config& mconfig, device_type type, const char* tag) : + megadriv_radica_state(mconfig, type, tag) + { } + + void megadriv_dgunl_ntsc(machine_config &config); + + void init_dgunl3227(); + +protected: + virtual void machine_start() override; + + uint16_t m_a1630a = 0; + +private: + uint16_t read_a16300(offs_t offset, uint16_t mem_mask); + uint16_t read_a16302(offs_t offset, uint16_t mem_mask); + virtual void write_a1630a(offs_t offset, uint16_t data, uint16_t mem_mask); + + void megadriv_dgunl_map(address_map &map); +}; + + +class megadriv_ra145_state : public megadriv_dgunl_state +{ +public: + megadriv_ra145_state(const machine_config& mconfig, device_type type, const char* tag) : + megadriv_dgunl_state(mconfig, type, tag) + { } + + void megadriv_ra145_ntsc(machine_config &config); + + void init_ra145(); + +protected: + virtual void machine_reset() override; + +private: + virtual void write_a1630a(offs_t offset, uint16_t data, uint16_t mem_mask) override; +}; + + + +void megadriv_radica_state_base::radica_base_map(address_map &map) { - map(0x000000, 0x3fffff).r(FUNC(megadriv_radica_state::read)); /* Cartridge Program Rom */ - map(0xa00000, 0xa01fff).rw(FUNC(megadriv_radica_state::megadriv_68k_read_z80_ram), FUNC(megadriv_radica_state::megadriv_68k_write_z80_ram)); - map(0xa02000, 0xa03fff).w(FUNC(megadriv_radica_state::megadriv_68k_write_z80_ram)); - map(0xa04000, 0xa04003).rw(FUNC(megadriv_radica_state::megadriv_68k_YM2612_read), FUNC(megadriv_radica_state::megadriv_68k_YM2612_write)); - map(0xa06000, 0xa06001).w(FUNC(megadriv_radica_state::megadriv_68k_z80_bank_write)); - map(0xa10000, 0xa1001f).rw(FUNC(megadriv_radica_state::megadriv_68k_io_read), FUNC(megadriv_radica_state::megadriv_68k_io_write)); - map(0xa11100, 0xa11101).rw(FUNC(megadriv_radica_state::megadriv_68k_check_z80_bus), FUNC(megadriv_radica_state::megadriv_68k_req_z80_bus)); - map(0xa11200, 0xa11201).w(FUNC(megadriv_radica_state::megadriv_68k_req_z80_reset)); - map(0xc00000, 0xc0001f).rw(m_vdp, FUNC(sega315_5313_device::vdp_r), FUNC(sega315_5313_device::vdp_w)); - map(0xe00000, 0xe0ffff).ram().mirror(0x1f0000).share("megadrive_ram"); + megadriv_68k_base_map(map); + + map(0x000000, 0x3fffff).r(FUNC(megadriv_radica_state_base::read)); // Cartridge Program ROM } -void megadriv_radica_state::megadriv_radica_map(address_map &map) +void megadriv_radica_state_base::megadriv_radica_map(address_map &map) { - megadriv_base_map(map); - map(0xa13000, 0xa130ff).r(FUNC(megadriv_radica_state::read_a13)); + radica_base_map(map); + + map(0xa13000, 0xa130ff).r(FUNC(megadriv_radica_state_base::read_a13)); } uint16_t megadriv_dgunl_state::read_a16300(offs_t offset, uint16_t mem_mask) @@ -251,7 +336,7 @@ void megadriv_dgunl_state::megadriv_dgunl_map(address_map &map) { - megadriv_base_map(map); + radica_base_map(map); map(0xa16300, 0xa16301).r(FUNC(megadriv_dgunl_state::read_a16300)); map(0xa16302, 0xa16303).r(FUNC(megadriv_dgunl_state::read_a16302)); @@ -259,12 +344,12 @@ map(0xa1630a, 0xa1630b).w(FUNC(megadriv_dgunl_state::write_a1630a)); } -uint16_t megadriv_radica_state::read(offs_t offset) +uint16_t megadriv_radica_state_base::read(offs_t offset) { return m_rom[(((m_bank * 0x10000) + (offset << 1)) & (m_romsize - 1))/2]; } -uint16_t megadriv_radica_state::read_a13(offs_t offset) +uint16_t megadriv_radica_state_base::read_a13(offs_t offset) { if (offset < 0x80) m_bank = offset & 0x3f; @@ -278,70 +363,60 @@ } // controller is wired directly into unit, no controller slots -static INPUT_PORTS_START( megadriv_radica_3button ) +static INPUT_PORTS_START( radica_3button ) PORT_INCLUDE( md_common ) - PORT_MODIFY("PAD1") - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) - - PORT_MODIFY("PAD2") - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 ) + // TODO: how do the MENU buttons on the two controllers work? INPUT_PORTS_END // the 6-in-1 and Sonic Gold units really only have a single wired controller, and no way to connect a 2nd one, despite having some 2 player games! -static INPUT_PORTS_START( megadriv_radica_3button_1player ) - PORT_INCLUDE( megadriv_radica_3button ) +static INPUT_PORTS_START( radica_3button_1player ) + PORT_INCLUDE( md_common ) PORT_MODIFY("PAD2") - PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED ) -INPUT_PORTS_END - -static INPUT_PORTS_START( megadriv_radica_6button ) - PORT_INCLUDE( megadriv_radica_3button ) + PORT_BIT( 0x0fff, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("EXTRA1") /* Extra buttons for Joypad 1 (6 button + start + mode) NOT READ DIRECTLY */ - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("EXTRA2") /* Extra buttons for Joypad 2 (6 button + start + mode) NOT READ DIRECTLY */ - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("IN0") - PORT_START("UNK") + // TODO: how does the MENU button on the controller work? INPUT_PORTS_END -static INPUT_PORTS_START( megadriv_msi_6button ) - PORT_INCLUDE( megadriv_radica_3button ) +static INPUT_PORTS_START( radica_6button ) + PORT_INCLUDE( md_common ) - PORT_START("EXTRA1") /* Extra buttons for Joypad 1 (6 button + start + mode) NOT READ DIRECTLY */ - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_MODIFY("PAD1") // Extra buttons for Joypad 1 (6 button + start + mode) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) PORT_NAME("%p Z") + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) PORT_NAME("%p Y") + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("%p X") + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SELECT ) PORT_PLAYER(1) PORT_NAME("%p Mode") + + PORT_MODIFY("PAD2") // Extra buttons for Joypad 2 (6 button + start + mode) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) PORT_NAME("%p Z") + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) PORT_NAME("%p Y") + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_NAME("%p X") + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SELECT ) PORT_PLAYER(2) PORT_NAME("%p Mode") +INPUT_PORTS_END - PORT_START("EXTRA2") // no 2nd pad - PORT_BIT( 0x000f, IP_ACTIVE_LOW, IPT_UNUSED ) +static INPUT_PORTS_START( msi_6button ) + PORT_INCLUDE( radica_6button ) PORT_MODIFY("PAD2") // no 2nd pad - PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x0fff, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("IN0") - PORT_START("UNK") + PORT_START("RESET") // RESET button on controller to the left of START + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_PLAYER(1) PORT_NAME("Reset") INPUT_PORTS_END -static INPUT_PORTS_START( megadriv_dgunl_1player ) - PORT_INCLUDE( megadriv_radica_3button ) +static INPUT_PORTS_START( dgunl_1player ) + PORT_INCLUDE( md_common ) + + PORT_MODIFY("PAD1") + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DEBUG", 0x01, EQUALS, 0x00) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("%p C") PORT_CONDITION("DEBUG", 0x01, EQUALS, 0x01) + + PORT_MODIFY("PAD2") // no 2nd pad + PORT_BIT( 0x0fff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("RESET") // RESET button to the left of START + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_PLAYER(1) PORT_NAME("Reset") // the unit only has 2 buttons, A and B, strings are changed to remove references to C, even if behavior in Pac-Mania still exists and differs between them // however, Pac-Man still has a test mode which requires holding A+C on startup @@ -349,109 +424,96 @@ PORT_CONFNAME( 0x01, 0x00, "Enable Button C" ) PORT_CONFSETTING( 0x00, DEF_STR( No ) ) PORT_CONFSETTING( 0x01, DEF_STR( Yes ) ) - - PORT_MODIFY("PAD1") - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DEBUG", 0x01, EQUALS, 0x00) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_CONDITION("DEBUG", 0x01, EQUALS, 0x01) - - PORT_MODIFY("PAD2") - PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END -void megadriv_radica_6button_state::machine_start() -{ - md_base_state::machine_start(); - m_vdp->stop_timers(); - m_io_pad_6b[0] = ioport("EXTRA1"); - m_io_pad_6b[1] = ioport("EXTRA2"); - m_io_pad_6b[2] = ioport("IN0"); - m_io_pad_6b[3] = ioport("UNK"); - - // setup timers for 6 button pads - for (int i = 0; i < 3; i++) - m_io_timeout[i] = timer_alloc(FUNC(md_base_state::io_timeout_timer_callback), this); - - save_item(NAME(m_bank)); -} - -void megadriv_radica_3button_state::machine_start() +void megadriv_radica_state::machine_start() { - md_base_state::machine_start(); + megadriv_radica_state_base::machine_start(); + m_vdp->stop_timers(); + save_item(NAME(m_bank)); } - void megadriv_dgunl_state::machine_start() { - megadriv_radica_3button_state::machine_start(); - m_a1630a = 0; - save_item(NAME(m_a1630a)); -} - -void megadriv_ra145_state::machine_start() -{ - md_base_state::machine_start(); - m_vdp->stop_timers(); - - m_io_pad_6b[0] = ioport("EXTRA1"); - m_io_pad_6b[1] = ioport("EXTRA2"); - m_io_pad_6b[2] = ioport("IN0"); - m_io_pad_6b[3] = ioport("UNK"); - - // setup timers for 6 button pads - for (int i = 0; i < 3; i++) - m_io_timeout[i] = timer_alloc(FUNC(md_base_state::io_timeout_timer_callback), this); + megadriv_radica_state::machine_start(); m_a1630a = 0; + save_item(NAME(m_a1630a)); - save_item(NAME(m_bank)); } + void megadriv_ra145_state::machine_reset() { m_bank = 4; - md_base_state::machine_reset(); + megadriv_radica_state_base::machine_reset(); } - -void megadriv_radica_3button_state::machine_reset() +void megadriv_radica_state::machine_reset() { m_bank = 0; - md_base_state::machine_reset(); + megadriv_radica_state_base::machine_reset(); } -void megadriv_radica_3button_state::megadriv_radica_3button_ntsc(machine_config &config) + +void megadriv_radica_state::megadriv_radica_3button_ntsc(machine_config &config) { md_ntsc(config); + + ctrl1_3button(config); + ctrl2_3button(config); + m_maincpu->set_addrmap(AS_PROGRAM, &megadriv_radica_state::megadriv_radica_map); } -void megadriv_radica_3button_state::megadriv_radica_3button_pal(machine_config &config) +void megadriv_radica_state::megadriv_radica_3button_pal(machine_config &config) { md_pal(config); + + ctrl1_3button(config); + ctrl2_3button(config); + m_maincpu->set_addrmap(AS_PROGRAM, &megadriv_radica_state::megadriv_radica_map); } -void megadriv_radica_6button_state::megadriv_radica_6button_pal(machine_config &config) +void megadriv_radica_state::megadriv_radica_6button_pal(machine_config &config) { - md_pal(config); - m_maincpu->set_addrmap(AS_PROGRAM, &megadriv_radica_state::megadriv_radica_map); + megadriv_radica_3button_pal(config); + + ctrl1_6button(config); + ctrl2_6button(config); } -void megadriv_radica_6button_state::megadriv_radica_6button_ntsc(machine_config &config) +void megadriv_radica_state::megadriv_radica_6button_ntsc(machine_config &config) { - md_ntsc(config); - m_maincpu->set_addrmap(AS_PROGRAM, &megadriv_radica_state::megadriv_radica_map); + megadriv_radica_3button_ntsc(config); + + ctrl1_6button(config); + ctrl2_6button(config); } void megadriv_dgunl_state::megadriv_dgunl_ntsc(machine_config &config) { md_ntsc(config); + + ctrl1_3button(config); + ctrl2_3button(config); + m_maincpu->set_addrmap(AS_PROGRAM, &megadriv_dgunl_state::megadriv_dgunl_map); } +void megadriv_ra145_state::megadriv_ra145_ntsc(machine_config &config) +{ + megadriv_dgunl_ntsc(config); + + ctrl1_6button(config); + ctrl2_6button(config); +} + + ROM_START( rad_sf2 ) ROM_REGION( 0x400000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "radica_megadrive_streetfighter2_usa.bin", 0x000000, 0x400000, CRC(a4426df8) SHA1(091f2a95ebd091141de5bcb83562c6087708cb32) ) @@ -547,23 +609,6 @@ - -void megadriv_radica_6button_state::init_megadriv_radica_6button_pal() -{ - init_megadrie(); - // 6 button game, so overwrite 3 button io handlers - m_megadrive_io_read_data_port_ptr = read8sm_delegate(*this, FUNC(md_base_state::megadrive_io_read_data_port_6button)); - m_megadrive_io_write_data_port_ptr = write16sm_delegate(*this, FUNC(md_base_state::megadrive_io_write_data_port_6button)); -} - -void megadriv_radica_6button_state::init_megadriv_radica_6button_ntsc() -{ - init_megadriv(); - // 6 button game, so overwrite 3 button io handlers - m_megadrive_io_read_data_port_ptr = read8sm_delegate(*this, FUNC(md_base_state::megadrive_io_read_data_port_6button)); - m_megadrive_io_write_data_port_ptr = write16sm_delegate(*this, FUNC(md_base_state::megadrive_io_write_data_port_6button)); -} - void megadriv_dgunl_state::init_dgunl3227() { uint8_t* rom = memregion("rom")->base(); @@ -646,43 +691,43 @@ { m_romsize = 0x8000000; init_megadriv(); - // 6 button game, so overwrite 3 button io handlers - m_megadrive_io_read_data_port_ptr = read8sm_delegate(*this, FUNC(md_base_state::megadrive_io_read_data_port_6button)); - m_megadrive_io_write_data_port_ptr = write16sm_delegate(*this, FUNC(md_base_state::megadrive_io_write_data_port_6button)); } +} // anonymous namespace + + // US versions show 'Genesis' on the menu, show a www.radicagames.com splash screen, and use NTSC versions of the ROMs, sometimes region locked // EU versions show 'Mega Drive' on the menu, show a www.radicagames.com splash screen, and use PAL versions of the ROMs, sometimes region locked // UK versions show "Mega Drive' on the menu, show a www.radicauk.com splash screen, and use PAL versions of the ROMs, sometimes region locked -CONS( 2004, rad_gen1, 0, 0, megadriv_radica_3button_ntsc, megadriv_radica_3button_1player, megadriv_radica_3button_state, init_megadriv, "Radica / Sega", "Genesis Collection Volume 1 (Radica, Arcade Legends) (USA)", 0) -CONS( 2004, rad_md1, rad_gen1, 0, megadriv_radica_3button_pal, megadriv_radica_3button_1player, megadriv_radica_3button_state, init_megadrie, "Radica / Sega", "Mega Drive Collection Volume 1 (Radica, Arcade Legends) (Europe)", 0) +CONS( 2004, rad_gen1, 0, 0, megadriv_radica_3button_ntsc, radica_3button_1player, megadriv_radica_state, init_megadriv, "Radica / Sega", "Genesis Collection Volume 1 (Radica, Arcade Legends) (USA)", 0) +CONS( 2004, rad_md1, rad_gen1, 0, megadriv_radica_3button_pal, radica_3button_1player, megadriv_radica_state, init_megadrie, "Radica / Sega", "Mega Drive Collection Volume 1 (Radica, Arcade Legends) (Europe)", 0) // A UK version exists, showing the Radica UK boot screen -CONS( 2004, rad_gen2, 0, 0, megadriv_radica_3button_ntsc, megadriv_radica_3button_1player, megadriv_radica_3button_state, init_megadriv, "Radica / Sega", "Genesis Collection Volume 2 (Radica, Arcade Legends) (USA)", 0) -CONS( 2004, rad_md2, rad_gen2, 0, megadriv_radica_3button_pal, megadriv_radica_3button_1player, megadriv_radica_3button_state, init_megadrie, "Radica / Sega", "Mega Drive Collection Volume 2 (Radica, Arcade Legends) (UK)", 0) +CONS( 2004, rad_gen2, 0, 0, megadriv_radica_3button_ntsc, radica_3button_1player, megadriv_radica_state, init_megadriv, "Radica / Sega", "Genesis Collection Volume 2 (Radica, Arcade Legends) (USA)", 0) +CONS( 2004, rad_md2, rad_gen2, 0, megadriv_radica_3button_pal, radica_3button_1player, megadriv_radica_state, init_megadrie, "Radica / Sega", "Mega Drive Collection Volume 2 (Radica, Arcade Legends) (UK)", 0) // is there a Europe version with Radica Games boot screen and Mega Drive text? // box calls this Volume 3 -CONS( 2004, rad_sonic, 0, 0, megadriv_radica_3button_ntsc, megadriv_radica_3button_1player, megadriv_radica_3button_state, init_megadriv, "Radica / Sega", "Super Sonic Gold (Radica Plug & Play) (USA)", 0) -CONS( 2004, rad_sonicp,rad_sonic,0, megadriv_radica_3button_pal, megadriv_radica_3button_1player, megadriv_radica_3button_state, init_megadrie, "Radica / Sega", "Super Sonic Gold (Radica Plug & Play) (UK)", 0) +CONS( 2004, rad_sonic, 0, 0, megadriv_radica_3button_ntsc, radica_3button_1player, megadriv_radica_state, init_megadriv, "Radica / Sega", "Super Sonic Gold (Radica Plug & Play) (USA)", 0) +CONS( 2004, rad_sonicp,rad_sonic,0, megadriv_radica_3button_pal, radica_3button_1player, megadriv_radica_state, init_megadrie, "Radica / Sega", "Super Sonic Gold (Radica Plug & Play) (UK)", 0) // is there a Europe version with Radica Games boot screen and Mega Drive text? -CONS( 2004, rad_sf2, 0, 0, megadriv_radica_6button_ntsc, megadriv_radica_6button, megadriv_radica_6button_state, init_megadriv_radica_6button_ntsc,"Radica / Capcom / Sega", "Street Fighter II: Special Champion Edition [Ghouls'n Ghosts] (Radica, Arcade Legends) (USA)", 0) -CONS( 2004, rad_sf2p, rad_sf2, 0, megadriv_radica_6button_pal, megadriv_radica_6button, megadriv_radica_6button_state, init_megadriv_radica_6button_pal, "Radica / Capcom / Sega", "Street Fighter II: Special Champion Edition [Ghouls'n Ghosts] (Radica, Arcade Legends) (UK)", 0) +CONS( 2004, rad_sf2, 0, 0, megadriv_radica_6button_ntsc, radica_6button, megadriv_radica_state, init_megadriv, "Radica / Capcom / Sega", "Street Fighter II: Special Champion Edition [Ghouls'n Ghosts] (Radica, Arcade Legends) (USA)", 0) +CONS( 2004, rad_sf2p, rad_sf2, 0, megadriv_radica_6button_pal, radica_6button, megadriv_radica_state, init_megadrie, "Radica / Capcom / Sega", "Street Fighter II: Special Champion Edition [Ghouls'n Ghosts] (Radica, Arcade Legends) (UK)", 0) // is there a Europe version with Radica Games boot screen and Mega Drive text? // still branded as Arcade Legends even if none of these were ever arcade games, European exclusive -CONS( 2004, rad_ssoc, 0, 0, megadriv_radica_3button_pal, megadriv_radica_3button, megadriv_radica_3button_state, init_megadrie, "Radica / Sensible Software / Sega", "Sensible Soccer plus [Cannon Fodder, Mega lo Mania] (Radica, Arcade Legends) (UK)", 0) +CONS( 2004, rad_ssoc, 0, 0, megadriv_radica_3button_pal, radica_3button, megadriv_radica_state, init_megadrie, "Radica / Sensible Software / Sega", "Sensible Soccer plus [Cannon Fodder, Mega lo Mania] (Radica, Arcade Legends) (UK)", 0) // is there a Europe version with Radica Games boot screen and Mega Drive text? // not region locked, no Radica logos, uncertain if other regions would differ -CONS( 2004, rad_orun, 0, 0, megadriv_radica_3button_pal, megadriv_radica_3button_1player, megadriv_radica_3button_state, init_megadrie, "Radica / Sega", "Out Run 2019 (Radica Plug & Play, UK)", 0) +CONS( 2004, rad_orun, 0, 0, megadriv_radica_3button_pal, radica_3button_1player, megadriv_radica_state, init_megadrie, "Radica / Sega", "Out Run 2019 (Radica Plug & Play, UK)", 0) // From a European unit but NTSC? - code is hacked from original USA Genesis game with region check still intact? (does the clone hardware always identify as such? or does the bypassed boot code skip the check?) // TODO: move out of here eventually once the enhanced MD part is emulated rather than bypassed (it's probably the same as the 145-in-1 multigame unit, but modified to only include this single game) -CONS( 2018, msi_sf2, 0, 0, megadriv_radica_6button_ntsc, megadriv_msi_6button, megadriv_radica_6button_state, init_megadriv_radica_6button_ntsc, "MSI / Capcom / Sega", "Street Fighter II: Special Champion Edition (MSI Plug & Play) (Europe)", 0) +CONS( 2018, msi_sf2, 0, 0, megadriv_radica_6button_ntsc, msi_6button, megadriv_radica_state, init_megadriv, "MSI / Capcom / Sega", "Street Fighter II: Special Champion Edition (MSI Plug & Play) (Europe)", 0) // Are these (dgunl3227, ra145) actually emulation based? there is a block of 0x40000 bytes at the start of the ROM that doesn't // appear to be used, very similar in both units. Banking also seems entirely illogical unless something else is managing it. @@ -693,7 +738,6 @@ // this is the only 'Pocket Player' unit to use Genesis on a Chip tech, the others are NES on a chip. // some versions of this unit have an additional "Add Credits with 'A' or 'B'" screen after you select Pac-Man, this version does not. -CONS( 2018, dgunl3227, 0, 0, megadriv_dgunl_ntsc, megadriv_dgunl_1player, megadriv_dgunl_state, init_dgunl3227, "dreamGEAR", "My Arcade Pac-Man Pocket Player (DGUNL-3227)", 0 ) - -CONS( 2018, ra145, 0, 0, megadriv_dgunl_ntsc, megadriv_msi_6button, megadriv_ra145_state, init_ra145, "", "Retro Arcade 16 Bits Classic Edition Mini TV Game Console - 145 Classic Games - TV Arcade Plug and Play (Mega Drive bootlegs)", MACHINE_NOT_WORKING ) +CONS( 2018, dgunl3227, 0, 0, megadriv_dgunl_ntsc, dgunl_1player, megadriv_dgunl_state, init_dgunl3227, "dreamGEAR", "My Arcade Pac-Man Pocket Player (DGUNL-3227)", 0 ) +CONS( 2018, ra145, 0, 0, megadriv_ra145_ntsc, msi_6button, megadriv_ra145_state, init_ra145, "", "Retro Arcade 16 Bits Classic Edition Mini TV Game Console - 145 Classic Games - TV Arcade Plug and Play (Mega Drive bootlegs)", MACHINE_NOT_WORKING ) diff -Nru mame-0.250+dfsg.1/src/mame/sega/megadriv_rad.h mame-0.251+dfsg.1/src/mame/sega/megadriv_rad.h --- mame-0.250+dfsg.1/src/mame/sega/megadriv_rad.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/megadriv_rad.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,107 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:David Haywood - -#ifndef MAME_INCLUDES_MEGADRIV_RAD_H -#define MAME_INCLUDES_MEGADRIV_RAD_H - -class megadriv_radica_state : public md_base_state -{ -public: - megadriv_radica_state(const machine_config &mconfig, device_type type, const char *tag) - : md_base_state(mconfig, type, tag), - m_bank(0), - m_romsize(0x400000), - m_rom(*this, "maincpu") - {} - - - uint16_t read(offs_t offset); - uint16_t read_a13(offs_t offset); - - void megadriv_radica_map(address_map &map); - -protected: - void megadriv_base_map(address_map &map); - int m_bank; - int m_romsize; - -private: - required_region_ptr m_rom; -}; - -class megadriv_radica_3button_state : public megadriv_radica_state -{ -public: - megadriv_radica_3button_state(const machine_config& mconfig, device_type type, const char* tag) - : megadriv_radica_state(mconfig, type, tag) - {} -public: - void megadriv_radica_3button_ntsc(machine_config &config); - void megadriv_radica_3button_pal(machine_config &config); - -protected: - virtual void machine_start() override; - virtual void machine_reset() override; -}; - -class megadriv_radica_6button_state : public megadriv_radica_3button_state -{ -public: - void megadriv_radica_6button_ntsc(machine_config &config); - void megadriv_radica_6button_pal(machine_config &config); - - void init_megadriv_radica_6button_pal(); - void init_megadriv_radica_6button_ntsc(); - -public: - megadriv_radica_6button_state(const machine_config& mconfig, device_type type, const char* tag) - : megadriv_radica_3button_state(mconfig, type, tag) - {} - virtual void machine_start() override; -}; - -class megadriv_dgunl_state : public megadriv_radica_3button_state -{ -public: - megadriv_dgunl_state(const machine_config& mconfig, device_type type, const char* tag) - : megadriv_radica_3button_state(mconfig, type, tag) - {} -public: - void megadriv_dgunl_ntsc(machine_config &config); - - void init_dgunl3227(); - -protected: - virtual void machine_start() override; - uint16_t m_a1630a = 0; - -private: - uint16_t read_a16300(offs_t offset, uint16_t mem_mask); - uint16_t read_a16302(offs_t offset, uint16_t mem_mask); - virtual void write_a1630a(offs_t offset, uint16_t data, uint16_t mem_mask); - - void megadriv_dgunl_map(address_map &map); -}; - -class megadriv_ra145_state : public megadriv_dgunl_state -{ -public: - megadriv_ra145_state(const machine_config& mconfig, device_type type, const char* tag) - : megadriv_dgunl_state(mconfig, type, tag) - {} - - void init_ra145(); - -public: - -protected: - virtual void machine_start() override; - virtual void machine_reset() override; - -private: - virtual void write_a1630a(offs_t offset, uint16_t data, uint16_t mem_mask) override; -}; - - - -#endif // MAME_INCLUDES_MEGADRIV_RAD_H diff -Nru mame-0.250+dfsg.1/src/mame/sega/megadriv_sunmix.cpp mame-0.251+dfsg.1/src/mame/sega/megadriv_sunmix.cpp --- mame-0.250+dfsg.1/src/mame/sega/megadriv_sunmix.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/megadriv_sunmix.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,340 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood +/*************************************************************************** + + Sega Mega Drive/Genesis-based bootlegs + + Games supported: + * Top Shooter + +Top Shooter PCB info +==================== + + Sun Mixing board, looks like a hacked up Genesis clone. + + Original driver by David Haywood + Inputs by Mariusz Wojcieszek + + Top Shooter - (c)1995 - older board, look more like an actual hacked cart system, has an MCU + +TOP SHOOTER - Sun Mixing Co. Ltd. 1995 + +To me it seems like an original cartridge-based arcade board +hacked to use an external ROM board and a standard JAMMA +connector, but of course, I can be wrong. + + + UPPER BOARD + + _________________________________________________________ + | ___________ ___________ _____ __ | + | 74LS245P |U14 Empty | |U12 ROM1 | |IC1| |B| | + | 74LS245P |__________| |__________| |___| | + | 74LS245P ___________ ___________ _____________ | + __| |U13 Empty | |U11 ROM2 | | AT89C51 | | + |_ J |__________| |__________| |____________| |_ + |_ A ______________________ _____ |_ J + |_ M | U10 MC68000P10 | |OSC| |_ P + |_ M | Motorola | |_ 2 + |_ A |______________________| 74HC00P |_ + |_ 74LS245P ______________________ ________ | + |_ | U9 Empty | |HM6116L | + |_ | | |_______| |_ J + |_ |______________________| |_ P + |_ 74LS245P TD62oo3AP 74LS373P |_ 3 + |_ __________ | + |_ 74LS245P |GALv20V8B| | + |_ ______ | + |_ _____ |DIPS| |_ P + | |U24 | |_ 1 + | 74LS245P | + | TD62oo3AP | + | | + |_ 97 ____________ _____| + |_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|_|_|_| + + + IC1 = Surface scratched out, don't know what it is + U24 = Surface scratched out, seems like a PROM + DIPs = Fixed as: 00001000 + ROMs = Toshiba TC574000AD + + JP2, JP3 and P1 connects both boards, also another + on-board connector is used, see notes for the 68K socket + for the lower board. + + + LOWER BOARD + + _________________________________________________________ + | ____ ____ | + | ___ | I| | I| | + | |I| | C| | C| | + | |C| | 3| | 2| | + | |1| |__| |__| | + | |3| |__ + | _ _________________________ __| + | |_| ||||||||||||||||||||||||| __| + | IC14 ---------- SLOT --------- __| + | ______________________ __| + | | | __| + | ___ | 68K (to upper board) | _______ __| + | |I| |______________________| |SE-94| __| + | |C| |JDDB | _| + | |1| _______ |_____| | + | |2| |SE-93| IC4 | + | |JDDA | | + | |_____| ___________ |_ + | IC8 |Z8400A PS| | + | |_________| | + | ______ _________ _________ | + | | OSC| | IC11 | | IC7 | | + | _____________ |_______| |_______| | + | RST | | CN5 CN6 | + |___________| |______________________________| + + + IC3 = IC2 = Winbond W24257V + IC7 = 6264LD 9440 + IC11 = SE-95 JDDC + IC12 = Sony CXA1634P + IC13 = Sony CXA1145P + IC14 = GL358 N16 + + RST is a reset button. + + OSC = 53.693175 MHz + + CN5 and CN6 are 9-pin connectors... serial ports? + + There are two wires soldered directly to two connectors + of the slot, going to the upper board (via P1). + + The whole upper board is plugged using the 68000 socket, + there is no 68K on the lower board. + + There is an edge connector, but it isn't JAMMA. + + "HK-986 (KINYO)" is written on the PCB, near the slot. + +****************************************************************************/ + +#include "emu.h" +#include "megadriv.h" + + +namespace { + +class md_sunmixing_state : public md_base_state +{ +public: + md_sunmixing_state(machine_config const &mconfig, device_type type, char const *tag) : + md_base_state(mconfig, type, tag) + { + } + + void topshoot(machine_config &config); + void sbubsm(machine_config &config); + +private: + void topshoot_68k_map(address_map &map); + void sbubsm_68k_map(address_map &map); + + uint16_t topshoot_200051_r(); + uint16_t sbubsm_400000_r(); + uint16_t sbubsm_400002_r(); +}; + + +/************************************* + * + * Machine Configuration + * + *************************************/ + +void md_sunmixing_state::topshoot(machine_config &config) +{ + md_ntsc(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &md_sunmixing_state::topshoot_68k_map); +} + +void md_sunmixing_state::sbubsm(machine_config &config) +{ + md_ntsc(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &md_sunmixing_state::sbubsm_68k_map); +} + + +void md_sunmixing_state::topshoot_68k_map(address_map &map) +{ + megadriv_68k_base_map(map); + + map(0x000000, 0x1fffff).rom(); // Cartridge Program ROM + map(0x200000, 0x2023ff).ram(); // Tested + + // these are shared RAM, MCU puts the inputs here + map(0x200042, 0x200043).portr("IN0"); + map(0x200044, 0x200045).portr("IN1"); + map(0x200046, 0x200047).portr("IN2"); + map(0x200048, 0x200049).portr("IN3"); + map(0x200050, 0x200051).r(FUNC(md_sunmixing_state::topshoot_200051_r)); +} + +void md_sunmixing_state::sbubsm_68k_map(address_map &map) +{ + topshoot_68k_map(map); + + // these are shared RAM, MCU puts the inputs here + map(0x20007e, 0x20007f).portr("IN4"); + + // needed to boot, somme kind of hardware ident? + map(0x400000, 0x400001).r(FUNC(md_sunmixing_state::sbubsm_400000_r)); + map(0x400002, 0x400003).r(FUNC(md_sunmixing_state::sbubsm_400002_r)); +} + + +/************************************* + * + * Games memory handlers + * + *************************************/ + +uint16_t md_sunmixing_state::topshoot_200051_r() +{ + return -0x5b; +} + +uint16_t md_sunmixing_state::sbubsm_400000_r() +{ + logerror("%s: sbubsm_400000_r\n", machine().describe_context().c_str()); + return 0x5500; +} + +uint16_t md_sunmixing_state::sbubsm_400002_r() +{ + logerror("%s: sbubsm_400002_r\n", machine().describe_context().c_str()); + return 0x0f00; +} + + +/************************************* + * + * Game-specific port definitions + * + *************************************/ + +static INPUT_PORTS_START( topshoot ) // Top Shooter Input Ports + PORT_START("IN0") + PORT_BIT( 0x4f, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Bet") PORT_IMPULSE(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Start") PORT_IMPULSE(1) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Fire") PORT_IMPULSE(1) + + PORT_START("IN1") + PORT_BIT( 0xe7, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Test mode down") PORT_IMPULSE(1) + + PORT_START("IN2") + PORT_BIT( 0xfd, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) + + PORT_START("IN3") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1) + PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + +static INPUT_PORTS_START( sbubsm ) + // the bit ordering in the ports is strange here because this is being read through shared RAM, the MCU presumably reads the real inputs then scrambles them in RAM for the 68k to sort out + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("IN2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("IN3") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("IN4") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + // no service mode here? +INPUT_PORTS_END + + +/************************************* + * + * ROM definitions + * + *************************************/ + +ROM_START( topshoot ) // Top Shooter (c)1995 Sun Mixing + ROM_REGION( 0x200000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "tc574000ad_u11_2.bin", 0x000000, 0x080000, CRC(b235c4d9) SHA1(fbb308a5f6e769f3277824cb6a3b50c308969ac2) ) + ROM_LOAD16_BYTE( "tc574000ad_u12_1.bin", 0x000001, 0x080000, CRC(e826f6ad) SHA1(23ec8bb608f954d3b915f061e7076c0c63b8259e) ) + + // Not hooked up yet + ROM_REGION( 0x1000, "mcu", 0 ) + ROM_LOAD( "89c51.bin", 0x0000, 0x1000, CRC(595475c8) SHA1(8313819ba06cc92b54f88c1ca9f34be8d1ec94d0) ) +ROM_END + +ROM_START( sbubsm ) + ROM_REGION( 0x200000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "u11.bin", 0x000000, 0x080000, CRC(4f9337ea) SHA1(b245eb615f80afd25e29b2efdddb7f61c1deff6b) ) + ROM_LOAD16_BYTE( "u12.bin", 0x000001, 0x080000, CRC(f5374835) SHA1(3a97910f5f7327ec7ad6425dfdfa72c86196ed33) ) + + ROM_REGION( 0x1000, "mcu", 0 ) // could be the same as topshoot (same PCB) + ROM_LOAD( "89c51.bin", 0x0000, 0x1000, NO_DUMP ) +ROM_END + +} // anonymous namespace + + +/************************************* + * + * Game drivers + * + *************************************/ + +GAME( 1995, topshoot, 0, topshoot, topshoot, md_sunmixing_state, init_megadriv, ROT0, "Sun Mixing", "Top Shooter", 0 ) +GAME( 1996, sbubsm, 0, sbubsm, sbubsm, md_sunmixing_state, init_megadriv, ROT0, "Sun Mixing", "Super Bubble Bobble (Sun Mixing, Mega Drive clone hardware)", 0 ) diff -Nru mame-0.250+dfsg.1/src/mame/sega/megadriv_sunplus_hybrid.cpp mame-0.251+dfsg.1/src/mame/sega/megadriv_sunplus_hybrid.cpp --- mame-0.250+dfsg.1/src/mame/sega/megadriv_sunplus_hybrid.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/megadriv_sunplus_hybrid.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -16,21 +16,22 @@ #include "emu.h" #include "megadriv.h" -class megadriv_sunplus_state : public md_base_state +namespace { + +class megadriv_sunplus_state : public md_ctrl_state { public: - megadriv_sunplus_state(const machine_config &mconfig, device_type type, const char *tag) + megadriv_sunplus_state(const machine_config &mconfig, device_type type, const char *tag) : // Mega Drive part - : md_base_state(mconfig, type, tag), + md_ctrl_state(mconfig, type, tag), m_md_is_running(true), m_bank(0), m_rom(*this, "maincpu") - {} + { } // Mega Drive part uint16_t read(offs_t offset); void megadriv_sunplus_pal(machine_config &config); - void megadriv_sunplus_map(address_map &map); void init_reactmd(); @@ -44,25 +45,20 @@ // Mega Drive part int m_bank; required_region_ptr m_rom; + uint32_t screen_update_hybrid(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(screen_vblank_hybrid); + void megadriv_sunplus_map(address_map &map); }; // todo, use actual MD map, easier once maps are part of base class. void megadriv_sunplus_state::megadriv_sunplus_map(address_map &map) { + megadriv_68k_base_map(map); + map(0x000000, 0x3fffff).r(FUNC(megadriv_sunplus_state::read)); /* Cartridge Program Rom */ - map(0xa00000, 0xa01fff).rw(FUNC(megadriv_sunplus_state::megadriv_68k_read_z80_ram), FUNC(megadriv_sunplus_state::megadriv_68k_write_z80_ram)); - map(0xa02000, 0xa03fff).w(FUNC(megadriv_sunplus_state::megadriv_68k_write_z80_ram)); - map(0xa04000, 0xa04003).rw(FUNC(megadriv_sunplus_state::megadriv_68k_YM2612_read), FUNC(megadriv_sunplus_state::megadriv_68k_YM2612_write)); - map(0xa06000, 0xa06001).w(FUNC(megadriv_sunplus_state::megadriv_68k_z80_bank_write)); - map(0xa10000, 0xa1001f).rw(FUNC(megadriv_sunplus_state::megadriv_68k_io_read), FUNC(megadriv_sunplus_state::megadriv_68k_io_write)); - map(0xa11100, 0xa11101).rw(FUNC(megadriv_sunplus_state::megadriv_68k_check_z80_bus), FUNC(megadriv_sunplus_state::megadriv_68k_req_z80_bus)); - map(0xa11200, 0xa11201).w(FUNC(megadriv_sunplus_state::megadriv_68k_req_z80_reset)); - map(0xc00000, 0xc0001f).rw(m_vdp, FUNC(sega315_5313_device::vdp_r), FUNC(sega315_5313_device::vdp_w)); - map(0xe00000, 0xe0ffff).ram().mirror(0x1f0000).share("megadrive_ram"); } uint16_t megadriv_sunplus_state::read(offs_t offset) @@ -94,7 +90,7 @@ void megadriv_sunplus_state::machine_start() { logerror("megadriv_sunplus_state::machine_start\n"); - md_base_state::machine_start(); + md_ctrl_state::machine_start(); m_vdp->stop_timers(); save_item(NAME(m_bank)); @@ -103,7 +99,7 @@ void megadriv_sunplus_state::machine_reset() { logerror("megadriv_sunplus_state::machine_reset\n"); - md_base_state::machine_reset(); + md_ctrl_state::machine_reset(); } uint32_t megadriv_sunplus_state::screen_update_hybrid(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) @@ -122,7 +118,7 @@ if (m_md_is_running) { /* Used to Sync the timing */ - md_base_state::screen_vblank_megadriv(state); + md_ctrl_state::screen_vblank_megadriv(state); } } @@ -130,10 +126,14 @@ void megadriv_sunplus_state::megadriv_sunplus_pal(machine_config &config) { md_pal(config); + m_maincpu->set_addrmap(AS_PROGRAM, &megadriv_sunplus_state::megadriv_sunplus_map); m_screen->set_screen_update(FUNC(megadriv_sunplus_state::screen_update_hybrid)); m_screen->screen_vblank().set(FUNC(megadriv_sunplus_state::screen_vblank_hybrid)); + + ctrl1_3button(config); + ctrl2_3button(config); } @@ -163,9 +163,10 @@ ROM_IGNORE(0x4000000) // the 2nd half of the ROM can't be accessed by the PCB (address line tied low) (contains garbage? data) ROM_END +} // anonymous namespace + // Two systems in one unit - Genesis on a Chip and SunPlus, only the SunPlus part is currently emulated. Genesis on a chip is a very poor implementation with many issues on real hardware. // This should actually boot to a menu on the MD side, with the SunPlus only being enabled if selected from that menu. MD side menu runs in some enhanced / custom MD mode though. // Badminton hangs, as it does in the 49-in-1 above CONS( 2009, reactmd, 0, 0, megadriv_sunplus_pal, megadriv_sunplus, megadriv_sunplus_state, init_reactmd, "AtGames / Sega / Waixing", "Reactor MD (PAL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - diff -Nru mame-0.250+dfsg.1/src/mame/sega/megadriv_vt_hybrid.cpp mame-0.251+dfsg.1/src/mame/sega/megadriv_vt_hybrid.cpp --- mame-0.250+dfsg.1/src/mame/sega/megadriv_vt_hybrid.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/megadriv_vt_hybrid.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -17,21 +17,20 @@ namespace { -class megadriv_vt0203_state : public md_base_state +class megadriv_vt0203_state : public md_ctrl_state { public: - megadriv_vt0203_state(const machine_config &mconfig, device_type type, const char *tag) + megadriv_vt0203_state(const machine_config &mconfig, device_type type, const char *tag) : // Mega Drive part - : md_base_state(mconfig, type, tag), + md_ctrl_state(mconfig, type, tag), m_md_is_running(true), m_bank(0), m_rom(*this, "maincpu") - {} + { } // Mega Drive part uint16_t read(offs_t offset); void megadriv_vt0203_pal(machine_config &config); - void megadriv_vt0203_map(address_map &map); protected: virtual void machine_start() override; @@ -43,25 +42,20 @@ // Mega Drive part int m_bank; required_region_ptr m_rom; + uint32_t screen_update_hybrid(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(screen_vblank_hybrid); + void megadriv_vt0203_map(address_map &map); }; // todo, use actual MD map, easier once maps are part of base class. void megadriv_vt0203_state::megadriv_vt0203_map(address_map &map) { + megadriv_68k_base_map(map); + map(0x000000, 0x3fffff).r(FUNC(megadriv_vt0203_state::read)); /* Cartridge Program Rom */ - map(0xa00000, 0xa01fff).rw(FUNC(megadriv_vt0203_state::megadriv_68k_read_z80_ram), FUNC(megadriv_vt0203_state::megadriv_68k_write_z80_ram)); - map(0xa02000, 0xa03fff).w(FUNC(megadriv_vt0203_state::megadriv_68k_write_z80_ram)); - map(0xa04000, 0xa04003).rw(FUNC(megadriv_vt0203_state::megadriv_68k_YM2612_read), FUNC(megadriv_vt0203_state::megadriv_68k_YM2612_write)); - map(0xa06000, 0xa06001).w(FUNC(megadriv_vt0203_state::megadriv_68k_z80_bank_write)); - map(0xa10000, 0xa1001f).rw(FUNC(megadriv_vt0203_state::megadriv_68k_io_read), FUNC(megadriv_vt0203_state::megadriv_68k_io_write)); - map(0xa11100, 0xa11101).rw(FUNC(megadriv_vt0203_state::megadriv_68k_check_z80_bus), FUNC(megadriv_vt0203_state::megadriv_68k_req_z80_bus)); - map(0xa11200, 0xa11201).w(FUNC(megadriv_vt0203_state::megadriv_68k_req_z80_reset)); - map(0xc00000, 0xc0001f).rw(m_vdp, FUNC(sega315_5313_device::vdp_r), FUNC(sega315_5313_device::vdp_w)); - map(0xe00000, 0xe0ffff).ram().mirror(0x1f0000).share("megadrive_ram"); } uint16_t megadriv_vt0203_state::read(offs_t offset) @@ -99,7 +93,7 @@ void megadriv_vt0203_state::machine_start() { logerror("megadriv_vt0203_state::machine_start\n"); - md_base_state::machine_start(); + md_ctrl_state::machine_start(); m_vdp->stop_timers(); save_item(NAME(m_bank)); @@ -108,7 +102,7 @@ void megadriv_vt0203_state::machine_reset() { logerror("megadriv_vt0203_state::machine_reset\n"); - md_base_state::machine_reset(); + md_ctrl_state::machine_reset(); } uint32_t megadriv_vt0203_state::screen_update_hybrid(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) @@ -127,7 +121,7 @@ if (m_md_is_running) { /* Used to Sync the timing */ - md_base_state::screen_vblank_megadriv(state); + md_ctrl_state::screen_vblank_megadriv(state); } } @@ -135,11 +129,15 @@ void megadriv_vt0203_state::megadriv_vt0203_pal(machine_config &config) { md_pal(config); + m_maincpu->set_addrmap(AS_PROGRAM, &megadriv_vt0203_state::megadriv_vt0203_map); m_screen->set_screen_update(FUNC(megadriv_vt0203_state::screen_update_hybrid)); m_screen->screen_vblank().set(FUNC(megadriv_vt0203_state::screen_vblank_hybrid)); + ctrl1_3button(config); + ctrl2_3button(config); + // TODO: add the VT part, this might require refactoring of the VT stuff as the SoC currently contains the screen // but instead we'll need to use a shared screen that is reconfigured depending on which part is enabled } diff -Nru mame-0.250+dfsg.1/src/mame/sega/megaplay.cpp mame-0.251+dfsg.1/src/mame/sega/megaplay.cpp --- mame-0.250+dfsg.1/src/mame/sega/megaplay.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/megaplay.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -31,10 +31,13 @@ */ #include "emu.h" +#include "megadriv.h" + #include "cpu/z80/z80.h" #include "machine/cxd1095.h" -#include "megadriv.h" + +namespace { #define MASTER_CLOCK 53693100 @@ -42,11 +45,11 @@ #define MP_GAME 0 -class mplay_state : public md_base_state +class mplay_state : public md_ctrl_state { public: mplay_state(const machine_config &mconfig, device_type type, const char *tag) : - md_base_state(mconfig, type, tag), + md_ctrl_state(mconfig, type, tag), m_ic3_ram(*this, "ic3_ram"), m_vdp1(*this, "vdp1"), m_bioscpu(*this, "mtbios") @@ -68,8 +71,8 @@ void extra_ram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); void bios_banksel_w(uint8_t data); void bios_gamesel_w(uint8_t data); - void mp_io_write(offs_t offset, uint16_t data); - uint16_t mp_io_read(offs_t offset); + void mp_io_exp_out(uint8_t data, uint8_t mem_mask); + uint8_t mp_io_exp_in(); uint8_t bank_r(offs_t offset); void bank_w(offs_t offset, uint8_t data); uint8_t bios_6402_r(); @@ -100,6 +103,8 @@ uint8_t m_bios_6403 = 0; uint8_t m_bios_6404 = 0; + uint8_t m_io_exp_data = 0; + std::unique_ptr m_ic36_ram; std::unique_ptr m_ic37_ram; @@ -425,20 +430,15 @@ m_bios_mode = BIT(data, 4); } -void mplay_state::mp_io_write(offs_t offset, uint16_t data) +void mplay_state::mp_io_exp_out(uint8_t data, uint8_t mem_mask) { - if (offset == 0x03) - m_megadrive_io_data_regs[2] = (data & m_megadrive_io_ctrl_regs[2]) | (m_megadrive_io_data_regs[2] & ~m_megadrive_io_ctrl_regs[2]); - else - megadriv_68k_io_write(offset & 0x1f, data); + // TODO: TH (bit 6) is configured as an output and seems to be used for something, too + m_io_exp_data = (data & 0x07) | (m_io_exp_data & 0xf8); } -uint16_t mplay_state::mp_io_read(offs_t offset) +uint8_t mplay_state::mp_io_exp_in() { - if (offset == 0x03) - return m_megadrive_io_data_regs[2]; - else - return megadriv_68k_io_read(offset & 0x1f); + return m_io_exp_data; } uint8_t mplay_state::bank_r(offs_t offset) @@ -467,7 +467,7 @@ } else if (fulladdress >= 0xa10000 && fulladdress <= 0xa1001f) // IO access { - return mp_io_read((offset & 0x1f) / 2); + return m_maincpu->space(AS_PROGRAM).read_byte(fulladdress); } else { @@ -490,7 +490,7 @@ } else if (fulladdress >= 0xa10000 && fulladdress <=0xa1001f) // IO Access { - mp_io_write((offset & 0x1f) / 2, data); + m_maincpu->space(AS_PROGRAM).write_byte(fulladdress, data); } else { @@ -504,25 +504,25 @@ uint8_t mplay_state::bios_6402_r() { - return m_megadrive_io_data_regs[2];// & 0xfe; + return m_io_exp_data;// & 0xfe; } void mplay_state::bios_6402_w(uint8_t data) { - m_megadrive_io_data_regs[2] = (m_megadrive_io_data_regs[2] & 0x07) | ((data & 0x70) >> 1); + m_io_exp_data = (m_io_exp_data & 0x07) | ((data & 0x70) >> 1); // logerror("BIOS: 0x6402 write: 0x%02x\n", data); } uint8_t mplay_state::bios_6204_r() { - return m_megadrive_io_data_regs[2]; + return m_io_exp_data; // return (m_bios_width & 0xf8) + (m_bios_6204 & 0x07); } void mplay_state::bios_width_w(uint8_t data) { m_bios_width = data; - m_megadrive_io_data_regs[2] = (m_megadrive_io_data_regs[2] & 0x07) | ((data & 0xf8)); + m_io_exp_data = (m_io_exp_data & 0x07) | ((data & 0xf8)); // logerror("BIOS: 0x6204 - Width write: %02x\n", data); } @@ -654,7 +654,7 @@ m_bios_mode = MP_ROM; m_bios_bank_addr = 0; m_readpos = 1; - md_base_state::machine_reset(); + md_ctrl_state::machine_reset(); } void mplay_state::megaplay(machine_config &config) @@ -662,8 +662,15 @@ // basic machine hardware md_ntsc(config); - /* The Megaplay has an extra BIOS CPU which drives an SMS VDP - which includes an SN76496 for sound */ + // integrated 3-button controllers + ctrl1_3button(config); + ctrl2_3button(config); + + // for now ... + m_ioports[2]->set_in_handler(FUNC(mplay_state::mp_io_exp_in)); + m_ioports[2]->set_out_handler(FUNC(mplay_state::mp_io_exp_out)); + + // The Megaplay has an extra BIOS CPU which drives an SMS VDP which includes an SN76496 for sound Z80(config, m_bioscpu, MASTER_CLOCK / 15); // ?? m_bioscpu->set_addrmap(AS_PROGRAM, &mplay_state::megaplay_bios_map); m_bioscpu->set_addrmap(AS_IO, &mplay_state::megaplay_bios_io_map); @@ -963,11 +970,6 @@ m_ic37_ram = std::make_unique(0x10000); init_megadrij(); - m_megadrive_io_read_data_port_ptr = read8sm_delegate(*this, FUNC(md_base_state::megadrive_io_read_data_port_3button)); - m_megadrive_io_write_data_port_ptr = write16sm_delegate(*this, FUNC(md_base_state::megadrive_io_write_data_port_3button)); - - // for now ... - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xa10000, 0xa1001f, read16sm_delegate(*this, FUNC(mplay_state::mp_io_read)), write16sm_delegate(*this, FUNC(mplay_state::mp_io_write))); // megaplay has ram shared with the bios cpu here m_z80snd->space(AS_PROGRAM).install_ram(0x2000, 0x3fff, &m_ic36_ram[0]); @@ -977,6 +979,9 @@ m_maincpu->space(AS_PROGRAM).install_write_handler(0xa02000, 0xa03fff, write16s_delegate(*this, FUNC(mplay_state::extra_ram_w))); } +} // anonymous namespace + + /* Sega Mega Play Cartridges ------------------------- diff -Nru mame-0.250+dfsg.1/src/mame/sega/megatech.cpp mame-0.251+dfsg.1/src/mame/sega/megatech.cpp --- mame-0.250+dfsg.1/src/mame/sega/megatech.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/megatech.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -5,9 +5,9 @@ About MegaTech: Megatech games are identical to their Genesis/SMS equivalents, however the Megatech cartridges contain -a BIOS rom with the game instructions. The last part number of the bios ROM is the cart/game ID code. +a BIOS ROM with the game instructions. The last part number of the BIOS ROM is the cart/game ID code. -The instruction rom appears to map at 0x300000 in the cart space. +The instruction ROM appears to map at 0x300000 in the cart space. In Megatech games your coins buy you time to play the game, how you perform in the game does not matter, you can die and start a new game providing you still have time, likewise you can be playing @@ -93,11 +93,11 @@ namespace { -class mtech_state : public md_base_state +class mtech_state : public md_ctrl_state { public: - mtech_state(const machine_config &mconfig, device_type type, const char *tag) - : md_base_state(mconfig, type, tag), + mtech_state(const machine_config &mconfig, device_type type, const char *tag) : + md_ctrl_state(mconfig, type, tag), m_vdp1(*this, "vdp1"), m_cart1(*this, "mt_slot1"), m_cart2(*this, "mt_slot2"), @@ -500,8 +500,8 @@ m_flash_screen = BIT(data, 1); } -/* this sets 0x300000 which may indicate that the 68k can see the instruction rom - there, this limiting the max game rom capacity to 3meg. */ +/* this sets 0x300000 which may indicate that the 68k can see the instruction ROM + there, this limiting the max game ROM capacity to 3meg. */ uint8_t mtech_state::read_68k_banked_data(offs_t offset) { @@ -535,15 +535,15 @@ void mtech_state::megatech_bios_map(address_map &map) { - map(0x0000, 0x2fff).rom(); // from bios rom (0x0000-0x2fff populated in ROM) + map(0x0000, 0x2fff).rom(); // from bios ROM (0x0000-0x2fff populated in ROM) map(0x3000, 0x3fff).rw(FUNC(mtech_state::banked_ram_r), FUNC(mtech_state::banked_ram_w)); // copies instruction data here at startup, must be banked map(0x4000, 0x5fff).ram(); // plain ram? map(0x6000, 0x6000).w(FUNC(mtech_state::mt_z80_bank_w)); map(0x6400, 0x6407).rw("io1", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)); map(0x6800, 0x6807).rw("io2", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)); - map(0x7000, 0x77ff).rom(); // from bios rom (0x7000-0x77ff populated in ROM) + map(0x7000, 0x77ff).rom(); // from bios ROM (0x7000-0x77ff populated in ROM) //map(0x7800, 0x7fff).ram(); // ? - map(0x8000, 0x9fff).rw(FUNC(mtech_state::read_68k_banked_data), FUNC(mtech_state::write_68k_banked_data)); // window into 68k address space, reads instr rom and writes to reset banks on z80 carts? + map(0x8000, 0x9fff).rw(FUNC(mtech_state::read_68k_banked_data), FUNC(mtech_state::write_68k_banked_data)); // window into 68k address space, reads instr ROM and writes to reset banks on Z80 carts? } @@ -560,14 +560,14 @@ if (m_bios_port_ctrl == 0x55) { /* A keys */ - retdata = ((m_io_pad_3b[0]->read() & 0x40) >> 2) | ((m_io_pad_3b[1]->read() & 0x40) >> 4) | 0xeb; + retdata = ((m_pad[0]->read() & 0x40) >> 2) | ((m_pad[1]->read() & 0x40) >> 4) | 0xeb; } else { if (offset == 0) - retdata = (m_io_pad_3b[0]->read() & 0x3f) | ((m_io_pad_3b[1]->read() & 0x03) << 6); + retdata = (m_pad[0]->read() & 0x3f) | ((m_pad[1]->read() & 0x03) << 6); else - retdata = ((m_io_pad_3b[1]->read() & 0x3c) >> 2) | 0xf0; + retdata = ((m_pad[1]->read() & 0x3c) >> 2) | 0xf0; } return retdata; @@ -652,7 +652,7 @@ void mtech_state::machine_start() { - md_base_state::machine_start(); + md_ctrl_state::machine_start(); m_alarm_sound.resolve(); m_flash_screen.resolve(); @@ -661,7 +661,7 @@ void mtech_state::machine_reset() { m_mt_bank_addr = 0; - md_base_state::machine_reset(); + md_ctrl_state::machine_reset(); for (int i = 0; i < 8; i++) m_cart_reg[i] = nullptr; @@ -697,10 +697,14 @@ void mtech_state::megatech(machine_config &config) { - /* basic machine hardware */ + // basic machine hardware md_ntsc(config); - /* Megatech has an extra SMS based bios *and* an additional screen */ + // integrated 3-button controllers + ctrl1_3button(config); + ctrl2_3button(config); + + // Megatech has an extra SMS-based BIOS *and* an additional screen Z80(config, m_bioscpu, MASTER_CLOCK / 15); /* ?? */ m_bioscpu->set_addrmap(AS_PROGRAM, &mtech_state::megatech_bios_map); m_bioscpu->set_addrmap(AS_IO, &mtech_state::megatech_bios_portmap); diff -Nru mame-0.250+dfsg.1/src/mame/sega/model3.cpp mame-0.251+dfsg.1/src/mame/sega/model3.cpp --- mame-0.250+dfsg.1/src/mame/sega/model3.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/model3.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4600,6 +4600,9 @@ ROM_REGION( 0x800000, "dsb", 0 ) /* DSB samples */ ROM_FILL( 0x000000, 0x800000, 0x0000 ) + ROM_REGION( 0x10000, "drivebd", 0 ) /* Drive board ROM, same hardware and ROM as Scud Race */ + ROM_LOAD( "epr-19338a.bin", 0x000000, 0x010000, CRC(c9fac464) SHA1(47b9ab7921a685c01629afb592d597faa11d2bd6) ) + // ???? 317-0238-COM Model 3 ROM_PARAMETER( ":315_5881:key", "29290f17" ) ROM_END @@ -4658,6 +4661,9 @@ ROM_REGION( 0x800000, "dsb", 0 ) /* DSB samples */ ROM_FILL( 0x000000, 0x800000, 0x0000 ) + ROM_REGION( 0x10000, "drivebd", 0 ) /* Drive board ROM, same hardware and ROM as Scud Race */ + ROM_LOAD( "epr-19338a.bin", 0x000000, 0x010000, CRC(c9fac464) SHA1(47b9ab7921a685c01629afb592d597faa11d2bd6) ) + // ???? 317-0238-COM Model 3 ROM_PARAMETER( ":315_5881:key", "29290f17" ) ROM_END @@ -4716,6 +4722,9 @@ ROM_REGION( 0x800000, "dsb", 0 ) /* DSB samples */ ROM_FILL( 0x000000, 0x800000, 0x0000 ) + ROM_REGION( 0x10000, "drivebd", 0 ) /* Drive board ROM, same hardware and ROM as Scud Race */ + ROM_LOAD( "epr-19338a.bin", 0x000000, 0x010000, CRC(c9fac464) SHA1(47b9ab7921a685c01629afb592d597faa11d2bd6) ) + // ???? 317-0238-COM Model 3 ROM_PARAMETER( ":315_5881:key", "29290f17" ) ROM_END @@ -4774,6 +4783,9 @@ ROM_REGION( 0x800000, "dsb", 0 ) /* DSB samples */ ROM_FILL( 0x000000, 0x800000, 0x0000 ) + ROM_REGION( 0x10000, "drivebd", 0 ) /* Drive board ROM, same hardware and ROM as Scud Race */ + ROM_LOAD( "epr-19338a.bin", 0x000000, 0x010000, CRC(c9fac464) SHA1(47b9ab7921a685c01629afb592d597faa11d2bd6) ) + // ???? 317-0238-COM Model 3 ROM_PARAMETER( ":315_5881:key", "29290f17" ) ROM_END @@ -4832,6 +4844,9 @@ ROM_REGION( 0x800000, "dsb", 0 ) /* DSB samples */ ROM_FILL( 0x000000, 0x800000, 0x0000 ) + ROM_REGION( 0x10000, "drivebd", 0 ) /* Drive board ROM, same hardware and ROM as Scud Race */ + ROM_LOAD( "epr-19338a.bin", 0x000000, 0x010000, CRC(c9fac464) SHA1(47b9ab7921a685c01629afb592d597faa11d2bd6) ) + // ???? 317-0238-COM Model 3 ROM_PARAMETER( ":315_5881:key", "29290f17" ) ROM_END diff -Nru mame-0.250+dfsg.1/src/mame/sega/nl_astrob.cpp mame-0.251+dfsg.1/src/mame/sega/nl_astrob.cpp --- mame-0.250+dfsg.1/src/mame/sega/nl_astrob.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/nl_astrob.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles // diff -Nru mame-0.250+dfsg.1/src/mame/sega/nl_astrob.h mame-0.251+dfsg.1/src/mame/sega/nl_astrob.h --- mame-0.250+dfsg.1/src/mame/sega/nl_astrob.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/nl_astrob.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_ASTROB_H #define MAME_AUDIO_NL_ASTROB_H diff -Nru mame-0.250+dfsg.1/src/mame/sega/nl_brdrline.cpp mame-0.251+dfsg.1/src/mame/sega/nl_brdrline.cpp --- mame-0.250+dfsg.1/src/mame/sega/nl_brdrline.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/nl_brdrline.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders: beta-tester (https://github.com/beta-tester) //NL_CONTAINS brdrline diff -Nru mame-0.250+dfsg.1/src/mame/sega/nl_brdrline.h mame-0.251+dfsg.1/src/mame/sega/nl_brdrline.h --- mame-0.250+dfsg.1/src/mame/sega/nl_brdrline.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/nl_brdrline.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders: beta-tester (https://github.com/beta-tester) #ifndef MAME_AUDIO_NL_BRDRLINE_H diff -Nru mame-0.250+dfsg.1/src/mame/sega/nl_elim.cpp mame-0.251+dfsg.1/src/mame/sega/nl_elim.cpp --- mame-0.250+dfsg.1/src/mame/sega/nl_elim.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/nl_elim.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles //NL_CONTAINS elim zektor diff -Nru mame-0.250+dfsg.1/src/mame/sega/nl_elim.h mame-0.251+dfsg.1/src/mame/sega/nl_elim.h --- mame-0.250+dfsg.1/src/mame/sega/nl_elim.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/nl_elim.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_ELIM_H #define MAME_AUDIO_NL_ELIM_H diff -Nru mame-0.250+dfsg.1/src/mame/sega/nl_frogs.cpp mame-0.251+dfsg.1/src/mame/sega/nl_frogs.cpp --- mame-0.250+dfsg.1/src/mame/sega/nl_frogs.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/nl_frogs.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles // diff -Nru mame-0.250+dfsg.1/src/mame/sega/nl_frogs.h mame-0.251+dfsg.1/src/mame/sega/nl_frogs.h --- mame-0.250+dfsg.1/src/mame/sega/nl_frogs.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/nl_frogs.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_FROGS_H #define MAME_AUDIO_NL_FROGS_H diff -Nru mame-0.250+dfsg.1/src/mame/sega/nl_segas16b.cpp mame-0.251+dfsg.1/src/mame/sega/nl_segas16b.cpp --- mame-0.250+dfsg.1/src/mame/sega/nl_segas16b.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/nl_segas16b.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud #include "netlist/devices/net_lib.h" diff -Nru mame-0.250+dfsg.1/src/mame/sega/nl_segas16b.h mame-0.251+dfsg.1/src/mame/sega/nl_segas16b.h --- mame-0.250+dfsg.1/src/mame/sega/nl_segas16b.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/nl_segas16b.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud NETLIST_EXTERNAL(segas16b_audio) diff -Nru mame-0.250+dfsg.1/src/mame/sega/nl_segaspeech.cpp mame-0.251+dfsg.1/src/mame/sega/nl_segaspeech.cpp --- mame-0.250+dfsg.1/src/mame/sega/nl_segaspeech.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/nl_segaspeech.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles // diff -Nru mame-0.250+dfsg.1/src/mame/sega/nl_segaspeech.h mame-0.251+dfsg.1/src/mame/sega/nl_segaspeech.h --- mame-0.250+dfsg.1/src/mame/sega/nl_segaspeech.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/nl_segaspeech.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_SEGASPEECH_H #define MAME_AUDIO_NL_SEGASPEECH_H diff -Nru mame-0.250+dfsg.1/src/mame/sega/nl_segausb.cpp mame-0.251+dfsg.1/src/mame/sega/nl_segausb.cpp --- mame-0.250+dfsg.1/src/mame/sega/nl_segausb.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/nl_segausb.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles // diff -Nru mame-0.250+dfsg.1/src/mame/sega/nl_segausb.h mame-0.251+dfsg.1/src/mame/sega/nl_segausb.h --- mame-0.250+dfsg.1/src/mame/sega/nl_segausb.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/nl_segausb.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_SEGAUSB_H #define MAME_AUDIO_NL_SEGAUSB_H diff -Nru mame-0.250+dfsg.1/src/mame/sega/nl_spacfury.cpp mame-0.251+dfsg.1/src/mame/sega/nl_spacfury.cpp --- mame-0.250+dfsg.1/src/mame/sega/nl_spacfury.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/nl_spacfury.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles // diff -Nru mame-0.250+dfsg.1/src/mame/sega/nl_spacfury.h mame-0.251+dfsg.1/src/mame/sega/nl_spacfury.h --- mame-0.250+dfsg.1/src/mame/sega/nl_spacfury.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/nl_spacfury.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Aaron Giles #ifndef MAME_AUDIO_NL_SPACFURY_H #define MAME_AUDIO_NL_SPACFURY_H diff -Nru mame-0.250+dfsg.1/src/mame/sega/puckpkmn.cpp mame-0.251+dfsg.1/src/mame/sega/puckpkmn.cpp --- mame-0.250+dfsg.1/src/mame/sega/puckpkmn.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/puckpkmn.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -7,12 +7,12 @@ Supported: -Puckman Pockimon - (c)2000 Genie? (there should be a way to show Sun Mixing copyright, roms are the same - on a version with the SM (c) +Puckman Pockimon - (c)2000 Genie? +(there should be a way to show Sun Mixing copyright, ROMs are the same on a version with the SM (c)) |---------------------------------------| | VOL 4558 4MHz PAL 62256 | -| YM3812 YM3014 | +| U6612 U6614B | | 3.579545MHz 555 PAL |------|| | LM324 M6295 |----| |TV16B || | ROM.U3 PAL |YBOX| | || @@ -31,8 +31,9 @@ Notes: Main CPU is 68000-based, but actual CPU chip is not known Master clock 53.693175MHz. CPU likely running at 53.693175/7 or /6 (??) - YM3812 clock 3.579545MHz - M6295 clock 1.000MHz (4/4]. Sample rate = 1000000/132 + U6612 (YM3812 clone?) clock 3.579545MHz + U6614B (YM3014B clone?) + M6295 clock 1.000MHz (4/4). Sample rate = 1000000/132 VSync 60Hz HSync 16.24kHz 62256 - 8k x8 SRAM (DIP28) @@ -42,20 +43,73 @@ Y-BOX TA891945 (QFP100) TA-06SD 9933 B816453 (QFP128) TV16B 0010 ME251271 (QFP160) + +Some Puckman Pockimon boards have a different layout, lacking the U6612, U6614B and 3.579545MHz crystal. */ #include "emu.h" +#include "megadriv.h" + #include "cpu/m68000/m68000.h" #include "sound/okim6295.h" #include "sound/sn76496.h" #include "sound/ymopn.h" -#include "megadriv.h" -#include "megadriv_acbl.h" +#include "speaker.h" + + +namespace { + +class puckpkmn_state : public md_core_state +{ +public: + puckpkmn_state(const machine_config &mconfig, device_type type, const char *tag) : + md_core_state(mconfig, type, tag), + m_ymsnd(*this,"ymsnd") + { + } + + void puckpkmn(machine_config &config) ATTR_COLD; + void puckpkmna(machine_config &config) ATTR_COLD; + void puckpkmnb(machine_config &config) ATTR_COLD; + + void init_puckpkmn() ATTR_COLD; + +protected: + void puckpkmn_base_map(address_map &map) ATTR_COLD; + +private: + void puckpkmn_map(address_map &map) ATTR_COLD; + void puckpkmna_map(address_map &map) ATTR_COLD; + void puckpkmnb_map(address_map &map) ATTR_COLD; + + optional_device m_ymsnd; +}; + + +class jzth_state : public puckpkmn_state +{ +public: + using puckpkmn_state::puckpkmn_state; + + void jzth(machine_config &config) ATTR_COLD; + +protected: + virtual void machine_start() override ATTR_COLD; + +private: + void bl_710000_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + uint16_t bl_710000_r(); -/* Puckman Pockimon Input Ports */ -static INPUT_PORTS_START( puckpkmn ) - PORT_START("P2") /* $700011.b */ + void jzth_map(address_map &map) ATTR_COLD; + + int m_protcount = 0; +}; + + +// Puckman Pockimon Input Ports +INPUT_PORTS_START( puckpkmn ) + PORT_START("P2") // $700011.b PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) @@ -65,7 +119,7 @@ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_START("P1") /* $700013.b */ + PORT_START("P1") // $700013.b PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(10) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) @@ -75,9 +129,9 @@ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_START("UNK") /* $700015.b */ + PORT_START("UNK") // $700015.b - PORT_START("DSW1") /* $700017.b */ + PORT_START("DSW1") // $700017.b PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPSETTING( 0x03, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 4C_1C ) ) @@ -102,7 +156,7 @@ PORT_DIPSETTING( 0x40, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_START("DSW2") /* $700019.b */ + PORT_START("DSW2") // $700019.b PORT_SERVICE( 0x01, IP_ACTIVE_LOW ) PORT_DIPNAME( 0x02, 0x02, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) @@ -128,10 +182,9 @@ INPUT_PORTS_END - - -static INPUT_PORTS_START( jzth ) - PORT_START("P2") /* $700011.b */ +// Juézhàn Tiānhuáng inputs +INPUT_PORTS_START( jzth ) + PORT_START("P2") // $700011.b PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) @@ -141,7 +194,7 @@ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) - PORT_START("P1") /* $700013.b */ + PORT_START("P1") // $700013.b PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(10) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) @@ -151,7 +204,7 @@ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) - PORT_START("UNK") /* $700015.b */ + PORT_START("UNK") // $700015.b PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -162,7 +215,7 @@ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("DSW1") /* $700017.b */ + PORT_START("DSW1") // $700017.b PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPSETTING( 0x03, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 4C_1C ) ) @@ -187,7 +240,7 @@ PORT_DIPSETTING( 0x40, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_START("DSW2") /* $700019.b */ + PORT_START("DSW2") // $700019.b PORT_SERVICE( 0x01, IP_ACTIVE_LOW ) PORT_DIPNAME( 0x02, 0x02, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) @@ -213,99 +266,195 @@ INPUT_PORTS_END -void md_boot_state::puckpkmn_map(address_map &map) +void puckpkmn_state::puckpkmn_base_map(address_map &map) { - map(0x000000, 0x3fffff).rom(); /* Main 68k Program Roms */ + map(0x000000, 0x3fffff).rom(); // Main 68k Program ROMs + map(0x700010, 0x700011).portr("P2"); map(0x700012, 0x700013).portr("P1"); map(0x700014, 0x700015).portr("UNK"); map(0x700016, 0x700017).portr("DSW1"); map(0x700018, 0x700019).portr("DSW2"); map(0x700023, 0x700023).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); - map(0xa04000, 0xa04003).rw(FUNC(md_boot_state::megadriv_68k_YM2612_read), FUNC(md_boot_state::megadriv_68k_YM2612_write)); + map(0xa04000, 0xa04003).rw(m_ymsnd, FUNC(ym_generic_device::read), FUNC(ym_generic_device::write)); map(0xc00000, 0xc0001f).rw(m_vdp, FUNC(sega315_5313_device::vdp_r), FUNC(sega315_5313_device::vdp_w)); map(0xe00000, 0xe0ffff).ram().mirror(0x1f0000); - - /* Unknown reads/writes: */ - map(0xa00000, 0xa00551).nopw(); /* ? */ -// map(0xa10000, 0xa10001).nopr(); /* ? once */ - map(0xa10002, 0xa10005).noprw(); /* ? alternative way of reading inputs ? */ - map(0xa11100, 0xa11101).noprw(); /* ? */ -// map(0xa10008, 0xa1000d).nopw(); /* ? once */ -// map(0xa14000, 0xa14003).nopw(); /* ? once */ - map(0xa11200, 0xa11201).nopw(); /* ? */ } -void md_boot_state::jzth_map(address_map &map) +void puckpkmn_state::puckpkmn_map(address_map &map) { - map(0x000000, 0x3fffff).rom(); - map(0x700010, 0x700011).portr("P2"); - map(0x700012, 0x700013).portr("P1"); - map(0x700014, 0x700015).portr("UNK"); - map(0x700016, 0x700017).portr("DSW1"); - map(0x700018, 0x700019).portr("DSW2"); - map(0x700023, 0x700023).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); - map(0xa04000, 0xa04003).rw(FUNC(md_boot_state::megadriv_68k_YM2612_read), FUNC(md_boot_state::megadriv_68k_YM2612_write)); - map(0xc00000, 0xc0001f).rw(m_vdp, FUNC(sega315_5313_device::vdp_r), FUNC(sega315_5313_device::vdp_w)); + puckpkmn_base_map(map); - map(0xe00000, 0xe0ffff).ram().mirror(0x1f0000); + // Unknown reads/writes: + map(0xa00000, 0xa00551).nopw(); // ? +// map(0xa10000, 0xa10001).nopr(); // ? once + map(0xa10002, 0xa10005).noprw(); // ? alternative way of reading inputs ? + map(0xa11100, 0xa11101).noprw(); // ? +// map(0xa10008, 0xa1000d).nopw(); // ? once +// map(0xa14000, 0xa14003).nopw(); // ? once + map(0xa11200, 0xa11201).nopw(); // ? +} - map(0xa00000, 0xa00551).noprw(); +void puckpkmn_state::puckpkmna_map(address_map &map) +{ + puckpkmn_map(map); + + map(0x4b2476, 0x4b2477).lr16(NAME([] () { return uint16_t(0x3400); })); + map(0x70001c, 0x70001d).lr16(NAME([] () { return uint16_t(0x000e); })); +} - map(0xA11100, 0xA11101).noprw(); +void puckpkmn_state::puckpkmnb_map(address_map &map) +{ + puckpkmn_map(map); - map(0x710000, 0x710001).rw(FUNC(md_boot_state::bl_710000_r), FUNC(md_boot_state::bl_710000_w)); // protection, will erase the VDP address causing writes to 0 unless this returns 0xe + map(0x4b2476, 0x4b2477).lr16(NAME([] () { return uint16_t(0x3100); })); + map(0x70001c, 0x70001d).lr16(NAME([] () { return uint16_t(0x000e); })); } -uint16_t md_boot_state::puckpkmna_70001c_r() + +void jzth_state::jzth_map(address_map &map) { - return 0x0e; + puckpkmn_base_map(map); + + map(0x710000, 0x710001).rw(FUNC(jzth_state::bl_710000_r), FUNC(jzth_state::bl_710000_w)); // protection, will erase the VDP address causing writes to 0 unless this returns 0xe + + map(0xa00000, 0xa00551).noprw(); + map(0xa11100, 0xa11101).noprw(); } -uint16_t md_boot_state::puckpkmna_4b2476_r() + +// Juezhan Tiānhuáng protection +void jzth_state::bl_710000_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - if (!strcmp(machine().system().name, "puckpkmnb")) return 0x3100; + // protection value is read from 0x710000 after a series of writes.. and stored at ff0007 + // startup + /* + 059ce0 writing to bl_710000_w ff08 ffff + 059d04 writing to bl_710000_w 000a ffff + 059d04 writing to bl_710000_w 000b ffff + 059d04 writing to bl_710000_w 000c ffff + 059d04 writing to bl_710000_w 000f ffff + 059d1c writing to bl_710000_w ff09 ffff + 059d2a reading from bl_710000_r (wants 0xe) + 059ce0 writing to bl_710000_w ff08 ffff + 059d04 writing to bl_710000_w 000a ffff + 059d04 writing to bl_710000_w 000b ffff + 059d04 writing to bl_710000_w 000c ffff + 059d04 writing to bl_710000_w 000f ffff + 059d1c writing to bl_710000_w ff09 ffff + 059d2a reading from bl_710000_r (wants 0xe) + */ + // before lv stage 3 + /* + 059ce0 writing to bl_710000_w 0008 ffff + 059d04 writing to bl_710000_w 000b ffff + 059d04 writing to bl_710000_w 000f ffff + 059d1c writing to bl_710000_w ff09 ffff + 059d2a reading from bl_710000_r (wants 0x4) + */ + // start level 3 + /* + 059ce0 writing to bl_710000_w ff08 ffff + 059d04 writing to bl_710000_w 000b ffff + 059d04 writing to bl_710000_w 000c ffff + 059d04 writing to bl_710000_w 000e ffff + 059d1c writing to bl_710000_w ff09 ffff + 059d2a reading from bl_710000_r (wants 0x5) + + // after end sequence + 059ce0 writing to bl_710000_w 0008 ffff + 059d04 writing to bl_710000_w 000a ffff + 059d04 writing to bl_710000_w 000b ffff + 059d04 writing to bl_710000_w 000c ffff + 059d04 writing to bl_710000_w 000f ffff + 059d1c writing to bl_710000_w ff09 ffff + 059d2a reading from bl_710000_r (wants 0xe) + */ - return 0x3400; + logerror("%s: writing to bl_710000_w %04x %04x\n", machine().describe_context(), data, mem_mask); + + m_protcount++; } -void md_boot_state::puckpkmna_map(address_map &map) +uint16_t jzth_state::bl_710000_r() { - puckpkmn_map(map); - map(0x4b2476, 0x4b2477).r(FUNC(md_boot_state::puckpkmna_4b2476_r)); - map(0x70001c, 0x70001d).r(FUNC(md_boot_state::puckpkmna_70001c_r)); + logerror("%s: reading from bl_710000_r\n", machine().describe_context()); + + uint16_t ret; + switch (m_protcount) + { + case 4: ret = 0x4; break; + case 5: ret = 0x5; break; + case 6: ret = 0xe; break; + default: ret = 0xf; + } + + if (!machine().side_effects_disabled()) + m_protcount = 0; + + return ret; } -void md_boot_state::puckpkmn(machine_config &config) + +void puckpkmn_state::puckpkmn(machine_config &config) { - md_ntsc(config); + md_core_ntsc(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &puckpkmn_state::puckpkmn_map); - m_maincpu->set_addrmap(AS_PROGRAM, &md_boot_state::puckpkmn_map); + m_vdp->add_route(ALL_OUTPUTS, "lspeaker", 0.50); + m_vdp->add_route(ALL_OUTPUTS, "rspeaker", 0.50); - config.device_remove("genesis_snd_z80"); + // sound hardware + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); + + // Internalized YM3438 in VDP ASIC + YM3438(config, m_ymsnd, MASTER_CLOCK_NTSC / 7); // 7.67 MHz + m_ymsnd->add_route(0, "lspeaker", 0.50); + m_ymsnd->add_route(1, "rspeaker", 0.50); okim6295_device &oki(OKIM6295(config, "oki", XTAL(4'000'000) / 4, okim6295_device::PIN7_HIGH)); oki.add_route(ALL_OUTPUTS, "lspeaker", 0.25); oki.add_route(ALL_OUTPUTS, "rspeaker", 0.25); } -void md_boot_state::puckpkmna(machine_config &config) +void puckpkmn_state::puckpkmna(machine_config &config) { puckpkmn(config); - m_maincpu->set_addrmap(AS_PROGRAM, &md_boot_state::puckpkmna_map); + m_maincpu->set_addrmap(AS_PROGRAM, &puckpkmn_state::puckpkmna_map); } -void md_boot_state::jzth(machine_config &config) +void puckpkmn_state::puckpkmnb(machine_config &config) { puckpkmn(config); - m_maincpu->set_addrmap(AS_PROGRAM, &md_boot_state::jzth_map); + m_maincpu->set_addrmap(AS_PROGRAM, &puckpkmn_state::puckpkmnb_map); } -/* Genie's Hardware (contains no real sega parts) */ + +void jzth_state::jzth(machine_config &config) +{ + puckpkmn(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &jzth_state::jzth_map); +} + + +void jzth_state::machine_start() +{ + puckpkmn_state::machine_start(); + + m_protcount = 0; + + save_item(NAME(m_protcount)); +} + + +/* Genie's Hardware (contains no real Sega parts) */ /*************************************************************************** Puckman Pokemon Genie 2000 @@ -373,21 +522,28 @@ ROM sockets U63 & U64 empty - ****************************************************************************/ -void md_boot_state::init_puckpkmn() +void puckpkmn_state::init_puckpkmn() { - uint8_t *rom = memregion("maincpu")->base(); - const size_t len = memregion("maincpu")->bytes(); + uint8_t *const rom = memregion("maincpu")->base(); + size_t const len = memregion("maincpu")->bytes(); for (size_t i = 0; i < len; i++) - rom[i] = bitswap<8>(rom[i],1,4,2,0,7,5,3,6); + rom[i] = bitswap<8>(rom[i], 1, 4, 2, 0, 7, 5, 3, 6); + + m_maincpu->set_tas_write_callback(*this, FUNC(puckpkmn_state::megadriv_tas_callback)); - init_megadriv(); + // TODO: move this to the device interface? + m_vdp->set_use_cram(1); + m_vdp->set_vdp_pal(false); + m_vdp->set_framerate(60); + m_vdp->set_total_scanlines(262); } -ROM_START( puckpkmn ) /* Puckman Pockimon (c)2000 Genie */ + +// Puckman Pockimon (c)2000 Genie +ROM_START( puckpkmn ) ROM_REGION( 0x400000, "maincpu", 0 ) ROM_LOAD16_BYTE( "puckpoke.u5", 0x000000, 0x080000, CRC(fd334b91) SHA1(cf8bf6645a4082ea4392937e169b1686c9c7e246) ) ROM_LOAD16_BYTE( "puckpoke.u4", 0x000001, 0x080000, CRC(839cc76b) SHA1(e15662a7175db7a8e222dda176a8ed92e0d56e9d) ) @@ -398,8 +554,10 @@ ROM_LOAD( "puckpoke.u3", 0x00000, 0x40000, CRC(7b066bac) SHA1(429616e21c672b07e0705bc63234249cac3af56f) ) ROM_END + /* -Puckman Pokimon (alt.) +精靈家族/Jīnglíng Jiāzú (Traditional Chinese) +(c)2000 IBS Co. Ltd PCB Layout @@ -433,13 +591,13 @@ TK-20K - custom chip, probably the CPU (QFP100). Clock unknown. M6295 - clock 1.000MHz [4/4] - 4x 1Mx8 flashROMs (B*.U59) are mounted onto a DIP42 carrier board to make a + 4x 1Mx8 Flash ROMs (B*.U59) are mounted onto a DIP42 carrier board to make a 32MBit EPROM equivalent. It appears to contain graphics plus the main program. ROM A.U3 contains samples for the M6295. */ -ROM_START( puckpkmna ) /* Puckman Pockimon (c)2000 IBS Co. Ltd */ +ROM_START( puckpkmna ) ROM_REGION( 0x400000, "maincpu", 0 ) ROM_LOAD16_BYTE( "b2.u59", 0x000000, 0x080000, CRC(3fbea2c7) SHA1(89f3770ae92c62714f0795ddd2f311a9532eb25a) ) // FIRST AND SECOND HALF IDENTICAL ROM_IGNORE(0x080000) @@ -455,6 +613,7 @@ ROM_END +// Puckman Pockimon (c)2000 Sun Mixing ROM_START( puckpkmnb ) ROM_REGION( 0x400000, "maincpu", 0 ) ROM_LOAD16_BYTE( "200061.u5", 0x000000, 0x080000, CRC(502a5093) SHA1(6dc1c79d52ebb653cb2e4388f74fd975ec323566) ) @@ -467,7 +626,7 @@ ROM_END -//決戰天皇/Juézhàn tiānhuáng (Traditional Chinese) +//決戰天皇/Juézhàn Tiānhuáng (Traditional Chinese) ROM_START( jzth ) ROM_REGION( 0x400000, "maincpu", 0 ) ROM_LOAD16_BYTE( "s.y.u5", 0x000000, 0x080000, CRC(a4a526b5) SHA1(85d0299caf91ff50b6870f845b9aacbd358ed81f) ) @@ -484,8 +643,12 @@ ROM_CONTINUE(0x40000,0x40000) ROM_END -/* Genie Hardware (uses Genesis VDP) also has 'Sun Mixing Co' put into tile ram */ // is 'Genie 2000' part of the title, and the parent set a bootleg? -GAME( 2000, puckpkmn, 0, puckpkmn, puckpkmn, md_boot_state, init_puckpkmn, ROT0, "Genie", "Puckman Pockimon (set 1)", 0 ) -GAME( 2000, puckpkmna, puckpkmn, puckpkmna, puckpkmn, md_boot_state, init_puckpkmn, ROT0, "IBS", "Puckman Pockimon (set 2)", 0 ) -GAME( 2000, puckpkmnb, puckpkmn, puckpkmna, puckpkmn, md_boot_state, init_puckpkmn, ROT0, "Sun Mixing", "Puckman Pockimon (set 3)", 0 ) -GAME( 2000, jzth, 0, jzth, jzth, md_boot_state, init_puckpkmn, ROT0, "", "Juezhan Tianhuang", MACHINE_IMPERFECT_SOUND ) +} // anonymous namespace + + +// Genie Hardware (uses Genesis VDP) also has 'Sun Mixing Co' put into tile RAM +// Is 'Genie 2000' part of the title, and the parent set a bootleg? +GAME( 2000, puckpkmn, 0, puckpkmn, puckpkmn, puckpkmn_state, init_puckpkmn, ROT0, "Genie", "Puckman Pockimon (set 1)", 0 ) +GAME( 2000, puckpkmna, puckpkmn, puckpkmna, puckpkmn, puckpkmn_state, init_puckpkmn, ROT0, "IBS", "Jingling Jiazu", 0 ) +GAME( 2000, puckpkmnb, puckpkmn, puckpkmnb, puckpkmn, puckpkmn_state, init_puckpkmn, ROT0, "Sun Mixing", "Puckman Pockimon (set 2)", 0 ) +GAME( 2000, jzth, 0, jzth, jzth, jzth_state, init_puckpkmn, ROT0, "", "Juezhan Tianhuang", MACHINE_IMPERFECT_SOUND ) diff -Nru mame-0.250+dfsg.1/src/mame/sega/segapico.cpp mame-0.251+dfsg.1/src/mame/sega/segapico.cpp --- mame-0.250+dfsg.1/src/mame/sega/segapico.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/segapico.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -118,10 +118,13 @@ */ #include "emu.h" -#include "mdconsole.h" -#include "sound/315-5641.h" +#include "megadriv.h" + #include "bus/megadrive/rom.h" -#include "softlist.h" +#include "sound/315-5641.h" + +#include "softlist_dev.h" +#include "speaker.h" namespace { @@ -129,11 +132,11 @@ #define PICO_PENX 1 #define PICO_PENY 2 -class pico_base_state : public md_cons_state +class pico_base_state : public md_core_state { public: pico_base_state(const machine_config &mconfig, device_type type, const char *tag) : - md_cons_state(mconfig, type, tag), + md_core_state(mconfig, type, tag), m_sega_315_5641_pcm(*this, "315_5641"), m_io_page(*this, "PAGE"), m_io_pad(*this, "PAD"), @@ -153,6 +156,8 @@ required_ioport m_io_penx; required_ioport m_io_peny; + int m_version_hi_nibble; + uint8_t m_page_register; uint16_t pico_read_penpos(int pen); @@ -171,12 +176,14 @@ m_picocart(*this, "picoslot") { } - void pico(machine_config &config); - void picopal(machine_config &config); + void pico_ntsc(machine_config &config); + void pico_pal(machine_config &config); + +protected: + virtual void machine_start() override; private: required_device m_picocart; - DECLARE_MACHINE_START(pico); }; @@ -376,8 +383,10 @@ device.option_add_internal("rom_sramsafe", MD_ROM_SRAM); // not sure these are needed... } -MACHINE_START_MEMBER(pico_state,pico) +void pico_state::machine_start() { + pico_base_state::machine_start(); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x000000, 0x7fffff, read16sm_delegate(*m_picocart, FUNC(base_md_cart_slot_device::read))); m_maincpu->space(AS_PROGRAM).install_write_handler(0x000000, 0x7fffff, write16s_delegate(*m_picocart, FUNC(base_md_cart_slot_device::write))); m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xa13000, 0xa130ff, read16sm_delegate(*m_picocart, FUNC(base_md_cart_slot_device::read_a13)), write16sm_delegate(*m_picocart, FUNC(base_md_cart_slot_device::write_a13))); @@ -387,40 +396,42 @@ m_vdp->stop_timers(); } -void pico_state::pico(machine_config &config) +void pico_state::pico_ntsc(machine_config &config) { - md_ntsc(config); + md_core_ntsc(config); m_maincpu->set_addrmap(AS_PROGRAM, &pico_state::pico_mem); - config.device_remove("genesis_snd_z80"); - config.device_remove("ymsnd"); - - MCFG_MACHINE_START_OVERRIDE( pico_state, pico ) + m_vdp->add_route(ALL_OUTPUTS, "lspeaker", 0.50); + m_vdp->add_route(ALL_OUTPUTS, "rspeaker", 0.50); PICO_CART_SLOT(config, m_picocart, pico_cart, nullptr).set_must_be_loaded(true); SOFTWARE_LIST(config, "cart_list").set_original("pico"); + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); + SEGA_315_5641_PCM(config, m_sega_315_5641_pcm, upd7759_device::STANDARD_CLOCK*2); m_sega_315_5641_pcm->fifo_cb().set(FUNC(pico_state::sound_cause_irq)); m_sega_315_5641_pcm->add_route(ALL_OUTPUTS, "lspeaker", 0.16); m_sega_315_5641_pcm->add_route(ALL_OUTPUTS, "rspeaker", 0.16); } -void pico_state::picopal(machine_config &config) +void pico_state::pico_pal(machine_config &config) { - md_pal(config); + md_core_pal(config); m_maincpu->set_addrmap(AS_PROGRAM, &pico_state::pico_mem); - config.device_remove("genesis_snd_z80"); - config.device_remove("ymsnd"); - - MCFG_MACHINE_START_OVERRIDE( pico_state, pico ) + m_vdp->add_route(ALL_OUTPUTS, "lspeaker", 0.50); + m_vdp->add_route(ALL_OUTPUTS, "rspeaker", 0.50); PICO_CART_SLOT(config, m_picocart, pico_cart, nullptr).set_must_be_loaded(true); SOFTWARE_LIST(config, "cart_list").set_original("pico"); + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); + SEGA_315_5641_PCM(config, m_sega_315_5641_pcm, upd7759_device::STANDARD_CLOCK*2); m_sega_315_5641_pcm->fifo_cb().set(FUNC(pico_state::sound_cause_irq)); m_sega_315_5641_pcm->add_route(ALL_OUTPUTS, "lspeaker", 0.16); @@ -447,24 +458,39 @@ void pico_base_state::init_pico() { - init_megadrie(); - init_mess_md_common(); + m_maincpu->set_tas_write_callback(*this, FUNC(pico_base_state::megadriv_tas_callback)); + + // TODO: move this to the device interface? + m_vdp->set_use_cram(1); + m_vdp->set_vdp_pal(true); + m_vdp->set_framerate(50); + m_vdp->set_total_scanlines(313); m_version_hi_nibble = 0x60; // Export PAL } void pico_base_state::init_picou() { - init_megadriv(); - init_mess_md_common(); + m_maincpu->set_tas_write_callback(*this, FUNC(pico_base_state::megadriv_tas_callback)); + + // TODO: move this to the device interface? + m_vdp->set_use_cram(1); + m_vdp->set_vdp_pal(false); + m_vdp->set_framerate(60); + m_vdp->set_total_scanlines(262); m_version_hi_nibble = 0x40; // Export NTSC } void pico_base_state::init_picoj() { - init_megadrij(); - init_mess_md_common(); + m_maincpu->set_tas_write_callback(*this, FUNC(pico_base_state::megadriv_tas_callback)); + + // TODO: move this to the device interface? + m_vdp->set_use_cram(1); + m_vdp->set_vdp_pal(false); + m_vdp->set_framerate(60); + m_vdp->set_total_scanlines(262); m_version_hi_nibble = 0x00; // JPN NTSC } @@ -557,11 +583,14 @@ { } void copera(machine_config &config); - void copera_mem(address_map &map); + +protected: + virtual void machine_start() override; private: + void copera_mem(address_map &map); + required_device m_picocart; - DECLARE_MACHINE_START(copera); }; @@ -586,8 +615,10 @@ device.option_add_internal("rom_sramsafe", MD_ROM_SRAM); // not sure these are needed... } -MACHINE_START_MEMBER(copera_state,copera) +void copera_state::machine_start() { + pico_base_state::machine_start(); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x000000, 0x7fffff, read16sm_delegate(*m_picocart, FUNC(base_md_cart_slot_device::read))); m_maincpu->space(AS_PROGRAM).install_write_handler(0x000000, 0x7fffff, write16s_delegate(*m_picocart, FUNC(base_md_cart_slot_device::write))); m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xa13000, 0xa130ff, read16sm_delegate(*m_picocart, FUNC(base_md_cart_slot_device::read_a13)), write16sm_delegate(*m_picocart, FUNC(base_md_cart_slot_device::write_a13))); @@ -599,22 +630,24 @@ m_sega_315_5641_pcm->reset_w(1); m_sega_315_5641_pcm->start_w(1); + m_vdp->stop_timers(); } void copera_state::copera(machine_config &config) { - md_ntsc(config); + md_core_ntsc(config); m_maincpu->set_addrmap(AS_PROGRAM, &copera_state::copera_mem); - config.device_remove("genesis_snd_z80"); - config.device_remove("ymsnd"); - - MCFG_MACHINE_START_OVERRIDE( copera_state, copera ) + m_vdp->add_route(ALL_OUTPUTS, "lspeaker", 0.50); + m_vdp->add_route(ALL_OUTPUTS, "rspeaker", 0.50); COPERA_CART_SLOT(config, m_picocart, copera_cart, nullptr).set_must_be_loaded(true); SOFTWARE_LIST(config, "cart_list").set_original("copera"); + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); + SEGA_315_5641_PCM(config, m_sega_315_5641_pcm, upd7759_device::STANDARD_CLOCK); m_sega_315_5641_pcm->fifo_cb().set(FUNC(copera_state::sound_cause_irq)); m_sega_315_5641_pcm->add_route(ALL_OUTPUTS, "lspeaker", 0.16); @@ -631,8 +664,8 @@ } // anonymous namespace -CONS( 1994, pico, 0, 0, picopal, pico, pico_state, init_pico, "Sega", "Pico (Europe, PAL)", MACHINE_NOT_WORKING) -CONS( 1994, picou, pico, 0, pico, pico, pico_state, init_picou, "Sega", "Pico (USA, NTSC)", MACHINE_NOT_WORKING) -CONS( 1993, picoj, pico, 0, pico, pico, pico_state, init_picoj, "Sega", "Pico (Japan, NTSC)", MACHINE_NOT_WORKING) +CONS( 1994, pico, 0, 0, pico_pal, pico, pico_state, init_pico, "Sega", "Pico (Europe, PAL)", MACHINE_NOT_WORKING) +CONS( 1994, picou, pico, 0, pico_ntsc, pico, pico_state, init_picou, "Sega", "Pico (USA, NTSC)", MACHINE_NOT_WORKING) +CONS( 1993, picoj, pico, 0, pico_ntsc, pico, pico_state, init_picoj, "Sega", "Pico (Japan, NTSC)", MACHINE_NOT_WORKING) -CONS( 1993, copera, 0, 0, copera, pico, copera_state, init_picoj, "Yamaha / Sega", "Yamaha Mixt Book Player Copera", MACHINE_NOT_WORKING) +CONS( 1993, copera, 0, 0, copera, pico, copera_state, init_picoj, "Yamaha / Sega", "Yamaha Mixt Book Player Copera", MACHINE_NOT_WORKING) diff -Nru mame-0.250+dfsg.1/src/mame/sega/segasp.cpp mame-0.251+dfsg.1/src/mame/sega/segasp.cpp --- mame-0.250+dfsg.1/src/mame/sega/segasp.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/segasp.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -52,11 +52,13 @@ Dinosaur King - Operation: Dinosaur Rescue 837-14434-91 ROM US/EXP 253-5508-0408 AAFE-01A30164715, AAFE-01B92094811 - // - 834-14662-01 MDA-C0021 CF AAFE-01B87574811 Dinosaur King 2 ???-????? no 253-5508-0408 AAFE-xxxxxxxxxxx +Dinosaur King 2 Ver 2.5 834-14739 MDA-C0030 no JP 253-5508-0408 AAFE-xxxxxxxxxxx Dinosaur King 2 Ver 2.5 834-14792-02 F MDA-C0047 CF EXP 253-5508-0408 AAFE-01D73384904 Dinosaur King 2 Ver 2.501 China ???-????? MDA-C0081 CF EXP 253-5508-0408 AAFE-xxxxxxxxxxx Dinosaur King Ver 4.000 ???-????? MDA-C0061 CF JP 253-5508-0408 AAFE-xxxxxxxxxxx Disney: Magical Dream Dance on Stage ???-????? no ???-????-???? AAFE-xxxxxxxxxxx Future Police Patrol Chase ???-????? no ???-????-???? AAFE-xxxxxxxxxxx +Heat Up Hockey Image 834000201 TSB0-SEGA00001 CF JP ???-????-???? AAFE-xxxxxxxxxxx Issyouni Turbo Drive ???-????? no ???-????-???? AAFE-01E91305101 Issyouni Wanwan (INW 2K7 1ST) 834-14747 no ???-????-???? AAFE-xxxxxxxxxxx Issyouni Wanwan Waiwai Puppy (INW PUPPY) 834-14826 MDA-C0052 no ???-????-???? AAFE-xxxxxxxxxxx @@ -85,6 +87,7 @@ Western Dream Gold (Medalink) 837-14699 F* ROM JP 253-5508-0473J AAFE-xxxxxxxxxxx, Satellite Medal Yataimura Kingyosukui (1-player, Japan) 8340003 D ROM JP 253-5509-5151J AAFE-01C68774814 Yataimura Kingyosukui (4-player, China) 837-14875 CF EXP 253-5508-0563J AAFE-xxxxxxxxxxx +Yataimura Shateki (1-player, Japan) 834000301 D ROM JP 253-5508-0628J AAFE-01C37464814 Unknown 834-14865 JAP REV PCB IC6s Flash AU1500 @@ -635,6 +638,28 @@ ROM_LOAD( "317-0568-jpn.ic15", 0, 0x800, CRC(313e6987) SHA1(9bec2a2806e4ba018518b9f3cc157c35d08a0490) ) ROM_END +ROM_START( shateki ) + SEGASP_BIOS + ROM_DEFAULT_BIOS( "v201" ) + SEGASP_JP + SEGASP_MISC + + ROM_REGION( 0x08000000, "rom_board", ROMREGION_ERASE) + ROM_LOAD( "ic62", 0x00000000, 0x01000000, CRC(c463ae32) SHA1(7f4aca80c0a49caa589d1338464b71c4d33f0bd6) ) + ROM_LOAD( "ic63", 0x01000000, 0x01000000, CRC(2acf1456) SHA1(028eae0ff11857e991f26355c1f405e3bcbd33f3) ) + ROM_LOAD( "ic64", 0x02000000, 0x01000000, CRC(fd04ebf8) SHA1(07f6287697deccb1e9c3f1da22c4d8336dfbc41e) ) + ROM_LOAD( "ic65", 0x03000000, 0x01000000, CRC(0c0ed06b) SHA1(1ed0d1624ad304095323aacaab53519fe62b8330) ) + ROM_LOAD( "ic66s", 0x04000000, 0x01000000, CRC(3a9f33cc) SHA1(af4c96ea3b539d631d15b7a66efdf985cd78f87c) ) // 4 below ROMs leftovers junk from some other game + ROM_LOAD( "ic67s", 0x05000000, 0x01000000, CRC(8e08cf8b) SHA1(51da97b769823773d1b2bc7e7f40a5b51543642d) ) // keep them for now, may worth to remove later + ROM_LOAD( "ic68s", 0x06000000, 0x01000000, CRC(14734999) SHA1(cd763fcd4bab5a3cfb09b4054c5358b70249f9b5) ) + ROM_LOAD( "ic69s", 0x07000000, 0x01000000, CRC(6c0cd4c5) SHA1(63963a3f8f1f90c8c78f0dc1f215666d3b7b1151) ) + + ROM_PARAMETER( ":rom_board:id", "5502" ) // actually 8x 128Mbit FlashROMs + + ROM_REGION( 0x800, "pic_readout", 0 ) + ROM_LOAD( "317-0628-jpn.ic15", 0, 0x800, CRC(c02f7424) SHA1(901e7f17a8e9e2e265ce4b2ec2cc56649ae57b17) ) +ROM_END + ROM_START( tetgiant ) SEGASP_BIOS ROM_DEFAULT_BIOS( "v201" ) @@ -771,6 +796,25 @@ ROM_LOAD( "317-0408-com.ic15", 0, 0x800, CRC(f77c49dc) SHA1(e10173bbbd5930ed159cec9a7dba308e2a3f3c43) ) ROM_END +ROM_START( huhimage ) + SEGASP_BIOS + ROM_DEFAULT_BIOS( "v200" ) + SEGASP_JP + SEGASP_MISC + + ROM_REGION( 0x08000000, "rom_board", ROMREGION_ERASEFF) + + // TSB0-SEGA00001 + DISK_REGION( "cflash" ) + DISK_IMAGE( "tsb0-sega00001", 0, SHA1(2e5703783e5200ef37845d3ca1f862c3541cc21d) ) + + ROM_PARAMETER( ":rom_board:id", "5508" ) // 8x 512Mbit FlashROMs + + // original PIC missing, brute forced key + ROM_REGION( 0x800, "pic_readout", 0 ) + ROM_LOAD( "317-unknown-jpn.ic15", 0, 0x800, BAD_DUMP CRC(634e1994) SHA1(6ae6538fc5f256bc0de86f57ffd72196a147accf) ) +ROM_END + ROM_START( kingyoch ) SEGASP_BIOS ROM_DEFAULT_BIOS( "v201" ) @@ -868,6 +912,7 @@ GAME( 2007, mirworld,segasp, segasp, segasp, segasp_state, init_segasp, ROT0, "Sega", "Mirage World (satellite)", GAME_FLAGS ) GAME( 2007, ochaken, segasp, segasp, segasp, segasp_state, init_segasp, ROT0, "Sega", "Ocha-Ken Hot Medal", GAME_FLAGS ) GAME( 2009, puyomedal,segasp, segasp, segasp, segasp_state, init_segasp, ROT0, "Sega", "Puyo Puyo! The Medal Edition", GAME_FLAGS ) +GAME( 2010, shateki,segasp, segasp, segasp, segasp_state, init_segasp, ROT0, "Sega", "Yataimura Shateki (1-player, Japan, Ver 1.000)", GAME_FLAGS ) GAME( 2009, tetgiant,segasp, segasp, segasp, segasp_state, init_segasp, ROT0, "Sega", "Tetris Giant / Tetris Dekaris (Ver.2.000)", GAME_FLAGS ) GAME( 2009, unomedal,segasp, segasp, segasp, segasp_state, init_segasp, ROT0, "Sega", "UNO the Medal", GAME_FLAGS ) GAME( 2009, westdrmg,segasp, segasp, segasp, segasp_state, init_segasp, ROT0, "Sega", "Western Dream Gold", GAME_FLAGS ) @@ -876,6 +921,7 @@ GAME( 2008, dinoki25,segasp, segasp, segasp, segasp_state, init_segasp, ROT0, "Sega", "Dinosaur King - D-Team VS. the Alpha Fortress (Export, Ver 2.500) (MDA-C0047)", GAME_FLAGS ) GAME( 2010, dinokich,dinoki25, segasp, segasp, segasp_state, init_segasp, ROT0, "Sega", "Konglongwang - D-Kids VS Alpha Yaosai (China, Ver 2.501) (MDA-C0081)", GAME_FLAGS ) // D-Kids VS 亚法要塞 GAME( 2008, dinoki4,segasp, segasp, segasp, segasp_state, init_segasp, ROT0, "Sega", "Kodai Ouja Kyouryuu King - Mezame yo! Arata-naru Chikara!! (Japan, Ver 4.000) (MDA-C0061)", GAME_FLAGS ) // Ancient Ruler Dinosaur King - Wake up! New Power!! +GAME( 2019, huhimage,segasp, segasp, segasp, segasp_state, init_segasp, ROT0, "Sega", "Heat Up Hockey Image (Ver.1.003R)", GAME_FLAGS ) GAME( 2009, kingyoch,kingyo, segasp, segasp, segasp_state, init_segasp, ROT0, "Sega", "Yataimura Kingyosukui (4-player, China, Ver 1.000)", GAME_FLAGS ) GAME( 2007, loveber3,segasp, segasp, segasp, segasp_state, init_segasp, ROT0, "Sega", "Love And Berry - 3rd-5th Collection (USA, Export, Ver 1.002) (MDA-C0042)", GAME_FLAGS ) GAME( 2010, loveber3cn,loveber3, segasp, segasp, segasp_state, init_segasp, ROT0, "Sega", "Love And Berry - 3rd-5th Collection (China, Ver 1.001) (MDA-C0071)", GAME_FLAGS ) diff -Nru mame-0.250+dfsg.1/src/mame/sega/segaxbd.cpp mame-0.251+dfsg.1/src/mame/sega/segaxbd.cpp --- mame-0.250+dfsg.1/src/mame/sega/segaxbd.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/segaxbd.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -2090,7 +2090,7 @@ // ROM_START( aburner2 ) ROM_REGION( 0x80000, "mainpcb:maincpu", 0 ) // 68000 code - ROM_LOAD16_BYTE( "epr-11107.58", 0x00000, 0x20000, CRC(6d87bab7) SHA1(ab34fe78f1f216037b3e3dca3e61f1b31c05cedf) ) + ROM_LOAD16_BYTE( "epr-11107.58", 0x00000, 0x20000, CRC(6d87bab7) SHA1(ab34fe78f1f216037b3e3dca3e61f1b31c05cedf) ) ROM_LOAD16_BYTE( "epr-11108.63", 0x00001, 0x20000, CRC(202a3e1d) SHA1(cf2018bbad366de4b222eae35942636ca68aa581) ) ROM_REGION( 0x80000, "mainpcb:subcpu", 0 ) // 2nd 68000 code @@ -4708,10 +4708,10 @@ m_mainpcb->install_gprider(); m_subpcb->install_gprider(); - m_mainpcb->m_maincpu->space(AS_PROGRAM).install_read_handler(0x2F0000, 0x2F003f, read16sm_delegate(*this, FUNC(segaxbd_new_state_double::shareram1_r))); - m_mainpcb->m_maincpu->space(AS_PROGRAM).install_write_handler(0x2F0000, 0x2F003f, write16s_delegate(*this, FUNC(segaxbd_new_state_double::shareram1_w))); - m_subpcb->m_maincpu->space(AS_PROGRAM).install_read_handler(0x2F0000, 0x2F003f, read16sm_delegate(*this, FUNC(segaxbd_new_state_double::shareram2_r))); - m_subpcb->m_maincpu->space(AS_PROGRAM).install_write_handler(0x2F0000, 0x2F003f, write16s_delegate(*this, FUNC(segaxbd_new_state_double::shareram2_w))); + m_mainpcb->m_maincpu->space(AS_PROGRAM).install_read_handler(0x2f0000, 0x2f003f, read16sm_delegate(*this, FUNC(segaxbd_new_state_double::shareram1_r))); + m_mainpcb->m_maincpu->space(AS_PROGRAM).install_write_handler(0x2f0000, 0x2f003f, write16s_delegate(*this, FUNC(segaxbd_new_state_double::shareram1_w))); + m_subpcb->m_maincpu->space(AS_PROGRAM).install_read_handler(0x2f0000, 0x2f003f, read16sm_delegate(*this, FUNC(segaxbd_new_state_double::shareram2_r))); + m_subpcb->m_maincpu->space(AS_PROGRAM).install_write_handler(0x2f0000, 0x2f003f, write16s_delegate(*this, FUNC(segaxbd_new_state_double::shareram2_w))); } diff -Nru mame-0.250+dfsg.1/src/mame/sega/sg1000.cpp mame-0.251+dfsg.1/src/mame/sega/sg1000.cpp --- mame-0.250+dfsg.1/src/mame/sega/sg1000.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/sg1000.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -65,20 +65,178 @@ #include "emu.h" -#include "sg1000.h" + +#include "bus/centronics/ctronics.h" #include "bus/rs232/rs232.h" +#include "bus/sega8/sega8_slot.h" +#include "bus/sg1000_exp/sg1000exp.h" +#include "bus/sms_ctrl/controllers.h" +#include "bus/sms_ctrl/smsctrl.h" +#include "cpu/z80/z80.h" +#include "imagedev/floppy.h" +#include "machine/i8251.h" +#include "machine/i8255.h" +#include "machine/ram.h" +#include "machine/upd765.h" +#include "sound/sn76496.h" +#include "video/tms9928a.h" + +#include "crsshair.h" #include "softlist_dev.h" #include "speaker.h" +#include "formats/sf7000_dsk.h" + + +namespace { + +#define Z80_TAG "z80" +#define SN76489AN_TAG "sn76489an" +#define UPD765_TAG "upd765" +#define UPD8251_TAG "upd8251" +#define UPD9255_TAG "upd9255" +#define UPD9255_1_TAG "upd9255_1" // "upd9255_0" is being used by sk1100 device +#define TMS9918A_TAG "tms9918a" +#define RS232_TAG "rs232" + +class sg1000_state_base : public driver_device +{ +public: + sg1000_state_base(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, Z80_TAG), + m_ram(*this, RAM_TAG), + m_rom(*this, Z80_TAG), + m_cart(*this, "slot"), + m_sgexpslot(*this, "sgexp") + { } + +protected: + required_device m_maincpu; + required_device m_ram; + required_memory_region m_rom; + optional_device m_cart; + required_device m_sgexpslot; + + void sg1000_base(machine_config &config); +}; + +class sg1000_state : public sg1000_state_base +{ +public: + sg1000_state(const machine_config &mconfig, device_type type, const char *tag) : + sg1000_state_base(mconfig, type, tag), + m_ctrlports(*this, "ctrl%u", 1U) + { } + + void sg1000(machine_config &config); + + DECLARE_INPUT_CHANGED_MEMBER( trigger_nmi ); + +protected: + required_device_array m_ctrlports; + + virtual void machine_start() override; + + uint8_t peripheral_r(offs_t offset); + void peripheral_w(offs_t offset, uint8_t data); + + void sg1000_map(address_map &map); + void sg1000_io_map(address_map &map); + void sc3000_map(address_map &map); + void sc3000_io_map(address_map &map); +}; + +class omv_state : public sg1000_state_base +{ +public: + omv_state(const machine_config &mconfig, device_type type, const char *tag) : + sg1000_state_base(mconfig, type, tag) + { } + + void omv1000(machine_config &config); + +private: + uint8_t omv_r(offs_t offset); + void omv_w(offs_t offset, uint8_t data); + + void omv_map(address_map &map); + void omv_io_map(address_map &map); +}; + +class omv2000_state : public omv_state +{ +public: + omv2000_state(const machine_config &mconfig, device_type type, const char *tag) : + omv_state(mconfig, type, tag), + m_ctrl2(*this, "ctrl2") + { } + + void omv2000(machine_config &config); + + template ioport_value ctrl2_r(); + +private: + required_device m_ctrl2; + + virtual void machine_start() override; +}; + +class sc3000_state : public sg1000_state +{ +public: + sc3000_state(const machine_config &mconfig, device_type type, const char *tag) : + sg1000_state(mconfig, type, tag) + { } + + void sc3000(machine_config &config); + +protected: + virtual void machine_start() override; + + void sc3000_base(machine_config &config); +}; + +class sf7000_state : public sc3000_state +{ +public: + sf7000_state(const machine_config &mconfig, device_type type, const char *tag) : + sc3000_state(mconfig, type, tag), + m_fdc(*this, UPD765_TAG), + m_centronics(*this, "centronics"), + m_floppy0(*this, UPD765_TAG ":0:3ssdd") + { } + + void sf7000(machine_config &config); + +private: + required_device m_fdc; + required_device m_centronics; + required_device m_floppy0; + + int m_centronics_busy = 0; + + virtual void machine_start() override; + virtual void machine_reset() override; + + DECLARE_WRITE_LINE_MEMBER( write_centronics_busy ); + uint8_t ppi_pa_r(); + void ppi_pc_w(uint8_t data); + + void sf7000_io_map(address_map &map); + void sf7000_map(address_map &map); + + static void floppy_formats(format_registration &fr); +}; /*************************************************************************** READ/WRITE HANDLERS ***************************************************************************/ // TODO: not sure if the OMV bios actually detects the presence of a cart, -// or if the cart data simply overwrites the internal bios... +// or if the cart data simply overwrites the internal BIOS... // for the moment let assume the latter! -uint8_t sg1000_state::omv_r(offs_t offset) +uint8_t omv_state::omv_r(offs_t offset) { if (m_cart && m_cart->exists()) return m_cart->read_cart(offset); @@ -86,7 +244,7 @@ return m_rom->base()[offset]; } -void sg1000_state::omv_w(offs_t offset, uint8_t data) +void omv_state::omv_w(offs_t offset, uint8_t data) { if (m_cart && m_cart->exists()) m_cart->write_cart(offset, data); @@ -97,16 +255,11 @@ bool joy_ports_disabled = m_sgexpslot->is_readable(offset); if (joy_ports_disabled) - { return m_sgexpslot->read(offset); - } + else if (offset & 0x01) + return BIT(m_ctrlports[1]->in_r(), 2, 4) | 0xf0; else - { - if (offset & 0x01) - return m_pb7->read(); - else - return m_pa7->read(); - } + return BIT(m_ctrlports[0]->in_r(), 0, 6) | (BIT(m_ctrlports[1]->in_r(), 0, 2) << 6); } void sg1000_state::peripheral_w(offs_t offset, uint8_t data) @@ -145,9 +298,9 @@ ADDRESS_MAP( omv_map ) -------------------------------------------------*/ -void sg1000_state::omv_map(address_map &map) +void omv_state::omv_map(address_map &map) { - map(0x0000, 0xbfff).rw(FUNC(sg1000_state::omv_r), FUNC(sg1000_state::omv_w)); + map(0x0000, 0xbfff).rw(FUNC(omv_state::omv_r), FUNC(omv_state::omv_w)); map(0xc000, 0xc7ff).mirror(0x3800).ram(); } @@ -155,7 +308,7 @@ ADDRESS_MAP( omv_io_map ) -------------------------------------------------*/ -void sg1000_state::omv_io_map(address_map &map) +void omv_state::omv_io_map(address_map &map) { map.global_mask(0xff); map(0x40, 0x40).mirror(0x3f).w(SN76489AN_TAG, FUNC(sn76489a_device::write)); @@ -174,7 +327,7 @@ void sg1000_state::sc3000_map(address_map &map) { - map(0x0000, 0xbfff).rw(CARTSLOT_TAG, FUNC(sega8_cart_slot_device::read_cart), FUNC(sega8_cart_slot_device::write_cart)); + map(0x0000, 0xbfff).rw(m_cart, FUNC(sega8_cart_slot_device::read_cart), FUNC(sega8_cart_slot_device::write_cart)); map(0xc000, 0xc7ff).mirror(0x3800).ram(); } @@ -185,7 +338,7 @@ void sg1000_state::sc3000_io_map(address_map &map) { map.global_mask(0xff); - map(0x00, 0xff).rw(CARTSLOT_TAG, FUNC(sega8_cart_slot_device::read_io), FUNC(sega8_cart_slot_device::write_io)); + map(0x00, 0xff).rw(m_cart, FUNC(sega8_cart_slot_device::read_io), FUNC(sega8_cart_slot_device::write_io)); map(0x7f, 0x7f).w(SN76489AN_TAG, FUNC(sn76489a_device::write)); map(0xbe, 0xbf).rw(TMS9918A_TAG, FUNC(tms9918a_device::read), FUNC(tms9918a_device::write)); map(0xdc, 0xdf).rw(FUNC(sg1000_state::peripheral_r), FUNC(sg1000_state::peripheral_w)); @@ -241,33 +394,22 @@ } /*------------------------------------------------- - INPUT_PORTS( sg1000 ) + CUSTOM_INPUT_MEMBER( ctrl2_r ) -------------------------------------------------*/ -static INPUT_PORTS_START( sg1000_joy ) - PORT_START("PA7") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) - - PORT_START("PB7") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) -INPUT_PORTS_END +template +ioport_value omv2000_state::ctrl2_r() +{ + return m_ctrl2->in_r() >> Shift; +} -static INPUT_PORTS_START( sg1000 ) - PORT_INCLUDE( sg1000_joy ) +/*------------------------------------------------- + INPUT_PORTS( sg1000 ) +-------------------------------------------------*/ +static INPUT_PORTS_START( sg1000 ) PORT_START("NMI") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START ) PORT_NAME("PAUSE") PORT_CODE(KEYCODE_P) PORT_CHANGED_MEMBER(DEVICE_SELF, sg1000_state, trigger_nmi, 0) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME(DEF_STR(Pause)) PORT_CODE(KEYCODE_1) PORT_CHANGED_MEMBER(DEVICE_SELF, sg1000_state, trigger_nmi, 0) INPUT_PORTS_END /*------------------------------------------------- @@ -312,11 +454,8 @@ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("S-1") PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("S-2") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) - // The OMV FG-1000 has no 2nd joystick - // http://www.famitsu.com/image/29819/pEllnbNQfCJ58skZ25uB511N6eSFfAu6.jpg PORT_START("C5") PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END @@ -324,11 +463,11 @@ static INPUT_PORTS_START( omv2000 ) PORT_INCLUDE( omv1000 ) + PORT_MODIFY("C4") + PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(omv2000_state, ctrl2_r<0>); + PORT_MODIFY("C5") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(omv2000_state, ctrl2_r<2>); PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END @@ -337,8 +476,6 @@ -------------------------------------------------*/ static INPUT_PORTS_START( sc3000 ) - PORT_INCLUDE( sg1000_joy ) - // keyboard keys are added by the embedded sk1100 device PORT_START("NMI") @@ -463,6 +600,8 @@ void sg1000_state::machine_start() { + sg1000_state_base::machine_start(); + if (m_cart->get_type() == SEGA8_DAHJEE_TYPEA || m_cart->get_type() == SEGA8_DAHJEE_TYPEB) { m_maincpu->space(AS_PROGRAM).install_read_handler(0xc000, 0xffff, read8sm_delegate(*m_cart, FUNC(sega8_cart_slot_device::read_ram))); @@ -471,6 +610,21 @@ if (m_cart) m_cart->save_ram(); + + m_ctrlports[0]->out_w(0x3f, 0x40); + m_ctrlports[1]->out_w(0x3f, 0x40); +} + +/*------------------------------------------------- + MACHINE_START( omv2000 ) +-------------------------------------------------*/ + +void omv2000_state::machine_start() +{ + omv_state::machine_start(); + + // TODO: confirm wiring of pin 7 + m_ctrl2->out_w(0x3f, 0x40); } /*------------------------------------------------- @@ -479,6 +633,8 @@ void sc3000_state::machine_start() { + sg1000_state_base::machine_start(); + if (m_cart && m_cart->exists() && (m_cart->get_type() == SEGA8_BASIC_L3 || m_cart->get_type() == SEGA8_MUSIC_EDITOR || m_cart->get_type() == SEGA8_DAHJEE_TYPEA || m_cart->get_type() == SEGA8_DAHJEE_TYPEB || m_cart->get_type() == SEGA8_MULTICART || m_cart->get_type() == SEGA8_MEGACART)) @@ -489,6 +645,9 @@ if (m_cart) m_cart->save_ram(); + + m_ctrlports[0]->out_w(0x7f, 0x00); + m_ctrlports[1]->out_w(0x7f, 0x00); } @@ -518,90 +677,113 @@ MACHINE DRIVERS ***************************************************************************/ -/*------------------------------------------------- - machine_config( sg1000 ) --------------------------------------------------*/ - -void sg1000_state::sg1000(machine_config &config) +void sg1000_state_base::sg1000_base(machine_config &config) { /* basic machine hardware */ - Z80(config, m_maincpu, XTAL(10'738'635)/3); - m_maincpu->set_addrmap(AS_PROGRAM, &sg1000_state::sg1000_map); - m_maincpu->set_addrmap(AS_IO, &sg1000_state::sg1000_io_map); + Z80(config, m_maincpu, XTAL(10'738'635) / 3); // LH0080A /* video hardware */ tms9918a_device &vdp(TMS9918A(config, TMS9918A_TAG, XTAL(10'738'635))); vdp.set_screen("screen"); vdp.set_vram_size(0x4000); vdp.int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "mono").front_center(); - SN76489A(config, SN76489AN_TAG, XTAL(10'738'635)/3).add_route(ALL_OUTPUTS, "mono", 1.00); + SN76489A(config, SN76489AN_TAG, XTAL(10'738'635) / 3).add_route(ALL_OUTPUTS, "mono", 1.00); + + /* software lists */ + SOFTWARE_LIST(config, "cart_list").set_original("sg1000"); +} + +void sc3000_state::sc3000_base(machine_config &config) +{ + sg1000_base(config); + + /* controller ports */ + SMS_CONTROL_PORT(config, m_ctrlports[0], sms_control_port_passive_devices, SMS_CTRL_OPTION_JOYPAD); + SMS_CONTROL_PORT(config, m_ctrlports[1], sms_control_port_passive_devices, SMS_CTRL_OPTION_JOYPAD); + + /* sc3000 has all sk1100 features built-in, so add it as a fixed slot */ + SG1000_EXPANSION_SLOT(config, m_sgexpslot, sg1000_expansion_devices, "sk1100", true); + + /* the sk1100 device will add sc3000 cart and cass lists */ +} + +/*------------------------------------------------- + machine_config( sg1000 ) +-------------------------------------------------*/ + +void sg1000_state::sg1000(machine_config &config) +{ + sg1000_base(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &sg1000_state::sg1000_map); + m_maincpu->set_addrmap(AS_IO, &sg1000_state::sg1000_io_map); + + /* controller ports */ + SMS_CONTROL_PORT(config, m_ctrlports[0], sms_control_port_passive_devices, SMS_CTRL_OPTION_JOYPAD).set_fixed(true); + SMS_CONTROL_PORT(config, m_ctrlports[1], sms_control_port_passive_devices, SMS_CTRL_OPTION_JOYPAD); /* expansion slot */ SG1000_EXPANSION_SLOT(config, m_sgexpslot, sg1000_expansion_devices, nullptr, false); /* cartridge */ - SG1000_CART_SLOT(config, CARTSLOT_TAG, sg1000_cart, nullptr).set_must_be_loaded(true); - - /* software lists */ - SOFTWARE_LIST(config, "cart_list").set_original("sg1000"); + SG1000_CART_SLOT(config, m_cart, sg1000_cart, nullptr).set_must_be_loaded(true); /* internal ram */ RAM(config, m_ram).set_default_size("1K"); } /*------------------------------------------------- - machine_config( omv ) + machine_config( omv1000 ) -------------------------------------------------*/ -void sg1000_state::omv(machine_config &config) +void omv_state::omv1000(machine_config &config) { - sg1000(config); + sg1000_base(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &omv_state::omv_map); + m_maincpu->set_addrmap(AS_IO, &omv_state::omv_io_map); - m_maincpu->set_addrmap(AS_PROGRAM, &sg1000_state::omv_map); - m_maincpu->set_addrmap(AS_IO, &sg1000_state::omv_io_map); + /* expansion slot */ + SG1000_EXPANSION_SLOT(config, m_sgexpslot, sg1000_expansion_devices, nullptr, false); - OMV_CART_SLOT(config.replace(), CARTSLOT_TAG, sg1000_cart, nullptr); + /* cartridge */ + OMV_CART_SLOT(config, m_cart, sg1000_cart, nullptr); - m_ram->set_default_size("2K"); + /* internal ram */ + RAM(config, m_ram).set_default_size("2K"); } /*------------------------------------------------- - machine_config( sc3000 ) + machine_config( omv2000 ) -------------------------------------------------*/ -void sc3000_state::sc3000(machine_config &config) +void omv2000_state::omv2000(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, XTAL(10'738'635)/3); // LH0080A - m_maincpu->set_addrmap(AS_PROGRAM, &sc3000_state::sc3000_map); - m_maincpu->set_addrmap(AS_IO, &sc3000_state::sc3000_io_map); + omv1000(config); - /* video hardware */ - tms9918a_device &vdp(TMS9918A(config, TMS9918A_TAG, XTAL(10'738'635))); - vdp.set_screen("screen"); - vdp.set_vram_size(0x4000); - vdp.int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); - SCREEN(config, "screen", SCREEN_TYPE_RASTER); + /* controller ports */ + SMS_CONTROL_PORT(config, m_ctrl2, sms_control_port_passive_devices, SMS_CTRL_OPTION_JOYPAD); +} - /* sound hardware */ - SPEAKER(config, "mono").front_center(); +/*------------------------------------------------- + machine_config( sc3000 ) +-------------------------------------------------*/ - SN76489A(config, SN76489AN_TAG, XTAL(10'738'635)/3).add_route(ALL_OUTPUTS, "mono", 1.00); +void sc3000_state::sc3000(machine_config &config) +{ + sc3000_base(config); - /* sc3000 has all sk1100 features built-in, so add it as a fixed slot */ - SG1000_EXPANSION_SLOT(config, m_sgexpslot, sg1000_expansion_devices, "sk1100", true); + m_maincpu->set_addrmap(AS_PROGRAM, &sc3000_state::sc3000_map); + m_maincpu->set_addrmap(AS_IO, &sc3000_state::sc3000_io_map); /* cartridge */ - SC3000_CART_SLOT(config, CARTSLOT_TAG, sg1000_cart, nullptr).set_must_be_loaded(true); - - /* software lists */ - SOFTWARE_LIST(config, "cart_list").set_original("sg1000"); - /* the sk1100 device will add sc3000 cart and cass lists */ + SC3000_CART_SLOT(config, m_cart, sg1000_cart, nullptr).set_must_be_loaded(true); /* internal ram */ RAM(config, m_ram).set_default_size("2K"); @@ -613,22 +795,12 @@ void sf7000_state::sf7000(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, XTAL(10'738'635)/3); - m_maincpu->set_addrmap(AS_PROGRAM, &sf7000_state::sf7000_map); - m_maincpu->set_addrmap(AS_IO, &sf7000_state::sf7000_io_map); - - /* video hardware */ - tms9918a_device &vdp(TMS9918A(config, TMS9918A_TAG, XTAL(10'738'635))); - vdp.set_screen("screen"); - vdp.set_vram_size(0x4000); - vdp.int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); - SCREEN(config, "screen", SCREEN_TYPE_RASTER); + // FIXME: this thing is actually a cartridge slot peripheral for the SC-3000 and shouldn't be a separate machine - /* sound hardware */ - SPEAKER(config, "mono").front_center(); + sc3000_base(config); - SN76489A(config, SN76489AN_TAG, XTAL(10'738'635)/3).add_route(ALL_OUTPUTS, "mono", 1.00); + m_maincpu->set_addrmap(AS_PROGRAM, &sf7000_state::sf7000_map); + m_maincpu->set_addrmap(AS_IO, &sf7000_state::sf7000_io_map); /* devices */ i8255_device &ppi(I8255(config, UPD9255_1_TAG)); @@ -649,13 +821,11 @@ FLOPPY_CONNECTOR(config, UPD765_TAG ":0", sf7000_floppies, "3ssdd", sf7000_state::floppy_formats); CENTRONICS(config, m_centronics, centronics_devices, "printer"); + m_centronics->busy_handler().set(FUNC(sf7000_state::write_centronics_busy)); output_latch_device ¢_data_out(OUTPUT_LATCH(config, "cent_data_out")); m_centronics->set_output_latch(cent_data_out); - /* sf7000 (sc3000) has all sk1100 features built-in, so add it as a fixed slot */ - SG1000_EXPANSION_SLOT(config, m_sgexpslot, sg1000_expansion_devices, "sk1100", true); - /* software lists */ SOFTWARE_LIST(config, "flop_list").set_original("sf7000"); @@ -692,15 +862,18 @@ ROM_LOAD( "omvbios.bin", 0x0000, 0x4000, CRC(c5a67b95) SHA1(6d7c64dd60dee4a33061d3d3a7c2ed190d895cdb) ) ROM_END +} // anonymous namespace + + /*************************************************************************** SYSTEM DRIVERS ***************************************************************************/ -/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -CONS( 1983, sg1000, 0, 0, sg1000, sg1000, sg1000_state, empty_init, "Sega", "SG-1000", MACHINE_SUPPORTS_SAVE ) -CONS( 1984, sg1000m2, sg1000, 0, sc3000, sc3000, sc3000_state, empty_init, "Sega", "SG-1000 II", MACHINE_SUPPORTS_SAVE ) -COMP( 1983, sc3000, 0, sg1000, sc3000, sc3000, sc3000_state, empty_init, "Sega", "SC-3000", MACHINE_SUPPORTS_SAVE ) -COMP( 1983, sc3000h, sc3000, 0, sc3000, sc3000, sc3000_state, empty_init, "Sega", "SC-3000H", MACHINE_SUPPORTS_SAVE ) -COMP( 1983, sf7000, sc3000, 0, sf7000, sf7000, sf7000_state, empty_init, "Sega", "SC-3000/Super Control Station SF-7000", MACHINE_SUPPORTS_SAVE ) -CONS( 1984, omv1000, sg1000, 0, omv, omv1000, sg1000_state, empty_init, "Tsukuda Original", "Othello Multivision FG-1000", MACHINE_SUPPORTS_SAVE ) -CONS( 1984, omv2000, sg1000, 0, omv, omv2000, sg1000_state, empty_init, "Tsukuda Original", "Othello Multivision FG-2000", MACHINE_SUPPORTS_SAVE ) +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +CONS( 1983, sg1000, 0, 0, sg1000, sg1000, sg1000_state, empty_init, "Sega", "SG-1000", MACHINE_SUPPORTS_SAVE ) +CONS( 1984, sg1000m2, sg1000, 0, sc3000, sc3000, sc3000_state, empty_init, "Sega", "SG-1000 II", MACHINE_SUPPORTS_SAVE ) +COMP( 1983, sc3000, 0, sg1000, sc3000, sc3000, sc3000_state, empty_init, "Sega", "SC-3000", MACHINE_SUPPORTS_SAVE ) +COMP( 1983, sc3000h, sc3000, 0, sc3000, sc3000, sc3000_state, empty_init, "Sega", "SC-3000H", MACHINE_SUPPORTS_SAVE ) +COMP( 1983, sf7000, sc3000, 0, sf7000, sf7000, sf7000_state, empty_init, "Sega", "SC-3000/Super Control Station SF-7000", MACHINE_SUPPORTS_SAVE ) +CONS( 1984, omv1000, sg1000, 0, omv1000, omv1000, omv_state, empty_init, "Tsukuda Original", "Othello Multivision FG-1000", MACHINE_SUPPORTS_SAVE ) +CONS( 1984, omv2000, sg1000, 0, omv2000, omv2000, omv2000_state, empty_init, "Tsukuda Original", "Othello Multivision FG-2000", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/sega/sg1000.h mame-0.251+dfsg.1/src/mame/sega/sg1000.h --- mame-0.250+dfsg.1/src/mame/sega/sg1000.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/sg1000.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,124 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder - -#ifndef MAME_INCLUDES_SG1000_H -#define MAME_INCLUDES_SG1000_H - -#include "cpu/z80/z80.h" -#include "formats/sf7000_dsk.h" -#include "imagedev/floppy.h" -#include "imagedev/printer.h" -#include "bus/centronics/ctronics.h" -#include "machine/i8255.h" -#include "machine/i8251.h" -#include "machine/ram.h" -#include "bus/sega8/sega8_slot.h" -#include "bus/sg1000_exp/sg1000exp.h" -#include "machine/upd765.h" -#include "sound/sn76496.h" -#include "video/tms9928a.h" -#include "crsshair.h" - -#define SCREEN_TAG "screen" -#define Z80_TAG "z80" -#define SN76489AN_TAG "sn76489an" -#define UPD765_TAG "upd765" -#define UPD8251_TAG "upd8251" -#define UPD9255_TAG "upd9255" -#define UPD9255_1_TAG "upd9255_1" // "upd9255_0" is being used by sk1100 device -#define CENTRONICS_TAG "centronics" -#define TMS9918A_TAG "tms9918a" -#define RS232_TAG "rs232" -#define CARTSLOT_TAG "slot" -#define EXPSLOT_TAG "sgexp" - - - -class sg1000_state : public driver_device -{ -public: - sg1000_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, Z80_TAG), - m_ram(*this, RAM_TAG), - m_rom(*this, Z80_TAG), - m_cart(*this, CARTSLOT_TAG), - m_sgexpslot(*this, EXPSLOT_TAG), - m_pa7(*this, "PA7"), - m_pb7(*this, "PB7") - { } - - void sg1000(machine_config &config); - void omv(machine_config &config); - - DECLARE_INPUT_CHANGED_MEMBER( trigger_nmi ); - -protected: - required_device m_maincpu; - required_device m_ram; - required_memory_region m_rom; - optional_device m_cart; - optional_device m_sgexpslot; - optional_ioport m_pa7; - optional_ioport m_pb7; - - virtual void machine_start() override; - - uint8_t peripheral_r(offs_t offset); - void peripheral_w(offs_t offset, uint8_t data); - - uint8_t omv_r(offs_t offset); - void omv_w(offs_t offset, uint8_t data); - - void omv_io_map(address_map &map); - void omv_map(address_map &map); - void sc3000_io_map(address_map &map); - void sc3000_map(address_map &map); - void sg1000_io_map(address_map &map); - void sg1000_map(address_map &map); -}; - -class sc3000_state : public sg1000_state -{ -public: - sc3000_state(const machine_config &mconfig, device_type type, const char *tag) - : sg1000_state(mconfig, type, tag) - { } - - void sc3000(machine_config &config); - -protected: - virtual void machine_start() override; -}; - -class sf7000_state : public sc3000_state -{ -public: - sf7000_state(const machine_config &mconfig, device_type type, const char *tag) - : sc3000_state(mconfig, type, tag), - m_fdc(*this, UPD765_TAG), - m_centronics(*this, CENTRONICS_TAG), - m_floppy0(*this, UPD765_TAG ":0:3ssdd") - { } - - void sf7000(machine_config &config); - -private: - required_device m_fdc; - required_device m_centronics; - required_device m_floppy0; - - virtual void machine_start() override; - virtual void machine_reset() override; - - int m_centronics_busy = 0; - DECLARE_WRITE_LINE_MEMBER( write_centronics_busy ); - uint8_t ppi_pa_r(); - void ppi_pc_w(uint8_t data); - - static void floppy_formats(format_registration &fr); - void sf7000_io_map(address_map &map); - void sf7000_map(address_map &map); -}; - -#endif diff -Nru mame-0.250+dfsg.1/src/mame/sega/shtzone.cpp mame-0.251+dfsg.1/src/mame/sega/shtzone.cpp --- mame-0.250+dfsg.1/src/mame/sega/shtzone.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/shtzone.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -59,9 +59,11 @@ #include "emu.h" #include "sms.h" + #include "cpu/z80/z80.h" #include "machine/nvram.h" #include "sound/beep.h" + #include "emupal.h" #include "screen.h" #include "speaker.h" @@ -72,13 +74,13 @@ class shtzone_state : public sms_state { public: - shtzone_state(const machine_config &mconfig, device_type type, const char *tag) - : sms_state(mconfig, type, tag), + shtzone_state(const machine_config &mconfig, device_type type, const char *tag) : + sms_state(mconfig, type, tag), m_timercpu(*this, "timercpu"), m_buzzer(*this, "buzzer"), m_slots(*this, {"slot", "slot2", "slot3", "slot4", "slot5"}), m_led(*this, "led") - { } + { } void shtzone(machine_config &config); @@ -354,7 +356,7 @@ ROM_FILL(0x0000, 0x4000, 0xff) ROM_END -} // Anonymous namespace +} // anonymous namespace GAME( 1987, shtzone, 0, shtzone, shtzone, shtzone_state, empty_init, ROT0, "Sega", "Shooting Zone System BIOS", MACHINE_NOT_WORKING | MACHINE_IS_BIOS_ROOT ) diff -Nru mame-0.250+dfsg.1/src/mame/sega/sms.cpp mame-0.251+dfsg.1/src/mame/sega/sms.cpp --- mame-0.250+dfsg.1/src/mame/sega/sms.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/sms.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -245,6 +245,7 @@ #include "emu.h" #include "sms.h" +#include "bus/sms_ctrl/controllers.h" #include "cpu/z80/z80.h" #include "softlist_dev.h" #include "speaker.h" @@ -296,20 +297,22 @@ } // I/O ports $3E and $3F do not exist on Mark III -void sms_state::sg1000m3_io(address_map &map) +void sg1000m3_state::sg1000m3_io(address_map &map) { map.global_mask(0xff); map.unmap_value_high(); - map(0x40, 0x7f).r(FUNC(sms_state::sms_count_r)).w(m_vdp, FUNC(sega315_5124_device::psg_w)); + + map(0x40, 0x7f).r(FUNC(sg1000m3_state::sms_count_r)).w(m_vdp, FUNC(sega315_5124_device::psg_w)); map(0x80, 0x80).mirror(0x3e).rw(m_vdp, FUNC(sega315_5124_device::data_read), FUNC(sega315_5124_device::data_write)); map(0x81, 0x81).mirror(0x3e).rw(m_vdp, FUNC(sega315_5124_device::control_read), FUNC(sega315_5124_device::control_write)); - map(0xc0, 0xc7).mirror(0x38).rw(FUNC(sms_state::sg1000m3_peripheral_r), FUNC(sms_state::sg1000m3_peripheral_w)); + map(0xc0, 0xc7).mirror(0x38).rw(FUNC(sg1000m3_state::sg1000m3_peripheral_r), FUNC(sg1000m3_state::sg1000m3_peripheral_w)); } void sms_state::sms_io(address_map &map) { map.global_mask(0xff); map.unmap_value_high(); + map(0x00, 0x00).mirror(0x3e).w(FUNC(sms_state::sms_mem_control_w)); map(0x01, 0x01).mirror(0x3e).w(FUNC(sms_state::sms_io_control_w)); map(0x40, 0x7f).r(FUNC(sms_state::sms_count_r)).w(m_vdp, FUNC(sega315_5124_device::psg_w)); @@ -320,14 +323,14 @@ } -// It seems the Korean versions do some more strict decoding on the I/O -// addresses. +// It seems the Korean versions do some more strict decoding on the I/O addresses. // At least the mirrors for I/O ports $3E/$3F don't seem to exist there. // Leaving the mirrors breaks the Korean cartridge bublboky. void sms_state::smskr_io(address_map &map) { map.global_mask(0xff); map.unmap_value_high(); + map(0x3e, 0x3e).w(FUNC(sms_state::sms_mem_control_w)); map(0x3f, 0x3f).w(FUNC(sms_state::sms_io_control_w)); map(0x40, 0x7f).r(FUNC(sms_state::sms_count_r)).w(m_vdp, FUNC(sega315_5124_device::psg_w)); @@ -344,6 +347,7 @@ { map.global_mask(0xff); map.unmap_value_high(); + map(0x3e, 0x3e).w(FUNC(sms_state::sms_mem_control_w)); map(0x3f, 0x3f).w(FUNC(sms_state::sms_io_control_w)); map(0x40, 0x7f).r(FUNC(sms_state::sms_count_r)).w(m_vdp, FUNC(sega315_5124_device::psg_w)); @@ -365,18 +369,29 @@ { map.global_mask(0xff); map.unmap_value_high(); - map(0x00, 0x00).r(FUNC(gamegear_state::gg_input_port_00_r)); - map(0x01, 0x05).rw(FUNC(gamegear_state::gg_sio_r), FUNC(gamegear_state::gg_sio_w)); - map(0x06, 0x06).w(FUNC(gamegear_state::gg_psg_stereo_w)); - map(0x3e, 0x3e).w(FUNC(gamegear_state::sms_mem_control_w)); - map(0x3f, 0x3f).w(FUNC(gamegear_state::sms_io_control_w)); + + map(0x3e, 0x3e).w(FUNC(gamegear_state::sms_mem_control_w)); // TODO: only really exists in Master System mode map(0x40, 0x7f).r(FUNC(gamegear_state::sms_count_r)).w(m_vdp, FUNC(sega315_5124_device::psg_w)); map(0x80, 0x80).mirror(0x3e).rw(m_vdp, FUNC(sega315_5124_device::data_read), FUNC(sega315_5124_device::data_write)); map(0x81, 0x81).mirror(0x3e).rw(m_vdp, FUNC(sega315_5124_device::control_read), FUNC(sega315_5124_device::control_write)); - map(0xc0, 0xc0).r(FUNC(gamegear_state::sms_input_port_dc_r)); - map(0xc1, 0xc1).r(FUNC(gamegear_state::sms_input_port_dd_r)); - map(0xdc, 0xdc).r(FUNC(gamegear_state::sms_input_port_dc_r)); - map(0xdd, 0xdd).r(FUNC(gamegear_state::sms_input_port_dd_r)); + map(0xc0, 0xc0).r(FUNC(gamegear_state::gg_input_port_dc_r)); + map(0xc1, 0xc1).r(FUNC(gamegear_state::gg_input_port_dd_r)); + map(0xdc, 0xdc).r(FUNC(gamegear_state::gg_input_port_dc_r)); + map(0xdd, 0xdd).r(FUNC(gamegear_state::gg_input_port_dd_r)); + + map(0x00, 0x3f).view(m_io_view); + + // Game Gear mode + m_io_view[0](0x00, 0x00).r(FUNC(gamegear_state::gg_input_port_00_r)); + m_io_view[0](0x01, 0x01).rw(m_gg_ioport, FUNC(gamegear_io_port_device::data_r), FUNC(gamegear_io_port_device::data_w)); + m_io_view[0](0x02, 0x02).rw(m_gg_ioport, FUNC(gamegear_io_port_device::ctrl_r), FUNC(gamegear_io_port_device::ctrl_w)); + m_io_view[0](0x03, 0x03).rw(m_gg_ioport, FUNC(gamegear_io_port_device::txdata_r), FUNC(gamegear_io_port_device::txdata_w)); + m_io_view[0](0x04, 0x04).r(m_gg_ioport, FUNC(gamegear_io_port_device::rxdata_r)); + m_io_view[0](0x05, 0x05).rw(m_gg_ioport, FUNC(gamegear_io_port_device::s_ctrl_r), FUNC(gamegear_io_port_device::s_ctrl_w)); + m_io_view[0](0x06, 0x06).w(m_vdp, FUNC(sega315_5124_device::psg_stereo_w)); + + // Master System mode + m_io_view[1](0x3f, 0x3f).w(FUNC(gamegear_state::gg_io_control_w)); } @@ -483,7 +498,7 @@ PORT_START("START") PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START ) PORT_NAME("Start") /* Game Gear START */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START ) PORT_NAME("Start") PORT_START("PERSISTENCE") PORT_CONFNAME( 0x01, 0x01, "LCD Persistence Hack" ) @@ -494,25 +509,25 @@ void sms_state::sms_base(machine_config &config) { - /* basic machine hardware */ SPEAKER(config, "mono").front_center(); SMS_CART_SLOT(config, "slot", sms_cart, nullptr); SOFTWARE_LIST(config, "cart_list").set_original("sms"); - SMS_CONTROL_PORT(config, m_port_ctrl1, sms_control_port_devices, "joypad"); - m_port_ctrl1->set_screen_tag(m_main_scr); - m_port_ctrl1->th_input_handler().set(FUNC(sms_state::sms_ctrl1_th_input)); - - SMS_CONTROL_PORT(config, m_port_ctrl2, sms_control_port_devices, "joypad"); - m_port_ctrl2->set_screen_tag(m_main_scr); - m_port_ctrl2->th_input_handler().set(FUNC(sms_state::sms_ctrl2_th_input)); + SMS_CONTROL_PORT(config, m_port_ctrl1, sms_control_port_devices, SMS_CTRL_OPTION_JOYPAD); + m_port_ctrl1->set_screen(m_main_scr); + m_port_ctrl1->th_handler().set(FUNC(sms_state::sms_ctrl1_th_input)); + + SMS_CONTROL_PORT(config, m_port_ctrl2, sms_control_port_devices, SMS_CTRL_OPTION_JOYPAD); + m_port_ctrl2->set_screen(m_main_scr); + m_port_ctrl2->th_handler().set(FUNC(sms_state::sms_ctrl2_th_input)); } void sms_state::sms_ntsc_base(machine_config &config) { sms_base(config); + Z80(config, m_maincpu, XTAL(10'738'635)/3); m_maincpu->set_addrmap(AS_PROGRAM, &sms_state::sms_mem); m_maincpu->set_addrmap(AS_IO, &sms_state::sms_io); @@ -919,11 +934,11 @@ m_is_smsj = true; } -void sms1_state::sg1000m3(machine_config &config) +void sg1000m3_state::sg1000m3(machine_config &config) { sms1_ntsc(config); - m_maincpu->set_addrmap(AS_IO, &sms1_state::sg1000m3_io); + m_maincpu->set_addrmap(AS_IO, &sg1000m3_state::sg1000m3_io); // Remove and reinsert all media slots, as done with the sms1_kr config, // and also replace the expansion slot with the SG-1000 version. @@ -932,13 +947,13 @@ config.device_remove("smsexp"); SG1000MK3_CART_SLOT(config, "slot", sg1000mk3_cart, nullptr); SMS_CARD_SLOT(config, "mycard", sms_cart, nullptr); - SG1000_EXPANSION_SLOT(config, "sgexp", sg1000_expansion_devices, nullptr, false); + SG1000_EXPANSION_SLOT(config, m_sgexpslot, sg1000_expansion_devices, nullptr, false); SOFTWARE_LIST(config, "cart_list2").set_original("sg1000"); // Mark III does not have TH connected. - m_port_ctrl1->th_input_handler().set_nop(); - m_port_ctrl2->th_input_handler().set_nop(); + m_port_ctrl1->th_handler().set_nop(); + m_port_ctrl2->th_handler().set_nop(); m_has_bios_full = false; m_is_mark_iii = true; @@ -977,9 +992,14 @@ SOFTWARE_LIST(config, "cart_list").set_original("gamegear"); - GG_EXT_PORT(config, m_port_gg_ext, gg_ext_port_devices, nullptr); - m_port_gg_ext->set_screen_tag(m_main_scr); - m_port_gg_ext->th_input_handler().set(FUNC(gamegear_state::gg_ext_th_input)); + GAMEGEAR_IO_PORT(config, m_gg_ioport, 0); + m_gg_ioport->set_in_handler(m_port_gg_ext, FUNC(sms_control_port_device::in_r)); + m_gg_ioport->set_out_handler(m_port_gg_ext, FUNC(sms_control_port_device::out_w)); + m_gg_ioport->hl_handler().set(FUNC(gamegear_state::gg_nmi)); + + SMS_CONTROL_PORT(config, m_port_gg_ext, sms_control_port_devices, nullptr); + m_port_gg_ext->set_screen(m_main_scr); + m_port_gg_ext->th_handler().set(FUNC(gamegear_state::gg_ext_th_input)); m_is_gamegear = true; m_has_bios_0400 = true; @@ -1240,7 +1260,7 @@ ***************************************************************************/ /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -CONS( 1985, sg1000m3, sms, 0, sg1000m3, sg1000m3, sms1_state, empty_init, "Sega", "Mark III", MACHINE_SUPPORTS_SAVE ) +CONS( 1985, sg1000m3, sms, 0, sg1000m3, sg1000m3, sg1000m3_state, empty_init, "Sega", "Mark III", MACHINE_SUPPORTS_SAVE ) CONS( 1986, sms1, sms, 0, sms1_ntsc, sms1, sms1_state, empty_init, "Sega", "Master System I", MACHINE_SUPPORTS_SAVE ) CONS( 1986, sms1pal, sms, 0, sms1_pal, sms1, sms1_state, empty_init, "Sega", "Master System I (PAL)" , MACHINE_SUPPORTS_SAVE ) CONS( 1986, smssdisp, sms, 0, sms_sdisp, smssdisp, smssdisp_state, empty_init, "Sega", "Master System Store Display Unit", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/sega/sms.h mame-0.251+dfsg.1/src/mame/sega/sms.h --- mame-0.250+dfsg.1/src/mame/sega/sms.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/sms.h 2022-12-29 14:20:09.000000000 +0000 @@ -2,35 +2,29 @@ // copyright-holders:Wilbert Pol, Charles MacDonald,Mathis Rosenhauer,Brad Oliver,Michael Luong,Fabio Priuli,Enik Land /***************************************************************************** * - * includes/sms.h + * sega/sms.h * ****************************************************************************/ - #ifndef MAME_INCLUDES_SMS_H #define MAME_INCLUDES_SMS_H -#define LOG_REG -#define LOG_PAGING -#define LOG_COLOR - -#define NVRAM_SIZE (0x08000) -#define CPU_ADDRESSABLE_SIZE (0x10000) - -#define MAX_CARTRIDGES 16 +#pragma once -#define CONTROL1_TAG "ctrl1" -#define CONTROL2_TAG "ctrl2" +#include "mdioport.h" -#include "bus/gamegear/ggext.h" #include "bus/sega8/sega8_slot.h" #include "bus/sg1000_exp/sg1000exp.h" #include "bus/sms_ctrl/smsctrl.h" #include "bus/sms_exp/smsexp.h" +#include "machine/timer.h" #include "sound/ymopl.h" #include "video/315_5124.h" #include "screen.h" -#include "machine/timer.h" + +#define LOG_REG +#define LOG_PAGING +#define LOG_COLOR class sms_state : public driver_device @@ -42,10 +36,8 @@ m_vdp(*this, "sms_vdp"), m_main_scr(*this, "screen"), m_ym(*this, "ym2413"), - m_port_ctrl1(*this, CONTROL1_TAG), - m_port_ctrl2(*this, CONTROL2_TAG), - m_port_gg_ext(*this, "ext"), - m_port_gg_dc(*this, "GG_PORT_DC"), + m_port_ctrl1(*this, "ctrl1"), + m_port_ctrl2(*this, "ctrl2"), m_port_pause(*this, "PAUSE"), m_port_reset(*this, "RESET"), m_port_rapid(*this, "RAPID"), @@ -66,8 +58,7 @@ m_has_pwr_led(false), m_slot(*this, "slot"), m_cardslot(*this, "mycard"), - m_smsexpslot(*this, "smsexp"), - m_sgexpslot(*this, "sgexp") + m_smsexpslot(*this, "smsexp") { } void sms_base(machine_config &config); @@ -101,8 +92,6 @@ uint8_t sms_count_r(offs_t offset); uint8_t sms_input_port_dc_r(); uint8_t sms_input_port_dd_r(); - uint8_t sg1000m3_peripheral_r(offs_t offset); - void sg1000m3_peripheral_w(offs_t offset, uint8_t data); uint8_t smsj_audio_control_r(); void smsj_audio_control_w(uint8_t data); void smsj_ym2413_register_port_w(uint8_t data); @@ -112,7 +101,6 @@ DECLARE_WRITE_LINE_MEMBER(sms_ctrl1_th_input); DECLARE_WRITE_LINE_MEMBER(sms_ctrl2_th_input); - void sg1000m3_io(address_map &map); void sms_io(address_map &map); void sms_mem(address_map &map); void smsj_io(address_map &map); @@ -135,9 +123,7 @@ optional_device m_ym; optional_device m_port_ctrl1; optional_device m_port_ctrl2; - optional_device m_port_gg_ext; - optional_ioport m_port_gg_dc; optional_ioport m_port_pause; optional_ioport m_port_reset; optional_ioport m_port_rapid; @@ -150,7 +136,7 @@ std::unique_ptr m_mainram; uint8_t *m_BIOS; - // for gamegear LCD persistence hack + // for Game Gear LCD persistence hack bitmap_rgb32 m_prev_bitmap; bool m_prev_bitmap_copied; @@ -199,9 +185,9 @@ optional_device m_slot; optional_device m_cardslot; optional_device m_smsexpslot; - optional_device m_sgexpslot; }; + class sms1_state : public sms_state { public: @@ -219,7 +205,6 @@ void sms1_br(machine_config &config); void sms1_kr(machine_config &config); void smsj(machine_config &config); - void sg1000m3(machine_config &config); protected: virtual void video_start() override; @@ -248,6 +233,7 @@ uint8_t m_frame_sscope_state; }; + class smssdisp_state : public sms1_state { public: @@ -285,11 +271,39 @@ uint8_t m_store_cart_selection_data; }; + +class sg1000m3_state : public sms1_state +{ +public: + sg1000m3_state(const machine_config &mconfig, device_type type, const char *tag) : + sms1_state(mconfig, type, tag), + m_sgexpslot(*this, "sgexp") + { } + + void sg1000m3(machine_config &config); + +protected: + virtual void machine_reset() override; + +private: + uint8_t sg1000m3_peripheral_r(offs_t offset); + void sg1000m3_peripheral_w(offs_t offset, uint8_t data); + + void sg1000m3_io(address_map &map); + + required_device m_sgexpslot; +}; + + class gamegear_state : public sms_state { public: gamegear_state(const machine_config &mconfig, device_type type, const char *tag) : - sms_state(mconfig, type, tag) + sms_state(mconfig, type, tag), + m_io_view(*this, "io"), + m_gg_ioport(*this, "ioport"), + m_port_gg_ext(*this, "ext"), + m_port_gg_dc(*this, "GG_PORT_DC") { } void gamegear(machine_config &config); @@ -305,25 +319,33 @@ template static void screen_gg_raw_params(screen_device &screen, X &&pixelclock); uint8_t gg_input_port_00_r(); - uint8_t gg_sio_r(offs_t offset); - void gg_sio_w(offs_t offset, uint8_t data); - void gg_psg_stereo_w(uint8_t data); + uint8_t gg_input_port_dc_r(); + uint8_t gg_input_port_dd_r(); + void gg_io_control_w(uint8_t data); DECLARE_WRITE_LINE_MEMBER(gg_pause_callback); DECLARE_WRITE_LINE_MEMBER(gg_ext_th_input); + DECLARE_WRITE_LINE_MEMBER(gg_nmi); uint32_t screen_update_gamegear(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); void screen_gg_sms_mode_scaling(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); void gg_io(address_map &map); + memory_view m_io_view; + + required_device m_gg_ioport; + required_device m_port_gg_ext; + + required_ioport m_port_gg_dc; + // for gamegear SMS mode scaling bitmap_rgb32 m_gg_sms_mode_bitmap; + // line_buffer will be used to hold 4 lines of line data as a kind of cache for - // vertical scaling in the gamegear sms compatibility mode. - std::unique_ptr m_line_buffer; + // vertical scaling in the Game Gear SMS compatibility mode. + std::unique_ptr m_line_buffer; - uint8_t m_gg_sio[5]{}; int m_gg_paused = 0; }; diff -Nru mame-0.250+dfsg.1/src/mame/sega/sms_m.cpp mame-0.251+dfsg.1/src/mame/sega/sms_m.cpp --- mame-0.250+dfsg.1/src/mame/sega/sms_m.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/sms_m.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,14 +1,11 @@ // license:BSD-3-Clause // copyright-holders:Wilbert Pol, Charles MacDonald,Mathis Rosenhauer,Brad Oliver,Michael Luong,Fabio Priuli,Enik Land #include "emu.h" -#include "crsshair.h" -#include "cpu/z80/z80.h" -#include "video/315_5124.h" -#include "sound/ymopl.h" #include "sms.h" -#define VERBOSE 0 -#define LOG(x) do { if (VERBOSE) logerror x; } while (0) +#include "cpu/z80/z80.h" + +#include "crsshair.h" #define ENABLE_NONE 0x00 #define ENABLE_EXPANSION 0x01 @@ -26,8 +23,7 @@ void sms_state::lphaser_hcount_latch() { - /* A delay seems to occur when the Light Phaser latches the - VDP hcount, then an offset is added here to the hpos. */ + // A delay seems to occur when the Light Phaser latches the VDP hcount, then an offset is added here to the hpos. m_lphaser_th_timer->adjust(m_main_scr->time_until_pos(m_main_scr->vpos(), m_main_scr->hpos() + m_lphaser_x_offs)); } @@ -37,18 +33,18 @@ // Check if TH of controller port 1 is set to input (1) if (m_io_ctrl_reg & 0x02) { - if (state == 0) + if (!state) { m_ctrl1_th_latch = 1; } else { // State is 1. If changed from 0, hcount is latched. - if (m_ctrl1_th_state == 0) + if (!m_ctrl1_th_state) lphaser_hcount_latch(); } - m_ctrl1_th_state = state; } + m_ctrl1_th_state = state; } @@ -57,151 +53,85 @@ // Check if TH of controller port 2 is set to input (1) if (m_io_ctrl_reg & 0x08) { - if (state == 0) + if (!state) { m_ctrl2_th_latch = 1; } else { // State is 1. If changed from 0, hcount is latched. - if (m_ctrl2_th_state == 0) + if (!m_ctrl2_th_state) lphaser_hcount_latch(); } - m_ctrl2_th_state = state; } + m_ctrl2_th_state = state; } WRITE_LINE_MEMBER(gamegear_state::gg_ext_th_input) { - if (!(m_cartslot->exists() && m_cartslot->get_sms_mode())) - return; + m_gg_ioport->th_w(state); - // The EXT port act as the controller port 2 on SMS compatibility mode. - sms_ctrl2_th_input(state); + // TODO: verify behaviour in SMS mode + if (m_cartslot->exists() && m_cartslot->get_sms_mode()) + sms_ctrl2_th_input(state); } -void sms_state::sms_get_inputs() +WRITE_LINE_MEMBER(gamegear_state::gg_nmi) { - uint8_t data1 = 0xff; - uint8_t data2 = 0xff; + if (!(m_cartslot->exists() && m_cartslot->get_sms_mode())) + m_maincpu->set_input_line(INPUT_LINE_NMI, state); +} + +void sms_state::sms_get_inputs() +{ m_port_dc_reg = 0xff; m_port_dd_reg = 0xff; - // The bit order of the emulated controller port tries to follow its - // physical pins numbering. For register bits whose order differs, - // it's necessary move the equivalent controller bits to match. - - if (m_is_gamegear) - { - // For Game Gear, this function is used only if SMS mode is - // enabled, else only register $dc receives input data, through - // direct read of the m_port_gg_dc I/O port. - - data1 = m_port_gg_dc->read(); - m_port_dc_reg &= ~0x03f | data1; - - data2 = m_port_gg_ext->port_r(); - } - else - { - data1 = m_port_ctrl1->port_r(); - m_port_dc_reg &= ~0x0f | data1; // Up, Down, Left, Right - m_port_dc_reg &= ~0x10 | (data1 >> 1); // TL (Button 1) - m_port_dc_reg &= ~0x20 | (data1 >> 2); // TR (Button 2) + m_port_dc_reg &= ~0x3f | m_port_ctrl1->in_r(); // Up, Down, Left, Right, TL, TR - data2 = m_port_ctrl2->port_r(); - } + uint8_t const data2 = m_port_ctrl2->in_r(); m_port_dc_reg &= ~0xc0 | (data2 << 6); // Up, Down - m_port_dd_reg &= ~0x03 | (data2 >> 2); // Left, Right - m_port_dd_reg &= ~0x04 | (data2 >> 3); // TL (Button 1) - m_port_dd_reg &= ~0x08 | (data2 >> 4); // TR (Button 2) - - if (!m_is_mark_iii) - { - m_port_dd_reg &= ~0x40 | data1; // TH ctrl1 - m_port_dd_reg &= ~0x80 | (data2 << 1); // TH ctrl2 - } + m_port_dd_reg &= ~0x0f | (data2 >> 2); // Left, Right, TL, TR + m_port_dd_reg &= ~0x40 | (m_ctrl1_th_state << 6); // TH ctrl1 + m_port_dd_reg &= ~0x80 | (m_ctrl2_th_state << 7); // TH ctrl2 } void sms_state::sms_io_control_w(uint8_t data) { bool latch_hcount = false; - uint8_t ctrl1_port_data = 0xff; - uint8_t ctrl2_port_data = 0xff; - - if (m_is_gamegear && !(m_cartslot->exists() && m_cartslot->get_sms_mode())) - { - m_io_ctrl_reg = data; - return; - } // Controller Port 1: // check if TR or TH are set to output (0). - if ((data & 0x03) != 0x03) + if ((data & 0x33) != (m_io_ctrl_reg & 0x33)) { - if (!(data & 0x01)) // TR set to output - { - ctrl1_port_data &= ~0x80 | (data << 3); - } - if (!(data & 0x02)) // TH set to output - { - ctrl1_port_data &= ~0x40 | (data << 1); - } - if (!m_is_gamegear) - m_port_ctrl1->port_w(ctrl1_port_data); + m_port_ctrl1->out_w(((BIT(data, 4, 2) | BIT(data, 0, 2)) << 5) | 0x1f, BIT(~data, 0, 2) << 5); } - // check if TH is set to input (1). - if (data & 0x02) - { - if (!m_is_gamegear) - ctrl1_port_data &= ~0x40 | m_port_ctrl1->port_r(); - // check if TH input level is high (1) and was output/low (0) - if ((ctrl1_port_data & 0x40) && !(m_io_ctrl_reg & 0x22)) - latch_hcount = true; - } + // check if TH input level is high (1) and was output/low (0) + if ((data & 0x02) && !(m_io_ctrl_reg & 0x22) && m_ctrl1_th_state) + latch_hcount = true; // Controller Port 2: // check if TR or TH are set to output (0). - if ((data & 0x0c) != 0x0c) + if ((data & 0xcc) != (m_io_ctrl_reg & 0xcc)) { - if (!(data & 0x04)) // TR set to output - { - ctrl2_port_data &= ~0x80 | (data << 1); - } - if (!(data & 0x08)) // TH set to output - { - ctrl2_port_data &= ~0x40 | (data >> 1); - } - if (!m_is_gamegear) - m_port_ctrl2->port_w(ctrl2_port_data); - else - m_port_gg_ext->port_w(ctrl2_port_data); + m_port_ctrl2->out_w(((BIT(data, 6, 2) | BIT(data, 2, 2)) << 5) | 0x1f, BIT(~data, 2, 2) << 5); } - // check if TH is set to input (1). - if (data & 0x08) - { - if (!m_is_gamegear) - ctrl2_port_data &= ~0x40 | m_port_ctrl2->port_r(); - else - ctrl2_port_data &= ~0x40 | m_port_gg_ext->port_r(); - // check if TH input level is high (1) and was output/low (0) - if ((ctrl2_port_data & 0x40) && !(m_io_ctrl_reg & 0x88)) - latch_hcount = true; - } + // check if TH input level is high (1) and was output/low (0) + if ((data & 0x08) && !(m_io_ctrl_reg & 0x88) && m_ctrl2_th_state) + latch_hcount = true; if (latch_hcount) - { m_vdp->hcount_latch(); - } + m_io_ctrl_reg = data; } @@ -314,26 +244,10 @@ uint8_t sms_state::sms_input_port_dc_r() { - if (m_is_mark_iii) - { - sms_get_inputs(); - return m_port_dc_reg; - } - - if (m_is_gamegear) - { - // If SMS mode is disabled, just return the data read from the - // input port. Its mapped port bits match the bits of register $dc. - if (!(m_cartslot->exists() && m_cartslot->get_sms_mode())) - return m_port_gg_dc->read(); - } - else - { - // Return if the I/O chip is disabled (1). This check isn't performed - // for the Game Gear because has no effect on it, even in SMS mode. - if (m_mem_ctrl_reg & IO_CHIP) - return 0xff; - } + // Return if the I/O chip is disabled (1). This check isn't performed + // for the Game Gear because has no effect on it, even in SMS mode. + if (m_mem_ctrl_reg & IO_CHIP) + return 0xff; sms_get_inputs(); @@ -361,24 +275,10 @@ uint8_t sms_state::sms_input_port_dd_r() { - if (m_is_mark_iii) - { - sms_get_inputs(); - return m_port_dd_reg; - } - - if (m_is_gamegear) - { - if (!(m_cartslot->exists() && m_cartslot->get_sms_mode())) - return 0xff; - } - else - { - // Return if the I/O chip is disabled (1). This check isn't performed - // for the Game Gear because has no effect on it, even in SMS mode. - if (m_mem_ctrl_reg & IO_CHIP) - return 0xff; - } + // Return if the I/O chip is disabled (1). This check isn't performed + // for the Game Gear because has no effect on it, even in SMS mode. + if (m_mem_ctrl_reg & IO_CHIP) + return 0xff; sms_get_inputs(); @@ -398,14 +298,11 @@ // Check if TH of controller port 1 is set to output (0) if (!(m_io_ctrl_reg & 0x02)) { - if (m_ioctrl_region_is_japan) - { - m_port_dd_reg &= ~0x40; - } - else + m_port_dd_reg &= ~0x40; + if (!m_ioctrl_region_is_japan) { // Read TH state set through IO control port - m_port_dd_reg &= ~0x40 | ((m_io_ctrl_reg & 0x20) << 1); + m_port_dd_reg |= (m_io_ctrl_reg & 0x20) << 1; } } else // TH set to input (1) @@ -422,14 +319,11 @@ // Check if TH of controller port 2 is set to output (0) if (!(m_io_ctrl_reg & 0x08)) { - if (m_ioctrl_region_is_japan) - { - m_port_dd_reg &= ~0x80; - } - else + m_port_dd_reg &= ~0x80; + if (!m_ioctrl_region_is_japan) { // Read TH state set through IO control port - m_port_dd_reg &= ~0x80 | (m_io_ctrl_reg & 0x80); + m_port_dd_reg |= m_io_ctrl_reg & 0x80; } } else // TH set to input (1) @@ -528,32 +422,77 @@ } -void gamegear_state::gg_psg_stereo_w(uint8_t data) +void gamegear_state::gg_io_control_w(uint8_t data) { - if (m_cartslot->exists() && m_cartslot->get_sms_mode()) - return; + // Only used in SMS mode + // TODO: confirm behaviour + + m_gg_ioport->data_w(0x9f | (BIT(data, 6, 2) << 5)); + m_gg_ioport->ctrl_w(0x9f | (BIT(data, 2, 2) << 5)); - m_vdp->psg_stereo_w(data); + bool const latch_hcount1 = (data & 0x02) && !(m_io_ctrl_reg & 0x22); + bool const latch_hcount2 = (data & 0x08) && !(m_io_ctrl_reg & 0x88) && m_ctrl2_th_state; + + if (latch_hcount1 || latch_hcount2) + m_vdp->hcount_latch(); + + m_io_ctrl_reg = data; } uint8_t gamegear_state::gg_input_port_00_r() { + // bit 6 is NJAP (0=domestic/1=overseas); bit 7 is STT (START button) + uint8_t data = (m_ioctrl_region_is_japan ? 0x00 : 0x40) | (m_port_start->read() & 0x80); + + // According to GG official docs, bits 0-4 are meaningless and bit 5 + // is NNTS (0=NTSC, 1=PAL). All games run in NTSC and no original GG + // allows the user to change that mode, but there are NTSC and PAL + // versions of the TV Tuner. + + //logerror("port $00 read, val: %02x, pc: %04x\n", data, activecpu_get_pc()); + return data; +} + + +uint8_t gamegear_state::gg_input_port_dc_r() +{ + // TODO: does setting TL/TR to output in SMS mode affect this? + return (m_port_gg_dc->read() & 0x3f) | (m_gg_ioport->data_r() << 6); +} + + +uint8_t gamegear_state::gg_input_port_dd_r() +{ + uint8_t const ext = m_gg_ioport->data_r(); + uint8_t result = 0x70 | ((ext >> 2) & 0x0f) | (BIT(ext, 6) << 7); + if (m_cartslot->exists() && m_cartslot->get_sms_mode()) - return 0xff; - else { - // bit 6 is NJAP (0=domestic/1=overseas); bit 7 is STT (START button) - uint8_t data = (m_ioctrl_region_is_japan ? 0x00 : 0x40) | (m_port_start->read() & 0x80); + // TODO: confirm behaviour in SMS mode - // According to GG official docs, bits 0-4 are meaningless and bit 5 - // is NNTS (0=NTSC, 1=PAL). All games run in NTSC and no original GG - // allows the user to change that mode, but there are NTSC and PAL - // versions of the TV Tuner. + if (!(m_io_ctrl_reg & 0x02)) + { + result &= ~0x40; + if (!m_ioctrl_region_is_japan) + result |= BIT(m_io_ctrl_reg, 5) << 6; + } - //logerror("port $00 read, val: %02x, pc: %04x\n", data, activecpu_get_pc()); - return data; + if (!(m_io_ctrl_reg & 0x08)) + { + if (m_ioctrl_region_is_japan) + result &= ~0x80; + } + else if (m_ctrl2_th_latch) + { + if (m_vdp->hcount_latched()) + result &= ~0x80; + + m_ctrl2_th_latch = 0; + } } + + return result; } @@ -793,9 +732,9 @@ } -uint8_t sms_state::sg1000m3_peripheral_r(offs_t offset) +uint8_t sg1000m3_state::sg1000m3_peripheral_r(offs_t offset) { - bool joy_ports_disabled = m_sgexpslot->is_readable(offset); + bool const joy_ports_disabled = m_sgexpslot->is_readable(offset); if (joy_ports_disabled) { @@ -803,79 +742,21 @@ } else { + sms_get_inputs(); if (offset & 0x01) - return sms_input_port_dd_r(); + return m_port_dd_reg; else - return sms_input_port_dc_r(); + return m_port_dc_reg; } } -void sms_state::sg1000m3_peripheral_w(offs_t offset, uint8_t data) +void sg1000m3_state::sg1000m3_peripheral_w(offs_t offset, uint8_t data) { - bool joy_ports_disabled = m_sgexpslot->is_writeable(offset); + bool const joy_ports_disabled = m_sgexpslot->is_writeable(offset); if (joy_ports_disabled) - { m_sgexpslot->write(offset, data); - } -} - - -void gamegear_state::gg_sio_w(offs_t offset, uint8_t data) -{ - if (m_cartslot->exists() && m_cartslot->get_sms_mode()) - return; - - logerror("*** write %02X to SIO register #%d\n", data, offset); - - m_gg_sio[offset & 0x07] = data; - switch (offset & 7) - { - case 0x00: /* Parallel Data */ - break; - - case 0x01: /* Data Direction / NMI Enable */ - break; - - case 0x02: /* Serial Output */ - break; - - case 0x03: /* Serial Input */ - break; - - case 0x04: /* Serial Control / Status */ - break; - } -} - - -uint8_t gamegear_state::gg_sio_r(offs_t offset) -{ - if (m_cartslot->exists() && m_cartslot->get_sms_mode()) - return 0xff; - - logerror("*** read SIO register #%d\n", offset); - - switch (offset & 7) - { - case 0x00: /* Parallel Data */ - break; - - case 0x01: /* Data Direction / NMI Enable */ - break; - - case 0x02: /* Serial Output */ - break; - - case 0x03: /* Serial Input */ - break; - - case 0x04: /* Serial Control / Status */ - break; - } - - return m_gg_sio[offset]; } @@ -1009,6 +890,9 @@ void sms_state::machine_start() { + m_ctrl1_th_state = 1; + m_ctrl2_th_state = 1; + // turn on the Power LED if (m_has_pwr_led) { @@ -1080,7 +964,7 @@ void smssdisp_state::machine_start() { - sms_state::machine_start(); + sms1_state::machine_start(); save_item(NAME(m_store_control)); save_item(NAME(m_store_cart_selection_data)); @@ -1091,7 +975,6 @@ sms_state::machine_start(); save_item(NAME(m_gg_paused)); - save_item(NAME(m_gg_sio)); // The game Ecco requires SP to be initialized, so, to run on a BIOS-less Game // Gear, probably a custom chip like the 315-5378 does the initialization, as @@ -1124,8 +1007,6 @@ m_io_ctrl_reg = 0xff; m_ctrl1_th_latch = 0; m_ctrl2_th_latch = 0; - m_ctrl1_th_state = 1; - m_ctrl2_th_state = 1; } setup_bios(); @@ -1138,20 +1019,30 @@ m_store_cart_selection_data = 0; store_select_cart(m_store_cart_selection_data); - sms_state::machine_reset(); + sms1_state::machine_reset(); +} + +void sg1000m3_state::machine_reset() +{ + sms1_state::machine_reset(); + + // controller port pin 7 is tied to ground on the Mark III + m_port_ctrl1->out_w(0x3f, 0x40); + m_port_ctrl2->out_w(0x3f, 0x40); } void gamegear_state::machine_reset() { + // TODO: default with SMS mode pin floating is SMS compatibility mode if (m_cartslot->exists() && m_cartslot->get_sms_mode()) + { m_vdp->set_sega315_5124_compatibility_mode(true); - - /* Initialize SIO stuff for GG */ - m_gg_sio[0] = 0x7f; - m_gg_sio[1] = 0xff; - m_gg_sio[2] = 0x00; - m_gg_sio[3] = 0xff; - m_gg_sio[4] = 0x00; + m_io_view.select(1); + } + else + { + m_io_view.select(0); + } sms_state::machine_reset(); } diff -Nru mame-0.250+dfsg.1/src/mame/sega/stv.cpp mame-0.251+dfsg.1/src/mame/sega/stv.cpp --- mame-0.250+dfsg.1/src/mame/sega/stv.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/stv.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -3071,6 +3071,30 @@ ROM_LOAD( "nclubv3.nv", 0x0000, 0x0080, CRC(9122a9e9) SHA1(5318994905e005567709c41449547c545182bece) ) ROM_END +ROM_START( nclubdis ) // 837-12765-11 sticker + STV_BIOS + + ROM_REGION32_BE( 0x3000000, "cart", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "ic22", 0x0200000, 0x0200000, BAD_DUMP CRC(cfd5eb54) SHA1(878195c70ad931d3015d497d2739a0867ff83cf7) ) // tests bad but believed good, flagged so it gets double checked if possible + ROM_LOAD16_WORD_SWAP( "ic24", 0x0400000, 0x0200000, CRC(943682eb) SHA1(ad41625244509affe7b6d6caffef58bb7bf75b72) ) + ROM_LOAD16_WORD_SWAP( "ic26", 0x0600000, 0x0200000, CRC(a17bd53a) SHA1(e05079e3bfc7187b70ddc4b48de9e5ffcb19e473) ) + ROM_LOAD16_WORD_SWAP( "ic28", 0x0800000, 0x0200000, CRC(9a597bff) SHA1(8cc265a89bbc42d4e6d55e23a4ed87fc1224c9dc) ) + ROM_LOAD16_WORD_SWAP( "ic30", 0x0a00000, 0x0200000, CRC(3eb020f6) SHA1(6b87a6e7ab9eb820b7661fa6ea8c29bf8ead820d) ) + ROM_LOAD16_WORD_SWAP( "ic32", 0x0c00000, 0x0200000, CRC(ac26d375) SHA1(a01125eb4bca7823eb12d4e03d93612e09dcddda) ) + ROM_LOAD16_WORD_SWAP( "ic34", 0x0e00000, 0x0200000, CRC(e157cd99) SHA1(52c976540157cc63c599ee34ec5bade7e489599d) ) // 111xxxxxxxxxxxxxxxxxx = 0xFF + ROM_LOAD16_WORD_SWAP( "ic36", 0x1000000, 0x0200000, CRC(9a4109e5) SHA1(ba59caac5f5a80fc52c507d8a47f322a380aa9a1) ) // FIXED BITS (11111111), but present + ROM_LOAD16_WORD_SWAP( "ic23", 0x1200000, 0x0200000, CRC(9a4109e5) SHA1(ba59caac5f5a80fc52c507d8a47f322a380aa9a1) ) // FIXED BITS (11111111), but present + ROM_LOAD16_WORD_SWAP( "ic25", 0x1400000, 0x0200000, CRC(9a4109e5) SHA1(ba59caac5f5a80fc52c507d8a47f322a380aa9a1) ) // FIXED BITS (11111111), but present + // ic27, ic29, ic31, ic33, ic35, ic37 not populated + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player + ROM_LOAD( "nclubdis.nv", 0x0000, 0x0080, CRC(7efc9c6a) SHA1(3d44940b7497b07151908a0a6bc2809c7e15f4a8) ) + + ROM_REGION( 0x400, "plds", ROMREGION_ERASE00 ) + ROM_LOAD( "315-6055.ic12", 0x000, 0x117, NO_DUMP ) // PALCE16V8H-10JC on the front side of the cart + ROM_LOAD( "315-6056-01.ic13", 0x200, 0x117, NO_DUMP ) // PALCE16V8-10JC on the back side of the cart +ROM_END + ROM_START( techbowl ) // set to 1p STV_BIOS @@ -3897,7 +3921,7 @@ GAME( 1997, prc29au, stvbios, stv, stv, stvpc_state, init_stv, ROT0, "Atlus", "Print Club 2 Vol. 9 Autumn (J V1.100)", MACHINE_NOT_WORKING ) // internal string 97AUTUMN, no date code! (all 0) GAME( 1997, prc297wi, stvbios, stv, stv, stvpc_state, init_stv, ROT0, "Atlus", "Print Club 2 '97 Winter Ver (J 971017 V1.100, set 1)", MACHINE_NOT_WORKING ) // internal string is '97WINTER' GAME( 1997, prc297wia, prc297wi,stv, stv, stvpc_state, init_stv, ROT0, "Atlus", "Print Club 2 '97 Winter Ver (J 971017 V1.100, set 2)", MACHINE_NOT_WORKING ) // different program revision, same date code, clearly didn't get updated properly -GAME( 1998, prc298sp, stvbios, stv, stv, stvpc_state, init_stv, ROT0, "Atlus", "Print Club 2 '98 Spring Ver (J 971017 V1.100)", MACHINE_NOT_WORKING ) // again, date doesn't appear to have bene updated, this should be early 98 +GAME( 1998, prc298sp, stvbios, stv, stv, stvpc_state, init_stv, ROT0, "Atlus", "Print Club 2 '98 Spring Ver (J 971017 V1.100)", MACHINE_NOT_WORKING ) // again, date doesn't appear to have been updated, this should be early 98 GAME( 1998, prc298su, stvbios, stv, stv, stvpc_state, init_stv, ROT0, "Atlus", "Print Club 2 '98 Summer Ver (J 980603 V1.100)", MACHINE_NOT_WORKING ) // GAME( 1998, prc298au, stvbios, stv, stv, stvpc_state, init_stv, ROT0, "Atlus", "Print Club 2 '98 Autumn Ver (J 980827 V1.000)", MACHINE_NOT_WORKING ) GAME( 2000, prc2ksu, stvbios, stv, stv, stvpc_state, init_stv, ROT0, "Atlus", "Print Club 2 2000 Summer (J 000509 V1.000)", MACHINE_NOT_WORKING ) // internal string 2000_SUMMER @@ -3917,9 +3941,9 @@ GAME( 1998, stress, stvbios, stv, stv, stvpc_state, init_stv, ROT0, "Sega", "Stress Busters (J 981020 V1.000)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1996, nameclub, stvbios, stv_5838, stv, stvpc_state, init_decathlt_nokey, ROT0, "Sega", "Name Club (J 960315 V1.000)", MACHINE_NOT_WORKING ) // uses the same type of protection as decathlete!! -GAME( 1996, nclubv2, stvbios, stv_5838, stv, stvpc_state, init_decathlt_nokey, ROT0, "Sega", "Name Club Ver.2 (J 960315 V1.000)", MACHINE_NOT_WORKING ) // ^ (has the same datecode as nameclub, probably incorrect unless both were released today) +GAME( 1996, nclubv2, stvbios, stv_5838, stv, stvpc_state, init_decathlt_nokey, ROT0, "Sega", "Name Club Ver.2 (J 960315 V1.000)", MACHINE_NOT_WORKING ) // ^ (has the same datecode as nameclub, probably incorrect unless both were released the same day) GAME( 1997, nclubv3, stvbios, stv, stv, stvpc_state, init_nameclv3, ROT0, "Sega", "Name Club Ver.3 (J 970723 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // no protection - +GAME( 1998, nclubdis, stvbios, stv, stv, stvpc_state, init_stv, ROT0, "Sega", "Name Club Disney (J 980614 V1.000)", MACHINE_NOT_WORKING ) // errors due to missing security card diff -Nru mame-0.250+dfsg.1/src/mame/sega/turbo.cpp mame-0.251+dfsg.1/src/mame/sega/turbo.cpp --- mame-0.250+dfsg.1/src/mame/sega/turbo.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/turbo.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -8,9 +8,12 @@ and Aaron Giles Games supported: - * Turbo - * Subroc 3D - * Buck Rogers: Planet of Zoom + - Turbo + - Subroc 3D + - Buck Rogers: Planet of Zoom + + BTANB: + - subroc3d 'seafoam' appears as black spots on top of some sprites ************************************************************************** TURBO @@ -110,7 +113,7 @@ Here is a complete list of the ROMs: Turbo ROMLIST - Frank Palazzolo - Name Loc Function + Name Loc Function ----------------------------------------------------------------------------- Images Acquired: EPR1262,3,4 IC76, IC89, IC103 @@ -130,19 +133,19 @@ EPR1246-1258 Sprite ROMS EPR1288-1300 - PR-1114 IC13 Color 1 (road, etc.) - PR-1115 IC18 Road gfx - PR-1116 IC20 Crash (collision detection?) - PR-1117 IC21 Color 2 (road, etc.) - PR-1118 IC99 256x4 Character Color PROM - PR-1119 IC50 512x8 Vertical Timing PROM - PR-1120 IC62 Horizontal Timing PROM - PR-1121 IC29 Color PROM - PR-1122 IC11 Pattern 1 - PR-1123 IC21 Pattern 2 + PR-1114 IC13 Color 1 (road, etc.) + PR-1115 IC18 Road gfx + PR-1116 IC20 Crash (collision detection?) + PR-1117 IC21 Color 2 (road, etc.) + PR-1118 IC99 256x4 Character Color PROM + PR-1119 IC50 512x8 Vertical Timing PROM + PR-1120 IC62 Horizontal Timing PROM + PR-1121 IC29 Color PROM + PR-1122 IC11 Pattern 1 + PR-1123 IC21 Pattern 2 - PA-06R IC22 Mathbox Timing PAL - PA-06L IC90 Address Decode PAL + PA-06R IC22 Mathbox Timing PAL + PA-06L IC90 Address Decode PAL **************************************************************************/ @@ -214,6 +217,8 @@ { turbo_base_state::machine_start(); + m_shutter.resolve(); + save_item(NAME(m_col)); save_item(NAME(m_ply)); save_item(NAME(m_flip)); @@ -353,9 +358,14 @@ machine().bookkeeping().coin_counter_w(0, data & 0x01); machine().bookkeeping().coin_counter_w(1, data & 0x02); m_lamp = BIT(data, 2); - m_flip = (data >> 4) & 1; + m_flip = BIT(data, 4); + + // flip also goes to 3D scope shutter sync + // (it's a motor to 2 rotating discs, half painted black) + m_shutter = BIT(data, 4); } + /************************************* * * Buck Rogers PPI handling @@ -420,9 +430,24 @@ { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67,0x58,0x4c,0x62,0x69,0x78,0x00 }; m_digits[m_i8279_scanlines * 2] = ls48_map[data & 0x0f]; - m_digits[m_i8279_scanlines * 2 + 1] = ls48_map[data>>4]; + m_digits[m_i8279_scanlines * 2 + 1] = ls48_map[data >> 4]; +} + + +/************************************* + * + * Shared pedal reading + * + *************************************/ + +CUSTOM_INPUT_MEMBER(turbo_base_state::pedal_r) +{ + // inverted 2-bit Gray code from a pair of optos in mechanical pedal + uint8_t pedal = m_pedal->read(); + return (pedal >> 6) ^ (pedal >> 7) ^ 0x03; } + /************************************* * * Misc Turbo inputs/outputs @@ -432,7 +457,7 @@ uint8_t turbo_state::collision_r() { m_screen->update_partial(m_screen->vpos()); - return m_dsw3->read() | (m_collision & 15); + return (m_dsw[2]->read() & 0xf0) | (m_collision & 0xf); } @@ -483,40 +508,26 @@ uint8_t buckrog_state::subcpu_command_r() { // assert ACK - m_i8255[0]->pc6_w(CLEAR_LINE); + if (!machine().side_effects_disabled()) + m_i8255[0]->pc6_w(CLEAR_LINE); + return m_command; } uint8_t buckrog_state::port_2_r() { - int inp1 = m_dsw[0]->read(); - int inp2 = m_dsw[1]->read(); - - return (((inp2 >> 6) & 1) << 7) | - (((inp2 >> 4) & 1) << 6) | - (((inp2 >> 3) & 1) << 5) | - (((inp2 >> 0) & 1) << 4) | - (((inp1 >> 6) & 1) << 3) | - (((inp1 >> 4) & 1) << 2) | - (((inp1 >> 3) & 1) << 1) | - (((inp1 >> 0) & 1) << 0); + uint8_t inp1 = bitswap<4>(m_dsw[0]->read(), 6, 4, 3, 0); + uint8_t inp2 = bitswap<4>(m_dsw[1]->read(), 6, 4, 3, 0); + return inp1 | inp2 << 4; } uint8_t buckrog_state::port_3_r() { - int inp1 = m_dsw[0]->read(); - int inp2 = m_dsw[1]->read(); - - return (((inp2 >> 7) & 1) << 7) | - (((inp2 >> 5) & 1) << 6) | - (((inp2 >> 2) & 1) << 5) | - (((inp2 >> 1) & 1) << 4) | - (((inp1 >> 7) & 1) << 3) | - (((inp1 >> 5) & 1) << 2) | - (((inp1 >> 2) & 1) << 1) | - (((inp1 >> 1) & 1) << 0); + uint8_t inp1 = bitswap<4>(m_dsw[0]->read(), 7, 5, 2, 1); + uint8_t inp2 = bitswap<4>(m_dsw[1]->read(), 7, 5, 2, 1); + return inp1 | inp2 << 4; } @@ -535,13 +546,13 @@ uint8_t turbo_state::spriteram_r(offs_t offset) { offset = (offset & 0x07) | ((offset & 0xf0) >> 1); - return m_alt_spriteram[offset]; + return m_spriteram[offset]; } void turbo_state::spriteram_w(offs_t offset, uint8_t data) { offset = (offset & 0x07) | ((offset & 0xf0) >> 1); - m_alt_spriteram[offset] = data; + m_spriteram[offset] = data; } @@ -566,7 +577,7 @@ map(0xfa00, 0xfa03).mirror(0x00fc).rw(m_i8255[2], FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xfb00, 0xfb03).mirror(0x00fc).rw(m_i8255[3], FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xfc00, 0xfc01).mirror(0x00fe).rw("i8279", FUNC(i8279_device::read), FUNC(i8279_device::write)); - map(0xfd00, 0xfdff).portr("INPUT"); + map(0xfd00, 0xfdff).portr("IN0"); map(0xfe00, 0xfeff).r(FUNC(turbo_state::collision_r)); } @@ -581,15 +592,15 @@ void subroc3d_state::prg_map(address_map &map) { map(0x0000, 0x9fff).rom(); - map(0xa000, 0xa3ff).ram().share(m_sprite_position); // CONT RAM - map(0xa400, 0xa7ff).ram().share(m_spriteram); // CONT RAM + map(0xa000, 0xa3ff).ram().share(m_sprite_position); // CONT RAM + map(0xa400, 0xa7ff).ram().share(m_spriteram); // CONT RAM map(0xa800, 0xa800).mirror(0x07fc).portr("IN0"); // INPUT 253 map(0xa801, 0xa801).mirror(0x07fc).portr("IN1"); // INPUT 253 map(0xa802, 0xa802).mirror(0x07fc).portr("DSW2"); // INPUT 253 map(0xa803, 0xa803).mirror(0x07fc).portr("DSW3"); // INPUT 253 - map(0xb000, 0xb7ff).ram(); // SCRATCH - map(0xb800, 0xbfff); // HANDLE CL - map(0xe000, 0xe7ff).ram().w(FUNC(subroc3d_state::videoram_w)).share(m_videoram); // FIX PAGE + map(0xb000, 0xb7ff).ram(); // SCRATCH + map(0xb800, 0xbfff); // HANDLE CL + map(0xe000, 0xe7ff).ram().w(FUNC(subroc3d_state::videoram_w)).share(m_videoram); // FIX PAGE map(0xe800, 0xe803).mirror(0x07fc).rw(m_i8255[0], FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xf000, 0xf003).mirror(0x07fc).rw(m_i8255[1], FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xf800, 0xf801).mirror(0x07fe).rw("i8279", FUNC(i8279_device::read), FUNC(i8279_device::write)); @@ -606,18 +617,18 @@ void buckrog_state::main_prg_map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0xc000, 0xc7ff).ram().w(FUNC(buckrog_state::videoram_w)).share(m_videoram); // FIX PAGE - map(0xc800, 0xc803).mirror(0x07fc).r(m_i8255[0], FUNC(i8255_device::read)).w(FUNC(buckrog_state::i8255_0_w)); // 8255 - map(0xd000, 0xd003).mirror(0x07fc).rw(m_i8255[1], FUNC(i8255_device::read), FUNC(i8255_device::write)); // 8255 + map(0xc000, 0xc7ff).ram().w(FUNC(buckrog_state::videoram_w)).share(m_videoram); // FIX PAGE + map(0xc800, 0xc803).mirror(0x07fc).r(m_i8255[0], FUNC(i8255_device::read)).w(FUNC(buckrog_state::i8255_0_w)); + map(0xd000, 0xd003).mirror(0x07fc).rw(m_i8255[1], FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xd800, 0xd801).mirror(0x07fe).rw("i8279", FUNC(i8279_device::read), FUNC(i8279_device::write)); - map(0xe000, 0xe3ff).ram().share(m_sprite_position); // CONT RAM + map(0xe000, 0xe3ff).ram().share(m_sprite_position); // CONT RAM map(0xe400, 0xe7ff).ram().share(m_spriteram); // CONT RAM - map(0xe800, 0xe800).mirror(0x07fc).portr("IN0"); // INPUT + map(0xe800, 0xe800).mirror(0x07fc).portr("IN0"); // INPUT map(0xe801, 0xe801).mirror(0x07fc).portr("IN1"); map(0xe802, 0xe802).mirror(0x07fc).r(FUNC(buckrog_state::port_2_r)); map(0xe803, 0xe803).mirror(0x07fc).r(FUNC(buckrog_state::port_3_r)); map(0xf000, 0xf000); - map(0xf800, 0xffff).ram(); // SCRATCH + map(0xf800, 0xffff).ram(); // SCRATCH } void buckrog_state::decrypted_opcodes_map(address_map &map) @@ -648,10 +659,9 @@ *************************************/ static INPUT_PORTS_START( turbo ) - PORT_START("INPUT") // IN0 - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) // ACCEL B - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) // ACCEL A - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_TOGGLE // SHIFT + PORT_START("IN0") // IN0 + PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(turbo_base_state, pedal_r) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Gear Shift") PORT_TOGGLE PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_SERVICE_NO_TOGGLE( 0x10, IP_ACTIVE_LOW ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) @@ -659,20 +669,20 @@ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_START("DSW1") // DSW1 - PORT_DIPNAME( 0x03, 0x03, "Car On Extended Play" ) PORT_DIPLOCATION("SW1:1,2") - PORT_DIPSETTING( 0x00, "1" ) - PORT_DIPSETTING( 0x01, "2" ) - PORT_DIPSETTING( 0x02, "3" ) - PORT_DIPSETTING( 0x03, "4" ) + PORT_DIPNAME( 0x03, 0x03, "Max Lives During Extended Play" ) PORT_DIPLOCATION("SW1:1,2") + PORT_DIPSETTING( 0x00, "2" ) + PORT_DIPSETTING( 0x01, "3" ) + PORT_DIPSETTING( 0x02, "4" ) + PORT_DIPSETTING( 0x03, "5" ) PORT_DIPNAME( 0x04, 0x00, DEF_STR( Game_Time ) ) PORT_DIPLOCATION("SW1:3") PORT_DIPSETTING( 0x04, "Fixed (55 sec)" ) PORT_DIPSETTING( 0x00, "Adjustable" ) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:4") PORT_DIPSETTING( 0x08, DEF_STR( Easy )) PORT_DIPSETTING( 0x00, DEF_STR( Hard )) - PORT_DIPNAME( 0x10, 0x10, "Game Mode" ) PORT_DIPLOCATION("SW1:5") - PORT_DIPSETTING( 0x00, "No Collisions (cheat)" ) - PORT_DIPSETTING( 0x10, DEF_STR( Normal ) ) + PORT_DIPNAME( 0x10, 0x10, "Collisions" ) PORT_DIPLOCATION("SW1:5") + PORT_DIPSETTING( 0x00, "Off (Cheat)" ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) PORT_DIPNAME( 0x20, 0x20, "Initial Entry" ) PORT_DIPLOCATION("SW1:6") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x20, DEF_STR( On )) @@ -716,15 +726,18 @@ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:2") PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, "Tachometer" ) PORT_DIPLOCATION("SW3:3") + PORT_DIPNAME( 0x40, 0x00, "Tachometer" ) PORT_DIPLOCATION("SW3:3") PORT_DIPSETTING( 0x40, "Analog (Meter)") PORT_DIPSETTING( 0x00, "Digital (LED)") - PORT_DIPNAME( 0x80, 0x80, "Sound System" ) PORT_DIPLOCATION("SW3:4") + PORT_DIPNAME( 0x80, 0x00, "Sound System" ) PORT_DIPLOCATION("SW3:4") PORT_DIPSETTING( 0x80, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, "Cockpit") - PORT_START("DIAL") // IN0 - PORT_BIT( 0xff, 0, IPT_DIAL ) PORT_SENSITIVITY(10) PORT_KEYDELTA(30) + PORT_START("DIAL") + PORT_BIT( 0xff, 0, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) + + PORT_START("PEDAL") + PORT_BIT( 0xff, 0, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) // this is actually a variable resistor PORT_START("VR1") @@ -738,12 +751,12 @@ static INPUT_PORTS_START( subroc3d ) PORT_START("IN0") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_16WAY // buttons on right side of periscope + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_16WAY // " PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) // pull handle on left side of periscope + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) // push " PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_SERVICE_NO_TOGGLE( 0x10, 0x10 ) @@ -751,6 +764,9 @@ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_START("DSW1") // DSW1 // Unused + PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_START("DSW2") // DSW2 PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coin_A )) PORT_DIPLOCATION("SW2:1,2,3") PORT_DIPSETTING( 0x07, DEF_STR( 5C_1C ) ) @@ -800,16 +816,16 @@ PORT_DIPNAME( 0x80, 0x80, "Game" ) PORT_DIPLOCATION("SW3:8") PORT_DIPSETTING( 0x00, "Endless" ) PORT_DIPSETTING( 0x80, DEF_STR( Normal ) ) - - PORT_START("DSW1") // DSW1 // Unused INPUT_PORTS_END static INPUT_PORTS_START( buckrog ) PORT_START("IN0") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 ) // Accel Hi - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) // Accel Lo + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW2", 0x80, EQUALS, 0x00) // cockpit + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) PORT_CONDITION("DSW2", 0x80, EQUALS, 0x80) // upright + PORT_BIT( 0x30, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CONDITION("DSW2", 0x02, EQUALS, 0x00) PORT_CUSTOM_MEMBER(turbo_base_state, pedal_r) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CONDITION("DSW2", 0x02, EQUALS, 0x02) // fast + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CONDITION("DSW2", 0x02, EQUALS, 0x02) // slow PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) @@ -850,8 +866,8 @@ PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("DSW2") // DSW2 - PORT_DIPNAME( 0x01, 0x00, "Collisions" ) PORT_DIPLOCATION("SW2:1") - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPNAME( 0x01, 0x00, "Collisions" ) PORT_DIPLOCATION("SW2:1") // manual calls it collisions, but actually it's infinite lives + PORT_DIPSETTING( 0x01, "Off (Cheat)" ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x02, 0x02, "Accel by" ) PORT_DIPLOCATION("SW2:2") PORT_DIPSETTING( 0x00, "Pedal" ) @@ -870,9 +886,12 @@ PORT_DIPSETTING( 0x20, "4" ) PORT_DIPSETTING( 0x40, "5" ) PORT_DIPSETTING( 0x60, "6" ) - PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:8") - PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x80, "Cockpit" ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:8") + PORT_DIPSETTING( 0x80, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00, "Cockpit" ) + + PORT_START("PEDAL") + PORT_BIT( 0xff, 0, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_CONDITION("DSW2", 0x02, EQUALS, 0x00) INPUT_PORTS_END @@ -923,9 +942,9 @@ m_i8255[3]->out_pc_callback().set(FUNC(turbo_state::ppi3c_w)); i8279_device &kbdc(I8279(config, "i8279", MASTER_CLOCK/16)); // clock = H1 - kbdc.out_sl_callback().set(FUNC(turbo_state::scanlines_w)); // scan SL lines - kbdc.out_disp_callback().set(FUNC(turbo_state::digit_w)); // display A&B - kbdc.in_rl_callback().set_ioport("DSW1"); // kbd RL lines + kbdc.out_sl_callback().set(FUNC(turbo_state::scanlines_w)); // scan SL lines + kbdc.out_disp_callback().set(FUNC(turbo_state::digit_w)); // display A&B + kbdc.in_rl_callback().set_ioport("DSW1"); // kbd RL lines ls259_device &outlatch(LS259(config, "outlatch")); // IC125 - outputs passed through CN5 outlatch.q_out_cb<0>().set(FUNC(turbo_state::coin_meter_1_w)); @@ -964,10 +983,10 @@ m_i8255[1]->out_pb_callback().set(FUNC(subroc3d_state::sound_b_w)); m_i8255[1]->out_pc_callback().set(FUNC(subroc3d_state::sound_c_w)); - i8279_device &kbdc(I8279(config, "i8279", MASTER_CLOCK/16)); // unknown clock + i8279_device &kbdc(I8279(config, "i8279", MASTER_CLOCK/16)); // unknown clock kbdc.out_sl_callback().set(FUNC(subroc3d_state::scanlines_w)); // scan SL lines kbdc.out_disp_callback().set(FUNC(subroc3d_state::digit_w)); // display A&B - kbdc.in_rl_callback().set_ioport("DSW1"); // kbd RL lines + kbdc.in_rl_callback().set_ioport("DSW1"); // kbd RL lines // video hardware GFXDECODE(config, m_gfxdecode, "palette", gfx_turbo); @@ -1008,10 +1027,10 @@ m_i8255[1]->out_pb_callback().set(FUNC(buckrog_state::sound_b_w)); m_i8255[1]->out_pc_callback().set(FUNC(buckrog_state::ppi1c_w)); - i8279_device &kbdc(I8279(config, "i8279", MASTER_CLOCK/16)); // unknown clock + i8279_device &kbdc(I8279(config, "i8279", MASTER_CLOCK/16)); // unknown clock kbdc.out_sl_callback().set(FUNC(buckrog_state::scanlines_w)); // scan SL lines kbdc.out_disp_callback().set(FUNC(buckrog_state::digit_w)); // display A&B - kbdc.in_rl_callback().set_ioport("DSW1"); // kbd RL lines + kbdc.in_rl_callback().set_ioport("DSW1"); // kbd RL lines // video hardware GFXDECODE(config, m_gfxdecode, "palette", gfx_turbo); @@ -1048,6 +1067,7 @@ maincpu.set_decrypted_tag(":decrypted_opcodes"); } + /************************************* * * ROM definitions @@ -1804,10 +1824,12 @@ // 0x0800-0xbff // 0x4000-0x43ff // 0x4800-0x4bff - { 0x00,0x44,0x0c,0x48,0x00,0x44,0x0c,0x48, + { + 0x00,0x44,0x0c,0x48,0x00,0x44,0x0c,0x48, 0xa0,0xe4,0xac,0xe8,0xa0,0xe4,0xac,0xe8, 0x60,0x24,0x6c,0x28,0x60,0x24,0x6c,0x28, - 0xc0,0x84,0xcc,0x88,0xc0,0x84,0xcc,0x88 }, + 0xc0,0x84,0xcc,0x88,0xc0,0x84,0xcc,0x88 + }, // Table 1 */ // 0x0400-0x07ff @@ -1822,30 +1844,36 @@ // 0x4c00-0x4fff // 0x5400-0x57ff // 0x5c00-0x5fff - { 0x00,0x44,0x18,0x5c,0x14,0x50,0x0c,0x48, + { + 0x00,0x44,0x18,0x5c,0x14,0x50,0x0c,0x48, 0x28,0x6c,0x30,0x74,0x3c,0x78,0x24,0x60, 0x60,0x24,0x78,0x3c,0x74,0x30,0x6c,0x28, - 0x48,0x0c,0x50,0x14,0x5c,0x18,0x44,0x00 }, //0x00 --> 0x10 ? + 0x48,0x0c,0x50,0x14,0x5c,0x18,0x44,0x00 //0x00 --> 0x10 ? + }, // Table 2 */ // 0x1000-0x13ff // 0x1800-0x1bff // 0x5000-0x53ff // 0x5800-0x5bff - { 0x00,0x00,0x28,0x28,0x90,0x90,0xb8,0xb8, + { + 0x00,0x00,0x28,0x28,0x90,0x90,0xb8,0xb8, 0x28,0x28,0x00,0x00,0xb8,0xb8,0x90,0x90, 0x00,0x00,0x28,0x28,0x90,0x90,0xb8,0xb8, - 0x28,0x28,0x00,0x00,0xb8,0xb8,0x90,0x90 }, + 0x28,0x28,0x00,0x00,0xb8,0xb8,0x90,0x90 + }, // Table 3 */ // 0x2000-0x23ff // 0x2800-0x2bff // 0x3000-0x33ff // 0x3800-0x3bff - { 0x00,0x14,0x88,0x9c,0x30,0x24,0xb8,0xac, + { + 0x00,0x14,0x88,0x9c,0x30,0x24,0xb8,0xac, 0x24,0x30,0xac,0xb8,0x14,0x00,0x9c,0x88, 0x48,0x5c,0xc0,0xd4,0x78,0x6c,0xf0,0xe4, - 0x6c,0x78,0xe4,0xf0,0x5c,0x48,0xd4,0xc0 } + 0x6c,0x78,0xe4,0xf0,0x5c,0x48,0xd4,0xc0 + } }; static const int findtable[]= @@ -1883,23 +1911,25 @@ rom_decode(); } + + /************************************* * * Game drivers * *************************************/ -GAMEL( 1981, turbo, 0, turbo, turbo, turbo_state, empty_init, ROT270, "Sega", "Turbo (program 1513-1515)", MACHINE_IMPERFECT_SOUND , layout_turbo ) -GAMEL( 1981, turboa, turbo, turbo, turbo, turbo_state, init_turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1262-1264)", MACHINE_IMPERFECT_SOUND , layout_turbo ) -GAMEL( 1981, turbob, turbo, turbo, turbo, turbo_state, init_turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1363-1365 rev C)", MACHINE_IMPERFECT_SOUND , layout_turbo ) -GAMEL( 1981, turboc, turbo, turbo, turbo, turbo_state, init_turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1363-1365 rev B)", MACHINE_IMPERFECT_SOUND , layout_turbo ) -GAMEL( 1981, turbod, turbo, turbo, turbo, turbo_state, init_turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1363-1365 rev A)", MACHINE_IMPERFECT_SOUND , layout_turbo ) -GAMEL( 1981, turboe, turbo, turbo, turbo, turbo_state, init_turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1363-1365)", MACHINE_IMPERFECT_SOUND , layout_turbo ) // but still reports 1262-1264 in the test mode? -GAMEL( 1981, turbobl, turbo, turbo, turbo, turbo_state, empty_init, ROT270, "bootleg", "Indianapolis (bootleg of Turbo)", MACHINE_IMPERFECT_SOUND , layout_turbo ) // decrypted bootleg of a 1262-1264 set - -GAMEL( 1982, subroc3d, 0, subroc3d, subroc3d, subroc3d_state, empty_init, ORIENTATION_FLIP_X, "Sega", "Subroc-3D", MACHINE_IMPERFECT_SOUND , layout_subroc3d ) - -GAMEL( 1982, buckrog, 0, buckroge, buckrog, buckrog_state, empty_init, ROT0, "Sega", "Buck Rogers: Planet of Zoom", MACHINE_IMPERFECT_SOUND , layout_buckrog ) -GAMEL( 1982, buckrogn, buckrog, buckrogu, buckrog, buckrog_state, empty_init, ROT0, "Sega", "Buck Rogers: Planet of Zoom (not encrypted, set 1)", MACHINE_IMPERFECT_SOUND , layout_buckrog ) -GAMEL( 1982, buckrogn2, buckrog, buckrogu, buckrog, buckrog_state, empty_init, ROT0, "Sega", "Buck Rogers: Planet of Zoom (not encrypted, set 2)", MACHINE_IMPERFECT_SOUND , layout_buckrog ) +GAMEL( 1981, turbo, 0, turbo, turbo, turbo_state, empty_init, ROT270, "Sega", "Turbo (program 1513-1515)", MACHINE_IMPERFECT_SOUND, layout_turbo ) +GAMEL( 1981, turboa, turbo, turbo, turbo, turbo_state, init_turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1262-1264)", MACHINE_IMPERFECT_SOUND, layout_turbo ) +GAMEL( 1981, turbob, turbo, turbo, turbo, turbo_state, init_turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1363-1365 rev C)", MACHINE_IMPERFECT_SOUND, layout_turbo ) +GAMEL( 1981, turboc, turbo, turbo, turbo, turbo_state, init_turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1363-1365 rev B)", MACHINE_IMPERFECT_SOUND, layout_turbo ) +GAMEL( 1981, turbod, turbo, turbo, turbo, turbo_state, init_turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1363-1365 rev A)", MACHINE_IMPERFECT_SOUND, layout_turbo ) +GAMEL( 1981, turboe, turbo, turbo, turbo, turbo_state, init_turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1363-1365)", MACHINE_IMPERFECT_SOUND, layout_turbo ) // but still reports 1262-1264 in the test mode? +GAMEL( 1981, turbobl, turbo, turbo, turbo, turbo_state, empty_init, ROT270, "bootleg", "Indianapolis (bootleg of Turbo)", MACHINE_IMPERFECT_SOUND, layout_turbo ) // decrypted bootleg of a 1262-1264 set + +GAMEL( 1982, subroc3d, 0, subroc3d, subroc3d, subroc3d_state, empty_init, ORIENTATION_FLIP_X, "Sega", "Subroc-3D", MACHINE_IMPERFECT_SOUND, layout_subroc3d ) + +GAMEL( 1982, buckrog, 0, buckroge, buckrog, buckrog_state, empty_init, ROT0, "Sega", "Buck Rogers: Planet of Zoom", MACHINE_IMPERFECT_SOUND, layout_buckrog ) +GAMEL( 1982, buckrogn, buckrog, buckrogu, buckrog, buckrog_state, empty_init, ROT0, "Sega", "Buck Rogers: Planet of Zoom (not encrypted, set 1)", MACHINE_IMPERFECT_SOUND, layout_buckrog ) +GAMEL( 1982, buckrogn2, buckrog, buckrogu, buckrog, buckrog_state, empty_init, ROT0, "Sega", "Buck Rogers: Planet of Zoom (not encrypted, set 2)", MACHINE_IMPERFECT_SOUND, layout_buckrog ) GAMEL( 1982, zoom909, buckrog, buckroge, buckrog, buckrog_state, empty_init, ROT0, "Sega", "Zoom 909", MACHINE_IMPERFECT_SOUND, layout_buckrog ) diff -Nru mame-0.250+dfsg.1/src/mame/sega/turbo.h mame-0.251+dfsg.1/src/mame/sega/turbo.h --- mame-0.250+dfsg.1/src/mame/sega/turbo.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/turbo.h 2022-12-29 14:20:09.000000000 +0000 @@ -23,7 +23,6 @@ #define TURBO_X_SCALE 2 - class turbo_base_state : public driver_device { public: @@ -39,10 +38,14 @@ , m_discrete(*this, "discrete") , m_gfxdecode(*this, "gfxdecode") , m_screen(*this, "screen") + , m_pedal(*this, "PEDAL") + , m_dsw(*this, "DSW%u", 1U) , m_digits(*this, "digit%u", 0U) , m_lamp(*this, "lamp") { } + DECLARE_CUSTOM_INPUT_MEMBER(pedal_r); + protected: virtual void machine_start() override; virtual void video_start() override; @@ -53,7 +56,6 @@ required_region_ptr m_spriteroms; required_region_ptr m_proms; - required_shared_ptr m_videoram; required_shared_ptr m_sprite_position; @@ -62,27 +64,30 @@ required_device m_gfxdecode; required_device m_screen; + + optional_ioport m_pedal; + optional_ioport_array<3> m_dsw; output_finder<32> m_digits; output_finder<> m_lamp; // machine state - uint8_t m_i8279_scanlines = 0; + uint8_t m_i8279_scanlines = 0; // sound state - uint8_t m_sound_state[3]{}; + uint8_t m_sound_state[3]{}; // video state - tilemap_t * m_fg_tilemap = nullptr; + tilemap_t *m_fg_tilemap = nullptr; struct sprite_info { - uint16_t ve = 0; // VE0-15 signals for this row - uint8_t lst = 0; // LST0-7 signals for this row - uint32_t latched[8]{}; // latched pixel data - uint8_t plb[8]{}; // latched PLB state - uint32_t offset[8]{}; // current offset for this row - uint32_t frac[8]{}; // leftover fraction - uint32_t step[8]{}; // stepping value + uint16_t ve = 0; // VE0-15 signals for this row + uint8_t lst = 0; // LST0-7 signals for this row + uint32_t latched[8]{}; // latched pixel data + uint8_t plb[8]{}; // latched PLB state + uint32_t offset[8]{}; // current offset for this row + uint32_t frac[8]{}; // leftover fraction + uint32_t step[8]{}; // stepping value }; sprite_info m_sprite_info; @@ -104,7 +109,6 @@ , m_spriteram(*this, "spriteram") , m_bitmap_ram(*this, "bitmap_ram", 0xe000, ENDIANNESS_LITTLE) , m_bgcolorrom(*this, "bgcolor") - , m_dsw(*this, "DSW%u", 1U) { } void buckrog(machine_config &config); @@ -122,14 +126,13 @@ required_shared_ptr m_spriteram; memory_share_creator m_bitmap_ram; required_region_ptr m_bgcolorrom; - required_ioport_array<2> m_dsw; - uint8_t m_fchg; - uint8_t m_mov; - uint8_t m_obch; - uint8_t m_command; - uint8_t m_myship; - uint8_t m_last_sound_a; + uint8_t m_fchg; + uint8_t m_mov; + uint8_t m_obch; + uint8_t m_command; + uint8_t m_myship; + uint8_t m_last_sound_a; uint8_t subcpu_command_r(); uint8_t port_2_r(); @@ -161,6 +164,7 @@ subroc3d_state(const machine_config &mconfig, device_type type, const char *tag) : turbo_base_state(mconfig, type, tag) , m_spriteram(*this, "spriteram") + , m_shutter(*this, "shutter") { } void subroc3d(machine_config &config); @@ -171,18 +175,19 @@ private: required_shared_ptr m_spriteram; + output_finder<> m_shutter; - uint8_t m_col = 0; - uint8_t m_ply = 0; - uint8_t m_flip = 0; - uint8_t m_mdis = 0; - uint8_t m_mdir = 0; - uint8_t m_tdis = 0; - uint8_t m_tdir = 0; - uint8_t m_fdis = 0; - uint8_t m_fdir = 0; - uint8_t m_hdis = 0; - uint8_t m_hdir = 0; + uint8_t m_col = 0; + uint8_t m_ply = 0; + uint8_t m_flip = 0; + uint8_t m_mdis = 0; + uint8_t m_mdir = 0; + uint8_t m_tdis = 0; + uint8_t m_tdir = 0; + uint8_t m_fdis = 0; + uint8_t m_fdir = 0; + uint8_t m_hdis = 0; + uint8_t m_hdir = 0; void ppi0a_w(uint8_t data); void ppi0b_w(uint8_t data); @@ -205,9 +210,8 @@ turbo_state(const machine_config &mconfig, device_type type, const char *tag) : turbo_base_state(mconfig, type, tag) , m_roadroms(*this, "road") - , m_alt_spriteram(*this, "alt_spriteram", 0x80, ENDIANNESS_LITTLE) + , m_spriteram(*this, "spriteram", 0x80, ENDIANNESS_LITTLE) , m_vr(*this, "VR%u", 1U) - , m_dsw3(*this, "DSW3") , m_dial(*this, "DIAL") , m_tachometer(*this, "tachometer") , m_speed(*this, "speed") @@ -223,26 +227,25 @@ private: required_region_ptr m_roadroms; - memory_share_creator m_alt_spriteram; + memory_share_creator m_spriteram; required_ioport_array<2> m_vr; - required_ioport m_dsw3; required_ioport m_dial; output_finder<> m_tachometer; output_finder<> m_speed; - uint8_t m_osel; - uint8_t m_bsel; - uint8_t m_opa; - uint8_t m_opb; - uint8_t m_opc; - uint8_t m_ipa; - uint8_t m_ipb; - uint8_t m_ipc; - uint8_t m_fbpla; - uint8_t m_fbcol; - uint8_t m_collision; - uint8_t m_last_analog; - uint8_t m_accel; + uint8_t m_osel; + uint8_t m_bsel; + uint8_t m_opa; + uint8_t m_opb; + uint8_t m_opc; + uint8_t m_ipa; + uint8_t m_ipb; + uint8_t m_ipc; + uint8_t m_fbpla; + uint8_t m_fbcol; + uint8_t m_collision; + uint8_t m_last_analog; + uint8_t m_accel; uint8_t collision_r(); void collision_clear_w(uint8_t data); diff -Nru mame-0.250+dfsg.1/src/mame/sega/turbo_v.cpp mame-0.251+dfsg.1/src/mame/sega/turbo_v.cpp --- mame-0.250+dfsg.1/src/mame/sega/turbo_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sega/turbo_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -20,7 +20,6 @@ - /************************************* * * Palette conversion @@ -209,7 +208,7 @@ { // based on figure 6 of datasheet vco_freq = -0.9892942 * log10(cext) - 0.0309697 * vco_cv * vco_cv - + 0.344079975 * vco_cv - 4.086395841; + + 0.344079975 * vco_cv - 4.086395841; vco_freq = pow(10.0, vco_freq); } @@ -236,7 +235,7 @@ // compute the sprite information, which was done on the previous scanline during HBLANK for (int sprnum = 0; sprnum < 16; sprnum++) { - uint8_t *rambase = &m_alt_spriteram[sprnum * 8]; + uint8_t *rambase = &m_spriteram[sprnum * 8]; int level = sprnum & 7; uint8_t clo, chi; uint32_t sum; @@ -301,6 +300,7 @@ // loop over all live levels for (int level = 0; level < 8; level++) + { if (sprlive & (1 << level)) { // latch the data and advance the offset @@ -319,7 +319,7 @@ pixdata = m_spriteroms[(level << 14) | ((offs >> 1) & 0x3fff)] >> ((~offs & 1) * 4); m_sprite_info.latched[level] = sprite_expand[pixdata & 0x0f] << level; - // if bit 3 is 0 and bit 2 is 1, the enable flip/flip is reset + // if bit 3 is 0 and bit 2 is 1, the enable flip/flop is reset if ((pixdata & 0x0c) == 0x04) { m_sprite_info.lst &= ~(1 << level); @@ -331,6 +331,7 @@ m_sprite_info.frac[level] -= 0x1000000; } } + } return sprdata; } @@ -404,7 +405,7 @@ // look up AREA1 and AREA2 (p. 142) int area, offs, areatmp; offs = va | // A0- A7 = VA0-VA7 - ((sel & 0x0f) << 8); // A8-A11 = SEL0-3 + ((sel & 0x0f) << 8); // A8-A11 = SEL0-3 areatmp = m_roadroms[0x0000 | offs]; areatmp = ((areatmp + xx) >> 8) & 0x01; @@ -416,7 +417,7 @@ // look up AREA3 and AREA4 (p. 142) offs = va | // A0- A7 = VA0-VA7 - ((sel & 0xf0) << 4); // A8-A11 = SEL4-7 + ((sel & 0xf0) << 4); // A8-A11 = SEL4-7 areatmp = m_roadroms[0x2000 | offs]; areatmp = ((areatmp + xx) >> 8) & 0x01; @@ -427,8 +428,8 @@ area |= areatmp << 3; // look up AREA5 (p. 141) - offs = (xx >> 3) | // A0- A4 = H3-H7 - ((m_opc & 0x3f) << 5); // A5-A10 = OPC0-5 + offs = (xx >> 3) | // A0- A4 = H3-H7 + ((m_opc & 0x3f) << 5); // A5-A10 = OPC0-5 areatmp = m_roadroms[0x4000 | offs]; areatmp = (areatmp << (xx & 7)) & 0x80; @@ -443,7 +444,7 @@ road = 1; // also use the coch value to look up color info in IC13/PR1114 and IC21/PR1117 (p. 144) - offs = (coch & 0x0f) | // A0-A3: CONT0-3 = COCH0-3 + offs = (coch & 0x0f) | // A0-A3: CONT0-3 = COCH0-3 ((m_fbcol & 0x01) << 4); // A4: COL0 int bacol = pr1114[offs] | (pr1117[offs] << 8); @@ -471,36 +472,36 @@ m_collision |= pr1116[((sprbits >> 24) & 7) | (slipar_acciar >> 1)]; // look up the sprite priority in IC11/PR1122 (p. 144) - int priority = ((sprbits & 0xfe000000) >> 25) | // A0-A6: PLB1-7 - ((m_fbpla & 0x07) << 7); // A7-A9: PLA0-2 + int priority = ((sprbits & 0xfe000000) >> 25) | // A0-A6: PLB1-7 + ((m_fbpla & 0x07) << 7); // A7-A9: PLA0-2 priority = pr1122[priority]; // use that to look up the overall priority in IC12/PR1123 (p. 144) int mx = (priority & 7) | // A0-A2: PR-1122 output, bits 0-2 ((sprbits & 0x01000000) >> 21) | // A3: PLB0 ((foreraw & 0x80) >> 3) | // A4: PLBE - ((forebits & 0x08) << 2) | // A5: PLBF - ((babit & 0x07) << 6) | // A6-A8: BABIT1-3 - ((m_fbpla & 0x08) << 6); // A9: PLA3 + ((forebits & 0x08) << 2) | // A5: PLBF + ((babit & 0x07) << 6) | // A6-A8: BABIT1-3 + ((m_fbpla & 0x08) << 6); // A9: PLA3 mx = pr1123[mx]; // the MX output selects one of 16 inputs; build up a 16-bit pattern to match // these in red, green, and blue (p. 144) - int red = ((sprbits & 0x0000ff) >> 0) | // D0- D7: CDR0-CDR7 + int red = ((sprbits & 0x0000ff) >> 0) | // D0- D7: CDR0-CDR7 ((forebits & 0x01) << 8) | // D8: CDRF - ((bacol & 0x001f) << 9) | // D9-D13: BAR0-BAR4 + ((bacol & 0x001f) << 9) | // D9-D13: BAR0-BAR4 (1 << 14) | // D14: 1 (0 << 15); // D15: 0 - int grn = ((sprbits & 0x00ff00) >> 8) | // D0- D7: CDG0-CDG7 + int grn = ((sprbits & 0x00ff00) >> 8) | // D0- D7: CDG0-CDG7 ((forebits & 0x02) << 7) | // D8: CDGF - ((bacol & 0x03e0) << 4) | // D9-D13: BAG0-BAG4 + ((bacol & 0x03e0) << 4) | // D9-D13: BAG0-BAG4 (1 << 14) | // D14: 1 (0 << 15); // D15: 0 - int blu = ((sprbits & 0xff0000) >> 16) | // D0- D7: CDB0-CDB7 + int blu = ((sprbits & 0xff0000) >> 16) |// D0- D7: CDB0-CDB7 ((forebits & 0x04) << 6) | // D8: CDBF - ((bacol & 0x7c00) >> 1) | // D9-D13: BAB0-BAB4 + ((bacol & 0x7c00) >> 1) | // D9-D13: BAB0-BAB4 (1 << 14) | // D14: 1 (0 << 15); // D15: 0 @@ -509,11 +510,14 @@ (((~red >> mx) & 1) << 4) | // A4: CDR (((~grn >> mx) & 1) << 5) | // A5: CDG (((~blu >> mx) & 1) << 6) | // A6: CDB - ((m_fbcol & 6) << 6); // A7-A8: COL1-2 - dest[x + ix] = pr1121[offs]; + ((m_fbcol & 6) << 6); // A7-A8: COL1-2 + + if (cliprect.contains(x + ix, y)) + dest[x + ix] = pr1121[offs]; } } } + return 0; } @@ -647,6 +651,7 @@ // loop over all live levels for (int level = 0; level < 8; level++) + { if (m_sprite_info.lst & (1 << level)) { // latch the data and advance the offset @@ -667,7 +672,7 @@ m_sprite_info.latched[level] = sprite_expand[pixdata & 0x0f] << level; m_sprite_info.plb[level] = (plb_end[pixdata & 0x0f] & 1) << level; - // if bit 3 is 0 and bit 2 is 1, the enable flip/flip is reset + // if bit 3 is 0 and bit 2 is 1, the enable flip/flop is reset if (plb_end[pixdata & 0x0f] & 2) m_sprite_info.lst &= ~(1 << level); @@ -676,6 +681,7 @@ m_sprite_info.frac[level] -= 0x800000; } } + } return sprdata; } @@ -751,7 +757,7 @@ uint8_t mux; if (mplb) { - offs = (plb ^ 0xff) | // A0-A7: /PLB0-7 + offs = (plb ^ 0xff) | // A0-A7: /PLB0-7 ((m_ply & 0x02) << 7); // A8: PLY1 mux = pr1450[offs] >> ((m_ply & 0x01) * 4); } @@ -759,8 +765,7 @@ mux = 0; // CD0-3 are selected from the sprite bits and MUX0-2 (p. 141) - sprbits = (sprbits >> (mux & 0x07)) & 0x01010101; - uint8_t cd = (sprbits >> (24-3)) | (sprbits >> (16-2)) | (sprbits >> (8-1)) | sprbits; + uint8_t cd = bitswap<4>(sprbits >> (mux & 0x07), 24, 16, 8, 0); // MUX3 selects either CD0-3 or the foreground output (p. 141) int finalbits; @@ -770,13 +775,16 @@ finalbits = forebits; // we then go through a muxer to select one of the 16 outputs computed above (p. 141) - offs = (finalbits & 0x0f) | // A0-A3: CD0-CD3 - ((mux & 0x08) << 1) | // A4: MUX3 + offs = (finalbits & 0x0f) | // A0-A3: CD0-CD3 + ((mux & 0x08) << 1) | // A4: MUX3 (m_col << 5); // A5-A8: COL0-COL3 - dest[x + ix] = pr1419[offs]; + + if (cliprect.contains(x + ix, y)) + dest[x + ix] = pr1419[offs]; } } } + return 0; } @@ -859,6 +867,7 @@ // loop over all live levels for (int level = 0; level < 8; level++) + { if (m_sprite_info.lst & (1 << level)) { // latch the data and advance the offset @@ -878,7 +887,7 @@ m_sprite_info.latched[level] = sprite_expand[pixdata & 0x0f] << level; m_sprite_info.plb[level] = (plb_end[pixdata & 0x0f] & 1) << level; - // if bit 3 is 0 and bit 2 is 1, the enable flip/flip is reset + // if bit 3 is 0 and bit 2 is 1, the enable flip/flop is reset if (plb_end[pixdata & 0x0f] & 2) m_sprite_info.lst &= ~(1 << level); @@ -887,6 +896,7 @@ m_sprite_info.frac[level] -= 0x800000; } } + } return sprdata; } @@ -931,9 +941,9 @@ // at this point, do the character lookup and the foreground color table lookup in IC93/PR1598 (SH 5/5) uint8_t foreraw = fore[(pr5194[((xx >> 3) - 1) & 0x1f] << 3) | (xx & 0x07)]; - offs = ((foreraw & 0x03) << 0) | // A0-A1: BIT0-1 - ((foreraw & 0xf8) >> 1) | // A2-A6: BANK3-7 - ((m_fchg & 0x03) << 7); // A7-A9: FCHG0-2 + offs = ((foreraw & 0x03) << 0) | // A0-A1: BIT0-1 + ((foreraw & 0xf8) >> 1) | // A2-A6: BANK3-7 + ((m_fchg & 0x03) << 7); // A7-A9: FCHG0-2 uint8_t forebits = pr5198[offs]; // fetch the STAR bit @@ -951,23 +961,12 @@ uint8_t plb; uint32_t sprbits = get_sprite_bits(&plb); - // the PLB bits go into an LS148 8-to-1 decoder and become MUX0-3 (PROM board SH 2/10) - uint8_t mux; - if (plb == 0) - mux = 8; - else - { - mux = 7; - while (!(plb & 0x80)) - { - mux--; - plb <<= 1; - } - } + // the PLB bits go into an LS148 8-to-3 decoder and become MUX0-3 (PROM board SH 2/10) + uint8_t mux = count_leading_zeros_32(bitswap<8>(plb,0,1,2,3,4,5,6,7)) - 24; + if (mux == 8) mux = 0xf; // MUX then selects one of the sprites and selects CD0-3 - sprbits = (sprbits >> (mux & 0x07)) & 0x01010101; - uint8_t cd = (sprbits >> (24-3)) | (sprbits >> (16-2)) | (sprbits >> (8-1)) | sprbits; + uint8_t cd = bitswap<4>(sprbits >> (mux & 0x07), 24, 16, 8, 0); // this info goes into an LS148 8-to-3 decoder to determine the priorities (SH 5/5) @@ -976,15 +975,15 @@ if (!(forebits & 0x80)) { palbits = ((forebits & 0x3c) << 2) | - ((forebits & 0x06) << 1) | - ((forebits & 0x01) << 0); + ((forebits & 0x06) << 1) | + ((forebits & 0x01) << 0); } // priority 6 is if MUX3 is 0; CHNG = 1 else if (!(mux & 0x08)) { - offs = (cd & 0x0f) | // A0-A3: CD0-3 - ((mux & 0x07) << 4) | // A4-A6: MUX0-2 + offs = (cd & 0x0f) | // A0-A3: CD0-3 + ((mux & 0x07) << 4) | // A4-A6: MUX0-2 ((m_obch & 0x07) << 7); // A7-A9: OBCH0-2 palbits = pr5199[offs]; } @@ -993,8 +992,8 @@ else if (!(forebits & 0x40)) { palbits = ((forebits & 0x3c) << 2) | - ((forebits & 0x06) << 1) | - ((forebits & 0x01) << 0); + ((forebits & 0x06) << 1) | + ((forebits & 0x01) << 0); } // priority 1 is if the star is set; CHNG = 2 @@ -1011,9 +1010,11 @@ } // store the final bits for this pixel - dest[x + ix] = palbits; + if (cliprect.contains(x + ix, y)) + dest[x + ix] = palbits; } } } + return 0; } diff -Nru mame-0.250+dfsg.1/src/mame/seta/seta.cpp mame-0.251+dfsg.1/src/mame/seta/seta.cpp --- mame-0.250+dfsg.1/src/mame/seta/seta.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/seta/seta.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1822,7 +1822,7 @@ map(0x500000, 0x500001).nopw(); // ? map(0x600000, 0x600003).r(FUNC(downtown_state::seta_dsw_r)); // DSW map(0x700000, 0x7003ff).ram().share("paletteram1"); // Palette - map(0x800000, 0x800005).w(m_layers[0], FUNC(x1_012_device::vctrl_w));// VRAM Ctrl + map(0x800000, 0x800005).w(FUNC(downtown_state::vram_layer0_vctrl_raster_trampoline_w));// VRAM Ctrl map(0x900000, 0x903fff).ram().w(m_layers[0], FUNC(x1_012_device::vram_w)).share("layer1"); // VRAM map(0x904000, 0x904fff).ram(); // @@ -8172,6 +8172,7 @@ screen.set_visarea(0*8, 48*8-1, 1*8, 31*8-1); screen.set_screen_update(FUNC(downtown_state::screen_update_seta)); screen.set_palette(m_palette); + //screen.set_video_attributes(VIDEO_UPDATE_SCANLINE); X1_012(config, m_layers[0], m_palette, gfx_downtown); m_layers[0]->set_screen(m_screen); diff -Nru mame-0.250+dfsg.1/src/mame/seta/seta.h mame-0.251+dfsg.1/src/mame/seta/seta.h --- mame-0.250+dfsg.1/src/mame/seta/seta.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/seta/seta.h 2022-12-29 14:20:09.000000000 +0000 @@ -165,6 +165,7 @@ void ipl1_ack_w(u16 data); u16 ipl2_ack_r(); void ipl2_ack_w(u16 data); + void vram_layer0_vctrl_raster_trampoline_w(offs_t offset, u16 data, u16 mem_mask); void uPD71054_update_timer(device_t *cpu, int no); INTERRUPT_GEN_MEMBER(wrofaero_interrupt); TIMER_CALLBACK_MEMBER(uPD71054_timer_callback); diff -Nru mame-0.250+dfsg.1/src/mame/seta/seta_v.cpp mame-0.251+dfsg.1/src/mame/seta/seta_v.cpp --- mame-0.250+dfsg.1/src/mame/seta/seta_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/seta/seta_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -624,3 +624,12 @@ usclssic_set_pens(); return screen_update_seta_layers(screen, bitmap, cliprect); } + +void seta_state::vram_layer0_vctrl_raster_trampoline_w(offs_t offset, u16 data, u16 mem_mask) +{ + // Used by calibr50 as VIDEO_UPDATE_SCANLINE is problematic due to devices/video/x1_001.cpp not being optimized + // for scanline drawing, so instead we use this trampoline on tilemap register writes. Also see notes in x1_012.cpp + // for why we can't just do this in vctrl_w. + m_screen->update_partial(m_screen->vpos()); + m_layers[0]->vctrl_w(offset, data, mem_mask); +} diff -Nru mame-0.250+dfsg.1/src/mame/seta/x1_012.cpp mame-0.251+dfsg.1/src/mame/seta/x1_012.cpp --- mame-0.250+dfsg.1/src/mame/seta/x1_012.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/seta/x1_012.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -12,7 +12,6 @@ #include "emu.h" #include "x1_012.h" - DEFINE_DEVICE_TYPE(X1_012, x1_012_device, "x1_012", "Seta X1-012 Tile Layer") x1_012_device::x1_012_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) @@ -78,7 +77,26 @@ void x1_012_device::vctrl_w(offs_t offset, u16 data, u16 mem_mask) { - m_screen->update_partial(m_screen->vpos()); // needed for calibr50 effect when entering underground area + // HACK: + // In reality all MAME drivers should work with VIDEO_UPDATE_SCANLINE, ie a partial update every single line. + // However timing problems in various drivers means that registers (both here for the tilemap chip, but also + // in the sprite chip) end up being written at the wrong time, causing corruption if partial updates are + // allowed at all. MAME's default behavior of only updating the entire screen at a single point masks this + // otherwise incorrect timing. + // + // This is especially noticeable in Zombie Raid, which even writes the horizontal scroll in the middle of the + // screen, meaning that we can't even cheat by only updating on that. Caliber 50 shows that the tilemap chip + // does read the scroll registers every scanline as it is needed for a raster effect when entering the + // underground area. + // + // In addition to Zombie Raid, Blandia (Athena stage) and Strike Gunner STG are also good cases to demonstrate + // the broken timing that comes to light once partial updates are allowed. + // + // For the time being, we simply use a trampoline in the seta.cpp driver for Caliber 50 _only_, rather than + // correctly reflecting current register values in all games. + + // m_screen->update_partial(m_screen->vpos()); // causes breakage, see note above + // Select tilemap bank. Only one tilemap bank per layer is enabled. if (offset == 2 && ACCESSING_BITS_0_7) diff -Nru mame-0.250+dfsg.1/src/mame/shared/awpvid.cpp mame-0.251+dfsg.1/src/mame/shared/awpvid.cpp --- mame-0.250+dfsg.1/src/mame/shared/awpvid.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/shared/awpvid.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -6,7 +6,7 @@ originally written for AGEMAME by J.Wallace, enhanced by D.Haywood This is a primitive handler for generating reels with multiple symbols visible - hanging off steppers.c . + hanging off steppers.cpp . TODO: Add any lamping persistance simulations we need. diff -Nru mame-0.250+dfsg.1/src/mame/sharp/mz2500.cpp mame-0.251+dfsg.1/src/mame/sharp/mz2500.cpp --- mame-0.250+dfsg.1/src/mame/sharp/mz2500.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sharp/mz2500.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -806,24 +806,22 @@ void mz2500_state::floppy_select_w(uint8_t data) { - switch ((data & 0x03) ^ m_fdc_reverse) - { - case 0: m_floppy = m_floppy0->get_device(); break; - case 1: m_floppy = m_floppy1->get_device(); break; - case 2: m_floppy = m_floppy2->get_device(); break; - case 3: m_floppy = m_floppy3->get_device(); break; - } - - m_fdc->set_floppy(m_floppy); + m_selected_floppy = m_floppy[(data & 0x03) ^ m_fdc_reverse]->get_device(); + m_fdc->set_floppy(m_selected_floppy); - if (m_floppy) - m_floppy->mon_w(!BIT(data, 7)); + if (m_selected_floppy) + m_selected_floppy->mon_w(!BIT(data, 7)); } void mz2500_state::floppy_side_w(uint8_t data) { - if (m_floppy) - m_floppy->ss_w(BIT(data, 0)); + if (m_selected_floppy) + m_selected_floppy->ss_w(BIT(data, 0)); +} + +void mz2500_state::floppy_dden_w(uint8_t data) +{ + m_fdc->dden_w(BIT(data, 0)); } void mz2500_state::mz2500_map(address_map &map) @@ -999,16 +997,6 @@ m_palette->set_pen_color(pal_entry+0x10, pal4bit(m_pal[pal_entry].r), pal4bit(m_pal[pal_entry].g), pal4bit(m_pal[pal_entry].b)); } -uint8_t mz2500_state::fdc_r(offs_t offset) -{ - return m_fdc->read(offset) ^ 0xff; -} - -void mz2500_state::fdc_w(offs_t offset, uint8_t data) -{ - m_fdc->write(offset, data ^ 0xff); -} - uint8_t mz2500_state::mz2500_bplane_latch_r() { if(m_cg_reg[7] & 0x10) @@ -1143,7 +1131,7 @@ uint8_t res,dir_en,in_r; res = 0xff; - in_r = ~ioport(m_joy_mode & 0x40 ? "JOY_2P" : "JOY_1P")->read(); + in_r = ~m_joy[BIT(m_joy_mode, 6)]->read(); if(m_joy_mode & 0x40) { @@ -1169,6 +1157,12 @@ void mz2500_state::mz2500_joystick_w(uint8_t data) { m_joy_mode = data; + m_joy[0]->pin_6_w(BIT(data, 0)); + m_joy[0]->pin_7_w(BIT(data, 1)); + m_joy[1]->pin_6_w(BIT(data, 2)); + m_joy[1]->pin_7_w(BIT(data, 3)); + m_joy[0]->pin_8_w(BIT(data, 4)); + m_joy[1]->pin_8_w(BIT(data, 5)); } @@ -1263,10 +1257,10 @@ map(0xcc, 0xcc).rw(FUNC(mz2500_state::rp5c15_8_r), FUNC(mz2500_state::rp5c15_8_w)); map(0xce, 0xce).w(FUNC(mz2500_state::mz2500_dictionary_bank_w)); map(0xcf, 0xcf).w(FUNC(mz2500_state::mz2500_kanji_bank_w)); - map(0xd8, 0xdb).rw(FUNC(mz2500_state::fdc_r), FUNC(mz2500_state::fdc_w)); + map(0xd8, 0xdb).rw(m_fdc, FUNC(mb8876_device::read), FUNC(mb8876_device::write)); map(0xdc, 0xdc).w(FUNC(mz2500_state::floppy_select_w)); map(0xdd, 0xdd).w(FUNC(mz2500_state::floppy_side_w)); - map(0xde, 0xde).nopw(); + map(0xde, 0xde).w(FUNC(mz2500_state::floppy_dden_w)); map(0xe0, 0xe3).rw("i8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xe4, 0xe7).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write)); map(0xe8, 0xeb).rw("z80pio_1", FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt)); @@ -1432,26 +1426,6 @@ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x80, DEF_STR( On ) ) - - PORT_START("JOY_1P") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("JOY_2P") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END void mz2500_state::reset_banks(uint8_t type) @@ -1534,6 +1508,8 @@ m_beeper->set_state(0); // m_monitor_type = ioport("DSW1")->read() & 0x40 ? 1 : 0; + + mz2500_joystick_w(0x3f); // LS273 reset } static const gfx_layout mz2500_cg_layout = @@ -1795,7 +1771,7 @@ void mz2500_state::mz2500(machine_config &config) { /* basic machine hardware */ - Z80(config, m_maincpu, 6000000); + Z80(config, m_maincpu, 24_MHz_XTAL / 4); m_maincpu->set_addrmap(AS_PROGRAM, &mz2500_state::mz2500_map); m_maincpu->set_addrmap(AS_IO, &mz2500_state::mz2500_io); m_maincpu->set_vblank_int("screen", FUNC(mz2500_state::mz2500_vbl)); @@ -1814,36 +1790,35 @@ ppi.in_pc_callback().set(FUNC(mz2500_state::mz2500_portc_r)); ppi.out_pc_callback().set(FUNC(mz2500_state::mz2500_portc_w)); - z80pio_device& pio(Z80PIO(config, "z80pio_1", 6000000)); + z80pio_device& pio(Z80PIO(config, "z80pio_1", 24_MHz_XTAL / 4)); pio.in_pa_callback().set(FUNC(mz2500_state::mz2500_pio1_porta_r)); pio.out_pa_callback().set(FUNC(mz2500_state::mz2500_pio1_porta_w)); pio.in_pb_callback().set(FUNC(mz2500_state::mz2500_pio1_porta_r)); - Z80SIO(config, "z80sio", 6000000); + Z80SIO(config, "z80sio", 24_MHz_XTAL / 4); RP5C15(config, m_rtc, 32.768_kHz_XTAL); m_rtc->alarm().set(FUNC(mz2500_state::mz2500_rtc_alarm_irq)); - PIT8253(config, m_pit, 0); - m_pit->set_clk<0>(31250); + PIT8253(config, m_pit); + m_pit->set_clk<0>(24_MHz_XTAL / 768); m_pit->out_handler<0>().set(FUNC(mz2500_state::pit8253_clk0_irq)); - // TODO: is this really right? - m_pit->set_clk<1>(0); - m_pit->set_clk<2>(16); //CH2, used by Super MZ demo / The Black Onyx and a few others (TODO: timing of this) - m_pit->out_handler<2>().set(m_pit, FUNC(pit8253_device::write_clk1)); - - MB8877(config, m_fdc, 1_MHz_XTAL); - - FLOPPY_CONNECTOR(config, "mb8877a:0", mz2500_floppies, "dd", floppy_image_device::default_mfm_floppy_formats); - FLOPPY_CONNECTOR(config, "mb8877a:1", mz2500_floppies, "dd", floppy_image_device::default_mfm_floppy_formats); - FLOPPY_CONNECTOR(config, "mb8877a:2", mz2500_floppies, "dd", floppy_image_device::default_mfm_floppy_formats); - FLOPPY_CONNECTOR(config, "mb8877a:3", mz2500_floppies, "dd", floppy_image_device::default_mfm_floppy_formats); + m_pit->out_handler<0>().append(m_pit, FUNC(pit8253_device::write_clk1)); + m_pit->out_handler<1>().set(m_pit, FUNC(pit8253_device::write_clk2)); //CH2, used by Super MZ demo / The Black Onyx and a few others + + MB8876(config, m_fdc, 8_MHz_XTAL / 8); // clocked by MB4107 VFO + + MSX_GENERAL_PURPOSE_PORT(config, m_joy[0], msx_general_purpose_port_devices, "joystick"); + MSX_GENERAL_PURPOSE_PORT(config, m_joy[1], msx_general_purpose_port_devices, "joystick"); + + for (auto &fd : m_floppy) + FLOPPY_CONNECTOR(config, fd, mz2500_floppies, "dd", floppy_image_device::default_mfm_floppy_formats); SOFTWARE_LIST(config, "flop_list").set_original("mz2500"); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_raw(21'477'272, 640+108, 0, 640, 480, 0, 200); //unknown clock / divider + m_screen->set_raw(42.954545_MHz_XTAL / 2, 640+108, 0, 640, 480, 0, 200); //unknown clock / divider m_screen->set_screen_update(FUNC(mz2500_state::screen_update_mz2500)); m_screen->set_palette(m_palette); @@ -1854,7 +1829,7 @@ SPEAKER(config, "mono").front_center(); - ym2203_device &ym(YM2203(config, "ym", 2000000)); //unknown clock / divider + ym2203_device &ym(YM2203(config, "ym", 24_MHz_XTAL / 12)); ym.port_a_read_callback().set(FUNC(mz2500_state::opn_porta_r)); ym.port_b_read_callback().set_ioport("DSW1"); ym.port_a_write_callback().set(FUNC(mz2500_state::opn_porta_w)); diff -Nru mame-0.250+dfsg.1/src/mame/sharp/mz2500.h mame-0.251+dfsg.1/src/mame/sharp/mz2500.h --- mame-0.250+dfsg.1/src/mame/sharp/mz2500.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sharp/mz2500.h 2022-12-29 14:20:09.000000000 +0000 @@ -10,7 +10,7 @@ #pragma once - +#include "bus/msx/ctrl/ctrl.h" #include "cpu/z80/z80.h" #include "machine/i8255.h" #include "machine/pit8253.h" @@ -42,12 +42,10 @@ m_pit(*this, "pit"), m_beeper(*this, "beeper"), m_gfxdecode(*this, "gfxdecode"), - m_fdc(*this, "mb8877a"), - m_floppy0(*this, "mb8877a:0"), - m_floppy1(*this, "mb8877a:1"), - m_floppy2(*this, "mb8877a:2"), - m_floppy3(*this, "mb8877a:3"), - m_floppy(nullptr), + m_fdc(*this, "mb8876"), + m_floppy(*this, "mb8876:%u", 0U), + m_selected_floppy(nullptr), + m_joy(*this, "joy%u", 1U), m_palette(*this, "palette"), m_rambank(*this, "rambank%u", 0), m_tvram(*this, "tvram"), @@ -64,12 +62,10 @@ required_device m_pit; required_device m_beeper; required_device m_gfxdecode; - required_device m_fdc; - required_device m_floppy0; - required_device m_floppy1; - required_device m_floppy2; - required_device m_floppy3; - floppy_image_device *m_floppy; + required_device m_fdc; + required_device_array m_floppy; + floppy_image_device *m_selected_floppy; + required_device_array m_joy; required_device m_palette; required_device_array m_rambank; required_shared_ptr m_tvram; @@ -174,10 +170,9 @@ uint32_t screen_update_mz2500(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(mz2500_vbl); - uint8_t fdc_r(offs_t offset); - void fdc_w(offs_t offset, uint8_t data); void floppy_select_w(uint8_t data); void floppy_side_w(uint8_t data); + void floppy_dden_w(uint8_t data); uint8_t mz2500_porta_r(); uint8_t mz2500_portb_r(); diff -Nru mame-0.250+dfsg.1/src/mame/sharp/mz700.cpp mame-0.251+dfsg.1/src/mame/sharp/mz700.cpp --- mame-0.250+dfsg.1/src/mame/sharp/mz700.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sharp/mz700.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -143,7 +143,7 @@ map(0xe6, 0xe6).w(FUNC(mz_state::mz700_bank_6_w)); } -void mz_state::mz800_mem(address_map &map) +void mz800_state::mz800_mem(address_map &map) { map(0x0000, 0x0fff).bankr("bankr0").bankw("bankw0"); map(0x1000, 0x1fff).bankrw("bank1"); @@ -154,40 +154,40 @@ map(0xe000, 0xffff).m(m_bankf, FUNC(address_map_bank_device::amap8)); } -void mz_state::mz800_bankf(address_map &map) +void mz800_state::mz800_bankf(address_map &map) { // bank 0: ram (mz700_bank1) map(0x0000, 0x1fff).ram(); // bank 1: devices (mz700_bank3) map(0x2000, 0x2003).rw(m_ppi, FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0x2004, 0x2007).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write)); - map(0x2008, 0x200b).rw(FUNC(mz_state::mz700_e008_r), FUNC(mz_state::mz700_e008_w)); + map(0x2008, 0x200b).rw(FUNC(mz800_state::mz700_e008_r), FUNC(mz800_state::mz700_e008_w)); map(0x200c, 0x200f).noprw(); map(0x2010, 0x3fff).rom().region("monitor", 0x2010); // bank 2: switched out (mz700_bank5) map(0x4000, 0x5fff).noprw(); } -void mz_state::mz800_io(address_map &map) +void mz800_state::mz800_io(address_map &map) { map.global_mask(0xff); - map(0xcc, 0xcc).w(FUNC(mz_state::mz800_write_format_w)); - map(0xcd, 0xcd).w(FUNC(mz_state::mz800_read_format_w)); - map(0xce, 0xce).rw(FUNC(mz_state::mz800_crtc_r), FUNC(mz_state::mz800_display_mode_w)); - map(0xcf, 0xcf).w(FUNC(mz_state::mz800_scroll_border_w)); + map(0xcc, 0xcc).w(FUNC(mz800_state::mz800_write_format_w)); + map(0xcd, 0xcd).w(FUNC(mz800_state::mz800_read_format_w)); + map(0xce, 0xce).rw(FUNC(mz800_state::mz800_crtc_r), FUNC(mz800_state::mz800_display_mode_w)); + map(0xcf, 0xcf).w(FUNC(mz800_state::mz800_scroll_border_w)); map(0xd0, 0xd3).rw(m_ppi, FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xd4, 0xd7).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write)); - map(0xe0, 0xe0).rw(FUNC(mz_state::mz800_bank_0_r), FUNC(mz_state::mz800_bank_0_w)); - map(0xe1, 0xe1).rw(FUNC(mz_state::mz800_bank_1_r), FUNC(mz_state::mz700_bank_1_w)); - map(0xe2, 0xe2).w(FUNC(mz_state::mz700_bank_2_w)); - map(0xe3, 0xe3).w(FUNC(mz_state::mz700_bank_3_w)); - map(0xe4, 0xe4).w(FUNC(mz_state::mz700_bank_4_w)); - map(0xe5, 0xe5).w(FUNC(mz_state::mz700_bank_5_w)); - map(0xe6, 0xe6).w(FUNC(mz_state::mz700_bank_6_w)); - map(0xea, 0xea).rw(FUNC(mz_state::mz800_ramdisk_r), FUNC(mz_state::mz800_ramdisk_w)); - map(0xeb, 0xeb).w(FUNC(mz_state::mz800_ramaddr_w)); - map(0xf0, 0xf0).portr("atari_joy1").w(FUNC(mz_state::mz800_palette_w)); - map(0xf1, 0xf1).portr("atari_joy2"); + map(0xe0, 0xe0).rw(FUNC(mz800_state::mz800_bank_0_r), FUNC(mz800_state::mz800_bank_0_w)); + map(0xe1, 0xe1).rw(FUNC(mz800_state::mz800_bank_1_r), FUNC(mz800_state::mz700_bank_1_w)); + map(0xe2, 0xe2).w(FUNC(mz800_state::mz700_bank_2_w)); + map(0xe3, 0xe3).w(FUNC(mz800_state::mz700_bank_3_w)); + map(0xe4, 0xe4).w(FUNC(mz800_state::mz700_bank_4_w)); + map(0xe5, 0xe5).w(FUNC(mz800_state::mz700_bank_5_w)); + map(0xe6, 0xe6).w(FUNC(mz800_state::mz700_bank_6_w)); + map(0xea, 0xea).rw(FUNC(mz800_state::mz800_ramdisk_r), FUNC(mz800_state::mz800_ramdisk_w)); + map(0xeb, 0xeb).w(FUNC(mz800_state::mz800_ramaddr_w)); + map(0xf0, 0xf0).r(m_joy[0], FUNC(msx_general_purpose_port_device::read)).w(FUNC(mz800_state::mz800_palette_w)); + map(0xf1, 0xf1).r(m_joy[1], FUNC(msx_general_purpose_port_device::read)); map(0xf2, 0xf2).w("sn76489n", FUNC(sn76489_device::write)); map(0xfc, 0xff).rw("z80pio", FUNC(z80pio_device::read), FUNC(z80pio_device::write)); } @@ -311,22 +311,6 @@ PORT_MODIFY("JOY") PORT_BIT(0x1f, 0x00, IPT_UNUSED) - PORT_START("atari_joy1") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_PLAYER(1) PORT_8WAY - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_PLAYER(1) PORT_8WAY - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_PLAYER(1) PORT_8WAY - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_PLAYER(1) PORT_8WAY - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(1) - - PORT_START("atari_joy2") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_PLAYER(2) PORT_8WAY - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_PLAYER(2) PORT_8WAY - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_PLAYER(2) PORT_8WAY - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_PLAYER(2) PORT_8WAY - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(2) - PORT_START("system_settings") PORT_DIPNAME(0x01, 0x00, "Mode selection") PORT_DIPLOCATION("SW:4") @@ -380,8 +364,6 @@ ADDRESS_MAP_BANK(config, "banke").set_map(&mz_state::mz700_banke).set_options(ENDIANNESS_LITTLE, 8, 16, 0x2000); - MCFG_MACHINE_RESET_OVERRIDE(mz_state, mz700) - /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_raw(XTAL(17'734'470)/2, 568, 0, 40*8, 312, 0, 25*8); @@ -429,21 +411,20 @@ } -void mz_state::mz800(machine_config &config) +void mz800_state::mz800(machine_config &config) { mz700(config); config.device_remove("banke"); /* basic machine hardware */ - m_maincpu->set_addrmap(AS_PROGRAM, &mz_state::mz800_mem); - m_maincpu->set_addrmap(AS_IO, &mz_state::mz800_io); + m_maincpu->set_addrmap(AS_PROGRAM, &mz800_state::mz800_mem); + m_maincpu->set_addrmap(AS_IO, &mz800_state::mz800_io); - ADDRESS_MAP_BANK(config, "bankf").set_map(&mz_state::mz800_bankf).set_options(ENDIANNESS_LITTLE, 8, 16, 0x2000); + ADDRESS_MAP_BANK(config, "bankf").set_map(&mz800_state::mz800_bankf).set_options(ENDIANNESS_LITTLE, 8, 16, 0x2000); - MCFG_MACHINE_RESET_OVERRIDE(mz_state, mz800) subdevice("gfxdecode")->set_info(gfx_mz800); - m_screen->set_screen_update(FUNC(mz_state::screen_update_mz800)); + m_screen->set_screen_update(FUNC(mz800_state::screen_update_mz800)); SN76489(config, "sn76489n", XTAL(17'734'470)/5).add_route(ALL_OUTPUTS, "mono", 1.0); @@ -453,12 +434,17 @@ /* devices */ m_pit->set_clk<0>(XTAL(17'734'470)/16); + m_ppi->out_pa_callback().set(FUNC(mz800_state::pio_port_a_w)); + z80pio_device& pio(Z80PIO(config, "z80pio", XTAL(17'734'470)/5)); - pio.out_int_callback().set(FUNC(mz_state::mz800_z80pio_irq)); - pio.in_pa_callback().set(FUNC(mz_state::mz800_z80pio_port_a_r)); - pio.out_pa_callback().set(FUNC(mz_state::mz800_z80pio_port_a_w)); + pio.out_int_callback().set_inputline(m_maincpu, 0); + pio.in_pa_callback().set(FUNC(mz800_state::mz800_z80pio_port_a_r)); + pio.out_pa_callback().set(FUNC(mz800_state::mz800_z80pio_port_a_w)); pio.out_pb_callback().set("cent_data_out", FUNC(output_latch_device::write)); + MSX_GENERAL_PURPOSE_PORT(config, m_joy[0], msx_general_purpose_port_devices, "joystick"); + MSX_GENERAL_PURPOSE_PORT(config, m_joy[1], msx_general_purpose_port_devices, "joystick"); + CENTRONICS(config, m_centronics, centronics_devices, "printer"); output_latch_device ¢_data_out(OUTPUT_LATCH(config, "cent_data_out")); @@ -510,8 +496,8 @@ GAME DRIVERS ***************************************************************************/ -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1982, mz700, 0, 0, mz700, mz700, mz_state, init_mz700, "Sharp", "MZ-700", 0 ) -COMP( 1982, mz700j, mz700, 0, mz700, mz700, mz_state, init_mz700, "Sharp", "MZ-700 (Japan)", 0 ) -COMP( 1984, mz800, 0, 0, mz800, mz800, mz_state, init_mz800, "Sharp", "MZ-800", MACHINE_NOT_WORKING ) -COMP( 1984, mz1500, 0, 0, mz800, mz800, mz_state, init_mz800, "Sharp", "MZ-1500", MACHINE_NOT_WORKING ) // Japanese version of the MZ-800 +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 1982, mz700, 0, 0, mz700, mz700, mz_state, init_mz700, "Sharp", "MZ-700", 0 ) +COMP( 1982, mz700j, mz700, 0, mz700, mz700, mz_state, init_mz700, "Sharp", "MZ-700 (Japan)", 0 ) +COMP( 1984, mz800, 0, 0, mz800, mz800, mz800_state, init_mz800, "Sharp", "MZ-800", MACHINE_NOT_WORKING ) +COMP( 1984, mz1500, 0, 0, mz800, mz800, mz800_state, init_mz800, "Sharp", "MZ-1500", MACHINE_NOT_WORKING ) // Japanese version of the MZ-800 diff -Nru mame-0.250+dfsg.1/src/mame/sharp/mz700.h mame-0.251+dfsg.1/src/mame/sharp/mz700.h --- mame-0.250+dfsg.1/src/mame/sharp/mz700.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sharp/mz700.h 2022-12-29 14:20:09.000000000 +0000 @@ -12,6 +12,7 @@ #pragma once #include "bus/centronics/ctronics.h" +#include "bus/msx/ctrl/ctrl.h" #include "imagedev/cassette.h" #include "machine/bankdev.h" #include "machine/74145.h" @@ -44,42 +45,25 @@ , m_cursor_timer(*this, "cursor") { } - void mz800(machine_config &config); void mz700(machine_config &config); - void init_mz800(); void init_mz700(); protected: virtual void machine_start() override; + virtual void machine_reset() override; -private: uint8_t mz700_e008_r(); void mz700_e008_w(uint8_t data); - uint8_t mz800_bank_0_r(); void mz700_bank_0_w(uint8_t data); - void mz800_bank_0_w(uint8_t data); - uint8_t mz800_bank_1_r(); void mz700_bank_1_w(uint8_t data); void mz700_bank_2_w(uint8_t data); void mz700_bank_3_w(uint8_t data); void mz700_bank_4_w(uint8_t data); void mz700_bank_5_w(uint8_t data); void mz700_bank_6_w(uint8_t data); - uint8_t mz800_crtc_r(); - void mz800_write_format_w(uint8_t data); - void mz800_read_format_w(uint8_t data); - void mz800_display_mode_w(uint8_t data); - void mz800_scroll_border_w(uint8_t data); - uint8_t mz800_ramdisk_r(); - void mz800_ramdisk_w(uint8_t data); - void mz800_ramaddr_w(uint8_t data); - void mz800_palette_w(uint8_t data); - void mz800_cgram_w(offs_t offset, uint8_t data); DECLARE_MACHINE_RESET(mz700); - DECLARE_MACHINE_RESET(mz800); uint32_t screen_update_mz700(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update_mz800(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_DEVICE_CALLBACK_MEMBER(ne556_cursor_callback); TIMER_DEVICE_CALLBACK_MEMBER(ne556_other_callback); DECLARE_WRITE_LINE_MEMBER(pit_out0_changed); @@ -88,18 +72,12 @@ uint8_t pio_port_c_r(); void pio_port_a_w(uint8_t data); void pio_port_c_w(uint8_t data); - DECLARE_WRITE_LINE_MEMBER(mz800_z80pio_irq); - uint8_t mz800_z80pio_port_a_r(); - void mz800_z80pio_port_a_w(uint8_t data); DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); DECLARE_WRITE_LINE_MEMBER(write_centronics_perror); void mz700_banke(address_map &map); void mz700_io(address_map &map); void mz700_mem(address_map &map); - void mz800_bankf(address_map &map); - void mz800_io(address_map &map); - void mz800_mem(address_map &map); int m_mz700 = 0; /* 1 if running on an mz700 */ @@ -111,8 +89,6 @@ int m_mz700_ram_lock = 0; /* 1 if ram lock is active */ int m_mz700_ram_vram = 0; /* 1 if vram is banked in */ - /* mz800 specific */ - std::unique_ptr m_cgram; uint8_t *m_p_chargen = nullptr; int m_mz700_mode = 0; /* 1 if in mz700 mode */ @@ -129,7 +105,6 @@ std::unique_ptr m_videoram; uint8_t m_speaker_level = 0; uint8_t m_prev_state = 0; - uint16_t m_mz800_ramaddr = 0; uint8_t m_mz800_palette[4]; uint8_t m_mz800_palette_bank = 0; @@ -149,4 +124,50 @@ required_device m_cursor_timer; }; +class mz800_state : public mz_state +{ +public: + mz800_state(const machine_config &mconfig, device_type type, const char *tag) + : mz_state(mconfig, type, tag) + , m_joy(*this, "joy%u", 1U) + { } + + void mz800(machine_config &config); + + void init_mz800(); + +protected: + virtual void machine_reset() override; + +private: + uint8_t mz800_bank_0_r(); + void mz800_bank_0_w(uint8_t data); + uint8_t mz800_bank_1_r(); + + uint8_t mz800_crtc_r(); + void mz800_write_format_w(uint8_t data); + void mz800_read_format_w(uint8_t data); + void mz800_display_mode_w(uint8_t data); + void mz800_scroll_border_w(uint8_t data); + uint8_t mz800_ramdisk_r(); + void mz800_ramdisk_w(uint8_t data); + void mz800_ramaddr_w(uint8_t data); + void mz800_palette_w(uint8_t data); + void mz800_cgram_w(offs_t offset, uint8_t data); + uint32_t screen_update_mz800(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + uint8_t mz800_z80pio_port_a_r(); + void mz800_z80pio_port_a_w(uint8_t data); + void pio_port_a_w(uint8_t data); + + void mz800_bankf(address_map &map); + void mz800_io(address_map &map); + void mz800_mem(address_map &map); + + required_device_array m_joy; + + std::unique_ptr m_cgram; + + uint16_t m_mz800_ramaddr = 0; +}; + #endif // MAME_INCLUDES_MZ700_H diff -Nru mame-0.250+dfsg.1/src/mame/sharp/mz700_m.cpp mame-0.251+dfsg.1/src/mame/sharp/mz700_m.cpp --- mame-0.250+dfsg.1/src/mame/sharp/mz700_m.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sharp/mz700_m.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -53,7 +53,7 @@ membank("bankd")->configure_entry(1, m_videoram.get()); // vram } -void mz_state::init_mz800() +void mz800_state::init_mz800() { m_mz700 = false; m_mz700_mode = true;//false; @@ -97,7 +97,7 @@ m_prev_state = 0; } -MACHINE_RESET_MEMBER( mz_state, mz700 ) +void mz_state::machine_reset() { membank("bankr0")->set_entry(1); //rom membank("bankw0")->set_entry(0); //ram @@ -105,7 +105,7 @@ m_banke->set_bank(1); //devices } -MACHINE_RESET_MEMBER( mz_state, mz800 ) +void mz800_state::machine_reset() { // default to mz700 mode or mz1500 won't start. membank("bankr0")->set_entry(1); //rom @@ -145,7 +145,7 @@ BANK SWITCHING ***************************************************************************/ -uint8_t mz_state::mz800_bank_0_r() +uint8_t mz800_state::mz800_bank_0_r() { //address_space &spc = m_maincpu->space(AS_PROGRAM); @@ -197,7 +197,7 @@ membank("bankr0")->set_entry(0); // ram } -void mz_state::mz800_bank_0_w(uint8_t data) +void mz800_state::mz800_bank_0_w(uint8_t data) { //address_space &spc = m_maincpu->space(AS_PROGRAM); @@ -207,7 +207,7 @@ membank("bankr0")->set_entry(0); // ram } -uint8_t mz_state::mz800_bank_1_r() +uint8_t mz800_state::mz800_bank_1_r() { //address_space &spc = m_maincpu->space(AS_PROGRAM); @@ -525,6 +525,14 @@ m_cursor_timer->enable(BIT(data, 7)); } +void mz800_state::pio_port_a_w(uint8_t data) +{ + mz_state::pio_port_a_w(data); + + m_joy[0]->pin_8_w(BIT(data, 4)); + m_joy[1]->pin_8_w(BIT(data, 5)); +} + void mz_state::pio_port_c_w(uint8_t data) { @@ -574,11 +582,6 @@ Z80 PIO ***************************************************************************/ -WRITE_LINE_MEMBER(mz_state::mz800_z80pio_irq) -{ - m_maincpu->set_input_line(0, state); -} - WRITE_LINE_MEMBER(mz_state::write_centronics_busy) { m_centronics_busy = state; @@ -589,7 +592,7 @@ m_centronics_perror = state; } -uint8_t mz_state::mz800_z80pio_port_a_r() +uint8_t mz800_state::mz800_z80pio_port_a_r() { uint8_t result = 0; @@ -600,14 +603,14 @@ return result; } -void mz_state::mz800_z80pio_port_a_w(uint8_t data) +void mz800_state::mz800_z80pio_port_a_w(uint8_t data) { m_centronics->write_init(BIT(data, 6)); m_centronics->write_strobe(BIT(data, 7)); } /* port CE */ -uint8_t mz_state::mz800_crtc_r() +uint8_t mz800_state::mz800_crtc_r() { uint8_t data = 0x00; LOG(1,"mz800_crtc_r",("%02X\n",data),machine()); @@ -616,7 +619,7 @@ /* port EA */ -uint8_t mz_state::mz800_ramdisk_r() +uint8_t mz800_state::mz800_ramdisk_r() { uint8_t *mem = memregion("user1")->base(); uint8_t data = mem[m_mz800_ramaddr]; @@ -627,13 +630,13 @@ } /* port CC */ -void mz_state::mz800_write_format_w(uint8_t data) +void mz800_state::mz800_write_format_w(uint8_t data) { LOG(1,"mz800_write_format_w",("%02X\n", data),machine()); } /* port CD */ -void mz_state::mz800_read_format_w(uint8_t data) +void mz800_state::mz800_read_format_w(uint8_t data) { LOG(1,"mz800_read_format_w",("%02X\n", data),machine()); } @@ -644,7 +647,7 @@ * bit 1 1: 4bpp/2bpp 0: 2bpp/1bpp * bit 0 ??? */ -void mz_state::mz800_display_mode_w(uint8_t data) +void mz800_state::mz800_display_mode_w(uint8_t data) { m_mz700_mode = BIT(data, 3); m_hires_mode = BIT(data, 2); @@ -660,13 +663,13 @@ } /* port CF */ -void mz_state::mz800_scroll_border_w(uint8_t data) +void mz800_state::mz800_scroll_border_w(uint8_t data) { LOG(1,"mz800_scroll_border_w",("%02X\n", data),machine()); } /* port EA */ -void mz_state::mz800_ramdisk_w(uint8_t data) +void mz800_state::mz800_ramdisk_w(uint8_t data) { uint8_t *mem = memregion("user1")->base(); LOG(2,"mz800_ramdisk_w",("[%04X] <- %02X\n", m_mz800_ramaddr, data),machine()); @@ -676,14 +679,14 @@ } /* port EB */ -void mz_state::mz800_ramaddr_w(uint8_t data) +void mz800_state::mz800_ramaddr_w(uint8_t data) { m_mz800_ramaddr = (m_maincpu->state_int(Z80_BC) & 0xff00) | (data & 0xff); LOG(1,"mz800_ramaddr_w",("%04X\n", m_mz800_ramaddr),machine()); } /* port F0 */ -void mz_state::mz800_palette_w(uint8_t data) +void mz800_state::mz800_palette_w(uint8_t data) { if (data & 0x40) { diff -Nru mame-0.250+dfsg.1/src/mame/sharp/mz700_v.cpp mame-0.251+dfsg.1/src/mame/sharp/mz700_v.cpp --- mame-0.250+dfsg.1/src/mame/sharp/mz700_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sharp/mz700_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -61,7 +61,7 @@ Not working. ***************************************************************************/ -uint32_t mz_state::screen_update_mz800(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t mz800_state::screen_update_mz800(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { if (m_mz700_mode) return screen_update_mz700(screen, bitmap, cliprect); @@ -96,7 +96,7 @@ CGRAM ***************************************************************************/ -void mz_state::mz800_cgram_w(offs_t offset, uint8_t data) +void mz800_state::mz800_cgram_w(offs_t offset, uint8_t data) { m_cgram[offset] = data; } diff -Nru mame-0.250+dfsg.1/src/mame/sharp/x68k.cpp mame-0.251+dfsg.1/src/mame/sharp/x68k.cpp --- mame-0.250+dfsg.1/src/mame/sharp/x68k.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sharp/x68k.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -303,242 +303,42 @@ m_adpcm_timer->adjust(attotime::from_ticks(rate, res_clock), 0, attotime::from_ticks(rate, res_clock)); } -// Megadrive 3 button gamepad -// According to XM6, bits 4 and 7 are always 1 (is this correct?) -// Bits 4 and 5 of PPI port C control each controller's multiplexer -// Button inputs (Start, A, B and C) are read in bits 5 and 6 (rather than 4 -// and 5 like on a Megadrive) - -uint8_t x68k_state::md_3button_r(int port) -{ - if(port == 1) - { - uint8_t porta = m_md3b->read() & 0xff; - uint8_t portb = (m_md3b->read() >> 8) & 0xff; - if(m_mdctrl.mux1 & 0x10) - { - return porta | 0x90; - } - else - { - return (portb & 0x60) | (porta & 0x03) | 0x90; - } - } - if(port == 2) - { - uint8_t porta = (m_md3b->read() >> 16) & 0xff; - uint8_t portb = (m_md3b->read() >> 24) & 0xff; - if(m_mdctrl.mux2 & 0x20) - { - return porta | 0x90; - } - else - { - return (portb & 0x60) | (porta & 0x03) | 0x90; - } - } - return 0xff; -} - -// Megadrive 6 button gamepad -TIMER_CALLBACK_MEMBER(x68k_state::md_6button_port1_timeout) -{ - m_mdctrl.seq1 = 0; -} - -TIMER_CALLBACK_MEMBER(x68k_state::md_6button_port2_timeout) -{ - m_mdctrl.seq2 = 0; -} - -void x68k_state::md_6button_init() -{ - m_mdctrl.io_timeout1 = timer_alloc(FUNC(x68k_state::md_6button_port1_timeout), this); - m_mdctrl.io_timeout2 = timer_alloc(FUNC(x68k_state::md_6button_port2_timeout), this); -} - -uint8_t x68k_state::md_6button_r(int port) -{ - if(port == 1) - { - uint8_t porta = m_md6b->read() & 0xff; - uint8_t portb = (m_md6b->read() >> 8) & 0xff; - uint8_t extra = m_md6b_extra->read() & 0x0f; - - switch(m_mdctrl.seq1) - { - case 1: - default: - if(m_mdctrl.mux1 & 0x10) - { - return porta | 0x90; - } - else - { - return (portb & 0x60) | (porta & 0x03) | 0x90; - } - case 2: - if(m_mdctrl.mux1 & 0x10) - { - return porta | 0x90; - } - else - { - return (portb & 0x60) | 0x90; - } - case 3: - if(m_mdctrl.mux1 & 0x10) - { - return (porta & 0x60) | (extra & 0x0f) | 0x90; - } - else - { - return (portb & 0x60) | 0x9f; - } - } - } - if(port == 2) - { - uint8_t porta = (m_md6b->read() >> 16) & 0xff; - uint8_t portb = (m_md6b->read() >> 24) & 0xff; - uint8_t extra = (m_md6b_extra->read() >> 4) & 0x0f; - - switch(m_mdctrl.seq2) - { - case 1: - default: - if(m_mdctrl.mux2 & 0x20) - { - return porta | 0x90; - } - else - { - return (portb & 0x60) | (porta & 0x03) | 0x90; - } - case 2: - if(m_mdctrl.mux2 & 0x20) - { - return porta | 0x90; - } - else - { - return (portb & 0x60) | 0x90; - } - case 3: - if(m_mdctrl.mux2 & 0x20) - { - return (porta & 0x60) | (extra & 0x0f) | 0x90; - } - else - { - return (portb & 0x60) | 0x9f; - } - } - } - return 0xff; -} - -// XPD-1LR dual D-pad controller. -// Sold with Video Game Anthology Vol 4: Libble Rabble. -// Also compatible with Video Game Anthology Vol 5: Crazy Climber 1 & 2 -// Uses the same input multiplexer hardware as Megadrive controllers -// Output is the same as for standard controllers, but when ctl is high, -// the directions refer to the right D-pad, and when low, the left D-pad -// The buttons are read the same as normal, regardless of ctl. -uint8_t x68k_state::xpd1lr_r(int port) -{ - if(port == 1) - { - uint8_t porta = m_xpd1lr->read() & 0xff; - uint8_t portb = (m_xpd1lr->read() >> 8) & 0xff; - if(m_mdctrl.mux1 & 0x10) - { - return porta; - } - else - { - return portb | (porta & 0x60); - } - } - if(port == 2) - { - uint8_t porta = (m_xpd1lr->read() >> 16) & 0xff; - uint8_t portb = (m_xpd1lr->read() >> 24) & 0xff; - if(m_mdctrl.mux2 & 0x20) - { - return porta; - } - else - { - return portb | (porta & 0x60); - } - } - return 0xff; -} - -// Judging from the XM6 source code, PPI ports A and B are joystick inputs +// PPI ports A and B are joystick inputs uint8_t x68k_state::ppi_port_a_r() { - int ctrl = m_ctrltype->read() & 0x0f; + // first read the joystick inputs + uint8_t const input = m_joy[0]->read(); + uint8_t result = 0x90 | (BIT(input, 4, 2) << 5) | BIT(input, 0, 4); - switch(ctrl) - { - case 0x00: // standard MSX/FM-Towns joystick - if(m_joy.joy1_enable == 0) - return m_joy1->read(); - else - return 0xff; - case 0x01: // 3-button Megadrive gamepad - return md_3button_r(1); - case 0x02: // 6-button Megadrive gamepad - return md_6button_r(1); - case 0x03: // XPD-1LR - return xpd1lr_r(1); - } + // trigger lines can be pulled down by port C outputs + result &= ~(BIT(m_ppi_portc, 6, 2) << 5); - return 0xff; + return result; } uint8_t x68k_state::ppi_port_b_r() { - int ctrl = m_ctrltype->read() & 0xf0; - - switch(ctrl) - { - case 0x00: // standard MSX/FM-Towns joystick - if(m_joy.joy2_enable == 0) - return m_joy2->read(); - else - return 0xff; - case 0x10: // 3-button Megadrive gamepad - return md_3button_r(2); - case 0x20: // 6-button Megadrive gamepad - return md_6button_r(2); - case 0x30: // XPD-1LR - return xpd1lr_r(2); - } - - return 0xff; + uint8_t const input = m_joy[1]->read(); + return 0x90 | (BIT(input, 4, 2) << 5) | BIT(input, 0, 4); } uint8_t x68k_state::ppi_port_c_r() { - return m_ppi_port[2]; + return m_ppi_portc; } /* PPI port C (Joystick control, R/W) - bit 7 - IOC7 - Function B operation of joystick 1 (?) - bit 6 - IOC6 - Function A operation of joystick 1 (?) - bit 5 - IOC5 - Enable Joystick 2 - bit 4 - IOC4 - Enable Joystick 1 + bit 7 - IOC7 - Pull down joystick 1 trigger B (JS pin 7) + bit 6 - IOC6 - Pull down joystick 1 trigger A (JS pin 6) + bit 5 - IOC5 - Joystick 2 strobe (JT pin 8) + bit 4 - IOC4 - Joystick 1 strobe (JS pin 8) bits 3,2 - ADPCM Sample rate bits 1,0 - ADPCM Pan (00 = Both, 01 = Right only, 10 = Left only, 11 = Off) */ void x68k_state::ppi_port_c_w(uint8_t data) { // ADPCM / Joystick control - m_ppi_port[2] = data; - if((data & 0x0f) != (m_ppi_prev & 0x0f)) + if((data & 0x0f) != (m_ppi_portc & 0x0f)) { m_adpcm.pan = data & 0x03; m_adpcm.rate = (data & 0x0c) >> 2; @@ -551,26 +351,18 @@ m_adpcm_out[1]->flt_volume_set_volume((m_adpcm.pan & 2) ? 0.0f : 1.0f); } - // The joystick enable bits also handle the multiplexer for various controllers - m_joy.joy1_enable = data & 0x10; - m_mdctrl.mux1 = data & 0x10; - if((m_ppi_prev & 0x10) == 0x00 && (data & 0x10) == 0x10) - { - m_mdctrl.seq1++; - m_mdctrl.io_timeout1->adjust(m_maincpu->cycles_to_attotime(8192)); - } - - m_joy.joy2_enable = data & 0x20; - m_mdctrl.mux2 = data & 0x20; - if((m_ppi_prev & 0x20) == 0x00 && (data & 0x20) == 0x20) - { - m_mdctrl.seq2++; - m_mdctrl.io_timeout2->adjust(m_maincpu->cycles_to_attotime(8192)); - } - m_ppi_prev = data; + // Set joystick outputs + if(BIT(data, 6) != BIT(m_ppi_portc, 6)) + m_joy[0]->pin_6_w(BIT(~data, 6)); + if(BIT(data, 7) != BIT(m_ppi_portc, 7)) + m_joy[0]->pin_7_w(BIT(~data, 7)); + if(BIT(data, 4) != BIT(m_ppi_portc, 4)) + m_joy[0]->pin_8_w(BIT(data, 4)); + if(BIT(data, 5) != BIT(m_ppi_portc, 5)) + m_joy[1]->pin_8_w(BIT(data, 5)); - m_joy.ioc6 = data & 0x40; - m_joy.ioc7 = data & 0x80; + // update saved value + m_ppi_portc = data; } @@ -1261,39 +1053,8 @@ } static INPUT_PORTS_START( x68000 ) - PORT_START("ctrltype") - PORT_CONFNAME(0x0f, 0x00, "Joystick Port 1") - PORT_CONFSETTING(0x00, "Standard 2-button MSX/FM-Towns joystick") - PORT_CONFSETTING(0x01, "3-button Megadrive gamepad") - PORT_CONFSETTING(0x02, "6-button Megadrive gamepad") - PORT_CONFSETTING(0x03, "XPD-1LR dual D-pad gamepad") - PORT_CONFNAME(0xf0, 0x00, "Joystick Port 2") - PORT_CONFSETTING(0x00, "Standard 2-button MSX/FM-Towns joystick") - PORT_CONFSETTING(0x10, "3-button Megadrive gamepad") - PORT_CONFSETTING(0x20, "6-button Megadrive gamepad") - PORT_CONFSETTING(0x30, "XPD-1LR dual D-pad gamepad") // TODO: Sharp Cyber Stick (CZ-8NJ2) support - PORT_START( "joy1" ) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_CODE(JOYCODE_Y_UP_SWITCH) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_CODE(JOYCODE_Y_DOWN_SWITCH) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CODE(JOYCODE_X_LEFT_SWITCH) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CODE(JOYCODE_X_RIGHT_SWITCH) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(JOYCODE_BUTTON1) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(JOYCODE_BUTTON2) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00) - - PORT_START( "joy2" ) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_CODE(JOYCODE_Y_UP_SWITCH) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_CODE(JOYCODE_Y_DOWN_SWITCH) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CODE(JOYCODE_X_LEFT_SWITCH) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CODE(JOYCODE_X_RIGHT_SWITCH) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(JOYCODE_BUTTON1) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(JOYCODE_BUTTON2) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00) - PORT_START("options") PORT_CONFNAME( 0x02, 0x02, "Enable fake bus errors") PORT_CONFSETTING( 0x00, DEF_STR( Off )) @@ -1308,133 +1069,6 @@ PORT_START("mouse3") // Y-axis PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_KEYDELTA(0) PORT_PLAYER(1) - - // 3-button Megadrive gamepad - PORT_START("md3b") - PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("MD Pad 1 Up") PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("MD Pad 1 Down") PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_NAME("MD Pad 1 Left") PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_NAME("MD Pad 1 Right") PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("MD Pad 1 B Button") PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("MD Pad 1 C Button") PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x01) - - PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x00000800, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x00001000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x00002000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("MD Pad 1 A Button") PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(1) PORT_NAME("MD Pad 1 Start Button") PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x01) - PORT_BIT( 0x00008000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x01) - - PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("MD Pad 2 Up") PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x00020000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("MD Pad 2 Down") PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x00040000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_NAME("MD Pad 2 Left") PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x00080000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_NAME("MD Pad 2 Right") PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("MD Pad 2 B Button") PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("MD Pad 2 C Button") PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x00800000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x10) - - PORT_BIT( 0x01000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x08000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x10000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x20000000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("MD Pad 2 A Button") PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x40000000, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(2) PORT_NAME("MD Pad 2 Start Button") PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x10) - PORT_BIT( 0x80000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x10) - - // 6-button Megadrive gamepad - PORT_START("md6b") - PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("MD Pad 1 Up") PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("MD Pad 1 Down") PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_NAME("MD Pad 1 Left") PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_NAME("MD Pad 1 Right") PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("MD Pad 1 B Button") PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("MD Pad 1 C Button") PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - - PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x00000800, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x00001000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x00002000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("MD Pad 1 A Button") PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(1) PORT_NAME("MD Pad 1 Start Button") PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x00008000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - - PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("MD Pad 2 Up") PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x00020000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("MD Pad 2 Down") PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x00040000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_NAME("MD Pad 2 Left") PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x00080000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_NAME("MD Pad 2 Right") PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("MD Pad 2 B Button") PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("MD Pad 2 C Button") PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x00800000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - - PORT_BIT( 0x01000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x08000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x10000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x20000000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("MD Pad 2 A Button") PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x40000000, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(2) PORT_NAME("MD Pad 2 Start Button") PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x80000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - - // extra inputs - PORT_START("md6b_extra") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) PORT_NAME("MD Pad 1 Z Button") PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) PORT_NAME("MD Pad 1 Y Button") PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("MD Pad 1 X Button") PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(1) PORT_NAME("MD Pad 1 Mode Button") PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x02) - - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) PORT_NAME("MD Pad 2 Z Button") PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) PORT_NAME("MD Pad 2 Y Button") PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_NAME("MD Pad 2 X Button") PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(2) PORT_NAME("MD Pad 2 Mode Button") PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x20) - - // Dempa/Micomsoft XPD-1LR (dual D-pad gamepad sold with Libble Rabble) - PORT_START("xpd1lr") - PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_UP ) PORT_NAME("XPD Pad 1 Left/Up") PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x03) - PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_DOWN ) PORT_NAME("XPD Pad 1 Left/Down") PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x03) - PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_LEFT ) PORT_NAME("XPD Pad 1 Left/Left") PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x03) - PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_RIGHT ) PORT_NAME("XPD Pad 1 Left/Right") PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x03) - PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x03) - PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("XPD Pad 1 B Button") PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x03) - PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("XPD Pad 1 A Button") PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x03) - PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x03) - - PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_UP ) PORT_NAME("XPD Pad 1 Right/Up") PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x03) - PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_DOWN ) PORT_NAME("XPD Pad 1 Right/Down") PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x03) - PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_LEFT ) PORT_NAME("XPD Pad 1 Right/Left") PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x03) - PORT_BIT( 0x00000800, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_RIGHT ) PORT_NAME("XPD Pad 1 Right/Right") PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x03) - PORT_BIT( 0x00001000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x03) - PORT_BIT( 0x00002000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x03) - PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x03) - PORT_BIT( 0x00008000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x03) - - PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_UP ) PORT_NAME("XPD Pad 2 Left/Up") PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x30) - PORT_BIT( 0x00020000, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_DOWN ) PORT_NAME("XPD Pad 2 Left/Down") PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x30) - PORT_BIT( 0x00040000, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_LEFT ) PORT_NAME("XPD Pad 2 Left/Left") PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x30) - PORT_BIT( 0x00080000, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_RIGHT ) PORT_NAME("XPD Pad 2 Left/Right") PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x30) - PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x30) - PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("XPD Pad 2 B Button") PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x30) - PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("XPD Pad 2 A Button") PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x30) - PORT_BIT( 0x00800000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x30) - - PORT_BIT( 0x01000000, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_UP ) PORT_NAME("XPD Pad 2 Right/Up") PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x30) - PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_DOWN ) PORT_NAME("XPD Pad 2 Right/Down") PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x30) - PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_LEFT ) PORT_NAME("XPD Pad 2 Right/Left") PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x30) - PORT_BIT( 0x08000000, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_RIGHT ) PORT_NAME("XPD Pad 2 Right/Right") PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x30) - PORT_BIT( 0x10000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x30) - PORT_BIT( 0x20000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x30) - PORT_BIT( 0x40000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x30) - PORT_BIT( 0x80000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x30) - INPUT_PORTS_END void x68k_state::floppy_load_unload(bool load, floppy_image_device *dev) @@ -1568,9 +1202,6 @@ m_adpcm_timer = timer_alloc(FUNC(x68ksupr_state::adpcm_drq_tick), this); m_bus_error_timer = timer_alloc(FUNC(x68ksupr_state::bus_error), this); - // Initialise timers for 6-button MD controllers - md_6button_init(); - m_sysport.cputype = 0xff; // 68000, 10MHz m_is_32bit = false; @@ -1625,6 +1256,9 @@ rs232_port_device &keyboard(RS232_PORT(config, "keyboard", keyboard_devices, "x68k")); keyboard.rxd_handler().set(m_mfpdev, FUNC(mc68901_device::si_w)); + MSX_GENERAL_PURPOSE_PORT(config, m_joy[0], msx_general_purpose_port_devices, "townspad"); + MSX_GENERAL_PURPOSE_PORT(config, m_joy[1], msx_general_purpose_port_devices, "townspad"); + I8255A(config, m_ppi, 0); m_ppi->in_pa_callback().set(FUNC(x68k_state::ppi_port_a_r)); m_ppi->in_pb_callback().set(FUNC(x68k_state::ppi_port_b_r)); diff -Nru mame-0.250+dfsg.1/src/mame/sharp/x68k.h mame-0.251+dfsg.1/src/mame/sharp/x68k.h --- mame-0.250+dfsg.1/src/mame/sharp/x68k.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/sharp/x68k.h 2022-12-29 14:20:09.000000000 +0000 @@ -13,6 +13,10 @@ #pragma once +#include "x68k_crtc.h" + +#include "bus/msx/ctrl/ctrl.h" +#include "bus/x68k/x68kexp.h" #include "cpu/m68000/m68000.h" #include "cpu/m68000/m68030.h" #include "imagedev/floppy.h" @@ -27,8 +31,6 @@ #include "sound/flt_vol.h" #include "sound/okim6258.h" #include "sound/ymopm.h" -#include "x68k_crtc.h" -#include "bus/x68k/x68kexp.h" #include "emupal.h" #include "screen.h" @@ -58,19 +60,13 @@ , m_ppi(*this, "ppi8255") , m_screen(*this, "screen") , m_upd72065(*this, "upd72065") + , m_joy(*this, "joy%u", 1U) , m_expansion(*this, "exp%u", 1U) , m_adpcm_out(*this, {"adpcm_outl", "adpcm_outr"}) , m_options(*this, "options") , m_mouse1(*this, "mouse1") , m_mouse2(*this, "mouse2") , m_mouse3(*this, "mouse3") - , m_xpd1lr(*this, "xpd1lr") - , m_ctrltype(*this, "ctrltype") - , m_joy1(*this, "joy1") - , m_joy2(*this, "joy2") - , m_md3b(*this, "md3b") - , m_md6b(*this, "md6b") - , m_md6b_extra(*this, "md6b_extra") , m_eject_drv_out(*this, "eject_drv%u", 0U) , m_ctrl_drv_out(*this, "ctrl_drv%u", 0U) , m_access_drv_out(*this, "access_drv%u", 0U) @@ -109,6 +105,7 @@ required_device m_ppi; required_device m_screen; required_device m_upd72065; + required_device_array m_joy; required_device_array m_expansion; required_device_array m_adpcm_out; @@ -117,13 +114,6 @@ required_ioport m_mouse1; required_ioport m_mouse2; required_ioport m_mouse3; - required_ioport m_xpd1lr; - required_ioport m_ctrltype; - required_ioport m_joy1; - required_ioport m_joy2; - required_ioport m_md3b; - required_ioport m_md6b; - required_ioport m_md6b_extra; output_finder<4> m_eject_drv_out; output_finder<4> m_ctrl_drv_out; @@ -163,13 +153,6 @@ } m_fdc; struct { - int ioc7 = 0; // "Function B operation of joystick # one option" - int ioc6 = 0; // "Function A operation of joystick # one option" - int joy1_enable = 0; // IOC4 - int joy2_enable = 0; // IOC5 - } m_joy; - struct - { int rate = 0; // ADPCM sample rate int pan = 0; // ADPCM output switch int clock = 0; // ADPCM clock speed @@ -206,18 +189,7 @@ char last_mouse_y = 0; // previous mouse y-axis value int bufferempty = 0; // non-zero if buffer is empty } m_mouse; - struct - { - // port A - int mux1 = 0; // multiplexer value - int seq1 = 0; // part of 6-button input sequence. - emu_timer* io_timeout1 = nullptr; - // port B - int mux2 = 0; // multiplexer value - int seq2 = 0; // part of 6-button input sequence. - emu_timer* io_timeout2 = nullptr; - } m_mdctrl; - uint8_t m_ppi_port[3]{}; + uint8_t m_ppi_portc = 0; bool m_dmac_int = false; bool m_mfp_int = false; bool m_exp_irq2[2]{}; @@ -228,7 +200,6 @@ emu_timer* m_mouse_timer = nullptr; emu_timer* m_led_timer = nullptr; unsigned char m_scc_prev = 0; - uint16_t m_ppi_prev = 0; emu_timer* m_fdc_tc = nullptr; emu_timer* m_adpcm_timer = nullptr; emu_timer* m_bus_error_timer = nullptr; @@ -250,8 +221,6 @@ TIMER_CALLBACK_MEMBER(adpcm_drq_tick); TIMER_CALLBACK_MEMBER(led_callback); TIMER_CALLBACK_MEMBER(scc_ack); - TIMER_CALLBACK_MEMBER(md_6button_port1_timeout); - TIMER_CALLBACK_MEMBER(md_6button_port2_timeout); TIMER_CALLBACK_MEMBER(bus_error); uint8_t ppi_port_a_r(); uint8_t ppi_port_b_r(); @@ -268,10 +237,6 @@ int read_mouse(); void set_adpcm(); - uint8_t md_3button_r(int port); - void md_6button_init(); - uint8_t md_6button_r(int port); - uint8_t xpd1lr_r(int port); DECLARE_WRITE_LINE_MEMBER(fm_irq); template DECLARE_WRITE_LINE_MEMBER(irq2_line); diff -Nru mame-0.250+dfsg.1/src/mame/skeleton/vector3.cpp mame-0.251+dfsg.1/src/mame/skeleton/vector3.cpp --- mame-0.250+dfsg.1/src/mame/skeleton/vector3.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/skeleton/vector3.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -0,0 +1,202 @@ +// license:BSD-3-Clause +// copyright-holders:Miodrag Milanovic +/*************************************************************************** + +Vector Graphic, Inc Vector 3 and Vector MZ. Vector Graphic was a Californian +company that made a few popular computers until they were crushed flat by the +IBM PC. + +2009-12-08 Skeleton driver for "Vector 4". +2022-12-03 Renamed driver to "Vector 3" + +This driver was based on the Vector 4 User Guide but accidentally with the +Vector 3 or other ROMs, because of confusing naming. To get the ROMs to work +required Vector 3 behavior. + +The Vector 3 and Vector MZ had similar internal hardware. Both are based on the +ZCB, Flashwriter II, and Micropolis floppy controller. + +The 7100-0245-00-00 Extended Systems Monitor 4.3 Users Manual seems to +correspond with BIOS 1. + +BIOS 0 only talks to UARTs at 2-7 and nothing else. It uses a terminal +for all communications. + +BIOS 1 and 2 only talk to UARTs at 0-7 and the undocumented port 40. +They also write a video screen at F000-F7FF, but there's no writes +to any video controller. Also, the chargen roms (2x 2716) are missing. + +https://deramp.com/vector_graphic.html +7200-0203-03-02: https://bitsavers.org/pdf/vectorGraphic/hardware/7200-0204-03-02_ZCB_Single_Board_Computer_Jun80.pdf +https://bitsavers.org/pdf/vectorGraphic/hardware/Vector_Z80_Board_Users_Manual_May79.pdf +https://bitsavers.org/pdf/vectorGraphic/software/7100-0245-00-00_Extended_Systems_Monitor_4.3_Users_Manual_Jul81.pdf +https://bitsavers.org/pdf/vectorGraphic/hardware/Vector_Flashwriter_II_Mar79.pdf +https://deramp.com/downloads/vector_graphic/hardware/Flashwriter%20II%20Manual.pdf +https://deramp.com/downloads/vector_graphic/hardware/Flashwriter%20II%20Schematic%20Rev%204.tif +https://bitsavers.org/pdf/vectorGraphic/hardware/Micropolis_Disk_Controller_Board.pdf + +TODO: +- H command goes crazy +- chargen roms +- video +- keyboard +- probable keyboard mcu +- floppies +- many other things + +****************************************************************************/ + +#include "emu.h" + +#include "bus/rs232/rs232.h" +#include "cpu/z80/z80.h" +#include "machine/clock.h" +#include "machine/i8251.h" +#include "machine/i8255.h" +#include "machine/pit8253.h" + + +namespace { + +class vector3_state : public driver_device +{ +public: + vector3_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_rom(*this, "maincpu") + , m_ram(*this, "mainram") + { } + + void vector3(machine_config &config); + +private: + void vector3_io(address_map &map); + void vector3_mem(address_map &map); + + memory_passthrough_handler m_rom_shadow_tap; + required_device m_maincpu; + required_region_ptr m_rom; + required_shared_ptr m_ram; + void machine_reset() override; +}; + + +void vector3_state::vector3_mem(address_map &map) +{ + map.unmap_value_high(); + map(0x0000, 0xffff).ram().share("mainram"); + map(0xe000, 0xefff).rom().region("maincpu", 0); + //map(0xf000, 0xf7ff).ram().share("videoram"); // bios 1,2 + map(0xf800, 0xf8ff).rom().region("maincpu", 0x1000); +} + +void vector3_state::vector3_io(address_map &map) +{ + map.unmap_value_high(); + map.global_mask(0xff); + map(0x00, 0x01).rw("uart0", FUNC(i8251_device::read), FUNC(i8251_device::write)); // keyboard + map(0x02, 0x03).rw("uart1", FUNC(i8251_device::read), FUNC(i8251_device::write)); // terminal, bios 0 only + map(0x04, 0x05).mirror(0x02).rw("uart2", FUNC(i8251_device::read), FUNC(i8251_device::write)); + map(0x08, 0x0b).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0x10, 0x13).rw("pit", FUNC(pit8253_device::read), FUNC(pit8253_device::write)); + // map(0x40, 0x40) undocumented +} + +/* Input ports */ +static INPUT_PORTS_START( vector3 ) +INPUT_PORTS_END + + +void vector3_state::machine_reset() +{ + address_space &program = m_maincpu->space(AS_PROGRAM); + program.install_rom(0x0000, 0x0fff, m_rom); // do it here for F3 + m_rom_shadow_tap.remove(); + m_rom_shadow_tap = program.install_read_tap( + 0xe000, 0xefff, + "rom_shadow_r", + [this] (offs_t offset, u8 &data, u8 mem_mask) + { + if (!machine().side_effects_disabled()) + { + // delete this tap + m_rom_shadow_tap.remove(); + + // reinstall RAM over the ROM shadow + m_maincpu->space(AS_PROGRAM).install_ram(0x0000, 0x0fff, m_ram); + } + }, + &m_rom_shadow_tap); +} + + +void vector3_state::vector3(machine_config &config) +{ + /* basic machine hardware */ + Z80(config, m_maincpu, 4'000'000); + m_maincpu->set_addrmap(AS_PROGRAM, &vector3_state::vector3_mem); + m_maincpu->set_addrmap(AS_IO, &vector3_state::vector3_io); + + /* video hardware */ + clock_device &uart_clock(CLOCK(config, "uart_clock", 153600)); + uart_clock.signal_handler().set("uart1", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart0", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart0", FUNC(i8251_device::write_rxc)); + uart_clock.signal_handler().append("uart1", FUNC(i8251_device::write_rxc)); + uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_rxc)); + + I8251(config, "uart0", 0); + + i8251_device &uart1(I8251(config, "uart1", 0)); + uart1.txd_handler().set("rs232a", FUNC(rs232_port_device::write_txd)); + uart1.dtr_handler().set("rs232a", FUNC(rs232_port_device::write_dtr)); + uart1.rts_handler().set("rs232a", FUNC(rs232_port_device::write_rts)); + + rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, "terminal")); + rs232a.rxd_handler().set("uart1", FUNC(i8251_device::write_rxd)); + rs232a.dsr_handler().set("uart1", FUNC(i8251_device::write_dsr)); + rs232a.cts_handler().set("uart1", FUNC(i8251_device::write_cts)); + + i8251_device &uart2(I8251(config, "uart2", 0)); + uart2.txd_handler().set("rs232b", FUNC(rs232_port_device::write_txd)); + uart2.dtr_handler().set("rs232b", FUNC(rs232_port_device::write_dtr)); + uart2.rts_handler().set("rs232b", FUNC(rs232_port_device::write_rts)); + + rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, nullptr)); + rs232b.rxd_handler().set("uart2", FUNC(i8251_device::write_rxd)); + rs232b.dsr_handler().set("uart2", FUNC(i8251_device::write_dsr)); + rs232b.cts_handler().set("uart2", FUNC(i8251_device::write_cts)); + + I8255A(config, "ppi"); + PIT8253(config, "pit", 0); +} + +/* ROM definition */ +ROM_START( vector3 ) + ROM_REGION( 0x1100, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "mfdc.bin", 0x1000, 0x0100, CRC(d82a40d6) SHA1(cd1ef5fb0312cd1640e0853d2442d7d858bc3e3b)) + + ROM_SYSTEM_BIOS( 0, "v4c", "ver 4.0c" ) // VECTOR GRAPHIC MONITOR VERSION 4.0C + ROMX_LOAD( "vg40cl_ihl.bin", 0x0000, 0x0400, CRC(dcaf79e6) SHA1(63619ddb12ff51e5862902fb1b33a6630f555ad7), ROM_BIOS(0)) + ROMX_LOAD( "vg40ch_ihl.bin", 0x0400, 0x0400, CRC(3ff97d70) SHA1(b401e49aa97ac106c2fd5ee72d89e683ebe34e34), ROM_BIOS(0)) + + ROM_SYSTEM_BIOS( 1, "v43", "ver 4.3" ) // VECTOR GRAPHIC MONITOR VERSION 4.3 + ROMX_LOAD( "vg-em-43.bin", 0x0000, 0x1000, CRC(29a0fcee) SHA1(ca44de527f525b72f78b1c084c39aa6ce21731b5), ROM_BIOS(1)) + + ROM_SYSTEM_BIOS( 2, "v5", "ver 5.0" ) // VECTOR GRAPHIC EXECUTIVE 5.0 + ROMX_LOAD( "vg-zcb50.bin", 0x0000, 0x1000, CRC(22d692ce) SHA1(cbb21b0acc98983bf5febd59ff67615d71596e36), ROM_BIOS(2)) + + // bios 1,2 need these (pair of 2716) - rom names not known + ROM_REGION( 0x1000, "chargen", ROMREGION_ERASEFF ) + ROM_LOAD( "chargen1.bin", 0x0000, 0x0800, NO_DUMP ) + ROM_LOAD( "chargen2.bin", 0x0800, 0x0800, NO_DUMP ) +ROM_END + +} // anonymous namespace + +/* Driver */ + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 1979, vector3, 0, 0, vector3, vector3, vector3_state, empty_init, "Vector Graphic", "Vector 3", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/skeleton/vector4.cpp mame-0.251+dfsg.1/src/mame/skeleton/vector4.cpp --- mame-0.250+dfsg.1/src/mame/skeleton/vector4.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/skeleton/vector4.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,217 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Miodrag Milanovic -/*************************************************************************** - -Vector Graphic Vector 4. Vector Graphic was a Californian company that -made a few popular computers until they were crushed flat by the IBM PC. - -2009-12-08 Skeleton driver. - -According to the net the Vector 4 came out in 1982, but BIOS 0 has a date -of 1979, so perhaps it's for some other model. - -Although each bios set identifies as Vector Graphic, none of them align -to what the user manual says. - -The manual gives a list of ports (listed in the i/o address map). There's -no schematic. - -BIOS 0 only talks to UARTs at 2-7 and nothing else. It uses a terminal -for all communications. - -BIOS 1 and 2 only talk to UARTs at 0-7 and the undocumented port 40. -They also write a video screen at F000-F7FF, but there's no writes -to any video controller. Also, the chargen roms (2x 2716) are missing. - -The system contains a 8088-2 cpu for limited IBM compatibility, but -the manual has no mention of it besides its existence. - -128K RAM (expandable to 256K). - - -TODO: -- Need schematic -- H command goes crazy -- chargen roms -- video -- keyboard -- probable keyboard mcu -- floppies -- many other things - -****************************************************************************/ - -#include "emu.h" - -#include "bus/rs232/rs232.h" -#include "cpu/z80/z80.h" -#include "machine/clock.h" -#include "machine/i8251.h" -#include "machine/i8255.h" -#include "machine/pit8253.h" - - -namespace { - -class vector4_state : public driver_device -{ -public: - vector4_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_maincpu(*this, "maincpu") - , m_rom(*this, "maincpu") - , m_ram(*this, "mainram") - { } - - void vector4(machine_config &config); - -private: - void vector4_io(address_map &map); - void vector4_mem(address_map &map); - - memory_passthrough_handler m_rom_shadow_tap; - required_device m_maincpu; - required_region_ptr m_rom; - required_shared_ptr m_ram; - void machine_reset() override; -}; - - -void vector4_state::vector4_mem(address_map &map) -{ - map.unmap_value_high(); - map(0x0000, 0xffff).ram().share("mainram"); - map(0xe000, 0xefff).rom().region("maincpu", 0); - //map(0xf000, 0xf7ff).ram().share("videoram"); // bios 1,2 - map(0xf800, 0xf8ff).rom().region("maincpu", 0x1000); -} - -void vector4_state::vector4_io(address_map &map) -{ - map.unmap_value_high(); - map.global_mask(0xff); - map(0x00, 0x01).rw("uart0", FUNC(i8251_device::read), FUNC(i8251_device::write)); // keyboard - map(0x02, 0x03).rw("uart1", FUNC(i8251_device::read), FUNC(i8251_device::write)); // terminal, bios 0 only - // map(0x02, 0x03) rom enable and colour - bios 1,2 (bit 0 switches use of 0000-0FFF; LOW = ROM; HIGH = RAM) - map(0x04, 0x05).rw("uart2", FUNC(i8251_device::read), FUNC(i8251_device::write)); // modem - map(0x06, 0x07).rw("uart3", FUNC(i8251_device::read), FUNC(i8251_device::write)); // serial printer - map(0x08, 0x0b).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write)); // parallel/centronics printers - // map(0x0c, 0x0c) select Z80 - // map(0x0d, 0x0d) select 8088 - // map(0x0e, 0x0f) video controller (uses 32.640 xtal) - map(0x10, 0x13).rw("pit", FUNC(pit8253_device::read), FUNC(pit8253_device::write)); // generate 2 baud rates and an interrupt source - // map(0x16, 0x17) RAM address map - // map(0x18, 0x19) Tone Generator - // map(0x1c, 0x1f) Colour Map - // map(0x40, 0x40) undocumented -} - -/* Input ports */ -static INPUT_PORTS_START( vector4 ) -INPUT_PORTS_END - - -void vector4_state::machine_reset() -{ - address_space &program = m_maincpu->space(AS_PROGRAM); - program.install_rom(0x0000, 0x0fff, m_rom); // do it here for F3 - m_rom_shadow_tap.remove(); - m_rom_shadow_tap = program.install_read_tap( - 0xe000, 0xefff, - "rom_shadow_r", - [this] (offs_t offset, u8 &data, u8 mem_mask) - { - if (!machine().side_effects_disabled()) - { - // delete this tap - m_rom_shadow_tap.remove(); - - // reinstall RAM over the ROM shadow - m_maincpu->space(AS_PROGRAM).install_ram(0x0000, 0x0fff, m_ram); - } - }, - &m_rom_shadow_tap); -} - - -void vector4_state::vector4(machine_config &config) -{ - /* basic machine hardware */ - Z80(config, m_maincpu, 5'100'000); // manual says 5.1MHz (8088 uses this frequency too) - m_maincpu->set_addrmap(AS_PROGRAM, &vector4_state::vector4_mem); - m_maincpu->set_addrmap(AS_IO, &vector4_state::vector4_io); - - /* video hardware */ - clock_device &uart_clock(CLOCK(config, "uart_clock", 153600)); - uart_clock.signal_handler().set("uart1", FUNC(i8251_device::write_txc)); - uart_clock.signal_handler().append("uart0", FUNC(i8251_device::write_txc)); - uart_clock.signal_handler().append("uart0", FUNC(i8251_device::write_rxc)); - uart_clock.signal_handler().append("uart1", FUNC(i8251_device::write_rxc)); - uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_txc)); - uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_rxc)); - uart_clock.signal_handler().append("uart3", FUNC(i8251_device::write_txc)); - uart_clock.signal_handler().append("uart3", FUNC(i8251_device::write_rxc)); - - I8251(config, "uart0", 0); - - i8251_device &uart1(I8251(config, "uart1", 0)); - uart1.txd_handler().set("rs232a", FUNC(rs232_port_device::write_txd)); - uart1.dtr_handler().set("rs232a", FUNC(rs232_port_device::write_dtr)); - uart1.rts_handler().set("rs232a", FUNC(rs232_port_device::write_rts)); - - rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, "terminal")); - rs232a.rxd_handler().set("uart1", FUNC(i8251_device::write_rxd)); - rs232a.dsr_handler().set("uart1", FUNC(i8251_device::write_dsr)); - rs232a.cts_handler().set("uart1", FUNC(i8251_device::write_cts)); - - i8251_device &uart2(I8251(config, "uart2", 0)); - uart2.txd_handler().set("rs232b", FUNC(rs232_port_device::write_txd)); - uart2.dtr_handler().set("rs232b", FUNC(rs232_port_device::write_dtr)); - uart2.rts_handler().set("rs232b", FUNC(rs232_port_device::write_rts)); - - rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, nullptr)); - rs232b.rxd_handler().set("uart2", FUNC(i8251_device::write_rxd)); - rs232b.dsr_handler().set("uart2", FUNC(i8251_device::write_dsr)); - rs232b.cts_handler().set("uart2", FUNC(i8251_device::write_cts)); - - i8251_device &uart3(I8251(config, "uart3", 0)); - uart3.txd_handler().set("rs232c", FUNC(rs232_port_device::write_txd)); - uart3.dtr_handler().set("rs232c", FUNC(rs232_port_device::write_dtr)); - uart3.rts_handler().set("rs232c", FUNC(rs232_port_device::write_rts)); - - rs232_port_device &rs232c(RS232_PORT(config, "rs232c", default_rs232_devices, nullptr)); - rs232c.rxd_handler().set("uart3", FUNC(i8251_device::write_rxd)); - rs232c.dsr_handler().set("uart3", FUNC(i8251_device::write_dsr)); - rs232c.cts_handler().set("uart3", FUNC(i8251_device::write_cts)); - - I8255A(config, "ppi"); - PIT8253(config, "pit", 0); -} - -/* ROM definition */ -ROM_START( vector4 ) - ROM_REGION( 0x1100, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "mfdc.bin", 0x1000, 0x0100, CRC(d82a40d6) SHA1(cd1ef5fb0312cd1640e0853d2442d7d858bc3e3b)) - - ROM_SYSTEM_BIOS( 0, "v4c", "ver 4.0c" ) // VECTOR GRAPHIC MONITOR VERSION 4.0C - ROMX_LOAD( "vg40cl_ihl.bin", 0x0000, 0x0400, CRC(dcaf79e6) SHA1(63619ddb12ff51e5862902fb1b33a6630f555ad7), ROM_BIOS(0)) - ROMX_LOAD( "vg40ch_ihl.bin", 0x0400, 0x0400, CRC(3ff97d70) SHA1(b401e49aa97ac106c2fd5ee72d89e683ebe34e34), ROM_BIOS(0)) - - ROM_SYSTEM_BIOS( 1, "v43", "ver 4.3" ) // VECTOR GRAPHIC MONITOR VERSION 4.3 - ROMX_LOAD( "vg-em-43.bin", 0x0000, 0x1000, CRC(29a0fcee) SHA1(ca44de527f525b72f78b1c084c39aa6ce21731b5), ROM_BIOS(1)) - - ROM_SYSTEM_BIOS( 2, "v5", "ver 5.0" ) // VECTOR GRAPHIC EXECUTIVE 5.0 - ROMX_LOAD( "vg-zcb50.bin", 0x0000, 0x1000, CRC(22d692ce) SHA1(cbb21b0acc98983bf5febd59ff67615d71596e36), ROM_BIOS(2)) - - // bios 1,2 need these (pair of 2716) - rom names not known - ROM_REGION( 0x1000, "chargen", ROMREGION_ERASEFF ) - ROM_LOAD( "chargen1.bin", 0x0000, 0x0800, NO_DUMP ) - ROM_LOAD( "chargen2.bin", 0x0800, 0x0800, NO_DUMP ) -ROM_END - -} // anonymous namespace - -/* Driver */ - -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1982, vector4, 0, 0, vector4, vector4, vector4_state, empty_init, "Vector Graphic", "Vector 4", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/stern/cliffhgr.cpp mame-0.251+dfsg.1/src/mame/stern/cliffhgr.cpp --- mame-0.250+dfsg.1/src/mame/stern/cliffhgr.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/stern/cliffhgr.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -782,5 +782,5 @@ GAME( 1983, cliffhgr, 0, cliffhgr, cliffhgr, cliffhgr_state, empty_init, ROT0, "Stern Electronics", "Cliff Hanger (set 1)", 0 ) GAME( 1983, cliffhgra, cliffhgr, cliffhgr, cliffhgra, cliffhgr_state, empty_init, ROT0, "Stern Electronics", "Cliff Hanger (set 2)", 0 ) -GAME( 1983, cliffhgra2,cliffhgr, cliffhgr, cliffhgra, cliffhgr_state, empty_init, ROT0, "Stern Electronics", "Cliff Hanger (set 3)", MACHINE_NOT_WORKING ) // seems to fail the third startup check, bypassable by doing bpset 0x3f5 and at the third occurance do PC = 0x3f7 +GAME( 1983, cliffhgra2,cliffhgr, cliffhgr, cliffhgra, cliffhgr_state, empty_init, ROT0, "Stern Electronics", "Cliff Hanger (set 3)", MACHINE_NOT_WORKING ) // seems to fail the third startup check, bypassable by doing bpset 0x3f5 and at the third occurrence do PC = 0x3f7 GAME( 1983, goaltogo, 0, cliffhgr, goaltogo, cliffhgr_state, empty_init, ROT0, "Stern Electronics", "Goal To Go", MACHINE_NOT_WORKING ) diff -Nru mame-0.250+dfsg.1/src/mame/taito/asuka.cpp mame-0.251+dfsg.1/src/mame/taito/asuka.cpp --- mame-0.250+dfsg.1/src/mame/taito/asuka.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/taito/asuka.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1528,6 +1528,62 @@ ROM_LOAD( "49d7.ic7", 0x60000, 0x20000, CRC(5584c02c) SHA1(00402df66debb257c97a609a37de0f8eeeb6e9f0) ) // ^ ROM_END +// this prototype seems earlier: Test mode doesn't work properly and main CPU ROMs have strings about 'Rainbow' and 'Jump' instead of 'Fire' and 'Warp'. Remnants from Rainbow Island? Did Taito use it as a start for coding Bonze Adventure? +ROM_START( bonzeadvp2 ) // only main CPU first 4 ROMs and audio CPU ROM differ from bonzeadvp. Rest is the same but split in smaller chips. All labels handwritten. + ROM_REGION( 0x100000, "maincpu", ROMREGION_ERASEFF ) // on BV903001B MAIN PCB, 68000 code + ROM_LOAD16_BYTE( "prg 0h.ic17", 0x00000, 0x10000, CRC(ce530615) SHA1(23263f5cb5aa28bb8dfae90351c93056f6560fe6) ) + ROM_LOAD16_BYTE( "prg 0l.ic26", 0x00001, 0x10000, CRC(048a0dcb) SHA1(2b74e8fd1aa9119b528660dc82d5ea3d779f3e7d) ) + ROM_LOAD16_BYTE( "prg 1h.ic16", 0x20000, 0x10000, CRC(e5d63e9b) SHA1(e9cb0052811098c0f1f97575fd297cf5fde5d480) ) + ROM_LOAD16_BYTE( "prg 1l europe.ic25", 0x20001, 0x10000, CRC(d04b8e2b) SHA1(0f9f44a76e90c08745481117d2610eb02ea25d99) ) + // 0x040000 - 0x7ffff is intentionally empty + // these ROMs below are on a ROM P.C.BOARD BT203007B + ROM_LOAD16_BYTE( "map 0h ad2e.ic7", 0x80000, 0x10000, CRC(ca894028) SHA1(8d650763d7451f3c4e0c84fecee73a6e2b7ce653) ) + ROM_LOAD16_BYTE( "map 0l 676f.ic2", 0x80001, 0x10000, CRC(956bc558) SHA1(65ef807ce203e542c38da689fd519f97192e1062) ) + ROM_LOAD16_BYTE( "map 1h 9cbd.ic8", 0xa0000, 0x10000, CRC(08a5320f) SHA1(8ac6b55fb55c5117bb8f980ea7cfa664025d7aa4) ) + ROM_LOAD16_BYTE( "map 1l 95f6.ic3", 0xa0001, 0x10000, CRC(f65988c0) SHA1(e05764217aa7a8b92a3d03227538d67bb4a994c6) ) + ROM_LOAD16_BYTE( "map 2h 0e7e.ic9", 0xc0000, 0x10000, CRC(4513dcf7) SHA1(637dc4bc28b054f27e323febc8ac47d9863e5c13) ) + ROM_LOAD16_BYTE( "map 2l a418.ic4", 0xc0001, 0x10000, CRC(106475e3) SHA1(5a737e933f39a7820300adc8db7f531fd4449b96) ) + // ic10 and ic5 not populated + + ROM_REGION( 0x2000, "cchip:cchip_eprom", 0 ) // on BV903001B MAIN PCB, not dumped + ROM_LOAD( "generic 10-9 f3eb.ic43", 0x0000, 0x2000, BAD_DUMP CRC(75c52553) SHA1(87bbaefab90e7d43f63556fbae3e937baf9d397b) ) // actually 汎用 on label (translated as 'generic'). + // Is the C-Chip the same as the final? Probably not as SUM doesn't match + + ROM_REGION( 0x80000, "tc0100scn", ROMREGION_ERASEFF ) // on a second ROM P.C.BOARD BT203007B + ROM_LOAD16_BYTE( "scn 0h 8711.ic7", 0x00000, 0x10000, CRC(17466da0) SHA1(1de9cc4bcbfa50d6c40d1acd4ac0a47c705e2f09) ) + ROM_LOAD16_BYTE( "scn 0l 7fe0.ic2", 0x00001, 0x10000, CRC(c6413f92) SHA1(ac8b1cfc3ba140a68192df1de6750998f5e357a0) ) + ROM_LOAD16_BYTE( "scn 1h 83b7.ic8", 0x20000, 0x10000, CRC(35fde3c7) SHA1(b6caddff84e607b5ca2dd021151def80ff051f41) ) + ROM_LOAD16_BYTE( "scn 1l 2bde.ic3", 0x20001, 0x10000, CRC(ca459623) SHA1(b071e672df6872fa777d1baae663ec85f92ec728) ) + ROM_LOAD16_BYTE( "scn 2h f411.ic9", 0x40000, 0x10000, CRC(229debcf) SHA1(ea99d0ea0169b72109b830cd335a43eb122c0e34) ) + ROM_LOAD16_BYTE( "scn 2l db08.ic4", 0x40001, 0x10000, CRC(2431e8db) SHA1(1773f0dfe59c4cb9b114a784f345b7fc05bb8934) ) + // ic10 and ic5 not populated + + ROM_REGION( 0x80000, "pc090oj", 0 ) // on a third ROM P.C.BOARD BT203007B + ROM_LOAD16_BYTE( "obj 0h 6ce2.ic7", 0x00000, 0x10000, CRC(d5bff0fd) SHA1(c4998a788c48371d0f83ebec8987b584c5e94d1a) ) + ROM_LOAD16_BYTE( "obj 0l c67e.ic2", 0x00001, 0x10000, CRC(2f9615a8) SHA1(d89f122ce4af193f56560f5183993e242b22551c) ) // actual SUM of the dump is c672, but given data matches the other existing dumps the one on the label is probably a typo + ROM_LOAD16_BYTE( "obj 1h 7708.ic8", 0x20000, 0x10000, CRC(81357279) SHA1(241954743238815a18598d76d96a8a312e087351) ) // actual SUM of the dump is 770b, but given data matches the other existing dumps the one on the label is probably a typo + ROM_LOAD16_BYTE( "obj 1l ccf7.ic3", 0x20001, 0x10000, CRC(c7a654d9) SHA1(58b7e5e2e05f7980ad199083b31b5c406b99298e) ) + ROM_LOAD16_BYTE( "obj 2h 818b.ic9", 0x40000, 0x10000, CRC(d614732b) SHA1(0bfa5dd2876a3480d4f5f3e2baeb94e9601a691a) ) + ROM_LOAD16_BYTE( "obj 2l 6096.ic4", 0x40001, 0x10000, CRC(6dd67af8) SHA1(7d9d836d0aee2d3d636f28af84bf5f04fc54db74) ) + ROM_LOAD16_BYTE( "obj 3h 3756.ic10", 0x60000, 0x10000, CRC(981e66a9) SHA1(98db800e99a2508fbe05a8bf12617abd18721f4b) ) + ROM_LOAD16_BYTE( "obj 3l a355.ic5", 0x60001, 0x10000, CRC(173ddd11) SHA1(c28fd4f728066f7926752f9af1115bc90ce838fc) ) + + ROM_REGION( 0x10000, "audiocpu", 0 ) // on BV903001B MAIN PCB + ROM_LOAD( "sound main 3-9.ic20", 0x00000, 0x10000, CRC(2b4fc69a) SHA1(030ba4eb81c59174527edcda65f2ed94bd768140) ) // actual label is 3/9 instead of 3-9, possibly a date? + + // no ADPCM-A samples + + ROM_REGION( 0x80000, "ymsnd:adpcmb", 0 ) // on KE7X0003B 4M 8BIT ROM BOARD, // actual label is 3/8 instead of 3-8, possibly a date? + ROM_LOAD( "sound 0h 3-8.ic2", 0x00000, 0x10000, CRC(2996e756) SHA1(b6fa6f20bdecb1e6ed7166083c9581f8f97f9836) ) + ROM_LOAD( "sound 1h 3-8.ic3", 0x10000, 0x10000, CRC(780368ac) SHA1(bc5592fbefa310b1c496b4a9f60e29cb1efa9070) ) + ROM_LOAD( "sound 2h 3-8.ic4", 0x20000, 0x10000, CRC(8f3b9fa5) SHA1(c4d536af730336b70813653e3b216f7ca9518909) ) + ROM_LOAD( "sound 3h 3-8.ic5", 0x30000, 0x10000, CRC(1a8be621) SHA1(410a4f93e95f1824643ee918a06fb8c3ac93765d) ) + ROM_LOAD( "sound 0l 3-8.ic7", 0x40000, 0x10000, CRC(3711abfa) SHA1(35237b13b201f2883bc969ebbb51f7e112f0eb35) ) + ROM_LOAD( "sound 1l 3-8.ic8", 0x50000, 0x10000, CRC(f24a3d1a) SHA1(c2d8a8e4835429b7830dad5a8d3cdf1afe21b7d6) ) + ROM_LOAD( "sound 2l 3-8.ic9", 0x60000, 0x10000, CRC(5987900c) SHA1(1109e48d196b3ed5788326df235f1ad950492d17) ) + ROM_LOAD( "sound 3l 3-8.ic10", 0x70000, 0x10000, CRC(e8a6a9e6) SHA1(435a599d188f6c4650bd3dd72d8080541824148d) ) +ROM_END + ROM_START( asuka ) // Taito PCB: ASKA&ASKA - K1100388A / J1100169A ROM_REGION( 0x100000, "maincpu", 0 ) // 1024k for 68000 code ROM_LOAD16_BYTE( "b68-13.ic23", 0x00000, 0x20000, CRC(855efb3e) SHA1(644e02e207adeaec7839c824688d88ab8d046418) ) @@ -2105,11 +2161,12 @@ } // Anonymous namespace -GAME( 1988, bonzeadv, 0, bonzeadv, bonzeadv, bonzeadv_state, empty_init, ROT0, "Taito Corporation Japan", "Bonze Adventure (World, Newer)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, bonzeadvo, bonzeadv, bonzeadv, bonzeadv, bonzeadv_state, empty_init, ROT0, "Taito Corporation Japan", "Bonze Adventure (World, Older)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, bonzeadv, 0, bonzeadv, bonzeadv, bonzeadv_state, empty_init, ROT0, "Taito Corporation Japan", "Bonze Adventure (World, newer)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, bonzeadvo, bonzeadv, bonzeadv, bonzeadv, bonzeadv_state, empty_init, ROT0, "Taito Corporation Japan", "Bonze Adventure (World, older)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, bonzeadvu, bonzeadv, bonzeadv, jigkmgri, bonzeadv_state, empty_init, ROT0, "Taito America Corporation", "Bonze Adventure (US)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, jigkmgri, bonzeadv, bonzeadv, jigkmgri, bonzeadv_state, empty_init, ROT0, "Taito Corporation", "Jigoku Meguri (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, bonzeadvp, bonzeadv, bonzeadv, jigkmgri, bonzeadv_state, empty_init, ROT0, "Taito Corporation Japan", "Bonze Adventure (World, prototype)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, bonzeadvp, bonzeadv, bonzeadv, jigkmgri, bonzeadv_state, empty_init, ROT0, "Taito Corporation Japan", "Bonze Adventure (World, prototype, newer)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, bonzeadvp2,bonzeadv, bonzeadv, jigkmgri, bonzeadv_state, empty_init, ROT0, "Taito Corporation Japan", "Bonze Adventure (World, prototype, older)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, asuka, 0, asuka, asuka, msm_state, empty_init, ROT270, "Taito Corporation", "Asuka & Asuka (World)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, asukaj, asuka, asuka, asuka, msm_state, empty_init, ROT270, "Taito Corporation", "Asuka & Asuka (Japan, version 1)", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/taito/minivadr.cpp mame-0.251+dfsg.1/src/mame/taito/minivadr.cpp --- mame-0.250+dfsg.1/src/mame/taito/minivadr.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/taito/minivadr.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -5,7 +5,7 @@ Mini Vaders (Space Invaders's mini game) (c)1990 Taito Corporation -Driver by Takahiro Nogi (nogi@kt.rim.or.jp) 1999/12/19 - +Driver by Takahiro Nogi 1999/12/19 - This is a test board sold together with the cabinet (as required by law in Japan). It has no sound. diff -Nru mame-0.250+dfsg.1/src/mame/taito/taitopjc.cpp mame-0.251+dfsg.1/src/mame/taito/taitopjc.cpp --- mame-0.250+dfsg.1/src/mame/taito/taitopjc.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/taito/taitopjc.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -917,7 +917,7 @@ ROM_LOAD32_WORD_SWAP( "e63-22_m-h.25", 0x800000, 0x400000, CRC(6d895eb6) SHA1(473795da42fd29841a926f18a93e5992f4feb27c) ) ROM_LOAD32_WORD_SWAP( "e63-16_m-l.10", 0x800002, 0x400000, CRC(d39c1e34) SHA1(6db0ce2251841db3518a9bd9c4520c3c666d19a0) ) - ROM_REGION16_BE( 0xc00000, "poly", 0 ) + ROM_REGION16_BE( 0x1000000, "poly", ROMREGION_ERASEFF ) ROM_LOAD16_WORD_SWAP( "e63-09_poly0.3", 0x000000, 0x400000, CRC(c3e2b1e0) SHA1(ee71f3f59b46e26dbe2ff724da2c509267c8bf2f) ) ROM_LOAD16_WORD_SWAP( "e63-10_poly1.4", 0x400000, 0x400000, CRC(f4a56390) SHA1(fc3c51a7f4639479e66ad50dcc94255d94803c97) ) ROM_LOAD16_WORD_SWAP( "e63-11_poly2.5", 0x800000, 0x400000, CRC(2293d9f8) SHA1(16adaa0523168ee63a7a34b29622c623558fdd82) ) diff -Nru mame-0.250+dfsg.1/src/mame/taito/tnzs.cpp mame-0.251+dfsg.1/src/mame/taito/tnzs.cpp --- mame-0.250+dfsg.1/src/mame/taito/tnzs.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/taito/tnzs.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -631,7 +631,7 @@ Kageki (c) 1988 Taito Corporation - Driver by Takahiro Nogi (nogi@kt.rim.or.jp) 1999/11/06 + Driver by Takahiro Nogi 1999/11/06 ***************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/tangerine/microtan.cpp mame-0.251+dfsg.1/src/mame/tangerine/microtan.cpp --- mame-0.250+dfsg.1/src/mame/tangerine/microtan.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/tangerine/microtan.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -3,10 +3,6 @@ /****************************************************************************** * Microtan 65 * - * system driver - * - * Juergen Buchmueller , Jul 2000 - * * Thanks go to Geoff Macdonald * for his site http://www.geoff.org.uk/microtan/index.htm * and to Fabrice Frances @@ -49,11 +45,32 @@ * BAS Start BASIC * WAR Re-enter BASIC (warm start) * - * The keyboard is essentially an ordinary ASCII keyboard, with 71 keys, 8 - * TTL chips and an undumped 2716 eprom labelled MON V1. We currently use a - * generic keyboard because of the lack of a schematic. Unemulated keys are - * 'SHIFT LOCK' and 'REPT'. Since all commands must be uppercase, capslock - * is defaulted to on. + * Ralbug commnds: + * COP Copy + * MEM Modify memory + * SYW Warm start to DOS system + * SYC Cold start to DOS system + * SYB Boot DOS system + * LIS List a line of memory + * JMP Go to address that follows + * JSR JSR to following address + * JMI Jump indirect + * JSI JSR indirect + * TES Memory test + * CLR Clear screen + * COL Colour change + * HEL Help display menu + * VEC List vector jump table + * FIL Fill Memory + * CUR Cursor move + * ASC ASCII table display + * SYN Command syntax + * HOM Home cursor + * WAR Warm start $0003 + * STA Start $0000 + * EXP Expand monitor + * BLE Keyboard bleep + * KIL Kill off the cache * *****************************************************************************/ @@ -72,7 +89,7 @@ map(0x0000, 0x01ff).ram(); map(0x0200, 0x03ff).ram().w(FUNC(microtan_state::videoram_w)).share(m_videoram); map(0xbff0, 0xbfff).rw(FUNC(microtan_state::bffx_r), FUNC(microtan_state::bffx_w)); - map(0xf800, 0xffff).rom(); + map(0xf800, 0xffff).rom().region("maincpu", 0); } void microtan_state::spinv_map(address_map &map) @@ -80,181 +97,39 @@ map.unmap_value_high(); map(0x0000, 0x01ff).ram(); map(0x0200, 0x03ff).ram().w(FUNC(microtan_state::videoram_w)).share(m_videoram); - map(0xbc04, 0xbc04).rw(FUNC(microtan_state::sound_r), FUNC(microtan_state::sound_w)); map(0xbff0, 0xbfff).rw(FUNC(microtan_state::bffx_r), FUNC(microtan_state::bffx_w)); - map(0xe800, 0xefff).rom().mirror(0x1000); + map(0xf800, 0xffff).rom().region("maincpu", 0); } void mt6809_state::mt6809_map(address_map &map) { map(0x0000, 0xffff).rw(m_tanbus, FUNC(tanbus_device::read), FUNC(tanbus_device::write)); - map(0xdc00, 0xdfff).ram(); - map(0xdfd8, 0xdfd8).r(FUNC(mt6809_state::keyboard_r)); - map(0xf800, 0xffff).rom(); + map(0x0000, 0x03ff).ram(); + map(0xbff0, 0xbfff).rw(FUNC(mt6809_state::bffx_r), FUNC(mt6809_state::bffx_w)); + map(0xf800, 0xffff).rom().region("maincpu", 0); } -INPUT_CHANGED_MEMBER(microtan_state::trigger_reset) +WRITE_LINE_MEMBER(microtan_state::trigger_reset) { - m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); + m_maincpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE); - if (newval) + if (state) + { + machine().schedule_soft_reset(); + } +} + +WRITE_LINE_MEMBER(mt6809_state::trigger_reset) +{ + m_maincpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE); + + if (state) { machine().schedule_soft_reset(); } } -static INPUT_PORTS_START( microtan ) - PORT_START("CONFIG") - PORT_CONFNAME(0x03, 0x00, "Input") - PORT_CONFSETTING(0x00, "ASCII Keyboard") - PORT_CONFSETTING(0x01, "Hex Keypad") - - PORT_START("KBD0") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("1 !") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("2 \"") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3 #") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4 $") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("5 %") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6 &") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&') - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7 \'") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR(39) - - PORT_START("KBD1") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8 (") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9 )") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('~') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(": *") PORT_CODE(KEYCODE_MINUS) PORT_CHAR(':') PORT_CHAR('*') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("- =") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('-') PORT_CHAR('=') - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("NEW PAGE") PORT_CODE(KEYCODE_TILDE) PORT_CHAR(12) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RUB OUT") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_TAB) PORT_CHAR('^') PORT_CHAR('_') - - PORT_START("KBD2") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q') - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w') - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t') - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y') - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u') - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i') - - PORT_START("KBD3") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o') - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p') - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("[ {") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("] }") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(']') PORT_CHAR('}') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RETURN") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("BREAK") PORT_CODE(KEYCODE_DEL) PORT_CHAR(3) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ALFA LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE - - PORT_START("KBD4") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a') - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s') - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g') - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h') - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j') - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k') - - PORT_START("KBD5") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l') - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("; +") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+') - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("@") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('@') PORT_CHAR('`') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\\ |") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('\\') PORT_CHAR('|') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SHIFT (L)") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z') - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x') - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c') - - PORT_START("KBD6") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v') - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b') - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(", <") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SHIFT (R)") PORT_CODE(KEYCODE_RSHIFT) - - PORT_START("KBD7") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("LINE FEED") PORT_CHAR(10) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(32) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("- (KP)") PORT_CODE(KEYCODE_MINUS_PAD) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(", (KP)") PORT_CODE(KEYCODE_PLUS_PAD) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ENTER (KP)") PORT_CODE(KEYCODE_ENTER_PAD) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(". (KP)") PORT_CODE(KEYCODE_DEL_PAD) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0 (KP)") PORT_CODE(KEYCODE_0_PAD) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("1 (KP)") PORT_CODE(KEYCODE_1_PAD) - - PORT_START("KBD8") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("2 (KP)") PORT_CODE(KEYCODE_2_PAD) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3 (KP)") PORT_CODE(KEYCODE_3_PAD) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4 (KP)") PORT_CODE(KEYCODE_4_PAD) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("5 (KP)") PORT_CODE(KEYCODE_5_PAD) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6 (KP)") PORT_CODE(KEYCODE_6_PAD) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7 (KP)") PORT_CODE(KEYCODE_7_PAD) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8 (KP)") PORT_CODE(KEYCODE_8_PAD) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9 (KP)") PORT_CODE(KEYCODE_9_PAD) - - PORT_START("KPAD0") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("0") PORT_CODE(KEYCODE_0_PAD) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("4") PORT_CODE(KEYCODE_4_PAD) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("8 P") PORT_CODE(KEYCODE_8_PAD) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("C M") PORT_CODE(KEYCODE_C) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) - PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("KPAD1") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("1") PORT_CODE(KEYCODE_1_PAD) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("5 O") PORT_CODE(KEYCODE_5_PAD) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("9 ESC") PORT_CODE(KEYCODE_9_PAD) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("D G") PORT_CODE(KEYCODE_D) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("LF DEL") PORT_CODE(KEYCODE_DEL_PAD) - PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("KPAD2") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("2") PORT_CODE(KEYCODE_2_PAD) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("6 C") PORT_CODE(KEYCODE_6_PAD) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("A") PORT_CODE(KEYCODE_A) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("E S") PORT_CODE(KEYCODE_E) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("CR SP") PORT_CODE(KEYCODE_ENTER_PAD) - PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("KPAD3") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("3 '") PORT_CODE(KEYCODE_3_PAD) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("7 R") PORT_CODE(KEYCODE_7_PAD) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("B L") PORT_CODE(KEYCODE_B) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("F N") PORT_CODE(KEYCODE_F) - PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("BRK") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RESET") PORT_CODE(KEYCODE_F12) PORT_CHAR(UCHAR_MAMEKEY(F12)) PORT_CHANGED_MEMBER(DEVICE_SELF, microtan_state, trigger_reset, 0) -INPUT_PORTS_END - -static INPUT_PORTS_START( spinveti ) - PORT_START("CONFIG") - PORT_CONFNAME(0x03, 0x02, "Input") - PORT_CONFSETTING(0x02, "ETI Keypad") - PORT_CONFNAME(0x60, 0x20, "Difficulty") - PORT_CONFSETTING(0x00, "Easy") - PORT_CONFSETTING(0x20, "Normal") - PORT_CONFSETTING(0x40, "Hard") - PORT_CONFSETTING(0x60, "Hardest") - - PORT_START("KEYPAD") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Play") PORT_CODE(KEYCODE_ENTER) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Fire") PORT_CODE(KEYCODE_LCONTROL) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Hold") PORT_CODE(KEYCODE_H) - - PORT_START("BRK") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Reset") PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, microtan_state, trigger_reset, 0) -INPUT_PORTS_END static const gfx_layout char_layout = { @@ -279,10 +154,12 @@ M6502(config, m_maincpu, 6_MHz_XTAL / 8); m_maincpu->set_addrmap(AS_PROGRAM, µtan_state::mt65_map); - TIMER(config, "kbd_timer").configure_periodic(FUNC(microtan_state::kbd_scan), attotime::from_hz(45)); - INPUT_MERGER_ANY_HIGH(config, m_irq_line).output_handler().set_inputline(m_maincpu, M6502_IRQ_LINE); + MICROTAN_KBD_SLOT(config, m_keyboard, microtan_kbd_devices, "mt009"); + m_keyboard->strobe_handler().set(FUNC(microtan_state::kbd_int)); + m_keyboard->reset_handler().set(FUNC(microtan_state::trigger_reset)); + /* video hardware - include overscan */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_raw(6_MHz_XTAL, 384, 0, 32*8, 312, 0, 16*16); @@ -348,6 +225,10 @@ INPUT_MERGER_ANY_HIGH(config, m_irq_line).output_handler().set_inputline(m_maincpu, M6502_IRQ_LINE); + MICROTAN_KBD_SLOT(config, m_keyboard, microtan_kbd_devices, "spinveti"); + m_keyboard->strobe_handler().set(FUNC(microtan_state::kbd_int)); + m_keyboard->reset_handler().set(FUNC(microtan_state::trigger_reset)); + /* video hardware - include overscan */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_raw(6_MHz_XTAL, 384, 0, 32*8, 312, 0, 16*16); @@ -357,59 +238,57 @@ GFXDECODE(config, m_gfxdecode, "palette", gfx_microtan); PALETTE(config, "palette", palette_device::MONOCHROME); - - /* TODO: Sound hardware */ } static DEVICE_INPUT_DEFAULTS_START(ra32k_def_ram0000) /* 32K RAM configured 0x0000-0x7fff */ - DEVICE_INPUT_DEFAULTS("SW1", 0xff, 0xff) // all blocks enabled - DEVICE_INPUT_DEFAULTS("SW2", 0xff, 0xff) // all blocks enabled - DEVICE_INPUT_DEFAULTS("SW3", 0x0f, 0x0f) // start address $0000 - DEVICE_INPUT_DEFAULTS("LNK1", 0x03, 0x01) + DEVICE_INPUT_DEFAULTS("DSW1", 0xff, 0xff) // all blocks enabled + DEVICE_INPUT_DEFAULTS("DSW2", 0xff, 0xff) // all blocks enabled + DEVICE_INPUT_DEFAULTS("DSW3", 0x0f, 0x0f) // start address $0000 + DEVICE_INPUT_DEFAULTS("LNK1", 0x01, 0x01) // paged DEVICE_INPUT_DEFAULTS_END static DEVICE_INPUT_DEFAULTS_START(ra32k_def_ram8000) /* 32K RAM configured 0x8000-0xffff */ - DEVICE_INPUT_DEFAULTS("SW1", 0xff, 0x7f) // disable block $F800 - DEVICE_INPUT_DEFAULTS("SW2", 0xff, 0xff) // all blocks enabled - DEVICE_INPUT_DEFAULTS("SW3", 0x0f, 0x0d) // start address $8000 - DEVICE_INPUT_DEFAULTS("LNK1", 0x03, 0x00) + DEVICE_INPUT_DEFAULTS("DSW1", 0xff, 0x7f) // disable block $F800 + DEVICE_INPUT_DEFAULTS("DSW2", 0xff, 0xff) // all blocks enabled + DEVICE_INPUT_DEFAULTS("DSW3", 0x0f, 0x0d) // start address $8000 + DEVICE_INPUT_DEFAULTS("LNK1", 0x01, 0x00) // permanent DEVICE_INPUT_DEFAULTS_END -static DEVICE_INPUT_DEFAULTS_START(ra32k_def_rom2000) +static DEVICE_INPUT_DEFAULTS_START(ra32k_def_rom0000) /* 8K EPROM configured 0x2000-0x3fff */ - DEVICE_INPUT_DEFAULTS("SW1", 0xff, 0xff) // all blocks enabled - DEVICE_INPUT_DEFAULTS("SW2", 0xff, 0xff) // all blocks enabled - DEVICE_INPUT_DEFAULTS("SW3", 0x0f, 0x04) // start address $2000 - DEVICE_INPUT_DEFAULTS("LNK1", 0x03, 0x02) + DEVICE_INPUT_DEFAULTS("DSW1", 0xff, 0xff) // all blocks enabled + DEVICE_INPUT_DEFAULTS("DSW2", 0xff, 0xff) // all blocks enabled + DEVICE_INPUT_DEFAULTS("DSW3", 0x0f, 0x0f) // start address $0000 + DEVICE_INPUT_DEFAULTS("LNK1", 0x01, 0x01) // paged DEVICE_INPUT_DEFAULTS_END void mt6809_state::mt6809(machine_config &config) { /* Ralph Allen 6809 CPU Board */ - MC6809(config, m_maincpu, 6_MHz_XTAL / 4); // TODO: verify divider + MC6809(config, m_maincpu, 6_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &mt6809_state::mt6809_map); - TIMER(config, "kbd_timer").configure_periodic(FUNC(microtan_state::kbd_scan), attotime::from_hz(45)); - - INPUT_MERGER_ANY_HIGH(config, m_irq_line).output_handler().set_inputline(m_maincpu, M6809_IRQ_LINE); + MICROTAN_KBD_SLOT(config, m_keyboard, microtan_kbd_devices, "mt009"); + m_keyboard->strobe_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); + m_keyboard->reset_handler().set(FUNC(mt6809_state::trigger_reset)); /* Microtan Motherboard */ TANBUS(config, m_tanbus, 6_MHz_XTAL); - m_tanbus->out_irq_callback().set(m_irq_line, FUNC(input_merger_device::in_w)); + m_tanbus->out_irq_callback().set_inputline(m_maincpu, M6809_IRQ_LINE); m_tanbus->out_nmi_callback().set_inputline(m_maincpu, M6809_FIRQ_LINE); TANBUS_SLOT(config, "tanbus:tanex", -1, tanex_devices, nullptr); - TANBUS_SLOT(config, "tanbus:0", 0, tanbus6809_devices, "ra32k").set_option_device_input_defaults("ra32k", DEVICE_INPUT_DEFAULTS_NAME(ra32k_def_ram0000)); - TANBUS_SLOT(config, "tanbus:1", 1, tanbus6809_devices, "ra32k").set_option_device_input_defaults("ra32k", DEVICE_INPUT_DEFAULTS_NAME(ra32k_def_ram8000)); + TANBUS_SLOT(config, "tanbus:0", 0, tanbus6809_devices, "ra32kram").set_option_device_input_defaults("ra32kram", DEVICE_INPUT_DEFAULTS_NAME(ra32k_def_ram0000)); + TANBUS_SLOT(config, "tanbus:1", 1, tanbus6809_devices, "ra32kram").set_option_device_input_defaults("ra32kram", DEVICE_INPUT_DEFAULTS_NAME(ra32k_def_ram8000)); TANBUS_SLOT(config, "tanbus:2", 2, tanbus6809_devices, "ravdu"); - TANBUS_SLOT(config, "tanbus:3", 3, tanbus6809_devices, "radisc"); + TANBUS_SLOT(config, "tanbus:3", 3, tanbus6809_devices, nullptr); TANBUS_SLOT(config, "tanbus:4", 4, tanbus6809_devices, nullptr); - TANBUS_SLOT(config, "tanbus:5", 5, tanbus6809_devices, nullptr); + TANBUS_SLOT(config, "tanbus:5", 5, tanbus6809_devices, "radisc"); TANBUS_SLOT(config, "tanbus:6", 6, tanbus6809_devices, nullptr); - TANBUS_SLOT(config, "tanbus:7", 7, tanbus6809_devices, "ra32k").set_option_device_input_defaults("ra32k", DEVICE_INPUT_DEFAULTS_NAME(ra32k_def_rom2000)); + TANBUS_SLOT(config, "tanbus:7", 7, tanbus6809_devices, "ra32krom").set_option_device_input_defaults("ra32krom", DEVICE_INPUT_DEFAULTS_NAME(ra32k_def_rom0000)); TANBUS_SLOT(config, "tanbus:exp", 8, tanbus6809_devices, nullptr); /* software lists */ @@ -418,69 +297,69 @@ ROM_START( mt65 ) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION(0x0800, "maincpu", 0) ROM_DEFAULT_BIOS("tanbug23") /* Microtan 65 (MT0016 Iss 1) */ ROM_SYSTEM_BIOS(0, "tanbug23", "TANBUG V2.3") - ROMX_LOAD("tanbug23.k3", 0xf800, 0x0800, CRC(7f29845d) SHA1(de277e942eefa11a9a6defe3d7d03071d5100b68), ROM_BIOS(0)) + ROMX_LOAD("tanbug23.k3", 0x0000, 0x0800, CRC(7f29845d) SHA1(de277e942eefa11a9a6defe3d7d03071d5100b68), ROM_BIOS(0)) ROM_SYSTEM_BIOS(1, "tanbug23p", "TANBUG V2.3 (patched)") - ROMX_LOAD("tanbug_2.rom", 0xf800, 0x0400, CRC(7e215313) SHA1(c8fb3d33ce2beaf624dc75ec57d34c216b086274), ROM_BIOS(1)) - ROMX_LOAD("tanbug.rom", 0xfc00, 0x0400, CRC(c8221d9e) SHA1(c7fe4c174523aaaab30be7a8c9baf2bc08b33968), ROM_BIOS(1)) + ROMX_LOAD("tanbug_2.rom", 0x0000, 0x0400, CRC(7e215313) SHA1(c8fb3d33ce2beaf624dc75ec57d34c216b086274), ROM_BIOS(1)) + ROMX_LOAD("tanbug.rom", 0x0400, 0x0400, CRC(c8221d9e) SHA1(c7fe4c174523aaaab30be7a8c9baf2bc08b33968), ROM_BIOS(1)) ROM_SYSTEM_BIOS(2, "tanbug31", "TANBUG V3.1 (TANDOS)") - ROMX_LOAD("tanbug31.k3", 0xf800, 0x0800, CRC(5943e427) SHA1(55fe645363cd5f2015a537be6f7a00de33d1bea5), ROM_BIOS(2)) + ROMX_LOAD("tanbug31.k3", 0x0000, 0x0800, CRC(5943e427) SHA1(55fe645363cd5f2015a537be6f7a00de33d1bea5), ROM_BIOS(2)) ROM_SYSTEM_BIOS(3, "tanbug3b", "TANBUG V.3B (MPVDU)") - ROMX_LOAD("tanbug3b.k3", 0xf800, 0x0800, CRC(5b49f861) SHA1(b37cddf97b6324ab0647479b5b013a9b3d47ddda), ROM_BIOS(3)) + ROMX_LOAD("tanbug3b.k3", 0x0000, 0x0800, CRC(5b49f861) SHA1(b37cddf97b6324ab0647479b5b013a9b3d47ddda), ROM_BIOS(3)) ROM_SYSTEM_BIOS(4, "tugbug11", "TUGBUG V1.1 (VID8082)") - ROMX_LOAD("tugbug11.k3", 0xf800, 0x0800, CRC(23b02439) SHA1(9e56fbd6c07b1dc5c10e7b574a5ea26405781a3d), ROM_BIOS(4)) + ROMX_LOAD("tugbug11.k3", 0x0000, 0x0800, CRC(23b02439) SHA1(9e56fbd6c07b1dc5c10e7b574a5ea26405781a3d), ROM_BIOS(4)) + /* DM8678BWF (upper case) and DM8678CAE (lower case) */ ROM_REGION(0x1000, "gfx1", 0) ROM_LOAD("charset.rom", 0x0000, 0x0800, CRC(3b3c5360) SHA1(a3a2f74149107f8b8f35b15069c71f3aa843d12f)) ROM_RELOAD(0x0800, 0x0800) ROM_REGION(0x1000, "gfx2", ROMREGION_ERASEFF) - // initialized in init_gfx2 ROM_END ROM_START( micron ) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION(0x0800, "maincpu", 0) ROM_DEFAULT_BIOS("tanbug1") /* MT65 (Iss 0) */ ROM_SYSTEM_BIOS(0, "tanbug1", "TANBUG V1") - ROMX_LOAD("tanbug1.g2", 0xf800, 0x0400, CRC(6f45aaca) SHA1(c1a020d86830ee475ee75c847e98f7a02d467659), ROM_BIOS(0) | ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO) - ROM_RELOAD(0xfc00, 0x0400) - ROMX_LOAD("tanbug1.h2", 0xf800, 0x0400, CRC(1ccd6b8f) SHA1(49784749599255458ba5513d8c2fc58c4df39515), ROM_BIOS(0) | ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI) - ROM_RELOAD(0xfc00, 0x0400) + ROMX_LOAD("tanbug1.g2", 0x0000, 0x0400, CRC(6f45aaca) SHA1(c1a020d86830ee475ee75c847e98f7a02d467659), ROM_BIOS(0) | ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO) + ROM_RELOAD(0x0400, 0x0400) + ROMX_LOAD("tanbug1.h2", 0x0000, 0x0400, CRC(1ccd6b8f) SHA1(49784749599255458ba5513d8c2fc58c4df39515), ROM_BIOS(0) | ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI) + ROM_RELOAD(0x0400, 0x0400) + /* DM8678BWF (upper case) and DM8678CAE (lower case) */ ROM_REGION(0x1000, "gfx1", 0) ROM_LOAD("charset.rom", 0x0000, 0x0800, CRC(3b3c5360) SHA1(a3a2f74149107f8b8f35b15069c71f3aa843d12f)) ROM_RELOAD(0x0800, 0x0800) ROM_REGION(0x1000, "gfx2", ROMREGION_ERASEFF) - // initialized in init_gfx2 ROM_END ROM_START( spinveti ) - ROM_REGION(0x10000, "maincpu", 0) - ROM_LOAD("spaceinv.ic20", 0xe800, 0x0800, CRC(3e235077) SHA1(ae7d2788125d01a3c5d57ab0d992bd708abd6ade)) + ROM_REGION(0x0800, "maincpu", 0) + ROM_LOAD("spaceinv.ic20", 0x0000, 0x0800, CRC(c0b074e0) SHA1(464be4082bd60d825c0c1e7ae033d7ab095c8e70)) + /* DM8678BWF only */ ROM_REGION(0x1000, "gfx1", 0) ROM_LOAD("charset.rom", 0x0000, 0x0800, CRC(3b3c5360) SHA1(a3a2f74149107f8b8f35b15069c71f3aa843d12f)) ROM_RELOAD(0x0800, 0x0800) ROM_REGION(0x1000, "gfx2", ROMREGION_ERASEFF) - // initialized in init_gfx2 ROM_END ROM_START( mt6809 ) /* 6809 CPU Card (Ralph Allen Engineering) */ - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION(0x0800, "maincpu", 0) ROM_SYSTEM_BIOS(0, "ralbug14", "RALBUG V1.4") - ROMX_LOAD("ralbug14.rom", 0xf800, 0x0800, CRC(8bbc87d8) SHA1(3d53a6ffd4a8d7c8edf4f2e23946011ed29146ce), ROM_BIOS(0)) + ROMX_LOAD("ralbug14.rom", 0x0000, 0x0800, CRC(8bbc87d8) SHA1(3d53a6ffd4a8d7c8edf4f2e23946011ed29146ce), ROM_BIOS(0)) ROM_END -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1979, mt65, 0, 0, mt65, microtan, microtan_state, init_microtan, "Tangerine", "Microtan 65", MACHINE_NO_SOUND_HW ) -COMP( 1980, micron, mt65, 0, micron, microtan, microtan_state, init_microtan, "Tangerine", "Micron", MACHINE_NO_SOUND_HW ) -COMP( 1980, spinveti, 0, 0, spinveti, spinveti, microtan_state, init_gfx2, "Tangerine/ETI", "Space Invasion (ETI)", MACHINE_NO_SOUND ) -COMP( 1984, mt6809, mt65, 0, mt6809, microtan, mt6809_state, empty_init, "Tangerine", "Microtan 6809 System", MACHINE_NO_SOUND_HW | MACHINE_NOT_WORKING ) +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 1979, mt65, 0, 0, mt65, 0, microtan_state, empty_init, "Tangerine", "Microtan 65", MACHINE_NO_SOUND_HW ) +COMP( 1980, micron, mt65, 0, micron, 0, microtan_state, empty_init, "Tangerine", "Micron", MACHINE_NO_SOUND_HW ) +COMP( 1980, spinveti, 0, 0, spinveti, 0, microtan_state, empty_init, "Tangerine/ETI", "Space Invasion (ETI)", MACHINE_NO_SOUND ) +COMP( 1984, mt6809, mt65, 0, mt6809, 0, mt6809_state, empty_init, "Tangerine", "Microtan 6809 System", MACHINE_NO_SOUND_HW ) diff -Nru mame-0.250+dfsg.1/src/mame/tangerine/microtan.h mame-0.251+dfsg.1/src/mame/tangerine/microtan.h --- mame-0.250+dfsg.1/src/mame/tangerine/microtan.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/tangerine/microtan.h 2022-12-29 14:20:09.000000000 +0000 @@ -3,10 +3,6 @@ /****************************************************************************** * Microtan 65 * - * variables and function prototypes - * - * Juergen Buchmueller , Jul 2000 - * * Thanks go to Geoff Macdonald * for his site http://www.geoff.org.uk/microtan/index.htm * and to Fabrice Frances @@ -22,8 +18,8 @@ #include "cpu/m6502/m6502.h" #include "cpu/m6809/m6809.h" #include "machine/input_merger.h" -#include "machine/timer.h" #include "bus/tanbus/tanbus.h" +#include "bus/tanbus/keyboard/keyboard.h" #include "imagedev/snapquik.h" #include "tilemap.h" @@ -34,68 +30,49 @@ : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_irq_line(*this, "irq_line") - , m_config(*this, "CONFIG") - , m_io_keyboard(*this, "KBD%u", 0) - , m_io_keypad(*this, "KPAD%u", 0) - , m_keypad(*this, "KEYPAD") + , m_keyboard(*this, "keyboard") , m_tanbus(*this, "tanbus") , m_videoram(*this, "videoram") , m_gfxdecode(*this, "gfxdecode") , m_gfx1(*this, "gfx1") - , m_led(*this, "led1") { } void mt65(machine_config &config); void micron(machine_config &config); void spinveti(machine_config &config); - void init_gfx2(); - void init_microtan(); - - TIMER_DEVICE_CALLBACK_MEMBER(kbd_scan); - uint8_t bffx_r(offs_t offset); - void bffx_w(offs_t offset, uint8_t data); - DECLARE_INPUT_CHANGED_MEMBER(trigger_reset); + DECLARE_WRITE_LINE_MEMBER(trigger_reset); protected: - enum { IRQ_KBD, IRQ_TANBUS }; - virtual void machine_start() override; - virtual void machine_reset() override; virtual void video_start() override; +private: required_device m_maincpu; required_device m_irq_line; - required_ioport m_config; - optional_ioport_array<9> m_io_keyboard; - optional_ioport_array<4> m_io_keypad; - optional_ioport m_keypad; + required_device m_keyboard; optional_device m_tanbus; + required_shared_ptr m_videoram; + required_device m_gfxdecode; + required_memory_region m_gfx1; - uint8_t m_keypad_column = 0; - uint8_t m_keyboard_ascii = 0; emu_timer *m_pulse_nmi_timer = nullptr; - uint8_t m_keyrows[10]{}; - int m_lastrow = 0; - int m_mask = 0; - int m_key = 0; - int m_repeat = 0; - int m_repeater = 0; - virtual void store_key(int key); + enum { IRQ_KBD, IRQ_TANBUS }; -private: - optional_shared_ptr m_videoram; - optional_device m_gfxdecode; - optional_memory_region m_gfx1; - output_finder<> m_led; + uint8_t bffx_r(offs_t offset); + void bffx_w(offs_t offset, uint8_t data); + + void mt65_map(address_map &map); + void spinv_map(address_map &map); + + void kbd_int(int state); + int m_keyboard_int_flag = 0; uint8_t m_chunky_graphics = 0; std::unique_ptr m_chunky_buffer; tilemap_t *m_bg_tilemap = nullptr; - uint8_t sound_r(); - void sound_w(uint8_t data); void videoram_w(offs_t offset, uint8_t data); TILE_GET_INFO_MEMBER(get_bg_tile_info); void pgm_chargen_w(offs_t offset, uint8_t data); @@ -109,28 +86,35 @@ void snapshot_copy(uint8_t *snapshot_buff, int snapshot_size); DECLARE_SNAPSHOT_LOAD_MEMBER(snapshot_cb); DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb); - - void mt65_map(address_map &map); - void spinv_map(address_map &map); }; -class mt6809_state : public microtan_state +class mt6809_state : public driver_device { public: - using microtan_state::microtan_state; + mt6809_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_keyboard(*this, "keyboard") + , m_tanbus(*this, "tanbus") + { } void mt6809(machine_config &config); -protected: - virtual void video_start() override; + DECLARE_WRITE_LINE_MEMBER(trigger_reset); - virtual void store_key(int key) override; +protected: + virtual void machine_start() override; private: - uint8_t keyboard_r(); + required_device m_maincpu; + required_device m_keyboard; + required_device m_tanbus; void mt6809_map(address_map &map); + + uint8_t bffx_r(offs_t offset); + void bffx_w(offs_t offset, uint8_t data); }; #endif // MAME_INCLUDES_MICROTAN_H diff -Nru mame-0.250+dfsg.1/src/mame/tangerine/microtan_m.cpp mame-0.251+dfsg.1/src/mame/tangerine/microtan_m.cpp --- mame-0.250+dfsg.1/src/mame/tangerine/microtan_m.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/tangerine/microtan_m.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -3,10 +3,6 @@ /****************************************************************************** * Microtan 65 * - * machine driver - * - * Juergen Buchmueller , Jul 2000 - * * Thanks go to Geoff Macdonald * for his site http://www.geoff.org.uk/microtan/index.htm * and to Fabrice Frances @@ -21,115 +17,13 @@ #include "logmacro.h" -static const char keyboard[8][9][8] = { - { /* normal */ - { 27,'1','2','3','4','5','6','7'}, - {'8','9','0',':','-', 12,127,'^'}, - {'q','w','e','r','t','y','u','i'}, - {'o','p','[',']', 13, 3, 0, 0}, - {'a','s','d','f','g','h','j','k'}, - {'l',';','@', 92, 0,'z','x','c'}, - {'v','b','n','m',',','.','/', 0}, - { 10,' ','-',',', 13,'.','0','1'}, - {'2','3','4','5','6','7','8','9'}, - }, - { /* Shift */ - { 27,'!','"','#','$','%','&', 39}, - {'(',')','~','*','=', 12,127,'_'}, - {'Q','W','E','R','T','Y','U','I'}, - {'O','P','{','}', 13, 3, 0, 0}, - {'A','S','D','F','G','H','J','K'}, - {'L','+','`','|', 0,'Z','X','C'}, - {'V','B','N','M','<','>','?', 0}, - { 10,' ','-',',', 13,'.','0','1'}, - {'2','3','4','5','6','7','8','9'}, - }, - { /* Control */ - { 27,'1','2','3','4','5','6','7'}, - {'8','9','0',':','-','`',127, 30}, - { 17, 23, 5, 18, 20, 25, 21, 9}, - { 15, 16, 27, 29, 13, 3, 0, 0}, - { 1, 19, 4, 6, 7, 8, 10, 11}, - { 12,';','@', 28, 0, 26, 24, 3}, - { 22, 2, 14, 13,',','.','/', 0}, - { 10,' ','-',',', 13,'.','0','1'}, - {'2','3','4','5','6','7','8','9'}, - }, - { /* Shift+Control */ - { 27,'!','"','#','$','%','&', 39}, - {'(',')','~','*','=', 12,127, 31}, - { 17, 23, 5, 18, 20, 25, 21, 9}, - { 15, 16, 27, 29, 13,127, 0, 0}, - { 1, 19, 4, 6, 7, 8, 10, 11}, - { 12,'+','`', 28, 0, 26, 24, 3}, - { 22, 2, 14, 13,',','.','/', 0}, - { 10,' ','-',',', 13,'.','0','1'}, - {'2','3','4','5','6','7','8','9'}, - }, - { /* CapsLock */ - { 27,'1','2','3','4','5','6','7'}, - {'8','9','0',':','-', 12,127,'^'}, - {'Q','W','E','R','T','Y','U','I'}, - {'O','P','[',']', 13, 3, 0, 0}, - {'A','S','D','F','G','H','J','K'}, - {'L',';','@', 92, 0,'Z','X','C'}, - {'V','B','N','M',',','.','/', 0}, - { 10,' ','-',',', 13,'.','0','1'}, - {'2','3','4','5','6','7','8','9'}, - }, - { /* Shift+CapsLock */ - { 27,'!','"','#','$','%','&', 39}, - {'(',')','~','*','=', 12,127,'_'}, - {'q','w','e','r','t','y','u','i'}, - {'o','p','{','}', 13, 3, 0, 0}, - {'a','s','d','f','g','h','j','k'}, - {'l','+','`','|', 0,'z','x','c'}, - {'v','b','n','m','<','>','?', 0}, - { 10,' ','-',',', 13,'.','0','1'}, - {'2','3','4','5','6','7','8','9'}, - }, - { /* Control+CapsLock */ - { 27,'1','2','3','4','5','6','7'}, - {'8','9','0',':','-', 12,127, 9}, - { 17, 23, 5, 18, 20, 25, 21, 9}, - { 15, 16, 27, 29, 13,127, 0, 0}, - { 1, 19, 4, 6, 7, 8, 10, 11}, - { 12,';', 39, 28, 0, 26, 24, 3}, - { 22, 2, 14, 13,',','.','/', 0}, - { 10,' ','-',',', 13,'.','0','1'}, - {'2','3','4','5','6','7','8','9'}, - }, - { /* Shift+Control+CapsLock */ - { 27,'!','"','#','$','%','&', 39}, - {'(',')','~','*','=', 12,127, 9}, - { 17, 23, 5, 18, 20, 25, 21, 9}, - { 15, 16, 27, 29, 13,127, 0, 0}, - { 1, 19, 4, 6, 7, 8, 10, 11}, - { 12,':','"', 28, 0, 26, 24, 3}, - { 22, 2, 14, 13,',','.','/', 0}, - { 10,' ','-',',', 13,'.','0','1'}, - {'2','3','4','5','6','7','8','9'}, - }, -}; - - -uint8_t microtan_state::sound_r() -{ - int data = 0xff; - LOG("sound_r: -> %02x\n", data); - return data; -} - -void microtan_state::sound_w(uint8_t data) +uint8_t microtan_state::bffx_r(offs_t offset) { - LOG("sound_w: <- %02x\n", data); -} + uint8_t data = 0xff; + if (machine().side_effects_disabled()) return data; -uint8_t microtan_state::bffx_r(offs_t offset) -{ - int data = 0xff; - switch( offset & 3 ) + switch (offset & 3) { case 0: /* BFF0: read enables chunky graphics */ m_chunky_graphics = 1; @@ -142,22 +36,7 @@ LOG("bff2_r: -> %02x\n", data); break; case 3: /* BFF3: read keyboard/keypad */ - switch (m_config->read() & 3) - { - case 0: /* ASCII Keyboard */ - data = m_keyboard_ascii; - break; - case 1: /* Hex Keypad */ - data = 0x00; - for (u8 i = 0; i < 4; i++) - if (BIT(m_keypad_column, i)) - data |= m_io_keypad[i]->read(); - - break; - case 2: /* ETI Keypad */ - data = (m_keypad->read() & 0x1f) | (m_config->read() & 0x60); - break; - } + data = m_keyboard->read() | (m_keyboard_int_flag << 7); LOG("bff3_r: -> %02x (keyboard ASCII)\n", data); break; } @@ -173,21 +52,20 @@ void microtan_state::bffx_w(offs_t offset, uint8_t data) { - switch( offset & 3 ) + switch (offset & 3) { case 0: /* BFF0: write reset keyboard interrupt flag */ /* This removes bit 7 from the ASCII value of the last key pressed. */ LOG("bff0_w: %d <- %02x (keyboard IRQ clear )\n", offset, data); - m_keyboard_ascii &= ~0x80; - m_irq_line->in_w(0); + kbd_int(0); break; case 1: /* BFF1: write delayed NMI */ LOG("bff1_w: %d <- %02x (delayed NMI)\n", offset, data); m_pulse_nmi_timer->adjust(m_maincpu->cycles_to_attotime(8)); break; case 2: /* BFF2: write keypad */ - LOG("bff2_w: %d <- %02x (keypad column)\n", offset, data); // 1, 2, 4, 7, f - m_keypad_column = data & 0x0f; + LOG("bff2_w: %d <- %02x (keypad column)\n", offset, data); + m_keyboard->write(data); break; case 3: /* BFF3: write disable chunky graphics */ LOG("bff3_w: %d <- %02x (chunky graphics off)\n", offset, data); @@ -196,110 +74,40 @@ } } -uint8_t mt6809_state::keyboard_r() -{ - uint8_t data = m_keyboard_ascii; - - m_keyboard_ascii = 0x00; - - return data; -} - -void mt6809_state::store_key(int key) -{ - m_keyboard_ascii = key | 0x80; -} -void microtan_state::store_key(int key) +uint8_t mt6809_state::bffx_r(offs_t offset) { - m_keyboard_ascii = key | 0x80; - m_irq_line->in_w(1); -} + uint8_t data = 0xff; -TIMER_DEVICE_CALLBACK_MEMBER(microtan_state::kbd_scan) -{ - /* ASCII Keyboard only */ - if (m_config->read() & 3) - return; - - int mod, row, col, chg, newvar; + if (machine().side_effects_disabled()) return data; - if( m_repeat ) + switch (offset & 3) { - if( !--m_repeat ) - m_repeater = 4; + case 3: /* BFF3: read keyboard */ + data = m_keyboard->read(); + LOG("bff3_r: -> %02x (keyboard ASCII)\n", data); + break; } - else if( m_repeater ) - m_repeat = m_repeater; - - row = 9; - newvar = m_io_keyboard[8]->read(); - chg = m_keyrows[--row] ^ newvar; + return data; +} - while ( !chg && row > 0) +void mt6809_state::bffx_w(offs_t offset, uint8_t data) +{ + switch (offset & 3) { - newvar = m_io_keyboard[row - 1]->read(); - chg = m_keyrows[--row] ^ newvar; + case 0: /* BFF0: write reset keyboard interrupt flag */ + LOG("bff0_w: %d <- %02x (keyboard NMI clear )\n", offset, data); + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); + break; } - if (!chg) - --row; - - if (row >= 0) - { - m_repeater = 0x00; - m_mask = 0x00; - m_key = 0x00; - m_lastrow = row; - /* CapsLock LED */ - if( row == 3 && chg == 0x80 ) - m_led = BIT(~m_keyrows[3], 7); +} - if (newvar & chg) /* key(s) pressed ? */ - { - mod = 0; - /* Shift modifier */ - if ( (m_keyrows[5] & 0x10) || (m_keyrows[6] & 0x80) ) - mod |= 1; - - /* Control modifier */ - if (m_keyrows[3] & 0x40) - mod |= 2; - - /* CapsLock modifier */ - if (m_keyrows[3] & 0x80) - mod |= 4; - - /* find newvar key */ - m_mask = 0x01; - for (col = 0; col < 8; col ++) - { - if (chg & m_mask) - { - newvar &= m_mask; - m_key = keyboard[mod][row][col]; - break; - } - m_mask <<= 1; - } - if( m_key ) /* normal key */ - { - m_repeater = 30; - store_key(m_key); - } - else - if( (row == 0) && (chg == 0x04) ) /* Ctrl-@ (NUL) */ - store_key(0); - m_keyrows[row] |= newvar; - } - else - m_keyrows[row] = newvar; +void microtan_state::kbd_int(int state) +{ + m_keyboard_int_flag = state; - m_repeat = m_repeater; - } - else - if ( m_key && (m_keyrows[m_lastrow] & m_mask) && m_repeat == 0 ) - store_key(m_key); + m_irq_line->in_w(state); } @@ -320,7 +128,8 @@ } } -void microtan_state::init_gfx2() + +void microtan_state::machine_start() { uint8_t *dst = memregion("gfx2")->base(); @@ -328,67 +137,45 @@ { switch (i & 3) { - case 0: dst[ 0] = dst[ 1] = dst[ 2] = dst[ 3] = 0x00; break; - case 1: dst[ 0] = dst[ 1] = dst[ 2] = dst[ 3] = 0xf0; break; - case 2: dst[ 0] = dst[ 1] = dst[ 2] = dst[ 3] = 0x0f; break; - case 3: dst[ 0] = dst[ 1] = dst[ 2] = dst[ 3] = 0xff; break; + case 0: dst[0] = dst[1] = dst[2] = dst[3] = 0x00; break; + case 1: dst[0] = dst[1] = dst[2] = dst[3] = 0xf0; break; + case 2: dst[0] = dst[1] = dst[2] = dst[3] = 0x0f; break; + case 3: dst[0] = dst[1] = dst[2] = dst[3] = 0xff; break; } dst += 4; switch (BIT(i, 2, 2)) { - case 0: dst[ 0] = dst[ 1] = dst[ 2] = dst[ 3] = 0x00; break; - case 1: dst[ 0] = dst[ 1] = dst[ 2] = dst[ 3] = 0xf0; break; - case 2: dst[ 0] = dst[ 1] = dst[ 2] = dst[ 3] = 0x0f; break; - case 3: dst[ 0] = dst[ 1] = dst[ 2] = dst[ 3] = 0xff; break; + case 0: dst[0] = dst[1] = dst[2] = dst[3] = 0x00; break; + case 1: dst[0] = dst[1] = dst[2] = dst[3] = 0xf0; break; + case 2: dst[0] = dst[1] = dst[2] = dst[3] = 0x0f; break; + case 3: dst[0] = dst[1] = dst[2] = dst[3] = 0xff; break; } dst += 4; switch (BIT(i, 4, 2)) { - case 0: dst[ 0] = dst[ 1] = dst[ 2] = dst[ 3] = 0x00; break; - case 1: dst[ 0] = dst[ 1] = dst[ 2] = dst[ 3] = 0xf0; break; - case 2: dst[ 0] = dst[ 1] = dst[ 2] = dst[ 3] = 0x0f; break; - case 3: dst[ 0] = dst[ 1] = dst[ 2] = dst[ 3] = 0xff; break; + case 0: dst[0] = dst[1] = dst[2] = dst[3] = 0x00; break; + case 1: dst[0] = dst[1] = dst[2] = dst[3] = 0xf0; break; + case 2: dst[0] = dst[1] = dst[2] = dst[3] = 0x0f; break; + case 3: dst[0] = dst[1] = dst[2] = dst[3] = 0xff; break; } dst += 4; switch (BIT(i, 6, 2)) { - case 0: dst[ 0] = dst[ 1] = dst[ 2] = dst[ 3] = 0x00; break; - case 1: dst[ 0] = dst[ 1] = dst[ 2] = dst[ 3] = 0xf0; break; - case 2: dst[ 0] = dst[ 1] = dst[ 2] = dst[ 3] = 0x0f; break; - case 3: dst[ 0] = dst[ 1] = dst[ 2] = dst[ 3] = 0xff; break; + case 0: dst[0] = dst[1] = dst[2] = dst[3] = 0x00; break; + case 1: dst[0] = dst[1] = dst[2] = dst[3] = 0xf0; break; + case 2: dst[0] = dst[1] = dst[2] = dst[3] = 0x0f; break; + case 3: dst[0] = dst[1] = dst[2] = dst[3] = 0xff; break; } dst += 4; } -} - -void microtan_state::init_microtan() -{ - init_gfx2(); m_pulse_nmi_timer = timer_alloc(FUNC(microtan_state::pulse_nmi), this); } -void microtan_state::machine_start() +void mt6809_state::machine_start() { - m_led.resolve(); - - save_item(NAME(m_keypad_column)); - save_item(NAME(m_keyboard_ascii)); - save_item(NAME(m_keyrows)); - save_item(NAME(m_lastrow)); - save_item(NAME(m_mask)); - save_item(NAME(m_key)); - save_item(NAME(m_repeat)); - save_item(NAME(m_repeater)); } -void microtan_state::machine_reset() -{ - for (int i = 1; i < 10; i++) - m_keyrows[i] = m_io_keyboard[i-1].read_safe(0); - - m_led = BIT(~m_keyrows[3], 7); -} image_verify_result microtan_state::verify_snapshot(uint8_t *data, int size) { @@ -639,7 +426,7 @@ bffx_w(i, snapshot_buff[base++]); } - sound_w(snapshot_buff[base++]); + space.write_byte(0xbc04, snapshot_buff[base++]); m_chunky_graphics = snapshot_buff[base++]; /* first set of AY8910 registers */ diff -Nru mame-0.250+dfsg.1/src/mame/tangerine/microtan_v.cpp mame-0.251+dfsg.1/src/mame/tangerine/microtan_v.cpp --- mame-0.250+dfsg.1/src/mame/tangerine/microtan_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/tangerine/microtan_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -3,10 +3,6 @@ /*************************************************************************** * Microtan 65 * - * video hardware - * - * Juergen Buchmueller , Jul 2000 - * * Thanks go to Geoff Macdonald * for his site http://www.geoff.org.uk/microtan/index.htm * and to Fabrice Frances @@ -30,8 +26,8 @@ TILE_GET_INFO_MEMBER(microtan_state::get_bg_tile_info) { - int gfxn = m_chunky_buffer[tile_index]; - int code = m_videoram[tile_index]; + uint8_t gfxn = m_chunky_buffer[tile_index]; + uint8_t code = m_videoram[tile_index]; tileinfo.set(gfxn, code, 0, 0); } @@ -42,13 +38,9 @@ for (uint16_t addr = 0; addr < m_videoram.bytes(); addr++) m_videoram[addr] = machine().rand() & 0xff; - m_bg_tilemap = &machine().tilemap().create(* - m_gfxdecode, - tilemap_get_info_delegate(*this, FUNC(microtan_state::get_bg_tile_info)), - TILEMAP_SCAN_ROWS, 8, 16, 32, 16); + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(microtan_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 16, 32, 16); - m_chunky_buffer = std::make_unique(0x200); - memset(m_chunky_buffer.get(), 0, 0x200); + m_chunky_buffer = make_unique_clear(0x200); m_chunky_graphics = 0; save_pointer(NAME(m_chunky_buffer), 0x200); @@ -60,7 +52,3 @@ m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); return 0; } - -void mt6809_state::video_start() -{ -} diff -Nru mame-0.250+dfsg.1/src/mame/technos/ssozumo.cpp mame-0.251+dfsg.1/src/mame/technos/ssozumo.cpp --- mame-0.250+dfsg.1/src/mame/technos/ssozumo.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/technos/ssozumo.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -5,7 +5,7 @@ Syusse Oozumou (c) 1984 Technos Japan (Licensed by Data East) -Driver by Takahiro Nogi (nogi@kt.rim.or.jp) 1999/10/04 +Driver by Takahiro Nogi 1999/10/04 ***************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/tecmo/tehkanwc.cpp mame-0.251+dfsg.1/src/mame/tecmo/tehkanwc.cpp --- mame-0.250+dfsg.1/src/mame/tecmo/tehkanwc.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/tecmo/tehkanwc.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -12,6 +12,12 @@ TODO: - dip switches and input ports for Gridiron and Tee'd Off +- Check MEMORY_* definitions (too many M?A_NOP areas) +- Check sound in all games (too many messages like this in the .log file : + 'Warning: sound latch 2 written before being read') +- Figure out the controls in 'tehkanwc' (they are told to be better in MAME 0.34) +- Figure out the controls in 'teedoff' +- Confirm "Difficulty" Dip Switch in 'teedoff' Additional notes (Steph 2002.01.14) @@ -23,7 +29,8 @@ The main problem with that game is that it should sometimes jumps into shared memory (see 'init_teedoff' function below) depending on a value that is supposed to be -in the palette RAM ! +in the palette RAM ! (maybe palette RAM is write only, and this is an open bus read +or was used for debugging during the game development?) Palette RAM is reset here (main CPU) : @@ -66,118 +73,314 @@ So the "jp z" instruction at 0x0238 of the main CPU will ALWAYS jump in shared memory when NO code seems to be written ! -TO DO : - - - Check MEMORY_* definitions (too many M?A_NOP areas) - - Check sound in all games (too many messages like this in the .log file : - 'Warning: sound latch 2 written before being read') - - Figure out the controls in 'tehkanwc' (they are told to be better in MAME 0.34) - - Figure out the controls in 'teedoff' - - Confirm "Difficulty" Dip Switch in 'teedoff' - ***************************************************************************/ -/* Notes: DJH 04 Jan 2008 - - fixed gridiron079gre (shared access to spriteram was broken) - - The inputs seem to be a hacky mess (although there was reportedly a - hardware joystick hack for tehkanwc via plugin logic subboard, is this - attempting to simulate it? - - Also there is a hack to reset the sound CPU... - -*/ #include "emu.h" -#include "tehkanwc.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/ay8910.h" +#include "sound/msm5205.h" + +#include "emupal.h" #include "screen.h" #include "speaker.h" +#include "tilemap.h" #include "gridiron.lh" +namespace { -void tehkanwc_state::machine_start() +class tehkanwc_state : public driver_device { - m_reset_timer = timer_alloc(FUNC(tehkanwc_state::reset_audiocpu), this); +public: + tehkanwc_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_audiocpu(*this, "audiocpu"), + m_subcpu(*this, "sub"), + m_msm(*this, "msm"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), + m_soundlatch2(*this, "soundlatch2"), + m_videoram(*this, "videoram"), + m_colorram(*this, "colorram"), + m_videoram2(*this, "videoram2"), + m_spriteram(*this, "spriteram"), + m_adpcm_rom(*this, "adpcm"), + m_track_p1(*this, "P1%c", 'X'), + m_track_p2(*this, "P2%c", 'X'), + m_digits(*this, "digit%u", 0U) + { } + + void tehkanwcb(machine_config &config); + void tehkanwc(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void video_start() override; + +private: + required_device m_maincpu; + required_device m_audiocpu; + required_device m_subcpu; + required_device m_msm; + required_device m_gfxdecode; + required_device m_palette; + required_device m_soundlatch; + required_device m_soundlatch2; + + required_shared_ptr m_videoram; + required_shared_ptr m_colorram; + required_shared_ptr m_videoram2; + required_shared_ptr m_spriteram; + required_region_ptr m_adpcm_rom; + + required_ioport_array<2> m_track_p1; + required_ioport_array<2> m_track_p2; + output_finder<2> m_digits; + + int m_track_p1_reset[2]{}; + int m_track_p2_reset[2]{}; + int m_msm_data_offs = 0; + int m_toggle = 0; + uint8_t m_scroll_x[2]{}; + tilemap_t *m_bg_tilemap = nullptr; + tilemap_t *m_fg_tilemap = nullptr; + + void sub_cpu_reset_w(uint8_t data); + void sound_cpu_reset_w(uint8_t data); + uint8_t track_0_r(offs_t offset); + uint8_t track_1_r(offs_t offset); + void track_0_reset_w(offs_t offset, uint8_t data); + void track_1_reset_w(offs_t offset, uint8_t data); + void sound_command_w(uint8_t data); + void videoram_w(offs_t offset, uint8_t data); + void colorram_w(offs_t offset, uint8_t data); + void videoram2_w(offs_t offset, uint8_t data); + void scroll_x_w(offs_t offset, uint8_t data); + void scroll_y_w(uint8_t data); + void flipscreen_x_w(uint8_t data); + void flipscreen_y_w(uint8_t data); + void gridiron_led0_w(uint8_t data); + void gridiron_led1_w(uint8_t data); + uint8_t teedoff_unk_r(); + uint8_t portA_r(); + uint8_t portB_r(); + void portA_w(uint8_t data); + void portB_w(uint8_t data); + void msm_reset_w(uint8_t data); + DECLARE_WRITE_LINE_MEMBER(adpcm_int); + + TILE_GET_INFO_MEMBER(get_bg_tile_info); + TILE_GET_INFO_MEMBER(get_fg_tile_info); + + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); + + void shared_mem(address_map &map); + void main_mem(address_map &map); + void sound_mem(address_map &map); + void sound_port(address_map &map); + void sub_mem(address_map &map); +}; - save_item(NAME(m_track0)); - save_item(NAME(m_track1)); +void tehkanwc_state::machine_start() +{ + // register for savestates + save_item(NAME(m_track_p1_reset)); + save_item(NAME(m_track_p2_reset)); save_item(NAME(m_msm_data_offs)); save_item(NAME(m_toggle)); + save_item(NAME(m_scroll_x)); m_digits.resolve(); } -void tehkanwc_state::sub_cpu_halt_w(uint8_t data) +void tehkanwc_state::sub_cpu_reset_w(uint8_t data) { - if (data) - m_subcpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); - else - m_subcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + m_subcpu->set_input_line(INPUT_LINE_RESET, data ? CLEAR_LINE : ASSERT_LINE); } +void tehkanwc_state::sound_cpu_reset_w(uint8_t data) +{ + m_audiocpu->set_input_line(INPUT_LINE_RESET, data ? CLEAR_LINE : ASSERT_LINE); + msm_reset_w(data); +} -uint8_t tehkanwc_state::track_0_r(offs_t offset) +void tehkanwc_state::sound_command_w(uint8_t data) { - int joy; + m_soundlatch->write(data); + m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); +} - joy = ioport("FAKE")->read() >> (2 * offset); - if (joy & 1) return -63; - if (joy & 2) return 63; - return ioport(offset ? "P1Y" : "P1X")->read() - m_track0[offset]; + +uint8_t tehkanwc_state::track_0_r(offs_t offset) +{ + return m_track_p1[offset]->read() - m_track_p1_reset[offset]; } uint8_t tehkanwc_state::track_1_r(offs_t offset) { - int joy; - - joy = ioport("FAKE")->read() >> (4 + 2 * offset); - if (joy & 1) return -63; - if (joy & 2) return 63; - return ioport(offset ? "P2Y" : "P2X")->read() - m_track1[offset]; + return m_track_p2[offset]->read() - m_track_p2_reset[offset]; } void tehkanwc_state::track_0_reset_w(offs_t offset, uint8_t data) { - /* reset the trackball counters */ - m_track0[offset] = ioport(offset ? "P1Y" : "P1X")->read() + data; + // reset the trackball counters + m_track_p1_reset[offset] = m_track_p1[offset]->read() + data; } void tehkanwc_state::track_1_reset_w(offs_t offset, uint8_t data) { - /* reset the trackball counters */ - m_track1[offset] = ioport(offset ? "P2Y" : "P2X")->read() + data; + // reset the trackball counters + m_track_p2_reset[offset] = m_track_p2[offset]->read() + data; +} + + +uint8_t tehkanwc_state::teedoff_unk_r() +{ + logerror("%s: teedoff_unk_r\n", machine().describe_context()); + return 0x80; } +/* Video emulation */ -void tehkanwc_state::sound_command_w(uint8_t data) +void tehkanwc_state::videoram_w(offs_t offset, uint8_t data) { - m_soundlatch->write(data); - m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); + m_videoram[offset] = data; + m_fg_tilemap->mark_tile_dirty(offset); } -TIMER_CALLBACK_MEMBER(tehkanwc_state::reset_audiocpu) +void tehkanwc_state::colorram_w(offs_t offset, uint8_t data) { - m_audiocpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero); + m_colorram[offset] = data; + m_fg_tilemap->mark_tile_dirty(offset); } -void tehkanwc_state::sound_answer_w(uint8_t data) +void tehkanwc_state::videoram2_w(offs_t offset, uint8_t data) { - m_soundlatch2->write(data); + m_videoram2[offset] = data; + m_bg_tilemap->mark_tile_dirty(offset / 2); +} - /* in Gridiron, the sound CPU goes in a tight loop after the self test, */ - /* probably waiting to be reset by a watchdog */ - if (m_audiocpu->pc() == 0x08bc) m_reset_timer->adjust(attotime::from_seconds(1)); +void tehkanwc_state::scroll_x_w(offs_t offset, uint8_t data) +{ + m_scroll_x[offset] = data; } +void tehkanwc_state::scroll_y_w(uint8_t data) +{ + m_bg_tilemap->set_scrolly(0, data); +} + +void tehkanwc_state::flipscreen_x_w(uint8_t data) +{ + flip_screen_x_set(data & 0x40); +} + +void tehkanwc_state::flipscreen_y_w(uint8_t data) +{ + flip_screen_y_set(data & 0x40); +} + + +TILE_GET_INFO_MEMBER(tehkanwc_state::get_bg_tile_info) +{ + int offs = tile_index * 2; + int attr = m_videoram2[offs + 1]; + int code = m_videoram2[offs] + ((attr & 0x30) << 4); + int color = attr & 0x0f; + int flags = ((attr & 0x40) ? TILE_FLIPX : 0) | ((attr & 0x80) ? TILE_FLIPY : 0); + + tileinfo.set(2, code, color, flags); +} + +TILE_GET_INFO_MEMBER(tehkanwc_state::get_fg_tile_info) +{ + int attr = m_colorram[tile_index]; + int code = m_videoram[tile_index] + ((attr & 0x10) << 4); + int color = attr & 0x0f; + int flags = ((attr & 0x40) ? TILE_FLIPX : 0) | ((attr & 0x80) ? TILE_FLIPY : 0); + + tileinfo.category = (attr & 0x20) ? 0 : 1; + + tileinfo.set(0, code, color, flags); +} + +void tehkanwc_state::video_start() +{ + m_bg_tilemap = &machine().tilemap().create( + *m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(tehkanwc_state::get_bg_tile_info)), + TILEMAP_SCAN_ROWS, 16, 8, 32, 32); + + m_fg_tilemap = &machine().tilemap().create( + *m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(tehkanwc_state::get_fg_tile_info)), + TILEMAP_SCAN_ROWS, 8, 8, 32, 32); + + m_fg_tilemap->set_transparent_pen(0); +} + +void tehkanwc_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + for (int offs = 0;offs < m_spriteram.bytes();offs += 4) + { + int attr = m_spriteram[offs + 1]; + int code = m_spriteram[offs] + ((attr & 0x08) << 5); + int color = attr & 0x07; + int flipx = attr & 0x40; + int flipy = attr & 0x80; + int sx = m_spriteram[offs + 2] + ((attr & 0x20) << 3) - 128; + int sy = m_spriteram[offs + 3]; + + if (flip_screen_x()) + { + sx = 240 - sx; + flipx = !flipx; + } + + if (flip_screen_y()) + { + sy = 240 - sy; + flipy = !flipy; + } + + m_gfxdecode->gfx(1)->transpen(bitmap, cliprect, code, color, flipx, flipy, sx, sy, 0); + } +} + +uint32_t tehkanwc_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + m_bg_tilemap->set_scrollx(0, m_scroll_x[0] + 256 * m_scroll_x[1]); + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + draw_sprites(bitmap, cliprect); + m_fg_tilemap->draw(screen, bitmap, cliprect, 1, 0); + + return 0; +} + + +/* + Gridiron Fight has a LED display on the control panel, to let each player + choose the formation without letting the other know. +*/ + +void tehkanwc_state::gridiron_led0_w(uint8_t data) +{ + m_digits[0] = (data & 0x80) ? (data & 0x7f) : 0; +} + +void tehkanwc_state::gridiron_led1_w(uint8_t data) +{ + m_digits[1] = (data & 0x80) ? (data & 0x7f) : 0; +} -/* Emulate MSM sound samples with counters */ +/* Emulate MSM sound samples with counters */ uint8_t tehkanwc_state::portA_r() { @@ -206,8 +409,7 @@ WRITE_LINE_MEMBER(tehkanwc_state::adpcm_int) { - uint8_t *SAMPLES = memregion("adpcm")->base(); - int msm_data = SAMPLES[m_msm_data_offs & 0x7fff]; + uint8_t msm_data = m_adpcm_rom[m_msm_data_offs & 0x7fff]; if (m_toggle == 0) m_msm->data_w((msm_data >> 4) & 0x0f); @@ -220,50 +422,45 @@ m_toggle ^= 1; } -/* End of MSM with counters emulation */ - +void tehkanwc_state::shared_mem(address_map &map) +{ + map(0xc800, 0xcfff).ram().share("shareram"); + map(0xd000, 0xd3ff).ram().w(FUNC(tehkanwc_state::videoram_w)).share("videoram"); + map(0xd400, 0xd7ff).ram().w(FUNC(tehkanwc_state::colorram_w)).share("colorram"); + map(0xd800, 0xddff).writeonly().w(m_palette, FUNC(palette_device::write8)).share("palette"); + map(0xde00, 0xdfff).nopw(); // unused part of the palette RAM, I think? Gridiron uses it + map(0xe000, 0xe7ff).ram().w(FUNC(tehkanwc_state::videoram2_w)).share("videoram2"); + map(0xe800, 0xebff).ram().share("spriteram"); + map(0xec00, 0xec01).w(FUNC(tehkanwc_state::scroll_x_w)); + map(0xec02, 0xec02).w(FUNC(tehkanwc_state::scroll_y_w)); +} void tehkanwc_state::main_mem(address_map &map) { + shared_mem(map); map(0x0000, 0xbfff).rom(); map(0xc000, 0xc7ff).ram(); - map(0xc800, 0xcfff).ram().share("share1"); - map(0xd000, 0xd3ff).ram().w(FUNC(tehkanwc_state::videoram_w)).share("videoram"); - map(0xd400, 0xd7ff).ram().w(FUNC(tehkanwc_state::colorram_w)).share("colorram"); - map(0xd800, 0xddff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); - map(0xde00, 0xdfff).ram().share("share5"); /* unused part of the palette RAM, I think? Gridiron uses it */ - map(0xe000, 0xe7ff).ram().w(FUNC(tehkanwc_state::videoram2_w)).share("videoram2"); - map(0xe800, 0xebff).ram().share("spriteram"); /* sprites */ - map(0xec00, 0xec01).ram().w(FUNC(tehkanwc_state::scroll_x_w)); - map(0xec02, 0xec02).ram().w(FUNC(tehkanwc_state::scroll_y_w)); - map(0xf800, 0xf801).rw(FUNC(tehkanwc_state::track_0_r), FUNC(tehkanwc_state::track_0_reset_w)); /* track 0 x/y */ + map(0xda00, 0xda00).r(FUNC(tehkanwc_state::teedoff_unk_r)); + map(0xf800, 0xf801).rw(FUNC(tehkanwc_state::track_0_r), FUNC(tehkanwc_state::track_0_reset_w)); // track 0 x/y map(0xf802, 0xf802).portr("SYSTEM").w(FUNC(tehkanwc_state::gridiron_led0_w)); map(0xf803, 0xf803).portr("P1BUT"); map(0xf806, 0xf806).portr("SYSTEM"); - map(0xf810, 0xf811).rw(FUNC(tehkanwc_state::track_1_r), FUNC(tehkanwc_state::track_1_reset_w)); /* track 1 x/y */ + map(0xf810, 0xf811).rw(FUNC(tehkanwc_state::track_1_r), FUNC(tehkanwc_state::track_1_reset_w)); // track 1 x/y map(0xf812, 0xf812).w(FUNC(tehkanwc_state::gridiron_led1_w)); map(0xf813, 0xf813).portr("P2BUT"); - map(0xf820, 0xf820).r(m_soundlatch2, FUNC(generic_latch_8_device::read)).w(FUNC(tehkanwc_state::sound_command_w)); /* answer from the sound CPU */ - map(0xf840, 0xf840).portr("DSW2").w(FUNC(tehkanwc_state::sub_cpu_halt_w)); - map(0xf850, 0xf850).portr("DSW3").nopw(); // teedoff: written in tandem with $f840, busreq or busack? + map(0xf820, 0xf820).r(m_soundlatch2, FUNC(generic_latch_8_device::read)).w(FUNC(tehkanwc_state::sound_command_w)); // answer from the sound CPU + map(0xf840, 0xf840).portr("DSW2").w(FUNC(tehkanwc_state::sub_cpu_reset_w)); + map(0xf850, 0xf850).portr("DSW3").w(FUNC(tehkanwc_state::sound_cpu_reset_w)); map(0xf860, 0xf860).r("watchdog", FUNC(watchdog_timer_device::reset_r)).w(FUNC(tehkanwc_state::flipscreen_x_w)); map(0xf870, 0xf870).portr("DSW1").w(FUNC(tehkanwc_state::flipscreen_y_w)); } void tehkanwc_state::sub_mem(address_map &map) { + shared_mem(map); map(0x0000, 0x7fff).rom(); map(0x8000, 0xc7ff).ram(); - map(0xc800, 0xcfff).ram().share("share1"); - map(0xd000, 0xd3ff).ram().w(FUNC(tehkanwc_state::videoram_w)).share("videoram"); - map(0xd400, 0xd7ff).ram().w(FUNC(tehkanwc_state::colorram_w)).share("colorram"); - map(0xd800, 0xddff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); - map(0xde00, 0xdfff).ram().share("share5"); /* unused part of the palette RAM, I think? Gridiron uses it */ - map(0xe000, 0xe7ff).ram().w(FUNC(tehkanwc_state::videoram2_w)).share("videoram2"); - map(0xe800, 0xebff).ram().share("spriteram"); /* sprites */ - map(0xec00, 0xec01).ram().w(FUNC(tehkanwc_state::scroll_x_w)); - map(0xec02, 0xec02).ram().w(FUNC(tehkanwc_state::scroll_y_w)); map(0xf860, 0xf860).r("watchdog", FUNC(watchdog_timer_device::reset_r)); } @@ -271,10 +468,10 @@ { map(0x0000, 0x3fff).rom(); map(0x4000, 0x47ff).ram(); - map(0x8001, 0x8001).w(FUNC(tehkanwc_state::msm_reset_w));/* MSM51xx reset */ - map(0x8002, 0x8002).nopw(); /* ?? written in the IRQ handler */ - map(0x8003, 0x8003).nopw(); /* ?? written in the NMI handler */ - map(0xc000, 0xc000).r(m_soundlatch, FUNC(generic_latch_8_device::read)).w(FUNC(tehkanwc_state::sound_answer_w)); + map(0x8001, 0x8001).w(FUNC(tehkanwc_state::msm_reset_w)); // MSM51xx reset + map(0x8002, 0x8002).nopw(); // ?? written in the IRQ handler + map(0x8003, 0x8003).nopw(); // ?? written in the NMI handler + map(0xc000, 0xc000).r(m_soundlatch, FUNC(generic_latch_8_device::read)).w(m_soundlatch2, FUNC(generic_latch_8_device::write)); } void tehkanwc_state::sound_port(address_map &map) @@ -289,7 +486,7 @@ static INPUT_PORTS_START( tehkanwc ) - PORT_START("DSW2") /* DSW2 - Active LOW */ + PORT_START("DSW2") // DSW2 - Active LOW PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2,3") PORT_DIPSETTING ( 0x01, DEF_STR( 2C_1C ) ) PORT_DIPSETTING ( 0x07, DEF_STR( 1C_1C ) ) @@ -314,7 +511,7 @@ PORT_DIPSETTING ( 0x40, "2&2/100%" ) PORT_DIPSETTING ( 0x00, "2&3/67%" ) - PORT_START("DSW3") /* DSW3 - Active LOW */ + PORT_START("DSW3") // DSW3 - Active LOW PORT_DIPNAME( 0x03, 0x03, "1P Game Time" ) PORT_DIPLOCATION("SW3:1,2") PORT_DIPSETTING ( 0x00, "2:30" ) PORT_DIPSETTING ( 0x01, "2:00" ) @@ -357,7 +554,7 @@ PORT_DIPSETTING ( 0x80, "Timer In" ) PORT_DIPSETTING ( 0x00, "Credit In" ) - PORT_START("DSW1") /* DSW1 - Active LOW */ + PORT_START("DSW1") // DSW1 - Active LOW PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:1,2") PORT_DIPSETTING ( 0x02, DEF_STR( Easy ) ) PORT_DIPSETTING ( 0x03, DEF_STR( Normal ) ) @@ -370,40 +567,30 @@ PORT_DIPSETTING ( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING ( 0x08, DEF_STR( On ) ) - PORT_START("P1X") /* IN0 - X AXIS */ - PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(0) PORT_PLAYER(1) + PORT_START("P1X") // IN0 - X AXIS + PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(63) PORT_PLAYER(1) - PORT_START("P1Y") /* IN0 - Y AXIS */ - PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(0) PORT_PLAYER(1) + PORT_START("P1Y") // IN0 - Y AXIS + PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(63) PORT_PLAYER(1) - PORT_START("P1BUT") /* IN0 - BUTTON */ + PORT_START("P1BUT") // IN0 - BUTTON PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_START("P2X") /* IN1 - X AXIS */ - PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(0) PORT_PLAYER(2) + PORT_START("P2X") // IN1 - X AXIS + PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(63) PORT_PLAYER(2) - PORT_START("P2Y") /* IN1 - Y AXIS */ - PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(0) PORT_PLAYER(2) + PORT_START("P2Y") // IN1 - Y AXIS + PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(63) PORT_PLAYER(2) - PORT_START("P2BUT") /* IN1 - BUTTON */ + PORT_START("P2BUT") // IN1 - BUTTON PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_START("SYSTEM") /* IN2 - Active LOW */ + PORT_START("SYSTEM") // IN2 - Active LOW PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - - PORT_START("FAKE") /* fake port to emulate trackballs with keyboard */ - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) INPUT_PORTS_END static INPUT_PORTS_START( tehkanwcd ) @@ -412,8 +599,8 @@ PORT_MODIFY("DSW1") PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) // DSW1 doesn't exist on this PCB? - PORT_MODIFY("P1BUT") /* IN0 - BUTTON */ - /* DSW4 in test mode */ + PORT_MODIFY("P1BUT") // IN0 - BUTTON + // DSW4 in test mode PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW4:1,2") PORT_DIPSETTING ( 0x02, DEF_STR( Easy ) ) PORT_DIPSETTING ( 0x03, DEF_STR( Normal ) ) @@ -426,8 +613,8 @@ PORT_DIPSETTING ( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING ( 0x08, DEF_STR( On ) ) - PORT_MODIFY("P2BUT") /* IN1 - BUTTON */ - /* DSW5 in test mode */ + PORT_MODIFY("P2BUT") // IN1 - BUTTON + // DSW5 in test mode PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW5:1" ) PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW5:2" ) PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW5:3" ) @@ -435,7 +622,9 @@ INPUT_PORTS_END static INPUT_PORTS_START( gridiron ) - PORT_START("DSW2") /* DSW2 - Active LOW */ + PORT_INCLUDE( tehkanwc ) + + PORT_MODIFY("DSW2") // DSW2 - Active LOW PORT_DIPNAME( 0x03, 0x03, "Start Credits (P1&P2)/Extra" ) PORT_DIPLOCATION("SW2:1,2") PORT_DIPSETTING ( 0x01, "1&1/200%" ) PORT_DIPSETTING ( 0x03, "1&2/100%" ) @@ -461,7 +650,7 @@ PORT_DIPSETTING ( 0xc0, "15" ) PORT_DIPSETTING ( 0x80, "10" ) - PORT_START("DSW3") /* DSW3 - Active LOW */ + PORT_MODIFY("DSW3") // DSW3 - Active LOW PORT_DIPNAME( 0x03, 0x03, "1P Game Time" ) PORT_DIPLOCATION("SW3:1,2") PORT_DIPSETTING ( 0x00, "2:30" ) PORT_DIPSETTING ( 0x01, "2:00" ) @@ -504,40 +693,15 @@ PORT_DIPSETTING ( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING ( 0x80, DEF_STR( On ) ) - PORT_START("DSW1") /* no DSW1 */ + PORT_MODIFY("DSW1") // no DSW1 PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P1X") /* IN0 - X AXIS */ - PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(63) PORT_PLAYER(1) - - PORT_START("P1Y") /* IN0 - Y AXIS */ - PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(63) PORT_PLAYER(1) - - PORT_START("P1BUT") /* IN0 - BUTTON */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - - PORT_START("P2X") /* IN1 - X AXIS */ - PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(63) PORT_PLAYER(2) - - PORT_START("P2Y") /* IN1 - Y AXIS */ - PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(63) PORT_PLAYER(2) - - PORT_START("P2BUT") /* IN1 - BUTTON */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - - PORT_START("SYSTEM") /* IN2 - Active LOW */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) - - PORT_START("FAKE") /* no fake port here */ - PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) INPUT_PORTS_END static INPUT_PORTS_START( teedoff ) - PORT_START("DSW2") /* DSW2 - Active LOW */ + PORT_INCLUDE( gridiron ) + + PORT_MODIFY("DSW2") // DSW2 - Active LOW PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2") PORT_DIPSETTING ( 0x02, DEF_STR( 2C_1C ) ) PORT_DIPSETTING ( 0x03, DEF_STR( 1C_1C ) ) @@ -560,61 +724,36 @@ PORT_DIPSETTING ( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING ( 0x80, DEF_STR( On ) ) - PORT_START("DSW3") /* DSW3 - Active LOW */ + PORT_MODIFY("DSW3") // DSW3 - Active LOW PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW3:1" ) PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW3:2" ) PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW3:3" ) - PORT_DIPNAME( 0x18, 0x18, "Penalty (Over Par)" ) PORT_DIPLOCATION("SW3:4,5") // Check table at 0x2d67 - PORT_DIPSETTING ( 0x10, "1/1/2/3/4" ) // +1 / +2 / +3 / +4 / +5 or +6 + PORT_DIPNAME( 0x18, 0x18, "Penalty (Over Par)" ) PORT_DIPLOCATION("SW3:4,5") // Check table at 0x2d67 + PORT_DIPSETTING ( 0x10, "1/1/2/3/4" ) // +1 / +2 / +3 / +4 / +5 or +6 PORT_DIPSETTING ( 0x18, "1/2/3/3/4" ) PORT_DIPSETTING ( 0x08, "1/2/3/4/4" ) PORT_DIPSETTING ( 0x00, "2/3/3/4/4" ) PORT_DIPNAME( 0x20, 0x20, "Bonus Balls (Multiple coins)" ) PORT_DIPLOCATION("SW3:6") PORT_DIPSETTING ( 0x20, DEF_STR( None ) ) PORT_DIPSETTING ( 0x00, "+1" ) - PORT_DIPNAME( 0xc0, 0xc0, "Difficulty?" ) PORT_DIPLOCATION("SW3:7,8") // Check table at 0x5df9 + PORT_DIPNAME( 0xc0, 0xc0, "Difficulty?" ) PORT_DIPLOCATION("SW3:7,8") // Check table at 0x5df9 PORT_DIPSETTING ( 0x80, DEF_STR( Easy ) ) PORT_DIPSETTING ( 0xc0, DEF_STR( Normal ) ) PORT_DIPSETTING ( 0x40, DEF_STR( Hard ) ) PORT_DIPSETTING ( 0x00, DEF_STR( Hardest ) ) - PORT_START("DSW1") /* no DSW1 */ - PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P1X") /* IN0 - X AXIS */ - PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(63) PORT_PLAYER(1) - - PORT_START("P1Y") /* IN0 - Y AXIS */ - PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(63) PORT_PLAYER(1) - - PORT_START("P1BUT") /* IN0 - BUTTON */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - - PORT_START("P2X") /* IN1 - X AXIS */ - PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(63) PORT_PLAYER(2) - - PORT_START("P2Y") /* IN1 - Y AXIS */ - PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(63) PORT_PLAYER(2) - - PORT_START("P2BUT") /* IN1 - BUTTON */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - - PORT_START("SYSTEM") /* IN2 - Active LOW */ - /* "Coin" buttons are read from address 0xf802 */ - /* "Start" buttons are read from address 0xf806 */ - /* coin input must be active between 2 and 15 frames to be consistently recognized */ + PORT_MODIFY("SYSTEM") // IN2 - Active LOW + // "Coin" buttons are read from address 0xf802 + // "Start" buttons are read from address 0xf806 + // coin input must be active between 2 and 15 frames to be consistently recognized PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) - - PORT_START("FAKE") /* no fake port here */ - PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) INPUT_PORTS_END - static const gfx_layout charlayout = { 8,8, /* 8*8 characters */ @@ -726,37 +865,6 @@ ay2.add_route(ALL_OUTPUTS, "mono", 0.25); } -void tehkanwc_state::init_teedoff() -{ - /* Patch to avoid the game jumping in shared memory */ - - /* Code at 0x0233 (main CPU) : - - 0233: 3A 00 DA ld a,($DA00) - 0236: CB 7F bit 7,a - 0238: CA 00 C8 jp z,$C800 - - changed to : - - 0233: 3A 00 DA ld a,($DA00) - 0236: CB 7F bit 7,a - 0238: 00 nop - 0239: 00 nop - 023A: 00 nop - */ - // Update 2022: sub CPU doesn't seem responsible for sharing code to main, - // and bit 7 write to 0xca00 happens after that main checks it out during attract. - // Notice that main CPU just fakes the ROM checksum check at startup, just drawing ROM # OK at PC=0x1726 - // There's also this (nsfw link) -> https://sudden-desu.net/entry/tee-d-off-a-saucy-secret-and-hidden-dev-credits - // which implies that at least 1 ROM is bad here. - uint8_t *ROM = memregion("maincpu")->base(); - - ROM[0x0238] = 0x00; - ROM[0x0239] = 0x00; - ROM[0x023a] = 0x00; -} - - /*************************************************************************** @@ -776,16 +884,16 @@ ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "twc-6.bin", 0x0000, 0x4000, CRC(e3112be2) SHA1(7859e51b4312dc5df01c88e1d97cf608abc7ca72) ) - ROM_REGION( 0x04000, "gfx1", 0 ) - ROM_LOAD( "twc-12.bin", 0x00000, 0x4000, CRC(a9e274f8) SHA1(02b46e1b149a856f0be74a23faaeb792935b66c7) ) /* fg tiles */ + ROM_REGION( 0x4000, "gfx1", 0 ) + ROM_LOAD( "twc-12.bin", 0x0000, 0x4000, CRC(a9e274f8) SHA1(02b46e1b149a856f0be74a23faaeb792935b66c7) ) /* fg tiles */ ROM_REGION( 0x10000, "gfx2", 0 ) - ROM_LOAD( "twc-8.bin", 0x00000, 0x8000, CRC(055a5264) SHA1(fe294ba57c2c858952e2fab0be1b8859730846cb) ) /* sprites */ - ROM_LOAD( "twc-7.bin", 0x08000, 0x8000, CRC(59faebe7) SHA1(85dad90928369601e039467d575750539410fcf6) ) + ROM_LOAD( "twc-8.bin", 0x0000, 0x8000, CRC(055a5264) SHA1(fe294ba57c2c858952e2fab0be1b8859730846cb) ) /* sprites */ + ROM_LOAD( "twc-7.bin", 0x8000, 0x8000, CRC(59faebe7) SHA1(85dad90928369601e039467d575750539410fcf6) ) ROM_REGION( 0x10000, "gfx3", 0 ) - ROM_LOAD( "twc-11.bin", 0x00000, 0x8000, CRC(669389fc) SHA1(a93e8455060ce5242cb65f78e47b4840aa13ab13) ) /* bg tiles */ - ROM_LOAD( "twc-9.bin", 0x08000, 0x8000, CRC(347ef108) SHA1(bb9c2f51d65f28655404e10c3be44d7ade98711b) ) + ROM_LOAD( "twc-11.bin", 0x0000, 0x8000, CRC(669389fc) SHA1(a93e8455060ce5242cb65f78e47b4840aa13ab13) ) /* bg tiles */ + ROM_LOAD( "twc-9.bin", 0x8000, 0x8000, CRC(347ef108) SHA1(bb9c2f51d65f28655404e10c3be44d7ade98711b) ) ROM_REGION( 0x8000, "adpcm", 0 ) /* ADPCM samples */ ROM_LOAD( "twc-5.bin", 0x0000, 0x4000, CRC(444b5544) SHA1(0786d6d9ada7fe49c8ab9751b049095474d2e598) ) @@ -833,26 +941,26 @@ ROM_START( tehkanwcb ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "e-1.3-18.ic32", 0x0000, 0x4000, CRC(ac9d851b) SHA1(38a799cec4f29a88ed22c7a1e35fd2287cee869a) ) - ROM_LOAD( "e-2.3-17.ic31", 0x4000, 0x4000, CRC(65b53d99) SHA1(ea172b2540763d64dc4a238700421cea27138fae) ) - ROM_LOAD( "e-3.3-15.ic30", 0x8000, 0x4000, CRC(12064bfc) SHA1(954b56a548c697927d58b9cb2ecfe32b4db8d769) ) + ROM_LOAD( "e-1.3-18.ic32", 0x0000, 0x4000, CRC(ac9d851b) SHA1(38a799cec4f29a88ed22c7a1e35fd2287cee869a) ) + ROM_LOAD( "e-2.3-17.ic31", 0x4000, 0x4000, CRC(65b53d99) SHA1(ea172b2540763d64dc4a238700421cea27138fae) ) + ROM_LOAD( "e-3.3-15.ic30", 0x8000, 0x4000, CRC(12064bfc) SHA1(954b56a548c697927d58b9cb2ecfe32b4db8d769) ) ROM_REGION( 0x10000, "sub", 0 ) - ROM_LOAD( "e-4.9-17.ic100", 0x0000, 0x8000, CRC(70a9f883) SHA1(ace04359265271eb37512a89eb0217eb013aecb7) ) + ROM_LOAD( "e-4.9-17.ic100", 0x0000, 0x8000, CRC(70a9f883) SHA1(ace04359265271eb37512a89eb0217eb013aecb7) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "e-6.8-3.ic83", 0x0000, 0x4000, CRC(e3112be2) SHA1(7859e51b4312dc5df01c88e1d97cf608abc7ca72) ) - ROM_REGION( 0x04000, "gfx1", 0 ) - ROM_LOAD( "e-12.8c.ic233", 0x00000, 0x4000, CRC(a9e274f8) SHA1(02b46e1b149a856f0be74a23faaeb792935b66c7) ) /* fg tiles */ + ROM_REGION( 0x4000, "gfx1", 0 ) + ROM_LOAD( "e-12.8c.ic233", 0x0000, 0x4000, CRC(a9e274f8) SHA1(02b46e1b149a856f0be74a23faaeb792935b66c7) ) /* fg tiles */ ROM_REGION( 0x10000, "gfx2", 0 ) - ROM_LOAD( "e-8.5n.ic191", 0x00000, 0x8000, CRC(055a5264) SHA1(fe294ba57c2c858952e2fab0be1b8859730846cb) ) /* sprites */ - ROM_LOAD( "e-7.5r.ic193", 0x08000, 0x8000, CRC(59faebe7) SHA1(85dad90928369601e039467d575750539410fcf6) ) + ROM_LOAD( "e-8.5n.ic191", 0x0000, 0x8000, CRC(055a5264) SHA1(fe294ba57c2c858952e2fab0be1b8859730846cb) ) /* sprites */ + ROM_LOAD( "e-7.5r.ic193", 0x8000, 0x8000, CRC(59faebe7) SHA1(85dad90928369601e039467d575750539410fcf6) ) ROM_REGION( 0x10000, "gfx3", 0 ) - ROM_LOAD( "e-11.8k.ic238", 0x00000, 0x8000, CRC(669389fc) SHA1(a93e8455060ce5242cb65f78e47b4840aa13ab13) ) /* bg tiles */ - ROM_LOAD( "e-9.8n.ic240", 0x08000, 0x8000, CRC(347ef108) SHA1(bb9c2f51d65f28655404e10c3be44d7ade98711b) ) + ROM_LOAD( "e-11.8k.ic238", 0x0000, 0x8000, CRC(669389fc) SHA1(a93e8455060ce5242cb65f78e47b4840aa13ab13) ) /* bg tiles */ + ROM_LOAD( "e-9.8n.ic240", 0x8000, 0x8000, CRC(347ef108) SHA1(bb9c2f51d65f28655404e10c3be44d7ade98711b) ) ROM_REGION( 0x8000, "adpcm", 0 ) /* ADPCM samples */ ROM_LOAD( "e-5.4-3.ic35", 0x0000, 0x4000, CRC(444b5544) SHA1(0786d6d9ada7fe49c8ab9751b049095474d2e598) ) @@ -871,16 +979,16 @@ ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "e6.bin", 0x0000, 0x4000, CRC(e3112be2) SHA1(7859e51b4312dc5df01c88e1d97cf608abc7ca72) ) - ROM_REGION( 0x04000, "gfx1", 0 ) - ROM_LOAD( "e12.bin", 0x00000, 0x4000, CRC(a9e274f8) SHA1(02b46e1b149a856f0be74a23faaeb792935b66c7) ) /* fg tiles */ + ROM_REGION( 0x4000, "gfx1", 0 ) + ROM_LOAD( "e12.bin", 0x0000, 0x4000, CRC(a9e274f8) SHA1(02b46e1b149a856f0be74a23faaeb792935b66c7) ) /* fg tiles */ ROM_REGION( 0x10000, "gfx2", 0 ) - ROM_LOAD( "e8.bin", 0x00000, 0x8000, CRC(055a5264) SHA1(fe294ba57c2c858952e2fab0be1b8859730846cb) ) /* sprites */ - ROM_LOAD( "e7.bin", 0x08000, 0x8000, CRC(59faebe7) SHA1(85dad90928369601e039467d575750539410fcf6) ) + ROM_LOAD( "e8.bin", 0x0000, 0x8000, CRC(055a5264) SHA1(fe294ba57c2c858952e2fab0be1b8859730846cb) ) /* sprites */ + ROM_LOAD( "e7.bin", 0x8000, 0x8000, CRC(59faebe7) SHA1(85dad90928369601e039467d575750539410fcf6) ) ROM_REGION( 0x10000, "gfx3", 0 ) - ROM_LOAD( "e11.bin", 0x00000, 0x8000, CRC(669389fc) SHA1(a93e8455060ce5242cb65f78e47b4840aa13ab13) ) /* bg tiles */ - ROM_LOAD( "e9.bin", 0x08000, 0x8000, CRC(347ef108) SHA1(bb9c2f51d65f28655404e10c3be44d7ade98711b) ) + ROM_LOAD( "e11.bin", 0x0000, 0x8000, CRC(669389fc) SHA1(a93e8455060ce5242cb65f78e47b4840aa13ab13) ) /* bg tiles */ + ROM_LOAD( "e9.bin", 0x8000, 0x8000, CRC(347ef108) SHA1(bb9c2f51d65f28655404e10c3be44d7ade98711b) ) ROM_REGION( 0x8000, "adpcm", 0 ) /* ADPCM samples */ ROM_LOAD( "e5.bin", 0x0000, 0x4000, CRC(444b5544) SHA1(0786d6d9ada7fe49c8ab9751b049095474d2e598) ) @@ -898,16 +1006,16 @@ ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "twc-6.bin", 0x0000, 0x4000, CRC(e3112be2) SHA1(7859e51b4312dc5df01c88e1d97cf608abc7ca72) ) - ROM_REGION( 0x04000, "gfx1", 0 ) - ROM_LOAD( "twc-12.bin", 0x00000, 0x4000, CRC(a9e274f8) SHA1(02b46e1b149a856f0be74a23faaeb792935b66c7) ) /* fg tiles */ + ROM_REGION( 0x4000, "gfx1", 0 ) + ROM_LOAD( "twc-12.bin", 0x0000, 0x4000, CRC(a9e274f8) SHA1(02b46e1b149a856f0be74a23faaeb792935b66c7) ) /* fg tiles */ ROM_REGION( 0x10000, "gfx2", 0 ) - ROM_LOAD( "twc-8.bin", 0x00000, 0x8000, CRC(055a5264) SHA1(fe294ba57c2c858952e2fab0be1b8859730846cb) ) /* sprites */ - ROM_LOAD( "twc-7.bin", 0x08000, 0x8000, CRC(59faebe7) SHA1(85dad90928369601e039467d575750539410fcf6) ) + ROM_LOAD( "twc-8.bin", 0x0000, 0x8000, CRC(055a5264) SHA1(fe294ba57c2c858952e2fab0be1b8859730846cb) ) /* sprites */ + ROM_LOAD( "twc-7.bin", 0x8000, 0x8000, CRC(59faebe7) SHA1(85dad90928369601e039467d575750539410fcf6) ) ROM_REGION( 0x10000, "gfx3", 0 ) - ROM_LOAD( "twc-11.bin", 0x00000, 0x8000, CRC(669389fc) SHA1(a93e8455060ce5242cb65f78e47b4840aa13ab13) ) /* bg tiles */ - ROM_LOAD( "twc-9.bin", 0x08000, 0x8000, CRC(347ef108) SHA1(bb9c2f51d65f28655404e10c3be44d7ade98711b) ) + ROM_LOAD( "twc-11.bin", 0x0000, 0x8000, CRC(669389fc) SHA1(a93e8455060ce5242cb65f78e47b4840aa13ab13) ) /* bg tiles */ + ROM_LOAD( "twc-9.bin", 0x8000, 0x8000, CRC(347ef108) SHA1(bb9c2f51d65f28655404e10c3be44d7ade98711b) ) ROM_REGION( 0x8000, "adpcm", 0 ) /* ADPCM samples */ ROM_LOAD( "twc-5.bin", 0x0000, 0x4000, CRC(444b5544) SHA1(0786d6d9ada7fe49c8ab9751b049095474d2e598) ) @@ -926,19 +1034,19 @@ ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "worldcup_5.bin", 0x0000, 0x4000, CRC(e3112be2) SHA1(7859e51b4312dc5df01c88e1d97cf608abc7ca72) ) // 27128 - ROM_REGION( 0x04000, "gfx1", 0 ) /* fg tiles */ - ROM_LOAD( "worldcup_9.bin", 0x00000, 0x4000, CRC(a9e274f8) SHA1(02b46e1b149a856f0be74a23faaeb792935b66c7) ) // 27128 + ROM_REGION( 0x4000, "gfx1", 0 ) /* fg tiles */ + ROM_LOAD( "worldcup_9.bin", 0x0000, 0x4000, CRC(a9e274f8) SHA1(02b46e1b149a856f0be74a23faaeb792935b66c7) ) // 27128 ROM_REGION( 0x10000, "gfx2", 0 ) /* sprites */ - ROM_LOAD( "worldcup_7.bin", 0x00000, 0x8000, CRC(055a5264) SHA1(fe294ba57c2c858952e2fab0be1b8859730846cb) ) // 24256 - ROM_LOAD( "worldcup_8.bin", 0x08000, 0x8000, CRC(59faebe7) SHA1(85dad90928369601e039467d575750539410fcf6) ) // 24256 + ROM_LOAD( "worldcup_7.bin", 0x0000, 0x8000, CRC(055a5264) SHA1(fe294ba57c2c858952e2fab0be1b8859730846cb) ) // 24256 + ROM_LOAD( "worldcup_8.bin", 0x8000, 0x8000, CRC(59faebe7) SHA1(85dad90928369601e039467d575750539410fcf6) ) // 24256 ROM_REGION( 0x10000, "gfx3", 0 ) /* bg tiles */ - ROM_LOAD( "worldcup_10.bin", 0x00000, 0x8000, CRC(669389fc) SHA1(a93e8455060ce5242cb65f78e47b4840aa13ab13) ) // 24256 - ROM_LOAD( "worldcup_11.bin", 0x08000, 0x8000, CRC(4ea7586f) SHA1(fd852c1d5ff09270e398137a7687f68d7256c8a6) ) // 24256 + ROM_LOAD( "worldcup_10.bin", 0x0000, 0x8000, CRC(669389fc) SHA1(a93e8455060ce5242cb65f78e47b4840aa13ab13) ) // 24256 + ROM_LOAD( "worldcup_11.bin", 0x8000, 0x8000, CRC(4ea7586f) SHA1(fd852c1d5ff09270e398137a7687f68d7256c8a6) ) // 24256 ROM_REGION( 0x8000, "adpcm", 0 ) /* ADPCM samples */ - ROM_LOAD( "worldcup_4.bin", 0x0000, 0x4000, CRC(444b5544) SHA1(0786d6d9ada7fe49c8ab9751b049095474d2e598) ) // 27128 + ROM_LOAD( "worldcup_4.bin", 0x0000, 0x4000, CRC(444b5544) SHA1(0786d6d9ada7fe49c8ab9751b049095474d2e598) ) // 27128 ROM_END ROM_START( gridiron ) @@ -953,18 +1061,18 @@ ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "gfight5.bin", 0x0000, 0x4000, CRC(92ca3c07) SHA1(580077ca8cf01996b29497187e41a54242de7f50) ) - ROM_REGION( 0x04000, "gfx1", 0 ) - ROM_LOAD( "gfight7.bin", 0x00000, 0x4000, CRC(04390cca) SHA1(ff010c0c18ddd1f793b581f0a70bc1b98ef7d21d) ) /* fg tiles */ + ROM_REGION( 0x4000, "gfx1", 0 ) + ROM_LOAD( "gfight7.bin", 0x0000, 0x4000, CRC(04390cca) SHA1(ff010c0c18ddd1f793b581f0a70bc1b98ef7d21d) ) /* fg tiles */ ROM_REGION( 0x10000, "gfx2", 0 ) - ROM_LOAD( "gfight8.bin", 0x00000, 0x4000, CRC(5de6a70f) SHA1(416aba9de59d46861671c49f8ca33489db1b8634) ) /* sprites */ - ROM_LOAD( "gfight9.bin", 0x04000, 0x4000, CRC(eac9dc16) SHA1(8b3cf87ede8aba45752cc2651a471a5942570037) ) - ROM_LOAD( "gfight10.bin", 0x08000, 0x4000, CRC(61d0690f) SHA1(cd7c81b0e5356bc865380cae5582d6c6b017dfa1) ) + ROM_LOAD( "gfight8.bin", 0x0000, 0x4000, CRC(5de6a70f) SHA1(416aba9de59d46861671c49f8ca33489db1b8634) ) /* sprites */ + ROM_LOAD( "gfight9.bin", 0x4000, 0x4000, CRC(eac9dc16) SHA1(8b3cf87ede8aba45752cc2651a471a5942570037) ) + ROM_LOAD( "gfight10.bin", 0x8000, 0x4000, CRC(61d0690f) SHA1(cd7c81b0e5356bc865380cae5582d6c6b017dfa1) ) /* 0c000-0ffff empty */ ROM_REGION( 0x10000, "gfx3", 0 ) - ROM_LOAD( "gfight11.bin", 0x00000, 0x4000, CRC(80b09c03) SHA1(41627bb6d0f163430c1709a449a42f0f216da852) ) /* bg tiles */ - ROM_LOAD( "gfight12.bin", 0x04000, 0x4000, CRC(1b615eae) SHA1(edfdb4311c5cc314806c8f017f190f7b94f8cd98) ) + ROM_LOAD( "gfight11.bin", 0x0000, 0x4000, CRC(80b09c03) SHA1(41627bb6d0f163430c1709a449a42f0f216da852) ) /* bg tiles */ + ROM_LOAD( "gfight12.bin", 0x4000, 0x4000, CRC(1b615eae) SHA1(edfdb4311c5cc314806c8f017f190f7b94f8cd98) ) /* 08000-0ffff empty */ ROM_REGION( 0x8000, "adpcm", 0 ) /* ADPCM samples */ @@ -973,35 +1081,59 @@ ROM_START( teedoff ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "to-1.bin", 0x0000, 0x4000, BAD_DUMP CRC(cc2aebc5) SHA1(358e77e53b35dd89fcfdb3b2484b8c4fbc34c1be) ) - ROM_LOAD( "to-2.bin", 0x4000, 0x4000, BAD_DUMP CRC(f7c9f138) SHA1(2fe56059ef67387b5938bb4751aa2f74a58b04fb) ) - ROM_LOAD( "to-3.bin", 0x8000, 0x4000, BAD_DUMP CRC(a0f0a6da) SHA1(72390c8dc5519d90e39a660e6ec18861fdbadcc8) ) + ROM_LOAD( "1_m5m27c128_dip28.4a", 0x0000, 0x4000, CRC(0e18f6ee) SHA1(7e78b97ca343b6bdc7ee24e99063fbe9bc86e7a2) ) + ROM_LOAD( "2_m5m27c128_dip28.4b", 0x4000, 0x4000, CRC(70635a77) SHA1(301794ef4761ed417ae211bd570d0cbc6a75bcc5) ) + ROM_LOAD( "3_m5m27c128_dip28.4d", 0x8000, 0x4000, CRC(2c765def) SHA1(bf256104d8b89713b69dde3d84d03638241ba6af) ) ROM_REGION( 0x10000, "sub", 0 ) - ROM_LOAD( "to-4.bin", 0x0000, 0x8000, BAD_DUMP CRC(e922cbd2) SHA1(922c030be70150efb760fa81bda0bc54f2ec681a) ) + ROM_LOAD( "4_hn27256g@dip28.9c", 0x0000, 0x8000, CRC(a21315bf) SHA1(a9dd2c1fea3a184ec5d40fa3246fa24c4d720bb3) ) ROM_REGION( 0x10000, "audiocpu", 0 ) - ROM_LOAD( "to-6.bin", 0x0000, 0x4000, CRC(d8dfe1c8) SHA1(d00a71ad89b530339990780334588f5738c60f25) ) + ROM_LOAD( "6_m5m27c128_dip28.8r", 0x0000, 0x4000, CRC(f87a43f5) SHA1(268da812846b9ec24cfeb8d89869e39fa01a6676) ) - ROM_REGION( 0x04000, "gfx1", 0 ) - ROM_LOAD( "to-12.bin", 0x00000, 0x4000, CRC(4f44622c) SHA1(161c3646a3ec2274bffc957240d47d55a35a8416) ) /* fg tiles */ + ROM_REGION( 0x4000, "gfx1", 0 ) + ROM_LOAD( "12_m5m27c128_dip28.8u", 0x0000, 0x4000, CRC(4f44622c) SHA1(161c3646a3ec2274bffc957240d47d55a35a8416) ) /* fg tiles */ ROM_REGION( 0x10000, "gfx2", 0 ) - ROM_LOAD( "to-8.bin", 0x00000, 0x8000, CRC(363bd1ba) SHA1(c5b7d56b0595712b18351403a9e3325a03de1676) ) /* sprites */ - ROM_LOAD( "to-7.bin", 0x08000, 0x8000, CRC(6583fa5b) SHA1(1041181887350d860c517c0a031ab064a20f5cee) ) + ROM_LOAD( "8_hn27256g_dip28.5j", 0x0000, 0x8000, CRC(363bd1ba) SHA1(c5b7d56b0595712b18351403a9e3325a03de1676) ) /* sprites */ + ROM_LOAD( "7_hn27256g_dip28.5e", 0x8000, 0x8000, CRC(6583fa5b) SHA1(1041181887350d860c517c0a031ab064a20f5cee) ) ROM_REGION( 0x10000, "gfx3", 0 ) - ROM_LOAD( "to-11.bin", 0x00000, 0x8000, CRC(1ec00cb5) SHA1(0e61eed3d6fc44ff89d8b9e4f558f0989eb8094f) ) /* bg tiles */ - ROM_LOAD( "to-9.bin", 0x08000, 0x8000, CRC(a14347f0) SHA1(00a34ed56ec32336bb524424fcb007d8160163ec) ) + ROM_LOAD( "11_hn27256g_dip28.8m", 0x0000, 0x8000, CRC(1ec00cb5) SHA1(0e61eed3d6fc44ff89d8b9e4f558f0989eb8094f) ) /* bg tiles */ + ROM_LOAD( "9_hn27256g_dip28.8j", 0x8000, 0x8000, CRC(a14347f0) SHA1(00a34ed56ec32336bb524424fcb007d8160163ec) ) ROM_REGION( 0x8000, "adpcm", 0 ) /* ADPCM samples */ - ROM_LOAD( "to-5.bin", 0x0000, 0x8000, CRC(e5e4246b) SHA1(b2fe2e68fa86163ebe1ef00ecce73fb62cef6b19) ) + ROM_LOAD( "5_m5m27c256k_dip28.4r", 0x0000, 0x8000, CRC(90141093) SHA1(e8983d8c47e47481c2a8ee2a0bac6df3b17f8e70) ) ROM_END +ROM_START( teedoffj ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "to-1.4a", 0x0000, 0x4000, CRC(cc2aebc5) SHA1(358e77e53b35dd89fcfdb3b2484b8c4fbc34c1be) ) + ROM_LOAD( "to-2.4b", 0x4000, 0x4000, CRC(f7c9f138) SHA1(2fe56059ef67387b5938bb4751aa2f74a58b04fb) ) + ROM_LOAD( "to-3.4d", 0x8000, 0x4000, CRC(a0f0a6da) SHA1(72390c8dc5519d90e39a660e6ec18861fdbadcc8) ) -/* There are some dumps out there that only have the year hacked to 1986 and a little bunch of bytes - from the graphics zone. I think that not worth to support these hacks... -*/ + ROM_REGION( 0x10000, "sub", 0 ) + ROM_LOAD( "to-4.9c", 0x0000, 0x8000, CRC(e922cbd2) SHA1(922c030be70150efb760fa81bda0bc54f2ec681a) ) + + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "to-6.8r", 0x0000, 0x4000, CRC(d8dfe1c8) SHA1(d00a71ad89b530339990780334588f5738c60f25) ) + + ROM_REGION( 0x4000, "gfx1", 0 ) + ROM_LOAD( "12_m5m27c128_dip28.8u", 0x0000, 0x4000, CRC(4f44622c) SHA1(161c3646a3ec2274bffc957240d47d55a35a8416) ) /* fg tiles */ + + ROM_REGION( 0x10000, "gfx2", 0 ) + ROM_LOAD( "8_hn27256g_dip28.5j", 0x0000, 0x8000, CRC(363bd1ba) SHA1(c5b7d56b0595712b18351403a9e3325a03de1676) ) /* sprites */ + ROM_LOAD( "7_hn27256g_dip28.5e", 0x8000, 0x8000, CRC(6583fa5b) SHA1(1041181887350d860c517c0a031ab064a20f5cee) ) + + ROM_REGION( 0x10000, "gfx3", 0 ) + ROM_LOAD( "11_hn27256g_dip28.8m", 0x0000, 0x8000, CRC(1ec00cb5) SHA1(0e61eed3d6fc44ff89d8b9e4f558f0989eb8094f) ) /* bg tiles */ + ROM_LOAD( "9_hn27256g_dip28.8j", 0x8000, 0x8000, CRC(a14347f0) SHA1(00a34ed56ec32336bb524424fcb007d8160163ec) ) + + ROM_REGION( 0x8000, "adpcm", 0 ) /* ADPCM samples */ + ROM_LOAD( "to-5.4r", 0x0000, 0x8000, CRC(e5e4246b) SHA1(b2fe2e68fa86163ebe1ef00ecce73fb62cef6b19) ) +ROM_END + +} // anonymous namespace GAME( 1985, tehkanwc, 0, tehkanwc, tehkanwc, tehkanwc_state, empty_init, ROT0, "Tehkan", "Tehkan World Cup (set 1)", MACHINE_SUPPORTS_SAVE ) @@ -1009,5 +1141,8 @@ GAME( 1985, tehkanwcc, tehkanwc, tehkanwcb,tehkanwc, tehkanwc_state, empty_init, ROT0, "bootleg", "Tehkan World Cup (set 3, bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // aka 'World Cup 85', different inputs? GAME( 1985, tehkanwcd, tehkanwc, tehkanwc, tehkanwcd,tehkanwc_state, empty_init, ROT0, "Tehkan", "Tehkan World Cup (set 4, earlier)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, tehkanwch, tehkanwc, tehkanwc, tehkanwcd,tehkanwc_state, empty_init, ROT0, "hack", "Tehkan World Cup (1986 year hack)", MACHINE_SUPPORTS_SAVE ) + GAMEL(1985, gridiron, 0, tehkanwc, gridiron, tehkanwc_state, empty_init, ROT0, "Tehkan", "Gridiron Fight", MACHINE_SUPPORTS_SAVE, layout_gridiron ) -GAME( 1986, teedoff, 0, tehkanwc, teedoff, tehkanwc_state, init_teedoff, ROT90, "Tecmo", "Tee'd Off (Japan)", MACHINE_SUPPORTS_SAVE ) + +GAME( 1987, teedoff, 0, tehkanwc, teedoff, tehkanwc_state, empty_init, ROT90, "Tecmo", "Tee'd Off (World)", MACHINE_SUPPORTS_SAVE ) // found in US, but no region warning +GAME( 1986, teedoffj, teedoff, tehkanwc, teedoff, tehkanwc_state, empty_init, ROT90, "Tecmo", "Tee'd Off (Japan)", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/tecmo/tehkanwc.h mame-0.251+dfsg.1/src/mame/tecmo/tehkanwc.h --- mame-0.250+dfsg.1/src/mame/tecmo/tehkanwc.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/tecmo/tehkanwc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,108 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ernesto Corvi, Roberto Fresca -#ifndef MAME_INCLUDES_TEHKANWC_H -#define MAME_INCLUDES_TEHKANWC_H - -#pragma once - -#include "machine/gen_latch.h" -#include "sound/msm5205.h" -#include "emupal.h" -#include "tilemap.h" - -class tehkanwc_state : public driver_device -{ -public: - tehkanwc_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_audiocpu(*this, "audiocpu"), - m_subcpu(*this, "sub"), - m_msm(*this, "msm"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_soundlatch(*this, "soundlatch"), - m_soundlatch2(*this, "soundlatch2"), - m_videoram(*this, "videoram"), - m_colorram(*this, "colorram"), - m_videoram2(*this, "videoram2"), - m_spriteram(*this, "spriteram"), - m_digits(*this, "digit%u", 0U) - { } - - void tehkanwcb(machine_config &config); - void tehkanwc(machine_config &config); - - void init_teedoff(); - -protected: - virtual void machine_start() override; - virtual void video_start() override; - - TIMER_CALLBACK_MEMBER(reset_audiocpu); - -private: - required_device m_maincpu; - required_device m_audiocpu; - required_device m_subcpu; - required_device m_msm; - required_device m_gfxdecode; - required_device m_palette; - required_device m_soundlatch; - required_device m_soundlatch2; - - required_shared_ptr m_videoram; - required_shared_ptr m_colorram; - required_shared_ptr m_videoram2; - required_shared_ptr m_spriteram; - - output_finder<2> m_digits; - - int m_track0[2]{}; - int m_track1[2]{}; - int m_msm_data_offs = 0; - int m_toggle = 0; - uint8_t m_scroll_x[2]{}; - uint8_t m_led0 = 0; - uint8_t m_led1 = 0; - tilemap_t *m_bg_tilemap = nullptr; - tilemap_t *m_fg_tilemap = nullptr; - emu_timer *m_reset_timer = nullptr; - - void sub_cpu_halt_w(uint8_t data); - uint8_t track_0_r(offs_t offset); - uint8_t track_1_r(offs_t offset); - void track_0_reset_w(offs_t offset, uint8_t data); - void track_1_reset_w(offs_t offset, uint8_t data); - void sound_command_w(uint8_t data); - void sound_answer_w(uint8_t data); - void videoram_w(offs_t offset, uint8_t data); - void colorram_w(offs_t offset, uint8_t data); - void videoram2_w(offs_t offset, uint8_t data); - void scroll_x_w(offs_t offset, uint8_t data); - void scroll_y_w(uint8_t data); - void flipscreen_x_w(uint8_t data); - void flipscreen_y_w(uint8_t data); - void gridiron_led0_w(uint8_t data); - void gridiron_led1_w(uint8_t data); - uint8_t portA_r(); - uint8_t portB_r(); - void portA_w(uint8_t data); - void portB_w(uint8_t data); - void msm_reset_w(uint8_t data); - DECLARE_WRITE_LINE_MEMBER(adpcm_int); - - TILE_GET_INFO_MEMBER(get_bg_tile_info); - TILE_GET_INFO_MEMBER(get_fg_tile_info); - - uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void gridiron_draw_led(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t led,int player); - void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); - - void main_mem(address_map &map); - void sound_mem(address_map &map); - void sound_port(address_map &map); - void sub_mem(address_map &map); -}; - -#endif // MAME_INCLUDES_TEHKANWC_H diff -Nru mame-0.250+dfsg.1/src/mame/tecmo/tehkanwc_v.cpp mame-0.251+dfsg.1/src/mame/tecmo/tehkanwc_v.cpp --- mame-0.250+dfsg.1/src/mame/tecmo/tehkanwc_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/tecmo/tehkanwc_v.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,171 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ernesto Corvi, Roberto Fresca -/*************************************************************************** - -Tehkan World Cup - (c) Tehkan 1985 - - -Ernesto Corvi -ernesto@imagina.com - -Roberto Juan Fresca -robbiex@rocketmail.com - -***************************************************************************/ - -#include "emu.h" -#include "tehkanwc.h" - - -void tehkanwc_state::videoram_w(offs_t offset, uint8_t data) -{ - m_videoram[offset] = data; - m_fg_tilemap->mark_tile_dirty(offset); -} - -void tehkanwc_state::colorram_w(offs_t offset, uint8_t data) -{ - m_colorram[offset] = data; - m_fg_tilemap->mark_tile_dirty(offset); -} - -void tehkanwc_state::videoram2_w(offs_t offset, uint8_t data) -{ - m_videoram2[offset] = data; - m_bg_tilemap->mark_tile_dirty(offset / 2); -} - -void tehkanwc_state::scroll_x_w(offs_t offset, uint8_t data) -{ - m_scroll_x[offset] = data; -} - -void tehkanwc_state::scroll_y_w(uint8_t data) -{ - m_bg_tilemap->set_scrolly(0, data); -} - -void tehkanwc_state::flipscreen_x_w(uint8_t data) -{ - flip_screen_x_set(data & 0x40); -} - -void tehkanwc_state::flipscreen_y_w(uint8_t data) -{ - flip_screen_y_set(data & 0x40); -} - -void tehkanwc_state::gridiron_led0_w(uint8_t data) -{ - m_led0 = data; -} -void tehkanwc_state::gridiron_led1_w(uint8_t data) -{ - m_led1 = data; -} - -TILE_GET_INFO_MEMBER(tehkanwc_state::get_bg_tile_info) -{ - int offs = tile_index * 2; - int attr = m_videoram2[offs + 1]; - int code = m_videoram2[offs] + ((attr & 0x30) << 4); - int color = attr & 0x0f; - int flags = ((attr & 0x40) ? TILE_FLIPX : 0) | ((attr & 0x80) ? TILE_FLIPY : 0); - - tileinfo.set(2, code, color, flags); -} - -TILE_GET_INFO_MEMBER(tehkanwc_state::get_fg_tile_info) -{ - int attr = m_colorram[tile_index]; - int code = m_videoram[tile_index] + ((attr & 0x10) << 4); - int color = attr & 0x0f; - int flags = ((attr & 0x40) ? TILE_FLIPX : 0) | ((attr & 0x80) ? TILE_FLIPY : 0); - - tileinfo.category = (attr & 0x20) ? 0 : 1; - - tileinfo.set(0, code, color, flags); -} - -void tehkanwc_state::video_start() -{ - m_bg_tilemap = &machine().tilemap().create( - *m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(tehkanwc_state::get_bg_tile_info)), - TILEMAP_SCAN_ROWS, 16, 8, 32, 32); - - m_fg_tilemap = &machine().tilemap().create( - *m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(tehkanwc_state::get_fg_tile_info)), - TILEMAP_SCAN_ROWS, 8, 8, 32, 32); - - m_fg_tilemap->set_transparent_pen(0); - - save_item(NAME(m_scroll_x)); - save_item(NAME(m_led0)); - save_item(NAME(m_led1)); -} - -/* - Gridiron Fight has a LED display on the control panel, to let each player - choose the formation without letting the other know. - - ---0--- - | | - 5 1 - | | - ---6--- - | | - 4 2 - | | - ---3--- - - bit 7 = enable (0 = display off) - */ - -void tehkanwc_state::gridiron_draw_led(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t led, int player) -{ - if (led & 0x80) - m_digits[player] = led & 0x7f; - else - m_digits[player] = 0; -} - -void tehkanwc_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - for (int offs = 0;offs < m_spriteram.bytes();offs += 4) - { - int attr = m_spriteram[offs + 1]; - int code = m_spriteram[offs] + ((attr & 0x08) << 5); - int color = attr & 0x07; - int flipx = attr & 0x40; - int flipy = attr & 0x80; - int sx = m_spriteram[offs + 2] + ((attr & 0x20) << 3) - 128; - int sy = m_spriteram[offs + 3]; - - if (flip_screen_x()) - { - sx = 240 - sx; - flipx = !flipx; - } - - if (flip_screen_y()) - { - sy = 240 - sy; - flipy = !flipy; - } - - m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, - code, color, flipx, flipy, sx, sy, 0); - } -} - -uint32_t tehkanwc_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - m_bg_tilemap->set_scrollx(0, m_scroll_x[0] + 256 * m_scroll_x[1]); - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - draw_sprites(bitmap, cliprect); - m_fg_tilemap->draw(screen, bitmap, cliprect, 1, 0); - gridiron_draw_led(bitmap, cliprect, m_led0, 0); - gridiron_draw_led(bitmap, cliprect, m_led1, 1); - return 0; -} diff -Nru mame-0.250+dfsg.1/src/mame/thomson/thomson.cpp mame-0.251+dfsg.1/src/mame/thomson/thomson.cpp --- mame-0.250+dfsg.1/src/mame/thomson/thomson.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/thomson/thomson.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -80,13 +80,16 @@ #include "thomson.h" #include "bus/centronics/ctronics.h" -#include "bus/rs232/rs232.h" +#include "bus/thomson/cc90_232.h" #include "bus/thomson/cd90_015.h" #include "bus/thomson/cq90_028.h" #include "bus/thomson/cd90_351.h" #include "bus/thomson/cd90_640.h" +#include "bus/thomson/md90_120.h" +#include "bus/thomson/midipak.h" #include "bus/thomson/nanoreseau.h" -#include "machine/6821pia.h" +#include "bus/thomson/rf57_932.h" +#include "bus/thomson/speech.h" #include "machine/clock.h" #include "machine/ram.h" #include "machine/wd_fdc.h" @@ -96,6 +99,8 @@ #include "formats/basicdsk.h" #include "formats/cd90_640_dsk.h" +#include "formats/thom_cas.h" +#include "formats/thom_dsk.h" #include "utf8.h" @@ -324,11 +329,6 @@ map(0xe7c0, 0xe7c7).rw(m_mc6846, FUNC(mc6846_device::read), FUNC(mc6846_device::write)); map(0xe7c8, 0xe7cb).rw("pia_0", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); map(0xe7cc, 0xe7cf).rw("pia_1", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); - map(0xe7e0, 0xe7e3).rw("to7_io:pia_2", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); - map(0xe7e8, 0xe7eb).rw("acia", FUNC(mos6551_device::read), FUNC(mos6551_device::write)); - map(0xe7f2, 0xe7f3).rw(FUNC(thomson_state::to7_midi_r), FUNC(thomson_state::to7_midi_w)); - map(0xe7f8, 0xe7fb).rw("pia_3", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); - map(0xe7fe, 0xe7ff).rw(FUNC(thomson_state::to7_modem_mea8000_r), FUNC(thomson_state::to7_modem_mea8000_w)); map(0xe800, 0xffff).rom(); /* system bios */ /* 0x10000 - 0x1ffff: 64 KB external ROM cartridge */ @@ -393,15 +393,6 @@ INPUT_PORTS_END -static INPUT_PORTS_START ( to7_mconfig ) - PORT_START ( "mconfig" ) - - PORT_CONFNAME ( 0x01, 0x01, "E7FE-F port" ) - PORT_CONFSETTING ( 0x00, "Modem (unemulated)" ) - PORT_CONFSETTING ( 0x01, "Speech" ) - -INPUT_PORTS_END - static INPUT_PORTS_START ( to7_keyboard ) PORT_START ( "keyboard.0" ) KEY ( 0, "Shift", LSHIFT ) PORT_CODE ( KEYCODE_RSHIFT ) PORT_CHAR(UCHAR_SHIFT_1) @@ -482,7 +473,6 @@ PORT_INCLUDE ( to7_keyboard ) PORT_INCLUDE ( to7_config ) PORT_INCLUDE ( to7_vconfig ) - PORT_INCLUDE ( to7_mconfig ) INPUT_PORTS_END static INPUT_PORTS_START ( t9000 ) @@ -520,9 +510,6 @@ DAC_1BIT(config, "buzzer", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); DAC_6BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // 6-bit game extension R-2R DAC (R=10K) -/* speech synthesis */ - MEA8000(config, m_mea8000, 3840000).add_route(ALL_OUTPUTS, "speaker", 1.0); - /* cassette */ CASSETTE(config, m_cassette); m_cassette->set_formats(to7_cassette_formats); @@ -530,11 +517,18 @@ m_cassette->set_interface("to_cass"); /* extension port */ - THOMSON_EXTENSION(config, m_extension); + THOMSON_EXTENSION(config, m_extension, 16_MHz_XTAL / 16); + m_extension->firq_callback().set("mainfirq", FUNC(input_merger_device::in_w<3>)); + m_extension->irq_callback().set("mainirq", FUNC(input_merger_device::in_w<3>)); + m_extension->option_add("cc90_232", CC90_232); m_extension->option_add("cd90_015", CD90_015); m_extension->option_add("cq90_028", CQ90_028); m_extension->option_add("cd90_351", CD90_351); m_extension->option_add("cd90_640", CD90_640); + m_extension->option_add("md90_120", MD90_120); + m_extension->option_add("midipak", LOGIMUS_MIDIPAK); + m_extension->option_add("rf57_932", RF57_932); + m_extension->option_add("speech", THOMSON_SPEECH); if(is_mo) m_extension->option_add("nanoreseau", NANORESEAU_MO); else @@ -547,7 +541,7 @@ m_pia_sys->writepb_handler().set(FUNC(thomson_state::to7_sys_portb_out)); m_pia_sys->ca2_handler().set(FUNC(thomson_state::to7_set_cassette_motor)); m_pia_sys->cb2_handler().set(FUNC(thomson_state::to7_sys_cb2_out)); - m_pia_sys->irqa_handler().set("mainfirq", FUNC(input_merger_device::in_w<1>)); + m_pia_sys->irqa_handler().set("mainfirq", FUNC(input_merger_device::in_w<0>)); m_pia_sys->irqb_handler().set("mainfirq", FUNC(input_merger_device::in_w<1>)); PIA6821(config, m_pia_game, 0); @@ -556,34 +550,7 @@ m_pia_game->writepb_handler().set(FUNC(thomson_state::to7_game_portb_out)); m_pia_game->cb2_handler().set(FUNC(thomson_state::to7_game_cb2_out)); m_pia_game->irqa_handler().set("mainirq", FUNC(input_merger_device::in_w<1>)); - m_pia_game->irqb_handler().set("mainirq", FUNC(input_merger_device::in_w<1>)); - -/* TODO: CONVERT THIS TO A SLOT DEVICE (RF 57-932) */ - mos6551_device &acia(MOS6551(config, "acia", 0)); - acia.set_xtal(1.8432_MHz_XTAL); - acia.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); - - /// 2400 7N2 - rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr)); - rs232.rxd_handler().set("acia", FUNC(mos6551_device::write_rxd)); - rs232.dcd_handler().set("acia", FUNC(mos6551_device::write_dcd)); - rs232.dsr_handler().set("acia", FUNC(mos6551_device::write_dsr)); - rs232.cts_handler().set("acia", FUNC(mos6551_device::write_cts)); - - -/* TODO: CONVERT THIS TO A SLOT DEVICE (CC 90-232) */ - TO7_IO_LINE(config, "to7_io", 0); - - -/* TODO: CONVERT THIS TO A SLOT DEVICE (MD 90-120) */ - PIA6821(config, THOM_PIA_MODEM, 0); - - ACIA6850(config, m_acia, 0); - m_acia->txd_handler().set(FUNC(thomson_state::to7_modem_tx_w)); - m_acia->irq_handler().set(FUNC(thomson_state::to7_modem_cb)); - - clock_device &acia_clock(CLOCK(config, "acia_clock", 1200)); /* 1200 bauds, might be divided by 16 */ - acia_clock.signal_handler().set(FUNC(thomson_state::write_acia_clock)); + m_pia_game->irqb_handler().set("mainirq", FUNC(input_merger_device::in_w<2>)); /* cartridge */ GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "to_cart", "m7,rom").set_device_load(FUNC(thomson_state::to7_cartridge)); @@ -681,12 +648,7 @@ map(0xe7c0, 0xe7c7).rw(m_mc6846, FUNC(mc6846_device::read), FUNC(mc6846_device::write)); map(0xe7c8, 0xe7cb).rw("pia_0", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); map(0xe7cc, 0xe7cf).rw("pia_1", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); - map(0xe7e0, 0xe7e3).rw("to7_io:pia_2", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); map(0xe7e4, 0xe7e7).rw(FUNC(thomson_state::to770_gatearray_r), FUNC(thomson_state::to770_gatearray_w)); - map(0xe7e8, 0xe7eb).rw("acia", FUNC(mos6551_device::read), FUNC(mos6551_device::write)); - map(0xe7f2, 0xe7f3).rw(FUNC(thomson_state::to7_midi_r), FUNC(thomson_state::to7_midi_w)); - map(0xe7f8, 0xe7fb).rw("pia_3", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); - map(0xe7fe, 0xe7ff).rw(FUNC(thomson_state::to7_modem_mea8000_r), FUNC(thomson_state::to7_modem_mea8000_w)); map(0xe800, 0xffff).rom(); /* system bios */ /* 0x10000 - 0x1ffff: 64 KB external ROM cartridge */ @@ -877,11 +839,7 @@ map(0xa7c0, 0xa7c3).rw("pia_0", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); map(0xa7cb, 0xa7cb).w(FUNC(mo5_state::mo5_ext_w)); map(0xa7cc, 0xa7cf).rw("pia_1", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); - map(0xa7e0, 0xa7e3).rw("to7_io:pia_2", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); map(0xa7e4, 0xa7e7).rw(FUNC(mo5_state::mo5_gatearray_r), FUNC(mo5_state::mo5_gatearray_w)); - map(0xa7e8, 0xa7eb).rw("acia", FUNC(mos6551_device::read), FUNC(mos6551_device::write)); - map(0xa7f2, 0xa7f3).rw(FUNC(mo5_state::to7_midi_r), FUNC(mo5_state::to7_midi_w)); - map(0xa7fe, 0xa7ff).rw(m_mea8000, FUNC(mea8000_device::read), FUNC(mea8000_device::write)); map(0xb000, 0xefff).bankr(THOM_CART_BANK).w(FUNC(mo5_state::mo5_cartridge_w)); map(0xf000, 0xffff).rom(); /* system bios */ @@ -986,7 +944,7 @@ m_pia_sys->writepb_handler().set("buzzer", FUNC(dac_bit_interface::data_w)); m_pia_sys->ca2_handler().set(FUNC(mo5_state::mo5_set_cassette_motor)); m_pia_sys->cb2_handler().set_nop(); - m_pia_sys->irqb_handler().set("mainirq", FUNC(input_merger_device::in_w<1>)); // WARNING: differs from TO7 ! + m_pia_sys->irqb_handler().set("mainirq", FUNC(input_merger_device::in_w<0>)); // WARNING: differs from TO7 ! GENERIC_CARTSLOT(config.replace(), "cartslot", generic_plain_slot, "mo_cart", "m5,rom").set_device_load(FUNC(mo5_state::mo5_cartridge)); @@ -1100,11 +1058,7 @@ map(0xe7da, 0xe7dd).rw(FUNC(to9_state::to9_vreg_r), FUNC(to9_state::to9_vreg_w)); map(0xe7de, 0xe7df).rw(FUNC(to9_state::to9_kbd_r), FUNC(to9_state::to9_kbd_w)); map(0xe7e4, 0xe7e7).rw(FUNC(to9_state::to9_gatearray_r), FUNC(to9_state::to9_gatearray_w)); - map(0xe7e8, 0xe7eb).rw("acia", FUNC(mos6551_device::read), FUNC(mos6551_device::write)); /* map(0xe7f0, 0xe7f7).rw(FUNC(to9_state::to9_ieee_r), FUNC(to9_state::to9_ieee_w )); */ - map(0xe7f2, 0xe7f3).rw(FUNC(to9_state::to7_midi_r), FUNC(to9_state::to7_midi_w)); - map(0xe7f8, 0xe7fb).rw("pia_3", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); - map(0xe7fe, 0xe7ff).rw(FUNC(to9_state::to7_modem_mea8000_r), FUNC(to9_state::to7_modem_mea8000_w)); map(0xe800, 0xffff).rom(); /* system bios */ /* 0x10000 - 0x1ffff: 64 KB external ROM cartridge */ @@ -1266,7 +1220,6 @@ PORT_INCLUDE ( to9_keyboard ) PORT_INCLUDE ( to7_config ) PORT_INCLUDE ( to7_vconfig ) - PORT_INCLUDE ( to7_mconfig ) INPUT_PORTS_END /* ------------ driver ------------ */ @@ -1377,11 +1330,7 @@ map(0xe7cc, 0xe7cf).rw("pia_1", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); map(0xe7da, 0xe7dd).rw(FUNC(to9_state::to8_vreg_r), FUNC(to9_state::to8_vreg_w)); map(0xe7e4, 0xe7e7).rw(FUNC(to9_state::to8_gatearray_r), FUNC(to9_state::to8_gatearray_w)); - map(0xe7e8, 0xe7eb).rw("acia", FUNC(mos6551_device::read), FUNC(mos6551_device::write)); /* map(0xe7f0, 0xe7f7).rw(FUNC(to9_state::to9_ieee_r), FUNC(to9_state::to9_ieee_w )); */ - map(0xe7f2, 0xe7f3).rw(FUNC(to9_state::to7_midi_r), FUNC(to9_state::to7_midi_w)); - map(0xe7f8, 0xe7fb).rw("pia_3", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); - map(0xe7fe, 0xe7ff).rw(FUNC(to9_state::to7_modem_mea8000_r), FUNC(to9_state::to7_modem_mea8000_w)); map(0xe800, 0xffff).bankr(TO8_BIOS_BANK); /* 2 * 6 KB */ /* 0x10000 - 0x1ffff: 64 KB external ROM cartridge */ @@ -1477,7 +1426,6 @@ PORT_INCLUDE ( to9_keyboard ) PORT_INCLUDE ( to8_config ) PORT_INCLUDE ( to7_vconfig ) - PORT_INCLUDE ( to7_mconfig ) INPUT_PORTS_END @@ -1583,11 +1531,7 @@ map(0xe7da, 0xe7dd).rw(FUNC(to9_state::to8_vreg_r), FUNC(to9_state::to8_vreg_w)); map(0xe7de, 0xe7df).rw(FUNC(to9_state::to9_kbd_r), FUNC(to9_state::to9_kbd_w)); map(0xe7e4, 0xe7e7).rw(FUNC(to9_state::to8_gatearray_r), FUNC(to9_state::to8_gatearray_w)); - map(0xe7e8, 0xe7eb).rw("acia", FUNC(mos6551_device::read), FUNC(mos6551_device::write)); /* map(0xe7f0, 0xe7f7).rw(FUNC(to9_state::to9_ieee_r), FUNC(to9_state::to9_ieee_w )); */ - map(0xe7f2, 0xe7f3).rw(FUNC(to9_state::to7_midi_r), FUNC(to9_state::to7_midi_w)); - map(0xe7f8, 0xe7fb).rw("pia_3", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); - map(0xe7fe, 0xe7ff).rw(FUNC(to9_state::to7_modem_mea8000_r), FUNC(to9_state::to7_modem_mea8000_w)); map(0xe800, 0xffff).bankr(TO8_BIOS_BANK); /* 2 * 6 KB */ /* 0x10000 - 0x1ffff: 64 KB external ROM cartridge */ @@ -1640,7 +1584,6 @@ PORT_INCLUDE ( to9_keyboard ) PORT_INCLUDE ( to7_config ) PORT_INCLUDE ( to7_vconfig ) - PORT_INCLUDE ( to7_mconfig ) INPUT_PORTS_END /* ------------ driver ------------ */ @@ -1752,10 +1695,7 @@ map(0xa7cc, 0xa7cf).rw("pia_1", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); map(0xa7da, 0xa7dd).rw(FUNC(mo6_state::mo6_vreg_r), FUNC(mo6_state::mo6_vreg_w)); map(0xa7e4, 0xa7e7).rw(FUNC(mo6_state::mo6_gatearray_r), FUNC(mo6_state::mo6_gatearray_w)); - map(0xa7e8, 0xa7eb).rw("acia", FUNC(mos6551_device::read), FUNC(mos6551_device::write)); /* map(0xa7f0, 0xa7f7).rw(FUNC(mo6_state::to9_ieee_r), FUNC(homson_state::to9_ieee_w));*/ - map(0xa7f2, 0xa7f3).rw(FUNC(mo6_state::to7_midi_r), FUNC(mo6_state::to7_midi_w)); - map(0xa7fe, 0xa7ff).rw(m_mea8000, FUNC(mea8000_device::read), FUNC(mea8000_device::write)); map(0xb000, 0xbfff).bankr(MO6_CART_LO).w(FUNC(mo6_state::mo6_cartridge_w)); map(0xc000, 0xefff).bankr(MO6_CART_HI).w(FUNC(mo6_state::mo6_cartridge_w)); map(0xf000, 0xffff).bankr(TO8_BIOS_BANK); @@ -2001,7 +1941,7 @@ m_pia_sys->writepb_handler().set("buzzer", FUNC(dac_bit_interface::data_w)); m_pia_sys->ca2_handler().set(FUNC(mo6_state::mo5_set_cassette_motor)); m_pia_sys->cb2_handler().set(FUNC(mo6_state::mo6_sys_cb2_out)); - m_pia_sys->irqb_handler().set("mainirq", FUNC(input_merger_device::in_w<1>)); // differs from TO + m_pia_sys->irqb_handler().set("mainirq", FUNC(input_merger_device::in_w<0>)); // differs from TO m_pia_game->writepa_handler().set(FUNC(mo6_state::mo6_game_porta_out)); m_pia_game->cb2_handler().set(FUNC(mo6_state::mo6_game_cb2_out)); @@ -2076,7 +2016,7 @@ * devices: - AZERTY keyboard has only 58 keys, and no caps-lock led - - CENTRONICS printer handled differently + - CENTRONICS printer interface not built in (requires CC 90-232 extension) - MO5-compatible network (probably identical to NR 07-005 extension) - extern floppy controller & drive possible, masks the network @@ -2096,15 +2036,8 @@ map(0xa7cc, 0xa7cf).rw("pia_1", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); m_extension_view[1](0xa7d8, 0xa7d9).r(FUNC(mo5nr_state::id_r)); map(0xa7da, 0xa7dd).rw(FUNC(mo5nr_state::mo6_vreg_r), FUNC(mo5nr_state::mo6_vreg_w)); - map(0xa7e1, 0xa7e1).r("cent_data_in", FUNC(input_buffer_device::read)); - map(0xa7e1, 0xa7e1).w(m_cent_data_out, FUNC(output_latch_device::write)); - map(0xa7e3, 0xa7e3).rw(FUNC(mo5nr_state::mo5nr_prn_r), FUNC(mo5nr_state::mo5nr_prn_w)); map(0xa7e4, 0xa7e7).rw(FUNC(mo5nr_state::mo6_gatearray_r), FUNC(mo5nr_state::mo6_gatearray_w)); - map(0xa7e8, 0xa7eb).rw("acia", FUNC(mos6551_device::read), FUNC(mos6551_device::write)); /* map(0xa7f0, 0xa7f7).rw(FUNC(mo5nr_state::to9_ieee_r), FUNC(homson_state::to9_ieee_w));*/ - map(0xa7f2, 0xa7f3).rw(FUNC(mo5nr_state::to7_midi_r), FUNC(mo5nr_state::to7_midi_w)); - map(0xa7f8, 0xa7fb).rw("pia_3", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); - map(0xa7fe, 0xa7ff).rw(m_mea8000, FUNC(mea8000_device::read), FUNC(mea8000_device::write)); map(0xb000, 0xbfff).bankr(MO6_CART_LO).w(FUNC(mo5nr_state::mo6_cartridge_w)); map(0xc000, 0xefff).bankr(MO6_CART_HI).w(FUNC(mo5nr_state::mo6_cartridge_w)); map(0xf000, 0xffff).bankr(TO8_BIOS_BANK); @@ -2302,23 +2235,14 @@ m_pia_sys->writepb_handler().set("buzzer", FUNC(dac_bit_interface::data_w)); m_pia_sys->ca2_handler().set(FUNC(mo5nr_state::mo5_set_cassette_motor)); m_pia_sys->cb2_handler().set(FUNC(mo5nr_state::mo6_sys_cb2_out)); - m_pia_sys->irqb_handler().set("mainirq", FUNC(input_merger_device::in_w<1>)); // differs from TO - - m_pia_game->writepa_handler().set(FUNC(mo5nr_state::mo6_game_porta_out)); - - CENTRONICS(config, m_centronics, centronics_devices, "printer"); - m_centronics->set_data_input_buffer("cent_data_in"); - m_centronics->busy_handler().set(FUNC(mo5nr_state::write_centronics_busy)); - - INPUT_BUFFER(config, "cent_data_in"); - - OUTPUT_LATCH(config, m_cent_data_out); - m_centronics->set_output_latch(*m_cent_data_out); + m_pia_sys->irqb_handler().set("mainirq", FUNC(input_merger_device::in_w<0>)); // differs from TO GENERIC_CARTSLOT(config.replace(), "cartslot", generic_plain_slot, "mo_cart", "m5,rom").set_device_load(FUNC(mo5nr_state::mo5_cartridge)); NANORESEAU_MO(config, m_nanoreseau, 0, true); + m_extension->option_remove("nanoreseau"); + /* internal ram */ m_ram->set_default_size("128K"); diff -Nru mame-0.250+dfsg.1/src/mame/thomson/thomson.h mame-0.251+dfsg.1/src/mame/thomson/thomson.h --- mame-0.250+dfsg.1/src/mame/thomson/thomson.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/thomson/thomson.h 2022-12-29 14:20:09.000000000 +0000 @@ -14,26 +14,18 @@ #pragma once #include "cpu/m6809/m6809.h" -#include "formats/thom_cas.h" -#include "formats/thom_dsk.h" #include "imagedev/cassette.h" #include "machine/6821pia.h" -#include "machine/6850acia.h" #include "machine/input_merger.h" -#include "machine/mc6843.h" #include "machine/mc6846.h" -#include "machine/mc6846.h" -#include "machine/mos6551.h" #include "machine/ram.h" #include "sound/dac.h" -#include "sound/mea8000.h" #include "bus/thomson/extension.h" #include "bus/thomson/nanoreseau.h" #include "bus/centronics/ctronics.h" #include "bus/generic/slot.h" #include "bus/generic/carts.h" -#include "bus/rs232/rs232.h" #include "emupal.h" #include "screen.h" @@ -42,13 +34,6 @@ /* 6821 PIAs */ #define THOM_PIA_SYS "pia_0" /* system PIA */ #define THOM_PIA_GAME "pia_1" /* music & game PIA (joypad + sound) */ -#define THOM_PIA_IO "pia_2" /* CC 90-232 I/O extension (parallel & RS-232) */ -#define THOM_PIA_MODEM "pia_3" /* MD 90-120 MODEM extension */ - -/* sound ports */ -#define THOM_SOUND_BUZ 0 /* 1-bit buzzer */ -#define THOM_SOUND_GAME 1 /* 6-bit game port DAC */ -#define THOM_SOUND_SPEECH 2 /* speech synthesis */ /* bank-switching */ #define THOM_CART_BANK "bank2" /* cartridge ROM */ @@ -77,12 +62,6 @@ Emulated screen can have smaller borders. */ -/* maximum number of video pages: - 1 for TO7 generation (including MO5) - 4 for TO8 generation (including TO9, MO6) - */ -#define THOM_NB_PAGES 4 - /* page 0 is banked */ #define THOM_VRAM_BANK "bank1" @@ -104,15 +83,10 @@ m_maincpu(*this, "maincpu"), m_cassette(*this, "cassette"), m_dac(*this, "dac"), - m_centronics(*this, "centronics"), - m_cent_data_out(*this, "cent_data_out"), m_pia_sys(*this, THOM_PIA_SYS), m_pia_game(*this, THOM_PIA_GAME), - m_acia(*this, "acia6850"), - m_mea8000(*this, "mea8000"), m_ram(*this, RAM_TAG), m_mc6846(*this, "mc6846"), - m_mc6843(*this, "mc6843"), m_screen(*this, "screen"), m_mainirq(*this, "mainirq"), m_mainfirq(*this, "mainfirq"), @@ -127,7 +101,6 @@ m_io_lightpen_button(*this, "lightpen_button"), m_io_config(*this, "config"), m_io_vconfig(*this, "vconfig"), - m_io_mconfig(*this, "mconfig"), m_io_keyboard(*this, "keyboard.%u", 0), m_vrambank(*this, THOM_VRAM_BANK), m_cartbank(*this, THOM_CART_BANK), @@ -196,18 +169,11 @@ void to7_sys_portb_out(uint8_t data); uint8_t to7_sys_porta_in(); uint8_t to7_sys_portb_in(); - DECLARE_WRITE_LINE_MEMBER( to7_modem_cb ); - DECLARE_WRITE_LINE_MEMBER( to7_modem_tx_w); - DECLARE_WRITE_LINE_MEMBER( write_acia_clock ); - uint8_t to7_modem_mea8000_r(offs_t offset); - void to7_modem_mea8000_w(offs_t offset, uint8_t data); uint8_t to7_game_porta_in(); uint8_t to7_game_portb_in(); void to7_game_portb_out(uint8_t data); DECLARE_WRITE_LINE_MEMBER( to7_game_cb2_out ); TIMER_CALLBACK_MEMBER( to7_game_update_cb ); - uint8_t to7_midi_r(); - void to7_midi_w(uint8_t data); DECLARE_MACHINE_RESET( to7 ); DECLARE_MACHINE_START( to7 ); DECLARE_WRITE_LINE_MEMBER( to770_sys_cb2_out ); @@ -241,24 +207,16 @@ TIMER_CALLBACK_MEMBER( ans ); void thom_palette(palette_device &palette); - int m_centronics_busy = 0; - int m_centronics_perror = 0; - void to7_map(address_map &map); void to770_map(address_map &map); required_device m_maincpu; required_device m_cassette; required_device m_dac; - optional_device m_centronics; - optional_device m_cent_data_out; required_device m_pia_sys; required_device m_pia_game; - required_device m_acia; - required_device m_mea8000; required_device m_ram; optional_device m_mc6846; - optional_device m_mc6843; required_device m_screen; required_device m_mainirq; required_device m_mainfirq; @@ -273,7 +231,6 @@ required_ioport m_io_lightpen_button; required_ioport m_io_config; required_ioport m_io_vconfig; - optional_ioport m_io_mconfig; required_ioport_array<10> m_io_keyboard; required_memory_bank m_vrambank; optional_memory_bank m_cartbank; @@ -295,7 +252,6 @@ uint8_t m_thom_cart_bank = 0; /* current bank */ uint8_t m_to7_lightpen_step = 0; uint8_t m_to7_lightpen = 0; - uint8_t m_to7_modem_tx = 0; /* calls to7_game_update_cb periodically */ emu_timer* m_to7_game_timer = nullptr; uint8_t m_to7_game_sound = 0; @@ -359,14 +315,10 @@ void thom_irq_reset(); void to7_update_cart_bank(); void to7_set_init( int init ); - void to7_modem_reset(); - void to7_modem_init(); uint8_t to7_get_mouse_signal(); void to7_game_sound_update(); void to7_game_init(); void to7_game_reset(); - void to7_midi_reset(); - void to7_midi_init(); void to770_update_ram_bank(); TIMER_CALLBACK_MEMBER( mo5_periodic_cb ); @@ -432,6 +384,8 @@ public: to9_state(const machine_config &mconfig, device_type type, const char *tag) : thomson_state(mconfig, type, tag), + m_centronics(*this, "centronics"), + m_cent_data_out(*this, "cent_data_out"), m_syslobank(*this, TO8_SYS_LO), m_syshibank(*this, TO8_SYS_HI), m_datalobank(*this, TO8_DATA_LO), @@ -446,12 +400,17 @@ void to9p(machine_config &config); protected: + optional_device m_centronics; + optional_device m_cent_data_out; + required_memory_bank m_syslobank; optional_memory_bank m_syshibank; optional_memory_bank m_datalobank; optional_memory_bank m_datahibank; optional_memory_bank m_biosbank; + int m_centronics_busy = 0; + uint8_t m_to8_kbd_ack = 0; /* 1 = cpu inits / accepts transfers */ uint16_t m_to8_kbd_data = 0; /* data to transmit */ uint16_t m_to8_kbd_step = 0; /* transmission automaton state */ @@ -640,8 +599,6 @@ uint8_t mo5nr_net_r(offs_t offset); void mo5nr_net_w(offs_t offset, uint8_t data); - uint8_t mo5nr_prn_r(); - void mo5nr_prn_w(uint8_t data); uint8_t mo5nr_sys_portb_in(); void mo5nr_sys_porta_out(uint8_t data); }; @@ -695,38 +652,5 @@ #define THOM_VMODE_NB 16 -class to7_io_line_device : public device_t -{ -public: - // construction/destruction - to7_io_line_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - -protected: - // device-level overrides - virtual void device_start() override; - virtual void device_add_mconfig(machine_config &config) override; - -private: - required_device m_pia_io; - required_device m_rs232; - int m_last_low = 0; - int m_centronics_busy = 0; - int m_rxd = 0; - int m_cts = 0; - int m_dsr = 0; - - /* read data register */ - uint8_t porta_in(); - - /* write data register */ - void porta_out(uint8_t data); - - DECLARE_WRITE_LINE_MEMBER(write_rxd); - DECLARE_WRITE_LINE_MEMBER(write_cts); - DECLARE_WRITE_LINE_MEMBER(write_dsr); - DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); -}; - -DECLARE_DEVICE_TYPE(TO7_IO_LINE, to7_io_line_device) #endif // MAME_INCLUDES_THOMSON_H diff -Nru mame-0.250+dfsg.1/src/mame/thomson/thomson_m.cpp mame-0.251+dfsg.1/src/mame/thomson/thomson_m.cpp --- mame-0.250+dfsg.1/src/mame/thomson/thomson_m.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/thomson/thomson_m.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -14,23 +14,17 @@ #include "machine/ram.h" #define VERBOSE 0 -#define VERBOSE_IRQ 0 #define VERBOSE_KBD 0 /* TO8 / TO9 / TO9+ keyboard */ #define VERBOSE_BANK 0 #define VERBOSE_VIDEO 0 /* video & lightpen */ -#define VERBOSE_IO 0 /* serial & parallel I/O */ -#define VERBOSE_MIDI 0 #define PRINT(x) osd_printf_info x #define LOG(x) do { if (VERBOSE) logerror x; } while (0) #define VLOG(x) do { if (VERBOSE > 1) logerror x; } while (0) -#define LOG_IRQ(x) do { if (VERBOSE_IRQ) logerror x; } while (0) #define LOG_KBD(x) do { if (VERBOSE_KBD) logerror x; } while (0) #define LOG_BANK(x) do { if (VERBOSE_BANK) logerror x; } while (0) #define LOG_VIDEO(x) do { if (VERBOSE_VIDEO) logerror x; } while (0) -#define LOG_IO(x) do { if (VERBOSE_IO) logerror x; } while (0) -#define LOG_MIDI(x) do { if (VERBOSE_MIDI) logerror x; } while (0) /* This set to 1 handle the .k7 files without passing through .wav */ /* It must be set accordingly in formats/thom_cas.c */ @@ -231,18 +225,6 @@ -/* - current IRQ usage: - - line 0 => 6846 interrupt - line 1 => 6821 interrupts (shared for all 6821) - line 2 => TO8 lightpen interrupt (from gate-array) - line 3 => TO9 keyboard interrupt (from 6850 ACIA) - line 4 => MIDI interrupt (from 6850 ACIA) -*/ - - - /* ------------ 6850 defines ------------ */ #define ACIA_6850_RDRF 0x01 /* Receive data register full */ @@ -482,226 +464,6 @@ -/* ------------ CC 90-232 I/O extension ------------ */ - -/* Features: - - 6821 PIA - - serial RS232: bit-banging? - - parallel CENTRONICS: a printer (-prin) is emulated - - usable on TO7(/70), MO5(E) only; not on TO9 and higher - - Note: it seems impossible to connect both a serial & a parallel device - because the Data Transmit Ready bit is shared in an incompatible way! -*/ - -DEFINE_DEVICE_TYPE(TO7_IO_LINE, to7_io_line_device, "to7_io_line", "TO7 Serial source") - -//------------------------------------------------- -// to7_io_line_device - constructor -//------------------------------------------------- - -to7_io_line_device::to7_io_line_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, TO7_IO_LINE, tag, owner, clock), - m_pia_io(*this, THOM_PIA_IO), - m_rs232(*this, "rs232"), - m_last_low(0) -{ -} - -void to7_io_line_device::device_add_mconfig(machine_config &config) -{ - /// THIS PIO is part of CC 90-232 expansion - PIA6821(config, m_pia_io, 0); - m_pia_io->readpa_handler().set(FUNC(to7_io_line_device::porta_in)); - m_pia_io->writepa_handler().set(FUNC(to7_io_line_device::porta_out)); - m_pia_io->writepb_handler().set("cent_data_out", FUNC(output_latch_device::write)); - m_pia_io->cb2_handler().set("centronics", FUNC(centronics_device::write_strobe)); - m_pia_io->irqa_handler().set("^mainfirq", FUNC(input_merger_device::in_w<1>)); - m_pia_io->irqb_handler().set("^mainfirq", FUNC(input_merger_device::in_w<1>)); - - RS232_PORT(config, m_rs232, default_rs232_devices, nullptr); - m_rs232->rxd_handler().set(FUNC(to7_io_line_device::write_rxd)); - m_rs232->cts_handler().set(FUNC(to7_io_line_device::write_cts)); - m_rs232->dsr_handler().set(FUNC(to7_io_line_device::write_dsr)); - - centronics_device ¢ronics(CENTRONICS(config, "centronics", centronics_devices, "printer")); - centronics.ack_handler().set(m_pia_io, FUNC(pia6821_device::cb1_w)); - centronics.busy_handler().set(FUNC(to7_io_line_device::write_centronics_busy)); - - output_latch_device ¢_data_out(OUTPUT_LATCH(config, "cent_data_out")); - centronics.set_output_latch(cent_data_out); -} - - -void to7_io_line_device::device_start() -{ - m_rs232->write_dtr(0); -} - -void to7_io_line_device::porta_out(uint8_t data) -{ - int txd = (data >> 0) & 1; - int rts = (data >> 1) & 1; - - LOG_IO(( "%s %f to7_io_porta_out: txd=%i, rts=%i\n", machine().describe_context(), machine().time().as_double(), txd, rts )); - - m_rs232->write_txd(txd); - m_rs232->write_rts(rts); -} - - - -WRITE_LINE_MEMBER(to7_io_line_device::write_rxd ) -{ - m_rxd = state; -} - -WRITE_LINE_MEMBER(to7_io_line_device::write_dsr ) -{ - if (!state) m_last_low = 0; - - m_dsr = state; -} - -WRITE_LINE_MEMBER(to7_io_line_device::write_cts ) -{ - m_pia_io->ca1_w(state); - m_cts = state; -} - -WRITE_LINE_MEMBER(to7_io_line_device::write_centronics_busy ) -{ - if (!state) m_last_low = 1; - - m_centronics_busy = state; -} - - -uint8_t to7_io_line_device::porta_in() -{ - LOG_IO(( "%s %f to7_io_porta_in: select=%i cts=%i, dsr=%i, rd=%i\n", machine().describe_context(), machine().time().as_double(), m_centronics_busy, m_cts, m_dsr, m_rxd )); - - /// HACK: without high impedance we can't tell whether a device is driving a line high or if it's being pulled up. - /// so assume the last device to drive it low is active. - int dsr; - if (m_last_low == 0) - dsr = m_dsr; - else - dsr = !m_centronics_busy; - - return (0x1f /* not required when converted to write_pa */) | (m_cts << 5) | (dsr << 6) | (m_rxd << 7); -} - - - -/* ------------ RF 57-932 RS232 extension ------------ */ - -/* Features: - - SY 6551 ACIA. - - higher transfer rates than the CC 90-232 - - usable on all computer, including TO9 and higher - */ - - - -/* ------------ MD 90-120 MODEM extension (not functional) ------------ */ - -/* Features: - - 6850 ACIA - - 6821 PIA - - asymetric 1200/ 75 bauds (reversable) - - TODO! - */ - - -WRITE_LINE_MEMBER( thomson_state::to7_modem_cb ) -{ - LOG(( "to7_modem_cb: called %i\n", state )); -} - - - -WRITE_LINE_MEMBER( thomson_state::to7_modem_tx_w ) -{ - m_to7_modem_tx = state; -} - - -WRITE_LINE_MEMBER( thomson_state::write_acia_clock ) -{ - m_acia->write_txc(state); - m_acia->write_rxc(state); -} - -void thomson_state::to7_modem_reset() -{ - LOG (( "to7_modem_reset called\n" )); - m_acia->write_rxd(0); - m_to7_modem_tx = 0; - /* pia_reset() is called in machine_reset */ - /* acia_6850 has no reset (?) */ -} - - - -void thomson_state::to7_modem_init() -{ - LOG (( "to7_modem_init: MODEM not implemented!\n" )); - save_item(NAME(m_to7_modem_tx)); -} - - - -/* ------------ dispatch MODEM / speech extension ------------ */ - -uint8_t thomson_state::to7_modem_mea8000_r(offs_t offset) -{ - if ( machine().side_effects_disabled() ) - { - return 0; - } - - if ( m_io_mconfig->read() & 1 ) - { - return m_mea8000->read(offset); - } - else - { - switch (offset) - { - case 0: - case 1: - return m_acia->read(offset & 1); - - default: - return 0; - } - } -} - - - -void thomson_state::to7_modem_mea8000_w(offs_t offset, uint8_t data) -{ - if ( m_io_mconfig->read() & 1 ) - { - m_mea8000->write(offset, data); - } - else - { - switch (offset) - { - case 0: - case 1: - m_acia->write(offset & 1, data); - break; - } - } -} - - - /* ------------ SX 90-018 (model 2) music & game extension ------------ */ /* features: @@ -886,61 +648,6 @@ -/* ------------ MIDI extension ------------ */ - -/* IMPORTANT NOTE: - The following is experimental and not compiled in by default. - It relies on the existence of an hypothetical "character device" API able - to transmit bytes between the MAME driver and the outside world - (using, e.g., character device special files on some UNIX). -*/ - -/* Features an EF 6850 ACIA - - MIDI protocol is a serial asynchronous protocol - Each 8-bit byte is transmitted as: - - 1 start bit - - 8 data bits - - 1 stop bits - 320 us per transmitted byte => 31250 baud - - Emulation is based on the Motorola 6850 documentation, not EF 6850. - - We do not emulate the seral line but pass bytes directly between the - 6850 registers and the MIDI device. -*/ - - -uint8_t thomson_state::to7_midi_r() -{ - if(!machine().side_effects_disabled()) - logerror( "to7_midi_r: not implemented\n" ); - return 0; -} - - - -void thomson_state::to7_midi_w(uint8_t data) -{ - logerror( "to7_midi_w: not implemented\n" ); -} - - - -void thomson_state::to7_midi_reset() -{ - logerror( "to7_midi_reset: not implemented\n" ); -} - - - -void thomson_state::to7_midi_init() -{ - logerror( "to7_midi_init: not implemented\n" ); -} - - - /* ------------ init / reset ------------ */ @@ -952,11 +659,9 @@ /* subsystems */ thom_irq_reset(); to7_game_reset(); - to7_modem_reset(); - to7_midi_reset(); m_extension->rom_map(m_maincpu->space(AS_PROGRAM), 0xe000, 0xe7bf); - m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xe7d0, 0xe7df); + m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xe7c0, 0xe7ff); /* video */ thom_set_video_mode( THOM_VMODE_TO770 ); @@ -987,11 +692,9 @@ /* subsystems */ to7_game_init(); - to7_modem_init(); - to7_midi_init(); m_extension->rom_map(m_maincpu->space(AS_PROGRAM), 0xe000, 0xe7bf); - m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xe7d0, 0xe7df); + m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xe7c0, 0xe7ff); /* memory */ m_thom_cart_bank = 0; @@ -1178,11 +881,9 @@ /* subsystems */ thom_irq_reset(); to7_game_reset(); - to7_modem_reset(); - to7_midi_reset(); m_extension->rom_map(m_maincpu->space(AS_PROGRAM), 0xe000, 0xe7bf); - m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xe7d0, 0xe7df); + m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xe7c0, 0xe7ff); /* video */ thom_set_video_mode( THOM_VMODE_TO770 ); @@ -1215,11 +916,9 @@ /* subsystems */ to7_game_init(); - to7_modem_init(); - to7_midi_init(); m_extension->rom_map(m_maincpu->space(AS_PROGRAM), 0xe000, 0xe7bf); - m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xe7d0, 0xe7df); + m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xe7c0, 0xe7ff); /* memory */ m_thom_cart_bank = 0; @@ -1561,8 +1260,6 @@ /* subsystems */ thom_irq_reset(); to7_game_reset(); - to7_modem_reset(); - to7_midi_reset(); mo5_init_timer(); /* video */ @@ -1595,12 +1292,10 @@ /* subsystems */ to7_game_init(); - to7_modem_init(); - to7_midi_init(); m_mo5_periodic_timer = timer_alloc(FUNC(mo5_state::mo5_periodic_cb), this); m_extension->rom_map(m_maincpu->space(AS_PROGRAM), 0xa000, 0xa7bf); - m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xa7d0, 0xa7df); + m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xa7c0, 0xa7ff); /* memory */ m_thom_cart_bank = 0; @@ -2504,11 +2199,9 @@ thom_irq_reset(); to7_game_reset(); to9_kbd_reset(); - to7_modem_reset(); - to7_midi_reset(); m_extension->rom_map(m_maincpu->space(AS_PROGRAM), 0xe000, 0xe7bf); - m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xe7d0, 0xe7df); + m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xe7c0, 0xe7ff); /* video */ thom_set_video_mode( THOM_VMODE_TO9 ); @@ -2543,11 +2236,9 @@ to7_game_init(); to9_kbd_init(); to9_palette_init(); - to7_modem_init(); - to7_midi_init(); m_extension->rom_map(m_maincpu->space(AS_PROGRAM), 0xe000, 0xe7bf); - m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xe7d0, 0xe7df); + m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xe7c0, 0xe7ff); /* memory */ m_thom_vram = ram; @@ -2588,7 +2279,7 @@ PIA ports. Note: if we conform to the (scarce) documentation the CPU tend to lock - waitting for keyboard input. + waiting for keyboard input. The protocol documentation is pretty scarce and does not account for these behaviors! The emulation code contains many hacks (delays, timeouts, spurious @@ -3421,8 +3112,6 @@ thom_irq_reset(); to7_game_reset(); to8_kbd_reset(); - to7_modem_reset(); - to7_midi_reset(); /* gate-array */ m_to7_lightpen = 0; @@ -3469,11 +3158,9 @@ to7_game_init(); to8_kbd_init(); to9_palette_init(); - to7_modem_init(); - to7_midi_init(); m_extension->rom_map(m_maincpu->space(AS_PROGRAM), 0xe000, 0xe7bf); - m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xe7d0, 0xe7df); + m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xe7c0, 0xe7ff); /* memory */ m_thom_cart_bank = 0; @@ -3570,8 +3257,6 @@ thom_irq_reset(); to7_game_reset(); to9_kbd_reset(); - to7_modem_reset(); - to7_midi_reset(); /* gate-array */ m_to7_lightpen = 0; @@ -3617,11 +3302,9 @@ to7_game_init(); to9_kbd_init(); to9_palette_init(); - to7_modem_init(); - to7_midi_init(); m_extension->rom_map(m_maincpu->space(AS_PROGRAM), 0xe000, 0xe7bf); - m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xe7d0, 0xe7df); + m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xe7c0, 0xe7ff); /* memory */ m_thom_cart_bank = 0; @@ -4257,8 +3940,6 @@ /* subsystems */ thom_irq_reset(); mo6_game_reset(); - to7_modem_reset(); - to7_midi_reset(); mo5_init_timer(); /* gate-array */ @@ -4301,12 +3982,10 @@ /* subsystems */ mo6_game_init(); to9_palette_init(); - to7_modem_init(); - to7_midi_init(); m_mo5_periodic_timer = timer_alloc(FUNC(mo6_state::mo5_periodic_cb), this); m_extension->rom_map(m_maincpu->space(AS_PROGRAM), 0xa000, 0xa7bf); - m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xa7d0, 0xa7df); + m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xa7c0, 0xa7ff); /* memory */ m_thom_cart_bank = 0; @@ -4360,31 +4039,6 @@ -/* ------------ printer ------------ */ - -/* Unlike the TO8, TO9, TO9+, MO6, the printer has its own ports and does not - go through the 6821 PIA. -*/ - - -uint8_t mo5nr_state::mo5nr_prn_r() -{ - uint8_t result = 0; - - result |= m_centronics_busy << 7; - - return result; -} - - -void mo5nr_state::mo5nr_prn_w(uint8_t data) -{ - /* TODO: understand other bits */ - m_centronics->write_strobe(BIT(data, 3)); -} - - - /* ------------ system PIA 6821 ------------ */ @@ -4459,8 +4113,6 @@ /* subsystems */ thom_irq_reset(); mo5nr_game_reset(); - to7_modem_reset(); - to7_midi_reset(); mo5_init_timer(); /* gate-array */ @@ -4503,14 +4155,12 @@ /* subsystems */ mo5nr_game_init(); to9_palette_init(); - to7_modem_init(); - to7_midi_init(); m_mo5_periodic_timer = timer_alloc(FUNC(mo5nr_state::mo5_periodic_cb), this); m_extension->rom_map(m_extension_view[0], 0xa000, 0xa7bf); - m_extension->io_map (m_extension_view[0], 0xa7d0, 0xa7df); + m_extension->io_map (m_extension_view[0], 0xa7c0, 0xa7ff); m_extension_view[1].install_device(0xa000, 0xa7bf, *m_nanoreseau, &nanoreseau_device::rom_map ); - m_extension_view[1].install_device(0xa7d0, 0xa7df, *m_nanoreseau, &nanoreseau_device::io_map ); + m_extension_view[1].install_device(0xa7c0, 0xa7ff, *m_nanoreseau, &nanoreseau_device::io_map ); /* memory */ m_thom_cart_bank = 0; diff -Nru mame-0.250+dfsg.1/src/mame/thomson/thomson_v.cpp mame-0.251+dfsg.1/src/mame/thomson/thomson_v.cpp --- mame-0.250+dfsg.1/src/mame/thomson/thomson_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/thomson/thomson_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -27,6 +27,12 @@ #define THOM_GPL_PER_LINE 40 +/* maximum number of video pages: + 1 for TO7 generation (including MO5) + 4 for TO8 generation (including TO9, MO6) + */ +#define THOM_NB_PAGES 4 + /****************** dynamic screen size *****************/ diff -Nru mame-0.250+dfsg.1/src/mame/tiger/gamecom.cpp mame-0.251+dfsg.1/src/mame/tiger/gamecom.cpp --- mame-0.250+dfsg.1/src/mame/tiger/gamecom.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/tiger/gamecom.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -281,8 +281,8 @@ SPEAKER(config, "speaker").front_center(); /* TODO: much more complex than this */ DAC_8BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // unknown DAC (Digital audio) - DAC_4BIT_R2R(config, m_dac0, 0).add_route(ALL_OUTPUTS, "speaker", 0.05); // unknown DAC (Frequency modulation) - DAC_4BIT_R2R(config, m_dac1, 0).add_route(ALL_OUTPUTS, "speaker", 0.05); // unknown DAC (Frequency modulation) + DAC_4BIT_R2R(config, m_dac0, 0).add_route(ALL_OUTPUTS, "speaker", 0.25); // unknown DAC (Frequency modulation) + DAC_4BIT_R2R(config, m_dac1, 0).add_route(ALL_OUTPUTS, "speaker", 0.25); // unknown DAC (Frequency modulation) /* cartridge */ GENERIC_CARTSLOT(config, "cartslot1", generic_linear_slot, "gamecom_cart", "bin,tgc").set_device_load(FUNC(gamecom_state::cart1_load)); diff -Nru mame-0.250+dfsg.1/src/mame/tiger/gamecom.h mame-0.251+dfsg.1/src/mame/tiger/gamecom.h --- mame-0.250+dfsg.1/src/mame/tiger/gamecom.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/tiger/gamecom.h 2022-12-29 14:20:09.000000000 +0000 @@ -286,9 +286,9 @@ required_shared_ptr m_p_nvram; required_device m_maincpu; required_device m_screen; - required_device m_dac; - required_device m_dac0; - required_device m_dac1; + required_device m_dac; + required_device m_dac0; + required_device m_dac1; required_device m_cart1; required_device m_cart2; required_memory_bank m_bank1; diff -Nru mame-0.250+dfsg.1/src/mame/tiger/gamecom_m.cpp mame-0.251+dfsg.1/src/mame/tiger/gamecom_m.cpp --- mame-0.250+dfsg.1/src/mame/tiger/gamecom_m.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/tiger/gamecom_m.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -18,7 +18,7 @@ TIMER_CALLBACK_MEMBER(gamecom_state::gamecom_sound0_timer_callback) { - if (m_sound0_cnt > 0x3f) + if (m_sound0_cnt > 0x1f) { if (m_sound.sg0t > 0) { @@ -27,16 +27,17 @@ m_sound0_cnt = 0; } } - if (m_sound0_cnt < 0x40) + if (m_sound0_cnt < 0x20) { m_dac0->write((m_sound.sg0w[m_sound0_cnt >> 1] >> (BIT(m_sound0_cnt, 0) * 4)) & 0xf); + m_dac0->set_output_gain(ALL_OUTPUTS, m_sound.sg0l / 31.0F); m_sound0_cnt++; } } TIMER_CALLBACK_MEMBER(gamecom_state::gamecom_sound1_timer_callback) { - if (m_sound1_cnt > 0x3f) + if (m_sound1_cnt > 0x1f) { if (m_sound.sg1t > 0) { @@ -45,9 +46,10 @@ m_sound1_cnt = 0; } } - if (m_sound1_cnt < 0x40) + if (m_sound1_cnt < 0x20) { m_dac1->write((m_sound.sg1w[m_sound1_cnt >> 1] >> (BIT(m_sound1_cnt, 0) * 4)) & 0xf); + m_dac1->set_output_gain(ALL_OUTPUTS, m_sound.sg1l / 31.0F); m_sound1_cnt++; } } diff -Nru mame-0.250+dfsg.1/src/mame/toaplan/toaplan1.cpp mame-0.251+dfsg.1/src/mame/toaplan/toaplan1.cpp --- mame-0.250+dfsg.1/src/mame/toaplan/toaplan1.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/toaplan/toaplan1.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -755,7 +755,8 @@ map(0x140008, 0x140009).portr("SYSTEM"); map(0x14000b, 0x14000b).r(FUNC(toaplan1_samesame_state::port_6_word_r)); /* Territory, and MCU ready */ map(0x14000d, 0x14000d).w(FUNC(toaplan1_samesame_state::coin_w)); /* Coin counter/lockout */ - map(0x14000f, 0x14000f).w(FUNC(toaplan1_samesame_state::mcu_w)); /* Commands sent to HD647180 */ +// map(0x14000e, 0x14000f).nopr(); // irq ack? + map(0x14000f, 0x14000f).w(m_soundlatch, FUNC(generic_latch_8_device::write)); /* Commands sent to HD647180 */ map(0x180001, 0x180001).w(FUNC(toaplan1_samesame_state::bcu_flipscreen_w)); map(0x180002, 0x180003).rw(FUNC(toaplan1_samesame_state::tileram_offs_r), FUNC(toaplan1_samesame_state::tileram_offs_w)); map(0x180004, 0x180007).rw(FUNC(toaplan1_samesame_state::tileram_r), FUNC(toaplan1_samesame_state::tileram_w)); @@ -935,9 +936,9 @@ void toaplan1_demonwld_state::dsp_io_map(address_map &map) { - map(0, 0).w(FUNC(toaplan1_demonwld_state::dsp_addrsel_w)); - map(1, 1).rw(FUNC(toaplan1_demonwld_state::dsp_r), FUNC(toaplan1_demonwld_state::dsp_w)); - map(3, 3).w(FUNC(toaplan1_demonwld_state::dsp_bio_w)); + map(0x0, 0x0).w(FUNC(toaplan1_demonwld_state::dsp_addrsel_w)); + map(0x1, 0x1).rw(FUNC(toaplan1_demonwld_state::dsp_r), FUNC(toaplan1_demonwld_state::dsp_w)); + map(0x3, 0x3).w(FUNC(toaplan1_demonwld_state::dsp_bio_w)); } @@ -979,44 +980,27 @@ u8 toaplan1_state::vimana_dswb_invert_r() { - return m_dswb_io->read() ^ 0xFF; + return m_dswb_io->read() ^ 0xff; } u8 toaplan1_state::vimana_tjump_invert_r() { - return (m_tjump_io->read() ^ 0xFF)|0xC0; // high 2 bits of port G always read as 1 -} - -void toaplan1_samesame_state::mcu_w(u8 data) -{ - m_to_mcu = data; - m_cmdavailable = 1; -}; - -u8 toaplan1_samesame_state::soundlatch_r() -{ - return m_to_mcu; -}; - -void toaplan1_samesame_state::sound_done_w(u8 data) -{ - m_to_mcu = data; - m_cmdavailable = 0; + return (m_tjump_io->read() ^ 0xff) | 0xc0; // high 2 bits of port G always read as 1 } u8 toaplan1_samesame_state::cmdavailable_r() { - if (m_cmdavailable) return 0xff; - else return 0x00; -}; + return m_soundlatch->pending_r() ? 1 : 0; +} void toaplan1_samesame_state::hd647180_io_map(address_map &map) { + map.unmap_value_high(); map.global_mask(0xff); - map(0x63, 0x63).nopr(); - map(0xa0, 0xa0).r(FUNC(toaplan1_samesame_state::soundlatch_r)); - map(0xb0, 0xb0).w(FUNC(toaplan1_samesame_state::sound_done_w)); + map(0x63, 0x63).nopr(); // read port D + map(0xa0, 0xa0).r(m_soundlatch, FUNC(generic_latch_8_device::read)); + map(0xb0, 0xb0).w(m_soundlatch, FUNC(generic_latch_8_device::acknowledge_w)); map(0x80, 0x81).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write)); } @@ -2118,12 +2102,14 @@ m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_samesame_state::main_map); m_maincpu->reset_cb().set(FUNC(toaplan1_samesame_state::reset_callback)); - hd647180x_device &audiocpu(HD647180X(config, m_audiocpu, XTAL(28'000'000) / 4)); /* HD647180XOFS6 CPU */ + hd647180x_device &audiocpu(HD647180X(config, m_audiocpu, XTAL(10'000'000))); // HD647180XOFS6 CPU // 16k byte ROM and 512 byte RAM are internal audiocpu.set_addrmap(AS_IO, &toaplan1_samesame_state::hd647180_io_map); audiocpu.in_pd_callback().set(FUNC(toaplan1_samesame_state::cmdavailable_r)); - config.set_perfect_quantum(m_maincpu); + GENERIC_LATCH_8(config, m_soundlatch).set_separate_acknowledge(true); + + config.set_maximum_quantum(attotime::from_hz(600)); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); @@ -2212,7 +2198,7 @@ m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::vimana_main_map); m_maincpu->reset_cb().set(FUNC(toaplan1_state::reset_callback)); - hd647180x_device &audiocpu(HD647180X(config, m_audiocpu, XTAL(28'000'000) / 4)); /* HD647180XOFS6 CPU */ + hd647180x_device &audiocpu(HD647180X(config, m_audiocpu, XTAL(10'000'000))); // HD647180XOFS6 CPU audiocpu.set_addrmap(AS_PROGRAM, &toaplan1_state::vimana_hd647180_mem_map); audiocpu.set_addrmap(AS_IO, &toaplan1_state::vimana_hd647180_io_map); audiocpu.in_pa_callback().set(FUNC(toaplan1_state::vimana_dswb_invert_r)); // note these inputs seem to be inverted, unlike the DSWA ones. @@ -3185,6 +3171,7 @@ ROM_END +// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS GAME( 1988, rallybik, 0, rallybik, rallybik, toaplan1_rallybik_state, empty_init, ROT270, "Toaplan / Taito Corporation", "Rally Bike / Dash Yarou", 0 ) GAME( 1988, truxton, 0, truxton, truxton, toaplan1_state, empty_init, ROT270, "Toaplan / Taito Corporation", "Truxton / Tatsujin", 0 ) diff -Nru mame-0.250+dfsg.1/src/mame/toaplan/toaplan1.h mame-0.251+dfsg.1/src/mame/toaplan/toaplan1.h --- mame-0.250+dfsg.1/src/mame/toaplan/toaplan1.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/toaplan/toaplan1.h 2022-12-29 14:20:09.000000000 +0000 @@ -11,6 +11,7 @@ #include "cpu/m68000/m68000.h" #include "cpu/tms32010/tms32010.h" +#include "machine/gen_latch.h" #include "sound/ymopl.h" #include "toaplan_scu.h" #include "emupal.h" @@ -134,7 +135,7 @@ void register_common(); void log_vram(); void draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - void reset_sound(); + virtual void reset_sound(); DECLARE_WRITE_LINE_MEMBER(reset_callback); required_device m_maincpu; required_device m_audiocpu; @@ -230,23 +231,20 @@ { public: toaplan1_samesame_state(const machine_config &mconfig, device_type type, const char *tag) : - toaplan1_state(mconfig, type, tag) + toaplan1_state(mconfig, type, tag), + m_soundlatch(*this, "soundlatch") { } void samesame(machine_config &config); protected: - virtual void machine_start() override; + virtual void reset_sound() override; private: // Fire Shark sound - u8 m_to_mcu = 0; - u8 m_cmdavailable = 0; + required_device m_soundlatch; - void mcu_w(u8 data); - u8 soundlatch_r(); - void sound_done_w(u8 data); u8 cmdavailable_r(); u8 port_6_word_r(); diff -Nru mame-0.250+dfsg.1/src/mame/toaplan/toaplan1_m.cpp mame-0.251+dfsg.1/src/mame/toaplan/toaplan1_m.cpp --- mame-0.250+dfsg.1/src/mame/toaplan/toaplan1_m.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/toaplan/toaplan1_m.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -79,7 +79,6 @@ /* data 0x0000 means set DSP BIO line active and disable */ /* communication to main processor*/ - logerror("DSP PC:%04x IO write %04x at port 3\n", m_dsp->pcbase(), data); if (data & 0x8000) m_dsp_bio = CLEAR_LINE; @@ -143,8 +142,7 @@ u8 toaplan1_samesame_state::port_6_word_r() { /* Bit 0x80 is secondary CPU (HD647180) ready signal */ - logerror("PC:%08x Warning !!! IO reading from $14000b\n",m_maincpu->pcbase()); - return (0x80 | m_tjump_io->read()) & 0xff; + return (m_soundlatch->pending_r() ? 0 : 0x80) | m_tjump_io->read(); } u8 toaplan1_state::shared_r(offs_t offset) @@ -167,6 +165,12 @@ m_audiocpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero); } +void toaplan1_samesame_state::reset_sound() +{ + toaplan1_state::reset_sound(); + m_soundlatch->acknowledge_w(); +} + void toaplan1_state::reset_sound_w(u8 data) { if (data == 0) reset_sound(); @@ -196,33 +200,11 @@ void toaplan1_state::coin_w(u8 data) { - logerror("Z80 writing %02x to coin control\n",data); - /* This still isnt too clear yet. */ - /* Coin C has no coin lock ? */ - /* Are some outputs for lights ? (no space on JAMMA for it though) */ - - switch (data) - { - case 0xee: machine().bookkeeping().coin_counter_w(1,1); machine().bookkeeping().coin_counter_w(1,0); break; /* Count slot B */ - case 0xed: machine().bookkeeping().coin_counter_w(0,1); machine().bookkeeping().coin_counter_w(0,0); break; /* Count slot A */ - /* The following are coin counts after coin-lock active (faulty coin-lock ?) */ - case 0xe2: machine().bookkeeping().coin_counter_w(1,1); machine().bookkeeping().coin_counter_w(1,0); machine().bookkeeping().coin_lockout_w(1,1); break; - case 0xe1: machine().bookkeeping().coin_counter_w(0,1); machine().bookkeeping().coin_counter_w(0,0); machine().bookkeeping().coin_lockout_w(0,1); break; - - case 0xec: machine().bookkeeping().coin_lockout_global_w(0); break; /* ??? count games played */ - case 0xe8: break; /* ??? Maximum credits reached with coin/credit ratio */ - case 0xe4: break; /* ??? Reset coin system */ - - case 0x0c: machine().bookkeeping().coin_lockout_global_w(0); break; /* Unlock all coin slots */ - case 0x08: machine().bookkeeping().coin_lockout_w(2,0); break; /* Unlock coin slot C */ - case 0x09: machine().bookkeeping().coin_lockout_w(0,0); break; /* Unlock coin slot A */ - case 0x0a: machine().bookkeeping().coin_lockout_w(1,0); break; /* Unlock coin slot B */ - - case 0x02: machine().bookkeeping().coin_lockout_w(1,1); break; /* Lock coin slot B */ - case 0x01: machine().bookkeeping().coin_lockout_w(0,1); break; /* Lock coin slot A */ - case 0x00: machine().bookkeeping().coin_lockout_global_w(1); break; /* Lock all coin slots */ - default: logerror("PC:%04x Writing unknown data (%04x) to coin count/lockout port\n",m_audiocpu->pcbase(),data); break; - } + // Upper 4 bits are junk (normally 1110 or 0000, which are artifacts of sound command processing) + machine().bookkeeping().coin_counter_w(0, BIT(data, 0)); + machine().bookkeeping().coin_counter_w(1, BIT(data, 1)); + machine().bookkeeping().coin_lockout_w(0, !BIT(data, 2)); + machine().bookkeeping().coin_lockout_w(1, !BIT(data, 3)); } WRITE_LINE_MEMBER(toaplan1_state::reset_callback) @@ -259,10 +241,3 @@ save_item(NAME(m_dsp_bio)); save_item(NAME(m_dsp_execute)); } - -void toaplan1_samesame_state::machine_start() -{ - toaplan1_state::machine_start(); - save_item(NAME(m_to_mcu)); - save_item(NAME(m_cmdavailable)); -} diff -Nru mame-0.250+dfsg.1/src/mame/trainer/mk14.cpp mame-0.251+dfsg.1/src/mame/trainer/mk14.cpp --- mame-0.250+dfsg.1/src/mame/trainer/mk14.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/trainer/mk14.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -25,22 +25,24 @@ -F20=C4^0D^35^C4^00^31^C4^08^C8^F6^C5^01^E4^FF^98^08^8F^00^06^E4^07^07^90^EB^B8^E6^9C^EE^90^E5^-F20X Pressing keys will produce different tones. - -TODO: -- VDU optional attachment (we are missing the chargen rom) - *********************************************************************************************************************************/ #include "emu.h" #include "cpu/scmp/scmp.h" #include "imagedev/cassette.h" +#include "imagedev/snapquik.h" #include "machine/ins8154.h" #include "sound/dac.h" -#include "speaker.h" #include "video/pwm.h" +#include "emupal.h" +#include "screen.h" +#include "softlist_dev.h" +#include "speaker.h" + #include "mk14.lh" +#include "mk14vdu.lh" namespace { @@ -54,17 +56,19 @@ , m_dac(*this, "dac") , m_display(*this, "display") , m_io_keyboard(*this, "X%u", 0U) - { } + { } void mk14(machine_config &config); -private: +protected: uint8_t keyboard_r(offs_t offset); void display_w(offs_t offset, uint8_t data); void port_a_w(uint8_t data); DECLARE_WRITE_LINE_MEMBER(cass_w); DECLARE_READ_LINE_MEMBER(cass_r); - void mem_map(address_map &map); + void mk14_map(address_map &map); + + DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb); required_device m_maincpu; required_device m_cass; @@ -73,6 +77,34 @@ required_ioport_array<8> m_io_keyboard; }; +class mk14vdu_state : public mk14_state +{ +public: + mk14vdu_state(const machine_config &mconfig, device_type type, const char *tag) + : mk14_state(mconfig, type, tag) + , m_screen(*this, "screen") + , m_palette(*this, "palette") + , m_chargen(*this, "chargen") + , m_cfg_ps(*this, "CFG_PS") + , m_cfg_vdu(*this, "CFG_VDU") + { } + + void mk14vdu(machine_config &config); + +private: + void mk14vdu_map(address_map &map); + + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + void draw_page_character(int page, uint16_t addr, int invert, bitmap_rgb32 &bitmap); + void draw_page_graphics(int page, uint16_t addr, int invert, bitmap_rgb32 &bitmap); + + required_device m_screen; + required_device m_palette; + required_region_ptr m_chargen; + required_ioport m_cfg_ps; + required_ioport m_cfg_vdu; +}; + /* 000-1FF 512 byte SCIOS ROM Decoded by 0xxx 200-3FF ROM Shadow / Expansion RAM @@ -87,7 +119,6 @@ D00-DFF Keyboard & Display Shadow E00-EFF I/O Port & RAM Shadow F00-FFF 256 bytes RAM (Standard) / VDU RAM Decoded by 1111 - */ @@ -102,14 +133,10 @@ void mk14_state::display_w(offs_t offset, uint8_t data) { if (offset < 8 ) - m_display->matrix(1<matrix(1 << offset, data); } -void mk14_state::mem_map(address_map &map) +void mk14_state::mk14_map(address_map &map) { map.unmap_value_high(); map.global_mask(0x0fff); @@ -121,98 +148,273 @@ map(0xf00, 0xfff).ram(); // Standard RAM } +void mk14vdu_state::mk14vdu_map(address_map &map) +{ + mk14_map(map); + map(0x200, 0x7ff).ram(); // Expansion RAM +} /* Input ports */ static INPUT_PORTS_START( mk14 ) PORT_START("X0") - PORT_BIT(0x0F, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A') + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8') - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_START("X1") - PORT_BIT(0x0F, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B') + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9') - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_START("X2") - PORT_BIT(0x0F, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('C') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("GO") PORT_CODE(KEYCODE_X) PORT_CHAR('X') + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('C') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("GO") PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_START("X3") - PORT_BIT(0x0F, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('D') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("MEM") PORT_CODE(KEYCODE_UP) PORT_CHAR('^') + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('D') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("MEM") PORT_CODE(KEYCODE_UP) PORT_CHAR('^') PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_START("X4") - PORT_BIT(0x0F, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("AB") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ABORT") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_START("X5") - PORT_BIT(0x0F, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_START("X6") - PORT_BIT(0x0F, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('E') + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_START("X7") - PORT_BIT(0x0F, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TERM") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TERM") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7') +INPUT_PORTS_END + +static INPUT_PORTS_START( mk14vdu ) + PORT_INCLUDE(mk14) + + PORT_START("CFG_PS") + PORT_CONFNAME(0x0f, 0x02, "Page Select") + PORT_CONFSETTING(0x00, "000") + PORT_CONFSETTING(0x01, "100") + PORT_CONFSETTING(0x02, "200") + PORT_CONFSETTING(0x03, "300") + PORT_CONFSETTING(0x04, "400") + PORT_CONFSETTING(0x05, "500") + PORT_CONFSETTING(0x06, "600") + PORT_CONFSETTING(0x07, "700") + PORT_CONFSETTING(0x08, "800") + PORT_CONFSETTING(0x09, "900") + PORT_CONFSETTING(0x0a, "A00") + PORT_CONFSETTING(0x0b, "B00") + PORT_CONFSETTING(0x0c, "C00") + PORT_CONFSETTING(0x0d, "D00") + PORT_CONFSETTING(0x0e, "E00") + PORT_CONFSETTING(0x0f, "F00") + PORT_CONFNAME(0xf0, 0x10, "Top Page > Page Select") + PORT_CONFSETTING(0x00, "None") + PORT_CONFSETTING(0x10, "PS1") + PORT_CONFSETTING(0x20, "PS2") + PORT_CONFSETTING(0x40, "PS3") + PORT_CONFSETTING(0x80, "PS4") + PORT_START("CFG_VDU") + PORT_CONFNAME(0x01, 0x01, "Reverse Pages") + PORT_CONFSETTING(0x00, DEF_STR( Yes )) + PORT_CONFSETTING(0x01, DEF_STR( No )) + PORT_CONFNAME(0x22, 0x00, "Video Mode") + PORT_CONFSETTING(0x00, "Character (Low)" ) + PORT_CONFSETTING(0x02, "Graphics (High)" ) + PORT_CONFSETTING(0x20, "Mixed (Top Page)" ) + PORT_CONFNAME(0x44, 0x04, "Invert Video") + PORT_CONFSETTING(0x00, "Inverted (Low)" ) + PORT_CONFSETTING(0x04, "Normal (High)") + PORT_CONFSETTING(0x40, "Mixed (Top Page)" ) INPUT_PORTS_END void mk14_state::port_a_w(uint8_t data) { } -WRITE_LINE_MEMBER( mk14_state::cass_w ) +WRITE_LINE_MEMBER(mk14_state::cass_w) { m_cass->output(state ? -1.0 : +1.0); m_dac->write(state); } -READ_LINE_MEMBER( mk14_state::cass_r ) +READ_LINE_MEMBER(mk14_state::cass_r) { return (m_cass->input() > 0.03) ? 1 : 0; } +//------------------------------------------------- +// gfx_layout acorn_vdu80_charlayout +//------------------------------------------------- + +static const gfx_layout mk14vdu_charlayout = +{ + 5, 7, /* 5 x 7 characters */ + 64, /* 64 characters */ + 1, /* 1 bits per pixel */ + { 0 }, /* no bitplanes */ + /* x offsets */ + { 3, 4, 5, 6, 7 }, + /* y offsets */ + { 0 * 8, 1 * 8, 2 * 8, 3 * 8, 4 * 8, 5 * 8, 6 * 8 }, + 8 * 8 /* every char takes 8 bytes */ +}; + +//------------------------------------------------- +// GFXDECODE( gfx_mk14vdu ) +//------------------------------------------------- + +static GFXDECODE_START(gfx_mk14vdu) + GFXDECODE_ENTRY("chargen", 0, mk14vdu_charlayout, 0, 1) +GFXDECODE_END + +uint32_t mk14vdu_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + for (int page = 0; page < 2; page++) + { + // top page adjusted with reverse pages + bool top_page = BIT(m_cfg_vdu->read(), 0) ? (page == 1) : (page == 0); + + // page select + uint16_t addr = BIT(m_cfg_ps->read(), 0, 4) << 8; + if (top_page) + addr |= (BIT(m_cfg_ps->read(), 4, 4) << 8); + + // invert video + int invert = BIT(m_cfg_vdu->read(), 6) ? !top_page : !BIT(m_cfg_vdu->read(), 2); + + // character/graphic mode + if (BIT(m_cfg_vdu->read(), 5) ? top_page : BIT(m_cfg_vdu->read(), 1)) + draw_page_graphics(page, addr, invert, bitmap); + else + draw_page_character(page, addr, invert, bitmap); + } + return 0; +} + +void mk14vdu_state::draw_page_character(int page, uint16_t addr, int invert, bitmap_rgb32 &bitmap) +{ + address_space &space = m_maincpu->space(AS_PROGRAM); + + const pen_t *pens = m_palette->pens(); + + for (int y = 0; y < 128; y++) + { + uint16_t videoram_addr = addr + ((y >> 3) * 16); + + int x = 0; + + for (int sx = 0; sx < 16; sx++) + { + uint8_t videoram_data = space.read_byte(videoram_addr++); + uint16_t const charrom_addr = ((videoram_data & 0x3f) << 3) | (y % 8); + uint8_t charrom_data = m_chargen[charrom_addr]; + + for (int bit = 0; bit < 8; bit++) + { + // invert single character (implemented in some replica boards) + int color = BIT(charrom_data, 6) ^ invert ^ BIT(videoram_data, 7); + bitmap.pix(y + (page * 128), x++) = pens[color]; + charrom_data <<= 1; + } + } + } +} + +void mk14vdu_state::draw_page_graphics(int page, uint16_t addr, int invert, bitmap_rgb32 &bitmap) +{ + address_space &space = m_maincpu->space(AS_PROGRAM); + + const pen_t *pens = m_palette->pens(); + + for (int y = 0; y < 128; y++) + { + uint16_t videoram_addr = addr + ((y >> 2) * 8); + + int x = 0; + + for (int sx = 0; sx < 8; sx++) + { + uint8_t videoram_data = space.read_byte(videoram_addr++); + + for (int bit = 0; bit < 8; bit++) + { + int color = BIT(videoram_data, 7) ^ invert; + bitmap.pix(y + (page * 128), x++) = pens[color]; + bitmap.pix(y + (page * 128), x++) = pens[color]; + videoram_data <<= 1; + } + } + } +} + +QUICKLOAD_LOAD_MEMBER(mk14_state::quickload_cb) +{ + if (image.software_entry() == nullptr) + { + image.seterror(image_error::INVALIDIMAGE, "Unsupported quickload format"); + return image_init_result::FAIL; + } + else + { + uint16_t size = image.length(); + int load_addr, exec_addr; + sscanf(image.get_feature("load"), "%x", &load_addr); + sscanf(image.get_feature("exec"), "%x", &exec_addr); + + for (uint16_t i = 0; i < size; i++) + { + uint8_t data; + + if (image.fread(&data, 1) != 1) + return image_init_result::FAIL; + m_maincpu->space(AS_PROGRAM).write_byte(load_addr + i, data); + } + + m_maincpu->set_pc(exec_addr); + } + return image_init_result::PASS; +} + void mk14_state::mk14(machine_config &config) { - /* basic machine hardware */ // IC1 1SP-8A/600 (8060) SC/MP Microprocessor - INS8060(config, m_maincpu, 4.433619_MHz_XTAL); + INS8060(config, m_maincpu, 4.433619_MHz_XTAL / 2); m_maincpu->flag_out().set(FUNC(mk14_state::cass_w)); m_maincpu->s_out().set_nop(); m_maincpu->s_in().set(FUNC(mk14_state::cass_r)); m_maincpu->sense_a().set_constant(0); m_maincpu->sense_b().set(FUNC(mk14_state::cass_r)); m_maincpu->halt().set_nop(); - m_maincpu->set_addrmap(AS_PROGRAM, &mk14_state::mem_map); + m_maincpu->set_addrmap(AS_PROGRAM, &mk14_state::mk14_map); - /* video hardware */ config.set_default_layout(layout_mk14); PWM_DISPLAY(config, m_display).set_size(8, 8); m_display->set_segmask(0xff, 0xff); - // sound SPEAKER(config, "speaker").front_center(); DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25); ZN425E(config, "dac8", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // Ferranti ZN425E - /* devices */ ins8154_device &ic8(INS8154(config, "ic8")); ic8.out_a().set(FUNC(mk14_state::port_a_w)); ic8.out_b().set("dac8", FUNC(dac_byte_interface::data_w)); @@ -220,6 +422,30 @@ CASSETTE(config, m_cass); m_cass->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED); m_cass->add_route(ALL_OUTPUTS, "speaker", 0.05); + + quickload_image_device &quickload(QUICKLOAD(config, "quickload", "bin")); + quickload.set_load_callback(FUNC(mk14_state::quickload_cb)); + quickload.set_interface("mk14_quik"); + + SOFTWARE_LIST(config, "quik_ls").set_original("mk14_quik"); +} + +void mk14vdu_state::mk14vdu(machine_config &config) +{ + mk14(config); + + m_maincpu->set_clock(4_MHz_XTAL / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &mk14vdu_state::mk14vdu_map); + + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(4_MHz_XTAL, 256, 0, 128, 312, 0, 256); + m_screen->set_screen_update(FUNC(mk14vdu_state::screen_update)); + config.set_default_layout(layout_mk14vdu); + + GFXDECODE(config, "gfxdecode", m_palette, gfx_mk14vdu); + PALETTE(config, m_palette, palette_device::MONOCHROME); + + subdevice("quik_ls")->set_filter("VDU"); } /* ROM definition */ @@ -233,7 +459,21 @@ ROMX_LOAD( "scios_v1.bin", 0x0000, 0x0200, CRC(3d2477e7) SHA1(795829a2025e24d87a413e245d72a284f872e0db), ROM_BIOS(1)) ROM_END +ROM_START( mk14vdu ) + ROM_REGION( 0x200, "maincpu", 0 ) + // IC2,3 74S571 512 x 4 bit ROM + ROM_DEFAULT_BIOS("v2") + ROM_SYSTEM_BIOS(0, "v2", "SCIOS V2") + ROMX_LOAD( "scios_v2.bin", 0x0000, 0x0200, CRC(8b667daa) SHA1(802dc637ce5391a2a6627f76f919b12a869b56ef), ROM_BIOS(0)) + ROM_SYSTEM_BIOS(1, "v1", "SCIOS V1") + ROMX_LOAD( "scios_v1.bin", 0x0000, 0x0200, CRC(3d2477e7) SHA1(795829a2025e24d87a413e245d72a284f872e0db), ROM_BIOS(1)) + + ROM_REGION( 0x200, "chargen", 0 ) + ROM_LOAD( "dm8678cab.bin", 0x0000, 0x0200, CRC(8da502e7) SHA1(30d2dd9658823cdc2b2f6ef37f5a05d6f3e0db76)) +ROM_END + } // Anonymous namespace -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1977, mk14, 0, 0, mk14, mk14, mk14_state, empty_init, "Science of Cambridge", "MK-14", MACHINE_SUPPORTS_SAVE ) +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 1977, mk14, 0, 0, mk14, mk14, mk14_state, empty_init, "Science of Cambridge", "MK-14", MACHINE_SUPPORTS_SAVE ) +COMP( 1978, mk14vdu, mk14, 0, mk14vdu, mk14vdu, mk14vdu_state, empty_init, "Science of Cambridge", "MK-14 VDU", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/trs/coco12.cpp mame-0.251+dfsg.1/src/mame/trs/coco12.cpp --- mame-0.250+dfsg.1/src/mame/trs/coco12.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/trs/coco12.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -21,6 +21,10 @@ coco3p 1.2 2.0 1.1 coco3h 1.2 2.0 1.1 + TRS-80 Deluxe Color Computer + + Prototype Color Computer with added MOS6551 and AY-3-8913 + ***************************************************************************/ #include "emu.h" @@ -47,7 +51,6 @@ map(0x0000, 0xffff).rw(m_sam, FUNC(sam6883_device::read), FUNC(sam6883_device::write)); } - void coco12_state::coco_ram(address_map &map) { // mapped by configure_sam @@ -102,6 +105,14 @@ map(0x3000, 0x3eff).rom().region(MAINCPU_TAG, 0x7000).nopw(); } +void deluxecoco_state::deluxecoco_io1(address_map &map) +{ + // $FF20-$FF3F + map(0x00, 0x03).mirror(0x1c).r(PIA1_TAG, FUNC(pia6821_device::read)).w(FUNC(coco12_state::ff20_write)); + map(0x18, 0x19).w(m_psg, FUNC(ay8913_device::data_address_w)); + map(0x1c, 0x1f).rw(m_acia, FUNC(mos6551_device::read), FUNC(mos6551_device::write)); +} + //************************************************************************** // INPUT PORTS @@ -177,17 +188,6 @@ PORT_CONFSETTING( 0x01, DEF_STR( On )) INPUT_PORTS_END -//------------------------------------------------- -// INPUT_PORTS( coco_rtc ) -//------------------------------------------------- - -INPUT_PORTS_START( coco_rtc ) - PORT_START("real_time_clock") - PORT_CONFNAME( 0x03, 0x00, "Real Time Clock" ) - PORT_CONFSETTING( 0x00, "Disto" ) - PORT_CONFSETTING( 0x01, "Cloud-9" ) -INPUT_PORTS_END - //------------------------------------------------- @@ -285,12 +285,26 @@ PORT_INCLUDE( coco_keyboard ) PORT_INCLUDE( coco_joystick ) PORT_INCLUDE( coco_analog_control ) - PORT_INCLUDE( coco_rtc ) PORT_INCLUDE( coco_beckerport ) INPUT_PORTS_END //------------------------------------------------- +// INPUT_PORTS( deluxecoco ) +//------------------------------------------------- + +static INPUT_PORTS_START( deluxecoco ) + PORT_INCLUDE( coco ) + PORT_MODIFY("row6") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, 0) PORT_NAME("ALT") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT)) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, 0) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL), UCHAR_SHIFT_2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, 0) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, 0) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) +INPUT_PORTS_END + + + +//------------------------------------------------- // INPUT_PORTS( cp400c2_keyboard ) //------------------------------------------------- // @@ -387,7 +401,6 @@ PORT_INCLUDE( cp400c2_keyboard ) PORT_INCLUDE( coco_joystick ) PORT_INCLUDE( coco_analog_control ) - PORT_INCLUDE( coco_rtc ) PORT_INCLUDE( coco_beckerport ) INPUT_PORTS_END @@ -461,6 +474,20 @@ DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_1 ) DEVICE_INPUT_DEFAULTS_END + +//------------------------------------------------- +// DEVICE_INPUT_DEFAULTS_START( acia ) +//------------------------------------------------- + +static DEVICE_INPUT_DEFAULTS_START(acia) + DEVICE_INPUT_DEFAULTS("RS232_TXBAUD", 0xff, RS232_BAUD_300) + DEVICE_INPUT_DEFAULTS("RS232_RXBAUD", 0xff, RS232_BAUD_300) + DEVICE_INPUT_DEFAULTS("RS232_DATABITS", 0xff, RS232_DATABITS_8) + DEVICE_INPUT_DEFAULTS("RS232_PARITY", 0xff, RS232_PARITY_NONE) + DEVICE_INPUT_DEFAULTS("RS232_STOPBITS", 0xff, RS232_STOPBITS_1) +DEVICE_INPUT_DEFAULTS_END + + //------------------------------------------------- // machine_config //------------------------------------------------- @@ -575,6 +602,38 @@ m_ram->set_default_size("64K"); } +void deluxecoco_state::deluxecoco(machine_config &config) +{ + coco12_state::coco2b(config); + + m_ram->set_default_size("64K"); + + // Asynchronous Communications Interface Adapter + MOS6551(config, m_acia, 0); + m_acia->set_xtal(1.8432_MHz_XTAL); + m_acia->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<2>)); + m_acia->txd_handler().set(ACIA_TAG, FUNC(rs232_port_device::write_txd)); + m_acia->rts_handler().set(ACIA_TAG, FUNC(rs232_port_device::write_rts)); + m_acia->dtr_handler().set(ACIA_TAG, FUNC(rs232_port_device::write_dtr)); + + rs232_port_device &rs232(RS232_PORT(config, ACIA_TAG, default_rs232_devices, nullptr)); + rs232.set_option_device_input_defaults("null_modem", DEVICE_INPUT_DEFAULTS_NAME(acia)); + rs232.set_option_device_input_defaults("pty", DEVICE_INPUT_DEFAULTS_NAME(acia)); + rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(acia)); + rs232.rxd_handler().set(m_acia, FUNC(mos6551_device::write_rxd)); + rs232.dcd_handler().set(m_acia, FUNC(mos6551_device::write_dcd)); + rs232.dsr_handler().set(m_acia, FUNC(mos6551_device::write_dsr)); + rs232.cts_handler().set(m_acia, FUNC(mos6551_device::write_cts)); + + // Programable Sound Generator + AY8913(config, m_psg, DERIVED_CLOCK(2, 1)); + m_psg->set_flags(AY8910_SINGLE_OUTPUT); + m_psg->add_route(ALL_OUTPUTS, "speaker", 1.0); + + // Adjust Memory Map + m_sam->set_addrmap(5, &deluxecoco_state::deluxecoco_io1); +} + void coco12_state::coco2(machine_config &config) { coco(config); @@ -657,30 +716,38 @@ ROM_START(cocoe) ROM_REGION(0x8000,MAINCPU_TAG,0) - ROM_LOAD("bas11.rom", 0x2000, 0x2000, CRC(6270955a) SHA1(cecb7c24ff1e0ab5836e4a7a8eb1b8e01f1fded3)) - ROM_LOAD("extbas10.rom", 0x0000, 0x2000, CRC(6111a086) SHA1(8aa58f2eb3e8bcfd5470e3e35e2b359e9a72848e)) + ROM_LOAD("bas11.rom", 0x2000, 0x2000, CRC(6270955a) SHA1(cecb7c24ff1e0ab5836e4a7a8eb1b8e01f1fded3)) + ROM_LOAD("extbas10.rom", 0x0000, 0x2000, CRC(6111a086) SHA1(8aa58f2eb3e8bcfd5470e3e35e2b359e9a72848e)) ROM_END ROM_START(coco2) ROM_REGION(0x8000,MAINCPU_TAG,0) - ROM_LOAD("bas12.rom", 0x2000, 0x2000, CRC(54368805) SHA1(0f14dc46c647510eb0b7bd3f53e33da07907d04f)) - ROM_LOAD("extbas11.rom", 0x0000, 0x2000, CRC(a82a6254) SHA1(ad927fb4f30746d820cb8b860ebb585e7f095dea)) + ROM_LOAD("bas12.rom", 0x2000, 0x2000, CRC(54368805) SHA1(0f14dc46c647510eb0b7bd3f53e33da07907d04f)) + ROM_LOAD("extbas11.rom", 0x0000, 0x2000, CRC(a82a6254) SHA1(ad927fb4f30746d820cb8b860ebb585e7f095dea)) +ROM_END + +ROM_START(deluxecoco) + ROM_REGION(0x8000,MAINCPU_TAG,0) + ROM_LOAD("bas20.rom", 0x2000, 0x2000, NO_DUMP) + ROM_LOAD("extbas20.rom", 0x0000, 0x2000, NO_DUMP) + ROM_LOAD("bas13.rom", 0x2000, 0x2000, CRC(d8f4d15e) SHA1(28b92bebe35fa4f026a084416d6ea3b1552b63d3)) + ROM_LOAD("extbas11.rom", 0x0000, 0x2000, CRC(a82a6254) SHA1(ad927fb4f30746d820cb8b860ebb585e7f095dea)) ROM_END ROM_START(coco2b) ROM_REGION(0x8000,MAINCPU_TAG,0) - ROM_LOAD("bas13.rom", 0x2000, 0x2000, CRC(d8f4d15e) SHA1(28b92bebe35fa4f026a084416d6ea3b1552b63d3)) - ROM_LOAD("extbas11.rom", 0x0000, 0x2000, CRC(a82a6254) SHA1(ad927fb4f30746d820cb8b860ebb585e7f095dea)) + ROM_LOAD("bas13.rom", 0x2000, 0x2000, CRC(d8f4d15e) SHA1(28b92bebe35fa4f026a084416d6ea3b1552b63d3)) + ROM_LOAD("extbas11.rom", 0x0000, 0x2000, CRC(a82a6254) SHA1(ad927fb4f30746d820cb8b860ebb585e7f095dea)) ROM_END ROM_START(cp400) ROM_REGION(0x8000,MAINCPU_TAG,0) - ROM_LOAD("cp400bas.rom", 0x0000, 0x4000, CRC(878396a5) SHA1(292c545da3c77978e043b00a3dbc317201d18c3b)) + ROM_LOAD("cp400bas.rom", 0x0000, 0x4000, CRC(878396a5) SHA1(292c545da3c77978e043b00a3dbc317201d18c3b)) ROM_END ROM_START(cp400c2) ROM_REGION(0x8000,MAINCPU_TAG,0) - ROM_LOAD("cp400bas.rom", 0x0000, 0x4000, CRC(878396a5) SHA1(292c545da3c77978e043b00a3dbc317201d18c3b)) + ROM_LOAD("cp400bas.rom", 0x0000, 0x4000, CRC(878396a5) SHA1(292c545da3c77978e043b00a3dbc317201d18c3b)) ROM_END ROM_START(mx1600) @@ -716,7 +783,7 @@ ROM_START(ms1600) ROM_REGION(0x8000,MAINCPU_TAG,0) - ROM_LOAD("ms1600.rom", 0x0000, 0x8000, CRC(66f0fafc) SHA1(6e709b8b44aa34a3235a889eb1c3615c0235c3d0)) + ROM_LOAD("ms1600.rom", 0x0000, 0x8000, CRC(66f0fafc) SHA1(6e709b8b44aa34a3235a889eb1c3615c0235c3d0)) ROM_END #define rom_cocoh rom_coco @@ -728,19 +795,20 @@ // SYSTEM DRIVERS //************************************************************************** -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1980, coco, 0, 0, coco, coco, coco12_state, empty_init, "Tandy Radio Shack", "Color Computer", MACHINE_SUPPORTS_SAVE ) -COMP( 1981, cocoe, coco, 0, cocoe, coco, coco12_state, empty_init, "Tandy Radio Shack", "Color Computer (Extended BASIC 1.0)", MACHINE_SUPPORTS_SAVE ) -COMP( 19??, cocoh, coco, 0, cocoh, coco, coco12_state, empty_init, "Tandy Radio Shack", "Color Computer (HD6309)", MACHINE_SUPPORTS_SAVE | MACHINE_UNOFFICIAL ) -COMP( 19??, cocoeh, coco, 0, cocoeh, coco, coco12_state, empty_init, "Tandy Radio Shack", "Color Computer (Extended BASIC 1.0; HD6309)", MACHINE_SUPPORTS_SAVE | MACHINE_UNOFFICIAL ) -COMP( 1983, coco2, coco, 0, coco2, coco, coco12_state, empty_init, "Tandy Radio Shack", "Color Computer 2", MACHINE_SUPPORTS_SAVE ) -COMP( 19??, coco2h, coco, 0, coco2h, coco, coco12_state, empty_init, "Tandy Radio Shack", "Color Computer 2 (HD6309)", MACHINE_SUPPORTS_SAVE | MACHINE_UNOFFICIAL ) -COMP( 1985?, coco2b, coco, 0, coco2b, coco, coco12_state, empty_init, "Tandy Radio Shack", "Color Computer 2B", MACHINE_SUPPORTS_SAVE ) -COMP( 19??, coco2bh, coco, 0, coco2bh, coco, coco12_state, empty_init, "Tandy Radio Shack", "Color Computer 2B (HD6309)", MACHINE_SUPPORTS_SAVE | MACHINE_UNOFFICIAL ) -COMP( 1983, cp400, coco, 0, cp400, coco, coco12_state, empty_init, "Prológica", "CP400", MACHINE_SUPPORTS_SAVE ) -COMP( 1985, cp400c2, coco, 0, cp400, cp400c2, coco12_state, empty_init, "Prológica", "CP400 Color II", MACHINE_SUPPORTS_SAVE ) -COMP( 1984, mx1600, coco, 0, coco, coco, coco12_state, empty_init, "Dynacom", "MX-1600", MACHINE_SUPPORTS_SAVE ) -COMP( 1986, t4426, coco, 0, t4426, coco, coco12_state, empty_init, "Terco AB", "Terco 4426 CNC Programming station", MACHINE_SUPPORTS_SAVE ) -COMP( 1983, lzcolor64, coco, 0, coco, coco, coco12_state, empty_init, "Novo Tempo / LZ Equipamentos", "Color64", MACHINE_SUPPORTS_SAVE ) -COMP( 1983, cd6809, coco, 0, cd6809, coco, coco12_state, empty_init, "Codimex", "CD-6809", MACHINE_SUPPORTS_SAVE ) -COMP( 1987, ms1600, coco, 0, ms1600, coco, coco12_state, empty_init, "ILCE / SEP", "Micro-SEP 1600", MACHINE_SUPPORTS_SAVE ) +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 1980, coco, 0, 0, coco, coco, coco12_state, empty_init, "Tandy Radio Shack", "Color Computer", MACHINE_SUPPORTS_SAVE ) +COMP( 1981, cocoe, coco, 0, cocoe, coco, coco12_state, empty_init, "Tandy Radio Shack", "Color Computer (Extended BASIC 1.0)", MACHINE_SUPPORTS_SAVE ) +COMP( 19??, cocoh, coco, 0, cocoh, coco, coco12_state, empty_init, "Tandy Radio Shack", "Color Computer (HD6309)", MACHINE_SUPPORTS_SAVE | MACHINE_UNOFFICIAL ) +COMP( 19??, cocoeh, coco, 0, cocoeh, coco, coco12_state, empty_init, "Tandy Radio Shack", "Color Computer (Extended BASIC 1.0; HD6309)", MACHINE_SUPPORTS_SAVE | MACHINE_UNOFFICIAL ) +COMP( 1983, deluxecoco, coco, 0, deluxecoco, deluxecoco, deluxecoco_state, empty_init, "Tandy Radio Shack", "Deluxe Color Computer", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +COMP( 1983, coco2, coco, 0, coco2, coco, coco12_state, empty_init, "Tandy Radio Shack", "Color Computer 2", MACHINE_SUPPORTS_SAVE ) +COMP( 19??, coco2h, coco, 0, coco2h, coco, coco12_state, empty_init, "Tandy Radio Shack", "Color Computer 2 (HD6309)", MACHINE_SUPPORTS_SAVE | MACHINE_UNOFFICIAL ) +COMP( 1985?, coco2b, coco, 0, coco2b, coco, coco12_state, empty_init, "Tandy Radio Shack", "Color Computer 2B", MACHINE_SUPPORTS_SAVE ) +COMP( 19??, coco2bh, coco, 0, coco2bh, coco, coco12_state, empty_init, "Tandy Radio Shack", "Color Computer 2B (HD6309)", MACHINE_SUPPORTS_SAVE | MACHINE_UNOFFICIAL ) +COMP( 1983, cp400, coco, 0, cp400, coco, coco12_state, empty_init, "Prológica", "CP400", MACHINE_SUPPORTS_SAVE ) +COMP( 1985, cp400c2, coco, 0, cp400, cp400c2, coco12_state, empty_init, "Prológica", "CP400 Color II", MACHINE_SUPPORTS_SAVE ) +COMP( 1984, mx1600, coco, 0, coco, coco, coco12_state, empty_init, "Dynacom", "MX-1600", MACHINE_SUPPORTS_SAVE ) +COMP( 1986, t4426, coco, 0, t4426, coco, coco12_state, empty_init, "Terco AB", "Terco 4426 CNC Programming station", MACHINE_SUPPORTS_SAVE ) +COMP( 1983, lzcolor64, coco, 0, coco, coco, coco12_state, empty_init, "Novo Tempo / LZ Equipamentos", "Color64", MACHINE_SUPPORTS_SAVE ) +COMP( 1983, cd6809, coco, 0, cd6809, coco, coco12_state, empty_init, "Codimex", "CD-6809", MACHINE_SUPPORTS_SAVE ) +COMP( 1987, ms1600, coco, 0, ms1600, coco, coco12_state, empty_init, "ILCE / SEP", "Micro-SEP 1600", MACHINE_SUPPORTS_SAVE ) diff -Nru mame-0.250+dfsg.1/src/mame/trs/coco12.h mame-0.251+dfsg.1/src/mame/trs/coco12.h --- mame-0.250+dfsg.1/src/mame/trs/coco12.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/trs/coco12.h 2022-12-29 14:20:09.000000000 +0000 @@ -15,6 +15,8 @@ #include "coco.h" #include "6883sam.h" +#include "machine/mos6551.h" +#include "sound/ay8910.h" #include "video/mc6847.h" @@ -25,7 +27,9 @@ #define SAM_TAG "sam" #define VDG_TAG "vdg" - +#define MOSACIA_TAG "mosacia" +#define ACIA_TAG "acia" +#define PSG_TAG "psg" //************************************************************************** @@ -86,4 +90,23 @@ required_device m_vdg; }; +class deluxecoco_state : public coco12_state +{ +public: + deluxecoco_state(const machine_config &mconfig, device_type type, const char *tag) + : coco12_state(mconfig, type, tag) + , m_acia(*this, MOSACIA_TAG) + , m_psg(*this, PSG_TAG) + { + } + + void deluxecoco(machine_config &config); + +protected: + void deluxecoco_io1(address_map &map); + + required_device m_acia; + required_device m_psg; +}; + #endif // MAME_INCLUDES_COCO12_H diff -Nru mame-0.250+dfsg.1/src/mame/trs/coco3.cpp mame-0.251+dfsg.1/src/mame/trs/coco3.cpp --- mame-0.250+dfsg.1/src/mame/trs/coco3.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/trs/coco3.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -231,7 +231,6 @@ PORT_INCLUDE( coco_analog_control ) PORT_INCLUDE( coco_rat_mouse ) PORT_INCLUDE( coco_lightgun ) - PORT_INCLUDE( coco_rtc ) PORT_INCLUDE( coco_beckerport ) PORT_INCLUDE( screen_config ) INPUT_PORTS_END @@ -242,7 +241,6 @@ PORT_INCLUDE( coco_analog_control ) PORT_INCLUDE( coco_rat_mouse ) PORT_INCLUDE( coco_lightgun ) - PORT_INCLUDE( coco_rtc ) PORT_INCLUDE( coco_beckerport_dw ) PORT_INCLUDE( screen_config ) INPUT_PORTS_END diff -Nru mame-0.250+dfsg.1/src/mame/trs/coco.h mame-0.251+dfsg.1/src/mame/trs/coco.h --- mame-0.250+dfsg.1/src/mame/trs/coco.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/trs/coco.h 2022-12-29 14:20:09.000000000 +0000 @@ -31,7 +31,6 @@ INPUT_PORTS_EXTERN( coco_analog_control ); INPUT_PORTS_EXTERN( coco_joystick ); -INPUT_PORTS_EXTERN( coco_rtc ); INPUT_PORTS_EXTERN( coco_beckerport ); INPUT_PORTS_EXTERN( coco_beckerport_dw ); diff -Nru mame-0.250+dfsg.1/src/mame/trs/dgnalpha.cpp mame-0.251+dfsg.1/src/mame/trs/dgnalpha.cpp --- mame-0.250+dfsg.1/src/mame/trs/dgnalpha.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/trs/dgnalpha.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -2,8 +2,6 @@ // copyright-holders:Nathan Woods /*************************************************************************** - dgnalpha.c - Dragon Alpha The Dragon Alpha was a prototype in development when Dragon Data went bust, @@ -67,27 +65,92 @@ ***************************************************************************/ #include "emu.h" -#include "dgnalpha.h" +#include "dragon.h" + +#include "imagedev/floppy.h" +#include "machine/wd_fdc.h" #include "sound/ay8910.h" -//------------------------------------------------- -// device_start -//------------------------------------------------- +#include "softlist_dev.h" + +#include "formats/dmk_dsk.h" +#include "formats/sdf_dsk.h" +#include "formats/vdk_dsk.h" + + +namespace { + +//************************************************************************** +// MACROS / CONSTANTS +//************************************************************************** + +/* devices */ +#define WD2797_TAG "wd2797" + + -void dragon_alpha_state::device_start(void) +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class dragon_alpha_state : public dragon64_state { - dragon64_state::device_start(); -} +public: + dragon_alpha_state(const machine_config &mconfig, device_type type, const char *tag) : + dragon64_state(mconfig, type, tag), + m_pia_2(*this, "pia2"), + m_ay8912(*this, "ay8912"), + m_fdc(*this, WD2797_TAG), + m_floppy(*this, WD2797_TAG ":%u", 0U), + m_nmis(*this, "nmis") + { + } + void dgnalpha(machine_config &config); +private: + static void dragon_formats(format_registration &fr); -//------------------------------------------------- -// device_reset -//------------------------------------------------- + /* pia2 */ + void pia2_pa_w(uint8_t data); + + /* psg */ + uint8_t psg_porta_read(); + void psg_porta_write(uint8_t data); + + /* fdc */ + DECLARE_WRITE_LINE_MEMBER( fdc_intrq_w ); + DECLARE_WRITE_LINE_MEMBER( fdc_drq_w ); + + void dgnalpha_io1(address_map &map); + + required_device m_pia_2; + required_device m_ay8912; + required_device m_fdc; + required_device_array m_floppy; + required_device m_nmis; -void dragon_alpha_state::device_reset(void) + /* modem */ + uint8_t modem_r(offs_t offset); + void modem_w(offs_t offset, uint8_t data); +}; + + + +//************************************************************************** +// ADDRESS MAPS +//************************************************************************** + +void dragon_alpha_state::dgnalpha_io1(address_map &map) { - dragon64_state::device_reset(); + // $FF20-$FF3F + map(0x00, 0x03).mirror(0x10).r(PIA1_TAG, FUNC(pia6821_device::read)).w(FUNC(coco12_state::ff20_write)); + map(0x04, 0x07).mirror(0x10).rw(m_pia_2, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x08, 0x0b).mirror(0x10).rw(FUNC(dragon_alpha_state::modem_r), FUNC(dragon_alpha_state::modem_w)); + map(0x0c, 0x0c).mirror(0x10).rw(m_fdc, FUNC(wd2797_device::data_r), FUNC(wd2797_device::data_w)); + map(0x0d, 0x0d).mirror(0x10).rw(m_fdc, FUNC(wd2797_device::sector_r), FUNC(wd2797_device::sector_w)); + map(0x0e, 0x0e).mirror(0x10).rw(m_fdc, FUNC(wd2797_device::track_r), FUNC(wd2797_device::track_w)); + map(0x0f, 0x0f).mirror(0x10).rw(m_fdc, FUNC(wd2797_device::status_r), FUNC(wd2797_device::cmd_w)); } @@ -240,3 +303,86 @@ { m_pia_2->cb1_w(state ? ASSERT_LINE : CLEAR_LINE); } + + +void dragon_alpha_state::dragon_formats(format_registration &fr) +{ + fr.add_mfm_containers(); + fr.add(FLOPPY_VDK_FORMAT); + fr.add(FLOPPY_DMK_FORMAT); + fr.add(FLOPPY_SDF_FORMAT); +} + +static void dragon_alpha_floppies(device_slot_interface &device) +{ + device.option_add("dd", FLOPPY_35_DD); +} + + +void dragon_alpha_state::dgnalpha(machine_config &config) +{ + dragon_base(config); + + // internal ram + RAM(config, RAM_TAG).set_default_size("64K"); + + sam().set_addrmap(1, &dragon_alpha_state::d64_rom0); + sam().set_addrmap(2, &dragon_alpha_state::d64_rom1); + sam().set_addrmap(4, &dragon_alpha_state::d64_io0); + sam().set_addrmap(5, &dragon_alpha_state::dgnalpha_io1); + + // input merger + INPUT_MERGER_ANY_HIGH(config, m_nmis).output_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); + + // cartridge + cococart_slot_device &cartslot(COCOCART_SLOT(config, CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), &dragon_alpha_state::dragon_cart, nullptr)); + cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded + cartslot.nmi_callback().set(m_nmis, FUNC(input_merger_device::in_w<0>)); + cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); + + // acia + mos6551_device &acia(MOS6551(config, "acia", 0)); + acia.set_xtal(1.8432_MHz_XTAL); + + // floppy + WD2797(config, m_fdc, 4_MHz_XTAL/4); + m_fdc->intrq_wr_callback().set(FUNC(dragon_alpha_state::fdc_intrq_w)); + m_fdc->drq_wr_callback().set(FUNC(dragon_alpha_state::fdc_drq_w)); + + FLOPPY_CONNECTOR(config, WD2797_TAG ":0", dragon_alpha_floppies, "dd", dragon_alpha_state::dragon_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, WD2797_TAG ":1", dragon_alpha_floppies, "dd", dragon_alpha_state::dragon_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, WD2797_TAG ":2", dragon_alpha_floppies, nullptr, dragon_alpha_state::dragon_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, WD2797_TAG ":3", dragon_alpha_floppies, nullptr, dragon_alpha_state::dragon_formats).enable_sound(true); + + // sound hardware + AY8912(config, m_ay8912, 4_MHz_XTAL/4); + m_ay8912->port_a_read_callback().set(FUNC(dragon_alpha_state::psg_porta_read)); + m_ay8912->port_a_write_callback().set(FUNC(dragon_alpha_state::psg_porta_write)); + m_ay8912->add_route(ALL_OUTPUTS, "speaker", 0.75); + + // pia 2 + PIA6821(config, m_pia_2, 0); + m_pia_2->writepa_handler().set(FUNC(dragon_alpha_state::pia2_pa_w)); + m_pia_2->irqa_handler().set(m_firqs, FUNC(input_merger_device::in_w<2>)); + m_pia_2->irqb_handler().set(m_firqs, FUNC(input_merger_device::in_w<3>)); + + // software lists + SOFTWARE_LIST(config, "dgnalpha_flop_list").set_original("dgnalpha_flop"); + SOFTWARE_LIST(config, "dragon_flex_list").set_original("dragon_flex"); + SOFTWARE_LIST(config, "dragon_os9_list").set_original("dragon_os9"); +} + +ROM_START(dgnalpha) + ROM_REGION(0x10000,"maincpu",0) + ROM_DEFAULT_BIOS("boot10") + ROM_SYSTEM_BIOS(0, "boot10", "Boot v1.0") + ROMX_LOAD("alpha_bt_10.rom", 0x2000, 0x2000, CRC(c3dab585) SHA1(4a5851aa66eb426e9bb0bba196f1e02d48156068), ROM_BIOS(0)) + ROM_SYSTEM_BIOS(1, "boot04", "Boot v0.4") + ROMX_LOAD("alpha_bt_04.rom", 0x2000, 0x2000, CRC(d6172b56) SHA1(69ea376dbc7418f69e9e809b448d22a4de012344), ROM_BIOS(1)) + ROM_LOAD("alpha_ba.rom", 0x8000, 0x4000, CRC(84f68bf9) SHA1(1983b4fb398e3dd9668d424c666c5a0b3f1e2b69)) +ROM_END + +} // anonymous namespace + + +COMP( 1984, dgnalpha, dragon32, 0, dgnalpha, dragon, dragon_alpha_state, empty_init, "Dragon Data Ltd", "Dragon Professional (Alpha)", 0 ) diff -Nru mame-0.250+dfsg.1/src/mame/trs/dgnalpha.h mame-0.251+dfsg.1/src/mame/trs/dgnalpha.h --- mame-0.250+dfsg.1/src/mame/trs/dgnalpha.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/trs/dgnalpha.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,85 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Nathan Woods -/*************************************************************************** - - dgnalpha.h - - Dragon Alpha - -***************************************************************************/ - -#ifndef MAME_INCLUDES_DGNALPHA_H -#define MAME_INCLUDES_DGNALPHA_H - -#pragma once - - -#include "dragon.h" -#include "imagedev/floppy.h" -#include "sound/ay8910.h" -#include "machine/wd_fdc.h" - - - -//************************************************************************** -// MACROS / CONSTANTS -//************************************************************************** - -/* devices */ -#define PIA2_TAG "pia2" -#define AY8912_TAG "ay8912" -#define WD2797_TAG "wd2797" - - - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class dragon_alpha_state : public dragon64_state -{ -public: - dragon_alpha_state(const machine_config &mconfig, device_type type, const char *tag) - : dragon64_state(mconfig, type, tag), - m_pia_2(*this, PIA2_TAG), - m_ay8912(*this, AY8912_TAG), - m_fdc(*this, WD2797_TAG), - m_floppy(*this, WD2797_TAG ":%u", 0U), - m_nmis(*this, "nmis") - { - } - - void dgnalpha(machine_config &config); - -private: - static void dragon_formats(format_registration &fr); - - /* pia2 */ - void pia2_pa_w(uint8_t data); - - /* psg */ - uint8_t psg_porta_read(); - void psg_porta_write(uint8_t data); - - /* fdc */ - DECLARE_WRITE_LINE_MEMBER( fdc_intrq_w ); - DECLARE_WRITE_LINE_MEMBER( fdc_drq_w ); - - /* driver overrides */ - virtual void device_start(void) override; - virtual void device_reset(void) override; - - void dgnalpha_io1(address_map &map); - - required_device m_pia_2; - required_device m_ay8912; - required_device m_fdc; - required_device_array m_floppy; - required_device m_nmis; - - /* modem */ - uint8_t modem_r(offs_t offset); - void modem_w(offs_t offset, uint8_t data); -}; - -#endif // MAME_INCLUDES_DGNALPHA_H diff -Nru mame-0.250+dfsg.1/src/mame/trs/dragon.cpp mame-0.251+dfsg.1/src/mame/trs/dragon.cpp --- mame-0.250+dfsg.1/src/mame/trs/dragon.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/trs/dragon.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -2,28 +2,285 @@ // copyright-holders:Nathan Woods /*************************************************************************** - dragon.cpp - - Dragon + Dragon Family Bug? dragon200e hangs when single-quote is typed. +Dragon Alpha code added 21-Oct-2004, + Phill Harvey-Smith (afra@aurigae.demon.co.uk) + + Added AY-8912 and FDC code 30-Oct-2004. + +Fixed Dragon Alpha NMI enable/disable, following circuit traces on a real machine. + P.Harvey-Smith, 11-Aug-2005. + +Re-implemented Alpha NMI enable/disable, using direct PIA reads, rather than +keeping track of it in a variable in the driver. + P.Harvey-Smith, 25-Sep-2006. + +Radically re-wrote memory emulation code for CoCo 1/2 & Dragon machines, the +new code emulates the memory mapping of the SAM, dependent on what size of +RAM chips it is programed to use, including proper mirroring of the RAM. + +Replaced the kludged emulation of the cart line, with a timer based trigger +this is set to toggle at 1Hz, this seems to be good enough to trigger the +cartline, but is so slow in real terms that it should have very little +impact on the emulation speed. + +Re-factored the code common to all machines, and separated the code different, +into callbacks/functions unique to the machines, in preparation for splitting +the code for individual machine types into separate files, I have preposed, that +the CoCo 1/2 should stay in coco.c, and that the coco3 and dragon specific code +should go into coco3.c and dragon.c which should (hopefully) make the code +easier to manage. + P.Harvey-Smith, Dec 2006-Feb 2007 + ***************************************************************************/ #include "emu.h" #include "dragon.h" -#include "dgnalpha.h" + +#include "bus/coco/cococart.h" +#include "bus/rs232/rs232.h" +#include "cpu/m6809/hd6309.h" +#include "cpu/m6809/m6809.h" #include "imagedev/cassette.h" +#include "imagedev/floppy.h" + +#include "softlist_dev.h" + #include "formats/coco_cas.h" -#include "cpu/m6809/m6809.h" -#include "cpu/m6809/hd6309.h" -#include "formats/vdk_dsk.h" #include "formats/dmk_dsk.h" #include "formats/sdf_dsk.h" -#include "imagedev/floppy.h" -#include "bus/coco/cococart.h" -#include "bus/rs232/rs232.h" -#include "softlist_dev.h" +#include "formats/vdk_dsk.h" + + + +/*************************************************************************** + DRAGON32 +***************************************************************************/ + +//------------------------------------------------- +// pia1_pa_changed - called when PIA1 PA changes +//------------------------------------------------- + +void dragon_state::pia1_pa_changed(uint8_t data) +{ + /* call inherited function */ + coco12_state::pia1_pa_changed(data); + + /* if strobe bit is high send data from pia0 port b to dragon parallel printer */ + if (data & 0x02) + { + uint8_t output = pia_0().b_output(); + m_printer->output(output); + } +} + + +/*************************************************************************** + DRAGON64 +***************************************************************************/ + +//------------------------------------------------- +// device_start +//------------------------------------------------- + +void dragon64_state::machine_start() +{ + dragon_state::machine_start(); + + uint8_t *rom = memregion("maincpu")->base(); + m_rombank[0]->configure_entries(0, 2, &rom[0x0000], 0x8000); + m_rombank[1]->configure_entries(0, 2, &rom[0x2000], 0x8000); +} + + +//------------------------------------------------- +// device_reset +//------------------------------------------------- + +void dragon64_state::machine_reset() +{ + dragon_state::machine_reset(); + + m_rombank[0]->set_entry(0); + m_rombank[1]->set_entry(0); +} + + +//------------------------------------------------- +// pia1_pb_changed +//------------------------------------------------- + +void dragon64_state::pia1_pb_changed(uint8_t data) +{ + dragon_state::pia1_pb_changed(data); + + uint8_t ddr = ~pia_1().port_b_z_mask(); + + /* If bit 2 of the pia1 ddrb is 1 then this pin is an output so use it */ + /* to control the paging of the 32k and 64k basic roms */ + /* Otherwise it set as an input, with an EXTERNAL pull-up so it should */ + /* always be high (enabling 32k basic rom) */ + if (ddr & 0x04) + { + page_rom(data & 0x04 ? true : false); + } +} + + +//------------------------------------------------- +// page_rom - Controls rom paging in Dragon 64, +// and Dragon Alpha. +// +// On 64, switches between the two versions of the +// basic rom mapped in at 0x8000 +// +// On the alpha switches between the +// Boot/Diagnostic rom and the basic rom +//------------------------------------------------- + +void dragon64_state::page_rom(bool romswitch) +{ + int bank = romswitch + ? 0 // This is the 32k mode basic(64)/boot rom(alpha) + : 1; // This is the 64k mode basic(64)/basic rom(alpha) + m_rombank[0]->set_entry(bank); // 0x8000-0x9FFF + m_rombank[1]->set_entry(bank); // 0xA000-0xBFFF +} + + +/*************************************************************************** + DRAGON200-E +***************************************************************************/ + +uint8_t dragon200e_state::sam_read(offs_t offset) +{ + uint8_t data = sam().display_read(offset); + m_vdg->as_w(data & 0x80 ? ASSERT_LINE : CLEAR_LINE); + m_vdg->intext_w(data & 0x80 ? CLEAR_LINE : ASSERT_LINE); + m_vdg->inv_w(m_lk1->read() ? ASSERT_LINE : CLEAR_LINE); + return data; +} + +MC6847_GET_CHARROM_MEMBER(dragon200e_state::char_rom_r) +{ + uint16_t addr = (line << 8) | (BIT(pia_1().b_output(), 4) << 7) | ch; + return m_char_rom->base()[addr & 0xfff]; +} + + +/*************************************************************************** + DRAGON64 PLUS +***************************************************************************/ + +//------------------------------------------------- +// d64plus_6845_disp_r +// +// The status of the 6845 display is determined by bit 0 of the $FFE2 +// register as follows:- +// 1 Video display busy, ie. not blanking +// 0 Video display available, ie. blanking +// The display is blanking during a horizontal or vertical retrace period. +//------------------------------------------------- + +uint8_t d64plus_state::d64plus_6845_disp_r() +{ + return m_crtc->de_r() ? 0xff : 0xfe; +} + + +//------------------------------------------------- +// d64plus_bank_w +//------------------------------------------------- + +void d64plus_state::d64plus_bank_w(uint8_t data) +{ + switch (data & 0x06) + { + case 0: // Standard Dragon 32 Dynamic bank + m_pram_bank->set_entry(0); + m_vram_bank->set_entry(0); + break; + case 2: // First extra 32K bank (A) + m_pram_bank->set_entry(1); + m_vram_bank->set_entry(1); + break; + case 6: // Second extra 32K bank (B) + m_pram_bank->set_entry(2); + m_vram_bank->set_entry(2); + break; + default: + logerror("unknown bank register $FFE2 = %02x\n", data); + break; + } + if (data & 0x01) + { + m_vram_bank->set_entry(3); // Video RAM bank (C) + } +} + + +MC6845_UPDATE_ROW(d64plus_state::crtc_update_row) +{ + for (int column = 0; column < x_count; column++) + { + uint8_t code = m_video_ram[((ma + column) & 0x7ff)]; + uint16_t addr = (code << 4) | (ra & 0x0f); + uint8_t data = m_char_rom->base()[addr & 0xfff]; + + if (column == cursor_x) + { + data = 0xff; + } + + for (int bit = 0; bit < 8; bit++) + { + int x = (column * 8) + bit; + bitmap.pix(y, x) = m_palette->pen(BIT(data, 7) && de); + data <<= 1; + } + } +} + + +//------------------------------------------------- +// device_start +//------------------------------------------------- + +void d64plus_state::machine_start() +{ + dragon64_state::machine_start(); + + m_sam->space(0).install_readwrite_bank(0x0000, 0x7fff, m_pram_bank); + m_sam->space(0).install_readwrite_bank(0x0000, 0x07ff, m_vram_bank); + + m_pram_bank->configure_entry(0, m_ram->pointer()); + m_pram_bank->configure_entries(1, 2, m_plus_ram, 0x8000); + + m_vram_bank->configure_entry(0, m_ram->pointer()); + m_vram_bank->configure_entries(1, 2, m_plus_ram, 0x8000); + m_vram_bank->configure_entry(3, m_video_ram); + + address_space &space = m_maincpu->space(AS_PROGRAM); + space.install_readwrite_handler(0xffe0, 0xffe0, read8smo_delegate(*m_crtc, FUNC(mc6845_device::status_r)), write8smo_delegate(*m_crtc, FUNC(mc6845_device::address_w))); + space.install_readwrite_handler(0xffe1, 0xffe1, read8smo_delegate(*m_crtc, FUNC(mc6845_device::register_r)), write8smo_delegate(*m_crtc, FUNC(mc6845_device::register_w))); + space.install_readwrite_handler(0xffe2, 0xffe2, read8smo_delegate(*this, FUNC(d64plus_state::d64plus_6845_disp_r)), write8smo_delegate(*this, FUNC(d64plus_state::d64plus_bank_w))); +} + + +//------------------------------------------------- +// device_reset +//------------------------------------------------- + +void d64plus_state::machine_reset() +{ + dragon64_state::machine_reset(); + + m_pram_bank->set_entry(0); + m_vram_bank->set_entry(0); +} @@ -57,19 +314,6 @@ } -void dragon_alpha_state::dgnalpha_io1(address_map &map) -{ - // $FF20-$FF3F - map(0x00, 0x03).mirror(0x10).r(PIA1_TAG, FUNC(pia6821_device::read)).w(FUNC(coco12_state::ff20_write)); - map(0x04, 0x07).mirror(0x10).rw(m_pia_2, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0x08, 0x0b).mirror(0x10).rw(FUNC(dragon_alpha_state::modem_r), FUNC(dragon_alpha_state::modem_w)); - map(0x0c, 0x0c).mirror(0x10).rw(m_fdc, FUNC(wd2797_device::data_r), FUNC(wd2797_device::data_w)); - map(0x0d, 0x0d).mirror(0x10).rw(m_fdc, FUNC(wd2797_device::sector_r), FUNC(wd2797_device::sector_w)); - map(0x0e, 0x0e).mirror(0x10).rw(m_fdc, FUNC(wd2797_device::track_r), FUNC(wd2797_device::track_w)); - map(0x0f, 0x0f).mirror(0x10).rw(m_fdc, FUNC(wd2797_device::status_r), FUNC(wd2797_device::cmd_w)); -} - - //************************************************************************** // INPUT PORTS //************************************************************************** @@ -177,7 +421,7 @@ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME(u8"BREAK \u00fc") PORT_CODE(KEYCODE_END) PORT_CODE(KEYCODE_ESC) PORT_CHAR(27) PORT_CHAR(0xFC) INPUT_PORTS_END -static INPUT_PORTS_START( dragon ) +INPUT_PORTS_START( dragon ) PORT_INCLUDE(dragon_keyboard) PORT_INCLUDE(coco_joystick) PORT_INCLUDE(coco_analog_control) @@ -194,26 +438,13 @@ PORT_CONFSETTING(0x01, "Normal") INPUT_PORTS_END -void dragon_cart(device_slot_interface &device) +void dragon_state::dragon_cart(device_slot_interface &device) { dragon_cart_add_basic_devices(device); dragon_cart_add_fdcs(device); dragon_cart_add_multi_pak(device); } -void dragon_alpha_state::dragon_formats(format_registration &fr) -{ - fr.add_mfm_containers(); - fr.add(FLOPPY_VDK_FORMAT); - fr.add(FLOPPY_DMK_FORMAT); - fr.add(FLOPPY_SDF_FORMAT); -} - -static void dragon_alpha_floppies(device_slot_interface &device) -{ - device.option_add("dd", FLOPPY_35_DD); -} - // F4 Character Displayer static const gfx_layout d64plus_charlayout = @@ -311,7 +542,7 @@ RAM(config, m_ram).set_default_size("32K").set_extra_options("64K"); // cartridge - cococart_slot_device &cartslot(COCOCART_SLOT(config, CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), dragon_cart, "dragon_fdc")); + cococart_slot_device &cartslot(COCOCART_SLOT(config, CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), &dragon_state::dragon_cart, "dragon_fdc")); cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); @@ -328,22 +559,22 @@ sam().set_addrmap(4, &dragon64_state::d64_io0); // cartridge - cococart_slot_device &cartslot(COCOCART_SLOT(config, CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), dragon_cart, "dragon_fdc")); + cococart_slot_device &cartslot(COCOCART_SLOT(config, CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), &dragon64_state::dragon_cart, "dragon_fdc")); cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); // acia - mos6551_device &acia(MOS6551(config, "acia", 0)); - acia.set_xtal(1.8432_MHz_XTAL); - acia.irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<2>)); - acia.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); + MOS6551(config, m_acia, 0); + m_acia->set_xtal(1.8432_MHz_XTAL); + m_acia->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<2>)); + m_acia->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr)); - rs232.rxd_handler().set(acia, FUNC(mos6551_device::write_rxd)); - rs232.dcd_handler().set(acia, FUNC(mos6551_device::write_dcd)); - rs232.dsr_handler().set(acia, FUNC(mos6551_device::write_dsr)); - rs232.cts_handler().set(acia, FUNC(mos6551_device::write_cts)); + rs232.rxd_handler().set(m_acia, FUNC(mos6551_device::write_rxd)); + rs232.dcd_handler().set(m_acia, FUNC(mos6551_device::write_dcd)); + rs232.dsr_handler().set(m_acia, FUNC(mos6551_device::write_dsr)); + rs232.cts_handler().set(m_acia, FUNC(mos6551_device::write_cts)); // software lists SOFTWARE_LIST(config, "dragon_flex_list").set_original("dragon_flex"); @@ -387,58 +618,6 @@ m_crtc->set_update_row_callback(FUNC(d64plus_state::crtc_update_row)); } -void dragon_alpha_state::dgnalpha(machine_config &config) -{ - dragon_base(config); - // internal ram - RAM(config, RAM_TAG).set_default_size("64K"); - - sam().set_addrmap(1, &dragon_alpha_state::d64_rom0); - sam().set_addrmap(2, &dragon_alpha_state::d64_rom1); - sam().set_addrmap(4, &dragon_alpha_state::d64_io0); - sam().set_addrmap(5, &dragon_alpha_state::dgnalpha_io1); - - // input merger - INPUT_MERGER_ANY_HIGH(config, m_nmis).output_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); - - // cartridge - cococart_slot_device &cartslot(COCOCART_SLOT(config, CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), dragon_cart, nullptr)); - cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded - cartslot.nmi_callback().set(m_nmis, FUNC(input_merger_device::in_w<0>)); - cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); - - // acia - mos6551_device &acia(MOS6551(config, "acia", 0)); - acia.set_xtal(1.8432_MHz_XTAL); - - // floppy - WD2797(config, m_fdc, 4_MHz_XTAL/4); - m_fdc->intrq_wr_callback().set(FUNC(dragon_alpha_state::fdc_intrq_w)); - m_fdc->drq_wr_callback().set(FUNC(dragon_alpha_state::fdc_drq_w)); - - FLOPPY_CONNECTOR(config, WD2797_TAG ":0", dragon_alpha_floppies, "dd", dragon_alpha_state::dragon_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, WD2797_TAG ":1", dragon_alpha_floppies, "dd", dragon_alpha_state::dragon_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, WD2797_TAG ":2", dragon_alpha_floppies, nullptr, dragon_alpha_state::dragon_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, WD2797_TAG ":3", dragon_alpha_floppies, nullptr, dragon_alpha_state::dragon_formats).enable_sound(true); - - // sound hardware - ay8912_device &ay8912(AY8912(config, AY8912_TAG, 4_MHz_XTAL/4)); - ay8912.port_a_read_callback().set(FUNC(dragon_alpha_state::psg_porta_read)); - ay8912.port_a_write_callback().set(FUNC(dragon_alpha_state::psg_porta_write)); - ay8912.add_route(ALL_OUTPUTS, "speaker", 0.75); - - // pia 2 - pia6821_device &pia2(PIA6821(config, PIA2_TAG, 0)); - pia2.writepa_handler().set(FUNC(dragon_alpha_state::pia2_pa_w)); - pia2.irqa_handler().set(m_firqs, FUNC(input_merger_device::in_w<2>)); - pia2.irqb_handler().set(m_firqs, FUNC(input_merger_device::in_w<3>)); - - // software lists - SOFTWARE_LIST(config, "dgnalpha_flop_list").set_original("dgnalpha_flop"); - SOFTWARE_LIST(config, "dragon_flex_list").set_original("dragon_flex"); - SOFTWARE_LIST(config, "dragon_os9_list").set_original("dragon_os9"); -} - void dragon64_state::tanodr64(machine_config &config) { dragon64(config); @@ -513,16 +692,6 @@ ROM_LOAD("d64_2.rom", 0x8000, 0x4000, CRC(17893a42) SHA1(e3c8986bb1d44269c4587b04f1ca27a70b0aaa2e)) ROM_END -ROM_START(dgnalpha) - ROM_REGION(0x10000,"maincpu",0) - ROM_DEFAULT_BIOS("boot10") - ROM_SYSTEM_BIOS(0, "boot10", "Boot v1.0") - ROMX_LOAD("alpha_bt_10.rom", 0x2000, 0x2000, CRC(c3dab585) SHA1(4a5851aa66eb426e9bb0bba196f1e02d48156068), ROM_BIOS(0)) - ROM_SYSTEM_BIOS(1, "boot04", "Boot v0.4") - ROMX_LOAD("alpha_bt_04.rom", 0x2000, 0x2000, CRC(d6172b56) SHA1(69ea376dbc7418f69e9e809b448d22a4de012344), ROM_BIOS(1)) - ROM_LOAD("alpha_ba.rom", 0x8000, 0x4000, CRC(84f68bf9) SHA1(1983b4fb398e3dd9668d424c666c5a0b3f1e2b69)) -ROM_END - #define rom_dragon64h rom_dragon64 #define rom_tanodr64h rom_tanodr64 @@ -535,4 +704,3 @@ COMP( 1985, d64plus, dragon32, 0, d64plus, dragon, d64plus_state, empty_init, "Dragon Data Ltd / Compusense", "Dragon 64 Plus", 0 ) COMP( 1983, tanodr64, dragon32, 0, tanodr64, dragon, dragon64_state, empty_init, "Dragon Data Ltd / Tano Ltd", "Tano Dragon 64 (NTSC)", 0 ) COMP( 19??, tanodr64h, dragon32, 0, tanodr64h, dragon, dragon64_state, empty_init, "Dragon Data Ltd / Tano Ltd", "Tano Dragon 64 (NTSC; HD6309E)", MACHINE_UNOFFICIAL ) -COMP( 1984, dgnalpha, dragon32, 0, dgnalpha, dragon, dragon_alpha_state, empty_init, "Dragon Data Ltd", "Dragon Professional (Alpha)", 0 ) diff -Nru mame-0.250+dfsg.1/src/mame/trs/dragon.h mame-0.251+dfsg.1/src/mame/trs/dragon.h --- mame-0.250+dfsg.1/src/mame/trs/dragon.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/trs/dragon.h 2022-12-29 14:20:09.000000000 +0000 @@ -13,11 +13,11 @@ #pragma once - #include "coco12.h" + #include "imagedev/printer.h" -#include "machine/mos6551.h" #include "video/mc6845.h" + #include "emupal.h" @@ -26,7 +26,9 @@ //************************************************************************** #define PRINTER_TAG "printer" -#define ACIA_TAG "acia" + + +INPUT_PORTS_EXTERN( dragon ); @@ -46,9 +48,12 @@ void dragon_base(machine_config &config); void dragon32(machine_config &config); void dragon_mem(address_map &map); + protected: virtual void pia1_pa_changed(uint8_t data) override; + static void dragon_cart(device_slot_interface &device); + private: required_device m_printer; }; @@ -60,7 +65,7 @@ public: dragon64_state(const machine_config &mconfig, device_type type, const char *tag) : dragon_state(mconfig, type, tag) - , m_acia(*this, ACIA_TAG) + , m_acia(*this, "acia") , m_rombank(*this, "rombank%u", 0U) { } @@ -75,8 +80,9 @@ void d64_rom1(address_map &map); void d64_io0(address_map &map); - virtual void device_start() override; - virtual void device_reset() override; + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void pia1_pb_changed(uint8_t data) override; void page_rom(bool romswitch); @@ -129,8 +135,8 @@ void d64plus(machine_config &config); protected: - virtual void device_start() override; - virtual void device_reset() override; + virtual void machine_start() override; + virtual void machine_reset() override; private: required_device m_crtc; diff -Nru mame-0.250+dfsg.1/src/mame/trs/dragon_m.cpp mame-0.251+dfsg.1/src/mame/trs/dragon_m.cpp --- mame-0.250+dfsg.1/src/mame/trs/dragon_m.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/trs/dragon_m.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,268 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Nathan Woods -/*************************************************************************** - - dragon.cpp - - Dragon Family - -Dragon Alpha code added 21-Oct-2004, - Phill Harvey-Smith (afra@aurigae.demon.co.uk) - - Added AY-8912 and FDC code 30-Oct-2004. - -Fixed Dragon Alpha NMI enable/disable, following circuit traces on a real machine. - P.Harvey-Smith, 11-Aug-2005. - -Re-implemented Alpha NMI enable/disable, using direct PIA reads, rather than -keeping track of it in a variable in the driver. - P.Harvey-Smith, 25-Sep-2006. - -Radically re-wrote memory emulation code for CoCo 1/2 & Dragon machines, the -new code emulates the memory mapping of the SAM, dependent on what size of -RAM chips it is programed to use, including proper mirroring of the RAM. - -Replaced the kludged emulation of the cart line, with a timer based trigger -this is set to toggle at 1Hz, this seems to be good enough to trigger the -cartline, but is so slow in real terms that it should have very little -impact on the emulation speed. - -Re-factored the code common to all machines, and separated the code different, -into callbacks/functions unique to the machines, in preparation for splitting -the code for individual machine types into separate files, I have preposed, that -the CoCo 1/2 should stay in coco.c, and that the coco3 and dragon specific code -should go into coco3.c and dragon.c which should (hopefully) make the code -easier to manage. - P.Harvey-Smith, Dec 2006-Feb 2007 - -***************************************************************************/ - -#include "emu.h" -#include "dragon.h" - - -/*************************************************************************** - DRAGON32 -***************************************************************************/ - -//------------------------------------------------- -// pia1_pa_changed - called when PIA1 PA changes -//------------------------------------------------- - -void dragon_state::pia1_pa_changed(uint8_t data) -{ - /* call inherited function */ - coco12_state::pia1_pa_changed(data); - - /* if strobe bit is high send data from pia0 port b to dragon parallel printer */ - if (data & 0x02) - { - uint8_t output = pia_0().b_output(); - m_printer->output(output); - } -} - - -/*************************************************************************** - DRAGON64 -***************************************************************************/ - -//------------------------------------------------- -// device_start -//------------------------------------------------- - -void dragon64_state::device_start() -{ - dragon_state::device_start(); - - uint8_t *rom = memregion("maincpu")->base(); - m_rombank[0]->configure_entries(0, 2, &rom[0x0000], 0x8000); - m_rombank[1]->configure_entries(0, 2, &rom[0x2000], 0x8000); -} - - -//------------------------------------------------- -// device_reset -//------------------------------------------------- - -void dragon64_state::device_reset() -{ - dragon_state::device_reset(); - - m_rombank[0]->set_entry(0); - m_rombank[1]->set_entry(0); -} - - -//------------------------------------------------- -// pia1_pb_changed -//------------------------------------------------- - -void dragon64_state::pia1_pb_changed(uint8_t data) -{ - dragon_state::pia1_pb_changed(data); - - uint8_t ddr = ~pia_1().port_b_z_mask(); - - /* If bit 2 of the pia1 ddrb is 1 then this pin is an output so use it */ - /* to control the paging of the 32k and 64k basic roms */ - /* Otherwise it set as an input, with an EXTERNAL pull-up so it should */ - /* always be high (enabling 32k basic rom) */ - if (ddr & 0x04) - { - page_rom(data & 0x04 ? true : false); - } -} - - -//------------------------------------------------- -// page_rom - Controls rom paging in Dragon 64, -// and Dragon Alpha. -// -// On 64, switches between the two versions of the -// basic rom mapped in at 0x8000 -// -// On the alpha switches between the -// Boot/Diagnostic rom and the basic rom -//------------------------------------------------- - -void dragon64_state::page_rom(bool romswitch) -{ - int bank = romswitch - ? 0 // This is the 32k mode basic(64)/boot rom(alpha) - : 1; // This is the 64k mode basic(64)/basic rom(alpha) - m_rombank[0]->set_entry(bank); // 0x8000-0x9FFF - m_rombank[1]->set_entry(bank); // 0xA000-0xBFFF -} - - -/*************************************************************************** - DRAGON200-E -***************************************************************************/ - -uint8_t dragon200e_state::sam_read(offs_t offset) -{ - uint8_t data = sam().display_read(offset); - m_vdg->as_w(data & 0x80 ? ASSERT_LINE : CLEAR_LINE); - m_vdg->intext_w(data & 0x80 ? CLEAR_LINE : ASSERT_LINE); - m_vdg->inv_w(m_lk1->read() ? ASSERT_LINE : CLEAR_LINE); - return data; -} - -MC6847_GET_CHARROM_MEMBER(dragon200e_state::char_rom_r) -{ - uint16_t addr = (line << 8) | (BIT(pia_1().b_output(), 4) << 7) | ch; - return m_char_rom->base()[addr & 0xfff]; -} - - -/*************************************************************************** - DRAGON64 PLUS -***************************************************************************/ - -//------------------------------------------------- -// d64plus_6845_disp_r -// -// The status of the 6845 display is determined by bit 0 of the $FFE2 -// register as follows:- -// 1 Video display busy, ie. not blanking -// 0 Video display available, ie. blanking -// The display is blanking during a horizontal or vertical retrace period. -//------------------------------------------------- - -uint8_t d64plus_state::d64plus_6845_disp_r() -{ - return m_crtc->de_r() ? 0xff : 0xfe; -} - - -//------------------------------------------------- -// d64plus_bank_w -//------------------------------------------------- - -void d64plus_state::d64plus_bank_w(uint8_t data) -{ - switch (data & 0x06) - { - case 0: // Standard Dragon 32 Dynamic bank - m_pram_bank->set_entry(0); - m_vram_bank->set_entry(0); - break; - case 2: // First extra 32K bank (A) - m_pram_bank->set_entry(1); - m_vram_bank->set_entry(1); - break; - case 6: // Second extra 32K bank (B) - m_pram_bank->set_entry(2); - m_vram_bank->set_entry(2); - break; - default: - logerror("unknown bank register $FFE2 = %02x\n", data); - break; - } - if (data & 0x01) - { - m_vram_bank->set_entry(3); // Video RAM bank (C) - } -} - - -MC6845_UPDATE_ROW(d64plus_state::crtc_update_row) -{ - for (int column = 0; column < x_count; column++) - { - uint8_t code = m_video_ram[((ma + column) & 0x7ff)]; - uint16_t addr = (code << 4) | (ra & 0x0f); - uint8_t data = m_char_rom->base()[addr & 0xfff]; - - if (column == cursor_x) - { - data = 0xff; - } - - for (int bit = 0; bit < 8; bit++) - { - int x = (column * 8) + bit; - bitmap.pix(y, x) = m_palette->pen(BIT(data, 7) && de); - data <<= 1; - } - } -} - - -//------------------------------------------------- -// device_start -//------------------------------------------------- - -void d64plus_state::device_start() -{ - dragon64_state::device_start(); - - m_sam->space(0).install_readwrite_bank(0x0000, 0x7fff, m_pram_bank); - m_sam->space(0).install_readwrite_bank(0x0000, 0x07ff, m_vram_bank); - - m_pram_bank->configure_entry(0, m_ram->pointer()); - m_pram_bank->configure_entries(1, 2, m_plus_ram, 0x8000); - - m_vram_bank->configure_entry(0, m_ram->pointer()); - m_vram_bank->configure_entries(1, 2, m_plus_ram, 0x8000); - m_vram_bank->configure_entry(3, m_video_ram); - - address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_readwrite_handler(0xffe0, 0xffe0, read8smo_delegate(*m_crtc, FUNC(mc6845_device::status_r)), write8smo_delegate(*m_crtc, FUNC(mc6845_device::address_w))); - space.install_readwrite_handler(0xffe1, 0xffe1, read8smo_delegate(*m_crtc, FUNC(mc6845_device::register_r)), write8smo_delegate(*m_crtc, FUNC(mc6845_device::register_w))); - space.install_readwrite_handler(0xffe2, 0xffe2, read8smo_delegate(*this, FUNC(d64plus_state::d64plus_6845_disp_r)), write8smo_delegate(*this, FUNC(d64plus_state::d64plus_bank_w))); -} - - -//------------------------------------------------- -// device_reset -//------------------------------------------------- - -void d64plus_state::device_reset() -{ - dragon64_state::device_reset(); - - m_pram_bank->set_entry(0); - m_vram_bank->set_entry(0); -} diff -Nru mame-0.250+dfsg.1/src/mame/tvgames/xavix.cpp mame-0.251+dfsg.1/src/mame/tvgames/xavix.cpp --- mame-0.250+dfsg.1/src/mame/tvgames/xavix.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/tvgames/xavix.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1807,7 +1807,19 @@ ROM_LOAD("imaplayrailconductor.bin", 0x000000, 0x400000, CRC(b775d0ed) SHA1(33142509b11bbe45b0b9222232033dd64ef01ff2) ) ROM_END - +ROM_START( gungunad ) + ROM_REGION(0x200000, "bios", ROMREGION_ERASE00) + // some lines were swapped going into the die, but it is unclear if they're swapped back inside it + ROM_LOAD("gga.bin", 0x000000, 0x40000, CRC(5252b6bb) SHA1(8a9f920e4bccabbd337f37a838af574e2b16746f) ) + ROM_CONTINUE(0x080000,0x040000) + ROM_CONTINUE(0x040000,0x040000) + ROM_CONTINUE(0x0c0000,0x040000) + + ROM_CONTINUE(0x100000,0x040000) + ROM_CONTINUE(0x180000,0x040000) + ROM_CONTINUE(0x140000,0x040000) + ROM_CONTINUE(0x1c0000,0x040000) +ROM_END /* The e-kara cartridges require the BIOS rom to map into 2nd external bus space as they fetch palette data from @@ -2006,10 +2018,11 @@ CONS( 2003, tcarnavi, 0, 0, xavix_nv, jarajal, xavix_state, init_xavix, "Tomy / SSD Company LTD", "Tomica Carnavi Drive (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) -CONS( 2003, tomcpin, 0, 0, xavix_i2c_24c08, tomcpin, xavix_i2c_state, init_xavix, "Tomy / SSD Company LTD", "Champiyon Pinball (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +CONS( 2003, tomcpin, 0, 0, xavix_i2c_24c08, tomcpin, xavix_i2c_state, init_xavix, "Tomy / SSD Company LTD", "Champiyon Pinball (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -CONS( 2004, tomplc, 0, 0, xavix_i2c_24c02, tomcpin, xavix_i2c_state, init_xavix, "Tomy / SSD Company LTD", "Nihon Isshuu - Boku wa Plarail Untenshi (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +CONS( 2004, tomplc, 0, 0, xavix_i2c_24c02, tomcpin, xavix_i2c_state, init_xavix, "Tomy / SSD Company LTD", "Nihon Isshuu - Boku wa Plarail Untenshi (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +CONS( 2001, gungunad, 0, 0, xavix_nv, xavix, xavix_state, init_xavix, "Takara / SSD Company LTD", "Gun Gun Adventure (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) /* Music titles: Emulation note: SEEPROM write appears to work (save NVRAM file looks valid) but game fails to read it back properly, fails backup data checksum, and blanks it again. @@ -2029,7 +2042,6 @@ // e-kara mix was another unit that allowed you to connect to a PC, unlike e-kara web it also functions as a regular device CONS( 200?, ekaramix, 0, 0, xavix_cart_ekara, ekara, xavix_ekara_state, init_xavix, "Takara / SSD Company LTD", "e-kara Mix (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*| MACHINE_IS_BIOS_ROOT*/ ) - CONS( 2001, ddrfammt, 0, 0, xavix_cart_ddrfammt,ddrfammt, xavix_cart_state, init_xavix, "Takara / Konami / SSD Company LTD", "Dance Dance Revolution Family Mat (Japan)", MACHINE_IMPERFECT_SOUND/*|MACHINE_IS_BIOS_ROOT*/ ) CONS( 2000, popira, 0, 0, xavix_cart_popira,popira, xavix_cart_state, init_xavix, "Takara / SSD Company LTD", "Popira (Japan)", MACHINE_IMPERFECT_SOUND/*|MACHINE_IS_BIOS_ROOT*/ ) // The original Popira is a single yellow unit diff -Nru mame-0.250+dfsg.1/src/mame/unico/silkroad.cpp mame-0.251+dfsg.1/src/mame/unico/silkroad.cpp --- mame-0.250+dfsg.1/src/mame/unico/silkroad.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/unico/silkroad.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,19 +1,10 @@ // license:BSD-3-Clause -// copyright-holders:David Haywood, R. Belmont -/* The Legend of Silk Road - Unico 1999 */ +// copyright-holders: David Haywood, R. Belmont +// The Legend of Silk Road - Unico 1999 -/* Preliminary Driver by David Haywood */ -/* Inputs, DIPs by Stephh & R. Belmont */ -/* and preliminary sound hookup by R. Belmont + fixes by Pierpaolo Prazzoli */ - -#include "emu.h" -#include "silkroad.h" - -#include "cpu/m68000/m68020.h" -#include "sound/okim6295.h" -#include "sound/ymopm.h" -#include "screen.h" -#include "speaker.h" +/* Preliminary Driver by David Haywood + Inputs, DIPs by Stephh & R. Belmont + and preliminary sound hookup by R. Belmont + fixes by Pierpaolo Prazzoli */ /* @@ -38,7 +29,7 @@ SND : YM2151, YM3012, OKI M6295 (x2) (Note: No sound CPU) OSC : 32.000MHz, 3.579545MHz RAM : 62256 (x8), 6116 (x2), KM681000BLG-7L (x4, SOP32, Surface-mounted) -Other : 2x Actel A40MX04 (84 pin PLCC, same video chips as Multi Champ...ESD16.c) +Other : 2x Actel A40MX04 (84 pin PLCC, same video chips as Multi Champ...misc/esd16.cpp) 15x PALs DIPs : 8 position (x2) @@ -132,10 +123,182 @@ */ +#include "emu.h" + +#include "cpu/m68000/m68020.h" +#include "sound/okim6295.h" +#include "sound/ymopm.h" + +#include "emupal.h" +#include "screen.h" +#include "speaker.h" +#include "tilemap.h" + + +namespace { + +class silkroad_state : public driver_device +{ +public: + silkroad_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), + m_vram(*this, "vram%u", 1U), + m_sprram(*this, "sprram"), + m_regs(*this, "regs"), + m_okibank(*this, "okibank") + { } + + void silkroad(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void video_start() override; + +private: + required_device m_maincpu; + required_device m_gfxdecode; + required_device m_palette; + + required_shared_ptr_array m_vram; + required_shared_ptr m_sprram; + required_shared_ptr m_regs; + + required_memory_bank m_okibank; + + tilemap_t *m_tilemap[3]{}; + + void coin_w(uint8_t data); + template void vram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); + void okibank_w(uint8_t data); + + template TILE_GET_INFO_MEMBER(get_tile_info); + + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void cpu_map(address_map &map); + void oki_map(address_map &map); +}; + + +// video + +/* Sprites probably need to be delayed + Some scroll layers may need to be offset slightly? + Check sprite colours + Clean up + Is there a bg colour register? */ + +void silkroad_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + gfx_element *gfx = m_gfxdecode->gfx(0); + uint32_t const *source = m_sprram; + uint32_t const *finish = source + 0x1000 / 4; + + while (source < finish) + { + int const xpos = (source[0] & 0x01ff0000) >> 16; + int const ypos = (source[0] & 0x0000ffff); + int tileno = (source[1] & 0xffff0000) >> 16; + int const attr = (source[1] & 0x0000ffff); + int const flipx = (attr & 0x0080); + int const width = ((attr & 0x0f00) >> 8) + 1; + int const color = (attr & 0x003f) ; + int const pri = ((attr & 0x1000) >> 12); // Priority (1 = Low) + int const pri_mask = ~((1 << (pri + 1)) - 1); // Above the first "pri" levels + + // attr & 0x2000 -> another priority bit? + + if ((source[1] & 0xff00) == 0xff00) break; + + if ((attr & 0x8000) == 0x8000) tileno += 0x10000; + + if (!flipx) + { + for (int wcount = 0; wcount < width; wcount++) + { + gfx->prio_transpen(bitmap, cliprect, tileno + wcount, color, 0, 0, xpos + wcount * 16 + 8, ypos, screen.priority(), pri_mask, 0); + } + } + else + { + for (int wcount = width; wcount > 0; wcount--) + { + gfx->prio_transpen(bitmap, cliprect, tileno + (width - wcount), color, 1, 0, xpos + wcount * 16 - 16 + 8, ypos, screen.priority(), pri_mask, 0); + } + } + + source += 2; + } +} + +template +TILE_GET_INFO_MEMBER(silkroad_state::get_tile_info) +{ + int code = ((m_vram[Layer][tile_index] & 0xffff0000) >> 16); + int const color = ((m_vram[Layer][tile_index] & 0x000001f)); + int const flipx = ((m_vram[Layer][tile_index] & 0x0000080) >> 7); + + code += 0x18000; + + tileinfo.set(0, + code, + color, + TILE_FLIPYX(flipx)); +} + +void silkroad_state::video_start() +{ + m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(silkroad_state::get_tile_info<0>)), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); + m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(silkroad_state::get_tile_info<1>)), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); + m_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(silkroad_state::get_tile_info<2>)), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); + + m_tilemap[0]->set_transparent_pen(0); + m_tilemap[1]->set_transparent_pen(0); + m_tilemap[2]->set_transparent_pen(0); +} + +uint32_t silkroad_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + screen.priority().fill(0, cliprect); + bitmap.fill(0x7c0, cliprect); + + m_tilemap[0]->set_scrollx(0, ((m_regs[0] & 0xffff0000) >> 16)); + m_tilemap[0]->set_scrolly(0, (m_regs[0] & 0x0000ffff) >> 0); + + m_tilemap[2]->set_scrolly(0, (m_regs[1] & 0xffff0000) >> 16); + m_tilemap[2]->set_scrollx(0, (m_regs[2] & 0xffff0000) >> 16); + + m_tilemap[1]->set_scrolly(0, ((m_regs[5] & 0xffff0000) >> 16)); + m_tilemap[1]->set_scrollx(0, (m_regs[2] & 0x0000ffff) >> 0); + + m_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0); + m_tilemap[1]->draw(screen, bitmap, cliprect, 0, 1); + m_tilemap[2]->draw(screen, bitmap, cliprect, 0, 2); + draw_sprites(screen, bitmap, cliprect); + + if (0) + { + popmessage("Regs %08x %08x %08x %08x %08x", + m_regs[0], + m_regs[1], + m_regs[2], + m_regs[4], + m_regs[5]); + } + + return 0; +} + + +// machine + void silkroad_state::okibank_w(uint8_t data) { - int bank = (data & 0x3); - if(bank < 3) + int const bank = (data & 0x3); + if (bank < 3) m_okibank->set_entry(bank); } @@ -155,11 +318,11 @@ void silkroad_state::cpu_map(address_map &map) { map(0x000000, 0x1fffff).rom(); - map(0x40c000, 0x40cfff).ram().share("sprram"); // sprites - map(0x600000, 0x603fff).rw(m_palette, FUNC(palette_device::read16), FUNC(palette_device::write16)).umask32(0xffff0000).share("palette"); // palette - map(0x800000, 0x803fff).ram().w(FUNC(silkroad_state::vram_w<0>)).share("vram1"); // lower Layer - map(0x804000, 0x807fff).ram().w(FUNC(silkroad_state::vram_w<1>)).share("vram2"); // mid layer - map(0x808000, 0x80bfff).ram().w(FUNC(silkroad_state::vram_w<2>)).share("vram3"); // higher layer + map(0x40c000, 0x40cfff).ram().share(m_sprram); + map(0x600000, 0x603fff).rw(m_palette, FUNC(palette_device::read16), FUNC(palette_device::write16)).umask32(0xffff0000).share("palette"); + map(0x800000, 0x803fff).ram().w(FUNC(silkroad_state::vram_w<0>)).share(m_vram[0]); // lower Layer + map(0x804000, 0x807fff).ram().w(FUNC(silkroad_state::vram_w<1>)).share(m_vram[1]); // mid layer + map(0x808000, 0x80bfff).ram().w(FUNC(silkroad_state::vram_w<2>)).share(m_vram[2]); // higher layer map(0xc00000, 0xc00003).portr("INPUTS"); map(0xc00004, 0xc00007).portr("DSW"); map(0xc00025, 0xc00025).rw("oki1", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); @@ -167,14 +330,14 @@ map(0xc00031, 0xc00031).rw("oki2", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); map(0xc00034, 0xc00034).w(FUNC(silkroad_state::okibank_w)); map(0xc00039, 0xc00039).w(FUNC(silkroad_state::coin_w)); - map(0xc0010c, 0xc00123).writeonly().share("regs"); + map(0xc0010c, 0xc00123).writeonly().share(m_regs); map(0xfe0000, 0xffffff).ram(); } void silkroad_state::oki_map(address_map &map) { map(0x00000, 0x1ffff).rom(); - map(0x20000, 0x3ffff).bankr("okibank"); + map(0x20000, 0x3ffff).bankr(m_okibank); } @@ -186,8 +349,8 @@ PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_SERVICE_NO_TOGGLE( 0x00000020, IP_ACTIVE_LOW ) - PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_SERVICE2 ) /* Not mentioned in the "test mode" */ - PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_CUSTOM ) /* See notes - Stephh*/ + PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_SERVICE2 ) // Not mentioned in the "test mode" + PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_CUSTOM ) // See notes - Stephh PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_UNKNOWN ) // this input makes the 020 lock up...- RB PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -253,13 +416,13 @@ PORT_DIPSETTING( 0xa0000000, DEF_STR(1C_3C)) PORT_DIPSETTING( 0x80000000, DEF_STR(1C_4C)) -// PORT_START("MISC") /* Misc inputs */ -// PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* VBLANK ? */ -// PORT_BIT( 0xff7f, IP_ACTIVE_LOW, IPT_UNUSED ) /* unknown / unused */ +// PORT_START("MISC") // Misc inputs +// PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_CUSTOM ) // VBLANK ? +// PORT_BIT( 0xff7f, IP_ACTIVE_LOW, IPT_UNUSED ) // unknown / unused INPUT_PORTS_END -/* BACKGROUNDS */ +// Backgrounds static const gfx_layout tiles16x16x6_layout = { 16,16, @@ -272,7 +435,7 @@ }; static GFXDECODE_START( gfx_silkroad ) - GFXDECODE_ENTRY( "gfx1", 0, tiles16x16x6_layout, 0x0000, 256 ) + GFXDECODE_ENTRY( "gfx", 0, tiles16x16x6_layout, 0x0000, 256 ) GFXDECODE_END void silkroad_state::machine_start() @@ -282,12 +445,12 @@ void silkroad_state::silkroad(machine_config &config) { - /* basic machine hardware */ - M68EC020(config, m_maincpu, XTAL(32'000'000)/2); /* 16MHz */ + // basic machine hardware + M68EC020(config, m_maincpu, XTAL(32'000'000) / 2); // 16MHz m_maincpu->set_addrmap(AS_PROGRAM, &silkroad_state::cpu_map); m_maincpu->set_vblank_int("screen", FUNC(silkroad_state::irq4_line_hold)); - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); @@ -299,18 +462,18 @@ GFXDECODE(config, m_gfxdecode, m_palette, gfx_silkroad); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x2000).set_membits(16); - /* sound hardware */ + // sound hardware SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); YM2151(config, "ymsnd", XTAL(3'579'545)).add_route(0, "lspeaker", 1.0).add_route(1, "rspeaker", 1.0); - okim6295_device &oki1(OKIM6295(config, "oki1", XTAL(32'000'000)/32, okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified (was 1056000) + okim6295_device &oki1(OKIM6295(config, "oki1", XTAL(32'000'000) / 32, okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified (was 1056000) oki1.set_addrmap(0, &silkroad_state::oki_map); oki1.add_route(ALL_OUTPUTS, "lspeaker", 0.45); oki1.add_route(ALL_OUTPUTS, "rspeaker", 0.45); - okim6295_device &oki2(OKIM6295(config, "oki2", XTAL(32'000'000)/16, okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified (was 2112000) + okim6295_device &oki2(OKIM6295(config, "oki2", XTAL(32'000'000) / 16, okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified (was 2112000) oki2.add_route(ALL_OUTPUTS, "lspeaker", 0.45); oki2.add_route(ALL_OUTPUTS, "rspeaker", 0.45); } @@ -327,8 +490,8 @@ ROM_LOAD32_WORD_SWAP( "rom02.bin", 0x000000, 0x100000, CRC(4e5200fc) SHA1(4d4cab03a6ec4ad825001e1e92193940646141e5) ) ROM_LOAD32_WORD_SWAP( "rom03.bin", 0x000002, 0x100000, CRC(73ccc78c) SHA1(2ac17aa8d7dac8636d29a4e4228a556334b51f1a) ) - ROM_REGION( 0x1800000, "gfx1", ROMREGION_INVERT ) - /* Sprites */ + ROM_REGION( 0x1800000, "gfx", ROMREGION_INVERT ) + // Sprites ROM_LOAD( "rom12.rom12", 0x0000000, 0x0200000, CRC(96393d04) SHA1(f512bb8603510d39e649f4ec1c5e2d0e4bf3a2cc) ) // 0 ROM_LOAD( "rom08.rom08", 0x0800000, 0x0200000, CRC(23f1d462) SHA1(6ca8052b16ccc1fe59716e03f66bd33af5145b37) ) // 0 ROM_LOAD( "rom04.rom04", 0x1000000, 0x0200000, CRC(d9f0bbd7) SHA1(32c055ad5497c0bec5db40b528e589d7724e354f) ) // 0 @@ -340,13 +503,12 @@ ROM_LOAD( "rom14.rom14", 0x0400000, 0x0200000, CRC(d00b19c4) SHA1(d5b955dca5d0d251166a7f35a0bbbda6a91ecbd0) ) // 2 ROM_LOAD( "rom10.rom10", 0x0c00000, 0x0200000, CRC(7d324280) SHA1(cdf6d9342292f693cc5ec1b72816f2788963fcec) ) // 2 ROM_LOAD( "rom06.rom06", 0x1400000, 0x0200000, CRC(3ac26060) SHA1(98ad8efbbf8020daf7469db3e0fda02af6c4c767) ) // 2 - /* Backgrounds */ + // Backgrounds ROM_LOAD( "rom07.rom07", 0x0600000, 0x0200000, CRC(9fc6ff9d) SHA1(51c3ca9709a01e0ad6bc76c0d674ed03f9822598) ) // 3 ROM_LOAD( "rom11.rom11", 0x0e00000, 0x0200000, CRC(11abaf1c) SHA1(19e86f3ebfec518a96c0520f36cfc1b525e7e55c) ) // 3 ROM_LOAD( "rom15.rom15", 0x1600000, 0x0200000, CRC(26a3b168) SHA1(a4b7955cc4d4fbec7c975a9456f2219ef33f1166) ) // 3 - /* $00000-$20000 stays the same in all sound banks, */ - /* the second half of the bank is what gets switched */ + // $00000-$20000 stays the same in all sound banks, the second half of the bank is what gets switched ROM_REGION( 0x080000, "oki1", 0 ) ROM_LOAD( "rom00.bin", 0x000000, 0x080000, CRC(b10ba7ab) SHA1(a6a3ae71b803af9c31d7e97dc86cfcc123ee9a40) ) @@ -359,8 +521,8 @@ ROM_LOAD32_WORD_SWAP( "rom02.bin", 0x000000, 0x100000, CRC(4e5200fc) SHA1(4d4cab03a6ec4ad825001e1e92193940646141e5) ) ROM_LOAD32_WORD_SWAP( "rom03.bin", 0x000002, 0x100000, CRC(73ccc78c) SHA1(2ac17aa8d7dac8636d29a4e4228a556334b51f1a) ) - ROM_REGION( 0x1800000, "gfx1", ROMREGION_INVERT ) - /* Sprites */ // this board has these 3 ROMs instead of the 6 on the set above + ROM_REGION( 0x1800000, "gfx", ROMREGION_INVERT ) + // Sprites, this board has these 3 ROMs instead of the 6 on the set above ROM_LOAD( "unico_sr13.rom13", 0x0000000, 0x0400000, CRC(d001c3df) SHA1(ef1b1510f33401b0983093e2d8db48d3886c4fe1) ) // 0 + 1 ROM_LOAD( "unico_sr09.rom09", 0x0800000, 0x0400000, CRC(696d908d) SHA1(abe3ec8a53875a136f78bbed723bb89d04196427) ) // 0 + 1 ROM_LOAD( "unico_sr05.rom05", 0x1000000, 0x0400000, CRC(00f638c1) SHA1(cc6da13f8e82b08f8098c7636fbd1d40ee5ab132) ) // 0 + 1 @@ -368,13 +530,12 @@ ROM_LOAD( "rom14.rom14", 0x0400000, 0x0200000, CRC(d00b19c4) SHA1(d5b955dca5d0d251166a7f35a0bbbda6a91ecbd0) ) // 2 ROM_LOAD( "rom10.rom10", 0x0c00000, 0x0200000, CRC(7d324280) SHA1(cdf6d9342292f693cc5ec1b72816f2788963fcec) ) // 2 ROM_LOAD( "rom06.rom06", 0x1400000, 0x0200000, CRC(3ac26060) SHA1(98ad8efbbf8020daf7469db3e0fda02af6c4c767) ) // 2 - /* Backgrounds */ + // Backgrounds ROM_LOAD( "rom07.rom07", 0x0600000, 0x0200000, CRC(9fc6ff9d) SHA1(51c3ca9709a01e0ad6bc76c0d674ed03f9822598) ) // 3 ROM_LOAD( "rom11.rom11", 0x0e00000, 0x0200000, CRC(11abaf1c) SHA1(19e86f3ebfec518a96c0520f36cfc1b525e7e55c) ) // 3 ROM_LOAD( "rom15.rom15", 0x1600000, 0x0200000, CRC(26a3b168) SHA1(a4b7955cc4d4fbec7c975a9456f2219ef33f1166) ) // 3 - /* $00000-$20000 stays the same in all sound banks, */ - /* the second half of the bank is what gets switched */ + // $00000-$20000 stays the same in all sound banks, the second half of the bank is what gets switched ROM_REGION( 0x080000, "oki1", 0 ) ROM_LOAD( "rom00.bin", 0x000000, 0x080000, CRC(b10ba7ab) SHA1(a6a3ae71b803af9c31d7e97dc86cfcc123ee9a40) ) @@ -382,6 +543,8 @@ ROM_LOAD( "rom01.bin", 0x000000, 0x040000, CRC(db8cb455) SHA1(6723b4018208d554bd1bf1e0640b72d2f4f47302) ) ROM_END +} // anonymous namespace + GAME( 1999, silkroad, 0, silkroad, silkroad, silkroad_state, empty_init, ROT0, "Unico", "The Legend of Silkroad", MACHINE_SUPPORTS_SAVE ) -GAME( 1999, silkroada, silkroad, silkroad, silkroad, silkroad_state, empty_init, ROT0, "Unico", "The Legend of Silkroad (larger ROMs)", MACHINE_SUPPORTS_SAVE ) // same content but fewer GFX roms of a larger size +GAME( 1999, silkroada, silkroad, silkroad, silkroad, silkroad_state, empty_init, ROT0, "Unico", "The Legend of Silkroad (larger ROMs)", MACHINE_SUPPORTS_SAVE ) // same content but fewer GFX ROMs of a larger size diff -Nru mame-0.250+dfsg.1/src/mame/unico/silkroad.h mame-0.251+dfsg.1/src/mame/unico/silkroad.h --- mame-0.250+dfsg.1/src/mame/unico/silkroad.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/unico/silkroad.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:David Haywood, R. Belmont -#ifndef MAME_INCLUDES_SILKROAD_H -#define MAME_INCLUDES_SILKROAD_H - -#pragma once - -#include "sound/okim6295.h" -#include "emupal.h" -#include "tilemap.h" - -class silkroad_state : public driver_device -{ -public: - silkroad_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_vram(*this, "vram%u", 1U), - m_sprram(*this, "sprram"), - m_regs(*this, "regs"), - m_okibank(*this, "okibank") - { } - - void silkroad(machine_config &config); - -protected: - virtual void machine_start() override; - virtual void video_start() override; - -private: - required_device m_maincpu; - required_device m_gfxdecode; - required_device m_palette; - - required_shared_ptr_array m_vram; - required_shared_ptr m_sprram; - required_shared_ptr m_regs; - - required_memory_bank m_okibank; - - tilemap_t *m_tilemap[3]{}; - - void coin_w(uint8_t data); - template void vram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); - void okibank_w(uint8_t data); - - template TILE_GET_INFO_MEMBER(get_tile_info); - - uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void cpu_map(address_map &map); - void oki_map(address_map &map); -}; - -#endif // MAME_INCLUDES_SILKROAD_H diff -Nru mame-0.250+dfsg.1/src/mame/unico/silkroad_v.cpp mame-0.251+dfsg.1/src/mame/unico/silkroad_v.cpp --- mame-0.250+dfsg.1/src/mame/unico/silkroad_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/unico/silkroad_v.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,113 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:David Haywood, R. Belmont -#include "emu.h" -#include "silkroad.h" -#include "screen.h" - -/* Sprites probably need to be delayed */ -/* Some scroll layers may need to be offset slightly? */ -/* Check Sprite Colours after redump */ -/* Clean Up */ -/* is theres a bg colour register? */ - -void silkroad_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - gfx_element *gfx = m_gfxdecode->gfx(0); - uint32_t *source = m_sprram; - uint32_t *finish = source + 0x1000/4; - - while( source < finish ) - { - int xpos = (source[0] & 0x01ff0000) >> 16; - int ypos = (source[0] & 0x0000ffff); - int tileno = (source[1] & 0xffff0000) >> 16; - int attr = (source[1] & 0x0000ffff); - int flipx = (attr & 0x0080); - int width = ((attr & 0x0f00) >> 8) + 1; - int wcount; - int color = (attr & 0x003f) ; - int pri = ((attr & 0x1000)>>12); // Priority (1 = Low) - int pri_mask = ~((1 << (pri+1)) - 1); // Above the first "pri" levels - - // attr & 0x2000 -> another priority bit? - - if ( (source[1] & 0xff00) == 0xff00 ) break; - - if ( (attr & 0x8000) == 0x8000 ) tileno+=0x10000; - - if (!flipx) - { - for (wcount=0;wcountprio_transpen(bitmap,cliprect,tileno+wcount,color,0,0,xpos+wcount*16+8,ypos,screen.priority(),pri_mask,0); - } - } - else - { - for (wcount=width;wcount>0;wcount--) - { - gfx->prio_transpen(bitmap,cliprect,tileno+(width-wcount),color,1,0,xpos+wcount*16-16+8,ypos,screen.priority(),pri_mask,0); - } - } - - source += 2; - } -} - -template -TILE_GET_INFO_MEMBER(silkroad_state::get_tile_info) -{ - int code = ((m_vram[Layer][tile_index] & 0xffff0000) >> 16 ); - int color = ((m_vram[Layer][tile_index] & 0x000001f)); - int flipx = ((m_vram[Layer][tile_index] & 0x0000080) >> 7); - - code += 0x18000; - - tileinfo.set(0, - code, - color, - TILE_FLIPYX(flipx)); -} - -void silkroad_state::video_start() -{ - m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(silkroad_state::get_tile_info<0>)), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); - m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(silkroad_state::get_tile_info<1>)), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); - m_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(silkroad_state::get_tile_info<2>)), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); - - m_tilemap[0]->set_transparent_pen(0); - m_tilemap[1]->set_transparent_pen(0); - m_tilemap[2]->set_transparent_pen(0); -} - -uint32_t silkroad_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - screen.priority().fill(0, cliprect); - bitmap.fill(0x7c0, cliprect); - - m_tilemap[0]->set_scrollx(0, ((m_regs[0] & 0xffff0000) >> 16) ); - m_tilemap[0]->set_scrolly(0, (m_regs[0] & 0x0000ffff) >> 0 ); - - m_tilemap[2]->set_scrolly(0, (m_regs[1] & 0xffff0000) >> 16 ); - m_tilemap[2]->set_scrollx(0, (m_regs[2] & 0xffff0000) >> 16 ); - - m_tilemap[1]->set_scrolly(0, ((m_regs[5] & 0xffff0000) >> 16)); - m_tilemap[1]->set_scrollx(0, (m_regs[2] & 0x0000ffff) >> 0 ); - - m_tilemap[0]->draw(screen, bitmap, cliprect, 0,0); - m_tilemap[1]->draw(screen, bitmap, cliprect, 0,1); - m_tilemap[2]->draw(screen, bitmap, cliprect, 0,2); - draw_sprites(screen,bitmap,cliprect); - - if (0) - { - popmessage ("Regs %08x %08x %08x %08x %08x", - m_regs[0], - m_regs[1], - m_regs[2], - m_regs[4], - m_regs[5]); - } - - return 0; -} diff -Nru mame-0.250+dfsg.1/src/mame/universal/nl_cheekyms.cpp mame-0.251+dfsg.1/src/mame/universal/nl_cheekyms.cpp --- mame-0.250+dfsg.1/src/mame/universal/nl_cheekyms.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/universal/nl_cheekyms.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Vas Crabb #include "netlist/devices/net_lib.h" diff -Nru mame-0.250+dfsg.1/src/mame/universal/nl_cheekyms.h mame-0.251+dfsg.1/src/mame/universal/nl_cheekyms.h --- mame-0.250+dfsg.1/src/mame/universal/nl_cheekyms.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/universal/nl_cheekyms.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Vas Crabb #ifndef MAME_AUDIO_NL_CHEEKYMS_H #define MAME_AUDIO_NL_CHEEKYMS_H diff -Nru mame-0.250+dfsg.1/src/mame/vsystem/aerofgt_v.cpp mame-0.251+dfsg.1/src/mame/vsystem/aerofgt_v.cpp --- mame-0.250+dfsg.1/src/mame/vsystem/aerofgt_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/vsystem/aerofgt_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -563,6 +563,7 @@ int attr_start, last; last = ((m_rasterram[0x404 / 2] << 5) - 0x8000) / 2; + if (last < 0) last = 0; for (attr_start = m_spriteram.bytes() / 2 - 4; attr_start >= last; attr_start -= 4) { @@ -601,6 +602,7 @@ } last = ((m_rasterram[0x402 / 2] << 5) - 0x8000) / 2; + if (last < 0) last = 0; for (attr_start = ((m_spriteram.bytes() / 2) / 2) - 4; attr_start >= last; attr_start -= 4) { @@ -704,7 +706,6 @@ (x*8)+24,(y*8)+8,15); count++; - } } diff -Nru mame-0.250+dfsg.1/src/mame/vsystem/fromanc2.cpp mame-0.251+dfsg.1/src/mame/vsystem/fromanc2.cpp --- mame-0.250+dfsg.1/src/mame/vsystem/fromanc2.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/vsystem/fromanc2.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -13,7 +13,7 @@ Taisen Mahjong Final Romance 4 (Japan) (c)1998 Video System Co.,Ltd. - Driver by Takahiro Nogi 2001/02/28 - + Driver by Takahiro Nogi 2001/02/28 - Special thanks to Uki. ******************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/vsystem/fromanc2_v.cpp mame-0.251+dfsg.1/src/mame/vsystem/fromanc2_v.cpp --- mame-0.250+dfsg.1/src/mame/vsystem/fromanc2_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/vsystem/fromanc2_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ Video Hardware for Video System Mahjong series. - Driver by Takahiro Nogi 2001/02/04 - + Driver by Takahiro Nogi 2001/02/04 - ******************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/vsystem/fromance.cpp mame-0.251+dfsg.1/src/mame/vsystem/fromance.cpp --- mame-0.250+dfsg.1/src/mame/vsystem/fromance.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/vsystem/fromance.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -28,7 +28,7 @@ Rettou Juudan Nekkyoku Janshi - Higashi Nippon Hen (列島縦断熱局雀士 東日本編) (c)1988 Video System Co.,Ltd. - Driver by Takahiro Nogi 2001/02/04 - + Driver by Takahiro Nogi 2001/02/04 - and Nicola Salmoria, Aaron Giles ******************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/vsystem/fromance.h mame-0.251+dfsg.1/src/mame/vsystem/fromance.h --- mame-0.250+dfsg.1/src/mame/vsystem/fromance.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/vsystem/fromance.h 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ Game Driver for Video System Mahjong series and Pipe Dream. - Driver by Takahiro Nogi 2001/02/04 - + Driver by Takahiro Nogi 2001/02/04 - and Bryan McPhail, Nicola Salmoria, Aaron Giles ***************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/vsystem/fromance_v.cpp mame-0.251+dfsg.1/src/mame/vsystem/fromance_v.cpp --- mame-0.250+dfsg.1/src/mame/vsystem/fromance_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/vsystem/fromance_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ Video Hardware for Video System Mahjong series and Pipe Dream. - Driver by Takahiro Nogi 2001/02/04 - + Driver by Takahiro Nogi 2001/02/04 - and Bryan McPhail, Nicola Salmoria, Aaron Giles ******************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/vsystem/inufuku.cpp mame-0.251+dfsg.1/src/mame/vsystem/inufuku.cpp --- mame-0.250+dfsg.1/src/mame/vsystem/inufuku.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/vsystem/inufuku.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -10,7 +10,7 @@ 3 On 3 Dunk Madness (US, prototype?) (c)1996 Video System Co.,Ltd. - Driver by Takahiro Nogi 2003/08/09 - + Driver by Takahiro Nogi 2003/08/09 - based on other Video System drivers diff -Nru mame-0.250+dfsg.1/src/mame/vsystem/ojankohs_v.cpp mame-0.251+dfsg.1/src/mame/vsystem/ojankohs_v.cpp --- mame-0.250+dfsg.1/src/mame/vsystem/ojankohs_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/vsystem/ojankohs_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -4,7 +4,7 @@ Video Hardware for Video System Mahjong series. - Driver by Takahiro Nogi 2000/06/10 - + Driver by Takahiro Nogi 2000/06/10 - Driver by Uki 2001/12/10 - ******************************************************************************/ diff -Nru mame-0.250+dfsg.1/src/mame/vsystem/welltris.cpp mame-0.251+dfsg.1/src/mame/vsystem/welltris.cpp --- mame-0.250+dfsg.1/src/mame/vsystem/welltris.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/vsystem/welltris.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -270,7 +270,7 @@ Miyasu Nonki no Quiz 18-Kin (Japan) (c)1992 EIM - Added by Takahiro Nogi 2003/08/15 - + Added by Takahiro Nogi 2003/08/15 - Board: OW-13 CPU diff -Nru mame-0.250+dfsg.1/src/mame/vtech/iqunlim.cpp mame-0.251+dfsg.1/src/mame/vtech/iqunlim.cpp --- mame-0.250+dfsg.1/src/mame/vtech/iqunlim.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/vtech/iqunlim.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -52,42 +52,116 @@ */ #include "emu.h" -#include "screen.h" -#include "cpu/m68000/m68000.h" -#include "bus/generic/slot.h" +#include "machine/mc68328.h" +#include "machine/ram.h" +#include "video/mc68328lcd.h" + #include "bus/generic/carts.h" +#include "bus/generic/slot.h" + +#include "screen.h" #include "softlist_dev.h" +#define LOG_CARD_A_READ (1 << 1u) +#define LOG_CARD_A_WRITE (1 << 2u) +#define LOG_CARD_B_READ (1 << 3u) +#define LOG_CARD_B_WRITE (1 << 4u) +#define LOG_ALL (LOG_CARD_A_READ | LOG_CARD_A_WRITE | LOG_CARD_B_READ | LOG_CARD_B_WRITE) + +#define VERBOSE (LOG_ALL) +#include "logmacro.h" + +namespace +{ + class iqunlim_state : public driver_device { public: iqunlim_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), + m_ram(*this, RAM_TAG), + m_lcdctrl(*this, "lcdctrl"), + m_screen(*this, "screen"), m_cart(*this, "cartslot") - { } + { } void iqunlim(machine_config &config); -private: - required_device m_maincpu; - required_device m_cart; +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + + void mem_map(address_map &map); + + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void card4x_w(offs_t offset, uint16_t data, uint16_t mem_mask = 0xffff); + uint16_t card4x_r(offs_t offset, uint16_t mem_mask = 0xffff); + void card5x_w(offs_t offset, uint16_t data, uint16_t mem_mask = 0xffff); + uint16_t card5x_r(offs_t offset, uint16_t mem_mask = 0xffff); DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load); - virtual uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - void iqunlim_mem(address_map &map); + required_device m_maincpu; + required_device m_ram; + required_device m_lcdctrl; + required_device m_screen; + required_device m_cart; }; +void iqunlim_state::machine_start() +{ + address_space &space = m_maincpu->space(AS_PROGRAM); + space.install_ram(0x00000000, m_ram->size() - 1, m_ram->pointer()); +} + +void iqunlim_state::machine_reset() +{ + // Copy ROM vectors into RAM + memcpy(m_ram->pointer(), memregion("maincpu")->base(), 0x8); +} + +void iqunlim_state::mem_map(address_map &map) +{ + map(0x02000000, 0x023fffff).rom().region("maincpu", 0); // 68EZ328 /CSA0 pin selects System ROM after bootup + map(0x03000000, 0x0307ffff).ram(); // Region used by the internal flash memory + map(0x04000000, 0x04ffffff).rw(FUNC(iqunlim_state::card4x_r), FUNC(iqunlim_state::card4x_w)); // Region used by Card B + map(0x05000000, 0x05ffffff).rw(FUNC(iqunlim_state::card5x_r), FUNC(iqunlim_state::card5x_w)); // Region used by Card A +} + uint32_t iqunlim_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { + m_lcdctrl->video_update(bitmap, cliprect); return 0; } -void iqunlim_state::iqunlim_mem(address_map &map) +uint16_t iqunlim_state::card4x_r(offs_t offset, uint16_t mem_mask) { - map.unmap_value_high(); - map(0x000000, 0x1FFFFF).rom(); + uint16_t data = 0; + LOGMASKED(LOG_CARD_B_READ, "card4x_read[%08x]: %04x\n", offset << 1, data); + return data; +} + +void iqunlim_state::card4x_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + LOGMASKED(LOG_CARD_B_WRITE, "card4x_write[%08x]: %04x\n", offset << 1, data); +} + +uint16_t iqunlim_state::card5x_r(offs_t offset, uint16_t mem_mask) +{ + uint16_t data = 0xffff; + if (m_cart) + { + data = m_cart->read16_rom(offset, mem_mask); + } + LOGMASKED(LOG_CARD_A_READ, "card5x_read[%08x]: %04x\n", offset << 1, data); + return data; +} + +void iqunlim_state::card5x_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + LOGMASKED(LOG_CARD_A_WRITE, "card5x_write[%08x]: %04x\n", offset << 1, data); } static INPUT_PORTS_START( iqunlim ) @@ -107,16 +181,25 @@ void iqunlim_state::iqunlim(machine_config &config) { // Basic machine hardware - M68000(config, m_maincpu, XTAL(32'000'000)/2); // DragonBall EZ (MC68EZ328, 68k core) (Is the xtal correct? This was from the other hardware) - m_maincpu->set_addrmap(AS_PROGRAM, &iqunlim_state::iqunlim_mem); + MC68EZ328(config, m_maincpu, 32768*506); + m_maincpu->set_addrmap(AS_PROGRAM, &iqunlim_state::mem_map); + + m_maincpu->out_flm().set(m_lcdctrl, FUNC(mc68328_lcd_device::flm_w)); + m_maincpu->out_llp().set(m_lcdctrl, FUNC(mc68328_lcd_device::llp_w)); + m_maincpu->out_lsclk().set(m_lcdctrl, FUNC(mc68328_lcd_device::lsclk_w)); + m_maincpu->out_ld().set(m_lcdctrl, FUNC(mc68328_lcd_device::ld_w)); + m_maincpu->set_lcd_info_changed(m_lcdctrl, FUNC(mc68328_lcd_device::lcd_info_changed)); + + RAM(config, RAM_TAG).set_default_size("2M"); // Video hardware - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_refresh_hz(50); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // Not accurate - screen.set_size(512, 256); - screen.set_visarea(0, 512-1, 0, 256-1); - screen.set_screen_update(FUNC(iqunlim_state::screen_update)); + SCREEN(config, m_screen, SCREEN_TYPE_LCD); + m_screen->set_refresh_hz(60); + m_screen->set_size(480, 260); + m_screen->set_visarea(0, 480 - 1, 0, 260 - 1); + m_screen->set_screen_update(FUNC(iqunlim_state::screen_update)); + + MC68328_LCD(config, m_lcdctrl, 0); GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "iqunlim_cart"); m_cart->set_width(GENERIC_ROM16_WIDTH); @@ -135,5 +218,7 @@ ROM_LOAD16_WORD_SWAP( "27-06126-007.bin", 0x000000, 0x400000, CRC(2e99cfef) SHA1(790869ffcf7fd666def8ff57fce0691062b3cec5) ) ROM_END +} // anonymous namespace + COMP( 1995, iqunlim, 0, 0, iqunlim, iqunlim, iqunlim_state, empty_init, "VTech / Integrated Systems Inc.", "IQ Unlimited", MACHINE_IS_SKELETON) // COPYRIGHT 1995 INTERGRATED SYSTEMS, INC. COMP( 1995, iqunlimgr, iqunlim, 0, iqunlim, iqunlim, iqunlim_state, empty_init, "VTech / Integrated Systems Inc.", "IQ Unlimited (Germany)", MACHINE_IS_SKELETON) // COPYRIGHT 1995 INTERGRATED SYSTEMS, INC. diff -Nru mame-0.250+dfsg.1/src/mame/vtech/nl_gamemachine.cpp mame-0.251+dfsg.1/src/mame/vtech/nl_gamemachine.cpp --- mame-0.250+dfsg.1/src/mame/vtech/nl_gamemachine.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/vtech/nl_gamemachine.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud // thanks-to:Sean Riddle diff -Nru mame-0.250+dfsg.1/src/mame/vtech/nl_gamemachine.h mame-0.251+dfsg.1/src/mame/vtech/nl_gamemachine.h --- mame-0.250+dfsg.1/src/mame/vtech/nl_gamemachine.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/vtech/nl_gamemachine.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Couriersud // thanks-to:Sean Riddle diff -Nru mame-0.250+dfsg.1/src/mame/vtech/vsmile.cpp mame-0.251+dfsg.1/src/mame/vtech/vsmile.cpp --- mame-0.250+dfsg.1/src/mame/vtech/vsmile.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/vtech/vsmile.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -115,7 +115,23 @@ uint16_t vsmile_state::portb_r() { - return VSMILE_PORTB_OFF_SW | VSMILE_PORTB_ON_SW | VSMILE_PORTB_RESET; + uint16_t data = m_dsw_system->read(); + //bit 0 : extra address bit for the cartridge port, access second half of ROM (TODO) + //bit 1 : Set to 0 to enable cartridge ROM (TODO) -> getCS2 + //bit 2 : Set to 0 to enable internal ROM (TODO) + //bit 3 : restart (see dipswitch) + // VSMILE_PORTB_RESET + //bit 4 : ADC (TODO) + //bit 5 : Voltage detect (TODO) + //bit 6 : ON button, active low (see dipswitch) + // VSMILE_PORTB_ON_SW + //bit 7 : OFF button, active low (see dipswitch) + // VSMILE_PORTB_OFF_SW + + //LOG("%s: portb_r: %04x\n", machine().describe_context(), data); + + //On Vsmile, VSMILE_PORTB_RESET, VSMILE_PORTB_OFF_SW and VSMILE_PORTB_ON_SW actives will trigger BIOS test screen + return data; } void vsmile_state::portb_w(offs_t offset, uint16_t data, uint16_t mem_mask) @@ -130,7 +146,7 @@ uint16_t data = m_dsw_region->read(); data |= m_ctrl_rts[0] ? 0 : 0x0400; data |= m_ctrl_rts[1] ? 0 : 0x1000; - data |= 0x0020; + data |= 0x0020; //IOC5 - TestPoint data |= (m_ctrl_rts[0] && m_ctrl_rts[1]) ? 0x0000 : 0x2000; //data = machine().rand() & 0xffff; return data; @@ -217,44 +233,53 @@ static INPUT_PORTS_START( vsmile ) PORT_START("REGION") - PORT_DIPNAME( 0x0f, 0x04, "sysrom Region" ) - PORT_DIPSETTING( 0x04, "UK/US" ) - PORT_DIPSETTING( 0x07, "China" ) - PORT_DIPSETTING( 0x08, "Mexico" ) - PORT_DIPSETTING( 0x0a, "Italy" ) // not valid on V.Smile Motion? - PORT_DIPSETTING( 0x0b, "Germany" ) - PORT_DIPSETTING( 0x0c, "Spain" ) - PORT_DIPSETTING( 0x0d, "France" ) - PORT_DIPNAME( 0x10, 0x10, "VTech Intro" ) - PORT_DIPSETTING( 0x00, "Off" ) - PORT_DIPSETTING( 0x10, "On" ) + //based on schematics and BIOS test screen + PORT_CONFNAME( 0x0f, 0x0f, DEF_STR(Language) ) + PORT_CONFSETTING( 0x02, DEF_STR(Italian) ) //IT + PORT_CONFSETTING( 0x07, DEF_STR(Chinese) ) //Chinese + PORT_CONFSETTING( 0x08, "Portuguese" ) //PO + PORT_CONFSETTING( 0x09, "Dutch" ) //DU + PORT_CONFSETTING( 0x0b, DEF_STR(German) ) //GE + PORT_CONFSETTING( 0x0c, DEF_STR(Spanish) ) //SP + PORT_CONFSETTING( 0x0d, DEF_STR(French) ) //FR + PORT_CONFSETTING( 0x0e, "English (UK)" ) //UK + PORT_CONFSETTING( 0x0f, "English (US)" ) //US + PORT_CONFNAME( 0x10, 0x10, "VTech Intro" ) + PORT_CONFSETTING( 0x00, DEF_STR(Off) ) + PORT_CONFSETTING( 0x10, DEF_STR(On) ) PORT_BIT( 0xe0, 0x00, IPT_UNUSED ) + + PORT_START("SYSTEM") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POWER_OFF ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POWER_ON ) + PORT_CONFNAME( 0x08, 0x08, "Restart") + PORT_CONFSETTING( 0x08, DEF_STR(Off) ) + PORT_CONFSETTING( 0x00, DEF_STR(On) ) + PORT_BIT( 0x37, 0x00, IPT_UNUSED ) INPUT_PORTS_END static INPUT_PORTS_START( vsmilem ) PORT_START("REGION") - PORT_DIPNAME( 0x0f, 0x0f, "sysrom Region" ) - //PORT_DIPSETTING( 0x00, "0" ) // no V.Smile Motion logo, blank cartridge image, "Please insert a Learning Game" text - //PORT_DIPSETTING( 0x01, "1" ) // no V.Smile Motion logo, blank cartridge image, no text - PORT_DIPSETTING( 0x02, "Italy" ) // V.Smile Motion logo with "Active Learning System", voice 1, regular cartridge image, "Per favore inserisci una cartuccia di gioco" text (possibly invalid as text on logo is still in English and Italy was previously 0x0a) - //PORT_DIPSETTING( 0x03, "3" ) // V.Smile Motion logo with no text, voice 2, regular cartridge image, no text - //PORT_DIPSETTING( 0x04, "4" ) // V.Smile Motion logo with no text, voice 2, regular cartridge image, "Please insert a Learning Game" text - PORT_DIPSETTING( 0x05, "English (1)" ) // V.Smile Motion logo with "Active Learning System", voice 2, regular cartridge image, "Please insert a Learning Game" text - PORT_DIPSETTING( 0x06, "English (2)" ) // V.Smile Motion logo with "Active Learning System", voice 1, regular cartridge image, "Please insert a Learning Game" text - PORT_DIPSETTING( 0x07, "China" ) // V.Smile Motion logo with "Active Learning System", voice 1, regular cartridge image, Chinese text - PORT_DIPSETTING( 0x08, "Mexico" ) // V.Smile Motion logo with "Sistema Educativo", voice 1, regular cartridge image, "TV Learning System" text - PORT_DIPSETTING( 0x09, "Netherlands?" ) // V.Smile Motion logo with "Active Learning System", voice 3, regular cartridge image, "Plaats een game" - //PORT_DIPSETTING( 0x0a, "a" ) // V.Smile Motion logo with "Active Learning System", voice 1, regular cartridge image, "Please insert a Learning Game" text (was 'Italy' on regular vsmile) - PORT_DIPSETTING( 0x0b, "Germany" ) // V.Smile Motion logo with "Aktives Lernspiel - System", voice 4, regular cartridge image, "Bitte Lernspiel einstecken" - PORT_DIPSETTING( 0x0c, "Spain" ) // V.Smile Motion logo with "Aprendizaje Inteligente En Accion", voice 5, regular cartridge image, "Por favor, inserta un cartuncho" - PORT_DIPSETTING( 0x0d, "France" ) // V.Smile Motion logo with "Apprendre En Mouvements", voice 6, regular cartridge image, "Inserer une cartouche" - //PORT_DIPSETTING( 0x0e, "e" ) // V.Smile Motion logo with "Active Learning System", voice 1, regular cartridge image, "Please insert a Learning Game" text (same as 0x06?) - PORT_DIPSETTING( 0x0f, "English (3)" ) // V.Smile Motion logo with "Active Learning System", voice 2, regular cartridge image, "Please insert a Smartridge(tm)" text (Smartridge must be a region specific term?) - - PORT_DIPNAME( 0x10, 0x10, "VTech Intro" ) - PORT_DIPSETTING( 0x00, "Off" ) - PORT_DIPSETTING( 0x10, "On" ) + PORT_CONFNAME( 0x0f, 0x0f, "sysrom Region" ) + PORT_CONFSETTING( 0x02, "Italy" ) // V.Smile Motion logo with "Active Learning System", voice 1, regular cartridge image, "Per favore inserisci una cartuccia di gioco" text (possibly invalid as text on logo is still in English and Italy was previously 0x0a) + PORT_CONFSETTING( 0x05, "English (1)" ) // V.Smile Motion logo with "Active Learning System", voice 2, regular cartridge image, "Please insert a Learning Game" text + PORT_CONFSETTING( 0x06, "English (2)" ) // V.Smile Motion logo with "Active Learning System", voice 1, regular cartridge image, "Please insert a Learning Game" text + PORT_CONFSETTING( 0x07, "China" ) // V.Smile Motion logo with "Active Learning System", voice 1, regular cartridge image, Chinese text + PORT_CONFSETTING( 0x08, "Mexico" ) // V.Smile Motion logo with "Sistema Educativo", voice 1, regular cartridge image, "TV Learning System" text + PORT_CONFSETTING( 0x09, "Netherlands?" ) // V.Smile Motion logo with "Active Learning System", voice 3, regular cartridge image, "Plaats een game" + PORT_CONFSETTING( 0x0b, "Germany" ) // V.Smile Motion logo with "Aktives Lernspiel - System", voice 4, regular cartridge image, "Bitte Lernspiel einstecken" + PORT_CONFSETTING( 0x0c, "Spain" ) // V.Smile Motion logo with "Aprendizaje Inteligente En Accion", voice 5, regular cartridge image, "Por favor, inserta un cartuncho" + PORT_CONFSETTING( 0x0d, "France" ) // V.Smile Motion logo with "Apprendre En Mouvements", voice 6, regular cartridge image, "Inserer une cartouche" + PORT_CONFSETTING( 0x0f, "English (3)" ) // V.Smile Motion logo with "Active Learning System", voice 2, regular cartridge image, "Please insert a Smartridge(tm)" text (Smartridge must be a region specific term?) + + PORT_CONFNAME( 0x10, 0x10, "VTech Intro" ) + PORT_CONFSETTING( 0x00, "Off" ) + PORT_CONFSETTING( 0x10, "On" ) PORT_BIT( 0xe0, 0x00, IPT_UNUSED ) + + PORT_START("SYSTEM") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POWER_ON ) + PORT_BIT( 0x7F, 0x00, IPT_UNUSED ) INPUT_PORTS_END /************************************ diff -Nru mame-0.250+dfsg.1/src/mame/vtech/vsmile.h mame-0.251+dfsg.1/src/mame/vtech/vsmile.h --- mame-0.250+dfsg.1/src/mame/vtech/vsmile.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/vtech/vsmile.h 2022-12-29 14:20:09.000000000 +0000 @@ -68,6 +68,7 @@ : vsmile_base_state(mconfig, type, tag) , m_ctrl(*this, "ctrl%u", 1U) , m_dsw_region(*this, "REGION") + , m_dsw_system(*this, "SYSTEM") , m_redled(*this, "redled%u", 1U) , m_yellowled(*this, "yellowled%u", 1U) , m_blueled(*this, "blueled%u", 1U) @@ -113,6 +114,7 @@ required_device_array m_ctrl; required_ioport m_dsw_region; + required_ioport m_dsw_system; output_finder<2> m_redled; output_finder<2> m_yellowled; diff -Nru mame-0.250+dfsg.1/src/mame/yamaha/ymdx100.cpp mame-0.251+dfsg.1/src/mame/yamaha/ymdx100.cpp --- mame-0.250+dfsg.1/src/mame/yamaha/ymdx100.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/yamaha/ymdx100.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,12 +1,239 @@ // license:BSD-3-Clause -// copyright-holders:AJR +// copyright-holders:AJR, Pietro Gagliardi /******************************************************************************* - Skeleton driver for Yamaha DX100 & DX27 FM synthesizers. +Yamaha DX27 and DX100 digital synthesizers - The main differences between DX100 and DX27 are that DX27 has 61 keys - rather than 49, but DX100 is portable and can run on battery power. Their - tone generation capabilities are identical. +The DX27 and DX100 are mid-tier professional synthesizers released by Yamaha +around 1985. The DX27 is a full-size keyboard with 61 full-size keys that can +only run on AC power. The DX100 is a smaller, wearable keyboard with only 49 +small-size keys and can run on either AC power or batteries. Both keybaords have +full MIDI in/out/thru, and can also hook up to a Yamaha foot pedal and breath +controller. + +Apart from the differences listed above and a few less significant differences, +these two keyboards are largely identical. In fact, they use the exact same +mainboard, with both DX27 and DX100 printed on the silkscreen; a marker was used +to cross out the irrelevant model number during assembly. The front panel and +keyboard decoding circuits differ, as do the LCD/LED screen assemblies. + +These two appear to be based on the DX21, a slightly higher-end keyboard released +by Yamaha earlier in 1985 that features a hardware chorus effect (implemented +independently of the FM synthesis chip) and some additional voice parameters (which +appear to be implemented in software). There is also the DX27S, which appears to +be based on the DX27 but adds a few extra features. Neither of these two models +are covered here as of this writing. + +The main CPU is a Hitachi HD6303; its I/O circuitry is used extensively. +Some of the controls and inputs are analog; a M58990 ADC chip is used for these. + +The FM synthesis chip is the YM2164 "OPP", a proprietary variant of the YM2151 +that changes the rate of Timer B, moves the test/LFO reset register, and adds +an additional set of 8 registers used by the breath controller code. This chip +was also used in the DX21 (and possibly also the DX27S), but is perhaps most +famously used by the SFG-05 expansion module for the MSX and the FB-01 standalone +desktop MIDI synthesizer. As these two don't support the breath controller, the +extra registers were totally unused (set to 0 by the firmware), and as a result +sound and behave entirely identically to the YM2151. (Figuring out what these +registers did was part of the impetus for me (Pietro Gagliardi) actually building +this emulation.) + +In addition to the independent instruction manuals for the DX27 and DX100, there is +also a single service manual that covers both keyboards (but not the DX27S, curiously +enough). The DX21 service manual comes with an "Overall Circuit Diagram" for that +keyboard; it is likely that the DX27/DX100 service manual also did, but PDFs available +online are missing it. A scan of the DX27/DX100 Overall Circuit Diagram is available +online separately; it does not appear to have spread as far and wide as the rest of the +service manual, but is still readily available. + +*** Currently imperfectly emulated + + - The cassette interface. + This uses an 8-pin DIN with what appears to be the same pinout as the MSX. + However, the remote lines are completely unused, and the tape player has + to be manually operated. The "dxconvert" project by rarepixel does claim to + support DX100 tape dumps, and does so by using the "castools" project by + joyrex2001, which includes a program to convert wav files storing the raw + tape audio to MSX .cas files. dxconvert uses the command-line parameters + "-p -e 4 -t 10"; I'm not sure how to interpret this, even after reading + the code. + + The constant used below for testing against m_cassette->input() was guessed + through trial and error until I could get a successful load at least somewhat + consistently. It still isn't perfect, but I don't know how to refine this + further. + + "dxconvert": https://github.com/rarepixel/dxconvert + "castools": https://github.com/joyrex2001/castools + The sample voices that I used to test can be found at + http://robertgomez.org/blog/2017/08/02/some-yamaha-dx100-dx27-synth-patches/ + I loaded the wav download here, saved it to another wav, + verified that wav (the DX100 will ask to verify data you just + saved), and then converted both to .cas as described and compared + the two; they are identical. + +*** Currently unemulated + + - Bit 5 of port 6 is tied to the /G2A and /G2B pins of the two + TC40H138P chips (~~ 74138?) that sit between the panel switches and the CPU. + I don't yet understand how these lines are actually used, but I can still use + the full functions of the keyboard if I just have it return 0 on read, so. + +*** CPU ports + + Port 2 is arranged as so: + Bit(s) Connection + 0 Controls the state of the power LED on the DX100. + The firmware will blink this LED when battery power is low. + This is unused on the DX27. + 1 0 (pulled to chassis ground by 220 ohm resistor) + 2 500khz clock + 3 MIDI In data bit + 4 MIDI Out data bit + 5 0 if the foot pedal is connected, 1 otherwise. + The manual says to use either the Yamaha FC-4 or Yamaha FC-5 foot pedals + with the DX100. + 6 Pulled TODO if the foot pedal is pressed. + 7 0 (pulled to chassis ground by 220 ohm resistor) + + Port 5 is connected to the panel switches and keyboard keys. + Which sets of buttons are exposed is determined by the low four bits + of port 6. The exact matrix differs between the DX27 and DX100. + + Port 6 is arranged as so: + Bit(s) Connection + 0-3 Which set of buttons to expose on port 5. + 4 Connected to the EOC line of the ADC. + 5 (see /G2A and /G2B comment in Currently unemulated) + 6 Connected to the REC (TS) line of the cassette interface. + 7 Connected to the PLAY (TL) line of the cassette interface. + +*** M58990 ports + + Port 0 is connected to the pitch wheel. + + Port 1 is connected to the mod wheel. + + Port 2 is connected to the breath controller. + The manual says to use the Yamaha BC-1 breath controller with the DX100. + + Port 3 is connected to the data entry slider. + + (TODO port 4 appears to be connected to chassis ground by 220 ohm resistor?) + + Port 5 is a voltmeter for the RAM battery. + + Port 6 is a voltmeter for system power. + + (TODO port 7 appears to be tied to port 6?) + +*** Default keyboard layout + + For quick testing, the default keyboard button layout will be: + 1 2 3 4 5 6 7 8 9 0 - = -> 1 2 3 4 5 6 7 8 9 10 11 12 + Q W T Y O P -> PBend KeyShift Store Func BankA BankB + E R U I [ ] -> -1 +1 Edit Internal BankC BankD + Octave 3 will be avaible over [Z S X D C V G B H N J M] + Pitch bend will be ' / + Mod wheel will be ; . + Data entry slider will be L , + + This leaves the breath controller, switches 13-24, and the other + keyboard octaves unmapped by default. + + When first starting with a fresh configuration and no NVRAM, + press Y and then O (Func and then BankA) to switch to the + internal voices. Note that some voices may not respond to + the pitch or mod wheels as much as other voices do. + + To disable memory protection, press Y, ], and then E (Func, + 12 to select the Memory Protection setting, and -1 to turn + it off). Then you can press U (Edit) to edit voice + parameters. + + IPT_KEYBOARD is used, so use the UI mode key (default + Scroll Lock) to re-enable the MAME UI. + + No, I don't know why some voices (such as Pianobells) + seem to not let you turn off modulation even if you set + the mod wheel to its lowest point. You can set the pitch + sensitivity value ("PMS", Edit/Compare key 9) to 0 to + force it off. This might have to do with the YM2164 + moving the LFO Reset register; if not, it might have to + do with the default pitch wheel position not being 0 + (see TODO below). + +*** Test mode + + To enter test mode, hold 1 and 2 on the panel while powering the system + on. You'll see the version number, and then a prompt asking if you want + to enter test mode; press +1 to enter test mode. + + If 1 and 3 or 1 and 4 are held instead of 1 and 2, different subsets of the + test mode will run instead. Furthermore, some tests will only be run on + the DX100. + + For more details on the individual tests, refer to the service manual. + + To make developing this driver easier I wrote an init function for the + DX100 1.1 driver which allows me to pick and choose which tests to actually + run. I've disabled it in the final version of the driver, but here it is + in this comment if you want to run it yourself: + +void yamaha_dx100_state::init_dx100() +{ + // Since test mode forcibly halts on the first failed test, and we can only choose to not run certain tests, use these blocks of code to skip specific tests. + // The numbering and naming below is from the service manual, which, surprise, doesn't quite line up with the way the tests are written in the code. + u8 *rom = (u8 *) (memregion("program")->base()); + auto skip = [rom](u16 whichAddr, u16 jumpTo, u8 extraInst = 0, u16 nop2 = 0) { + if (extraInst != 0) { + rom[whichAddr & 0x7fff] = extraInst; + whichAddr++; + } + rom[whichAddr & 0x7fff] = 0x7e; + rom[(whichAddr + 1) & 0x7fff] = (u8) ((jumpTo >> 8) & 0xff); + rom[(whichAddr + 2) & 0x7fff] = (u8) (jumpTo & 0xff); + if (nop2 != 0) { + rom[nop2 & 0x7fff] = 0x01; + rom[(nop2 + 1) & 0x7fff] = 0x01; + } + }; + // 1. Output level, RAM battery voltage + skip(0xc464, 0xc4b3); + // 2. RAM, cassette interface, MIDI in/out, MIDI thru + // This is hard to skip as a unit in the code, so you need to skip them individually: + // Or to only disable a subset of these tests: + // 2a. RAM test + rom[0xc55f & 0x7fff] = 0x39; + // 2b. Cassette interface test (I'm not entirely sure MAME's cassette interface + // supports the direct writing; I *think* this is MSX format?) + rom[0xc66e & 0x7fff] = 0x39; + // 2c. MIDI in/out (I'm not sure why this is failing, but something's not right) + rom[0xc631 & 0x7fff] = 0x39; + // 2d. MIDI thru + skip(0xc6b0, 0xc52a, 0, 0xc4dd); + // 3. LCD test + // This is actually two tests in the code, so you need to skip them individually: + // 2a. LCD solid flashing test + skip(0xc6e1, 0xc52a, 0, 0xc4e6); + // 2b. LCD checkerboard test + skip(0xc6d1, 0xc52a, 0, 0xc4ef); + // 4. Pitch wheel, mod wheel, data entry slider, breath controller, foot switch + // AND (run as part of 4 in the code) + // 5. Foot switch detecting circuit + skip(0xc70f, 0xc7a9); + // Or to only disable a subset of these tests: + // 4a/5. Foot switch tests + skip(0xc7b3, 0xc7a9, 0x38); + // 6. Keyboard + skip(0xc86e, 0xc927); + // 7. LCD contrast + // AND (run as part of 7 in the code) + // 8. Main power, LED flash on low power + skip(0xc927, 0xc98f); + // 9. Panel switches + skip(0xc9d3, 0xca50); +} *******************************************************************************/ @@ -14,6 +241,7 @@ #include "bus/midi/midi.h" #include "cpu/m6800/m6801.h" +#include "imagedev/cassette.h" #include "machine/adc0808.h" #include "machine/clock.h" #include "machine/nvram.h" @@ -24,6 +252,8 @@ #include "screen.h" #include "speaker.h" +#include "dx100.lh" + namespace { class yamaha_dx100_state : public driver_device @@ -32,14 +262,23 @@ yamaha_dx100_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") + , m_adc(*this, "adc") + , m_keysbuttons(*this, "P6_%d", 0) , m_midi_in(true) + , m_led(*this, "LED") + , m_cassette(*this, "cassette") { } void dx100(machine_config &config); + DECLARE_WRITE_LINE_MEMBER(led_w) { m_led = state; } + DECLARE_CUSTOM_INPUT_MEMBER(midi_in_r) { return m_midi_in; } + protected: + virtual void driver_start() override; virtual void machine_start() override; + virtual void machine_reset() override; private: HD44780_PIXEL_UPDATE(lcd_pixel_update); @@ -50,26 +289,46 @@ void mem_map(address_map &map); required_device m_maincpu; + required_device m_adc; + required_ioport_array<16> m_keysbuttons; bool m_midi_in; + + u8 m_port6_val; + + // for hooking up the LED to layouts + output_finder<> m_led; + + required_device m_cassette; }; +void yamaha_dx100_state::driver_start() +{ + m_led.resolve(); +} + void yamaha_dx100_state::machine_start() { save_item(NAME(m_midi_in)); } +void yamaha_dx100_state::machine_reset() +{ + // TODO: figure out the actual power-on state + m_port6_val = 0; +} + HD44780_PIXEL_UPDATE(yamaha_dx100_state::lcd_pixel_update) { - if (x < 5 && y < 8 && line < 2 && pos < 16) - bitmap.pix(line * 10 + y + 1 + ((y == 7) ? 1 : 0), pos * 6 + x + 1) = state ? 1 : 2; + if (x < 5 && y < 8 && line < 2 && pos < 8) + bitmap.pix(y + 1 + ((y == 7) ? 1 : 0), (line * 8 + pos) * 6 + x + 1) = state ? 1 : 2; } void yamaha_dx100_state::palette_init(palette_device &palette) { - palette.set_pen_color(0, rgb_t(0x00, 0x00, 0x00)); // background - palette.set_pen_color(1, rgb_t(0xff, 0xff, 0xff)); // lcd pixel on - palette.set_pen_color(2, rgb_t(0x18, 0x18, 0x18)); // lcd pixel off + palette.set_pen_color(0, rgb_t(0xff, 0xff, 0xff)); // background + palette.set_pen_color(1, rgb_t(0x00, 0x00, 0x00)); // lcd pixel on + palette.set_pen_color(2, rgb_t(0xe7, 0xe7, 0xe7)); // lcd pixel off } WRITE_LINE_MEMBER(yamaha_dx100_state::p22_w) @@ -92,20 +351,263 @@ } static INPUT_PORTS_START(dx100) + PORT_START("P2") + // TODO: Should 0x02, 0x04, 0x10, and 0x80 be listed here? + // They should be handled by the other interconnections in this file. + // If so, verify the active states of the MIDI ports. + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_NAME("LED") PORT_WRITE_LINE_MEMBER(yamaha_dx100_state, led_w) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) // tied to ground + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) // 500khz clock + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(yamaha_dx100_state, midi_in_r) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) // MIDI out + PORT_CONFNAME( 0x20, 0x00, "Foot Switch" ) + PORT_CONFSETTING( 0x00, "Connected" ) + PORT_CONFSETTING( 0x20, "Disconnected" ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Foot Switch") + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) // tied to ground + + PORT_START("P6_0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Data Entry +1/Yes/On") PORT_CODE(KEYCODE_R) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Data Entry -1/No/Off") PORT_CODE(KEYCODE_E) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Store/EG Copy") PORT_CODE(KEYCODE_T) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Function/Compare") PORT_CODE(KEYCODE_Y) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Edit/Compare") PORT_CODE(KEYCODE_U) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Internal/Play") PORT_CODE(KEYCODE_I) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Pitch B Mode/Operator Select/Mode Set") PORT_CODE(KEYCODE_Q) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Key Shift/Key Set") PORT_CODE(KEYCODE_W) + + PORT_START("P6_1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1/Algorithm/Master Tune Adj") PORT_CODE(KEYCODE_1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2/Feedback/MIDI On/Off") PORT_CODE(KEYCODE_2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3/LFO Wave/MIDI Channel") PORT_CODE(KEYCODE_3) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4/LFO Speed/MIDI Ch Info") PORT_CODE(KEYCODE_4) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5/LFO Delay/MIDI Sys Info") PORT_CODE(KEYCODE_5) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("6/LFO PMD/Recall Edit") PORT_CODE(KEYCODE_6) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("7/LFO AMD/Init Voice") PORT_CODE(KEYCODE_7) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("8/LFO Sync/Edit Bank") PORT_CODE(KEYCODE_8) + + PORT_START("P6_2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("9/Modulation Sensitivity Pitch/Cassette Save/Verify") PORT_CODE(KEYCODE_9) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("10/Modulation Sensitivity Velocity/Cassette Load") PORT_CODE(KEYCODE_0) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("11/Modulation Sensitivity EG Bias/Cassette Load Single") PORT_CODE(KEYCODE_MINUS) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("12/Key Velocity/Memory Protect") PORT_CODE(KEYCODE_EQUALS) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("13/Oscillator Freq Ratio/Poly/Mono") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("14/Oscillator Detune/Pitch Bend Range") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("15/Envelope Generator AR/Portamento Mode") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("16/Envelope Generator D1R/Portamento Time") + + PORT_START("P6_3") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("17/Envelope Generator D1L/Foot Sw Assign") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("18/Envelope Generator D2R/Wheel Range Pitch") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("19/Envelope Generator RR/Wheel Range Amplitude") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("20/Operator Out Level/Breath Range Pitch") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("21/Keyboard Scaling Rate/Breath Range Amplitude") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("22/Keyboard Scaling Level/Breath Range Pitch Bias") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("23/Transpose/Breath Range EG Bias") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("24/Voice Name Cursor >") + + PORT_START("P6_4") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C#1") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C#2") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C#3") PORT_CODE(KEYCODE_S) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C#4") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Bank D/Operator/AMS On/Off 4/Preset Search 401~424") PORT_CODE(KEYCODE_CLOSEBRACE) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Bank C/Operator/AMS On/Off 3/Preset Search 301~324") PORT_CODE(KEYCODE_OPENBRACE) + + PORT_START("P6_5") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D1") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D2") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D3") PORT_CODE(KEYCODE_X) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D4") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Bank B/Operator/AMS On/Off 2/Preset Search 201~224") PORT_CODE(KEYCODE_P) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Bank A/Operator/AMS On/Off 1/Preset Search 101~124") PORT_CODE(KEYCODE_O) + + PORT_START("P6_6") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D#1") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D#2") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D#3") PORT_CODE(KEYCODE_D) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D#4") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("P6_7") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("E1") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("E2") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("E3") PORT_CODE(KEYCODE_C) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("E4") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("P6_8") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F1") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F2") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F3") PORT_CODE(KEYCODE_V) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F4") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("P6_9") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F#1") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F#2") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F#3") PORT_CODE(KEYCODE_G) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F#4") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("P6_10") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("G1") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("G2") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("G3") PORT_CODE(KEYCODE_B) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("G4") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("P6_11") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("G#1") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("G#2") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("G#3") PORT_CODE(KEYCODE_H) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("G#4") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("P6_12") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A1") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A2") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A3") PORT_CODE(KEYCODE_N) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A4") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("P6_13") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A#1") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A#2") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A#3") PORT_CODE(KEYCODE_J) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A#4") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("P6_14") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("B1") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("B2") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("B3") PORT_CODE(KEYCODE_M) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("B4") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("P6_15") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C1") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C2") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C3") PORT_CODE(KEYCODE_Z) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C4") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C5") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("AN0") + // The pitch wheel returns to center once released. + PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_NAME("Pitch Wheel") PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_MINMAX(0x00, 0xff) PORT_CODE_INC(KEYCODE_QUOTE) PORT_CODE_DEC(KEYCODE_SLASH) + + PORT_START("AN1") + // The mod wheel stays in place to wherever it's set. + // TODO: This should have its initial state be 0, not halfway. + PORT_BIT( 0xff, 0, IPT_PADDLE_V ) PORT_NAME("Modulation Wheel") PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_MINMAX(0x00, 0xff) PORT_CENTERDELTA(0) PORT_CODE_INC(KEYCODE_COLON) PORT_CODE_DEC(KEYCODE_STOP) + + PORT_START("AN2") + // TODO: This appears to be inverted; if this is set to 255 it behaves as if + // there was no breath controller? or at least seems to? on instruments like + // 112 Pianobrass if this is set to 0 it acts as if the mod wheel had been turned + // all the way up and enables LFO -- and there's probably a better way we could + // simulate not having a breath controller attached at all??? + PORT_BIT( 0xff, 0, IPT_PEDAL ) PORT_NAME("Breath Controller") PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_MINMAX(0x00, 0xff) + + PORT_START("AN3") + // The data entry slider stays in place to wherever it's set. + PORT_BIT( 0xff, 0, IPT_POSITIONAL_V ) PORT_NAME("Data Entry Slider") PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_MINMAX(0x00, 0xff) PORT_CENTERDELTA(0) PORT_CODE_INC(KEYCODE_L) PORT_CODE_DEC(KEYCODE_COMMA) + + PORT_START("AN5") + PORT_CONFNAME( 0xff, 0x80, "Internal RAM Battery Level" ) + // "CNG RAM BATTERY!" displayed unless value is between 0x70 and 0xcc + PORT_CONFSETTING( 0x6f, "Too Low" ) + PORT_CONFSETTING( 0x70, "Lowest Allowed" ) + PORT_CONFSETTING( 0x80, "Normal" ) // for some arbitrary definition of "normal" + PORT_CONFSETTING( 0xcb, "Highest Allowed" ) + PORT_CONFSETTING( 0xcc, "Too High" ) + + PORT_START("AN6") + PORT_CONFNAME( 0xff, 0x00, "Battery Power Level" ) + // Yes, higher values mean lower voltages. + // I think this is opposite to how the RAM battery voltmeter works. + // The weird granularity here is due to the buggy implementation of the + // test in the test mode; all 7V values should LED flash, but some don't. + PORT_CONFSETTING( 0x00, "9V (Normal)" ) // for some arbitrary definition of "normal" + PORT_CONFSETTING( 0x4b, "9V (Lowest Allowed)" ) + PORT_CONFSETTING( 0x67, "7V (Highest Allowed Without LED Flash)" ) + PORT_CONFSETTING( 0x6b, "7V (Lowest Allowed Without LED Flash)" ) + PORT_CONFSETTING( 0x6c, "7V (Highest Allowed With LED Flash)" ) + PORT_CONFSETTING( 0x6f, "7V (Lowest Allowed With LED Flash)" ) + PORT_CONFSETTING( 0x70, "Less Than 7V" ) INPUT_PORTS_END void yamaha_dx100_state::dx100(machine_config &config) { HD6303X(config, m_maincpu, 7.15909_MHz_XTAL / 2); // HD6303XP m_maincpu->set_addrmap(AS_PROGRAM, &yamaha_dx100_state::mem_map); - m_maincpu->in_p2_cb().set([this]() -> u8 { return m_midi_in ? 0x04 : 0; }); - m_maincpu->in_p6_cb().set("adc", FUNC(m58990_device::eoc_r)).lshift(4); + m_maincpu->in_p2_cb().set_ioport("P2"); + m_maincpu->out_p2_cb().set_ioport("P2"); + m_maincpu->in_p6_cb().set([this]() -> u8 { + // TODO: The threshold here and the output values below should be double-checked. + u8 casplay = (m_cassette->input() > 0.009) ? 0x80 : 0; + // TODO: Need to verify if this bit is held on output or not + u8 casrec = m_port6_val & 0x40; + u8 adcval = ((u8) (m_adc->eoc_r() << 4)) & 0x10; + u8 port5line = (m_port6_val & 0x2f); + return casplay | casrec | adcval | port5line; + }); + m_maincpu->out_p6_cb().set([this](u8 val) { + m_port6_val = val; + m_cassette->output(((m_port6_val & 0x40) != 0) ? -1.0 : 1.0); + }); + m_maincpu->in_p5_cb().set([this]() -> u8 { + u8 line = m_port6_val & 0x2f; + // TODO: figure out how the /G2A and /G2B pins are connected + if ((line & 0x20) != 0) + return 0x00; + return (u8) (m_keysbuttons[line]->read() & 0xff); + }); m_maincpu->out_ser_tx_cb().set("mdout", FUNC(midi_port_device::write_txd)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // TC5518BPL + CR2032T battery - m58990_device &adc(M58990(config, "adc", 7.15909_MHz_XTAL / 8)); // M58990P-1 (clocked by E) - adc.in_callback<5>().set_constant(0x80); // "CNG RAM BATTERY!" displayed unless value is between 0x70 and 0xCC + M58990(config, m_adc, 7.15909_MHz_XTAL / 8); // M58990P-1 (clocked by E) + m_adc->in_callback<0>().set_ioport("AN0"); // pitch wheel + m_adc->in_callback<1>().set_ioport("AN1"); // mod wheel + m_adc->in_callback<2>().set_ioport("AN2"); // breath controller + m_adc->in_callback<3>().set_ioport("AN3"); // data entry slider + m_adc->in_callback<5>().set_ioport("AN5"); // internal RAM battery voltmeter + m_adc->in_callback<6>().set_ioport("AN6"); // battery power voltmeter CLOCK(config, "subclock", 500_kHz_XTAL).signal_handler().set(FUNC(yamaha_dx100_state::p22_w)); @@ -116,14 +618,14 @@ screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ screen.set_screen_update("lcdc", FUNC(hd44780_device::screen_update)); - screen.set_size(6*16+1, 10*2+1); + screen.set_size(6*16+1, 10*1+1); screen.set_visarea_full(); screen.set_palette("palette"); PALETTE(config, "palette", FUNC(yamaha_dx100_state::palette_init), 3); hd44780_device &lcdc(HD44780(config, "lcdc", 0)); // HD44780RA00 - lcdc.set_lcd_size(2, 16); + lcdc.set_lcd_size(1, 16); lcdc.set_pixel_update_cb(FUNC(yamaha_dx100_state::lcd_pixel_update)); SPEAKER(config, "lspeaker").front_left(); @@ -132,6 +634,12 @@ ym2164_device &ymsnd(YM2164(config, "ymsnd", 7.15909_MHz_XTAL / 2)); // with YM3014 DAC ymsnd.add_route(0, "lspeaker", 0.60); ymsnd.add_route(1, "rspeaker", 0.60); + + CASSETTE(config, m_cassette); + m_cassette->set_default_state(CASSETTE_STOPPED); + m_cassette->set_interface("ymdx100_cass"); + + config.set_default_layout(layout_dx100); } ROM_START(dx100) @@ -141,4 +649,5 @@ } // anonymous namespace -SYST(1985, dx100, 0, 0, dx100, dx100, yamaha_dx100_state, empty_init, "Yamaha", "DX100 Digital Programmable Algorithm Synthesizer", MACHINE_IS_SKELETON) +SYST(1985, dx100, 0, 0, dx100, dx100, yamaha_dx100_state, empty_init, "Yamaha", "DX100 Digital Programmable Algorithm Synthesizer", MACHINE_IMPERFECT_SOUND) + diff -Nru mame-0.250+dfsg.1/src/mame/yamaha/ymdx9.cpp mame-0.251+dfsg.1/src/mame/yamaha/ymdx9.cpp --- mame-0.250+dfsg.1/src/mame/yamaha/ymdx9.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/yamaha/ymdx9.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -159,6 +159,14 @@ * @return uint8_t The value read from the port. */ uint8_t p1_r(offs_t offset); + + /** + * @brief Handle a read from the synth's IO Port 2. + * This function is used to handle incoming serial data. + * @param offset The offset into the memory mapped region being read. + * @return uint8_t The value read from the port. + */ + uint8_t p2_r(offs_t offset); }; @@ -242,6 +250,7 @@ // Unlike the DX7 only IO port 1 is used. // The direction flags of other ports are set, however they are never read, or written. m_maincpu->in_p1_cb().set(FUNC(yamaha_dx9_state::p1_r)); + m_maincpu->in_p2_cb().set(FUNC(yamaha_dx9_state::p2_r)); m_maincpu->out_p1_cb().set(FUNC(yamaha_dx9_state::p1_w)); NVRAM(config, "ram1", nvram_device::DEFAULT_ALL_0); @@ -255,7 +264,7 @@ m_adc->in_callback<4>().set_constant(0x80); // Configure MIDI. - auto &midiclock(CLOCK(config, "midiclock", 500_kHz_XTAL)); + auto &midiclock(CLOCK(config, "midiclock", 500_kHz_XTAL / 2)); midiclock.signal_handler().set(FUNC(yamaha_dx9_state::midiclock_w)); MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(FUNC(yamaha_dx9_state::midi_r)); @@ -324,6 +333,15 @@ } +/** + * yamaha_dx9_state::p2_r + */ +uint8_t yamaha_dx9_state::p2_r(offs_t offset) +{ + return m_rx_data << 3; +} + + /** * yamaha_dx9_state::p1_w */ diff -Nru mame-0.250+dfsg.1/src/mame/yamaha/ympsr16.cpp mame-0.251+dfsg.1/src/mame/yamaha/ympsr16.cpp --- mame-0.250+dfsg.1/src/mame/yamaha/ympsr16.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/yamaha/ympsr16.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -10,6 +10,15 @@ paired with the YM3419AD (XE193A00) or YM3419BF (XF026A00) RYP7 rhythm generator, which has its own external ROM. + pss-680/780 are same machine, 780 is just different main rom and cosmetic changes. + Mainboard: XE421 TCMK-19EHB + IC1 YM3420B QFP100 OPU + IC2 YM3419B QFP64 Drum "rompler" + IC3 XE405B0-070 DIP32 ROM (rompler) + IC4 XG503B0-132 DIP32 ROM (main program) + IC6 TC5565APL-12 DIP28 8KB SRAM + IC7 XE415AO QFP100 Custom ? + *******************************************************************************/ #include "emu.h" @@ -167,9 +176,18 @@ ROM_LOAD("xe405b0-070.ic3", 0x00000, 0x40000, CRC(53336c52) SHA1(6bcad44fc93cfa5cd603cf24adfd736a911d3509)) // 32-pin mask ROM ROM_END +ROM_START(pss780) + ROM_REGION(0x40000, "program", 0) + ROM_LOAD("xg503b0-132.ic4", 0x00000, 0x40000, CRC(0c055206) SHA1(33cc3f4ab27cf6e5068627625f6ab236209ad776)) // 32-pin mask ROM + + ROM_REGION(0x40000, "waves", 0) + ROM_LOAD("xe405b0-070.ic3", 0x00000, 0x40000, CRC(53336c52) SHA1(6bcad44fc93cfa5cd603cf24adfd736a911d3509)) // 32-pin mask ROM +ROM_END + } // anonymous namespace -SYST(1988, psr16, 0, 0, psr16, psr16, yamaha_psr16_state, empty_init, "Yamaha", "PSR-16", MACHINE_IS_SKELETON) -SYST(1988, psr36, 0, 0, psr36, psr16, yamaha_psr16_state, empty_init, "Yamaha", "PSR-36", MACHINE_IS_SKELETON) -SYST(1988, pss480, 0, 0, pss680, psr16, yamaha_psr16_state, empty_init, "Yamaha", "PSS-480 / PSS-580", MACHINE_IS_SKELETON) -SYST(1988, pss680, 0, 0, pss680, psr16, yamaha_psr16_state, empty_init, "Yamaha", "PSS-680", MACHINE_IS_SKELETON) +SYST(1988, psr16, 0, 0, psr16, psr16, yamaha_psr16_state, empty_init, "Yamaha", "PSR-16", MACHINE_IS_SKELETON) +SYST(1988, psr36, 0, 0, psr36, psr16, yamaha_psr16_state, empty_init, "Yamaha", "PSR-36", MACHINE_IS_SKELETON) +SYST(1988, pss480, 0, 0, pss680, psr16, yamaha_psr16_state, empty_init, "Yamaha", "PSS-480 / PSS-580", MACHINE_IS_SKELETON) +SYST(1988, pss680, 0, 0, pss680, psr16, yamaha_psr16_state, empty_init, "Yamaha", "PSS-680", MACHINE_IS_SKELETON) +SYST(1989, pss780, pss680, 0, pss680, psr16, yamaha_psr16_state, empty_init, "Yamaha", "PSS-780", MACHINE_IS_SKELETON) diff -Nru mame-0.250+dfsg.1/src/mame/zaccaria/nl_zac1b11142.cpp mame-0.251+dfsg.1/src/mame/zaccaria/nl_zac1b11142.cpp --- mame-0.250+dfsg.1/src/mame/zaccaria/nl_zac1b11142.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/zaccaria/nl_zac1b11142.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Vas Crabb, Couriersud #include "netlist/devices/net_lib.h" diff -Nru mame-0.250+dfsg.1/src/mame/zaccaria/nl_zac1b11142.h mame-0.251+dfsg.1/src/mame/zaccaria/nl_zac1b11142.h --- mame-0.250+dfsg.1/src/mame/zaccaria/nl_zac1b11142.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/zaccaria/nl_zac1b11142.h 2022-12-29 14:20:09.000000000 +0000 @@ -1,4 +1,4 @@ -// license:CC0 +// license:CC0-1.0 // copyright-holders:Vas Crabb #ifndef MAME_AUDIO_NL_ZAC1B11142_H #define MAME_AUDIO_NL_ZAC1B11142_H diff -Nru mame-0.250+dfsg.1/src/mame/zaccaria/zaccaria.h mame-0.251+dfsg.1/src/mame/zaccaria/zaccaria.h --- mame-0.250+dfsg.1/src/mame/zaccaria/zaccaria.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/zaccaria/zaccaria.h 2022-12-29 14:20:09.000000000 +0000 @@ -40,6 +40,8 @@ DECLARE_WRITE_LINE_MEMBER(nmi_mask_w); void videoram_w(offs_t offset, uint8_t data); void attributes_w(offs_t offset, uint8_t data); + uint8_t read_attr(offs_t offset, int which); + void update_colscroll(); DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w); DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w); void dsw_sel_w(uint8_t data); diff -Nru mame-0.250+dfsg.1/src/mame/zaccaria/zaccaria_v.cpp mame-0.251+dfsg.1/src/mame/zaccaria/zaccaria_v.cpp --- mame-0.250+dfsg.1/src/mame/zaccaria/zaccaria_v.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/mame/zaccaria/zaccaria_v.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -111,11 +111,11 @@ TILE_GET_INFO_MEMBER(zaccaria_state::get_tile_info) { - uint8_t attr = m_videoram[tile_index + 0x400]; - tileinfo.set(0, - m_videoram[tile_index] + ((attr & 0x03) << 8), - ((attr & 0x0c) >> 2) + ((m_attributesram[2 * (tile_index % 32) + 1] & 0x07) << 2), - 0); + uint8_t attr = m_videoram[tile_index | 0x400]; + uint16_t code = m_videoram[tile_index] | ((attr & 0x03) << 8); + attr = (attr & 0x0c) >> 2 | (read_attr(tile_index, 1) & 0x07) << 2; + + tileinfo.set(0, code, attr, 0); } @@ -149,21 +149,38 @@ void zaccaria_state::attributes_w(offs_t offset, uint8_t data) { - if (offset & 1) + uint8_t prev = m_attributesram[offset]; + m_attributesram[offset] = data; + + if (prev != data) { - if (m_attributesram[offset] != data) - for (int i = offset / 2; i < 0x400; i += 32) - m_bg_tilemap->mark_tile_dirty(i); + if (offset & 1) + { + uint8_t mask = flip_screen_x() ? 0x1f : 0; + for (int i = offset / 2; i < 0x400; i += 0x20) + m_bg_tilemap->mark_tile_dirty(i ^ mask); + } + else + update_colscroll(); } - else - m_bg_tilemap->set_scrolly(offset / 2,data); +} - m_attributesram[offset] = data; +uint8_t zaccaria_state::read_attr(offs_t offset, int which) +{ + if (flip_screen_x()) offset ^= 0x1f; + return m_attributesram[(offset << 1 & 0x3f) | (which & 1)]; +} + +void zaccaria_state::update_colscroll() +{ + for (int i = 0; i < 0x20; i++) + m_bg_tilemap->set_scrolly(i, read_attr(i, 0)); } WRITE_LINE_MEMBER(zaccaria_state::flip_screen_x_w) { flip_screen_x_set(state); + update_colscroll(); } WRITE_LINE_MEMBER(zaccaria_state::flip_screen_y_w) @@ -196,15 +213,10 @@ */ void zaccaria_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t *spriteram, int color, int section) { - int o1 = 1,o2 = 2; - - if (section) - { - o1 = 2; - o2 = 1; - } + int o1 = 1 + section; + int o2 = 2 - section; - for (int offs = 0;offs < 0x20;offs += 4) + for (int offs = 0; offs < 0x20; offs += 4) { int sx = spriteram[offs + 3] + 1; int sy = 242 - spriteram[offs]; @@ -233,7 +245,7 @@ uint32_t zaccaria_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0); + m_bg_tilemap->draw(screen, bitmap, cliprect); // 3 layers of sprites, each with their own palette and priorities // Not perfect yet, does spriteram(1) layer have a priority bit somewhere? diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/debugqt.cpp mame-0.251+dfsg.1/src/osd/modules/debugger/debugqt.cpp --- mame-0.250+dfsg.1/src/osd/modules/debugger/debugqt.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/debugqt.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -45,7 +45,7 @@ namespace { -class debug_qt : public osd_module, public debug_module +class debug_qt : public osd_module, public debug_module, protected osd::debugger::qt::DebuggerQt #if defined(_WIN32) && !defined(SDLMAME_WIN32) , public QAbstractNativeEventFilter #endif @@ -61,12 +61,12 @@ virtual ~debug_qt() { } - virtual int init(const osd_options &options) { return 0; } - virtual void exit(); + virtual int init(const osd_options &options) override { return 0; } + virtual void exit() override; - virtual void init_debugger(running_machine &machine); - virtual void wait_for_debugger(device_t &device, bool firststop); - virtual void debugger_update(); + virtual void init_debugger(running_machine &machine) override; + virtual void wait_for_debugger(device_t &device, bool firststop) override; + virtual void debugger_update() override; #if defined(_WIN32) && !defined(SDLMAME_WIN32) virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *) override { @@ -75,6 +75,8 @@ } #endif + virtual running_machine &machine() const override { return *m_machine; } + private: void configuration_load(config_type which_type, config_level level, util::xml::data_node const *parentnode); void configuration_save(config_type which_type, util::xml::data_node *parentnode); @@ -102,13 +104,8 @@ void debug_qt::exit() { // If you've done a hard reset, clear out existing widgets - if (m_mainwindow) - { - m_mainwindow->setExiting(); - QApplication::closeAllWindows(); - qApp->processEvents(QEventLoop::AllEvents, 1); - m_mainwindow = nullptr; - } + emit exitDebugger(); + m_mainwindow = nullptr; } @@ -145,7 +142,7 @@ // Dialog initialization if (!m_mainwindow) { - m_mainwindow = new osd::debugger::qt::MainWindow(*m_machine); + m_mainwindow = new osd::debugger::qt::MainWindow(*this); if (m_config) { load_window_configurations(*m_config->get_first_child()); @@ -155,11 +152,7 @@ } // Ensure all top level widgets are visible & bring main window to front - foreach (QWidget *widget, QApplication::topLevelWidgets()) - { - if (widget->isWindow() && (widget->windowType() == Qt::Window)) - widget->show(); - } + emit showAllWindows(); if (firststop) { @@ -167,33 +160,13 @@ m_mainwindow->raise(); } - // Set the main window to display the proper cpu + // Set the main window to display the proper CPU m_mainwindow->setProcessor(&device); // Run our own QT event loop osd_sleep(osd_ticks_per_second() / 1000 * 50); qApp->processEvents(QEventLoop::AllEvents, 1); - // Refresh everyone if requested - if (m_mainwindow->wantsRefresh()) - { - QWidgetList allWidgets = qApp->allWidgets(); - for (int i = 0; i < allWidgets.length(); i++) - allWidgets[i]->update(); - m_mainwindow->clearRefreshFlag(); - } - - // Hide all top level widgets if requested - if (m_mainwindow->wantsHide()) - { - foreach (QWidget *widget, QApplication::topLevelWidgets()) - { - if (widget->isWindow() && (widget->windowType() == Qt::Window)) - widget->hide(); - } - m_mainwindow->clearHideFlag(); - } - #if defined(_WIN32) && !defined(SDLMAME_WIN32) winwindow_update_cursor_state(*m_machine); // make sure the cursor isn't hidden while in debugger #endif @@ -232,18 +205,7 @@ { // We only save system configuration for now if ((config_type::SYSTEM == which_type) && parentnode) - { - // Loop over all the open windows - for (QWidget *widget : QApplication::topLevelWidgets()) - { - if (!widget->isWindow() || (widget->windowType() != Qt::Window)) - continue; - - osd::debugger::qt::WindowQt *const win = dynamic_cast(widget); - if (win) - win->saveConfiguration(*parentnode); - } - } + emit saveConfiguration(*parentnode); } @@ -251,46 +213,33 @@ { for (util::xml::data_node const *wnode = parentnode.get_child(osd::debugger::NODE_WINDOW); wnode; wnode = wnode->get_next_sibling(osd::debugger::NODE_WINDOW)) { - std::unique_ptr cfg; osd::debugger::qt::WindowQt *win = nullptr; switch (wnode->get_attribute_int(osd::debugger::ATTR_WINDOW_TYPE, -1)) { case osd::debugger::WINDOW_TYPE_CONSOLE: - cfg = std::make_unique(); + win = m_mainwindow; break; case osd::debugger::WINDOW_TYPE_MEMORY_VIEWER: - cfg = std::make_unique(); - win = new osd::debugger::qt::MemoryWindow(*m_machine); + win = new osd::debugger::qt::MemoryWindow(*this); break; case osd::debugger::WINDOW_TYPE_DISASSEMBLY_VIEWER: - cfg = std::make_unique(); - win = new osd::debugger::qt::DasmWindow(*m_machine); + win = new osd::debugger::qt::DasmWindow(*this); break; case osd::debugger::WINDOW_TYPE_ERROR_LOG_VIEWER: - cfg = std::make_unique(); - win = new osd::debugger::qt::LogWindow(*m_machine); + win = new osd::debugger::qt::LogWindow(*this); break; case osd::debugger::WINDOW_TYPE_POINTS_VIEWER: - cfg = std::make_unique(); - win = new osd::debugger::qt::BreakpointsWindow(*m_machine); + win = new osd::debugger::qt::BreakpointsWindow(*this); break; case osd::debugger::WINDOW_TYPE_DEVICES_VIEWER: - cfg = std::make_unique(); - win = new osd::debugger::qt::DevicesWindow(*m_machine); + win = new osd::debugger::qt::DevicesWindow(*this); break; case osd::debugger::WINDOW_TYPE_DEVICE_INFO_VIEWER: - cfg = std::make_unique(); - win = new osd::debugger::qt::DeviceInformationWindow(*m_machine); + win = new osd::debugger::qt::DeviceInformationWindow(*this); break; } - if (cfg) - { - cfg->recoverFromXmlNode(*wnode); - if (win) - cfg->applyToQWidget(win); - else if (osd::debugger::WINDOW_TYPE_CONSOLE == cfg->m_type) - cfg->applyToQWidget(m_mainwindow); - } + if (win) + win->restoreConfiguration(*wnode); } } diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/osx/debugcommandhistory.h mame-0.251+dfsg.1/src/osd/modules/debugger/osx/debugcommandhistory.h --- mame-0.250+dfsg.1/src/osd/modules/debugger/osx/debugcommandhistory.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/osx/debugcommandhistory.h 2022-12-29 14:20:09.000000000 +0000 @@ -8,6 +8,8 @@ #import "debugosx.h" +#include "util/utilfwd.h" + #import @@ -32,4 +34,7 @@ - (void)reset; - (void)clear; +- (void)saveConfigurationToNode:(util::xml::data_node *)node; +- (void)restoreConfigurationFromNode:(util::xml::data_node const *)node; + @end diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/osx/debugcommandhistory.mm mame-0.251+dfsg.1/src/osd/modules/debugger/osx/debugcommandhistory.mm --- mame-0.250+dfsg.1/src/osd/modules/debugger/osx/debugcommandhistory.mm 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/osx/debugcommandhistory.mm 2022-12-29 14:20:09.000000000 +0000 @@ -12,6 +12,8 @@ #import "debugcommandhistory.h" +#include "util/xmlfile.h" + @implementation MAMEDebugCommandHistory @@ -54,9 +56,9 @@ - (void)add:(NSString *)entry { if (([history count] == 0) || ![[history objectAtIndex:0] isEqualToString:entry]) { - [history insertObject:entry atIndex:0]; - while ([history count] > length) + while ([history count] >= length) [history removeLastObject]; + [history insertObject:entry atIndex:0]; } position = 0; } @@ -110,4 +112,30 @@ [history removeAllObjects]; } + +- (void)saveConfigurationToNode:(util::xml::data_node *)node { + util::xml::data_node *const hist = node->add_child(osd::debugger::NODE_WINDOW_HISTORY, nullptr); + if (hist) { + for (NSInteger i = [history count]; 0 < i; --i) + hist->add_child(osd::debugger::NODE_HISTORY_ITEM, [[history objectAtIndex:(i - 1)] UTF8String]); + } +} + + +- (void)restoreConfigurationFromNode:(util::xml::data_node const *)node { + [self clear]; + util::xml::data_node const *const hist = node->get_child(osd::debugger::NODE_WINDOW_HISTORY); + if (hist) { + util::xml::data_node const *item = hist->get_child(osd::debugger::NODE_HISTORY_ITEM); + while (item) { + if (item->get_value() && *item->get_value()) { + while ([history count] >= length) + [history removeLastObject]; + [history insertObject:[NSString stringWithUTF8String:item->get_value()] atIndex:0]; + } + item = item->get_next_sibling(osd::debugger::NODE_HISTORY_ITEM); + } + } +} + @end diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/osx/debugconsole.mm mame-0.251+dfsg.1/src/osd/modules/debugger/osx/debugconsole.mm --- mame-0.250+dfsg.1/src/osd/modules/debugger/osx/debugconsole.mm 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/osx/debugconsole.mm 2022-12-29 14:20:09.000000000 +0000 @@ -404,8 +404,11 @@ win = [[MAMEDevicesViewer alloc] initWithMachine:*machine console:self]; break; case osd::debugger::WINDOW_TYPE_DEVICE_INFO_VIEWER: - // FIXME: needs device info on init, make another variant - //win = [[MAMEDeviceInfoViewer alloc] initWithMachine:*machine console:self]; + { + // FIXME: feels like a leaky abstraction, but device is needed for init + device_t *const device = machine->root_device().subdevice(node->get_attribute_string(osd::debugger::ATTR_WINDOW_DEVICE_TAG, ":")); + win = [[MAMEDeviceInfoViewer alloc] initWithDevice:(device ? *device : machine->root_device()) machine:*machine console:self]; + } break; default: break; @@ -437,6 +440,7 @@ : NSMaxY([[[dasmSplit subviews] objectAtIndex:0] frame])); } [dasmView saveConfigurationToNode:node]; + [history saveConfigurationToNode:node]; } @@ -451,6 +455,7 @@ ofDividerAtIndex:0]; } [dasmView restoreConfigurationFromNode:node]; + [history restoreConfigurationFromNode:node]; } diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/osx/debugwindowhandler.mm mame-0.251+dfsg.1/src/osd/modules/debugger/osx/debugwindowhandler.mm --- mame-0.250+dfsg.1/src/osd/modules/debugger/osx/debugwindowhandler.mm 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/osx/debugwindowhandler.mm 2022-12-29 14:20:09.000000000 +0000 @@ -494,6 +494,7 @@ - (void)saveConfigurationToNode:(util::xml::data_node *)node { [super saveConfigurationToNode:node]; node->add_child(osd::debugger::NODE_WINDOW_EXPRESSION, [[self expression] UTF8String]); + [history saveConfigurationToNode:node]; } @@ -502,6 +503,7 @@ util::xml::data_node const *const expr = node->get_child(osd::debugger::NODE_WINDOW_EXPRESSION); if (expr && expr->get_value()) [self setExpression:[NSString stringWithUTF8String:expr->get_value()]]; + [history restoreConfigurationFromNode:node]; } @end diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/osx/deviceinfoviewer.mm mame-0.251+dfsg.1/src/osd/modules/debugger/osx/deviceinfoviewer.mm --- mame-0.250+dfsg.1/src/osd/modules/debugger/osx/deviceinfoviewer.mm 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/osx/deviceinfoviewer.mm 2022-12-29 14:20:09.000000000 +0000 @@ -238,6 +238,7 @@ - (void)saveConfigurationToNode:(util::xml::data_node *)node { [super saveConfigurationToNode:node]; node->set_attribute_int(osd::debugger::ATTR_WINDOW_TYPE, osd::debugger::WINDOW_TYPE_DEVICE_INFO_VIEWER); + node->set_attribute(osd::debugger::ATTR_WINDOW_DEVICE_TAG, device->tag()); } @end diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/breakpointswindow.cpp mame-0.251+dfsg.1/src/osd/modules/debugger/qt/breakpointswindow.cpp --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/breakpointswindow.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/breakpointswindow.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -17,8 +17,8 @@ namespace osd::debugger::qt { -BreakpointsWindow::BreakpointsWindow(running_machine &machine, QWidget *parent) : - WindowQt(machine, nullptr) +BreakpointsWindow::BreakpointsWindow(DebuggerQt &debugger, QWidget *parent) : + WindowQt(debugger, nullptr) { setWindowTitle("Debug: All Breakpoints"); @@ -83,6 +83,20 @@ } +void BreakpointsWindow::restoreConfiguration(util::xml::data_node const &node) +{ + WindowQt::restoreConfiguration(node); + + auto const type = node.get_attribute_int(ATTR_WINDOW_POINTS_TYPE, -1); + QActionGroup *typeGroup = findChild("typegroup"); + if ((0 <= type) && (typeGroup->actions().size() > type)) + typeGroup->actions()[type]->trigger(); + + m_breakpointsView->restoreConfigurationFromNode(node); + +} + + void BreakpointsWindow::saveConfigurationToNode(util::xml::data_node &node) { WindowQt::saveConfigurationToNode(node); @@ -105,6 +119,8 @@ break; } } + + m_breakpointsView->saveConfigurationToNode(node); } @@ -136,25 +152,4 @@ layout->addWidget(m_breakpointsView); } - - -//========================================================================= -// BreakpointsWindowQtConfig -//========================================================================= -void BreakpointsWindowQtConfig::applyToQWidget(QWidget* widget) -{ - WindowQtConfig::applyToQWidget(widget); - BreakpointsWindow *window = dynamic_cast(widget); - - QActionGroup *typeGroup = window->findChild("typegroup"); - typeGroup->actions()[m_bwType]->trigger(); -} - - -void BreakpointsWindowQtConfig::recoverFromXmlNode(util::xml::data_node const &node) -{ - WindowQtConfig::recoverFromXmlNode(node); - m_bwType = node.get_attribute_int(ATTR_WINDOW_POINTS_TYPE, m_bwType); -} - } // namespace osd::debugger::qt diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/breakpointswindow.h mame-0.251+dfsg.1/src/osd/modules/debugger/qt/breakpointswindow.h --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/breakpointswindow.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/breakpointswindow.h 2022-12-29 14:20:09.000000000 +0000 @@ -17,9 +17,11 @@ Q_OBJECT public: - BreakpointsWindow(running_machine &machine, QWidget *parent = nullptr); + BreakpointsWindow(DebuggerQt &debugger, QWidget *parent = nullptr); virtual ~BreakpointsWindow(); + virtual void restoreConfiguration(util::xml::data_node const &node) override; + protected: virtual void saveConfigurationToNode(util::xml::data_node &node) override; @@ -31,28 +33,6 @@ DebuggerView *m_breakpointsView; }; - -//========================================================================= -// A way to store the configuration of a window long enough to read/write. -//========================================================================= -class BreakpointsWindowQtConfig : public WindowQtConfig -{ -public: - BreakpointsWindowQtConfig() : - WindowQtConfig(WINDOW_TYPE_POINTS_VIEWER), - m_bwType(0) - { - } - - ~BreakpointsWindowQtConfig() {} - - // Settings - int m_bwType; - - void applyToQWidget(QWidget *widget); - void recoverFromXmlNode(util::xml::data_node const &node); -}; - } // namespace osd::debugger::qt #endif // MAME_DEBUGGER_QT_BREAKPOINTSWINDOW_H diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/dasmwindow.cpp mame-0.251+dfsg.1/src/osd/modules/debugger/qt/dasmwindow.cpp --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/dasmwindow.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/dasmwindow.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -10,6 +10,7 @@ #include "util/xmlfile.h" +#include #include #include #include @@ -19,8 +20,9 @@ namespace osd::debugger::qt { -DasmWindow::DasmWindow(running_machine &machine, QWidget *parent) : - WindowQt(machine, nullptr) +DasmWindow::DasmWindow(DebuggerQt &debugger, QWidget *parent) : + WindowQt(debugger, nullptr), + m_inputHistory() { setWindowTitle("Debug: Disassembly View"); @@ -41,6 +43,8 @@ // The input edit m_inputEdit = new QLineEdit(topSubFrame); connect(m_inputEdit, &QLineEdit::returnPressed, this, &DasmWindow::expressionSubmitted); + connect(m_inputEdit, &QLineEdit::textEdited, this, &DasmWindow::expressionEdited); + m_inputEdit->installEventFilter(this); // The cpu combo box m_cpuComboBox = new QComboBox(topSubFrame); @@ -124,6 +128,39 @@ } +void DasmWindow::restoreConfiguration(util::xml::data_node const &node) +{ + WindowQt::restoreConfiguration(node); + + debug_view_disasm &dasmview = *m_dasmView->view(); + + auto const cpu = node.get_attribute_int(ATTR_WINDOW_DISASSEMBLY_CPU, m_dasmView->sourceIndex()); + if ((0 <= cpu) && (m_cpuComboBox->count() > cpu)) + m_cpuComboBox->setCurrentIndex(cpu); + + auto const rightbar = node.get_attribute_int(ATTR_WINDOW_DISASSEMBLY_RIGHT_COLUMN, dasmview.right_column()); + QActionGroup *const rightBarGroup = findChild("rightbargroup"); + for (QAction *action : rightBarGroup->actions()) + { + if (action->data().toInt() == rightbar) + { + action->trigger(); + break; + } + } + + util::xml::data_node const *const expression = node.get_child(NODE_WINDOW_EXPRESSION); + if (expression && expression->get_value()) + { + m_inputEdit->setText(QString::fromUtf8(expression->get_value())); + expressionSubmitted(); + } + + m_dasmView->restoreConfigurationFromNode(node); + m_inputHistory.restoreConfigurationFromNode(node); +} + + void DasmWindow::saveConfigurationToNode(util::xml::data_node &node) { WindowQt::saveConfigurationToNode(node); @@ -134,6 +171,53 @@ node.set_attribute_int(ATTR_WINDOW_DISASSEMBLY_CPU, m_dasmView->sourceIndex()); node.set_attribute_int(ATTR_WINDOW_DISASSEMBLY_RIGHT_COLUMN, dasmview.right_column()); node.add_child(NODE_WINDOW_EXPRESSION, dasmview.expression()); + + m_dasmView->saveConfigurationToNode(node); + m_inputHistory.saveConfigurationToNode(node); +} + + +// Used to intercept the user hitting the up arrow in the input widget +bool DasmWindow::eventFilter(QObject *obj, QEvent *event) +{ + // Only filter keypresses + if (event->type() != QEvent::KeyPress) + return QObject::eventFilter(obj, event); + + QKeyEvent const &keyEvent = *static_cast(event); + + // Catch up & down keys + if (keyEvent.key() == Qt::Key_Escape) + { + m_inputEdit->setText(QString::fromUtf8(m_dasmView->view()->expression())); + m_inputEdit->selectAll(); + m_inputHistory.reset(); + return true; + } + else if (keyEvent.key() == Qt::Key_Up) + { + QString const *const hist = m_inputHistory.previous(m_inputEdit->text()); + if (hist) + { + m_inputEdit->setText(*hist); + m_inputEdit->setSelection(hist->size(), 0); + } + return true; + } + else if (keyEvent.key() == Qt::Key_Down) + { + QString const *const hist = m_inputHistory.next(m_inputEdit->text()); + if (hist) + { + m_inputEdit->setText(*hist); + m_inputEdit->setSelection(hist->size(), 0); + } + return true; + } + else + { + return QObject::eventFilter(obj, event); + } } @@ -150,8 +234,18 @@ void DasmWindow::expressionSubmitted() { const QString expression = m_inputEdit->text(); - m_dasmView->view()->set_expression(expression.toLocal8Bit().data()); - m_dasmView->viewport()->update(); + m_dasmView->view()->set_expression(expression.toUtf8().data()); + m_inputEdit->selectAll(); + + // Add history + if (!expression.isEmpty()) + m_inputHistory.add(expression); +} + + +void DasmWindow::expressionEdited(QString const &text) +{ + m_inputHistory.edit(); } @@ -181,8 +275,6 @@ m_machine.debug_view().update_all(); m_machine.debugger().refresh_display(); } - - refreshAll(); } @@ -205,8 +297,6 @@ m_machine.debugger().refresh_display(); } } - - refreshAll(); } @@ -284,34 +374,4 @@ } } - -//========================================================================= -// DasmWindowQtConfig -//========================================================================= - -void DasmWindowQtConfig::applyToQWidget(QWidget *widget) -{ - WindowQtConfig::applyToQWidget(widget); - DasmWindow *window = dynamic_cast(widget); - QComboBox *cpu = window->findChild("cpu"); - cpu->setCurrentIndex(m_cpu); - - QActionGroup *const rightBarGroup = window->findChild("rightbargroup"); - for (QAction *action : rightBarGroup->actions()) - { - if (action->data().toInt() == m_rightBar) - { - action->trigger(); - break; - } - } -} - -void DasmWindowQtConfig::recoverFromXmlNode(util::xml::data_node const &node) -{ - WindowQtConfig::recoverFromXmlNode(node); - m_cpu = node.get_attribute_int(ATTR_WINDOW_DISASSEMBLY_CPU, m_cpu); - m_rightBar = node.get_attribute_int(ATTR_WINDOW_DISASSEMBLY_RIGHT_COLUMN, m_rightBar); -} - } // namespace osd::debugger::qt diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/dasmwindow.h mame-0.251+dfsg.1/src/osd/modules/debugger/qt/dasmwindow.h --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/dasmwindow.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/dasmwindow.h 2022-12-29 14:20:09.000000000 +0000 @@ -22,15 +22,21 @@ Q_OBJECT public: - DasmWindow(running_machine &machine, QWidget *parent = nullptr); + DasmWindow(DebuggerQt &debugger, QWidget *parent = nullptr); virtual ~DasmWindow(); + virtual void restoreConfiguration(util::xml::data_node const &node) override; + protected: virtual void saveConfigurationToNode(util::xml::data_node &node) override; + // Used to intercept the user hitting the up arrow in the input widget + virtual bool eventFilter(QObject *obj, QEvent *event) override; + private slots: void cpuChanged(int index); void expressionSubmitted(); + void expressionEdited(QString const &text); void toggleBreakpointAtCursor(bool changedTo); void enableBreakpointAtCursor(bool changedTo); @@ -52,30 +58,9 @@ QAction *m_breakpointToggleAct; QAction *m_breakpointEnableAct; QAction *m_runToCursorAct; -}; - - -//========================================================================= -// A way to store the configuration of a window long enough to read/write. -//========================================================================= -class DasmWindowQtConfig : public WindowQtConfig -{ -public: - DasmWindowQtConfig() : - WindowQtConfig(WINDOW_TYPE_DISASSEMBLY_VIEWER), - m_cpu(0), - m_rightBar(0) - { - } - - ~DasmWindowQtConfig() {} - - // Settings - int m_cpu; - int m_rightBar; - void applyToQWidget(QWidget *widget); - void recoverFromXmlNode(util::xml::data_node const &node); + // Expression history + CommandHistory m_inputHistory; }; } // namespace osd::debugger::qt diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/debuggerview.cpp mame-0.251+dfsg.1/src/osd/modules/debugger/qt/debuggerview.cpp --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/debuggerview.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/debuggerview.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -3,8 +3,12 @@ #include "emu.h" #include "debuggerview.h" +#include "../xmlconfig.h" + #include "modules/lib/osdobj_common.h" +#include "xmlfile.h" + #include #include #include @@ -190,9 +194,43 @@ } } + +void DebuggerView::restoreConfigurationFromNode(util::xml::data_node const &node) +{ + if (m_view->cursor_supported()) + { + util::xml::data_node const *const selection = node.get_child(NODE_WINDOW_SELECTION); + if (selection) + { + debug_view_xy pos = m_view->cursor_position(); + m_view->set_cursor_visible(0 != selection->get_attribute_int(ATTR_SELECTION_CURSOR_VISIBLE, m_view->cursor_visible() ? 1 : 0)); + selection->get_attribute_int(ATTR_SELECTION_CURSOR_X, pos.x); + selection->get_attribute_int(ATTR_SELECTION_CURSOR_Y, pos.y); + m_view->set_cursor_position(pos); + } + } +} + + +void DebuggerView::saveConfigurationToNode(util::xml::data_node &node) +{ + if (m_view->cursor_supported()) + { + util::xml::data_node *const selection = node.add_child(NODE_WINDOW_SELECTION, nullptr); + if (selection) + { + debug_view_xy const pos = m_view->cursor_position(); + selection->set_attribute_int(ATTR_SELECTION_CURSOR_VISIBLE, m_view->cursor_visible() ? 1 : 0); + selection->set_attribute_int(ATTR_SELECTION_CURSOR_X, pos.x); + selection->set_attribute_int(ATTR_SELECTION_CURSOR_Y, pos.y); + } + } +} + + void DebuggerView::keyPressEvent(QKeyEvent* event) { - if (m_view == nullptr) + if (!m_view) return QWidget::keyPressEvent(event); Qt::KeyboardModifiers keyMods = QApplication::keyboardModifiers(); diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/debuggerview.h mame-0.251+dfsg.1/src/osd/modules/debugger/qt/debuggerview.h --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/debuggerview.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/debuggerview.h 2022-12-29 14:20:09.000000000 +0000 @@ -21,7 +21,7 @@ DebuggerView(debug_view_type type, running_machine &machine, QWidget *parent = nullptr); virtual ~DebuggerView(); - void paintEvent(QPaintEvent *event); + virtual void paintEvent(QPaintEvent *event) override; // Setters and accessors void setPreferBottom(bool pb) { m_preferBottom = pb; } @@ -29,13 +29,16 @@ template T *view() { return downcast(m_view); } int sourceIndex() const; + virtual void restoreConfigurationFromNode(util::xml::data_node const &node); + virtual void saveConfigurationToNode(util::xml::data_node &node); + signals: void updated(); protected: - void keyPressEvent(QKeyEvent *event) override; - void mousePressEvent(QMouseEvent *event) override; - void contextMenuEvent(QContextMenuEvent *event) override; + virtual void keyPressEvent(QKeyEvent *event) override; + virtual void mousePressEvent(QMouseEvent *event) override; + virtual void contextMenuEvent(QContextMenuEvent *event) override; virtual void addItemsToContextMenu(QMenu *menu); diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/deviceinformationwindow.cpp mame-0.251+dfsg.1/src/osd/modules/debugger/qt/deviceinformationwindow.cpp --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/deviceinformationwindow.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/deviceinformationwindow.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -12,8 +12,8 @@ namespace osd::debugger::qt { -DeviceInformationWindow::DeviceInformationWindow(running_machine &machine, device_t *device, QWidget *parent) : - WindowQt(machine, nullptr), +DeviceInformationWindow::DeviceInformationWindow(DebuggerQt &debugger, device_t *device, QWidget *parent) : + WindowQt(debugger, nullptr), m_device(device) { if (parent) @@ -32,6 +32,15 @@ } +void DeviceInformationWindow::restoreConfiguration(util::xml::data_node const &node) +{ + WindowQt::restoreConfiguration(node); + + auto const tag = node.get_attribute_string(ATTR_WINDOW_DEVICE_TAG, ":"); + set_device(tag); +} + + void DeviceInformationWindow::saveConfigurationToNode(util::xml::data_node &node) { WindowQt::saveConfigurationToNode(node); @@ -114,23 +123,4 @@ fill_device_information(); } - -//========================================================================= -// DeviceInformationWindowQtConfig -//========================================================================= - -void DeviceInformationWindowQtConfig::applyToQWidget(QWidget *widget) -{ - WindowQtConfig::applyToQWidget(widget); - DeviceInformationWindow *window = dynamic_cast(widget); - window->set_device(m_device_tag.c_str()); -} - - -void DeviceInformationWindowQtConfig::recoverFromXmlNode(util::xml::data_node const &node) -{ - WindowQtConfig::recoverFromXmlNode(node); - m_device_tag = node.get_attribute_string(ATTR_WINDOW_DEVICE_TAG, ":"); -} - } // namespace osd::debugger::qt diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/deviceinformationwindow.h mame-0.251+dfsg.1/src/osd/modules/debugger/qt/deviceinformationwindow.h --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/deviceinformationwindow.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/deviceinformationwindow.h 2022-12-29 14:20:09.000000000 +0000 @@ -18,11 +18,13 @@ Q_OBJECT public: - DeviceInformationWindow(running_machine &machine, device_t *device = nullptr, QWidget* parent=nullptr); + DeviceInformationWindow(DebuggerQt &debugger, device_t *device = nullptr, QWidget* parent=nullptr); virtual ~DeviceInformationWindow(); void set_device(const char *tag); + virtual void restoreConfiguration(util::xml::data_node const &node) override; + protected: virtual void saveConfigurationToNode(util::xml::data_node &node) override; @@ -32,28 +34,6 @@ void fill_device_information(); }; - - - -//========================================================================= -// A way to store the configuration of a window long enough to read/write. -//========================================================================= -class DeviceInformationWindowQtConfig : public WindowQtConfig -{ -public: - std::string m_device_tag; - - DeviceInformationWindowQtConfig() : - WindowQtConfig(WINDOW_TYPE_DEVICE_INFO_VIEWER) - { - } - - ~DeviceInformationWindowQtConfig() {} - - void applyToQWidget(QWidget *widget); - void recoverFromXmlNode(util::xml::data_node const &node); -}; - } // namespace osd::debugger::qt #endif // MAME_DEBUGGER_QT_DEVICEINFORMATIONWINDOW_H diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/deviceswindow.cpp mame-0.251+dfsg.1/src/osd/modules/debugger/qt/deviceswindow.cpp --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/deviceswindow.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/deviceswindow.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -113,9 +113,9 @@ -DevicesWindow::DevicesWindow(running_machine &machine, QWidget *parent) : - WindowQt(machine, nullptr), - m_devices_model(machine) +DevicesWindow::DevicesWindow(DebuggerQt &debugger, QWidget *parent) : + WindowQt(debugger, nullptr), + m_devices_model(debugger.machine()) { m_selected_device = nullptr; @@ -154,7 +154,7 @@ void DevicesWindow::activated(const QModelIndex &index) { device_t *dev = static_cast(index.internalPointer()); - (new DeviceInformationWindow(m_machine, dev, this))->show(); + (new DeviceInformationWindow(m_debugger, dev, this))->show(); } @@ -165,22 +165,4 @@ node.set_attribute_int(ATTR_WINDOW_TYPE, WINDOW_TYPE_DEVICES_VIEWER); } - - -//========================================================================= -// DevicesWindowQtConfig -//========================================================================= - -void DevicesWindowQtConfig::applyToQWidget(QWidget *widget) -{ - WindowQtConfig::applyToQWidget(widget); - // DevicesWindow *window = dynamic_cast(widget); -} - - -void DevicesWindowQtConfig::recoverFromXmlNode(util::xml::data_node const &node) -{ - WindowQtConfig::recoverFromXmlNode(node); -} - } // namespace osd::debugger::qt diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/deviceswindow.h mame-0.251+dfsg.1/src/osd/modules/debugger/qt/deviceswindow.h --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/deviceswindow.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/deviceswindow.h 2022-12-29 14:20:09.000000000 +0000 @@ -44,7 +44,7 @@ Q_OBJECT public: - DevicesWindow(running_machine &machine, QWidget *parent = nullptr); + DevicesWindow(DebuggerQt &debugger, QWidget *parent = nullptr); virtual ~DevicesWindow(); public slots: @@ -60,28 +60,6 @@ device_t *m_selected_device; }; - - - -//========================================================================= -// A way to store the configuration of a window long enough to read/write. -//========================================================================= -class DevicesWindowQtConfig : public WindowQtConfig -{ -public: - DevicesWindowQtConfig() : - WindowQtConfig(WINDOW_TYPE_DEVICES_VIEWER) - { - } - - ~DevicesWindowQtConfig() {} - - void buildFromQWidget(QWidget *widget); - void applyToQWidget(QWidget *widget); - void addToXmlDataNode(util::xml::data_node &node) const; - void recoverFromXmlNode(util::xml::data_node const &node); -}; - } // namespace osd::debugger::qt #endif // MAME_DEBUGGER_QT_DEVICESWINDOW_H diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/logwindow.cpp mame-0.251+dfsg.1/src/osd/modules/debugger/qt/logwindow.cpp --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/logwindow.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/logwindow.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -14,8 +14,8 @@ namespace osd::debugger::qt { -LogWindow::LogWindow(running_machine &machine, QWidget *parent) : - WindowQt(machine, nullptr) +LogWindow::LogWindow(DebuggerQt &debugger, QWidget *parent) : + WindowQt(debugger, nullptr) { setWindowTitle("Debug: Machine Log"); @@ -48,27 +48,21 @@ } -void LogWindow::saveConfigurationToNode(util::xml::data_node &node) +void LogWindow::restoreConfiguration(util::xml::data_node const &node) { - WindowQt::saveConfigurationToNode(node); + WindowQt::restoreConfiguration(node); - node.set_attribute_int(ATTR_WINDOW_TYPE, WINDOW_TYPE_ERROR_LOG_VIEWER); + m_logView->restoreConfigurationFromNode(node); } -//========================================================================= -// LogWindowQtConfig -//========================================================================= - -void LogWindowQtConfig::applyToQWidget(QWidget *widget) +void LogWindow::saveConfigurationToNode(util::xml::data_node &node) { - WindowQtConfig::applyToQWidget(widget); -} + WindowQt::saveConfigurationToNode(node); + node.set_attribute_int(ATTR_WINDOW_TYPE, WINDOW_TYPE_ERROR_LOG_VIEWER); -void LogWindowQtConfig::recoverFromXmlNode(util::xml::data_node const &node) -{ - WindowQtConfig::recoverFromXmlNode(node); + m_logView->saveConfigurationToNode(node); } } // namespace osd::debugger::qt diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/logwindow.h mame-0.251+dfsg.1/src/osd/modules/debugger/qt/logwindow.h --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/logwindow.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/logwindow.h 2022-12-29 14:20:09.000000000 +0000 @@ -19,9 +19,11 @@ Q_OBJECT public: - LogWindow(running_machine &machine, QWidget *parent = nullptr); + LogWindow(DebuggerQt &debugger, QWidget *parent = nullptr); virtual ~LogWindow(); + virtual void restoreConfiguration(util::xml::data_node const &node) override; + protected: virtual void saveConfigurationToNode(util::xml::data_node &node) override; @@ -30,24 +32,6 @@ DebuggerView *m_logView; }; - -//========================================================================= -// A way to store the configuration of a window long enough to read/write. -//========================================================================= -class LogWindowQtConfig : public WindowQtConfig -{ -public: - LogWindowQtConfig() : - WindowQtConfig(WINDOW_TYPE_ERROR_LOG_VIEWER) - { - } - - ~LogWindowQtConfig() {} - - void applyToQWidget(QWidget *widget); - void recoverFromXmlNode(util::xml::data_node const &node); -}; - } // namespace osd::debugger::qt #endif // MAME_DEBUGGER_QT_LOGWINDOW_H diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/mainwindow.cpp mame-0.251+dfsg.1/src/osd/modules/debugger/qt/mainwindow.cpp --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/mainwindow.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/mainwindow.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -21,9 +21,8 @@ namespace osd::debugger::qt { -MainWindow::MainWindow(running_machine &machine, QWidget *parent) : - WindowQt(machine, nullptr), - m_historyIndex(0), +MainWindow::MainWindow(DebuggerQt &debugger, QWidget *parent) : + WindowQt(debugger, nullptr), m_inputHistory(), m_exiting(false) { @@ -37,6 +36,7 @@ // The input line m_inputEdit = new QLineEdit(mainWindowFrame); connect(m_inputEdit, &QLineEdit::returnPressed, this, &MainWindow::executeCommandSlot); + connect(m_inputEdit, &QLineEdit::textEdited, this, &MainWindow::commandEditedSlot); m_inputEdit->installEventFilter(this); @@ -154,6 +154,30 @@ } +void MainWindow::restoreConfiguration(util::xml::data_node const &node) +{ + WindowQt::restoreConfiguration(node); + + debug_view_disasm &dasmview = *m_dasmFrame->view()->view(); + + restoreState(QByteArray::fromPercentEncoding(node.get_attribute_string("qtwindowstate", ""))); + + auto const rightbar = node.get_attribute_int(ATTR_WINDOW_DISASSEMBLY_RIGHT_COLUMN, dasmview.right_column()); + QActionGroup *const rightBarGroup = findChild("rightbargroup"); + for (QAction *action : rightBarGroup->actions()) + { + if (action->data().toInt() == rightbar) + { + action->trigger(); + break; + } + } + + m_dasmFrame->view()->restoreConfigurationFromNode(node); + m_inputHistory.restoreConfigurationFromNode(node); +} + + void MainWindow::saveConfigurationToNode(util::xml::data_node &node) { WindowQt::saveConfigurationToNode(node); @@ -163,6 +187,9 @@ debug_view_disasm &dasmview = *m_dasmFrame->view()->view(); node.set_attribute_int(ATTR_WINDOW_DISASSEMBLY_RIGHT_COLUMN, dasmview.right_column()); node.set_attribute("qtwindowstate", saveState().toPercentEncoding().data()); + + m_dasmFrame->view()->saveConfigurationToNode(node); + m_inputHistory.saveConfigurationToNode(node); } @@ -182,46 +209,47 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event) { // Only filter keypresses - QKeyEvent *keyEvent = nullptr; - if (event->type() == QEvent::KeyPress) - keyEvent = static_cast(event); - else + if (event->type() != QEvent::KeyPress) return QObject::eventFilter(obj, event); + QKeyEvent const &keyEvent = *static_cast(event); + // Catch up & down keys - if (keyEvent->key() == Qt::Key_Up || keyEvent->key() == Qt::Key_Down) + if (keyEvent.key() == Qt::Key_Escape) { - if (keyEvent->key() == Qt::Key_Up) - { - if (m_historyIndex > 0) - m_historyIndex--; - } - else if (keyEvent->key() == Qt::Key_Down) - { - if (m_historyIndex < m_inputHistory.size()) - m_historyIndex++; - } - - // Populate the input edit or clear it if you're at the end - if (m_historyIndex == m_inputHistory.size()) + m_inputEdit->clear(); + m_inputHistory.reset(); + return true; + } + else if (keyEvent.key() == Qt::Key_Up) + { + QString const *const hist = m_inputHistory.previous(m_inputEdit->text()); + if (hist) { - m_inputEdit->setText(""); + m_inputEdit->setText(*hist); + m_inputEdit->setSelection(hist->size(), 0); } - else + return true; + } + else if (keyEvent.key() == Qt::Key_Down) + { + QString const *const hist = m_inputHistory.next(m_inputEdit->text()); + if (hist) { - m_inputEdit->setText(m_inputHistory[m_historyIndex]); + m_inputEdit->setText(*hist); + m_inputEdit->setSelection(hist->size(), 0); } + return true; } - else if (keyEvent->key() == Qt::Key_Enter) + else if (keyEvent.key() == Qt::Key_Enter) { executeCommand(false); + return true; } else { return QObject::eventFilter(obj, event); } - - return true; } @@ -243,9 +271,9 @@ else command = string_format("bpclear 0x%X", bp->index()); m_machine.debugger().console().execute_command(command, true); + m_machine.debug_view().update_all(); + m_machine.debugger().refresh_display(); } - - refreshAll(); } @@ -265,10 +293,10 @@ int32_t const bpindex = bp->index(); std::string command = string_format(bp->enabled() ? "bpdisable 0x%X" : "bpenable 0x%X", bpindex); m_machine.debugger().console().execute_command(command, true); + m_machine.debug_view().update_all(); + m_machine.debugger().refresh_display(); } } - - refreshAll(); } @@ -296,33 +324,35 @@ executeCommand(true); } -void MainWindow::executeCommand(bool withClear) +void MainWindow::commandEditedSlot(QString const &text) { - QString command = m_inputEdit->text(); + m_inputHistory.edit(); +} - // A blank command is a "silent step" +void MainWindow::executeCommand(bool withClear) +{ + QString const command = m_inputEdit->text(); if (command == "") { + // A blank command is a "silent step" m_machine.debugger().console().get_visible_cpu()->debug()->single_step(); - return; + m_inputHistory.reset(); } + else + { + // Send along the command + m_machine.debugger().console().execute_command(command.toUtf8().data(), true); - // Send along the command - m_machine.debugger().console().execute_command(command.toLocal8Bit().data(), true); - - // Add history & set the index to be the top of the stack - addToHistory(command); + // Add history + m_inputHistory.add(command); - // Clear out the text and reset the history pointer only if asked - if (withClear) - { - m_inputEdit->clear(); - m_historyIndex = m_inputHistory.size(); + // Clear out the text and reset the history pointer only if asked + if (withClear) + { + m_inputEdit->clear(); + m_inputHistory.edit(); + } } - - // Refresh - m_consoleView->viewport()->update(); - refreshAll(); } @@ -335,7 +365,6 @@ if (!img) { m_machine.debugger().console().printf("Something is wrong with the mount menu.\n"); - refreshAll(); return; } @@ -349,7 +378,6 @@ if (img->load(filename.toUtf8().data()) != image_init_result::PASS) { m_machine.debugger().console().printf("Image could not be mounted.\n"); - refreshAll(); return; } @@ -365,7 +393,6 @@ parentMenuItem->setTitle(newTitle); m_machine.debugger().console().printf("Image %s mounted successfully.\n", filename.toUtf8().data()); - refreshAll(); } @@ -389,7 +416,6 @@ parentMenuItem->setTitle(newTitle); m_machine.debugger().console().printf("Image successfully unmounted.\n"); - refreshAll(); } @@ -429,21 +455,10 @@ } -void MainWindow::addToHistory(const QString& command) +void MainWindow::debuggerExit() { - if (command == "") - return; - - // Always push back when there is no previous history - if (m_inputHistory.empty()) - { - m_inputHistory.push_back(m_inputEdit->text()); - return; - } - - // If there is previous history, make sure it's not what you just executed - if (m_inputHistory.back() != m_inputEdit->text()) - m_inputHistory.push_back(m_inputEdit->text()); + m_exiting = true; + close(); } @@ -481,35 +496,6 @@ } -//========================================================================= -// MainWindowQtConfig -//========================================================================= -void MainWindowQtConfig::applyToQWidget(QWidget *widget) -{ - WindowQtConfig::applyToQWidget(widget); - MainWindow *window = dynamic_cast(widget); - window->restoreState(m_windowState); - - QActionGroup *const rightBarGroup = window->findChild("rightbargroup"); - for (QAction *action : rightBarGroup->actions()) - { - if (action->data().toInt() == m_rightBar) - { - action->trigger(); - break; - } - } -} - - -void MainWindowQtConfig::recoverFromXmlNode(util::xml::data_node const &node) -{ - WindowQtConfig::recoverFromXmlNode(node); - const char* state = node.get_attribute_string("qtwindowstate", ""); - m_windowState = QByteArray::fromPercentEncoding(state); - m_rightBar = node.get_attribute_int(ATTR_WINDOW_DISASSEMBLY_RIGHT_COLUMN, m_rightBar); -} - DasmDockWidget::~DasmDockWidget() { } diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/mainwindow.h mame-0.251+dfsg.1/src/osd/modules/debugger/qt/mainwindow.h --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/mainwindow.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/mainwindow.h 2022-12-29 14:20:09.000000000 +0000 @@ -14,7 +14,7 @@ #include #include -#include +#include namespace osd::debugger::qt { @@ -31,21 +31,21 @@ Q_OBJECT public: - MainWindow(running_machine &machine, QWidget *parent = nullptr); + MainWindow(DebuggerQt &debugger, QWidget *parent = nullptr); virtual ~MainWindow(); void setProcessor(device_t *processor); - void setExiting() { m_exiting = true; } + virtual void restoreConfiguration(util::xml::data_node const &node) override; protected: virtual void saveConfigurationToNode(util::xml::data_node &node) override; // Used to intercept the user clicking 'X' in the upper corner - void closeEvent(QCloseEvent *event); + virtual void closeEvent(QCloseEvent *event) override; // Used to intercept the user hitting the up arrow in the input widget - bool eventFilter(QObject *obj, QEvent *event); + virtual bool eventFilter(QObject *obj, QEvent *event) override; private slots: void toggleBreakpointAtCursor(bool changedTo); @@ -54,6 +54,7 @@ void rightBarChanged(QAction *changedTo); void executeCommandSlot(); + void commandEditedSlot(QString const &text); void mountImage(bool changedTo); void unmountImage(bool changedTo); @@ -61,12 +62,12 @@ void dasmViewUpdated(); // Closing the main window hides the debugger and runs the emulated system - void debugActClose(); + virtual void debugActClose() override; + virtual void debuggerExit() override; private: void createImagesMenu(); - void addToHistory(const QString& command); void executeCommand(bool withClear); // Widgets and docks @@ -81,8 +82,7 @@ QAction *m_runToCursorAct; // Terminal history - int m_historyIndex; - std::vector m_inputHistory; + CommandHistory m_inputHistory; bool m_exiting; }; @@ -158,29 +158,6 @@ DebuggerView *m_processorView; }; - -//========================================================================= -// A way to store the configuration of a window long enough to read/write. -//========================================================================= -class MainWindowQtConfig : public WindowQtConfig -{ -public: - MainWindowQtConfig() : - WindowQtConfig(WINDOW_TYPE_CONSOLE), - m_rightBar(0), - m_windowState() - {} - - ~MainWindowQtConfig() {} - - // Settings - int m_rightBar; - QByteArray m_windowState; - - void applyToQWidget(QWidget *widget); - void recoverFromXmlNode(util::xml::data_node const &node); -}; - } // namespace osd::debugger::qt #endif // MAME_DEBUGGER_QT_MAINWINDOW_H diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/memorywindow.cpp mame-0.251+dfsg.1/src/osd/modules/debugger/qt/memorywindow.cpp --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/memorywindow.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/memorywindow.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -10,6 +10,7 @@ #include "util/xmlfile.h" #include +#include #include #include #include @@ -27,8 +28,9 @@ namespace osd::debugger::qt { -MemoryWindow::MemoryWindow(running_machine &machine, QWidget *parent) : - WindowQt(machine, nullptr) +MemoryWindow::MemoryWindow(DebuggerQt &debugger, QWidget *parent) : + WindowQt(debugger, nullptr), + m_inputHistory() { setWindowTitle("Debug: Memory View"); @@ -49,6 +51,8 @@ // The input edit m_inputEdit = new QLineEdit(topSubFrame); connect(m_inputEdit, &QLineEdit::returnPressed, this, &MemoryWindow::expressionSubmitted); + connect(m_inputEdit, &QLineEdit::textEdited, this, &MemoryWindow::expressionEdited); + m_inputEdit->installEventFilter(this); // The memory space combo box m_memoryComboBox = new QComboBox(topSubFrame); @@ -219,6 +223,71 @@ } +void MemoryWindow::restoreConfiguration(util::xml::data_node const &node) +{ + WindowQt::restoreConfiguration(node); + + debug_view_memory &memView = *m_memTable->view(); + + auto const region = node.get_attribute_int(ATTR_WINDOW_MEMORY_REGION, m_memTable->sourceIndex()); + if ((0 <= region) && (m_memoryComboBox->count() > region)) + m_memoryComboBox->setCurrentIndex(region); + + auto const reverse = node.get_attribute_int(ATTR_WINDOW_MEMORY_REVERSE_COLUMNS, memView.reverse() ? 1 : 0); + if (memView.reverse() != bool(reverse)) + { + memView.set_reverse(bool(reverse)); + findChild("reverse")->setChecked(bool(reverse)); + } + + auto const mode = node.get_attribute_int(ATTR_WINDOW_MEMORY_ADDRESS_MODE, memView.physical() ? 1 : 0); + QActionGroup *const addressGroup = findChild("addressgroup"); + for (QAction *action : addressGroup->actions()) + { + if (action->data().toBool() == mode) + { + action->trigger(); + break; + } + } + + auto const radix = node.get_attribute_int(ATTR_WINDOW_MEMORY_ADDRESS_RADIX, memView.address_radix()); + QActionGroup *const radixGroup = findChild("radixgroup"); + for (QAction *action : radixGroup->actions()) + { + if (action->data().toInt() == radix) + { + action->trigger(); + break; + } + } + + auto const format = node.get_attribute_int(ATTR_WINDOW_MEMORY_DATA_FORMAT, int(memView.get_data_format())); + QActionGroup *const dataFormat = findChild("dataformat"); + for (QAction *action : dataFormat->actions()) + { + if (action->data().toInt() == format) + { + action->trigger(); + break; + } + } + + auto const chunks = node.get_attribute_int(ATTR_WINDOW_MEMORY_ROW_CHUNKS, memView.chunks_per_row()); + memView.set_chunks_per_row(chunks); + + util::xml::data_node const *const expression = node.get_child(NODE_WINDOW_EXPRESSION); + if (expression && expression->get_value()) + { + m_inputEdit->setText(QString::fromUtf8(expression->get_value())); + expressionSubmitted(); + } + + m_memTable->restoreConfigurationFromNode(node); + m_inputHistory.restoreConfigurationFromNode(node); +} + + void MemoryWindow::saveConfigurationToNode(util::xml::data_node &node) { WindowQt::saveConfigurationToNode(node); @@ -233,6 +302,9 @@ node.set_attribute_int(ATTR_WINDOW_MEMORY_DATA_FORMAT, int(memView.get_data_format())); node.set_attribute_int(ATTR_WINDOW_MEMORY_ROW_CHUNKS, memView.chunks_per_row()); node.add_child(NODE_WINDOW_EXPRESSION, memView.expression()); + + m_memTable->saveConfigurationToNode(node); + m_inputHistory.saveConfigurationToNode(node); } @@ -256,7 +328,7 @@ } } - QActionGroup *radixGroup = findChild("radixgroup"); + QActionGroup *radixGroup = findChild("radixgroup"); for (QAction *action : radixGroup->actions()) { if (action->data().toInt() == memView->address_radix()) @@ -269,21 +341,65 @@ } +// Used to intercept the user hitting the up arrow in the input widget +bool MemoryWindow::eventFilter(QObject *obj, QEvent *event) +{ + // Only filter keypresses + if (event->type() != QEvent::KeyPress) + return QObject::eventFilter(obj, event); + + QKeyEvent const &keyEvent = *static_cast(event); + + // Catch up & down keys + if (keyEvent.key() == Qt::Key_Escape) + { + m_inputEdit->setText(QString::fromUtf8(m_memTable->view()->expression())); + m_inputEdit->selectAll(); + m_inputHistory.reset(); + return true; + } + else if (keyEvent.key() == Qt::Key_Up) + { + QString const *const hist = m_inputHistory.previous(m_inputEdit->text()); + if (hist) + { + m_inputEdit->setText(*hist); + m_inputEdit->setSelection(hist->size(), 0); + } + return true; + } + else if (keyEvent.key() == Qt::Key_Down) + { + QString const *const hist = m_inputHistory.next(m_inputEdit->text()); + if (hist) + { + m_inputEdit->setText(*hist); + m_inputEdit->setSelection(hist->size(), 0); + } + return true; + } + else + { + return QObject::eventFilter(obj, event); + } +} + + void MemoryWindow::expressionSubmitted() { const QString expression = m_inputEdit->text(); - m_memTable->view()->set_expression(expression.toLocal8Bit().data()); + m_memTable->view()->set_expression(expression.toUtf8().data()); + m_inputEdit->selectAll(); - // Make the cursor pop - m_memTable->view()->set_cursor_visible(true); + // Add history + if (!expression.isEmpty()) + m_inputHistory.add(expression); +} - // Check where the cursor is and adjust the scroll accordingly - debug_view_xy cursorPosition = m_memTable->view()->cursor_position(); - // TODO: check if the region is already visible? - m_memTable->verticalScrollBar()->setValue(cursorPosition.y); - m_memTable->update(); - m_memTable->viewport()->update(); +void MemoryWindow::expressionEdited(QString const &text) +{ + m_inputHistory.edit(); } @@ -430,62 +546,4 @@ QApplication::clipboard()->setText(m_lastPc); } - -//========================================================================= -// MemoryWindowQtConfig -//========================================================================= - -void MemoryWindowQtConfig::applyToQWidget(QWidget *widget) -{ - WindowQtConfig::applyToQWidget(widget); - MemoryWindow *window = dynamic_cast(widget); - QComboBox *memoryRegion = window->findChild("memoryregion"); - memoryRegion->setCurrentIndex(m_memoryRegion); - - QAction *reverse = window->findChild("reverse"); - if (m_reverse) - reverse->trigger(); - - QActionGroup *const addressGroup = window->findChild("addressgroup"); - for (QAction *action : addressGroup->actions()) - { - if (action->data().toBool() == m_addressMode) - { - action->trigger(); - break; - } - } - - QActionGroup *const radixGroup = window->findChild("radixgroup"); - for (QAction *action : radixGroup->actions()) - { - if (action->data().toInt() == m_addressRadix) - { - action->trigger(); - break; - } - } - - QActionGroup *const dataFormat = window->findChild("dataformat"); - for (QAction *action : dataFormat->actions()) - { - if (action->data().toInt() == m_dataFormat) - { - action->trigger(); - break; - } - } -} - - -void MemoryWindowQtConfig::recoverFromXmlNode(util::xml::data_node const &node) -{ - WindowQtConfig::recoverFromXmlNode(node); - m_memoryRegion = node.get_attribute_int(ATTR_WINDOW_MEMORY_REGION, m_memoryRegion); - m_reverse = node.get_attribute_int(ATTR_WINDOW_MEMORY_REVERSE_COLUMNS, m_reverse); - m_addressMode = node.get_attribute_int(ATTR_WINDOW_MEMORY_ADDRESS_MODE, m_addressMode); - m_addressRadix = node.get_attribute_int(ATTR_WINDOW_MEMORY_ADDRESS_RADIX, m_addressRadix); - m_dataFormat = node.get_attribute_int(ATTR_WINDOW_MEMORY_DATA_FORMAT, m_dataFormat); -} - } // namespace osd::debugger::qt diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/memorywindow.h mame-0.251+dfsg.1/src/osd/modules/debugger/qt/memorywindow.h --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/memorywindow.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/memorywindow.h 2022-12-29 14:20:09.000000000 +0000 @@ -25,15 +25,22 @@ Q_OBJECT public: - MemoryWindow(running_machine &machine, QWidget *parent = nullptr); + MemoryWindow(DebuggerQt &debugger, QWidget *parent = nullptr); virtual ~MemoryWindow(); + virtual void restoreConfiguration(util::xml::data_node const &node) override; + protected: virtual void saveConfigurationToNode(util::xml::data_node &node) override; + // Used to intercept the user hitting the up arrow in the input widget + virtual bool eventFilter(QObject *obj, QEvent *event) override; + private slots: void memoryRegionChanged(int index); void expressionSubmitted(); + void expressionEdited(QString const &text); + void formatChanged(QAction *changedTo); void addressChanged(QAction *changedTo); void radixChanged(QAction *changedTo); @@ -49,6 +56,9 @@ QLineEdit *m_inputEdit; QComboBox *m_memoryComboBox; DebuggerMemView *m_memTable; + + // Expression history + CommandHistory m_inputHistory; }; @@ -76,36 +86,6 @@ QString m_lastPc; }; - -//========================================================================= -// A way to store the configuration of a window long enough to read/write. -//========================================================================= -class MemoryWindowQtConfig : public WindowQtConfig -{ -public: - MemoryWindowQtConfig() : - WindowQtConfig(WINDOW_TYPE_MEMORY_VIEWER), - m_reverse(0), - m_addressMode(0), - m_addressRadix(0), - m_dataFormat(0), - m_memoryRegion(0) - { - } - - ~MemoryWindowQtConfig() {} - - // Settings - int m_reverse; - int m_addressMode; - int m_addressRadix; - int m_dataFormat; - int m_memoryRegion; - - void applyToQWidget(QWidget *widget); - void recoverFromXmlNode(util::xml::data_node const &node); -}; - } // namespace osd::debugger::qt #endif // MAME_DEBUGGER_QT_MEMORYWINDOW_H diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/windowqt.cpp mame-0.251+dfsg.1/src/osd/modules/debugger/qt/windowqt.cpp --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/windowqt.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/windowqt.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -20,21 +20,24 @@ namespace osd::debugger::qt { -bool WindowQt::s_refreshAll = false; -bool WindowQt::s_hideAll = false; - - // Since all debug windows are intended to be top-level, this inherited // constructor is always called with a nullptr parent. The passed-in parent widget, // however, is often used to place each child window & the code to do this can // be found in most of the inherited classes. -WindowQt::WindowQt(running_machine &machine, QWidget *parent) : +WindowQt::WindowQt(DebuggerQt &debugger, QWidget *parent) : QMainWindow(parent), - m_machine(machine) + m_debugger(debugger), + m_machine(debugger.machine()) { setAttribute(Qt::WA_DeleteOnClose, true); + // Subscribe to signals + connect(&debugger, &DebuggerQt::exitDebugger, this, &WindowQt::debuggerExit); + connect(&debugger, &DebuggerQt::hideAllWindows, this, &WindowQt::hide); + connect(&debugger, &DebuggerQt::showAllWindows, this, &WindowQt::show); + connect(&debugger, &DebuggerQt::saveConfiguration, this, &WindowQt::saveConfiguration); + // The Debug menu bar QAction *debugActOpenMemory = new QAction("New &Memory Window", this); debugActOpenMemory->setShortcut(QKeySequence("Ctrl+M")); @@ -133,9 +136,10 @@ { } + void WindowQt::debugActOpenMemory() { - MemoryWindow *foo = new MemoryWindow(m_machine, this); + MemoryWindow *foo = new MemoryWindow(m_debugger, this); // A valiant effort, but it just doesn't wanna' hide behind the main window & not make a new toolbar icon // foo->setWindowFlags(Qt::Dialog); // foo->setWindowFlags(foo->windowFlags() & ~Qt::WindowStaysOnTopHint); @@ -145,7 +149,7 @@ void WindowQt::debugActOpenDasm() { - DasmWindow *foo = new DasmWindow(m_machine, this); + DasmWindow *foo = new DasmWindow(m_debugger, this); // A valiant effort, but it just doesn't wanna' hide behind the main window & not make a new toolbar icon // foo->setWindowFlags(Qt::Dialog); // foo->setWindowFlags(foo->windowFlags() & ~Qt::WindowStaysOnTopHint); @@ -155,7 +159,7 @@ void WindowQt::debugActOpenLog() { - LogWindow *foo = new LogWindow(m_machine, this); + LogWindow *foo = new LogWindow(m_debugger, this); // A valiant effort, but it just doesn't wanna' hide behind the main window & not make a new toolbar icon // foo->setWindowFlags(Qt::Dialog); // foo->setWindowFlags(foo->windowFlags() & ~Qt::WindowStaysOnTopHint); @@ -165,7 +169,7 @@ void WindowQt::debugActOpenPoints() { - BreakpointsWindow *foo = new BreakpointsWindow(m_machine, this); + BreakpointsWindow *foo = new BreakpointsWindow(m_debugger, this); // A valiant effort, but it just doesn't wanna' hide behind the main window & not make a new toolbar icon // foo->setWindowFlags(Qt::Dialog); // foo->setWindowFlags(foo->windowFlags() & ~Qt::WindowStaysOnTopHint); @@ -175,7 +179,7 @@ void WindowQt::debugActOpenDevices() { - DevicesWindow *foo = new DevicesWindow(m_machine, this); + DevicesWindow *foo = new DevicesWindow(m_debugger, this); // A valiant effort, but it just doesn't wanna' hide behind the main window & not make a new toolbar icon // foo->setWindowFlags(Qt::Dialog); // foo->setWindowFlags(foo->windowFlags() & ~Qt::WindowStaysOnTopHint); @@ -191,7 +195,7 @@ void WindowQt::debugActRunAndHide() { m_machine.debugger().console().get_visible_cpu()->debug()->go(); - hideAll(); + m_debugger.hideAll(); } void WindowQt::debugActRunToNextCpu() @@ -245,6 +249,27 @@ m_machine.schedule_exit(); } +void WindowQt::debuggerExit() +{ + close(); +} + + +void WindowQt::restoreConfiguration(util::xml::data_node const &node) +{ + QPoint p(geometry().topLeft()); + p.setX(node.get_attribute_int(ATTR_WINDOW_POSITION_X, p.x())); + p.setY(node.get_attribute_int(ATTR_WINDOW_POSITION_Y, p.y())); + + QSize s(size()); + s.setWidth(node.get_attribute_int(ATTR_WINDOW_WIDTH, s.width())); + s.setHeight(node.get_attribute_int(ATTR_WINDOW_HEIGHT, s.height())); + + // TODO: sanity checks, restrict to screen area + + setGeometry(p.x(), p.y(), s.width(), s.height()); +} + void WindowQt::saveConfiguration(util::xml::data_node &parentnode) { @@ -263,23 +288,115 @@ } -//========================================================================= -// WindowQtConfig -//========================================================================= +CommandHistory::CommandHistory() : + m_history(), + m_current(), + m_position(-1) +{ +} + + +CommandHistory::~CommandHistory() +{ +} + + +void CommandHistory::add(QString const &entry) +{ + if (m_history.empty() || (m_history.front() != entry)) + { + while (m_history.size() >= CAPACITY) + m_history.pop_back(); + m_history.push_front(entry); + } + m_position = 0; +} + + +QString const *CommandHistory::previous(QString const ¤t) +{ + if ((m_position + 1) < m_history.size()) + { + if (0 > m_position) + m_current = std::make_unique(current); + return &m_history[++m_position]; + } + else + { + return nullptr; + } +} + + +QString const *CommandHistory::next(QString const ¤t) +{ + if (0 < m_position) + { + return &m_history[--m_position]; + } + else if (!m_position && m_current && (m_history.front() != *m_current)) + { + --m_position; + return m_current.get(); + } + else + { + return nullptr; + } +} + + +void CommandHistory::edit() +{ + if (!m_position) + --m_position; +} + + +void CommandHistory::reset() +{ + m_position = -1; + m_current.reset(); +} + + +void CommandHistory::clear() +{ + m_position = -1; + m_current.reset(); + m_history.clear(); +} + -void WindowQtConfig::applyToQWidget(QWidget *widget) +void CommandHistory::restoreConfigurationFromNode(util::xml::data_node const &node) { - widget->setGeometry(m_position.x(), m_position.y(), m_size.x(), m_size.y()); + clear(); + util::xml::data_node const *const historynode = node.get_child(NODE_WINDOW_HISTORY); + if (historynode) + { + util::xml::data_node const *itemnode = historynode->get_child(NODE_HISTORY_ITEM); + while (itemnode) + { + if (itemnode->get_value() && *itemnode->get_value()) + { + while (m_history.size() >= CAPACITY) + m_history.pop_back(); + m_history.push_front(QString::fromUtf8(itemnode->get_value())); + } + itemnode = itemnode->get_next_sibling(NODE_HISTORY_ITEM); + } + } } -void WindowQtConfig::recoverFromXmlNode(util::xml::data_node const &node) +void CommandHistory::saveConfigurationToNode(util::xml::data_node &node) { - m_size.setX(node.get_attribute_int(ATTR_WINDOW_WIDTH, m_size.x())); - m_size.setY(node.get_attribute_int(ATTR_WINDOW_HEIGHT, m_size.y())); - m_position.setX(node.get_attribute_int(ATTR_WINDOW_POSITION_X, m_position.x())); - m_position.setY(node.get_attribute_int(ATTR_WINDOW_POSITION_Y, m_position.y())); - m_type = node.get_attribute_int(ATTR_WINDOW_TYPE, m_type); + util::xml::data_node *const historynode = node.add_child(NODE_WINDOW_HISTORY, nullptr); + if (historynode) + { + for (auto it = m_history.crbegin(); m_history.crend() != it; ++it) + historynode->add_child(NODE_HISTORY_ITEM, it->toUtf8().data()); + } } } // namespace osd::debugger::qt diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/qt/windowqt.h mame-0.251+dfsg.1/src/osd/modules/debugger/qt/windowqt.h --- mame-0.250+dfsg.1/src/osd/modules/debugger/qt/windowqt.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/qt/windowqt.h 2022-12-29 14:20:09.000000000 +0000 @@ -9,10 +9,35 @@ #include +#include +#include + namespace osd::debugger::qt { //============================================================ +// The Qt debugger module interface +//============================================================ +class DebuggerQt : public QObject +{ + Q_OBJECT + +public: + virtual ~DebuggerQt() { } + + virtual running_machine &machine() const = 0; + + void hideAll() { emit hideAllWindows(); } + +signals: + void exitDebugger(); + void hideAllWindows(); + void showAllWindows(); + void saveConfiguration(util::xml::data_node &parentnode); +}; + + +//============================================================ // The Qt window that everyone derives from. //============================================================ class WindowQt : public QMainWindow @@ -20,19 +45,9 @@ Q_OBJECT public: - WindowQt(running_machine &machine, QWidget *parent = nullptr); virtual ~WindowQt(); - // The interface to an all-window refresh - void refreshAll() { s_refreshAll = true; } - bool wantsRefresh() { return s_refreshAll; } - void clearRefreshFlag() { s_refreshAll = false; } - - void hideAll() { s_hideAll = true; } - bool wantsHide() { return s_hideAll; } - void clearHideFlag() { s_hideAll = false; } - - void saveConfiguration(util::xml::data_node &parentnode); + virtual void restoreConfiguration(util::xml::data_node const &node); protected slots: void debugActOpenMemory(); @@ -52,38 +67,46 @@ void debugActHardReset(); virtual void debugActClose(); void debugActQuit(); + virtual void debuggerExit(); +private slots: + void saveConfiguration(util::xml::data_node &parentnode); protected: + WindowQt(DebuggerQt &debugger, QWidget *parent = nullptr); + virtual void saveConfigurationToNode(util::xml::data_node &node); + DebuggerQt &m_debugger; running_machine &m_machine; - - static bool s_refreshAll; - static bool s_hideAll; }; -//========================================================================= -// A way to store the configuration of a window long enough to read/write. -//========================================================================= -class WindowQtConfig +//============================================================ +// Command history helper +//============================================================ +class CommandHistory { public: - WindowQtConfig(int type) : - m_type(type), - m_size(800, 600), - m_position(120, 120) - {} - virtual ~WindowQtConfig() {} - - // Settings - int m_type; - QPoint m_size; - QPoint m_position; + CommandHistory(); + ~CommandHistory(); - virtual void applyToQWidget(QWidget *widget); - virtual void recoverFromXmlNode(util::xml::data_node const &node); + void add(QString const &entry); + QString const *previous(QString const ¤t); + QString const *next(QString const ¤t); + void edit(); + void reset(); + void clear(); + + void restoreConfigurationFromNode(util::xml::data_node const &node); + void saveConfigurationToNode(util::xml::data_node &node); + +private: + static inline constexpr unsigned CAPACITY = 100U; + + std::deque m_history; + std::unique_ptr m_current; + int m_position; }; } // namespace osd::debugger::qt diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/win/debugwininfo.h mame-0.251+dfsg.1/src/osd/modules/debugger/win/debugwininfo.h --- mame-0.250+dfsg.1/src/osd/modules/debugger/win/debugwininfo.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/win/debugwininfo.h 2022-12-29 14:20:09.000000000 +0000 @@ -20,7 +20,6 @@ class debugwin_info : protected debugbase_info { public: - debugwin_info(debugger_windows_interface &debugger, bool is_main_console, LPCSTR title, WNDPROC handler); virtual ~debugwin_info(); bool is_valid() const { return m_wnd != nullptr; } @@ -121,6 +120,8 @@ ID_DEVICE_OPTIONS // always keep this at the end }; + debugwin_info(debugger_windows_interface &debugger, bool is_main_console, LPCSTR title, WNDPROC handler); + bool is_main_console() const { return m_is_main_console; } HWND window() const { return m_wnd; } uint32_t minwidth() const { return m_minwidth; } diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/win/editwininfo.cpp mame-0.251+dfsg.1/src/osd/modules/debugger/win/editwininfo.cpp --- mame-0.250+dfsg.1/src/osd/modules/debugger/win/editwininfo.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/win/editwininfo.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -12,6 +12,8 @@ #include "debugviewinfo.h" #include "uimetrics.h" +#include "xmlfile.h" + #include "strconv.h" #include "winutil.h" @@ -25,7 +27,7 @@ constexpr DWORD EDIT_BOX_STYLE_EX = 0; constexpr int MAX_EDIT_STRING = 256; -constexpr int HISTORY_LENGTH = 20; +constexpr int HISTORY_LENGTH = 100; } // anonymous namespace @@ -107,6 +109,43 @@ } +void editwin_info::restore_configuration_from_node(util::xml::data_node const &node) +{ + m_history.clear(); + m_last_history = 0; + util::xml::data_node const *const hist = node.get_child(NODE_WINDOW_HISTORY); + if (hist) + { + util::xml::data_node const *item = hist->get_child(NODE_HISTORY_ITEM); + while (item) + { + if (item->get_value() && *item->get_value()) + { + while (m_history.size() >= HISTORY_LENGTH) + m_history.pop_back(); + m_history.emplace_front(osd::text::to_tstring(item->get_value())); + } + item = item->get_next_sibling(NODE_HISTORY_ITEM); + } + } + + debugwin_info::restore_configuration_from_node(node); +} + + +void editwin_info::save_configuration_to_node(util::xml::data_node &node) +{ + debugwin_info::save_configuration_to_node(node); + + util::xml::data_node *const hist = node.add_child(NODE_WINDOW_HISTORY, nullptr); + if (hist) + { + for (auto it = m_history.crbegin(); m_history.crend() != it; ++it) + hist->add_child(NODE_HISTORY_ITEM, osd::text::from_tstring(*it).c_str()); + } +} + + LRESULT editwin_info::edit_proc(UINT message, WPARAM wparam, LPARAM lparam) { // handle a few messages diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/win/editwininfo.h mame-0.251+dfsg.1/src/osd/modules/debugger/win/editwininfo.h --- mame-0.250+dfsg.1/src/osd/modules/debugger/win/editwininfo.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/win/editwininfo.h 2022-12-29 14:20:09.000000000 +0000 @@ -30,6 +30,8 @@ virtual bool set_default_focus() override; + virtual void restore_configuration_from_node(util::xml::data_node const &node) override; + protected: constexpr static DWORD COMBO_BOX_STYLE = WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_VSCROLL; constexpr static DWORD COMBO_BOX_STYLE_EX = 0; @@ -41,6 +43,8 @@ virtual void draw_contents(HDC dc) override; + virtual void save_configuration_to_node(util::xml::data_node &node) override; + private: typedef std::deque > history_deque; diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/xmlconfig.cpp mame-0.251+dfsg.1/src/osd/modules/debugger/xmlconfig.cpp --- mame-0.250+dfsg.1/src/osd/modules/debugger/xmlconfig.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/xmlconfig.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -12,6 +12,9 @@ char const *const NODE_WINDOW_SELECTION = "selection"; char const *const NODE_WINDOW_SCROLL = "scroll"; char const *const NODE_WINDOW_EXPRESSION = "expression"; +char const *const NODE_WINDOW_HISTORY = "history"; + +char const *const NODE_HISTORY_ITEM = "item"; char const *const ATTR_DEBUGGER_SAVE_WINDOWS = "savewindows"; diff -Nru mame-0.250+dfsg.1/src/osd/modules/debugger/xmlconfig.h mame-0.251+dfsg.1/src/osd/modules/debugger/xmlconfig.h --- mame-0.250+dfsg.1/src/osd/modules/debugger/xmlconfig.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/debugger/xmlconfig.h 2022-12-29 14:20:09.000000000 +0000 @@ -28,6 +28,9 @@ extern char const *const NODE_WINDOW_SELECTION; extern char const *const NODE_WINDOW_SCROLL; extern char const *const NODE_WINDOW_EXPRESSION; +extern char const *const NODE_WINDOW_HISTORY; + +extern char const *const NODE_HISTORY_ITEM; extern char const *const ATTR_DEBUGGER_SAVE_WINDOWS; diff -Nru mame-0.250+dfsg.1/src/osd/modules/file/posixdir.cpp mame-0.251+dfsg.1/src/osd/modules/file/posixdir.cpp --- mame-0.250+dfsg.1/src/osd/modules/file/posixdir.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/file/posixdir.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -193,7 +193,7 @@ { assert(!m_fd); - m_path = osd_subst_env(dirname); + m_path = dirname; m_fd.reset(::opendir(m_path.c_str())); return bool(m_fd); } diff -Nru mame-0.250+dfsg.1/src/osd/modules/file/posixfile.cpp mame-0.251+dfsg.1/src/osd/modules/file/posixfile.cpp --- mame-0.250+dfsg.1/src/osd/modules/file/posixfile.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/file/posixfile.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -257,8 +257,6 @@ for (auto it = dst.begin(); it != dst.end(); ++it) *it = (INVPATHSEPCH == *it) ? PATHSEPCH : *it; #endif - try { dst = osd_subst_env(dst); } - catch (...) { return std::errc::not_enough_memory; } // attempt to open the file int fd = -1; diff -Nru mame-0.250+dfsg.1/src/osd/modules/file/winfile.cpp mame-0.251+dfsg.1/src/osd/modules/file/winfile.cpp --- mame-0.250+dfsg.1/src/osd/modules/file/winfile.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/file/winfile.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -161,12 +161,8 @@ // osd_open //============================================================ -std::error_condition osd_file::open(std::string const &orig_path, uint32_t openflags, ptr &file, std::uint64_t &filesize) noexcept +std::error_condition osd_file::open(std::string const &path, uint32_t openflags, ptr &file, std::uint64_t &filesize) noexcept { - std::string path; - try { path = osd_subst_env(orig_path); } - catch (...) { return std::errc::not_enough_memory; } - if (win_check_socket_path(path)) return win_open_socket(path, openflags, file, filesize); else if (win_check_ptty_path(path)) diff -Nru mame-0.250+dfsg.1/src/osd/modules/file/winrtfile.cpp mame-0.251+dfsg.1/src/osd/modules/file/winrtfile.cpp --- mame-0.250+dfsg.1/src/osd/modules/file/winrtfile.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/file/winrtfile.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -160,12 +160,8 @@ // osd_open //============================================================ -osd_file::error osd_file::open(std::string const &orig_path, uint32_t openflags, ptr &file, std::uint64_t &filesize) +osd_file::error osd_file::open(std::string const &path, uint32_t openflags, ptr &file, std::uint64_t &filesize) { - std::string path; - try { path = osd_subst_env(orig_path); } - catch (...) { return std::errc::not_enough_memory; } - if (win_check_socket_path(path)) return win_open_socket(path, openflags, file, filesize); else if (win_check_ptty_path(path)) diff -Nru mame-0.250+dfsg.1/src/osd/modules/lib/osdobj_common.cpp mame-0.251+dfsg.1/src/osd/modules/lib/osdobj_common.cpp --- mame-0.250+dfsg.1/src/osd/modules/lib/osdobj_common.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/lib/osdobj_common.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -164,13 +164,13 @@ #endif { nullptr, nullptr, core_options::option_type::HEADER, "BGFX POST-PROCESSING OPTIONS" }, - { OSDOPTION_BGFX_PATH, "bgfx", core_options::option_type::STRING, "path to BGFX-related files" }, + { OSDOPTION_BGFX_PATH, "bgfx", core_options::option_type::PATH, "path to BGFX-related files" }, { OSDOPTION_BGFX_BACKEND, "auto", core_options::option_type::STRING, "BGFX backend to use (d3d9, d3d11, d3d12, metal, opengl, gles, vulkan)" }, { OSDOPTION_BGFX_DEBUG, "0", core_options::option_type::BOOLEAN, "enable BGFX debugging statistics" }, { OSDOPTION_BGFX_SCREEN_CHAINS, "default", core_options::option_type::STRING, "comma-delimited list of screen chain JSON names, colon-delimited per-window" }, { OSDOPTION_BGFX_SHADOW_MASK, "slot-mask.png", core_options::option_type::STRING, "shadow mask texture name" }, { OSDOPTION_BGFX_LUT, "lut-default.png", core_options::option_type::STRING, "LUT texture name" }, - { OSDOPTION_BGFX_AVI_NAME, OSDOPTVAL_AUTO, core_options::option_type::STRING, "filename for BGFX output logging" }, + { OSDOPTION_BGFX_AVI_NAME, OSDOPTVAL_AUTO, core_options::option_type::PATH, "filename for BGFX output logging" }, // End of list { nullptr } diff -Nru mame-0.250+dfsg.1/src/osd/modules/render/bgfx/chainmanager.cpp mame-0.251+dfsg.1/src/osd/modules/render/bgfx/chainmanager.cpp --- mame-0.250+dfsg.1/src/osd/modules/render/bgfx/chainmanager.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/render/bgfx/chainmanager.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -92,7 +92,7 @@ m_available_chains.clear(); m_available_chains.push_back(chain_desc("none", "")); - const std::string chains_path = osd_subst_env(util::string_format("%s" PATH_SEPARATOR "chains", m_options.bgfx_path())); + const std::string chains_path = util::string_format("%s" PATH_SEPARATOR "chains", m_options.bgfx_path()); find_available_chains(chains_path, ""); destroy_unloaded_chains(); @@ -169,7 +169,7 @@ { name = name + ".json"; } - std::string path = osd_subst_env(util::string_format("%s" PATH_SEPARATOR "chains" PATH_SEPARATOR, m_options.bgfx_path())); + std::string path = util::string_format("%s" PATH_SEPARATOR "chains" PATH_SEPARATOR, m_options.bgfx_path()); path += name; bx::FileReader reader; diff -Nru mame-0.250+dfsg.1/src/osd/modules/render/bgfx/effectmanager.cpp mame-0.251+dfsg.1/src/osd/modules/render/bgfx/effectmanager.cpp --- mame-0.250+dfsg.1/src/osd/modules/render/bgfx/effectmanager.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/render/bgfx/effectmanager.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -33,7 +33,7 @@ full_name = full_name + ".json"; } - std::string path = osd_subst_env(util::string_format("%s" PATH_SEPARATOR "effects" PATH_SEPARATOR, options.bgfx_path())); + std::string path = util::string_format("%s" PATH_SEPARATOR "effects" PATH_SEPARATOR, options.bgfx_path()); path += full_name; bx::FileReader reader; diff -Nru mame-0.250+dfsg.1/src/osd/modules/render/bgfx/shadermanager.cpp mame-0.251+dfsg.1/src/osd/modules/render/bgfx/shadermanager.cpp --- mame-0.250+dfsg.1/src/osd/modules/render/bgfx/shadermanager.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/modules/render/bgfx/shadermanager.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -119,7 +119,7 @@ fatalerror("Unknown BGFX renderer type %d", bgfx::getRendererType()); } shader_path += PATH_SEPARATOR; - return osd_subst_env(shader_path); + return shader_path; } const bgfx::Memory* shader_manager::load_mem(std::string name) diff -Nru mame-0.250+dfsg.1/src/osd/sdl/sdlmain.cpp mame-0.251+dfsg.1/src/osd/sdl/sdlmain.cpp --- mame-0.250+dfsg.1/src/osd/sdl/sdlmain.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/sdl/sdlmain.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -77,7 +77,7 @@ const options_entry sdl_options::s_option_entries[] = { - { SDLOPTION_INIPATH, INI_PATH, core_options::option_type::STRING, "path to ini files" }, + { SDLOPTION_INIPATH, INI_PATH, core_options::option_type::MULTIPATH, "path to ini files" }, // performance options { nullptr, nullptr, core_options::option_type::HEADER, "SDL PERFORMANCE OPTIONS" }, @@ -99,7 +99,7 @@ // keyboard mapping { nullptr, nullptr, core_options::option_type::HEADER, "SDL KEYBOARD MAPPING" }, { SDLOPTION_KEYMAP, "0", core_options::option_type::BOOLEAN, "enable keymap" }, - { SDLOPTION_KEYMAP_FILE, "keymap.dat", core_options::option_type::STRING, "keymap filename" }, + { SDLOPTION_KEYMAP_FILE, "keymap.dat", core_options::option_type::PATH, "keymap filename" }, // joystick mapping { nullptr, nullptr, core_options::option_type::HEADER, "SDL JOYSTICK MAPPING" }, @@ -135,15 +135,14 @@ // sdl_options //============================================================ -sdl_options::sdl_options() -: osd_options() +sdl_options::sdl_options() : osd_options() { #if defined (SDLMAME_ANDROID) chdir (SDL_AndroidGetExternalStoragePath()); #endif std::string ini_path(INI_PATH); add_entries(sdl_options::s_option_entries); - strreplace(ini_path,"APP_NAME", emulator_info::get_appname_lower()); + strreplace(ini_path, "APP_NAME", emulator_info::get_appname_lower()); set_default_value(SDLOPTION_INIPATH, std::move(ini_path)); } diff -Nru mame-0.250+dfsg.1/src/osd/windows/window.cpp mame-0.251+dfsg.1/src/osd/windows/window.cpp --- mame-0.250+dfsg.1/src/osd/windows/window.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/windows/window.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -1403,7 +1403,10 @@ { // update DC m_dc = dc; - renderer().draw(update); + if (has_renderer()) + { + renderer().draw(update); + } } } } diff -Nru mame-0.250+dfsg.1/src/osd/windows/winmain.cpp mame-0.251+dfsg.1/src/osd/windows/winmain.cpp --- mame-0.250+dfsg.1/src/osd/windows/winmain.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/osd/windows/winmain.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -176,10 +176,10 @@ // post-processing options { nullptr, nullptr, core_options::option_type::HEADER, "DIRECT3D POST-PROCESSING OPTIONS" }, - { WINOPTION_HLSLPATH, "hlsl", core_options::option_type::STRING, "path to HLSL support files" }, + { WINOPTION_HLSLPATH, "hlsl", core_options::option_type::PATH, "path to HLSL support files" }, { WINOPTION_HLSL_ENABLE";hlsl", "0", core_options::option_type::BOOLEAN, "enable HLSL post-processing (PS3.0 required)" }, { WINOPTION_HLSL_OVERSAMPLING, "0", core_options::option_type::BOOLEAN, "enable HLSL oversampling" }, - { WINOPTION_HLSL_WRITE, OSDOPTVAL_AUTO, core_options::option_type::STRING, "enable HLSL AVI writing (huge disk bandwidth suggested)" }, + { WINOPTION_HLSL_WRITE, OSDOPTVAL_AUTO, core_options::option_type::PATH, "enable HLSL AVI writing (huge disk bandwidth suggested)" }, { WINOPTION_HLSL_SNAP_WIDTH, "2048", core_options::option_type::STRING, "HLSL upscaled-snapshot width" }, { WINOPTION_HLSL_SNAP_HEIGHT, "1536", core_options::option_type::STRING, "HLSL upscaled-snapshot height" }, { WINOPTION_SHADOW_MASK_TILE_MODE, "0", core_options::option_type::INTEGER, "shadow mask tile mode (0 for screen based, 1 for source based)" }, @@ -262,9 +262,9 @@ { WINOPTION_BLOOM_LEVEL6_WEIGHT, "0.04", core_options::option_type::FLOAT, "bloom level 6 weight (1/4 smaller that level 5 target)" }, { WINOPTION_BLOOM_LEVEL7_WEIGHT, "0.02", core_options::option_type::FLOAT, "bloom level 7 weight (1/4 smaller that level 6 target)" }, { WINOPTION_BLOOM_LEVEL8_WEIGHT, "0.01", core_options::option_type::FLOAT, "bloom level 8 weight (1/4 smaller that level 7 target)" }, - { WINOPTION_LUT_TEXTURE, "lut-default.png", core_options::option_type::STRING, "3D LUT texture filename for screen, PNG format" }, + { WINOPTION_LUT_TEXTURE, "lut-default.png", core_options::option_type::PATH, "3D LUT texture filename for screen, PNG format" }, { WINOPTION_LUT_ENABLE, "0", core_options::option_type::BOOLEAN, "Enables 3D LUT to be applied to screen after post-processing" }, - { WINOPTION_UI_LUT_TEXTURE, "lut-default.png", core_options::option_type::STRING, "3D LUT texture filename of UI, PNG format" }, + { WINOPTION_UI_LUT_TEXTURE, "lut-default.png", core_options::option_type::PATH, "3D LUT texture filename of UI, PNG format" }, { WINOPTION_UI_LUT_ENABLE, "0", core_options::option_type::BOOLEAN, "enable 3D LUT to be applied to UI and artwork after post-processing" }, // full screen options diff -Nru mame-0.250+dfsg.1/src/tools/imgtool/filter.cpp mame-0.251+dfsg.1/src/tools/imgtool/filter.cpp --- mame-0.250+dfsg.1/src/tools/imgtool/filter.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/tools/imgtool/filter.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -53,7 +53,6 @@ filter_eoln_getinfo, filter_cocobas_getinfo, filter_dragonbas_getinfo, - filter_macbinary_getinfo, filter_vzsnapshot_getinfo, filter_vzbas_getinfo, filter_thombas5_getinfo, diff -Nru mame-0.250+dfsg.1/src/tools/imgtool/imghd.h mame-0.251+dfsg.1/src/tools/imgtool/imghd.h --- mame-0.250+dfsg.1/src/tools/imgtool/imghd.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/tools/imgtool/imghd.h 2022-12-29 14:20:09.000000000 +0000 @@ -13,6 +13,7 @@ #include "imgterrs.h" +#include "chd.h" #include "harddisk.h" diff -Nru mame-0.250+dfsg.1/src/tools/imgtool/modules/macbin.cpp mame-0.251+dfsg.1/src/tools/imgtool/modules/macbin.cpp --- mame-0.250+dfsg.1/src/tools/imgtool/modules/macbin.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/tools/imgtool/modules/macbin.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,384 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Raphael Nabet -/**************************************************************************** - - macbin.cpp - - MacBinary filter for use with Mac and ProDOS drivers - -***************************************************************************** - - MacBinary file format - - Offset Length Description - ------ ------ ----------- - 0 1 [I] Magic byte (0x00) - 1 64 [I] File name (Pascal String) - 65 4 [I] File Type Code - 69 4 [I] File Creator Code - 73 1 [I] Finder Flags (bits 15-8) - 74 1 [I] Magic byte (0x00) - 75 2 [I] File Vertical Position - 77 2 [I] File Horizontal Position - 79 2 [I] Window/Folder ID - 81 1 [I] Protected (bit 0) - 82 1 [I] Magic byte (0x00) - 83 4 [I] Data Fork Length - 87 4 [I] Resource Fork Length - 91 4 [I] Creation Date - 95 4 [I] Last Modified Date - 99 2 [I] "Get Info" comment length - 101 1 [II] Finder Flags (bits 7-0) - 102 4 [III] MacBinary III Signature 'mBIN' - 106 1 [III] Script of Filename - 107 1 [III] Extended Finder Flags - 116 4 [II] Unpacked Length - 120 2 [II] Secondary Header Length - 122 1 [II] MacBinary II Version Number (II: 0x81, III: 0x82) - 123 1 [II] Minimum Compatible MacBinary II Version Number (0x81) - 124 2 [II] CRC of previous 124 bytes - - For more information, consult http://www.lazerware.com/formats/macbinary.html - - TODO: I believe that the script code is some sort of identifier identifying - the character set used for the filename. If this is true, we are not - handling that properly - -*****************************************************************************/ - -#include "imgtool.h" -#include "filter.h" - -#include "macutil.h" - -#include "formats/imageutl.h" - -#include - - - -static uint32_t pad128(uint32_t length) -{ - if (length % 128) - length += 128 - (length % 128); - return length; -} - - - -static imgtoolerr_t macbinary_readfile(imgtool::partition &partition, const char *filename, const char *fork, imgtool::stream &destf) -{ - static const uint32_t attrs[] = - { - IMGTOOLATTR_TIME_CREATED, - IMGTOOLATTR_TIME_LASTMODIFIED, - IMGTOOLATTR_INT_MAC_TYPE, - IMGTOOLATTR_INT_MAC_CREATOR, - IMGTOOLATTR_INT_MAC_FINDERFLAGS, - IMGTOOLATTR_INT_MAC_COORDX, - IMGTOOLATTR_INT_MAC_COORDY, - IMGTOOLATTR_INT_MAC_FINDERFOLDER, - IMGTOOLATTR_INT_MAC_SCRIPTCODE, - IMGTOOLATTR_INT_MAC_EXTENDEDFLAGS, - 0 - }; - imgtoolerr_t err; - uint8_t header[128]; - const char *basename; - - uint32_t type_code = 0x3F3F3F3F; - uint32_t creator_code = 0x3F3F3F3F; - uint16_t finder_flags = 0; - uint16_t coord_x = 0; - uint16_t coord_y = 0; - uint16_t finder_folder = 0; - uint8_t script_code = 0; - uint8_t extended_flags = 0; - - uint32_t creation_time = 0; - uint32_t lastmodified_time = 0; - imgtool_attribute attr_values[10]; - - // get the forks - std::vector fork_entries; - err = partition.list_file_forks(filename, fork_entries); - if (err) - return err; - - const imgtool::fork_entry *data_fork = nullptr; - const imgtool::fork_entry *resource_fork = nullptr; - for (const auto &entry : fork_entries) - { - switch (entry.type()) - { - case imgtool::fork_entry::type_t::DATA: - data_fork = &entry; - break; - case imgtool::fork_entry::type_t::RESOURCE: - resource_fork = &entry; - break; - default: - // do nothing - break; - } - } - - /* get the attributes */ - err = partition.get_file_attributes(filename, attrs, attr_values); - if (err && (ERRORCODE(err) != IMGTOOLERR_UNIMPLEMENTED)) - return err; - if (err == IMGTOOLERR_SUCCESS) - { - creation_time = mac_setup_time(attr_values[0].t); - lastmodified_time = mac_setup_time(attr_values[1].t); - type_code = attr_values[2].i; - creator_code = attr_values[3].i; - finder_flags = attr_values[4].i; - coord_x = attr_values[5].i; - coord_y = attr_values[6].i; - finder_folder = attr_values[7].i; - script_code = attr_values[8].i; - extended_flags = attr_values[9].i; - } - - memset(header, 0, sizeof(header)); - - /* place filename */ - basename = filename; - while(basename[strlen(basename) + 1]) - basename += strlen(basename) + 1; - pascal_from_c_string((unsigned char *) &header[1], 64, basename); - - place_integer_be(header, 65, 4, type_code); - place_integer_be(header, 69, 4, creator_code); - place_integer_be(header, 73, 1, (finder_flags >> 8) & 0xFF); - place_integer_be(header, 75, 2, coord_x); - place_integer_be(header, 77, 2, coord_y); - place_integer_be(header, 79, 2, finder_folder); - place_integer_be(header, 83, 4, data_fork ? data_fork->size() : 0); - place_integer_be(header, 87, 4, resource_fork ? resource_fork->size() : 0); - place_integer_be(header, 91, 4, creation_time); - place_integer_be(header, 95, 4, lastmodified_time); - place_integer_be(header, 101, 1, (finder_flags >> 0) & 0xFF); - place_integer_be(header, 102, 4, 0x6D42494E); - place_integer_be(header, 106, 1, script_code); - place_integer_be(header, 107, 1, extended_flags); - place_integer_be(header, 122, 1, 0x82); - place_integer_be(header, 123, 1, 0x81); - place_integer_be(header, 124, 2, ccitt_crc16(0, header, 124)); - - destf.write(header, sizeof(header)); - - if (data_fork) - { - err = partition.read_file(filename, "", destf, NULL); - if (err) - return err; - - destf.fill(0, pad128(data_fork->size())); - } - - if (resource_fork) - { - err = partition.read_file(filename, "RESOURCE_FORK", destf, NULL); - if (err) - return err; - - destf.fill(0, pad128(resource_fork->size())); - } - - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t write_fork(imgtool::partition &partition, const char *filename, const char *fork, - imgtool::stream &sourcef, uint64_t pos, uint64_t fork_len, util::option_resolution *opts) -{ - imgtoolerr_t err; - imgtool::stream::ptr mem_stream; - size_t len; - - if (fork_len > 0) - { - mem_stream = imgtool::stream::open_mem(nullptr, 0); - if (!mem_stream) - return IMGTOOLERR_OUTOFMEMORY; - - sourcef.seek(pos, SEEK_SET); - len = imgtool::stream::transfer(*mem_stream, sourcef, fork_len); - if (len < fork_len) - mem_stream->fill(0, fork_len); - - mem_stream->seek(0, SEEK_SET); - err = partition.write_file(filename, fork, *mem_stream, opts, NULL); - if (err) - return err; - } - - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t macbinary_writefile(imgtool::partition &partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts) -{ - static const uint32_t attrs[] = - { - IMGTOOLATTR_TIME_CREATED, - IMGTOOLATTR_TIME_LASTMODIFIED, - IMGTOOLATTR_INT_MAC_TYPE, - IMGTOOLATTR_INT_MAC_CREATOR, - IMGTOOLATTR_INT_MAC_FINDERFLAGS, - IMGTOOLATTR_INT_MAC_COORDX, - IMGTOOLATTR_INT_MAC_COORDY, - IMGTOOLATTR_INT_MAC_FINDERFOLDER, - IMGTOOLATTR_INT_MAC_SCRIPTCODE, - IMGTOOLATTR_INT_MAC_EXTENDEDFLAGS, - 0 - }; - imgtoolerr_t err; - imgtool::image *image = &partition.image(); - uint8_t header[128]; - uint32_t datafork_size; - uint32_t resourcefork_size; - uint64_t total_size; - uint32_t creation_time; - uint32_t lastmodified_time; - //int version; - imgtool_attribute attr_values[10]; - - uint32_t type_code; - uint32_t creator_code; - uint16_t finder_flags; - uint16_t coord_x; - uint16_t coord_y; - uint16_t finder_folder; - uint8_t script_code = 0; - uint8_t extended_flags = 0; - - /* read in the header */ - memset(header, 0, sizeof(header)); - sourcef.read(header, sizeof(header)); - - /* check magic and zero fill bytes */ - if (header[0] != 0x00) - return IMGTOOLERR_CORRUPTFILE; - if (header[74] != 0x00) - return IMGTOOLERR_CORRUPTFILE; - if (header[82] != 0x00) - return IMGTOOLERR_CORRUPTFILE; - - datafork_size = pick_integer_be(header, 83, 4); - resourcefork_size = pick_integer_be(header, 87, 4); - total_size = sourcef.size(); - - /* size of a MacBinary header is always 128 bytes */ - if (total_size - pad128(datafork_size) - pad128(resourcefork_size) != 128) - return IMGTOOLERR_CORRUPTFILE; - - /* check filename length byte */ - if ((header[1] <= 0x00) || (header[1] > 0x3F)) - return IMGTOOLERR_CORRUPTFILE; - - /* check the CRC */ - if (pick_integer_be(header, 124, 2) != ccitt_crc16(0, header, 124)) - { - /* the CRC does not match; this file is MacBinary I */ - //version = 1; - } - else if (pick_integer_be(header, 102, 4) != 0x6D42494E) - { - /* did not see 'mBIN'; this file is MacBinary II */ - if (header[122] < 0x81) - return IMGTOOLERR_CORRUPTFILE; - if (header[123] < 0x81) - return IMGTOOLERR_CORRUPTFILE; - //version = 2; - } - else - { - /* we did see 'mBIN'; this file is MacBinary III */ - if (header[122] < 0x82) - return IMGTOOLERR_CORRUPTFILE; - if (header[123] < 0x81) - return IMGTOOLERR_CORRUPTFILE; - //version = 3; - } - - type_code = pick_integer_be(header, 65, 4); - creator_code = pick_integer_be(header, 69, 4); - finder_flags = pick_integer_be(header, 73, 1) << 8; - coord_x = pick_integer_be(header, 75, 2); - coord_y = pick_integer_be(header, 77, 2); - finder_folder = pick_integer_be(header, 79, 2); - creation_time = pick_integer_be(header, 91, 4); - lastmodified_time = pick_integer_be(header, 95, 4); - - if (image) - { - /* write out both forks */ - err = write_fork(partition, filename, "", sourcef, sizeof(header), datafork_size, opts); - if (err) - return err; - err = write_fork(partition, filename, "RESOURCE_FORK", sourcef, sizeof(header) + pad128(datafork_size), resourcefork_size, opts); - if (err) - return err; - - /* set up attributes */ - attr_values[0].t = mac_crack_time(creation_time).to_time_t(); - attr_values[1].t = mac_crack_time(lastmodified_time).to_time_t(); - attr_values[2].i = type_code; - attr_values[3].i = creator_code; - attr_values[4].i = finder_flags; - attr_values[5].i = coord_x; - attr_values[6].i = coord_y; - attr_values[7].i = finder_folder; - attr_values[8].i = script_code; - attr_values[9].i = extended_flags; - - err = partition.put_file_attributes(filename, attrs, attr_values); - if (err) - return err; - } - - return IMGTOOLERR_SUCCESS; -} - - -// this was completely broken - it was calling macbinary_writefile() with a nullptr partition -#if 0 -static imgtoolerr_t macbinary_checkstream(imgtool::stream &stream, imgtool_suggestion_viability_t *viability) -{ - imgtoolerr_t err; - - err = macbinary_writefile(NULL, NULL, NULL, stream, NULL); - if (err == IMGTOOLERR_CORRUPTFILE) - { - /* the filter returned corrupt; this is not a valid file */ - *viability = SUGGESTION_END; - err = IMGTOOLERR_SUCCESS; - } - else if (err == IMGTOOLERR_SUCCESS) - { - /* success; lets recommend this filter */ - *viability = SUGGESTION_RECOMMENDED; - } - return err; -} -#endif - - - -void filter_macbinary_getinfo(uint32_t state, union filterinfo *info) -{ - switch(state) - { - case FILTINFO_STR_NAME: info->s = "macbinary"; break; - case FILTINFO_STR_HUMANNAME: info->s = "MacBinary"; break; - case FILTINFO_STR_EXTENSION: info->s = "bin"; break; - case FILTINFO_PTR_READFILE: info->read_file = macbinary_readfile; break; - case FILTINFO_PTR_WRITEFILE: info->write_file = macbinary_writefile; break; - //case FILTINFO_PTR_CHECKSTREAM: info->check_stream = macbinary_checkstream; break; - } -} diff -Nru mame-0.250+dfsg.1/src/tools/imgtool/modules/mac.cpp mame-0.251+dfsg.1/src/tools/imgtool/modules/mac.cpp --- mame-0.250+dfsg.1/src/tools/imgtool/modules/mac.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/tools/imgtool/modules/mac.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,6438 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Raphael Nabet -/**************************************************************************** - - mac.c - - Handlers for Classic MacOS images (MFS and HFS formats). - - Raphael Nabet, 2003 - - TODO: - * add support for HFS write - -***************************************************************************** - - terminology: - disk block: 512-byte logical block. With sectors of 512 bytes, one logical - block is equivalent to one sector; when the sector size is not 512 - bytes, sectors are split or grouped to make 512-byte disk blocks. - allocation block: The File Manager always allocates logical disk blocks to - a file in groups called allocation blocks; an allocation block is - simply a group of consecutive logical blocks. The size of a volume's - allocation blocks depends on the capacity of the volume; there can be - at most 4094 (MFS) or 65535 (HFS) allocation blocks on a volume. - MFS (Macintosh File System): File system used by the early Macintosh. This - File system does not support folders (you may create folders on a MFS - disk, but such folders are not implemented on File System level but in - the Desktop file, and they are just a hint of how programs should list - files, i.e. you can't have two files with the same name on a volume - even if they are in two different folders), and it is not adequate for - large volumes. - HFS (Hierarchical File System): File system introduced with the HD20 - harddisk, the Macintosh Plus ROMs, and system 3.2 (IIRC). Contrary to - MFS, it supports hierarchical folders. Also, it is suitable for larger - volumes. - HFS+ (HFS Plus): New file system introduced with MacOS 8.1. It has a lot - in common with HFS, but it supports more allocation blocks (up to 4 - billions IIRC), and many extra features, including longer file names - (up to 255 UTF-16 Unicode chars). - tag data: with the GCR encoding, each disk block is associated with a 12 - (3.5" floppies) or 20 (HD20) byte tag record. This tag record contains - information on the block allocation status (whether it is allocated - in a file or free, which file is it belongs to, what offset the block - has in the file). This enables to recover all files whose data blocks - are still on the disk surface even if the disk catalog has been trashed - completely (though most file properties, like the name, type and - logical EOF, are not saved in the tag record and cannot be recovered). - - Organization of an MFS volume: - - Logical Contents Allocation block - block - - 0 - 1: System startup information - 2 - m: Master directory block (MDB) - + allocation block link pointers - m+1 - n: Directory file - n+1 - p-2: Other files and free space 0 - ((p-2)-(n+1))/k - p-1: Alternate MDB - p: Not used - usually, k = 2, m = 3, n = 16, p = 799 (SSDD 3.5" floppy) - with DSDD 3.5" floppy, I assume that p = 1599, but I don't know the other - values - - - Master Directory Block: - - Offset Length Description - ------ ------ ----------- - 0 2 Volume Signature - 2 4 Creation Date - 6 4 Last Modification Date - 10 2 Volume Attributes - 12 2 Number of Files In Root Directory - 14 2 First Block of Volume Bitmap - ... - - Links: - http://developer.apple.com/documentation/mac/Files/Files-99.html - http://developer.apple.com/documentation/mac/Files/Files-100.html - http://developer.apple.com/documentation/mac/Files/Files-101.html - http://developer.apple.com/documentation/mac/Files/Files-102.html - http://developer.apple.com/documentation/mac/Files/Files-103.html - http://developer.apple.com/documentation/mac/Files/Files-104.html - http://developer.apple.com/documentation/mac/Files/Files-105.html - http://developer.apple.com/documentation/mac/Files/Files-106.html - http://developer.apple.com/documentation/mac/Devices/Devices-121.html#MARKER-2-169 - http://developer.apple.com/documentation/mac/MoreToolbox/MoreToolbox-99.html - -*****************************************************************************/ - -#include "imgtool.h" -#include "charconv.h" -#include "iflopimg.h" - -#include "macutil.h" - -#include "formats/ap_dsk35.h" -#include "formats/imageutl.h" - -#include "opresolv.h" - -#include -#include -#include -#include -#include - -/* if 1, check consistency of B-Tree (most of the checks will eventually be - suppressed when the image is opened as read-only and only enabled when - the image is opened as read/write) */ -#define BTREE_CHECKS 1 -/* if 1, check consistency of tag data when we are at risk of corrupting the - disk (file write and allocation) */ -#define TAG_CHECKS 1 -/* if 1, check consistency of tag data when reading files (not recommended - IMHO) */ -#define TAG_EXTRA_CHECKS 0 - -#if 0 -#pragma mark MISCELLANEOUS UTILITIES -#endif - -static const uint8_t apple35_tracklen_800kb[80] = -{ - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 -}; - -static int apple35_sectors_per_track(floppy_image_legacy *image, int track) -{ - int sectors; - - assert(track >= 0); - assert(track < std::size(apple35_tracklen_800kb)); - - sectors = apple35_tracklen_800kb[track]; - return sectors; -} - -struct UINT16BE -{ - uint8_t bytes[2]; -}; - -struct UINT24BE -{ - uint8_t bytes[3]; -}; - -struct UINT32BE -{ - uint8_t bytes[4]; -}; - -static inline uint16_t get_UINT16BE(UINT16BE word) -{ - return (word.bytes[0] << 8) | word.bytes[1]; -} - -static inline void set_UINT16BE(UINT16BE *word, uint16_t data) -{ - word->bytes[0] = (data >> 8) & 0xff; - word->bytes[1] = data & 0xff; -} - -static inline uint32_t get_UINT24BE(UINT24BE word) -{ - return (word.bytes[0] << 16) | (word.bytes[1] << 8) | word.bytes[2]; -} - -[[maybe_unused]] static inline void set_UINT24BE(UINT24BE *word, uint32_t data) -{ - word->bytes[0] = (data >> 16) & 0xff; - word->bytes[1] = (data >> 8) & 0xff; - word->bytes[2] = data & 0xff; -} - -static inline uint32_t get_UINT32BE(UINT32BE word) -{ - return (word.bytes[0] << 24) | (word.bytes[1] << 16) | (word.bytes[2] << 8) | word.bytes[3]; -} - -static inline void set_UINT32BE(UINT32BE *word, uint32_t data) -{ - word->bytes[0] = (data >> 24) & 0xff; - word->bytes[1] = (data >> 16) & 0xff; - word->bytes[2] = (data >> 8) & 0xff; - word->bytes[3] = data & 0xff; -} - -/* - Macintosh string: first byte is length -*/ -typedef uint8_t mac_str27[28]; -typedef uint8_t mac_str31[32]; -typedef uint8_t mac_str63[64]; -typedef uint8_t mac_str255[256]; - -/* - Macintosh type/creator code: 4 char value -*/ -typedef UINT32BE mac_type; - -/* - point record, with the y and x coordinates -*/ -struct mac_point -{ - UINT16BE v; /* actually signed */ - UINT16BE h; /* actually signed */ -}; - -/* - rect record, with the corner coordinates -*/ -struct mac_rect -{ - UINT16BE top; /* actually signed */ - UINT16BE left; /* actually signed */ - UINT16BE bottom;/* actually signed */ - UINT16BE right; /* actually signed */ -}; - -/* - FInfo (Finder file info) record -*/ -struct mac_FInfo -{ - mac_type type; /* file type */ - mac_type creator; /* file creator */ - UINT16BE flags; /* Finder flags */ - mac_point location; /* file's location in window */ - /* If set to {0, 0}, and the inited flag is - clear, the Finder will place the item - automatically */ - UINT16BE fldr; /* MFS: window that contains file */ - /* -3: trash */ - /* -2: desktop */ - /* -1: new folder template?????? */ - /* 0: disk window ("root") */ - /* > 0: specific folder, index of FOBJ resource??? */ - /* The FOBJ resource contains some folder info; - the name of the resource is the folder name. */ - /* HFS & HFS+: - System 7: The window in which the file???s icon appears - System 8: reserved (set to 0) */ -}; - -/* - FXInfo (Finder extended file info) record -- not found in MFS -*/ -struct mac_FXInfo -{ - UINT16BE iconID; /* System 7: An ID number for the file???s icon; the - numbers that identify icons are assigned by the - Finder */ - /* System 8: Reserved (set to 0) */ - UINT16BE reserved[3]; /* Reserved (set to 0) */ - uint8_t script; /* System 7: if high-bit is set, the script code - for displaying the file name; ignored otherwise */ - /* System 8: Extended flags MSB(?) */ - uint8_t XFlags; /* Extended flags */ - UINT16BE comment; /* System 7: Comment ID if high-bit is clear */ - /* System 8: Reserved (set to 0) */ - UINT32BE putAway; /* Put away folder ID (i.e. if the user moves the - file onto the desktop, the directory ID of the - folder from which the user moves the file is - saved here) */ -}; - -/* - DInfo (Finder folder info) record -- not found in MFS -*/ -struct mac_DInfo -{ - mac_rect rect; /* Folder's window bounds */ - UINT16BE flags; /* Finder flags, e.g. kIsInvisible, kNameLocked, etc */ - mac_point location; /* Location of the folder in parent window */ - /* If set to {0, 0}, and the initied flag is - clear, the Finder will place the item - automatically */ - UINT16BE view; /* System 7: The manner in which folders are - displayed */ - /* System 8: reserved (set to 0) */ -}; - -/* - DXInfo (Finder extended folder info) record -- not found in MFS -*/ -struct mac_DXInfo -{ - mac_point scroll; /* Scroll position */ - UINT32BE openChain; /* System 7: chain of directory IDs for open folders */ - /* System 8: reserved (set to 0) */ - uint8_t script; /* System 7: if high-bit is set, the script code - for displaying the folder name; ignored otherwise */ - /* System 8: Extended flags MSB(?) */ - uint8_t XFlags; /* Extended flags */ - UINT16BE comment; /* System 7: Comment ID if high-bit is clear */ - /* System 8: Reserved (set to 0) */ - UINT32BE putAway; /* Put away folder ID (i.e. if the user moves the - folder onto the desktop, the directory ID of - the folder from which the user moves it is - saved here) */ -}; - -/* - defines for FInfo & DInfo flags fields -*/ -enum -{ - fif_isOnDesk = 0x0001, /* System 6: set if item is located on desktop (files and folders) */ - /* System 7: Unused (set to 0) */ - fif_color = 0x000E, /* color coding (files and folders) */ - fif_colorReserved = 0x0010, /* System 6: reserved??? */ - /* System 7: Unused (set to 0) */ - fif_requiresSwitchLaunch= 0x0020, /* System 6: ??? */ - /* System 7: Unused (set to 0) */ - fif_isShared = 0x0040, /* Applications files: if set, the */ - /* application can be executed by */ - /* multiple users simultaneously. */ - /* Otherwise, set to 0. */ - fif_hasNoINITs = 0x0080, /* Extensions/Control Panels: if set(?), */ - /* this file contains no INIT */ - /* resource */ - /* Otherwise, set to 0. */ - fif_hasBeenInited = 0x0100, /* System 6: The Finder has recorded information from - the file???s bundle resource into the desktop - database and given the file or folder a - position on the desktop. */ - /* System 7? 8?: Clear if the file contains desktop database */ - /* resources ('BNDL', 'FREF', 'open', 'kind'...) */ - /* that have not been added yet. Set only by the Finder */ - /* Reserved for folders - make sure this bit is cleared for folders */ - - /* bit 0x0200 was at a point (AOCE for system 7.x?) the letter bit for - AOCE, but was reserved before and it is reserved again in recent MacOS - releases. */ - - fif_hasCustomIcon = 0x0400, /* (files and folders) */ - fif_isStationery = 0x0800, /* System 7: (files only) */ - fif_nameLocked = 0x1000, /* (files and folders) */ - fif_hasBundle = 0x2000, /* Files only */ - fif_isInvisible = 0x4000, /* (files and folders) */ - fif_isAlias = 0x8000 /* System 7: (files only) */ -}; - -/* - mac_to_c_strncpy() - - Encode a macintosh string as a C string. The NUL character is escaped, - using the "%00" sequence. To avoid any ambiguity, '%' is escaped with - '%25'. - - dst (O): C string - n (I): length of buffer pointed to by dst - src (I): macintosh string (first byte is length) -*/ -static void mac_to_c_strncpy(char *dst, int n, uint8_t *src) -{ - size_t len = src[0]; - int i, j; - - i = j = 0; - while ((i < len) && (j < n-1)) - { - switch (src[i+1]) - { - case '\0': - if (j >= n-3) - goto exit; - dst[j] = '%'; - dst[j+1] = '0'; - dst[j+2] = '0'; - j += 3; - break; - - case '%': - if (j >= n-3) - goto exit; - dst[j] = '%'; - dst[j+1] = '2'; - dst[j+2] = '5'; - j += 3; - break; - - default: - dst[j] = src[i+1]; - j++; - break; - } - i++; - } - -exit: - if (n > 0) - dst[j] = '\0'; -} - -/* - c_to_mac_strncpy() - - Decode a C string to a macintosh string. The NUL character is escaped, - using the "%00" sequence. To avoid any ambiguity, '%' is escaped with - '%25'. - - dst (O): macintosh string (first byte is length) - src (I): C string - n (I): length of string pointed to by src -*/ -static void c_to_mac_strncpy(mac_str255 dst, const char *src, int n) -{ - size_t len; - int i; - char buf[3]; - - - len = 0; - i = 0; - while ((i < n) && (len < 255)) - { - switch (src[i]) - { - case '%': - if (i >= n-2) - goto exit; - buf[0] = src[i+1]; - buf[1] = src[i+2]; - buf[2] = '\0'; - dst[len+1] = strtoul(buf, NULL, 16); - i += 3; - break; - - default: - dst[len+1] = src[i]; - i++; - break; - } - len++; - } - -exit: - dst[0] = len; -} - -/* - mac_strcmp() - - Compare two macintosh strings - - s1 (I): the string to compare - s2 (I): the comparison string - - Return a zero if s1 and s2 are equal, a negative value if s1 is less than - s2, and a positive value if s1 is greater than s2. -*/ -[[maybe_unused]] static int mac_strcmp(const uint8_t *s1, const uint8_t *s2) -{ - size_t common_len; - - common_len = (s1[0] <= s2[0]) ? s1[0] : s2[0]; - - return memcmp(s1+1, s2+1, common_len) || ((int)s1[0] - s2[0]); -} - -/* - mac_stricmp() - - Compare two macintosh strings in a manner compatible with the macintosh HFS - file system. - - This functions emulates the way HFS (and MFS???) sorts string: this is - equivalent to the RelString macintosh toolbox call with the caseSensitive - parameter as false and the diacSensitive parameter as true. - - s1 (I): the string to compare - s2 (I): the comparison string - - Return a zero if s1 and s2 are equal, a negative value if s1 is less than - s2, and a positive value if s1 is greater than s2. - -Known issues: - Using this function makes sense with the MacRoman encoding, as it means the - computer will regard "DeskTop File", "Desktop File", "Desktop file", etc, - as the same file. (UNIX users will probably regard this as an heresy, but - you must consider that, unlike UNIX, the Macintosh was not designed for - droids, but error-prone human beings that may forget about case.) - - (Also, letters with diacritical signs follow the corresponding letters - without diacritical signs in the HFS catalog file. This does not matter, - though, since the Finder will not display files in the HFS catalog order, - but it will instead sort files according to whatever order is currently - selected in the View menu.) - - However, with other text encodings, the behavior will be completely absurd. - For instance, with the Greek encoding, it will think that the degree symbol - is the same letter (with different case) as the upper-case Psi, so that if - a program asks for a file called "90??" on a Greek HFS volume, and there is - a file called "90??" on this volume, file "90??" will be opened. - Results will probably be even weirder with 2-byte scripts like Japanese or - Chinese. Of course, we are not going to fix this issue, since doing so - would break the compatibility with the original Macintosh OS. -*/ - -static int mac_stricmp(const uint8_t *s1, const uint8_t *s2) -{ - static const unsigned char mac_char_sort_table[256] = - { - /* \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 */ - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - /* \x08 \x09 \x0a \x0b \x0c \x0d \x0e \x0f */ - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - /* \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 */ - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - /* \x18 \x19 \x1a \x1b \x1c \x1d \x1e \x1f */ - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - /* \x20 \x21 \x22 \x23 \x24 \x25 \x26 \x27 */ - 0x20, 0x21, 0x22, 0x27, 0x28, 0x29, 0x2a, 0x2b, - /* \x28 \x29 \x2a \x2b \x2c \x2d \x2e \x2f */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, - /* \x30 \x31 \x32 \x33 \x34 \x35 \x36 \x37 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, - /* \x38 \x39 \x3a \x3b \x3c \x3d \x3e \x3f */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, - /* \x40 \x41 \x42 \x43 \x44 \x45 \x46 \x47 */ - 0x46, 0x47, 0x51, 0x52, 0x54, 0x55, 0x5a, 0x5b, - /* \x48 \x49 \x4a \x4b \x4c \x4d \x4e \x4f */ - 0x5c, 0x5d, 0x62, 0x63, 0x64, 0x65, 0x66, 0x68, - /* \x50 \x51 \x52 \x53 \x54 \x55 \x56 \x57 */ - 0x71, 0x72, 0x73, 0x74, 0x76, 0x77, 0x7c, 0x7d, - /* \x58 \x59 \x5a \x5b \x5c \x5d \x5e \x5f */ - 0x7e, 0x7f, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, - /* \x60 \x61 \x62 \x63 \x64 \x65 \x66 \x67 */ - 0x4d, 0x47, 0x51, 0x52, 0x54, 0x55, 0x5a, 0x5b, - /* \x68 \x69 \x6a \x6b \x6c \x6d \x6e \x6f */ - 0x5c, 0x5d, 0x62, 0x63, 0x64, 0x65, 0x66, 0x68, - /* \x70 \x71 \x72 \x73 \x74 \x75 \x76 \x77 */ - 0x71, 0x72, 0x73, 0x74, 0x76, 0x77, 0x7c, 0x7d, - /* \x78 \x79 \x7a \x7b \x7c \x7d \x7e \x7f */ - 0x7e, 0x7f, 0x81, 0x87, 0x88, 0x89, 0x8a, 0x8b, - /* \x80 \x81 \x82 \x83 \x84 \x85 \x86 \x87 */ - 0x49, 0x4b, 0x53, 0x56, 0x67, 0x69, 0x78, 0x4e, - /* \x88 \x89 \x8a \x8b \x8c \x8d \x8e \x8f */ - 0x48, 0x4f, 0x49, 0x4a, 0x4b, 0x53, 0x56, 0x57, - /* \x90 \x91 \x92 \x93 \x94 \x95 \x96 \x97 */ - 0x58, 0x59, 0x5e, 0x5f, 0x60, 0x61, 0x67, 0x6d, - /* \x98 \x99 \x9a \x9b \x9c \x9d \x9e \x9f */ - 0x6e, 0x6f, 0x69, 0x6a, 0x79, 0x7a, 0x7b, 0x78, - /* \xa0 \xa1 \xa2 \xa3 \xa4 \xa5 \xa6 \xa7 */ - 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x75, - /* \xa8 \xa9 \xaa \xab \xac \xad \xae \xaf */ - 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x4c, 0x6b, - /* \xb0 \xb1 \xb2 \xb3 \xb4 \xb5 \xb6 \xb7 */ - 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, - /* \xb8 \xb9 \xba \xbb \xbc \xbd \xbe \xbf */ - 0xa1, 0xa2, 0xa3, 0x50, 0x70, 0xa4, 0x4c, 0x6b, - /* \xc0 \xc1 \xc2 \xc3 \xc4 \xc5 \xc6 \xc7 */ - 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0x25, - /* \xc8 \xc9 \xca \xcb \xcc \xcd \xce \xcf */ - 0x26, 0xac, 0x20, 0x48, 0x4a, 0x6a, 0x6c, 0x6c, - /* \xd0 \xd1 \xd2 \xd3 \xd4 \xd5 \xd6 \xd7 */ - 0xad, 0xae, 0x23, 0x24, 0x2c, 0x2d, 0xaf, 0xb0, - /* \xd8 \xd9 \xda \xdb \xdc \xdd \xde \xdf */ - 0x80, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - /* \xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 */ - 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, - /* \xe8 \xe9 \xea \xeb \xec \xed \xee \xef */ - 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - /* \xf0 \xf1 \xf2 \xf3 \xf4 \xf5 \xf6 \xf7 */ - 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - /* \xf8 \xf9 \xfa \xfb \xfc \xfd \xfe \xff */ - 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7 - }; - - size_t common_len; - int i; - int c1, c2; - - common_len = (s1[0] <= s2[0]) ? s1[0] : s2[0]; - - for (i=0; i n) - len = n; - dest[0] = len; - memcpy(dest+1, src+1, len); -} - -/* - disk image reference -*/ -struct mac_l1_imgref -{ - imgtool::image *image; - uint32_t heads; -}; - - - -static imgtoolerr_t mac_find_block(mac_l1_imgref *image, int block, - uint32_t *track, uint32_t *head, uint32_t *sector) -{ - *track = 0; - while(block >= (apple35_sectors_per_track(imgtool_floppy(*image->image), *track) * image->heads)) - { - block -= (apple35_sectors_per_track(imgtool_floppy(*image->image), (*track)++) * image->heads); - if (*track >= 80) - return IMGTOOLERR_SEEKERROR; - } - - *head = block / apple35_sectors_per_track(imgtool_floppy(*image->image), *track); - *sector = block % apple35_sectors_per_track(imgtool_floppy(*image->image), *track); - return IMGTOOLERR_SUCCESS; -} - - - -/* - image_read_block() - - Read one 512-byte block of data from a macintosh disk image - - image (I/O): level-1 image reference - block (I): address of block to read - dest (O): buffer where block data should be stored - - Return imgtool error code -*/ -static imgtoolerr_t image_read_block(mac_l1_imgref *image, uint32_t block, void *dest) -{ - imgtoolerr_t err; - floperr_t ferr; - uint32_t track, head, sector; - - err = mac_find_block(image, block, &track, &head, §or); - if (err) - return err; - - ferr = floppy_read_sector(imgtool_floppy(*image->image), head, track, sector, 0, dest, 512); - if (ferr) - return imgtool_floppy_error(ferr); - - return IMGTOOLERR_SUCCESS; -} - -/* - image_write_block() - - Read one 512-byte block of data from a macintosh disk image - - image (I/O): level-1 image reference - block (I): address of block to write - src (I): buffer with the block data - - Return imgtool error code -*/ -static imgtoolerr_t image_write_block(mac_l1_imgref *image, uint32_t block, const void *src) -{ - imgtoolerr_t err; - floperr_t ferr; - uint32_t track, head, sector; - - err = mac_find_block(image, block, &track, &head, §or); - if (err) - return err; - - ferr = floppy_write_sector(imgtool_floppy(*image->image), head, track, sector, 0, src, 512, 0); /* TODO: pass ddam argument from imgtool */ - if (ferr) - return imgtool_floppy_error(ferr); - - return IMGTOOLERR_SUCCESS; -} - -/* - image_get_tag_len() - - Get length of tag data (12 for GCR floppies, 20 for HD20, 0 otherwise) - - image (I/O): level-1 image reference - - Return tag length -*/ -static inline int image_get_tag_len(mac_l1_imgref *image) -{ - return 0; -} - - - -/* - image_read_tag() - - Read a 12- or 20-byte tag record associated with a disk block - - image (I/O): level-1 image reference - block (I): address of block to read - dest (O): buffer where tag data should be stored - - Return imgtool error code -*/ -static imgtoolerr_t image_read_tag(mac_l1_imgref *image, uint32_t block, void *dest) -{ - return IMGTOOLERR_UNEXPECTED; -} - -/* - image_write_tag() - - Write a 12- or 20-byte tag record associated with a disk block - - image (I/O): level-1 image reference - block (I): address of block to write - src (I): buffer with the tag data - - Return imgtool error code -*/ -static imgtoolerr_t image_write_tag(mac_l1_imgref *image, uint32_t block, const void *src) -{ - return IMGTOOLERR_UNEXPECTED; -} - -#if 0 -#pragma mark - -#pragma mark MFS/HFS WRAPPERS -#endif - -enum mac_format -{ - L2I_MFS, - L2I_HFS -}; - -enum mac_forkID { data_fork = 0x00, rsrc_fork = 0xff }; - -/* - MFS image ref -*/ -struct mfs_l2_imgref -{ - uint16_t dir_num_files; - uint16_t dir_start; - uint16_t dir_blk_len; - - uint16_t ABStart; - - mac_str27 volname; - - unsigned char ABlink_dirty[13]; /* dirty flag for each disk block in the ABlink array */ - uint8_t ABlink[6141]; -}; - -/* - HFS extent descriptor -*/ -struct hfs_extent -{ - UINT16BE stABN; /* first allocation block */ - UINT16BE numABlks; /* number of allocation blocks */ -}; - -/* - HFS likes to group extents by 3 (it is 8 with HFS+), so we create a - specific type. -*/ -typedef hfs_extent hfs_extent_3[3]; - -/* - MFS open file ref -*/ -struct mfs_fileref -{ - uint16_t stBlk; /* first allocation block of file */ -}; - -/* - HFS open file ref -*/ -struct hfs_fileref -{ - hfs_extent_3 extents; /* first 3 file extents */ - - uint32_t parID; /* CNID of parent directory (undefined for extent & catalog files) */ - mac_str31 filename; /* file name (undefined for extent & catalog files) */ -}; - -struct mac_l2_imgref; - -/* - MFS/HFS open file ref -*/ -struct mac_fileref -{ - struct mac_l2_imgref *l2_img; /* image pointer */ - - uint32_t fileID; /* file ID (a.k.a. CNID in HFS/HFS+) */ - - mac_forkID forkType; /* 0x00 for data, 0xff for resource */ - - uint32_t eof; /* logical end-of-file */ - uint32_t pLen; /* physical end-of-file */ - - uint32_t crPs; /* current position in file */ - - uint8_t reload_buf; - uint8_t block_buffer[512]; /* buffer with current file block */ - - union - { - mfs_fileref mfs; - hfs_fileref hfs; - }; -}; - -/* - open BT ref -*/ -struct mac_BTref -{ - struct mac_fileref fileref; /* open B-tree file ref */ - - uint16_t nodeSize; /* size of a node, in bytes */ - uint32_t rootNode; /* node number of root node */ - uint32_t firstLeafNode; /* node number of first leaf node */ - uint32_t attributes; /* persistent attributes about the tree */ - uint16_t treeDepth; /* maximum height (usually leaf nodes) */ - uint16_t maxKeyLength; /* maximum key length */ - - /* function to compare keys during tree searches */ - int (*key_compare_func)(const void *key1, const void *key2); - - void *node_buf; /* current node buffer */ -}; - -/* - Constants for BTHeaderRec attributes field -*/ -enum -{ - btha_badCloseMask = 0x00000001, /* reserved */ - btha_bigKeysMask = 0x00000002, /* key length field is 16 bits */ - btha_variableIndexKeysMask = 0x00000004 /* keys in index nodes are variable length */ -}; - -/* - HFS image ref -*/ -struct hfs_l2_imgref -{ - uint16_t VBM_start; - - uint16_t ABStart; - - mac_str27 volname; - - mac_BTref extents_BT; - mac_BTref cat_BT; - - uint8_t VBM[8192]; -}; - -/* - MFS/HFS image ref -*/ -struct mac_l2_imgref -{ - mac_l1_imgref l1_img; - - uint16_t numABs; - uint16_t blocksperAB; - - uint16_t freeABs; - - uint32_t nxtCNID; /* nxtFNum in MFS, nxtCNID in HFS */ - - mac_format format; - union - { - mfs_l2_imgref mfs; - hfs_l2_imgref hfs; - } u; -}; - -/* - MFS Master Directory Block -*/ -struct mfs_mdb -{ - uint8_t sigWord[2]; /* volume signature - always $D2D7 */ - UINT32BE crDate; /* date and time of volume creation */ - UINT32BE lsMod/*lsBkUp???*/;/* date and time of last modification (backup???) */ - UINT16BE atrb; /* volume attributes (0x0000) */ - /* bit 15 is set if volume is locked by software */ - UINT16BE nmFls; /* number of files in directory */ - UINT16BE dirSt; /* first block of directory */ - - UINT16BE blLn; /* length of directory in blocks (0x000C) */ - UINT16BE nmAlBlks; /* number of allocation blocks in volume (0x0187) */ - UINT32BE alBlkSiz; /* size (in bytes) of allocation blocks (0x00000400) */ - UINT32BE clpSiz; /* default clump size - number of bytes to allocate - when a file grows (0x00002000) */ - UINT16BE alBlSt; /* first allocation block in volume (0x0010) */ - - UINT32BE nxtFNum; /* next unused file number */ - UINT16BE freeABs; /* number of unused allocation blocks */ - - mac_str27 VN; /* volume name */ - - uint8_t ABlink[512-64];/* Link array for file ABs. Array of nmAlBlks - 12-bit-long entries, indexed by AB address. If an - AB belongs to no file, the entry is 0; if an AB is - the last in any file, the entry is 1; if an AB - belongs to a file and is not the last one, the - entry is the AB address of the next file AB plus 1. - Note that the array extends on as many consecutive - disk blocks as needed (usually the MDB block plus - the next one). Incidentally, this array is not - saved in the secondary MDB: presumably, the idea - was that the disk utility could rely on the tag - data to rebuild the link array if it should ever - be corrupted. */ -}; - -/* - HFS Master Directory Block -*/ -struct hfs_mdb -{ -/* First fields are similar to MFS, though several fields have a different meaning */ - uint8_t sigWord[2]; /* volume signature - always $D2D7 */ - UINT32BE crDate; /* date and time of volume creation */ - UINT32BE lsMod; /* date and time of last modification */ - UINT16BE atrb; /* volume attributes (0x0000) */ - /* bit 15 is set if volume is locked by software */ - UINT16BE nmFls; /* number of files in root folder */ - UINT16BE VBMSt; /* first block of volume bitmap */ - UINT16BE allocPtr; /* start of next allocation search */ - - UINT16BE nmAlBlks; /* number of allocation blocks in volume */ - UINT32BE alBlkSiz; /* size (in bytes) of allocation blocks */ - UINT32BE clpSiz; /* default clump size - number of bytes to allocate - when a file grows */ - UINT16BE alBlSt; /* first allocation block in volume (0x0010) */ - UINT32BE nxtCNID; /* next unused catalog node ID */ - UINT16BE freeABs; /* number of unused allocation blocks */ - mac_str27 VN; /* volume name */ - -/* next fields are HFS-specific */ - - UINT32BE volBkUp; /* date and time of last backup */ - UINT16BE vSeqNum; /* volume backup sequence number */ - UINT32BE wrCnt; /* volume write count */ - UINT32BE xtClpSiz; /* clump size for extents overflow file */ - UINT32BE ctClpSiz; /* clump size for catalog file */ - UINT16BE nmRtDirs; /* number of directories in root folder */ - UINT32BE filCnt; /* number of files in volume */ - UINT32BE dirCnt; /* number of directories in volume */ - uint8_t fndrInfo[32]; /* information used by the Finder */ - - union - { - struct - { - UINT16BE VCSize; /* size (in blocks) of volume cache */ - UINT16BE VBMCSize; /* size (in blocks) of volume bitmap cache */ - UINT16BE ctlCSize; /* size (in blocks) of common volume cache */ - }; - struct - { - UINT16BE embedSigWord; /* embedded volume signature */ - hfs_extent embedExtent; /* embedded volume location and size */ - } v2; - } u; - - UINT32BE xtFlSize; /* size (in bytes) of extents overflow file */ - hfs_extent_3 xtExtRec; /* extent record for extents overflow file */ - UINT32BE ctFlSize; /* size (in bytes) of catalog file */ - hfs_extent_3 ctExtRec; /* extent record for catalog file */ -}; - -/* to save a little stack space, we use the same buffer for MDB and next blocks */ -union img_open_buf -{ - struct mfs_mdb mfs_mdb; - struct hfs_mdb hfs_mdb; - uint8_t raw[512]; -}; - -/* - Information extracted from catalog/directory -*/ -struct mac_dirent -{ - uint16_t dataRecType; /* type of data record */ - - mac_FInfo flFinderInfo; /* information used by the Finder */ - mac_FXInfo flXFinderInfo; /* information used by the Finder */ - - uint8_t flags; /* bit 0=1 if file locked */ - - uint32_t fileID; /* file ID in directory/catalog */ - - uint32_t dataLogicalSize; /* logical EOF of data fork */ - uint32_t dataPhysicalSize; /* physical EOF of data fork */ - uint32_t rsrcLogicalSize; /* logical EOF of resource fork */ - uint32_t rsrcPhysicalSize; /* physical EOF of resource fork */ - - uint32_t createDate; /* date and time of creation */ - uint32_t modifyDate; /* date and time of last modification */ -}; - -/* - Tag record for GCR floppies (12 bytes) - - And, no, I don't know the format of the 20-byte tag record of the HD20 -*/ -struct floppy_tag_record -{ - UINT32BE fileID; /* a.k.a. CNID */ - /* a value of 1 seems to be the default for non-AB blocks, but this is not consistent */ - uint8_t ftype; /* bit 1 = 1 if resource fork */ - /* bit 0 = 1 if block is allocated to user file (i.e. it is not - in HFS extent & catalog, and not in non-AB blocks such - as MDB and MFS directory)??? */ - /* bit 7 seems to be used, but I don't know what it means */ - /* a value of $FF seems to be the default for non-AB blocks, but this is not consistent */ - uint8_t fattr; /* bit 0 = 1 if locked(?) */ - /* a value of $FF seems to be the default for non-AB blocks, but this is not consistent */ - UINT16BE fblock; /* relative file block number (enough for any volume up to 32 MBytes in size) */ - UINT32BE wrCnt; /* MFS: date and time of last write */ - /* HFS: seems related to the wrCnt field in the mdb, i.e. - each time a volume is written to, the current value of - wrCnt is written in the tag field, then it is incremented */ - /* (DV17 says "disk block number", but it cannot be true) */ -}; - -static void hfs_image_close(struct mac_l2_imgref &l2_img); -static imgtoolerr_t mfs_file_get_nth_block_address(struct mac_fileref *fileref, uint32_t block_num, uint32_t *block_address); -static imgtoolerr_t hfs_file_get_nth_block_address(struct mac_fileref *fileref, uint32_t block_num, uint32_t *block_address); -static imgtoolerr_t mfs_lookup_path(struct mac_l2_imgref *l2_img, const char *fpath, mac_str255 filename, mac_dirent *cat_info, int create_it); -static imgtoolerr_t hfs_lookup_path(struct mac_l2_imgref *l2_img, const char *fpath, uint32_t *parID, mac_str255 filename, mac_dirent *cat_info); -static imgtoolerr_t mfs_file_open(struct mac_l2_imgref *l2_img, const mac_str255 filename, mac_forkID fork, struct mac_fileref *fileref); -static imgtoolerr_t hfs_file_open(struct mac_l2_imgref *l2_img, uint32_t parID, const mac_str255 filename, mac_forkID fork, struct mac_fileref *fileref); -static imgtoolerr_t mfs_file_setABeof(struct mac_fileref *fileref, uint32_t newABeof); -static imgtoolerr_t mfs_dir_update(struct mac_fileref *fileref); - -static struct mac_l2_imgref *get_imgref(imgtool::image &img) -{ - return (struct mac_l2_imgref *) imgtool_floppy_extrabytes(img); -} - - -/* - mac_image_close - - Close a macintosh image. - - l2_img (I/O): level-2 image reference -*/ -static void mac_image_close(struct mac_l2_imgref &l2_img) -{ - switch (l2_img.format) - { - case L2I_MFS: - break; - - case L2I_HFS: - hfs_image_close(l2_img); - break; - } -} - -/* - mac_lookup_path - - Resolve a file path, and translate it to a parID + filename pair that enables - to do an efficient file search on a HFS volume (and an inefficient one on - MFS, but it is not an issue as MFS volumes typically have a few dozens - files, vs. possibly thousands with HFS volumes). - - l2_img (I/O): level-2 image reference - fpath (I): file path (C string) - parID (O): set to the CNID of the parent directory if the volume is in HFS - format (reserved for MFS volumes) - filename (O): set to the actual name of the file, with capitalization matching - the one on the volume rather than the one in the fpath parameter (Mac - string) - cat_info (O): catalog info for this file extracted from the catalog file - (may be NULL) - - Return imgtool error code -*/ -static imgtoolerr_t mac_lookup_path(struct mac_l2_imgref *l2_img, const char *fpath, uint32_t *parID, mac_str255 filename, mac_dirent *cat_info, int create_it) -{ - imgtoolerr_t err = IMGTOOLERR_UNEXPECTED; - - switch (l2_img->format) - { - case L2I_MFS: - *parID = 0; - err = mfs_lookup_path(l2_img, fpath, filename, cat_info, create_it); - break; - - case L2I_HFS: - err = hfs_lookup_path(l2_img, fpath, parID, filename, cat_info); - break; - } - return err; -} - -/* - mac_file_open - - Open a file located on a macintosh image - - l2_img (I/O): level-2 image reference - parID (I): CNID of the parent directory if the volume is in HFS format - (reserved for MFS volumes) - filename (I): name of the file (Mac string) - mac_forkID (I): tells which fork should be opened - fileref (O): mac file reference to open - - Return imgtool error code -*/ -static imgtoolerr_t mac_file_open(struct mac_l2_imgref *l2_img, uint32_t parID, const mac_str255 filename, mac_forkID fork, struct mac_fileref *fileref) -{ - switch (l2_img->format) - { - case L2I_MFS: - return mfs_file_open(l2_img, filename, fork, fileref); - - case L2I_HFS: - return hfs_file_open(l2_img, parID, filename, fork, fileref); - } - - return IMGTOOLERR_UNEXPECTED; -} - -/* - mac_file_read - - Read data from an open mac file, starting at current position in file - - fileref (I/O): mac file reference - len (I): number of bytes to read - dest (O): destination buffer - - Return imgtool error code -*/ -static imgtoolerr_t mac_file_read(struct mac_fileref *fileref, uint32_t len, void *dest) -{ - uint32_t block = 0; - floppy_tag_record tag; - int run_len; - imgtoolerr_t err = IMGTOOLERR_SUCCESS; - - if ((fileref->crPs + len) > fileref->eof) - /* EOF */ - return IMGTOOLERR_UNEXPECTED; - - while (len > 0) - { - if (fileref->reload_buf) - { - switch (fileref->l2_img->format) - { - case L2I_MFS: - err = mfs_file_get_nth_block_address(fileref, fileref->crPs/512, &block); - break; - - case L2I_HFS: - err = hfs_file_get_nth_block_address(fileref, fileref->crPs/512, &block); - break; - } - if (err) - return err; - err = image_read_block(&fileref->l2_img->l1_img, block, fileref->block_buffer); - if (err) - return err; - fileref->reload_buf = false; - - if (TAG_EXTRA_CHECKS) - { - /* optional check */ - if (image_get_tag_len(&fileref->l2_img->l1_img) == 12) - { - err = image_read_tag(&fileref->l2_img->l1_img, block, &tag); - if (err) - return err; - - if ((get_UINT32BE(tag.fileID) != fileref->fileID) - || (((tag.ftype & 2) != 0) != (fileref->forkType == rsrc_fork)) - || (get_UINT16BE(tag.fblock) != ((fileref->crPs/512) & 0xffff))) - { - return IMGTOOLERR_CORRUPTIMAGE; - } - } - } - } - run_len = 512 - (fileref->crPs % 512); - if (run_len > len) - run_len = len; - - memcpy(dest, fileref->block_buffer+(fileref->crPs % 512), run_len); - len -= run_len; - dest = (uint8_t *)dest + run_len; - fileref->crPs += run_len; - if ((fileref->crPs % 512) == 0) - fileref->reload_buf = true; - } - - return IMGTOOLERR_SUCCESS; -} - -/* - mac_file_write - - Write data to an open mac file, starting at current position in file - - fileref (I/O): mac file reference - len (I): number of bytes to read - dest (O): destination buffer - - Return imgtool error code -*/ -static imgtoolerr_t mac_file_write(struct mac_fileref *fileref, uint32_t len, const void *src) -{ - uint32_t block = 0; - floppy_tag_record tag; - int run_len; - imgtoolerr_t err = IMGTOOLERR_SUCCESS; - - if ((fileref->crPs + len) > fileref->eof) - /* EOF */ - return IMGTOOLERR_UNEXPECTED; - - while (len > 0) - { - switch (fileref->l2_img->format) - { - case L2I_MFS: - err = mfs_file_get_nth_block_address(fileref, fileref->crPs/512, &block); - break; - - case L2I_HFS: - err = hfs_file_get_nth_block_address(fileref, fileref->crPs/512, &block); - break; - } - if (err) - return err; - - if (TAG_CHECKS) - { - /* optional check */ - if (image_get_tag_len(&fileref->l2_img->l1_img) == 12) - { - err = image_read_tag(&fileref->l2_img->l1_img, block, &tag); - if (err) - return err; - - if ((get_UINT32BE(tag.fileID) != fileref->fileID) - || (((tag.ftype & 2) != 0) != (fileref->forkType == rsrc_fork)) - || (get_UINT16BE(tag.fblock) != ((fileref->crPs/512) & 0xffff))) - { - return IMGTOOLERR_CORRUPTIMAGE; - } - } - } - - if (fileref->reload_buf) - { - err = image_read_block(&fileref->l2_img->l1_img, block, fileref->block_buffer); - if (err) - return err; - fileref->reload_buf = false; - } - run_len = 512 - (fileref->crPs % 512); - if (run_len > len) - run_len = len; - - memcpy(fileref->block_buffer+(fileref->crPs % 512), src, run_len); - err = image_write_block(&fileref->l2_img->l1_img, block, fileref->block_buffer); - if (err) - return err; - /* update tag data */ - if (image_get_tag_len(&fileref->l2_img->l1_img) == 12) - { - if (!TAG_CHECKS) - { - err = image_read_tag(&fileref->l2_img->l1_img, block, &tag); - if (err) - return err; - } - - switch (fileref->l2_img->format) - { - case L2I_MFS: - set_UINT32BE(&tag.wrCnt, mac_time_now()); - break; - - case L2I_HFS: - /*set_UINT32BE(&tag.wrCnt, ++fileref->l2_img.u.hfs.wrCnt);*/ /* ***TODO*** */ - break; - } - - err = image_write_tag(&fileref->l2_img->l1_img, block, &tag); - if (err) - return err; - } - len -= run_len; - src = (const uint8_t *)src + run_len; - fileref->crPs += run_len; - if ((fileref->crPs % 512) == 0) - fileref->reload_buf = true; - } - - return IMGTOOLERR_SUCCESS; -} - -/* - mac_file_tell - - Get current position in an open mac file - - fileref (I/O): mac file reference - filePos (O): current position in file - - Return imgtool error code -*/ -[[maybe_unused]] static imgtoolerr_t mac_file_tell(struct mac_fileref *fileref, uint32_t *filePos) -{ - *filePos = fileref->crPs; - - return IMGTOOLERR_SUCCESS; -} - -/* - mac_file_seek - - Set current position in an open mac file - - fileref (I/O): mac file reference - filePos (I): new position in file - - Return imgtool error code -*/ -static imgtoolerr_t mac_file_seek(struct mac_fileref *fileref, uint32_t filePos) -{ - if ((fileref->crPs / 512) != (filePos / 512)) - fileref->reload_buf = true; - - fileref->crPs = filePos; - - return IMGTOOLERR_SUCCESS; -} - -/* - mac_file_seteof - - Set the position of the EOF in an open mac file - - fileref (I/O): mac file reference - newEof (I): new position of EOF in file - - Return imgtool error code -*/ -static imgtoolerr_t mac_file_seteof(struct mac_fileref *fileref, uint32_t newEof) -{ - uint32_t newABEof; - imgtoolerr_t err = IMGTOOLERR_SUCCESS; - - newABEof = (newEof + fileref->l2_img->blocksperAB * 512 - 1) / (fileref->l2_img->blocksperAB * 512); - -#if 0 - if (fileref->pLen % (fileref->l2_img->blocksperAB * 512)) - return IMGTOOLERR_CORRUPTIMAGE; -#endif - - if (newEof < fileref->eof) - fileref->eof = newEof; - - switch (fileref->l2_img->format) - { - case L2I_MFS: - err = mfs_file_setABeof(fileref, newABEof); - break; - - case L2I_HFS: - err = IMGTOOLERR_UNIMPLEMENTED; - break; - } - if (err) - return err; - - fileref->eof = newEof; - - err = mfs_dir_update(fileref); - if (err) - return err; - - /* update current pos if beyond new EOF */ -#if 0 - if (fileref->crPs > newEof) - { - if ((fileref->crPs / 512) != (newEof / 512)) - fileref->reload_buf = true; - - fileref->crPs = newEof; - } -#endif - - return IMGTOOLERR_SUCCESS; -} - -#if 0 -#pragma mark - -#pragma mark MFS IMPLEMENTATION -#endif - -/* - directory entry for use in the directory file - - Note the structure is variable length. It is always word-aligned, and - cannot cross block boundaries. - - Note that the directory does not seem to be sorted: the order in which - files appear does not match file names, and it does not always match file - IDs. -*/ -struct mfs_dir_entry -{ - uint8_t flags; /* bit 7=1 if entry used, bit 0=1 if file locked */ - /* 0x00 means end of block: if we are not done - with reading the directory, the remnants will - be read from next block */ - uint8_t flVersNum; /* version number (usually 0x00, but I don't - have the IM volume that describes it) */ - mac_FInfo flFinderInfo; /* information used by the Finder */ - - UINT32BE fileID; /* file ID */ - - UINT16BE dataStartBlock; /* first allocation block of data fork */ - UINT32BE dataLogicalSize; /* logical EOF of data fork */ - UINT32BE dataPhysicalSize; /* physical EOF of data fork */ - UINT16BE rsrcStartBlock; /* first allocation block of resource fork */ - UINT32BE rsrcLogicalSize; /* logical EOF of resource fork */ - UINT32BE rsrcPhysicalSize; /* physical EOF of resource fork */ - - UINT32BE createDate; /* date and time of creation */ - UINT32BE modifyDate; /* date and time of last modification */ - - uint8_t name[1]; /* first char is length of file name */ - /* next chars are file name - 255 chars at most */ - /* IIRC, Finder 7 only supports 31 chars, - wheareas earlier versions support 63 chars */ -}; - -/* - FOBJ desktop resource: describes a folder, or the location of the volume - icon. - - In typical Apple manner, this resource is not documented. However, I have - managed to reverse engineer some parts of it. -*/ -struct mfs_FOBJ -{ - uint8_t unknown0[2]; /* $00: $0004 for disk, $0008 for folder??? */ - mac_point location; /* $02: location in parent window */ - uint8_t unknown1[4]; /* $06: ??? */ - uint8_t view; /* $0A: manner in which folders are displayed??? */ - uint8_t unknown2; /* $0B: ??? */ - UINT16BE par_fldr; /* $0C: parent folder ID */ - uint8_t unknown3[10]; /* $0E: ??? */ - UINT16BE unknown4; /* $18: ??? */ - UINT32BE createDate; /* $1A: date and time of creation */ - UINT32BE modifyDate; /* $1E: date and time of last modification */ - UINT16BE unknown5; /* $22: put-away folder ID?????? */ - uint8_t unknown6[8]; /* $24: ??? */ - mac_rect bounds; /* $2C: window bounds */ - mac_point scroll; /* $34: current scroll offset??? */ - union - { /* I think there are two versions of the structure */ - struct - { - UINT16BE item_count; /* number of items (folders and files) in - this folder */ - UINT32BE item_descs[1]; /* this variable-length array has - item_count entries - meaning of entry is unknown */ - } v1; - struct - { - UINT16BE zerofill; /* always 0? */ - UINT16BE unknown0; /* always 0??? */ - UINT16BE item_count; /* number of items (folders and files) in - this folder */ - uint8_t unknown1[20]; /* ??? */ - uint8_t name[1]; /* variable-length macintosh string */ - } v2; - } u; -}; - -/* - MFS open dir ref -*/ -struct mfs_dirref -{ - struct mac_l2_imgref *l2_img; /* image pointer */ - uint16_t index; /* current file index in the disk directory */ - uint16_t cur_block; /* current block offset in directory file */ - uint16_t cur_offset; /* current byte offset in current block of directory file */ - uint8_t block_buffer[512]; /* buffer with current directory block */ -}; - - - -static imgtoolerr_t mfs_image_create(imgtool::image &image, imgtool::stream::ptr &&dummy, util::option_resolution *opts) -{ - imgtoolerr_t err; - uint8_t buffer[512]; - uint32_t heads, tracks, sector_bytes, i; - uint32_t total_disk_blocks, total_allocation_blocks, allocation_block_size; - uint32_t free_allocation_blocks; - - heads = opts->lookup_int('H'); - tracks = opts->lookup_int('T'); - sector_bytes = opts->lookup_int('L'); - - get_imgref(image)->l1_img.image = ℑ - get_imgref(image)->l1_img.heads = heads; - - if (sector_bytes != 512) - return IMGTOOLERR_UNEXPECTED; - - /* computation */ - allocation_block_size = 1024; - total_disk_blocks = 0; - for (i = 0; i < tracks; i++) - total_disk_blocks += heads * apple35_sectors_per_track(imgtool_floppy(image), i) * sector_bytes / 512; - total_allocation_blocks = total_disk_blocks / (allocation_block_size / 512); - free_allocation_blocks = total_allocation_blocks - 3; - - /* write master directory block */ - memset(buffer, 0, sizeof(buffer)); - place_integer_be(buffer, 0, 2, 0xd2d7); /* signature */ - place_integer_be(buffer, 2, 4, mac_time_now()); /* creation date */ - place_integer_be(buffer, 6, 4, mac_time_now()); /* last modified date */ - place_integer_be(buffer, 10, 2, 0); /* volume attributes */ - place_integer_be(buffer, 12, 2, 0); /* number of files in directory */ - place_integer_be(buffer, 14, 2, 4); /* first block of directory */ - place_integer_be(buffer, 16, 2, 12); /* length of directory in blocks */ - place_integer_be(buffer, 18, 2, total_allocation_blocks); /* allocation blocks on volume count */ - place_integer_be(buffer, 20, 4, allocation_block_size); /* allocation block size */ - place_integer_be(buffer, 24, 4, 8192); /* default clumping size */ - place_integer_be(buffer, 28, 2, 16); /* first allocation block on volume */ - place_integer_be(buffer, 30, 4, 2); /* next unused catalog node */ - place_integer_be(buffer, 34, 2, free_allocation_blocks); /* free allocation block count */ - pascal_from_c_string(&buffer[36], 28, "Untitled"); /* volume title */ - - err = image_write_block(&get_imgref(image)->l1_img, 2, buffer); - if (err) - return err; - - return IMGTOOLERR_SUCCESS; -} - - - -/* - mfs_image_open - - Open a MFS image. Image must already be open on level 1. This function - should not be called directly: call mac_image_open() instead. - - l2_img (I/O): level-2 image reference to open (l1_img and format fields - must be initialized) - img_open_buf (I): buffer with the MDB block - - Return imgtool error code -*/ -static imgtoolerr_t mfs_image_open(imgtool::image &image, imgtool::stream::ptr &&dummy) -{ - imgtoolerr_t err; - struct mac_l2_imgref *l2_img; - img_open_buf buf_local; - img_open_buf *buf; - - l2_img = get_imgref(image); - l2_img->l1_img.image = ℑ - l2_img->l1_img.heads = 1; - l2_img->format = L2I_MFS; - - /* read MDB */ - err = image_read_block(&l2_img->l1_img, 2, &buf_local.raw); - if (err) - return err; - buf = &buf_local; - - /* check signature word */ - if ((buf->mfs_mdb.sigWord[0] != 0xd2) || (buf->mfs_mdb.sigWord[1] != 0xd7) - || (buf->mfs_mdb.VN[0] > 27)) - return IMGTOOLERR_CORRUPTIMAGE; - - l2_img->u.mfs.dir_num_files = get_UINT16BE(buf->mfs_mdb.nmFls); - l2_img->u.mfs.dir_start = get_UINT16BE(buf->mfs_mdb.dirSt); - l2_img->u.mfs.dir_blk_len = get_UINT16BE(buf->mfs_mdb.blLn); - - l2_img->numABs = get_UINT16BE(buf->mfs_mdb.nmAlBlks); - if ((get_UINT32BE(buf->mfs_mdb.alBlkSiz) % 512) || (get_UINT32BE(buf->mfs_mdb.alBlkSiz) == 0)) - return IMGTOOLERR_CORRUPTIMAGE; - l2_img->blocksperAB = get_UINT32BE(buf->mfs_mdb.alBlkSiz) / 512; - l2_img->u.mfs.ABStart = get_UINT16BE(buf->mfs_mdb.alBlSt); - - l2_img->nxtCNID = get_UINT32BE(buf->mfs_mdb.nxtFNum); - - l2_img->freeABs = get_UINT16BE(buf->mfs_mdb.freeABs); - - mac_strcpy(l2_img->u.mfs.volname, buf->mfs_mdb.VN); - - if (l2_img->numABs > 4094) - return IMGTOOLERR_CORRUPTIMAGE; - - /* extract link array */ - { - int byte_len = l2_img->numABs + ((l2_img->numABs + 1) >> 1); - int cur_byte; - int cur_block; - int block_len = sizeof(buf->mfs_mdb.ABlink); - - /* clear dirty flags */ - for (cur_block=0; cur_block<13; cur_block++) - l2_img->u.mfs.ABlink_dirty[cur_block] = 0; - - /* append the chunk after MDB to link array */ - cur_byte = 0; - if (block_len > (byte_len - cur_byte)) - block_len = byte_len - cur_byte; - memcpy(l2_img->u.mfs.ABlink+cur_byte, buf->mfs_mdb.ABlink, block_len); - cur_byte += block_len; - cur_block = 2; - while (cur_byte < byte_len) - { - /* read next block */ - cur_block++; - err = image_read_block(&l2_img->l1_img, cur_block, buf->raw); - if (err) - return err; - block_len = 512; - - /* append this block to link array */ - if (block_len > (byte_len - cur_byte)) - block_len = byte_len - cur_byte; - memcpy(l2_img->u.mfs.ABlink+cur_byte, buf->raw, block_len); - cur_byte += block_len; - } - /* check that link array and directory don't overlap */ - if (cur_block >= l2_img->u.mfs.dir_start) - return IMGTOOLERR_CORRUPTIMAGE; - } - - return IMGTOOLERR_SUCCESS; -} - -/* - mfs_update_mdb - - Update MDB on disk - - l2_img (I/O): level-2 image reference - - Return imgtool error code -*/ -static imgtoolerr_t mfs_update_mdb(struct mac_l2_imgref *l2_img) -{ - imgtoolerr_t err; - union - { - struct mfs_mdb mfs_mdb; - uint8_t raw[512]; - } buf; - - assert(l2_img->format == L2I_MFS); - - /* read MDB */ - err = image_read_block(&l2_img->l1_img, 2, &buf.mfs_mdb); - if (err) - return err; - - set_UINT16BE(&buf.mfs_mdb.nmFls, l2_img->u.mfs.dir_num_files); -#if 0 /* these fields are never changed */ - set_UINT16BE(&buf.mfs_mdb.dirSt, l2_img->u.mfs.dir_start); - set_UINT16BE(&buf.mfs_mdb.blLn, l2_img->u.mfs.dir_blk_len); - - set_UINT16BE(&buf.mfs_mdb.nmAlBlks, l2_img->numABs); - set_UINT32BE(&buf.mfs_mdb.alBlkSiz, l2_img->blocksperAB*512); - set_UINT16BE(&buf.mfs_mdb.alBlSt, l2_img->u.mfs.ABStart); -#endif - - set_UINT32BE(&buf.mfs_mdb.nxtFNum, l2_img->nxtCNID); - - set_UINT16BE(&buf.mfs_mdb.freeABs, l2_img->freeABs); - -#if 0 /* these fields are never changed */ - mac_strcpy(buf.mfs_mdb.VN, l2_img->u.mfs.volname); -#endif - - /* save link array */ - { - int byte_len = l2_img->numABs + ((l2_img->numABs + 1) >> 1); - int cur_byte = 0; - int cur_block = 2; - int block_len = sizeof(buf.mfs_mdb.ABlink); - - /* update the chunk of link array after the MDB */ - if (block_len > (byte_len - cur_byte)) - block_len = byte_len - cur_byte; - memcpy(buf.mfs_mdb.ABlink, l2_img->u.mfs.ABlink+cur_byte, block_len); - cur_byte += block_len; - - if (block_len < sizeof(buf.mfs_mdb.ABlink)) - memset(buf.mfs_mdb.ABlink+block_len, 0, sizeof(buf.mfs_mdb.ABlink)-block_len); - - l2_img->u.mfs.ABlink_dirty[0] = 0; - - /* write back modified MDB+link */ - err = image_write_block(&l2_img->l1_img, 2, &buf.mfs_mdb); - if (err) - return err; - - while (cur_byte < byte_len) - { - /* advance to next block */ - cur_block++; - block_len = 512; - - /* extract the current chunk of link array */ - if (block_len > (byte_len - cur_byte)) - block_len = byte_len - cur_byte; - - if (l2_img->u.mfs.ABlink_dirty[cur_block-2]) - { - memcpy(buf.raw, l2_img->u.mfs.ABlink+cur_byte, block_len); - if (block_len < 512) - memset(buf.raw+block_len, 0, 512-block_len); - /* write back link array */ - err = image_write_block(&l2_img->l1_img, cur_block, buf.raw); - if (err) - return err; - l2_img->u.mfs.ABlink_dirty[cur_block-2] = 0; - } - - cur_byte += block_len; - } - } - - return IMGTOOLERR_SUCCESS; -} - -/* - mfs_dir_open - - Open the directory file - - l2_img (I/O): level-2 image reference - dirref (O): open directory file reference - - Return imgtool error code -*/ -static imgtoolerr_t mfs_dir_open(struct mac_l2_imgref *l2_img, const char *path, mfs_dirref *dirref) -{ - imgtoolerr_t err; - - assert(l2_img->format == L2I_MFS); - - if (path[0]) - return IMGTOOLERR_PATHNOTFOUND; - - dirref->l2_img = l2_img; - dirref->index = 0; - - dirref->cur_block = 0; - dirref->cur_offset = 0; - err = image_read_block(&l2_img->l1_img, l2_img->u.mfs.dir_start + dirref->cur_block, dirref->block_buffer); - if (err) - return err; - - return IMGTOOLERR_SUCCESS; -} - -/* - mfs_dir_read - - Read one entry of directory file - - dirref (I/O): open directory file reference - dir_entry (O): set to point to the entry read: set to NULL if EOF or error - - Return imgtool error code -*/ -static imgtoolerr_t mfs_dir_read(mfs_dirref *dirref, mfs_dir_entry **dir_entry) -{ - mfs_dir_entry *cur_dir_entry; - size_t cur_dir_entry_len; - imgtoolerr_t err; - - - if (dir_entry) - *dir_entry = NULL; - - if (dirref->index == dirref->l2_img->u.mfs.dir_num_files) - /* EOF */ - return IMGTOOLERR_SUCCESS; - - /* get cat entry pointer */ - cur_dir_entry = (mfs_dir_entry *) (dirref->block_buffer + dirref->cur_offset); - while ((dirref->cur_offset == 512) || ! (cur_dir_entry->flags & 0x80)) - { - dirref->cur_block++; - dirref->cur_offset = 0; - if (dirref->cur_block > dirref->l2_img->u.mfs.dir_blk_len) - /* aargh! */ - return IMGTOOLERR_CORRUPTIMAGE; - err = image_read_block(&dirref->l2_img->l1_img, dirref->l2_img->u.mfs.dir_start + dirref->cur_block, dirref->block_buffer); - if (err) - return err; - cur_dir_entry = (mfs_dir_entry *) (dirref->block_buffer + dirref->cur_offset); - } - - cur_dir_entry_len = offsetof(mfs_dir_entry, name) + cur_dir_entry->name[0] + 1; - - if ((dirref->cur_offset + cur_dir_entry_len) > 512) - /* aargh! */ - return IMGTOOLERR_CORRUPTIMAGE; - - /* entry looks valid: set pointer to entry */ - if (dir_entry) - *dir_entry = cur_dir_entry; - - /* update offset in block */ - dirref->cur_offset += cur_dir_entry_len; - /* align to word boundary */ - dirref->cur_offset = (dirref->cur_offset + 1) & ~1; - - /* update file count */ - dirref->index++; - - return IMGTOOLERR_SUCCESS; -} - -/* - mfs_dir_insert - - Add an entry in the directory file - - l2_img (I/O): level-2 image reference - dirref (I/O): open directory file reference - filename (I): name of the file for which an entry is created (Mac string) - dir_entry (O): set to point to the created entry: set to NULL if EOF or - error - - Return imgtool error code -*/ -static imgtoolerr_t mfs_dir_insert(struct mac_l2_imgref *l2_img, mfs_dirref *dirref, const uint8_t *new_fname, mfs_dir_entry **dir_entry) -{ - size_t new_dir_entry_len; - mfs_dir_entry *cur_dir_entry; - size_t cur_dir_entry_len; - uint32_t cur_date; - imgtoolerr_t err; - - dirref->l2_img = l2_img; - dirref->index = 0; - - new_dir_entry_len = offsetof(mfs_dir_entry, name) + new_fname[0] + 1; - - for (dirref->cur_block = 0; dirref->cur_block < dirref->l2_img->u.mfs.dir_blk_len; dirref->cur_block++) - { - /* read current block */ - err = image_read_block(&dirref->l2_img->l1_img, dirref->l2_img->u.mfs.dir_start + dirref->cur_block, dirref->block_buffer); - if (err) - return err; - - /* get free chunk in this block */ - dirref->cur_offset = 0; - cur_dir_entry = (mfs_dir_entry *) (dirref->block_buffer + dirref->cur_offset); - while ((dirref->cur_offset < 512) && (cur_dir_entry->flags & 0x80)) - { /* skip cur_dir_entry */ - cur_dir_entry_len = offsetof(mfs_dir_entry, name) + cur_dir_entry->name[0] + 1; - /* update offset in block */ - dirref->cur_offset += cur_dir_entry_len; - /* align to word boundary */ - dirref->cur_offset = (dirref->cur_offset + 1) & ~1; - /* update entry pointer */ - cur_dir_entry = (mfs_dir_entry *) (dirref->block_buffer + dirref->cur_offset); - /* update file index (useless, but can't harm) */ - dirref->index++; - } - - if (new_dir_entry_len <= (/*512*/510 - dirref->cur_offset)) - { - /*memcpy(cur_dir_entry, new_dir_entry, new_dir_entry_len);*/ - cur_dir_entry->flags = 0x80; - cur_dir_entry->flVersNum = 0x00; - memset(&cur_dir_entry->flFinderInfo, 0, sizeof(cur_dir_entry->flFinderInfo)); - set_UINT32BE(&cur_dir_entry->fileID, dirref->l2_img->nxtCNID++); - set_UINT16BE(&cur_dir_entry->dataStartBlock, 1); - set_UINT32BE(&cur_dir_entry->dataLogicalSize, 0); - set_UINT32BE(&cur_dir_entry->dataPhysicalSize, 0); - set_UINT16BE(&cur_dir_entry->rsrcStartBlock, 1); - set_UINT32BE(&cur_dir_entry->rsrcLogicalSize, 0); - set_UINT32BE(&cur_dir_entry->rsrcPhysicalSize, 0); - cur_date = mac_time_now(); - set_UINT32BE(&cur_dir_entry->createDate, cur_date); - set_UINT32BE(&cur_dir_entry->modifyDate, cur_date); - mac_strcpy(cur_dir_entry->name, new_fname); - - /* update offset in block */ - dirref->cur_offset += new_dir_entry_len; - /* align to word boundary */ - dirref->cur_offset = (dirref->cur_offset + 1) & ~1; - if (dirref->cur_offset < 512) - /* mark remaining space as free record */ - dirref->block_buffer[dirref->cur_offset] = 0; - /* write back directory */ - err = image_write_block(&dirref->l2_img->l1_img, dirref->l2_img->u.mfs.dir_start + dirref->cur_block, dirref->block_buffer); - if (err) - return err; - /* update file count */ - dirref->l2_img->u.mfs.dir_num_files++; - - /* update MDB (nxtCNID & dir_num_files fields) */ - err = mfs_update_mdb(dirref->l2_img); - if (err) - return err; - - if (dir_entry) - *dir_entry = cur_dir_entry; - return IMGTOOLERR_SUCCESS; - } - } - - return IMGTOOLERR_NOSPACE; -} - -/* - mfs_dir_update - - Update one entry of directory file - - fileref (I/O): open file reference - - Return imgtool error code -*/ -static imgtoolerr_t mfs_dir_update(struct mac_fileref *fileref) -{ - uint16_t cur_block; - uint16_t cur_offset; - uint8_t block_buffer[512]; - mfs_dir_entry *cur_dir_entry; - size_t cur_dir_entry_len; - imgtoolerr_t err; - - for (cur_block = 0; cur_block < fileref->l2_img->u.mfs.dir_blk_len; cur_block++) - { - /* read current block */ - err = image_read_block(&fileref->l2_img->l1_img, fileref->l2_img->u.mfs.dir_start + cur_block, block_buffer); - if (err) - return err; - - /* get free chunk in this block */ - cur_offset = 0; - cur_dir_entry = (mfs_dir_entry *) (block_buffer + cur_offset); - while ((cur_offset < 512) && (cur_dir_entry->flags & 0x80)) - { - if (get_UINT32BE(cur_dir_entry->fileID) == fileref->fileID) - { /* found it: update directory entry */ - switch (fileref->forkType) - { - case data_fork: - set_UINT16BE(&cur_dir_entry->dataStartBlock, fileref->mfs.stBlk); - set_UINT32BE(&cur_dir_entry->dataLogicalSize, fileref->eof); - set_UINT32BE(&cur_dir_entry->dataPhysicalSize, fileref->pLen); - break; - - case rsrc_fork: - set_UINT16BE(&cur_dir_entry->rsrcStartBlock, fileref->mfs.stBlk); - set_UINT32BE(&cur_dir_entry->rsrcLogicalSize, fileref->eof); - set_UINT32BE(&cur_dir_entry->rsrcPhysicalSize, fileref->pLen); - break; - } - /* write back directory */ - err = image_write_block(&fileref->l2_img->l1_img, fileref->l2_img->u.mfs.dir_start + cur_block, block_buffer); - if (err) - return err; - - return IMGTOOLERR_SUCCESS; - } - /* skip cur_dir_entry */ - cur_dir_entry_len = offsetof(mfs_dir_entry, name) + cur_dir_entry->name[0] + 1; - /* update offset in block */ - cur_offset += cur_dir_entry_len; - /* align to word boundary */ - cur_offset = (cur_offset + 1) & ~1; - /* update entry pointer */ - cur_dir_entry = (mfs_dir_entry *) (block_buffer + cur_offset); - } - } - - return IMGTOOLERR_UNEXPECTED; -} - - -/* - mfs_find_dir_entry - - Find a file in an MFS directory - - dirref (I/O): open directory file reference - filename (I): file name (Mac string) - dir_entry (O): set to point to the entry read: set to NULL if EOF or error - - Return imgtool error code -*/ -static imgtoolerr_t mfs_find_dir_entry(mfs_dirref *dirref, const mac_str255 filename, mfs_dir_entry **dir_entry) -{ - mfs_dir_entry *cur_dir_entry; - imgtoolerr_t err; - - if (dir_entry) - *dir_entry = NULL; - - /* scan dir for file */ - while (1) - { - err = mfs_dir_read(dirref, &cur_dir_entry); - if (err) - return err; - if (!cur_dir_entry) - /* EOF */ - break; - if ((! mac_stricmp(filename, cur_dir_entry->name)) && (cur_dir_entry->flVersNum == 0)) - { /* file found */ - - if (dir_entry) - *dir_entry = cur_dir_entry; - - return IMGTOOLERR_SUCCESS; - } - } - - return IMGTOOLERR_FILENOTFOUND; -} - -/* - mfs_lookup_path - - Resolve a file path for MFS volumes. This function should not be called - directly: call mac_lookup_path instead. - - l2_img (I/O): level-2 image reference - fpath (I): file path (C string) - filename (O): set to the actual name of the file, with capitalization matching - the one on the volume rather than the one in the fpath parameter (Mac - string) - cat_info (I/O): on output, catalog info for this file extracted from the - catalog file (may be NULL) - If create_it is true, created info will first be set according to the - data from cat_info - create_it (I): true if entry should be created if not found - - Return imgtool error code -*/ -static imgtoolerr_t mfs_lookup_path(struct mac_l2_imgref *l2_img, const char *fpath, mac_str255 filename, mac_dirent *cat_info, int create_it) -{ - mfs_dirref dirref; - mfs_dir_entry *dir_entry; - imgtoolerr_t err; - - /* rapid check */ - if (strchr(fpath, ':')) - return IMGTOOLERR_BADFILENAME; - - /* extract file name */ - c_to_mac_strncpy(filename, fpath, strlen(fpath)); - - /* open dir */ - mfs_dir_open(l2_img, "", &dirref); - - /* find file */ - err = mfs_find_dir_entry(&dirref, filename, &dir_entry); - if ((err == IMGTOOLERR_FILENOTFOUND) && create_it) - err = mfs_dir_insert(l2_img, &dirref, filename, &dir_entry); - if (err) - return err; - - mac_strcpy(filename, dir_entry->name); - - if (create_it && cat_info) - { - dir_entry->flFinderInfo = cat_info->flFinderInfo; - dir_entry->flags = (dir_entry->flags & 0x80) | (cat_info->flags & 0x7f); - set_UINT32BE(&dir_entry->createDate, cat_info->createDate); - set_UINT32BE(&dir_entry->modifyDate, cat_info->modifyDate); - - /* write current directory block */ - err = image_write_block(&l2_img->l1_img, l2_img->u.mfs.dir_start + dirref.cur_block, dirref.block_buffer); - if (err) - return err; - } - - if (cat_info) - { - cat_info->flFinderInfo = dir_entry->flFinderInfo; - memset(&cat_info->flXFinderInfo, 0, sizeof(cat_info->flXFinderInfo)); - cat_info->flags = dir_entry->flags; - cat_info->fileID = get_UINT32BE(dir_entry->fileID); - cat_info->dataLogicalSize = get_UINT32BE(dir_entry->dataLogicalSize); - cat_info->dataPhysicalSize = get_UINT32BE(dir_entry->dataPhysicalSize); - cat_info->rsrcLogicalSize = get_UINT32BE(dir_entry->rsrcLogicalSize); - cat_info->rsrcPhysicalSize = get_UINT32BE(dir_entry->rsrcPhysicalSize); - cat_info->createDate = get_UINT32BE(dir_entry->createDate); - cat_info->modifyDate = get_UINT32BE(dir_entry->modifyDate); - cat_info->dataRecType = 0x200; /* hcrt_File */ - } - - return IMGTOOLERR_SUCCESS; -} - -/* - mfs_file_open_internal - - Open a file fork, given its directory entry. This function should not be - called directly: call mfs_file_open instead. - - l2_img (I/O): level-2 image reference - dir_entry (I): directory entry for the file to open - mac_forkID (I): tells which fork should be opened - fileref (O): mac file reference to open - - Return imgtool error code -*/ -static imgtoolerr_t mfs_file_open_internal(struct mac_l2_imgref *l2_img, const mfs_dir_entry *dir_entry, mac_forkID fork, struct mac_fileref *fileref) -{ - assert(l2_img->format == L2I_MFS); - - fileref->l2_img = l2_img; - - fileref->fileID = get_UINT32BE(dir_entry->fileID); - fileref->forkType = fork; - - switch (fork) - { - case data_fork: - fileref->mfs.stBlk = get_UINT16BE(dir_entry->dataStartBlock); - fileref->eof = get_UINT32BE(dir_entry->dataLogicalSize); - fileref->pLen = get_UINT32BE(dir_entry->dataPhysicalSize); - break; - - case rsrc_fork: - fileref->mfs.stBlk = get_UINT16BE(dir_entry->rsrcStartBlock); - fileref->eof = get_UINT32BE(dir_entry->rsrcLogicalSize); - fileref->pLen = get_UINT32BE(dir_entry->rsrcPhysicalSize); - break; - } - - fileref->crPs = 0; - - fileref->reload_buf = true; - - return IMGTOOLERR_SUCCESS; -} - -/* - mfs_file_open - - Open a file located on a MFS volume. This function should not be called - directly: call mac_file_open instead. - - l2_img (I/O): level-2 image reference - filename (I): name of the file (Mac string) - mac_forkID (I): tells which fork should be opened - fileref (O): mac file reference to open - - Return imgtool error code -*/ -static imgtoolerr_t mfs_file_open(struct mac_l2_imgref *l2_img, const mac_str255 filename, mac_forkID fork, struct mac_fileref *fileref) -{ - mfs_dirref dirref; - mfs_dir_entry *dir_entry; - imgtoolerr_t err; - - /* open dir */ - mfs_dir_open(l2_img, "", &dirref); - - /* find file */ - err = mfs_find_dir_entry(&dirref, filename, &dir_entry); - if (err) - return err; - - /* open it */ - return mfs_file_open_internal(l2_img, dir_entry, fork, fileref); -} - -/* - mfs_get_ABlink - - Read one entry of the Allocation Bitmap link array, on an MFS volume. - - l2_img (I/O): level-2 image reference - AB_address (I): index in the array, which is an AB address - - Returns the 12-bit value read in array. -*/ -static uint16_t mfs_get_ABlink(struct mac_l2_imgref *l2_img, uint16_t AB_address) -{ - uint16_t reply; - int base; - - assert(l2_img->format == L2I_MFS); - - base = (AB_address >> 1) * 3; - - if (! (AB_address & 1)) - reply = (l2_img->u.mfs.ABlink[base] << 4) | ((l2_img->u.mfs.ABlink[base+1] >> 4) & 0x0f); - else - reply = ((l2_img->u.mfs.ABlink[base+1] << 8) & 0xf00) | l2_img->u.mfs.ABlink[base+2]; - - return reply; -} - -/* - mfs_set_ABlink - - Set one entry of the Allocation Bitmap link array, on an MFS volume. - - l2_img (I/O): level-2 image reference - AB_address (I): index in the array, which is an AB address - data (I): 12-bit value to write in array -*/ -static void mfs_set_ABlink(struct mac_l2_imgref *l2_img, uint16_t AB_address, uint16_t data) -{ - int base; - - assert(l2_img->format == L2I_MFS); - - base = (AB_address >> 1) * 3; - - if (! (AB_address & 1)) - { - l2_img->u.mfs.ABlink[base] = (data >> 4) & 0xff; - l2_img->u.mfs.ABlink[base+1] = (l2_img->u.mfs.ABlink[base+1] & 0x0f) | ((data << 4) & 0xf0); - - l2_img->u.mfs.ABlink_dirty[(base+64)/512] = 1; - l2_img->u.mfs.ABlink_dirty[(base+1+64)/512] = 1; - } - else - { - l2_img->u.mfs.ABlink[base+1] = (l2_img->u.mfs.ABlink[base+1] & 0xf0) | ((data >> 8) & 0x0f); - l2_img->u.mfs.ABlink[base+2] = data & 0xff; - - l2_img->u.mfs.ABlink_dirty[(base+1+64)/512] = 1; - l2_img->u.mfs.ABlink_dirty[(base+2+64)/512] = 1; - } -} - -/* - mfs_file_get_nth_block_address - - Get the disk block address of a given block in an open file on a MFS image. - Called by macintosh file code. - - fileref (I/O): open mac file reference - block_num (I): file block index - block_address (O): disk block address for the file block - - Return imgtool error code -*/ -static imgtoolerr_t mfs_file_get_nth_block_address(struct mac_fileref *fileref, uint32_t block_num, uint32_t *block_address) -{ - uint32_t AB_num; - uint32_t i; - uint16_t AB_address; - - assert(fileref->l2_img->format == L2I_MFS); - - AB_num = block_num / fileref->l2_img->blocksperAB; - - AB_address = fileref->mfs.stBlk; - if ((AB_address == 0) || (AB_address >= fileref->l2_img->numABs+2)) - /* 0 -> ??? */ - return IMGTOOLERR_CORRUPTIMAGE; - if (AB_address == 1) - /* EOF */ - return IMGTOOLERR_UNEXPECTED; - AB_address -= 2; - for (i=0; il2_img, AB_address); - if ((AB_address == 0) || (AB_address >= fileref->l2_img->numABs+2)) - /* 0 -> empty block: there is no way an empty block could make it - into the link chain!!! */ - return IMGTOOLERR_CORRUPTIMAGE; - if (AB_address == 1) - /* EOF */ - return IMGTOOLERR_UNEXPECTED; - AB_address -= 2; - } - - *block_address = fileref->l2_img->u.mfs.ABStart + AB_address * fileref->l2_img->blocksperAB - + block_num % fileref->l2_img->blocksperAB; - - return IMGTOOLERR_SUCCESS; -} - -/* - mfs_file_allocABs - - Allocate a chunk of ABs - - fileref (I/O): open mac file reference - lastAB (I): AB address on disk of last file AB (only if - fileref->mfs.stBlk != 1) - allocABs (I): number of ABs to allocate in addition to the current file - allocation - fblock (I): first file block to allocate (used for tag data) - - Return imgtool error code -*/ -static imgtoolerr_t mfs_file_allocABs(struct mac_fileref *fileref, uint16_t lastAB, uint32_t allocABs, uint32_t fblock) -{ - int numABs = fileref->l2_img->numABs; - int free_ABs; - int i, j; - floppy_tag_record tag; - int extentBaseAB, extentABlen; - int firstBestExtentBaseAB = 0, firstBestExtentABlen; - int secondBestExtentBaseAB = 0, secondBestExtentABlen; - imgtoolerr_t err; - - /* return if done */ - if (! allocABs) - return IMGTOOLERR_SUCCESS; - - /* compute free space */ - free_ABs = 0; - for (i=0; il2_img, i) == 0) - { - if (TAG_CHECKS) - { - /* optional check */ - if (image_get_tag_len(&fileref->l2_img->l1_img) == 12) - { - for (j=0; jl2_img->blocksperAB; j++) - { - err = image_read_tag(&fileref->l2_img->l1_img, fileref->l2_img->u.mfs.ABStart + i * fileref->l2_img->blocksperAB + j, &tag); - if (err) - return err; - - if (get_UINT32BE(tag.fileID) != 0) - { - /*return IMGTOOLERR_CORRUPTIMAGE;*/ - goto corrupt_free_block; - } - } - } - } - - free_ABs++; - } -corrupt_free_block: - ; - } - - /* check we have enough free space */ - if (free_ABs < allocABs) - return IMGTOOLERR_NOSPACE; - - if (fileref->mfs.stBlk != 1) - { /* try to extend last file extent */ - /* append free ABs after last AB */ - for (i=lastAB+1; (mfs_get_ABlink(fileref->l2_img, i) == 0) && (allocABs > 0) && (i < numABs); i++) - { - if (TAG_CHECKS) - { - /* optional check */ - if (image_get_tag_len(&fileref->l2_img->l1_img) == 12) - { - for (j=0; jl2_img->blocksperAB; j++) - { - err = image_read_tag(&fileref->l2_img->l1_img, fileref->l2_img->u.mfs.ABStart + i * fileref->l2_img->blocksperAB + j, &tag); - if (err) - return err; - - if (get_UINT32BE(tag.fileID) != 0) - { - /*return IMGTOOLERR_CORRUPTIMAGE;*/ - goto corrupt_free_block2; - } - } - } - } - - mfs_set_ABlink(fileref->l2_img, lastAB, i+2); - lastAB = i; - allocABs--; - free_ABs--; - } -corrupt_free_block2: - /* return if done */ - if (! allocABs) - { - mfs_set_ABlink(fileref->l2_img, lastAB, 1); - fileref->l2_img->freeABs = free_ABs; - return IMGTOOLERR_SUCCESS; /* done */ - } - } - - while (allocABs) - { - /* find smallest data block at least nb_alloc_physrecs in length, and largest data block less than nb_alloc_physrecs in length */ - firstBestExtentABlen = INT_MAX; - secondBestExtentABlen = 0; - for (i=0; il2_img, i) == 0) - { /* found one free block */ - /* compute its length */ - extentBaseAB = i; - extentABlen = 0; - while ((il2_img, i) == 0)) - { - if (TAG_CHECKS) - { - /* optional check */ - if (image_get_tag_len(&fileref->l2_img->l1_img) == 12) - { - for (j=0; jl2_img->blocksperAB; j++) - { - err = image_read_tag(&fileref->l2_img->l1_img, fileref->l2_img->u.mfs.ABStart + i * fileref->l2_img->blocksperAB + j, &tag); - if (err) - return err; - - if (get_UINT32BE(tag.fileID) != 0) - { - /*return IMGTOOLERR_CORRUPTIMAGE;*/ - goto corrupt_free_block3; - } - } - } - } - - extentABlen++; - i++; - } -corrupt_free_block3: - /* compare to previous best and second-best blocks */ - if ((extentABlen < firstBestExtentABlen) && (extentABlen >= allocABs)) - { - firstBestExtentBaseAB = extentBaseAB; - firstBestExtentABlen = extentABlen; - if (extentABlen == allocABs) - /* no need to search further */ - break; - } - else if ((extentABlen > secondBestExtentABlen) && (extentABlen < allocABs)) - { - secondBestExtentBaseAB = extentBaseAB; - secondBestExtentABlen = extentABlen; - } - } - } - - if (firstBestExtentABlen != INT_MAX) - { /* found one contiguous block which can hold it all */ - extentABlen = allocABs; - for (i=0; imfs.stBlk != 1) - mfs_set_ABlink(fileref->l2_img, lastAB, firstBestExtentBaseAB+i+2); - else - fileref->mfs.stBlk = firstBestExtentBaseAB+i+2; - lastAB = firstBestExtentBaseAB+i; - free_ABs--; - /* set tag to allocated */ - if (image_get_tag_len(&fileref->l2_img->l1_img) == 12) - { - set_UINT32BE(&tag.fileID, fileref->fileID); - tag.ftype = 1; - if ((fileref->forkType) == rsrc_fork) - tag.ftype |= 2; - tag.fattr = /*fattr*/ 0; /* ***TODO*** */ - for (j=0; jl2_img->blocksperAB; j++) - { - set_UINT16BE(&tag.fblock, fblock & 0xffff); - set_UINT32BE(&tag.wrCnt, mac_time_now()); - err = image_write_tag(&fileref->l2_img->l1_img, fileref->l2_img->u.mfs.ABStart + lastAB * fileref->l2_img->blocksperAB + j, &tag); - if (err) - { - mfs_set_ABlink(fileref->l2_img, lastAB, 1); - fileref->l2_img->freeABs = free_ABs; - return err; - } - fblock++; - } - } - } - allocABs = 0; - mfs_set_ABlink(fileref->l2_img, lastAB, 1); - fileref->l2_img->freeABs = free_ABs; - /*return IMGTOOLERR_SUCCESS;*/ /* done */ - } - else if (secondBestExtentABlen != 0) - { /* jeez, we need to fragment it. We use the largest smaller block to limit fragmentation. */ - for (i=0; imfs.stBlk != 1) - mfs_set_ABlink(fileref->l2_img, lastAB, secondBestExtentBaseAB+i+2); - else - fileref->mfs.stBlk = secondBestExtentBaseAB+i+2; - lastAB = secondBestExtentBaseAB+i; - free_ABs--; - /* set tag to allocated */ - if (image_get_tag_len(&fileref->l2_img->l1_img) == 12) - { - set_UINT32BE(&tag.fileID, fileref->fileID); - tag.ftype = 1; - if ((fileref->forkType) == rsrc_fork) - tag.ftype |= 2; - tag.fattr = /*fattr*/ 0; /* ***TODO*** */ - for (j=0; jl2_img->blocksperAB; j++) - { - set_UINT16BE(&tag.fblock, fblock & 0xffff); - set_UINT32BE(&tag.wrCnt, mac_time_now()); - err = image_write_tag(&fileref->l2_img->l1_img, fileref->l2_img->u.mfs.ABStart + lastAB * fileref->l2_img->blocksperAB + j, &tag); - if (err) - { - mfs_set_ABlink(fileref->l2_img, lastAB, 1); - fileref->l2_img->freeABs = free_ABs; - return err; - } - fblock++; - } - } - } - allocABs -= secondBestExtentABlen; - } - else - { - mfs_set_ABlink(fileref->l2_img, lastAB, 1); - return IMGTOOLERR_NOSPACE; /* This should never happen, as we pre-check that there is enough free space */ - } - } - - return IMGTOOLERR_SUCCESS; -} - -/* - mfs_file_setABeof - - Set physical file EOF in ABs - - fileref (I/O): open mac file reference - newABeof (I): desired number of allocated ABs for this file - - Return imgtool error code -*/ -static imgtoolerr_t mfs_file_setABeof(struct mac_fileref *fileref, uint32_t newABeof) -{ - uint16_t AB_address = 0; - uint16_t AB_link; - int i, j; - floppy_tag_record tag; - int MDB_dirty = 0; - imgtoolerr_t err = IMGTOOLERR_SUCCESS; - - - assert(fileref->l2_img->format == L2I_MFS); - - /* run through link chain until we reach the old or the new EOF */ - AB_link = fileref->mfs.stBlk; - if ((AB_link == 0) || (AB_link >= fileref->l2_img->numABs+2)) - /* 0 -> ??? */ - return IMGTOOLERR_CORRUPTIMAGE; - for (i=0; (il2_img, AB_address); - if ((AB_link == 0) || (AB_link >= fileref->l2_img->numABs+2)) - /* 0 -> empty block: there is no way an empty block could make it - into the link chain!!! */ - return IMGTOOLERR_CORRUPTIMAGE; - - if (TAG_CHECKS) - { - /* optional check */ - if (image_get_tag_len(&fileref->l2_img->l1_img) == 12) - { - for (j=0; jl2_img->blocksperAB; j++) - { - err = image_read_tag(&fileref->l2_img->l1_img, fileref->l2_img->u.mfs.ABStart + AB_address * fileref->l2_img->blocksperAB + j, &tag); - if (err) - return err; - - if ((get_UINT32BE(tag.fileID) != fileref->fileID) - || (((tag.ftype & 2) != 0) != (fileref->forkType == rsrc_fork)) - || (get_UINT16BE(tag.fblock) != ((i * fileref->l2_img->blocksperAB + j) & 0xffff))) - { - return IMGTOOLERR_CORRUPTIMAGE; - } - } - } - } - } - - if (i == newABeof) - { /* new EOF is shorter than old one */ - /* mark new eof */ - if (i==0) - fileref->mfs.stBlk = 1; - else - { - mfs_set_ABlink(fileref->l2_img, AB_address, 1); - MDB_dirty = 1; - } - - /* free all remaining blocks */ - while (AB_link != 1) - { - AB_address = AB_link - 2; - AB_link = mfs_get_ABlink(fileref->l2_img, AB_address); - if ((AB_link == 0) || (AB_link >= fileref->l2_img->numABs+2)) - { /* 0 -> empty block: there is no way an empty block could make - it into the link chain!!! */ - if (MDB_dirty) - { /* update MDB (freeABs field) and ABLink array */ - err = mfs_update_mdb(fileref->l2_img); - if (err) - return err; - } - return IMGTOOLERR_CORRUPTIMAGE; - } - - if (TAG_CHECKS) - { - /* optional check */ - if (image_get_tag_len(&fileref->l2_img->l1_img) == 12) - { - for (j=0; jl2_img->blocksperAB; j++) - { - err = image_read_tag(&fileref->l2_img->l1_img, fileref->l2_img->u.mfs.ABStart + AB_address * fileref->l2_img->blocksperAB + j, &tag); - if (err) - return err; - - if ((get_UINT32BE(tag.fileID) != fileref->fileID) - || (((tag.ftype & 2) != 0) != (fileref->forkType == rsrc_fork)) - || (get_UINT16BE(tag.fblock) != ((i * fileref->l2_img->blocksperAB + j) & 0xffff))) - { - return IMGTOOLERR_CORRUPTIMAGE; - } - } - } - } - - mfs_set_ABlink(fileref->l2_img, AB_address, 0); - fileref->l2_img->freeABs++; - MDB_dirty = 1; - /* set tag to free */ - if (image_get_tag_len(&fileref->l2_img->l1_img) == 12) - { - memset(&tag, 0, sizeof(tag)); - for (j=0; jl2_img->blocksperAB; j++) - { - err = image_write_tag(&fileref->l2_img->l1_img, fileref->l2_img->u.mfs.ABStart + AB_address * fileref->l2_img->blocksperAB + j, &tag); - if (err) - return err; - } - } - i++; - } - } - else - { /* new EOF is larger than old one */ - err = mfs_file_allocABs(fileref, AB_address, newABeof - i, i * fileref->l2_img->blocksperAB); - if (err) - return err; - MDB_dirty = 1; - } - - if (MDB_dirty) - { /* update MDB (freeABs field) and ABLink array */ - err = mfs_update_mdb(fileref->l2_img); - if (err) - return err; - } - - fileref->pLen = newABeof * (fileref->l2_img->blocksperAB * 512); - - return IMGTOOLERR_SUCCESS; -} - -/* - mfs_hashString - - Hash a string: under MFS, this provides the resource ID of the comment - resource associated with the file whose name is provided (FCMT resource - type). - - Ripped from Apple technote TB06 (converted from 68k ASM to C) - - string (I): string to hash - - Returns hash value -*/ -static int mfs_hashString(const mac_str255 string) -{ - int reply; - int len; - int i; - - len = string[0]; - - reply = 0; - for (i=0; i> 1) & 0x7fff) | ~0x7fff; - else - reply = ((reply >> 1) & 0x7fff); - if (! (reply & 0x8000)) - reply = - reply; - } - - return reply; -} - -#if 0 -#pragma mark - -#pragma mark HFS IMPLEMENTATION -#endif - -/* - HFS extents B-tree key -*/ -struct hfs_extentKey -{ - uint8_t keyLength; /* length of key, excluding this field */ - uint8_t forkType; /* 0 = data fork, FF = resource fork */ - UINT32BE fileID; /* file ID */ - UINT16BE startBlock; /* first file allocation block number in this extent */ -}; -enum -{ - keyLength_hfs_extentKey = sizeof(hfs_extentKey) - sizeof(uint8_t) -}; - -/* - HFS catalog B-tree key -*/ -struct hfs_catKey -{ - uint8_t keyLen; /* key length */ - uint8_t resrv1; /* reserved */ - UINT32BE parID; /* parent directory ID */ - mac_str31 cName; /* catalog node name */ - /* note that in index nodes, it is a mac_str31, but - in leaf keys it's a variable-length string */ -}; - -/* - HFS catalog data record for a folder - 70 bytes -*/ -struct hfs_catFolderData -{ - UINT16BE recordType; /* record type */ - UINT16BE flags; /* folder flags */ - UINT16BE valence; /* folder valence */ - UINT32BE folderID; /* folder ID */ - UINT32BE createDate; /* date and time of creation */ - UINT32BE modifyDate; /* date and time of last modification */ - UINT32BE backupDate; /* date and time of last backup */ - mac_DInfo userInfo; /* Finder information */ - mac_DXInfo finderInfo; /* additional Finder information */ - UINT32BE reserved[4]; /* reserved - set to zero */ -}; - -/* - HFS catalog data record for a file - 102 bytes -*/ -struct hfs_catFileData -{ - UINT16BE recordType; /* record type */ - uint8_t flags; /* file flags */ - uint8_t fileType; /* file type (reserved, always 0?) */ - mac_FInfo userInfo; /* Finder information */ - UINT32BE fileID; /* file ID */ - UINT16BE dataStartBlock; /* not used - set to zero */ - UINT32BE dataLogicalSize; /* logical EOF of data fork */ - UINT32BE dataPhysicalSize; /* physical EOF of data fork */ - UINT16BE rsrcStartBlock; /* not used - set to zero */ - UINT32BE rsrcLogicalSize; /* logical EOF of resource fork */ - UINT32BE rsrcPhysicalSize; /* physical EOF of resource fork */ - UINT32BE createDate; /* date and time of creation */ - UINT32BE modifyDate; /* date and time of last modification */ - UINT32BE backupDate; /* date and time of last backup */ - mac_FXInfo finderInfo; /* additional Finder information */ - UINT16BE clumpSize; /* file clump size (not used) */ - hfs_extent_3 dataExtents; /* first data fork extent record */ - hfs_extent_3 rsrcExtents; /* first resource fork extent record */ - UINT32BE reserved; /* reserved - set to zero */ -}; - -/* - HFS catalog data record for a thread - 46 bytes - - The key for a thread record features the CNID of the item and an empty - name, instead of the CNID of the parent and the item name. -*/ -struct hfs_catThreadData -{ - UINT16BE recordType; /* record type */ - UINT32BE reserved[2]; /* reserved - set to zero */ - UINT32BE parID; /* parent ID for this catalog node */ - mac_str31 nodeName; /* name of this catalog node */ -}; - -/* - union for all types at once -*/ -union hfs_catData -{ - UINT16BE dataType; - hfs_catFolderData folder; - hfs_catFileData file; - hfs_catThreadData thread; -}; - -/* - HFS catalog record types -*/ -enum -{ - hcrt_Folder = 0x0100, /* Folder record */ - hcrt_File = 0x0200, /* File record */ - hcrt_FolderThread = 0x0300, /* Folder thread record */ - hcrt_FileThread = 0x0400 /* File thread record */ -}; - -/* - Catalog file record flags - - This is similar to the MFS catalog flag field, but the "thread exists" flag - (0x02) is specific to HFS/HFS+, whereas the "Record in use" flag (0x80) is - only used by MFS. -*/ -enum -{ - cfrf_fileLocked = 0x01, /* file is locked and cannot be written to */ - cfrf_threadExists = 0x02 /* a file thread record exists for this file */ -}; - -/* - BT functions used by HFS functions -*/ -struct BT_leaf_rec_enumerator -{ - mac_BTref *BTref; - uint32_t cur_node; - int cur_rec; -}; - -static imgtoolerr_t BT_open(mac_BTref *BTref, int (*key_compare_func)(const void *key1, const void *key2), int is_extent); -static void BT_close(mac_BTref *BTref); -static imgtoolerr_t BT_search_leaf_rec(mac_BTref *BTref, const void *search_key, - uint32_t *node_ID, int *record_ID, - void **record_ptr, int *record_len, - int search_exact_match, int *match_found); -static imgtoolerr_t BT_get_keyed_record_data(mac_BTref *BTref, void *rec_ptr, int rec_len, void **data_ptr, int *data_len); -static imgtoolerr_t BT_leaf_rec_enumerator_open(mac_BTref *BTref, BT_leaf_rec_enumerator *enumerator); -static imgtoolerr_t BT_leaf_rec_enumerator_read(BT_leaf_rec_enumerator *enumerator, void **record_ptr, int *rec_len); - -struct hfs_cat_enumerator -{ - struct mac_l2_imgref *l2_img; - BT_leaf_rec_enumerator BT_enumerator; - uint32_t parID; -}; - -/* - hfs_open_extents_file - - Open the file extents B-tree file - - l2_img (I/O): level-2 image reference - mdb (I): copy of the MDB block - fileref (O): mac open file reference - - Return imgtool error code -*/ -static imgtoolerr_t hfs_open_extents_file(struct mac_l2_imgref *l2_img, const struct hfs_mdb *mdb, struct mac_fileref *fileref) -{ - assert(l2_img->format == L2I_HFS); - - fileref->l2_img = l2_img; - - fileref->fileID = 3; - fileref->forkType = (mac_forkID)0x00; - - fileref->eof = fileref->pLen = get_UINT32BE(mdb->xtFlSize); - memcpy(fileref->hfs.extents, mdb->xtExtRec, sizeof(hfs_extent_3)); - - fileref->crPs = 0; - - fileref->reload_buf = true; - - return IMGTOOLERR_SUCCESS; -} - -/* - hfs_open_cat_file - - Open the disk catalog B-tree file - - l2_img (I/O): level-2 image reference - mdb (I): copy of the MDB block - fileref (O): mac open file reference - - Return imgtool error code -*/ -static imgtoolerr_t hfs_open_cat_file(struct mac_l2_imgref *l2_img, const struct hfs_mdb *mdb, struct mac_fileref *fileref) -{ - assert(l2_img->format == L2I_HFS); - - fileref->l2_img = l2_img; - - fileref->fileID = 4; - fileref->forkType = (mac_forkID)0x00; - - fileref->eof = fileref->pLen = get_UINT32BE(mdb->ctFlSize); - memcpy(fileref->hfs.extents, mdb->ctExtRec, sizeof(hfs_extent_3)); - - fileref->crPs = 0; - - fileref->reload_buf = true; - - return IMGTOOLERR_SUCCESS; -} - -/* - hfs_extentKey_compare - - key compare function for file extents B-tree - - p1 (I): pointer to first key - p2 (I): pointer to second key - - Return a zero the two keys are equal, a negative value if the key pointed - to by p1 is less than the key pointed to by p2, and a positive value if the - key pointed to by p1 is greater than the key pointed to by p2. -*/ -static int hfs_extentKey_compare(const void *p1, const void *p2) -{ - const hfs_extentKey *key1 = (const hfs_extentKey*)p1; - const hfs_extentKey *key2 = (const hfs_extentKey*)p2; - - /* let's keep it simple for now */ - return memcmp(key1, key2, sizeof(hfs_extentKey)); -} - -/* - hfs_catKey_compare - - key compare function for disk catalog B-tree - - p1 (I): pointer to first key - p2 (I): pointer to second key - - Return a zero the two keys are equal, a negative value if the key pointed - to by p1 is less than the key pointed to by p2, and a positive value if the - key pointed to by p1 is greater than the key pointed to by p2. -*/ -static int hfs_catKey_compare(const void *p1, const void *p2) -{ - const hfs_catKey *key1 = (const hfs_catKey *)p1; - const hfs_catKey *key2 = (const hfs_catKey *)p2; - - if (get_UINT32BE(key1->parID) != get_UINT32BE(key2->parID)) - return (get_UINT32BE(key1->parID) < get_UINT32BE(key2->parID)) ? -1 : +1; - - return mac_stricmp(key1->cName, key2->cName); -} - -/* - hfs_image_open - - Open a HFS image. Image must already be open on level 1. - - l2_img (I/O): level-2 image reference to open (l1_img and format fields - must be initialized) - img_open_buf (I): buffer with the MDB block - - Return imgtool error code -*/ -static imgtoolerr_t hfs_image_open(imgtool::image &image, imgtool::stream::ptr &&stream) -{ - imgtoolerr_t err; - struct mac_l2_imgref *l2_img; - img_open_buf buf_local; - img_open_buf *buf; - - l2_img = get_imgref(image); - l2_img->l1_img.image = ℑ - l2_img->l1_img.heads = 2; - l2_img->format = L2I_HFS; - - /* read MDB */ - err = image_read_block(&l2_img->l1_img, 2, &buf_local.raw); - if (err) - return err; - buf = &buf_local; - - /* check signature word */ - if ((buf->hfs_mdb.sigWord[0] != 0x42) || (buf->hfs_mdb.sigWord[1] != 0x44) - || (buf->hfs_mdb.VN[0] > 27)) - return IMGTOOLERR_CORRUPTIMAGE; - - l2_img->u.hfs.VBM_start = get_UINT16BE(buf->hfs_mdb.VBMSt); - - l2_img->numABs = get_UINT16BE(buf->hfs_mdb.nmAlBlks); - if (get_UINT32BE(buf->hfs_mdb.alBlkSiz) % 512) - return IMGTOOLERR_CORRUPTIMAGE; - l2_img->blocksperAB = get_UINT32BE(buf->hfs_mdb.alBlkSiz) / 512; - l2_img->u.hfs.ABStart = get_UINT16BE(buf->hfs_mdb.alBlSt); - - l2_img->nxtCNID = get_UINT32BE(buf->hfs_mdb.nxtCNID); - - l2_img->freeABs = get_UINT16BE(buf->hfs_mdb.freeABs); - - mac_strcpy(l2_img->u.hfs.volname, buf->hfs_mdb.VN); - - /* open extents and catalog BT */ - err = hfs_open_extents_file(l2_img, &buf->hfs_mdb, &l2_img->u.hfs.extents_BT.fileref); - if (err) - return err; - err = BT_open(&l2_img->u.hfs.extents_BT, hfs_extentKey_compare, true); - if (err) - return err; - if ((l2_img->u.hfs.extents_BT.attributes & btha_bigKeysMask) - /*|| (l2_img->u.hfs.extents_BT.attributes & kBTVariableIndexKeysMask)*/ - || (l2_img->u.hfs.extents_BT.maxKeyLength != 7)) - { /* This is not supported by the HFS format */ - /* Variable Index keys are not supported either, but hopefully it will - not break this imgtool module if it set (though it would probably break - a real macintosh) */ - BT_close(&l2_img->u.hfs.extents_BT); - return IMGTOOLERR_CORRUPTIMAGE; - } - err = hfs_open_cat_file(l2_img, &buf->hfs_mdb, &l2_img->u.hfs.cat_BT.fileref); - if (err) - { - BT_close(&l2_img->u.hfs.extents_BT); - return err; - } - err = BT_open(&l2_img->u.hfs.cat_BT, hfs_catKey_compare, false); - if (err) - { - return err; - } - if ((l2_img->u.hfs.cat_BT.attributes & btha_bigKeysMask) - /*|| (l2_img->u.hfs.cat_BT.attributes & kBTVariableIndexKeysMask)*/ - || (l2_img->u.hfs.cat_BT.maxKeyLength != 37)) - { /* This is not supported by the HFS format */ - /* Variable Index keys are not supported either, but hopefully it will - not break this imgtool module if it set (though it would probably break - a real macintosh) */ - BT_close(&l2_img->u.hfs.extents_BT); - BT_close(&l2_img->u.hfs.cat_BT); - return IMGTOOLERR_CORRUPTIMAGE; - } - - /* extract volume bitmap */ - { - int byte_len = (l2_img->numABs + 7) / 8; - int cur_byte = 0; - int cur_block = l2_img->u.hfs.VBM_start; - - while (cur_byte < byte_len) - { - /* read next block */ - err = image_read_block(&l2_img->l1_img, cur_block, buf->raw); - if (err) - return err; - cur_block++; - - /* append this block to VBM */ - memcpy(l2_img->u.hfs.VBM+cur_byte, buf->raw, 512); - cur_byte += 512; - } - } - - return IMGTOOLERR_SUCCESS; -} - -/* - hfs_image_close - - Close a HFS image. - - l2_img (I/O): level-2 image reference -*/ -static void hfs_image_close(struct mac_l2_imgref &l2_img) -{ - assert(l2_img.format == L2I_HFS); - - BT_close(&l2_img.u.hfs.extents_BT); - BT_close(&l2_img.u.hfs.cat_BT); -} - -/* - hfs_get_cat_record_data - - extract data from a catalog B-tree leaf record - - l2_img (I/O): level-2 image reference - rec_raw (I): pointer to record key and data, as returned by - BT_node_get_keyed_record - rec_len (I): total length of record, as returned by - BT_node_get_keyed_record - rec_key (O): set to point to record key - rec_data (O): set to point to record data - - Return imgtool error code -*/ -static imgtoolerr_t hfs_get_cat_record_data(struct mac_l2_imgref *l2_img, void *rec_raw, int rec_len, hfs_catKey **rec_key, hfs_catData **rec_data) -{ - hfs_catKey *lrec_key; - void *rec_data_raw; - hfs_catData *lrec_data; - int rec_data_len; - int min_data_size; - imgtoolerr_t err; - - - assert(l2_img->format == L2I_HFS); - - lrec_key = (hfs_catKey*)rec_raw; - /* check that key is long enough to hold it all */ - if ((lrec_key->keyLen+1) < (offsetof(hfs_catKey, cName) + lrec_key->cName[0] + 1)) - return IMGTOOLERR_CORRUPTIMAGE; - - /* get pointer to record data */ - err = BT_get_keyed_record_data(&l2_img->u.hfs.cat_BT, rec_raw, rec_len, &rec_data_raw, &rec_data_len); - if (err) - return err; - lrec_data = (hfs_catData*)rec_data_raw; - - /* extract record type */ - if (rec_data_len < 2) - return IMGTOOLERR_CORRUPTIMAGE; - - /* check that the record is large enough for its type */ - switch (get_UINT16BE(lrec_data->dataType)) - { - case hcrt_Folder: - min_data_size = sizeof(hfs_catFolderData); - break; - - case hcrt_File: - min_data_size = sizeof(hfs_catFileData); - break; - - case hcrt_FolderThread: - case hcrt_FileThread: - min_data_size = sizeof(hfs_catThreadData); - break; - - default: - /* records of unknown type can be safely ignored */ - min_data_size = 0; - break; - } - - if (rec_data_len < min_data_size) - return IMGTOOLERR_CORRUPTIMAGE; - - if (rec_key) - *rec_key = lrec_key; - if (rec_data) - *rec_data = lrec_data; - - return IMGTOOLERR_SUCCESS; -} - -/* - hfs_cat_open - - Open an enumerator on the disk catalog - - l2_img (I/O): level-2 image reference - enumerator (O): open catalog enumerator reference - - Return imgtool error code -*/ -static imgtoolerr_t hfs_cat_open(struct mac_l2_imgref *l2_img, const char *path, hfs_cat_enumerator *enumerator) -{ - imgtoolerr_t err; - uint32_t parID; - mac_str255 filename; - mac_dirent cat_info; - - assert(l2_img->format == L2I_HFS); - - /* resolve path and fetch file info from directory/catalog */ - err = mac_lookup_path(l2_img, path, &parID, filename, &cat_info, false); - if (err) - return err; - if (cat_info.dataRecType != hcrt_Folder) - return IMGTOOLERR_FILENOTFOUND; - - enumerator->l2_img = l2_img; - enumerator->parID = parID; - - return BT_leaf_rec_enumerator_open(&l2_img->u.hfs.cat_BT, &enumerator->BT_enumerator); -} - -/* - hfs_cat_read - - Enumerate the disk catalog - - enumerator (I/O): open catalog enumerator reference - rec_key (O): set to point to record key - rec_data (O): set to point to record data - - Return imgtool error code -*/ -static imgtoolerr_t hfs_cat_read(hfs_cat_enumerator *enumerator, hfs_catKey **rec_key, hfs_catData **rec_data) -{ - void *rec; - int rec_len = 0; - imgtoolerr_t err; - - - *rec_key = NULL; - *rec_data = NULL; - - /* read next record */ - err = BT_leaf_rec_enumerator_read(&enumerator->BT_enumerator, &rec, &rec_len); - if (err) - return err; - - /* check EOList condition */ - if (rec == NULL) - return IMGTOOLERR_SUCCESS; - - /* extract record data */ - err = hfs_get_cat_record_data(enumerator->l2_img, rec, rec_len, rec_key, rec_data); - if (err) - return err; - - return IMGTOOLERR_SUCCESS; -} - -/* - hfs_cat_search - - Search the catalog for a given file - - l2_img (I/O): level-2 image reference - parID (I): CNID of file parent directory - cName (I): file name - rec_key (O): set to point to record key - rec_data (O): set to point to record data - - Return imgtool error code -*/ -static imgtoolerr_t hfs_cat_search(struct mac_l2_imgref *l2_img, uint32_t parID, const mac_str31 cName, hfs_catKey **rec_key, hfs_catData **rec_data) -{ - hfs_catKey search_key; - void *rec; - int rec_len; - imgtoolerr_t err; - - assert(l2_img->format == L2I_HFS); - - if (cName[0] > 31) - return IMGTOOLERR_UNEXPECTED; - - /* generate search key */ - search_key.keyLen = search_key.resrv1 = 0; /* these fields do not matter - to the compare function, so we - don't fill them */ - set_UINT32BE(&search_key.parID, parID); - mac_strcpy(search_key.cName, cName); - - /* search key */ - err = BT_search_leaf_rec(&l2_img->u.hfs.cat_BT, &search_key, NULL, NULL, &rec, &rec_len, true, NULL); - if (err) - return err; - - /* extract record data */ - err = hfs_get_cat_record_data(l2_img, rec, rec_len, rec_key, rec_data); - if (err) - return err; - - return IMGTOOLERR_SUCCESS; -} - -/* - hfs_lookup_path - - Resolve a file path - - l2_img (I/O): level-2 image reference - fpath (I): file path (C string) - parID (O): set to the CNID of the file parent directory - filename (O): set to the actual name of the file, with capitalization matching - the one on the volume rather than the one in the fpath parameter (Mac - string) - cat_info (O): catalog info for this file extracted from the catalog file - (may be NULL) - - Return imgtool error code -*/ -static imgtoolerr_t hfs_lookup_path(struct mac_l2_imgref *l2_img, const char *fpath, uint32_t *parID, mac_str255 filename, mac_dirent *cat_info) -{ - const char *element_start; - int element_len; - mac_str255 mac_element_name; - //int level; - imgtoolerr_t err; - hfs_catKey *catrec_key = NULL; - hfs_catData *catrec_data = NULL; - uint16_t dataRecType = hcrt_Folder; - - /* iterate each path element */ - element_start = fpath; - //level = 0; - *parID = 2; /* root parID is 2 */ - - while(*element_start) - { - /* find next path element */ - element_len = strlen(element_start); - /* decode path element name */ - c_to_mac_strncpy(mac_element_name, element_start, element_len); - - err = hfs_cat_search(l2_img, *parID, mac_element_name, &catrec_key, &catrec_data); - if (err) - return err; - - dataRecType = get_UINT16BE(catrec_data->dataType); - - /* regular folder/file name */ - if (dataRecType == hcrt_Folder) - *parID = get_UINT32BE(catrec_data->folder.folderID); - else if (element_start[element_len + 1]) - return IMGTOOLERR_BADFILENAME; - - /* iterate */ - element_start += element_len + 1; - } - - if (catrec_key && (dataRecType == hcrt_File)) - { - /* save ref */ - *parID = get_UINT32BE(catrec_key->parID); - mac_strcpy(filename, catrec_key->cName); - } - - if (cat_info) - { - if (catrec_data && (dataRecType == hcrt_File)) - { - cat_info->flFinderInfo = catrec_data->file.userInfo; - cat_info->flXFinderInfo = catrec_data->file.finderInfo; - cat_info->flags = catrec_data->file.flags; - cat_info->fileID = get_UINT32BE(catrec_data->file.fileID); - cat_info->dataLogicalSize = get_UINT32BE(catrec_data->file.dataLogicalSize); - cat_info->dataPhysicalSize = get_UINT32BE(catrec_data->file.dataPhysicalSize); - cat_info->rsrcLogicalSize = get_UINT32BE(catrec_data->file.rsrcLogicalSize); - cat_info->rsrcPhysicalSize = get_UINT32BE(catrec_data->file.rsrcPhysicalSize); - cat_info->createDate = get_UINT32BE(catrec_data->file.createDate); - cat_info->modifyDate = get_UINT32BE(catrec_data->file.modifyDate); - } - else - { - memset(cat_info, 0, sizeof(*cat_info)); - } - cat_info->dataRecType = dataRecType; - } - - return IMGTOOLERR_SUCCESS; -} - -/* - hfs_file_open_internal - - Open a file fork, given its catalog entry. This function should not be - called directly: call hfs_file_open instead. - - l2_img (I/O): level-2 image reference - file_rec (I): catalog entry for the file to open - mac_forkID (I): tells which fork should be opened - fileref (O): mac file reference to open - - Return imgtool error code -*/ -static imgtoolerr_t hfs_file_open_internal(struct mac_l2_imgref *l2_img, const hfs_catFileData *file_rec, mac_forkID fork, struct mac_fileref *fileref) -{ - assert(l2_img->format == L2I_HFS); - - fileref->l2_img = l2_img; - - fileref->fileID = get_UINT32BE(file_rec->fileID); - fileref->forkType = fork; - - switch (fork) - { - case data_fork: - fileref->eof = get_UINT32BE(file_rec->dataLogicalSize); - fileref->pLen = get_UINT32BE(file_rec->dataPhysicalSize); - memcpy(fileref->hfs.extents, file_rec->dataExtents, sizeof(hfs_extent_3)); - break; - - case rsrc_fork: - fileref->eof = get_UINT32BE(file_rec->rsrcLogicalSize); - fileref->pLen = get_UINT32BE(file_rec->rsrcPhysicalSize); - memcpy(fileref->hfs.extents, file_rec->rsrcExtents, sizeof(hfs_extent_3)); - break; - } - - fileref->crPs = 0; - - fileref->reload_buf = true; - - return IMGTOOLERR_SUCCESS; -} - -/* - hfs_file_open - - Open a file located on a HFS volume. This function should not be called - directly: call mac_file_open instead. - - l2_img (I/O): level-2 image reference - parID (I): CNID of file parent directory - filename (I): name of the file (Mac string) - mac_forkID (I): tells which fork should be opened - fileref (O): mac file reference to open - - Return imgtool error code -*/ -static imgtoolerr_t hfs_file_open(struct mac_l2_imgref *l2_img, uint32_t parID, const mac_str255 filename, mac_forkID fork, struct mac_fileref *fileref) -{ - hfs_catKey *catrec_key; - hfs_catData *catrec_data; - uint16_t dataRecType; - imgtoolerr_t err; - - /* lookup file in catalog */ - err = hfs_cat_search(l2_img, parID, filename, &catrec_key, &catrec_data); - if (err) - return err; - - dataRecType = get_UINT16BE(catrec_data->dataType); - - /* file expected */ - if (dataRecType != hcrt_File) - return IMGTOOLERR_BADFILENAME; - - fileref->hfs.parID = get_UINT32BE(catrec_key->parID); - mac_strcpy(fileref->hfs.filename, catrec_key->cName); - - /* open it */ - return hfs_file_open_internal(l2_img, &catrec_data->file, fork, fileref); -} - -/* - hfs_file_get_nth_block_address - - Get the disk block address of a given block in an open file on a MFS image. - Called by macintosh file code. - - fileref (I/O): open mac file reference - block_num (I): file block index - block_address (O): disk block address for the file block - - Return imgtool error code -*/ -static imgtoolerr_t hfs_file_get_nth_block_address(struct mac_fileref *fileref, uint32_t block_num, uint32_t *block_address) -{ - uint32_t AB_num; - uint32_t cur_AB; - uint32_t i; - void *cur_extents_raw; - hfs_extent *cur_extents; - int cur_extents_len; - void *extents_BT_rec; - int extents_BT_rec_len; - imgtoolerr_t err; - uint16_t AB_address; - - assert(fileref->l2_img->format == L2I_HFS); - - AB_num = block_num / fileref->l2_img->blocksperAB; - cur_AB = 0; - cur_extents = fileref->hfs.extents; - - /* first look in catalog tree extents */ - for (i=0; i<3; i++) - { - if (AB_num < cur_AB+get_UINT16BE(cur_extents[i].numABlks)) - break; - cur_AB += get_UINT16BE(cur_extents[i].numABlks); - } - if (i == 3) - { - /* extent not found: read extents record from extents BT */ - hfs_extentKey search_key; - hfs_extentKey *found_key; - - search_key.keyLength = keyLength_hfs_extentKey; - search_key.forkType = fileref->forkType; - set_UINT32BE(&search_key.fileID, fileref->fileID); - set_UINT16BE(&search_key.startBlock, AB_num); - - /* search for the record with the largest key lower than or equal to - search_key. The keys are constructed in such a way that, if a record - includes AB_num, it is that one. */ - err = BT_search_leaf_rec(&fileref->l2_img->u.hfs.extents_BT, &search_key, - NULL, NULL, &extents_BT_rec, &extents_BT_rec_len, - false, NULL); - if (err) - return err; - - if (extents_BT_rec == NULL) - return IMGTOOLERR_CORRUPTIMAGE; - - found_key = (hfs_extentKey*)extents_BT_rec; - /* check that this record concerns the correct file */ - if ((found_key->forkType != fileref->forkType) - || (get_UINT32BE(found_key->fileID) != fileref->fileID)) - return IMGTOOLERR_CORRUPTIMAGE; - - /* extract start AB */ - cur_AB = get_UINT16BE(found_key->startBlock); - /* get extents pointer */ - err = BT_get_keyed_record_data(&fileref->l2_img->u.hfs.extents_BT, extents_BT_rec, extents_BT_rec_len, &cur_extents_raw, &cur_extents_len); - if (err) - return err; - if (cur_extents_len < 3*sizeof(hfs_extent)) - return IMGTOOLERR_CORRUPTIMAGE; - cur_extents = (hfs_extent*)cur_extents_raw; - - /* pick correct extent in record */ - for (i=0; i<3; i++) - { - if (AB_num < cur_AB+get_UINT16BE(cur_extents[i].numABlks)) - break; - cur_AB += get_UINT16BE(cur_extents[i].numABlks); - } - if (i == 3) - /* extent not found */ - return IMGTOOLERR_CORRUPTIMAGE; - } - - AB_address = get_UINT16BE(cur_extents[i].stABN) + (AB_num-cur_AB); - - if (AB_address >= fileref->l2_img->numABs) - return IMGTOOLERR_CORRUPTIMAGE; - - *block_address = fileref->l2_img->u.hfs.ABStart + AB_address * fileref->l2_img->blocksperAB - + block_num % fileref->l2_img->blocksperAB; - - return IMGTOOLERR_SUCCESS; -} - -#if 0 -#pragma mark - -#pragma mark B-TREE IMPLEMENTATION -#endif - -/* - B-tree (Balanced search tree) files are used by the HFS and HFS+ file - systems: the Extents and Catalog files are both B-Tree. - - Note that these B-trees are B+-trees: data is only on the leaf level, and - nodes located on the same level are also linked sequentially, which allows - fast sequenctial access to the catalog file. - - These files are normal files, except for the fact that they are not - referenced from the catalog but the MDB. They are allocated in fixed-size - records of 512 bytes (HFS). (HFS+ supports any power of two from 512 - through 32768, and uses a default of 1024 for Extents, and 4096 for both - Catalog and Attributes.) - - Nodes can contain any number of records. The nodes can be of any of four - types: header node (unique node with b-tree information, pointer to root - node and start of the node allocation bitmap), map nodes (which are created - when the node allocation bitmap outgrows the header node), index nodes - (root and branch node that enable to efficiently search the leaf nodes for - a specific key value), and leaf nodes (which hold the actual user data - records with keys and data). The first node is always a header node. - Other nodes can be of any of the 3 other type, or they can be free. -*/ - -/* - BTNodeHeader - - Header of a node record -*/ -struct BTNodeHeader -{ - UINT32BE fLink; /* (index of) next node at this level */ - UINT32BE bLink; /* (index of) previous node at this level */ - uint8_t kind; /* kind of node (leaf, index, header, map) */ - uint8_t height; /* zero for header, map; 1 for leaf, 2 through - treeDepth for index (child is one LESS than - parent, whatever IM says) */ - UINT16BE numRecords; /* number of records in this node */ - UINT16BE reserved; /* reserved; set to zero */ -}; - -/* - Constants for BTNodeHeader kind field -*/ -enum -{ - btnk_leafNode = 0xff, /* leaf nodes hold the actual user data records - with keys and data */ - btnk_indexNode = 0, /* root and branch node that enable to efficiently - search the leaf nodes for a specific key value */ - btnk_headerNode = 1, /* unique node with b-tree information, pointer to - root node and start of the node allocation - bitmap */ - btnk_mapNode = 2 /* map nodes are created when the node allocation - bitmap outgrows the header node */ -}; - -/* - BTHeaderRecord: first record of a B-tree header node (second record is - unused, and third is node allocation bitmap). -*/ -struct BTHeaderRecord -{ - UINT16BE treeDepth; /* maximum height (usually leaf nodes) */ - UINT32BE rootNode; /* node number of root node */ - UINT32BE leafRecords; /* number of leaf records in all leaf nodes */ - UINT32BE firstLeafNode; /* node number of first leaf node */ - UINT32BE lastLeafNode; /* node number of last leaf node */ - UINT16BE nodeSize; /* size of a node, in bytes */ - UINT16BE maxKeyLength; /* maximum length of data (index + leaf) record keys; - length of all index record keys if - btha_variableIndexKeysMask attribute flag is not set */ - UINT32BE totalNodes; /* total number of nodes in tree */ - UINT32BE freeNodes; /* number of unused (free) nodes in tree */ - - UINT16BE reserved1; /* unused */ - UINT32BE clumpSize; /* used in some HFS implementations? (reserved in - early HFS implementations, and in HFS Plus) */ - uint8_t btreeType; /* reserved - set to 0 */ - uint8_t reserved2; /* reserved */ - UINT32BE attributes; /* persistent attributes about the tree */ - UINT32BE reserved3[16]; /* reserved */ -}; - -static imgtoolerr_t BT_check(mac_BTref *BTref, int is_extent); - -/* - BT_open - - Open a file as a B-tree. The file must be already open as a macintosh - file. - - BTref (I/O): B-tree file handle to open (BTref->fileref must have been - open previously) - key_compare_func (I): function that compares two keys - is_extent (I): true if we are opening the extent B-tree (we want to do - extra checks in this case because the extent B-Tree may include extent - records for the extent B-tree itself, and if an extent record for the - extent B-tree is located in an extent that has not been defined by - previous extent records, then we can never retreive this extent record) - - Return imgtool error code -*/ -static imgtoolerr_t BT_open(mac_BTref *BTref, int (*key_compare_func)(const void *key1, const void *key2), int is_extent) -{ - imgtoolerr_t err; - BTNodeHeader node_header; - BTHeaderRecord header_rec; - - /* seek to node 0 */ - err = mac_file_seek(&BTref->fileref, 0); - if (err) - return err; - - /* read node header */ - err = mac_file_read(&BTref->fileref, sizeof(node_header), &node_header); - if (err) - return err; - - if ((node_header.kind != btnk_headerNode) || (get_UINT16BE(node_header.numRecords) < 3) - || (node_header.height != 0)) - return IMGTOOLERR_CORRUPTIMAGE; /* right??? */ - - /* CHEESY HACK: we assume that the header record immediately follows the - node header. This is because we need to know the node length to know where - the record pointers are located, but we need to read the header record to - know the node length. */ - err = mac_file_read(&BTref->fileref, sizeof(header_rec), &header_rec); - if (err) - return err; - - BTref->nodeSize = get_UINT16BE(header_rec.nodeSize); - BTref->rootNode = get_UINT32BE(header_rec.rootNode); - BTref->firstLeafNode = get_UINT32BE(header_rec.firstLeafNode); - BTref->attributes = get_UINT32BE(header_rec.attributes); - BTref->treeDepth = get_UINT16BE(header_rec.treeDepth); - BTref->maxKeyLength = get_UINT16BE(header_rec.maxKeyLength); - - BTref->key_compare_func = key_compare_func; - - BTref->node_buf = malloc(BTref->nodeSize); - if (!BTref->node_buf) - return IMGTOOLERR_OUTOFMEMORY; - - if (BTREE_CHECKS) - { - /* optional: check integrity of B-tree */ - err = BT_check(BTref, is_extent); - if (err) - return err; - } - - return IMGTOOLERR_SUCCESS; -} - -/* - BT_close - - Close a B-tree - - BTref (I/O): open B-tree file handle -*/ -static void BT_close(mac_BTref *BTref) -{ - free(BTref->node_buf); -} - -/* - BT_read_node - - Read a node from a B-tree - - BTref (I/O): open B-tree file handle - node_ID (I): index of the node to read - expected_kind (I): kind of the node to read - expected_depth (I): depth of the node to read - dest (O): destination buffer - - Return imgtool error code -*/ -static imgtoolerr_t BT_read_node(mac_BTref *BTref, uint32_t node_ID, int expected_kind, int expected_depth, void *dest) -{ - imgtoolerr_t err; - - /* seek to node */ - err = mac_file_seek(&BTref->fileref, node_ID*BTref->nodeSize); - if (err) - return err; - - /* read it */ - err = mac_file_read(&BTref->fileref, BTref->nodeSize, dest); - if (err) - return err; - - /* check node kind and depth */ - if ((((BTNodeHeader *) dest)->kind != expected_kind) - || (((BTNodeHeader *) dest)->height != expected_depth)) - return IMGTOOLERR_CORRUPTIMAGE; - - return IMGTOOLERR_SUCCESS; -} - -/* - BT_node_get_record - - Extract a raw record from a B-tree node - - BTref (I/O): open B-tree file handle - node_buf (I): buffer with the node the record should be extracted from - recnum (I): index of record to read - rec_ptr (O): set to point to start of record (key + data) - rec_len (O): set to total length of record (key + data) - - Return imgtool error code -*/ -static imgtoolerr_t BT_node_get_record(mac_BTref *BTref, void *node_buf, unsigned recnum, void **rec_ptr, int *rec_len) -{ - uint16_t node_numRecords = get_UINT16BE(((BTNodeHeader *) node_buf)->numRecords); - uint16_t offset; - uint16_t next_offset; - - if (recnum >= node_numRecords) - return IMGTOOLERR_UNEXPECTED; - - int recnum_s = (int)recnum; - offset = get_UINT16BE(((UINT16BE *)((uint8_t *) node_buf + BTref->nodeSize))[-recnum_s - 1]); - next_offset = get_UINT16BE(((UINT16BE *)((uint8_t *) node_buf + BTref->nodeSize))[-recnum_s - 2]); - - if ((offset < sizeof(BTNodeHeader)) || (offset > BTref->nodeSize-2*node_numRecords) - || (next_offset < sizeof(BTNodeHeader)) || (next_offset > BTref->nodeSize-2*node_numRecords) - || (offset & 1) || (next_offset & 1) - || (offset > next_offset)) - return IMGTOOLERR_CORRUPTIMAGE; - - *rec_ptr = (uint8_t *)node_buf + offset; - *rec_len = next_offset - offset; - - return IMGTOOLERR_SUCCESS; -} - -/* - BT_node_get_keyed_record - - Extract a keyed record from a B-tree node. Equivalent to - BT_node_get_record, only we do extra checks. - - BTref (I/O): open B-tree file handle - node_buf (I): buffer with the node the record should be extracted from - node_is_index (I): true if node is index node - recnum (I): index of record to read - rec_ptr (O): set to point to start of record (key + data) - rec_len (O): set to total length of record (key + data) - - Return imgtool error code -*/ -static imgtoolerr_t BT_node_get_keyed_record(mac_BTref *BTref, void *node_buf, int node_is_index, unsigned recnum, void **rec_ptr, int *rec_len) -{ - imgtoolerr_t err; - void *lrec_ptr; - int lrec_len; - int key_len; - - /* extract record */ - err = BT_node_get_record(BTref, node_buf, recnum, &lrec_ptr, &lrec_len); - if (err) - return err; - - /* read key len */ - key_len = (BTref->attributes & btha_bigKeysMask) - ? get_UINT16BE(* (UINT16BE *)lrec_ptr) - : (* (uint8_t *)lrec_ptr); - - /* check that key fits in record */ - if ((key_len + ((BTref->attributes & btha_bigKeysMask) ? 2 : 1)) > lrec_len) - /* hurk! */ - return IMGTOOLERR_CORRUPTIMAGE; - - if (key_len > BTref->maxKeyLength) - return IMGTOOLERR_CORRUPTIMAGE; - - if (node_is_index && (! (BTref->attributes & btha_variableIndexKeysMask)) && (key_len != BTref->maxKeyLength)) - return IMGTOOLERR_CORRUPTIMAGE; - - if (rec_ptr) - *rec_ptr = lrec_ptr; - if (rec_len) - *rec_len = lrec_len; - - return IMGTOOLERR_SUCCESS; -} - -/* - BT_get_keyed_record_data - - extract data from a keyed record - - BTref (I/O): open B-tree file handle - rec_ptr (I): point to start of record (key + data) - rec_len (I): total length of record (key + data) - data_ptr (O): set to point to record data - data_len (O): set to length of record data - - Return imgtool error code -*/ -static imgtoolerr_t BT_get_keyed_record_data(mac_BTref *BTref, void *rec_ptr, int rec_len, void **data_ptr, int *data_len) -{ - int lkey_len; - int data_offset; - - /* read key len */ - lkey_len = (BTref->attributes & btha_bigKeysMask) - ? get_UINT16BE(* (UINT16BE *)rec_ptr) - : (* (uint8_t *)rec_ptr); - - /* compute offset to data record */ - data_offset = lkey_len + ((BTref->attributes & btha_bigKeysMask) ? 2 : 1); - if (data_offset > rec_len) - /* hurk! */ - return IMGTOOLERR_CORRUPTIMAGE; - /* fix alignment */ - if (data_offset & 1) - data_offset++; - - if (data_ptr) - *data_ptr = (uint8_t *)rec_ptr + data_offset; - if (data_len) - *data_len = (rec_len > data_offset) ? rec_len-data_offset : 0; - - return IMGTOOLERR_SUCCESS; -} - -/* - BT_check - - Check integrity of a complete B-tree - - BTref (I/O): open B-tree file handle - is_extent (I): true if we are opening the extent B-tree (we want to do - extra checks in this case because the extent B-Tree may include extent - records for the extent B-tree itself, and if an extent record for the - extent B-tree is located in an extent that has not been defined by - previous extent records, then we can never retreive this extent record) - - Return imgtool error code -*/ -struct data_nodes_t -{ - void *buf; - uint32_t node_num; - uint32_t cur_rec; - uint32_t num_recs; -}; -static imgtoolerr_t BT_check(mac_BTref *BTref, int is_extent) -{ - uint16_t node_numRecords; - BTHeaderRecord *header_rec; - uint8_t *bitmap; - - data_nodes_t *data_nodes; - int i, j; - uint32_t cur_node, prev_node; - void *rec1, *rec2; - int rec1_len, rec2_len; - void *rec1_data; - int rec1_data_len; - uint32_t totalNodes, lastLeafNode; - uint32_t freeNodes; - int compare_result; - uint32_t map_count, map_len; - uint32_t run_len; - uint32_t run_bit_len; - uint32_t actualFreeNodes; - imgtoolerr_t err; - uint32_t maxExtentAB = 0, maxExtentNode = 0, extentEOL = 0; /* if is_extent is true */ - - if (is_extent) - { - switch (BTref->fileref.l2_img->format) - { - case L2I_MFS: - /* MFS does not feature any extents B-tree! */ - return IMGTOOLERR_UNEXPECTED; - - case L2I_HFS: - maxExtentAB = 0; - for (j=0; j<3; j++) - maxExtentAB += get_UINT16BE(BTref->fileref.hfs.extents[j].numABlks); - maxExtentNode = (uint64_t)maxExtentAB * 512 * BTref->fileref.l2_img->blocksperAB - / BTref->nodeSize; - extentEOL = false; - break; - } - } - - /* read header node */ - if ((! is_extent) || (0 < maxExtentNode)) - err = BT_read_node(BTref, 0, btnk_headerNode, 0, BTref->node_buf); - else - err = IMGTOOLERR_CORRUPTIMAGE; - if (err) - return err; - - /* check we have enough records */ - node_numRecords = get_UINT16BE(((BTNodeHeader *) BTref->node_buf)->numRecords); - if (node_numRecords < 3) - return IMGTOOLERR_CORRUPTIMAGE; - - /* get header record */ - err = BT_node_get_record(BTref, BTref->node_buf, 0, &rec1, &rec1_len); - if (err) - return err; - header_rec = (BTHeaderRecord *)rec1; - - /* check length of header record */ - if (rec1_len < sizeof(BTHeaderRecord)) - return IMGTOOLERR_CORRUPTIMAGE; - - totalNodes = get_UINT32BE(header_rec->totalNodes); - if (totalNodes == 0) - /* we need at least one header node */ - return IMGTOOLERR_CORRUPTIMAGE; - lastLeafNode = get_UINT32BE(header_rec->lastLeafNode); - freeNodes = get_UINT32BE(header_rec->freeNodes); - - /* check file length */ - if ((BTref->nodeSize * totalNodes) > BTref->fileref.pLen) - return IMGTOOLERR_CORRUPTIMAGE; - - /* initialize for the function postlog ("bail:" tag) */ - err = IMGTOOLERR_SUCCESS; - bitmap = NULL; - data_nodes = NULL; - - /* alloc buffer for reconstructed bitmap */ - map_len = (totalNodes + 7) / 8; - bitmap = (uint8_t*)malloc(map_len); - if (! bitmap) - return IMGTOOLERR_OUTOFMEMORY; - memset(bitmap, 0, map_len); - - /* check B-tree data nodes (i.e. index and leaf nodes) */ - if (BTref->treeDepth == 0) - { - /* B-tree is empty */ - if (BTref->rootNode || BTref->firstLeafNode || lastLeafNode) - { - err = IMGTOOLERR_OUTOFMEMORY; - goto bail; - } - } - else - { - /* alloc array of buffers for catalog data nodes */ - data_nodes = (data_nodes_t *)malloc(sizeof(data_nodes_t) * BTref->treeDepth); - if (! data_nodes) - { - err = IMGTOOLERR_OUTOFMEMORY; - goto bail; - } - for (i=0; itreeDepth; i++) - data_nodes[i].buf = NULL; /* required for function postlog to work should next loop fail */ - for (i=0; itreeDepth; i++) - { - data_nodes[i].buf = malloc(BTref->nodeSize); - if (!data_nodes[i].buf) - { - err = IMGTOOLERR_OUTOFMEMORY; - goto bail; - } - } - - /* read first data nodes */ - cur_node = BTref->rootNode; - for (i=BTref->treeDepth-1; i>=0; i--) - { - /* check node index */ - if (cur_node >= totalNodes) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - /* check that node has not been used for another purpose */ - /* this check is unecessary because the current consistency checks - that forward and back linking match and that node height is correct - are enough to detect such errors */ -#if 0 - if (bitmap[cur_node >> 3] & (0x80 >> (cur_node & 7))) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } -#endif - /* add node in bitmap */ - bitmap[cur_node >> 3] |= (0x80 >> (cur_node & 7)); - /* read node */ - if ((! is_extent) || (cur_node < maxExtentNode)) - err = BT_read_node(BTref, cur_node, i ? btnk_indexNode : btnk_leafNode, i+1, data_nodes[i].buf); - else - err = IMGTOOLERR_CORRUPTIMAGE; - if (err) - goto bail; - /* check that it is the first node at this level */ - if (get_UINT32BE(((BTNodeHeader *) data_nodes[i].buf)->bLink)) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - /* fill other fields */ - data_nodes[i].node_num = cur_node; - data_nodes[i].cur_rec = 0; - data_nodes[i].num_recs = get_UINT16BE(((BTNodeHeader *) data_nodes[i].buf)->numRecords); - /* check that there is at least one record */ - if (data_nodes[i].num_recs == 0) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - - /* iterate to next level if applicable */ - if (i != 0) - { - /* extract first record */ - err = BT_node_get_keyed_record(BTref, data_nodes[i].buf, true, 0, &rec1, &rec1_len); - if (err) - goto bail; - - /* extract record data ptr */ - err = BT_get_keyed_record_data(BTref, rec1, rec1_len, &rec1_data, &rec1_data_len); - if (err) - goto bail; - if (rec1_data_len < sizeof(UINT32BE)) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - - /* iterate to next level */ - cur_node = get_UINT32BE(* (UINT32BE *)rec1_data); - } - } - - /* check that a) the root node has no successor, and b) that we have really - read the first leaf node */ - if (get_UINT32BE(((BTNodeHeader *) data_nodes[BTref->treeDepth-1].buf)->fLink) - || (cur_node != BTref->firstLeafNode)) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - - /* check that keys are ordered correctly */ - while (1) - { - /* iterate through parent nodes */ - i = 0; - while ((itreeDepth) && ((data_nodes[i].cur_rec == 0) || (data_nodes[i].cur_rec == data_nodes[i].num_recs))) - { - /* read next node if necessary */ - if (data_nodes[i].cur_rec == data_nodes[i].num_recs) - { - /* get link to next node */ - cur_node = get_UINT32BE(((BTNodeHeader *) data_nodes[i].buf)->fLink); - if (cur_node == 0) - { - if (i == 0) - /* normal End of List */ - goto end_of_list; - else - { - /* error */ - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - } - /* add node in bitmap */ - bitmap[cur_node >> 3] |= (0x80 >> (cur_node & 7)); - /* read node */ - if ((! is_extent) || (cur_node < maxExtentNode)) - err = BT_read_node(BTref, cur_node, i ? btnk_indexNode : btnk_leafNode, i+1, data_nodes[i].buf); - else - err = IMGTOOLERR_CORRUPTIMAGE; - if (err) - goto bail; - /* check that backward linking match forward linking */ - if (get_UINT32BE(((BTNodeHeader *) data_nodes[i].buf)->bLink) != data_nodes[i].node_num) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - /* fill other fields */ - data_nodes[i].node_num = cur_node; - data_nodes[i].cur_rec = 0; - data_nodes[i].num_recs = get_UINT16BE(((BTNodeHeader *) data_nodes[i].buf)->numRecords); - /* check that there is at least one record */ - if (data_nodes[i].num_recs == 0) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - /* next test is not necessary because we have checked that - the root node has no successor */ -#if 0 - if (i < BTref->treeDepth-1) - { -#endif - data_nodes[i+1].cur_rec++; -#if 0 - } - else - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } -#endif - } - i++; - } - - if (is_extent && !extentEOL) - { - /* extract current leaf record and update maxExtentAB and - maxExtentNode */ - hfs_extentKey *extentKey; - hfs_extent *extentData; - - /* extract current leaf record */ - err = BT_node_get_keyed_record(BTref, data_nodes[0].buf, false, data_nodes[0].cur_rec, &rec1, &rec1_len); - if (err) - goto bail; - - extentKey = (hfs_extentKey*)rec1; - if ((extentKey->keyLength < 7) || (extentKey->forkType != 0) || (get_UINT32BE(extentKey->fileID) != 3) - || (get_UINT16BE(extentKey->startBlock) != maxExtentAB)) - /* the key is corrupt or does not concern the extent - B-tree: set the extentEOL flag so that we stop looking for - further extent records for the extent B-tree */ - extentEOL = true; - else - { /* this key concerns the extent B-tree: update maxExtentAB - and maxExtentNode */ - /* extract record data ptr */ - err = BT_get_keyed_record_data(BTref, rec1, rec1_len, &rec1_data, &rec1_data_len); - if (err) - goto bail; - if (rec1_data_len < sizeof(hfs_extent)*3) - /* the record is corrupt: set the extentEOL flag so - that we stop looking for further extent records for the - extent B-tree */ - extentEOL = true; - else - { - extentData = (hfs_extent*)rec1_data; - - for (j=0; j<3; j++) - maxExtentAB += get_UINT16BE(extentData[j].numABlks); - maxExtentNode = (uint64_t)maxExtentAB * 512 * BTref->fileref.l2_img->blocksperAB - / BTref->nodeSize; - } - } - if (extentEOL) - { - /* check that the extent B-Tree has been defined entirely */ - if (maxExtentNode < totalNodes) - { /* no good */ - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - } - } - - if (itreeDepth) - { - /* extract current record */ - err = BT_node_get_keyed_record(BTref, data_nodes[i].buf, i > 0, data_nodes[i].cur_rec, &rec1, &rec1_len); - if (err) - goto bail; - - /* extract previous record */ - err = BT_node_get_keyed_record(BTref, data_nodes[i].buf, i > 0, data_nodes[i].cur_rec-1, &rec2, &rec2_len); - if (err) - goto bail; - - /* check that it is sorted correctly */ - compare_result = (*BTref->key_compare_func)(rec1, rec2); - if (compare_result <= 0) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - - i--; - } - else - { - i--; - if (i>0) - { /* extract first record of root if it is an index node */ - err = BT_node_get_keyed_record(BTref, data_nodes[i].buf, true, data_nodes[i].cur_rec, &rec1, &rec1_len); - if (err) - goto bail; - } - i--; - } - - while (i>=0) - { - /* extract first record of current level */ - err = BT_node_get_keyed_record(BTref, data_nodes[i].buf, i > 0, data_nodes[i].cur_rec, &rec2, &rec2_len); - if (err) - goto bail; - - /* compare key with key of current record of upper level */ - compare_result = (*BTref->key_compare_func)(rec1, rec2); - if (compare_result != 0) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - - /* extract record data ptr */ - err = BT_get_keyed_record_data(BTref, rec1, rec1_len, &rec1_data, &rec1_data_len); - if (err) - goto bail; - if (rec1_data_len < sizeof(UINT32BE)) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - cur_node = get_UINT32BE(* (UINT32BE *)rec1_data); - - /* compare node index with data of current record of upper - level */ - if (cur_node != data_nodes[i].node_num) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - - /* iterate to next level */ - rec1 = rec2; - rec1_len = rec2_len; - i--; - } - - /* next leaf record */ - data_nodes[0].cur_rec++; - } - -end_of_list: - /* check that we are at the end of list for each index level */ - for (i=1; itreeDepth; i++) - { - if ((data_nodes[i].cur_rec != (data_nodes[i].num_recs-1)) - || get_UINT32BE(((BTNodeHeader *) data_nodes[i].buf)->fLink)) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - } - /* check that the last leaf node is what it is expected to be */ - if (data_nodes[0].node_num != lastLeafNode) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - } - - /* check map node chain */ - cur_node = 0; /* node 0 is the header node... */ - bitmap[0] |= 0x80; - /* check back linking */ - if (get_UINT32BE(((BTNodeHeader *) BTref->node_buf)->bLink)) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - /* get pointer to next node */ - cur_node = get_UINT32BE(((BTNodeHeader *) BTref->node_buf)->fLink); - while (cur_node != 0) - { - /* save node address */ - prev_node = cur_node; - /* check that node has not been used for another purpose */ - /* this check is unecessary because the current consistency checks that - forward and back linking match and that node height is correct are - enough to detect such errors */ -#if 0 - if (bitmap[cur_node >> 3] & (0x80 >> (cur_node & 7))) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } -#endif - /* add node in bitmap */ - bitmap[cur_node >> 3] |= (0x80 >> (cur_node & 7)); - /* read map node */ - if ((! is_extent) || (cur_node < maxExtentNode)) - err = BT_read_node(BTref, cur_node, btnk_mapNode, 0, BTref->node_buf); - else - err = IMGTOOLERR_CORRUPTIMAGE; - if (err) - goto bail; - /* check back linking */ - if (get_UINT32BE(((BTNodeHeader *) BTref->node_buf)->bLink) != prev_node) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - /* get pointer to next node */ - cur_node = get_UINT32BE(((BTNodeHeader *) BTref->node_buf)->fLink); - } - - /* re-read header node */ - err = BT_read_node(BTref, 0, btnk_headerNode, 0, BTref->node_buf); - if (err) - goto bail; - - /* get header bitmap record */ - err = BT_node_get_record(BTref, BTref->node_buf, 2, &rec1, &rec1_len); - if (err) - goto bail; - - /* check bitmap, iterating map nodes */ - map_count = 0; - actualFreeNodes = 0; - while (map_count < map_len) - { - /* compute compare len */ - run_len = rec1_len; - if (run_len > (map_len-map_count)) - run_len = map_len-map_count; - /* check that all used nodes are marked as such in the B-tree bitmap */ - for (i=0; i (totalNodes-map_count*8)) - run_bit_len = totalNodes-map_count*8; - for (i=0; i>3] & (0x80 >> (i & 7)))) - actualFreeNodes++; - map_count += run_len; - /* read next map node if required */ - if (map_count < map_len) - { - /* get pointer to next node */ - cur_node = get_UINT32BE(((BTNodeHeader *) BTref->node_buf)->fLink); - if (cur_node == 0) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - /* read map node */ - err = BT_read_node(BTref, cur_node, btnk_mapNode, 0, BTref->node_buf); - if (err) - goto bail; - /* get map record */ - err = BT_node_get_record(BTref, BTref->node_buf, 0, &rec1, &rec1_len); - if (err) - goto bail; - header_rec = (BTHeaderRecord *)rec1; - } - } - - /* check free node count */ - if (freeNodes != actualFreeNodes) - { - err = IMGTOOLERR_CORRUPTIMAGE; - goto bail; - } - -bail: - /* free buffers */ - if (data_nodes) - { - for (i=0; itreeDepth; i++) - if (data_nodes[i].buf) - free(data_nodes[i].buf); - free(data_nodes); - } - if (bitmap) - free(bitmap); - - return err; -} - -/* - BT_search_leaf_rec - - Search for a given key in a B-Tree. If exact match found, returns - corresponding leaf record. Otherwise, may return the greatest record less - than the requested key (of course, this will fail if the key is lower than - all keys in the B-Tree). - - BTref (I/O): open B-tree file handle - search_key (I): key to search the B-Tree for - node_ID (O): set to the node ID of the node the record is located in (may - be NULL) - record_ID (O): set to the index of the record in the node (may be NULL) - record_ptr (O): set to point to record in node buffer (may be NULL) - record_len (O): set to total record len (may be NULL) - search_exact_match (I): if true, the function will search for a record - equal to search_key; if false, the function will search for the - greatest record less than or equal to search_key - match_found (O): set to true if an exact match for search_key has been - found (only makes sense if search_exact_match is false) (may be NULL) - - Return imgtool error code -*/ -static imgtoolerr_t BT_search_leaf_rec(mac_BTref *BTref, const void *search_key, - uint32_t *node_ID, int *record_ID, - void **record_ptr, int *record_len, - int search_exact_match, int *match_found) -{ - imgtoolerr_t err; - int i; - uint32_t cur_node; - void *cur_rec; - int cur_rec_len; - void *last_rec; - int last_rec_len = 0; - void *rec_data; - int rec_data_len; - int depth; - uint16_t node_numRecords; - int compare_result = 0; - - /* start with root node */ - if ((BTref->rootNode == 0) || (BTref->treeDepth == 0)) - /* tree is empty */ - return ((BTref->rootNode == 0) == (BTref->treeDepth == 0)) - ? IMGTOOLERR_FILENOTFOUND - : IMGTOOLERR_CORRUPTIMAGE; - - cur_node = BTref->rootNode; - depth = BTref->treeDepth; - - while (1) - { - /* read current node */ - err = BT_read_node(BTref, cur_node, (depth > 1) ? btnk_indexNode : btnk_leafNode, depth, BTref->node_buf); - if (err) - return err; - - /* search for key */ - node_numRecords = get_UINT16BE(((BTNodeHeader *) BTref->node_buf)->numRecords); - last_rec = cur_rec = NULL; - for (i=0; inode_buf, depth > 1, i, &cur_rec, &cur_rec_len); - if (err) - return err; - - compare_result = (*BTref->key_compare_func)(cur_rec, search_key); - if (compare_result > 0) - break; - last_rec = cur_rec; - last_rec_len = cur_rec_len; - if (compare_result == 0) - break; - } - - if (! last_rec) - { /* all keys are greater than the search key: the search key is - nowhere in the tree */ - if (search_exact_match) - return IMGTOOLERR_FILENOTFOUND; - - if (match_found) - *match_found = false; - - if (node_ID) - *node_ID = 0; - - if (record_ID) - *record_ID = -1; - - if (record_ptr) - *record_ptr = NULL; - - return IMGTOOLERR_SUCCESS; - } - - if (((BTNodeHeader *) BTref->node_buf)->kind == btnk_leafNode) - /* leaf node -> end of search */ - break; - - /* extract record data ptr */ - err = BT_get_keyed_record_data(BTref, last_rec, last_rec_len, &rec_data, &rec_data_len); - if (err) - return err; - if (rec_data_len < sizeof(UINT32BE)) - return IMGTOOLERR_CORRUPTIMAGE; - - /* iterate to next level */ - cur_node = get_UINT32BE(* (UINT32BE *)rec_data); - depth--; - } - - if (compare_result != 0) - /* key not found */ - if (search_exact_match) - return IMGTOOLERR_FILENOTFOUND; - - if (match_found) - *match_found = (compare_result == 0); - - if (node_ID) - *node_ID = cur_node; - - if (record_ID) - *record_ID = i; - - if (record_ptr) - *record_ptr = last_rec; - - if (record_len) - *record_len = last_rec_len; - - return IMGTOOLERR_SUCCESS; -} - -/* - BT_leaf_rec_enumerator_open - - Open enumerator for leaf records of a B-Tree - - BTref (I/O): open B-tree file handle - enumerator (O): B-Tree enumerator to open - - Return imgtool error code -*/ -static imgtoolerr_t BT_leaf_rec_enumerator_open(mac_BTref *BTref, BT_leaf_rec_enumerator *enumerator) -{ - enumerator->BTref = BTref; - enumerator->cur_node = BTref->firstLeafNode; - enumerator->cur_rec = 0; - - return IMGTOOLERR_SUCCESS; -} - -/* - BT_leaf_rec_enumerator_read - - Read next leaf record of a B-Tree - - enumerator (I/O): open B-Tree enumerator - - Return imgtool error code -*/ -static imgtoolerr_t BT_leaf_rec_enumerator_read(BT_leaf_rec_enumerator *enumerator, void **record_ptr, int *rec_len) -{ - uint16_t node_numRecords; - imgtoolerr_t err; - - - *record_ptr = NULL; - - /* check EOList condition */ - if (enumerator->cur_node == 0) - return IMGTOOLERR_SUCCESS; - - /* read current node */ - err = BT_read_node(enumerator->BTref, enumerator->cur_node, btnk_leafNode, 1, enumerator->BTref->node_buf); - if (err) - return err; - node_numRecords = get_UINT16BE(((BTNodeHeader *) enumerator->BTref->node_buf)->numRecords); - - /* skip nodes until we find a record */ - while ((enumerator->cur_rec >= node_numRecords) && (enumerator->cur_node != 0)) - { - enumerator->cur_node = get_UINT32BE(((BTNodeHeader *) enumerator->BTref->node_buf)->fLink); - enumerator->cur_rec = 0; - - /* read node */ - err = BT_read_node(enumerator->BTref, enumerator->cur_node, btnk_leafNode, 1, enumerator->BTref->node_buf); - if (err) - return err; - node_numRecords = get_UINT16BE(((BTNodeHeader *) enumerator->BTref->node_buf)->numRecords); - } - - /* check EOList condition */ - if (enumerator->cur_node == 0) - return IMGTOOLERR_SUCCESS; - - /* get current record */ - err = BT_node_get_keyed_record(enumerator->BTref, enumerator->BTref->node_buf, false, enumerator->cur_rec, record_ptr, rec_len); - if (err) - return err; - - /* iterate to next record */ - enumerator->cur_rec++; - if (enumerator->cur_rec >= node_numRecords) - { /* iterate to next node if last record (not required, but will improve - performance on next iteration) */ - enumerator->cur_node = get_UINT32BE(((BTNodeHeader *) enumerator->BTref->node_buf)->fLink); - enumerator->cur_rec = 0; - } - return IMGTOOLERR_SUCCESS; -} - -/* - B-Tree extend EOF algorithm: - * see if the bitmap will need to be extended - * extend EOF by min 1 (if bitmap is large engough) or 2 (if bitmap needs - to be extended) and max ClumpSiz (see extClpSiz and ctClpSiz in MDB) - ***If we are extending the extent B-Tree, we need to defer the possible - creation of an additional extent record, or we might enter an endless - recursion loop*** - - Empty node alloc algorithm: - - * see if there is any free node in B-tree bitmap - * optionally, try to compact the B-tree if file is full - * if file is still full, extend EOF and try again - * mark new block as used and return its index - - - Empty node delete algorithm: - - * remove node from link list - * mark node as free in the B-tree bitmap - * optionally, if more than N% of the B-tree is free, compact the B-tree and - free some disk space - * Count nodes on this level; if there is only one left, delete parent index - node and mark the relaining node as root; if it was the last leaf node, - update header node with an empty B-tree; in either case, decrement tree - depth - - - Record shifting algorithm: - - For a given node and its first non-empty successor node: - - * compute how much free room there is in the node - * see if the first record of the first non-empty successor can fit - * if so, move it (i.e. delete the first record of the later node, and add a - copy of it to the end of the former) - - - Node merging algorithm - - * Consider node and its predecessor. If there is room, shift all records - from later to former, then delete empty later node, and delete later - record from parent index node. - - - Node splitting algorithm (non-first) - - * Consider node and its predecessor. Create new middle node and split - records in 3 even sets. Update record for last node and insert record - for middle node in parent index node. - - - Node splitting algorithm (first node) - - * Create new successor node, and split records in 2 1/3 and 2/3 sets. - Insert record for later node in parent index node. - - - Record delete algorithm: - - * remove record from node - * if record was first in node, test if node is now empty - * if node is not empty, substitute key of deleted record with key of - new head record in index tree - * if node is empty, delete key of deleted record in index tree, then - delete empty node - * optionally, look the predecessor node. Merge the two nodes if possible. - - - Record insert algorithm: - - * if there room, just insert new record in node; if new record is in first - position, update record in parent index node - * else consider predecessor: see if we can make enough room by shifting - records. If so, do shift records, insert new record, update record in - parent index node - * else split the nodes and insert record -*/ -/* - Possible additions: - - Node compaction algorithm: - - This algorithm can be executed with a specific start point and max number - of nodes, or with all nodes on a level. - - * see how many nodes we can save by shifting records left - * if we will save at least one node, do shift as many records as possible - (try to leave free space split homogeneously???) -*/ - -/*static void*/ - -#if 0 -#pragma mark - -#pragma mark RESOURCE IMPLEMENTATION -#endif - -/* - Resource manager - - The resource manager stores arbitrary chunks of data (resource) identified - by a type/id pair. The resource type is a 4-char code, which generally - implies the format of the data (e.g. 'PICT' is for a quickdraw picture, - 'STR ' for a macintosh string, 'CODE' for 68k machine code, etc). The - resource id is a signed 16-bit number that uniquely identifies each - resource of a given type. Note that, with most resource types, resources - with id < 128 are system resources that are available to all applications, - whereas resources with id >= 128 are application resources visible only to - the application that defines them. - - Each resource can optionally have a resource name, which is a macintosh - string of 255 chars at most. - - Limits: - 16MBytes of data - 64kbytes of type+reference lists - 64kbytes of resource names - - The Macintosh toolbox can open several resource files simulteanously to - overcome these restrictions. - - Resources are used virtually everywhere in the Macintosh Toolbox, so it is - no surprise that file comments and MFS folders are stored in resource files. -*/ - -/* - Resource header -*/ -struct rsrc_header -{ - UINT32BE data_offs; /* Offset from beginning of resource fork to resource data */ - UINT32BE map_offs; /* Offset from beginning of resource fork to resource map */ - UINT32BE data_len; /* Length of resource data */ - UINT32BE map_len; /* Length of resource map */ -}; - -/* - Resource data: each data entry is preceded by its len (UINT32BE) - Offset to specific data fields are gotten from the resource map -*/ - -/* - Resource map: -*/ -struct rsrc_map_header -{ - rsrc_header reserved0; /* Reserved for copy of resource header */ - UINT32BE reserved1; /* Reserved for handle to next resource map */ - UINT16BE reserved2; /* Reserved for file reference number */ - - UINT16BE attr; /* Resource fork attributes */ - UINT16BE typelist_offs; /* Offset from beginning of map to resource type list */ - UINT16BE namelist_offs; /* Offset from beginning of map to resource name list */ - UINT16BE type_count; /* Number of types in the map minus 1 */ - /* This is actually part of the type list, which matters for offsets */ -}; - -/* - Resource type list entry -*/ -struct rsrc_type_entry -{ - UINT32BE type; /* Resource type */ - UINT16BE ref_count; /* Number of resources of this type in map minus 1 */ - UINT16BE ref_offs; /* Offset from beginning of resource type list to reference list for this type */ -}; - -/* - Resource reference list entry -*/ -struct rsrc_ref_entry -{ - UINT16BE id; /* Resource ID */ - UINT16BE name_offs; /* Offset from beginning of resource name list to resource name */ - /* (-1 if none) */ - uint8_t attr; /* Resource attributes */ - UINT24BE data_offs; /* Offset from beginning of resource data to data for this resource */ - UINT32BE reserved; /* Reserved for handle to resource */ -}; - -/* - Resource name list entry: this is just a standard macintosh string -*/ - -struct mac_resfileref -{ - mac_fileref fileref; /* open resource fork ref (you may open resources - files in data fork, too, if you ever need to, - but Classic MacOS never does such a thing - (MacOS X often does so, though)) */ - uint32_t data_offs; /* Offset from beginning of resource file to resource data */ - uint32_t map_offs; /* Offset from beginning of resource file to resource data */ - - uint16_t typelist_offs; /* Offset from beginning of map to resource type list */ - uint16_t namelist_offs; /* Offset from beginning of map to resource name list */ - uint16_t type_count; /* Number of types in the map minus 1 */ - /* This is actually part of the type list, which matters for offsets */ -}; - -/* - resfile_open - - Open a file as a resource file. The file must be already open as a - macintosh file. - - resfileref (I/O): resource file handle to open (resfileref->fileref must - have been opened previously) - - Return imgtool error code -*/ -static imgtoolerr_t resfile_open(mac_resfileref *resfileref) -{ - imgtoolerr_t err; - rsrc_header header; - rsrc_map_header map_header; - - /* seek to resource header */ - err = mac_file_seek(&resfileref->fileref, 0); - if (err) - return err; - - err = mac_file_read(&resfileref->fileref, sizeof(header), &header); - if (err) - return err; - - resfileref->data_offs = get_UINT32BE(header.data_offs); - resfileref->map_offs = get_UINT32BE(header.map_offs); - - /* seek to resource map header */ - err = mac_file_seek(&resfileref->fileref, resfileref->map_offs); - if (err) - return err; - - err = mac_file_read(&resfileref->fileref, sizeof(map_header), &map_header); - if (err) - return err; - - resfileref->typelist_offs = get_UINT16BE(map_header.typelist_offs); - resfileref->namelist_offs = get_UINT16BE(map_header.namelist_offs); - resfileref->type_count = get_UINT16BE(map_header.type_count); - - return IMGTOOLERR_SUCCESS; -} - -/* - resfile_get_entry - - Get the resource entry in the resource map associated with a given type/id - pair. - - resfileref (I/O): open resource file handle - type (I): type of the resource - id (I): id of the resource - entry (O): resource entry that has been read - - Return imgtool error code -*/ -static imgtoolerr_t resfile_get_entry(mac_resfileref *resfileref, uint32_t type, uint16_t id, rsrc_ref_entry *entry) -{ - imgtoolerr_t err; - rsrc_type_entry type_entry; - uint16_t ref_count; - int i; - - /* seek to resource type list in resource map */ - err = mac_file_seek(&resfileref->fileref, resfileref->map_offs+resfileref->typelist_offs+2); - if (err) - return err; - - if (resfileref->type_count == 0xffff) - /* type list is empty */ - return IMGTOOLERR_FILENOTFOUND; - - for (i=0; i<=resfileref->type_count; i++) - { - err = mac_file_read(&resfileref->fileref, sizeof(type_entry), &type_entry); - if (err) - return err; - if (type == get_UINT32BE(type_entry.type)) - break; - } - if (i > resfileref->type_count) - /* type not found in list */ - return IMGTOOLERR_FILENOTFOUND; - - ref_count = get_UINT16BE(type_entry.ref_count); - - /* seek to resource ref list for this type in resource map */ - err = mac_file_seek(&resfileref->fileref, resfileref->map_offs+resfileref->typelist_offs+get_UINT16BE(type_entry.ref_offs)); - if (err) - return err; - - if (ref_count == 0xffff) - /* ref list is empty */ - return IMGTOOLERR_FILENOTFOUND; - - for (i=0; i<=ref_count; i++) - { - err = mac_file_read(&resfileref->fileref, sizeof(*entry), entry); - if (err) - return err; - if (id == get_UINT16BE(entry->id)) - break; - } - if (i > ref_count) - /* id not found in list */ - return IMGTOOLERR_FILENOTFOUND; - - /* type+id have been found... */ - return IMGTOOLERR_SUCCESS; -} - -/* - resfile_get_resname - - Get the name of a resource. - - resfileref (I/O): open resource file handle - entry (I): resource entry in the resource map (returned by - resfile_get_entry) - string (O): resource name - - Return imgtool error code -*/ -[[maybe_unused]] static imgtoolerr_t resfile_get_resname(mac_resfileref *resfileref, const rsrc_ref_entry *entry, mac_str255 string) -{ - imgtoolerr_t err; - uint16_t name_offs; - uint8_t len; - - name_offs = get_UINT16BE(entry->name_offs); - - if (name_offs == 0xffff) - /* ref list is empty */ - return IMGTOOLERR_UNEXPECTED; - - /* seek to resource name in name list in resource map */ - err = mac_file_seek(&resfileref->fileref, resfileref->map_offs+name_offs); - if (err) - return err; - - /* get string length */ - err = mac_file_read(&resfileref->fileref, 1, &len); - if (err) - return err; - - string[0] = len; - - /* get string data */ - err = mac_file_read(&resfileref->fileref, len, string+1); - if (err) - return err; - - return IMGTOOLERR_SUCCESS; -} - -/* - resfile_get_reslen - - Get the data length for a given resource. - - resfileref (I/O): open resource file handle - entry (I): resource entry in the resource map (returned by - resfile_get_entry) - len (O): resource length - - Return imgtool error code -*/ -static imgtoolerr_t resfile_get_reslen(mac_resfileref *resfileref, const rsrc_ref_entry *entry, uint32_t *len) -{ - imgtoolerr_t err; - uint32_t data_offs; - UINT32BE llen; - - data_offs = get_UINT24BE(entry->data_offs); - - /* seek to resource data in resource data section */ - err = mac_file_seek(&resfileref->fileref, resfileref->data_offs+data_offs); - if (err) - return err; - - /* get data length */ - err = mac_file_read(&resfileref->fileref, sizeof(llen), &llen); - if (err) - return err; - - *len = get_UINT32BE(llen); - - return IMGTOOLERR_SUCCESS; -} - -/* - resfile_get_resdata - - Get the data for a given resource. - - resfileref (I/O): open resource file handle - entry (I): resource entry in the resource map (returned by - resfile_get_entry) - offset (I): offset the data should be read from, usually 0 - len (I): length of the data to read, usually the value returned by - resfile_get_reslen - dest (O): resource data - - Return imgtool error code -*/ -static imgtoolerr_t resfile_get_resdata(mac_resfileref *resfileref, const rsrc_ref_entry *entry, uint32_t offset, uint32_t len, void *dest) -{ - imgtoolerr_t err; - uint32_t data_offs; - UINT32BE llen; - - data_offs = get_UINT24BE(entry->data_offs); - - /* seek to resource data in resource data section */ - err = mac_file_seek(&resfileref->fileref, resfileref->data_offs+data_offs); - if (err) - return err; - - /* get data length */ - err = mac_file_read(&resfileref->fileref, sizeof(llen), &llen); - if (err) - return err; - - /* check that we do not ask to read more data than avalaible */ - if ((offset + len) > get_UINT32BE(llen)) - return IMGTOOLERR_UNEXPECTED; - - if (offset) - { /* seek to resource data offset in resource data section */ - err = mac_file_seek(&resfileref->fileref, resfileref->data_offs+data_offs+4+offset); - if (err) - return err; - } - - /* get data */ - err = mac_file_read(&resfileref->fileref, len, dest); - if (err) - return err; - - return IMGTOOLERR_SUCCESS; -} - -#if 0 -#pragma mark - -#pragma mark DESKTOP FILE IMPLEMENTATION -#endif -/* - All macintosh volumes have information stored in the desktop file or the - desktop database. - - Such information include file comments, copy of BNDL and FREF resources - that describes supported file types for each application on the volume, - copy of icons for each file type registered by each application on the - volume, etc. On MFS volumes, the list of folders is stored in the desktop - file as well. - - - There have been two implementations of the desktop metadata: - - * The original desktop file. The database is stored in the resource fork - of a (usually invisible) file called "Desktop" (case may change - according to system versions), located at the root of the volume. The - desktop file is used by System 6 and earlier for all volumes (unless - Appleshare 2 is installed and the volume is shared IIRC), and by System - 7 and later for volumes smaller than 2MBytes (so that floppy disks - remain fully compatible with earlier versions of system). The desktop - file is incompletely documented by Apple technote TB06. - - * The desktop database. The database is stored in the resource fork is - stored in the data fork of two (usually invisible) files called - "Desktop DF" and "Desktop DF". The desktop database is used for - volumes shared by Appleshare 2, and for most volumes under System 7 and - later. The format of these file is not documented AFAIK. - - - The reasons for the introduction of the desktop database were: - * the macintosh resource manager cannot share resource files, which was - a problem for Appleshare - * the macintosh resource manager is pretty limited (+/-16MByte of data and - 2727 resources at most), which was a problem for large hard disks with - many programs/comments -*/ - -/* - get_comment - - Get a comment from the Desktop file - - l2_img (I): macintosh image the data should be read from - id (I): comment id (from mfs_hashString(), or HFS FXInfo/DXInfo records) - comment (O): comment that has been read - - Return imgtool error code -*/ -static imgtoolerr_t get_comment(struct mac_l2_imgref *l2_img, uint16_t id, mac_str255 comment) -{ - static const uint8_t desktop_fname[] = {'\7','D','e','s','k','t','o','p'}; - #define restype_FCMT (('F' << 24) | ('C' << 16) | ('M' << 8) | 'T') - mac_resfileref resfileref; - rsrc_ref_entry resentry; - uint32_t reslen; - imgtoolerr_t err; - - /* open rsrc fork of file Desktop in root directory */ - err = mac_file_open(l2_img, 2, desktop_fname, rsrc_fork, &resfileref.fileref); - if (err) - return err; - - /* open resource structures */ - err = resfile_open(&resfileref); - if (err) - return err; - - /* look for resource FCMT #id */ - err = resfile_get_entry(&resfileref, restype_FCMT, id, &resentry); - if (err) - return err; - - /* extract comment len */ - err = resfile_get_reslen(&resfileref, &resentry, &reslen); - if (err) - return err; - - /* check comment len */ - if (reslen > 256) - /* hurk */ - /*return IMGTOOLERR_CORRUPTIMAGE;*/ - /* people willing to extend the MFM comment field (you know, the kind - of masochists that try to support 20-year-old OSes) might append extra - fields, so we just truncate the resource */ - reslen = 256; - - /* extract comment data */ - err = resfile_get_resdata(&resfileref, &resentry, 0, reslen, comment); - if (err) - return err; - - /* phew, we are done! */ - return IMGTOOLERR_SUCCESS; -} - -#if 0 -#pragma mark - -#pragma mark IMGTOOL MODULE IMPLEMENTATION -#endif - -[[maybe_unused]] static void mac_image_exit(imgtool::image &img); -static void mac_image_info(imgtool::image &img, std::ostream &stream); -static imgtoolerr_t mac_image_beginenum(imgtool::directory &enumeration, const char *path); -static imgtoolerr_t mac_image_nextenum(imgtool::directory &enumeration, imgtool_dirent &ent); -static imgtoolerr_t mac_image_freespace(imgtool::partition &partition, uint64_t *size); -static imgtoolerr_t mac_image_readfile(imgtool::partition &partition, const char *filename, const char *fork, imgtool::stream &destf); -static imgtoolerr_t mac_image_writefile(imgtool::partition &partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *writeoptions); - -/* - close a mfs/hfs image -*/ -static void mac_image_exit(imgtool::image &img) -{ - struct mac_l2_imgref *image = get_imgref(img); - - mac_image_close(*image); -} - -/* - get basic information on a mfs/hfs image - - Currently returns the volume name -*/ -static void mac_image_info(imgtool::image &img, std::ostream &stream) -{ - char buffer[256] = { 0, }; - struct mac_l2_imgref *image = get_imgref(img); - - switch (image->format) - { - case L2I_MFS: - mac_to_c_strncpy(buffer, std::size(buffer), image->u.mfs.volname); - break; - - case L2I_HFS: - mac_to_c_strncpy(buffer, std::size(buffer), image->u.hfs.volname); - break; - } - - stream << buffer; -} - -/* - MFS/HFS catalog iterator, used when imgtool reads the catalog -*/ -struct mac_iterator -{ - mac_format format; - struct mac_l2_imgref *l2_img; - union - { - struct - { - mfs_dirref dirref; /* open directory reference */ - } mfs; - struct - { - hfs_cat_enumerator catref; /* catalog file enumerator */ - } hfs; - } u; -}; - -/* - Open the disk catalog for enumeration -*/ -static imgtoolerr_t mac_image_beginenum(imgtool::directory &enumeration, const char *path) -{ - struct mac_l2_imgref *image = get_imgref(enumeration.image()); - mac_iterator *iter = (mac_iterator *) enumeration.extra_bytes(); - imgtoolerr_t err = IMGTOOLERR_UNEXPECTED; - - iter->format = image->format; - iter->l2_img = image; - - switch (iter->format) - { - case L2I_MFS: - err = mfs_dir_open(image, path, &iter->u.mfs.dirref); - break; - - case L2I_HFS: - err = hfs_cat_open(image, path, &iter->u.hfs.catref); - break; - } - - if (err) - return err; - - return IMGTOOLERR_SUCCESS; -} - -/* - Enumerate disk catalog next entry (MFS) -*/ -static imgtoolerr_t mfs_image_nextenum(mac_iterator *iter, imgtool_dirent &ent) -{ - mfs_dir_entry *cur_dir_entry; - imgtoolerr_t err; - - - assert(iter->format == L2I_MFS); - - ent.corrupt = 0; - ent.eof = 0; - - err = mfs_dir_read(&iter->u.mfs.dirref, &cur_dir_entry); - if (err) - { - /* error */ - ent.corrupt = 1; - return err; - } - else if (!cur_dir_entry) - { - /* EOF */ - ent.eof = 1; - return IMGTOOLERR_SUCCESS; - } - - /* copy info */ - mac_to_c_strncpy(ent.filename, std::size(ent.filename), cur_dir_entry->name); - ent.filesize = get_UINT32BE(cur_dir_entry->dataPhysicalSize) - + get_UINT32BE(cur_dir_entry->rsrcPhysicalSize); - - return IMGTOOLERR_SUCCESS; -} - -#if 0 -/* - Concatenate path elements in the reverse order - - dest (O): destination buffer - dest_cur_pos (I/O): current position in destination buffer (buffer is - filled from end to start) - dest_max_len (I): length of destination buffer (use length minus one if you - want to preserve a trailing NUL character) - src (I): source C string -*/ -static void concat_fname(char *dest, int *dest_cur_pos, int dest_max_len, const char *src) -{ - static const char ellipsis[] = { '.', '.', '.' }; - int src_len = strlen(src); /* number of chars from src to insert */ - - if (src_len <= *dest_cur_pos) - { - *dest_cur_pos -= src_len; - memcpy(dest + *dest_cur_pos, src, src_len); - } - else - { - memcpy(dest, src + src_len - *dest_cur_pos, *dest_cur_pos); - *dest_cur_pos = 0; - memcpy(dest, ellipsis, (sizeof(ellipsis) <= dest_max_len) - ? sizeof(ellipsis) - : dest_max_len); - } -} -#endif - -/* - Enumerate disk catalog next entry (HFS) -*/ -static imgtoolerr_t hfs_image_nextenum(mac_iterator *iter, imgtool_dirent &ent) -{ - hfs_catKey *catrec_key; - hfs_catData *catrec_data; - uint16_t dataRecType; - imgtoolerr_t err; - /* currently, the mac->C conversion transcodes one mac char with at most 3 - C chars */ - int cur_name_head; - - assert(iter->format == L2I_HFS); - - ent.corrupt = 0; - ent.eof = 0; - - do - { - err = hfs_cat_read(&iter->u.hfs.catref, &catrec_key, &catrec_data); - if (err) - { - /* error */ - ent.corrupt = 1; - return err; - } - else if (!catrec_key) - { - /* EOF */ - ent.eof = 1; - return IMGTOOLERR_SUCCESS; - } - dataRecType = get_UINT16BE(catrec_data->dataType); - } while (((dataRecType != hcrt_Folder) && (dataRecType != hcrt_File)) - || (get_UINT32BE(catrec_key->parID) != iter->u.hfs.catref.parID)); - - /* copy info */ - switch (get_UINT16BE(catrec_data->dataType)) - { - case hcrt_Folder: - ent.directory = 1; - ent.filesize = 0; - break; - - case hcrt_File: - ent.directory = 0; - ent.filesize = get_UINT32BE(catrec_data->file.dataPhysicalSize) - + get_UINT32BE(catrec_data->file.rsrcPhysicalSize); - break; - } - - /* initialize file path buffer */ - cur_name_head = std::size(ent.filename); - if (cur_name_head > 0) - { - cur_name_head--; - ent.filename[cur_name_head] = '\0'; - } - - /* insert folder/file name in buffer */ - mac_to_c_strncpy(ent.filename, std::size(ent.filename), catrec_key->cName); -// concat_fname(ent.filename, &cur_name_head, std::size(ent.filename) - 1, buf); - -#if 0 - /* extract parent directory ID */ - parID = get_UINT32BE(catrec_key->parID); - - /* looping while (parID != 1) will display the volume name; looping while - (parID != 2) won't */ - while (parID != /*1*/2) - { - /* search catalog for folder thread */ - err = hfs_cat_search(iter->l2_img, parID, mac_empty_str, &catrec_key, &catrec_data); - if (err) - { - /* error */ - concat_fname(ent.filename, &cur_name_head, std::size(ent.filename) - 1, ":"); - concat_fname(ent.filename, &cur_name_head, std::size(ent.filename) - 1, "???"); - - memmove(ent.filename, ent.filename+cur_name_head, std::size(ent.filename) - cur_name_head); - ent.corrupt = 1; - return err; - } - - dataRecType = get_UINT16BE(catrec_data->dataType); - - if (dataRecType != hcrt_FolderThread) - { - /* error */ - concat_fname(ent.filename, &cur_name_head, std::size(ent.filename)-1, ":"); - concat_fname(ent.filename, &cur_name_head, std::size(ent.filename)-1, "???"); - - memmove(ent.filename, ent.filename+cur_name_head, std::size(ent.filename)-cur_name_head); - ent.corrupt = 1; - return IMGTOOLERR_CORRUPTIMAGE; - } - - /* got folder thread record: insert the folder name at the start of - file path, then iterate */ - mac_to_c_strncpy(buf, sizeof(buf), catrec_data->thread.nodeName); - concat_fname(ent.filename, &cur_name_head, std::size(ent.filename) - 1, ":"); - concat_fname(ent.filename, &cur_name_head, std::size(ent.filename) - 1, buf); - - /* extract parent directory ID */ - parID = get_UINT32BE(catrec_data->thread.parID); - } - memmove(ent.filename, ent.filename+cur_name_head, std::size(ent.filename) -cur_name_head); -#endif - return IMGTOOLERR_SUCCESS; -} - -/* - Enumerate disk catalog next entry -*/ -static imgtoolerr_t mac_image_nextenum(imgtool::directory &enumeration, imgtool_dirent &ent) -{ - imgtoolerr_t err; - mac_iterator *iter = (mac_iterator *) enumeration.extra_bytes(); - - switch (iter->format) - { - case L2I_MFS: - err = mfs_image_nextenum(iter, ent); - break; - - case L2I_HFS: - err = hfs_image_nextenum(iter, ent); - break; - - default: - assert(1); - err = IMGTOOLERR_UNEXPECTED; - break; - } - return err; -} - -/* - Compute free space on disk image in bytes -*/ -static imgtoolerr_t mac_image_freespace(imgtool::partition &partition, uint64_t *size) -{ - imgtool::image &image(partition.image()); - *size = ((uint64_t) get_imgref(image)->freeABs) * 512; - return IMGTOOLERR_SUCCESS; -} - -[[maybe_unused]] static imgtoolerr_t mac_get_comment(struct mac_l2_imgref *image, mac_str255 filename, const mac_dirent *cat_info, mac_str255 comment) -{ - imgtoolerr_t err = IMGTOOLERR_SUCCESS; - uint16_t commentID; - - comment[0] = '\0'; - - /* get comment from Desktop file */ - switch (image->format) - { - case L2I_MFS: - commentID = mfs_hashString(filename); - err = get_comment(image, commentID, comment); - break; - - case L2I_HFS: - /* This is the way to get Finder comments in system <= 7. Attached - comments use another method, and Finder 8 uses yet another one. */ - commentID = get_UINT16BE(cat_info->flXFinderInfo.comment); - if (commentID) - err = get_comment(image, commentID, comment); - break; - } - return err; -} - - -/* - Extract a file from a disk image. -*/ -static imgtoolerr_t mac_image_readfile(imgtool::partition &partition, const char *fpath, const char *fork, imgtool::stream &destf) -{ - imgtoolerr_t err; - imgtool::image &img(partition.image()); - struct mac_l2_imgref *image = get_imgref(img); - uint32_t parID; - mac_str255 filename; - mac_dirent cat_info; - mac_fileref fileref; - uint8_t buf[512]; - uint32_t i, run_len, data_len; - mac_fork_t fork_num; - - err = mac_identify_fork(fork, &fork_num); - if (err) - return err; - - /* resolve path and fetch file info from directory/catalog */ - err = mac_lookup_path(image, fpath, &parID, filename, &cat_info, false); - if (err) - return err; - if (cat_info.dataRecType != hcrt_File) - return IMGTOOLERR_FILENOTFOUND; - - /* open file */ - err = mac_file_open(image, parID, filename, fork_num ? rsrc_fork : data_fork, &fileref); - if (err) - return err; - - data_len = fork_num ? cat_info.rsrcLogicalSize : cat_info.dataLogicalSize; - - /* extract DF */ - i = 0; - while(i < data_len) - { - run_len = std::min(size_t(data_len - i), sizeof(buf)); - - err = mac_file_read(&fileref, run_len, buf); - if (err) - return err; - if (destf.write(buf, run_len) != run_len) - return IMGTOOLERR_WRITEERROR; - i += run_len; - } - - return IMGTOOLERR_SUCCESS; -} - -/* - Add a file to a disk image. -*/ -static imgtoolerr_t mac_image_writefile(imgtool::partition &partition, const char *fpath, const char *fork, imgtool::stream &sourcef, util::option_resolution *writeoptions) -{ - imgtool::image &img(partition.image()); - struct mac_l2_imgref *image = get_imgref(img); - uint32_t parID; - mac_str255 filename; - mac_dirent cat_info; - mac_fileref fileref; - uint32_t fork_len; - /*uint16_t commentID;*/ - /*mac_str255 comment;*/ - uint8_t buf[512]; - uint32_t i, run_len; - imgtoolerr_t err; - mac_fork_t fork_num; - - (void) writeoptions; - - if (image->format == L2I_HFS) - return IMGTOOLERR_UNIMPLEMENTED; - - err = mac_identify_fork(fork, &fork_num); - if (err) - return err; - -#if 0 - if (header.version_old != 0) - return IMGTOOLERR_UNIMPLEMENTED; -#endif - /*mac_strcpy(filename, header.filename);*/ - memset(&cat_info, 0, sizeof(cat_info)); - set_UINT32BE(&cat_info.flFinderInfo.type, 0x3F3F3F3F); - set_UINT32BE(&cat_info.flFinderInfo.creator, 0x3F3F3F3F); - fork_len = sourcef.size(); - /*comment[0] = get_UINT16BE(header.comment_len);*/ /* comment length */ - /* Next two fields are set to 0 with MFS volumes. IIRC, 0 normally - means system script: I don't think MFS stores the file name script code - anywhere on disk, so it should be a reasonable approximation. */ - - /* create file */ - /* clear inited flag and file location in window */ - set_UINT16BE(&cat_info.flFinderInfo.flags, get_UINT16BE(cat_info.flFinderInfo.flags) & ~fif_hasBeenInited); - set_UINT16BE(&cat_info.flFinderInfo.location.v, 0); - set_UINT16BE(&cat_info.flFinderInfo.location.h, 0); - - /* resolve path and create file */ - err = mac_lookup_path(image, fpath, &parID, filename, &cat_info, true); - if (err) - return err; - - /* open file fork */ - err = mac_file_open(image, parID, filename, (fork_num ? rsrc_fork : data_fork), &fileref); - if (err) - return err; - - err = mac_file_seteof(&fileref, fork_len); - if (err) - return err; - - /* extract fork */ - for (i=0; i 512) - run_len = 512; - if (sourcef.read(buf, run_len) != run_len) - return IMGTOOLERR_READERROR; - err = mac_file_write(&fileref, run_len, buf); - if (err) - return err; - i += run_len; - } - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t mac_image_listforks(imgtool::partition &partition, const char *path, std::vector &forks) -{ - imgtoolerr_t err; - uint32_t parID; - mac_str255 filename; - mac_dirent cat_info; - imgtool::image &img(partition.image()); - struct mac_l2_imgref *image = get_imgref(img); - - /* resolve path and fetch file info from directory/catalog */ - err = mac_lookup_path(image, path, &parID, filename, &cat_info, false); - if (err) - return err; - if (cat_info.dataRecType != hcrt_File) - return IMGTOOLERR_FILENOTFOUND; - - // specify data fork - forks.emplace_back(cat_info.dataLogicalSize, imgtool::fork_entry::type_t::DATA); - - if (cat_info.rsrcLogicalSize > 0) - { - // specify the resource fork - forks.emplace_back(cat_info.rsrcLogicalSize, imgtool::fork_entry::type_t::RESOURCE); - } - - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t mac_image_getattrs(imgtool::partition &partition, const char *path, const uint32_t *attrs, imgtool_attribute *values) -{ - imgtoolerr_t err; - imgtool::image &img(partition.image()); - uint32_t parID; - mac_str255 filename; - mac_dirent cat_info; - struct mac_l2_imgref *image = get_imgref(img); - int i; - - /* resolve path and fetch file info from directory/catalog */ - err = mac_lookup_path(image, path, &parID, filename, &cat_info, false); - if (err) - return err; - if (cat_info.dataRecType != hcrt_File) - return IMGTOOLERR_FILENOTFOUND; - - for (i = 0; attrs[i]; i++) - { - switch(attrs[i]) - { - case IMGTOOLATTR_INT_MAC_TYPE: - values[i].i = get_UINT32BE(cat_info.flFinderInfo.type); - break; - case IMGTOOLATTR_INT_MAC_CREATOR: - values[i].i = get_UINT32BE(cat_info.flFinderInfo.creator); - break; - case IMGTOOLATTR_INT_MAC_FINDERFLAGS: - values[i].i = get_UINT16BE(cat_info.flFinderInfo.flags); - break; - case IMGTOOLATTR_INT_MAC_COORDX: - values[i].i = get_UINT16BE(cat_info.flFinderInfo.location.h); - break; - case IMGTOOLATTR_INT_MAC_COORDY: - values[i].i = get_UINT16BE(cat_info.flFinderInfo.location.v); - break; - case IMGTOOLATTR_INT_MAC_FINDERFOLDER: - values[i].i = get_UINT16BE(cat_info.flFinderInfo.fldr); - break; - case IMGTOOLATTR_INT_MAC_ICONID: - values[i].i = get_UINT16BE(cat_info.flXFinderInfo.iconID); - break; - case IMGTOOLATTR_INT_MAC_SCRIPTCODE: - values[i].i = cat_info.flXFinderInfo.script; - break; - case IMGTOOLATTR_INT_MAC_EXTENDEDFLAGS: - values[i].i = cat_info.flXFinderInfo.XFlags; - break; - case IMGTOOLATTR_INT_MAC_COMMENTID: - values[i].i = get_UINT16BE(cat_info.flXFinderInfo.comment); - break; - case IMGTOOLATTR_INT_MAC_PUTAWAYDIRECTORY: - values[i].i = get_UINT32BE(cat_info.flXFinderInfo.putAway); - break; - - case IMGTOOLATTR_TIME_CREATED: - values[i].t = mac_crack_time(cat_info.createDate).to_time_t(); - break; - case IMGTOOLATTR_TIME_LASTMODIFIED: - values[i].t = mac_crack_time(cat_info.modifyDate).to_time_t(); - break; - } - } - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t mac_image_setattrs(imgtool::partition &partition, const char *path, const uint32_t *attrs, const imgtool_attribute *values) -{ - imgtoolerr_t err; - uint32_t parID; - mac_str255 filename; - mac_dirent cat_info; - imgtool::image &img(partition.image()); - struct mac_l2_imgref *image = get_imgref(img); - int i; - - /* resolve path and fetch file info from directory/catalog */ - err = mac_lookup_path(image, path, &parID, filename, &cat_info, false); - if (err) - return err; - if (cat_info.dataRecType != hcrt_File) - return IMGTOOLERR_FILENOTFOUND; - - for (i = 0; attrs[i]; i++) - { - switch(attrs[i]) - { - case IMGTOOLATTR_INT_MAC_TYPE: - set_UINT32BE(&cat_info.flFinderInfo.type, values[i].i); - break; - case IMGTOOLATTR_INT_MAC_CREATOR: - set_UINT32BE(&cat_info.flFinderInfo.creator, values[i].i); - break; - case IMGTOOLATTR_INT_MAC_FINDERFLAGS: - set_UINT16BE(&cat_info.flFinderInfo.flags, values[i].i); - break; - case IMGTOOLATTR_INT_MAC_COORDX: - set_UINT16BE(&cat_info.flFinderInfo.location.h, values[i].i); - break; - case IMGTOOLATTR_INT_MAC_COORDY: - set_UINT16BE(&cat_info.flFinderInfo.location.v, values[i].i); - break; - case IMGTOOLATTR_INT_MAC_FINDERFOLDER: - set_UINT16BE(&cat_info.flFinderInfo.fldr, values[i].i); - break; - case IMGTOOLATTR_INT_MAC_ICONID: - set_UINT16BE(&cat_info.flXFinderInfo.iconID, values[i].i); - break; - case IMGTOOLATTR_INT_MAC_SCRIPTCODE: - cat_info.flXFinderInfo.script = values[i].i; - break; - case IMGTOOLATTR_INT_MAC_EXTENDEDFLAGS: - cat_info.flXFinderInfo.XFlags = values[i].i; - break; - case IMGTOOLATTR_INT_MAC_COMMENTID: - set_UINT16BE(&cat_info.flXFinderInfo.comment, values[i].i); - break; - case IMGTOOLATTR_INT_MAC_PUTAWAYDIRECTORY: - set_UINT32BE(&cat_info.flXFinderInfo.putAway, values[i].i); - break; - - case IMGTOOLATTR_TIME_CREATED: - cat_info.createDate = mac_setup_time(values[i].t); - break; - case IMGTOOLATTR_TIME_LASTMODIFIED: - cat_info.modifyDate = mac_setup_time(values[i].t); - break; - } - } - - /* resolve path and fetch file info from directory/catalog */ - err = mac_lookup_path(image, path, &parID, filename, &cat_info, true); - if (err) - return err; - - return IMGTOOLERR_SUCCESS; -} - - - -/************************************* - * - * Our very own resource manager - * - *************************************/ - -static const void *mac_walk_resources(const void *resource_fork, size_t resource_fork_length, - uint32_t resource_type, - int (*discriminator)(const void *resource, uint16_t id, uint32_t length, void *param_), - void *param, uint16_t *resource_id, uint32_t *resource_length) -{ - uint32_t resource_data_offset, resource_data_length; - uint32_t resource_map_offset, resource_map_length; - uint32_t resource_typelist_count, resource_typelist_offset; - uint32_t resource_entry_offset, resource_entry_count; - uint32_t i, this_resource_type; - uint32_t this_resource_data, this_resource_length; - uint16_t this_resource_id; - const void *this_resource_ptr; - - if (resource_fork_length < 16) - return NULL; - - /* read resource header; its ok if anything past this point fails */ - resource_data_offset = pick_integer_be(resource_fork, 0, 4); - resource_map_offset = pick_integer_be(resource_fork, 4, 4); - resource_data_length = pick_integer_be(resource_fork, 8, 4); - resource_map_length = pick_integer_be(resource_fork, 12, 4); - if ((resource_data_offset + resource_data_length) > resource_fork_length) - return NULL; - if ((resource_map_offset + resource_map_length) > resource_fork_length) - return NULL; - if (resource_map_length < 30) - return NULL; - - /* read resource map and locate the resource type list */ - resource_typelist_offset = pick_integer_be(resource_fork, - resource_map_offset + 24, 2) + resource_map_offset; - if ((resource_typelist_offset + 2) > resource_fork_length) - return NULL; - resource_typelist_count = pick_integer_be(resource_fork, - resource_typelist_offset, 2) + 1; - if ((resource_typelist_offset + resource_typelist_count * 16 + 2) > resource_fork_length) - return NULL; - - /* scan the resource type list and locate the entries for this type */ - resource_entry_count = 0; - resource_entry_offset = 0; - for (i = 0; i < resource_typelist_count; i++) - { - this_resource_type = pick_integer_be(resource_fork, resource_typelist_offset - + (i * 8) + 2 + 0, 4); - if (this_resource_type == resource_type) - { - resource_entry_count = pick_integer_be(resource_fork, resource_typelist_offset - + (i * 8) + 2 + 4, 2) + 1; - resource_entry_offset = pick_integer_be(resource_fork, resource_typelist_offset - + (i * 8) + 2 + 6, 2) + resource_typelist_offset; - break; - } - } - - /* scan the resource entries, and find the correct resource */ - for (i = 0; i < resource_entry_count; i++) - { - this_resource_id = pick_integer_be(resource_fork, resource_entry_offset - + (i * 12) + 0, 2); - this_resource_data = pick_integer_be(resource_fork, resource_entry_offset - + (i * 12) + 5, 3) + resource_data_offset; - if ((this_resource_data + 4) > resource_fork_length) - return NULL; - - /* gauge the length */ - this_resource_length = pick_integer_be(resource_fork, this_resource_data, 4); - this_resource_data += 4; - if ((this_resource_data + this_resource_length) > resource_fork_length) - return NULL; - - this_resource_ptr = ((const uint8_t *) resource_fork) + this_resource_data; - if (discriminator(this_resource_ptr, this_resource_id, - this_resource_length, param)) - { - if (resource_length) - *resource_length = this_resource_length; - if (resource_id) - *resource_id = this_resource_id; - return this_resource_ptr; - } - } - - return NULL; -} - - - -static int get_resource_discriminator(const void *resource, uint16_t id, uint32_t length, void *param) -{ - const uint16_t *id_ptr = (const uint16_t *) param; - return id == *id_ptr; -} - - - -static const void *mac_get_resource(const void *resource_fork, size_t resource_fork_length, - uint32_t resource_type, uint16_t resource_id, uint32_t *resource_length) -{ - return mac_walk_resources(resource_fork, resource_fork_length, - resource_type, get_resource_discriminator, &resource_id, NULL, resource_length); -} - - - -/************************************* - * - * Custom icons - * - *************************************/ - -static int bundle_discriminator(const void *resource, uint16_t id, uint32_t length, void *param) -{ - uint32_t this_creator_code = pick_integer_be(resource, 0, 4); - uint32_t desired_creator_code = *((uint32_t *) param); - return this_creator_code == desired_creator_code; -} - - - -static uint8_t get_pixel(const uint8_t *src, int width, int height, int bpp, - int x, int y) -{ - uint8_t byte, mask; - int bit_position; - - byte = src[(y * width + x) * bpp / 8]; - bit_position = 8 - ((x % (8 / bpp)) + 1) * bpp; - mask = (1 << bpp) - 1; - return (byte >> bit_position) & mask; -} - - - -static bool load_icon(uint32_t *dest, const void *resource_fork, uint64_t resource_fork_length, - uint32_t resource_type, uint16_t resource_id, int width, int height, int bpp, - const uint32_t *palette, bool has_mask) -{ - bool success = false; - uint32_t frame_length = width * height * bpp / 8; - uint32_t total_length = frame_length * (has_mask ? 2 : 1); - uint32_t resource_length; - - // attempt to fetch resource - const uint8_t *src = (const uint8_t*)mac_get_resource(resource_fork, resource_fork_length, resource_type, - resource_id, &resource_length); - if (src && (resource_length == total_length)) - { - for (int y = 0; y < height; y++) - { - for (int x = 0; x < width; x ++) - { - // check the color - uint8_t color = get_pixel(src, width, height, bpp, x, y); - - // then check the mask - bool is_masked = has_mask - ? get_pixel(src + frame_length, width, height, bpp, x, y) != 0 - : dest[y * width + x] >= 0x80000000; - - // is this actually masked? (note there is a special case when bpp == 1; Mac B&W icons - // had a XOR effect, and this cannot be blocked by the mask) - uint32_t pixel; - if (is_masked || (color && bpp == 1)) - { - // mask is ok; check the actual icon - pixel = palette[color] | 0xFF000000; - } - else - { - // masked out; nothing - pixel = 0x00000000; - } - - dest[y * width + x] = pixel; - } - } - success = true; - } - return success; -} - - - -static imgtoolerr_t mac_image_geticoninfo(imgtool::partition &partition, const char *path, imgtool_iconinfo *iconinfo) -{ - static const uint32_t mac_palette_1bpp[2] = { 0xFFFFFF, 0x000000 }; - - static const uint32_t mac_palette_4bpp[16] = - { - 0xFFFFFF, 0xFCF305, 0xFF6402, 0xDD0806, 0xF20884, 0x4600A5, - 0x0000D4, 0x02ABEA, 0x1FB714, 0x006411, 0x562C05, 0x90713A, - 0xC0C0C0, 0x808080, 0x404040, 0x000000 - }; - - static const uint32_t mac_palette_8bpp[256] = - { - 0xFFFFFF, 0xFFFFCC, 0xFFFF99, 0xFFFF66, 0xFFFF33, 0xFFFF00, - 0xFFCCFF, 0xFFCCCC, 0xFFCC99, 0xFFCC66, 0xFFCC33, 0xFFCC00, - 0xFF99FF, 0xFF99CC, 0xFF9999, 0xFF9966, 0xFF9933, 0xFF9900, - 0xFF66FF, 0xFF66CC, 0xFF6699, 0xFF6666, 0xFF6633, 0xFF6600, - 0xFF33FF, 0xFF33CC, 0xFF3399, 0xFF3366, 0xFF3333, 0xFF3300, - 0xFF00FF, 0xFF00CC, 0xFF0099, 0xFF0066, 0xFF0033, 0xFF0000, - 0xCCFFFF, 0xCCFFCC, 0xCCFF99, 0xCCFF66, 0xCCFF33, 0xCCFF00, - 0xCCCCFF, 0xCCCCCC, 0xCCCC99, 0xCCCC66, 0xCCCC33, 0xCCCC00, - 0xCC99FF, 0xCC99CC, 0xCC9999, 0xCC9966, 0xCC9933, 0xCC9900, - 0xCC66FF, 0xCC66CC, 0xCC6699, 0xCC6666, 0xCC6633, 0xCC6600, - 0xCC33FF, 0xCC33CC, 0xCC3399, 0xCC3366, 0xCC3333, 0xCC3300, - 0xCC00FF, 0xCC00CC, 0xCC0099, 0xCC0066, 0xCC0033, 0xCC0000, - 0x99FFFF, 0x99FFCC, 0x99FF99, 0x99FF66, 0x99FF33, 0x99FF00, - 0x99CCFF, 0x99CCCC, 0x99CC99, 0x99CC66, 0x99CC33, 0x99CC00, - 0x9999FF, 0x9999CC, 0x999999, 0x999966, 0x999933, 0x999900, - 0x9966FF, 0x9966CC, 0x996699, 0x996666, 0x996633, 0x996600, - 0x9933FF, 0x9933CC, 0x993399, 0x993366, 0x993333, 0x993300, - 0x9900FF, 0x9900CC, 0x990099, 0x990066, 0x990033, 0x990000, - 0x66FFFF, 0x66FFCC, 0x66FF99, 0x66FF66, 0x66FF33, 0x66FF00, - 0x66CCFF, 0x66CCCC, 0x66CC99, 0x66CC66, 0x66CC33, 0x66CC00, - 0x6699FF, 0x6699CC, 0x669999, 0x669966, 0x669933, 0x669900, - 0x6666FF, 0x6666CC, 0x666699, 0x666666, 0x666633, 0x666600, - 0x6633FF, 0x6633CC, 0x663399, 0x663366, 0x663333, 0x663300, - 0x6600FF, 0x6600CC, 0x660099, 0x660066, 0x660033, 0x660000, - 0x33FFFF, 0x33FFCC, 0x33FF99, 0x33FF66, 0x33FF33, 0x33FF00, - 0x33CCFF, 0x33CCCC, 0x33CC99, 0x33CC66, 0x33CC33, 0x33CC00, - 0x3399FF, 0x3399CC, 0x339999, 0x339966, 0x339933, 0x339900, - 0x3366FF, 0x3366CC, 0x336699, 0x336666, 0x336633, 0x336600, - 0x3333FF, 0x3333CC, 0x333399, 0x333366, 0x333333, 0x333300, - 0x3300FF, 0x3300CC, 0x330099, 0x330066, 0x330033, 0x330000, - 0x00FFFF, 0x00FFCC, 0x00FF99, 0x00FF66, 0x00FF33, 0x00FF00, - 0x00CCFF, 0x00CCCC, 0x00CC99, 0x00CC66, 0x00CC33, 0x00CC00, - 0x0099FF, 0x0099CC, 0x009999, 0x009966, 0x009933, 0x009900, - 0x0066FF, 0x0066CC, 0x006699, 0x006666, 0x006633, 0x006600, - 0x0033FF, 0x0033CC, 0x003399, 0x003366, 0x003333, 0x003300, - 0x0000FF, 0x0000CC, 0x000099, 0x000066, 0x000033, 0xEE0000, - 0xDD0000, 0xBB0000, 0xAA0000, 0x880000, 0x770000, 0x550000, - 0x440000, 0x220000, 0x110000, 0x00EE00, 0x00DD00, 0x00BB00, - 0x00AA00, 0x008800, 0x007700, 0x005500, 0x004400, 0x002200, - 0x001100, 0x0000EE, 0x0000DD, 0x0000BB, 0x0000AA, 0x000088, - 0x000077, 0x000055, 0x000044, 0x000022, 0x000011, 0xEEEEEE, - 0xDDDDDD, 0xBBBBBB, 0xAAAAAA, 0x888888, 0x777777, 0x555555, - 0x444444, 0x222222, 0x111111, 0x000000 - }; - - static const uint32_t attrs[4] = - { - IMGTOOLATTR_INT_MAC_TYPE, - IMGTOOLATTR_INT_MAC_CREATOR, - IMGTOOLATTR_INT_MAC_FINDERFLAGS - }; - - imgtoolerr_t err; - imgtool_attribute attr_values[3]; - uint32_t type_code, creator_code, finder_flags; - imgtool::stream::ptr stream; - const void *resource_fork; - uint64_t resource_fork_length; - const void *bundle; - uint32_t bundle_length, pos, fref_pos, icn_pos, i; - uint16_t local_id = 0, resource_id; - uint32_t fref_bundleentry_length, icn_bundleentry_length; - const void *fref; - uint32_t resource_length; - - assert((std::size(attrs) - 1) - == std::size(attr_values)); - - /* first retrieve type and creator code */ - err = mac_image_getattrs(partition, path, attrs, attr_values); - if (err) - return err; - type_code = (uint32_t) attr_values[0].i; - creator_code = (uint32_t) attr_values[1].i; - finder_flags = (uint32_t) attr_values[2].i; - - /* check the bundle bit; if clear (and the type is not 'APPL'), use the - * desktop file */ - if (!(finder_flags & 0x2000) && (type_code != /* APPL */ 0x4150504C)) - path = "Desktop\0"; - - stream = imgtool::stream::open_mem(NULL, 0); - if (!stream) - return IMGTOOLERR_SUCCESS; - - /* read in the resource fork */ - err = mac_image_readfile(partition, path, "RESOURCE_FORK", *stream); - if (err) - return err; - resource_fork = stream->getptr(); - resource_fork_length = stream->size(); - - /* attempt to look up the bundle */ - bundle = mac_walk_resources(resource_fork, resource_fork_length, /* BNDL */ 0x424E444C, - bundle_discriminator, &creator_code, NULL, &bundle_length); - if (!bundle) - return err; - - /* find the FREF and the icon family */ - pos = 8; - fref_pos = icn_pos = 0; - fref_bundleentry_length = icn_bundleentry_length = 0; - while((pos + 10) <= bundle_length) - { - uint32_t this_bundleentry_type = pick_integer_be(bundle, pos + 0, 4); - uint32_t this_bundleentry_length = pick_integer_be(bundle, pos + 4, 2) + 1; - - if (this_bundleentry_type == /* FREF */ 0x46524546) - { - fref_pos = pos; - fref_bundleentry_length = this_bundleentry_length; - } - if (this_bundleentry_type == /* ICN# */ 0x49434E23) - { - icn_pos = pos; - icn_bundleentry_length = this_bundleentry_length; - } - pos += 6 + this_bundleentry_length * 4; - } - if (!fref_pos || !icn_pos) - return err; - - /* look up the FREF */ - for (i = 0; i < fref_bundleentry_length; i++) - { - local_id = pick_integer_be(bundle, fref_pos + (i * 4) + 6, 2); - resource_id = pick_integer_be(bundle, fref_pos + (i * 4) + 8, 2); - - fref = mac_get_resource(resource_fork, resource_fork_length, - /* FREF */ 0x46524546, resource_id, &resource_length); - if (fref && (resource_length >= 7)) - { - if (pick_integer_be(fref, 0, 4) == type_code) - break; - } - } - if (i >= fref_bundleentry_length) - return err; - - /* now look up the icon family */ - resource_id = 0; - for (i = 0; i < icn_bundleentry_length; i++) - { - if (pick_integer_be(bundle, icn_pos + (i * 4) + 6, 2) == local_id) - { - resource_id = pick_integer_be(bundle, icn_pos + (i * 4) + 8, 2); - break; - } - } - if (i >= icn_bundleentry_length) - return err; - - /* fetch 32x32 icons (ICN#, icl4, icl8) */ - if (load_icon((uint32_t *) iconinfo->icon32x32, resource_fork, resource_fork_length, - /* ICN# */ 0x49434E23, resource_id, 32, 32, 1, mac_palette_1bpp, true)) - { - iconinfo->icon32x32_specified = 1; - - load_icon((uint32_t *) iconinfo->icon32x32, resource_fork, resource_fork_length, - /* icl4 */ 0x69636C34, resource_id, 32, 32, 4, mac_palette_4bpp, false); - load_icon((uint32_t *) iconinfo->icon32x32, resource_fork, resource_fork_length, - /* icl8 */ 0x69636C38, resource_id, 32, 32, 8, mac_palette_8bpp, false); - } - - /* fetch 16x16 icons (ics#, ics4, ics8) */ - if (load_icon((uint32_t *) iconinfo->icon16x16, resource_fork, resource_fork_length, - /* ics# */ 0x69637323, resource_id, 16, 16, 1, mac_palette_1bpp, true)) - { - iconinfo->icon16x16_specified = 1; - - load_icon((uint32_t *) iconinfo->icon32x32, resource_fork, resource_fork_length, - /* ics4 */ 0x69637334, resource_id, 32, 32, 4, mac_palette_4bpp, false); - load_icon((uint32_t *) iconinfo->icon32x32, resource_fork, resource_fork_length, - /* ics8 */ 0x69637338, resource_id, 32, 32, 8, mac_palette_8bpp, false); - } - - return err; -} - - - -/************************************* - * - * File transfer suggestions - * - *************************************/ - -static imgtoolerr_t mac_image_suggesttransfer(imgtool::partition &partition, const char *path, imgtool_transfer_suggestion *suggestions, size_t suggestions_length) -{ - imgtoolerr_t err; - uint32_t parID; - mac_str255 filename; - mac_dirent cat_info; - imgtool::image &img(partition.image()); - struct mac_l2_imgref *image = get_imgref(img); - mac_filecategory_t file_category = MAC_FILECATEGORY_DATA; - - if (path) - { - /* resolve path and fetch file info from directory/catalog */ - err = mac_lookup_path(image, path, &parID, filename, &cat_info, false); - if (err) - return err; - if (cat_info.dataRecType != hcrt_File) - return IMGTOOLERR_FILENOTFOUND; - - file_category = (cat_info.rsrcLogicalSize > 0) ? MAC_FILECATEGORY_FORKED : MAC_FILECATEGORY_DATA; - } - - mac_suggest_transfer(file_category, suggestions, suggestions_length); - return IMGTOOLERR_SUCCESS; -} - - - -/************************************* -* -* MacOS Roman Conversion -* -*************************************/ - -static const char32_t macos_roman_code_page[128] = -{ - // 0x80 - 0x8F - 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, 0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, - // 0x90 - 0x9F - 0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, 0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, - // 0xA0 - 0xAF - 0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, 0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x00C6, 0x00D8, - // 0xB0 - 0xBF - 0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5, 0x2202, 0x2211, 0x220F, 0x03C0, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x00E6, 0x00F8, - // 0xC0 - 0xCF - 0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, 0x00BB, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, - // 0xD0 - 0xDF - 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, 0x00FF, 0x0178, 0x2044, 0x20AC, 0x2039, 0x203A, 0xFB01, 0xFB02, - // 0xE0 - 0xEF - 0x2021, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1, 0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, - // 0xF0 - 0xFF - 0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC, 0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7 -}; - -static imgtool::simple_charconverter charconverter_macos_roman(macos_roman_code_page); - - -/************************************* - * - * Module population - * - *************************************/ - -static void generic_mac_get_info(const imgtool_class *imgclass, uint32_t state, union imgtoolinfo *info) -{ - switch(state) - { - /* --- the following bits of info are returned as 64-bit signed integers --- */ - case IMGTOOLINFO_INT_OPEN_IS_STRICT: info->i = 1; break; - case IMGTOOLINFO_INT_IMAGE_EXTRA_BYTES: info->i = sizeof(struct mac_l2_imgref); break; - case IMGTOOLINFO_INT_DIRECTORY_EXTRA_BYTES: info->i = sizeof(struct mac_iterator); break; - case IMGTOOLINFO_INT_PATH_SEPARATOR: info->i = ':'; break; - - /* --- the following bits of info are returned as NULL-terminated strings --- */ - case IMGTOOLINFO_STR_FILE: strcpy(info->s = imgtool_temp_str(), __FILE__); break; - case IMGTOOLINFO_STR_EOLN: strcpy(info->s = imgtool_temp_str(), "\r"); break; - - /* --- the following bits of info are returned as pointers to data or functions --- */ - case IMGTOOLINFO_PTR_MAKE_CLASS: info->make_class = imgtool_floppy_make_class; break; - case IMGTOOLINFO_PTR_CLOSE: /* info->close = mac_image_exit */; break; - case IMGTOOLINFO_PTR_INFO: info->info = mac_image_info; break; - case IMGTOOLINFO_PTR_BEGIN_ENUM: info->begin_enum = mac_image_beginenum; break; - case IMGTOOLINFO_PTR_NEXT_ENUM: info->next_enum = mac_image_nextenum; break; - case IMGTOOLINFO_PTR_FREE_SPACE: info->free_space = mac_image_freespace; break; - case IMGTOOLINFO_PTR_READ_FILE: info->read_file = mac_image_readfile; break; - case IMGTOOLINFO_PTR_LIST_FORKS: info->list_forks = mac_image_listforks; break; - case IMGTOOLINFO_PTR_GET_ATTRS: info->get_attrs = mac_image_getattrs; break; - case IMGTOOLINFO_PTR_SET_ATTRS: info->set_attrs = mac_image_setattrs; break; - case IMGTOOLINFO_PTR_GET_ICON_INFO: info->get_iconinfo = mac_image_geticoninfo; break; - case IMGTOOLINFO_PTR_SUGGEST_TRANSFER: info->suggest_transfer = mac_image_suggesttransfer; break; - // case IMGTOOLINFO_PTR_FLOPPY_FORMAT: info->p = (void *) floppyoptions_apple35_mac; break; - case IMGTOOLINFO_PTR_CHARCONVERTER: info->charconverter = &charconverter_macos_roman; break; - } -} - - - -void mac_mfs_get_info(const imgtool_class *imgclass, uint32_t state, union imgtoolinfo *info) -{ - switch(state) - { - /* --- the following bits of info are returned as NULL-terminated strings --- */ - case IMGTOOLINFO_STR_NAME: strcpy(info->s = imgtool_temp_str(), "mac_mfs"); break; - case IMGTOOLINFO_STR_DESCRIPTION: strcpy(info->s = imgtool_temp_str(), "Mac MFS Floppy"); break; - - /* --- the following bits of info are returned as pointers to data or functions --- */ - case IMGTOOLINFO_PTR_FLOPPY_CREATE: info->create = mfs_image_create; break; - case IMGTOOLINFO_PTR_FLOPPY_OPEN: info->open = mfs_image_open; break; - case IMGTOOLINFO_PTR_WRITE_FILE: info->write_file = mac_image_writefile; break; - - default: generic_mac_get_info(imgclass, state, info); break; - } -} - - - -void mac_hfs_get_info(const imgtool_class *imgclass, uint32_t state, union imgtoolinfo *info) -{ - switch(state) - { - /* --- the following bits of info are returned as NULL-terminated strings --- */ - case IMGTOOLINFO_STR_NAME: strcpy(info->s = imgtool_temp_str(), "mac_hfs"); break; - case IMGTOOLINFO_STR_DESCRIPTION: strcpy(info->s = imgtool_temp_str(), "Mac HFS Floppy"); break; - - /* --- the following bits of info are returned as pointers to data or functions --- */ - case IMGTOOLINFO_PTR_FLOPPY_OPEN: info->open = hfs_image_open; break; - - default: generic_mac_get_info(imgclass, state, info); break; - } -} diff -Nru mame-0.250+dfsg.1/src/tools/imgtool/modules/macutil.cpp mame-0.251+dfsg.1/src/tools/imgtool/modules/macutil.cpp --- mame-0.250+dfsg.1/src/tools/imgtool/modules/macutil.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/tools/imgtool/modules/macutil.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,118 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Raphael Nabet -/**************************************************************************** - - macutil.cpp - - Imgtool Utility code for manipulating certain Apple/Mac data structures - and conventions - -*****************************************************************************/ - -#include "macutil.h" -#include "filter.h" - -#include "timeconv.h" - - -typedef util::arbitrary_clock > classic_mac_clock; - -//------------------------------------------------- -// mac_crack_time -//------------------------------------------------- - -imgtool::datetime mac_crack_time(uint32_t t) -{ - classic_mac_clock::duration d(t); - std::chrono::time_point tp(d); - return imgtool::datetime(imgtool::datetime::datetime_type::LOCAL, tp); -} - - -//------------------------------------------------- -// mac_setup_time -//------------------------------------------------- - -uint32_t mac_setup_time(const imgtool::datetime &t) -{ - auto mac_time_point = classic_mac_clock::from_arbitrary_time_point(t.time_point()); - return mac_time_point.time_since_epoch().count(); -} - - -//------------------------------------------------- -// mac_setup_time -//------------------------------------------------- - -uint32_t mac_setup_time(time_t t) -{ - imgtool::datetime dt(imgtool::datetime::datetime_type::LOCAL, t); - return mac_setup_time(dt); -} - - -//------------------------------------------------- -// mac_time_now -//------------------------------------------------- - -uint32_t mac_time_now(void) -{ - imgtool::datetime dt = imgtool::datetime::now(imgtool::datetime::datetime_type::LOCAL); - return mac_setup_time(dt); -} - - -//------------------------------------------------- -// mac_identify_fork -//------------------------------------------------- - -imgtoolerr_t mac_identify_fork(const char *fork_string, mac_fork_t *fork_num) -{ - if (!strcmp(fork_string, "")) - *fork_num = MAC_FORK_DATA; - else if (!strcmp(fork_string, "RESOURCE_FORK")) - *fork_num = MAC_FORK_RESOURCE; - else - return IMGTOOLERR_FORKNOTFOUND; - return IMGTOOLERR_SUCCESS; -} - - - -void mac_suggest_transfer(mac_filecategory_t file_category, imgtool_transfer_suggestion *suggestions, size_t suggestions_length) -{ - suggestions[0].viability = (file_category == MAC_FILECATEGORY_FORKED) ? SUGGESTION_RECOMMENDED : SUGGESTION_POSSIBLE; - suggestions[0].filter = filter_macbinary_getinfo; - suggestions[0].fork = NULL; - suggestions[0].description = NULL; - - suggestions[1].viability = (file_category == MAC_FILECATEGORY_TEXT) ? SUGGESTION_RECOMMENDED : SUGGESTION_POSSIBLE; - suggestions[1].filter = filter_eoln_getinfo; - suggestions[1].fork = NULL; - suggestions[1].description = NULL; - - suggestions[2].viability = (file_category == MAC_FILECATEGORY_DATA) ? SUGGESTION_RECOMMENDED : SUGGESTION_POSSIBLE; - suggestions[2].filter = NULL; - suggestions[2].fork = ""; - suggestions[2].description = "Raw (data fork)"; - - suggestions[3].viability = SUGGESTION_POSSIBLE; - suggestions[3].filter = NULL; - suggestions[3].fork = "RESOURCE_FORK"; - suggestions[3].description = "Raw (resource fork)"; -} - - - -void pascal_from_c_string(unsigned char *pstring, size_t pstring_len, const char *cstring) -{ - size_t cstring_len, i; - - cstring_len = strlen(cstring); - pstring[0] = std::min(cstring_len, pstring_len - 1); - - for (i = 0; i < pstring[0]; i++) - pstring[1 + i] = cstring[i]; - while(i < pstring_len - 1) - pstring[1 + i++] = '\0'; -} diff -Nru mame-0.250+dfsg.1/src/tools/imgtool/modules/macutil.h mame-0.251+dfsg.1/src/tools/imgtool/modules/macutil.h --- mame-0.250+dfsg.1/src/tools/imgtool/modules/macutil.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/tools/imgtool/modules/macutil.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Raphael Nabet -/**************************************************************************** - - macutil.h - - Imgtool Utility code for manipulating certain Apple/Mac data structures - and conventions - -*****************************************************************************/ - -#ifndef MACUTIL_H -#define MACUTIL_H - -#include "library.h" - -enum mac_fork_t -{ - MAC_FORK_DATA, - MAC_FORK_RESOURCE -}; - -enum mac_filecategory_t -{ - MAC_FILECATEGORY_DATA, - MAC_FILECATEGORY_TEXT, - MAC_FILECATEGORY_FORKED -}; - - -/* converting Classic Mac OS time <==> Imgtool time */ -imgtool::datetime mac_crack_time(uint32_t t); -uint32_t mac_setup_time(const imgtool::datetime &t); -uint32_t mac_setup_time(time_t t); -uint32_t mac_time_now(void); - -imgtoolerr_t mac_identify_fork(const char *fork_string, mac_fork_t *fork_num); - -void mac_suggest_transfer(mac_filecategory_t file_category, imgtool_transfer_suggestion *suggestions, size_t suggestions_length); - -void pascal_from_c_string(unsigned char *pstring, size_t pstring_len, const char *cstring); - -#endif /* MACUTIL_H */ diff -Nru mame-0.250+dfsg.1/src/tools/imgtool/modules/prodos.cpp mame-0.251+dfsg.1/src/tools/imgtool/modules/prodos.cpp --- mame-0.250+dfsg.1/src/tools/imgtool/modules/prodos.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/tools/imgtool/modules/prodos.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,2290 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Raphael Nabet -/**************************************************************************** - - prodos.cpp - - Apple II ProDOS disk images - -***************************************************************************** - - Notes: - - ProDOS disks are split into 512 byte blocks. - - ProDOS directory structure: - - Offset Length Description - ------ ------ ----------- - 0 2 ??? - 2 2 Next block (0 if end) - 4 39 Directory Entry - 43 39 Directory Entry - ... - 472 39 Directory Entry - 511 1 ??? - - - ProDOS directory entry structure: - - Offset Length Description - ------ ------ ----------- - 0 1 Storage type (bits 7-4) - 10 - Seedling File (1 block) - 20 - Sapling File (2-256 blocks) - 30 - Tree File (257-32768 blocks) - 40 - Pascal Areas on ProFile HDs (???) - 50 - GS/OS Extended File (data and rsrc fork) - E0 - Subdirectory Header - F0 - Volume Header - 1 15 File name (NUL padded) - 16 1 File type - 17 2 Key pointer - 19 2 Blocks used - 21 3 File size - 24 4 Creation date - 28 1 ProDOS version that created the file - 29 1 Minimum ProDOS version needed to read the file - 30 1 Access byte - 31 2 Auxilary file type - 33 4 Last modified date - 37 2 Header pointer - - - In "seedling files", the key pointer points to a single block that is the - whole file. In "sapling files", the key pointer points to an index block - that contains 256 2-byte index pointers that point to the actual blocks of - the files. These 2-byte values are not contiguous; the low order byte is - in the first half of the block, and the high order byte is in the second - half of the block. In "tree files", the key pointer points to an index - block of index blocks. - - ProDOS dates are 32-bit little endian values - - bits 0- 4 Day - bits 5- 8 Month (0-11) - bits 9-15 Year (0-49 is 2000-2049, 50-99 is 1950-1999) - bits 16-21 Minute - bits 24-28 Hour - - - ProDOS directory and volume headers have this information: - - Offset Length Description - ------ ------ ----------- - 31 1 Length of the entry; generally is 39 - 32 1 Number of entries per block; generally is 13 - 33 2 Active entry count in directory - 35 2 Volume bitmap block number - 37 2 Total blocks on volume - - GS/OS Extended Files (storage type $5) point to an extended key block that - contains information about the two forks. The first half of the extended - key block contains info about the data form, and the second half the - resource fork. Both sides have the following format: - - Offset Length Description - ------ ------ ----------- - 0 1 Storage type (bits 3-0, unlike the directory entry) - 1 2 Key pointer - 3 2 Blocks used - 5 3 File size - 8 1 Size of secondary info #1 (must be 18 to be valid) - 9 1 Secondary info #1 type (1=FInfo 2=xFInfo) - 10 16 FInfo or xFInfo - 26 1 Size of secondary info #2 (must be 18 to be valid) - 27 1 Secondary info #2 type (1=FInfo 2=xFInfo) - 28 16 FInfo or xFInfo - - FInfo format: - - Offset Length Description - ------ ------ ----------- - 0 4 File type - 4 4 File creator - 8 2 Finder flags - 10 2 X Coordinate - 12 2 Y Coordinate - 14 2 Finder folder - - xFInfo format: - - Offset Length Description - ------ ------ ----------- - 0 2 Icon ID - 2 6 Reserved - 8 1 Script Code - 9 1 Extended flags - 10 2 Comment ID - 12 4 Put Away Directory - - - For more info, consult ProDOS technical note #25 - (http://web.pdx.edu/~heiss/technotes/pdos/tn.pdos.25.html) - -*****************************************************************************/ - -#include "imgtool.h" -#include "formats/imageutl.h" -#include "formats/ap2_dsk.h" -#include "formats/ap_dsk35.h" -#include "iflopimg.h" - -#include "macutil.h" - -#include "opresolv.h" - -#define ROOTDIR_BLOCK 2 -#define BLOCK_SIZE 512 - -static const uint8_t apple35_tracklen_800kb[80] = -{ - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 -}; - -static int apple35_sectors_per_track(floppy_image_legacy *image, int track) -{ - int sectors; - - assert(track >= 0); - assert(track < std::size(apple35_tracklen_800kb)); - - sectors = apple35_tracklen_800kb[track]; - return sectors; -} - -struct prodos_diskinfo -{ - imgtoolerr_t (*load_block)(imgtool::image &image, int block, void *buffer); - imgtoolerr_t (*save_block)(imgtool::image &image, int block, const void *buffer); - uint8_t dirent_size; - uint8_t dirents_per_block; - uint16_t volume_bitmap_block; - uint16_t total_blocks; -}; - -struct prodos_direnum -{ - uint32_t block; - uint32_t index; - uint8_t block_data[BLOCK_SIZE]; -}; - -struct prodos_dirent -{ - char filename[16]; - uint8_t storage_type; - uint16_t extkey_pointer; - uint16_t key_pointer[2]; - uint32_t filesize[2]; - int depth[2]; - uint32_t lastmodified_time; - uint32_t creation_time; - - /* FInfo */ - uint32_t file_type; - uint32_t file_creator; - uint16_t finder_flags; - uint16_t coord_x; - uint16_t coord_y; - uint16_t finder_folder; - - /* xFInfo */ - uint16_t icon_id; - uint8_t script_code; - uint8_t extended_flags; - uint16_t comment_id; - uint32_t putaway_directory; -}; - -enum creation_policy_t -{ - CREATE_NONE, - CREATE_FILE, - CREATE_DIR -}; - - - -static imgtool::datetime prodos_crack_time(uint32_t prodos_time) -{ - util::arbitrary_datetime dt; - dt.second = 0; - dt.minute = ((prodos_time >> 16) & 0x3F); - dt.hour = ((prodos_time >> 24) & 0x1F); - dt.day_of_month = ((prodos_time >> 0) & 0x1F); - dt.month = ((prodos_time >> 5) & 0x0F) + 1; - dt.year = ((prodos_time >> 9) & 0x7F) + 1900; - if (dt.year <= 1949) - dt.year += 100; - - return imgtool::datetime(imgtool::datetime::datetime_type::LOCAL, dt); -} - - - -static uint32_t prodos_setup_time(time_t ansi_time) -{ - struct tm t; - uint32_t result = 0; - - t = *localtime(&ansi_time); - if ((t.tm_year >= 100) && (t.tm_year <= 149)) - t.tm_year -= 100; - - result |= (((uint32_t) t.tm_min) & 0x003F) << 16; - result |= (((uint32_t) t.tm_hour) & 0x001F) << 24; - result |= (((uint32_t) t.tm_mday) & 0x001F) << 0; - result |= (((uint32_t) t.tm_mon) & 0x000F) << 5; - result |= (((uint32_t) t.tm_year) & 0x007F) << 9; - return result; -} - - - -static uint32_t prodos_time_now(void) -{ - time_t now; - time(&now); - return prodos_setup_time(now); -} - - - -static int is_file_storagetype(uint8_t storage_type) -{ - return ((storage_type >= 0x10) && (storage_type <= 0x3F)) - || ((storage_type >= 0x50) && (storage_type <= 0x5F)); -} - - - -static int is_normalfile_storagetype(uint8_t storage_type) -{ - return ((storage_type >= 0x10) && (storage_type <= 0x3F)); -} - - - -static int is_extendedfile_storagetype(uint8_t storage_type) -{ - return ((storage_type >= 0x50) && (storage_type <= 0x5F)); -} - - - -static int is_dir_storagetype(uint8_t storage_type) -{ - return (storage_type >= 0xE0) && (storage_type <= 0xEF); -} - - - -static prodos_diskinfo *get_prodos_info(imgtool::image &image) -{ - prodos_diskinfo *info; - info = (prodos_diskinfo *) imgtool_floppy_extrabytes(image); - return info; -} - - - -/* ----------------------------------------------------------------------- */ - -static void prodos_find_block_525(imgtool::image &image, int block, - uint32_t *track, uint32_t *head, uint32_t *sector1, uint32_t *sector2) -{ - static const uint8_t skewing[] = - { - 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, - 0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F - }; - - block *= 2; - - *track = block / APPLE2_SECTOR_COUNT; - *head = 0; - *sector1 = skewing[block % APPLE2_SECTOR_COUNT + 0]; - *sector2 = skewing[block % APPLE2_SECTOR_COUNT + 1]; -} - - - -static imgtoolerr_t prodos_load_block_525(imgtool::image &image, - int block, void *buffer) -{ - floperr_t ferr; - uint32_t track, head, sector1, sector2; - - prodos_find_block_525(image, block, &track, &head, §or1, §or2); - - /* read first sector */ - ferr = floppy_read_sector(imgtool_floppy(image), head, track, - sector1, 0, ((uint8_t *) buffer) + 0, 256); - if (ferr) - return imgtool_floppy_error(ferr); - - /* read second sector */ - ferr = floppy_read_sector(imgtool_floppy(image), head, track, - sector2, 0, ((uint8_t *) buffer) + 256, 256); - if (ferr) - return imgtool_floppy_error(ferr); - - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_save_block_525(imgtool::image &image, - int block, const void *buffer) -{ - floperr_t ferr; - uint32_t track, head, sector1, sector2; - - prodos_find_block_525(image, block, &track, &head, §or1, §or2); - - /* read first sector */ - ferr = floppy_write_sector(imgtool_floppy(image), head, track, - sector1, 0, ((const uint8_t *) buffer) + 0, 256, 0); /* TODO: pass ddam argument from imgtool */ - if (ferr) - return imgtool_floppy_error(ferr); - - /* read second sector */ - ferr = floppy_write_sector(imgtool_floppy(image), head, track, - sector2, 0, ((const uint8_t *) buffer) + 256, 256, 0); /* TODO: pass ddam argument from imgtool */ - if (ferr) - return imgtool_floppy_error(ferr); - - return IMGTOOLERR_SUCCESS; -} - - - -static void prodos_setprocs_525(imgtool::image &image) -{ - prodos_diskinfo *info; - info = get_prodos_info(image); - info->load_block = prodos_load_block_525; - info->save_block = prodos_save_block_525; -} - - - -/* ----------------------------------------------------------------------- */ - -static imgtoolerr_t prodos_find_block_35(imgtool::image &image, int block, - uint32_t *track, uint32_t *head, uint32_t *sector) -{ - int sides = 2; - - *track = 0; - while(block >= (apple35_sectors_per_track(imgtool_floppy(image), *track) * sides)) - { - block -= (apple35_sectors_per_track(imgtool_floppy(image), (*track)++) * sides); - if (*track >= 80) - return IMGTOOLERR_SEEKERROR; - } - - *head = block / apple35_sectors_per_track(imgtool_floppy(image), *track); - *sector = block % apple35_sectors_per_track(imgtool_floppy(image), *track); - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_load_block_35(imgtool::image &image, - int block, void *buffer) -{ - imgtoolerr_t err; - floperr_t ferr; - uint32_t track, head, sector; - - err = prodos_find_block_35(image, block, &track, &head, §or); - if (err) - return err; - - ferr = floppy_read_sector(imgtool_floppy(image), head, track, sector, 0, buffer, 512); - if (ferr) - return imgtool_floppy_error(ferr); - - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_save_block_35(imgtool::image &image, - int block, const void *buffer) -{ - imgtoolerr_t err; - floperr_t ferr; - uint32_t track, head, sector; - - err = prodos_find_block_35(image, block, &track, &head, §or); - if (err) - return err; - - ferr = floppy_write_sector(imgtool_floppy(image), head, track, sector, 0, buffer, 512, 0); /* TODO: pass ddam argument from imgtool */ - if (ferr) - return imgtool_floppy_error(ferr); - - return IMGTOOLERR_SUCCESS; -} - - - -static void prodos_setprocs_35(imgtool::image &image) -{ - prodos_diskinfo *info; - info = get_prodos_info(image); - info->load_block = prodos_load_block_35; - info->save_block = prodos_save_block_35; -} - - - -/* ----------------------------------------------------------------------- */ - -static imgtoolerr_t prodos_load_block(imgtool::image &image, - int block, void *buffer) -{ - prodos_diskinfo *diskinfo; - diskinfo = get_prodos_info(image); - return diskinfo->load_block(image, block, buffer); -} - - - -static imgtoolerr_t prodos_save_block(imgtool::image &image, - int block, const void *buffer) -{ - prodos_diskinfo *diskinfo; - diskinfo = get_prodos_info(image); - return diskinfo->save_block(image, block, buffer); -} - - - -static imgtoolerr_t prodos_clear_block(imgtool::image &image, int block) -{ - uint8_t buffer[BLOCK_SIZE]; - memset(buffer, 0, sizeof(buffer)); - return prodos_save_block(image, block, buffer); -} - - - -/* ----------------------------------------------------------------------- */ - -static imgtoolerr_t prodos_diskimage_open(imgtool::image &image) -{ - imgtoolerr_t err; - uint8_t buffer[BLOCK_SIZE]; - prodos_diskinfo *di; - const uint8_t *ent; - - di = get_prodos_info(image); - - /* specify defaults */ - di->dirent_size = 39; - di->dirents_per_block = 13; - - /* load the first block, hoping that the volume header is first */ - err = prodos_load_block(image, ROOTDIR_BLOCK, buffer); - if (err) - return err; - - ent = &buffer[4]; - - /* did we find the volume header? */ - if ((ent[0] & 0xF0) == 0xF0) - { - di->dirent_size = pick_integer_le(ent, 31, 1); - di->dirents_per_block = pick_integer_le(ent, 32, 1); - di->volume_bitmap_block = pick_integer_le(ent, 35, 2); - di->total_blocks = pick_integer_le(ent, 37, 2); - } - - /* sanity check these values */ - if (di->dirent_size < 39) - return IMGTOOLERR_CORRUPTIMAGE; - if (di->dirents_per_block * di->dirent_size >= BLOCK_SIZE) - return IMGTOOLERR_CORRUPTIMAGE; - if (di->volume_bitmap_block >= di->total_blocks) - return IMGTOOLERR_CORRUPTIMAGE; - - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_diskimage_open_525(imgtool::image &image, imgtool::stream::ptr &&dummy) -{ - prodos_setprocs_525(image); - return prodos_diskimage_open(image); -} - - - -static imgtoolerr_t prodos_diskimage_open_35(imgtool::image &image, imgtool::stream::ptr &&dummy) -{ - prodos_setprocs_35(image); - return prodos_diskimage_open(image); -} - - - -/* ----------------------------------------------------------------------- */ - -static imgtoolerr_t prodos_load_volume_bitmap(imgtool::image &image, uint8_t **bitmap) -{ - imgtoolerr_t err; - prodos_diskinfo *di; - uint8_t *alloc_bitmap; - uint32_t bitmap_blocks, i; - - di = get_prodos_info(image); - - bitmap_blocks = (di->total_blocks + (BLOCK_SIZE * 8) - 1) / (BLOCK_SIZE * 8); - alloc_bitmap = (uint8_t*)malloc(bitmap_blocks * BLOCK_SIZE); - if (!alloc_bitmap) - { - err = IMGTOOLERR_OUTOFMEMORY; - goto done; - } - - for (i = 0; i < bitmap_blocks; i++) - { - err = prodos_load_block(image, di->volume_bitmap_block + i, - &alloc_bitmap[i * BLOCK_SIZE]); - if (err) - goto done; - } - - err = IMGTOOLERR_SUCCESS; - -done: - if (err && alloc_bitmap) - { - free(alloc_bitmap); - alloc_bitmap = NULL; - } - *bitmap = alloc_bitmap; - return err; -} - - - -static imgtoolerr_t prodos_save_volume_bitmap(imgtool::image &image, const uint8_t *bitmap) -{ - imgtoolerr_t err; - prodos_diskinfo *di; - uint32_t bitmap_blocks, i; - - di = get_prodos_info(image); - - bitmap_blocks = (di->total_blocks + (BLOCK_SIZE * 8) - 1) / (BLOCK_SIZE * 8); - - for (i = 0; i < bitmap_blocks; i++) - { - err = prodos_save_block(image, di->volume_bitmap_block + i, - &bitmap[i * BLOCK_SIZE]); - if (err) - return err; - } - return IMGTOOLERR_SUCCESS; -} - - - -static void prodos_set_volume_bitmap_bit(uint8_t *buffer, uint16_t block, int value) -{ - uint8_t mask; - buffer += block / 8; - mask = 1 << (7 - (block % 8)); - if (value) - *buffer |= mask; - else - *buffer &= ~mask; -} - - - -static int prodos_get_volume_bitmap_bit(const uint8_t *buffer, uint16_t block) -{ - uint8_t mask; - buffer += block / 8; - mask = 1 << (7 - (block % 8)); - return (*buffer & mask) ? 1 : 0; -} - - - -static imgtoolerr_t prodos_alloc_block(imgtool::image &image, uint8_t *bitmap, - uint16_t *block) -{ - imgtoolerr_t err = IMGTOOLERR_SUCCESS; - prodos_diskinfo *di; - uint16_t bitmap_blocks, i; - uint8_t *alloc_bitmap = NULL; - - di = get_prodos_info(image); - *block = 0; - bitmap_blocks = (di->total_blocks + (BLOCK_SIZE * 8) - 1) / (BLOCK_SIZE * 8); - - if (!bitmap) - { - err = prodos_load_volume_bitmap(image, &alloc_bitmap); - if (err) - goto done; - bitmap = alloc_bitmap; - } - - for (i = (di->volume_bitmap_block + bitmap_blocks); i < di->total_blocks; i++) - { - if (!prodos_get_volume_bitmap_bit(bitmap, i)) - { - prodos_set_volume_bitmap_bit(bitmap, i, 1); - *block = i; - break; - } - } - - if (*block > 0) - { - if (alloc_bitmap) - { - err = prodos_save_volume_bitmap(image, bitmap); - if (err) - goto done; - } - } - else - { - err = IMGTOOLERR_NOSPACE; - } - -done: - if (err) - *block = 0; - if (alloc_bitmap) - free(alloc_bitmap); - return err; -} - - - -/* ----------------------------------------------------------------------- */ - -static imgtoolerr_t prodos_diskimage_create(imgtool::image &image, util::option_resolution *opts) -{ - imgtoolerr_t err; - uint32_t heads, tracks, sectors, sector_bytes; - uint32_t dirent_size, volume_bitmap_block, i; - uint32_t volume_bitmap_block_count, total_blocks; - uint8_t buffer[BLOCK_SIZE]; - - heads = opts->lookup_int('H'); - tracks = opts->lookup_int('T'); - sectors = opts->lookup_int('S'); - sector_bytes = opts->lookup_int('L'); - - dirent_size = 39; - volume_bitmap_block = 6; - total_blocks = tracks * heads * sectors * sector_bytes / BLOCK_SIZE; - volume_bitmap_block_count = (total_blocks + (BLOCK_SIZE * 8) - 1) / (BLOCK_SIZE * 8); - - /* prepare initial dir block */ - memset(buffer, 0, sizeof(buffer)); - place_integer_le(buffer, 4 + 0, 1, 0xF0); - place_integer_le(buffer, 4 + 31, 1, dirent_size); - place_integer_le(buffer, 4 + 32, 1, BLOCK_SIZE / dirent_size); - place_integer_le(buffer, 4 + 35, 2, volume_bitmap_block); - place_integer_le(buffer, 4 + 37, 2, total_blocks); - - err = prodos_save_block(image, ROOTDIR_BLOCK, buffer); - if (err) - return err; - - /* setup volume bitmap */ - memset(buffer, 0, sizeof(buffer)); - for (i = 0; i < (volume_bitmap_block + volume_bitmap_block_count); i++) - prodos_set_volume_bitmap_bit(buffer, i, 1); - prodos_save_block(image, volume_bitmap_block, buffer); - - /* and finally open the image */ - return prodos_diskimage_open(image); -} - - - -static imgtoolerr_t prodos_diskimage_create_525(imgtool::image &image, imgtool::stream::ptr &&dummy, util::option_resolution *opts) -{ - prodos_setprocs_525(image); - return prodos_diskimage_create(image, opts); -} - - - -static imgtoolerr_t prodos_diskimage_create_35(imgtool::image &image, imgtool::stream::ptr &&dummy, util::option_resolution *opts) -{ - prodos_setprocs_35(image); - return prodos_diskimage_create(image, opts); -} - - - -/* ----------------------------------------------------------------------- */ - -static imgtoolerr_t prodos_enum_seek(imgtool::image &image, - prodos_direnum *appleenum, uint32_t block, uint32_t index) -{ - imgtoolerr_t err; - uint8_t buffer[BLOCK_SIZE]; - - if (appleenum->block != block) - { - if (block != 0) - { - err = prodos_load_block(image, block, buffer); - if (err) - return err; - memcpy(appleenum->block_data, buffer, sizeof(buffer)); - } - appleenum->block = block; - } - - appleenum->index = index; - return IMGTOOLERR_SUCCESS; -} - - - -static uint8_t *next_info_block(uint8_t *buffer, size_t *position) -{ - size_t side = *position & 0x100; - size_t subpos = *position & 0x0FF; - uint8_t *result; - - if (subpos < 8) - { - subpos = 8; - *position = side + subpos; - } - - while((buffer[side + subpos] == 0x00) || (subpos + buffer[side + subpos] > 0x100)) - { - if (side) - return NULL; - - side = 0x100; - subpos = 8; - } - - result = &buffer[side + subpos]; - subpos += *result; - *position = side + subpos; - return result; -} - - - -static uint8_t *alloc_info_block(uint8_t *buffer, size_t block_size, uint8_t block_type) -{ - size_t position = 0; - size_t side; - size_t subpos; - uint8_t *result; - - while(next_info_block(buffer, &position)) - ; - - side = position & 0x100; - subpos = position & 0x0FF; - - if ((subpos + block_size) > 0x100) - return NULL; - - result = &buffer[side + subpos]; - *(result++) = (uint8_t) block_size; - *(result++) = block_type; - memset(result, 0, block_size - 2); - return result; -} - - - -static imgtoolerr_t prodos_get_next_dirent(imgtool::image &image, - prodos_direnum *appleenum, prodos_dirent &ent) -{ - imgtoolerr_t err; - prodos_diskinfo *di; - size_t finfo_offset; - uint32_t next_block, next_index; - uint32_t offset; - uint8_t buffer[BLOCK_SIZE]; - const uint8_t *info_ptr; - int fork_num; - - di = get_prodos_info(image); - memset(&ent, 0, sizeof(ent)); - - /* have we hit the end of the file? */ - if (appleenum->block == 0) - return IMGTOOLERR_SUCCESS; - - /* populate the resulting dirent */ - offset = appleenum->index * di->dirent_size + 4; - ent.storage_type = appleenum->block_data[offset + 0]; - memcpy(ent.filename, &appleenum->block_data[offset + 1], 15); - ent.filename[15] = '\0'; - ent.creation_time = pick_integer_le(appleenum->block_data, offset + 24, 4); - ent.lastmodified_time = pick_integer_le(appleenum->block_data, offset + 33, 4); - ent.file_type = 0x3F3F3F3F; - ent.file_creator = 0x3F3F3F3F; - ent.finder_flags = 0; - ent.coord_x = 0; - ent.coord_y = 0; - ent.finder_folder = 0; - ent.icon_id = 0; - ent.script_code = 0; - ent.extended_flags = 0; - ent.comment_id = 0; - ent.putaway_directory = 0; - - if (is_extendedfile_storagetype(ent.storage_type)) - { - /* this is a ProDOS extended file; we need to get the extended info - * block */ - ent.extkey_pointer = pick_integer_le(appleenum->block_data, offset + 17, 2); - - err = prodos_load_block(image, ent.extkey_pointer, buffer); - if (err) - return err; - - for (fork_num = 0; fork_num <= 1; fork_num++) - { - ent.key_pointer[fork_num] = pick_integer_le(buffer, 1 + (fork_num * 256), 2); - ent.filesize[fork_num] = pick_integer_le(buffer, 5 + (fork_num * 256), 3); - ent.depth[fork_num] = buffer[fork_num * 256] & 0x0F; - } - - finfo_offset = 0; - while((info_ptr = next_info_block(buffer, &finfo_offset)) != NULL) - { - if (*(info_ptr++) == 18) - { - switch(*(info_ptr++)) - { - case 1: /* FInfo */ - ent.file_type = pick_integer_be(info_ptr, 0, 4); - ent.file_creator = pick_integer_be(info_ptr, 4, 4); - ent.finder_flags = pick_integer_be(info_ptr, 8, 2); - ent.coord_x = pick_integer_be(info_ptr, 10, 2); - ent.coord_y = pick_integer_be(info_ptr, 12, 2); - ent.finder_folder = pick_integer_be(info_ptr, 14, 4); - break; - - case 2: /* xFInfo */ - ent.icon_id = pick_integer_be(info_ptr, 0, 2); - ent.script_code = pick_integer_be(info_ptr, 8, 1); - ent.extended_flags = pick_integer_be(info_ptr, 9, 1); - ent.comment_id = pick_integer_be(info_ptr, 10, 2); - ent.putaway_directory = pick_integer_be(info_ptr, 12, 4); - break; - } - } - } - } - else - { - /* normal ProDOS files have all of the info right here */ - ent.key_pointer[0] = pick_integer_le(appleenum->block_data, offset + 17, 2); - ent.filesize[0] = pick_integer_le(appleenum->block_data, offset + 21, 3); - ent.depth[0] = ent.storage_type >> 4; - } - - /* identify next entry */ - next_block = appleenum->block; - next_index = appleenum->index + 1; - if (next_index >= di->dirents_per_block) - { - next_block = pick_integer_le(appleenum->block_data, 2, 2); - next_index = 0; - } - - /* seek next block */ - err = prodos_enum_seek(image, appleenum, next_block, next_index); - if (err) - return err; - - return IMGTOOLERR_SUCCESS; -} - - - -/* changes a normal file to a ProDOS extended file */ -static imgtoolerr_t prodos_promote_file(imgtool::image &image, uint8_t *bitmap, prodos_dirent *ent) -{ - imgtoolerr_t err; - uint16_t new_block; - uint8_t buffer[BLOCK_SIZE]; - - assert(is_normalfile_storagetype(ent->storage_type)); - - err = prodos_alloc_block(image, bitmap, &new_block); - if (err) - return err; - - /* create raw extended info block */ - memset(buffer, 0, sizeof(buffer)); - err = prodos_save_block(image, new_block, buffer); - if (err) - return err; - - ent->storage_type = (ent->storage_type & 0x0F) | 0x50; - ent->extkey_pointer = new_block; - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_put_dirent(imgtool::image &image, - prodos_direnum *appleenum, prodos_dirent *ent) -{ - imgtoolerr_t err; - prodos_diskinfo *di; - uint32_t offset; - size_t finfo_offset; - uint8_t buffer[BLOCK_SIZE]; - int fork_num; - int needs_finfo = false; - int needs_xfinfo = false; - uint8_t *info_ptr; - uint8_t *finfo; - uint8_t *xfinfo; - - di = get_prodos_info(image); - offset = appleenum->index * di->dirent_size + 4; - - /* determine whether we need FInfo and/or xFInfo */ - if (is_normalfile_storagetype(ent->storage_type)) - { - needs_finfo = (ent->file_type != 0x3F3F3F3F) || - (ent->file_creator != 0x3F3F3F3F) || - (ent->finder_flags != 0) || - (ent->coord_x != 0) || - (ent->coord_y != 0) || - (ent->finder_folder != 0); - - needs_xfinfo = (ent->icon_id != 0) || - (ent->script_code != 0) || - (ent->extended_flags != 0) || - (ent->comment_id != 0) || - (ent->putaway_directory != 0); - } - - /* do we need to promote this file to an extended file? */ - if (!is_extendedfile_storagetype(ent->storage_type) - && (needs_finfo || needs_xfinfo)) - { - err = prodos_promote_file(image, NULL, ent); - if (err) - return err; - } - - /* write out the storage type, filename, creation and lastmodified times */ - appleenum->block_data[offset + 0] = ent->storage_type; - memcpy(&appleenum->block_data[offset + 1], ent->filename, 15); - place_integer_le(appleenum->block_data, offset + 24, 4, ent->creation_time); - place_integer_le(appleenum->block_data, offset + 33, 4, ent->lastmodified_time); - - if (is_extendedfile_storagetype(ent->storage_type)) - { - /* ProDOS extended file */ - err = prodos_load_block(image, ent->extkey_pointer, buffer); - if (err) - return err; - - finfo = NULL; - xfinfo = NULL; - - for (fork_num = 0; fork_num <= 1; fork_num++) - { - place_integer_le(buffer, 1 + (fork_num * 256), 2, ent->key_pointer[fork_num]); - place_integer_le(buffer, 5 + (fork_num * 256), 3, ent->filesize[fork_num]); - buffer[fork_num * 256] = ent->depth[fork_num]; - } - - finfo_offset = 0; - while((info_ptr = next_info_block(buffer, &finfo_offset)) != NULL) - { - if (*(info_ptr++) == 18) - { - switch(*(info_ptr++)) - { - case 1: /* FInfo */ - finfo = info_ptr; - break; - - case 2: /* xFInfo */ - xfinfo = info_ptr; - break; - } - } - } - - /* allocate the finfo and/or xinfo blocks, if we need them */ - if (needs_finfo && !finfo) - finfo = alloc_info_block(buffer, 18, 1); - if (needs_xfinfo && !xfinfo) - xfinfo = alloc_info_block(buffer, 18, 2); - - if (finfo) - { - place_integer_be(finfo, 0, 4, ent->file_type); - place_integer_be(finfo, 4, 4, ent->file_creator); - place_integer_be(finfo, 8, 2, ent->finder_flags); - place_integer_be(finfo, 10, 2, ent->coord_x); - place_integer_be(finfo, 12, 2, ent->coord_y); - place_integer_be(finfo, 14, 4, ent->finder_folder); - } - - if (xfinfo) - { - place_integer_be(xfinfo, 0, 2, ent->icon_id); - place_integer_be(xfinfo, 8, 1, ent->script_code); - place_integer_be(xfinfo, 9, 1, ent->extended_flags); - place_integer_be(xfinfo, 10, 2, ent->comment_id); - place_integer_be(xfinfo, 12, 4, ent->putaway_directory); - } - - err = prodos_save_block(image, ent->extkey_pointer, buffer); - if (err) - return err; - - place_integer_le(appleenum->block_data, offset + 17, 2, ent->extkey_pointer); - place_integer_le(appleenum->block_data, offset + 21, 3, BLOCK_SIZE); - } - else - { - /* normal file */ - place_integer_le(appleenum->block_data, offset + 17, 2, ent->key_pointer[0]); - place_integer_le(appleenum->block_data, offset + 21, 3, ent->filesize[0]); - } - - err = prodos_save_block(image, appleenum->block, appleenum->block_data); - if (err) - return err; - - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_lookup_path(imgtool::image &image, const char *path, - creation_policy_t create, prodos_direnum *direnum, prodos_dirent *ent) -{ - imgtoolerr_t err; - prodos_direnum my_direnum; - uint32_t block = ROOTDIR_BLOCK; - const char *old_path; - uint16_t this_block; - uint32_t this_index; - uint16_t free_block = 0; - uint32_t free_index = 0; - uint16_t new_file_block; - uint8_t buffer[BLOCK_SIZE]; - - if (!direnum) - direnum = &my_direnum; - - while(*path) - { - memset(direnum, 0, sizeof(*direnum)); - err = prodos_enum_seek(image, direnum, block, 0); - if (err) - goto done; - - do - { - this_block = direnum->block; - this_index = direnum->index; - - err = prodos_get_next_dirent(image, direnum, *ent); - if (err) - goto done; - - /* if we need to create a file entry and this is free, track it */ - if (create && this_block && !free_block && !ent->storage_type) - { - free_block = this_block; - free_index = this_index; - } - } - while(direnum->block && (strcmp(path, ent->filename) || ( - !is_file_storagetype(ent->storage_type) && - !is_dir_storagetype(ent->storage_type)))); - - old_path = path; - path += strlen(path) + 1; - if (*path) - { - /* we have found part of the path; we are not finished yet */ - if (!is_dir_storagetype(ent->storage_type)) - { - err = IMGTOOLERR_FILENOTFOUND; - goto done; - } - block = ent->key_pointer[0]; - } - else if (!direnum->block) - { - /* did not find file; maybe we need to create it */ - if (create == CREATE_NONE) - { - err = IMGTOOLERR_FILENOTFOUND; - goto done; - } - - /* do we need to expand the directory? */ - if (!free_block) - { - if (this_block == 0) - { - err = IMGTOOLERR_CORRUPTFILE; - goto done; - } - - err = prodos_load_block(image, this_block, buffer); - if (err) - goto done; - - /* allocate a block */ - err = prodos_alloc_block(image, NULL, &free_block); - if (err) - goto done; - - /* clear out this new block */ - err = prodos_clear_block(image, free_block); - if (err) - goto done; - - /* save this link */ - place_integer_le(buffer, 2, 2, free_block); - err = prodos_save_block(image, this_block, buffer); - if (err) - goto done; - - free_index = 0; - } - - /* seek back to the free space */ - err = prodos_enum_seek(image, direnum, free_block, free_index); - if (err) - goto done; - - new_file_block = 0; - if (create == CREATE_DIR) - { - /* if we are creating a directory, we need to create a new block */ - err = prodos_alloc_block(image, NULL, &new_file_block); - if (err) - goto done; - - err = prodos_clear_block(image, new_file_block); - if (err) - goto done; - } - - /* prepare the dirent */ - memset(ent, 0, sizeof(*ent)); - ent->storage_type = (create == CREATE_DIR) ? 0xe0 : 0x10; - ent->creation_time = ent->lastmodified_time = prodos_time_now(); - ent->key_pointer[0] = new_file_block; - ent->file_type = 0x3F3F3F3F; - ent->file_creator = 0x3F3F3F3F; - strncpy(ent->filename, old_path, std::size(ent->filename)); - - /* and place it */ - err = prodos_put_dirent(image, direnum, ent); - if (err) - goto done; - - this_block = free_block; - this_index = free_index; - } - else - { - /* we've found the file; seek that dirent */ - err = prodos_enum_seek(image, direnum, this_block, this_index); - if (err) - goto done; - } - } - - err = IMGTOOLERR_SUCCESS; -done: - return err; -} - - - -static imgtoolerr_t prodos_fill_file(imgtool::image &image, uint8_t *bitmap, - uint16_t key_block, int key_block_allocated, - int depth, uint32_t blockcount, uint32_t block_index) -{ - imgtoolerr_t err; - prodos_diskinfo *di; - int dirty; - int sub_block_allocated; - uint16_t i, sub_block, new_sub_block; - uint8_t buffer[BLOCK_SIZE]; - - di = get_prodos_info(image); - - if (key_block_allocated) - { - /* we are on a recently allocated key block; start fresh */ - memset(buffer, 0, sizeof(buffer)); - dirty = true; - } - else - { - /* this is a preexisting key block */ - err = prodos_load_block(image, key_block, buffer); - if (err) - return err; - dirty = false; - } - - for (i = 0; i < 256; i++) - { - sub_block_allocated = false; - - sub_block = buffer[i + 256]; - sub_block <<= 8; - sub_block += buffer[i + 0]; - - new_sub_block = sub_block; - if ((block_index < blockcount) && (sub_block == 0)) - { - err = prodos_alloc_block(image, bitmap, &new_sub_block); - if (err) - return err; - sub_block_allocated = true; - } - else if ((block_index >= blockcount) && (sub_block != 0)) - { - new_sub_block = 0; - if (sub_block < di->total_blocks) - prodos_set_volume_bitmap_bit(bitmap, sub_block, 0); - } - - /* did we change the block? */ - if (new_sub_block != sub_block) - { - dirty = true; - buffer[i + 0] = new_sub_block >> 0; - buffer[i + 256] = new_sub_block >> 8; - if (sub_block == 0) - sub_block = new_sub_block; - } - - /* call recursive function */ - if (depth > 2) - { - err = prodos_fill_file(image, bitmap, sub_block, sub_block_allocated, depth - 1, blockcount, block_index); - if (err) - return err; - } - - /* increment index */ - block_index += 1 << ((depth - 2) * 8); - } - - /* if we changed anything, then save the block */ - if (dirty) - { - err = prodos_save_block(image, key_block, buffer); - if (err) - return err; - } - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_set_file_block_count(imgtool::image &image, prodos_direnum *direnum, - prodos_dirent *ent, uint8_t *bitmap, int fork_num, uint32_t new_blockcount) -{ - imgtoolerr_t err; - int depth, new_depth, i; - uint16_t new_block, block; - uint8_t buffer[BLOCK_SIZE]; - uint16_t key_pointer; - - if (fork_num && (new_blockcount > 0) && !is_extendedfile_storagetype(ent->storage_type)) - { - /* need to change a normal file to an extended file */ - err = prodos_promote_file(image, bitmap, ent); - if (err) - return err; - } - - key_pointer = ent->key_pointer[fork_num]; - depth = ent->depth[fork_num]; - - /* determine the new tree depth */ - if (new_blockcount <= 1) - new_depth = 1; - else if (new_blockcount <= 256) - new_depth = 2; - else - new_depth = 3; - - /* are we zero length, and do we have to create a block? */ - if ((new_blockcount >= 1) && (key_pointer == 0)) - { - err = prodos_alloc_block(image, bitmap, &new_block); - if (err) - return err; - key_pointer = new_block; - } - - /* do we have to grow the tree? */ - while(new_depth > depth) - { - err = prodos_alloc_block(image, bitmap, &new_block); - if (err) - return err; - - /* create this new key block, with a link to the previous one */ - memset(buffer, 0, sizeof(buffer)); - buffer[0] = (uint8_t) (key_pointer >> 0); - buffer[256] = (uint8_t) (key_pointer >> 8); - err = prodos_save_block(image, new_block, buffer); - if (err) - return err; - - depth++; - key_pointer = new_block; - } - - /* do we have to shrink the tree? */ - while(new_depth < depth) - { - err = prodos_load_block(image, key_pointer, buffer); - if (err) - return err; - - for (i = 1; i < 256; i++) - { - block = buffer[i + 256]; - block <<= 8; - block |= buffer[i + 0]; - - if (block > 0) - { - if (depth > 2) - { - /* remove this block's children */ - err = prodos_fill_file(image, bitmap, block, false, depth - 1, 0, 0); - if (err) - return err; - } - - /* and remove this block */ - prodos_set_volume_bitmap_bit(bitmap, block, 0); - } - } - - /* remove this key block */ - prodos_set_volume_bitmap_bit(bitmap, key_pointer, 0); - - /* set the new key pointer */ - block = buffer[256]; - block <<= 8; - block |= buffer[0]; - key_pointer = block; - - depth--; - } - - if (new_blockcount > 0) - { - /* fill out the file tree */ - err = prodos_fill_file(image, bitmap, key_pointer, false, depth, new_blockcount, 0); - if (err) - return err; - } - else if (key_pointer != 0) - { - /* we are now zero length, and don't need a key pointer */ - prodos_set_volume_bitmap_bit(bitmap, key_pointer, 0); - key_pointer = 0; - } - - /* change the depth if we are not an extended file */ - if (is_normalfile_storagetype(ent->storage_type)) - { - ent->storage_type &= ~0xF0; - ent->storage_type |= depth * 0x10; - } - - ent->key_pointer[fork_num] = key_pointer; - ent->depth[fork_num] = depth; - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_set_file_size(imgtool::image &image, prodos_direnum *direnum, - prodos_dirent *ent, int fork_num, uint32_t new_size) -{ - imgtoolerr_t err = IMGTOOLERR_SUCCESS; - uint32_t blockcount, new_blockcount; - uint8_t *bitmap = NULL; - - if (ent->filesize[fork_num] != new_size) - { - blockcount = (ent->filesize[fork_num] + BLOCK_SIZE - 1) / BLOCK_SIZE; - new_blockcount = (new_size + BLOCK_SIZE - 1) / BLOCK_SIZE; - - /* do we need to change the block chain? */ - if (new_blockcount != blockcount) - { - err = prodos_load_volume_bitmap(image, &bitmap); - if (err) - goto done; - - err = prodos_set_file_block_count(image, direnum, ent, bitmap, fork_num, new_blockcount); - if (err) - goto done; - - err = prodos_save_volume_bitmap(image, bitmap); - if (err) - goto done; - } - - ent->filesize[fork_num] = new_size; - err = prodos_put_dirent(image, direnum, ent); - if (err) - goto done; - } - -done: - if (bitmap) - free(bitmap); - return err; -} - - - -static uint32_t prodos_get_storagetype_maxfilesize(uint8_t storage_type) -{ - uint32_t max_filesize = 0; - switch(storage_type & 0xF0) - { - case 0x10: - max_filesize = BLOCK_SIZE * 1; - break; - case 0x20: - max_filesize = BLOCK_SIZE * 256; - break; - case 0x30: - case 0x50: - max_filesize = BLOCK_SIZE * 32768; - break; - } - return max_filesize; -} - - - -static imgtoolerr_t prodos_diskimage_beginenum(imgtool::directory &enumeration, const char *path) -{ - imgtoolerr_t err; - imgtool::image &image(enumeration.image()); - prodos_direnum *appleenum; - prodos_dirent ent; - uint16_t block = ROOTDIR_BLOCK; - - appleenum = (prodos_direnum *) enumeration.extra_bytes(); - - /* find subdirectory, if appropriate */ - if (*path) - { - err = prodos_lookup_path(image, path, CREATE_NONE, NULL, &ent); - if (err) - return err; - - /* only work on directories */ - if (!is_dir_storagetype(ent.storage_type)) - return IMGTOOLERR_FILENOTFOUND; - - block = ent.key_pointer[0]; - } - - /* seek initial block */ - err = prodos_enum_seek(image, appleenum, block, 0); - if (err) - return err; - - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_diskimage_nextenum(imgtool::directory &enumeration, imgtool_dirent &ent) -{ - imgtoolerr_t err; - imgtool::image &image(enumeration.image()); - prodos_direnum *appleenum; - prodos_dirent pd_ent; - uint32_t max_filesize; - - appleenum = (prodos_direnum *) enumeration.extra_bytes(); - - do - { - err = prodos_get_next_dirent(image, appleenum, pd_ent); - if (err) - return err; - } - while(appleenum->block - && !is_file_storagetype(pd_ent.storage_type) - && !is_dir_storagetype(pd_ent.storage_type)); - - /* end of file? */ - if (pd_ent.storage_type == 0x00) - { - ent.eof = 1; - return IMGTOOLERR_SUCCESS; - } - - strcpy(ent.filename, pd_ent.filename); - ent.directory = is_dir_storagetype(pd_ent.storage_type); - ent.creation_time = prodos_crack_time(pd_ent.creation_time); - ent.lastmodified_time = prodos_crack_time(pd_ent.lastmodified_time); - - if (!ent.directory) - { - ent.filesize = pd_ent.filesize[0]; - - max_filesize = prodos_get_storagetype_maxfilesize(pd_ent.storage_type); - if (ent.filesize > max_filesize) - { - ent.corrupt = 1; - ent.filesize = max_filesize; - } - } - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_read_file_tree(imgtool::image &image, uint32_t *filesize, - uint32_t block, int nest_level, imgtool::stream &destf) -{ - imgtoolerr_t err; - prodos_diskinfo *di; - uint8_t buffer[BLOCK_SIZE]; - uint16_t sub_block; - size_t bytes_to_write; - int i; - - /* check bounds */ - di = get_prodos_info(image); - if (block >= di->total_blocks) - return IMGTOOLERR_CORRUPTFILE; - - err = prodos_load_block(image, block, buffer); - if (err) - return err; - - if (nest_level > 0) - { - /* this is an index block */ - for (i = 0; i < 256; i++) - { - /* retrieve the block pointer; the two bytes are on either half - * of the block */ - sub_block = buffer[i + 256]; - sub_block <<= 8; - sub_block |= buffer[i + 0]; - - if (sub_block != 0) - { - err = prodos_read_file_tree(image, filesize, sub_block, nest_level - 1, destf); - if (err) - return err; - } - } - } - else - { - /* this is a leaf block */ - bytes_to_write = std::min(size_t(*filesize), sizeof(buffer)); - destf.write(buffer, bytes_to_write); - *filesize -= bytes_to_write; - } - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_write_file_tree(imgtool::image &image, uint32_t *filesize, - uint32_t block, int nest_level, imgtool::stream &sourcef) -{ - imgtoolerr_t err; - prodos_diskinfo *di; - uint8_t buffer[BLOCK_SIZE]; - uint16_t sub_block; - size_t bytes_to_read; - int i; - - /* nothing more to read? bail */ - if (*filesize == 0) - return IMGTOOLERR_SUCCESS; - - /* check bounds */ - di = get_prodos_info(image); - if (block >= di->total_blocks) - return IMGTOOLERR_CORRUPTFILE; - - err = prodos_load_block(image, block, buffer); - if (err) - return err; - - if (nest_level > 0) - { - for (i = 0; i < 256; i++) - { - sub_block = buffer[i + 256]; - sub_block <<= 8; - sub_block |= buffer[i + 0]; - - if (sub_block != 0) - { - err = prodos_write_file_tree(image, filesize, sub_block, nest_level - 1, sourcef); - if (err) - return err; - } - } - } - else - { - /* this is a leaf block */ - bytes_to_read = std::min(size_t(*filesize), sizeof(buffer)); - sourcef.read(buffer, bytes_to_read); - *filesize -= bytes_to_read; - - err = prodos_save_block(image, block, buffer); - if (err) - return err; - } - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_diskimage_freespace(imgtool::partition &partition, uint64_t *size) -{ - imgtoolerr_t err; - imgtool::image &image(partition.image()); - prodos_diskinfo *di; - uint8_t *bitmap = NULL; - uint16_t i; - - di = get_prodos_info(image); - *size = 0; - - err = prodos_load_volume_bitmap(image, &bitmap); - if (err) - goto done; - - for (i = 0; i < di->total_blocks; i++) - { - if (!prodos_get_volume_bitmap_bit(bitmap, i)) - *size += BLOCK_SIZE; - } - -done: - if (bitmap) - free(bitmap); - return err; -} - - - -static imgtoolerr_t prodos_diskimage_readfile(imgtool::partition &partition, const char *filename, const char *fork, imgtool::stream &destf) -{ - imgtoolerr_t err; - imgtool::image &image(partition.image()); - prodos_dirent ent; - uint16_t key_pointer; - int nest_level; - mac_fork_t fork_num; - - err = prodos_lookup_path(image, filename, CREATE_NONE, NULL, &ent); - if (err) - return err; - - if (is_dir_storagetype(ent.storage_type)) - return IMGTOOLERR_FILENOTFOUND; - - err = mac_identify_fork(fork, &fork_num); - if (err) - return err; - - key_pointer = ent.key_pointer[fork_num]; - nest_level = ent.depth[fork_num] - 1; - - if (key_pointer != 0) - { - err = prodos_read_file_tree(image, &ent.filesize[fork_num], key_pointer, - nest_level, destf); - if (err) - return err; - } - - /* have we not actually received the correct amount of bytes? if not, fill in the rest */ - if (ent.filesize[fork_num] > 0) - destf.fill(0, ent.filesize[fork_num]); - - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_diskimage_writefile(imgtool::partition &partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts) -{ - imgtoolerr_t err; - imgtool::image &image(partition.image()); - prodos_dirent ent; - prodos_direnum direnum; - uint64_t file_size; - mac_fork_t fork_num; - - file_size = sourcef.size(); - - err = prodos_lookup_path(image, filename, CREATE_FILE, &direnum, &ent); - if (err) - return err; - - /* only work on files */ - if (is_dir_storagetype(ent.storage_type)) - return IMGTOOLERR_FILENOTFOUND; - - err = mac_identify_fork(fork, &fork_num); - if (err) - return err; - - /* set the file size */ - err = prodos_set_file_size(image, &direnum, &ent, fork_num, file_size); - if (err) - return err; - - err = prodos_write_file_tree(image, &ent.filesize[fork_num], ent.key_pointer[fork_num], - ent.depth[fork_num] - 1, sourcef); - if (err) - return err; - - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_diskimage_deletefile(imgtool::partition &partition, const char *path) -{ - imgtoolerr_t err; - imgtool::image &image(partition.image()); - prodos_dirent ent; - prodos_direnum direnum; - - err = prodos_lookup_path(image, path, CREATE_NONE, &direnum, &ent); - if (err) - return err; - - /* only work on files */ - if (is_dir_storagetype(ent.storage_type)) - return IMGTOOLERR_FILENOTFOUND; - - /* empty out both forks */ - err = prodos_set_file_size(image, &direnum, &ent, 0, 0); - if (err) - return err; - err = prodos_set_file_size(image, &direnum, &ent, 1, 0); - if (err) - return err; - - memset(&ent, 0, sizeof(ent)); - err = prodos_put_dirent(image, &direnum, &ent); - if (err) - return err; - - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_diskimage_listforks(imgtool::partition &partition, const char *path, std::vector &forks) -{ - imgtoolerr_t err; - imgtool::image &image(partition.image()); - prodos_dirent ent; - prodos_direnum direnum; - - err = prodos_lookup_path(image, path, CREATE_NONE, &direnum, &ent); - if (err) - return err; - - if (is_dir_storagetype(ent.storage_type)) - return IMGTOOLERR_FILENOTFOUND; - - // specify data fork - forks.emplace_back(ent.filesize[0], imgtool::fork_entry::type_t::DATA); - - if (is_extendedfile_storagetype(ent.storage_type)) - { - // specify the resource fork - forks.emplace_back(ent.filesize[1], imgtool::fork_entry::type_t::RESOURCE); - } - - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_diskimage_createdir(imgtool::partition &partition, const char *path) -{ - imgtoolerr_t err; - imgtool::image &image(partition.image()); - prodos_dirent ent; - prodos_direnum direnum; - - err = prodos_lookup_path(image, path, CREATE_DIR, &direnum, &ent); - if (err) - return err; - - /* only work on directories */ - if (!is_dir_storagetype(ent.storage_type)) - return IMGTOOLERR_FILENOTFOUND; - - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_free_directory(imgtool::image &image, uint8_t *volume_bitmap, uint16_t key_pointer) -{ - imgtoolerr_t err; - prodos_diskinfo *di; - int i; - uint16_t next_block; - uint32_t offset; - uint8_t buffer[BLOCK_SIZE]; - - di = get_prodos_info(image); - - if (key_pointer != 0) - { - err = prodos_load_block(image, key_pointer, buffer); - if (err) - return err; - - for (i = 0; i < di->dirents_per_block; i++) - { - offset = i * di->dirent_size + 4; - - if (is_file_storagetype(buffer[offset]) || is_file_storagetype(buffer[offset])) - return IMGTOOLERR_DIRNOTEMPTY; - } - - next_block = pick_integer_le(buffer, 2, 2); - - err = prodos_free_directory(image, volume_bitmap, next_block); - if (err) - return err; - - prodos_set_volume_bitmap_bit(volume_bitmap, key_pointer, 0); - } - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_diskimage_deletedir(imgtool::partition &partition, const char *path) -{ - imgtoolerr_t err; - imgtool::image &image(partition.image()); - prodos_dirent ent; - prodos_direnum direnum; - uint8_t *volume_bitmap = NULL; - - err = prodos_lookup_path(image, path, CREATE_NONE, &direnum, &ent); - if (err) - goto done; - - /* only work on directories */ - if (!is_dir_storagetype(ent.storage_type)) - { - err = IMGTOOLERR_FILENOTFOUND; - goto done; - } - - err = prodos_load_volume_bitmap(image, &volume_bitmap); - if (err) - goto done; - - err = prodos_free_directory(image, volume_bitmap, ent.key_pointer[0]); - if (err) - goto done; - - err = prodos_save_volume_bitmap(image, volume_bitmap); - if (err) - goto done; - - memset(&ent, 0, sizeof(ent)); - err = prodos_put_dirent(image, &direnum, &ent); - if (err) - goto done; - -done: - if (volume_bitmap) - free(volume_bitmap); - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_get_file_tree(imgtool::image &image, imgtool_chainent *chain, size_t chain_size, - size_t *chain_pos, uint16_t block, uint8_t total_depth, uint8_t cur_depth) -{ - imgtoolerr_t err; - prodos_diskinfo *di; - int i; - uint16_t sub_block; - uint8_t buffer[BLOCK_SIZE]; - - if (block == 0) - return IMGTOOLERR_SUCCESS; - if (*chain_pos >= chain_size) - return IMGTOOLERR_SUCCESS; - - /* check bounds */ - di = get_prodos_info(image); - if (block >= di->total_blocks) - return IMGTOOLERR_CORRUPTFILE; - - chain[*chain_pos].level = cur_depth; - chain[*chain_pos].block = block; - (*chain_pos)++; - - /* must we recurse into the tree? */ - if (cur_depth < total_depth) - { - err = prodos_load_block(image, block, buffer); - if (err) - return err; - - for (i = 0; i < 256; i++) - { - sub_block = buffer[i + 256]; - sub_block <<= 8; - sub_block |= buffer[i + 0]; - - err = prodos_get_file_tree(image, chain, chain_size, chain_pos, sub_block, total_depth, cur_depth + 1); - if (err) - return err; - } - } - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_diskimage_getattrs(imgtool::partition &partition, const char *path, const uint32_t *attrs, imgtool_attribute *values) -{ - imgtoolerr_t err; - imgtool::image &image(partition.image()); - prodos_dirent ent; - int i; - - err = prodos_lookup_path(image, path, CREATE_NONE, NULL, &ent); - if (err) - return err; - - for (i = 0; attrs[i]; i++) - { - switch(attrs[i]) - { - case IMGTOOLATTR_INT_MAC_TYPE: - values[i].i = ent.file_type; - break; - case IMGTOOLATTR_INT_MAC_CREATOR: - values[i].i = ent.file_creator; - break; - case IMGTOOLATTR_INT_MAC_FINDERFLAGS: - values[i].i = ent.finder_flags; - break; - case IMGTOOLATTR_INT_MAC_COORDX: - values[i].i = ent.coord_x; - break; - case IMGTOOLATTR_INT_MAC_COORDY: - values[i].i = ent.coord_y; - break; - case IMGTOOLATTR_INT_MAC_FINDERFOLDER: - values[i].i = ent.finder_folder; - break; - case IMGTOOLATTR_INT_MAC_ICONID: - values[i].i = ent.icon_id; - break; - case IMGTOOLATTR_INT_MAC_SCRIPTCODE: - values[i].i = ent.script_code; - break; - case IMGTOOLATTR_INT_MAC_EXTENDEDFLAGS: - values[i].i = ent.extended_flags; - break; - case IMGTOOLATTR_INT_MAC_COMMENTID: - values[i].i = ent.comment_id; - break; - case IMGTOOLATTR_INT_MAC_PUTAWAYDIRECTORY: - values[i].i = ent.putaway_directory; - break; - - case IMGTOOLATTR_TIME_CREATED: - values[i].t = prodos_crack_time(ent.creation_time).to_time_t(); - break; - case IMGTOOLATTR_TIME_LASTMODIFIED: - values[i].t = prodos_crack_time(ent.lastmodified_time).to_time_t(); - break; - } - } - - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_diskimage_setattrs(imgtool::partition &partition, const char *path, const uint32_t *attrs, const imgtool_attribute *values) -{ - imgtoolerr_t err; - imgtool::image &image(partition.image()); - prodos_dirent ent; - prodos_direnum direnum; - int i; - - err = prodos_lookup_path(image, path, CREATE_NONE, &direnum, &ent); - if (err) - return err; - - for (i = 0; attrs[i]; i++) - { - switch(attrs[i]) - { - case IMGTOOLATTR_INT_MAC_TYPE: - ent.file_type = values[i].i; - break; - case IMGTOOLATTR_INT_MAC_CREATOR: - ent.file_creator = values[i].i; - break; - case IMGTOOLATTR_INT_MAC_FINDERFLAGS: - ent.finder_flags = values[i].i; - break; - case IMGTOOLATTR_INT_MAC_COORDX: - ent.coord_x = values[i].i; - break; - case IMGTOOLATTR_INT_MAC_COORDY: - ent.coord_y = values[i].i; - break; - case IMGTOOLATTR_INT_MAC_FINDERFOLDER: - ent.finder_folder = values[i].i; - break; - case IMGTOOLATTR_INT_MAC_ICONID: - ent.icon_id = values[i].i; - break; - case IMGTOOLATTR_INT_MAC_SCRIPTCODE: - ent.script_code = values[i].i; - break; - case IMGTOOLATTR_INT_MAC_EXTENDEDFLAGS: - ent.extended_flags = values[i].i; - break; - case IMGTOOLATTR_INT_MAC_COMMENTID: - ent.comment_id = values[i].i; - break; - case IMGTOOLATTR_INT_MAC_PUTAWAYDIRECTORY: - ent.putaway_directory = values[i].i; - break; - - case IMGTOOLATTR_TIME_CREATED: - ent.creation_time = prodos_setup_time(values[i].t); - break; - case IMGTOOLATTR_TIME_LASTMODIFIED: - ent.lastmodified_time = prodos_setup_time(values[i].t); - break; - } - } - - err = prodos_put_dirent(image, &direnum, &ent); - if (err) - return err; - - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_diskimage_suggesttransfer(imgtool::partition &partition, const char *path, imgtool_transfer_suggestion *suggestions, size_t suggestions_length) -{ - imgtoolerr_t err; - imgtool::image &image(partition.image()); - prodos_dirent ent; - mac_filecategory_t file_category = MAC_FILECATEGORY_DATA; - - if (path) - { - err = prodos_lookup_path(image, path, CREATE_NONE, NULL, &ent); - if (err) - return err; - - file_category = is_extendedfile_storagetype(ent.storage_type) - ? MAC_FILECATEGORY_FORKED : MAC_FILECATEGORY_DATA; - } - - mac_suggest_transfer(file_category, suggestions, suggestions_length); - return IMGTOOLERR_SUCCESS; -} - - - -static imgtoolerr_t prodos_diskimage_getchain(imgtool::partition &partition, const char *path, imgtool_chainent *chain, size_t chain_size) -{ - imgtoolerr_t err; - imgtool::image &image(partition.image()); - prodos_dirent ent; - size_t chain_pos = 0; - int fork_num; - - err = prodos_lookup_path(image, path, CREATE_NONE, NULL, &ent); - if (err) - return err; - - switch(ent.storage_type & 0xF0) - { - case 0x10: - case 0x20: - case 0x30: - /* normal ProDOS file */ - err = prodos_get_file_tree(image, chain, chain_size, &chain_pos, - ent.key_pointer[0], ent.depth[0] - 1, 0); - if (err) - return err; - break; - - case 0x50: - /* extended ProDOS file */ - chain[chain_pos].level = 0; - chain[chain_pos].block = ent.extkey_pointer; - chain_pos++; - - for (fork_num = 0; fork_num <= 1; fork_num++) - { - if (ent.key_pointer[fork_num]) - { - err = prodos_get_file_tree(image, chain, chain_size, &chain_pos, - ent.key_pointer[fork_num], ent.depth[fork_num] - 1, 1); - if (err) - return err; - } - } - break; - - case 0xE0: - /* directory */ - return IMGTOOLERR_UNIMPLEMENTED; - - default: - return IMGTOOLERR_UNEXPECTED; - } - - return IMGTOOLERR_SUCCESS; -} - - - -static void generic_prodos_get_info(const imgtool_class *imgclass, uint32_t state, union imgtoolinfo *info) -{ - switch(state) - { - /* --- the following bits of info are returned as 64-bit signed integers --- */ - case IMGTOOLINFO_INT_INITIAL_PATH_SEPARATOR: info->i = 1; break; - case IMGTOOLINFO_INT_OPEN_IS_STRICT: info->i = 1; break; - case IMGTOOLINFO_INT_SUPPORTS_CREATION_TIME: info->i = 1; break; - case IMGTOOLINFO_INT_SUPPORTS_LASTMODIFIED_TIME: info->i = 1; break; - case IMGTOOLINFO_INT_WRITING_UNTESTED: info->i = 1; break; - case IMGTOOLINFO_INT_IMAGE_EXTRA_BYTES: info->i = sizeof(prodos_diskinfo); break; - case IMGTOOLINFO_INT_DIRECTORY_EXTRA_BYTES: info->i = sizeof(prodos_direnum); break; - case IMGTOOLINFO_INT_PATH_SEPARATOR: info->i = '/'; break; - - /* --- the following bits of info are returned as NULL-terminated strings --- */ - case IMGTOOLINFO_STR_DESCRIPTION: strcpy(info->s = imgtool_temp_str(), "ProDOS format"); break; - case IMGTOOLINFO_STR_FILE: strcpy(info->s = imgtool_temp_str(), __FILE__); break; - case IMGTOOLINFO_STR_EOLN: strcpy(info->s = imgtool_temp_str(), "\r"); break; - - /* --- the following bits of info are returned as pointers to data or functions --- */ - case IMGTOOLINFO_PTR_MAKE_CLASS: info->make_class = imgtool_floppy_make_class; break; - case IMGTOOLINFO_PTR_BEGIN_ENUM: info->begin_enum = prodos_diskimage_beginenum; break; - case IMGTOOLINFO_PTR_NEXT_ENUM: info->next_enum = prodos_diskimage_nextenum; break; - case IMGTOOLINFO_PTR_FREE_SPACE: info->free_space = prodos_diskimage_freespace; break; - case IMGTOOLINFO_PTR_READ_FILE: info->read_file = prodos_diskimage_readfile; break; - case IMGTOOLINFO_PTR_WRITE_FILE: info->write_file = prodos_diskimage_writefile; break; - case IMGTOOLINFO_PTR_DELETE_FILE: info->delete_file = prodos_diskimage_deletefile; break; - case IMGTOOLINFO_PTR_LIST_FORKS: info->list_forks = prodos_diskimage_listforks; break; - case IMGTOOLINFO_PTR_CREATE_DIR: info->create_dir = prodos_diskimage_createdir; break; - case IMGTOOLINFO_PTR_DELETE_DIR: info->delete_dir = prodos_diskimage_deletedir; break; - case IMGTOOLINFO_PTR_GET_ATTRS: info->get_attrs = prodos_diskimage_getattrs; break; - case IMGTOOLINFO_PTR_SET_ATTRS: info->set_attrs = prodos_diskimage_setattrs; break; - case IMGTOOLINFO_PTR_SUGGEST_TRANSFER: info->suggest_transfer = prodos_diskimage_suggesttransfer; break; - case IMGTOOLINFO_PTR_GET_CHAIN: info->get_chain = prodos_diskimage_getchain; break; - } -} - - - -void prodos_525_get_info(const imgtool_class *imgclass, uint32_t state, union imgtoolinfo *info) -{ - switch(state) - { - /* --- the following bits of info are returned as NULL-terminated strings --- */ - case IMGTOOLINFO_STR_NAME: strcpy(info->s = imgtool_temp_str(), "prodos_525"); break; - - /* --- the following bits of info are returned as pointers to data or functions --- */ - case IMGTOOLINFO_PTR_FLOPPY_CREATE: info->create = prodos_diskimage_create_525; break; - case IMGTOOLINFO_PTR_FLOPPY_OPEN: info->open = prodos_diskimage_open_525; break; - // case IMGTOOLINFO_PTR_FLOPPY_FORMAT: info->p = (void *) floppyoptions_apple2; break; - - default: generic_prodos_get_info(imgclass, state, info); break; - } -} - - - -void prodos_35_get_info(const imgtool_class *imgclass, uint32_t state, union imgtoolinfo *info) -{ - switch(state) - { - /* --- the following bits of info are returned as NULL-terminated strings --- */ - case IMGTOOLINFO_STR_NAME: strcpy(info->s = imgtool_temp_str(), "prodos_35"); break; - - /* --- the following bits of info are returned as pointers to data or functions --- */ - case IMGTOOLINFO_PTR_FLOPPY_CREATE: info->create = prodos_diskimage_create_35; break; - case IMGTOOLINFO_PTR_FLOPPY_OPEN: info->open = prodos_diskimage_open_35; break; - // case IMGTOOLINFO_PTR_FLOPPY_FORMAT: info->p = (void *) floppyoptions_apple35_iigs; break; - - default: generic_prodos_get_info(imgclass, state, info); break; - } -} diff -Nru mame-0.250+dfsg.1/src/tools/imgtool/modules.cpp mame-0.251+dfsg.1/src/tools/imgtool/modules.cpp --- mame-0.250+dfsg.1/src/tools/imgtool/modules.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/tools/imgtool/modules.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -72,8 +72,6 @@ MODULE(amiga_floppy) MODULE(concept) -MODULE(mac_mfs) -MODULE(mac_hfs) MODULE(hd) MODULE(rsdos) MODULE(dgndos) @@ -87,8 +85,6 @@ MODULE(ti990) MODULE(pc_floppy) MODULE(pc_chd) -MODULE(prodos_525) -MODULE(prodos_35) MODULE(thom_fd_basic) MODULE(thom_qd_basic) MODULE(thom_sap_basic) diff -Nru mame-0.250+dfsg.1/src/tools/imgtool/stream.cpp mame-0.251+dfsg.1/src/tools/imgtool/stream.cpp --- mame-0.250+dfsg.1/src/tools/imgtool/stream.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/tools/imgtool/stream.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -22,7 +22,6 @@ #include #include -#include // for crc32 namespace imgtool { @@ -485,28 +484,6 @@ //------------------------------------------------- -// getptr -//------------------------------------------------- - -void *stream::getptr() -{ - void *ptr; - - switch(imgtype) - { - case IMG_MEM: - ptr = buffer; - break; - - default: - ptr = nullptr; - break; - } - return ptr; -} - - -//------------------------------------------------- // seek //------------------------------------------------- @@ -574,58 +551,6 @@ } -//------------------------------------------------- -// crc -//------------------------------------------------- - -int stream::crc(unsigned long *result) -{ - size_t sz; - void *ptr; - - switch(imgtype) - { - case IMG_MEM: - *result = crc32(0, (unsigned char *) buffer, (size_t) filesize); - break; - - default: - sz = size(); - ptr = malloc(sz); - if (!ptr) - return IMGTOOLERR_OUTOFMEMORY; - seek(0, SEEK_SET); - if (read(ptr, sz) != sz) - { - free(ptr); - return IMGTOOLERR_READERROR; - } - *result = crc32(0, (const Bytef*)ptr, sz); - free(ptr); - break; - } - return 0; -} - - -//------------------------------------------------- -// file_crc -//------------------------------------------------- - -int stream::file_crc(const char *fname, unsigned long *result) -{ - int err; - stream::ptr f; - - f = stream::open(fname, OSD_FOPEN_READ); - if (!f) - return IMGTOOLERR_FILENOTFOUND; - - err = f->crc(result); - return err; -} - - //------------------------------------------------- // fill //------------------------------------------------- diff -Nru mame-0.250+dfsg.1/src/tools/imgtool/stream.h mame-0.251+dfsg.1/src/tools/imgtool/stream.h --- mame-0.250+dfsg.1/src/tools/imgtool/stream.h 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/tools/imgtool/stream.h 2022-12-29 14:20:09.000000000 +0000 @@ -40,7 +40,6 @@ uint64_t size() const; int seek(int64_t pos, int where); uint64_t tell(); - void *getptr(); uint32_t putc(char c); uint32_t puts(const char *s); uint32_t printf(const char *fmt, ...) ATTR_PRINTF(2, 3); @@ -52,10 +51,6 @@ // fills sz bytes with b uint64_t fill(unsigned char b, uint64_t sz); - // returns the CRC of a file - int crc(unsigned long *result); - static int file_crc(const char *fname, unsigned long *result); - // returns whether a stream is read only or not bool is_read_only(); diff -Nru mame-0.250+dfsg.1/src/tools/unidasm.cpp mame-0.251+dfsg.1/src/tools/unidasm.cpp --- mame-0.250+dfsg.1/src/tools/unidasm.cpp 2022-11-29 05:41:19.000000000 +0000 +++ mame-0.251+dfsg.1/src/tools/unidasm.cpp 2022-12-29 14:20:09.000000000 +0000 @@ -74,6 +74,7 @@ #include "cpu/i8089/i8089_dasm.h" #include "cpu/i860/i860dis.h" #include "cpu/i960/i960dis.h" +#include "cpu/ibm1800/ibm1800d.h" #include "cpu/ie15/ie15dasm.h" #include "cpu/jaguar/jagdasm.h" #include "cpu/ks0164/ks0164d.h" @@ -123,6 +124,7 @@ #include "cpu/nanoprocessor/nanoprocessor_dasm.h" #include "cpu/nec/necdasm.h" #include "cpu/nios2/nios2dasm.h" +#include "cpu/nova/novadasm.h" #include "cpu/ns32000/ns32000dasm.h" #include "cpu/nuon/nuondasm.h" #include "cpu/pace/pacedasm.h" @@ -479,6 +481,8 @@ { "i8xc51fx", le, 0, []() -> util::disasm_interface * { return new i8xc51fx_disassembler; } }, { "i8xc51gb", le, 0, []() -> util::disasm_interface * { return new i8xc51gb_disassembler; } }, { "i960", le, 0, []() -> util::disasm_interface * { return new i960_disassembler; } }, + { "ibm1130", be, -1, []() -> util::disasm_interface * { return new ibm1130_disassembler; } }, + { "ibm1800", be, -1, []() -> util::disasm_interface * { return new ibm1800_disassembler; } }, { "ie15", le, 0, []() -> util::disasm_interface * { return new ie15_disassembler; } }, { "jaguardsp", be, 0, []() -> util::disasm_interface * { return new jaguar_disassembler(jaguar_disassembler::variant::DSP); } }, { "jaguargpu", be, 0, []() -> util::disasm_interface * { return new jaguar_disassembler(jaguar_disassembler::variant::GPU); } }, @@ -539,6 +543,7 @@ { "nanoprocessor", le, 0, []() -> util::disasm_interface * { return new hp_nanoprocessor_disassembler; } }, { "nec", le, 0, []() -> util::disasm_interface * { return new nec_disassembler(&nec_unidasm); } }, { "nios2", le, 0, []() -> util::disasm_interface * { return new nios2_disassembler; } }, + { "nova", be, -1, []() -> util::disasm_interface * { return new nova_disassembler; } }, { "ns32000", le, 0, []() -> util::disasm_interface * { return new ns32000_disassembler; } }, { "nuon", be, 0, []() -> util::disasm_interface * { return new nuon_disassembler; } }, { "nsc8105", be, 0, []() -> util::disasm_interface * { return new m680x_disassembler(8105); } },