Commit Graph
100 Commits
Author SHA1 Message Date
icex2 ce1a004bf6 fix(ddr): Add missing distribution files for 17 and 18
Even they are identical to 16, stick to the current scheme
of copy-pasting them.
2024-02-03 10:29:10 +01:00
icex2 e72e38eda2 chore: Fix ordering of files in module.mk 2024-02-03 10:28:42 +01:00
icex2 e71373e718 fix(doc): Update list of supported ddr versions
Apparently also forgotten to reflect currently
supported games.
2024-01-31 22:47:14 +01:00
icex2 44cd2ba098 fix(dist): Incorrect versioning for ddr distribution packages
Apparently forgotten to get updated to reflect the
currently supported versions correctly.
2024-01-31 22:47:14 +01:00
icex2 f17a2d2044 feat/fix(avs/ddr): Support AVS 2.13.06
This one was missing and is the actual correct
version used for ddr-13. 2.13.04 was compatible,
thus far, but there isn't any guarantee that they
are actually 100% compatible (only konmai knows...).
2024-01-31 22:47:14 +01:00
icex2 42f09417a0 feat(avs imports): Add lib export definitions of new AVS API functions
Add all functions and their respective ordinals (and mangled names for
documentation purpose) to all currently used AVS version.
2024-01-31 22:47:14 +01:00
icex2 dc16844bbb feat(avs-api): Various improvements
* Improve psmap types, taken from a private
  eamuse server backend which had more complete
  mappings.
* Move psmap terminator to enum
* AVS error type: Supports improving
  expressiveness of the API interface
* Add more property node related functions

Add more AVS file system related functions

These were previously missing and are required for
various file system related tasks such as iterating
directory trees, reading and writing files through
the AVS file system for the upcoming launcher
rework.

Note that the AVS API broke with some mode flags
after version 2.13.06.
2024-01-31 22:47:14 +01:00
icex2 4fedf34d6b feat: Add new module to scope avs related "utility" stuff
Use this to share helpers or other extensions to the
original avs API across modules.

Start with including error codes to readable strings
to improve velocity on AVS API error analysis.
2024-01-31 22:47:14 +01:00
icex2 06317d63e7 feat(util): Add func to check if running as admin user
This has been a source of common error in the past.
It is known that most, or even all, games run into
various issues when not run with elevated privileges.
2024-01-31 22:47:14 +01:00
icex2 e2a6410461 chore: Apply code formatting 2024-01-31 22:47:14 +01:00
icex2 0a29e031ff chore: Apply formatting to all markdown docs 2024-01-31 22:20:51 +01:00
icex2 0897a25174 feat(dev): Add markdown document formatting
Apply a consistent style across all markdown documents.
Use mdformat (https://github.com/executablebooks/mdformat)
to achieve that. Improves maintainability and readability.
2024-01-31 22:20:51 +01:00
icex2 6efbf71c30 chore: Bump version to 5.49 to start next development cycle 2024-01-31 22:19:32 +01:00
icex2 e1008576ce chore: Update changelog for release 2024-01-31 21:52:05 +01:00
icex2 f41cdba8b8 chore: Bump version to 5.48 to start next development cycle 2024-01-31 21:42:14 +01:00
icex2 bdf493d2fb chore: Update changelog for 5.47 release 2024-01-29 22:08:28 +01:00
icex2 bec007d52a fix(p3ioemu): Incorrect dispatching of unknown p3io commands
Using ddrhook1, this caused DDR X to crash on startup when the
P3io client sends the currently unknown command 2B. Handling it
with the incorrect p3io command struct, any following reading
attempts from the P3IO by the game fail.

Handle the 2B case explicitly with a generic response that worked
previously before the restructuring of the code. Apply the same
to any further unknown commands with improved logging warning
about this.
2023-11-30 20:33:36 +01:00
icex2 a177913bd6 fix(p3io): Off-by-one error on assert
Buffers are allowed to have the exact size as the max defined
P3IO buffer size. Cutting it short by one byte causes this
to fail incorrectly when using the pure raw buffer structure
2023-11-30 20:33:36 +01:00
icex2 f8b2f5f40d chore: Bump version to 5.47 to start next development cycle 2023-11-03 15:48:04 +01:00
icex2 882a3557c9 chore(doc): Fix release process notes
Update outdated references and improve some phrasing
2023-11-03 15:46:11 +01:00
icex2 2454141cab chore: Housekeeping, remove dead link, fix description 2023-11-03 15:46:11 +01:00
icex2 4b740c13e8 chore: Remove obsolete gitlab-ci yaml
Repository is not on gitlab anymore, left over
from migration
2023-11-03 15:46:11 +01:00
icex2 ec4e81d9d3 chore: Update changelog 2023-11-03 15:46:11 +01:00
icex2 9a964e6bdb doc: Add info/instructions regarding ddrio-async 2023-11-03 15:46:11 +01:00
icex2 9b2ed6910e feat: ddrio-async wrapper/shim driver for async IO
Wrapper/shim library to drive another ddrio in a dedicated
IO thread. Depending on the other ddrio backend used, this
can significantly improve performance while staying
compatible to the existing ddrio API interface

This turned out to be a good solution to solve performance
problems when running MAME with ddrio-p3io that is
(currently) implemented with synchronous IO calls that are
very costly: ~12 ms for a write over the ACIO protocol, ~4 ms
for a read using an IOCTL. As this already adds up to nearly
a full frame (60 fps) regarding latency, there isn't a lot
of time left to do other stuff in a synchronous update loop.
MAME's performance was unstable and dropped all the time below
100%. The result was a choppy gameplay experience.

Combining ddrio-async with ddrio-p3io, the combined backend
is able to drive inputs/outputs at a rate of ~250hz = ~4
updates per frame. This results in an average input latency
of ~4 ms which is as good as it can get with the p3io
hardware's performance limitations that I measured (see
the 4 ms for the IOCTL mentioned above).

