Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
c5f6496adf | ||
8078821d7c | |||
1bc0bc65e3 | |||
da041efcec | |||
a67e50866e | |||
8ace7dace5 | |||
84489e8fae |
36
README.md
36
README.md
@ -2,43 +2,37 @@
|
|||||||
|
|
||||||
chuniio driver for tasoller custom 2.0 firmware
|
chuniio driver for tasoller custom 2.0 firmware
|
||||||
now with working air tower LEDs when using [Dniel97 segatools](https://gitea.tendokyu.moe/Dniel97/segatools/src/branch/chuniio)
|
now with working air tower LEDs when using [Dniel97 segatools](https://gitea.tendokyu.moe/Dniel97/segatools/src/branch/chuniio)
|
||||||
this currently only works with the chuniio branch of segatools, but may work on the main branch in the future
|
|
||||||
|
|
||||||
thanks to:
|
thanks to:
|
||||||
- [**akiroz**](https://dev.s-ul.net/akiroz/chuniio-tasoller) for the original code and USB Protocol information
|
- [**akiroz**](https://dev.s-ul.net/akiroz/chuniio-tasoller) for the original code and USB Protocol information
|
||||||
- [**Dniel97**](https://gitea.tendokyu.moe/Dniel97) for rewritting my failed attempts at making this work
|
- [**Dniel97**](https://gitea.tendokyu.moe/Dniel97) for rewritting my failed attempts at making this work
|
||||||
|
|
||||||
|
|
||||||
the current implementation may not be fully arcade accurate, but should be visually acceptable during gameplay
|
|
||||||
this should hopefully be addressed in the future
|
|
||||||
|
|
||||||
|
|
||||||
Supported titles:
|
Supported titles:
|
||||||
- Chunithm
|
- CHUNITHM
|
||||||
- Chunithm NEW
|
- CHUNITHM NEW
|
||||||
- Chunithm NEW PLUS
|
- CHUNITHM NEW PLUS
|
||||||
- Chunithm SUN
|
- CHUNITHM SUN
|
||||||
- Chunithm SUN PLUS
|
- CHUNITHM SUN PLUS
|
||||||
|
- CHUNITHM LUMINOUS
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
|
- For modern CHUNITHM (NEW and above)
|
||||||
|
|
||||||
segatools.ini
|
segatools.ini
|
||||||
```ini
|
```ini
|
||||||
[chuniio]
|
[chuniio]
|
||||||
;; For Chunithm
|
|
||||||
;path=chuniio_tasoller.dll
|
|
||||||
;; For Chunithm NEW or newer
|
|
||||||
path32=chuniio_tasoller.dll
|
path32=chuniio_tasoller.dll
|
||||||
path64=chuniio_tasoller_x64.dll
|
path64=chuniio_tasoller_x64.dll
|
||||||
|
```
|
||||||
|
|
||||||
;; Uncomment for Chunithm NEW or newer
|
- For older CHUNITHM (PARADISE LOST and older)
|
||||||
chusan=1
|
|
||||||
|
|
||||||
[io3]
|
segatools.ini
|
||||||
test=0x31
|
```ini
|
||||||
service=0x32
|
[chuniio]
|
||||||
coin=0x33
|
path=chuniio_tasoller.dll
|
||||||
|
chusan=0
|
||||||
```
|
```
|
||||||
|
|
||||||
## USB Protocol
|
## USB Protocol
|
||||||
|
44
src/main.zig
44
src/main.zig
@ -201,10 +201,10 @@ pub export fn DllMain(hDllHandle: HANDLE, dwReason: DWORD, lpreserved: LPVOID) B
|
|||||||
const cfg_file = ".\\segatools.ini";
|
const cfg_file = ".\\segatools.ini";
|
||||||
std.log.info("[chuniio] Loading config from {s}", .{cfg_file});
|
std.log.info("[chuniio] Loading config from {s}", .{cfg_file});
|
||||||
cfg = .{
|
cfg = .{
|
||||||
.test_key = @as(i32, @intCast(GetPrivateProfileIntA("io3", "test", 0x31, cfg_file))),
|
.test_key = @as(i32, @intCast(GetPrivateProfileIntA("io3", "test", 0x70, cfg_file))),
|
||||||
.serv_key = @as(i32, @intCast(GetPrivateProfileIntA("io3", "service", 0x32, cfg_file))),
|
.serv_key = @as(i32, @intCast(GetPrivateProfileIntA("io3", "service", 0x71, cfg_file))),
|
||||||
.coin_key = @as(i32, @intCast(GetPrivateProfileIntA("io3", "coin", 0x33, cfg_file))),
|
.coin_key = @as(i32, @intCast(GetPrivateProfileIntA("io3", "coin", 0x72, cfg_file))),
|
||||||
.chusan = @as(i32, @intCast(GetPrivateProfileIntA("chuniio", "chusan", 0, cfg_file))),
|
.chusan = @as(i32, @intCast(GetPrivateProfileIntA("chuniio", "chusan", 1, cfg_file))),
|
||||||
};
|
};
|
||||||
|
|
||||||
return win32.zig.TRUE;
|
return win32.zig.TRUE;
|
||||||
@ -299,19 +299,39 @@ export fn chuni_io_led_set_colors(board: u8, rgb: ?[*]u8) void {
|
|||||||
var n: u32 = 0;
|
var n: u32 = 0;
|
||||||
if (board == 0) {
|
if (board == 0) {
|
||||||
const out = usb_out[96..168];
|
const out = usb_out[96..168];
|
||||||
while (n < 24) : (n += 1) {
|
const led_limit: u32 = 3;
|
||||||
out[n * 3 + 1] = rgb.?[0x96];
|
const i_limit: u32 = 8;
|
||||||
out[n * 3 + 0] = rgb.?[0x97];
|
|
||||||
out[n * 3 + 2] = rgb.?[0x98];
|
var led: u32 = 0;
|
||||||
|
while (led < led_limit) {
|
||||||
|
var i: u32 = 0;
|
||||||
|
while (i < i_limit) {
|
||||||
|
n = (8 * led) + i;
|
||||||
|
out[n * 3 + 1] = rgb.?[0x96 + (led * 3)];
|
||||||
|
out[n * 3 + 0] = rgb.?[0x97 + (led * 3)];
|
||||||
|
out[n * 3 + 2] = rgb.?[0x98 + (led * 3)];
|
||||||
|
i += 1;
|
||||||
}
|
}
|
||||||
|
led += 1;
|
||||||
|
}
|
||||||
} else if (board == 1) {
|
} else if (board == 1) {
|
||||||
const out = usb_out[168..240];
|
const out = usb_out[168..240];
|
||||||
while (n < 24) : (n += 1) {
|
const led_limit: u32 = 3;
|
||||||
out[n * 3 + 1] = rgb.?[0xb4];
|
const i_limit: u32 = 8;
|
||||||
out[n * 3 + 0] = rgb.?[0xb5];
|
|
||||||
out[n * 3 + 2] = rgb.?[0xb6];
|
var led: u32 = 0;
|
||||||
|
while (led < led_limit) {
|
||||||
|
var i: u32 = 0;
|
||||||
|
while (i < i_limit) {
|
||||||
|
n = (8 * led) + i;
|
||||||
|
out[n * 3 + 1] = rgb.?[0xb4 + (led * 3)];
|
||||||
|
out[n * 3 + 0] = rgb.?[0xb5 + (led * 3)];
|
||||||
|
out[n * 3 + 2] = rgb.?[0xb6 + (led * 3)];
|
||||||
|
i += 1;
|
||||||
}
|
}
|
||||||
|
led += 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
usb_out_op.lock();
|
usb_out_op.lock();
|
||||||
defer usb_out_op.unlock();
|
defer usb_out_op.unlock();
|
||||||
|
Loading…
Reference in New Issue
Block a user