Compare commits

...

17 Commits
5.35 ... 5.36

Author SHA1 Message Date
Will Xyen
ac02609948 dist: add IIDX28 support 2021-10-11 13:59:02 -07:00
icex2
c644db03ae doc/iidxhook3: Clarify usage of EAMID on iidx 14-17, network error
Add some additional symptoms and reasoning as this is different
for 14 to 17 compared to any other iidx version on how to use
the PCBID you get from server operators.
2021-09-27 21:50:16 +02:00
Will Xyen
7d5398b6af acio: minor fixes 2021-09-13 13:38:27 -07:00
Will Xyen
cac09f8f87 bio2: add definitions for 20th anniversary model 2021-09-13 02:51:19 +00:00
Will Xyen
85c9c444f1 aciotest: add RVOL test, and change to use product types instead of names 2021-09-13 02:51:19 +00:00
Will Xyen
8f2ce1f1b3 acio: add RVOL node definition 2021-09-13 02:51:19 +00:00
Will Xyen
d3bf381a4f aciodrv: add method to get product type of node
some devices share product codes (KFCA->RVOL), we really should be using type to differentiate them.
2021-09-13 02:51:19 +00:00
Will Xyen
3acbc7f251 acioemu: update name of AC_IO_ICCA_CMD_DEVICE_CONTROL 2021-09-13 02:51:19 +00:00
Will Xyen
839903ab48 acio: add MDXF node definition 2021-09-13 02:51:19 +00:00
Will Xyen
c929141e71 ddrhook: move common hooks to ddrhook-util 2021-09-13 02:51:19 +00:00
icex2
1477480836 Remove hardware docs, moved to arcade-docs project
These didn't really belong to this project to begin with but
didn't find a good home until recently. Already moved to
arcade-docs repository
2021-09-12 23:58:28 +02:00
icex2
bf4322e855 Add reference to arcade-docs project to documentation 2021-09-12 23:57:55 +02:00
icex2
3eed0a4ab3 Formatting 2021-09-12 23:56:45 +02:00
icex2
a9ade9d9d4 Refine CI/CD pipeline
Make use of GitLab features like the package registry to store dist
packages, GitLab releases and broadcast the release to different
channels.