This is more than good enough as as update frequency of
the 573 hardware is slightly less than that (I got told
something ~180 hz?).

tl;dr: Gameplay on MAME is great, smooth frame rate, IO feels
amazing and responsive.
2023-11-03 15:46:11 +01:00
icex2 f8d394e124 chore: Bump version to 5.46 to start next development cycle 2023-10-18 01:24:15 +02:00
icex2 09080f7ae2 chore: Update changelog for 5.45 release 2023-10-18 01:09:46 +02:00
icex2 e673cf694f feat(iidx): Support iidx 30 2023-10-18 01:09:45 +02:00
icex2 5c08e966d9 doc: Update documentation for various tools and ddrio added 2023-06-25 13:24:07 +02:00
icex2 6be7bdc403 chore(module.mk): Add various ddr related IO tools 2023-06-25 13:24:07 +02:00
icex2 20c6e46a71 feat(ddriotest): Add driotest tool to test ddrio API implementations 2023-06-25 13:24:07 +02:00
icex2 d7c4128a28 doc(dev/journal): Add notes when working on the P3IO driver 2023-06-25 13:24:07 +02:00
icex2 0961bae99f feat(ddrio-p3io): Add ddrio API implementation for DDR P3IO
Also includes EXTIO. Run a SD style cabinet with bemanitools
ddrio API.
2023-06-25 13:24:07 +02:00
icex2 3a89502498 feat(p3io-ddr-tool): CLI tool to test and debug a real DDR P3IO
Extensive tool with subcommands to trigger the various
P3IO commands and run the P3IO + EXTIO DDR hardware
combo with a hardware test menu.
2023-06-25 13:24:07 +02:00
icex2 23ca366f78 chore(module.mk): Add extio related sub-projects 2023-06-25 13:24:07 +02:00
icex2 ec374ec291 feat(extiotest): Add testing tool for real EXTIO devices
A small but helpful tool to run a quick functional test
of a real EXTIO device connected to the target machine.
2023-06-25 13:24:07 +02:00
icex2 db2d71e13c feat(extiodrv): Add (DDR) EXTIO driver
Initial version that supports the most important
features to operate a DDR SD cabinet with all
inputs and outputs working.

