forked from Hay1tsme/segatools
Compare commits
54 Commits
2024-09-30
...
develop
Author | SHA1 | Date | |
---|---|---|---|
12dbf7a90c | |||
61f95c3f2e | |||
70c3e2fe0f | |||
369fe28687 | |||
3371f3f437 | |||
a57542c2d2
|
|||
27116a7a41
|
|||
e850346b79
|
|||
4d0ef54279
|
|||
b8af67377c
|
|||
4cb76dd1ee
|
|||
efe01d92a6 | |||
004a2f6dcd | |||
a1611afffc | |||
1d63ab24d3 | |||
2f54183636 | |||
402bf0f247 | |||
4c20deb60a | |||
96ee1afc2f | |||
0c28765bdd | |||
96bf8cab81
|
|||
a3120181be
|
|||
80d4902cfc
|
|||
b4f5cdbe59 | |||
25431a9db1 | |||
a705ae8748 | |||
b52455339f | |||
ff21223f06 | |||
047733d122 | |||
21bb965382 | |||
11556a1332 | |||
d8202e1df4 | |||
2d3d6fc2bb | |||
6d8ffb46ef | |||
2069b1ea85 | |||
c80f903cf8 | |||
ceb2b63e8b | |||
83840e0a87 | |||
e50d6d8ebc | |||
e1a47cf365 | |||
8aef1cfa79 | |||
8fc24503c8
|
|||
ebf0f0b428 | |||
892eb2b859
|
|||
b80b9fbc19 | |||
cef3406691 | |||
97d2d6b9bc | |||
f39b9ce3a0 | |||
243bb778d1 | |||
66317a0054
|
|||
8c24e04900 | |||
3bb9404a38 | |||
6819963f06 | |||
4fa9abffe8 |
4
.clang-format
Normal file
4
.clang-format
Normal file
@ -0,0 +1,4 @@
|
||||
---
|
||||
BasedOnStyle: Google
|
||||
IndentWidth: 4
|
||||
---
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -21,3 +21,6 @@ subprojects/capnhook
|
||||
|
||||
# For enabling debug logging on local builds
|
||||
MesonLocalOptions.mk
|
||||
|
||||
# Some meson cache thing
|
||||
.meson-subproject-wrap-hash.txt
|
||||
|
30
Package.mk
30
Package.mk
@ -5,7 +5,7 @@ $(BUILD_DIR_ZIP)/chuni.zip:
|
||||
$(V)cp $(BUILD_DIR_32)/subprojects/capnhook/inject/inject.exe \
|
||||
$(BUILD_DIR_32)/chunihook/chunihook.dll \
|
||||
$(DIST_DIR)/chuni/segatools.ini \
|
||||
$(DIST_DIR)/chuni/start.bat \
|
||||
$(DIST_DIR)/chuni/launch.bat \
|
||||
$(BUILD_DIR_ZIP)/chuni
|
||||
$(V)cp pki/billing.pub \
|
||||
pki/ca.crt \
|
||||
@ -20,7 +20,7 @@ $(BUILD_DIR_ZIP)/cxb.zip:
|
||||
$(V)cp $(BUILD_DIR_32)/subprojects/capnhook/inject/inject.exe \
|
||||
$(BUILD_DIR_32)/cxbhook/cxbhook.dll \
|
||||
$(DIST_DIR)/cxb/segatools.ini \
|
||||
$(DIST_DIR)/cxb/start.bat \
|
||||
$(DIST_DIR)/cxb/launch.bat \
|
||||
$(BUILD_DIR_ZIP)/cxb
|
||||
$(V)cp pki/billing.pub \
|
||||
pki/ca.crt \
|
||||
@ -35,7 +35,7 @@ $(BUILD_DIR_ZIP)/diva.zip:
|
||||
$(V)cp $(BUILD_DIR_64)/subprojects/capnhook/inject/inject.exe \
|
||||
$(BUILD_DIR_64)/divahook/divahook.dll \
|
||||
$(DIST_DIR)/diva/segatools.ini \
|
||||
$(DIST_DIR)/diva/start.bat \
|
||||
$(DIST_DIR)/diva/launch.bat \
|
||||
$(BUILD_DIR_ZIP)/diva
|
||||
$(V)cp pki/billing.pub \
|
||||
pki/ca.crt \
|
||||
@ -50,7 +50,7 @@ $(BUILD_DIR_ZIP)/carol.zip:
|
||||
$(V)cp $(BUILD_DIR_32)/subprojects/capnhook/inject/inject.exe \
|
||||
$(BUILD_DIR_32)/carolhook/carolhook.dll \
|
||||
$(DIST_DIR)/carol/segatools.ini \
|
||||
$(DIST_DIR)/carol/start.bat \
|
||||
$(DIST_DIR)/carol/launch.bat \
|
||||
$(BUILD_DIR_ZIP)/carol
|
||||
$(V)cp pki/billing.pub \
|
||||
pki/ca.crt \
|
||||
@ -65,7 +65,7 @@ $(BUILD_DIR_ZIP)/idz.zip:
|
||||
$(V)cp $(BUILD_DIR_64)/subprojects/capnhook/inject/inject.exe \
|
||||
$(BUILD_DIR_64)/idzhook/idzhook.dll \
|
||||
$(DIST_DIR)/idz/segatools.ini \
|
||||
$(DIST_DIR)/idz/start.bat \
|
||||
$(DIST_DIR)/idz/launch.bat \
|
||||
$(BUILD_DIR_ZIP)/idz
|
||||
$(V)cp pki/billing.pub \
|
||||
pki/ca.crt \
|
||||
@ -80,7 +80,7 @@ $(BUILD_DIR_ZIP)/fgo.zip:
|
||||
$(V)cp $(BUILD_DIR_64)/subprojects/capnhook/inject/inject.exe \
|
||||
$(BUILD_DIR_64)/fgohook/fgohook.dll \
|
||||
$(DIST_DIR)/fgo/segatools.ini \
|
||||
$(DIST_DIR)/fgo/start.bat \
|
||||
$(DIST_DIR)/fgo/launch.bat \
|
||||
$(BUILD_DIR_ZIP)/fgo
|
||||
$(V)cp pki/billing.pub \
|
||||
pki/ca.crt \
|
||||
@ -96,7 +96,7 @@ $(BUILD_DIR_ZIP)/idac.zip:
|
||||
$(BUILD_DIR_64)/idachook/idachook.dll \
|
||||
$(DIST_DIR)/idac/segatools.ini \
|
||||
$(DIST_DIR)/idac/config_hook.json \
|
||||
$(DIST_DIR)/idac/start.bat \
|
||||
$(DIST_DIR)/idac/launch.bat \
|
||||
$(BUILD_DIR_ZIP)/idac
|
||||
$(V)cp pki/billing.pub \
|
||||
pki/ca.crt \
|
||||
@ -112,7 +112,7 @@ $(BUILD_DIR_ZIP)/swdc.zip:
|
||||
$(BUILD_DIR_64)/swdchook/swdchook.dll \
|
||||
$(DIST_DIR)/swdc/segatools.ini \
|
||||
$(DIST_DIR)/swdc/config_hook.json \
|
||||
$(DIST_DIR)/swdc/start.bat \
|
||||
$(DIST_DIR)/swdc/launch.bat \
|
||||
$(BUILD_DIR_ZIP)/swdc
|
||||
$(V)cp pki/billing.pub \
|
||||
pki/ca.crt \
|
||||
@ -127,7 +127,7 @@ $(BUILD_DIR_ZIP)/mercury.zip:
|
||||
$(V)cp $(BUILD_DIR_64)/subprojects/capnhook/inject/inject.exe \
|
||||
$(BUILD_DIR_64)/mercuryhook/mercuryhook.dll \
|
||||
$(DIST_DIR)/mercury/segatools.ini \
|
||||
$(DIST_DIR)/mercury/start.bat \
|
||||
$(DIST_DIR)/mercury/launch.bat \
|
||||
$(BUILD_DIR_ZIP)/mercury
|
||||
$(V)cp pki/billing.pub \
|
||||
pki/ca.crt \
|
||||
@ -141,7 +141,7 @@ $(BUILD_DIR_ZIP)/chusan.zip:
|
||||
$(V)mkdir -p $(BUILD_DIR_ZIP)/chusan/DEVICE
|
||||
$(V)cp $(DIST_DIR)/chusan/segatools.ini \
|
||||
$(DIST_DIR)/chusan/config_hook.json \
|
||||
$(DIST_DIR)/chusan/start.bat \
|
||||
$(DIST_DIR)/chusan/launch.bat \
|
||||
$(BUILD_DIR_ZIP)/chusan
|
||||
$(V)cp $(BUILD_DIR_32)/chusanhook/chusanhook.dll \
|
||||
$(BUILD_DIR_ZIP)/chusan/chusanhook_x86.dll
|
||||
@ -164,7 +164,7 @@ $(BUILD_DIR_ZIP)/mu3.zip:
|
||||
$(V)cp $(BUILD_DIR_64)/subprojects/capnhook/inject/inject.exe \
|
||||
$(BUILD_DIR_64)/mu3hook/mu3hook.dll \
|
||||
$(DIST_DIR)/mu3/segatools.ini \
|
||||
$(DIST_DIR)/mu3/start.bat \
|
||||
$(DIST_DIR)/mu3/launch.bat \
|
||||
$(BUILD_DIR_ZIP)/mu3
|
||||
$(V)cp pki/billing.pub \
|
||||
pki/ca.crt \
|
||||
@ -179,7 +179,7 @@ $(BUILD_DIR_ZIP)/mai2.zip:
|
||||
$(V)cp $(BUILD_DIR_64)/subprojects/capnhook/inject/inject.exe \
|
||||
$(BUILD_DIR_64)/mai2hook/mai2hook.dll \
|
||||
$(DIST_DIR)/mai2/segatools.ini \
|
||||
$(DIST_DIR)/mai2/start.bat \
|
||||
$(DIST_DIR)/mai2/launch.bat \
|
||||
$(BUILD_DIR_ZIP)/mai2
|
||||
$(V)cp pki/billing.pub \
|
||||
pki/ca.crt \
|
||||
@ -195,7 +195,7 @@ $(BUILD_DIR_ZIP)/cm.zip:
|
||||
$(BUILD_DIR_64)/cmhook/cmhook.dll \
|
||||
$(DIST_DIR)/cm/config_hook.json \
|
||||
$(DIST_DIR)/cm/segatools.ini \
|
||||
$(DIST_DIR)/cm/start.bat \
|
||||
$(DIST_DIR)/cm/launch.bat \
|
||||
$(BUILD_DIR_ZIP)/cm
|
||||
$(V)cp pki/billing.pub \
|
||||
pki/ca.crt \
|
||||
@ -211,7 +211,7 @@ $(BUILD_DIR_ZIP)/tokyo.zip:
|
||||
$(BUILD_DIR_64)/tokyohook/tokyohook.dll \
|
||||
$(DIST_DIR)/tokyo/config_hook.json \
|
||||
$(DIST_DIR)/tokyo/segatools.ini \
|
||||
$(DIST_DIR)/tokyo/start.bat \
|
||||
$(DIST_DIR)/tokyo/launch.bat \
|
||||
$(BUILD_DIR_ZIP)/tokyo
|
||||
$(V)cp pki/billing.pub \
|
||||
pki/ca.crt \
|
||||
@ -224,7 +224,7 @@ $(BUILD_DIR_ZIP)/kemono.zip:
|
||||
$(V)mkdir -p $(BUILD_DIR_ZIP)/kemono
|
||||
$(V)mkdir -p $(BUILD_DIR_ZIP)/kemono/DEVICE
|
||||
$(V)cp $(DIST_DIR)/kemono/segatools.ini \
|
||||
$(DIST_DIR)/kemono/start.bat \
|
||||
$(DIST_DIR)/kemono/launch.bat \
|
||||
$(BUILD_DIR_ZIP)/kemono
|
||||
$(V)cp $(BUILD_DIR_32)/kemonohook/kemonohook.dll \
|
||||
$(BUILD_DIR_ZIP)/kemono/kemonohook_x86.dll
|
||||
|
@ -12,6 +12,7 @@
|
||||
|
||||
#include "util/crc.h"
|
||||
#include "util/dprintf.h"
|
||||
#include "util/env.h"
|
||||
|
||||
struct aime_io_config {
|
||||
wchar_t aime_path[MAX_PATH];
|
||||
@ -222,7 +223,7 @@ uint16_t aime_io_get_api_version(void)
|
||||
|
||||
HRESULT aime_io_init(void)
|
||||
{
|
||||
aime_io_config_read(&aime_io_cfg, L".\\segatools.ini");
|
||||
aime_io_config_read(&aime_io_cfg, get_config_path());
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
@ -3,7 +3,6 @@ aimeio_lib = static_library(
|
||||
name_prefix : '',
|
||||
include_directories: inc,
|
||||
implicit_include_directories : false,
|
||||
c_pch : '../precompiled.h',
|
||||
link_with : [
|
||||
util_lib,
|
||||
],
|
||||
|
13
amex/ds.c
13
amex/ds.c
@ -1,10 +1,11 @@
|
||||
#include <windows.h>
|
||||
#include <devioctl.h>
|
||||
#include <ntdddisk.h>
|
||||
#include <winioctl.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "amex/ds.h"
|
||||
@ -19,13 +20,11 @@
|
||||
#include "util/dprintf.h"
|
||||
#include "util/str.h"
|
||||
|
||||
#pragma pack(push, 1)
|
||||
#define DS_IOCTL_GET_ABI_VERSION CTL_CODE(0x8000, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
#define DS_IOCTL_SETUP CTL_CODE(0x8000, 0x801, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
#define DS_IOCTL_READ_SECTOR CTL_CODE(0x8000, 0x804, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
|
||||
enum {
|
||||
DS_IOCTL_GET_ABI_VERSION = 0x80006000,
|
||||
DS_IOCTL_SETUP = 0x80006004,
|
||||
DS_IOCTL_READ_SECTOR = 0x80006010,
|
||||
};
|
||||
#pragma pack(push, 1)
|
||||
|
||||
struct ds_eeprom {
|
||||
uint32_t crc32;
|
||||
|
@ -6,7 +6,7 @@
|
||||
#include <winnt.h>
|
||||
#endif
|
||||
#include <devioctl.h>
|
||||
#include <ntdddisk.h>
|
||||
#include <winioctl.h>
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
@ -20,9 +20,7 @@
|
||||
#include "util/dprintf.h"
|
||||
#include "util/str.h"
|
||||
|
||||
enum {
|
||||
EEPROM_IOCTL_GET_ABI_VERSION = 0x80006000,
|
||||
};
|
||||
#define EEPROM_IOCTL_GET_ABI_VERSION CTL_CODE(0x8000, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
|
||||
static HRESULT eeprom_handle_irp(struct irp *irp);
|
||||
static HRESULT eeprom_handle_open(struct irp *irp);
|
||||
|
12
amex/gpio.c
12
amex/gpio.c
@ -1,5 +1,5 @@
|
||||
#include <windows.h>
|
||||
#include <ntstatus.h>
|
||||
#include <winioctl.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
@ -13,12 +13,10 @@
|
||||
#include "util/dprintf.h"
|
||||
#include "util/str.h"
|
||||
|
||||
enum {
|
||||
GPIO_IOCTL_SET_LEDS = 0x8000A004,
|
||||
GPIO_IOCTL_GET_PSW = 0x80006008,
|
||||
GPIO_IOCTL_GET_DIPSW = 0x8000600C,
|
||||
GPIO_IOCTL_DESCRIBE = 0x80006014,
|
||||
};
|
||||
#define GPIO_IOCTL_SET_LEDS CTL_CODE(0x8000, 0x801, METHOD_BUFFERED, FILE_WRITE_ACCESS)
|
||||
#define GPIO_IOCTL_GET_PSW CTL_CODE(0x8000, 0x802, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
#define GPIO_IOCTL_GET_DIPSW CTL_CODE(0x8000, 0x803, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
#define GPIO_IOCTL_DESCRIBE CTL_CODE(0x8000, 0x805, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
|
||||
enum {
|
||||
GPIO_TYPE_NONE = 0,
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <winternl.h>
|
||||
|
||||
#include <ntstatus.h>
|
||||
#include <winioctl.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <stddef.h>
|
||||
@ -21,11 +22,9 @@
|
||||
#include "util/dump.h"
|
||||
#include "util/str.h"
|
||||
|
||||
enum {
|
||||
JVS_IOCTL_HELLO = 0x80006004,
|
||||
JVS_IOCTL_SENSE = 0x8000600C,
|
||||
JVS_IOCTL_TRANSACT = 0x8000E008,
|
||||
};
|
||||
#define JVS_IOCTL_HELLO CTL_CODE(0x8000, 0x801, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
#define JVS_IOCTL_TRANSACT CTL_CODE(0x8000, 0x802, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
||||
#define JVS_IOCTL_SENSE CTL_CODE(0x8000, 0x803, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
|
||||
static HRESULT jvs_handle_irp(struct irp *irp);
|
||||
static HRESULT jvs_handle_open(struct irp *irp);
|
||||
|
@ -2,7 +2,6 @@ amex_lib = static_library(
|
||||
'amex',
|
||||
include_directories : inc,
|
||||
implicit_include_directories : false,
|
||||
c_pch : '../precompiled.h',
|
||||
dependencies : [
|
||||
capnhook.get_variable('hook_dep'),
|
||||
],
|
||||
|
@ -6,7 +6,7 @@
|
||||
#include <winnt.h>
|
||||
#endif
|
||||
#include <devioctl.h>
|
||||
#include <ntdddisk.h>
|
||||
#include <winioctl.h>
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
@ -20,9 +20,7 @@
|
||||
#include "util/dprintf.h"
|
||||
#include "util/str.h"
|
||||
|
||||
enum {
|
||||
SRAM_IOCTL_GET_ABI_VERSION = 0x80006000,
|
||||
};
|
||||
#define SRAM_IOCTL_GET_ABI_VERSION CTL_CODE(0x8000, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
|
||||
static HRESULT sram_handle_irp(struct irp *irp);
|
||||
static HRESULT sram_handle_open(struct irp *irp);
|
||||
|
@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "aimeio/aimeio.h"
|
||||
|
||||
|
@ -72,6 +72,7 @@ void aime_config_load(struct aime_config *cfg, const wchar_t *filename)
|
||||
|
||||
aime_dll_config_load(&cfg->dll, filename);
|
||||
cfg->enable = GetPrivateProfileIntW(L"aime", L"enable", 1, filename);
|
||||
cfg->port_no = GetPrivateProfileIntW(L"aime", L"portNo", 0, filename);
|
||||
cfg->high_baudrate = GetPrivateProfileIntW(L"aime", L"highBaud", 1, filename);
|
||||
cfg->gen = GetPrivateProfileIntW(L"aime", L"gen", 0, filename);
|
||||
}
|
||||
@ -90,7 +91,7 @@ void vfd_config_load(struct vfd_config *cfg, const wchar_t *filename)
|
||||
assert(filename != NULL);
|
||||
|
||||
cfg->enable = GetPrivateProfileIntW(L"vfd", L"enable", 1, filename);
|
||||
cfg->port = GetPrivateProfileIntW(L"vfd", L"portNo", 0, filename);
|
||||
cfg->port_no = GetPrivateProfileIntW(L"vfd", L"portNo", 0, filename);
|
||||
cfg->utf_conversion = GetPrivateProfileIntW(L"vfd", L"utfConversion", 0, filename);
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
struct ffb_config {
|
||||
bool enable;
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "board/io3.h"
|
||||
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "board/config.h"
|
||||
#include "board/guid.h"
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <windows.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define IO4_REPORT_OUT_PAYLOAD_LEN 62
|
||||
|
||||
|
116
board/led15070.c
116
board/led15070.c
@ -13,6 +13,7 @@
|
||||
#include <process.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
@ -102,19 +103,30 @@ HRESULT led15070_hook_init(
|
||||
io_led_set_fet_output_t _led_set_fet_output,
|
||||
io_led_dc_update_t _led_dc_update,
|
||||
io_led_gs_update_t _led_gs_update,
|
||||
unsigned int first_port,
|
||||
unsigned int num_boards)
|
||||
unsigned int port_no[2])
|
||||
{
|
||||
unsigned int num_boards = 0;
|
||||
|
||||
assert(cfg != NULL);
|
||||
assert(_led_init != NULL);
|
||||
|
||||
if (!cfg->enable) {
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
if (cfg->port_no != 0) {
|
||||
first_port = cfg->port_no;
|
||||
for (int i = 0; i < led15070_nboards; i++)
|
||||
{
|
||||
if (cfg->port_no[i] != 0) {
|
||||
port_no[i] = cfg->port_no[i];
|
||||
}
|
||||
|
||||
if (port_no[i] != 0) {
|
||||
num_boards++;
|
||||
}
|
||||
}
|
||||
|
||||
assert(num_boards != 0);
|
||||
|
||||
led_init = _led_init;
|
||||
led_set_fet_output = _led_set_fet_output;
|
||||
led_dc_update = _led_dc_update;
|
||||
@ -130,10 +142,7 @@ HRESULT led15070_hook_init(
|
||||
|
||||
InitializeCriticalSection(&v->lock);
|
||||
|
||||
// TODO: IMPROVE!
|
||||
first_port = i == 1 ? first_port + 2 : first_port;
|
||||
|
||||
uart_init(&v->boarduart, first_port);
|
||||
uart_init(&v->boarduart, port_no[i]);
|
||||
v->boarduart.baud.BaudRate = 115200;
|
||||
v->boarduart.written.bytes = v->written_bytes;
|
||||
v->boarduart.written.nbytes = sizeof(v->written_bytes);
|
||||
@ -237,12 +246,12 @@ static HRESULT led15070_handle_irp_locked(int board, struct irp *irp)
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
#if 0
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("TX Buffer:\n");
|
||||
dump_iobuf(&boarduart->written);
|
||||
#endif
|
||||
|
||||
req_iobuf.bytes = (byte*)&req;
|
||||
req_iobuf.bytes = (uint8_t*)&req;
|
||||
req_iobuf.nbytes = sizeof(req.hdr) + sizeof(req.cmd) + sizeof(req.payload);
|
||||
req_iobuf.pos = 0;
|
||||
|
||||
@ -256,7 +265,7 @@ static HRESULT led15070_handle_irp_locked(int board, struct irp *irp)
|
||||
return hr;
|
||||
}
|
||||
|
||||
#if 0
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("Deframe Buffer:\n");
|
||||
dump_iobuf(&req_iobuf);
|
||||
#endif
|
||||
@ -384,7 +393,9 @@ static HRESULT led15070_req_reset(int board, const struct led15070_req_any *req)
|
||||
|
||||
static HRESULT led15070_req_set_input(int board, const struct led15070_req_any *req)
|
||||
{
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Set input (board %u)\n", board);
|
||||
#endif
|
||||
|
||||
if (!led15070_per_board_vars[board].enable_response)
|
||||
return S_OK;
|
||||
@ -407,9 +418,10 @@ static HRESULT led15070_req_set_input(int board, const struct led15070_req_any *
|
||||
static HRESULT led15070_req_set_normal_12bit(int board, const struct led15070_req_any *req)
|
||||
{
|
||||
uint8_t idx = req->payload[0];
|
||||
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Set LED - Normal 12bit (board %u, index %u)\n",
|
||||
board, idx);
|
||||
#endif
|
||||
|
||||
// TODO: Data for this command. Seen with Carol
|
||||
|
||||
@ -434,9 +446,10 @@ static HRESULT led15070_req_set_normal_12bit(int board, const struct led15070_re
|
||||
static HRESULT led15070_req_set_normal_8bit(int board, const struct led15070_req_any *req)
|
||||
{
|
||||
uint8_t idx = req->payload[0];
|
||||
|
||||
// dprintf("LED 15070: Set LED - Normal 8bit (board %u, index %u)\n",
|
||||
// board, idx);
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Set LED - Normal 8bit (board %u, index %u)\n",
|
||||
board, idx);
|
||||
#endif
|
||||
|
||||
led15070_per_board_vars[board].gs[idx][0] = req->payload[1]; // R
|
||||
led15070_per_board_vars[board].gs[idx][1] = req->payload[2]; // G
|
||||
@ -467,8 +480,10 @@ static HRESULT led15070_req_set_multi_flash_8bit(int board, const struct led1507
|
||||
uint8_t idx_skip = req->payload[2];
|
||||
|
||||
// TODO: useful?
|
||||
// dprintf("LED 15070: Set LED - Multi flash 8bit (board %u, start %u, end %u, skip %u)\n",
|
||||
// board, idx_start, idx_end, idx_skip);
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Set LED - Multi flash 8bit (board %u, start %u, end %u, skip %u)\n",
|
||||
board, idx_start, idx_end, idx_skip);
|
||||
#endif
|
||||
|
||||
if (idx_skip > 0 && idx_skip <= (idx_end - idx_start + 1)) {
|
||||
idx_start += idx_skip;
|
||||
@ -507,9 +522,10 @@ static HRESULT led15070_req_set_multi_fade_8bit(int board, const struct led15070
|
||||
uint8_t idx_start = req->payload[0];
|
||||
uint8_t idx_end = req->payload[1];
|
||||
uint8_t idx_skip = req->payload[2];
|
||||
|
||||
// dprintf("LED 15070: Set LED - Multi fade 8bit (board %u, start %u, end %u, skip %u)\n",
|
||||
// board, idx_start, idx_end, idx_skip);
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Set LED - Multi fade 8bit (board %u, start %u, end %u, skip %u)\n",
|
||||
board, idx_start, idx_end, idx_skip);
|
||||
#endif
|
||||
|
||||
if (idx_skip > 0 && idx_skip <= (idx_end - idx_start + 1)) {
|
||||
idx_start += idx_skip;
|
||||
@ -544,7 +560,9 @@ static HRESULT led15070_req_set_multi_fade_8bit(int board, const struct led15070
|
||||
|
||||
static HRESULT led15070_req_set_palette_7_normal_led(int board, const struct led15070_req_any *req)
|
||||
{
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Set palette - 7 Normal LED (board %u)\n", board);
|
||||
#endif
|
||||
|
||||
if (!led15070_per_board_vars[board].enable_response)
|
||||
return S_OK;
|
||||
@ -566,7 +584,9 @@ static HRESULT led15070_req_set_palette_7_normal_led(int board, const struct led
|
||||
|
||||
static HRESULT led15070_req_set_palette_6_flash_led(int board, const struct led15070_req_any *req)
|
||||
{
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Set palette - 6 Flash LED (board %u)\n", board);
|
||||
#endif
|
||||
|
||||
if (!led15070_per_board_vars[board].enable_response)
|
||||
return S_OK;
|
||||
@ -588,7 +608,9 @@ static HRESULT led15070_req_set_palette_6_flash_led(int board, const struct led1
|
||||
|
||||
static HRESULT led15070_req_set_15dc_out(int board, const struct led15070_req_any *req)
|
||||
{
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Set 15DC out (board %u)\n", board);
|
||||
#endif
|
||||
|
||||
if (!led15070_per_board_vars[board].enable_response)
|
||||
return S_OK;
|
||||
@ -610,7 +632,9 @@ static HRESULT led15070_req_set_15dc_out(int board, const struct led15070_req_an
|
||||
|
||||
static HRESULT led15070_req_set_15gs_out(int board, const struct led15070_req_any *req)
|
||||
{
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Set 15GS out (board %u)\n", board);
|
||||
#endif
|
||||
|
||||
if (!led15070_per_board_vars[board].enable_response)
|
||||
return S_OK;
|
||||
@ -632,7 +656,9 @@ static HRESULT led15070_req_set_15gs_out(int board, const struct led15070_req_an
|
||||
|
||||
static HRESULT led15070_req_set_psc_max(int board, const struct led15070_req_any *req)
|
||||
{
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Set PSC max (board %u)\n", board);
|
||||
#endif
|
||||
|
||||
if (!led15070_per_board_vars[board].enable_response)
|
||||
return S_OK;
|
||||
@ -654,14 +680,16 @@ static HRESULT led15070_req_set_psc_max(int board, const struct led15070_req_any
|
||||
|
||||
static HRESULT led15070_req_set_fet_output(int board, const struct led15070_req_any *req)
|
||||
{
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Set FET output (board %u)\n", board);
|
||||
#endif
|
||||
|
||||
led15070_per_board_vars[board].fet[0] = req->payload[0]; // R or FET0 intensity
|
||||
led15070_per_board_vars[board].fet[1] = req->payload[1]; // G or FET1 intensity
|
||||
led15070_per_board_vars[board].fet[2] = req->payload[2]; // B or FET2 intensity
|
||||
|
||||
if (led_set_fet_output)
|
||||
led_set_fet_output((const uint8_t*)led15070_per_board_vars[board].fet);
|
||||
led_set_fet_output(board, (const uint8_t*)led15070_per_board_vars[board].fet);
|
||||
|
||||
if (!led15070_per_board_vars[board].enable_response)
|
||||
return S_OK;
|
||||
@ -684,8 +712,9 @@ static HRESULT led15070_req_set_fet_output(int board, const struct led15070_req_
|
||||
static HRESULT led15070_req_set_gs_palette(int board, const struct led15070_req_any *req)
|
||||
{
|
||||
uint8_t idx = req->payload[0];
|
||||
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Set GS palette (board %u, index %u)\n", board, idx);
|
||||
#endif
|
||||
|
||||
led15070_per_board_vars[board].gs_palette[idx][0] = req->payload[1]; // R
|
||||
led15070_per_board_vars[board].gs_palette[idx][1] = req->payload[2]; // G
|
||||
@ -711,10 +740,12 @@ static HRESULT led15070_req_set_gs_palette(int board, const struct led15070_req_
|
||||
|
||||
static HRESULT led15070_req_dc_update(int board, const struct led15070_req_any *req)
|
||||
{
|
||||
// dprintf("LED 15070: DC update (board %u)\n", board);
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: DC update (board %u)\n", board);
|
||||
#endif
|
||||
|
||||
if (led_dc_update)
|
||||
led_dc_update((const uint8_t*)led15070_per_board_vars[board].dc);
|
||||
led_dc_update(board, (const uint8_t*)led15070_per_board_vars[board].dc);
|
||||
|
||||
if (!led15070_per_board_vars[board].enable_response)
|
||||
return S_OK;
|
||||
@ -736,10 +767,12 @@ static HRESULT led15070_req_dc_update(int board, const struct led15070_req_any *
|
||||
|
||||
static HRESULT led15070_req_gs_update(int board, const struct led15070_req_any *req)
|
||||
{
|
||||
// dprintf("LED 15070: GS update (board %u)\n", board);
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: GS update (board %u)\n", board);
|
||||
#endif
|
||||
|
||||
if (led_gs_update)
|
||||
led_gs_update((const uint8_t*)led15070_per_board_vars[board].gs);
|
||||
led_gs_update(board, (const uint8_t*)led15070_per_board_vars[board].gs);
|
||||
|
||||
if (!led15070_per_board_vars[board].enable_response)
|
||||
return S_OK;
|
||||
@ -761,7 +794,9 @@ static HRESULT led15070_req_gs_update(int board, const struct led15070_req_any *
|
||||
|
||||
static HRESULT led15070_req_rotate(int board, const struct led15070_req_any *req)
|
||||
{
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Rotate (board %u)\n", board);
|
||||
#endif
|
||||
|
||||
if (!led15070_per_board_vars[board].enable_response)
|
||||
return S_OK;
|
||||
@ -786,9 +821,10 @@ static HRESULT led15070_req_set_dc_data(int board, const struct led15070_req_any
|
||||
uint8_t idx_start = req->payload[0];
|
||||
uint8_t idx_end = req->payload[1];
|
||||
uint8_t idx_skip = req->payload[2];
|
||||
|
||||
// dprintf("LED 15070: Set DC data (board %u, start %u, end %u, skip %u)\n",
|
||||
// board, idx_start, idx_end, idx_skip);
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Set DC data (board %u, start %u, end %u, skip %u)\n",
|
||||
board, idx_start, idx_end, idx_skip);
|
||||
#endif
|
||||
|
||||
if (idx_skip > 0 && idx_skip <= (idx_end - idx_start + 1)) {
|
||||
idx_start += idx_skip;
|
||||
@ -828,9 +864,10 @@ static HRESULT led15070_req_eeprom_write(int board, const struct led15070_req_an
|
||||
|
||||
uint8_t addr = req->payload[0];
|
||||
uint8_t data = req->payload[1];
|
||||
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: EEPROM write (board %u, address %02x, data %02x)\n",
|
||||
board, addr, data);
|
||||
#endif
|
||||
|
||||
if (addr > 0x07) {
|
||||
dprintf("LED 15070: Error -- Invalid EEPROM write address %02x\n",
|
||||
@ -918,8 +955,9 @@ static HRESULT led15070_req_eeprom_read(int board, const struct led15070_req_any
|
||||
|
||||
uint8_t addr = req->payload[0];
|
||||
uint8_t data = 0;
|
||||
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: EEPROM read (board %u, address %02x)\n", board, addr);
|
||||
#endif
|
||||
|
||||
if (addr > 0x07) {
|
||||
dprintf("LED 15070: Error -- Invalid EEPROM read address %02x\n",
|
||||
@ -1001,7 +1039,9 @@ static HRESULT led15070_req_eeprom_read(int board, const struct led15070_req_any
|
||||
|
||||
static HRESULT led15070_req_ack_on(int board, const struct led15070_req_any *req)
|
||||
{
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Acknowledge commands ON (board %u)\n", board);
|
||||
#endif
|
||||
|
||||
led15070_per_board_vars[board].enable_response = true;
|
||||
|
||||
@ -1022,7 +1062,9 @@ static HRESULT led15070_req_ack_on(int board, const struct led15070_req_any *req
|
||||
|
||||
static HRESULT led15070_req_ack_off(int board, const struct led15070_req_any *req)
|
||||
{
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Acknowledge commands OFF (board %u)\n", board);
|
||||
#endif
|
||||
|
||||
led15070_per_board_vars[board].enable_response = false;
|
||||
|
||||
@ -1043,7 +1085,9 @@ static HRESULT led15070_req_ack_off(int board, const struct led15070_req_any *re
|
||||
|
||||
static HRESULT led15070_req_board_info(int board)
|
||||
{
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Get board info (board %u)\n", board);
|
||||
#endif
|
||||
|
||||
struct led15070_resp_board_info resp;
|
||||
|
||||
@ -1066,7 +1110,9 @@ static HRESULT led15070_req_board_info(int board)
|
||||
|
||||
static HRESULT led15070_req_board_status(int board)
|
||||
{
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Get board status (board %u)\n", board);
|
||||
#endif
|
||||
|
||||
struct led15070_resp_any resp;
|
||||
|
||||
@ -1090,7 +1136,9 @@ static HRESULT led15070_req_board_status(int board)
|
||||
|
||||
static HRESULT led15070_req_fw_sum(int board)
|
||||
{
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Get firmware checksum (board %u)\n", board);
|
||||
#endif
|
||||
|
||||
struct led15070_resp_any resp;
|
||||
|
||||
@ -1112,7 +1160,9 @@ static HRESULT led15070_req_fw_sum(int board)
|
||||
|
||||
static HRESULT led15070_req_protocol_ver(int board)
|
||||
{
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Get protocol version (board %u)\n", board);
|
||||
#endif
|
||||
|
||||
struct led15070_resp_any resp;
|
||||
|
||||
@ -1186,7 +1236,7 @@ static HRESULT led15070_eeprom_open(int board, wchar_t *path, HANDLE *handle)
|
||||
HRESULT hr;
|
||||
BOOL ok;
|
||||
|
||||
#if 0
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Opening EEPROM file '%S' handle (board %u)\n", path, board);
|
||||
#endif
|
||||
|
||||
@ -1232,7 +1282,7 @@ static HRESULT led15070_eeprom_close(int board, wchar_t *path, HANDLE *handle)
|
||||
HRESULT hr;
|
||||
BOOL ok;
|
||||
|
||||
#if 0
|
||||
#if defined(LOG_LED15070)
|
||||
dprintf("LED 15070: Closing EEPROM file '%S' handle (board %u)\n", path, board);
|
||||
#endif
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
struct led15070_config {
|
||||
bool enable;
|
||||
unsigned int port_no;
|
||||
unsigned int port_no[2];
|
||||
char board_number[8];
|
||||
uint8_t fw_ver;
|
||||
uint16_t fw_sum;
|
||||
@ -15,9 +15,9 @@ struct led15070_config {
|
||||
};
|
||||
|
||||
typedef HRESULT (*io_led_init_t)(void);
|
||||
typedef void (*io_led_set_fet_output_t)(const uint8_t *rgb);
|
||||
typedef void (*io_led_dc_update_t)(const uint8_t *rgb);
|
||||
typedef void (*io_led_gs_update_t)(const uint8_t *rgb);
|
||||
typedef void (*io_led_set_fet_output_t)(uint8_t board, const uint8_t *rgb);
|
||||
typedef void (*io_led_dc_update_t)(uint8_t board, const uint8_t *rgb);
|
||||
typedef void (*io_led_gs_update_t)(uint8_t board, const uint8_t *rgb);
|
||||
|
||||
HRESULT led15070_hook_init(
|
||||
const struct led15070_config *cfg,
|
||||
@ -25,5 +25,4 @@ HRESULT led15070_hook_init(
|
||||
io_led_set_fet_output_t _led_set_fet_output,
|
||||
io_led_dc_update_t _led_dc_update,
|
||||
io_led_gs_update_t _led_gs_update,
|
||||
unsigned int first_port,
|
||||
unsigned int num_boards);
|
||||
unsigned int port_no[2]);
|
||||
|
@ -88,7 +88,7 @@ struct led15093_req_reset {
|
||||
struct led15093_req_set_timeout {
|
||||
struct led15093_req_hdr hdr;
|
||||
uint8_t cmd;
|
||||
uint8_t count;
|
||||
uint16_t count;
|
||||
};
|
||||
|
||||
struct led15093_req_set_disable_response {
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include <process.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "board/led15093-cmd.h"
|
||||
@ -106,9 +107,13 @@ static uint8_t led15093_host_adr = 1;
|
||||
static io_led_init_t led_init;
|
||||
static io_led_set_leds_t set_leds;
|
||||
|
||||
HRESULT led15093_hook_init(const struct led15093_config *cfg, io_led_init_t _led_init,
|
||||
io_led_set_leds_t _set_leds, unsigned int first_port, unsigned int num_boards, uint8_t board_adr, uint8_t host_adr)
|
||||
HRESULT led15093_hook_init(
|
||||
const struct led15093_config *cfg,
|
||||
io_led_init_t _led_init,
|
||||
io_led_set_leds_t _set_leds,
|
||||
unsigned int port_no[2])
|
||||
{
|
||||
unsigned int num_boards = 0;
|
||||
|
||||
assert(cfg != NULL);
|
||||
assert(_led_init != NULL);
|
||||
@ -118,14 +123,24 @@ HRESULT led15093_hook_init(const struct led15093_config *cfg, io_led_init_t _led
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
if (cfg->port_no != 0) {
|
||||
first_port = cfg->port_no;
|
||||
for (int i = 0; i < led15093_nboards; i++)
|
||||
{
|
||||
if (cfg->port_no[i] != 0) {
|
||||
port_no[i] = cfg->port_no[i];
|
||||
}
|
||||
|
||||
if (port_no[i] != 0) {
|
||||
num_boards++;
|
||||
}
|
||||
}
|
||||
|
||||
assert(num_boards != 0);
|
||||
|
||||
led15093_board_adr = num_boards;
|
||||
led15093_host_adr = num_boards == 2 ? 1 : 2;
|
||||
|
||||
led_init = _led_init;
|
||||
set_leds = _set_leds;
|
||||
led15093_board_adr = board_adr;
|
||||
led15093_host_adr = host_adr;
|
||||
|
||||
memcpy(led15093_board_num, cfg->board_number, sizeof(led15093_board_num));
|
||||
memcpy(led15093_chip_num, cfg->chip_number, sizeof(led15093_chip_num));
|
||||
@ -139,7 +154,7 @@ HRESULT led15093_hook_init(const struct led15093_config *cfg, io_led_init_t _led
|
||||
|
||||
InitializeCriticalSection(&vb->lock);
|
||||
|
||||
uart_init(&vb->boarduart, first_port + i);
|
||||
uart_init(&vb->boarduart, port_no[i]);
|
||||
if (cfg->high_baudrate) {
|
||||
vb->boarduart.baud.BaudRate = 460800;
|
||||
} else {
|
||||
@ -208,7 +223,6 @@ static HRESULT led15093_handle_irp_locked(int board, struct irp *irp)
|
||||
_led15093_per_board_vars *v = &led15093_per_board_vars[board];
|
||||
struct uart *boarduart = &led15093_per_board_vars[board].boarduart;
|
||||
|
||||
/*
|
||||
if (irp->op == IRP_OP_OPEN) {
|
||||
// Unfortunately the LED board UART gets opened and closed repeatedly
|
||||
|
||||
@ -235,30 +249,6 @@ static HRESULT led15093_handle_irp_locked(int board, struct irp *irp)
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
if (irp->op == IRP_OP_OPEN) {
|
||||
dprintf("LED 15093: Starting backend DLL\n");
|
||||
// int res = led_init();
|
||||
hr = led_init();
|
||||
|
||||
/*
|
||||
if (res != 0) {
|
||||
dprintf("LED 15093: Backend error, LED board disconnected: "
|
||||
"%d\n",
|
||||
res);
|
||||
|
||||
return E_FAIL;
|
||||
}
|
||||
*/
|
||||
if (FAILED(hr)) {
|
||||
dprintf("LED 15093: Backend error, LED board disconnected: "
|
||||
"%x\n",
|
||||
(int) hr);
|
||||
|
||||
return hr;
|
||||
}
|
||||
}
|
||||
|
||||
hr = uart_handle_irp(boarduart, irp);
|
||||
|
||||
@ -272,7 +262,7 @@ static HRESULT led15093_handle_irp_locked(int board, struct irp *irp)
|
||||
dump_iobuf(&boarduart->written);
|
||||
#endif
|
||||
|
||||
req_iobuf.bytes = (byte*)&req;
|
||||
req_iobuf.bytes = (uint8_t*)&req;
|
||||
req_iobuf.nbytes = sizeof(req.hdr) + sizeof(req.payload);
|
||||
req_iobuf.pos = 0;
|
||||
|
||||
@ -687,16 +677,6 @@ static HRESULT led15093_req_set_imm_led(int board, const struct led15093_req_set
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
/*
|
||||
if (board == 0) {
|
||||
dprintf("board %d: red: %d, green: %d, blue: %d\n", board, req->data[0x96], req->data[0x97], req->data[0x98]);
|
||||
}
|
||||
else if (board == 1)
|
||||
{
|
||||
dprintf("board %d: red: %d, green: %d, blue: %d\n", board, req->data[0xb4], req->data[0xb5], req->data[0xb6]);
|
||||
}
|
||||
*/
|
||||
|
||||
// Return the current LED data, remove const qualifier
|
||||
set_leds(board, (uint8_t *) req->data);
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
struct led15093_config {
|
||||
bool enable;
|
||||
bool high_baudrate;
|
||||
unsigned int port_no;
|
||||
unsigned int port_no[2];
|
||||
char board_number[8];
|
||||
char chip_number[5];
|
||||
char boot_chip_number[5];
|
||||
@ -20,5 +20,5 @@ typedef HRESULT (*io_led_init_t)(void);
|
||||
typedef void (*io_led_set_leds_t)(uint8_t board, uint8_t *rgb);
|
||||
|
||||
HRESULT led15093_hook_init(const struct led15093_config *cfg, io_led_init_t _led_init,
|
||||
io_led_set_leds_t _set_leds, unsigned int first_port, unsigned int num_boards, uint8_t board_adr, uint8_t host_adr);
|
||||
io_led_set_leds_t _set_leds, unsigned int port_no[2]);
|
||||
|
||||
|
@ -2,7 +2,6 @@ board_lib = static_library(
|
||||
'board',
|
||||
include_directories : inc,
|
||||
implicit_include_directories : false,
|
||||
c_pch : '../precompiled.h',
|
||||
dependencies : [
|
||||
capnhook.get_variable('hook_dep'),
|
||||
],
|
||||
|
@ -354,13 +354,13 @@ static HRESULT sg_nfc_poll_felica(
|
||||
felica->type = 0x20;
|
||||
felica->id_len = sizeof(felica->IDm) + sizeof(felica->PMm);
|
||||
felica->IDm = _byteswap_uint64(IDm);
|
||||
felica->PMm = _byteswap_uint64(felica_get_generic_PMm());
|
||||
felica->PMm = _byteswap_uint64(felica_get_amusement_ic_PMm());
|
||||
|
||||
/* Initialize FeliCa IC emulator */
|
||||
|
||||
nfc->felica.IDm = IDm;
|
||||
nfc->felica.PMm = felica_get_generic_PMm();
|
||||
nfc->felica.system_code = 0x0000;
|
||||
nfc->felica.PMm = felica_get_amusement_ic_PMm();
|
||||
nfc->felica.system_code = 0x88b4;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
@ -47,7 +47,7 @@ static struct sg_led sg_reader_led;
|
||||
|
||||
HRESULT sg_reader_hook_init(
|
||||
const struct aime_config *cfg,
|
||||
unsigned int port_no,
|
||||
unsigned int default_port_no,
|
||||
unsigned int gen,
|
||||
HINSTANCE self)
|
||||
{
|
||||
@ -66,6 +66,11 @@ HRESULT sg_reader_hook_init(
|
||||
return hr;
|
||||
}
|
||||
|
||||
unsigned int port_no = cfg->port_no;
|
||||
if (port_no == 0){
|
||||
port_no = default_port_no;
|
||||
}
|
||||
|
||||
if (cfg->gen != 0) {
|
||||
gen = cfg->gen;
|
||||
}
|
||||
@ -85,6 +90,7 @@ HRESULT sg_reader_hook_init(
|
||||
sg_reader_uart.baud.BaudRate = 38400;
|
||||
}
|
||||
|
||||
dprintf("NFC Assembly: enabling (port=%d)\n", port_no);
|
||||
uart_init(&sg_reader_uart, port_no);
|
||||
sg_reader_uart.written.bytes = sg_reader_written_bytes;
|
||||
sg_reader_uart.written.nbytes = sizeof(sg_reader_written_bytes);
|
||||
|
@ -9,12 +9,13 @@
|
||||
struct aime_config {
|
||||
struct aime_dll_config dll;
|
||||
bool enable;
|
||||
unsigned int port_no;
|
||||
bool high_baudrate;
|
||||
unsigned int gen;
|
||||
};
|
||||
|
||||
HRESULT sg_reader_hook_init(
|
||||
const struct aime_config *cfg,
|
||||
unsigned int port_no,
|
||||
unsigned int default_port_no,
|
||||
unsigned int gen,
|
||||
HINSTANCE self);
|
||||
|
13
board/vfd.c
13
board/vfd.c
@ -8,6 +8,7 @@
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "board/config.h"
|
||||
#include "board/vfd.h"
|
||||
@ -50,7 +51,7 @@ HRESULT vfd_handle_create_char2(struct const_iobuf* reader, struct iobuf* writer
|
||||
|
||||
static bool utf_enabled;
|
||||
|
||||
HRESULT vfd_hook_init(struct vfd_config *cfg, int default_port)
|
||||
HRESULT vfd_hook_init(struct vfd_config *cfg, unsigned int default_port_no)
|
||||
{
|
||||
if (!cfg->enable){
|
||||
return S_FALSE;
|
||||
@ -58,13 +59,13 @@ HRESULT vfd_hook_init(struct vfd_config *cfg, int default_port)
|
||||
|
||||
utf_enabled = cfg->utf_conversion;
|
||||
|
||||
int port = cfg->port;
|
||||
if (port == 0){
|
||||
port = default_port;
|
||||
unsigned int port_no = cfg->port_no;
|
||||
if (port_no == 0){
|
||||
port_no = default_port_no;
|
||||
}
|
||||
|
||||
dprintf("VFD: enabling (port=%d)\n", port);
|
||||
uart_init(&vfd_uart, port);
|
||||
dprintf("VFD: enabling (port=%d)\n", port_no);
|
||||
uart_init(&vfd_uart, port_no);
|
||||
vfd_uart.written.bytes = vfd_written;
|
||||
vfd_uart.written.nbytes = sizeof(vfd_written);
|
||||
vfd_uart.readable.bytes = vfd_readable;
|
||||
|
@ -4,10 +4,10 @@
|
||||
|
||||
struct vfd_config {
|
||||
bool enable;
|
||||
int port;
|
||||
unsigned int port_no;
|
||||
bool utf_conversion;
|
||||
};
|
||||
|
||||
|
||||
HRESULT vfd_hook_init(struct vfd_config *cfg, int default_port);
|
||||
HRESULT vfd_hook_init(struct vfd_config *cfg, unsigned int default_port_no);
|
||||
|
||||
|
@ -53,6 +53,7 @@
|
||||
#include "platform/platform.h"
|
||||
|
||||
#include "util/dprintf.h"
|
||||
#include "util/env.h"
|
||||
|
||||
static HMODULE carol_hook_mod;
|
||||
static process_entry_t carol_startup;
|
||||
@ -73,8 +74,6 @@ static DWORD CALLBACK carol_pre_startup(void)
|
||||
HMODULE dbghelp;
|
||||
|
||||
dprintf("--- Begin carol_pre_startup ---\n");
|
||||
if ( !SetProcessDPIAware() )
|
||||
dprintf("Failed to set process DPI awareness level!\n");
|
||||
|
||||
/* Pin the D3D shader compiler. This makes startup much faster. */
|
||||
|
||||
@ -100,7 +99,7 @@ static DWORD CALLBACK carol_pre_startup(void)
|
||||
|
||||
/* Config load */
|
||||
|
||||
carol_hook_config_load(&carol_hook_cfg, L".\\segatools.ini");
|
||||
carol_hook_config_load(&carol_hook_cfg, get_config_path());
|
||||
|
||||
/* Hook Win32 APIs */
|
||||
|
||||
@ -164,7 +163,7 @@ static DWORD CALLBACK carol_pre_startup(void)
|
||||
}
|
||||
/* Initialize debug helpers */
|
||||
|
||||
spike_hook_init(L".\\segatools.ini");
|
||||
spike_hook_init(get_config_path());
|
||||
|
||||
dprintf("--- End carol_pre_startup ---\n");
|
||||
|
||||
|
@ -4,7 +4,6 @@ shared_library(
|
||||
include_directories : inc,
|
||||
implicit_include_directories : false,
|
||||
vs_module_defs : 'carolhook.def',
|
||||
c_pch : '../precompiled.h',
|
||||
dependencies : [
|
||||
capnhook.get_variable('hook_dep'),
|
||||
capnhook.get_variable('hooklib_dep'),
|
||||
|
@ -196,7 +196,7 @@ static void touch_scan_auto(const bool is_pressed, const uint16_t mouse_x, const
|
||||
|
||||
flg = resp.touches[0].x1 != last_x1 || resp.touches[0].x2 != last_x2 || resp.touches[0].y1 != last_y1 || resp.touches[0].y2 != last_y2;
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
if (flg)
|
||||
dprintf("Touch: Mouse down! x %02X %02X y: %02X %02X\n", resp.touches[0].x1, resp.touches[0].x2, resp.touches[0].y1, resp.touches[0].y2);
|
||||
#endif
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "carolio/carolio.h"
|
||||
#include "carolio/config.h"
|
||||
#include "util/dprintf.h"
|
||||
#include "util/env.h"
|
||||
|
||||
static unsigned int __stdcall carol_io_touch_thread_proc(void *ctx);
|
||||
|
||||
@ -25,7 +26,7 @@ uint16_t carol_io_get_api_version(void)
|
||||
|
||||
HRESULT carol_io_jvs_init(void)
|
||||
{
|
||||
carol_io_config_load(&carol_io_cfg, L".\\segatools.ini");
|
||||
carol_io_config_load(&carol_io_cfg, get_config_path());
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
@ -178,4 +179,4 @@ static unsigned int __stdcall carol_io_touch_thread_proc(void *ctx)
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,6 @@ carolio_lib = static_library(
|
||||
name_prefix : '',
|
||||
include_directories : inc,
|
||||
implicit_include_directories : false,
|
||||
c_pch : '../precompiled.h',
|
||||
sources : [
|
||||
'carolio.c',
|
||||
'carolio.h',
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <assert.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "amex/amex.h"
|
||||
#include "amex/config.h"
|
||||
@ -55,7 +56,8 @@ void led15093_config_load(struct led15093_config *cfg, const wchar_t *filename)
|
||||
memset(cfg->boot_chip_number, ' ', sizeof(cfg->boot_chip_number));
|
||||
|
||||
cfg->enable = GetPrivateProfileIntW(L"led15093", L"enable", 1, filename);
|
||||
cfg->port_no = 0;
|
||||
cfg->port_no[0] = GetPrivateProfileIntW(L"led15093", L"portNo1", 0, filename);
|
||||
cfg->port_no[1] = GetPrivateProfileIntW(L"led15093", L"portNo2", 0, filename);
|
||||
cfg->high_baudrate = GetPrivateProfileIntW(L"led15093", L"highBaud", 0, filename);
|
||||
cfg->fw_ver = GetPrivateProfileIntW(L"led15093", L"fwVer", 0x90, filename);
|
||||
cfg->fw_sum = GetPrivateProfileIntW(L"led15093", L"fwSum", 0xadf7, filename);
|
||||
|
@ -36,6 +36,7 @@
|
||||
#include "platform/platform.h"
|
||||
|
||||
#include "util/dprintf.h"
|
||||
#include "util/env.h"
|
||||
|
||||
static HMODULE chuni_hook_mod;
|
||||
static process_entry_t chuni_startup;
|
||||
@ -71,7 +72,7 @@ static DWORD CALLBACK chuni_pre_startup(void)
|
||||
|
||||
/* Config load */
|
||||
|
||||
chuni_hook_config_load(&chuni_hook_cfg, L".\\segatools.ini");
|
||||
chuni_hook_config_load(&chuni_hook_cfg, get_config_path());
|
||||
|
||||
/* Hook Win32 APIs */
|
||||
|
||||
@ -113,8 +114,9 @@ static DWORD CALLBACK chuni_pre_startup(void)
|
||||
{
|
||||
dprintf("IO DLL doesn't support led_init/led_set_leds, cannot start LED15093 hook\n");
|
||||
} else {
|
||||
unsigned int led_port_no[2] = {10, 11};
|
||||
hr = led15093_hook_init(&chuni_hook_cfg.led15093,
|
||||
chuni_dll.led_init, chuni_dll.led_set_leds, 10, 2, 2, 1);
|
||||
chuni_dll.led_init, chuni_dll.led_set_leds, led_port_no);
|
||||
|
||||
if (FAILED(hr)) {
|
||||
goto fail;
|
||||
@ -129,7 +131,7 @@ static DWORD CALLBACK chuni_pre_startup(void)
|
||||
|
||||
/* Initialize debug helpers */
|
||||
|
||||
spike_hook_init(L".\\segatools.ini");
|
||||
spike_hook_init(get_config_path());
|
||||
|
||||
dprintf("--- End chuni_pre_startup ---\n");
|
||||
|
||||
|
@ -4,7 +4,6 @@ shared_library(
|
||||
include_directories : inc,
|
||||
implicit_include_directories : false,
|
||||
vs_module_defs : 'chunihook.def',
|
||||
c_pch : '../precompiled.h',
|
||||
dependencies : [
|
||||
capnhook.get_variable('hook_dep'),
|
||||
capnhook.get_variable('hooklib_dep'),
|
||||
|
@ -4,12 +4,14 @@
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "chuniio/chuniio.h"
|
||||
#include "chuniio/config.h"
|
||||
#include "chuniio/ledoutput.h"
|
||||
|
||||
#include "util/dprintf.h"
|
||||
#include "util/env.h"
|
||||
|
||||
static unsigned int __stdcall chuni_io_slider_thread_proc(void *ctx);
|
||||
|
||||
@ -27,7 +29,7 @@ uint16_t chuni_io_get_api_version(void)
|
||||
|
||||
HRESULT chuni_io_jvs_init(void)
|
||||
{
|
||||
chuni_io_config_load(&chuni_io_cfg, L".\\segatools.ini");
|
||||
chuni_io_config_load(&chuni_io_cfg, get_config_path());
|
||||
|
||||
led_init_mutex = CreateMutex(
|
||||
NULL, // default security attributes
|
||||
@ -92,7 +94,7 @@ void chuni_io_jvs_poll(uint8_t *opbtn, uint8_t *beams)
|
||||
} else {
|
||||
// Use actual AIR
|
||||
for (i = 0; i < 6; i++) {
|
||||
if(GetAsyncKeyState(chuni_io_cfg.vk_ir[i]) & 0x8000) {
|
||||
if (GetAsyncKeyState(chuni_io_cfg.vk_ir[i]) & 0x8000) {
|
||||
*beams |= (1 << i);
|
||||
} else {
|
||||
*beams &= ~(1 << i);
|
||||
@ -172,6 +174,20 @@ HRESULT chuni_io_led_init(void)
|
||||
}
|
||||
|
||||
void chuni_io_led_set_colors(uint8_t board, uint8_t *rgb)
|
||||
{
|
||||
{
|
||||
#if 0
|
||||
if (board == 0) {
|
||||
dprintf("CHUNI LED: Left Air 1: red: %d, green: %d, blue: %d\n", rgb[0x96], rgb[0x97], rgb[0x98]);
|
||||
dprintf("CHUNI LED: Left Air 2: red: %d, green: %d, blue: %d\n", rgb[0x99], rgb[0x9A], rgb[0x9B]);
|
||||
dprintf("CHUNI LED: Left Air 3: red: %d, green: %d, blue: %d\n", rgb[0x9C], rgb[0x9D], rgb[0x9E]);
|
||||
}
|
||||
else if (board == 1)
|
||||
{
|
||||
dprintf("CHUNI LED: Right Air 1: red: %d, green: %d, blue: %d\n", rgb[0xB4], rgb[0xB5], rgb[0xB6]);
|
||||
dprintf("CHUNI LED: Right Air 2: red: %d, green: %d, blue: %d\n", rgb[0xB7], rgb[0xB8], rgb[0xB9]);
|
||||
dprintf("CHUNI LED: Right Air 3: red: %d, green: %d, blue: %d\n", rgb[0xBA], rgb[0xBB], rgb[0xBC]);
|
||||
}
|
||||
#endif
|
||||
|
||||
led_output_update(board, rgb);
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <assert.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "chuniio/config.h"
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
struct chuni_io_config {
|
||||
uint8_t vk_test;
|
||||
|
@ -13,10 +13,10 @@
|
||||
|
||||
// This struct is used to send data related to the slider and billboard LEDs
|
||||
struct _chuni_led_data_buf_t {
|
||||
byte framing; // Sync byte
|
||||
uint8_t framing; // Sync byte
|
||||
uint8_t board; // LED output the data is for (0-1: billboard, 2: slider)
|
||||
byte data[LED_OUTPUT_DATA_SIZE_MAX]; // Buffer for LEDs
|
||||
byte data_len; // How many bytes to output from the buffer
|
||||
uint8_t data[LED_OUTPUT_DATA_SIZE_MAX]; // Buffer for LEDs
|
||||
uint8_t data_len; // How many bytes to output from the buffer
|
||||
};
|
||||
|
||||
static byte chuni_led_board_data_lens[LED_BOARDS_TOTAL] = {53*3, 63*3, 31*3};
|
||||
static uint8_t chuni_led_board_data_lens[LED_BOARDS_TOTAL] = {53*3, 63*3, 31*3};
|
@ -73,14 +73,14 @@ struct _chuni_led_data_buf_t* escape_led_data(struct _chuni_led_data_buf_t* unes
|
||||
{
|
||||
struct _chuni_led_data_buf_t* out_struct = &led_escaped_buf[unescaped->board];
|
||||
|
||||
byte* in_buf = unescaped->data;
|
||||
byte* out_buf = out_struct->data;
|
||||
uint8_t* in_buf = unescaped->data;
|
||||
uint8_t* out_buf = out_struct->data;
|
||||
int i = 0;
|
||||
int o = 0;
|
||||
|
||||
while (i < unescaped->data_len)
|
||||
{
|
||||
byte b = in_buf[i++];
|
||||
uint8_t b = in_buf[i++];
|
||||
if (b == LED_PACKET_FRAMING || b == LED_PACKET_ESCAPE)
|
||||
{
|
||||
out_buf[o++] = LED_PACKET_ESCAPE;
|
||||
@ -94,7 +94,7 @@ struct _chuni_led_data_buf_t* escape_led_data(struct _chuni_led_data_buf_t* unes
|
||||
return out_struct;
|
||||
}
|
||||
|
||||
void led_output_update(uint8_t board, const byte* rgb)
|
||||
void led_output_update(uint8_t board, const uint8_t* rgb)
|
||||
{
|
||||
if (board < 0 || board > 2 || !any_outputs_enabled)
|
||||
{
|
||||
|
@ -16,4 +16,4 @@
|
||||
|
||||
extern HANDLE led_init_mutex;
|
||||
HRESULT led_output_init(struct chuni_io_config* const cfg);
|
||||
void led_output_update(uint8_t board, const byte* rgb);
|
||||
void led_output_update(uint8_t board, const uint8_t* rgb);
|
||||
|
@ -3,7 +3,6 @@ chuniio_lib = static_library(
|
||||
name_prefix : '',
|
||||
include_directories : inc,
|
||||
implicit_include_directories : false,
|
||||
c_pch : '../precompiled.h',
|
||||
|
||||
sources : [
|
||||
'chu2to3.c',
|
||||
|
@ -98,7 +98,7 @@ void led_serial_update(struct _chuni_led_data_buf_t* data)
|
||||
ReleaseMutex(serial_write_mutex);
|
||||
}
|
||||
|
||||
void led_serial_update_openithm(const byte* rgb)
|
||||
void led_serial_update_openithm(const uint8_t* rgb)
|
||||
{
|
||||
if (serial_port != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
|
@ -8,9 +8,10 @@
|
||||
#pragma once
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "chuniio/leddata.h"
|
||||
|
||||
HRESULT led_serial_init(wchar_t led_com[12], DWORD baud);
|
||||
void led_serial_update(struct _chuni_led_data_buf_t* data);
|
||||
void led_serial_update_openithm(const byte* rgb);
|
||||
void led_serial_update_openithm(const uint8_t* rgb);
|
@ -2,6 +2,7 @@
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "chuniio/chu2to3.h"
|
||||
#include "chusanhook/chuni-dll.h"
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include <assert.h>
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "board/config.h"
|
||||
|
||||
@ -95,7 +96,8 @@ void led15093_config_load(struct led15093_config *cfg, const wchar_t *filename)
|
||||
memset(cfg->boot_chip_number, ' ', sizeof(cfg->boot_chip_number));
|
||||
|
||||
cfg->enable = GetPrivateProfileIntW(L"led15093", L"enable", 1, filename);
|
||||
cfg->port_no = 0;
|
||||
cfg->port_no[0] = GetPrivateProfileIntW(L"led15093", L"portNo1", 0, filename);
|
||||
cfg->port_no[1] = GetPrivateProfileIntW(L"led15093", L"portNo2", 0, filename);
|
||||
cfg->high_baudrate = GetPrivateProfileIntW(L"led15093", L"highBaud", 0, filename);
|
||||
cfg->fw_ver = GetPrivateProfileIntW(L"led15093", L"fwVer", 0x90, filename);
|
||||
cfg->fw_sum = GetPrivateProfileIntW(L"led15093", L"fwSum", 0xadf7, filename);
|
||||
|
@ -22,40 +22,36 @@
|
||||
COM4: 837-15396 "Gen 3" Aime Reader
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "amex/amex.h"
|
||||
#include <windows.h>
|
||||
|
||||
#include "board/sg-reader.h"
|
||||
#include "board/vfd.h"
|
||||
|
||||
#include "chuniio/chuniio.h"
|
||||
#include "chusanhook/config.h"
|
||||
#include "chusanhook/io4.h"
|
||||
#include "chusanhook/slider.h"
|
||||
|
||||
#include "chuniio/chuniio.h"
|
||||
|
||||
#include "hook/process.h"
|
||||
|
||||
#include "gfxhook/d3d9.h"
|
||||
#include "gfxhook/gfx.h"
|
||||
|
||||
#include "hook/process.h"
|
||||
|
||||
#include "hooklib/serial.h"
|
||||
#include "hooklib/spike.h"
|
||||
|
||||
#include "platform/platform.h"
|
||||
|
||||
#include "util/dprintf.h"
|
||||
#include "util/env.h"
|
||||
|
||||
static HMODULE chusan_hook_mod;
|
||||
static process_entry_t chusan_startup;
|
||||
static struct chusan_hook_config chusan_hook_cfg;
|
||||
|
||||
static DWORD CALLBACK chusan_pre_startup(void)
|
||||
{
|
||||
static DWORD CALLBACK chusan_pre_startup(void) {
|
||||
HMODULE d3dc;
|
||||
HMODULE dbghelp;
|
||||
HRESULT hr;
|
||||
@ -84,10 +80,10 @@ static DWORD CALLBACK chusan_pre_startup(void)
|
||||
|
||||
/* Config load */
|
||||
|
||||
chusan_hook_config_load(&chusan_hook_cfg, L".\\segatools.ini");
|
||||
chusan_hook_config_load(&chusan_hook_cfg, get_config_path());
|
||||
|
||||
/* Hook Win32 APIs */
|
||||
|
||||
|
||||
dvd_hook_init(&chusan_hook_cfg.dvd, chusan_hook_mod);
|
||||
gfx_hook_init(&chusan_hook_cfg.gfx);
|
||||
gfx_d3d9_hook_init(&chusan_hook_cfg.gfx, chusan_hook_mod);
|
||||
@ -95,6 +91,16 @@ static DWORD CALLBACK chusan_pre_startup(void)
|
||||
|
||||
/* Initialize emulation hooks */
|
||||
|
||||
struct dipsw_config new_dipsw_config[8] = {
|
||||
{L"Delivery Server", L"Server", L"Client"},
|
||||
{L"Monitor Type", L"60FPS", L"120FPS"},
|
||||
{L"Cabinet Type", L"CVT", L"SP"},
|
||||
};
|
||||
|
||||
// Set the system dip switch configuration
|
||||
memcpy(chusan_hook_cfg.platform.system.dipsw_config, new_dipsw_config,
|
||||
sizeof(new_dipsw_config));
|
||||
|
||||
hr = platform_hook_init(
|
||||
&chusan_hook_cfg.platform,
|
||||
"SDHD",
|
||||
@ -123,27 +129,7 @@ static DWORD CALLBACK chusan_pre_startup(void)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
bool *dipsw = &chusan_hook_cfg.platform.system.dipsw[0];
|
||||
bool is_cvt = dipsw[2];
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
dprintf("DipSw: NetInstall: %s\n", dipsw[0] ? "Server" : "Client");
|
||||
break;
|
||||
|
||||
case 1:
|
||||
dprintf("DipSw: Monitor Type: %dFPS\n", dipsw[1] ? 60 : 120);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
dprintf("DipSw: Cab Type: %s\n", is_cvt ? "CVT" : "SP");
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int first_port = is_cvt ? 2 : 20;
|
||||
bool is_cvt = chusan_hook_cfg.platform.system.dipsw[2];
|
||||
|
||||
if (!is_cvt) {
|
||||
hr = vfd_hook_init(&chusan_hook_cfg.vfd, 2);
|
||||
@ -153,19 +139,31 @@ static DWORD CALLBACK chusan_pre_startup(void)
|
||||
}
|
||||
}
|
||||
|
||||
if ( chuni_dll.led_init == NULL || chuni_dll.led_set_leds == NULL )
|
||||
{
|
||||
dprintf("IO DLL doesn't support led_init/led_set_leds, cannot start LED15093 hook\n");
|
||||
unsigned int led_port_no[2];
|
||||
|
||||
if (is_cvt) {
|
||||
led_port_no[0] = 2;
|
||||
led_port_no[1] = 3;
|
||||
} else {
|
||||
hr = led15093_hook_init(&chusan_hook_cfg.led15093,
|
||||
chuni_dll.led_init, chuni_dll.led_set_leds, first_port, 2, 2, 1);
|
||||
led_port_no[0] = 20;
|
||||
led_port_no[1] = 21;
|
||||
}
|
||||
|
||||
if (chuni_dll.led_init == NULL || chuni_dll.led_set_leds == NULL) {
|
||||
dprintf(
|
||||
"IO DLL doesn't support led_init/led_set_leds, cannot start "
|
||||
"LED15093 hook\n");
|
||||
} else {
|
||||
hr = led15093_hook_init(&chusan_hook_cfg.led15093, chuni_dll.led_init,
|
||||
chuni_dll.led_set_leds, led_port_no);
|
||||
|
||||
if (FAILED(hr)) {
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
hr = sg_reader_hook_init(&chusan_hook_cfg.aime, 4, is_cvt ? 2: 3, chusan_hook_mod);
|
||||
hr = sg_reader_hook_init(&chusan_hook_cfg.aime, 4, is_cvt ? 2 : 3,
|
||||
chusan_hook_mod);
|
||||
|
||||
if (FAILED(hr)) {
|
||||
goto fail;
|
||||
@ -173,7 +171,7 @@ static DWORD CALLBACK chusan_pre_startup(void)
|
||||
|
||||
/* Initialize debug helpers */
|
||||
|
||||
spike_hook_init(L".\\segatools.ini");
|
||||
spike_hook_init(get_config_path());
|
||||
|
||||
dprintf("--- End chusan_pre_startup ---\n");
|
||||
|
||||
@ -185,8 +183,7 @@ fail:
|
||||
ExitProcess(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
BOOL WINAPI DllMain(HMODULE mod, DWORD cause, void *ctx)
|
||||
{
|
||||
BOOL WINAPI DllMain(HMODULE mod, DWORD cause, void *ctx) {
|
||||
HRESULT hr;
|
||||
|
||||
if (cause != DLL_PROCESS_ATTACH) {
|
||||
@ -198,7 +195,7 @@ BOOL WINAPI DllMain(HMODULE mod, DWORD cause, void *ctx)
|
||||
hr = process_hijack_startup(chusan_pre_startup, &chusan_startup);
|
||||
|
||||
if (!SUCCEEDED(hr)) {
|
||||
dprintf("Failed to hijack process startup: %x\n", (int) hr);
|
||||
dprintf("Failed to hijack process startup: %x\n", (int)hr);
|
||||
}
|
||||
|
||||
return SUCCEEDED(hr);
|
||||
|
@ -4,7 +4,6 @@ shared_library(
|
||||
include_directories : inc,
|
||||
implicit_include_directories : false,
|
||||
vs_module_defs : 'chusanhook.def',
|
||||
c_pch : '../precompiled.h',
|
||||
dependencies : [
|
||||
capnhook.get_variable('hook_dep'),
|
||||
capnhook.get_variable('hooklib_dep'),
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include <assert.h>
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "board/config.h"
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include "unityhook/hook.h"
|
||||
|
||||
#include "util/dprintf.h"
|
||||
#include "util/env.h"
|
||||
|
||||
static HMODULE cm_hook_mod;
|
||||
static process_entry_t cm_startup;
|
||||
@ -48,7 +49,7 @@ static DWORD CALLBACK cm_pre_startup(void)
|
||||
|
||||
/* Load config */
|
||||
|
||||
cm_hook_config_load(&cm_hook_cfg, L".\\segatools.ini");
|
||||
cm_hook_config_load(&cm_hook_cfg, get_config_path());
|
||||
|
||||
/* Hook Win32 APIs */
|
||||
|
||||
@ -62,6 +63,14 @@ static DWORD CALLBACK cm_pre_startup(void)
|
||||
|
||||
/* Initialize emulation hooks */
|
||||
|
||||
struct dipsw_config new_dipsw_config[8] = {
|
||||
{L"Delivery Server", L"Client", L"Server"},
|
||||
};
|
||||
|
||||
// Set the system dip switch configuration
|
||||
memcpy(cm_hook_cfg.platform.system.dipsw_config, new_dipsw_config,
|
||||
sizeof(new_dipsw_config));
|
||||
|
||||
hr = platform_hook_init(
|
||||
&cm_hook_cfg.platform,
|
||||
"SDED",
|
||||
@ -105,7 +114,7 @@ static DWORD CALLBACK cm_pre_startup(void)
|
||||
|
||||
/* Initialize debug helpers */
|
||||
|
||||
spike_hook_init(L".\\segatools.ini");
|
||||
spike_hook_init(get_config_path());
|
||||
|
||||
dprintf("--- End cm_pre_startup ---\n");
|
||||
|
||||
|
@ -4,7 +4,6 @@ shared_library(
|
||||
include_directories : inc,
|
||||
implicit_include_directories : false,
|
||||
vs_module_defs : 'cmhook.def',
|
||||
c_pch : '../precompiled.h',
|
||||
dependencies : [
|
||||
capnhook.get_variable('hook_dep'),
|
||||
capnhook.get_variable('hooklib_dep'),
|
||||
|
@ -6,6 +6,7 @@
|
||||
|
||||
#include "cmio/cmio.h"
|
||||
#include "cmio/config.h"
|
||||
#include "util/env.h"
|
||||
|
||||
static uint8_t cm_opbtn;
|
||||
static struct cm_io_config cm_io_cfg;
|
||||
@ -18,7 +19,7 @@ uint16_t cm_io_get_api_version(void)
|
||||
|
||||
HRESULT cm_io_init(void)
|
||||
{
|
||||
cm_io_config_load(&cm_io_cfg, L".\\segatools.ini");
|
||||
cm_io_config_load(&cm_io_cfg, get_config_path());
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,6 @@ cmio_lib = static_library(
|
||||
name_prefix : '',
|
||||
include_directories : inc,
|
||||
implicit_include_directories : false,
|
||||
c_pch : '../precompiled.h',
|
||||
sources : [
|
||||
'cmio.c',
|
||||
'cmio.h',
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <assert.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "amex/amex.h"
|
||||
#include "amex/config.h"
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "platform/platform.h"
|
||||
|
||||
#include "util/dprintf.h"
|
||||
#include "util/env.h"
|
||||
|
||||
static HMODULE cxb_hook_mod;
|
||||
static process_entry_t cxb_startup;
|
||||
@ -58,7 +59,7 @@ static DWORD CALLBACK cxb_pre_startup(void)
|
||||
|
||||
/* Config load */
|
||||
|
||||
cxb_hook_config_load(&cxb_hook_cfg, L".\\segatools.ini");
|
||||
cxb_hook_config_load(&cxb_hook_cfg, get_config_path());
|
||||
|
||||
/* Hook Win32 APIs */
|
||||
|
||||
@ -110,7 +111,7 @@ static DWORD CALLBACK cxb_pre_startup(void)
|
||||
|
||||
/* Initialize debug helpers */
|
||||
|
||||
spike_hook_init(L".\\segatools.ini");
|
||||
spike_hook_init(get_config_path());
|
||||
|
||||
dprintf("--- End cxb_pre_startup ---\n");
|
||||
|
||||
|
@ -1,6 +1,9 @@
|
||||
#include <windows.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "cxbhook/led.h"
|
||||
#include "cxbhook/cxb-dll.h"
|
||||
|
@ -4,7 +4,6 @@ shared_library(
|
||||
include_directories : inc,
|
||||
implicit_include_directories : false,
|
||||
vs_module_defs : 'cxbhook.def',
|
||||
c_pch : '../precompiled.h',
|
||||
dependencies : [
|
||||
capnhook.get_variable('hook_dep'),
|
||||
capnhook.get_variable('hooklib_dep'),
|
||||
|
@ -1,6 +1,9 @@
|
||||
#include <windows.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <winuser.h>
|
||||
|
||||
#include "cxbhook/revio.h"
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "cxbio/config.h"
|
||||
|
||||
#include "util/dprintf.h"
|
||||
#include "util/env.h"
|
||||
|
||||
static bool cxb_io_coin;
|
||||
static int cxb_io_coins;
|
||||
@ -21,7 +22,7 @@ uint16_t cxb_io_get_api_version(void)
|
||||
HRESULT cxb_io_revio_init(void)
|
||||
{
|
||||
dprintf("CXB IO: REVIO init\n");
|
||||
cxb_io_config_load(&cxb_io_cfg, L".\\segatools.ini");
|
||||
cxb_io_config_load(&cxb_io_cfg, get_config_path());
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
@ -75,4 +76,4 @@ HRESULT cxb_io_led_init(void)
|
||||
}
|
||||
|
||||
void cxb_io_led_update(int id, int color)
|
||||
{}
|
||||
{}
|
||||
|
@ -3,7 +3,6 @@ cxbio_lib = static_library(
|
||||
name_prefix : '',
|
||||
include_directories : inc,
|
||||
implicit_include_directories : false,
|
||||
c_pch : '../precompiled.h',
|
||||
sources : [
|
||||
'cxbio.c',
|
||||
'cxbio.h',
|
||||
|
4
dist/carol/start.bat → dist/carol/launch.bat
vendored
4
dist/carol/start.bat → dist/carol/launch.bat
vendored
@ -2,10 +2,10 @@
|
||||
|
||||
pushd %~dp0
|
||||
|
||||
taskkill /f /im aimeReaderHost.exe > nul 2>&1
|
||||
|
||||
start /min inject -d -k carolhook.dll aimeReaderHost.exe -p 10
|
||||
|
||||
inject -d -k carolhook.dll carol_nu.exe
|
||||
|
||||
taskkill /f /im aimeReaderHost.exe > nul 2>&1
|
||||
|
||||
echo.
|
4
dist/carol/segatools.ini
vendored
4
dist/carol/segatools.ini
vendored
@ -64,12 +64,16 @@ subnet=192.168.126.0
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
[gfx]
|
||||
; Enables the graphics hook.
|
||||
enable=1
|
||||
; Force the game to run windowed.
|
||||
windowed=1
|
||||
; Add a frame to the game window if running windowed.
|
||||
framed=1
|
||||
; Select the monitor to run the game on. (Fullscreen only, 0 =primary screen)
|
||||
monitor=0
|
||||
; Enable DPI awareness for the game process, preventing Windows from stretching the game window if a DPI scaling higher than 100% is used
|
||||
dpiAware=1
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Custom IO settings
|
||||
|
2
dist/chuni/start.bat → dist/chuni/launch.bat
vendored
2
dist/chuni/start.bat → dist/chuni/launch.bat
vendored
@ -3,7 +3,9 @@
|
||||
pushd %~dp0
|
||||
|
||||
start /min inject -d -k chunihook.dll aimeReaderHost.exe -p 12
|
||||
|
||||
inject -d -k chunihook.dll chuniApp.exe
|
||||
|
||||
taskkill /f /im aimeReaderHost.exe > nul 2>&1
|
||||
|
||||
echo.
|
4
dist/chuni/segatools.ini
vendored
4
dist/chuni/segatools.ini
vendored
@ -56,12 +56,16 @@ subnet=192.168.139.0
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
[gfx]
|
||||
; Enables the graphics hook.
|
||||
enable=1
|
||||
; Force the game to run windowed.
|
||||
windowed=1
|
||||
; Add a frame to the game window if running windowed.
|
||||
framed=1
|
||||
; Select the monitor to run the game on. (Fullscreen only, 0 =primary screen)
|
||||
monitor=0
|
||||
; Enable DPI awareness for the game process, preventing Windows from stretching the game window if a DPI scaling higher than 100% is used
|
||||
dpiAware=1
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; LED settings
|
||||
|
4
dist/chusan/segatools.ini
vendored
4
dist/chusan/segatools.ini
vendored
@ -82,12 +82,16 @@ dipsw3=1
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
[gfx]
|
||||
; Enables the graphics hook.
|
||||
enable=1
|
||||
; Force the game to run windowed.
|
||||
windowed=1
|
||||
; Add a frame to the game window if running windowed.
|
||||
framed=0
|
||||
; Select the monitor to run the game on. (Fullscreen only, 0 =primary screen)
|
||||
monitor=0
|
||||
; Enable DPI awareness for the game process, preventing Windows from stretching the game window if a DPI scaling higher than 100% is used
|
||||
dpiAware=1
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; LED settings
|
||||
|
0
dist/cm/start.bat → dist/cm/launch.bat
vendored
0
dist/cm/start.bat → dist/cm/launch.bat
vendored
6
dist/cxb/segatools.ini
vendored
6
dist/cxb/segatools.ini
vendored
@ -60,7 +60,7 @@ enable=1
|
||||
subnet=192.168.150.0
|
||||
billingCa=../DEVICE/ca.crt
|
||||
billingPub=../DEVICE/billing.pub
|
||||
billingType=2
|
||||
billingType=0
|
||||
|
||||
[eeprom]
|
||||
; See above
|
||||
@ -75,12 +75,16 @@ path=../DEVICE/sram.bin
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
[gfx]
|
||||
; Enables the graphics hook.
|
||||
enable=1
|
||||
; Force the game to run windowed.
|
||||
windowed=1
|
||||
; Add a frame to the game window if running windowed.
|
||||
framed=1
|
||||
; Select the monitor to run the game on. (Fullscreen only, 0 =primary screen)
|
||||
monitor=0
|
||||
; Enable DPI awareness for the game process, preventing Windows from stretching the game window if a DPI scaling higher than 100% is used
|
||||
dpiAware=1
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Custom IO settings
|
||||
|
21
dist/diva/segatools.ini
vendored
21
dist/diva/segatools.ini
vendored
@ -5,7 +5,7 @@
|
||||
[vfs]
|
||||
; Insert the path to the game AMFS directory here (contains ICF1 and ICF2)
|
||||
amfs=
|
||||
; Insert the path to the game Option directory here (contains Axxx directories)
|
||||
; Insert the path to the game Option (mdata) directory here (contains Mxxx directories)
|
||||
option=
|
||||
; Create an empty directory somewhere and insert the path here.
|
||||
; This directory may be shared between multiple SEGA games.
|
||||
@ -36,6 +36,10 @@ default=127.0.0.1
|
||||
; Chunithm is extremely picky about its LAN environment, so leaving this
|
||||
; setting enabled is strongly recommended.
|
||||
enable=1
|
||||
; The final octet of the local host's IP address on the virtualized subnet (so,
|
||||
; if the keychip subnet is `192.168.32.0` and this value is set to `11`, then the
|
||||
; local host's virtualized LAN IP is `192.168.32.11`).
|
||||
addrSuffix=11
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Board settings
|
||||
@ -54,6 +58,21 @@ dipsw1=1
|
||||
; that subnet must start with 192.168.
|
||||
subnet=192.168.78.0
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Misc. hooks settings
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
[gfx]
|
||||
; Enables the graphics hook.
|
||||
enable=1
|
||||
; Force the game to run windowed.
|
||||
windowed=1
|
||||
; Add a frame to the game window if running windowed.
|
||||
framed=0
|
||||
; Enable DPI awareness for the game process, preventing Windows from stretching the game window if a DPI scaling higher than 100% is used
|
||||
dpiAware=1
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Custom IO settings
|
||||
; -----------------------------------------------------------------------------
|
||||
|
12
dist/fgo/segatools.ini
vendored
12
dist/fgo/segatools.ini
vendored
@ -41,7 +41,7 @@ portNo=17
|
||||
; 837-15093-06 LED board emulation setting.
|
||||
enable=1
|
||||
; COM port number for the LED board. Has to be the same as the FTDI port.
|
||||
portNo=17
|
||||
portNo1=17
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Network settings
|
||||
@ -85,6 +85,16 @@ freeplay=0
|
||||
; Misc. hook settings
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
[gfx]
|
||||
; Enables the graphics hook.
|
||||
enable=1
|
||||
; Force the game to run windowed.
|
||||
windowed=0
|
||||
; Add a frame to the game window if running windowed.
|
||||
framed=0
|
||||
; Enable DPI awareness for the game process, preventing Windows from stretching the game window if a DPI scaling higher than 100% is used
|
||||
dpiAware=1
|
||||
|
||||
[touch]
|
||||
; WinTouch emulation setting.
|
||||
enable=1
|
||||
|
1
dist/idac/segatools.ini
vendored
1
dist/idac/segatools.ini
vendored
@ -250,7 +250,6 @@ constantForceStrength=100
|
||||
damperStrength=100
|
||||
|
||||
; Rumble strength, used for road surface effects.
|
||||
; WARNING: THIS WILL CRASH ON FANATEC (maybe even more) WHEELS!
|
||||
rumbleStrength=100
|
||||
; Rumble duration factor from ms to µs, used to scale the duration of the rumble effect.
|
||||
rumbleDuration=1000
|
||||
|
2
dist/idz/start.bat → dist/idz/launch.bat
vendored
2
dist/idz/start.bat → dist/idz/launch.bat
vendored
@ -2,7 +2,7 @@
|
||||
|
||||
pushd %~dp0
|
||||
|
||||
start /min "AM Daemon" inject -d -k idzhook.dll amdaemon.exe -c configDHCP_Final_Common.json configDHCP_Final_JP.json configDHCP_Final_JP_ST1.json configDHCP_Final_JP_ST2.json configDHCP_Final_EX.json configDHCP_Final_EX_ST1.json configDHCP_Final_EX_ST2.json
|
||||
start "AM Daemon" /min inject -d -k idzhook.dll amdaemon.exe -c configDHCP_Final_Common.json configDHCP_Final_JP.json configDHCP_Final_JP_ST1.json configDHCP_Final_JP_ST2.json configDHCP_Final_EX.json configDHCP_Final_EX_ST1.json configDHCP_Final_EX_ST2.json
|
||||
|
||||
rem Set dipsw1=0 and uncomment the ServerBox for in store battle?
|
||||
rem inject -k idzhook.dll ServerBoxD8_Nu_x64.exe
|
4
dist/idz/segatools.ini
vendored
4
dist/idz/segatools.ini
vendored
@ -97,6 +97,9 @@ windowed=0
|
||||
framed=1
|
||||
; Select the monitor to run the game on. (Fullscreen only, 0=primary screen)
|
||||
monitor=0
|
||||
; Enable DPI awareness for the game process, preventing Windows from stretching the game window if a DPI scaling higher than 100% is used
|
||||
dpiAware=1
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Custom IO settings
|
||||
@ -240,7 +243,6 @@ constantForceStrength=100
|
||||
damperStrength=100
|
||||
|
||||
; Rumble strength, used for road surface effects.
|
||||
; WARNING: THIS WILL CRASH ON FANATEC (maybe even more) WHEELS!
|
||||
rumbleStrength=100
|
||||
; Rumble duration factor from ms to µs, used to scale the duration of the rumble effect.
|
||||
rumbleDuration=1000
|
3
dist/kemono/segatools.ini
vendored
3
dist/kemono/segatools.ini
vendored
@ -89,6 +89,9 @@ enable=1
|
||||
serial_no="5A-A123"
|
||||
; Insert the path to the image output directory here.
|
||||
printerOutPath="DEVICE\print"
|
||||
; The length in milliseconds the printer should be busy printing.
|
||||
; Set to 0 to instantly finish printing.
|
||||
waitTime=20000
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; LED settings
|
||||
|
32
dist/mai2/segatools.ini
vendored
32
dist/mai2/segatools.ini
vendored
@ -69,6 +69,15 @@ freeplay=0
|
||||
; this to 1 on exactly one machine and set this to 0 on all others.
|
||||
dipsw1=1
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; LED settings
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
[led15070]
|
||||
; Enable emulation of the 837-15070-04 controlled lights, which handle the
|
||||
; cabinet and button LEDs.
|
||||
enable=1
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Misc. hook settings
|
||||
; -----------------------------------------------------------------------------
|
||||
@ -126,11 +135,22 @@ coin=0x72
|
||||
; Uncomment and complete the following sequence of settings to configure a
|
||||
; custom keybinding.
|
||||
[button]
|
||||
;1p_btn1=0x53
|
||||
;1p_btn2=0x53
|
||||
;1p_btn3=0x53
|
||||
enable=1
|
||||
;p1Btn1=0x53
|
||||
;p1Btn2=0x53
|
||||
;p1Btn3=0x53
|
||||
; ... etc ...
|
||||
;2p_btn1=0x53
|
||||
;2p_btn2=0x53
|
||||
;2p_btn3=0x53
|
||||
;p2Btn1=0x53
|
||||
;p2Btn2=0x53
|
||||
;p2Btn3=0x53
|
||||
; ... etc ...
|
||||
|
||||
[touch]
|
||||
p1Enable=1
|
||||
;p1DebugInput=0
|
||||
p2Enable=1
|
||||
;p2DebugInput=0
|
||||
;p1TouchA1=0x53
|
||||
;p1TouchA2=0x53
|
||||
; ... etc ...
|
||||
;p1TouchE8=0x53
|
||||
|
@ -1,10 +1,8 @@
|
||||
@echo off
|
||||
pushd %~dp0
|
||||
|
||||
taskkill /f /im amdaemon.exe > nul 2>&1
|
||||
|
||||
REM USA
|
||||
start "AM Daemon" /min inject -d -k mercuryhook.dll amdaemon.exe -f -c config.json config_lan_install_client.json config_lan_install_server.json config_video_clone.json config_video_dual.json config_video_clone_flip.json config_video_dual_flip.json config_region_exp.json config_region_chn.json config_region_usa.json
|
||||
REM start "AM Daemon" /min inject -d -k mercuryhook.dll amdaemon.exe -f -c config.json config_lan_install_client.json config_lan_install_server.json config_video_clone.json config_video_dual.json config_video_clone_flip.json config_video_dual_flip.json config_region_exp.json config_region_chn.json config_region_usa.json
|
||||
|
||||
REM JP
|
||||
start "AM Daemon" /min inject -d -k mercuryhook.dll amdaemon.exe -f -c config.json config_lan_install_client.json config_lan_install_server.json config_video_clone.json config_video_dual.json config_video_clone_flip.json config_video_dual_flip.json config_region_exp.json config_region_chn.json config_region_jpn.json
|
6
dist/mercury/segatools.ini
vendored
6
dist/mercury/segatools.ini
vendored
@ -5,7 +5,7 @@
|
||||
[vfs]
|
||||
; Insert the path to the game AMFS directory here (contains ICF1 and ICF2)
|
||||
amfs=
|
||||
; Insert the path to the game Option directory here (contains Axxx directories)
|
||||
; Insert the path to the game Option directory here (unused in Mercury)
|
||||
option=
|
||||
; Create an empty directory somewhere and insert the path here.
|
||||
; This directory may be shared between multiple SEGA games.
|
||||
@ -74,7 +74,11 @@ dipsw1=1
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
[gfx]
|
||||
; Enables the graphics hook.
|
||||
enable=1
|
||||
; Enable DPI awareness for the game process, preventing Windows from stretching the game window if a DPI scaling higher than 100% is used
|
||||
dpiAware=1
|
||||
|
||||
|
||||
; Hooks related to the touch boards
|
||||
[touch]
|
||||
|
4
dist/mu3/segatools.ini
vendored
4
dist/mu3/segatools.ini
vendored
@ -70,7 +70,11 @@ dipsw1=1
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
[gfx]
|
||||
; Enables the graphics hook.
|
||||
enable=1
|
||||
; Enable DPI awareness for the game process, preventing Windows from stretching the game window if a DPI scaling higher than 100% is used
|
||||
dpiAware=1
|
||||
|
||||
|
||||
[unity]
|
||||
; Enable Unity hook. This will allow you to run custom .NET code before the game
|
||||
|
1
dist/swdc/segatools.ini
vendored
1
dist/swdc/segatools.ini
vendored
@ -200,7 +200,6 @@ constantForceStrength=100
|
||||
damperStrength=100
|
||||
|
||||
; Rumble strength, used for road surface effects.
|
||||
; WARNING: THIS WILL CRASH ON FANATEC (maybe even more) WHEELS!
|
||||
rumbleStrength=100
|
||||
; Rumble duration factor from ms to µs, used to scale the duration of the rumble effect.
|
||||
rumbleDuration=1000
|
||||
|
@ -8,6 +8,9 @@
|
||||
#include "board/config.h"
|
||||
#include "board/sg-reader.h"
|
||||
|
||||
#include "hooklib/config.h"
|
||||
#include "hooklib/dvd.h"
|
||||
|
||||
#include "divahook/config.h"
|
||||
|
||||
#include "platform/config.h"
|
||||
@ -47,6 +50,8 @@ void diva_hook_config_load(
|
||||
platform_config_load(&cfg->platform, filename);
|
||||
amex_config_load(&cfg->amex, filename);
|
||||
aime_config_load(&cfg->aime, filename);
|
||||
dvd_config_load(&cfg->dvd, filename);
|
||||
gfx_config_load(&cfg->gfx, filename);
|
||||
diva_dll_config_load(&cfg->dll, filename);
|
||||
slider_config_load(&cfg->slider, filename);
|
||||
}
|
||||
|
@ -6,15 +6,23 @@
|
||||
|
||||
#include "board/sg-reader.h"
|
||||
|
||||
#include "hooklib/dvd.h"
|
||||
#include "hooklib/touch.h"
|
||||
|
||||
#include "gfxhook/config.h"
|
||||
|
||||
#include "platform/config.h"
|
||||
|
||||
#include "divahook/diva-dll.h"
|
||||
#include "divahook/slider.h"
|
||||
|
||||
#include "platform/platform.h"
|
||||
|
||||
struct diva_hook_config {
|
||||
struct platform_config platform;
|
||||
struct amex_config amex;
|
||||
struct aime_config aime;
|
||||
struct dvd_config dvd;
|
||||
struct gfx_config gfx;
|
||||
struct touch_screen_config touch;
|
||||
struct diva_dll_config dll;
|
||||
struct slider_config slider;
|
||||
};
|
||||
|
@ -22,6 +22,9 @@
|
||||
#include "divahook/jvs.h"
|
||||
#include "divahook/slider.h"
|
||||
|
||||
#include "gfxhook/gfx.h"
|
||||
#include "gfxhook/gl.h"
|
||||
|
||||
#include "hook/process.h"
|
||||
|
||||
#include "hooklib/serial.h"
|
||||
@ -30,6 +33,7 @@
|
||||
#include "platform/platform.h"
|
||||
|
||||
#include "util/dprintf.h"
|
||||
#include "util/env.h"
|
||||
|
||||
static HMODULE diva_hook_mod;
|
||||
static process_entry_t diva_startup;
|
||||
@ -38,15 +42,30 @@ static struct diva_hook_config diva_hook_cfg;
|
||||
static DWORD CALLBACK diva_pre_startup(void)
|
||||
{
|
||||
HRESULT hr;
|
||||
HMODULE dbghelp;
|
||||
|
||||
dprintf("--- Begin diva_pre_startup ---\n");
|
||||
|
||||
/* Pin dbghelp so the path hooks apply to it. */
|
||||
|
||||
dbghelp = LoadLibraryW(L"dbghelp.dll");
|
||||
|
||||
if (dbghelp != NULL) {
|
||||
dprintf("Pinned debug helper library, hMod=%p\n", dbghelp);
|
||||
}
|
||||
else {
|
||||
dprintf("Failed to load debug helper library!\n");
|
||||
}
|
||||
|
||||
/* Config load */
|
||||
|
||||
diva_hook_config_load(&diva_hook_cfg, L".\\segatools.ini");
|
||||
diva_hook_config_load(&diva_hook_cfg, get_config_path());
|
||||
|
||||
/* Hook Win32 APIs */
|
||||
|
||||
dvd_hook_init(&diva_hook_cfg.dvd, diva_hook_mod);
|
||||
gfx_hook_init(&diva_hook_cfg.gfx);
|
||||
gfx_gl_hook_init(&diva_hook_cfg.gfx, diva_hook_mod);
|
||||
serial_hook_init();
|
||||
|
||||
/* Initialize emulation hooks */
|
||||
@ -87,7 +106,7 @@ static DWORD CALLBACK diva_pre_startup(void)
|
||||
|
||||
/* Initialize debug helpers */
|
||||
|
||||
spike_hook_init(L".\\segatools.ini");
|
||||
spike_hook_init(get_config_path());
|
||||
|
||||
dprintf("--- End diva_pre_startup ---\n");
|
||||
|
||||
|
@ -63,33 +63,33 @@ static void diva_jvs_read_switches(void *ctx, struct io3_switch_state *out)
|
||||
|
||||
diva_dll.jvs_poll(&opbtn, &gamebtn);
|
||||
|
||||
if (gamebtn & 0x01) {
|
||||
if (gamebtn & DIVA_IO_GAMEBTN_CIRCLE) {
|
||||
out->p1 |= 1 << 6;
|
||||
}
|
||||
|
||||
if (gamebtn & 0x02) {
|
||||
if (gamebtn & DIVA_IO_GAMEBTN_CROSS) {
|
||||
out->p1 |= 1 << 7;
|
||||
}
|
||||
|
||||
if (gamebtn & 0x04) {
|
||||
if (gamebtn & DIVA_IO_GAMEBTN_SQUARE) {
|
||||
out->p1 |= 1 << 8;
|
||||
}
|
||||
|
||||
if (gamebtn & 0x08) {
|
||||
if (gamebtn & DIVA_IO_GAMEBTN_TRIANGLE) {
|
||||
out->p1 |= 1 << 9;
|
||||
}
|
||||
|
||||
if (gamebtn & 0x10) {
|
||||
if (gamebtn & DIVA_IO_GAMEBTN_START) {
|
||||
out->p1 |= 1 << 15;
|
||||
}
|
||||
|
||||
if (opbtn & 0x01) {
|
||||
if (opbtn & DIVA_IO_OPBTN_TEST) {
|
||||
out->system = 0x80;
|
||||
} else {
|
||||
out->system = 0;
|
||||
}
|
||||
|
||||
if (opbtn & 0x02) {
|
||||
if (opbtn & DIVA_IO_OPBTN_SERVICE) {
|
||||
out->p1 |= 1 << 14;
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ shared_library(
|
||||
include_directories : inc,
|
||||
implicit_include_directories : false,
|
||||
vs_module_defs : 'divahook.def',
|
||||
c_pch : '../precompiled.h',
|
||||
dependencies : [
|
||||
capnhook.get_variable('hook_dep'),
|
||||
capnhook.get_variable('hooklib_dep'),
|
||||
@ -14,6 +13,7 @@ shared_library(
|
||||
amex_lib,
|
||||
board_lib,
|
||||
divaio_lib,
|
||||
gfxhook_lib,
|
||||
hooklib_lib,
|
||||
jvs_lib,
|
||||
platform_lib,
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
#include "divaio/divaio.h"
|
||||
#include "divaio/config.h"
|
||||
#include "util/env.h"
|
||||
|
||||
static unsigned int __stdcall diva_io_slider_thread_proc(void *ctx);
|
||||
|
||||
@ -23,7 +24,7 @@ uint16_t diva_io_get_api_version(void)
|
||||
|
||||
HRESULT diva_io_jvs_init(void)
|
||||
{
|
||||
diva_io_config_load(&diva_io_cfg, L".\\segatools.ini");
|
||||
diva_io_config_load(&diva_io_cfg, get_config_path());
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
@ -37,11 +38,11 @@ void diva_io_jvs_poll(uint8_t *opbtn_out, uint8_t *gamebtn_out)
|
||||
opbtn = 0;
|
||||
|
||||
if (GetAsyncKeyState(diva_io_cfg.vk_test) & 0x8000) {
|
||||
opbtn |= 1;
|
||||
opbtn |= DIVA_IO_OPBTN_TEST;
|
||||
}
|
||||
|
||||
if (GetAsyncKeyState(diva_io_cfg.vk_service) & 0x8000) {
|
||||
opbtn |= 2;
|
||||
opbtn |= DIVA_IO_OPBTN_SERVICE;
|
||||
}
|
||||
|
||||
for (i = 0 ; i < _countof(diva_io_cfg.vk_buttons) ; i++) {
|
||||
|
@ -5,6 +5,19 @@
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
enum {
|
||||
DIVA_IO_OPBTN_TEST = 0x01,
|
||||
DIVA_IO_OPBTN_SERVICE = 0x02
|
||||
};
|
||||
|
||||
enum {
|
||||
DIVA_IO_GAMEBTN_CIRCLE = 0x01,
|
||||
DIVA_IO_GAMEBTN_CROSS = 0x02,
|
||||
DIVA_IO_GAMEBTN_SQUARE = 0x04,
|
||||
DIVA_IO_GAMEBTN_TRIANGLE = 0x08,
|
||||
DIVA_IO_GAMEBTN_START = 0x10,
|
||||
};
|
||||
|
||||
/* Get the version of the Project Diva IO API that this DLL supports. This
|
||||
function should return a positive 16-bit integer, where the high byte is
|
||||
the major version and the low byte is the minor version (as defined by the
|
||||
|
@ -3,7 +3,6 @@ divaio_lib = static_library(
|
||||
name_prefix : '',
|
||||
include_directories : inc,
|
||||
implicit_include_directories : false,
|
||||
c_pch : '../precompiled.h',
|
||||
sources : [
|
||||
'divaio.c',
|
||||
'divaio.h',
|
||||
|
@ -44,7 +44,7 @@ option=../../option
|
||||
1. In the `[dns]` section, set `default=` to your computer's hostname or LAN IP. Do not put
|
||||
`127.0.0.1` here, the game specifically checks for and rejects loopback addresses. This setting
|
||||
controls the address of the network services server
|
||||
1. Right click `start.bat` in `app/bin` and run it as Administrator. I think you need to run it as
|
||||
1. Right click `launch.bat` in `app/bin` and run it as Administrator. I think you need to run it as
|
||||
admin at least once, but once you have done that you can run the game as a regular user
|
||||
1. A sequence of several start-up screens will be displayed. You should also see a bunch of debug
|
||||
output in a command line window; if you're seeing hex dumps here then that's a good sign. There
|
||||
|
@ -6,6 +6,17 @@ all games.
|
||||
Keyboard binding settings use
|
||||
[Virtual-Key Codes](https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes).
|
||||
|
||||
## Config Path
|
||||
The default file path for config file is `./segatools.ini`.
|
||||
|
||||
You can modify environment variable `SEGATOOLS_CONFIG_PATH` to another path.
|
||||
|
||||
For example, You can have another `launch.bat` with following code in it,
|
||||
Then you can copy `segatools.ini` to `another_config.ini` but with different dns host in it
|
||||
```bat
|
||||
set SEGATOOLS_CONFIG_PATH=.\another_config.ini
|
||||
```
|
||||
|
||||
## `[aimeio]`
|
||||
|
||||
Controls the card reader driver.
|
||||
@ -31,6 +42,12 @@ Default: `1`
|
||||
Enable Aime card reader assembly emulation. Disable to use a real SEGA Aime
|
||||
reader (COM port number varies by game).
|
||||
|
||||
### `portNo`
|
||||
|
||||
Default: (game specific)
|
||||
|
||||
Sets the COM port to use for the aime card reader assembly.
|
||||
|
||||
### `highBaud`
|
||||
|
||||
Default: `1`
|
||||
@ -197,6 +214,30 @@ Default: Empty string (i.e. use value from `default` setting)
|
||||
|
||||
Overrides the target of the `aime.naominet.jp` host lookup.
|
||||
|
||||
### `replaceHost`
|
||||
|
||||
Default: `0`
|
||||
|
||||
Replace the HOST field in HTTP request headers with the settings above. This may help bypass network restrictions in some regions.
|
||||
|
||||
### `startupPort`
|
||||
|
||||
Default: `0` (i.e. no operation will perform)
|
||||
|
||||
Overrides the port of connections to the `startup` server. The current implementation affects every TCP connection to the port 80.
|
||||
|
||||
### `billingPort`
|
||||
|
||||
Default: `0` (i.e. no operation will perform)
|
||||
|
||||
Overrides the port of connections to the `billing` server. The current implementation affects every TCP connection to the port 8443.
|
||||
|
||||
### `aimedbPort`
|
||||
|
||||
Default: `0` (i.e. no operation will perform)
|
||||
|
||||
Overrides the port of connections to the `aimedb` server. The current implementation affects every TCP connection to the port 22345.
|
||||
|
||||
## `[ds]`
|
||||
|
||||
Controls emulation of the "DS (Dallas Semiconductor) EEPROM" chip on the AMEX
|
||||
@ -301,6 +342,38 @@ Nu chassis DIP switch settings:
|
||||
- `111`: 1920x1080
|
||||
- Switch 8: Game-specific. Not used in any shipping game.
|
||||
|
||||
## `[gfx]`
|
||||
|
||||
### `enable`
|
||||
|
||||
Default: `1`
|
||||
|
||||
Enables graphic hooks.
|
||||
|
||||
### `windowed`
|
||||
|
||||
Default: `0`
|
||||
|
||||
Force the game to run windowed.
|
||||
|
||||
### `framed`
|
||||
|
||||
Default: `0`
|
||||
|
||||
Add a frame to the game window if running windowed.
|
||||
|
||||
### `monitor`
|
||||
|
||||
Default: `0`
|
||||
|
||||
Select the monitor to run the game on. (Fullscreen only, 0 = primary screen)
|
||||
|
||||
### `dpiAware`
|
||||
|
||||
Default: `1`
|
||||
|
||||
Sets the game to be DPI-aware. This prevents Windows automatically scaling the game window by your desktop's scaling factor, which may cause blurry graphics.
|
||||
|
||||
## `[hwmon]`
|
||||
|
||||
Configure stub implementation of the platform hardware monitor driver. The
|
||||
@ -379,18 +452,22 @@ Default: (Varies depending on game)
|
||||
|
||||
Override the game's four-character platform code (e.g. `AAV2` for Nu 2). This
|
||||
is actually supposed to be a separate three-character `platformId` and
|
||||
integer `modelType` setting, but they are combined here for convenience. Valid
|
||||
values include:
|
||||
integer `modelType` setting, but they are combined here for convenience.
|
||||
|
||||
- `AAV0`: Nu 1 (Project DIVA)
|
||||
- `AAV1`: Nu 1.1 (Chunithm)
|
||||
- `AAV2`: Nu 2 (Initial D Zero)
|
||||
- `AAW0`: NuSX 1
|
||||
- `AAW1`: NuSX 1.1
|
||||
- `ACA0`: ALLS UX
|
||||
- `ACA1`: ALLS HX
|
||||
- `ACA2`: ALLS UX (without dedicated GPU)
|
||||
- `ACA4`: ALLS MX
|
||||
`platformId` is one of the following:
|
||||
- `AAV`: Nu 1/1.1/2
|
||||
- `AAW`: NuSX 1/1.1
|
||||
- `ACA`: ALLS UX/HX/MX
|
||||
|
||||
`modelType` is one of the following:
|
||||
- `1`: Server (SV)
|
||||
- `2`: Satalite (ST)
|
||||
- `3`: Live (LV)
|
||||
- `4`: Terminal (TN)
|
||||
|
||||
It's safe to assume that every game you'll be playing with these tools will be a Satalite.
|
||||
Some games care, others don't. Some even change how they run based on this value (Wonderland Wars
|
||||
will boot into terminal mode if `modelType` is 4).
|
||||
|
||||
### `region`
|
||||
|
||||
@ -427,15 +504,9 @@ the billing transactions.
|
||||
|
||||
Default: `1`
|
||||
|
||||
Set the billing "type" for the keychip. The type determins what kind of revenue share,
|
||||
if any, the game maker has with SEGA. Some games may be picky and require types other
|
||||
then 1 (ex. crossbeats REV. requires billing type 2), so this option is provided if this
|
||||
is an issue. Billing types are:
|
||||
|
||||
- 0: No billing?
|
||||
- 1: Billing type A
|
||||
- 2: Billing type B1
|
||||
- 3: Billing type B2
|
||||
Sets the billing type, a single bit value that flags the cabinet as a rental if set to `1`, or `0` otherwise.
|
||||
Certian games that were only sold officially as full purchases (that is, non-rentals) must have this value set to 0.
|
||||
NOTE: Crossbeats erroniously displays Billing modes A/B1/B2, but this value comes from the `modelType` and NOT this value!
|
||||
|
||||
### `systemFlag`
|
||||
|
||||
|
@ -65,7 +65,7 @@ felicaGen=0
|
||||
and fill it with 20 digits, for example `01234567891234567890`. Make sure to
|
||||
save the file.
|
||||
|
||||
1. Right click `start.bat` in `package` and run it as Administrator. After the
|
||||
1. Right click `launch.bat` in `package` and run it as Administrator. After the
|
||||
first run you may be able to run the game as a normal user.
|
||||
1. Once you're at the title screen, press 2 or 3 a few times to add some
|
||||
credits, then _hold_ the Enter key for a few seconds to scan a card and start
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user