mirror of
https://github.com/Rosalie241/RMG.git
synced 2026-07-12 01:54:01 +02:00
Compare commits
27 Commits
v0.5.6
...
core-rsp-patch
| Author | SHA1 | Date | |
|---|---|---|---|
| 0bf19e6c44 | |||
| eb6dd8068e | |||
| 30993dd73a | |||
| 363131c175 | |||
| 41b510e7c5 | |||
| a6da96cf82 | |||
| dcfcf8bc27 | |||
| 86c240f669 | |||
| 56b14ab54c | |||
| 7dee6c3989 | |||
| b86f520ee7 | |||
| 31ae8cbc57 | |||
| e8f10693c7 | |||
| cb07131fbb | |||
| 3392fe8d62 | |||
| bc7efed0ba | |||
| e80e202f7b | |||
| db9bd5d9ca | |||
| 685aa597c7 | |||
| ed9d9cbc0d | |||
| 3044f406c4 | |||
| 7e596c1509 | |||
| 7e239ae2ae | |||
| 84681fdd0d | |||
| 2d3514de7f | |||
| 768064a2e1 | |||
| df426f12cf |
@@ -74,6 +74,7 @@ jobs:
|
||||
mingw-w64-x86_64-libsamplerate
|
||||
mingw-w64-x86_64-nasm
|
||||
mingw-w64-x86_64-minizip
|
||||
mingw-w64-x86_64-vulkan-headers
|
||||
git
|
||||
- name: Prepare Environment
|
||||
run: |
|
||||
|
||||
@@ -11,6 +11,7 @@ option(DRAG_DROP "Enables drag and drop" ON)
|
||||
option(VRU "Enables VRU support in RMG-Input" ON)
|
||||
option(USE_CCACHE "Enables usage of ccache when ccache has been found" ON)
|
||||
option(USE_LTO "Enables building with LTO/IPO when compiler supports it" ON)
|
||||
option(NO_ASM "Disables the usage of assembly in the mupen64plus-core" OFF)
|
||||
option(NO_RUST "Disables the building of rust subprojects" OFF)
|
||||
option(USE_LIBFMT "Enables usage of libfmt instead of detecting whether std::format is supported" OFF)
|
||||
option(USE_ANGRYLION "Enables building angrylion-rdp-plus which uses a non-GPL compliant license" OFF)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Maintainer: Rosalie Wanders <rosalie@mailbox.org>
|
||||
pkgname=rmg
|
||||
pkgver=0.5.6
|
||||
pkgver=0.5.8
|
||||
pkgrel=1
|
||||
pkgdesc="Rosalie's Mupen GUI"
|
||||
arch=('x86_64' 'aarch64')
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Name: RMG
|
||||
Version: 0.5.6
|
||||
Version: 0.5.8
|
||||
Release: %autorelease
|
||||
Summary: Rosalie's Mupen GUI
|
||||
|
||||
@@ -45,6 +45,9 @@ Rosalie's Mupen GUI is a free and open-source mupen64plus front-end written in C
|
||||
|
||||
%install
|
||||
%cmake_install
|
||||
chmod +x %{buildroot}/usr/lib64/RMG/*.so
|
||||
chmod +x %{buildroot}/usr/lib64/RMG/*/*.so
|
||||
chmod +x %{buildroot}/usr/lib64/RMG/*/*/*.so
|
||||
|
||||
%files
|
||||
/usr/bin/RMG
|
||||
|
||||
@@ -33,6 +33,28 @@
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<releases>
|
||||
<release version="v0.5.8" date="2024-03-25" type="stable">
|
||||
<description>
|
||||
<p>Changes:</p>
|
||||
<ul>
|
||||
<li>Fix incorrect usage of cmake's GNUInstallDirs (thank you OPNA2608)</li>
|
||||
<li>Fix opening zipped ROMs when compiling with minizip-ng instead of minizip</li>
|
||||
<li>Fix RMG with paraLLEl crashing in mesa when using musl libc (thank you orbea and nekopsykose)</li>
|
||||
<li>Update GLideN64, parallel-rsp and SDL_GameControllerDB</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="v0.5.7" date="2024-01-26" type="stable">
|
||||
<description>
|
||||
<p>Changes:</p>
|
||||
<ul>
|
||||
<li>Fix backwards compatibility with older plugin setting format</li>
|
||||
<li>Add NO_ASM build option to build mupen64plus-core without asm (thank you orbea)</li>
|
||||
<li>Change default screenshot directory on Linux (thank you orbea)</li>
|
||||
<li>Update mupen64plus-core</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="v0.5.6" date="2024-01-23" type="stable">
|
||||
<description>
|
||||
<p>Changes:</p>
|
||||
|
||||
Vendored
+1
-1
@@ -71,7 +71,7 @@ ExternalProject_Add(mupen64plus-core
|
||||
BUILD_COMMAND ${MAKE_CMD} all -f ${M64P_CORE_DIR}/projects/unix/Makefile
|
||||
SRCDIR=${CMAKE_CURRENT_SOURCE_DIR}/mupen64plus-core/src
|
||||
SUBDIR=${CMAKE_CURRENT_SOURCE_DIR}/mupen64plus-core/subprojects
|
||||
OSD=0 NEW_DYNAREC=1 KEYBINDINGS=0 ACCURATE_FPU=1
|
||||
OSD=0 NEW_DYNAREC=1 NO_ASM=$<BOOL:${NO_ASM}> KEYBINDINGS=0 ACCURATE_FPU=1
|
||||
TARGET=${CORE_FILE} DEBUG=${MAKE_DEBUG}
|
||||
CC=${MAKE_CC_COMPILER} CXX=${MAKE_CXX_COMPILER}
|
||||
OPTFLAGS=${MAKE_OPTFLAGS}
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@
|
||||
[subrepo]
|
||||
remote = git@github.com:/gabomdq/SDL_GameControllerDB.git
|
||||
branch = master
|
||||
commit = 006dd4c4ca51f57299a39ba9c2080a2ea7bfd2cc
|
||||
parent = 0ba2e370ff684e3cc37c1e8d656e9f4e54d7b635
|
||||
commit = e5a5fa2ac6e645d72c619ea99520a3a4586ee005
|
||||
parent = cb07131fbbf9cf9f139ef4281799613a71580182
|
||||
method = merge
|
||||
cmdver = 0.4.6
|
||||
|
||||
+56
-14
@@ -23,7 +23,7 @@
|
||||
03000000c82d00001151000000000000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
|
||||
03000000c82d00000150000000000000,8BitDo M30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
|
||||
03000000c82d00000151000000000000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a2,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00000650000000000000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00000650000000000000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00005106000000000000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,guide:b2,leftshoulder:b8,lefttrigger:b9,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00002090000000000000,8BitDo Micro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
|
||||
03000000c82d00000310000000000000,8BitDo N30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,
|
||||
@@ -104,6 +104,7 @@
|
||||
030000007c1800000006000000000000,Alienware Dual Compatible PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000491900001904000000000000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows,
|
||||
03000000710100001904000000000000,Amazon Luna Controller,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b8,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b4,rightstick:b7,rightx:a3,righty:a4,start:b6,x:b3,y:b2,platform:Windows,
|
||||
0300000008100000e501000000000000,Anbernic Game Pad,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000830500000160000000000000,Arcade,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b3,x:b4,y:b4,platform:Windows,
|
||||
03000000120c0000100e000000000000,Armor 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000490b00004406000000000000,ASCII Seamic Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
|
||||
@@ -114,6 +115,10 @@
|
||||
03000000050b00000679000000000000,ASUS ROG Kunai 3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000503200000110000000000000,Atari VCS Classic Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,start:b3,platform:Windows,
|
||||
03000000503200000210000000000000,Atari VCS Modern Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows,
|
||||
030000008a3500000102000000000000,Backbone One,a:b4,b:b5,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b10,leftstick:b17,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b18,righttrigger:b13,rightx:a3,righty:a4,start:b15,x:b7,y:b8,platform:Windows,
|
||||
030000008a3500000201000000000000,Backbone One,a:b4,b:b5,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b10,leftstick:b17,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b18,righttrigger:b13,rightx:a3,righty:a4,start:b15,x:b7,y:b8,platform:Windows,
|
||||
030000008a3500000302000000000000,Backbone One,a:b4,b:b5,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b10,leftstick:b17,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b18,righttrigger:b13,rightx:a3,righty:a4,start:b15,x:b7,y:b8,platform:Windows,
|
||||
030000008a3500000402000000000000,Backbone One,a:b4,b:b5,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b10,leftstick:b17,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b18,righttrigger:b13,rightx:a3,righty:a4,start:b15,x:b7,y:b8,platform:Windows,
|
||||
03000000e4150000103f000000000000,Batarang,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
|
||||
03000000d6200000e557000000000000,Batarang PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000c01100001352000000000000,Battalife Joystick,a:b6,b:b7,back:b2,leftshoulder:b0,leftx:a0,lefty:a1,rightshoulder:b1,start:b3,x:b4,y:b5,platform:Windows,
|
||||
@@ -254,6 +259,8 @@
|
||||
030000000d0f00005f00000000000000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000000d0f00005e00000000000000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000000d0f00008400000000000000,Hori Fighting Commander 5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000000d0f00006201000000000000,Hori Fighting Commander Octa,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000000d0f00006401000000000000,Hori Fighting Commander Octa,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,start:b7,x:b2,y:b3,platform:Windows,
|
||||
030000000d0f00005100000000000000,Hori Fighting Commander PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000000d0f00008600000000000000,Hori Fighting Commander Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
|
||||
030000000d0f0000ba00000000000000,Hori Fighting Commander Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
|
||||
@@ -314,6 +321,7 @@
|
||||
03000000242e00000b20000000000000,Hyperkin Admiral N64 Controller,+rightx:b11,+righty:b13,-rightx:b8,-righty:b12,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,platform:Windows,
|
||||
03000000242e0000ff0b000000000000,Hyperkin N64 Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,platform:Windows,
|
||||
03000000790000004e95000000000000,Hyperkin N64 Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a5,righty:a2,start:b9,platform:Windows,
|
||||
03000000242e00006a48000000000000,Hyperkin RetroN Sq,a:b3,b:b7,back:b5,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b0,rightshoulder:b1,start:b4,x:b2,y:b6,platform:Windows,
|
||||
03000000242e00006a38000000000000,Hyperkin Trooper 2,a:b0,b:b1,back:b4,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b3,start:b5,platform:Windows,
|
||||
03000000d81d00000e00000000000000,iBuffalo AC02 Arcade Joystick,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,rightx:a2,righty:a5,start:b8,x:b4,y:b5,platform:Windows,
|
||||
03000000d81d00000f00000000000000,iBuffalo BSGP1204 Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
@@ -352,7 +360,7 @@
|
||||
030000006d040000d2ca000000000000,Logitech Cordless Precision,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000006d04000011c2000000000000,Logitech Cordless Wingman,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b5,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b2,righttrigger:b7,rightx:a3,righty:a4,x:b4,platform:Windows,
|
||||
030000006d04000016c2000000000000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000006d0400001dc2000000000000,Logitech F310,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,lefttrigger:a2,righttrigger:a5,platform:Windows,
|
||||
030000006d0400001dc2000000000000,Logitech F310,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
|
||||
030000006d04000018c2000000000000,Logitech F510,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000006d0400001ec2000000000000,Logitech F510,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
|
||||
030000006d04000019c2000000000000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
@@ -555,6 +563,7 @@
|
||||
030000009b2800002300000000000000,Raphnet 3DO Adapter,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b2,start:b3,platform:Windows,
|
||||
030000009b2800006900000000000000,Raphnet 3DO Adapter,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b2,start:b3,platform:Windows,
|
||||
030000009b2800000800000000000000,Raphnet Dreamcast Adapter,a:b2,b:b1,dpdown:b5,dpleft:b6,dpright:b7,dpup:b4,lefttrigger:a2,leftx:a0,righttrigger:a3,righty:a1,start:b3,x:b10,y:b9,platform:Windows,
|
||||
030000009b280000d000000000000000,Raphnet Dreamcast Adapter,a:b1,b:b0,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,lefttrigger:+a5,leftx:a0,lefty:a1,righttrigger:+a2,start:b3,x:b5,y:b4,platform:Windows,
|
||||
030000009b2800006200000000000000,Raphnet GameCube Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,
|
||||
030000009b2800003200000000000000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,
|
||||
030000009b2800006000000000000000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,
|
||||
@@ -566,6 +575,9 @@
|
||||
030000009b2800004300000000000000,Raphnet Saturn,a:b0,b:b1,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows,
|
||||
030000009b2800000500000000000000,Raphnet Saturn Adapter 2.0,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000009b2800000300000000000000,Raphnet SNES Adapter,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows,
|
||||
030000009b2800002600000000000000,Raphnet SNES Adapter,a:b1,b:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows,
|
||||
030000009b2800002e00000000000000,Raphnet SNES Adapter,a:b1,b:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows,
|
||||
030000009b2800002f00000000000000,Raphnet SNES Adapter,a:b1,b:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows,
|
||||
030000009b2800005600000000000000,Raphnet SNES Adapter,a:b1,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows,
|
||||
030000009b2800005700000000000000,Raphnet SNES Adapter,a:b1,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows,
|
||||
030000009b2800001e00000000000000,Raphnet Vectrex Adapter,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a1,lefty:a2,x:b2,y:b3,platform:Windows,
|
||||
@@ -612,6 +624,7 @@
|
||||
03000000050b00001a1a000000000000,ROG Chakram X,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows,
|
||||
03000000050b00001c1a000000000000,ROG Chakram X,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows,
|
||||
030000004f04000001d0000000000000,Rumble Force,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
|
||||
030000000d0f0000ad00000000000000,RX Gamepad,a:b0,b:b4,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,rightshoulder:b6,start:b9,x:b2,y:b1,platform:Windows,
|
||||
030000008916000000fe000000000000,Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
|
||||
03000000c6240000045d000000000000,Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
|
||||
03000000a30600001af5000000000000,Saitek Cyborg,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
|
||||
@@ -650,6 +663,7 @@
|
||||
030000003b07000004a1000000000000,SFX,a:b0,b:b2,back:b7,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b5,start:b8,x:b1,y:b3,platform:Windows,
|
||||
03000000f82100001900000000000000,Shogun Bros Chameleon X1,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
|
||||
03000000120c00001c1e000000000000,SnakeByte 4S PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000140300000918000000000000,SNES Controller,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows,
|
||||
0300000081170000960a000000000000,SNES Controller,a:b4,b:b0,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b5,y:b1,platform:Windows,
|
||||
03000000811700009d0a000000000000,SNES Controller,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows,
|
||||
030000008b2800000300000000000000,SNES Controller,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows,
|
||||
@@ -678,6 +692,7 @@
|
||||
03000000457500002211000000000000,Szmy Power PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000004f0400000ab1000000000000,T16000M,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b10,x:b2,y:b3,platform:Windows,
|
||||
030000000d0f00007b00000000000000,TAC GEAR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000e40a00000307000000000000,Taito Egret II Mini Control Panel,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Windows,
|
||||
03000000e40a00000207000000000000,Taito Egret II Mini Controller,a:b4,b:b2,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b9,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Windows,
|
||||
03000000d814000001a0000000000000,TE Kitty,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000fa1900000706000000000000,Team 5,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
@@ -801,7 +816,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000c82d00001151000000020000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000a30c00002400000006020000,8BitDo M30,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,guide:b9,leftshoulder:b6,lefttrigger:b5,rightshoulder:b4,righttrigger:b7,start:b8,x:b3,y:b0,platform:Mac OS X,
|
||||
03000000c82d00000151000000010000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000c82d00000650000001000000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000c82d00000650000001000000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000c82d00005106000000010000,8BitDo M30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b2,leftshoulder:b6,lefttrigger:a5,rightshoulder:b7,righttrigger:a4,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000c82d00002090000000010000,8BitDo Micro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000c82d00000451000000010000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b11,platform:Mac OS X,
|
||||
@@ -810,7 +825,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000c82d00006928000000010000,8BitDo N64,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Mac OS X,
|
||||
03000000c82d00002590000000010000,8BitDo NEOGEO,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000c82d00002590000001000000,8BitDo NEOGEO,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000c82d00002690000000010000,8BitDo NEOGEOa:b0,+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,b:b1,back:b10,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000c82d00002690000000010000,8BitDo NEOGEO,+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b10,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
030000003512000012ab000001000000,8BitDo NES30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000c82d000012ab000001000000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000c82d00002028000000010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
@@ -826,6 +841,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000c82d00000331000001000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000c82d00000431000001000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000c82d00002867000000010000,8BitDo S30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000c82d00003028000000010000,8Bitdo SFC30 Gamepad,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000102800000900000000000000,8BitDo SFC30 Joystick,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000c82d00000351000000010000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000c82d00001290000001000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
@@ -847,6 +863,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000c82d00003032000000010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a31,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000491900001904000001010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Mac OS X,
|
||||
03000000710100001904000000010000,Amazon Luna Controller,a:b0,b:b1,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X,
|
||||
0300000008100000e501000019040000,Anbernic Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a4,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000a30c00002700000003030000,Astro City Mini,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
|
||||
03000000a30c00002800000003030000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
|
||||
03000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
|
||||
@@ -854,6 +871,11 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000050b00000679000000010000,ASUS ROG Kunai 3,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b14,leftshoulder:b6,leftstick:b15,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b23,rightshoulder:b7,rightstick:b16,righttrigger:a4,rightx:a2,righty:a3,start:b13,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000503200000110000047010000,Atari VCS Classic Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b3,start:b2,platform:Mac OS X,
|
||||
03000000503200000210000047010000,Atari VCS Modern Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
030000008a3500000102000000010000,Backbone One,a:b0,b:b1,back:b16,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b17,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b15,x:b2,y:b3,platform:Mac OS X,
|
||||
030000008a3500000201000000010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
030000008a3500000202000000010000,Backbone One,a:b0,b:b1,back:b16,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b17,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b15,x:b2,y:b3,platform:Mac OS X,
|
||||
030000008a3500000402000000010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
030000008a3500000302000000010000,Backbone One PlayStationÆ Edition,a:b0,b:b1,back:b16,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b17,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b15,x:b2,y:b3,platform:Mac OS X,
|
||||
03000000c62400001a89000000010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b14,leftshoulder:b6,leftstick:b15,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b16,righttrigger:a4,rightx:a2,righty:a3,start:b13,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000c62400001b89000000010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000d62000002a79000000010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
@@ -898,6 +920,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
030000000d0f00006600000000010000,Horipad 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000000d0f00006600000000000000,Horipad FPS Plus 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000000d0f0000ee00000000010000,Horipad Mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000000d0f0000c100000072050000,Horipad Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
03000000242e0000ff0b000000010000,Hyperkin N64 Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,platform:Mac OS X,
|
||||
03000000790000004e95000000010000,Hyperkin N64 Controller Adapter,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a5,righty:a2,start:b9,platform:Mac OS X,
|
||||
03000000830500006020000000000000,iBuffalo Super Famicom Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Mac OS X,
|
||||
@@ -944,7 +967,8 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
030000001008000001e5000006010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Mac OS X,
|
||||
030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
|
||||
030000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
|
||||
050000007e05000009200000ff070000,Nintendo Switch Pro Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b3,y:b2,platform:Mac OS X,
|
||||
030000007e0500000920000010020000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:Mac OS X,
|
||||
050000007e05000009200000ff070000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:Mac OS X,
|
||||
030000007e0500001920000001000000,NSO N64 Controller,+rightx:b8,+righty:b7,-rightx:b3,-righty:b2,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Mac OS X,
|
||||
030000007e0500001720000001000000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b15,start:b9,x:b2,y:b3,platform:Mac OS X,
|
||||
03000000550900001472000025050000,NVIDIA Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Mac OS X,
|
||||
@@ -973,6 +997,8 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
030000005e040000e002000001000000,PXN P30 Pro Mobile,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X,
|
||||
03000000222c00000225000000010000,Qanba Dragon Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
03000000222c00000020000000010000,Qanba Drone Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000009b2800005600000020020000,Raphnet SNES Adapter,a:b1,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Mac OS X,
|
||||
030000009b2800008000000022020000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b10,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Mac OS X,
|
||||
030000008916000000fd000000000000,Razer Onza TE,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
03000000321500000204000000010000,Razer Panthera PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
03000000321500000104000000010000,Razer Panthera PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
@@ -983,7 +1009,6 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
030000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X,
|
||||
0300000032150000030a000000000000,Razer Wildcat,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
03000000632500008005000000010000,Redgear,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
|
||||
030000000d0f0000c100000072050000,Retro Bit Sega Genesis 6B Controller,a:b2,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b8,rightshoulder:b6,righttrigger:b7,start:b9,x:b3,y:b0,platform:Mac OS X,
|
||||
03000000921200004547000000020000,Retro Bit Sega Genesis Controller Adapter,a:b0,b:b2,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,lefttrigger:b14,rightshoulder:b10,righttrigger:b4,start:b12,x:b6,y:b8,platform:Mac OS X,
|
||||
03000000790000001100000000000000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
03000000790000001100000005010000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b4,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
@@ -1018,6 +1043,8 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000110100001714000020010000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X,
|
||||
030000000d0f0000f600000000010000,Switch Hori Pad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
|
||||
03000000457500002211000000010000,SZMY Power PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
03000000e40a00000307000001000000,Taito Egret II Mini Control Panel,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Mac OS X,
|
||||
03000000e40a00000207000001000000,Taito Egret II Mini Controller,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Mac OS X,
|
||||
03000000790000001c18000003100000,TGZ Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000591c00002400000021000000,THEC64 Joystick,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Mac OS X,
|
||||
03000000591c00002600000021000000,THEGamepad,a:b2,b:b1,back:b6,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Mac OS X,
|
||||
@@ -1058,12 +1085,13 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
030000005e040000130b000009050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
030000005e040000130b000013050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
030000005e040000130b000015050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
030000005e040000130b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
030000005e040000220b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000172700004431000029010000,XiaoMi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000120c0000100e000000010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
03000000120c0000101e000000010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
|
||||
# Linux
|
||||
030000005e0400008e02000020010000,8BitDo Adapter,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000c82d00000031000011010000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000c82d00000951000000010000,8BitDo Dogbone,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b11,platform:Linux,
|
||||
03000000021000000090000011010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
|
||||
@@ -1074,7 +1102,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000c82d00001151000011010000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
|
||||
05000000c82d00001151000000010000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
|
||||
03000000c82d00000151000000010000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000c82d00000650000011010000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000c82d00000650000011010000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
05000000c82d00005106000000010000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000c82d00002090000011010000,8BitDo Micro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
|
||||
05000000c82d00002090000000010000,8BitDo Micro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
|
||||
@@ -1146,6 +1174,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
05000000491900000204000021000000,Amazon Fire Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b17,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000491900001904000011010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Linux,
|
||||
05000000710100001904000000010000,Amazon Luna Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
|
||||
0300000008100000e501000001010000,Anbernic Gamepad,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a4,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000790000003018000011010000,Arcade Fightstick F300,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000a30c00002700000011010000,Astro City Mini,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000a30c00002800000011010000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
|
||||
@@ -1164,20 +1193,24 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
05000000503200000210000045010000,Atari Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux,
|
||||
05000000503200000210000046010000,Atari Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux,
|
||||
05000000503200000210000047010000,Atari VCS Modern Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:-a4,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Linux,
|
||||
030000008a3500000201000011010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
030000008a3500000202000011010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
030000008a3500000302000011010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
030000008a3500000402000011010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000c62400001b89000011010000,BDA MOGA XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000d62000002a79000011010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000c21100000791000011010000,Be1 GC101 Controller 1.03,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000c31100000791000011010000,Be1 GC101 Controller 1.03,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
030000005e0400008e02000003030000,Be1 GC101 Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000bc2000004d50000011010000,BEITONG A1T2 BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
05000000bc2000000055000001000000,BETOP AX1 BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000bc2000004d50000011010000,Beitong A1T2 BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
05000000bc2000000055000001000000,Betop AX1 BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000bc2000006412000011010000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b30,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
030000006b1400000209000011010000,Bigben,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000120c0000200e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000120c0000210e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000120c0000f70e000011010000,Brook Universal Fighting Board,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000e82000006058000001010000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000af1e00002400000010010000,ClockworkPI DevTerm,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000af1e00002400000010010000,Clockwork Pi DevTerm,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b9,x:b3,y:b0,platform:Linux,
|
||||
030000000b0400003365000000010000,Competition Pro,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Linux,
|
||||
03000000260900008888000000010000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000a306000022f6000011010000,Cyborg V3 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
|
||||
@@ -1261,6 +1294,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000242e00008816000001010000,Hyperkin X91,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000f00300008d03000011010000,HyperX Clutch,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000830500006020000010010000,iBuffalo Super Famicom Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux,
|
||||
030000008f0e00001330000001010000,iCode Retro Adapter,b:b3,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b9,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b1,start:b7,x:b2,y:b0,platform:Linux,
|
||||
050000006964726f69643a636f6e0000,idroidcon Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000b50700001503000010010000,Impact,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
|
||||
03000000d80400008200000003000000,IMS PCU0,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b5,x:b3,y:b2,platform:Linux,
|
||||
@@ -1269,7 +1303,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000fd0500000030000000010000,InterAct GoPad,a:b3,b:b4,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,x:b0,y:b1,platform:Linux,
|
||||
03000000fd0500002a26000000010000,InterAct HammerHead FX,a:b3,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b2,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b5,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Linux,
|
||||
0500000049190000020400001b010000,Ipega PG 9069,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b161,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000632500007505000011010000,Ipega PG 9099,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000632500007505000011010000,Ipega PG 9099,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
0500000049190000030400001b010000,Ipega PG9099,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
05000000491900000204000000000000,Ipega PG9118,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000300f00001001000010010000,Jess Tech Dual Analog Rumble,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
|
||||
@@ -1369,7 +1403,6 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000790000004518000010010000,Nexilux GameCube Controller Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
|
||||
030000001008000001e5000010010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Linux,
|
||||
060000007e0500003713000000000000,Nintendo 3DS,a:b0,b:b1,back:b8,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,
|
||||
030000009b2800008000000020020000,Nintendo Classic Controller,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Linux,
|
||||
030000007e0500003703000000016800,Nintendo GameCube Controller,a:b0,b:b2,dpdown:b6,dpleft:b4,dpright:b5,dpup:b7,lefttrigger:a4,leftx:a0,lefty:a1~,rightshoulder:b9,righttrigger:a5,rightx:a2,righty:a3~,start:b8,x:b1,y:b3,platform:Linux,
|
||||
03000000790000004618000010010000,Nintendo GameCube Controller Adapter,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a5~,righty:a2~,start:b9,x:b2,y:b3,platform:Linux,
|
||||
060000004e696e74656e646f20537700,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,
|
||||
@@ -1398,7 +1431,6 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000451300000830000010010000,NYKO CORE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
19000000010000000100000001010000,ODROID Go 2,a:b1,b:b0,dpdown:b7,dpleft:b8,dpright:b9,dpup:b6,guide:b10,leftshoulder:b4,leftstick:b12,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b13,righttrigger:b14,start:b15,x:b2,y:b3,platform:Linux,
|
||||
19000000010000000200000011000000,ODROID Go 2,a:b1,b:b0,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b12,leftshoulder:b4,leftstick:b14,lefttrigger:b13,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b15,righttrigger:b16,start:b17,x:b2,y:b3,platform:Linux,
|
||||
03000000c0160000dc27000001010000,OnyxSoft Dual JoyDivision,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,platform:Linux,
|
||||
05000000362800000100000002010000,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux,
|
||||
05000000362800000100000003010000,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux,
|
||||
05000000362800000100000004010000,OUYA Controller,a:b0,b:b3,back:b14,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,leftshoulder:b4,leftstick:b6,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b13,rightx:a3,righty:a4,start:b16,x:b1,y:b2,platform:Linux,
|
||||
@@ -1488,6 +1520,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
030000009b2800004200000001010000,Raphnet Dual NES Adapter,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Linux,
|
||||
030000009b2800003200000001010000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux,
|
||||
030000009b2800006000000001010000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux,
|
||||
030000009b2800008000000020020000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Linux,
|
||||
03000000f8270000bf0b000011010000,Razer Kishi,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
030000008916000001fd000024010000,Razer Onza Classic Edition,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000321500000204000011010000,Razer Panthera PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
@@ -1559,6 +1592,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,
|
||||
05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000de2800000512000010010000,Steam Deck,a:b3,b:b4,back:b11,dpdown:b17,dpleft:b18,dpright:b19,dpup:b16,guide:b13,leftshoulder:b7,leftstick:b14,lefttrigger:a9,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b15,righttrigger:a8,rightx:a2,righty:a3,start:b12,x:b5,y:b6,platform:Linux,
|
||||
03000000de2800000512000011010000,Steam Deck,a:b3,b:b4,back:b11,dpdown:b17,dpleft:b18,dpright:b19,dpup:b16,guide:b13,leftshoulder:b7,leftstick:b14,lefttrigger:a9,leftx:a0,lefty:a1,misc1:b2,paddle1:b21,paddle2:b20,paddle3:b23,paddle4:b22,rightshoulder:b8,rightstick:b15,righttrigger:a8,rightx:a2,righty:a3,start:b12,x:b5,y:b6,platform:Linux,
|
||||
03000000de280000ff11000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
050000004e696d6275732b0000000000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b10,guide:b11,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b12,x:b2,y:b3,platform:Linux,
|
||||
03000000381000003014000075010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
@@ -1573,6 +1607,8 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000457500000401000011010000,SZMY Power DS4 Wired Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000457500002211000010010000,SZMY Power Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
030000008f0e00001431000010010000,SZMY Power PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000e40a00000307000011010000,Taito Egret II Mini Control Panel,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Linux,
|
||||
03000000e40a00000207000011010000,Taito Egret II Mini Controller,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Linux,
|
||||
03000000ba2200000701000001010000,Technology Innovation PS2 Adapter,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b3,y:b2,platform:Linux,
|
||||
03000000790000001c18000011010000,TGZ Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000591c00002400000010010000,THEC64 Joystick,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux,
|
||||
@@ -1656,11 +1692,15 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
060000005e040000120b000007050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
060000005e040000120b00000b050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
060000005e040000120b00000f050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
050000005e040000130b000017050000,Xbox Series X Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
060000005e040000120b00000d050000,Xbox Series X Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
050000005e040000200b000013050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
050000005e040000200b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
050000005e040000220b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000450c00002043000010010000,XEOX SL6556 BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
|
||||
05000000172700004431000029010000,XiaoMi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000c0160000e105000001010000,XinMo Dual Arcade,a:b4,b:b3,back:b6,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b9,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b1,y:b0,platform:Linux,
|
||||
030000005e0400008e02000020010000,XInput Adapter,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000120c0000100e000011010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000120c0000101e000011010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
@@ -1747,6 +1787,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
63396666386564393334393236386630,8BitDo Zero 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
|
||||
63633435623263373466343461646430,8BitDo Zero 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android,
|
||||
32333634613735616163326165323731,Amazon Luna Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android,
|
||||
4c696e757820342e31392e3137322077,Anbernic Gamepad,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a4,start:b6,x:b2,y:b3,platform:Android,
|
||||
417374726f2063697479206d696e6920,Astro City Mini,a:b23,b:b22,back:b29,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b25,righttrigger:b26,start:b30,x:b24,y:b21,platform:Android,
|
||||
35643263313264386134376362363435,Atari VCS Classic Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,start:b6,platform:Android,
|
||||
32353831643566306563643065356239,Atari VCS Modern Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
|
||||
@@ -1911,6 +1952,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android,
|
||||
0500000011010000201400000f7e0f00,SteelSeries Nimbus,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,x:b19,y:b2,platform:Android,
|
||||
35306436396437373135383665646464,SteelSeries Nimbus Plus,a:b0,b:b1,leftshoulder:b3,leftstick:b17,lefttrigger:b9,leftx:a0,rightshoulder:b20,rightstick:b18,righttrigger:b10,rightx:a2,x:b19,y:b2,platform:Android,
|
||||
33313930373536613937326534303931,Taito Egret II Mini Control Panel,a:b25,b:b23,back:b27,guide:b30,leftx:a0,lefty:a1,rightshoulder:b21,righttrigger:b22,start:b28,x:b29,y:b24,platform:Android,
|
||||
54475a20436f6e74726f6c6c65720000,TGZ Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
|
||||
62363434353532386238336663643836,TGZ Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
|
||||
37323236633763666465316365313236,THEC64 Joystick,a:b21,b:b22,back:b27,leftshoulder:b25,leftx:a0,lefty:a1,rightshoulder:b26,start:b27,x:b23,y:b24,platform:Android,
|
||||
|
||||
@@ -316,7 +316,9 @@ struct GenericStringRef {
|
||||
|
||||
GenericStringRef(const GenericStringRef& rhs) : s(rhs.s), length(rhs.length) {}
|
||||
|
||||
#if 0
|
||||
GenericStringRef& operator=(const GenericStringRef& rhs) { s = rhs.s; length = rhs.length; }
|
||||
#endif
|
||||
|
||||
//! implicit conversion to plain CharType pointer
|
||||
operator const Ch *() const { return s; }
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@
|
||||
[subrepo]
|
||||
remote = git@github.com:mupen64plus/mupen64plus-core.git
|
||||
branch = master
|
||||
commit = 20615a1264382f981cbc022225966980fc456d49
|
||||
parent = e68f2b91cd93c8fb4c86734a6f749e0318d5687b
|
||||
commit = 860fac3fbae94194a392c1d9857e185eda6d083e
|
||||
parent = 84681fdd0d326e400524c422f182f7fa60e6493f
|
||||
method = merge
|
||||
cmdver = 0.4.6
|
||||
|
||||
@@ -5128,6 +5128,11 @@ SaveType=SRAM
|
||||
Players=4
|
||||
Rumble=Yes
|
||||
|
||||
[20F5EEEE849DB44146AAFB1B97A857F6]
|
||||
GoodName=F-ZERO X (U) [T+Por0.99_byftr]
|
||||
CRC=485256FF CF6DF912
|
||||
RefMD5=753437D0D8ADA1D12F3F9CF0F0A5171F
|
||||
|
||||
[3AE32658B839FFA3189E3CA84E0B884A]
|
||||
GoodName=F-ZERO X (U) [f1] (Sex V1.0 Hack)
|
||||
CRC=7E399849 03DAC1CD
|
||||
@@ -5830,6 +5835,11 @@ Players=4
|
||||
Mempak=Yes
|
||||
Rumble=Yes
|
||||
|
||||
[0AC7A16F8AFCC03031835C89D095D7B9]
|
||||
GoodName=Getter Love!! (J) [T+Eng1.01_ozidual]
|
||||
CRC=CDDB4BDF 84E5EFAC
|
||||
RefMD5=5270D98F9E67DC7EF354ECE109C2A18F
|
||||
|
||||
[3BE170E7E94A03BD4E36732EB137EE39]
|
||||
GoodName=Getter Love!! (J) [b1]
|
||||
CRC=489C84E6 4C6E49F9
|
||||
@@ -6132,6 +6142,13 @@ GoodName=GoldenEye X
|
||||
CRC=E8B3F63D E5A997B1
|
||||
RefMD5=E03B088B6AC9E0080440EFED07C1E40F
|
||||
|
||||
[EA0E3E6AEFA58738A12906298373218B]
|
||||
GoodName=GoldenEye 007 (UE) (Switch Online) [!]
|
||||
CRC=DCBC50D1 9FD1AA3
|
||||
Players=4
|
||||
SaveType=Eeprom 4KB
|
||||
Rumble=Yes
|
||||
|
||||
[9B8A7541D0234F4D97004ECBC216D9C2]
|
||||
GoodName=HIPTHRUST by MooglyGuy (PD)
|
||||
CRC=88A12FB3 8A583CBD
|
||||
@@ -6243,6 +6260,11 @@ GoodName=Heiwa Pachinko World 64 (J) [!]
|
||||
CRC=3E70E866 4438BAE8
|
||||
Players=1
|
||||
|
||||
[78E2ED1DB5F90E2EA9C04771B27685BC]
|
||||
GoodName=Heiwa Pachinko World 64 (J) [T+Eng1.0_Zoinkity]
|
||||
CRC=3AE679E2 1A3C42DB
|
||||
RefMD5=5E8539E037EEA88C5A2746F60E431C8D
|
||||
|
||||
[9D0D85E3A0C94B98D6404E8FC28E7B01]
|
||||
GoodName=Heiwa Pachinko World 64 (J) [b1]
|
||||
CRC=3E70E866 4438BAE8
|
||||
|
||||
+2
-1
@@ -180,7 +180,8 @@ EXPORT m64p_error CALL CoreDoCommand(m64p_command Command, int ParamInt, void *P
|
||||
case M64CMD_ROM_OPEN:
|
||||
if (g_EmulatorRunning || l_DiskOpen || l_ROMOpen)
|
||||
return M64ERR_INVALID_STATE;
|
||||
if (ParamPtr == NULL || ParamInt < 4096)
|
||||
// ROM buffer size must be divisible by 4 to avoid out-of-bounds read in swap_copy_rom (v64/n64 formats)
|
||||
if (ParamPtr == NULL || ParamInt < 4096 || ParamInt > CART_ROM_MAX_SIZE/*|| ParamInt % 4 != 0*/)
|
||||
return M64ERR_INPUT_ASSERT;
|
||||
rval = open_rom((const unsigned char *) ParamPtr, ParamInt);
|
||||
if (rval == M64ERR_SUCCESS)
|
||||
|
||||
+1
-1
@@ -22,10 +22,10 @@
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h> // needed for u_int, u_char, etc
|
||||
#include <assert.h>
|
||||
|
||||
#if defined(__APPLE__)
|
||||
#include <sys/types.h> // needed for u_int, u_char, etc
|
||||
#define MAP_ANONYMOUS MAP_ANON
|
||||
#endif
|
||||
|
||||
|
||||
+43
-26
@@ -64,6 +64,10 @@ static void do_sp_dma(struct rsp_core* sp, const struct sp_dma* dma)
|
||||
post_framebuffer_write(&sp->dp->fb, dramaddr - length, length);
|
||||
dramaddr+=skip;
|
||||
}
|
||||
|
||||
sp->regs[SP_MEM_ADDR_REG] = memaddr & 0xfff;
|
||||
sp->regs[SP_DRAM_ADDR_REG] = dramaddr & 0xffffff;
|
||||
sp->regs[SP_RD_LEN_REG] = 0xff8;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -77,6 +81,10 @@ static void do_sp_dma(struct rsp_core* sp, const struct sp_dma* dma)
|
||||
}
|
||||
dramaddr+=skip;
|
||||
}
|
||||
|
||||
sp->regs[SP_MEM_ADDR_REG] = memaddr & 0xfff;
|
||||
sp->regs[SP_DRAM_ADDR_REG] = dramaddr & 0xffffff;
|
||||
sp->regs[SP_RD_LEN_REG] = 0xff8;
|
||||
}
|
||||
|
||||
/* schedule end of dma event */
|
||||
@@ -137,68 +145,68 @@ static void fifo_pop(struct rsp_core* sp)
|
||||
static void update_sp_status(struct rsp_core* sp, uint32_t w)
|
||||
{
|
||||
/* clear / set halt */
|
||||
if (w & 0x1) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_HALT;
|
||||
if (w & 0x2) sp->regs[SP_STATUS_REG] |= SP_STATUS_HALT;
|
||||
if ((w & 0x3) == 0x1) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_HALT;
|
||||
if ((w & 0x3) == 0x2) sp->regs[SP_STATUS_REG] |= SP_STATUS_HALT;
|
||||
|
||||
/* clear broke */
|
||||
if (w & 0x4) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_BROKE;
|
||||
|
||||
/* clear SP interrupt */
|
||||
if (w & 0x8)
|
||||
if ((w & 0x18) == 0x8)
|
||||
{
|
||||
clear_rcp_interrupt(sp->mi, MI_INTR_SP);
|
||||
}
|
||||
/* set SP interrupt */
|
||||
if (w & 0x10)
|
||||
if ((w & 0x18) == 0x10)
|
||||
{
|
||||
signal_rcp_interrupt(sp->mi, MI_INTR_SP);
|
||||
}
|
||||
|
||||
/* clear / set single step */
|
||||
if (w & 0x20) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SSTEP;
|
||||
if (w & 0x40) sp->regs[SP_STATUS_REG] |= SP_STATUS_SSTEP;
|
||||
if ((w & 0x60) == 0x20) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SSTEP;
|
||||
if ((w & 0x60) == 0x40) sp->regs[SP_STATUS_REG] |= SP_STATUS_SSTEP;
|
||||
|
||||
/* clear / set interrupt on break */
|
||||
if (w & 0x80) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_INTR_BREAK;
|
||||
if (w & 0x100) sp->regs[SP_STATUS_REG] |= SP_STATUS_INTR_BREAK;
|
||||
if ((w & 0x180) == 0x80) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_INTR_BREAK;
|
||||
if ((w & 0x180) == 0x100) sp->regs[SP_STATUS_REG] |= SP_STATUS_INTR_BREAK;
|
||||
|
||||
/* clear / set signal 0 */
|
||||
if (w & 0x200) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SIG0;
|
||||
if (w & 0x400) sp->regs[SP_STATUS_REG] |= SP_STATUS_SIG0;
|
||||
if ((w & 0x600) == 0x200) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SIG0;
|
||||
if ((w & 0x600) == 0x400) sp->regs[SP_STATUS_REG] |= SP_STATUS_SIG0;
|
||||
|
||||
/* clear / set signal 1 */
|
||||
if (w & 0x800) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SIG1;
|
||||
if (w & 0x1000) sp->regs[SP_STATUS_REG] |= SP_STATUS_SIG1;
|
||||
if ((w & 0x1800) == 0x800) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SIG1;
|
||||
if ((w & 0x1800) == 0x1000) sp->regs[SP_STATUS_REG] |= SP_STATUS_SIG1;
|
||||
|
||||
/* clear / set signal 2 */
|
||||
if (w & 0x2000) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SIG2;
|
||||
if (w & 0x4000) sp->regs[SP_STATUS_REG] |= SP_STATUS_SIG2;
|
||||
if ((w & 0x6000) == 0x2000) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SIG2;
|
||||
if ((w & 0x6000) == 0x4000) sp->regs[SP_STATUS_REG] |= SP_STATUS_SIG2;
|
||||
|
||||
/* clear / set signal 3 */
|
||||
if (w & 0x8000) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SIG3;
|
||||
if (w & 0x10000) sp->regs[SP_STATUS_REG] |= SP_STATUS_SIG3;
|
||||
if ((w & 0x18000) == 0x8000) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SIG3;
|
||||
if ((w & 0x18000) == 0x10000) sp->regs[SP_STATUS_REG] |= SP_STATUS_SIG3;
|
||||
|
||||
/* clear / set signal 4 */
|
||||
if (w & 0x20000) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SIG4;
|
||||
if (w & 0x40000) sp->regs[SP_STATUS_REG] |= SP_STATUS_SIG4;
|
||||
if ((w & 0x60000) == 0x20000) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SIG4;
|
||||
if ((w & 0x60000) == 0x40000) sp->regs[SP_STATUS_REG] |= SP_STATUS_SIG4;
|
||||
|
||||
/* clear / set signal 5 */
|
||||
if (w & 0x80000) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SIG5;
|
||||
if (w & 0x100000) sp->regs[SP_STATUS_REG] |= SP_STATUS_SIG5;
|
||||
if ((w & 0x180000) == 0x80000) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SIG5;
|
||||
if ((w & 0x180000) == 0x100000) sp->regs[SP_STATUS_REG] |= SP_STATUS_SIG5;
|
||||
|
||||
/* clear / set signal 6 */
|
||||
if (w & 0x200000) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SIG6;
|
||||
if (w & 0x400000) sp->regs[SP_STATUS_REG] |= SP_STATUS_SIG6;
|
||||
if ((w & 0x600000) == 0x200000) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SIG6;
|
||||
if ((w & 0x600000) == 0x400000) sp->regs[SP_STATUS_REG] |= SP_STATUS_SIG6;
|
||||
|
||||
/* clear / set signal 7 */
|
||||
if (w & 0x800000) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SIG7;
|
||||
if (w & 0x1000000) sp->regs[SP_STATUS_REG] |= SP_STATUS_SIG7;
|
||||
if ((w & 0x1800000) == 0x800000) sp->regs[SP_STATUS_REG] &= ~SP_STATUS_SIG7;
|
||||
if ((w & 0x1800000) == 0x1000000) sp->regs[SP_STATUS_REG] |= SP_STATUS_SIG7;
|
||||
|
||||
if (sp->rsp_task_locked && (get_event(&sp->mi->r4300->cp0.q, SP_INT))) return;
|
||||
if (!(w & 0x1) && !(w & 0x4) && !sp->rsp_task_locked)
|
||||
if (!((w & 0x3) == 1) && !(w & 0x4) && !sp->rsp_task_locked)
|
||||
return;
|
||||
|
||||
if (!(sp->regs[SP_STATUS_REG] & (SP_STATUS_HALT | SP_STATUS_BROKE)))
|
||||
if (!(sp->regs[SP_STATUS_REG] & SP_STATUS_HALT))
|
||||
do_SP_Task(sp);
|
||||
}
|
||||
|
||||
@@ -224,6 +232,8 @@ void poweron_rsp(struct rsp_core* sp)
|
||||
sp->rsp_task_locked = 0;
|
||||
sp->mi->r4300->cp0.interrupt_unsafe_state &= ~INTR_UNSAFE_RSP;
|
||||
sp->regs[SP_STATUS_REG] = 1;
|
||||
sp->regs[SP_RD_LEN_REG] = 0xff8;
|
||||
sp->regs[SP_WR_LEN_REG] = 0xff8;
|
||||
}
|
||||
|
||||
|
||||
@@ -294,6 +304,10 @@ void read_rsp_regs2(void* opaque, uint32_t address, uint32_t* value)
|
||||
uint32_t reg = rsp_reg2(address);
|
||||
|
||||
*value = sp->regs2[reg];
|
||||
|
||||
if (reg == SP_PC_REG)
|
||||
*value &= 0xffc;
|
||||
|
||||
}
|
||||
|
||||
void write_rsp_regs2(void* opaque, uint32_t address, uint32_t value, uint32_t mask)
|
||||
@@ -301,6 +315,9 @@ void write_rsp_regs2(void* opaque, uint32_t address, uint32_t value, uint32_t ma
|
||||
struct rsp_core* sp = (struct rsp_core*)opaque;
|
||||
uint32_t reg = rsp_reg2(address);
|
||||
|
||||
if (reg == SP_PC_REG)
|
||||
mask &= 0xffc;
|
||||
|
||||
masked_write(&sp->regs2[reg], value, mask);
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@
|
||||
[subrepo]
|
||||
remote = git@github.com:/Rosalie241/parallel-rsp.git
|
||||
branch = RMG
|
||||
commit = eb7b30e25ac560e969e6f00b1cd2ba6d93901df0
|
||||
parent = 5035c537840753fcaa237f23eff64ae0284c95c1
|
||||
commit = 71f52c492ac5896a02725152a0e6c59036ee9576
|
||||
parent = e8f10693c73eeed017f45cf8289a3763ae16c257
|
||||
method = merge
|
||||
cmdver = 0.4.6
|
||||
|
||||
@@ -57,7 +57,6 @@ add_library(${NAME_PLUGIN_M64P} SHARED
|
||||
arch/simd/rsp/vcmp.h
|
||||
arch/simd/rsp/vdivh.h
|
||||
arch/simd/rsp/vmac.h
|
||||
arch/simd/rsp/vmov.h
|
||||
arch/simd/rsp/vmrg.h
|
||||
arch/simd/rsp/vmudh.h
|
||||
arch/simd/rsp/vmul.h
|
||||
|
||||
+3
-3
@@ -1,11 +1,11 @@
|
||||
Written by Themaister.
|
||||
|
||||
The code is heavily reliant on MarathonMan's CEN64 RSP implementation, as well as CXD4's RSP implementation.
|
||||
The code is heavily reliant on MarathonMan's CEN64 RSP implementation, as well as Ares and CXD4's RSP implementations.
|
||||
|
||||
MIPS core: Rewritten from scratch
|
||||
CP0: Near copy-pasta from CEN64
|
||||
CP0: Near copy-pasta from CEN64, with some fixes from Ares brought in
|
||||
CP2: Near copy-pasta from CEN64
|
||||
LS pipe: Near copy-pasta from CXD4
|
||||
LS pipe: Ported from Ares
|
||||
Mupen64plus glue code: Reused most of CXD4.
|
||||
Lightning jitter interface: Written from scratch
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include "vcr.h"
|
||||
#include "vdivh.h"
|
||||
#include "vmac.h"
|
||||
#include "vmov.h"
|
||||
#include "vmrg.h"
|
||||
#include "vmul.h"
|
||||
#include "vmulh.h"
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
//
|
||||
// arch/x86_64/rsp/vmov.c
|
||||
//
|
||||
// This file is subject to the terms and conditions defined in
|
||||
// 'LICENSE', which is part of this source code package.
|
||||
//
|
||||
|
||||
inline __m128i rsp_vmov(RSP::CPUState *rsp, unsigned src, unsigned e, unsigned dest, unsigned de)
|
||||
{
|
||||
uint16_t data;
|
||||
|
||||
// Get the element from VT.
|
||||
data = rsp->cp2.regs[src].e[e & 0x7];
|
||||
|
||||
// Write out the upper part of the result.
|
||||
rsp->cp2.regs[dest].e[de & 0x7] = data;
|
||||
return rsp_vect_load_unshuffled_operand(rsp->cp2.regs[dest].e);
|
||||
}
|
||||
@@ -2461,7 +2461,11 @@ _jit_protect(jit_state_t *_jit)
|
||||
#else
|
||||
int result;
|
||||
if (_jit->user_code) return;
|
||||
#ifdef _WIN32
|
||||
result = _mprotect (_jit->code.ptr, _jit->code.protected, PROT_READ | PROT_EXEC);
|
||||
#else
|
||||
result = mprotect (_jit->code.ptr, _jit->code.protected, PROT_READ | PROT_EXEC);
|
||||
#endif
|
||||
assert (result == 0);
|
||||
#endif
|
||||
}
|
||||
@@ -2474,7 +2478,11 @@ _jit_unprotect(jit_state_t *_jit)
|
||||
#else
|
||||
int result;
|
||||
if (_jit->user_code) return;
|
||||
#ifdef _WIN32
|
||||
result = _mprotect (_jit->code.ptr, _jit->code.protected, PROT_READ | PROT_WRITE);
|
||||
#else
|
||||
result = mprotect (_jit->code.ptr, _jit->code.protected, PROT_READ | PROT_WRITE);
|
||||
#endif
|
||||
assert (result == 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
+2
-26
@@ -12,29 +12,6 @@
|
||||
#define RSP_PARALLEL_VERSION 0x0101
|
||||
#define RSP_PLUGIN_API_VERSION 0x020000
|
||||
|
||||
static void (*l_DebugCallback)(void *, int, const char *) = NULL;
|
||||
static void *l_DebugCallContext = NULL;
|
||||
|
||||
|
||||
#define ATTR_FMT(fmtpos, attrpos) __attribute__ ((format (printf, fmtpos, attrpos)))
|
||||
static void DebugMessage(int level, const char *message, ...) ATTR_FMT(2, 3);
|
||||
|
||||
void DebugMessage(int level, const char *message, ...)
|
||||
{
|
||||
char msgbuf[1024];
|
||||
va_list args;
|
||||
|
||||
if (l_DebugCallback == NULL)
|
||||
return;
|
||||
|
||||
va_start(args, message);
|
||||
vsprintf(msgbuf, message, args);
|
||||
|
||||
(*l_DebugCallback)(l_DebugCallContext, level, msgbuf);
|
||||
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
namespace RSP
|
||||
{
|
||||
RSP_INFO rsp;
|
||||
@@ -107,6 +84,8 @@ extern "C"
|
||||
return cycles;
|
||||
else if (*RSP::cpu.get_state().cp0.irq & 1)
|
||||
RSP::rsp.CheckInterrupts();
|
||||
else if (*RSP::rsp.SP_STATUS_REG & SP_STATUS_HALT)
|
||||
return cycles;
|
||||
else if (*RSP::rsp.SP_SEMAPHORE_REG != 0) // Semaphore lock fixes.
|
||||
{
|
||||
}
|
||||
@@ -189,9 +168,6 @@ extern "C"
|
||||
EXPORT m64p_error CALL PluginStartup(m64p_dynlib_handle CoreLibHandle, void *Context,
|
||||
void (*DebugCallback)(void *, int, const char *))
|
||||
{
|
||||
/* first thing is to set the callback function for debug info */
|
||||
l_DebugCallback = DebugCallback;
|
||||
l_DebugCallContext = Context;
|
||||
return M64ERR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
+49
-67
@@ -27,14 +27,10 @@ extern "C"
|
||||
if (rt)
|
||||
rsp->sr[rt] = res;
|
||||
|
||||
// CFG_MEND_SEMAPHORE_LOCK == 0 by default,
|
||||
// so don't bother implementing semaphores.
|
||||
// It makes Mario Golf run terribly for some reason.
|
||||
|
||||
#ifdef PARALLEL_INTEGRATION
|
||||
// WAIT_FOR_CPU_HOST. From CXD4.
|
||||
if (rd == CP0_REGISTER_SP_STATUS)
|
||||
{
|
||||
// Might be waiting for the CPU to set a signal bit on the STATUS register. Increment timeout
|
||||
RSP::MFC0_count[rt] += 1;
|
||||
if (RSP::MFC0_count[rt] >= RSP::SP_STATUS_TIMEOUT)
|
||||
{
|
||||
@@ -44,81 +40,65 @@ extern "C"
|
||||
}
|
||||
#endif
|
||||
|
||||
if (rd == CP0_REGISTER_SP_SEMAPHORE)
|
||||
{
|
||||
if (*rsp->cp0.cr[CP0_REGISTER_SP_SEMAPHORE])
|
||||
{
|
||||
#ifdef PARALLEL_INTEGRATION
|
||||
RSP::MFC0_count[rt] += 8; // Almost certainly waiting on the CPU. Timeout faster.
|
||||
if (RSP::MFC0_count[rt] >= RSP::SP_STATUS_TIMEOUT)
|
||||
{
|
||||
*RSP::rsp.SP_STATUS_REG |= SP_STATUS_HALT;
|
||||
return MODE_CHECK_FLAGS;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else
|
||||
*rsp->cp0.cr[CP0_REGISTER_SP_SEMAPHORE] = 1;
|
||||
}
|
||||
|
||||
//if (rd == 4) // SP_STATUS_REG
|
||||
// fprintf(stderr, "READING STATUS REG!\n");
|
||||
|
||||
return MODE_CONTINUE;
|
||||
}
|
||||
|
||||
#define RSP_HANDLE_STATUS_WRITE(flag) \
|
||||
switch (rt & (SP_SET_##flag | SP_CLR_##flag)) \
|
||||
{ \
|
||||
case SP_SET_##flag: status |= SP_STATUS_##flag; break; \
|
||||
case SP_CLR_##flag: status &= ~SP_STATUS_##flag; break; \
|
||||
default: break; \
|
||||
}
|
||||
|
||||
static inline int rsp_status_write(RSP::CPUState *rsp, uint32_t rt)
|
||||
{
|
||||
//fprintf(stderr, "Writing 0x%x to status reg!\n", rt);
|
||||
|
||||
uint32_t status = *rsp->cp0.cr[CP0_REGISTER_SP_STATUS];
|
||||
|
||||
if (rt & SP_CLR_HALT)
|
||||
status &= ~SP_STATUS_HALT;
|
||||
else if (rt & SP_SET_HALT)
|
||||
status |= SP_STATUS_HALT;
|
||||
RSP_HANDLE_STATUS_WRITE(HALT)
|
||||
RSP_HANDLE_STATUS_WRITE(SSTEP)
|
||||
RSP_HANDLE_STATUS_WRITE(INTR_BREAK)
|
||||
RSP_HANDLE_STATUS_WRITE(SIG0)
|
||||
RSP_HANDLE_STATUS_WRITE(SIG1)
|
||||
RSP_HANDLE_STATUS_WRITE(SIG2)
|
||||
RSP_HANDLE_STATUS_WRITE(SIG3)
|
||||
RSP_HANDLE_STATUS_WRITE(SIG4)
|
||||
RSP_HANDLE_STATUS_WRITE(SIG5)
|
||||
RSP_HANDLE_STATUS_WRITE(SIG6)
|
||||
RSP_HANDLE_STATUS_WRITE(SIG7)
|
||||
|
||||
switch (rt & (SP_SET_INTR | SP_CLR_INTR))
|
||||
{
|
||||
case SP_SET_INTR: *rsp->cp0.irq |= 1; break;
|
||||
case SP_CLR_INTR: *rsp->cp0.irq &= ~1; break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
if (rt & SP_CLR_BROKE)
|
||||
status &= ~SP_STATUS_BROKE;
|
||||
|
||||
if (rt & SP_CLR_INTR)
|
||||
*rsp->cp0.irq &= ~1;
|
||||
else if (rt & SP_SET_INTR)
|
||||
*rsp->cp0.irq |= 1;
|
||||
|
||||
if (rt & SP_CLR_SSTEP)
|
||||
status &= ~SP_STATUS_SSTEP;
|
||||
else if (rt & SP_SET_SSTEP)
|
||||
status |= SP_STATUS_SSTEP;
|
||||
|
||||
if (rt & SP_CLR_INTR_BREAK)
|
||||
status &= ~SP_STATUS_INTR_BREAK;
|
||||
else if (rt & SP_SET_INTR_BREAK)
|
||||
status |= SP_STATUS_INTR_BREAK;
|
||||
|
||||
if (rt & SP_CLR_SIG0)
|
||||
status &= ~SP_STATUS_SIG0;
|
||||
else if (rt & SP_SET_SIG0)
|
||||
status |= SP_STATUS_SIG0;
|
||||
|
||||
if (rt & SP_CLR_SIG1)
|
||||
status &= ~SP_STATUS_SIG1;
|
||||
else if (rt & SP_SET_SIG1)
|
||||
status |= SP_STATUS_SIG1;
|
||||
|
||||
if (rt & SP_CLR_SIG2)
|
||||
status &= ~SP_STATUS_SIG2;
|
||||
else if (rt & SP_SET_SIG2)
|
||||
status |= SP_STATUS_SIG2;
|
||||
|
||||
if (rt & SP_CLR_SIG3)
|
||||
status &= ~SP_STATUS_SIG3;
|
||||
else if (rt & SP_SET_SIG3)
|
||||
status |= SP_STATUS_SIG3;
|
||||
|
||||
if (rt & SP_CLR_SIG4)
|
||||
status &= ~SP_STATUS_SIG4;
|
||||
else if (rt & SP_SET_SIG4)
|
||||
status |= SP_STATUS_SIG4;
|
||||
|
||||
if (rt & SP_CLR_SIG5)
|
||||
status &= ~SP_STATUS_SIG5;
|
||||
else if (rt & SP_SET_SIG5)
|
||||
status |= SP_STATUS_SIG5;
|
||||
|
||||
if (rt & SP_CLR_SIG6)
|
||||
status &= ~SP_STATUS_SIG6;
|
||||
else if (rt & SP_SET_SIG6)
|
||||
status |= SP_STATUS_SIG6;
|
||||
|
||||
if (rt & SP_CLR_SIG7)
|
||||
status &= ~SP_STATUS_SIG7;
|
||||
else if (rt & SP_SET_SIG7)
|
||||
status |= SP_STATUS_SIG7;
|
||||
|
||||
*rsp->cp0.cr[CP0_REGISTER_SP_STATUS] = status;
|
||||
return ((*rsp->cp0.irq & 1) || (status & SP_STATUS_HALT)) ? MODE_CHECK_FLAGS : MODE_CONTINUE;
|
||||
}
|
||||
@@ -178,6 +158,7 @@ extern "C"
|
||||
|
||||
*rsp->cp0.cr[CP0_REGISTER_DMA_DRAM] = source;
|
||||
*rsp->cp0.cr[CP0_REGISTER_DMA_CACHE] = dest;
|
||||
*rsp->cp0.cr[CP0_REGISTER_DMA_READ_LENGTH] = 0xff8;
|
||||
|
||||
#ifdef INTENSE_DEBUG
|
||||
log_rsp_mem_parallel();
|
||||
@@ -231,6 +212,7 @@ extern "C"
|
||||
|
||||
*rsp->cp0.cr[CP0_REGISTER_DMA_CACHE] = source;
|
||||
*rsp->cp0.cr[CP0_REGISTER_DMA_DRAM] = dest;
|
||||
*rsp->cp0.cr[CP0_REGISTER_DMA_WRITE_LENGTH] = 0xff8;
|
||||
#ifdef INTENSE_DEBUG
|
||||
log_rsp_mem_parallel();
|
||||
#endif
|
||||
@@ -269,9 +251,9 @@ extern "C"
|
||||
case CP0_REGISTER_SP_STATUS:
|
||||
return rsp_status_write(rsp, val);
|
||||
|
||||
case CP0_REGISTER_SP_RESERVED:
|
||||
// CXD4 forces this to 0.
|
||||
*rsp->cp0.cr[CP0_REGISTER_SP_RESERVED] = 0;
|
||||
case CP0_REGISTER_SP_SEMAPHORE:
|
||||
// Any write to the semaphore register, regardless of value, sets it to 0 for the next read
|
||||
*rsp->cp0.cr[CP0_REGISTER_SP_SEMAPHORE] = 0;
|
||||
break;
|
||||
|
||||
case CP0_REGISTER_CMD_START:
|
||||
|
||||
+103
-11
@@ -25,6 +25,13 @@
|
||||
|
||||
extern "C"
|
||||
{
|
||||
static inline int32_t clamp16s(int32_t x)
|
||||
{
|
||||
if (x > 0x7fff) return 0x7fff;
|
||||
if (x < -0x8000) return -0x8000;
|
||||
return x;
|
||||
}
|
||||
|
||||
//
|
||||
// VABS
|
||||
//
|
||||
@@ -297,6 +304,25 @@ extern "C"
|
||||
STORE_RESULT();
|
||||
}
|
||||
|
||||
void RSP_VMACQ(RSP::CPUState *rsp, unsigned vd, unsigned, unsigned, unsigned)
|
||||
{
|
||||
TRACE_VU(VMACQ);
|
||||
uint16_t *acc = rsp->cp2.acc.e;
|
||||
for (unsigned i = 0; i < 8; i++)
|
||||
{
|
||||
int32_t prod = (int16_t)acc[i] << 16;
|
||||
prod |= acc[8+i];
|
||||
if (prod < 0 && !(prod & 1 << 5))
|
||||
prod += 32;
|
||||
else if (prod >= 32 && !(prod & 1 << 5))
|
||||
prod -= 32;
|
||||
acc[i] = prod >> 16;
|
||||
acc[8+i] = prod & 0xffffu;
|
||||
|
||||
rsp->cp2.regs[vd].e[i] = clamp16s(prod >> 1) & ~15;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// VMADH
|
||||
// VMUDH
|
||||
@@ -464,10 +490,9 @@ extern "C"
|
||||
{
|
||||
TRACE_VU(VMOV);
|
||||
uint16_t *acc = rsp->cp2.acc.e;
|
||||
unsigned de = vs & 0x7;
|
||||
write_acc_lo(acc, LOAD_VT());
|
||||
__m128i result = rsp_vmov(rsp, vt, e, vd, de);
|
||||
STORE_RESULT();
|
||||
vs &= 0x7;
|
||||
rsp->cp2.regs[vd].e[vs] = rsp->cp2.acc.e[16+vs];
|
||||
}
|
||||
|
||||
//
|
||||
@@ -489,6 +514,7 @@ extern "C"
|
||||
|
||||
//
|
||||
// VMULF
|
||||
// VMULQ
|
||||
// VMULU
|
||||
//
|
||||
void RSP_VMULF(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e)
|
||||
@@ -505,6 +531,28 @@ extern "C"
|
||||
STORE_RESULT();
|
||||
}
|
||||
|
||||
void RSP_VMULQ(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e)
|
||||
{
|
||||
TRACE_VU(VMULQ);
|
||||
uint16_t *acc = rsp->cp2.acc.e;
|
||||
uint16_t *vde = rsp->cp2.regs[vd].e;
|
||||
int16_t *vse = (int16_t*)rsp->cp2.regs[vs].e;
|
||||
|
||||
int16_t vte[8];
|
||||
rsp_vect_t vtt = LOAD_VT();
|
||||
rsp_vect_write_operand((uint16_t*)vte, vtt);
|
||||
|
||||
for (unsigned i = 0; i < 8; i++)
|
||||
{
|
||||
int32_t prod = vse[i] * vte[i];
|
||||
if (prod < 0) prod += 31;
|
||||
acc[i] = prod >> 16;
|
||||
acc[8+i] = prod & 0xffff;
|
||||
acc[16+i] = 0;
|
||||
vde[i] = clamp16s(prod >> 1) & ~15;
|
||||
}
|
||||
}
|
||||
|
||||
void RSP_VMULU(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e)
|
||||
{
|
||||
TRACE_VU(VMULU);
|
||||
@@ -519,6 +567,52 @@ extern "C"
|
||||
STORE_RESULT();
|
||||
}
|
||||
|
||||
//
|
||||
// VRNDP
|
||||
// VRNDN
|
||||
//
|
||||
static inline void RSP_VRND(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e, uint_fast8_t variant)
|
||||
{
|
||||
int16_t vte[8];
|
||||
rsp_vect_t vtt = LOAD_VT();
|
||||
rsp_vect_write_operand((uint16_t*)vte, vtt);
|
||||
uint16_t *acc = rsp->cp2.acc.e;
|
||||
uint16_t *vde = rsp->cp2.regs[vd].e;
|
||||
|
||||
for (unsigned i = 0; i < 8; i++)
|
||||
{
|
||||
int64_t acc48 =
|
||||
((int64_t)(int16_t)acc[i] << 32) |
|
||||
((int64_t)acc[8+i] << 16) |
|
||||
(int64_t)acc[16+i];
|
||||
|
||||
const uint_fast8_t negative_acc = acc48 < 0;
|
||||
if (!!variant xor !!negative_acc)
|
||||
{
|
||||
int64_t value = (int64_t)(int16_t)vte[i];
|
||||
if (vs & 1) value <<= 16;
|
||||
acc48 += value;
|
||||
}
|
||||
|
||||
acc[i] = (acc48 >> 32) & 0xffff;
|
||||
acc[8+i] = (acc48 >> 16) & 0xffff;
|
||||
acc[16+i] = acc48 & 0xffff;
|
||||
vde[i] = clamp16s((int32_t)(acc48 >> 16));
|
||||
}
|
||||
}
|
||||
|
||||
void RSP_VRNDN(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e)
|
||||
{
|
||||
TRACE_VU(RSP_VRNDN);
|
||||
RSP_VRND(rsp, vd, vs, vt, e, 0);
|
||||
}
|
||||
|
||||
void RSP_VRNDP(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e)
|
||||
{
|
||||
TRACE_VU(RSP_VRNDP);
|
||||
RSP_VRND(rsp, vd, vs, vt, e, 1);
|
||||
}
|
||||
|
||||
//
|
||||
// VNOP
|
||||
//
|
||||
@@ -563,7 +657,6 @@ extern "C"
|
||||
TRACE_VU(VRCP);
|
||||
uint16_t *acc = rsp->cp2.acc.e;
|
||||
unsigned de = vs & 0x7;
|
||||
e &= 0x7;
|
||||
|
||||
write_acc_lo(acc, LOAD_VT());
|
||||
|
||||
@@ -577,7 +670,6 @@ extern "C"
|
||||
TRACE_VU(VRCPL);
|
||||
uint16_t *acc = rsp->cp2.acc.e;
|
||||
unsigned de = vs & 0x7;
|
||||
e &= 0x7;
|
||||
|
||||
write_acc_lo(acc, LOAD_VT());
|
||||
|
||||
@@ -593,7 +685,6 @@ extern "C"
|
||||
TRACE_VU(VRSQ);
|
||||
uint16_t *acc = rsp->cp2.acc.e;
|
||||
unsigned de = vs & 0x7;
|
||||
e &= 0x7;
|
||||
|
||||
write_acc_lo(acc, LOAD_VT());
|
||||
|
||||
@@ -607,7 +698,6 @@ extern "C"
|
||||
TRACE_VU(VRSQL);
|
||||
uint16_t *acc = rsp->cp2.acc.e;
|
||||
unsigned de = vs & 0x7;
|
||||
e &= 0x7;
|
||||
|
||||
write_acc_lo(acc, LOAD_VT());
|
||||
|
||||
@@ -627,7 +717,6 @@ extern "C"
|
||||
TRACE_VU(VRCPH);
|
||||
uint16_t *acc = rsp->cp2.acc.e;
|
||||
unsigned de = vs & 0x7;
|
||||
e &= 0x7;
|
||||
|
||||
write_acc_lo(acc, LOAD_VT());
|
||||
|
||||
@@ -643,7 +732,6 @@ extern "C"
|
||||
TRACE_VU(VRSQH);
|
||||
uint16_t *acc = rsp->cp2.acc.e;
|
||||
unsigned de = vs & 0x7;
|
||||
e &= 0x7;
|
||||
|
||||
write_acc_lo(acc, LOAD_VT());
|
||||
|
||||
@@ -745,9 +833,13 @@ extern "C"
|
||||
}
|
||||
|
||||
// RESERVED
|
||||
void RSP_RESERVED(RSP::CPUState *rsp, unsigned vd, unsigned, unsigned, unsigned)
|
||||
void RSP_RESERVED(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e)
|
||||
{
|
||||
rsp_vect_t result = rsp_vzero();
|
||||
uint16_t *acc = rsp->cp2.acc.e;
|
||||
rsp_vect_t result = _mm_add_epi16(LOAD_VS(), LOAD_VT());
|
||||
write_acc_lo(acc, result);
|
||||
|
||||
result = rsp_vzero();
|
||||
STORE_RESULT();
|
||||
}
|
||||
}
|
||||
|
||||
+7
-4
@@ -874,12 +874,12 @@ void CPU::jit_instruction(jit_state_t *_jit, uint32_t pc, uint32_t instr,
|
||||
using VUOp = void (*)(RSP::CPUState *, unsigned vd, unsigned vs, unsigned vt, unsigned e);
|
||||
|
||||
static const VUOp ops[64] = {
|
||||
RSP_VMULF, RSP_VMULU, nullptr, nullptr, RSP_VMUDL, RSP_VMUDM, RSP_VMUDN, RSP_VMUDH, RSP_VMACF, RSP_VMACU, nullptr,
|
||||
nullptr, RSP_VMADL, RSP_VMADM, RSP_VMADN, RSP_VMADH, RSP_VADD, RSP_VSUB, nullptr, RSP_VABS, RSP_VADDC, RSP_VSUBC,
|
||||
RSP_VMULF, RSP_VMULU, RSP_VRNDP, RSP_VMULQ, RSP_VMUDL, RSP_VMUDM, RSP_VMUDN, RSP_VMUDH, RSP_VMACF, RSP_VMACU, RSP_VRNDN,
|
||||
RSP_VMACQ, RSP_VMADL, RSP_VMADM, RSP_VMADN, RSP_VMADH, RSP_VADD, RSP_VSUB, nullptr, RSP_VABS, RSP_VADDC, RSP_VSUBC,
|
||||
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, RSP_VSAR, nullptr, nullptr, RSP_VLT,
|
||||
RSP_VEQ, RSP_VNE, RSP_VGE, RSP_VCL, RSP_VCH, RSP_VCR, RSP_VMRG, RSP_VAND, RSP_VNAND, RSP_VOR, RSP_VNOR,
|
||||
RSP_VXOR, RSP_VNXOR, nullptr, nullptr, RSP_VRCP, RSP_VRCPL, RSP_VRCPH, RSP_VMOV, RSP_VRSQ, RSP_VRSQL, RSP_VRSQH,
|
||||
RSP_VNOP,
|
||||
RSP_VNOP, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, RSP_VNOP
|
||||
};
|
||||
|
||||
auto *vuop = ops[op];
|
||||
@@ -985,6 +985,7 @@ void CPU::jit_instruction(jit_state_t *_jit, uint32_t pc, uint32_t instr,
|
||||
|
||||
case 007: // SRAV
|
||||
{
|
||||
NOP_IF_RD_ZERO();
|
||||
unsigned rt_reg = regs.load_mips_register_sext(_jit, rt);
|
||||
unsigned rs_reg = regs.load_mips_register_noext(_jit, rs);
|
||||
unsigned rs_tmp_reg = regs.modify_mips_register(_jit, RegisterCache::SCRATCH_REGISTER0);
|
||||
@@ -1385,7 +1386,8 @@ void CPU::jit_instruction(jit_state_t *_jit, uint32_t pc, uint32_t instr,
|
||||
|
||||
case 013: // SLTIU
|
||||
{
|
||||
TWO_REG_IMM_OP(lti_u, uint16_t, zext);
|
||||
// SLTIU sign extends the immediate to 32 bit but then does an unsigned comparison
|
||||
TWO_REG_IMM_OP(lti_u, int16_t, sext);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1564,6 +1566,7 @@ void CPU::jit_instruction(jit_state_t *_jit, uint32_t pc, uint32_t instr,
|
||||
}
|
||||
|
||||
case 043: // LW
|
||||
case 047: // LWU
|
||||
{
|
||||
jit_emit_load_operation(_jit, pc, instr,
|
||||
[](jit_state_t *_jit, unsigned a, unsigned b, unsigned c) { jit_ldxr_i(a, b, c); },
|
||||
|
||||
@@ -49,12 +49,15 @@ extern "C"
|
||||
#define DECL_COP2(op) void RSP_##op(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e)
|
||||
DECL_COP2(VMULF);
|
||||
DECL_COP2(VMULU);
|
||||
DECL_COP2(VRNDP);
|
||||
DECL_COP2(VMULQ);
|
||||
DECL_COP2(VMUDL);
|
||||
DECL_COP2(VMUDM);
|
||||
DECL_COP2(VMUDN);
|
||||
DECL_COP2(VMUDH);
|
||||
DECL_COP2(VMACF);
|
||||
DECL_COP2(VMACU);
|
||||
DECL_COP2(VRNDN);
|
||||
DECL_COP2(VMACQ);
|
||||
DECL_COP2(VMADL);
|
||||
DECL_COP2(VMADM);
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ enum CP0Registers
|
||||
CP0_REGISTER_SP_STATUS = 4,
|
||||
CP0_REGISTER_DMA_FULL = 5,
|
||||
CP0_REGISTER_DMA_BUSY = 6,
|
||||
CP0_REGISTER_SP_RESERVED = 7,
|
||||
CP0_REGISTER_SP_SEMAPHORE = 7,
|
||||
CP0_REGISTER_CMD_START = 8,
|
||||
CP0_REGISTER_CMD_END = 9,
|
||||
CP0_REGISTER_CMD_CURRENT = 10,
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
mupen64plus-rsp-paraLLEl/mman/sys/mman.o: \
|
||||
mupen64plus-rsp-paraLLEl/mman/sys/mman.c \
|
||||
mupen64plus-rsp-paraLLEl/mman/sys/mman.h
|
||||
@@ -9,7 +9,7 @@ jobs:
|
||||
matrix:
|
||||
image: ["GLideN64 (x64 Mupen64Plus-CLI)", "GLideN64 (x64 Mupen64Plus-Qt)"]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Install Packages
|
||||
run: |
|
||||
# fix for "error processing package grub-efi-amd64-signed"
|
||||
@@ -43,7 +43,7 @@ jobs:
|
||||
cp translations/release/*.qm build/linux-mupen64plus-qt/
|
||||
- name: Upload GLideN64 (x64 Mupen64Plus-CLI)
|
||||
if: ${{ matrix.image == 'GLideN64 (x64 Mupen64Plus-CLI)' }}
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: GLideN64-${{ env.GIT_REVISION }}-Linux-Mupen64Plus-CLI-x64
|
||||
path: |
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
build/linux-mupen64plus-cli/GLideN64.custom.ini
|
||||
- name: Upload GLideN64 (x64 Mupen64Plus-Qt)
|
||||
if: ${{ matrix.image == 'GLideN64 (x64 Mupen64Plus-Qt)' }}
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: GLideN64-${{ env.GIT_REVISION }}-Linux-Mupen64Plus-Qt-x64
|
||||
path: |
|
||||
@@ -70,8 +70,8 @@ jobs:
|
||||
QT_BUILD_x86: qt-5_15-x86-msvc2017-static
|
||||
QT_BUILD_x64: qt-5_15-x64-msvc2017-static
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: microsoft/setup-msbuild@v1.1
|
||||
- uses: actions/checkout@v4
|
||||
- uses: microsoft/setup-msbuild@v2
|
||||
- uses: msys2/setup-msys2@v2
|
||||
with:
|
||||
update: true
|
||||
@@ -162,7 +162,7 @@ jobs:
|
||||
cp translations/release/*.qm build/windows-mupen64plus-qt/
|
||||
shell: msys2 {0}
|
||||
- name: Upload GLideN64 (x64 Project64-Qt)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ matrix.image == 'GLideN64 (x64 Project64-Qt)' }}
|
||||
with:
|
||||
name: GLideN64-${{ env.GIT_REVISION }}-Windows-Project64-Qt-x64
|
||||
@@ -171,7 +171,7 @@ jobs:
|
||||
build\windows-project64-qt-x64\GLideN64.custom.ini
|
||||
build\windows-project64-qt-x64\*.qm
|
||||
- name: Upload GLideN64 (x86 Project64-Qt)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ matrix.image == 'GLideN64 (x86 Project64-Qt)' }}
|
||||
with:
|
||||
name: GLideN64-${{ env.GIT_REVISION }}-Windows-Project64-Qt-x86
|
||||
@@ -180,7 +180,7 @@ jobs:
|
||||
build\windows-project64-qt\GLideN64.custom.ini
|
||||
build\windows-project64-qt\*.qm
|
||||
- name: Upload GLideN64 (x64 Project64-WTL)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ matrix.image == 'GLideN64 (x64 Project64-WTL)' }}
|
||||
with:
|
||||
name: GLideN64-${{ env.GIT_REVISION }}-Windows-Project64-WTL-x64
|
||||
@@ -189,7 +189,7 @@ jobs:
|
||||
build\windows-project64-wtl-x64\GLideN64.custom.ini
|
||||
build\windows-project64-wtl-x64\translations\*.Lang
|
||||
- name: Upload GLideN64 (x86 Project64-WTL)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ matrix.image == 'GLideN64 (x86 Project64-WTL)' }}
|
||||
with:
|
||||
name: GLideN64-${{ env.GIT_REVISION }}-Windows-Project64-WTL-x86
|
||||
@@ -198,7 +198,7 @@ jobs:
|
||||
build\windows-project64-wtl\GLideN64.custom.ini
|
||||
build\windows-project64-wtl\translations\*.Lang
|
||||
- name: Upload GLideN64 (x64 Mupen64Plus-CLI)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ matrix.image == 'GLideN64 (x64 Mupen64Plus-CLI)' }}
|
||||
with:
|
||||
name: GLideN64-${{ env.GIT_REVISION }}-Windows-Mupen64Plus-CLI-x64
|
||||
@@ -206,7 +206,7 @@ jobs:
|
||||
build\windows-mupen64plus-cli-x64\*.dll
|
||||
build\windows-mupen64plus-cli-x64\GLideN64.custom.ini
|
||||
- name: Upload GLideN64 (x86 Mupen64Plus-CLI)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ matrix.image == 'GLideN64 (x86 Mupen64Plus-CLI)' }}
|
||||
with:
|
||||
name: GLideN64-${{ env.GIT_REVISION }}-Windows-Mupen64Plus-CLI-x86
|
||||
@@ -214,7 +214,7 @@ jobs:
|
||||
build\windows-mupen64plus-cli\*.dll
|
||||
build\windows-mupen64plus-cli\GLideN64.custom.ini
|
||||
- name: Upload GLideN64 (x64 Mupen64Plus-Qt)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ matrix.image == 'GLideN64 (x64 Mupen64Plus-Qt)' }}
|
||||
with:
|
||||
name: GLideN64-${{ env.GIT_REVISION }}-Windows-Mupen64Plus-Qt-x64
|
||||
@@ -227,9 +227,9 @@ jobs:
|
||||
needs: [Windows, Linux]
|
||||
if: github.ref == 'refs/heads/master'
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: artifacts
|
||||
# sadly we can't download the artifacts without extracting it
|
||||
@@ -238,7 +238,7 @@ jobs:
|
||||
run: |
|
||||
cd artifacts
|
||||
for artifact in *
|
||||
do
|
||||
do
|
||||
echo "-> Creating ${artifact}.zip"
|
||||
pushd "$artifact"
|
||||
zip -r "../${artifact}.zip" *
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@
|
||||
[subrepo]
|
||||
remote = git@github.com:/gonetz/GLideN64.git
|
||||
branch = master
|
||||
commit = 3b43a13a80dfc2eb6357673440b335e54eaa3896
|
||||
parent = 8d3f2d4d889b0a95d94ad447f5bf92d6ebf97c3b
|
||||
commit = ded38f88aafb41bd3db574f2ec9f101b9bdba355
|
||||
parent = 363131c1753ababf6d7745be6b850fe0e767e008
|
||||
method = merge
|
||||
cmdver = 0.4.6
|
||||
|
||||
+3
-2
@@ -214,9 +214,10 @@ void ColorBufferToRDRAM::_copy(u32 _startAddress, u32 _endAddress, bool _sync)
|
||||
u32 *ptr_src = (u32*)pPixels;
|
||||
u16 *ptr_dst = (u16*)(RDRAM + _startAddress);
|
||||
m_blueNoiseIdx++;
|
||||
if ((config.generalEmulation.hacks & hack_subscreen) != 0u && height == 1u)
|
||||
if (gDP.m_subscreen) {
|
||||
copyWhiteToRDRAM(m_pCurFrameBuffer);
|
||||
else
|
||||
gDP.m_subscreen = false;
|
||||
} else
|
||||
writeToRdram<u32, u16>(ptr_src, ptr_dst, &ColorBufferToRDRAM::_RGBAtoRGBA16, dummyTester<u32>, 1, width, height, numPixels, _startAddress, m_pCurFrameBuffer->m_startAddress, m_pCurFrameBuffer->m_size);
|
||||
} else if (m_pCurFrameBuffer->m_size == G_IM_SIZ_8b) {
|
||||
u8 *ptr_src = (u8*)pPixels;
|
||||
|
||||
@@ -192,8 +192,8 @@ if( NOT CMAKE_BUILD_TYPE)
|
||||
set( CMAKE_BUILD_TYPE Release)
|
||||
endif( NOT CMAKE_BUILD_TYPE)
|
||||
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel"
|
||||
OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" OR
|
||||
CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
|
||||
set(GLIDEN64_BUILD_TYPE Release)
|
||||
elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(GLIDEN64_BUILD_TYPE Debug)
|
||||
|
||||
@@ -103,6 +103,7 @@ void Config::resetToDefaults()
|
||||
textureFilter.txCacheCompression = 1;
|
||||
textureFilter.txSaveCache = 1;
|
||||
textureFilter.txDump = 0;
|
||||
textureFilter.txStrongCRC = 0;
|
||||
|
||||
textureFilter.txEnhancedTextureFileStorage = 0;
|
||||
textureFilter.txHiresTextureFileStorage = 0;
|
||||
@@ -207,6 +208,8 @@ const char* Config::hotkeyIniName(u32 _idx)
|
||||
return "hkForceGammaCorrection";
|
||||
case Config::HotKey::hkInaccurateTexCords:
|
||||
return "hkInaccurateTexCords";
|
||||
case Config::HotKey::hkStrongCRC:
|
||||
return "hkStrongCRC";
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
@@ -245,6 +248,8 @@ const char* Config::enabledHotkeyIniName(u32 _idx)
|
||||
return "hkForceGammaCorrectionEnabled";
|
||||
case Config::HotKey::hkInaccurateTexCords:
|
||||
return "hkInaccurateTexCordsEnabled";
|
||||
case Config::HotKey::hkStrongCRC:
|
||||
return "hkStrongCRCEnabled";
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
+5
-2
@@ -99,8 +99,9 @@ struct Config
|
||||
aStretch = 0,
|
||||
a43 = 1,
|
||||
a169 = 2,
|
||||
aAdjust = 3,
|
||||
aTotal = 4
|
||||
aAdjust43 = 3,
|
||||
aAdjust169 = 4,
|
||||
aTotal = 5
|
||||
};
|
||||
|
||||
enum CopyToRDRAM {
|
||||
@@ -176,6 +177,7 @@ struct Config
|
||||
u32 txCacheCompression; // Zip textures cache
|
||||
u32 txSaveCache; // Save texture cache to hard disk
|
||||
u32 txDump; // Dump textures
|
||||
u32 txStrongCRC; // Dump textures with alternative (strong) CRC
|
||||
|
||||
u32 txEnhancedTextureFileStorage; // Use file storage instead of memory cache for enhanced textures.
|
||||
u32 txHiresTextureFileStorage; // Use file storage instead of memory cache for hires textures.
|
||||
@@ -238,6 +240,7 @@ struct Config
|
||||
hkOsdRenderingResolution,
|
||||
hkForceGammaCorrection,
|
||||
hkInaccurateTexCords,
|
||||
hkStrongCRC,
|
||||
hkTotal
|
||||
};
|
||||
|
||||
|
||||
@@ -174,7 +174,7 @@ void DisplayWindow::_setBufferSize()
|
||||
m_height = m_screenHeight;
|
||||
}
|
||||
break;
|
||||
case Config::aAdjust: // adjust
|
||||
case Config::aAdjust43: // adjust
|
||||
m_width = m_screenWidth;
|
||||
m_height = m_screenHeight;
|
||||
if (m_screenWidth * 3 / 4 > m_screenHeight) {
|
||||
@@ -183,6 +183,15 @@ void DisplayWindow::_setBufferSize()
|
||||
m_bAdjustScreen = true;
|
||||
}
|
||||
break;
|
||||
case Config::aAdjust169: // adjust
|
||||
m_width = m_screenWidth;
|
||||
m_height = m_screenHeight;
|
||||
if (m_screenWidth * 9 / 16 > m_screenHeight) {
|
||||
f32 width169 = m_screenHeight * 16.0f / 9.0f;
|
||||
m_adjustScale = width169 / m_screenWidth;
|
||||
m_bAdjustScreen = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
assert(false && "Unknown aspect ratio");
|
||||
m_width = m_screenWidth;
|
||||
|
||||
@@ -918,6 +918,10 @@ void FrameBufferList::saveBuffer(u32 _address, u16 _format, u16 _size, u16 _widt
|
||||
wnd.getDrawer().clearDepthBuffer();
|
||||
}
|
||||
|
||||
if ((config.generalEmulation.hacks & hack_subscreen) != 0u &&
|
||||
_format == G_IM_FMT_I && _size == G_IM_SIZ_8b)
|
||||
gDP.m_subscreen = gDP.otherMode._u64 == 0x00000cf00f0a0004;
|
||||
|
||||
m_pCurrent->m_isDepthBuffer = _address == gDP.depthImageAddress;
|
||||
m_pCurrent->m_isPauseScreen = m_pCurrent->m_isOBScreen = false;
|
||||
m_pCurrent->m_copied = false;
|
||||
|
||||
@@ -580,8 +580,18 @@ TxFilter::checksum64(uint8 *src, int width, int height, int size, int rowStride,
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64
|
||||
TxFilter::checksum64strong(uint8 *src, int width, int height, int size, int rowStride, uint8 *palette)
|
||||
{
|
||||
if (_options & (HIRESTEXTURES_MASK | DUMP_TEX))
|
||||
return TxUtil::checksum64strong(src, width, height, size, rowStride, palette);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
boolean
|
||||
TxFilter::dmptx(uint8 *src, int width, int height, int rowStridePixel, ColorFormat gfmt, N64FormatSize n64FmtSz, Checksum r_crc64)
|
||||
TxFilter::dmptx(uint8 *src, int width, int height, int rowStridePixel,
|
||||
ColorFormat gfmt, N64FormatSize n64FmtSz, Checksum r_crc64, boolean isStrongCrc)
|
||||
{
|
||||
assert(gfmt != graphics::colorFormat::RGBA);
|
||||
if (!_initialized)
|
||||
@@ -609,7 +619,7 @@ TxFilter::dmptx(uint8 *src, int width, int height, int rowStridePixel, ColorForm
|
||||
tmpbuf.assign(_dumpPath);
|
||||
tmpbuf.append(wst("/"));
|
||||
tmpbuf.append(_ident);
|
||||
tmpbuf.append(wst("/GLideNHQ"));
|
||||
isStrongCrc ? tmpbuf.append(wst("/GLideNHQ_strong_crc")) : tmpbuf.append(wst("/GLideNHQ"));
|
||||
if (!osal_path_existsW(tmpbuf.c_str()) && osal_mkdirp(tmpbuf.c_str()) != 0)
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -78,7 +78,9 @@ public:
|
||||
N64FormatSize n64FmtSz,
|
||||
GHQTexInfo *info);
|
||||
uint64 checksum64(uint8 *src, int width, int height, int size, int rowStride, uint8 *palette);
|
||||
boolean dmptx(uint8 *src, int width, int height, int rowStridePixel, ColorFormat gfmt, N64FormatSize n64FmtSz, Checksum r_crc64);
|
||||
uint64 checksum64strong(uint8 *src, int width, int height, int size, int rowStride, uint8 *palette);
|
||||
boolean dmptx(uint8 *src, int width, int height, int rowStridePixel,
|
||||
ColorFormat gfmt, N64FormatSize n64FmtSz, Checksum r_crc64, boolean isStrongCrc);
|
||||
boolean reloadhirestex();
|
||||
void dumpcache();
|
||||
};
|
||||
|
||||
+19
-1
@@ -84,15 +84,33 @@ txfilter_checksum(uint8 *src, int width, int height, int size, int rowStride, ui
|
||||
return 0;
|
||||
}
|
||||
|
||||
TAPI uint64 TAPIENTRY
|
||||
txfilter_checksum_strong(uint8 *src, int width, int height, int size, int rowStride, uint8 *palette)
|
||||
{
|
||||
if (txFilter)
|
||||
return txFilter->checksum64strong(src, width, height, size, rowStride, palette);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
TAPI boolean TAPIENTRY
|
||||
txfilter_dmptx(uint8 *src, int width, int height, int rowStridePixel, uint16 gfmt, N64FormatSize n64FmtSz, Checksum r_crc64)
|
||||
{
|
||||
if (txFilter)
|
||||
return txFilter->dmptx(src, width, height, rowStridePixel, ColorFormat(u32(gfmt)), n64FmtSz, r_crc64);
|
||||
return txFilter->dmptx(src, width, height, rowStridePixel, ColorFormat(u32(gfmt)), n64FmtSz, r_crc64, FALSE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
TAPI boolean TAPIENTRY
|
||||
txfilter_dmptx_strong(uint8 *src, int width, int height, int rowStridePixel, uint16 gfmt, N64FormatSize n64FmtSz, Checksum r_crc64)
|
||||
{
|
||||
if (txFilter)
|
||||
return txFilter->dmptx(src, width, height, rowStridePixel, ColorFormat(u32(gfmt)), n64FmtSz, r_crc64, TRUE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
TAPI boolean TAPIENTRY
|
||||
txfilter_reloadhirestex()
|
||||
{
|
||||
|
||||
@@ -92,7 +92,7 @@ typedef unsigned char boolean;
|
||||
#define GZ_HIRESTEXCACHE 0x00800000
|
||||
#define DUMP_TEXCACHE 0x01000000
|
||||
#define DUMP_HIRESTEXCACHE 0x02000000
|
||||
#define UNDEFINED_0 0x04000000
|
||||
#define DUMP_STRONG_CRC 0x04000000
|
||||
#define UNDEFINED_1 0x08000000
|
||||
#define FORCE16BPP_HIRESTEX 0x10000000
|
||||
#define FORCE16BPP_TEX 0x20000000
|
||||
@@ -225,9 +225,15 @@ txfilter_hirestex(uint64 g64crc, Checksum r_crc64, uint16 *palette, N64FormatSiz
|
||||
TAPI uint64 TAPIENTRY
|
||||
txfilter_checksum(uint8 *src, int width, int height, int size, int rowStride, uint8 *palette);
|
||||
|
||||
TAPI uint64 TAPIENTRY
|
||||
txfilter_checksum_strong(uint8 *src, int width, int height, int size, int rowStride, uint8 *palette);
|
||||
|
||||
TAPI boolean TAPIENTRY
|
||||
txfilter_dmptx(uint8 *src, int width, int height, int rowStridePixel, uint16 gfmt, N64FormatSize n64FmtSz, Checksum r_crc64);
|
||||
|
||||
TAPI boolean TAPIENTRY
|
||||
txfilter_dmptx_strong(uint8 *src, int width, int height, int rowStridePixel, uint16 gfmt, N64FormatSize n64FmtSz, Checksum r_crc64);
|
||||
|
||||
TAPI boolean TAPIENTRY
|
||||
txfilter_reloadhirestex();
|
||||
|
||||
|
||||
+121
-26
@@ -38,21 +38,22 @@
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
|
||||
#define XXH_INLINE_ALL
|
||||
#include "xxHash/xxhash.h"
|
||||
|
||||
/*
|
||||
* Utilities
|
||||
******************************************************************************/
|
||||
static uint32 Uint64ToUint32(uint64_t t)
|
||||
{
|
||||
return static_cast<uint32>((t & 0xFFFFFFFF) ^ (t >> 32));
|
||||
}
|
||||
|
||||
uint32
|
||||
TxUtil::checksumTx(uint8 *src, int width, int height, ColorFormat format)
|
||||
{
|
||||
int dataSize = sizeofTx(width, height, format);
|
||||
|
||||
/* for now we use adler32 if something else is better
|
||||
* we can simply swtich later
|
||||
*/
|
||||
/* return (dataSize ? Adler32(src, dataSize, 1) : 0); */
|
||||
|
||||
/* zlib crc32 */
|
||||
return (dataSize ? crc32(crc32(0L, Z_NULL, 0), src, dataSize) : 0);
|
||||
return Uint64ToUint32(XXH3_64bits(src, dataSize));
|
||||
}
|
||||
|
||||
int
|
||||
@@ -77,18 +78,6 @@ TxUtil::sizeofTx(int width, int height, ColorFormat format)
|
||||
return dataSize;
|
||||
}
|
||||
|
||||
uint32
|
||||
TxUtil::checksum(uint8 *src, int width, int height, int size, int rowStride)
|
||||
{
|
||||
/* Rice CRC32 for now. We can switch this to Jabo MD5 or
|
||||
* any other custom checksum.
|
||||
* TODO: use *_HIRESTEXTURE option. */
|
||||
|
||||
if (!src) return 0;
|
||||
|
||||
return RiceCRC32(src, width, height, size, rowStride);
|
||||
}
|
||||
|
||||
uint64
|
||||
TxUtil::checksum64(uint8 *src, int width, int height, int size, int rowStride, uint8 *palette)
|
||||
{
|
||||
@@ -126,6 +115,43 @@ TxUtil::checksum64(uint8 *src, int width, int height, int size, int rowStride, u
|
||||
return crc64Ret;
|
||||
}
|
||||
|
||||
uint64
|
||||
TxUtil::checksum64strong(uint8 *src, int width, int height, int size, int rowStride, uint8 *palette)
|
||||
{
|
||||
/* XXH3_64bits for strong 32bit texture hash. */
|
||||
/* Returned value is 64bits: hi=palette crc32 low=texture crc32 */
|
||||
|
||||
if (!src)
|
||||
return 0;
|
||||
|
||||
uint64 crc64Ret = 0;
|
||||
|
||||
if (palette) {
|
||||
uint32 crc32 = 0, cimax = 0;
|
||||
switch (size & 0xff) {
|
||||
case 1:
|
||||
if (StrongCRC32_CI8(src, width, height, rowStride, &crc32, &cimax)) {
|
||||
crc64Ret = StrongCRC32(palette, cimax + 1, 1, 2, 512);
|
||||
crc64Ret <<= 32;
|
||||
crc64Ret |= crc32;
|
||||
}
|
||||
break;
|
||||
case 0:
|
||||
if (StrongCRC32_CI4(src, width, height, rowStride, &crc32, &cimax)) {
|
||||
crc64Ret = StrongCRC32(palette, cimax + 1, 1, 2, 32);
|
||||
crc64Ret <<= 32;
|
||||
crc64Ret |= crc32;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!crc64Ret) {
|
||||
crc64Ret = StrongCRC32(src, width, height, size, rowStride);
|
||||
}
|
||||
|
||||
return crc64Ret;
|
||||
}
|
||||
|
||||
/* Rice CRC32 for hires texture packs */
|
||||
/* NOTE: The following is used in Glide64 to calculate the CRC32
|
||||
* for Rice hires texture packs.
|
||||
@@ -186,24 +212,22 @@ loop1:
|
||||
}
|
||||
#else
|
||||
int y = height - 1;
|
||||
while (y >= 0)
|
||||
{
|
||||
do {
|
||||
uint32 esi = 0;
|
||||
int x = bytesPerLine - 4;
|
||||
while (x >= 0)
|
||||
{
|
||||
do {
|
||||
esi = *(uint32*)(src + x);
|
||||
esi ^= x;
|
||||
|
||||
crc32Ret = (crc32Ret << 4) + ((crc32Ret >> 28) & 15);
|
||||
crc32Ret += esi;
|
||||
x -= 4;
|
||||
}
|
||||
} while (x >= 0);
|
||||
esi ^= y;
|
||||
crc32Ret += esi;
|
||||
src += rowStride;
|
||||
--y;
|
||||
}
|
||||
} while (y >= 0);
|
||||
#endif
|
||||
} catch(...) {
|
||||
DBG_INFO(80, wst("Error: RiceCRC32 exception!\n"));
|
||||
@@ -486,6 +510,77 @@ findmax0:
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint32
|
||||
TxUtil::StrongCRC32(const uint8* src, int width, int height, int size, int rowStride)
|
||||
{
|
||||
/* NOTE: bytesPerLine must be equal or larger than 4 */
|
||||
const uint32 bytesPerLine = width << size >> 1;
|
||||
|
||||
u64 crc = UINT64_MAX;
|
||||
std::vector<uint8> buf(static_cast<uint32>(height) * std::max(bytesPerLine, static_cast<uint32>(rowStride)));
|
||||
uint8* pData = buf.data();
|
||||
try {
|
||||
for (int y = 0; y < height; ++y) {
|
||||
if (bytesPerLine < 4) {
|
||||
// bytesPerLine must be >= 4, but if it less than 4, reproduce RiceCRC behavior,
|
||||
// that is read bytes before provided source address.
|
||||
memcpy(pData, src - 4 + bytesPerLine, 4);
|
||||
pData += 4;
|
||||
}
|
||||
else {
|
||||
memcpy(pData, src, bytesPerLine);
|
||||
pData += bytesPerLine;
|
||||
}
|
||||
src += rowStride;
|
||||
}
|
||||
crc = XXH3_64bits(buf.data(), static_cast<size_t>(pData - buf.data()));
|
||||
}
|
||||
catch (...) {
|
||||
DBG_INFO(80, wst("Error: StrongCRC32 exception!\n"));
|
||||
}
|
||||
|
||||
return Uint64ToUint32(crc);
|
||||
}
|
||||
|
||||
boolean
|
||||
TxUtil::StrongCRC32_CI4(const uint8* src, int width, int height, int rowStride,
|
||||
uint32* crc32, uint32* cimax)
|
||||
{
|
||||
/* NOTE: bytes_per_width must be equal or larger than 4 */
|
||||
|
||||
/* 4bit CI */
|
||||
try {
|
||||
uint32 crc32Ret = StrongCRC32(src, width, height, 0, rowStride);
|
||||
uint32 cimaxRet = CalculateMaxCI4b(src, width, height, rowStride);
|
||||
*crc32 = crc32Ret;
|
||||
*cimax = cimaxRet;
|
||||
return 1;
|
||||
} catch(...) {
|
||||
DBG_INFO(80, wst("Error: RiceCRC32 exception!\n"));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
boolean
|
||||
TxUtil::StrongCRC32_CI8(const uint8* src, int width, int height, int rowStride,
|
||||
uint32* crc32, uint32* cimax)
|
||||
{
|
||||
/* NOTE: bytes_per_width must be equal or larger than 4 */
|
||||
|
||||
/* 8bit CI */
|
||||
try {
|
||||
uint32 crc32Ret = StrongCRC32(src, width, height, 1, rowStride);
|
||||
uint32 cimaxRet = CalculateMaxCI8b(src, width, height, rowStride);
|
||||
*crc32 = crc32Ret;
|
||||
*cimax = cimaxRet;
|
||||
return 1;
|
||||
}
|
||||
catch (...) {
|
||||
DBG_INFO(80, wst("Error: RiceCRC32 exception!\n"));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32 TxUtil::getNumberofProcessors()
|
||||
{
|
||||
uint32 numcore = std::thread::hardware_concurrency();
|
||||
|
||||
@@ -43,14 +43,16 @@ private:
|
||||
uint32* crc32, uint32* cimax);
|
||||
static boolean RiceCRC32_CI8(const uint8* src, int width, int height, int rowStride,
|
||||
uint32* crc32, uint32* cimax);
|
||||
static uint32 StrongCRC32(const uint8* src, int width, int height, int size, int rowStride);
|
||||
static boolean StrongCRC32_CI4(const uint8* src, int width, int height, int rowStride,
|
||||
uint32* crc32, uint32* cimax);
|
||||
static boolean StrongCRC32_CI8(const uint8* src, int width, int height, int rowStride,
|
||||
uint32* crc32, uint32* cimax);
|
||||
public:
|
||||
static int sizeofTx(int width, int height, ColorFormat format);
|
||||
static uint32 checksumTx(uint8 *data, int width, int height, ColorFormat format);
|
||||
#if 0 /* unused */
|
||||
static uint32 chkAlpha(uint32* src, int width, int height);
|
||||
#endif
|
||||
static uint32 checksum(uint8 *src, int width, int height, int size, int rowStride);
|
||||
static uint64 checksum64(uint8 *src, int width, int height, int size, int rowStride, uint8 *palette);
|
||||
static uint64 checksum64strong(uint8 *src, int width, int height, int size, int rowStride, uint8 *palette);
|
||||
static uint32 getNumberofProcessors();
|
||||
};
|
||||
|
||||
|
||||
@@ -33,11 +33,12 @@ void LoadDefaultStrings(void)
|
||||
g_defaultStrings.insert(LANG_STRINGS::value_type(VIDEO_WINDOWED_RESOLUTION, "Windowed resolution:"));
|
||||
g_defaultStrings.insert(LANG_STRINGS::value_type(VIDEO_WINDOWED_RESOLUTION_TOOLTIP, "This option selects the resolution for windowed mode. You can also type in a custom window size.\n\n[Recommended: 640 x 480, 800 x 600, 1024 x 768, 1280 x 960]"));
|
||||
g_defaultStrings.insert(LANG_STRINGS::value_type(VIDEO_ASPECT_RATIO, "Aspect ratio:"));
|
||||
g_defaultStrings.insert(LANG_STRINGS::value_type(VIDEO_ASPECT_RATIO_TOOLTIP, "This setting adjusts the aspect ratio of the video output. All N64 games support 4:3. Some games support 16:9 within game settings. Use Stretch to fill the screen without pillar or letterboxing.\n\nTry to adjust game to fit tries to adjust the viewing space to fit without stretching. Many games work well adjusted, but some don't."));
|
||||
g_defaultStrings.insert(LANG_STRINGS::value_type(VIDEO_ASPECT_RATIO_TOOLTIP, "This setting adjusts the aspect ratio of the video output. All N64 games support 4:3. Some games support 16:9 within game settings. Use Stretch to fill the screen without pillar or letterboxing.\n\nTry to adjust 4:3 game to fit (also known as \"widescreen hack\") tries to adjust the viewing space to fit a game designed for 4:3 without stretching. Many games work well adjusted, but some don't.\n\nTry to adjust 16:9 game to fit</span> (also known as \"ultrawidescreen hack\") tries to adjust the viewing space to fit a game designed for 16:9 without stretching. Many games work well adjusted, but some don't. For games offering native 16:9 options, this is generally preferable for ultrawide aspect ratios as it'll lead to fewer rendering issues."));
|
||||
g_defaultStrings.insert(LANG_STRINGS::value_type(VIDEO_ASPECT_4_3, "4:3 (recommended)"));
|
||||
g_defaultStrings.insert(LANG_STRINGS::value_type(VIDEO_ASPECT_16_19, "16:9"));
|
||||
g_defaultStrings.insert(LANG_STRINGS::value_type(VIDEO_ASPECT_STRETCH, "Stretch"));
|
||||
g_defaultStrings.insert(LANG_STRINGS::value_type(VIDEO_ASPECT_ADJUST, "Try to adjust game to fit"));
|
||||
g_defaultStrings.insert(LANG_STRINGS::value_type(VIDEO_ASPECT_ADJUST, "Try to adjust 4:3 game to fit"));
|
||||
g_defaultStrings.insert(LANG_STRINGS::value_type(VIDEO_ASPECT_ADJUST, "Try to adjust 16:9 game to fit"));
|
||||
g_defaultStrings.insert(LANG_STRINGS::value_type(VIDEO_VSYNC, "Enable VSync"));
|
||||
g_defaultStrings.insert(LANG_STRINGS::value_type(VIDEO_VSYNC_TOOLTIP, "Vertical sync, or VSync, can improve the image by syncing the game's frame rate to your monitor's refresh rate. This prevents image tearing, but may cause performance problems.\n\n[Recommended: Usually off, on if you have image tearing problems]"));
|
||||
g_defaultStrings.insert(LANG_STRINGS::value_type(VIDEO_THREADED_VIDEO, "Enable threaded video"));
|
||||
|
||||
+4
-2
@@ -477,7 +477,8 @@ void CVideoTab::LoadSettings(bool /*blockCustomSettings*/) {
|
||||
case Config::aStretch: aspectComboBox.SetCurSel(2); break;
|
||||
case Config::a43: aspectComboBox.SetCurSel(0); break;
|
||||
case Config::a169: aspectComboBox.SetCurSel(1); break;
|
||||
case Config::aAdjust: aspectComboBox.SetCurSel(3); break;
|
||||
case Config::aAdjust43: aspectComboBox.SetCurSel(3); break;
|
||||
case Config::aAdjust169: aspectComboBox.SetCurSel(4); break;
|
||||
}
|
||||
|
||||
CComboBox(GetDlgItem(IDC_CMB_PATTERN)).SetCurSel(config.generalEmulation.rdramImageDitheringMode);
|
||||
@@ -522,7 +523,8 @@ void CVideoTab::SaveSettings()
|
||||
if (AspectIndx == 2) { config.frameBufferEmulation.aspect = Config::aStretch; }
|
||||
else if (AspectIndx == 0) { config.frameBufferEmulation.aspect = Config::a43; }
|
||||
else if (AspectIndx == 1) { config.frameBufferEmulation.aspect = Config::a169; }
|
||||
else if (AspectIndx == 3) { config.frameBufferEmulation.aspect = Config::aAdjust; }
|
||||
else if (AspectIndx == 3) { config.frameBufferEmulation.aspect = Config::aAdjust43; }
|
||||
else if (AspectIndx == 4) { config.frameBufferEmulation.aspect = Config::aAdjust169; }
|
||||
|
||||
config.video.verticalSync = CButton(GetDlgItem(IDC_CHK_VERTICAL_SYNC)).GetCheck() == BST_CHECKED;
|
||||
config.video.threadedVideo = CButton(GetDlgItem(IDC_CHK_THREADED_VIDEO)).GetCheck() == BST_CHECKED;
|
||||
|
||||
@@ -105,6 +105,8 @@ QString ConfigDialog::_hotkeyDescription(quint32 _idx) const
|
||||
return tr("Toggle force gamma correction");
|
||||
case Config::HotKey::hkInaccurateTexCords:
|
||||
return tr("Toggle inaccurate texture coordinates");
|
||||
case Config::HotKey::hkStrongCRC:
|
||||
return tr("Toggle strong CRC for textures dump");
|
||||
}
|
||||
return tr("Unknown hotkey");
|
||||
}
|
||||
@@ -330,9 +332,12 @@ void ConfigDialog::_init(bool reInit, bool blockCustomSettings)
|
||||
case Config::a169:
|
||||
ui->aspectComboBox->setCurrentIndex(1);
|
||||
break;
|
||||
case Config::aAdjust:
|
||||
case Config::aAdjust43:
|
||||
ui->aspectComboBox->setCurrentIndex(3);
|
||||
break;
|
||||
case Config::aAdjust169:
|
||||
ui->aspectComboBox->setCurrentIndex(4);
|
||||
break;
|
||||
}
|
||||
|
||||
ui->resolutionFactorSpinBox->valueChanged(2);
|
||||
@@ -370,6 +375,7 @@ void ConfigDialog::_init(bool reInit, bool blockCustomSettings)
|
||||
ui->texturePackGroupBox->setChecked(config.textureFilter.txHiresEnable != 0);
|
||||
ui->alphaChannelCheckBox->setChecked(config.textureFilter.txHiresFullAlphaChannel != 0);
|
||||
ui->alternativeCRCCheckBox->setChecked(config.textureFilter.txHresAltCRC != 0);
|
||||
ui->strongCRCCheckBox->setChecked(config.textureFilter.txStrongCRC != 0);
|
||||
ui->force16bppCheckBox->setChecked(config.textureFilter.txForce16bpp != 0);
|
||||
ui->compressCacheCheckBox->setChecked(config.textureFilter.txCacheCompression != 0);
|
||||
ui->saveTextureCacheCheckBox->setChecked(config.textureFilter.txSaveCache != 0);
|
||||
@@ -649,7 +655,9 @@ void ConfigDialog::accept(bool justSave) {
|
||||
else if (ui->aspectComboBox->currentIndex() == 1)
|
||||
config.frameBufferEmulation.aspect = Config::a169;
|
||||
else if (ui->aspectComboBox->currentIndex() == 3)
|
||||
config.frameBufferEmulation.aspect = Config::aAdjust;
|
||||
config.frameBufferEmulation.aspect = Config::aAdjust43;
|
||||
else if (ui->aspectComboBox->currentIndex() == 4)
|
||||
config.frameBufferEmulation.aspect = Config::aAdjust169;
|
||||
|
||||
if (ui->factor0xRadioButton->isChecked())
|
||||
config.frameBufferEmulation.nativeResFactor = 0;
|
||||
@@ -684,6 +692,7 @@ void ConfigDialog::accept(bool justSave) {
|
||||
config.textureFilter.txHiresEnable = ui->texturePackGroupBox->isChecked() ? 1 : 0;
|
||||
config.textureFilter.txHiresFullAlphaChannel = ui->alphaChannelCheckBox->isChecked() ? 1 : 0;
|
||||
config.textureFilter.txHresAltCRC = ui->alternativeCRCCheckBox->isChecked() ? 1 : 0;
|
||||
config.textureFilter.txStrongCRC = ui->strongCRCCheckBox->isChecked() ? 1 : 0;
|
||||
|
||||
config.textureFilter.txCacheCompression = ui->compressCacheCheckBox->isChecked() ? 1 : 0;
|
||||
config.textureFilter.txForce16bpp = ui->force16bppCheckBox->isChecked() ? 1 : 0;
|
||||
|
||||
@@ -31,13 +31,14 @@ int openConfigDialog(const wchar_t * _strFileName, const wchar_t * _strSharedFil
|
||||
if (config.generalEmulation.enableCustomSettings != 0 && _romName != nullptr && strlen(_romName) != 0)
|
||||
loadCustomRomSettings(strIniFileName, strSharedIniFileName, _romName);
|
||||
|
||||
int argc = 1;
|
||||
char argv0[] = "GLideN64";
|
||||
char * argv[] = { argv0 };
|
||||
std::unique_ptr<QApplication> pQApp;
|
||||
QCoreApplication* pApp = QCoreApplication::instance();
|
||||
|
||||
if (pApp == nullptr) {
|
||||
int argc = 0;
|
||||
char * argv = 0;
|
||||
pQApp.reset(new QApplication(argc, &argv));
|
||||
pQApp.reset(new QApplication(argc, argv));
|
||||
pApp = pQApp.get();
|
||||
}
|
||||
|
||||
@@ -63,9 +64,10 @@ int openAboutDialog(const wchar_t * _strFileName)
|
||||
cleanMyResource();
|
||||
initMyResource();
|
||||
|
||||
int argc = 0;
|
||||
char * argv = 0;
|
||||
QApplication a(argc, &argv);
|
||||
int argc = 1;
|
||||
char argv0[] = "GLideN64";
|
||||
char * argv[] = { argv0 };
|
||||
QApplication a(argc, argv);
|
||||
|
||||
QTranslator translator;
|
||||
if (translator.load(getTranslationFile(), QString::fromWCharArray(_strFileName)))
|
||||
|
||||
@@ -103,6 +103,7 @@ void _loadSettings(QSettings & settings)
|
||||
config.textureFilter.txHiresEnable = settings.value("txHiresEnable", config.textureFilter.txHiresEnable).toInt();
|
||||
config.textureFilter.txHiresFullAlphaChannel = settings.value("txHiresFullAlphaChannel", config.textureFilter.txHiresFullAlphaChannel).toInt();
|
||||
config.textureFilter.txHresAltCRC = settings.value("txHresAltCRC", config.textureFilter.txHresAltCRC).toInt();
|
||||
config.textureFilter.txStrongCRC = settings.value("txStrongCRC", config.textureFilter.txStrongCRC).toInt();
|
||||
config.textureFilter.txForce16bpp = settings.value("txForce16bpp", config.textureFilter.txForce16bpp).toInt();
|
||||
config.textureFilter.txCacheCompression = settings.value("txCacheCompression", config.textureFilter.txCacheCompression).toInt();
|
||||
config.textureFilter.txSaveCache = settings.value("txSaveCache", config.textureFilter.txSaveCache).toInt();
|
||||
@@ -252,6 +253,7 @@ void _writeSettingsToFile(const QString & filename)
|
||||
settings.setValue("txHiresEnable", config.textureFilter.txHiresEnable);
|
||||
settings.setValue("txHiresFullAlphaChannel", config.textureFilter.txHiresFullAlphaChannel);
|
||||
settings.setValue("txHresAltCRC", config.textureFilter.txHresAltCRC);
|
||||
settings.setValue("txStrongCRC", config.textureFilter.txStrongCRC);
|
||||
settings.setValue("txForce16bpp", config.textureFilter.txForce16bpp);
|
||||
settings.setValue("txCacheCompression", config.textureFilter.txCacheCompression);
|
||||
settings.setValue("txSaveCache", config.textureFilter.txSaveCache);
|
||||
@@ -550,6 +552,7 @@ void saveCustomRomSettings(const QString & _strIniFolder, const QString & _strSh
|
||||
WriteCustomSetting(textureFilter, txHiresEnable);
|
||||
WriteCustomSetting(textureFilter, txHiresFullAlphaChannel);
|
||||
WriteCustomSetting(textureFilter, txHresAltCRC);
|
||||
WriteCustomSetting(textureFilter, txStrongCRC);
|
||||
WriteCustomSetting(textureFilter, txForce16bpp);
|
||||
WriteCustomSetting(textureFilter, txCacheCompression);
|
||||
WriteCustomSetting(textureFilter, txSaveCache);
|
||||
|
||||
@@ -168,7 +168,7 @@
|
||||
<item>
|
||||
<widget class="QFrame" name="aspectFrame">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>This setting adjusts the aspect ratio of the video output. All N64 games support <span style=" font-weight:600;">4:3</span>. Some games support <span style=" font-weight:600;">16:9</span> within game settings. Use <span style=" font-weight:600;">Stretch</span> to fill the screen without pillar or letterboxing.</p><p><span style=" font-weight:600;">Try to adjust game to fit</span> tries to adjust the viewing space to fit without stretching. Many games work well adjusted, but some don't.</p></body></html></string>
|
||||
<string><html><head/><body><p>This setting adjusts the aspect ratio of the video output. All N64 games support <span style=" font-weight:600;">4:3</span>. Some games support <span style=" font-weight:600;">16:9</span> within game settings. Use <span style=" font-weight:600;">Stretch</span> to fill the screen without pillar or letterboxing.</p><p><span style=" font-weight:600;">Try to adjust 4:3 game to fit</span> (also known as "widescreen hack") tries to adjust the viewing space to fit a game designed for 4:3 without stretching. Many games work well adjusted, but some don't.</p><p><span style=" font-weight:600;">Try to adjust 16:9 game to fit</span> (also known as "ultrawidescreen hack") tries to adjust the viewing space to fit a game designed for 16:9 without stretching. Many games work well adjusted, but some don't. For games offering native 16:9 options, this is generally preferable for ultrawide aspect ratios as it'll lead to fewer rendering issues.</p></body></html></string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_22">
|
||||
<property name="spacing">
|
||||
@@ -212,7 +212,12 @@
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string extracomment="This option activates a widescreen hack. The language "Try to" implies it may it may not work and the language "adjust game" implies the emulation will be inaccurate.">Try to adjust game to fit</string>
|
||||
<string extracomment="This option activates a widescreen hack. The language "Try to" implies it may it may not work and the language "adjust 4:3 game" implies the emulation will be inaccurate.">Try to adjust 4:3 game to fit</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string extracomment="This option activates a widescreen hack. The language "Try to" implies it may it may not work and the language "adjust 16:9 game" implies the emulation will be inaccurate.">Try to adjust 16:9 game to fit</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
@@ -2673,6 +2678,16 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="strongCRCCheckBox">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>This option enables alternative, strong CRC method instead of RiceCRC for texture dump. If you find some textures not dumped, try checking this option.</p><p>[Recommended: <span style=" font-style:italic;">Mostly unchecked, unless RiceCRC fails</span>]</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Strong CRC calculation (when RiceCRC fails)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="hiresTexFileStorageCheckBox">
|
||||
<property name="toolTip">
|
||||
|
||||
+1
@@ -8,6 +8,7 @@
|
||||
#define GL_GET_PROC_ADR(proc_type, proc_name) ptr##proc_name = (proc_type) glGetProcAddress("gl"#proc_name)
|
||||
|
||||
#elif defined(VERO4K) || defined(ODROID) || defined(VC)
|
||||
#include <dlfcn.h>
|
||||
|
||||
#define GL_GET_PROC_ADR(proc_type, proc_name) ptr##proc_name = (proc_type) dlsym(gles2so, "gl"#proc_name);
|
||||
|
||||
|
||||
@@ -57,6 +57,8 @@ u32 TextureFilterHandler::_getConfigOptions() const
|
||||
options |= LET_TEXARTISTS_FLY;
|
||||
if (config.hotkeys.enabledKeys[Config::HotKey::hkTexDump] != 0 || config.textureFilter.txDump)
|
||||
options |= DUMP_TEX;
|
||||
if (config.textureFilter.txStrongCRC)
|
||||
options |= DUMP_STRONG_CRC;
|
||||
if (config.textureFilter.txDeposterize)
|
||||
options |= DEPOSTERIZE;
|
||||
if (config.textureFilter.txEnhancedTextureFileStorage)
|
||||
|
||||
+39
-14
@@ -1151,7 +1151,7 @@ void TextureCache::_loadBackground(CachedTexture *pTexture)
|
||||
free(pDest);
|
||||
}
|
||||
|
||||
bool TextureCache::_loadHiresTexture(u32 _tile, CachedTexture *_pTexture, u64 & _ricecrc)
|
||||
bool TextureCache::_loadHiresTexture(u32 _tile, CachedTexture *_pTexture, u64 & _ricecrc, u64 & _strongcrc)
|
||||
{
|
||||
if (config.textureFilter.txHiresEnable == 0 || !TFH.isInited())
|
||||
return false;
|
||||
@@ -1221,10 +1221,18 @@ bool TextureCache::_loadHiresTexture(u32 _tile, CachedTexture *_pTexture, u64 &
|
||||
}
|
||||
|
||||
_ricecrc = txfilter_checksum(addr, width, height, _pTexture->size, bpl, paladdr);
|
||||
if (config.textureFilter.txStrongCRC)
|
||||
_strongcrc = txfilter_checksum_strong(addr, width, height, _pTexture->size, bpl, paladdr);
|
||||
GHQTexInfo ghqTexInfo;
|
||||
// TODO: fix problem with zero texture dimensions on GLideNHQ side.
|
||||
if (txfilter_hirestex(_pTexture->crc, _ricecrc, palette, N64FormatSize(_pTexture->format, _pTexture->size), &ghqTexInfo) &&
|
||||
ghqTexInfo.width != 0 && ghqTexInfo.height != 0) {
|
||||
auto hirestexFound = txfilter_hirestex(_pTexture->crc, _ricecrc, palette, N64FormatSize(_pTexture->format, _pTexture->size), &ghqTexInfo);
|
||||
if (!hirestexFound) {
|
||||
// Texture with RiceCRC was not found. Try alternative CRC.
|
||||
if (_strongcrc == 0U)
|
||||
_strongcrc = txfilter_checksum_strong(addr, width, height, _pTexture->size, bpl, paladdr);
|
||||
hirestexFound = txfilter_hirestex(_pTexture->crc, _strongcrc, palette, N64FormatSize(_pTexture->format, _pTexture->size), &ghqTexInfo);
|
||||
}
|
||||
if (hirestexFound && ghqTexInfo.width != 0 && ghqTexInfo.height != 0) {
|
||||
ghqTexInfo.format = gfxContext.convertInternalTextureFormat(ghqTexInfo.format);
|
||||
Context::InitTextureParams params;
|
||||
params.handle = _pTexture->name;
|
||||
@@ -1390,7 +1398,8 @@ void doubleTexture(T* pTex, u32 width, u32 height)
|
||||
void TextureCache::_loadFast(u32 _tile, CachedTexture *_pTexture)
|
||||
{
|
||||
u64 ricecrc = 0;
|
||||
if (_loadHiresTexture(_tile, _pTexture, ricecrc))
|
||||
u64 strongcrc = 0;
|
||||
if (_loadHiresTexture(_tile, _pTexture, ricecrc, strongcrc))
|
||||
return;
|
||||
|
||||
s32 mipLevel = 0;
|
||||
@@ -1490,10 +1499,15 @@ void TextureCache::_loadFast(u32 _tile, CachedTexture *_pTexture)
|
||||
config.textureFilter.txHiresEnable != 0 &&
|
||||
config.hotkeys.enabledKeys[Config::HotKey::hkTexDump] != 0) ||
|
||||
config.textureFilter.txDump) {
|
||||
txfilter_dmptx((u8*)m_tempTextureHolder.data(), tmptex.width, tmptex.height,
|
||||
tmptex.width, (u16)u32(glInternalFormat),
|
||||
N64FormatSize(_pTexture->format, _pTexture->size),
|
||||
ricecrc);
|
||||
config.textureFilter.txStrongCRC ?
|
||||
txfilter_dmptx_strong((u8*)m_tempTextureHolder.data(), tmptex.width, tmptex.height,
|
||||
tmptex.width, (u16)u32(glInternalFormat),
|
||||
N64FormatSize(_pTexture->format, _pTexture->size),
|
||||
strongcrc) :
|
||||
txfilter_dmptx((u8*)m_tempTextureHolder.data(), tmptex.width, tmptex.height,
|
||||
tmptex.width, (u16)u32(glInternalFormat),
|
||||
N64FormatSize(_pTexture->format, _pTexture->size),
|
||||
ricecrc);
|
||||
}
|
||||
|
||||
bool bLoaded = false;
|
||||
@@ -1591,7 +1605,8 @@ void TextureCache::_loadFast(u32 _tile, CachedTexture *_pTexture)
|
||||
void TextureCache::_loadAccurate(u32 _tile, CachedTexture *_pTexture)
|
||||
{
|
||||
u64 ricecrc = 0;
|
||||
if (_loadHiresTexture(_tile, _pTexture, ricecrc))
|
||||
u64 strongcrc = 0;
|
||||
if (_loadHiresTexture(_tile, _pTexture, ricecrc, strongcrc))
|
||||
return;
|
||||
|
||||
bool force32bitFormat = false;
|
||||
@@ -1666,10 +1681,15 @@ void TextureCache::_loadAccurate(u32 _tile, CachedTexture *_pTexture)
|
||||
config.textureFilter.txHiresEnable != 0 &&
|
||||
config.hotkeys.enabledKeys[Config::HotKey::hkTexDump] != 0) ||
|
||||
config.textureFilter.txDump) {
|
||||
txfilter_dmptx((u8*)(m_tempTextureHolder.data() + texDataOffset), tmptex.width, tmptex.height,
|
||||
tmptex.width, (u16)u32(glInternalFormat),
|
||||
N64FormatSize(_pTexture->format, _pTexture->size),
|
||||
ricecrc);
|
||||
config.textureFilter.txStrongCRC ?
|
||||
txfilter_dmptx_strong((u8*)(m_tempTextureHolder.data() + texDataOffset), tmptex.width, tmptex.height,
|
||||
tmptex.width, (u16)u32(glInternalFormat),
|
||||
N64FormatSize(_pTexture->format, _pTexture->size),
|
||||
strongcrc) :
|
||||
txfilter_dmptx((u8*)(m_tempTextureHolder.data() + texDataOffset), tmptex.width, tmptex.height,
|
||||
tmptex.width, (u16)u32(glInternalFormat),
|
||||
N64FormatSize(_pTexture->format, _pTexture->size),
|
||||
ricecrc);
|
||||
}
|
||||
|
||||
texDataOffset += tmptex.width * tmptex.height;
|
||||
@@ -1725,7 +1745,12 @@ void TextureCache::_loadAccurate(u32 _tile, CachedTexture *_pTexture)
|
||||
config.textureFilter.txHiresEnable != 0 &&
|
||||
config.hotkeys.enabledKeys[Config::HotKey::hkTexDump] != 0) ||
|
||||
config.textureFilter.txDump) {
|
||||
txfilter_dmptx((u8*)m_tempTextureHolder.data(), tmptex.width, tmptex.height,
|
||||
config.textureFilter.txStrongCRC ?
|
||||
txfilter_dmptx_strong((u8*)m_tempTextureHolder.data(), tmptex.width, tmptex.height,
|
||||
tmptex.width, (u16)u32(glInternalFormat),
|
||||
N64FormatSize(_pTexture->format, _pTexture->size),
|
||||
strongcrc) :
|
||||
txfilter_dmptx((u8*)m_tempTextureHolder.data(), tmptex.width, tmptex.height,
|
||||
tmptex.width, (u16)u32(glInternalFormat),
|
||||
N64FormatSize(_pTexture->format, _pTexture->size),
|
||||
ricecrc);
|
||||
|
||||
@@ -90,7 +90,7 @@ private:
|
||||
CachedTexture * _addTexture(u64 _crc64);
|
||||
void _loadFast(u32 _tile, CachedTexture *_pTexture);
|
||||
void _loadAccurate(u32 _tile, CachedTexture *_pTexture);
|
||||
bool _loadHiresTexture(u32 _tile, CachedTexture *_pTexture, u64 & _ricecrc);
|
||||
bool _loadHiresTexture(u32 _tile, CachedTexture *_pTexture, u64 & _ricecrc, u64 & _strongcrc);
|
||||
void _loadBackground(CachedTexture *pTexture);
|
||||
bool _loadHiresBackground(CachedTexture *_pTexture, u64 & _ricecrc);
|
||||
void _loadDepthTexture(CachedTexture * _pTexture, u16* _pDest);
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "DebugDump.h"
|
||||
#include "osal_keys.h"
|
||||
#include "DisplayWindow.h"
|
||||
#include "TextureFilterHandler.h"
|
||||
#include "GLideNHQ/TxFilterExport.h"
|
||||
#include <Graphics/Context.h>
|
||||
|
||||
@@ -131,6 +132,14 @@ static void checkHotkeys()
|
||||
/* Turn on texture dump */
|
||||
if (osal_is_key_pressed(config.hotkeys.enabledKeys[Config::hkTexDump], 0x0001))
|
||||
textureCache().toggleDumpTex();
|
||||
|
||||
if (osal_is_key_pressed(config.hotkeys.enabledKeys[Config::hkStrongCRC], 0x0001)) {
|
||||
if (config.textureFilter.txStrongCRC == 0)
|
||||
dwnd().getDrawer().showMessage("Enable strong CRC for textures dump\n", Milliseconds(750));
|
||||
else
|
||||
dwnd().getDrawer().showMessage("Disable strong CRC for textures dump\n", Milliseconds(750));
|
||||
config.textureFilter.txStrongCRC = !config.textureFilter.txStrongCRC;
|
||||
}
|
||||
}
|
||||
|
||||
if (osal_is_key_pressed(config.hotkeys.enabledKeys[Config::hkTexCoordBounds], 0x0001)) {
|
||||
|
||||
@@ -270,6 +270,7 @@ struct gDPInfo
|
||||
gDPLoadTileInfo loadInfo[512];
|
||||
gDPTexrectInfo lastTexRectInfo;
|
||||
texCoordBounds m_texCoordBounds;
|
||||
bool m_subscreen{ false };
|
||||
};
|
||||
|
||||
extern gDPInfo gDP;
|
||||
|
||||
+9
-2
@@ -53,6 +53,8 @@ const char* _hotkeyDescription(u32 _idx)
|
||||
return "Hotkey: toggle force gamma correction";
|
||||
case Config::HotKey::hkInaccurateTexCords:
|
||||
return "Hotkey: toggle inaccurate texture coordinates";
|
||||
case Config::HotKey::hkStrongCRC:
|
||||
return "Hotkey: toggle strong CRC for textures dump";
|
||||
}
|
||||
return "Unknown hotkey";
|
||||
}
|
||||
@@ -128,7 +130,7 @@ bool Config_SetDefault()
|
||||
assert(res == M64ERR_SUCCESS);
|
||||
res = ConfigSetDefaultBool(g_configVideoGliden64, "FXAA", config.video.fxaa, "Toggle Fast Approximate Anti-Aliasing (FXAA).");
|
||||
assert(res == M64ERR_SUCCESS);
|
||||
res = ConfigSetDefaultInt(g_configVideoGliden64, "AspectRatio", config.frameBufferEmulation.aspect, "Screen aspect ratio. (0=stretch, 1=force 4:3, 2=force 16:9, 3=adjust)");
|
||||
res = ConfigSetDefaultInt(g_configVideoGliden64, "AspectRatio", config.frameBufferEmulation.aspect, "Screen aspect ratio. (0=stretch, 1=force 4:3, 2=force 16:9, 3=adjust 4:3, 4=adjust 16:9)");
|
||||
assert(res == M64ERR_SUCCESS);
|
||||
res = ConfigSetDefaultInt(g_configVideoGliden64, "BufferSwapMode", config.frameBufferEmulation.bufferSwapMode, "Swap frame buffers. (0=On VI update call, 1=On VI origin change, 2=On buffer update)");
|
||||
assert(res == M64ERR_SUCCESS);
|
||||
@@ -257,6 +259,8 @@ bool Config_SetDefault()
|
||||
assert(res == M64ERR_SUCCESS);
|
||||
res = ConfigSetDefaultBool(g_configVideoGliden64, "txDump", config.textureFilter.txDump, "Dump textures");
|
||||
assert(res == M64ERR_SUCCESS);
|
||||
res = ConfigSetDefaultBool(g_configVideoGliden64, "txStrongCRC", config.textureFilter.txStrongCRC, "Use strong CRC for texture dump.");
|
||||
assert(res == M64ERR_SUCCESS);
|
||||
res = ConfigSetDefaultBool(g_configVideoGliden64, "txEnhancedTextureFileStorage", config.textureFilter.txEnhancedTextureFileStorage, "Use file storage instead of memory cache for enhanced textures.");
|
||||
assert(res == M64ERR_SUCCESS);
|
||||
res = ConfigSetDefaultBool(g_configVideoGliden64, "txHiresTextureFileStorage", config.textureFilter.txHiresTextureFileStorage, "Use file storage instead of memory cache for HD textures.");
|
||||
@@ -465,7 +469,7 @@ void Config_LoadCustomConfig()
|
||||
if (result == M64ERR_SUCCESS) config.textureFilter.txHiresFullAlphaChannel = atoi(value);
|
||||
result = ConfigExternalGetParameter(fileHandle, sectionName, "textureFilter\\txHresAltCRC", value, sizeof(value));
|
||||
if (result == M64ERR_SUCCESS) config.textureFilter.txHresAltCRC = atoi(value);
|
||||
result = ConfigExternalGetParameter(fileHandle, sectionName, "textureFilter\\txDump", value, sizeof(value));
|
||||
result = ConfigExternalGetParameter(fileHandle, sectionName, "textureFilter\\txForce16bpp", value, sizeof(value));
|
||||
if (result == M64ERR_SUCCESS) config.textureFilter.txForce16bpp = atoi(value);
|
||||
result = ConfigExternalGetParameter(fileHandle, sectionName, "textureFilter\\txCacheCompression", value, sizeof(value));
|
||||
if (result == M64ERR_SUCCESS) config.textureFilter.txCacheCompression = atoi(value);
|
||||
@@ -473,6 +477,8 @@ void Config_LoadCustomConfig()
|
||||
if (result == M64ERR_SUCCESS) config.textureFilter.txSaveCache = atoi(value);
|
||||
result = ConfigExternalGetParameter(fileHandle, sectionName, "textureFilter\\txDump", value, sizeof(value));
|
||||
if (result == M64ERR_SUCCESS) config.textureFilter.txDump = atoi(value);
|
||||
result = ConfigExternalGetParameter(fileHandle, sectionName, "textureFilter\\txStrongCRC", value, sizeof(value));
|
||||
if (result == M64ERR_SUCCESS) config.textureFilter.txStrongCRC = atoi(value);
|
||||
result = ConfigExternalGetParameter(fileHandle, sectionName, "textureFilter\\txEnhancedTextureFileStorage", value, sizeof(value));
|
||||
if (result == M64ERR_SUCCESS) config.textureFilter.txEnhancedTextureFileStorage = atoi(value);
|
||||
result = ConfigExternalGetParameter(fileHandle, sectionName, "textureFilter\\txHiresTextureFileStorage", value, sizeof(value));
|
||||
@@ -569,6 +575,7 @@ void Config_LoadConfig()
|
||||
config.textureFilter.txCacheCompression = ConfigGetParamBool(g_configVideoGliden64, "txCacheCompression");
|
||||
config.textureFilter.txSaveCache = ConfigGetParamBool(g_configVideoGliden64, "txSaveCache");
|
||||
config.textureFilter.txDump = ConfigGetParamBool(g_configVideoGliden64, "txDump");
|
||||
config.textureFilter.txStrongCRC = ConfigGetParamBool(g_configVideoGliden64, "txStrongCRC");
|
||||
config.textureFilter.txEnhancedTextureFileStorage = ConfigGetParamBool(g_configVideoGliden64, "txEnhancedTextureFileStorage");
|
||||
config.textureFilter.txHiresTextureFileStorage = ConfigGetParamBool(g_configVideoGliden64, "txHiresTextureFileStorage");
|
||||
config.textureFilter.txNoTextureFileStorage = ConfigGetParamBool(g_configVideoGliden64, "txNoTextureFileStorage");
|
||||
|
||||
@@ -183,7 +183,7 @@ static std::string join_split_string(const std::vector<std::string>& splitStr, c
|
||||
std::string joinedString;
|
||||
std::string element;
|
||||
int skippedElements = 0;
|
||||
for (uint32_t i = 0; i < splitStr.size(); i++)
|
||||
for (size_t i = 0; i < splitStr.size(); i++)
|
||||
{
|
||||
// allow for skipping elements
|
||||
if (skippedElements++ < skip)
|
||||
@@ -209,7 +209,7 @@ static bool parse_cheat(const std::vector<std::string>& lines, int startIndex, C
|
||||
{
|
||||
std::string error;
|
||||
std::string line;
|
||||
for (uint32_t i = startIndex; i < lines.size(); i++)
|
||||
for (size_t i = startIndex; i < lines.size(); i++)
|
||||
{
|
||||
line = lines.at(i);
|
||||
|
||||
@@ -348,7 +348,7 @@ static bool parse_cheat_file(const std::vector<std::string>& lines, CoreCheatFil
|
||||
bool readHeader = false;
|
||||
bool readHeaderName = false;
|
||||
|
||||
for (uint32_t index = 0; index < lines.size(); index++)
|
||||
for (size_t index = 0; index < lines.size(); index++)
|
||||
{
|
||||
line = lines.at(index);
|
||||
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
|
||||
#ifndef PORTABLE_INSTALL
|
||||
#define CORE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}"
|
||||
#define CORE_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}"
|
||||
#define CORE_INSTALL_DATADIR "${CMAKE_INSTALL_DATADIR}"
|
||||
#define CORE_INSTALL_LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}"
|
||||
#define CORE_INSTALL_DATADIR "${CMAKE_INSTALL_FULL_DATADIR}"
|
||||
#endif // PORTABLE_INSTALL
|
||||
|
||||
#endif // CORE_CONFIG_HPP
|
||||
|
||||
@@ -123,34 +123,6 @@ static std::filesystem::path get_var_directory(std::string var, std::string appe
|
||||
|
||||
return directory.make_preferred();
|
||||
}
|
||||
|
||||
static std::filesystem::path get_command_output(std::string command)
|
||||
{
|
||||
std::string output;
|
||||
char buf[2048];
|
||||
FILE* pipe = nullptr;
|
||||
|
||||
pipe = popen(command.c_str(), "r");
|
||||
if (pipe == nullptr)
|
||||
{
|
||||
return std::string();
|
||||
}
|
||||
|
||||
while (fgets(buf, sizeof(buf), pipe) != nullptr)
|
||||
{
|
||||
output += buf;
|
||||
}
|
||||
|
||||
pclose(pipe);
|
||||
|
||||
// strip newline
|
||||
if (output.back() == '\n')
|
||||
{
|
||||
output.pop_back();
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
#endif // _WIN32
|
||||
|
||||
//
|
||||
@@ -244,10 +216,8 @@ std::filesystem::path CoreGetLibraryDirectory(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
directory = CORE_INSTALL_PREFIX;
|
||||
directory += "/";
|
||||
directory += CORE_INSTALL_LIBDIR;
|
||||
directory += "/RMG/";
|
||||
directory = CORE_INSTALL_LIBDIR;
|
||||
directory += "/RMG";
|
||||
}
|
||||
#endif // PORTABLE_INSTALL
|
||||
return directory.make_preferred();
|
||||
@@ -428,15 +398,8 @@ std::filesystem::path CoreGetDefaultScreenshotDirectory(void)
|
||||
directory = get_appdata_directory("Screenshots");
|
||||
|
||||
#else
|
||||
directory = get_command_output("xdg-user-dir PICTURES");
|
||||
if (!directory.empty())
|
||||
{
|
||||
directory += "/RMG";
|
||||
}
|
||||
else
|
||||
{
|
||||
directory = get_var_directory("XDG_PICTURES_DIR", "/RMG", "HOME", "/Pictures/RMG");
|
||||
}
|
||||
directory = CoreGetDefaultUserDataDirectory();
|
||||
directory += "/Screenshots";
|
||||
#endif // _WIN32
|
||||
}
|
||||
return directory.make_preferred();
|
||||
@@ -472,9 +435,7 @@ std::filesystem::path CoreGetSharedDataDirectory(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
directory = CORE_INSTALL_PREFIX;
|
||||
directory += "/";
|
||||
directory += CORE_INSTALL_DATADIR;
|
||||
directory = CORE_INSTALL_DATADIR;
|
||||
directory += "/RMG";
|
||||
}
|
||||
#endif // PORTABLE_INSTALL
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
#include <string>
|
||||
#include <unzip.h>
|
||||
#include <zlib.h>
|
||||
#include <fstream>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
@@ -90,7 +91,7 @@ static uLong zlib_filefunc_read(voidpf opaque, voidpf stream, void* buf, uLong s
|
||||
{
|
||||
std::ifstream* fileStream = (std::ifstream*)stream;
|
||||
fileStream->read((char*)buf, size);
|
||||
return fileStream->fail() ? 0 : size;
|
||||
return fileStream->fail() ? fileStream->gcount() : size;
|
||||
}
|
||||
|
||||
static ZPOS64_T zlib_filefunc_tell(voidpf opaque, voidpf stream)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
// replaces all occurences of any chars in replace with c inside str
|
||||
static void str_replace_chars(std::string& str, const std::string replace, const char c)
|
||||
{
|
||||
for (uint32_t i = 0; i < str.size(); i++)
|
||||
for (size_t i = 0; i < str.size(); i++)
|
||||
{
|
||||
char str_char = str.at(i);
|
||||
if (replace.find(str_char) != std::string::npos)
|
||||
|
||||
@@ -1517,7 +1517,7 @@ static bool config_option_default_set(std::string section, std::string key, m64p
|
||||
|
||||
static bool int_list_to_string(std::vector<int> intList, std::string& string)
|
||||
{
|
||||
for (uint32_t i = 0; i < intList.size(); i++)
|
||||
for (size_t i = 0; i < intList.size(); i++)
|
||||
{
|
||||
int num = intList.at(i);
|
||||
string += std::to_string(num);
|
||||
@@ -1561,7 +1561,7 @@ static bool string_list_to_string(std::vector<std::string> stringList, std::stri
|
||||
{
|
||||
std::string error;
|
||||
|
||||
for (uint32_t i = 0; i < stringList.size(); i++)
|
||||
for (size_t i = 0; i < stringList.size(); i++)
|
||||
{
|
||||
std::string str = stringList.at(i);
|
||||
|
||||
|
||||
@@ -83,12 +83,12 @@ HotkeysDialog::HotkeysDialog(QWidget* parent, QList<HotkeySettingMapping> hotkey
|
||||
this->infoIconLabel_5->setPixmap(QIcon::fromTheme("information-line").pixmap(16, 16));
|
||||
|
||||
// load settings from given mappings
|
||||
for (int i = 0; i < hotkeySettingMappings.size(); i++)
|
||||
for (qsizetype i = 0; i < hotkeySettingMappings.size(); i++)
|
||||
{
|
||||
auto& buttonMapping = this->hotkeySettingMappings.at(i);
|
||||
auto& givenMapping = hotkeySettingMappings.at(i);
|
||||
|
||||
for (int y = 0; y < givenMapping.inputTypes.size(); y++)
|
||||
for (size_t y = 0; y < givenMapping.inputTypes.size(); y++)
|
||||
{
|
||||
buttonMapping.button->AddInputData(
|
||||
(InputType)givenMapping.inputTypes.at(y),
|
||||
|
||||
@@ -310,7 +310,7 @@ void ControllerWidget::removeDuplicates(MappingButton* button)
|
||||
continue;
|
||||
}
|
||||
|
||||
for (int i = 0; i < inputType.size(); i++)
|
||||
for (size_t i = 0; i < inputType.size(); i++)
|
||||
{
|
||||
if (buttonWidget->HasInputData((InputType)inputType.at(i), inputData.at(i), extraInputData.at(i)))
|
||||
{
|
||||
@@ -773,8 +773,6 @@ void ControllerWidget::on_addProfileButton_clicked()
|
||||
|
||||
void ControllerWidget::on_removeProfileButton_clicked()
|
||||
{
|
||||
bool ret;
|
||||
|
||||
if (this->profileComboBox->currentData().toString() == this->settingsSection)
|
||||
{
|
||||
QMessageBox messageBox(this);
|
||||
|
||||
@@ -14,6 +14,14 @@ using namespace Thread;
|
||||
|
||||
EmulationThread::EmulationThread(QObject *parent) : QThread(parent)
|
||||
{
|
||||
#ifndef _WIN32
|
||||
// on Linux, musl has a too small stack size,
|
||||
// causing a crash in mesa when using paraLLEl,
|
||||
// so to fix it, set a stack size of 2MiB for
|
||||
// the emulation thread
|
||||
// see https://github.com/Rosalie241/RMG/issues/219
|
||||
this->setStackSize(0x200000);
|
||||
#endif
|
||||
}
|
||||
|
||||
EmulationThread::~EmulationThread(void)
|
||||
|
||||
@@ -82,7 +82,6 @@ void RomSearcherThread::searchDirectory(QString directory)
|
||||
CoreRomHeader header;
|
||||
CoreRomSettings settings;
|
||||
bool ret;
|
||||
int count = 0;
|
||||
|
||||
QList<QString> roms;
|
||||
while (romDirIt.hasNext())
|
||||
|
||||
@@ -94,8 +94,7 @@ void AddCheatDialog::showErrorMessage(QString error, QString details)
|
||||
|
||||
bool AddCheatDialog::validate(void)
|
||||
{
|
||||
QTextDocument* document;
|
||||
QStringList documentLines;
|
||||
QStringList documentLines;
|
||||
bool foundOption = false;
|
||||
int optionSize = -1;
|
||||
QRegularExpression hexRegExpr("^[0-9A-F]+$");
|
||||
@@ -240,7 +239,6 @@ bool AddCheatDialog::getCheat(CoreCheat& cheat)
|
||||
QStringList qLines;
|
||||
std::vector<std::string> lines;
|
||||
|
||||
QTextDocument* document;
|
||||
QString name;
|
||||
QString author;
|
||||
QString note;
|
||||
|
||||
@@ -1462,7 +1462,6 @@ void MainWindow::on_Action_System_HardReset(void)
|
||||
}
|
||||
void MainWindow::on_Action_System_Pause(void)
|
||||
{
|
||||
bool isRunning = CoreIsEmulationRunning();
|
||||
bool isPaused = CoreIsEmulationPaused();
|
||||
|
||||
bool ret;
|
||||
@@ -1617,10 +1616,6 @@ void MainWindow::on_Action_System_Load(void)
|
||||
|
||||
void MainWindow::on_Action_System_CurrentSaveState(int slot)
|
||||
{
|
||||
QAction* slotAction;
|
||||
QString dateTimeText;
|
||||
std::string message;
|
||||
|
||||
if (!CoreSetSaveStateSlot(slot))
|
||||
{
|
||||
this->showErrorMessage("CoreSetSaveStateSlot() Failed", QString::fromStdString(CoreGetError()));
|
||||
|
||||
@@ -710,7 +710,7 @@ void RomBrowserWidget::on_listViewWidget_sectionMoved(int logicalIndex, int oldV
|
||||
{
|
||||
std::vector<int> columnOrder = CoreSettingsGetIntListValue(SettingsID::RomBrowser_ColumnOrder);
|
||||
|
||||
for (int i = 0; i < columnOrder.size(); i++)
|
||||
for (size_t i = 0; i < columnOrder.size(); i++)
|
||||
{
|
||||
columnOrder.at(i) = this->listViewWidget->horizontalHeader()->visualIndex(i);
|
||||
}
|
||||
@@ -755,7 +755,7 @@ void RomBrowserWidget::on_ZoomOut(void)
|
||||
void RomBrowserWidget::on_RomBrowserThread_RomsFound(QList<RomSearcherThreadData> data, int index, int count)
|
||||
{
|
||||
// add every item to our dataset
|
||||
for (int i = 0; i < data.size(); i++)
|
||||
for (qsizetype i = 0; i < data.size(); i++)
|
||||
{
|
||||
this->addRomData(data[i].File, data[i].Type, data[i].Header, data[i].Settings);
|
||||
}
|
||||
@@ -791,7 +791,7 @@ void RomBrowserWidget::on_RomBrowserThread_Finished(bool canceled)
|
||||
}
|
||||
|
||||
// update list view's column sizes
|
||||
for (int i = 0; i < columnSizes.size(); i++)
|
||||
for (size_t i = 0; i < columnSizes.size(); i++)
|
||||
{
|
||||
// set column widths to values specified in config file (or resize to content if not already specified)
|
||||
if (columnSizes.at(i) == -1)
|
||||
@@ -820,7 +820,7 @@ void RomBrowserWidget::on_RomBrowserThread_Finished(bool canceled)
|
||||
}
|
||||
|
||||
// update list view's column order
|
||||
for (int i = 0; i < columnOrder.size(); i++)
|
||||
for (size_t i = 0; i < columnOrder.size(); i++)
|
||||
{
|
||||
this->listViewWidget->horizontalHeader()->moveSection(this->listViewWidget->horizontalHeader()->visualIndex(i), columnOrder.at(i));
|
||||
}
|
||||
@@ -839,7 +839,7 @@ void RomBrowserWidget::on_RomBrowserThread_Finished(bool canceled)
|
||||
}
|
||||
|
||||
// update list view's column visibilities
|
||||
for (int i = 0; i < columnVisibility.size(); i++)
|
||||
for (size_t i = 0; i < columnVisibility.size(); i++)
|
||||
{
|
||||
if (columnVisibility.at(i) == 0)
|
||||
{
|
||||
@@ -946,7 +946,7 @@ void RomBrowserWidget::on_Action_ResetColumnSizes(void)
|
||||
this->listViewWidget->resizeColumnsToContents();
|
||||
this->listViewWidget->horizontalHeader()->setStretchLastSection(true);
|
||||
|
||||
for (int i = 0; i < columnVisibility.size(); i++)
|
||||
for (size_t i = 0; i < columnVisibility.size(); i++)
|
||||
{
|
||||
if (columnVisibility.at(i) == 0)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user