Note that the individual sensor cycling modes are
currently broken. The driver will always set the
sensor read mode to all for now.
2023-06-25 13:24:07 +02:00
icex2 2bbbfccd13 feat(extio): Add EXTIO command data structures
Reverse engineered from a real EXTIO device, open-io
project as further reference
2023-06-25 13:24:07 +02:00
icex2 c22ec4fcff feat(p3iodrv): Add DDR compatible P3IO driver
Initial version that supports the most important
features to operate all inputs and outputs of a
DDR SD cabinet.
2023-06-25 13:24:07 +02:00
icex2 1a86cc7ee5 feat(p3io/ddr): Add data structures for DDR P3IO data
Reverse engineered using a real P3IO DDR IO board and
the DDR 16 game binary for additional reference
2023-06-25 13:24:07 +02:00
icex2 069981ef63 refactor(unicorntail): Adjust to p3io command structure changes 2023-06-25 13:24:07 +02:00
icex2 4c3febfcad refactor(p3ioemu/emu): Adjust to command structure changes
Various structures were improved, some slightly changed
even. Behavior/functionality expected to be identical.
2023-06-25 13:24:07 +02:00
icex2 7d9b837463 refactor(p3ioemu/uart): Adjust to command structure changes 2023-06-25 13:24:07 +02:00
icex2 c5bba84940 refactor(p3io/cmd): Add and improve p3io command helper functions
With the overhaul of commands, some helpers needed tweaks while
new ones were added to abstract p3io command details with a
common interface, e.g. dealing with the command length field.
2023-06-25 13:24:07 +02:00
icex2 5ef190f0af feat(p3io/cmd): Overhaul based on real P3IO DDR hardware tests
Using a real DDR P3IO (Dragon PCB), the overall P3IO command
structures improved significantly. Added further notes about
unknown/unclear commands that were not derivable from the
DDR 18 game binary either.

Note that this module is also used by jubeat to some extend.
The initial design apparently assumed a greater overlap in
commands. This now seems less likely as many commands appear
to be DDR specific.

Refactoring/splitting this is a major effort that is not being
addressed here.
2023-06-25 13:24:07 +02:00
icex2 ed0ce2de35 refactor(p3io/frame): Lift magic numbers to macro
Aligns the code with other ACIO code where the
init and escape chars have proper macros to
improve readability
2023-06-25 13:24:07 +02:00
icex2 f2628a954c feat(util/iobuf): Improve log output
Output the full buffer and the buffer up to the
currently set position. Makes debugging a lot
easier if you know the position set is ok to
only look at the output up to there.

Otherwise, having the full view is also important
to check if data got truncated or checking for
odd looking "garbage" data.
2023-06-25 13:24:07 +02:00
icex2 96d7c4ed91 feat(util/log): Expose proper log level definition with enum
Internally, this was already used but it lacked a clean
public interface to set different log levels from the outside.

Useful for various command line tooling to implement verbosity
levels, e.g. -v, -vv, -vvv
2023-06-25 13:24:07 +02:00
icex2 e40709ddf7 chore: Apply code formatting 2023-04-15 22:37:07 +02:00
icex2 bf83bd89e5 feat(doc/journal): Add dev notes about iidx HD era upscaling feature 2023-04-15 22:37:07 +02:00
icex2 9c9e554234 feat(iidx 20-26): Hook new "HD era scaling" module
Replace the old module, re-use the configuration for now to
avoid introducing breaking changes in the configuration API.

This can be further cleaned up, once the monolithic
iidxhook-util/d3d9 module is further broken up.
2023-04-15 22:37:07 +02:00
icex2 782a23db74 feat(iidx 20-26): New up-/downscaling gfx module, old one doesn't work
This replaces the scaling feature of iidxhook-util/d3d9 as the
game engine changed significantly that the old one is incompatible.

Create a new module because the logic to implement a scaling
feature is very different now. This also avoids further cluttering
the already badly overloaded old module.

The new module is light weight and "plugable" on a hooking
level. Further modules will follow to de-clutter the
iidxhook-util/d3d9 module
2023-04-15 22:37:07 +02:00
icex2 6ea099fd9e feat(d3d9-util): Add separate module for d3d9 utils/helpers
Currently includes:

* dx9 error formatting helpers. Turn error codes into readable
  text
* Vertex struct and helper function
2023-04-15 22:37:07 +02:00
icex2 6dea29ec6a feat(hook/d3d9): Support hooking of SetScissorRect 2023-04-15 22:37:07 +02:00
icex2 c4e77a9152 fix(workflow): Permission issues when creating releases on tagging 2023-04-11 00:29:06 +02:00
icex2 736c82975f chore(workflow): Improve workflow names
These show up on github under "Actions" and it should be possible
to tell them apart.
2023-04-11 00:29:06 +02:00
icex2 89efe0cc86 feat(dev): Add github build and release workflows 2023-04-10 23:55:20 +02:00
icex2 64901bdb61 chore: Bump version to 5.45 to start next development cycle 2023-04-06 15:56:31 +02:00
icex2 52ff4927b4 chore: Update changelog for 5.44 release 2023-04-06 15:39:53 +02:00
icex2 d989e75488 feat(doc iidx15): Add crashinig on boot due to no backup data 2023-04-06 15:39:53 +02:00
icex2 b0564b97c6 chore: Apply code formatting to entire code base 2023-04-06 15:39:53 +02:00
icex2 47bfb4e9b2 chore(doc): Add dev journal about 10th style IO and security boot 2023-04-06 15:39:53 +02:00
icex2 5c4afb8a2a fix(iidx/config): Utilize io board type, fix 10th SQ-INIT error
Using the right combination of "flags", this addresses the
SQ-INIT error on 10th style as well as forces 10 to 13 into
using the D01 operation mode. The latter follows the approach that
14+ is also using the best/latest IO type supported (IO2 in that
case). Expecting that gameplay experience benefits from more
optimized/better maintained code paths.

