forked from Dniel97/segatools
added freeplay setting to ALLS games
This commit is contained in:
parent
3dd6054a1e
commit
4ffcf25555
@ -110,7 +110,6 @@ $(BUILD_DIR_ZIP)/swdc.zip:
|
|||||||
$(V)mkdir -p $(BUILD_DIR_ZIP)/swdc/DEVICE
|
$(V)mkdir -p $(BUILD_DIR_ZIP)/swdc/DEVICE
|
||||||
$(V)cp $(BUILD_DIR_64)/subprojects/capnhook/inject/inject.exe \
|
$(V)cp $(BUILD_DIR_64)/subprojects/capnhook/inject/inject.exe \
|
||||||
$(BUILD_DIR_64)/swdchook/swdchook.dll \
|
$(BUILD_DIR_64)/swdchook/swdchook.dll \
|
||||||
$(DIST_DIR)/swdc/config_hook.json \
|
|
||||||
$(DIST_DIR)/swdc/segatools.ini \
|
$(DIST_DIR)/swdc/segatools.ini \
|
||||||
$(DIST_DIR)/swdc/start.bat \
|
$(DIST_DIR)/swdc/start.bat \
|
||||||
$(BUILD_DIR_ZIP)/swdc
|
$(BUILD_DIR_ZIP)/swdc
|
||||||
|
5
dist/chusan/segatools.ini
vendored
5
dist/chusan/segatools.ini
vendored
@ -41,6 +41,11 @@ subnet=192.168.100.0
|
|||||||
; ALLS DIP switches.
|
; ALLS DIP switches.
|
||||||
enable=1
|
enable=1
|
||||||
|
|
||||||
|
; Enable freeplay mode. This will disable the coin slot and set the game to
|
||||||
|
; freeplay. Keep in mind that some game modes (e.g. Freedom/Time Modes) will not
|
||||||
|
; allow you to start a game in freeplay mode.
|
||||||
|
freeplay=0
|
||||||
|
|
||||||
; LAN Install: If multiple machines are present on the same LAN then set
|
; LAN Install: If multiple machines are present on the same LAN then set
|
||||||
; this to 1 on exactly one machine and set this to 0 on all others.
|
; this to 1 on exactly one machine and set this to 0 on all others.
|
||||||
dipsw1=1
|
dipsw1=1
|
||||||
|
5
dist/idac/segatools.ini
vendored
5
dist/idac/segatools.ini
vendored
@ -42,6 +42,11 @@ region=4
|
|||||||
; ALLS DIP switches.
|
; ALLS DIP switches.
|
||||||
enable=1
|
enable=1
|
||||||
|
|
||||||
|
; Enable freeplay mode. This will disable the coin slot and set the game to
|
||||||
|
; freeplay. Keep in mind that some game modes (e.g. Freedom/Time Modes) will not
|
||||||
|
; allow you to start a game in freeplay mode.
|
||||||
|
freeplay=0
|
||||||
|
|
||||||
; If multiple machines are present on the same LAN then set this to 1 on
|
; If multiple machines are present on the same LAN then set this to 1 on
|
||||||
; exactly one machine and set this to 0 on all others.
|
; exactly one machine and set this to 0 on all others.
|
||||||
dipsw1=1
|
dipsw1=1
|
||||||
|
5
dist/mai2/segatools.ini
vendored
5
dist/mai2/segatools.ini
vendored
@ -34,6 +34,11 @@ subnet=192.168.100.0
|
|||||||
; ALLS DIP switches.
|
; ALLS DIP switches.
|
||||||
enable=1
|
enable=1
|
||||||
|
|
||||||
|
; Enable freeplay mode. This will disable the coin slot and set the game to
|
||||||
|
; freeplay. Keep in mind that some game modes (e.g. Freedom/Time Modes) will not
|
||||||
|
; allow you to start a game in freeplay mode.
|
||||||
|
freeplay=0
|
||||||
|
|
||||||
; LAN Install: If multiple machines are present on the same LAN then set
|
; LAN Install: If multiple machines are present on the same LAN then set
|
||||||
; this to 1 on exactly one machine and set this to 0 on all others.
|
; this to 1 on exactly one machine and set this to 0 on all others.
|
||||||
dipsw1=1
|
dipsw1=1
|
||||||
|
46
dist/mercury/segatools.ini
vendored
46
dist/mercury/segatools.ini
vendored
@ -12,14 +12,6 @@ option=option
|
|||||||
; Note that 127.0.0.1, localhost etc are specifically rejected.
|
; Note that 127.0.0.1, localhost etc are specifically rejected.
|
||||||
default=127.0.0.1
|
default=127.0.0.1
|
||||||
|
|
||||||
[ds]
|
|
||||||
; Region code on the emulated AMEX board DS EEPROM.
|
|
||||||
; 1: Japan
|
|
||||||
; 4: Export (some UI elements in English)
|
|
||||||
;
|
|
||||||
; NOTE: Changing this setting causes a factory reset.
|
|
||||||
region=1
|
|
||||||
|
|
||||||
[netenv]
|
[netenv]
|
||||||
; Simulate an ideal LAN environment. This may interfere with head-to-head play.
|
; Simulate an ideal LAN environment. This may interfere with head-to-head play.
|
||||||
; SEGA games are somewhat picky about their LAN environment, so leaving this
|
; SEGA games are somewhat picky about their LAN environment, so leaving this
|
||||||
@ -35,12 +27,42 @@ subnet=192.168.174.0
|
|||||||
[gfx]
|
[gfx]
|
||||||
enable=1
|
enable=1
|
||||||
|
|
||||||
|
[gpio]
|
||||||
|
; ALLS DIP switches.
|
||||||
|
enable=1
|
||||||
|
|
||||||
|
; Enable freeplay mode. This will disable the coin slot and set the game to
|
||||||
|
; freeplay. Keep in mind that some game modes (e.g. Freedom/Time Modes) will not
|
||||||
|
; allow you to start a game in freeplay mode.
|
||||||
|
freeplay=0
|
||||||
|
|
||||||
|
; LAN Install: If multiple machines are present on the same LAN then set
|
||||||
|
; this to 1 on exactly one machine and set this to 0 on all others.
|
||||||
|
dipsw1=1
|
||||||
|
|
||||||
|
; -----------------------------------------------------------------------------
|
||||||
|
; Input settings
|
||||||
|
; -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
; Keyboard bindings are specified as hexadecimal (prefixed with 0x) or decimal
|
||||||
|
; (not prefixed with 0x) virtual-key codes, a list of which can be found here:
|
||||||
|
;
|
||||||
|
; https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
|
||||||
|
;
|
||||||
|
; This is, admittedly, not the most user-friendly configuration method in the
|
||||||
|
; world. An improved solution will be provided later.
|
||||||
|
|
||||||
[io4]
|
[io4]
|
||||||
; Input API selection for JVS input emulator.
|
; Test button virtual-key code. Default is the 1 key.
|
||||||
test=0x2D
|
test=0x31
|
||||||
service=0x2E
|
; Service button virtual-key code. Default is the 2 key.
|
||||||
coin=0x24
|
service=0x32
|
||||||
|
; Keyboard button to increment coin counter. Default is the 3 key.
|
||||||
|
coin=0x33
|
||||||
|
|
||||||
|
; Volume up virtual-key code. Default is the "UP" key.
|
||||||
volup=0x26
|
volup=0x26
|
||||||
|
; Volume down virtual-key code. Default is the "DOWN" key.
|
||||||
voldown=0x28
|
voldown=0x28
|
||||||
|
|
||||||
; Hooks related to the touch boards
|
; Hooks related to the touch boards
|
||||||
|
9
dist/mu3/segatools.ini
vendored
9
dist/mu3/segatools.ini
vendored
@ -34,6 +34,11 @@ subnet=192.168.162.0
|
|||||||
; ALLS DIP switches.
|
; ALLS DIP switches.
|
||||||
enable=1
|
enable=1
|
||||||
|
|
||||||
|
; Enable freeplay mode. This will disable the coin slot and set the game to
|
||||||
|
; freeplay. Keep in mind that some game modes (e.g. Freedom/Time Modes) will not
|
||||||
|
; allow you to start a game in freeplay mode.
|
||||||
|
freeplay=0
|
||||||
|
|
||||||
; LAN Install: If multiple machines are present on the same LAN then set
|
; LAN Install: If multiple machines are present on the same LAN then set
|
||||||
; this to 1 on exactly one machine and set this to 0 on all others.
|
; this to 1 on exactly one machine and set this to 0 on all others.
|
||||||
dipsw1=1
|
dipsw1=1
|
||||||
@ -41,6 +46,10 @@ dipsw1=1
|
|||||||
[gfx]
|
[gfx]
|
||||||
enable=1
|
enable=1
|
||||||
|
|
||||||
|
[led15093]
|
||||||
|
; 837-15093-06 LED board emulation setting.
|
||||||
|
enable=1
|
||||||
|
|
||||||
; -----------------------------------------------------------------------------
|
; -----------------------------------------------------------------------------
|
||||||
; Input settings
|
; Input settings
|
||||||
; -----------------------------------------------------------------------------
|
; -----------------------------------------------------------------------------
|
||||||
|
10
dist/swdc/config_hook.json
vendored
10
dist/swdc/config_hook.json
vendored
@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"aime" :
|
|
||||||
{
|
|
||||||
"firmware_path" :
|
|
||||||
[
|
|
||||||
".\\aime_firm\\TN32MSEC003S_V12.hex",
|
|
||||||
".\\aime_firm\\update_15396_6728_94.bin"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
9
dist/swdc/segatools.ini
vendored
9
dist/swdc/segatools.ini
vendored
@ -40,6 +40,15 @@ path=
|
|||||||
; Leave empty if you want to use Segatools built-in gamepad/wheel input.
|
; Leave empty if you want to use Segatools built-in gamepad/wheel input.
|
||||||
path=
|
path=
|
||||||
|
|
||||||
|
[gpio]
|
||||||
|
; ALLS DIP switches.
|
||||||
|
enable=1
|
||||||
|
|
||||||
|
; Enable freeplay mode. This will disable the coin slot and set the game to
|
||||||
|
; freeplay. Keep in mind that some game modes (e.g. Freedom/Time Modes) will not
|
||||||
|
; allow you to start a game in freeplay mode.
|
||||||
|
freeplay=0
|
||||||
|
|
||||||
; -----------------------------------------------------------------------------
|
; -----------------------------------------------------------------------------
|
||||||
; Input settings
|
; Input settings
|
||||||
; -----------------------------------------------------------------------------
|
; -----------------------------------------------------------------------------
|
||||||
|
2
dist/swdc/start.bat
vendored
2
dist/swdc/start.bat
vendored
@ -5,7 +5,7 @@ pushd %~dp0
|
|||||||
rem Matching Server
|
rem Matching Server
|
||||||
start /min ..\..\..\Tools\tdrserver.exe
|
start /min ..\..\..\Tools\tdrserver.exe
|
||||||
REM start /min inject -d -k swdchook.dll amdaemon.exe -c config.json config_LanClient.json config_MiniCabinet.json config_hook.json
|
REM start /min inject -d -k swdchook.dll amdaemon.exe -c config.json config_LanClient.json config_MiniCabinet.json config_hook.json
|
||||||
start /min inject -d -k swdchook.dll amdaemon.exe -c config.json config_LanServer.json config_MiniCabinet.json config_hook.json
|
start /min inject -d -k swdchook.dll amdaemon.exe -c config.json config_LanServer.json config_MiniCabinet.json
|
||||||
REM Valid -launch parameters are "PC", "Cabinet" and "MiniCabinet
|
REM Valid -launch parameters are "PC", "Cabinet" and "MiniCabinet
|
||||||
inject -d -k swdchook.dll ..\Todoroki\Binaries\Win64\Todoroki-Win64-Shipping.exe -launch=MiniCabinet -ABSLOG="..\..\..\..\..\Userdata\Todoroki.log" -UserDir="..\..\..\Userdata" -NotInstalled -UNATTENDED
|
inject -d -k swdchook.dll ..\Todoroki\Binaries\Win64\Todoroki-Win64-Shipping.exe -launch=MiniCabinet -ABSLOG="..\..\..\..\..\Userdata\Todoroki.log" -UserDir="..\..\..\Userdata" -NotInstalled -UNATTENDED
|
||||||
|
|
||||||
|
@ -330,6 +330,7 @@ void dipsw_config_load(struct dipsw_config *cfg, const wchar_t *filename)
|
|||||||
assert(filename != NULL);
|
assert(filename != NULL);
|
||||||
|
|
||||||
cfg->enable = GetPrivateProfileIntW(L"gpio", L"enable", 0, filename);
|
cfg->enable = GetPrivateProfileIntW(L"gpio", L"enable", 0, filename);
|
||||||
|
cfg->freeplay = GetPrivateProfileIntW(L"gpio", L"freeplay", 0, filename);
|
||||||
|
|
||||||
wcscpy_s(name, _countof(name), L"dipsw0");
|
wcscpy_s(name, _countof(name), L"dipsw0");
|
||||||
|
|
||||||
|
@ -19,20 +19,29 @@
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint32_t checksum;
|
uint32_t checksum;
|
||||||
char padding_1[4];
|
char padding[6];
|
||||||
|
uint8_t freeplay;
|
||||||
|
char data[DATA_SIZE - 2];
|
||||||
|
} CreditBlock;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t checksum;
|
||||||
|
char padding[4];
|
||||||
uint8_t dip_switches;
|
uint8_t dip_switches;
|
||||||
char data[DATA_SIZE];
|
char data[DATA_SIZE];
|
||||||
} DipSwitchBlock;
|
} DipSwitchBlock;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
CreditBlock credit_block;
|
||||||
DipSwitchBlock dip_switch_block;
|
DipSwitchBlock dip_switch_block;
|
||||||
char *data;
|
char *data;
|
||||||
} DipSwitches;
|
} SystemInfo;
|
||||||
|
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
static DipSwitches dip_switches;
|
static SystemInfo system_info;
|
||||||
|
|
||||||
static struct dipsw_config dipsw_config;
|
static struct dipsw_config dipsw_config;
|
||||||
static struct vfs_config vfs_config;
|
static struct vfs_config vfs_config;
|
||||||
@ -90,16 +99,21 @@ static void dipsw_read_sysfile(const wchar_t *sys_file)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
dip_switches.data = malloc(file_size);
|
system_info.data = malloc(file_size);
|
||||||
fread(dip_switches.data, 1, file_size, f);
|
fread(system_info.data, 1, file_size, f);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
|
||||||
memcpy(&dip_switches.dip_switch_block, dip_switches.data + 0x2800, BLOCK_SIZE);
|
// copy the credit_block and dip_switch_block from the sysfile.dat
|
||||||
|
memcpy(&system_info.credit_block, system_info.data, BLOCK_SIZE);
|
||||||
|
memcpy(&system_info.dip_switch_block, system_info.data + 0x2800, BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dipsw_save_sysfile(const wchar_t *sys_file)
|
static void dipsw_save_sysfile(const wchar_t *sys_file)
|
||||||
{
|
{
|
||||||
|
char block[BLOCK_SIZE];
|
||||||
uint8_t dipsw = 0;
|
uint8_t dipsw = 0;
|
||||||
|
uint8_t freeplay = 0;
|
||||||
|
|
||||||
// open the sysfile.dat for writing in bytes mode
|
// open the sysfile.dat for writing in bytes mode
|
||||||
FILE *f = _wfopen(sys_file, L"rb+");
|
FILE *f = _wfopen(sys_file, L"rb+");
|
||||||
|
|
||||||
@ -119,33 +133,49 @@ static void dipsw_save_sysfile(const wchar_t *sys_file)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dip_switches.dip_switch_block.dip_switches = dipsw;
|
if (dipsw_config.freeplay)
|
||||||
|
{
|
||||||
|
// print that freeplay is enabled
|
||||||
|
dprintf("DipSw: Freeplay enabled\n");
|
||||||
|
freeplay = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// set the new credit block
|
||||||
|
system_info.credit_block.freeplay = freeplay;
|
||||||
|
// set the new dip_switch_block
|
||||||
|
system_info.dip_switch_block.dip_switches = dipsw;
|
||||||
|
|
||||||
// calculate the new checksum, skip the old crc32 value
|
// calculate the new checksum, skip the old crc32 value
|
||||||
// which is at the beginning of the block, thats's why the +4
|
// which is at the beginning of the block, thats's why the +4
|
||||||
// conver the struct to chars in order for the crc32 calculation to work
|
// conver the struct to chars in order for the crc32 calculation to work
|
||||||
dip_switches.dip_switch_block.checksum = crc32(
|
system_info.credit_block.checksum = crc32(
|
||||||
(char *)&dip_switches.dip_switch_block + 4, BLOCK_SIZE - 4, 0);
|
(char *)&system_info.credit_block + 4, BLOCK_SIZE - 4, 0);
|
||||||
|
system_info.dip_switch_block.checksum = crc32(
|
||||||
|
(char *)&system_info.dip_switch_block + 4, BLOCK_SIZE - 4, 0);
|
||||||
|
|
||||||
|
// build the new credit block
|
||||||
|
memcpy(block, (char *)&system_info.credit_block, BLOCK_SIZE);
|
||||||
|
|
||||||
|
memcpy(system_info.data, block, BLOCK_SIZE);
|
||||||
|
memcpy(system_info.data + 0x3000, block, BLOCK_SIZE);
|
||||||
|
|
||||||
// build the new dip switch block
|
// build the new dip switch block
|
||||||
char block[BLOCK_SIZE];
|
memcpy(block, (char *)&system_info.dip_switch_block, BLOCK_SIZE);
|
||||||
memcpy(block, (char *)&dip_switches.dip_switch_block, BLOCK_SIZE);
|
|
||||||
|
|
||||||
// replace the old block with the new one
|
memcpy(system_info.data + 0x2800, block, BLOCK_SIZE);
|
||||||
memcpy(dip_switches.data + 0x2800, block, BLOCK_SIZE);
|
memcpy(system_info.data + 0x5800, block, BLOCK_SIZE);
|
||||||
memcpy(dip_switches.data + 0x5800, block, BLOCK_SIZE);
|
|
||||||
|
|
||||||
// print the dip_switch_block in hex
|
// print the dip_switch_block in hex
|
||||||
/*
|
/*
|
||||||
dprintf("DipSw Block: ");
|
dprintf("DipSw Block: ");
|
||||||
for (size_t i = 0; i < BLOCK_SIZE; i++)
|
for (size_t i = 0; i < BLOCK_SIZE; i++)
|
||||||
{
|
{
|
||||||
dprintf("%02X ", ((uint8_t *)&dip_switches.dip_switch_block)[i]);
|
dprintf("%02X ", ((uint8_t *)&system_info.dip_switch_block)[i]);
|
||||||
}
|
}
|
||||||
dprintf("\n");
|
dprintf("\n");
|
||||||
*/
|
*/
|
||||||
|
|
||||||
fwrite(dip_switches.data, 1, 0x6000, f);
|
fwrite(system_info.data, 1, 0x6000, f);
|
||||||
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
struct dipsw_config {
|
struct dipsw_config {
|
||||||
bool enable;
|
bool enable;
|
||||||
|
bool freeplay;
|
||||||
bool dipsw[8];
|
bool dipsw[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user