Overall, this enables developers to be push out releases for frequently
since the amount of manual work is reduced.
2021-07-11 18:03:06 +00:00
Will Xyen
26336805d2 iidxhook: fix eamuse hook not using a sane port as the default when none are specified (#64) 2021-07-08 22:25:45 -07:00
Will Xyen
7d0e916b9f changelog: mention wavepass support in 5.35 2021-06-23 11:35:43 -07:00
Will Xyen
a03a5604ec Bump version to 5.36 2021-06-23 11:23:08 -07:00
42 changed files with 762 additions and 191 deletions

View File

@@ -1,55 +1,139 @@
#
# This pipeline requires packages to be switched on under the repository settings. Otherwise, you will 403s when
# uploading to the package repo is triggered.
#
# Variables to setup in GitLab CI/CD settings of the project
#
# The variables with BASE64 postfixes need to contain the base64 encoded data. Otherwise, masking
# in GitLab won't work due to not matching their pre-defined regex
#
# CI_PIGSTALL_DATA_PREFIX_BASE64
# CI_PIGSTALL_LINK_BASE64
# CI_PIGSTALL_PHP_SESSION_ID
# CI_PIGSTALL_SESSION_BASE64
#
# CI_TOOLS_UPLOAD_KEY
# CI_TOOLS_UPLOAD_URL
# CI_TOOLS_URL
image: docker:stable image: docker:stable
variables: variables:
DOCKER_TLS_CERTDIR: "/certs" DOCKER_TLS_CERTDIR: "/certs"
DIST_PACKAGE_RELATIVE_PATH: "build/docker/bemanitools.zip"
PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/bemanitools"
services: services:
- docker:19.03.8-dind - docker:19.03.8-dind
before_script:
- docker info
stages: stages:
- build - build
- upload-release - upload
- release
build-master: build:
stage: build stage: build
before_script:
- apk update && apk add make > /dev/null
script:
- make build-docker
- mv build/docker/bemanitools.zip bemanitools.zip
artifacts:
name: "$CI_COMMIT_SHORT_SHA-$CI_JOB_NAME"
paths:
- bemanitools.zip
only: only:
refs: refs:
- master - master
- tags
build-tags:
stage: build
before_script: before_script:
- apk update && apk add make > /dev/null - apk update && apk add make > /dev/null
script: script:
- make build-docker - make build-docker
- mv build/docker/bemanitools.zip bemanitools.zip
artifacts:
name: "$CI_COMMIT_SHORT_SHA-$CI_JOB_NAME"
paths:
- bemanitools.zip
only:
- tags
upload-release: upload-package-registry:
stage: upload-release stage: upload
dependencies: image: curlimages/curl:latest
- build-tags
before_script:
- apk update && apk add curl > /dev/null
script:
- echo "Uploading ${CI_PROJECT_NAME}-${CI_COMMIT_TAG}..."
- curl --silent --show-error -F "key=${CI_UPLOAD_KEY}" -F "filename=${CI_PROJECT_NAME}-v${CI_COMMIT_TAG}.zip" -F "file=@./bemanitools.zip" ${CI_UPLOAD_URL}
only: only:
- tags refs:
- master
- tags
dependencies:
- build
script:
- |
if [ "${CI_COMMIT_TAG}" ]; then
version="${CI_COMMIT_TAG}"
else
version="${CI_COMMIT_SHORT_SHA}"
fi
curl \
--silent \
--fail \
--show-error \
--header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
--upload-file "${DIST_PACKAGE_RELATIVE_PATH}" \
$PACKAGE_REGISTRY_URL/${version}/bemanitools.zip
upload-tools-page:
stage: upload
image: curlimages/curl:latest
only:
refs:
- tags
dependencies:
- build
script:
- |
curl \
--silent \
--fail \
--show-error \
--connect-timeout 5 \
--max-time 10 \
--retry 5 \
-F "key=${CI_TOOLS_UPLOAD_KEY}" \
-F "filename=${CI_PROJECT_NAME}-v${CI_COMMIT_TAG}.zip" \
-F "file=@${DIST_PACKAGE_RELATIVE_PATH}" \
${CI_TOOLS_UPLOAD_URL}
release-gitlab:
stage: release
image: registry.gitlab.com/gitlab-org/release-cli:v0.8.0
only:
refs:
- tags
script:
- |
version="$CI_COMMIT_TAG"
release_message="$(scripts/ci/create-release-message.sh "${version}" < CHANGELOG.md)"
release-cli create \
--name "bemanitools ${version}" \
--description="${release_message}" \
--tag-name ${version} \
--assets-link "{\"name\":\"Distribution binaries\",\"url\":\"${PACKAGE_REGISTRY_URL}/${version}/bemanitools.zip\"}"
release-pigstall:
stage: release
image: curlimages/curl:latest
only:
refs:
- tags
script:
- |
version="${CI_COMMIT_TAG}"
changelog_excerpt="$(scripts/ci/create-release-message.sh "${version}" < CHANGELOG.md)"
release_message="$(printf \
"bemanitools ${version} released\n${CI_TOOLS_URL}/bemanitools-v${version}.zip\n${changelog_excerpt}")"
session="$(echo "$CI_PIGSTALL_SESSION_BASE64" | base64 -d)"
data_prefix="$(echo "$CI_PIGSTALL_DATA_PREFIX_BASE64" | base64 -d)"
link="$(echo "$CI_PIGSTALL_LINK_BASE64" | base64 -d)"
curl \
--silent \
--fail \
--connect-timeout 5 \
--max-time 10 \
--retry 5 \
--show-error \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H "Cookie: PHPSESSID=$CI_PIGSTALL_PHP_SESSION_ID; session=${session}" \
--data-raw "${data_prefix}&body=${release_message}" \
"${link}"

View File

@@ -1,7 +1,15 @@
# Release history # Release history
Note for CI/CD: Ensure the version formatting in the sections is kept identical to the versions
given in tags. The pipeline will pick this up and cuts out the relevant section for release notes.
## 5.36
* iidxhook9: Support for IIDX28
* Various bugfixes
## 5.35 ## 5.35
* Jubeat: Add jbio-p4io * Jubeat: Add jbio-p4io
* Nostalgia: Add nostio-panb * Nostalgia: Add nostio-panb
* Misc: Add wavepass support to aciodrv-icca (and eamio-icca)
* Misc: Refactor aciodrv to support multiple devices using the same port (with aciomgr) * Misc: Refactor aciodrv to support multiple devices using the same port (with aciomgr)
* Misc: Fix d3d9ex windowed hook not behaving correctly (size/framed) * Misc: Fix d3d9ex windowed hook not behaving correctly (size/framed)
* Misc: Fix docs not being included with release * Misc: Fix docs not being included with release

View File

@@ -91,6 +91,7 @@ include src/main/camhook/Module.mk
include src/main/cconfig/Module.mk include src/main/cconfig/Module.mk
include src/main/config/Module.mk include src/main/config/Module.mk
include src/main/d3d9exhook/Module.mk include src/main/d3d9exhook/Module.mk
include src/main/ddrhook-util/Module.mk
include src/main/ddrhook/Module.mk include src/main/ddrhook/Module.mk
include src/main/ddrio-mm/Module.mk include src/main/ddrio-mm/Module.mk
include src/main/ddrio-smx/Module.mk include src/main/ddrio-smx/Module.mk
@@ -365,7 +366,7 @@ $(zipdir)/iidx-25-to-26.zip: \
$(V)echo ... $@ $(V)echo ... $@
$(V)zip -j $@ $^ $(V)zip -j $@ $^
$(zipdir)/iidx-27.zip: \ $(zipdir)/iidx-27-to-28.zip: \
build/bin/avs2_1700-64/iidxhook9.dll \ build/bin/avs2_1700-64/iidxhook9.dll \
build/bin/avs2_1700-64/launcher.exe \ build/bin/avs2_1700-64/launcher.exe \
build/bin/indep-64/config.exe \ build/bin/indep-64/config.exe \
@@ -375,7 +376,9 @@ $(zipdir)/iidx-27.zip: \
build/bin/indep-64/vefxio.dll \ build/bin/indep-64/vefxio.dll \
dist/iidx/config.bat \ dist/iidx/config.bat \
dist/iidx/gamestart-27.bat \ dist/iidx/gamestart-27.bat \
dist/iidx/gamestart-28.bat \
dist/iidx/iidxhook-27.conf \ dist/iidx/iidxhook-27.conf \
dist/iidx/iidxhook-28.conf \
dist/iidx/vefx.txt \ dist/iidx/vefx.txt \
| $(zipdir)/ | $(zipdir)/
$(V)echo ... $@ $(V)echo ... $@
@@ -614,7 +617,7 @@ $(BUILDDIR)/bemanitools.zip: \
$(zipdir)/iidx-20.zip \ $(zipdir)/iidx-20.zip \
$(zipdir)/iidx-21-to-24.zip \ $(zipdir)/iidx-21-to-24.zip \
$(zipdir)/iidx-25-to-26.zip \ $(zipdir)/iidx-25-to-26.zip \
$(zipdir)/iidx-27.zip \ $(zipdir)/iidx-27-to-28.zip \
$(zipdir)/iidx-hwio-x86.zip \ $(zipdir)/iidx-hwio-x86.zip \
$(zipdir)/iidx-hwio-x64.zip \ $(zipdir)/iidx-hwio-x64.zip \
$(zipdir)/jb-01.zip \ $(zipdir)/jb-01.zip \

View File

@@ -1,7 +1,7 @@
# Bemanitools 5 # Bemanitools 5
[![pipeline status](https://dev.s-ul.net/djhackers/bemanitools/badges/master/pipeline.svg)](https://dev.s-ul.net/djhackers/bemanitools/commits/master) [![pipeline status](https://dev.s-ul.net/djhackers/bemanitools/badges/master/pipeline.svg)](https://dev.s-ul.net/djhackers/bemanitools/commits/master)
Version: 5.35 Version: 5.36
[Release history](CHANGELOG.md) [Release history](CHANGELOG.md)
@@ -55,7 +55,8 @@ The tl;dr version and golden rules of the sections in the document:
* Beatmania IIDX 24 SINOBUZ (iidx-21-to-24.zip) using [iidxhook7](doc/iidxhook/iidxhook7.md) * Beatmania IIDX 24 SINOBUZ (iidx-21-to-24.zip) using [iidxhook7](doc/iidxhook/iidxhook7.md)
* Beatmania IIDX 25 CANNON BALLERS (iidx-25-to-26.zip) using [iidxhook8](doc/iidxhook/iidxhook8.md) * Beatmania IIDX 25 CANNON BALLERS (iidx-25-to-26.zip) using [iidxhook8](doc/iidxhook/iidxhook8.md)
* Beatmania IIDX 26 Rootage (iidx-25-to-26.zip) using [iidxhook8](doc/iidxhook/iidxhook8.md) * Beatmania IIDX 26 Rootage (iidx-25-to-26.zip) using [iidxhook8](doc/iidxhook/iidxhook8.md)
* Beatmania IIDX 27 Heroic Verse (iidx-27.zip) using [iidxhook9](doc/iidxhook/iidxhook9.md) * Beatmania IIDX 27 Heroic Verse (iidx-27-to-28.zip) using [iidxhook9](doc/iidxhook/iidxhook9.md)
* Beatmania IIDX 28 BISTROVER (iidx-27-to-28.zip) using [iidxhook9](doc/iidxhook/iidxhook9.md)
* jubeat * jubeat
* jubeat (experimental/buggy) (jb-01.zip) using [jbhook1](doc/jbhook1/jbhook1.md) * jubeat (experimental/buggy) (jb-01.zip) using [jbhook1](doc/jbhook1/jbhook1.md)
* jubeat saucer (fulfill) (jb-05-to-07.zip) using jbhook * jubeat saucer (fulfill) (jb-05-to-07.zip) using jbhook

16
dist/iidx/gamestart-28.bat vendored Normal file
View File

@@ -0,0 +1,16 @@
@echo off
cd /d %~dp0
if not exist dev mkdir dev
if not exist dev\e mkdir dev\e
if not exist dev\g mkdir dev\g
if not exist dev\nvram mkdir dev\nvram
if not exist dev\raw mkdir dev\raw
if not exist dev\raw\log mkdir dev\raw\log
if not exist dev\raw\fscache mkdir dev\raw\fscache
for /R prop\defaults %%D in (*.*) do (
if not exist dev\nvram\%%~nxD copy /y prop\defaults\%%~nxD dev\nvram
)
launcher -H 134217728 -B iidxhook9.dll bm2dx.dll --config iidxhook-28.conf %*

78
dist/iidx/iidxhook-28.conf vendored Normal file
View File

@@ -0,0 +1,78 @@
# Disable card reader emulation and enable usage of real card reader hardware on COM0 (for games supporting slotted readers)
io.disable_card_reader_emu=false
# Disable BIO2 emulation and enable usage of real BIO2 hardware
io.disable_bio2_emu=false
# Disables the poll limiter, warning very high CPU usage may arise
io.disable_poll_limiter=false
# Lightning cab mode (requires additional IO emulation)
io.lightning_mode=false
# Disable camera connection
io.disable_cams=true
# Disables the built in file hooks, requiring manual file creation
io.disable_file_hooks=false
# Turntable sensitivity multiplier (1.0 is default)
io.tt_multiplier=1.0
# Disables the camera emulation
cam.disable_emu=true
# Override camera device ID detection (copy from device manager, do not escape)
cam.device_id1=
# Override camera device ID detection (copy from device manager, do not escape)
cam.device_id2=
# Run the game in a framed window (requires windowed option)
gfx.framed=true
# Run the game windowed
gfx.windowed=false
# Confine mouse cursor to window
gfx.confined=false
# Windowed width, -1 for default size
gfx.window_width=-1
# Windowed height, -1 for default size
gfx.window_height=-1
# Windowed X, -1 for default X position
gfx.window_x=-1
# Windowed Y, -1 for default Y position
gfx.window_y=-1
# Forced refresh rate, -1 to not force any (try 59 or 60 if monitor check fails to lock on high refresh rate monitors)
gfx.forced_refresh_rate=-1
# D3D9ex device adapter (monitor), -1 to use default, 0, 1, 2 etc. to use specified adapter
gfx.device_adapter=-1
# Orientation to force monitor into, -1 to use default, 0, 1, 2, 3 to do 0, 90, 180, 270 degrees
gfx.force_orientation=-1
# Force a screen resolution (width), -1 to disable. Use this if the game does not auto detect your monitor's resolution properly, e.g. 1368x768 instead of 1280x720.
gfx.force_screen_res.width=-1
# Force a screen resolution (height), -1 to disable. Use this if the game does not auto detect your monitor's resolution properly, e.g. 1368x768 instead of 1280x720.
gfx.force_screen_res.height=-1
# IP of adapter to force override with
adapter.override_ip=
# Force ASIO audio mode/device (if applicable / TDJ default)
asio.force_asio=false
# Force WASAPI audio mode (if applicable / LDJ default)
asio.force_wasapi=true
# The ASIO device name to use
asio.device_name=XONAR SOUND CARD(64)

View File

@@ -1,21 +1,29 @@
# Bemanitools 5 documentation # Bemanitools 5 documentation
This folder contains various types of documentation. This folder contains various types of documentation.
Table of contents: Table of contents:
* Key tools * Key tools
* [Inject](inject.md): Readme for one of BT5's key applications, `inject.exe` * [Inject](inject.md): Readme for one of BT5's key applications, `inject.exe`
* [Launcher](launcher.md): Readme for another one of BT5's key applications, `launcher.exe` * [Launcher](launcher.md): Readme for another one of BT5's key applications, `launcher.exe`
* [Tools](tools/README.md): Documentation for additional user and development tooling * [Tools](tools/README.md): Documentation for additional user and development tooling
* Game hooks * Game hooks
* [ddrhook](ddrhook/README.md): Documentation relevant to `ddrhook` implementations * [ddrhook](ddrhook/README.md): Documentation relevant to `ddrhook` implementations
* [iidxhook](iidxhook/README.md): Documentation relevant to `iidxhook` implementations * [iidxhook](iidxhook/README.md): Documentation relevant to `iidxhook` implementations
* [jbhook](jbhook/README.md): Documentation relevant to `jbhook` implementations * [jbhook](jbhook/README.md): Documentation relevant to `jbhook` implementations
* [sdvxhook](sdvxhook/README.md): Documentation relevant to `sdvxhook` implementations * [sdvxhook](sdvxhook/README.md): Documentation relevant to `sdvxhook` implementations
* Development * Development
* [API](api.md): Available APIs for BT5 and instructions how to use them * [API](api.md): Available APIs for BT5 and instructions how to use them
* [Architecture](architecture.md): Outline of BT5's architecture, how things are designed and why * [Architecture](architecture.md): Outline of BT5's architecture, how things are designed and why
* [Development](development.md): Development environment, building, releasing, etc. * [Development](development.md): Development environment, building, releasing, etc.
* [Developer documentation](dev/README.md): Various lose documentation/notes by developers * [Developer documentation](dev/README.md): Various lose documentation/notes by developers
* [Tools](tools/README.md): Documentation for additional user and development tooling * [Tools](tools/README.md): Documentation for additional user and development tooling
* Hardware
* [Hardware](hardware/README.md): Anything related to hardware, e.g. IO boards ## Further external documentation
A list of external documentation that can be useful when dealing with bemanitools,
supported data and hardware.
* [arcade-docs](https://github.com/Shizmob/arcade-docs): An open (to read and contribute) repository
of arcade hardware and software documentation

View File

@@ -1,55 +0,0 @@
# BIO2 sub IO turntable bypass cable
If you upgraded a C02 wired cabinet, the turntables are connected to the
sub IO via a serial line that goes to another sub IO behind the front panel
next to the 16seg display. This introduces additional latency as the input
data needs to pass through multiple systems/PCBs until it reaches the game.
This can be reduced by using a so-called "bypass" cable, that connects the
turntables directly to the BIO2 sub IO board by emulating the wiring of a
D01 cabinet, reducing latency significantly.
This cable could be ordered with the IIDX Rootage upgrade kit but can also
be easily created from scratch.
## Parts
* Some wires
* [JST HL](https://jst.de/file/download/219/pitch-3-96-mm-wtw-hl2-pdf) 2x4 pin female connector
* [JST HVQ](https://jst.de/file/download/637/hvq) 8 pin female connector
* Matching terminals for the connectors
## Pinout
```text
JST HL 2x4 pin front view connector
notch at top
___
|---------|
| 1 2 3 4 |
| 5 6 7 8 |
|---------|
```
```
JST HVQ 8 pin front view connector
Numbering on connector matches
notch at top
___________________
-------------------
|-----------------|
| 1 2 3 4 5 6 7 8 |
|-----------------|
```
Pins of the two connectors need to be connected like this:
| JST HL 2x4 pin | JST 8 pin |
|----------------|-----------|
| 1 | 1 |
| 2 | 1 |
| 3 | 3 |
| 4 | 2 |
| 5 | 5 |
| 6 | 4 |
| 7 | 8 |
| 8 | 8 |

View File

@@ -1,51 +0,0 @@
# Ezusb 1/2 RJ45 to DIN8 connector pinout
This was created from using the BIO2 sub IO board to connect pre IIDX 25 cabinet hardware to the
BIO2 IO board. The two connector types from different generation IO boards, RJ45 on the ezusb FX
(C02) board and a round DIN8 connector on the ezusb FX2 (IO2) board are just different connectors to
the same hardware on the PCB.
Therefore, any C02 wired cabinet can be easily upgraded to IO2 wiring and vice versa by building
a simple RJ45 -> DIN8 or DIN8 -> RJ45 adapter.
The following connection information was traced on a original Konami BIO2 sub IO board.
RJ45 (female) connector, top view:
```text
plug insert
|
|
v
|-----------|
| Top view |
| |
| Pins |
| 7 5 3 1 |
| 8 6 4 2 |
|-----------|
```
DIN8 (female) connector, top view:
```text
plug insert
|
|
v
|-----------|
| Top view |
| Pins |
| 3 1 2 6 |
| 7 4 5 8 9 |
|-----------|
```
The two connectors are interconnected on the PCB like this:
| RJ45 pins | DIN8 pins |
|-----------|-----------|
| 1 | 1 |
| 2 | 7 |
| 3 | 4 |
| 4 | 6 |
| 5 | 5 |
| 6 | 3 |
| 7 | 2 |
| 8 | 1 |

View File

@@ -57,6 +57,12 @@ If you want to run the games online, you have to set a valid PCBID and EAMID
argument. You also have to set the url of the eamuse server you want to argument. You also have to set the url of the eamuse server you want to
connect to. connect to.
Additional note regarding EAMID: This is new compared to the prior games and
is provided as the identifier of the "eamuse license" to the server. Depending
on the implementation of the server, this can lead to authentication failure
resulting in
[a network error on boot or warning during gameplay](#network-warning-instead-of-network-ok).
Run the game with the gamestart-XX.bat file and enable network on the operator Run the game with the gamestart-XX.bat file and enable network on the operator
menu. When enabled, the game seems to hang and expects you to power menu. When enabled, the game seems to hang and expects you to power
cycle the machine (i.e. quit the game and restart it). cycle the machine (i.e. quit the game and restart it).
@@ -134,7 +140,7 @@ value to cut down start-up times.
## "NETWORK WARNING" instead of "NETWORK OK" ## "NETWORK WARNING" instead of "NETWORK OK"
This can be caused by: This can be caused by:
* Invalid PCBID * Invalid PCBID/EAMID: Ensure both are [set to the same ID](#eamuse-network-setup)
* Firewall blocking connections * Firewall blocking connections
* Invalid eamuse url or port specified * Invalid eamuse url or port specified
* Game is not run using the Administrator account * Game is not run using the Administrator account

View File

@@ -2,6 +2,7 @@
The following games are compatible with this version of iidxhook: The following games are compatible with this version of iidxhook:
* Heroic Verse * Heroic Verse
* BISTROVER
The games must be bootstrapped using [launcher](../launcher.md). The games must be bootstrapped using [launcher](../launcher.md).

View File

@@ -0,0 +1,28 @@
#!/bin/sh
VERSION="$1"
section_active=""
changelog_excerpt=""
while IFS= read -r line; do
if [ "$section_active" ]; then
if [[ "$(echo "$line" | grep '^#')" ]]; then
section_active=""
else
changelog_excerpt="$(printf "%s\n%s" "$changelog_excerpt" "$line")"
fi
else
if [ "$line" = "## $VERSION" ]; then
section_active="1"
fi
fi
done
if [ "$changelog_excerpt" ]; then
printf "%s" "$changelog_excerpt"
exit 0
else
echo "Could not find version in changelog: $VERSION"
exit 1
fi

View File

@@ -9,7 +9,9 @@
#include "acio/hdxs.h" #include "acio/hdxs.h"
#include "acio/icca.h" #include "acio/icca.h"
#include "acio/kfca.h" #include "acio/kfca.h"
#include "acio/mdxf.h"
#include "acio/panb.h" #include "acio/panb.h"
#include "acio/rvol.h"
#define AC_IO_SOF 0xAA #define AC_IO_SOF 0xAA
#define AC_IO_ESCAPE 0xFF #define AC_IO_ESCAPE 0xFF
@@ -37,9 +39,11 @@ enum ac_io_node_type {
AC_IO_NODE_TYPE_LED_STRIP = 0x04020000, AC_IO_NODE_TYPE_LED_STRIP = 0x04020000,
AC_IO_NODE_TYPE_LED_SPIKE = 0x05010000, AC_IO_NODE_TYPE_LED_SPIKE = 0x05010000,
AC_IO_NODE_TYPE_KFCA = 0x09060000, AC_IO_NODE_TYPE_KFCA = 0x09060000,
AC_IO_NODE_TYPE_BI2A = 0x0d060000,
AC_IO_NODE_TYPE_RVOL = 0x09060001, AC_IO_NODE_TYPE_RVOL = 0x09060001,
AC_IO_NODE_TYPE_MDXF = 0x09070000,
AC_IO_NODE_TYPE_PANB = 0x090E0000, AC_IO_NODE_TYPE_PANB = 0x090E0000,
AC_IO_NODE_TYPE_BMPU = 0x0B000000,
AC_IO_NODE_TYPE_BI2A = 0x0D060000,
}; };
#pragma pack(push, 1) #pragma pack(push, 1)
@@ -84,6 +88,12 @@ struct ac_io_message {
struct ac_io_panb_poll_out panb_poll_out; struct ac_io_panb_poll_out panb_poll_out;
struct ac_io_hdxs_output hdxs_output; struct ac_io_hdxs_output hdxs_output;
struct ac_io_rvol_poll_in rvol_poll_in;
struct ac_io_rvol_poll_out rvol_poll_out;
struct ac_io_mdxf_poll_in mdxf_poll_in;
struct ac_io_mdxf_light_out mdxf_light_out;
}; };
} cmd; } cmd;

View File

@@ -10,7 +10,7 @@ enum ac_io_icca_cmd {
AC_IO_ICCA_CMD_ENGAGE = 0x0131, AC_IO_ICCA_CMD_ENGAGE = 0x0131,
AC_IO_ICCA_CMD_POLL = 0x0134, AC_IO_ICCA_CMD_POLL = 0x0134,
AC_IO_ICCA_CMD_SET_SLOT_STATE = 0x0135, AC_IO_ICCA_CMD_SET_SLOT_STATE = 0x0135,
AC_IO_ICCA_CMD_BEGIN_KEYPAD = 0x013A, AC_IO_ICCA_CMD_DEVICE_CONTROL = 0x013A,
AC_IO_ICCA_CMD_POLL_FELICA = 0x0161, AC_IO_ICCA_CMD_POLL_FELICA = 0x0161,
AC_IO_ICCA_CMD_KEY_EXCHANGE = 0x0160, AC_IO_ICCA_CMD_KEY_EXCHANGE = 0x0160,
AC_IO_ICCA_CMD_POLL_ENCRYPTED = 0x0164, AC_IO_ICCA_CMD_POLL_ENCRYPTED = 0x0164,

49
src/main/acio/mdxf.h Normal file
View File

@@ -0,0 +1,49 @@
#ifndef AC_IO_MDXF_H
#define AC_IO_MDXF_H
#include <stdint.h>
#define AC_IO_CMD_MDXF_POLL 0x0110
#define AC_IO_CMD_MDXF_AUTO_GET_START 0x0116
#define AC_IO_CMD_MDXF_LIGHT 0x0113
#pragma pack(push, 1)
union mdxf_panel_sensors_individual {
struct {
uint8_t right : 1;
uint8_t left : 1;
uint8_t down : 1;
uint8_t up : 1;
uint8_t unused : 4;
};
uint8_t raw;
};
struct mdxf_panel_sensors {
uint8_t down : 4;
uint8_t up : 4;
uint8_t right : 4;
uint8_t left : 4;
};
struct ac_io_mdxf_poll_in {
struct mdxf_panel_sensors panel;
uint8_t unk;
};
struct mdxf_lights {
uint8_t up_right;
uint8_t down_left;
uint8_t up_left;
uint8_t down_right;
uint8_t unk;
};
struct ac_io_mdxf_light_out {
struct mdxf_lights side[2];
};
#pragma pack(pop)
#endif

74
src/main/acio/rvol.h Normal file
View File

@@ -0,0 +1,74 @@
#ifndef AC_IO_RVOL_H
#define AC_IO_RVOL_H
#include <stdint.h>
// technically RVOL also can poll with CMD 0x0113
// but museca never uses this (it's controlled by if the watchdog is on/off)
#define AC_IO_CMD_RVOL_POLL 0x0112
#define AC_IO_CMD_RVOL_SET_EXPAND_MODE 0x0114
#define AC_IO_CMD_RVOL_AMP_CONTROL 0x0128
#pragma pack(push, 1)
struct ac_io_rvol_buttons_1 {
uint8_t unk0 : 1;
uint8_t unk1 : 1;
uint8_t spinner_4 : 1;
uint8_t pedal : 1;
uint8_t spinner_5 : 1;
uint8_t unk5 : 1;
uint8_t unk6 : 1;
uint8_t unk7 : 1;
};
struct ac_io_rvol_buttons_2 {
uint8_t spinner_2 : 1;
uint8_t unk1 : 1;
uint8_t unk2 : 1;
uint8_t spinner_1 : 1;
uint8_t unk4 : 1;
uint8_t unk5 : 1;
uint8_t unk6 : 1;
uint8_t unk7 : 1;
};
struct ac_io_rvol_buttons_3 {
uint8_t unk0 : 1;
uint8_t unk1 : 1;
uint8_t unk2 : 1;
uint8_t spinner_3 : 1;
uint8_t unk4 : 1;
uint8_t unk5 : 1;
uint8_t unk6 : 1;
uint8_t unk7 : 1;
};
struct ac_io_rvol_poll_in {
uint8_t unk_0;
struct ac_io_rvol_buttons_1 buttons_1;
uint8_t unk_2_8[7];
struct ac_io_rvol_buttons_2 buttons_2;
uint8_t unk_10;
struct ac_io_rvol_buttons_3 buttons_3;
uint8_t unk_12_15[4];
uint8_t spinners[5];
uint8_t unk_21_22[2];
};
struct light_rgb {
uint8_t r;
uint8_t g;
uint8_t b;
};
struct ac_io_rvol_poll_out {
uint8_t unk0_3[4];
struct light_rgb spinner[5];
struct light_rgb title;
uint8_t unk22_31[10];
};
#pragma pack(pop)
#endif

View File

@@ -8,5 +8,6 @@ src_aciodrv := \
icca.c \ icca.c \
kfca.c \ kfca.c \
panb.c \ panb.c \
rvol.c \
port.c \ port.c \

View File

@@ -300,6 +300,7 @@ static bool aciodrv_device_get_version(struct aciodrv_device_ctx *device, uint8_
msg.cmd.version.time); msg.cmd.version.time);
memcpy(version->product, msg.cmd.version.product_code, ACIO_NODE_PRODUCT_CODE_LEN); memcpy(version->product, msg.cmd.version.product_code, ACIO_NODE_PRODUCT_CODE_LEN);
version->type = ac_io_u32(msg.cmd.version.type);
version->major = msg.cmd.version.major; version->major = msg.cmd.version.major;
version->minor = msg.cmd.version.minor; version->minor = msg.cmd.version.minor;
version->revision = msg.cmd.version.revision; version->revision = msg.cmd.version.revision;
@@ -392,6 +393,14 @@ bool aciodrv_device_get_node_product_ident(struct aciodrv_device_ctx *device, ui
memcpy(product, device->node_versions[node_id].product, ACIO_NODE_PRODUCT_CODE_LEN); memcpy(product, device->node_versions[node_id].product, ACIO_NODE_PRODUCT_CODE_LEN);
return true; return true;
} }
uint32_t aciodrv_device_get_node_product_type(struct aciodrv_device_ctx *device, uint8_t node_id)
{
if (device->node_count == 0 || node_id > device->node_count) {
return 0;
}
return device->node_versions[node_id].type;
}
const struct aciodrv_device_node_version *aciodrv_device_get_node_product_version(struct aciodrv_device_ctx *device, uint8_t node_id) const struct aciodrv_device_node_version *aciodrv_device_get_node_product_version(struct aciodrv_device_ctx *device, uint8_t node_id)
{ {

View File

@@ -13,6 +13,7 @@ struct aciodrv_device_ctx;
struct aciodrv_device_node_version { struct aciodrv_device_node_version {
char product[ACIO_NODE_PRODUCT_CODE_LEN]; char product[ACIO_NODE_PRODUCT_CODE_LEN];
uint32_t type;
uint8_t major; uint8_t major;
uint8_t minor; uint8_t minor;
uint8_t revision; uint8_t revision;
@@ -52,6 +53,15 @@ uint8_t aciodrv_device_get_node_count(struct aciodrv_device_ctx *device);
*/ */
bool aciodrv_device_get_node_product_ident(struct aciodrv_device_ctx *device, uint8_t node_id, char product[ACIO_NODE_PRODUCT_CODE_LEN]); bool aciodrv_device_get_node_product_ident(struct aciodrv_device_ctx *device, uint8_t node_id, char product[ACIO_NODE_PRODUCT_CODE_LEN]);
/**
* Get the product identifier of an enumerated node.
*
* @param device Context of opened device
* @param node_id Id of the node. Needs to be in range of the total node count.
* @return product type ID on success, or 0 on failure
*/
uint32_t aciodrv_device_get_node_product_type(struct aciodrv_device_ctx *device, uint8_t node_id);
/** /**
* Get the product version of an enumerated node. * Get the product version of an enumerated node.
* *

80
src/main/aciodrv/rvol.c Normal file
View File

@@ -0,0 +1,80 @@
#define LOG_MODULE "aciodrv-rvol"
#include <stdio.h>
#include <string.h>
#include "aciodrv/device.h"
#include "util/log.h"
static bool aciodrv_rvol_change_expand_mode(
struct aciodrv_device_ctx *device,
uint8_t node_id,
uint8_t mode)
{
struct ac_io_message msg;
log_assert(device);
msg.addr = node_id + 1;
msg.cmd.code = ac_io_u16(AC_IO_CMD_RVOL_SET_EXPAND_MODE);
msg.cmd.nbytes = 1;
msg.cmd.raw[0] = (mode | (2 * mode)) << 6;
if (!aciodrv_send_and_recv(
device, &msg, offsetof(struct ac_io_message, cmd.raw) + 1)) {
log_warning("RVOL change expand mode failed %d", node_id);
return false;
}
log_info("I/O expand mode set %d, mode: %d",
node_id, mode);
return true;
}
bool aciodrv_rvol_init(
struct aciodrv_device_ctx *device,
uint8_t node_id)
{
log_assert(device);
if (!aciodrv_rvol_change_expand_mode(device, node_id, 1)) {
return false;
}
return true;
}
bool aciodrv_rvol_poll(
struct aciodrv_device_ctx *device,
uint8_t node_id,
const struct ac_io_rvol_poll_out *pout,
struct ac_io_rvol_poll_in *pin)
{
struct ac_io_message msg;
log_assert(device);
log_assert(pout);
msg.addr = node_id + 1;
msg.cmd.code = ac_io_u16(AC_IO_CMD_RVOL_POLL);
msg.cmd.nbytes = sizeof(*pout);
/* buffer size of data we expect */
msg.cmd.rvol_poll_out = *pout;
if (!aciodrv_send_and_recv(
device,
&msg,
offsetof(struct ac_io_message, cmd.raw) + sizeof(*pin))) {
log_warning("Polling of node %d failed", node_id + 1);
return false;
}
if (pin != NULL) {
memcpy(pin, &msg.cmd.rvol_poll_in, sizeof(*pin));
}
return true;
}

36
src/main/aciodrv/rvol.h Normal file
View File

@@ -0,0 +1,36 @@
#ifndef ACIODRV_RVOL_H
#define ACIODRV_RVOL_H
#include "acio/rvol.h"
/**
* Initialize a Revolte (KFCA 1.5) IO board
*
* @param device Context of opened device
* @param node_id Id of the node to initialize (0 based).
* @return True if successful, false on error.
* @note This module is supposed to be used in combination with the common
* device driver foundation.
* @see driver.h
*/
bool aciodrv_rvol_init(struct aciodrv_device_ctx *device, uint8_t node_id);
/**
* Poll a Revolte (KFCA 1.5) IO board
*
* @param device Context of opened device
* @param node_id Id of the node to query (0 based).
* @param pout Pointer to a state struct to write to device
* @param pin Pointer to a state struct to return the current state to
* @return True on success, false on error.
* @note This module is supposed to be used in combination with the common
* device driver foundation.
* @see driver.h
*/
bool aciodrv_rvol_poll(
struct aciodrv_device_ctx *device,
uint8_t node_id,
const struct ac_io_rvol_poll_out *pout,
struct ac_io_rvol_poll_in *pin);
#endif

View File

@@ -125,8 +125,8 @@ void ac_io_emu_icca_dispatch_request(
break; break;
case AC_IO_ICCA_CMD_BEGIN_KEYPAD: case AC_IO_ICCA_CMD_DEVICE_CONTROL:
log_misc("AC_IO_ICCA_CMD_BEGIN_KEYPAD(%d)", req->addr); log_misc("AC_IO_ICCA_CMD_DEVICE_CONTROL(%d)", req->addr);
ac_io_emu_icca_send_status(icca, req, 0x00); ac_io_emu_icca_send_status(icca, req, 0x00);
icca->keypad_started = true; icca->keypad_started = true;

View File

@@ -9,6 +9,7 @@ libs_aciotest := \
src_aciotest := \ src_aciotest := \
icca.c \ icca.c \
kfca.c \ kfca.c \
bi2a-sdvx.c \
panb.c \ panb.c \
rvol.c \
bi2a-sdvx.c \
main.c \ main.c \

View File

@@ -11,6 +11,7 @@
#include "aciotest/icca.h" #include "aciotest/icca.h"
#include "aciotest/kfca.h" #include "aciotest/kfca.h"
#include "aciotest/panb.h" #include "aciotest/panb.h"
#include "aciotest/rvol.h"
#include "util/log.h" #include "util/log.h"
@@ -21,31 +22,37 @@ static uint8_t bi2a_mode = 0;
* Enumerate supported ACIO nodes based on their product id. * Enumerate supported ACIO nodes based on their product id.
*/ */
static bool aciotest_assign_handler( static bool aciotest_assign_handler(
char product[4], struct aciotest_handler_node_handler *handler) uint32_t product_type, struct aciotest_handler_node_handler *handler)
{ {
if (!memcmp(product, "ICCA", 4) || !memcmp(product, "ICCB", 4) || if (product_type == AC_IO_NODE_TYPE_ICCA) {
!memcmp(product, "ICCC", 4)) {
handler->init = aciotest_icca_handler_init; handler->init = aciotest_icca_handler_init;
handler->update = aciotest_icca_handler_update; handler->update = aciotest_icca_handler_update;
return true; return true;
} }
if (!memcmp(product, "KFCA", 4)) { if (product_type == AC_IO_NODE_TYPE_KFCA) {
handler->init = aciotest_kfca_handler_init; handler->init = aciotest_kfca_handler_init;
handler->update = aciotest_kfca_handler_update; handler->update = aciotest_kfca_handler_update;
return true; return true;
} }
if (!memcmp(product, "PANB", 4)) { if (product_type == AC_IO_NODE_TYPE_PANB) {
handler->init = aciotest_panb_handler_init; handler->init = aciotest_panb_handler_init;
handler->update = aciotest_panb_handler_update; handler->update = aciotest_panb_handler_update;
return true; return true;
} }
if (!memcmp(product, "BI2A", 4)) { if (product_type == AC_IO_NODE_TYPE_RVOL) {
handler->init = aciotest_rvol_handler_init;
handler->update = aciotest_rvol_handler_update;
return true;
}
if (product_type == AC_IO_NODE_TYPE_BI2A) {
if (bi2a_mode == 0) { if (bi2a_mode == 0) {
handler->init = aciotest_bi2a_sdvx_handler_init; handler->init = aciotest_bi2a_sdvx_handler_init;
handler->update = aciotest_bi2a_sdvx_handler_update; handler->update = aciotest_bi2a_sdvx_handler_update;
@@ -99,22 +106,22 @@ int main(int argc, char **argv)
for (uint8_t i = 0; i < node_count; i++) { for (uint8_t i = 0; i < node_count; i++) {
char product[4]; char product[4];
uint32_t product_type = aciodrv_device_get_node_product_type(device, i);
aciodrv_device_get_node_product_ident(device, i, product); aciodrv_device_get_node_product_ident(device, i, product);
printf( printf(
"> %d: %c%c%c%c\n", "> %d: %c%c%c%c (%08x)\n",
i + 1, i + 1,
product[0], product[0],
product[1], product[1],
product[2], product[2],
product[3]); product[3],
product_type);
if (!aciotest_assign_handler(product, &handler[i])) { if (!aciotest_assign_handler(product_type, &handler[i])) {
printf( printf(
"ERROR: Unsupported acio node product %c%c%c%c on node %d\n", "ERROR: Unsupported acio node product %08x on node %d\n",
product[0], product_type,
product[1],
product[2],
product[3],
i); i);
} }
} }

73
src/main/aciotest/rvol.c Normal file
View File

@@ -0,0 +1,73 @@
#include "aciotest/rvol.h"
#include "acio/acio.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "aciodrv/rvol.h"
static struct ac_io_rvol_poll_out pout;
bool aciotest_rvol_handler_init(
struct aciodrv_device_ctx *device, uint8_t node_id, void **ctx)
{
memset(&pout, 0, sizeof(pout));
return aciodrv_rvol_init(device, node_id);
}
bool aciotest_rvol_handler_update(
struct aciodrv_device_ctx *device, uint8_t node_id, void *ctx)
{
struct ac_io_rvol_poll_in pin;
if (!aciodrv_rvol_poll(device, node_id, &pout, &pin)) {
return false;
}
uint8_t selected_light = pin.spinners[0] / 43;
printf(
">>> RVOL %d\n"
"Press: %3d %3d %3d\n"
" %3d %3d\n"
"\n"
"Spin: %3d %3d %3d\n"
" %3d %3d\n"
"\n"
"Pedal: %3d\n"
"\n"
"Editing light #%d R: %d G: %d B: %d\n"
"(Change light with Spinner 1, values with 3-5)\n",
node_id,
pin.buttons_2.spinner_1,
pin.buttons_3.spinner_3,
pin.buttons_1.spinner_5,
pin.buttons_2.spinner_2,
pin.buttons_1.spinner_4,
pin.spinners[0],
pin.spinners[2],
pin.spinners[4],
pin.spinners[1],
pin.spinners[3],
!pin.buttons_1.pedal,
selected_light,
pin.spinners[2] / 2,
pin.spinners[3] / 2,
pin.spinners[4] / 2
);
memset(&pout, 0, sizeof(pout));
if (selected_light == 5) {
pout.title.r = pin.spinners[2] / 2;
pout.title.g = pin.spinners[3] / 2;
pout.title.b = pin.spinners[4] / 2;
} else {
pout.spinner[selected_light].r = pin.spinners[2] / 2;
pout.spinner[selected_light].g = pin.spinners[3] / 2;
pout.spinner[selected_light].b = pin.spinners[4] / 2;
}
return true;
}

14
src/main/aciotest/rvol.h Normal file
View File

@@ -0,0 +1,14 @@
#ifndef ACIOTEST_RVOL_H
#define ACIOTEST_RVOL_H
#include <stdbool.h>
#include <stdint.h>
#include "aciodrv/device.h"
bool aciotest_rvol_handler_init(
struct aciodrv_device_ctx *device, uint8_t node_id, void **ctx);
bool aciotest_rvol_handler_update(
struct aciodrv_device_ctx *device, uint8_t node_id, void *ctx);
#endif

56
src/main/bio2/bi2a-ddr.h Normal file
View File

@@ -0,0 +1,56 @@
#ifndef BIO2_BI2A_DDR
#define BIO2_BI2A_DDR
#include "bio2/bio2.h"
#pragma pack(push, 1)
struct bi2a_ddr_system_panel {
uint8_t b_unk1 : 1;
uint8_t b_coin : 1;
uint8_t b_service : 1;
uint8_t b_test : 1;
uint8_t b_un2 : 4;
};
struct bi2a_ddr_player_1_panel {
uint8_t b_unk : 3;
uint8_t b_right : 1;
uint8_t b_left : 1;
uint8_t b_down : 1;
uint8_t b_up : 1;
uint8_t b_start : 1;
};
struct bi2a_ddr_player_2_panel {
uint8_t b_unk1 : 1;
uint8_t b_right : 1;
uint8_t b_left : 1;
uint8_t b_down : 1;
uint8_t b_up : 1;
uint8_t b_start : 1;
uint8_t b_unk2 : 2;
};
struct bi2a_ddr_state_in {
uint8_t unk1;
struct bi2a_ddr_system_panel system;
uint8_t unk2[7];
struct bi2a_ddr_player_1_panel player_1;
struct bi2a_ddr_player_2_panel player_2;
uint8_t unk3[5];
};
struct bi2a_ddr_state_out {
uint8_t unk1[40];
};
_Static_assert(
sizeof(struct bi2a_ddr_state_in) == 16,
"bi2a_ddr_state_in is the wrong size");
_Static_assert(
sizeof(struct bi2a_ddr_state_out) == 40,
"bi2a_ddr_state_out is the wrong size");
#pragma pack(pop)
#endif

View File

@@ -11,6 +11,11 @@ enum bio2_bi2a_cmd {
BIO2_BI2A_CMD_INIT = 0x0100, BIO2_BI2A_CMD_INIT = 0x0100,
BIO2_BI2A_CMD_WATCHDOG = 0x0120, BIO2_BI2A_CMD_WATCHDOG = 0x0120,
BIO2_BI2A_CMD_POLL = 0x0152, // For IIDX BIO2_BI2A_CMD_POLL = 0x0152, // For IIDX
// For games using libacio for BIO2 communication
BIO2_BI2A_CMD_ACIO_POLL_NOWD = 0x0112,
BIO2_BI2A_CMD_ACIO_POLL_WD = 0x0113,
BIO2_BI2A_CMD_TAPELED_INIT = 0x0140,
BIO2_BI2A_CMD_TAPELED_SEND = 0x0141,
}; };
#endif #endif

View File

@@ -0,0 +1,13 @@
libs += ddrhook-util
libs_ddrhook-util := \
hook \
hooklib \
util \
src_ddrhook-util := \
dinput.c \
gfx.c \
guid.c \
misc.c \
monitor.c \

View File

@@ -1,4 +1,4 @@
#include <initguid.h> #include <initguid.h>
#include <windows.h> #include <windows.h>
#include "ddrhook/monitor.h" #include "ddrhook-util/monitor.h"

View File

@@ -2,7 +2,7 @@
#include <stdint.h> #include <stdint.h>
#include "ddrhook/gfx.h" #include "ddrhook-util/gfx.h"
#include "hook/pe.h" #include "hook/pe.h"
#include "hook/table.h" #include "hook/table.h"

View File

@@ -7,7 +7,7 @@
#include <stdbool.h> #include <stdbool.h>
#include <wchar.h> #include <wchar.h>
#include "ddrhook/monitor.h" #include "ddrhook-util/monitor.h"
#include "hook/table.h" #include "hook/table.h"

View File

@@ -5,6 +5,7 @@ deplibs_ddrhook := \
libs_ddrhook := \ libs_ddrhook := \
acioemu \ acioemu \
ddrhook-util \
p3ioemu \ p3ioemu \
p3io \ p3io \
hook \ hook \
@@ -17,12 +18,7 @@ src_ddrhook := \
extio.c \ extio.c \
dllmain.c \ dllmain.c \
_com4.c \ _com4.c \
dinput.c \
gfx.c \
guid.c \
master.c \ master.c \
misc.c \
monitor.c \
p3io.c \ p3io.c \
usbmem.c \ usbmem.c \
spike.c spike.c

View File

@@ -5,9 +5,10 @@
#include "bemanitools/ddrio.h" #include "bemanitools/ddrio.h"
#include "bemanitools/eamio.h" #include "bemanitools/eamio.h"
#include "ddrhook-util/gfx.h"
#include "ddrhook/_com4.h" #include "ddrhook/_com4.h"
#include "ddrhook/extio.h" #include "ddrhook/extio.h"
#include "ddrhook/gfx.h"
#include "ddrhook/master.h" #include "ddrhook/master.h"
#include "ddrhook/p3io.h" #include "ddrhook/p3io.h"
#include "ddrhook/spike.h" #include "ddrhook/spike.h"

View File

@@ -1,8 +1,9 @@
#include "ddrhook/master.h" #include "ddrhook/master.h"
#include "ddrhook/dinput.h"
#include "ddrhook/gfx.h" #include "ddrhook-util/dinput.h"
#include "ddrhook/misc.h" #include "ddrhook-util/gfx.h"
#include "ddrhook/monitor.h" #include "ddrhook-util/misc.h"
#include "ddrhook-util/monitor.h"
#include "hook/table.h" #include "hook/table.h"

View File

@@ -168,6 +168,14 @@ void eamuse_set_addr(const struct net_addr *addr)
tmp_str2 = net_addr_to_str(&eamuse_server_addr_resolved); tmp_str2 = net_addr_to_str(&eamuse_server_addr_resolved);
// when resolving URLs with net_str_parse
// it will default to NET_INVALID_PORT if no port is specified
// assume default 80 here as a good sanity check
if (eamuse_server_addr_resolved.ipv4.port == NET_INVALID_PORT) {
log_info("No port was specified, using port 80 as fallback");
eamuse_server_addr_resolved.ipv4.port = 80;
}
log_info("Target eamuse server %s resolved to %s", tmp_str, tmp_str2); log_info("Target eamuse server %s resolved to %s", tmp_str, tmp_str2);
free(tmp_str); free(tmp_str);