Make 10 operate in D01 IO mode which forces security to using
the D01 dongle from a D01 dedicab setup. The alternative would
be using a C02 dongle from a C02 upgraded cabinet.

More details to follow in another commit with a dev journal
entry.
2023-04-06 15:39:53 +02:00
icex2 83ef8e2e9d chore(iidx): Wire-up ezusb configuration in iidxhook1 and 2
Make io board type for ezusb board configurable as well as allow
switching on/off additional ezusb debugging feature.
2023-04-06 15:39:53 +02:00
icex2 3a71a5047a feat(iidx/config): Expose ezusb specific configuration params
Useful (debugging) and required (io board type) for different
game versions
2023-04-06 15:39:53 +02:00
icex2 aaab9bfbfc feat(iidx/ezusb): Make iidx ezusb emu io board type configurable
Second part to fixing the 10th style SQ-INIT error. This has
cross-impact on the kind of security data the game expects.
Therefore, we need to expose the IO board type and make it
configurable like the security data for the different game
versions.

More details explained in a dev journal entry to following
in one of the next commits.
2023-04-06 15:39:53 +02:00
icex2 eab80455b2 fix(iidx/ezusb): ezusb does not have a white dongle
This is one part of fixing the 10th style SQ-INIT boot error.
For some reason, 10th style calls the "second dongle slot"
which, according to the code, is expected to return the same data
as the first (black) dongle slot. Original ezusb/C02/D01 IO boards
do not have a second dongle round plug slot nor ever came with
a splitter cable. I checked original manuals of the C02 conversion
kit, E11 and ECO software upgrade kits. No white dongle nor
additional hardware for any other dongle than a black dongle.
2023-04-06 15:39:53 +02:00
icex2 27e9775101 fix(iidx/ezusb2): Fix IO buffer inconsistency on ezusb ioctl level
See same commit for ezusb for details and reasoning.
2023-04-06 15:39:53 +02:00
icex2 da94ad8f76 fix(iidx/ezusb): Fix IO buffer inconsistency on ezusb ioctl level 2023-04-06 15:39:53 +02:00
icex2 4c127d26e5 chore(dev): Fix incorrect log module header 2023-04-06 15:39:53 +02:00
icex2 e807376d6b feat(iidx/ezusb): Add ezusb api monitoring module
Implement several functions relevant to the boot process with
a focus on the security init part
2023-04-06 15:39:53 +02:00
icex2 a2c2d31ca8 fix(iidx/ezusb2): Fix IO buffer inconsistency on ezusb device level 2023-04-06 15:39:53 +02:00
icex2 22978afc9b feat(iidx 14-24): Wire up coin mech to IO emulation 2023-04-06 15:39:53 +02:00
icex2 94c562f17b feat(iidx 9-13): Wire up coin mech to IO emulation 2023-04-06 15:39:53 +02:00
icex2 1f95437b17 fix(pnm/ezusb2-emu): Fix IO buffer inconsistency/random input misfiring 2023-04-06 15:39:53 +02:00
icex2 58d4130c2a fix(jb/p4io): Fix IO buffer inconsistency/random input misfiring 2023-04-06 15:39:53 +02:00
icex2 e530968dab fix(jb/p3io): Fix IO buffer inconsistency/random input misfiring 2023-04-06 15:39:53 +02:00
icex2 99d756f207 fix(iidx/ezusb2): Fix IO buffer inconsistency/random input misfiring 2023-04-06 15:39:53 +02:00
icex2 2b8d19d82a chore: Move and convert from gitlab templates to github templates 2023-04-06 15:39:53 +02:00
icex2 fb84085f69 chore(doc): Re-structure, separate dev journals 2023-04-06 15:39:53 +02:00
icex2 ffe678de61 feat(iidx19): imagefs override strategy with local file redir 2023-04-06 15:39:53 +02:00
icex2 031836ef0e chore: Apply code formatting on entire codebase for consistent style 2023-04-06 15:39:53 +02:00
icex2 a1a849aef3 feat(iidx18/19): Improve chart-patch to correctly support iidx 18 and 19
The paths changed for 18 and again for 19. Refactor and improve
the detection logic to consider this. This also should make
the code more maintainable.
2023-04-06 15:39:53 +02:00
icex2 32c786de27 fix(iidxhook-util/chart-patch): Bugfix broken synchronization
The synchronization block was too coarse and kept the lock
acquired even when the hooked call continued traversing because
it skipped the chart patch trap code. This was apparently fine
on several games but caused very flaky deadlocking on iidx18
during the boot screens and even crashed iidx19 consistently
before showing the boot screen.
2023-04-06 15:39:53 +02:00
icex2 4d9fe0002a fix(iidxhook-util/settings): Bugfix broken paths with mixed / and \
Applies to iidx18 and iidx19 when using the recently extended
redirect feature for settings paths, mixing / and \ crashes the
game in some operator sub-menus when trying to save settings.
2023-04-06 15:39:53 +02:00
icex2 a2ceb0f6cc doc: Add documentation about parallel building being broken 2023-04-06 15:39:53 +02:00
icex2 2a57ed9916 fix(dev): Upgrade docker file, move to latest debian bullseye base image
The fedora image was already quite old but also took ages to
initially install the dependencies. Being more familiar with debian,
initial container building with package installation being rather
quick, and assuming most folks being more familiar debian as well,
I decided to shift to make this easier to maintain.
2023-04-06 15:39:53 +02:00
icex2 825ac8e6d2 chore(dev): Fix compiler warning about not knowing the definition for a struct 2023-04-06 15:39:53 +02:00
icex2 ef103eb299 chore(dev): Fix format warning 2023-04-06 15:39:53 +02:00
icex2 65aa31ca22 chore(dev): Fix compiler warning, use correct format for size_t type 2023-04-06 15:39:53 +02:00
icex2 ecda3ff86f fix(iidx/ezusb): Improve code resiliance of ezusb node-serial module
- Use static assert to verify struct sizes
- Replace "magic numbers" with proper sizeof's
- Allocate largest size buffer for message response to address
  compiler warnings which indicates potential out of bounds
  reads/writes
2023-04-06 15:39:53 +02:00
icex2 389708f794 chore(doc): Documentation cleanup and improvements
- Add index with aux tooling to main readme
- Move release process to doc, not valuable to have this on the
  main readme
2023-04-06 15:39:53 +02:00
icex2 34aca9dc2a chore(dev): Disable formatting on some files to prevent header resorting
This leads to compiler errors as windows.h is expected to be
the first header included for other windows related header files.
2023-04-06 15:39:53 +02:00
icex2 c2104e7758 chore(dev): Scope code formatting to src/main and src/test
Do not format imports which includes headers from other projects
with different code styles.
2023-04-06 15:39:53 +02:00
icex2 6a140699ec fix(dev): Improve deps docker build process, mount local folder as volume
This removes the need to copy all the data into the docker container
and outputs from the build process out of the container. In
hindsight, this was a poor design decision as it created docker
images that were very large with data, that you don't have to
keep stored once the build finished, e.g. the build output.

Therefore, mount the local folder, keep the checkouts also local
which is good for debugging and also re-using them to build without
the docker container (no second checkout required).

Build output is also written directly to the build/ output folder

Overall, the docker container is more lightweight and actually
a "build environment" only not tainted with specific versions
of the dependencies to build.
2023-04-06 15:39:53 +02:00
icex2 b2e0d9f3d6 feat(iidx19): Add back btools monitor check for iidxhook5
Provide an option for non final lincle revisions and
if the "modern" monitor check is not delivering stable
results on the final lincle revision, e.g. using the
original "pendual lcd" monitor.
2023-04-06 15:39:53 +02:00
icex2 cb884c307c iidx: Update dist default files, add settings_path item 2023-03-19 21:15:28 +01:00
icex2 1154444d16 iidxhook: Integrate settings hook configurability 2023-03-19 21:15:28 +01:00
icex2 7b90963f53 iidhxook-util: Expose settings_path as a configuration option 2023-03-19 21:15:28 +01:00
icex2 722927caa7 iidxhook-util: Add option to configure path for storing settings
Additional flexibility to cover use-cases like storing this
data on a separate partition which keeps the game data folder
clean and read-only.
2023-03-19 21:15:28 +01:00