Merge pull request #2142 from JustEnoughLinuxOS/dev

PR for release
This commit is contained in:
fewtarius 2023-10-03 01:27:32 -04:00 committed by GitHub
commit 95cb4d4f28
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
138 changed files with 1854 additions and 3126 deletions

View file

@ -128,32 +128,36 @@ jobs:
## Documentation
### Documentation For Developers
* [Building The Distribution](/documentation/DEVEL_BUILDING_JELOS.md)
* [Contributor Code of Conduct](/CODE_OF_CONDUCT.md)
* [Contributing to JELOS](/CONTRIBUTING.md)
* [Adding Hardware Quirks](/documentation/DEVEL_ADD_HARDWARE_QUIRKS.md)
* [Creating Packages](/documentation/DEVEL_CREATING_PACKAGES.md)
### Contribute
* [Building JELOS](https://jelos.org/contribute/build/)
* [Code of Conduct](https://jelos.org/contribute/code-of-conduct/)
* [Contributing to JELOS](https://jelos.org/contribute/)
* [Modifying JELOS](https://jelos.org/contribute/modify/)
* [Adding Hardware Quirks](https://jelos.org/contribute/quirks/)
* [Creating Packages](https://jelos.org/contribute/packages/)
* [Pull Request Template](/PULL_REQUEST_TEMPLATE.md)
### Documentation For Everyone
* [Installation and Device Support](https://github.com/JustEnoughLinuxOS/distribution/tree/main#readme)
* [Device Specific Documentation](/documentation/PER_DEVICE_DOCUMENTATION)
* [Donating to JELOS](/documentation/GENERAL_DONATING_TO_JELOS.md)
* [Frequently Asked Questions](/documentation/GENERAL_FREQUENTLY_ASKED_QUESTIONS.md)
* [Hotkeys and Button Codes](/documentation/GENERAL_HOTKEYS_AND_BUTTON_CODES.md)
* [Optimizing Performance and Battery Life](/documentation/GENERAL_PERFORMANCE_AND_BATTERY.md)
* [Network Play](/documentation/GENERAL_NETWORK_PLAY.md)
### Play
### Using JELOS
* [Setting Up Cloud Drives](/documentation/SETUP_CLOUD_DRIVES.md)
* [Setting Up Syncthing](/documentation/SETUP_SYNCTHING.md)
* [Game Engines and Launch Files](/documentation/SETUP_GAME_ENGINES_AND_LAUNCH_FILES.md)
* [Configuring Moonlight Streaming](/documentation/SETUP_MOONLIGHT_STREAMING.md)
* [Setting Up P2P Networking With ZeroTier](/documentation/SETUP_P2P_ZEROTIER.md)
* [Configure TailScale VPN](/documentation/SETUP_VPN_TAILSCALE.md)
* [Setting Up Wireguard VPN](/documentation/SETUP_VPN_WIREGUARD.md)
* [Creating Custom Shader Presets for Per Game / Per System Use](https://github.com/JustEnoughLinuxOS/distribution/blob/main/documentation/GENERAL_CUSTOM_SHADERS.md)
* [Installing JELOS](https://jelos.org/play/install/)
* [Updating JELOS](https://jelos.org/play/update/)
* [Controls](https://jelos.org/play/controls/)
* [Netplay](https://jelos.org/play/netplay/)
* [Configuring Moonlight](https://jelos.org/systems/moonlight/)
* [Device Specific Documentation](/documentation/PER_DEVICE_DOCUMENTATION)
### Configure
* [Optimizations](https://jelos.org/configure/optimizations/)
* [Shaders](https://jelos.org/configure/shaders/)
* [Cloud Sync](https://jelos.org/configure/cloud-sync/)
* [VPN](https://jelos.org/configure/vpn/)
### Other
* [Frequently Asked Questions](https://jelos.org/faqs/)
* [Donating to JELOS](https://jelos.org/donations/)
artifacts: "release/*"
prerelease: false

View file

@ -1,131 +1 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
contact at jelos dot org.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.
Moved to [https://jelos.org/contribute/code-of-conduct/](https://jelos.org/contribute/code-of-conduct/)

View file

@ -1,42 +1 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
# Contributing to JELOS
Welcome new contributor! Your contribution will help JELOS become a better Linux distribution, so thank you! We want to make contributing to this project as easy and transparent as possible. Contributors are able to:
- Discuss the current state of the code
- Submit a fix
- Propose new features
- Become a maintainer
## Becoming a maintainer
When contributing to JELOS you are expected to become the maintainer of your contribution. Please keep this in mind when submitting pull requests.
* Keep track of your contributions upstreams and keep your components up-to-date.
* Watch the issue tracker and resolve issues related to your contribution.
## We Develop with Github
We use Github to host code, to track issues and feature requests, as well as accept pull requests.
## We Use [Github Flow](https://guides.github.com/introduction/flow/index.html), So All Code Changes Happen Through Pull Requests
Pull requests are the best way to propose changes to the codebase (we use [Github Flow](https://guides.github.com/introduction/flow/index.html)). We actively welcome your pull requests:
1. Join our discord and chat with us, we'll be happy to help you successfully implement your change.
2. Fork the repo and create your branch from `dev`.
3. Ensure your code is built locally and tested.
4. Any changes should be reflected in the documentation.
5. Issue a pull request back to our `dev` branch.
## Any contributions you make will be under the Apache 2 Software License
In short, when you submit code changes, your submissions are understood to be contributed under the same license as the original project code or under [Apache 2](https://choosealicense.com/licenses/apache-2.0/) license when no other license applies.
## Use a Consistent Coding Style
* Follow the same style as the source you are editing.
* If you are contributing new code, keep the style consistent with other similar works.
* Parameterize as much as possible, try to avoid hard coded values whenever you can.
* Use 2 spaces for indentation rather than tabs when possible.
## License
By contributing, you agree that your contributions will be licensed under the license of the existing project code being modified or Apache 2.
## References
This document was adapted from the open-source contribution guidelines for [Facebook's Draft](https://github.com/facebook/draft-js/blob/a9316a723f9e918afde44dea68b5f9f39b7d9b00/CONTRIBUTING.md)
Moved to [https://jelos.org/contribute/](https://jelos.org/contribute/)

View file

@ -1,21 +1,25 @@
FROM ubuntu:22.04
FROM ubuntu:jammy
RUN apt update \
&& DEBIAN_FRONTEND=noninteractive \
apt install -y \
gcc make git unzip wget \
xz-utils libsdl2-dev libsdl2-mixer-dev libfreeimage-dev libfreetype6-dev libcurl4-openssl-dev \
rapidjson-dev libasound2-dev libgl1-mesa-dev build-essential libboost-all-dev cmake fonts-droid-fallback \
libvlc-dev libvlccore-dev vlc-bin texinfo premake4 golang libssl-dev curl patchelf \
xmlstarlet patchutils gawk gperf xfonts-utils default-jre python3 python-is-python3 xsltproc libjson-perl \
lzop libncurses5-dev u-boot-tools rsync p7zip libparse-yapp-perl \
zip binutils-aarch64-linux-gnu p7zip-full libvpx-dev bsdmainutils bc meson p7zip-full \
qemu-user-binfmt zstd parted imagemagick \
&& apt autoremove --purge -y \
&& apt clean -y \
&& rm -rf /var/lib/apt/lists/*
ARG DEBIAN_FRONTEND=noninteractive
RUN adduser --disabled-password --gecos '' docker
RUN apt-get update \
&& apt-get dist-upgrade -y \
&& apt-get install -y locales sudo
RUN locale-gen en_US.UTF-8 \
&& update-locale LANG=en_US.UTF-8 LANGUAGE=en_US:en
ENV LANG=en_US.UTF-8 \
LANGUAGE=en_US:en \
LC_ALL=en_US.UTF-8
RUN adduser --disabled-password --gecos '' docker \
&& adduser docker sudo \
&& echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
RUN apt-get install -y \
bc default-jre file gawk gcc git golang-go gperf libjson-perl libncurses5-dev \
libparse-yapp-perl libxml-parser-perl lzop make patchutils python-is-python3 \
python3 parted unzip wget curl xfonts-utils xsltproc zip zstd
RUN mkdir -p /work && chown docker /work

193
README.md
View file

@ -1,8 +1,11 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
---
Just Enough Linux Operating System (JELOS) is an immutable Linux distribution for handheld gaming devices developed by a small community of enthusiasts. Our goal is to produce an operating system that has the features and capabilities that we need, and to have fun as we develop it.
## Features
* JELOS has a very active community of developers and users.
* Integrated cross-device local and remote network play.
* In-game touch support on supported devices.
@ -15,127 +18,121 @@ Just Enough Linux Operating System (JELOS) is an immutable Linux distribution fo
* Includes built-in support for scraping and retroachievements.
## Screenshots
|System View|Menu View|Game List|
|----|----|----|
|![system-view](https://github.com/JustEnoughLinuxOS/distribution/assets/88717793/3f8b0b5a-c3ba-4b56-a0fb-d72cf143e44f)|![menu](https://github.com/JustEnoughLinuxOS/distribution/assets/88717793/2a6f0d0a-9b13-4619-ab08-19791d49d3d0)|![gamelist-view-metadata-off-immersive](https://github.com/JustEnoughLinuxOS/distribution/assets/88717793/9120a7c4-f06d-4236-a3e8-d49c7089f727)|
<table>
<tr>
<td><img src="https://jelos.org/_inc/images/screenshots/system-view.png"/></td>
<td><img src="https://jelos.org/_inc/images/screenshots/menu.png"/></td>
</tr>
<tr>
<td><img src="https://jelos.org/_inc/images/screenshots/gamelist-view-metadata-immersive.png"/></td>
<td><img src="https://jelos.org/_inc/images/screenshots/gamelist-view-no-metadata-immersive.png"/></td>
</tr>
</table>
## Community
The JELOS community utilizes Discord for discussion, if you would like to join us please use the link below.
* [https://discord.gg/seTxckZjJy](https://discord.gg/seTxckZjJy)
The JELOS community utilizes Discord for discussion, if you would like to join us please use this link: [https://discord.gg/seTxckZjJy](https://discord.gg/seTxckZjJy)
## Licenses
JELOS is a Linux distribution that is made up of many open-source components. Components are provided under their respective licenses. This distribution includes components licensed for non-commercial use only.
### JELOS Branding
JELOS branding and images are licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-nc-sa/4.0/).
#### You are free to
* Share — copy and redistribute the material in any medium or format
* Adapt — remix, transform, and build upon the material
You are free to:
#### Under the following terms
* Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
* NonCommercial — You may not use the material for commercial purposes.
* ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
- Share: copy and redistribute the material in any medium or format
- Adapt: remix, transform, and build upon the material
Under the following terms:
- Attribution: You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
- NonCommercial: You may not use the material for commercial purposes.
- ShareAlike: If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
### JELOS Software
Copyright 2021-present Fewtarius
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
### Bundled Works
All other software is provided under each component's respective license. These licenses can be found in the software sources or in this project's licenses folder.
## Documentation
### Documentation For Developers
* [Building The Distribution](/documentation/DEVEL_BUILDING_JELOS.md)
* [Contributor Code of Conduct](/CODE_OF_CONDUCT.md)
* [Contributing to JELOS](/CONTRIBUTING.md)
* [Adding Hardware Quirks](/documentation/DEVEL_ADD_HARDWARE_QUIRKS.md)
* [Creating Packages](/documentation/DEVEL_CREATING_PACKAGES.md)
### Contribute
* [Building JELOS](https://jelos.org/contribute/build/)
* [Code of Conduct](https://jelos.org/contribute/code-of-conduct/)
* [Contributing to JELOS](https://jelos.org/contribute/)
* [Modifying JELOS](https://jelos.org/contribute/modify/)
* [Adding Hardware Quirks](https://jelos.org/contribute/quirks/)
* [Creating Packages](https://jelos.org/contribute/packages/)
* [Pull Request Template](/PULL_REQUEST_TEMPLATE.md)
### Documentation For Everyone
* [Installation and Device Support](https://github.com/JustEnoughLinuxOS/distribution/tree/main#installation)
* [Device Specific Documentation](/documentation/PER_DEVICE_DOCUMENTATION)
* [Donating to JELOS](/documentation/GENERAL_DONATING_TO_JELOS.md)
* [Frequently Asked Questions](/documentation/GENERAL_FREQUENTLY_ASKED_QUESTIONS.md)
* [Hotkeys and Button Codes](/documentation/GENERAL_HOTKEYS_AND_BUTTON_CODES.md)
* [Optimizing Performance and Battery Life](/documentation/GENERAL_PERFORMANCE_AND_BATTERY.md)
* [Network Play](/documentation/GENERAL_NETWORK_PLAY.md)
### Play
### Using JELOS
* [Setting Up Cloud Drives](/documentation/SETUP_CLOUD_DRIVES.md)
* [Setting Up Syncthing](/documentation/SETUP_SYNCTHING.md)
* [Game Engines and Launch Files](/documentation/SETUP_GAME_ENGINES_AND_LAUNCH_FILES.md)
* [Configuring Moonlight Streaming](/documentation/SETUP_MOONLIGHT_STREAMING.md)
* [Setting Up P2P Networking With ZeroTier](/documentation/SETUP_P2P_ZEROTIER.md)
* [Configure TailScale VPN](/documentation/SETUP_VPN_TAILSCALE.md)
* [Setting Up Wireguard VPN](/documentation/SETUP_VPN_WIREGUARD.md)
* [Creating Custom Shader Presets for Per Game / Per System Use](https://github.com/JustEnoughLinuxOS/distribution/blob/main/documentation/GENERAL_CUSTOM_SHADERS.md)
* [Installing JELOS](https://jelos.org/play/install/)
* [Updating JELOS](https://jelos.org/play/update/)
* [Controls](https://jelos.org/play/controls/)
* [Netplay](https://jelos.org/play/netplay/)
* [Configuring Moonlight](https://jelos.org/systems/moonlight/)
* [Device Specific Documentation](/documentation/PER_DEVICE_DOCUMENTATION)
### Configure
* [Optimizations](https://jelos.org/configure/optimizations/)
* [Shaders](https://jelos.org/configure/shaders/)
* [Cloud Sync](https://jelos.org/configure/cloud-sync/)
* [VPN](https://jelos.org/configure/vpn/)
### Other
* [Frequently Asked Questions](https://jelos.org/faqs/)
* [Donating to JELOS](https://jelos.org/donations/)
## Device Support
JELOS supports a variety of ARM and Intel/AMD based devices<sup>1</sup>.
JELOS supports a variety of ARM and Intel/AMD based devices.
| Manufacturer | Device | CPU / Architecture | Kernel | GL driver | Interface |
|--|--|--|--|--|--|
|Anbernic| RG351P/M | Rockchip RK3326 (ARM) | Mainline Linux | Panfrost | Weston + EmulationStation|
|Anbernic| RG353P<sup>2</sup> | Rockchip RK3566 (ARM) | Rockchip BSP 4.19 | Mali | KMS/DRM + EmulationStation|
|Anbernic| RG353M<sup>2</sup> | Rockchip RK3566 (ARM) | Rockchip BSP 4.19 | Mali | KMS/DRM + EmulationStation|
|Anbernic| RG353V<sup>2</sup> | Rockchip RK3566 (ARM) | Rockchip BSP 4.19 | Mali | KMS/DRM + EmulationStation|
|Anbernic| RG353VS<sup>2</sup> | Rockchip RK3566 (ARM) | Rockchip BSP 4.19 | Mali | KMS/DRM + EmulationStation|
|Anbernic| RG503 | Rockchip RK3566 (ARM) | Rockchip BSP 4.19 | Mali | KMS/DRM + EmulationStation|
|Anbernic| RG552 | Rockchip RK3399 (ARM) | Mainline Linux | Panfrost | Weston + EmulationStation|
|Anbernic|Win600|AMD Athlon Silver 3050e (x86_64)|Mainline Linux|Radeonsi|Weston + EmulationStation|
|Atari|VCS|AMD Ryzen R1606G (x86_64)|Mainline Linux|Radeonsi|Weston + EmulationStation|
|AOKZOE | A1 Pro | AMD 7840u (x86_64)|Mainline Linux|Radeonsi|Weston + EmulationStation|
|AYANEO<sup>3</sup>|Air / Air Pro|Amd Ryzen 5 5560U / AMD Ryzen 7 5825U (x86_64)|Mainline Linux|Radeonsi|Weston + EmulationStation|
|AYANEO<sup>3</sup>|Air Plus|Amd Ryzen 7 6800U / (x86_64)|Mainline Linux|Radeonsi|Weston + EmulationStation|
|AYANEO<sup>3</sup>|AYANEO 2|Amd Ryzen 7 6800U / (x86_64)|Mainline Linux|Radeonsi|Weston + EmulationStation|
|Ayn|Loki Zero|AMD Athlon Silver 3050e (x86_64)|Mainline Linux|Radeonsi|Weston + EmulationStation|
|Ayn|Max|Amd Ryzen 7 6800U / (x86_64)|Mainline Linux|Radeonsi|Weston + EmulationStation|
|GPD|Win 4|Amd Ryzen 7 6800U / (x86_64)|Mainline Linux|Radeonsi|Weston + EmulationStation|
|GPD|Win Max 2 (2022)|Amd Ryzen 7 6800U / (x86_64)|Mainline Linux|Radeonsi|Weston + EmulationStation|
|Hardkernel| Odroid Go Advance | Rockchip RK3326 (ARM) | Mainline Linux | Panfrost | Weston + EmulationStation|
|Hardkernel| Odroid Go Super | Rockchip RK3326 (ARM) | Mainline Linux | Panfrost | Weston + EmulationStation|
|Hardkernel|Odroid Go Ultra|Amlogic S922X / Mali G52 M6 (ARMv8-A)|Mainline Linux|Mali|Weston + EmulationStation|
|Indiedroid|Nova|Rockchip RK3588S / Mali G610 (ARMv8-A)|Rockchip 5.10 BSP Linux|Panfrost|Weston + EmulationStation|
|Orange Pi|Orange Pi 5|Rockchip RK3588S / Mali G610 (ARMv8-A)|Rockchip 5.10 BSP Linux|Panfrost|Weston + EmulationStation|
|Powkiddy|RGB10 Max 3 Pro|Amlogic A311D / Mali G52 M4 (ARMv8-A)|Mainline Linux|Mali|Weston + EmulationStation|
|Powkiddy| RGB30 | Rockchip RK3566 (ARM) | Rockchip BSP 4.19 | Mali | KMS/DRM + EmulationStation |
|Powkiddy| RK2023 | Rockchip RK3566 (ARM) | Rockchip BSP 4.19 | Mali | KMS/DRM + EmulationStation |
|Powkiddy| x55 | Rockchip RK3566 (ARM) | Rockchip BSP 4.19 | Mali | KMS/DRM + EmulationStation |
| -- | -- | -- | -- | -- | -- |
| Anbernic | [RG351P/M](http://jelos.org/devices/anbernic/rg351pm) | Rockchip RK3326 (ARM) | Mainline Linux | Panfrost | Weston + Emulation Station |
| Anbernic | [RG353P](http://jelos.org/devices/anbernic/rg353pmvvs) | Rockchip RK3566 (ARM) | Rockchip BSP 4.19 | Mali | KMS/DRM + Emulation Station |
| Anbernic | [RG353M](http://jelos.org/devices/anbernic/rg353pmvvs) | Rockchip RK3566 (ARM) | Rockchip BSP 4.19 | Mali | KMS/DRM + Emulation Station |
| Anbernic | [RG353V](http://jelos.org/devices/anbernic/rg353pmvvs) | Rockchip RK3566 (ARM) | Rockchip BSP 4.19 | Mali | KMS/DRM + Emulation Station |
| Anbernic | [RG353VS](http://jelos.org/devices/anbernic/rg353pmvvs) | Rockchip RK3566 (ARM) | Rockchip BSP 4.19 | Mali | KMS/DRM + Emulation Station |
| Anbernic | [RG503](http://jelos.org/devices/anbernic/rg503) | Rockchip RK3566 (ARM) | Rockchip BSP 4.19 | Mali | KMS/DRM + Emulation Station |
| Anbernic | [RG552](http://jelos.org/devices/anbernic/rg552) | Rockchip RK3399 (ARM) | Mainline Linux | Panfrost | Weston + Emulation Station |
| Anbernic | [Win600](http://jelos.org/devices/anbernic/win600) | AMD Athlon Silver 3050e (x86_64) | Mainline Linux | Radeonsi | Weston + Emulation Station |
| AOKZOE | [A1 Pro](http://jelos.org/devices/aokzoe/a1-pro) | AMD 7840u (x86_64) | Mainline Linux | Radeonsi | Weston + Emulation Station |
| Atari | [VCS](http://jelos.org/devices/atari/vcs) | AMD Ryzen R1606G (x86_64) | Mainline Linux | Radeonsi | Weston + Emulation Station |
| AYANEO | [Air / Air Pro](http://jelos.org/devices/ayaneo/air) | Amd Ryzen 5 5560U / AMD Ryzen 7 5825U (x86_64) | Mainline Linux | Radeonsi | Weston + Emulation Station |
| AYANEO | [Air Plus](http://jelos.org/devices/ayaneo/air-plus) | Amd Ryzen 7 6800U / (x86_64) | Mainline Linux | Radeonsi | Weston + Emulation Station |
| AYANEO | [AYANEO 2](http://jelos.org/devices/ayaneo/ayaneo-2) | Amd Ryzen 7 6800U / (x86_64) | Mainline Linux | Radeonsi | Weston + Emulation Station |
| Ayn | [Loki Zero](http://jelos.org/devices/ayn/loki-zero) | AMD Athlon Silver 3050e (x86_64) | Mainline Linux | Radeonsi | Weston + Emulation Station |
| Ayn | [Loki Max](http://jelos.org/devices/ayn/loki-max) | Amd Ryzen 7 6800U / (x86_64) | Mainline Linux | Radeonsi | Weston + Emulation Station |
| GPD | [Win 4](http://jelos.org/devices/gpd/win4) | Amd Ryzen 7 6800U / (x86_64) | Mainline Linux | Radeonsi | Weston + Emulation Station |
| GPD | [Win Max 2 (2022)](http://jelos.org/devices/gpd/win-max-2) | Amd Ryzen 7 6800U / (x86_64) | Mainline Linux| Radeonsi | Weston + Emulation Station |
| Hardkernel | [Odroid Go Advance](http://jelos.org/devices/hardkernel/odroid-go-advance) | Rockchip RK3326 (ARM) | Mainline Linux | Panfrost | Weston + Emulation Station |
| Hardkernel | [Odroid Go Super](http://jelos.org/devices/hardkernel/odroid-go-super) | Rockchip RK3326 (ARM) | Mainline Linux | Panfrost | Weston + Emulation Station |
| Hardkernel | [Odroid Go Ultra](http://jelos.org/devices/hardkernel/odroid-go-ultra) | Amlogic S922X / Mali G52 M6 (ARMv8-A) | Mainline Linux | Mali | Weston + Emulation Station |
| Indiedroid | [Nova](http://jelos.org/devices/indiedroid/nova) | Rockchip RK3588S / Mali G610 (ARMv8-A) | Rockchip 5.10 BSP Linux | Panfrost | Weston + Emulation Station |
| Orange Pi | [Orange Pi 5](http://jelos.org/devices/orange-pi/orange-pi-5) | Rockchip RK3588S / Mali G610 (ARMv8-A) | Rockchip 5.10 BSP Linux | Panfrost | Weston + Emulation Station |
| Powkiddy | [RGB10 Max 3 Pro](http://jelos.org/devices/powkiddy/rgb10-max-3-pro) | Amlogic A311D / Mali G52 M4 (ARMv8-A) | Mainline Linux | Mali | Weston + Emulation Station |
| Powkiddy | [RGB30](http://jelos.org/devices/powkiddy/rgb30) | Rockchip RK3566 (ARM) | Rockchip BSP 4.19 | Mali | KMS/DRM + Emulation Station |
| Powkiddy | [RK2023](http://jelos.org/devices/powkiddy/rk2023) | Rockchip RK3566 (ARM) | Rockchip BSP 4.19 | Mali | KMS/DRM + Emulation Station |
| Powkiddy | [x55](http://jelos.org/devices/powkiddy/x55) | Rockchip RK3566 (ARM) | Rockchip BSP 4.19 | Mali | KMS/DRM + Emulation Station |
> <sup>1</sup> While not technically supported, JELOS is known to work well on a variety of generic x86_64 devices including gaming PCs, mini PCs, and laptop computers.
> <sup>2</sup> Anbernic RG353P/M/V/VS devices with both v1 and v2 displays are supported. RG353PS will not be supported.
> <sup>3</sup> To boot JELOS on Ayaneo devices, hold LC and volume up and press the power button, continue holding "LC" and volume up until the Ayaneo logo appears. Select the storage device with JELOS from the boot menu using the Ayaneo button, and then press volume up to boot the distribution.
## Installation
* JELOS is installed by restoring an image file and [Flashing](https://github.com/JustEnoughLinuxOS/distribution/tree/main#flashing) to a device's internal storage or an external sd card.
* On x86 devices JELOS includes an installation tool. The installation tool can be found in the tools menu, which is one of the systems listed within ES.
* JELOS operating system is stored on an Ext4 partition that can be read by LINUX but is not natively readable on Windows. Currently it is not possible to access the primary JELOS Ext4 partition on Windows to transfer roms.
* On devices that support a second sd card, the sd card can be formatted as Ext4, FAT32, or exFAT. JELOS will automatically detect the second SD card on boot and configure the relevant folders for storing roms.
* External services are disabled by default in release builds. When enabled, the username for ssh and samba access is "root". The root password is generated during every boot, it can be found in the System Settings menu.
### Flashing
* Download the latest [version of JELOS](https://github.com/JustEnoughLinuxOS/distribution/releases) (.img.gz) for your device.
* Decompress the image.
* Write the image to an SDCARD using an imaging tool. Common imaging tools include [Balena Etcher](https://www.balena.io/etcher/), [Raspberry Pi Imager](https://www.raspberrypi.com/software/), and [Win32 Disk Imager](https://sourceforge.net/projects/win32diskimager/). If you're skilled with the command line, dd works fine too.
### Upgrading
* Download and install the update online via the System Settings menu.
* Download the latest [version of JELOS](https://github.com/JustEnoughLinuxOS/distribution/releases) (.tar) for your device.
* Copy the update to your device over the network to your device's update share.
* Reboot the device, and the update will begin automatically.
> [!NOTE]
> While not technically supported, JELOS is also known to work well on a variety of generic x86_64 devices including gaming PCs, mini PCs, and laptop computers.
## Credits
Like any Linux distribution, this project is not the work of one person. It is the work of many persons all over the world who have developed the open source bits without which this project could not exist. Special thanks to CoreELEC, LibreELEC, and to developers and contributors across the open source community.
Like any Linux distribution, this project is not the work of one person. It is the work of many persons all over the world who have developed the open source bits without which this project could not exist. Special thanks to CoreELEC, LibreELEC, and to developers and contributors across the open source community.

View file

@ -40,6 +40,7 @@ get_graphicdrivers() {
if listcontains "${GRAPHIC_DRIVERS}" "crocus"; then
GALLIUM_DRIVERS+=" crocus"
XORG_DRIVERS+=" intel"
VULKAN_DRIVERS_MESA+=" intel_hasvk"
COMPOSITE_SUPPORT="yes"
VAAPI_SUPPORT="yes"
fi

View file

@ -1,70 +1 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
## Panel Rotation
If you have a new device that supports Mainline Linux, adding and submitting a rotation patch is very simple. Adding a rotation patch to the kernel will provide the hints needed for Wayland/Weston to also correctly rotate the panel.
To begin, download the kernel sources. Extract the kernel and rename it to linux-{version}.orig, and then copy that folder to linux-{version} or extract it again so there are two copies. This will be necessary to create the [patch](https://github.com/JustEnoughLinuxOS/distribution/blob/main/BUILDING.md#creating-a-patch-for-a-package).
### Panel Definition and Default Orientation
Next, edit `linux-{version}/./drivers/gpu/drm/drm_panel_orientation_quirks.c` and add a struct describing your panel and its orientation if one does not already exist. For example:
```
static const struct drm_dmi_panel_orientation_data lcd1080x1920_leftside_up = {
.width = 1080,
.height = 1920,
.orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP,
};
```
In the example above, the panel is 1080p, and rotated to the left in order to be corrected.
### DMI Matching
Now that the rotation correction has been defined, the kernel needs a method to match and apply it. For this we use DMI data. You can retrieve the DMI data by using `cat`, or `dmidecode`. For our example, we'll use `cat`.
```
airplus:~ # cat /sys/class/dmi/id/sys_vendor
AYANEO
airplus:~ # cat /sys/class/dmi/id/product_name
AIR Plus
```
Using this data, we will create a match rule to match our panel struct in drm_panel_orientation_quirks.c.
```
{
.matches = {
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "AYANEO"),
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "AIR Plus"),
},
.driver_data = (void *)&lcd1080x1920_leftside_up,
}
```
Save, and build your patch following the instructions in BUILDING.md. Place your patch in `packages/kernel/linux/patches/AMD64` or the appropriate device directory, and run a test build.
> Note: DMI_EXACT_MATCH or DMI_MATCH can be used. DMI_EXACT_MATCH is as implied, an exact match. DMI_MATCH will match that any device where its DMI data includes "AIR Plus"
## Hardware
Adding hardware quirks are simple, and many examples can be found in `packages/hardware/quirks/devices`. To begin, review an existing quirk to familiarize yourself with the pattern.
### Creating a Quirk
The simplest way to create a quirk for your device is to copy an existing quirk and modify it. To copy it, simply copy the whole folder to the name of your device using the same DMI pattern as above. If you are working on an AYANEO Air Plus, the folder name would be "AYANEO Air Plus" based on the DMI data in our example.
Next, edit each file to contain the data appropriate for your device. To collect the data that you need, use the following tools:
#### 001-deviceconfig
This configuration file contains basic information for JELOS that cannot currently be determined automatically. A configuration is provided with the distribution if there is no quirk found, however it can be customized to suit. The following tools can be used to identify the correct data for your device.
* KEYA/B_MODIFIER - `evtest`.
* PATH_SPK/HP - `amixer`.
#### 002-fancontrol
Not all devices have methods available to control the fan. The following can help determine if yours can be controlled.
* `find /sys/devices -name pwm*` and evaluate if fan control is available.
* DEVICE_HAS_FAN="false" if manual control cannot be enabled.
#### Additional Quirks
Your device may need additional quirks to function correctly or for optimization. Ask in the JELOS discord if you need additional guidance.
## Submitting Quirks
Please follow BUILDING.md and CONTRIBUTING.md to submit your quirks to the distribution for inclusion. Please do not change major functionality of the distribution or break our hotkey standards, submissions that do not follow our standards will need to be revised.
Moved to [https://jelos.org/contribute/quirks/](https://jelos.org/contribute/quirks/)

View file

@ -1,315 +1 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
# Developing and Building JELOS
JELOS is a fairly unique distribution as it is *built to order* and only enough of the operating system and applications are built for the purpose of booting and executing emulators and ports. Developers and others who would like to contribute to our project should read and agree to the [Contributor Covenant Code of Conduct](https://github.com/JustEnoughLinuxOS/distribution/blob/main/CODE_OF_CONDUCT.md) and [Contributing to JELOS](https://github.com/JustEnoughLinuxOS/distribution/blob/main/CONTRIBUTING.md) guides before submitting your first contribution.
## Preparing the Build Machine
Building JELOS requires a host with 200GB of free space for a single device, or 1TB of free space for a full world build.
**Expect your first build to take on the order of ten hours. You will need a stable internet connection, since hundreds of packages will be downloaded from their source.** Download errors often produce build failures with misleading error messages. If this happens to you, see the Troubleshooting section below.
After a clean build, all subsequent builds will go much faster (minutes) since 99% of the build work is cached.
### Docker Builds
**Docker is the easiest and most reliable way to build JELOS.** You need no previous experience with Docker; you merely need to install it on your build machine. Newcomers to the project are strongly recommended to use this approach.
We recommend using Ubuntu 22.04 for the host machine, as this is well-tested and known to work. Other distributions and operating systems might also work for Docker builds, but are untested and unsupported.
Install Docker using the following commands:
```
sudo apt update
sudo apt install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world
```
> Docker installation reference (source): [Install using the apt repository](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) and [Linux post-installation steps](https://docs.docker.com/engine/install/linux-postinstall/).
The final command should produce a message indicating that Docker is properly installed. If you encounter any errors, see the reference links above.
### Manual Builds
Manual builds (outside of Docker) are only recommended for developers with specific needs that cannot be met by the Docker approach. The host configuration should match the Docker container as closely as possible, running Ubuntu 22.04 with all packages listed in the [Dockerfile](../Dockerfile).
### Virtual Machines
If you must use a virtual machine for your build platform, keep in mind that results vary. There have been some anecdotes of success with VMware Workstation (Player and Pro) and failure with VirtualBox and WSL. These reports are not definitive, but something to keep in mind if you must use a VM.
## JELOS Source Files
After preparing the build machine, clone the project git repository onto it.
```
cd ~
git clone https://github.com/JustEnoughLinuxOS/distribution.git
```
### Selecting the Desired Branch
Once you have cloned the repo, decide whether you want to build the main branch which is more stable, or the development branch which is unstable but hosts our newest features.
|Branch|Purpose|
|----|----|
|main|Stable JELOS sources|
|dev|Unstable JELOS sources|
To check out our development branch, cd into the project directory and checkout `dev`.
```
cd distribution
git checkout dev
```
### Filesystem Structure
We have a simple filesystem structure adopted from parent distributions CoreELEC, LibreELEC, etc.
```
.
├── build.JELOS-DEVICE.ARCHITECTURE
├── config
├── distributions
├── Dockerfile
├── licenses
├── Makefile
├── packages
├── post-update
├── projects
├── release
├── scripts
├── sources
└── tools
```
**build.JELOS-DEVICE.ARCHITECTURE**
Build roots for each device and that device's architecture(s). For ARM devices JELOS builds and uses a 32bit root for several of the cores used in the 64bit distribution.
**config**
Contains functions utilized during the build process including architecture specific build flags, optimizations, and functions used throughout the build workflow.
**distributions**
Distributions contains distribution-specific build flags and parameters and splash screens.
**Dockerfile**
Used to build the Ubuntu container used to build JELOS. The container is hosted at [https://hub.docker.com/u/justenoughlinuxos](https://hub.docker.com/u/justenoughlinuxos).
**licenses**
All of the licenses used throughout the distribution packages are hosted here. If you're adding a package that contains a license, make sure it is available in this directory before submitting the PR.
**Makefile**
Used to build one or more JELOS images, or to build and deploy the Ubuntu container.
**packages**
All of the packages used to develop and build JELOS are hosted within the packages directory. The package structure documentation is available in [DEVEL_CREATING_PACKAGES.md](DEVEL_CREATING_PACKAGES.md).
**post-update**
Anything that is necessary to be run on a device after an upgrade should be added here. Be sure to apply a guard to test that the change needs to be executed before execution.
**projects**
Hardware-specific parameters are stored in the projects folder. Anything that should not be included on every device during a world build should be isolated to the specific project or device here.
**release**
The output directory for all of the build images.
**scripts**
This directory contains all of the scripts used to fetch, extract, build, and release the distribution. Review Makefile for more details.
**sources**
As the distribution is being built, package source files are fetched and hosted in this directory. They will persist after a `make clean`.
**tools**
The tools directory contains utility scripts that can be used during the development process, including a simple tool to burn an image to a usb drive or sdcard.
## Building JELOS
### Building Device Images
Building JELOS is easy. From the root of your local repository, issue one of the `make` commands listed below, depending on the desired device and whether you are using Docker.
| Devices | Dependency | Docker Command | Manual Command |
| ---- | ---- | ---- | ---- |
|AMD64||```make docker-AMD64```|```make AMD64```|
|RK3588||```make docker-RK3588```|```make RK3588```|
|RK3326||```make docker-RK3326```|```make RK3326```|
|RK3566||```make docker-RK3566```|```make RK3566```|
|RK3566-X55|RK3566|```make docker-RK3566-X55```|```make RK3566-X55```|
|S922X||```make docker-S922X```|```make S922X```|
|ALL DEVICES||```make docker-world```|```make world```|
> Devices that list a dependency require you to build the dependency first, since that build will be used as the root of the device you are building.
For example, the following command uses Docker to build the AMD64 image.
```
make docker-AMD64
```
### Rightsized Builds
JELOS supports various build variables which alter the behavior of the distribution for specific purposes including debugging, or hosting containers. The options are defined below and are passed on the make command line. Ex. `BASE_ONLY=true make docker-RK3566`.
|Build Option|Default|Function|
|----|----|----|
|EMULATION_DEVICE|yes|Builds EmulationStation and all emulators if `yes`. Builds EmulationStation and NO emulators if `no`.|
|ENABLE_32BIT|yes|Builds a 32bit root and includes it in the image. Needed for 32bit cores and applications.|
|BASE_ONLY|false<sup>1</sup>|Builds only the bare minimum packages. Includes Weston on supported devices. Does not build EmulationStation.|
|CONTAINER_SUPPORT|no|Builds support for running containers on JELOS.|
> Note: <sup>1</sup> this property will change to yes/no for consistency in a future release.
### Special env Variables
For development builds, you can use the following env variables to customize the image or change build time functionality. To make them globally available to the builds, add them to ${HOME}/.JELOS/options.
|Variable|Function|
|----|----|
|LOCAL_SSH_KEYS_FILE|Enables using ssh public keys for access without the root password.|
|LOCAL_WIFI_SSID|The SSID of the network the device should connect to automatically.|
|LOCAL_WIFI_KEY|The WIFI authentication key for the connection."|
|SCREENSCRAPER_DEV_LOGIN|Login information for screenscraper.fr.|
|GAMESDB_APIKEY|Login information for thegamesdb.net.|
|CHEEVOS_DEV_LOGIN|Login information for retroachievements.org.|
|CLEAN_PACKAGES|Allows specifying packages to clean during a build.|
#### SSH Keys
```
export LOCAL_SSH_KEYS_FILE=~/.ssh/jelos/authorized_keys
```
#### WiFi SSID and password
```
export LOCAL_WIFI_SSID=MYWIFI
export LOCAL_WIFI_KEY=secret
```
#### Screenscraper, GamesDB, and RetroAchievements
To enable Screenscraper, GamesDB, and RetroAchievements, register at each site and apply the api keys in ${HOME}/.JELOS/options. Unsetting one of the variables will disable it in EmulationStation. This configuration is picked up by EmulationStation during the build.
```
# Apply for a Screenscraper API Key here: https://www.screenscraper.fr/forumsujets.php?frub=12&numpage=0
export SCREENSCRAPER_DEV_LOGIN="devid=DEVID&devpassword=DEVPASSWORD"
# Apply for a GamesDB API Key here: https://forums.thegamesdb.net/viewforum.php?f=10
export GAMESDB_APIKEY="APIKEY"
# Find your Cheevos Web API key here: https://retroachievements.org/controlpanel.php
export CHEEVOS_DEV_LOGIN="z=RETROACHIEVEMENTSUSERNAME&y=APIKEYID"
```
#### Cleaning Additional Packages
```
make docker-shell
CLEAN_PACKAGES="linux ppsspp-sa" make AMD64
exit
```
The first and last lines should be omitted if building outside of Docker.
## Troubleshooting
The very first build after a fresh checkout is the hardest. Give yourself sufficient time to generate the first build and work through any failures before attempting to modify JELOS.
- Download errors produce misleading failure messages. Beware of chasing red herrings. A network failure is much more likely than a bug in the makefile, given how frequently it is tested by the CI system and other devs.
- Try cleaning the failed package (see above) and building again.
- If you suspect a download failure, manually delete the relevant package(s) from the `sources` and `build.JELOS-...` directories, to force a full package re-download and re-build.
- Exhaust all options before using `make clean` since this deletes the build cache and takes hours to regenerate.
- As a very last resort, delete the entire local repository and start over.
## Modifying JELOS
Before modifying JELOS, be sure you can successfully build the unmodified `main` or `dev` branch (see above). Establish a baseline of success before introducing changes to the JELOS source.
### Building a Single Package
When modifying individual packages, it's useful to regularly verify the build-ability of your changes. Rather than rebuild an entire device image, it is much faster to simply rebuild a single package using the following commands:
```
make docker-shell
export PROJECT=PC DEVICE=AMD64 ARCH=x86_64
./scripts/clean busybox
./scripts/build busybox
exit
```
The first and last lines should be omitted if building outside of Docker. PROJECT is one of `Amlogic`, `PC`, or `Rockchip` (i.e. the subdirectories of the project directory).
> Note: An EmulationStation package standalone build requires additional steps because its source code is located in a separate repository. See instructions [here](https://github.com/JustEnoughLinuxOS/distribution/blob/main/packages/ui/emulationstation/package.mk).
### Creating a Patch for a Package
It is common to have imported package source code modifed to fit the use case. It's recommended to use a special shell script to build it in case you need to iterate over it. See below.
```
cd sources/wireguard-linux-compat
tar -xvJf wireguard-linux-compat-v1.0.20211208.tar.xz
mv wireguard-linux-compat-v1.0.20211208 wireguard-linux-compat
cp -rf wireguard-linux-compat wireguard-linux-compat.orig
# Make your changes to wireguard-linux-compat
mkdir -p ../../packages/network/wireguard-linux-compat/patches/AMD64
# run from the sources dir
diff -rupN wireguard-linux-compat wireguard-linux-compat.orig >../../packages/network/wireguard-linux-compat/patches/AMD64/mychanges.patch
```
### Creating a Patch for a Package Using git
If you are working with a git repository, building a patch for the distribution is simple. Rather than using `diff`, use `git diff`.
```
cd sources/emulationstation/emulationstation-098226b/
# Make your changes to EmulationStation
vim/emacs/vscode/notepad.exe
# Make the patch directory
mkdir -p ../../packages/ui/emulationstation/patches
# Run from the sources dir
git diff >../../packages/ui/emulationstation/patches/005-mypatch.patch
```
After the patch is generated, rebuild an individual package by following the section above. The build system will automatically pick up patch files from the `patches` directory. For testing, one can either copy the built binary to the console or burn the whole image on SD card.
### Building a Modified Image
If you already have a build for your device made using the above process, it's simple to shortcut the build process and create an image to test your changes quickly using the process below.
```
make docker-shell
# Update the package version for a new package, or apply your patch as above.
vim/emacs/vscode/notepad.exe
export OS_VERSION=$(date +%Y%m%d) BUILD_DATE=$(date)
export PROJECT=PC DEVICE=AMD64 ARCH=x86_64
./scripts/clean emulationstation
./scripts/build emulationstation
./scripts/install emulationstation
./scripts/image mkimage
exit
```
The first and last lines should be omitted if building outside of Docker.
### Pushing Modified Images to a Device
You can of course reflash the SD card with the modified image.
Alternatively, you may install the image through the JELOS update mechanism, which retains your ES and emulator settings. If the device is networked and reachable from the build machine, this can be done as follows.
```
# Replace with your device values
HOST=192.168.0.123
DEVICE=RK3566
ARCH=aarch64
# Assume today is the same UTC day that the image was built
TIMESTAMP=$(date -u +%Y%m%d)
SSH_OPTS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
scp ${SSH_OPTS} ~/distribution/release/JELOS-${DEVICE}.${ARCH}-${TIMESTAMP}.tar root@${HOST}:~/.update && \
ssh ${SSH_OPTS} root@{HOST} reboot
```
Moved to [https://jelos.org/contribute/build/](https://jelos.org/contribute/build/)

View file

@ -1,272 +1 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
# Structure of package.mk files
## Introduction
The package.mk file defines variables and functions to build a package.
## Variables
To control the build behaviour of your package, use variables in the top-down order listed here.
#### Base
| Variable | Default | Required |Description |
|-------------|---------|----------|------------|
| PKG_NAME | - | yes | Name of the packaged software application. Should be lowercase |
| PKG_VERSION | - | yes | Version of the packaged software application. If the version is a githash, please use the full githash, not the abbreviated form. |
| PKG_SHA256 | - | yes | SHA256 hashsum of the application download file |
| PKG_ARCH | any | no | Architectures for which the package builds. `any` or a space separated list of `aarch64`, `arm` or `x86_64` |
| PKG_LICENSE | - | yes | License of the software application. [Reference](https://github.com/JustEnoughLinuxOS/distribution/tree/main/licenses) |
| PKG_SITE | - | yes | Site of the software application |
| PKG_URL | - | yes | Address at which the source of the software application can be retrieved |
| PKG_MAINTAINER | - | no | Your name |
| PKG_DEPENDS_BOOTSTRAP<br>PKG_DEPENDS_HOST PKG_DEPENDS_INIT PKG_DEPENDS_TARGET | - | no | A space separated list of name of packages required to build the software application |
| PKG_SECTION | - | no | virtual if the package only defines dependencies |
| PKG_SHORTDESC | - | no<br>yes&nbsp;for&nbsp;addons | Short description of the software package |
| PKG_LONGDESC | - | yes | Long description of the package including purpose or function within JELOS or Kodi |
#### Universal Build Option
| Variable | Default | Required |Description |
|-------------|---------|----------|------------|
| PKG_SOURCE_DIR | - | no | Force the folder name that application sources are unpacked to. Used when sources do not automatically unpack to a folder with the `PKG_NAME-PKG_VERSION` naming convention. |
| PKG_SOURCE_NAME | - | no | Force the filename of the application sources. Used when the filename is not the basename of `PKG_URL` |
| PKG_PATCH_DIRS | - | no | Patches in `./patches` are automatically applied after package unpack. Use this option to include patches from an additional folder, e.g. `./patches/$PKG_PATCH_DIRS` |
| PKG_NEED_UNPACK | - | no | Space separated list of files or folders to include in package stamp calculation. If the stamp is invalidated through changes to package files or dependent files/folders the package is cleaned and rebuilt. e.g. `PKG_NEED_UNPACK="$(get_pkg_directory linux)"` will trigger clean/rebuild of a Linux kernel driver package when a change to the `linux` kernel package is detected. |
| PKG_TOOLCHAIN | auto | no | Control which build toolchain is used. For detailed information, see [reference](#toolchain-options). |
| PKG_BUILD_FLAGS | - | no | A space separated list of flags with which to fine-tune the build process. Flags can be enabled or disabled with a `+` or `-` prefix. For detailed information, see the [Reference](#build_flags-options). |
| PKG_PYTHON_VERSION | python2.7 | no | Define the Python version to be used. |
| PKG_IS_KERNEL_PKG | - | no | Set to `yes` for packages that include Linux kernel modules |
#### Meson Options
| Variable | Default | Required |Description |
|-------------|---------|----------|------------|
| PKG_MESON_SCRIPT | ${PKG_BUILD}/meson.build | no | Meson build file to use |
| PKG_MESON_OPTS_TARGET | - | no | Options directly passed to meson |
#### CMAKE Options
| Variable | Default | Required |Description |
|-------------|---------|----------|------------|
| PKG_CMAKE_SCRIPT | ${PKG_BUILD}/CMakeLists.txt | no | CMake build file to use |
| PKG_CMAKE_OPTS_HOST<br>PKG_CMAKE_OPTS_TARGET | - | no | Options directly passed to cmake |
#### Configure Options
| Variable | Default | Required |Description |
|-------------|---------|----------|------------|
| PKG_CONFIGURE_SCRIPT | ${PKG_BUILD}/configure | no | configure script to use |
| PKG_CONFIGURE_OPTS<br>PKG_CONFIGURE_OPTS_BOOTSTRAP<br>PKG_CONFIGURE_OPTS_HOST<br>PKG_CONFIGURE_OPTS_INIT<br>PKG_CONFIGURE_OPTS_TARGET | - | no | Options directly passed to configure |
#### Make Options
| Variable | Default | Required |Description |
|-------------|---------|----------|------------|
| PKG_MAKE_OPTS<br>PKG_MAKE_OPTS_BOOTSTRP<br>PKG_MAKE_OPTS_HOST<br>PKG_MAKE_OPTS_INIT<br> PKG_MAKE_OPTS_TARGET | - | no | Options directly passed to make in the build step
| PKG_MAKEINSTALL_OPTS_HOST<br>PKG_MAKEINSTALL_OPTS_TARGET | - | no | Options directly passed to make in the install step
#### Addons
Additional options used when the package builds an addon.
| Variable | Default | Required |Description |
|-------------|---------|----------|------------|
| PKG_REV | - | yes | The revision number of the addon (starts at 100). Must be placed after `PKG_VERSION`. Must be incremented for each new version else Kodi clients will not detect version change and download the updated addon. |
| PKG_IS_ADDON | no | yes | Must be set to `yes` <br>or to `embedded` when this addon is part of the image |
| PKG_ADDON_NAME | - | yes | Proper name of the addon that is shown at the repo |
| PKG_ADDON_TYPE | - | yes | See LE/config/addon/ for other possibilities |
| PKG_ADDON_VERSION | - | no | The version of the addon, used in addon.xml |
| PKG_ADDON_PROVIDES | - | no | [Provides](http://kodi.wiki/view/addon.xml#.3Cprovides.3E_element) in addon-xml |
| PKG_ADDON_REQUIRES | - | no | [Requires](http://kodi.wiki/view/addon.xml#.3Crequires.3E) used in addon.xml |
| PKG_ADDON_PROJECTS | @PROJECTS@ | no | for available projects or devices, see projects subdirectory (note: Use RPi for RPi project, and RPi1 for RPi device) |
| PKG_DISCLAIMER | - | no | [Disclaimer](https://kodi.wiki/view/Addon.xml#.3Cdisclaimer.3E) in addon-xml |
| PKG_ADDON_IS_STANDALONE | - | no | Defines if an addon depends on Kodi (on) or is standalone (yes) |
| PKG_ADDON_BROKEN | - | no | Marks an addon as broken for the user |
#### Detailed Information for Options
##### TOOLCHAIN options
Application/packages needs different toolchains for build.
For instance `cmake` or the classic `./configure` or same very different.
For the most application/packages, the auto-detection of the toolchain works proper.
But not always. To select a specific toolchain, you only need to set the `PKG_TOOLCHAIN` variable.
| Toolchain | Description (if needed) |
|----------- |-------------------------|
| meson | [Meson Build System](http://mesonbuild.com/) |
| cmake | [CMake](https://cmake.org/) with Ninja |
| cmake-make | [CMake](https://cmake.org/) with Make |
| autotools | [GNU Build System](https://en.wikipedia.org/wiki/GNU_Build_System)
| configure | preconfigured [GNU Build System](https://en.wikipedia.org/wiki/GNU_Build_System) |
| ninja | [Ninja Build](https://ninja-build.org/) |
| make | [Makefile Based](https://www.gnu.org/software/make/) |
| manual | only runs self writen build steps, see [Functions](#functions) |
###### Auto-Detection
The auto-detections looks for specific files in the source path.
1. `meson.build` (PKG_MESON_SCRIPT) => meson toolchain
2. `CMakeLists.txt` (PKG_CMAKE_SCRIPT) => cmake toolchain
3. `configure` (PKG_CONFIGURE_SCRIPT) => configure toolchain
4. `Makefile` => make toolchain
When none of these was found, the build abort and you have to set the toolchain via `PKG_TOOLCHAIN`
##### BUILD_FLAGS options
Build flags implement often used build options. Normally these are activated be default, but single applications/packages has problems to compile/run with these.
Set the variable `PKG_BUILD_FLAGS` in the `package.mk` to enable/disable the single flags. It is a space separated list. The flags can enabled with a `+` prefix, and disabled with a `-`.
| flag | default | affected stage | description |
|----------|----------|----------------|-------------|
| pic | disabled | target/init | [Position Independent Code](https://en.wikipedia.org/wiki/Position-independent_code) |
| pic:host | disabled | host/bootstrap | see above |
| lto | disabled | target/init | enable LTO (Link Time optimization) in the compiler and linker unless disabled via `LTO_SUPPORT`. Compiles non-fat LTO objects (only bytecode) and performs single-threaded optimization at link stage |
| lto-parallel | disabled | target/init | same as `lto` but enable parallel optimization at link stage. Only enable this if the package build doesn't run multiple linkers in parallel otherwise this can result in lots of parallel processes! |
| lto-fat | disabled | target/init | same as `lto` but compile fat LTO objects (bytecode plus optimized assembly). This increases compile time but can be useful to create static libraries suitable both for LTO and non-LTO linking |
| lto-off | disabled | target/init | explicitly disable LTO in the compiler and linker |
| gold | depend on `GOLD_SUPPORT` | target/init | can only disabled, use of the GOLD-Linker |
| parallel | enabled | all | `make` or `ninja` builds with multiple threads/processes (or not) |
| strip | enabled | target | strips executables (or not) |
###### Example
```
PKG_BUILD_FLAGS="+pic -gold"
PKG_BUILD_FLAGS="-parallel"
```
## Functions
All build steps in the JELOS build system are done by shell function.
These functions can overwritten in the `package.mk`. But this raises problems, when the build system is updated. To reduce the problem, most function was extended by `pre_` and `post_` scripts, to use instead.
When it is nesseary to replace configure, make and makeinstall, please use `PKG_TOOLCHAIN="manual"`.
Some of the build steps needs to be run once, like `unpack`. Other steps needs to be run multiple times, to create the toolchain (stage bootstrap & host) or to create the LE image (stage init & target). These stage specific functions have the stage as suffix, like `make_target`.
Full list of overwrittable functions.
| function | stages specific | description |
|-------------------------|--------|-------------|
| configure_package | - | Optional function to implement late binding variable assignment (see below) |
| unpack<br>pre_unpack<br>post_unpack | - | Extract the source from the downloaded file |
| pre_patch<br>post_patch | - | Apply the patches to the source, after extraction. The patch function it self is not allowed to overwritten |
| pre_build_\[stage] | yes | Runs before of the start of the build |
| pre_configure<br>pre_configure_\[stage]<br>configure_\[stage]<br>post_configure_\[stage] | yes | Configure the package for the compile. This is only relevant for toolchain, that supports it (e.g. meson, cmake, configure, manual) |
| make_\[stage]<br>pre_make_\[stage]<br>post_make_\[stage] | yes | Build of the package |
| makeinstall_\[stage]<br>pre_makeinstall_\[stage]<br>post_makeinstall_\[stage] | yes | Installation of the files in the correct pathes<br>host: TOOLCHAIN<br>target: SYSROOT and IMAGE<br>bootstrap and init: temporary destination
| addon | - | Copy all files together for addon creation. This is requiered for addons |
## Late Binding variable assignment
A package will be loaded only once, by the call to `config/options`. During this process, additional package specific variables will be initialised, such as:
* `PKG_BUILD` - path to the build folder
* `PKG_SOURCE_NAME` - if not already specified, generated from `PKG_URL`, `PKG_NAME` and` PKG_VERSION`
Since these variables will not exist at the time the package is loaded, they can only be referenced **after** package has loaded. This can be accomplished by referencing these variables in the `configure_package()` function which is executed once the additional variables have been assigned.
If necessary, the following variables would be configured in `configure_package()` as they are normally relative to `${PKG_BUILD}`:
```
PKG_CONFIGURE_SCRIPT
PKG_CMAKE_SCRIPT
PKG_MESON_SCRIPT
```
Further to this, toolchain variables that are defined in `setup_toolchain()` must not be referenced "globally" in the package as they will only be configured reliably after `setup_toolchain()` has been called during `scripts/build`. Any variable in the following list must instead be referenced in a package function such as `pre_build_*`, `pre_configure_*`, `pre_make_*` etc.:
```
TARGET_CFLAGS TARGET_CXXFLAGS TARGET_LDFLAGS
NINJA_OPTS MAKEFLAGS
DESTIMAGE
CC CXX CPP LD
AS AR NM RANLIB
OBJCOPY OBJDUMP
STRIP
CPPFLAGS CFLAGS CXXFLAGS LDFLAGS
PKG_CONFIG
PKG_CONFIG_PATH
PKG_CONFIG_LIBDIR
PKG_CONFIG_SYSROOT_DIR
PKG_CONFIG_ALLOW_SYSTEM_CFLAGS
PKG_CONFIG_ALLOW_SYSTEM_LIBS
CMAKE_CONF CMAKE
HOST_CC HOST_CXX HOSTCC HOSTCXX
CC_FOR_BUILD CXX_FOR_BUILD BUILD_CC BUILD_CXX
_python_sysroot _python_prefix _python_exec_prefix
```
Lastly, the following variables are assigned during `scripts/build` but some packages may need to use alternative values for these variables. To do so, the package must assign alternative values in `pre_build_*`/`pre_configure_*`/`pre_make_*` etc. functions as these functions will be called after the variables are initialised with default values in `scripts/build` but before they are used by `scripts/build`.
```
CMAKE_GENERATOR_NINJA
TARGET_CONFIGURE_OPTS
TARGET_CMAKE_OPTS
TARGET_MESON_OPTS
HOST_CONFIGURE_OPTS
HOST_CMAKE_OPTS
HOST_MESON_OPTS
INIT_CONFIGURE_OPTS
INIT_CMAKE_OPTS
INIT_MESON_OPTS
BOOTSTRAP_CONFIGURE_OPTS
BOOTSTRAP_CMAKE_OPTS
BOOTSTRAP_MESON_OPTS
```
#### Example
```
configure_package() {
# now we know where we're building, assign a value
PKG_CONFIGURE_SCRIPT="${PKG_BUILD}/gettext-tools/configure"
}
post_patch() {
# replace hardcoded stuff
sed -i ${PKG_CONFIGURE_SCRIPT} 's|hardcoded stuff|variable stuff|'
}
pre_configure_target() {
# add extra flag to toolchain default
CFLAGS="${CFLAGS} -DEXTRA_FLAG=yeah"
}
post_makeinstall_target() {
# remove unused executable, install what remains
rm ${INSTALL}/usr/bin/bigexecutable
}
```
#### tools/pkgcheck
Use `tools/pkgcheck` to verify packages. It detects the following issues:
Issue | Level | Meaning |
| :--- | :----: | ---- |
| late&nbsp;binding&nbsp;violation | FAIL | Late binding variables referenced outside of a function - see [late binding](https://github.com/JELOS/JELOS.tv/blob/master/packages/readme.md#late-binding-variable-assignment) |
| duplicate&nbsp;function&nbsp;def | FAIL | Function defined multiple times, only last definition will be used |
| bad&nbsp;func&nbsp;-&nbsp;missing&nbsp;brace | FAIL | Opening brace (`{`) for function definition should be on same line as the function def, ie. `pre_configure_target() {` |
| intertwined&nbsp;vars&nbsp;&&nbsp;funcs | WARN | Variable assignments and logic is intertwined with functions - this is cosmetic, but variables and logic should be specified before all functions |
| unknown&nbsp;function | WARN | Could be a misspelled function, ie. `per_configure_target() {` which might fail silently.|
| ignored&nbsp;depends&nbsp;assign | WARN | Values assigned to `PKG_DEPENDS_*` outside of the global section or `configure_package()` will be ignored. |
## Add a new package to the Image
1. Think about, why you need it in the image.
* new multimedia tool
* add a new network tool
* new kernel driver
* ...
2. Find a place in the packages tree
* look into the package tree structure, which is generally self explaind.
* do not place it in an existing package (directory that includes a `package.mk`)
* when you found a place, create a directory with the name of your package (use same value for `PKG_NAME`!!)
3. Create an initial `package.mk`
* you can find a template under `packages/package.mk.template`. Copy the template into the new directory and call it `package.mk`
* apply any required changes to your new `package.mk`
4. Find a place in the dependency tree
* when it extend an existing package, add it there to the `PKG_DEPENDS_TARGET`/`PKG_DEPENDS_HOST` etc.
* take a look into the path `packages/virtual`, there you should find a virtual packages, that match your new package (misc-packages should be the last option)
5. Now you can build your image
* after the build, inside the `build-*` folder you should find a directory with your package name and -version, eg. `widget-1.2.3`.
Moved to [https://jelos.org/contribute/packages/](https://jelos.org/contribute/packages/)

View file

@ -1,50 +1 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
# Creating custom shader preset for use with JELOS game and per-system selection
JELOS supports adding custom shaders in addition to the built-in shaders available in the "Advanced Game Options" and "Game Settings / Per System Advanced Configuration" settings "shader set" selection.
## Step 1: Launch a game and access the shaders menu in quick settings
If Shaders are set to "off," change to "on"
## Step 2: Configure Shader settings to preference by modifying existing shaders
Specific parameters will vary on a per-shader basis so it's recommended you test with the individual shaders first by loading the built-ins and modifying their parameters to your preference.
When you know how you'd lke to configure everything, you'll select your parameters and passes. To start, you'll select the number of shader passes, the filtering (linear, nearests, or default), and the number of passes for each individual shader listed (generally leave this item at default). Then select "apply changes," set parameters, and save the shader.
----
### Example
The below example shader configuration is based on a custom shader with two passes for GBA to enable vba-color for original colors (ala real hardware) and LCD grid:
In shaders, choose "load" and then load "vba-color" (either from the main list, or if on android/PC, it'll be in the "handhelds" folder.
Once loaded, go down to "shader passes" and change it from 1 to 2.
For the second pass where it says "N/A" select it, go into the "handhelds" folder and choose LCD1x.
Then press "Apply changes" to set it. From there go into "shader parameters" and you'll see the darkening, brighten scanlines, and brighten LCD options. Configure parameters as preferred. For this example, set:
* Darken: 0.25
* Brighten Scanlines: 28.00
* Brighten LCD: 6.00
Once it's configured to your liking, back out of the parameters menu and in the shaders menu press "save" in the menu list. In the save menu set "Simple Presets" to "off" and then "save shader preset as" and name the custom shader. It will now be selectable as a default like any of the other preconfigured shaders.
-----------
You can add additional passes following the steps above (increase passes to 3 and follow the same steps), but keep in mind performance will be dependent on your device, and not all shaders will work at full speed with multiple passes.
## Step 3: Save your new shader preset
Select "Save" in the shaders menu.
At the top of the list, set "Simple Presets" to off. Then choose "Save Shader Preset As" and name the shader. Press the enter key on the on-screen keyboard to save the preset. Exit Retroarch normally via the hotkey preset, or by backing out to the main menu and choosing "Quit Retroarch"
## Step 4: Load your shader preset from JELOS menu
Browse into either "advanced game options" within game selection, or Main Menu -> Game Settings -> Per System Advanced Configuration.
Select shader set, then browse through with the d-pad, joystick, or L/R buttons to page. Your custom shader will now be available to select in the list.
It may not be specifically where you'd expect. The shader list is alphabetical, but custom shaders are placed at the end of the folder list for shaders, but before the Borders folder path at the end, so you will likely find your custom shader a few pages up from the bottom of the list.
Moved to [https://jelos.org/configure/shaders/](https://jelos.org/configure/shaders/)

View file

@ -1,25 +1 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
## Donations and Funding
Thank you for your interest in donating to JELOS! At this time we are not accepting financial contributions. If you would like to volunteer or contribute in some way to our project, please read our [Code of Conduct](https://github.com/JustEnoughLinuxOS/distribution/blob/main/CODE_OF_CONDUCT.md#contributor-covenant-code-of-conduct) and [Contributing to JELOS](https://github.com/JustEnoughLinuxOS/distribution/blob/main/CONTRIBUTING.md#contributing-to-jelos) guides. You are also encouraged to join us on Discord. Our Discord invitation can be found at the top of the page.
## Why Don't You Accept Donations?
* As an Open Source project our operational expenses are fairly low, so to us a donation of your time is much more valuable.
* Open Source development is not considered charitable activity in some parts of the world, including the United States. Accepting donations can create unnecessary complexity for the project, and for the person donating.
## Build Infrastructure
Our GitHub runners are the nodes we use to build and push releases to GitHub. Trillian is our primary development host, Deepthought is our primary release builder. Node specs can be found in the table below:
| Name | CPU | Cores/Threads | RAM | Disk | Usage |
|----|----|----|----|----|----|
| deepthought | Ryzen 7 5800H | 8c/16t | 32GB | 2TB NVMe SSD | GitHub Runner |
| trillian | Ryzen 7 5800H | 8c/16t | 32GB | 2TB NVMe SSD | Local Development |
## Project and Web Hosting
GitHub serves our release packages, as well as our WIKI. Our domain, https://www.jelos.org is hosted with GitHub pages and is a simple WIKI redirect. Currently, JELOS does not take advantage of functionality that requires a paid GitHub plan.
| Project | URL | Comment |
|----|----|----|
| JELOS | https://github.com/JustEnoughLinuxOS/distribution | Project site, Stable Release Repository. |
| Documentation | https://github.com/JustEnoughLinuxOS/distribution/README.md | JELOS User Documentation |
Moved to [https://jelos.org/donations/](https://jelos.org/donations/)

View file

@ -1,98 +1 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
# Frequently Asked Questions
## About the Distribution
### Does JELOS offer any formal support?
* No. JELOS is something that we develop for fun, it is provided as-is. There are a variety of avenues to seek community help, but this is a tinkerer's distribution so you will need to get your hands dirty to solve your problems.
### Do you plan to add additional ports, software, or emulators?
* We are a community developed distribution, and we believe that it is the responsibility of the person who wants a new feature to develop and contribute that feature. If you would like to add something to JELOS, pull requests are welcomed. Please review our [code of conduct](https://github.com/JustEnoughLinuxOS/distribution/blob/main/CODE_OF_CONDUCT.md), our [contributing guidelines](https://github.com/JustEnoughLinuxOS/distribution/blob/main/CONTRIBUTING.md), and our [build guide](https://github.com/JustEnoughLinuxOS/distribution/blob/main/BUILDING.md) before submitting your first pull request.
### Licensing JELOS for redistribution
JELOS utilizes a non-commercial CC BY-NC-SA 4.0 copyleft license on our branding which is intended to prevent abuse of our software. Device Makers and others who would like to bundle on devices may not do so without our express permission.
#### Redistribution Authorization Requirements
If you would like to receive permission from our project to redistribute JELOS, you must request permission in writing. We can be reached at contact@jelos.org.
##### Benefits
Authorization to use our branding will allow you to distribute JELOS on your device without needing to maintain a fork of the project for your device. This would include access to our online update feature.
##### Minimum Requirements
To receive permission to redistribute JELOS the following *minimum* criteria must be met. Please note, that taking these actions without formally receiving approval from our project does not grant you the authority to use our branding. You MUST receive approval from JELOS.
1. We receive sources for device(s) before they ship to consumers and we have irrevokable authority to publish at our leisure. We strongly prefer device makers contribute changes to support their device(s) directly to the distribution themselves.
2. Provide, upon request, device samples for every JELOS team member (including core developers, moderation team, and outside contributors), as well as any community developer designated by JELOS, for all devices planned, supported by, or bundled with JELOS for as long as the device maker manufactures the device.
3. It is up to the requestor to secure distribution rights for software included with JELOS that is not developed or owned by JELOS.
4. A support representative must join and participate in our community to support their device(s).
##### Selling JELOS
JELOS branding is licensed for non-commercial use only. Even if approved to be distributed on a device, it is not allowed to be sold or included as an up charge in any form what-so-ever. Period. This is not negotiable.
### What if you stop working on JELOS?
* I don't expect that to happen, however JELOS is an Open Source project hosted here on GitHub which means the source code is readily available for anyone in the world to pick up and continue where we left off. Our [license model](https://tldrlegal.com/license/apache-license-2.0-(apache-2.0)) allows for this to happen by providing and encouraging redistribution ([freedom 2](https://www.gnu.org/philosophy/free-sw.en.html#four-freedoms)) and the right to distribute a modified version ([freedom 3](https://www.gnu.org/philosophy/free-sw.en.html#four-freedoms)). JELOS only prohibits commercial use through our branding which is licensed by the [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License](https://tldrlegal.com/license/creative-commons-attribution-noncommercial-sharealike-4.0-international-(cc-by-nc-sa-4.0)).
## About Using JELOS
### Which emulators and game engines are supported by JELOS?
* Emulators and game engines are configured on a per device basis and are automatically documented at build time. Documentation can be found at the following URL:
* [Per Device Documentation](/documentation/PER_DEVICE_DOCUMENTATION)
### Sound suddenly stopped working on my device!
* Log in over ssh, and run the following steps.
```
systemctl stop pipewire-pulse pipewire-pulse.socket pipewire pipewire.socket wireplumber
rm -rf /storage/.local/state /storage/.config/pulse
reboot
```
### EmuStation displays duplicate game titles. How can I disable a file extension to remove the duplicates? (e.g. display only ```.cue``` and don't display ```.bin``` files for PlayStation)
* Within EmuStation, select the relevant game system (e.g. PlayStation)
* Press ```Select``` to View Options
* In View Options section, choose View Customisation
* Under File Extensions, deselect any file extensions that are not required (e.g. deselect ```.bin``` for PlayStation when also using ```.cue``` files)
### How do I edit ```es_systems.cfg``` (for example, to modify the list of systems in EmuStation, add a custom core or script, or change the order that systems are displayed)?
* Delete the ~/.config/emulationstation/es_systems.cfg symlink.
* Copy the custom version of ```es_systems.cfg``` to ```~/.config/emulationstation```.
* Stop the UI service.
`systemctl stop ${UI_SERVICE}`
* Restart the UI service to use the custom version
`systemctl start ${UI_SERVICE}`
> Note: System updates will overwrite it, custom settings will be preserved as last_es_systems.cfg.
### Where do I put bios files and files and Retroarch system files
* They go in ```/storage/roms/bios```
* System bios checker in ```game settings, missing bios``` identities missing files per emulator and indicates their required location
### Where do I put music files to enable background music within emulationstation (while browsing my game library)?
* Music files should be added to `/storage/roms/BGM`
### My game has slowdown and stuttering issues. What can I do to improve performance?
First make sure you do not have a TDP configured that is too low for your emulator to function correctly. Next, try adjusting settings within the emulator, either retroarch core or standalone emulator configuration menu. First make sure that rewind is disabled. Search online to check for recommended settings that others may have determined.
### Where are log files stored?
* Log files can be found in `/var/log/`
Various logs are generated, including
* EmuStation logs `es_log.txt` (cumulative log of all ES activity), `es_launch_stdout.log` (last emulator launched from ES) and `es_launch_stderr.log` (blank if there wasn't an error for the last emulator launch)
* Execution log `exec.log` (generic execution log that indicates what was last executed, including the command to launch the emulator) e.g. for gzdoom launch of heretic.doom `runemu.sh: Executing /usr/bin/bash start_gzdoom.sh /storage/roms/doom/heretic.doom`
* Boot log `boot.log` (Output from autostart during system startup)
* Emulator-specific log (for non-retroarch emulators) e.g. `gzdoom.log` is the log specific to gzdoom to indicate whether there is any issue within the emulator when launching heretic.doom, noted above
* Retroarch logs are [turned off by default](https://github.com/JustEnoughLinuxOS/distribution/blob/main/packages/games/emulators/retroarch/sources/handheld/retroarch.cfg#L420), but can be enabled within Retroarch (`Tools > Retroarch`: `Settings > Logging > Log to a File`), are stored in `/var/log/retroarch` and are quite detailed, so should provide sufficient detail to identify missing roms within a game's romset, configuration issues and other errors that prevent games from working
> Note: Retroarch uses a shared config file, so logging can be enabled within 64bit or 32bit and it will be enabled for all Retroarch cores
### I have a device with a single microsd and I can't see the games partition in Windows or macOS.
* JELOS does not create an ExFAT partition on the boot device, and expands the full partition using ext4. You can sync files to the device using SyncThing, copy files to the device using SAMBA, or by loading your files onto a EXT4, ExFAT, or FAT32 formatted usb stick and copy them with FileMan or over ssh.
* Windows Users can connect to their device by unc path using the device name such as ```\\handheld``` or by IP ```\\device IP address``` into the address bar in Windows Explorer.
* Mac users can connect by selecting "Go" from the Finder menu, followed by "Connect to Server", then enter ```smb://handheld``` or ```smb://device IP address```.
* Log in as root. The root password is required for access which can be found in the system menu.
Moved to [https://jelos.org/faqs/](https://jelos.org/faqs/)

View file

@ -1,363 +1 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
# Hotkey Auto-configuration
By default JELOS will detect your controller and configure RetroArch hotkeys automatically. If this behavior is not desired it can be disabled in the System Settings menu by disabling the "AUTOCONFIGURE RETROARCH HOTKEYS" option.
# RetroArch Hotkeys
* [Hotkey Enable](https://docs.libretro.com/guides/input-and-controls/#hotkey-controls): Select (Hold)
* Exit: Start (Press Twice)
* Menu: X
* Favorite: Hold X
* Show/Hide FPS: Y
* Save State: R1
* Load State: L1
* Rewind: L2
* Fast-Forward Toggle: R2
> Note: X and Y are reversed on some devices, this is normal behavior.
# Global Hotkeys
* Pause: Start
* Quit: Start+Select
* Force-Close: L1+Start+Select
* Skip 5s: R1
* Back 5s: L1
* Skip 60s: R2
* Back 60s: L2
> Note: Force-Close is R1+Start+Select on some devices, this is normal behavior.
# Per Device Hotkeys
|Device|Brightness Up|Brightness Down|Battery Status|WIFI Toggle|
|----|----|----|----|----|
|Anbernic RG351M|Select & Vol +|Select & Vol -|Start & Vol +|Start & Vol -|
|Anbernic RG353M|Select & Vol +|Select & Vol -|Fn & Vol +|Fn & Vol -|
|Anbernic RG353P|Select & Vol +|Select & Vol -|Fn & Vol +|Fn & Vol -|
|Anbernic RG353V|Select & Vol +|Select & Vol -|Fn & Vol +|Fn & Vol -|
|Anbernic RG503|Select & Vol +|Select & Vol -|Fn & Vol +|Fn & Vol -|
|Anbernic RG552|Select & Vol +|Select & Vol -|Fn & Vol +|Fn & Vol -|
|ATARI VCS 800 Onyx|NA|NA|NA|NA|
|AYANEO AIR|Aya Button & Vol + | Aya Button & Vol - | = Button & Vol + | = Button & Vol -|
|AYANEO AIR Plus|Aya Button & Vol + | Aya Button & Vol - | = Button & Vol + | = Button & Vol -|
|AYANEO AIR Pro|Aya Button & Vol + | Aya Button & Vol - | = Button & Vol + | = Button & Vol -|
|AYANEO AYANEO 2|Aya Button & Vol + | Aya Button & Vol - | = Button & Vol + | = Button & Vol -|
|AYANEO AYA NEO 2021|Aya Button & Vol + | Aya Button & Vol - | = Button & Vol + | = Button & Vol -|
|AYANEO AYANEO 2021|Aya Button & Vol + | Aya Button & Vol - | = Button & Vol + | = Button & Vol -|
|AYANEO AYANEO 2021 Pro|Aya Button & Vol + | Aya Button & Vol - | = Button & Vol + | = Button & Vol -|
|AYANEO AYANEO 2021 Pro Retro Power|Aya Button & Vol + | Aya Button & Vol - | = Button & Vol + | = Button & Vol -|
|AYA NEO AYA NEO Founder|Aya Button & Vol + | Aya Button & Vol - | = Button & Vol + | = Button & Vol -|
|AYANEO AYANEO NEXT Pro|Aya Button & Vol + | Aya Button & Vol - | = Button & Vol + | = Button & Vol -|
|AYANEO GEEK|Aya Button & Vol + | Aya Button & Vol - | = Button & Vol + | = Button & Vol -|
|AYANEO NEXT|Aya Button & Vol + | Aya Button & Vol - | = Button & Vol + | = Button & Vol -|
|AYANEO NEXT Advance|Aya Button & Vol + | Aya Button & Vol - | = Button & Vol + | = Button & Vol -|
|AYANEO NEXT Pro|Aya Button & Vol + | Aya Button & Vol - | = Button & Vol + | = Button & Vol -|
|GPD G1619-04|TBD|TBD|TBD|TBD|
|Hardkernel ODROID-GO-Ultra|F1 & Vol +|F1 & Vol -|F2 & Vol +|F2 & Vol -|
|Indiedroid Nova|NA|NA|NA|NA|
|LENOVO 81TC|NA|NA|NA|NA|
|ODROID-GO Advance|Select & Vol +|Select & Vol -|Start & Vol +|Start & Vol -|
|ODROID-GO Advance Black Edition|Select & Vol +|Select & Vol -|Start & Vol +|Start & Vol -|
|ODROID-GO Super|Select & Vol +|Select & Vol -|Start & Vol +|Start & Vol -|
|Orange Pi 5|NA|NA|NA|NA|
|Powkiddy RGB10 MAX 3|F1 & Vol +|F1 & Vol -|F2 & Vol +|F2 & Vol -|
|Powkiddy RK2023|Select & Vol +|Select & Vol -|Start & Vol +|Start & Vol -|
|Powkiddy x55|Select & Vol +|Select & Vol -|Start & Vol +|Start & Vol -|
|Valve Jupiter|Steam Button & Vol + | Steam Button & Vol - | ... Button & Vol + | ... Button & Vol -|
[Reference](https://github.com/JustEnoughLinuxOS/distribution/blob/main/packages/jelos/profile.d/98-jslisten)
# Emulator Hotkeys and Button Assignments
<table>
<tr style="vertical-align:top">
<th align="left">Emulator</th><th align="left">Notes</th>
</tr>
<tr>
<td><a href="https://github.com/midwan/amiberry/wiki">Amiberry</a></td><td><a href="https://github.com/midwan/amiberry/wiki/Kickstart-ROMs-(BIOS)">Standalone</a></td>
</tr>
<tr>
<td valign="top"><a href="https://github.com/dolphin-emu/dolphin">Dolphin (dolphin-sa)</a></td><td><a href="https://dolphin-emu.org/">Standalone</a>
```
HOTKEYS (BASED ON GAMECUBE CONTROLLER PROFILE)
=======
SELECT hotkey enable
START exit to EmulationStation ("ES")
R save state
L load state
A screenshot
B internal resolution
Z game speed (fast forward)
X aspect ratio
Y fps on / off
DUP +1 save state slot
DDOWN -1 save state slot
```
</td>
</tr>
<tr>
<td><a href="http://maniacsvault.net/ecwolf/wiki/Main_Page">ecwolf</a></td><td><a href="http://maniacsvault.net/ecwolf/wiki/Game_data">Game Engine</a></td>
</tr>
<tr>
<td><a href="https://github.com/coelckers/gzdoom">gzdoom</a></td><td><a href="https://zdoom.org/wiki/IWAD">Game Engine</a></td>
</tr>
<tr>
<td><a href="https://git.tuxfamily.org/hatari/hatari.git">Hatari (Hatarisa)</a></td><td><a href="https://docs.libretro.com/library/hatari/#bios">Standalone</a></td>
</tr>
<tr>
<td valign="top"><a href="https://github.com/DirtBagXon/hypseus-singe">Hypseus-singe</a></td><td><a href="https://www.daphne-emu.com:9443/mediawiki/index.php/Main_Page">Standalone</a>
```
SELECT coin
START start
BUTTON 1 a
BUTTON 2 b
BUTTON 3 x
MOVEMENT d-pad or left-analog
QUIT select+start
```
to add functions, edit `/storage/.config/game/configs/hypseus/hypinput.ini` under `[KEYBOARD]` section by changing third number for a function from `0` (disabled) to the joystick button number
retrieve joystick button numbers with
```jstest /dev/input/js0```
the following assigns quit to ```L1``` and pause to ```R1```
```
[KEYBOARD]
KEY_QUIT = SDLK_ESCAPE 0 5
KEY_PAUSE = SDLK_p 0 6
```
</td>
</tr>
<tr>
<td><a href="https://github.com/drfrag666/gzdoom">lzdoom</a></td><td><a href="https://zdoom.org/wiki/IWAD">Game Engine</a></td>
</tr>
<tr>
<td valign="top"><a href="https://github.com/mupen64plus/mupen64plus-video-glide64mk2">mupen64plus (mupen64plussa)</a></td><td><a href="https://mupen64plus.org/docs">Standalone</a>
```
SELECT hotkey enable
START start
B a
Y b
RIGHT ANALOG C-stick
LEFT ANALOG analog
L1 L
L2 Z
R1 R
HOTKEYS
=======
SELECT+START exit to EmulationStation ("ES")
SELECT+R1 save state
SELECT+L1 load state
SELECT+Y screenshot
SELECT+B reset current game
```
CONTROLLER PROFILES
Z and L button assignment can be changed in ES.
* Highlight the game and press X
* Select ADVANCED GAME OPTIONS (A to confirm)
* Set EMULATOR to either MUPEN64PLUSSA
* Change INPUT CONFIGURATION
* DEFAULT: L1 = L, L2 = Z
* Z & L SWAP: L1 = Z, L2 = L
* CUSTOM: Users can create their own controller layout in ```/storage/.configs/game/configs/mupen64plussa```
</td>
</tr>
<tr>
<td valign="top"><a href="https://github.com/DCurrent/openbor">Openbor</a></td><td><a href="https://www.chronocrash.com/forum/index.php?resources/">Standalone</a>
```
START start, confirm
A attack 1
X attack 2
L1 attack 3
R1 attack 4
B jump
Y special
D-PAD up/down/left/right
SELECT cancel, screenshot
```
note: pressing A on title screen will exit
</td>
</tr>
<tr>
<td valign="top"><a href="https://github.com/hrydgard/ppsspp">PPSSPPSDL</a></td><td><a href="https://www.ppsspp.org/faq.html">Standalone</a>
```
START start
SELECT select
B cross
A circle
X triangle
Y square
L1 L
R1 R
ANALOG LEFT analog
ANALOG RIGHT cross(down) circle(right) triangle(up) square(left)
D-PAD up/down/left/right
L3 PPSSPPSDL menu
```
</td>
</tr>
<tr>
<td><a href="https://zdoom.org/wiki/Raze">Raze</a></td><td><a href="https://zdoom.org/wiki/Raze#Supported_games">Game Engine</a></td>
</tr>
<tr>
<td><a href="https://www.scummvm.org">Scummmvm (Scummvmsa)</a></td><td><a href="https://www.scummvm.org/compatibility/">Standalone</a></td>
</tr>
<tr>
<td valign="top"><a href="https://vice-emu.sourceforge.io/vice_toc.html">vice (vicesa)</a></td><td><a href="https://vice-emu.sourceforge.io/vice_2.html#SEC5">Standalone</a>
```
SELECT onscreen keyboard
START show menu
A back (in menus); show menu
B fire (joystick port 1); confirm (in menus)
L1 back (in menus); show menu
L2 assign hotkey
L3 fire (joystick port 2)
R1 confirm (in menus)
R2 swap joystick port (either [left analog + B=fire] or [right analog + L3=fire])
```
Notes:
Games will require keyboard key presses to progress through messages and to launch
(e.g. SPACE, RSTR [run/start], F3, F7).
SELECT to show onscreen keyboard, left analog/d-pad to move cursor, B to confirm
C= on keyboard resets the machine
L2 to assign highlighted key or menu function to gamepad button (save config to retain)
To cancel onscreen keyboard, move cursor to blank area and A/L1 to close keyboard
or click on X in top left corner of keyboard
Joystick can be assigned to port 1 or 2. R2 to switch ports.
port 1: [left analog] + [B = fire]
port 2: [right analog] + [L3 = fire].
To quit emulator, START, highlight Exit Emulator, B to confirm
</td>
</tr>
<tr>
<td valign="top"><a href="http://wiki.yabause.org/index.php5?title=Documentations">Yabasanshiro</a></td><td><a href="http://www.uoyabause.org">Standalone</a>
```
SELECT menu
START start
D-PAD up/down/left/right
Y a
B b
A c
X x
L1 (shoulder) y
R1 (shoulder) z
L2 (trigger) l
R2 (trigger) r
LEFT ANALOG analog stick
START+SELECT+L1+R1 exit emulator
```
</td>
</tr>
<tr>
<td valign="top"><a href="https://www.retroarch.com">Retroarch with Libretro Cores (<strong>RA:</strong>)</a></td><td>64-bit and 32-bit versions use shared config files
```
SELECT+START: exit (press twice)
SELECT+A: pause emulation
SELECT+B: reset emulation
SELECT+X: Retroarch menu
SELECT+Y: toggle fps
SELECT+L1: load state
SELECT+R1: save state
SELECT+L2: rewind toggle
SELECT+R2: fast-forward toggle
```
</td>
</tr>
<tr>
<td><a href="https://github.com/christianhaitian/PortMaster/blob/main/README.md">Port Master</a></td><td><a href="https://github.com/christianhaitian/PortMaster/wiki">Port Installer</a></td>
</tr>
</table>
# Button Codes
From ssh terminal:
```
evtest
```
then select `retrogame_joypad` to see details for each button press, including button labels, codes and analog stick values in real-time
```
jstest-sdl -t 0
```
to see interactive keymap
<table>
<tr style="vertical-align:top">
<th align="left">Joypad Button</th><th align="left" colspan=4>Button Codes</th>
</tr>
<tr>
<td>
<strong>DIGITAL</strong></td><td><strong><a href="https://github.com/JustEnoughLinuxOS/distribution/blob/5ae14a65cc446c1e6f7083ac47adeafc806134a6/packages/ui/emulationstation/config/es_input.cfg#L63">RG552/RG503/RG353P</a></strong></td><td><strong><a href="https://github.com/JustEnoughLinuxOS/distribution/blob/5ae14a65cc446c1e6f7083ac47adeafc806134a6/packages/ui/emulationstation/config/es_input.cfg#L33">RG351MP</a></strong></td><td><strong><a href="https://github.com/JustEnoughLinuxOS/distribution/blob/5ae14a65cc446c1e6f7083ac47adeafc806134a6/packages/ui/emulationstation/config/es_input.cfg#L6">RG351P/M</a></strong></td><td><strong><a href="https://github.com/JustEnoughLinuxOS/distribution/blob/5ae14a65cc446c1e6f7083ac47adeafc806134a6/packages/ui/emulationstation/config/es_input.cfg#L6">RG351V</a></strong></td></tr>
<tr><td>
A (EAST) </td><td><strong>1</strong> (305 BTN_EAST)</td><td><strong>1</strong> (305 BTN_EAST)</td><td><strong>0</strong> (305 BTN_EAST)</td><td><strong>0</strong> (305 BTN_EAST)</td></tr>
<tr><td>
B (SOUTH) </td><td><strong>0</strong> (304 BTN_SOUTH)</td><td><strong>0</strong> (304 BTN_SOUTH)</td><td><strong>1</strong> (304 BTN_SOUTH)</td><td><strong>1</strong> (304 BTN_SOUTH)</td></tr>
<tr><td>
X (NORTH) </td><td><strong>2</strong> (307 BTN_NORTH)</td><td><strong>2</strong> (307 BTN_NORTH)</td><td><strong>2</strong> (307 BTN_NORTH)</td><td><strong>2</strong> (307 BTN_NORTH)</td></tr>
<tr><td>
Y (WEST) </td><td><strong>3</strong> (308 BTN_WEST)</td><td><strong>3</strong> (308 BTN_WEST)</td><td><strong>3</strong> (306 BTN_C)</td><td><strong>3</strong> (306 BTN_C)</td></tr>
<tr><td>
L1 </td><td><strong>4</strong> (310 BTN_TL)</td><td><strong>4</strong> (310 BTN_TL)</td><td><strong>4</strong> (308 BTN_WEST)</td><td><strong>4</strong> (308 BTN_WEST)</td></tr>
<tr><td>
L2 </td><td><strong>6</strong> (312 BTN_TL2)</td><td><strong>6</strong> (312 BTN_TL2)</td><td><strong>10</strong> (314 BTN_SELECT)</td><td><strong>10</strong> (314 BTN_SELECT)</td></tr>
<tr><td>
L3 </td><td><strong>11</strong> (317 BTN_THUMBL)</td><td><strong>14</strong> (706 BTN_TRIGGER_HAPPY3)</td><td><strong>8</strong> (312 BTN_TL2)</td><td><strong>8</strong> (312 BTN_TL2)</td></tr>
<tr><td>
R1 </td><td><strong>5</strong> (311 BTN_TR)</td><td><strong>5</strong> (311 BTN_TR)</td><td><strong>5</strong> (309 BTN_Z)</td><td><strong>5</strong> (309 BTN_Z)</td></tr>
<tr><td>
R2 </td><td><strong>7</strong> (313 BTN_TR2)</td><td><strong>7</strong> (313 BTN_TR2)</td><td><strong>11</strong> (315 BTN_START)</td><td><strong>11</strong> (315 BTN_START)</td></tr>
<tr><td>
R3 </td><td><strong>12</strong> (318 BTN_THUMBR)</td><td><strong>15</strong> (707 BTN_TRIGGER_HAPPY4)</td><td><strong>9</strong> (313 BTN_TR2)</td><td><strong>9</strong> (313 BTN_TR2; F)</td></tr>
<tr><td>
SELECT </td><td><strong>8</strong> (314 BTN_SELECT)</td><td><strong>12</strong> (704 BTN_TRIGGER_HAPPY1)</td><td><strong>7</strong> (311 BTN_TR)</td><td><strong>7</strong> (311 BTN_TR)</td></tr>
<tr><td>
START </td><td><strong>9</strong> (315 BTN_START)</td><td><strong>13</strong> (705 BTN_TRIGGER_HAPPY2)</td><td><strong>6</strong> (310 BTN_TL)</td><td><strong>6</strong> (310 BTN_TL)</td></tr>
<tr><td>
HOTKEY ENABLE </td><td><strong>10</strong> (316) </td><td><strong>12</strong> (704 BTN_TRIGGER_HAPPY1) </td><td><strong>7</strong> (311 BTN_TR) </td><td><strong>7</strong> (311 BTN_TR) </td></tr>
<tr><td>
DPAD UP </td><td><strong>13</strong> (544 BTN_DPAD_UP) </td><td><strong>8</strong> (544 BTN_DPAD_UP) </td><td><strong>hat(1)</strong> (16 -ve ABS_HAT0Y -1)</td><td><strong>hat(1)</strong> (16 -ve ABS_HAT0Y -1)</td></tr>
<tr><td>
DPAD DOWN </td><td><strong>14</strong> (545 BTN_DPAD_DOWN) </td><td><strong>9</strong> (545 BTN_DPAD_DOWN) </td><td><strong>hat(4)</strong> (16 +ve ABS_HAT0Y 1)</td><td><strong>hat(4)</strong> (16 +ve ABS_HAT0Y 1)</td></tr>
<tr><td>
DPAD LEFT </td><td><strong>15</strong> (546 BTN_DPAD_LEFT) </td><td><strong>10</strong> (546 BTN_DPAD_LEFT) </td><td><strong>hat(8)</strong> (17 -ve ABS_HAT0X -1)</td><td><strong>hat(8)</strong> (17 -ve ABS_HAT0X -1)</td></tr>
<tr><td>
DPAD RIGHT </td><td><strong>16</strong> (547 BTN_DPAD_RIGHT) </td><td><strong>11</strong> (547 BTN_DPAD_RIGHT) </td><td><strong>hat(2)</strong> (17 +ve ABS_HAT0X 1)</td><td><strong>hat(2)</strong> (17 +ve ABS_HAT0X 1)</td></tr>
<tr><td>
<strong>ANALOG</strong></td><td><strong><a href="https://github.com/JustEnoughLinuxOS/distribution/blob/5ae14a65cc446c1e6f7083ac47adeafc806134a6/packages/ui/emulationstation/config/es_input.cfg#L63">RG552/RG503/RG353P</a></strong></td><td><strong><a href="https://github.com/JustEnoughLinuxOS/distribution/blob/5ae14a65cc446c1e6f7083ac47adeafc806134a6/packages/ui/emulationstation/config/es_input.cfg#L33">RG351MP</a></strong></td><td><strong><a href="https://github.com/JustEnoughLinuxOS/distribution/blob/5ae14a65cc446c1e6f7083ac47adeafc806134a6/packages/ui/emulationstation/config/es_input.cfg#L6">RG351P/M</a></strong></td><td><strong><a href="https://github.com/JustEnoughLinuxOS/distribution/blob/5ae14a65cc446c1e6f7083ac47adeafc806134a6/packages/ui/emulationstation/config/es_input.cfg#L6">RG351V</a></strong></td></tr>
<tr><td>
LEFTANALOGLEFT </td><td><strong>AXIS 0 -ve</strong> (ABS_X)</td><td><strong>AXIS 0 -ve</strong> (ABS_X)</td><td><strong>AXIS 2 +ve</strong> (ABS_Z 4095)</td><td><strong>AXIS 2 +ve</strong> (ABS_Z 4095)</td></tr>
<tr><td>
LEFTANALOGRIGHT </td><td><strong>AXIS 0 +ve</strong> (ABS_X)</td><td><strong>AXIS 0 +ve</strong> (ABS_X)</td><td><strong>AXIS 2 -ve (ABS_Z 0)</strong></td><td><strong>AXIS 2 -ve</strong> (ABS_Z 0)</td></tr>
<tr><td>
LEFTANALOGUP </td><td><strong>AXIS 1 -ve</strong> (ABS_Y)</td><td><strong>AXIS 1 -ve</strong> (ABS_Y)</td><td><strong>AXIS 3 +ve</strong> (ABS_RX 4040)</td><td><strong>AXIS 3 +ve</strong> (ABS_RX 4040)</td></tr>
<tr><td>
LEFTANALOGDOWN </td><td><strong>AXIS 1 +ve</strong> (ABS_Y)</td><td><strong>AXIS 1 +ve</strong> (ABS_Y)</td><td><strong>AXIS 3 -ve</strong> (ABS_RX 0)</td><td><strong>AXIS 3 -ve</strong> (ABS_RX 0)</td></tr>
<tr><td>
RIGHTANALOGLEFT </td><td><strong>AXIS 2 -ve</strong> (ABS_RX)</td><td><strong>AXIS 2 -ve</strong> (ABS_RX)</td><td><strong>AXIS 4 -ve</strong> (ABS_RY)</td><td></td></tr>
<tr><td>
RIGHTANALOGRIGHT </td><td><strong>AXIS 2 +ve</strong> (ABS_RX)</td><td><strong>AXIS 2 +ve</strong> (ABS_RX)</td><td><strong>AXIS 4 +ve</strong> (ABS_RY)</td><td></td></tr>
<tr><td>
RIGHTANALOGUP </td><td><strong>AXIS 3 -ve</strong> (ABS_RY)</td><td><strong>AXIS 3 -ve (ABS_RY)</strong></td><td><strong>AXIS 5 -ve</strong> (ABS_RZ)</td><td></td></tr>
<tr><td>
RIGHTANALOGDOWN </td><td><strong>AXIS 3 +ve</strong> (ABS_RY)</td><td><strong>AXIS 3 +ve (ABS_RY)</strong></td><td><strong>AXIS 5 +ve</strong> (ABS_RZ)</td><td></td>
</tr>
</table>
Moved to [https://jelos.org/play/controls/](https://jelos.org/play/controls/)

View file

@ -1,58 +1 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
# Network Play
RetroArch network play for up to 4 players is available across all WIFI enabled devices supported by JELOS. Before continuing, please make sure that all devices are updated to the same version of the operating system.
## Enabling Network Play
Before netplay is available, it must be enabled on each participating device.
* Select Games Settings -> Netplay Settings
* NetPlay -> Enabled
* Index Games
## LAN based Network Play
Using this feature is simple. For LAN based play, connect your devices to your WIFI network. A minimum of one host and one client are required for play.
### Local LAN Play (HOST)
* Select Network Settings.
* Disable Local Play Mode.
* Select 1 (Host).
* Choose a game and press Y.
* Select Netplay Options.
* Select Host a Netplay Session.
### Local LAN Play (CLIENTS)
* Select Network Settings.
* Disable Local Play Mode.
* Select 2-4 (Clients).
* Choose a game and press Y.
* Select Netplay Options.
* Select Connect to a Netplay Session.
## Device to Device Network Play
Device to device connections will automatically generate and connect to a local WIFI network. As with LAN based play, one host and one client are required for play. Using the same version of JELOS on each device is REQUIRED or devices will not connect. Device to device connections are intended for local play only, retroAchievements, scraping, and system updates will not be available in this mode.
### Device to Device Play (HOST)
* Select Network Settings.
* Enable Local Play Mode.
* Select 1 (Host).
* Choose a game and press Y.
* Select Netplay Options.
* Select Host a Netplay Session.
### Device to Device Play (CLIENTS)
* Select Network Settings.
* Enable Local Play Mode.
* Select 2-4 (Clients).
* Choose a game and press Y.
* Select Netplay Options.
* Select Connect to a Netplay Session.
## GameBoy GameLink
JELOS supports GameLink play for GameBoy and GameBoy Color. To use, on each device select the appropriate core for the game being started in advanced settings for the game, or for the system.
|Core|Features|
|----|----|
|TGBDual * Recommended|Support for multiplayer GameLink play, including battle/trading.|
|Gambatte|Support for multiplayer GameLink play.|
Moved to [https://jelos.org/play/netplay/](https://jelos.org/play/netplay/)

View file

@ -1,69 +1 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
# Performance and Battery Life Optimizations
JELOS provides a variety of knobs and switches that allow the user to optimize for battery life or performance globally, and on a per system and per game basis. For emulating 6th generation and later systems, we recommend installing JELOS on internal storage if available to reduce IO bottlenecks reading and writing shader cache.
## Optimizing Performance
Optimizing for performance will have significant impact on battery life, however it will provide the best experience for more demanding emulators.
### Recommended Global Settings
#### AMD / Intel based devices
|Enabled CPU Threads|Cooling Profile|Max TDP|Scaling Governor|Enhanced Power Saving|WIFI Power Saving|
|----|----|----|----|----|
|All|Moderate|18w|Balanced|Off|Off|
#### ARM based devices
|Enabled CPU Threads|Cooling Profile|Scaling Governor|Enhanced Power Saving|WIFI Power Saving|
|----|----|----|----|----|
|All|Moderate<sup>1</sup>|Balanced|Off|Off|
> Note: It's recommended to reboot the device after disabling Enhanced Power Saving.
## Optimizing Battery Life
JELOS includes an `Enhanced Power Saving` mode which is available in the `System Settings` menu. This option provides a variety of sub options that when enabled tune your device for optimal battery life without immediately sacrificing performance.
|Feature|Function|May Affect Stability|
|----|----|----|
|CPU Power Saving|Tunes the CPU/SoC to preference battery life over performance.|No|
GPU Performance Profile<sup>1</sup>|User configurable to force the GPU into the preferred performance state|No|
Audio Power Saving|Enables the audio device to operate in a low power mode.|No|
PCIE Active State Power Management|Forces a low power state for PCI and PCIe connections.|Yes|
Enable Wake Events|Enables PCI wakeup signalling to allow devices to enter low power states.|Yes|
Runtime Power Management|Enables USB idle power management, and configures usb devices to autosuspend.|Yes|
### Recommended Settings For Optimal Battery Life
Enable Enhanced Power Saving, and enable all options. If the device has undesired behavior, disable the options that may effect stability and reboot the device.
#### AMD / Intel based devices
|Enabled CPU Threads|Cooling Profile|Max TDP|Scaling Governor|GPU Performance Profile|Enhanced Power Saving|WIFI Power Saving|
|----|----|----|----|----|----|----|
|4|Quiet<sup>1</sup>|4.5w|Powersave|Battery Focus|On|On|
#### ARM based devices
|Enabled CPU Threads|Cooling Profile|CPU Governor|Enhanced Power Saving|WIFI Power Saving|
|----|----|----|----|----|
|4|Quiet<sup>1</sup>|Powersave|Battery Focus|On|On|
#### AMD / Intel Recommended Settings Per System
|Manufacturer|System|Enabled CPU Threads|Cooling Profile|Max TDP|Scaling Governor|GPU Performance Profile<sup>1</sup>|Enhanced Power Saving|WIFI Power Saving|
|----|----|----|----|----|----|----|----|----|
|Microsoft|Xbox|6|Quiet|22w|Schedutil|Balanced|On|On|
|Nintendo|GameCube, Wii|4|Quiet|15W|Schedutil|Balanced|On|On|
|Nintendo|Wii U, Switch|6|Moderate|22w|Schedutil|Balanced|On|On|
|Sony|PS2|4|Quiet|18w|Schedutil|Balanced|On|
|Sony|PSP|2|Quiet|9w|Powersave|Battery Focus|On|On|
#### ARM Devices
|Manufacturer|System|Enabled CPU Threads|Cooling Profile|Scaling Governor|Enhanced Power Saving|WIFI Power Saving|
|----|----|----|----|----|----|----|
|Nintendo|64|All|Moderate<sup>1</sup>|Performance|On|On|
|Nintendo|GameCube, Wii|All|Moderate<sup>1</sup>|Performance|On|On|
|Sega|Saturn, Dreamcast|All|Moderate<sup>1</sup>|Performance|On|On|
|Sony|PSP|All|Moderate<sup>1</sup>|Performance|On|On|
Note: Emulating 6th generation and newer consoles will result in lower runtimes as they require significant power draw.
> <sup>1</sup> Only available when "Enhanced Power Saving" is enabled or if the feature is supported.
Moved to [https://jelos.org/configure/optimizations/](https://jelos.org/configure/optimizations/)

View file

@ -112,7 +112,7 @@ This document describes all available systems emulators and cores available for
|SNK|Neo Geo Pocket (ngp)|1998|`ngp`|.ngc .ngp .zip .7z|**retroarch:** beetle_ngp (default)<br>**retroarch:** race<br>|
|SNK|Neo Geo Pocket Color (ngpc)|1999|`ngpc`|.ngc .zip .7z|**retroarch:** beetle_ngp (default)<br>**retroarch:** race<br>|
|Sony|PlayStation (psx)|1994|`psx`|.bin .cue .img .mdf .pbp .toc .cbn .m3u .ccd .chd .iso|**retroarch:** beetle_psx (default)<br>**Duckstation:** duckstation-sa<br>**retroarch:** duckstation<br>**retroarch:** swanstation<br>|
|Sony|PlayStation 2 (ps2)|2000|`ps2`|.iso .mdf .nrg .bin .img .dump .gz .cso .chd|**retroarch:** pcsx2 (default)<br>**pcsx2:** pcsx2-sa<br>|
|Sony|PlayStation 2 (ps2)|2000|`ps2`|.iso .mdf .nrg .bin .img .dump .gz .cso .chd|**pcsx2:** pcsx2-sa (default)<br>**retroarch:** pcsx2<br>|
|Sony|PlayStation 3 (ps3)|2006|`ps3`|.ps3 .bin|**rpcs3:** rpcs3-sa (default)<br>|
|Sony|PlayStation Portable (psp)|2004|`psp`|.iso .cso .pbp|**ppsspp:** ppsspp-sa (default)<br>**retroarch:** ppsspp<br>|
|Sony|PlayStation Vita (psvita)|2011|`launcher`|.sh|**vita3k:** vita3k-sa (default)<br>|

View file

@ -70,6 +70,7 @@ This document describes all available systems emulators and cores available for
|Nintendo|Game Boy Advance (Hacks) (gbah)|2001|`gbah`|.gba .zip .7z|**retroarch:** mgba (default)<br>**retroarch:** gbsp<br>**retroarch:** vbam<br>**retroarch:** vba_next<br>**retroarch:** beetle_gba<br>|
|Nintendo|Game Boy Color (gbc)|1998|`gbc`|.gb .gbc .zip .7z|**retroarch:** gambatte (default)<br>**retroarch:** sameboy<br>**retroarch:** gearboy<br>**retroarch:** tgbdual<br>**retroarch:** mgba<br>**retroarch:** vbam<br>|
|Nintendo|Game Boy Color (Hacks) (gbch)|1998|`gbch`|.gb .gbc .zip .7z|**retroarch:** gambatte (default)<br>**retroarch:** sameboy<br>**retroarch:** gearboy<br>**retroarch:** tgbdual<br>**retroarch:** mgba<br>**retroarch:** vbam<br>|
|Nintendo|GameCube (gamecube)|2001|`gamecube`|.gcm .iso .gcz .ciso .wbfs .rvz .dol|**dolphin:** dolphin-sa-gc (default)<br>**retroarch:** dolphin<br>|
|Nintendo|MSU-1 (snesmsu1)|2012|`snesmsu1`|.smc .fig .sfc .swc .zip .7z|**retroarch:** snes9x (default)<br>**retroarch:** beetle_supafaust<br>|
|Nintendo|N64 (n64)|1996|`n64`|.z64 .n64 .v64 .zip .7z|**retroarch:** mupen64plus_next (default)<br>**retroarch:** mupen64plus<br>**retroarch:** parallel_n64<br>**mupen64plus:** mupen64plus-sa<br>|
|Nintendo|NES (Hacks) (nesh)|1985|`nesh`|.nes .unif .unf .zip .7z|**retroarch:** nestopia (default)<br>**retroarch:** fceumm<br>**retroarch:** quicknes<br>**retroarch:** mesen<br>|
@ -80,6 +81,7 @@ This document describes all available systems emulators and cores available for
|Nintendo|Super Nintendo (Hacks) (snesh)|1991|`snesh`|.smc .fig .sfc .swc .zip .7z|**retroarch:** snes9x (default)<br>**retroarch:** snes9x2010<br>**retroarch:** snes9x2002<br>**retroarch:** snes9x2005_plus<br>**retroarch:** beetle_supafaust<br>**retroarch:** bsnes<br>**retroarch:** bsnes_mercury_performance<br>**retroarch:** bsnes_hd_beta<br>|
|Nintendo|Super Nintendo (snes)|1991|`snes`|.smc .fig .sfc .swc .zip .7z|**retroarch:** snes9x (default)<br>**retroarch:** snes9x2010<br>**retroarch:** snes9x2002<br>**retroarch:** snes9x2005_plus<br>**retroarch:** beetle_supafaust<br>**retroarch:** bsnes<br>**retroarch:** bsnes_mercury_performance<br>**retroarch:** bsnes_hd_beta<br>|
|Nintendo|Virtual Boy (virtualboy)|1995|`virtualboy`|.vb .zip .7z|**retroarch:** beetle_vb (default)<br>|
|Nintendo|Wii (wii)|2006|`wii`|.gcm .iso .gcz .ciso .wbfs .rvz .dol .wad|**dolphin:** dolphin-sa-wii (default)<br>**retroarch:** dolphin<br>|
|Panasonic|3DO (3do)|1993|`3do`|.iso .bin .chd .cue|**retroarch:** opera (default)<br>|
|Philips|VideoPac (videopac)|1978|`videopac`|.bin .zip .7z|**retroarch:** o2em (default)<br>|
|Sammy|Atomiswave (atomiswave)|2003|`atomiswave`|.lst .bin .dat .zip .7z|**retroarch:** flycast2021<br>**retroarch:** flycast32 (default)<br>**retroarch:** flycast<br>**flycast:** flycast-sa<br>|

View file

@ -60,7 +60,7 @@ This document describes all available systems emulators and cores available for
|NEC|TurboGrafx-16 (tg16)|1989|`tg16`|.pce .bin .zip .7z|**retroarch:** beetle_pce_fast (default)<br>**retroarch:** beetle_pce<br>**retroarch:** beetle_supergrafx<br>|
|NEC|TurboGrafx-CD (tg16cd)|1989|`tg16cd`|.cue .ccd .chd .toc .m3u|**retroarch:** beetle_pce_fast (default)<br>**retroarch:** beetle_pce<br>**retroarch:** beetle_supergrafx<br>|
|Nesbox|TIC-80 (tic-80)|2017|`tic-80`|.tic|**retroarch:** tic80 (default)<br>|
|Nintendo|DS (nds)|2005|`nds`|.nds .zip .7z|**drastic:** drastic-sa (default)<br>**retroarch:** melonds<br>**retroarch:** desmume<br>|
|Nintendo|DS (nds)|2005|`nds`|.nds .zip .7z|**drastic:** drastic-sa<br>**retroarch:** melonds (default)<br>**melonds:** melonds-sa<br>**retroarch:** desmume<br>|
|Nintendo|Famicom (famicom)|1983|`famicom`|.nes .unif .unf .zip .7z|**retroarch:** nestopia (default)<br>**retroarch:** fceumm<br>**retroarch:** quicknes<br>**retroarch:** mesen<br>|
|Nintendo|Famicom Disk System (fds)|1986|`fds`|.fds .zip .7z|**retroarch:** nestopia (default)<br>**retroarch:** fceumm<br>**retroarch:** quicknes<br>|
|Nintendo|Game and Watch (gameandwatch)|1980|`gameandwatch`|.mgw .zip .7z|**retroarch:** gw<br>|
@ -70,7 +70,7 @@ This document describes all available systems emulators and cores available for
|Nintendo|Game Boy Advance (Hacks) (gbah)|2001|`gbah`|.gba .zip .7z|**retroarch:** mgba (default)<br>**retroarch:** gbsp<br>**retroarch:** vbam<br>**retroarch:** vba_next<br>**retroarch:** beetle_gba<br>|
|Nintendo|Game Boy Color (gbc)|1998|`gbc`|.gb .gbc .zip .7z|**retroarch:** gambatte (default)<br>**retroarch:** sameboy<br>**retroarch:** gearboy<br>**retroarch:** tgbdual<br>**retroarch:** mgba<br>**retroarch:** vbam<br>|
|Nintendo|Game Boy Color (Hacks) (gbch)|1998|`gbch`|.gb .gbc .zip .7z|**retroarch:** gambatte (default)<br>**retroarch:** sameboy<br>**retroarch:** gearboy<br>**retroarch:** tgbdual<br>**retroarch:** mgba<br>**retroarch:** vbam<br>|
|Nintendo|GameCube (gamecube)|2001|`gamecube`|.gcm .iso .gcz .ciso .wbfs .rvz .dol|**retroarch:** dolphin (default)<br>|
|Nintendo|GameCube (gamecube)|2001|`gamecube`|.gcm .iso .gcz .ciso .wbfs .rvz .dol|**dolphin:** dolphin-sa-gc (default)<br>**retroarch:** dolphin<br>|
|Nintendo|MSU-1 (snesmsu1)|2012|`snesmsu1`|.smc .fig .sfc .swc .zip .7z|**retroarch:** snes9x (default)<br>**retroarch:** beetle_supafaust<br>|
|Nintendo|N64 (n64)|1996|`n64`|.z64 .n64 .v64 .zip .7z|**retroarch:** mupen64plus_next (default)<br>**retroarch:** mupen64plus<br>**retroarch:** parallel_n64<br>**mupen64plus:** mupen64plus-sa<br>|
|Nintendo|NES (Hacks) (nesh)|1985|`nesh`|.nes .unif .unf .zip .7z|**retroarch:** nestopia (default)<br>**retroarch:** fceumm<br>**retroarch:** quicknes<br>**retroarch:** mesen<br>|
@ -81,7 +81,7 @@ This document describes all available systems emulators and cores available for
|Nintendo|Super Nintendo (Hacks) (snesh)|1991|`snesh`|.smc .fig .sfc .swc .zip .7z|**retroarch:** snes9x (default)<br>**retroarch:** snes9x2010<br>**retroarch:** snes9x2002<br>**retroarch:** snes9x2005_plus<br>**retroarch:** beetle_supafaust<br>**retroarch:** bsnes<br>**retroarch:** bsnes_mercury_performance<br>**retroarch:** bsnes_hd_beta<br>|
|Nintendo|Super Nintendo (snes)|1991|`snes`|.smc .fig .sfc .swc .zip .7z|**retroarch:** snes9x (default)<br>**retroarch:** snes9x2010<br>**retroarch:** snes9x2002<br>**retroarch:** snes9x2005_plus<br>**retroarch:** beetle_supafaust<br>**retroarch:** bsnes<br>**retroarch:** bsnes_mercury_performance<br>**retroarch:** bsnes_hd_beta<br>|
|Nintendo|Virtual Boy (virtualboy)|1995|`virtualboy`|.vb .zip .7z|**retroarch:** beetle_vb (default)<br>|
|Nintendo|Wii (wii)|2006|`wii`|.gcm .iso .gcz .ciso .wbfs .rvz .dol .wad|**retroarch:** dolphin (default)<br>|
|Nintendo|Wii (wii)|2006|`wii`|.gcm .iso .gcz .ciso .wbfs .rvz .dol .wad|**dolphin:** dolphin-sa-wii (default)<br>**retroarch:** dolphin<br>|
|Panasonic|3DO (3do)|1993|`3do`|.iso .bin .chd .cue|**retroarch:** opera (default)<br>|
|Philips|VideoPac (videopac)|1978|`videopac`|.bin .zip .7z|**retroarch:** o2em (default)<br>|
|Sammy|Atomiswave (atomiswave)|2003|`atomiswave`|.lst .bin .dat .zip .7z|**retroarch:** flycast2021<br>**retroarch:** flycast32 (default)<br>**retroarch:** flycast<br>**flycast:** flycast-sa<br>|

View file

@ -1,180 +1 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
# Configuring Rclone in JELOS
JELOS now supports mounting cloud volumes, and backing up and restoring save games and save states to your cloud provider. Using Rclone is easy, however configuration must be performed manually before it will function correctly.
rclone.cfg is stored in `/storage/.config/rclone/rclone.conf` and can be copied from another device but only after the destination device has booted into Jelos (so copy to secondary sd, boot device, launch 351files, copy from there to proper path above)
## Setup Rclone
### Credentialed Access
To set up rclone, open an ssh connection to your handheld using PowerShell ssh, putty, or ssh on Linux and Mac.
* Username: root (all lower case!)
* Password: (To get the root password, press Start, then Select System Settings.)
* Connection: (Your device, example RG552 or RG351MP.)
### Example using PowerShell ssh, Linux, or macOS:
```ssh root@RG552```
### Setting up Rclone
Now that you're connected you will need to configure Rclone. This process is menu driven, but also requires steps on your PC. To complete configuration of Rclone, run `rclone config` in your ssh session and then follow the provider documentation and headless configuration steps to configure it for your cloud provider of choice.
* [Rclone Provider Documentation](https://rclone.org/#providers)
* [Rclone Headless Configuration](https://rclone.org/remote_setup/)
[See detailed setup example below](https://github.com/JustEnoughLinuxOS/distribution/documentation/SETUP_CLOUD_DRIVES.md#setting-up-rclone-detailed-example)
### Using Rclone
In JELOS you are able to mount your cloud drive like any other storage device, as long as you are network connected. To mount your cloud drive, press Start, select Network Settings, and then select the Mount Cloud Drive option. This drive is available on /storage/cloud by default, and is accessible from ssh and from 351Files. To mount the cloud drive over ssh use ```rclonectl mount``` to mount the drive and ```rclonectl unmount``` to unmount it.
> Note: Mounting the cloud drive is not persistent, you will need to select it before use.
### Using Cloud Backup and Restore
In the tools menu you will find two options, `Cloud Backup`, and `Cloud Restore`. These tools will back up or restore your save games and save states by connecting your cloud drive and copying them. These tools are configurable by editing /storage/.config/rsync.conf and /storage/.config/rsync-rules.conf.
> Note: The cloud backup and restore tools are destructive, but they do not delete data by default. Deletes are left to the user to manage.
#### rsync.conf
The rsync.conf configuration file contains parameters used by the cloud tools that provide the path for your cloud drive to be mounted, the path to sync the data from, the destination for the sync and rsync options for cloud backup and restore. The configuration is user editable, and the defaults are as follows:
```
### This is the path where your cloud volume is mounted.
MOUNTPATH="/storage/cloud"
### This is the path to your game folder on your cloud drive.
SYNCPATH="GAMES"
### This is the path we are backup up from.
BACKUPPATH="/storage/roms"
### This allows changes to the rsync options for cloud_backup (pending stable release)
RSYNCOPTSBACKUP="-raiv --prune-empty-dirs"
### This allows changes to the rsync options for cloud_restore (pending stable release)
RSYNCOPTSRESTORE="-raiv"
```
#### rsync-rules.conf
The rsync-rules.conf configuration file contains the pattern used by rsync to know which files to backup and restore. This file is user editable. The default settings are as follows:
```
# This is a required rule for subdirectory matching.
+ */
### Do not include BIOS.
- bios/**
### Retroarch saves
+ *.sav
+ *.srm
+ *.auto
+ *.state*
### This is a required rule to exclude all other file types.
- *
```
To create custom match rules, use - to exclude and + to include. Use caution as a mismatched rule can copy every single file from the source path or no files at all.
## Setting Up Rclone detailed example
This example configures rclone to use Dropbox
Rclone provide detailed examples for connecting to all supported cloud servers, including [Rclone Dropbox example](https://rclone.org/dropbox/)
### Configure cloud backup connection on JELOS device using ssh
From the terminal command line type
```
rclone version
```
and press `enter`
Note the version number, which is required for a later step
![Rclone version installed in JELOS](https://github.com/JustEnoughLinuxOS/distribution/blob/gh-pages/images/ssh%20rclone%20version.png "Check version of rclone")
Now type
```
rclone config
```
and press `enter`
type `n` to create a new remote site
type in a name for the site (use a name without spaces), then press `enter`
> rclone suggest using `remote`, but in this example the remote site is called `rg503`
> dont include spaces in the sites name. Rclone does allow names that include spaces, but rsync will fail if a site name with spaces is used in the cloud backup script.
![Type: rclone config](https://github.com/JustEnoughLinuxOS/distribution/blob/gh-pages/images/ssh%20rclone%20config.png "rclone config")
Choose from the list of cloud providers that is displayed. For Dropbox, type `12` and `enter` in this example
![Select cloud provider](https://github.com/JustEnoughLinuxOS/distribution/blob/gh-pages/images/ssh%20rclone%20config%20select%20dropbox.png "type 12 for Dropbox")
*The next options displayed are slightly different from the Dropbox example on rclone website*
For client_id and client_secret press `enter` and `enter` to skip, or read [Rclone Dropbox example](https://rclone.org/dropbox/) for details about setting up your own App ID (rclone App ID is shared with all rclone users by default)
Type `n` to skip editing the advanced config
![Skip Client ID, secret and advanced config](https://github.com/JustEnoughLinuxOS/distribution/blob/gh-pages/images/ssh%20rclone%20config%20client%20id.png "type enter to skip, then n for no")
For auto config, select `n` for remote or headless machine (i.e. JELOS device that doesn't have a web browser)
![No auto-config for remote or headless machine](https://github.com/JustEnoughLinuxOS/distribution/blob/gh-pages/images/ssh%20rclone%20config%20remote%20machine.png "type n for no")
Instructions are provided explaining how to authorize the connection from the remote device to the cloud service
![Device with web-browser is required for authorization](https://github.com/JustEnoughLinuxOS/distribution/blob/gh-pages/images/ssh%20rclone%20config%20authorize%20and%20paste%20token.png "Use pc to authorize connection")
### Install and run rclone on machine with a web-browser to authorize connection to cloud service
Download rclone on a device with a web-browser so rclone can use a web-page to authorize the connection by allowing you to login with your authorization credentials for the cloud service
[Rclone download server](https://downloads.rclone.org/ "Download same version of rclone for authorisation")
> Download the same version of rclone as is installed on JELOS device, as noted above.
Use terminal window (e.g. `CMD` on Windows) to browse to rclone executable and run
```
rclone authorize dropbox
```
and press `enter`
![Authorize dropbox for rclone](https://github.com/JustEnoughLinuxOS/distribution/blob/gh-pages/images/rclone%20authorise%20dropbox.png "Authorize rclone from terminal command prompt")
Rclone will launch a web page to enable login to the cloud service and authorization of the connection
![Authorize dropbox for rclone](https://github.com/JustEnoughLinuxOS/distribution/blob/gh-pages/images/rclone%20authorise%20from%20pc.png "Confirm authorization of rclone connection")
After successful authorization, the terminal window will display the authorization token that needs to be pasted into JELOS ssh
![Copy authorization token](https://github.com/JustEnoughLinuxOS/distribution/blob/gh-pages/images/rclone%20authorise%20login%20then%20paste%20into%20remote%20ssh.png "Copy token to paste into JELOS ssh")
Copy the entire token
### Update JELOS with authorization token
Paste authorization token into JELOS command prompt, then type `y` to confirm that the remote connection is correct
![Paste authorization token into ssh](https://github.com/JustEnoughLinuxOS/distribution/blob/gh-pages/images/ssh%20rclone%20config%20authorize%20and%20paste%20token.png "Paste token at config_token prompt")
The connection is now configured and can be tested (`q` to quit rclone config)
Type
```
rclone lsd rg503:
```
where `rg503` is the name of the remote connection (rclone example names the remote connection as `remote`)
> **don't forget to add `:` to the name of remote connection**
The names of the top-level folders within Dropbox cloud service will be displayed
![Dropbox folder names are displayed](https://github.com/JustEnoughLinuxOS/distribution/blob/gh-pages/images/ssh%20rclone%20list%20top-level%20directories%20on%20dropbox.png "Top-level folder names in Dropbox cloud service")
Now that the connection is set up and authorized [Using Rclone](https://github.com/JustEnoughLinuxOS/distribution/documentation/SETUP_CLOUD_DRIVES.md#using-rclone) and [Using Cloud Backup and Restore](https://github.com/JustEnoughLinuxOS/distribution/documentation/SETUP_CLOUD_DRIVES.md#using-cloud-backup-and-restore) explain how to configure and use the connection for backup
Moved to [https://jelos.org/configure/cloud-sync/](https://jelos.org/configure/cloud-sync/)

View file

@ -1,32 +1 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
# Using Moonlight Game Streaming
JELOS now supports Moonlight Game Streaming, which allows to connect to your local computer running [Moonlight](https://moonlight-stream.org/) and stream AAA games.
## Setup Moonlight on your local PC
Please follow standard guide to setup Moonlight on your home PC, [link](https://github.com/moonlight-stream/moonlight-docs/wiki/Setup-Guide).
## Setup Moonlight in JELOS
The setup requires pairing with your local PC running Moonlight and then populating Moonlight Streaming tab with all your games. After those are completed, you can select an individual game to start streaming.
### Pair with your local PC
* On your JELOS device press "start" button to go into Emulation Station Main Menu
* Select "MOONLIGHT GAME STREAMING" submenu
* Please note the "PAIRING PIN" at the bottom of the window
* You can also specify "SERVER IP" address, but it should be detected automatically
* Select "PAIR WITH SERVER" option
* Now, go to the local PC and enter PIN to continue the pairing process
* You should see a confirmation message on your device
* The paring process should complete
After pairing was successful, select "UPDATE MOONLIGHT GAMES" option. This should query the server for the list of all games and populate Moonlight Streaming tab in Emulation Station.
## Play Games
Find Moonlight Game Streaming tab in Emulation Station. Select the game you want to play. The game should start and you should be able to interact with it.
## Remote Playing over internet
* The easiest option is to add your device to your Tailscale network with your local PC, [link](https://github.com/JustEnoughLinuxOS/distribution/documentation/SETUP_VPN_TAILSCALE.md).
* Moonlight allows to open several ports to connect to the local PC to stream over the internet. Setup might be somewhat complicated.
* Another option is to use [WireGuard VPN](https://github.com/JustEnoughLinuxOS/distribution/documentation/SETUP_VPN_WIREGUARD.md) to setup the connection with the device. This approach requires only a single open port, but it requires WireGuard server to be running on your local network.
Moved to [https://jelos.org/systems/moonlight/](https://jelos.org/systems/moonlight/)

View file

@ -1,34 +1 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
# ZeroTier quickstart
JELOS now supports ZeroTier. ZeroTier allows you to build robust peer-to-peer networks, connetcting all of your devices together. It's very similar to [Tailscale](https://github.com/JustEnoughLinuxOS/distribution/documentation/SETUP_VPN_TAILSCALE.md).
## Step 1: Sign up for ZeroTier account
[Sign up for a ZeroTier account](https://my.zerotier.com).
## Step 2: Add other devices to your ZeroTier network
You can add devices that you want connected to the ZeroTier network. One device can be connected to multiple networks, so you can even have different networks for different purposes.
It's most likely going to run everywhere you want it, since the software exists for OpenWRT, Desktop Linux, Windows, Android, etc.
[Download ZeroTier](https://www.zerotier.com/download)
## Step 3: Add your device to your network
JELOS Emulation Station has customized UI with ZeroTier support.
- Create a file called "zerotier-networks" in ```/storage/.config/zerotier-networks```, containing one network ID per line
- Press "start" button to go into Emulation Station Main Menu.
- Select Network Settings submenu.
- Select "ZeroTier VPN" and turn it on.
- Select "Back" button to exit setting dialog.
Don't forget to authenticate your device in the ZerTier [control panel](my.zerotier.com) after starting the service. It should show up on the webpage.
You can also use the traditional way of adding a network ID by using ```zerotier-cli join``` through SSH shell, but in this cae the zerotier-networks file shouldn't be present.
## Links
* ZeroTier homepage [link](https://zerotier.com/)
* Script used to add networks on start [link](https://github.com/JustEnoughLinuxOS/distribution/blob/dev/packages/network/zerotier-one/scripts/zerotier-join.sh)
Moved to [https://jelos.org/configure/vpn/#zerotier](https://jelos.org/configure/vpn/#zerotier)

View file

@ -1,64 +1 @@
# Syncthing
Syncthing is a tool that lets you synchronize the contents of folders across multiple devices. It is different from cloud storage in that devices are updated directly with the latest changes from their peer(s) whenever they are online at the same time.
Some things you can use it for with JELOS:
* Keep your game library synchronized between your computer and JELOS device(s),
* Keep all your handhelds synchronized (including those that run Android),
* Copy savegames as they are created and seamlessly continue playing on another device,
* Keep a copy of your configuration files for easier editing.
## Setup
### Setup on JELOS
* Make sure you are connected to a WiFi network before continuing.
* Go to "Network Settings" and set "Enable Syncthing" to "on". Make a note of your device's IP address, as well as the root password in the System Settings menu.
* On a computer or mobile device in the same network, open a browser and point it to "http://a.b.c.d:8384" where "a.b.c.d" is the IP address of your JELOS device.
* When prompted for a user name and password, enter "root" as user and the password you noted earlier.
* You should now be directed to a configuration page running on your JELOS device - we'll come back to this shortly.
### Setup on Peer(s)
* Install Syncthing on the device or computer that you want to synchronize with your JELOS device. If your other device also runs JELOS, simply repeat the above steps. Otherwise go to https://syncthing.net to download Syncthing for your platform. You may also find it in your Linux distribution's package manager, the Android Play Store, etc. Generally it is not required to install the same version of Syncthing on all devices. You can synchronize a folder across any number of peers.
### Connecting Folders
1. Go to the web interface of your JELOS device (see above). Don't worry about notices about upgrading or the file system being read-only, nothing you can do.
(Note: You can also go to the web interface of any of the peers, it'll work the same - but for this documentation it is assumed that you're on a JELOS device.)
2. Under "Remote Devices", click "Add Remote Device". Enter the Device ID of the peer you want to synchronize with. If the remote is in the same network as your JELOS device the ID will be shown automatically. Otherwise, you'll find it in the remote's web interface by clicking "Actions" at the top and then "Show ID". Give the device a name if you like.
3. In the "Folders" section, click "Add Folder". In the popup window that opens, set a label and specify the path on the device (e.g. /storage/roms). This is the folder you will be sharing with other peers.
4. In the same popup window, go to the "Sharing" tab and select the remote device you just set up. Optionally, go to the "Ignore Patterns" tab and configure those. Click "Save" to close the window.
5. On the remote's interface you should receive a popup that a new device wants to connect. Click "Add Device" and then "Save" to accept. It should now show up under "Remote Devices".
6. Still on the remote, you should receive a new popup saying that the JELOS device wants to share a folder. Click "Add", then in the popup window, specify the path to an empty local folder to store the synchronized contents. Click "Save".
7. The folder should now be copied from the JELOS device to the remote.
### Adding more Peers
* To share the folder with more peers, first follow step 2 on your JELOS device to add another remote.
* Find the folder you want to add another peer to and click "Edit".
* In the popup window, go to the "Sharing" tab. The new remote should appear as an option. Select it and then click "Save".
* Follow steps 5 and 6 on the new remote to connect the folder.
## Things to Keep in Mind
### Syncthing is not a cloud storage
In order for devices to synchronize, they need to be online at the same time. Unless you have one peer that is always on, this is different from an online storage like Dropbox or Nextcloud. However, this behaviour can be emulated (no pun intended) by installing Syncthing on a cloud server or an always-on Raspberry Pi.
### Syncthing is not a backup
Folders are synchronized with other peers immediately as they come online at the same time - this includes changes and deletions! Be sure to make regular backups of your folders.
### Devices do not need to be on the same network
Syncthing uses relay servers to ensure communication between peers. This means that there does not need to be a direct connection between your devices, no port forwarding, etc - as soon as they are both online they will find each other and synchronize. Although file transfers are end-to-end encrypted when they are sent through relays, be aware of this if you plan on using Syncthing for anything more sensitive than your save files.
### Using Syncthing for Saves/States
Using Syncthing for savegames is great because it allows you to seamlessly play a game across multiple handhelds, or even other devices. For example, you can play a game of Super Mario 64 on your RG353 while on the go, then launch the game on a RetroPie or PC running RetroArch and your save game will be transferred automatically to be continued on the big screen. However, this comes with a few caveats.
RetroArch differentiates between *saves*, i.e. the battery or memory card storage featured in the original game, and *states*, i.e. the save state feature that is part of the emulator. While *saves* are often compatible across different versions of RetroArch cores, *states* tend to break more frequently. This means that if you create states with two incompatible versions of an emulator and they are synchronized, you may lose one of them.
* For maximum compatibility, make sure to use the same cores on all devices and update them at similar frequencies.
* RetroArch uses two separate folders for *saves* and *states*. This makes it easy to choose whether you want to synchronize only saves, states, or both.
* In the RetroArch settings under "Saving", you can tell RetroArch to sort saves and states into subfolders based on content directory or core name. It is highly recommended to make use of this to reduce the risk of accidentally overwriting an incompatible save or state.
* Make regular backups of your save folders.
### Synchronizing with Android
* For Android-based handhelds people seem to be recommending the [Syncthing-Fork from F-Droid](https://f-droid.org/en/packages/com.github.catfriend1.syncthingandroid).
* Keeping Syncthing running in the background may severely impact your battery life and reduce standby time. Check out [these tips](https://github.com/Catfriend1/syncthing-android/wiki/Info-on-battery-optimization-and-settings-affecting-battery-usage) to help you balance battery life and synchronization times.
* Using cross-platform versions of emulators is much more likely to introduce incompatibilities so be extra careful when syncing savegames.
## Further Documentation
For any questions and advanced configuration, be sure to check out the full documentation at https://docs.syncthing.net/index.html.
Moved to [https://jelos.org/configure/cloud-sync/](https://jelos.org/configure/cloud-sync/)

View file

@ -1,43 +1 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
# Tailscale quickstart
JELOS now supports Tailscale. Tailscale is a VPN service that makes the devices and applications you own accessible anywhere in the world, securely and effortlessly. It enables encrypted point-to-point connections using the open source [WireGuard](https://www.wireguard.com/) protocol, which means only devices on your private network can communicate with each other.
## Step 1: Sign up for Tailscale account
[Sign up for a Tailscale account](https://login.tailscale.com/start).
Tailscale requires a Single Sign-On (SSO) provider, so youll need a Google, Microsoft, GitHub, Okta, OneLogin, or other [supported SSO identity provider](https://tailscale.com/kb/1013/sso-providers) account to begin.
## Step 2: Add a PC to your Tailscale network
Tailscale helps you connect your devices together. For that to be possible, Tailscale needs to run on your PC.
Tailscale works seamlessly with Linux, Windows, macOS, Raspberry Pi, Android, Synology, and more. Download Tailscale and log in on the PC.
[Download Tailscale](https://tailscale.com/download/)
## Step 3: Add your device to your network
JELOS Emulation Station has customized UI with Tailscale support.
- Press "start" button to go into Emulation Station Main Menu.
- Select Network Settings submenu.
- Select "Tailscale VPN" and turn it on.
- Select "Back" button to exit setting dialog.
The initial connection to Tailscale will require authentication.
- Select Network Settings submenu again.
- You should see Tailscale authentication url. You need to type this url on your PC browser and authenticate.
- After login on PC is successful, Select "Tailscale VPN" and turn it on again.
- Select "Back" button to exit setting dialog.
- Tailscale VPN should be connected.
The magic of Tailscale happens when its installed on multiple devices. Add more of your devices and share Tailscale with your peers to grow your private network.
Add more machines to your network by repeating step 2, or 3, or by [inviting others to join your network](https://tailscale.com/kb/1064/invite-team-members).
## Links
* Tailscale homepage [link](https://tailscale.com/)
Moved to [https://jelos.org/configure/vpn/#tailscale](https://jelos.org/configure/vpn/#tailscale)

View file

@ -1,123 +1 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
# Using WireGuard VPN
JELOS now supports WireGuard VPN, which connects securely to your local network from any place in the world. As game streaming becomes more popular, it enables AAA games, streamed over the internet from your home computer, to be played on your console while traveling.
## Configuring WireGuard VPN in JELOS
Typically the configuration involves copying your WireGuard VPN config file over to your JELOS device and then enabling WireGuard VPN in Emulation Station Network Settings menu.
### WireGuard Config
JELOS uses standard WireGuard config file format. The file is typically provided by your VPN provider. If you want to host your own VPN Server on your local network, there are plenty of tutorials available online.
Currently only the single connection is supported. The WireGuard config file must be placed in the following location - `/storage/.config/wireguard/wg0.conf`. Please use SSH or Samba to create the file there.
Don't forget to restart Emulation Station to pick up the changes.
Sample `wg0.conf` file
```
[Interface]
PrivateKey = <your private key>
Address = 10.111.10.2/24
[Peer]
PublicKey = <server public key>
AllowedIPs = 0.0.0.0/0
Endpoint = <server>:<port>
```
> Note: "DNS" option is not yet supported in the config. Please remove line starting with "DNS" from your config file.
### Enabling WireGuard connection
Emulation Station now has a new menu item toggle to enable or disable WireGuard VPN connection. Use it turn the connection on or off.
> Note: make sure that WireGuard config file is present on the device, see the [Configuring WireGuard VPN in JELOS](https://github.com/JustEnoughLinuxOS/distribution/documentation/SETUP_VPN_WIREGUARD.md#Configuring-WireGuard-VPN-in-JELOS) section above. The menu option is only available when the config file is present.
Connect to configured VPN server
* Press "start" button to go into Emulation Station Main Menu
* Select Network Settings submenu
* Select "Wireguard VPN" and turn it on
* Select "Back" button to exit setting dialog
* WireGuard VPN should be connected
Disconnect from configured VPN server
* Press "start" button to go into Emulation Station Main Menu
* Select Network Settings submenu
* Select "Wireguard VPN" and turn it off
* Select "Back" button to exit setting dialog
* WireGuard VPN should be disconnected
### Server Configuration (for advanced users)
The local PC can be setup to be a WireGuard server. This allows accessing that PC (and a local network if SNAT is enabled) from the remote location using the device.
The configuration is the following:
* Generate pair of configuration files
* Install WireGuard on your local PC and import server config
* Setup Port Forwarding for WireGuard port from your local router to your local PC
* Enable WireGuard on your device
#### Config Pair generation
The device have a helper script which can generate a pair of configuration files for the device and for the local PC with WireGuard server.
The script should be executed from SSH terminal.
```
# Generate config file
wg-genconfig
```
The script will generate `wg0.conf` and `wg0.conf.server` files.
##### `wg0.conf.server` server config
```
[Interface]
PrivateKey = <server private key>
# PublicKey = <server public key>
Address = 10.111.10.1/24
ListenPort = 51820
# If you want to access other devices on the same network,
# you need to enable SNAT, the lines below.
# Make sure that eth0 matches your main network interface.
#PostUp = echo 1 > /proc/sys/net/ipv4/ip_forward
#PostUp = iptables -A FORWARD -i %i -j ACCEPT
#PostUp = iptables -A FORWARD -o %i -j ACCEPT
#PostUp = iptables -t nat -A POSTROUTING -s 10.111.10.0/24 -o eth0 -j MASQUERADE
#PostDown = iptables -D FORWARD -i %i -j ACCEPT
#PostDown = iptables -D FORWARD -o %i -j ACCEPT
#PostDown = iptables -t nat -D POSTROUTING -s 10.111.10.0/24 -o eth0 -j MASQUERADE
[Peer]
PublicKey = <device public key>
AllowedIPs = 10.111.10.2/32
```
If you want you device to access your local network, you need to enable SNAT, allow your local PC forward network packets to other devices on your local network. That is done by uncommenting PostUp/PostDown commands in the config.
#### Install WireGuard on your local PC
* Download the client for your OS from [here](https://www.wireguard.com/install/).
* Import wg0.conf.server and enable the tunnel.
## Troubleshooting
### Diagnostics
Sometimes the tunnel doesn't establish successfully. The following commands can useful to diagnose issues.
The commands below should be executed on the device using SSH shell access.
```
# Check the status of active tunnels.
# You should see the connection statistics.
wg show
```
```
# Check my public ip address
curl ifconfig.co -4
```
```
# Bring tunnel up
wg-quick up /storage/.config/wireguard/wg0.conf
```
```
# Bring tunnel down
wg-quick down /storage/.config/wireguard/wg0.conf
```
### Links
* WireGuard homepage [link](https://www.wireguard.com/)
* WireGuard is also supported in ConnMan VPN plugin using ssh command line [link](https://wiki.libreelec.tv/configuration/wireguard)
Moved to [https://jelos.org/configure/vpn/#wireguard](https://jelos.org/configure/vpn/#wireguard)

View file

@ -2,7 +2,7 @@
# Copyright (C) 2021-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="pipewire"
PKG_VERSION="0.3.77"
PKG_VERSION="0.3.80"
PKG_LICENSE="LGPL"
PKG_SITE="https://pipewire.org"
PKG_URL="https://github.com/PipeWire/pipewire/archive/${PKG_VERSION}.tar.gz"

View file

@ -21,8 +21,6 @@ PKG_MESON_OPTS_TARGET="-Dintrospection=disabled \
-Dtests=false"
post_makeinstall_target() {
# connect to the system bus
sed '/^\[Service\]/a Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/dbus/system_bus_socket' -i ${INSTALL}/usr/lib/systemd/system/wireplumber.service
# ref https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/0da29f38181e391160fa8702623050b8544ec775
cat > ${INSTALL}/usr/share/wireplumber/main.lua.d/89-disable-session-dbus-dependent-features.lua << EOF

View file

@ -7,10 +7,14 @@ PKG_LICENSE="GPL"
PKG_SITE="https://git.kernel.org/pub/scm/libs/libtrace/${PKG_NAME}.git/log/"
PKG_URL="https://git.kernel.org/pub/scm/libs/libtrace/${PKG_NAME}.git/snapshot/${PKG_NAME}-${PKG_VERSION}.tar.gz"
PKG_DEPENDS_HOST="ccache:host"
PKG_DEPENDS_TARGET="toolchain libtraceevent:host linux:host"
PKG_DEPENDS_TARGET="toolchain libtraceevent:host"
PKG_LONGDESC="Provides APIs to access kernel tracepoint events."
#PKG_BUILD_FLAGS="+pic"
pre_configure_host() {
LDFLAGS="${LDFLAGS} -ldl"
}
makeinstall_host() {
mkdir -p ${TOOLCHAIN}/lib
cp src/${PKG_NAME}.a ${TOOLCHAIN}/lib

View file

@ -20,7 +20,7 @@
################################################################################
PKG_NAME="beetle-pce-fast-lr"
PKG_VERSION="f2ff19e56fb33361793f9fdaf44c1ea28bce1da3"
PKG_VERSION="d7c1553d90eddab574fab7c315ce748d7ace1eed"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPLv2"

View file

@ -20,7 +20,7 @@
################################################################################
PKG_NAME="beetle-pce-lr"
PKG_VERSION="541463bd937dad175aec09c2a0c8d6a52d175386"
PKG_VERSION="40210e91808561178f5439f83413cec14a8d30ba"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPLv2"

View file

@ -20,7 +20,7 @@
################################################################################
PKG_NAME="beetle-supergrafx-lr"
PKG_VERSION="56261ccd56f576a42a2d22190c09eb326a4331da"
PKG_VERSION="b9cb84001a8b89aa8f4f4602f83d7bf1f1a356b4"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPLv2"

View file

@ -2,7 +2,7 @@
# Copyright (C) 2022-present BrooksyTech (https://github.com/brooksytech)
PKG_NAME="bsnes-lr"
PKG_VERSION="3fe4f9049f99ac71d038b3cb684ebfc8e6cef15a"
PKG_VERSION="39c6b38c2f96881ddbfd98ad24cc9560e65b12c1"
PKG_LICENSE="GPLv2"
PKG_SITE="https://github.com/libretro/bsnes-libretro"
PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz"

View file

@ -20,7 +20,7 @@
################################################################################
PKG_NAME="core-info"
PKG_VERSION="dacae85b406131feb12395a415fdf57fc4745201"
PKG_VERSION="63fc405d19f64b6559fe6428e719756a7979e596"
PKG_LICENSE="GPL"
PKG_SITE="https://github.com/libretro/libretro-core-info"
PKG_URL="https://github.com/libretro/libretro-core-info/archive/${PKG_VERSION}.tar.gz"

View file

@ -19,7 +19,7 @@
################################################################################
PKG_NAME="dosbox-pure-lr"
PKG_VERSION="3352a46f6d1f61191483c3d776d822cd68f25486"
PKG_VERSION="384b9d02fada8a60b0085b5e938ea4284b26fe1e"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPLv2"

View file

@ -3,7 +3,7 @@
# Copyright (C) 2022-present Lakka (https://www.lakka.tv)
PKG_NAME="fake08-lr"
PKG_VERSION="10bd648f2ed91268c758751e3eda7708512cf065"
PKG_VERSION="29d7996aabaf7268037fd95688be6cd227e93f98"
PKG_LICENSE="MIT"
PKG_SITE="https://github.com/jtothebell/fake-08"
PKG_URL="${PKG_SITE}.git"

View file

@ -4,7 +4,7 @@
# Copyright (C) 2023-present Fewtarius
PKG_NAME="fbneo-lr"
PKG_VERSION="6b6ba331c6616dbf35e83d7966b6e77744ce773d"
PKG_VERSION="99f06cf43ae61b77527765a42454ab05f0a733a0"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="Non-commercial"

View file

@ -20,7 +20,7 @@
################################################################################
PKG_NAME="fceumm-lr"
PKG_VERSION="f068818c4d68620c31eca0c02a5891ee3096b645"
PKG_VERSION="7fad08e5522e5396a1196055fc106be9b5d5de77"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPLv2"

View file

@ -20,7 +20,7 @@
################################################################################
PKG_NAME="gambatte-lr"
PKG_VERSION="64561b7e1b21dfa42eecb94963c1c495ba332466"
PKG_VERSION="40d0d7ac4e11b5c2d1feac2ce96e4d824c248985"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPLv2"

View file

@ -21,7 +21,7 @@
################################################################################
PKG_NAME="genesis-plus-gx-lr"
PKG_VERSION="141257e1e2104c4e4a49dc771d9f3c06e00292ec"
PKG_VERSION="3b85b2496275e1e308544eaf18150a472f943ad1"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="Non-commercial"

View file

@ -20,7 +20,7 @@
################################################################################
PKG_NAME="hatari-lr"
PKG_VERSION="274e4fe133ca4cabd1a86a23bb60dabf1afc0235"
PKG_VERSION="a4c9eb0bb79e47a2870c12b04566c1f8d25e4bf3"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPLv2"

View file

@ -20,7 +20,7 @@
################################################################################
PKG_NAME="libretro-database"
PKG_VERSION="f04381b606f679e960cefbe7d9d70f00bacec12f"
PKG_VERSION="7b8991bc1fbb8f007977b35174aef7be6369e027"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View file

@ -21,7 +21,7 @@
################################################################################
PKG_NAME="mame2003-plus-lr"
PKG_VERSION="6c413c298fcfb4dc7c8e8d6bec28c077d900e7dd"
PKG_VERSION="e28af780b8ebecf8fb31f5737dbefa4e41744f86"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="MAME"

View file

@ -19,7 +19,7 @@
################################################################################
PKG_NAME="mrboom-lr"
PKG_VERSION="376177d4a5020df528bf3632b909fa033592f152"
PKG_VERSION="06ab71e8ceeca06f30b77626a21b58b1e7d9a686"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPLv3"

View file

@ -21,10 +21,16 @@ if [ "${OPENGLES_SUPPORT}" = yes ]; then
PKG_DEPENDS_TARGET+=" ${OPENGLES}"
fi
if [ "${VULKAN_SUPPORT}" = "yes" ]; then
PKG_MAKE_OPTS_TARGET+=" HAVE_PARALLEL=1"
fi
case ${DEVICE} in
RK3*|S922X*)
PKG_MAKE_OPTS_TARGET=" platform=${DEVICE}"
PKG_MAKE_OPTS_TARGET+=" platform=${DEVICE}"
;;
AMD64)
PKG_MAKE_OPTS_TARGET+=" HAVE_PARALLEL_RSP=1"
esac
makeinstall_target() {

View file

@ -3,7 +3,7 @@
# Copyright (C) 2022-present Fewtarius
PKG_NAME="pcsx_rearmed-lr"
PKG_VERSION="80bc142638988fa7ba87aa17af1ccfcfc21d1e99"
PKG_VERSION="6183ddf982e296b854f767c168f424b877a22243"
PKG_ARCH="arm aarch64"
PKG_LICENSE="GPLv2"
PKG_SITE="https://github.com/libretro/pcsx_rearmed"

View file

@ -20,7 +20,7 @@
################################################################################
PKG_NAME="ppsspp-lr"
PKG_VERSION="e829c97d7e78b6ec7c1a0ee031d58c32987194e6"
PKG_VERSION="aedd51f2f69fa3940c991a626be7df430883af4c"
PKG_LICENSE="GPLv2"
PKG_SITE="https://github.com/hrydgard/ppsspp"
PKG_URL="https://github.com/hrydgard/ppsspp.git"

View file

@ -27,7 +27,7 @@ PKG_LICENSE="MIT"
PKG_SITE="https://github.com/libretro/sameboy"
PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz"
PKG_GIT_CLONE_BRANCH="buildbot"
PKG_DEPENDS_TARGET="toolchain"
PKG_DEPENDS_TARGET="toolchain util-linux:host"
PKG_PRIORITY="optional"
PKG_SECTION="libretro"
PKG_SHORTDESC="Gameboy and Gameboy Color emulator written in C"

View file

@ -20,7 +20,7 @@
################################################################################
PKG_NAME="scummvm-lr"
PKG_VERSION="a56c2b83153c84b0a1c0f3f9a18c38f23b430fc9"
PKG_VERSION="0f6773217c670368de73348e201495cc4456023f"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPLv2"

View file

@ -20,7 +20,7 @@
################################################################################
PKG_NAME="slang-shaders"
PKG_VERSION="c1488579ee8e9421222501ca679ace333e047a2a"
PKG_VERSION="7db474790c1d2fa060e9b73f5468ec6bb2ecd387"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View file

@ -20,7 +20,7 @@
################################################################################
PKG_NAME="stella-lr"
PKG_VERSION="afe84954a80406f4fbbce423712166b9b87d10b3"
PKG_VERSION="85f23044437a5da35d68f96045d363d0e339f872"
PKG_REV="1"
PKG_LICENSE="GPL2"
PKG_SITE="https://github.com/stella-emu/stella"

View file

@ -21,7 +21,7 @@
################################################################################
PKG_NAME="vice-lr"
PKG_VERSION="c0ef3653deadf40807293b9d9cb56a2a810f7d70"
PKG_VERSION="04f37fe3a1d8525003e5e739a376acf01f72f84e"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPLv2"

View file

@ -2,7 +2,7 @@
# Copyright (C) 2022-present BrooksyTech (https://github.com/brooksytech)
PKG_NAME="citra-sa"
PKG_VERSION="8d45390ed38fe82c50d788fe1ebbbfe86369b975"
PKG_VERSION="a034c54f91495e6c987e3c3d221c7f7615d60a56"
PKG_LICENSE="MPLv2"
PKG_SITE="https://github.com/JustEnoughLinuxOS/citra-canary"
PKG_URL="${PKG_SITE}.git"

View file

@ -0,0 +1,29 @@
[GCPad1]
Device = evdev/0/Microsoft X-Box 360 pad
Buttons/A = Button 0
Buttons/B = Button 2
Buttons/Start = Button 6
Buttons/X = Button 1
Buttons/Y = Button 3
Buttons/Z = Button 5
Buttons/Hotkey = Button 7
C-Stick/Dead Zone = 25.000000000000000
C-Stick/Down = Axis 4+
C-Stick/Left = Axis 3-
C-Stick/Modifier = Control_L
C-Stick/Modifier/Range = 50.000000000000000
C-Stick/Right = Axis 3+
C-Stick/Up = Axis 4-
D-Pad/Down = Axis 7+
D-Pad/Left = Axis 6-
D-Pad/Right = Axis 6+
D-Pad/Up = Axis 7-
Main Stick/Dead Zone = 25.000000000000000
Main Stick/Down = Axis 1+
Main Stick/Left = Axis 0-
Main Stick/Modifier = Shift_L
Main Stick/Modifier/Range = 50.000000000000000
Main Stick/Right = Axis 0+
Main Stick/Up = Axis 1-
Triggers/L = Axis 2+
Triggers/R = Axis 5+

View file

@ -2,7 +2,9 @@
VSync = False
Adapter = 0
[Settings]
PreferGLES = True
AspectRatio = 0
InternalResolution = 2
Crop = False
wideScreenHack = False
UseXFB = False
@ -37,10 +39,14 @@ SWDumpTevStages = False
SWDumpTevTexFetches = False
SWDrawStart = 0
SWDrawEnd = 100000
ShaderCompilationMode = 0
WaitForShadersBeforeStarting = True
BackendMultithreading = True
EnableGPUTextureDecoding = True
[Enhancements]
ForceFiltering = False
ForceTextureFiltering = False
MaxAnisotropy = 0
PostProcessingShader =
PostProcessingShader =
[Stereoscopy]
StereoMode = 0
StereoDepth = 20
@ -53,3 +59,4 @@ ForceProgressive = True
EFBToTextureEnable = True
EFBScaledCopy = False
EFBEmulateFormatChanges = False
SkipDuplicateXFBs = True

View file

@ -0,0 +1,20 @@
[Wiimote1]
Device = evdev/0/Microsoft X-Box 360 pad
Buttons/A = Button 0
Buttons/B = Button 1
Buttons/1 = Button 2
Buttons/2 = Button 3
Buttons/- = Button 6
Buttons/+ = Button 7
Buttons/Home = Button 8
Shake/X = Button 4
Shake/Y = Button 4
Shake/Z = Button 4
D-Pad/Up = Axis 6-
D-Pad/Down = Axis 6+
D-Pad/Left = Axis 7-
D-Pad/Right = Axis 7+
IR/Up = `Axis 4-`
IR/Down = `Axis 4+`
IR/Left = `Axis 3-`
IR/Right = `Axis 3+`

View file

@ -24,3 +24,7 @@ Nunchuk/Stick/Right = Axis 0+
Nunchuk/Shake/X = Axis 2+
Nunchuk/Shake/Y = Axis 2+
Nunchuk/Shake/Z = Axis 2+
IR/Up = `Axis 4-`
IR/Down = `Axis 4+`
IR/Left = `Axis 3-`
IR/Right = `Axis 3+`

View file

@ -14,3 +14,7 @@ D-Pad/Up = Axis 7-
D-Pad/Down = Axis 7+
D-Pad/Left = Axis 6-
D-Pad/Right = Axis 6+
IR/Up = `Axis 4-`
IR/Down = `Axis 4+`
IR/Left = `Axis 3-`
IR/Right = `Axis 3+`

View file

@ -35,7 +35,10 @@ fi
if [ "${DISPLAYSERVER}" = "wl" ]; then
PKG_DEPENDS_TARGET+=" wayland ${WINDOWMANAGER} xorg-server xrandr libXi"
PKG_CMAKE_OPTS_TARGET+=" -DENABLE_WAYLAND=ON"
PKG_CMAKE_OPTS_TARGET+=" -DENABLE_WAYLAND=ON \
-DENABLE_X11=ON"
else
PKG_CMAKE_OPTS_TARGET+=" -DENABLE_X11=OFF"
fi
if [ "${VULKAN_SUPPORT}" = "yes" ]
@ -58,8 +61,7 @@ PKG_CMAKE_OPTS_TARGET+=" -DENABLE_HEADLESS=ON \
-DENABLE_LTO=ON \
-DENABLE_QT=OFF \
-DENCODE_FRAMEDUMPS=OFF \
-DENABLE_CLI_TOOL=OFF \
-DENABLE_X11=OFF"
-DENABLE_CLI_TOOL=OFF"
makeinstall_target() {
@ -80,6 +82,9 @@ post_install() {
RK356*)
DOLPHIN_PLATFORM="drm"
;;
RK3588)
DOLPHIN_PLATFORM="x11"
;;
*)
DOLPHIN_PLATFORM="wayland"
;;

View file

@ -1,6 +1,6 @@
diff -rupN dolphin.orig/CMake/FindWaylandProtocols.cmake dolphin/CMake/FindWaylandProtocols.cmake
--- dolphin.orig/CMake/FindWaylandProtocols.cmake 1970-01-01 00:00:00.000000000 +0000
+++ dolphin/CMake/FindWaylandProtocols.cmake 2023-06-05 18:48:45.007819529 +0000
+++ dolphin/CMake/FindWaylandProtocols.cmake 2023-09-26 18:02:22.836042087 +0000
@@ -0,0 +1,28 @@
+# from https://github.com/glfw/glfw/blob/master/CMake/modules/FindWaylandProtocols.cmake
+
@ -32,7 +32,7 @@ diff -rupN dolphin.orig/CMake/FindWaylandProtocols.cmake dolphin/CMake/FindWayla
+set(WAYLAND_PROTOCOLS_VERSION ${WaylandProtocols_VERSION})
diff -rupN dolphin.orig/CMake/FindXKBCommon.cmake dolphin/CMake/FindXKBCommon.cmake
--- dolphin.orig/CMake/FindXKBCommon.cmake 1970-01-01 00:00:00.000000000 +0000
+++ dolphin/CMake/FindXKBCommon.cmake 2023-06-05 18:48:45.007819529 +0000
+++ dolphin/CMake/FindXKBCommon.cmake 2023-09-26 18:02:22.836042087 +0000
@@ -0,0 +1,33 @@
+# - Try to find XKBCommon
+# Once done, this will define
@ -68,9 +68,9 @@ diff -rupN dolphin.orig/CMake/FindXKBCommon.cmake dolphin/CMake/FindXKBCommon.cm
+
+mark_as_advanced(XKBCOMMON_LIBRARY XKBCOMMON_INCLUDE_DIR)
diff -rupN dolphin.orig/CMakeLists.txt dolphin/CMakeLists.txt
--- dolphin.orig/CMakeLists.txt 2023-06-01 19:24:09.874000574 +0000
+++ dolphin/CMakeLists.txt 2023-06-05 18:48:45.007819529 +0000
@@ -43,6 +43,7 @@ set(DOLPHIN_DEFAULT_UPDATE_TRACK "" CACH
--- dolphin.orig/CMakeLists.txt 2023-09-26 17:58:02.593990718 +0000
+++ dolphin/CMakeLists.txt 2023-09-26 18:02:22.836042087 +0000
@@ -47,6 +47,7 @@ set(DOLPHIN_DEFAULT_UPDATE_TRACK "" CACH
if(UNIX AND NOT APPLE AND NOT ANDROID)
option(ENABLE_X11 "Enables X11 Support" ON)
@ -78,7 +78,7 @@ diff -rupN dolphin.orig/CMakeLists.txt dolphin/CMakeLists.txt
endif()
if(NOT WIN32 AND NOT APPLE AND NOT HAIKU)
option(ENABLE_EGL "Enables EGL OpenGL Interface" ON)
@@ -549,6 +550,17 @@ if(ENABLE_X11)
@@ -543,6 +544,17 @@ if(ENABLE_X11)
endif()
endif()
@ -97,9 +97,9 @@ diff -rupN dolphin.orig/CMakeLists.txt dolphin/CMakeLists.txt
find_package(EGL)
if(EGL_FOUND)
diff -rupN dolphin.orig/Source/Core/Common/CMakeLists.txt dolphin/Source/Core/Common/CMakeLists.txt
--- dolphin.orig/Source/Core/Common/CMakeLists.txt 2023-06-01 19:24:09.918002004 +0000
+++ dolphin/Source/Core/Common/CMakeLists.txt 2023-06-05 18:48:45.487834884 +0000
@@ -255,11 +255,20 @@ if(ENABLE_EGL AND EGL_FOUND)
--- dolphin.orig/Source/Core/Common/CMakeLists.txt 2023-09-26 17:58:02.801995519 +0000
+++ dolphin/Source/Core/Common/CMakeLists.txt 2023-09-26 18:02:22.836042087 +0000
@@ -253,11 +253,20 @@ if(ENABLE_EGL AND EGL_FOUND)
GL/GLInterface/EGLAndroid.cpp
GL/GLInterface/EGLAndroid.h
)
@ -126,8 +126,8 @@ diff -rupN dolphin.orig/Source/Core/Common/CMakeLists.txt dolphin/Source/Core/Co
target_include_directories(common PRIVATE ${EGL_INCLUDE_DIRS})
target_link_libraries(common PUBLIC ${EGL_LIBRARIES})
diff -rupN dolphin.orig/Source/Core/Common/GL/GLContext.cpp dolphin/Source/Core/Common/GL/GLContext.cpp
--- dolphin.orig/Source/Core/Common/GL/GLContext.cpp 2023-06-01 19:23:58.513631223 +0000
+++ dolphin/Source/Core/Common/GL/GLContext.cpp 2023-06-05 18:48:45.499835268 +0000
--- dolphin.orig/Source/Core/Common/GL/GLContext.cpp 2023-09-26 17:58:02.801995519 +0000
+++ dolphin/Source/Core/Common/GL/GLContext.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -25,6 +25,9 @@
#if defined(ANDROID)
#include "Common/GL/GLInterface/EGLAndroid.h"
@ -164,8 +164,8 @@ diff -rupN dolphin.orig/Source/Core/Common/GL/GLContext.cpp dolphin/Source/Core/
if (wsi.type == WindowSystemType::Headless || wsi.type == WindowSystemType::FBDev)
context = std::make_unique<GLContextEGL>();
diff -rupN dolphin.orig/Source/Core/Common/GL/GLContext.h dolphin/Source/Core/Common/GL/GLContext.h
--- dolphin.orig/Source/Core/Common/GL/GLContext.h 2023-06-01 19:23:58.513631223 +0000
+++ dolphin/Source/Core/Common/GL/GLContext.h 2023-06-05 18:48:45.503835396 +0000
--- dolphin.orig/Source/Core/Common/GL/GLContext.h 2023-09-26 17:58:02.801995519 +0000
+++ dolphin/Source/Core/Common/GL/GLContext.h 2023-09-26 18:02:22.836042087 +0000
@@ -36,8 +36,8 @@ public:
virtual bool MakeCurrent();
virtual bool ClearCurrent();
@ -178,8 +178,8 @@ diff -rupN dolphin.orig/Source/Core/Common/GL/GLContext.h dolphin/Source/Core/Co
virtual void Swap();
virtual void SwapInterval(int interval);
diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/AGL.h dolphin/Source/Core/Common/GL/GLInterface/AGL.h
--- dolphin.orig/Source/Core/Common/GL/GLInterface/AGL.h 2023-06-01 19:23:58.513631223 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/AGL.h 2023-06-05 18:48:45.507835524 +0000
--- dolphin.orig/Source/Core/Common/GL/GLInterface/AGL.h 2023-09-26 17:58:02.801995519 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/AGL.h 2023-09-26 18:02:22.836042087 +0000
@@ -27,6 +27,8 @@ public:
bool MakeCurrent() override;
@ -190,8 +190,8 @@ diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/AGL.h dolphin/Source/C
void Update() override;
diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/AGL.mm dolphin/Source/Core/Common/GL/GLInterface/AGL.mm
--- dolphin.orig/Source/Core/Common/GL/GLInterface/AGL.mm 2023-06-01 19:23:58.513631223 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/AGL.mm 2023-06-05 18:48:45.507835524 +0000
--- dolphin.orig/Source/Core/Common/GL/GLInterface/AGL.mm 2023-09-26 17:58:02.801995519 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/AGL.mm 2023-09-26 18:02:22.836042087 +0000
@@ -144,7 +144,7 @@ bool GLContextAGL::ClearCurrent()
return true;
}
@ -202,8 +202,8 @@ diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/AGL.mm dolphin/Source/
if (!m_view)
return;
diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/EGL.cpp dolphin/Source/Core/Common/GL/GLInterface/EGL.cpp
--- dolphin.orig/Source/Core/Common/GL/GLInterface/EGL.cpp 2023-06-01 19:23:58.513631223 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/EGL.cpp 2023-06-05 18:48:45.507835524 +0000
--- dolphin.orig/Source/Core/Common/GL/GLInterface/EGL.cpp 2023-09-26 17:58:02.805995611 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/EGL.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -292,8 +292,8 @@ bool GLContextEGL::CreateWindowSurface()
{
if (!IsHeadless())
@ -267,8 +267,8 @@ diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/EGL.cpp dolphin/Source
+ m_backbuffer_height = static_cast<u32>(surface_height);
+}
diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/EGL.h dolphin/Source/Core/Common/GL/GLInterface/EGL.h
--- dolphin.orig/Source/Core/Common/GL/GLInterface/EGL.h 2023-06-01 19:23:58.513631223 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/EGL.h 2023-06-05 18:48:45.507835524 +0000
--- dolphin.orig/Source/Core/Common/GL/GLInterface/EGL.h 2023-09-26 17:58:02.805995611 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/EGL.h 2023-09-26 18:02:22.836042087 +0000
@@ -22,7 +22,8 @@ public:
bool MakeCurrent() override;
bool ClearCurrent() override;
@ -294,7 +294,7 @@ diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/EGL.h dolphin/Source/C
std::vector<int> m_attribs;
diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/EGLWayland.cpp dolphin/Source/Core/Common/GL/GLInterface/EGLWayland.cpp
--- dolphin.orig/Source/Core/Common/GL/GLInterface/EGLWayland.cpp 1970-01-01 00:00:00.000000000 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/EGLWayland.cpp 2023-06-05 18:48:45.507835524 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/EGLWayland.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -0,0 +1,36 @@
+// Copyright 2019 Dolphin Emulator Project
+// Licensed under GPLv2+
@ -334,7 +334,7 @@ diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/EGLWayland.cpp dolphin
+}
diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/EGLWayland.h dolphin/Source/Core/Common/GL/GLInterface/EGLWayland.h
--- dolphin.orig/Source/Core/Common/GL/GLInterface/EGLWayland.h 1970-01-01 00:00:00.000000000 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/EGLWayland.h 2023-06-05 18:48:45.507835524 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/EGLWayland.h 2023-09-26 18:02:22.836042087 +0000
@@ -0,0 +1,19 @@
+// Copyright 2019 Dolphin Emulator Project
+// Licensed under GPLv2+
@ -356,8 +356,8 @@ diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/EGLWayland.h dolphin/S
+ EGLNativeWindowType GetEGLNativeWindow(EGLConfig config) override;
+};
diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/EGLX11.cpp dolphin/Source/Core/Common/GL/GLInterface/EGLX11.cpp
--- dolphin.orig/Source/Core/Common/GL/GLInterface/EGLX11.cpp 2023-06-01 19:23:58.513631223 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/EGLX11.cpp 2023-06-05 18:48:45.507835524 +0000
--- dolphin.orig/Source/Core/Common/GL/GLInterface/EGLX11.cpp 2023-09-26 17:58:02.805995611 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/EGLX11.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -11,7 +11,7 @@ GLContextEGLX11::~GLContextEGLX11()
m_render_window.reset();
}
@ -368,8 +368,8 @@ diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/EGLX11.cpp dolphin/Sou
m_render_window->UpdateDimensions();
m_backbuffer_width = m_render_window->GetWidth();
diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/EGLX11.h dolphin/Source/Core/Common/GL/GLInterface/EGLX11.h
--- dolphin.orig/Source/Core/Common/GL/GLInterface/EGLX11.h 2023-06-01 19:23:58.513631223 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/EGLX11.h 2023-06-05 18:48:45.507835524 +0000
--- dolphin.orig/Source/Core/Common/GL/GLInterface/EGLX11.h 2023-09-26 17:58:02.805995611 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/EGLX11.h 2023-09-26 18:02:22.836042087 +0000
@@ -13,7 +13,7 @@ class GLContextEGLX11 final : public GLC
public:
~GLContextEGLX11() override;
@ -380,8 +380,8 @@ diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/EGLX11.h dolphin/Sourc
protected:
EGLDisplay OpenEGLDisplay() override;
diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/GLX.cpp dolphin/Source/Core/Common/GL/GLInterface/GLX.cpp
--- dolphin.orig/Source/Core/Common/GL/GLInterface/GLX.cpp 2023-06-01 19:24:09.918002004 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/GLX.cpp 2023-06-05 18:48:45.507835524 +0000
--- dolphin.orig/Source/Core/Common/GL/GLInterface/GLX.cpp 2023-09-26 17:58:02.805995611 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/GLX.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -310,7 +310,7 @@ bool GLContextGLX::ClearCurrent()
return glXMakeCurrent(m_display, None, nullptr);
}
@ -392,8 +392,8 @@ diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/GLX.cpp dolphin/Source
m_render_window->UpdateDimensions();
m_backbuffer_width = m_render_window->GetWidth();
diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/GLX.h dolphin/Source/Core/Common/GL/GLInterface/GLX.h
--- dolphin.orig/Source/Core/Common/GL/GLInterface/GLX.h 2023-06-01 19:23:58.513631223 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/GLX.h 2023-06-05 18:48:45.507835524 +0000
--- dolphin.orig/Source/Core/Common/GL/GLInterface/GLX.h 2023-09-26 17:58:02.805995611 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/GLX.h 2023-09-26 18:02:22.836042087 +0000
@@ -24,7 +24,7 @@ public:
bool MakeCurrent() override;
bool ClearCurrent() override;
@ -404,8 +404,8 @@ diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/GLX.h dolphin/Source/C
void SwapInterval(int Interval) override;
void Swap() override;
diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/WGL.cpp dolphin/Source/Core/Common/GL/GLInterface/WGL.cpp
--- dolphin.orig/Source/Core/Common/GL/GLInterface/WGL.cpp 2023-06-01 19:23:58.513631223 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/WGL.cpp 2023-06-05 18:48:45.507835524 +0000
--- dolphin.orig/Source/Core/Common/GL/GLInterface/WGL.cpp 2023-09-26 17:58:02.805995611 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/WGL.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -480,7 +480,7 @@ bool GLContextWGL::ClearCurrent()
}
@ -416,8 +416,8 @@ diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/WGL.cpp dolphin/Source
RECT rcWindow;
GetClientRect(m_window_handle, &rcWindow);
diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/WGL.h dolphin/Source/Core/Common/GL/GLInterface/WGL.h
--- dolphin.orig/Source/Core/Common/GL/GLInterface/WGL.h 2023-06-01 19:23:58.513631223 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/WGL.h 2023-06-05 18:48:45.507835524 +0000
--- dolphin.orig/Source/Core/Common/GL/GLInterface/WGL.h 2023-09-26 17:58:02.805995611 +0000
+++ dolphin/Source/Core/Common/GL/GLInterface/WGL.h 2023-09-26 18:02:22.836042087 +0000
@@ -19,7 +19,7 @@ public:
bool MakeCurrent() override;
bool ClearCurrent() override;
@ -428,8 +428,8 @@ diff -rupN dolphin.orig/Source/Core/Common/GL/GLInterface/WGL.h dolphin/Source/C
void Swap() override;
void SwapInterval(int interval) override;
diff -rupN dolphin.orig/Source/Core/Common/WindowSystemInfo.h dolphin/Source/Core/Common/WindowSystemInfo.h
--- dolphin.orig/Source/Core/Common/WindowSystemInfo.h 2023-06-01 19:23:58.517631353 +0000
+++ dolphin/Source/Core/Common/WindowSystemInfo.h 2023-06-05 18:48:45.499835268 +0000
--- dolphin.orig/Source/Core/Common/WindowSystemInfo.h 2023-09-26 17:58:02.805995611 +0000
+++ dolphin/Source/Core/Common/WindowSystemInfo.h 2023-09-26 18:02:22.836042087 +0000
@@ -40,7 +40,11 @@ struct WindowSystemInfo
// This is kept seperate as input may require a different handle to rendering, and
// during video backend startup the surface pointer may change (MoltenVK).
@ -444,9 +444,9 @@ diff -rupN dolphin.orig/Source/Core/Common/WindowSystemInfo.h dolphin/Source/Cor
float render_surface_scale = 1.0f;
};
diff -rupN dolphin.orig/Source/Core/Core/Core.cpp dolphin/Source/Core/Core/Core.cpp
--- dolphin.orig/Source/Core/Core/Core.cpp 2023-06-01 19:24:09.922002134 +0000
+++ dolphin/Source/Core/Core/Core.cpp 2023-06-05 18:48:45.511835652 +0000
@@ -478,6 +478,8 @@ static void EmuThread(std::unique_ptr<Bo
--- dolphin.orig/Source/Core/Core/Core.cpp 2023-09-26 17:58:02.809995703 +0000
+++ dolphin/Source/Core/Core/Core.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -474,6 +474,8 @@ static void EmuThread(std::unique_ptr<Bo
// is relative to the render window, instead of the main window.
ASSERT(g_controller_interface.IsInit());
g_controller_interface.ChangeWindow(wsi.render_window);
@ -456,8 +456,8 @@ diff -rupN dolphin.orig/Source/Core/Core/Core.cpp dolphin/Source/Core/Core/Core.
Pad::LoadConfig();
Pad::LoadGBAConfig();
diff -rupN dolphin.orig/Source/Core/Core/HW/GCPadEmu.cpp dolphin/Source/Core/Core/HW/GCPadEmu.cpp
--- dolphin.orig/Source/Core/Core/HW/GCPadEmu.cpp 2023-06-01 19:24:09.926002264 +0000
+++ dolphin/Source/Core/Core/HW/GCPadEmu.cpp 2023-06-05 18:48:45.531836292 +0000
--- dolphin.orig/Source/Core/Core/HW/GCPadEmu.cpp 2023-09-26 17:58:02.817995888 +0000
+++ dolphin/Source/Core/Core/HW/GCPadEmu.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -24,6 +24,7 @@ static const u16 button_bitmasks[] = {
PAD_BUTTON_X,
PAD_BUTTON_Y,
@ -477,8 +477,8 @@ diff -rupN dolphin.orig/Source/Core/Core/HW/GCPadEmu.cpp dolphin/Source/Core/Cor
groups.emplace_back(m_main_stick = new ControllerEmu::OctagonAnalogStick(
MAIN_STICK_GROUP, _trans("Control Stick"), MAIN_STICK_GATE_RADIUS));
diff -rupN dolphin.orig/Source/Core/Core/HW/GCPadEmu.h dolphin/Source/Core/Core/HW/GCPadEmu.h
--- dolphin.orig/Source/Core/Core/HW/GCPadEmu.h 2023-06-01 19:23:58.529631743 +0000
+++ dolphin/Source/Core/Core/HW/GCPadEmu.h 2023-06-05 18:48:45.531836292 +0000
--- dolphin.orig/Source/Core/Core/HW/GCPadEmu.h 2023-09-26 17:58:02.817995888 +0000
+++ dolphin/Source/Core/Core/HW/GCPadEmu.h 2023-09-26 18:02:22.836042087 +0000
@@ -65,6 +65,7 @@ public:
static constexpr const char* X_BUTTON = "X";
static constexpr const char* Y_BUTTON = "Y";
@ -488,9 +488,9 @@ diff -rupN dolphin.orig/Source/Core/Core/HW/GCPadEmu.h dolphin/Source/Core/Core/
// i18n: The left trigger button (labeled L on real controllers)
diff -rupN dolphin.orig/Source/Core/DolphinLib.props dolphin/Source/Core/DolphinLib.props
--- dolphin.orig/Source/Core/DolphinLib.props 2023-06-01 19:24:09.942002785 +0000
+++ dolphin/Source/Core/DolphinLib.props 2023-06-05 18:48:45.483834756 +0000
@@ -1219,6 +1219,7 @@
--- dolphin.orig/Source/Core/DolphinLib.props 2023-09-26 17:58:02.829996165 +0000
+++ dolphin/Source/Core/DolphinLib.props 2023-09-26 18:02:22.836042087 +0000
@@ -1207,6 +1207,7 @@
<ClCompile Include="VideoBackends\Vulkan\VKPerfQuery.cpp" />
<ClCompile Include="VideoBackends\Vulkan\VKPipeline.cpp" />
<ClCompile Include="VideoBackends\Vulkan\VKRenderer.cpp" />
@ -499,8 +499,8 @@ diff -rupN dolphin.orig/Source/Core/DolphinLib.props dolphin/Source/Core/Dolphin
<ClCompile Include="VideoBackends\Vulkan\VKStreamBuffer.cpp" />
<ClCompile Include="VideoBackends\Vulkan\VKSwapChain.cpp" />
diff -rupN dolphin.orig/Source/Core/DolphinNoGUI/CMakeLists.txt dolphin/Source/Core/DolphinNoGUI/CMakeLists.txt
--- dolphin.orig/Source/Core/DolphinNoGUI/CMakeLists.txt 2023-06-01 19:24:09.942002785 +0000
+++ dolphin/Source/Core/DolphinNoGUI/CMakeLists.txt 2023-06-05 18:48:45.571837571 +0000
--- dolphin.orig/Source/Core/DolphinNoGUI/CMakeLists.txt 2023-09-26 17:58:02.833996257 +0000
+++ dolphin/Source/Core/DolphinNoGUI/CMakeLists.txt 2023-09-26 18:02:22.836042087 +0000
@@ -17,6 +17,22 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux"
target_sources(dolphin-nogui PRIVATE PlatformFBDev.cpp)
endif()
@ -525,8 +525,8 @@ diff -rupN dolphin.orig/Source/Core/DolphinNoGUI/CMakeLists.txt dolphin/Source/C
target_link_libraries(dolphin-nogui
diff -rupN dolphin.orig/Source/Core/DolphinNoGUI/MainNoGUI.cpp dolphin/Source/Core/DolphinNoGUI/MainNoGUI.cpp
--- dolphin.orig/Source/Core/DolphinNoGUI/MainNoGUI.cpp 2023-06-01 19:24:09.942002785 +0000
+++ dolphin/Source/Core/DolphinNoGUI/MainNoGUI.cpp 2023-06-05 18:48:45.571837571 +0000
--- dolphin.orig/Source/Core/DolphinNoGUI/MainNoGUI.cpp 2023-09-26 17:58:02.833996257 +0000
+++ dolphin/Source/Core/DolphinNoGUI/MainNoGUI.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -155,6 +155,11 @@ static std::unique_ptr<Platform> GetPlat
{
std::string platform_name = static_cast<const char*>(options.get("platform"));
@ -551,8 +551,8 @@ diff -rupN dolphin.orig/Source/Core/DolphinNoGUI/MainNoGUI.cpp dolphin/Source/Co
optparse::Values& options = CommandLineParse::ParseArguments(parser.get(), argc, argv);
diff -rupN dolphin.orig/Source/Core/DolphinNoGUI/Platform.h dolphin/Source/Core/DolphinNoGUI/Platform.h
--- dolphin.orig/Source/Core/DolphinNoGUI/Platform.h 2023-06-01 19:23:58.553632524 +0000
+++ dolphin/Source/Core/DolphinNoGUI/Platform.h 2023-06-05 18:48:45.571837571 +0000
--- dolphin.orig/Source/Core/DolphinNoGUI/Platform.h 2023-09-26 17:58:02.833996257 +0000
+++ dolphin/Source/Core/DolphinNoGUI/Platform.h 2023-09-26 18:02:22.836042087 +0000
@@ -35,6 +35,10 @@ public:
static std::unique_ptr<Platform> CreateX11Platform();
#endif
@ -566,8 +566,8 @@ diff -rupN dolphin.orig/Source/Core/DolphinNoGUI/Platform.h dolphin/Source/Core/
#endif
diff -rupN dolphin.orig/Source/Core/DolphinNoGUI/PlatformWayland.cpp dolphin/Source/Core/DolphinNoGUI/PlatformWayland.cpp
--- dolphin.orig/Source/Core/DolphinNoGUI/PlatformWayland.cpp 1970-01-01 00:00:00.000000000 +0000
+++ dolphin/Source/Core/DolphinNoGUI/PlatformWayland.cpp 2023-06-07 14:37:14.927874203 +0000
@@ -0,0 +1,371 @@
+++ dolphin/Source/Core/DolphinNoGUI/PlatformWayland.cpp 2023-09-26 18:27:27.334792936 +0000
@@ -0,0 +1,364 @@
+// Copyright 2018 Dolphin Emulator Project
+// Licensed under GPLv2+
+// Refer to the license.txt file included.
@ -791,13 +791,6 @@ diff -rupN dolphin.orig/Source/Core/DolphinNoGUI/PlatformWayland.cpp dolphin/Sou
+ xdg_toplevel_set_title(m_xdg_toplevel, string.c_str());
+}
+
+auto ShowEmulationSpeed = []() {
+ const float emulation_speed = Config::Get(Config::MAIN_EMULATION_SPEED);
+ OSD::AddMessage(emulation_speed <= 0 ?
+ "Emulation Speed: Unlimited" :
+ fmt::format("Emulation Speed: {}%", std::lround(emulation_speed * 100.f)));
+};
+
+void PlatformWayland::MainLoop()
+{
+ while (IsRunning())
@ -899,13 +892,13 @@ diff -rupN dolphin.orig/Source/Core/DolphinNoGUI/PlatformWayland.cpp dolphin/Sou
+ auto speed = Config::Get(Config::MAIN_EMULATION_SPEED) + 1.0;
+ speed = (speed >= 0.95 && speed <= 1.05) ? 1.0 : speed;
+ Config::SetCurrent(Config::MAIN_EMULATION_SPEED, speed);
+ ShowEmulationSpeed();
+ OSD::AddMessage("Fast Forward: ON");
+ fforward = 1;
+ } else {
+ auto speed = Config::Get(Config::MAIN_EMULATION_SPEED) - 1.0;
+ speed = (speed <= 0 || (speed >= 0.95 && speed <= 1.05)) ? 1.0 : speed;
+ Config::SetCurrent(Config::MAIN_EMULATION_SPEED, speed);
+ ShowEmulationSpeed();
+ OSD::AddMessage("Fast Forward: OFF");
+ fforward = 0;
+ }
+ hotkey = 0;
@ -940,8 +933,8 @@ diff -rupN dolphin.orig/Source/Core/DolphinNoGUI/PlatformWayland.cpp dolphin/Sou
+ return std::make_unique<PlatformWayland>();
+}
diff -rupN dolphin.orig/Source/Core/DolphinNoGUI/PlatformX11.cpp dolphin/Source/Core/DolphinNoGUI/PlatformX11.cpp
--- dolphin.orig/Source/Core/DolphinNoGUI/PlatformX11.cpp 2023-06-01 19:24:09.942002785 +0000
+++ dolphin/Source/Core/DolphinNoGUI/PlatformX11.cpp 2023-06-05 18:48:45.571837571 +0000
--- dolphin.orig/Source/Core/DolphinNoGUI/PlatformX11.cpp 2023-09-26 17:58:02.833996257 +0000
+++ dolphin/Source/Core/DolphinNoGUI/PlatformX11.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -57,8 +57,8 @@ private:
#endif
int m_window_x = Config::Get(Config::MAIN_RENDER_WINDOW_XPOS);
@ -987,8 +980,8 @@ diff -rupN dolphin.orig/Source/Core/DolphinNoGUI/PlatformX11.cpp dolphin/Source/
break;
}
diff -rupN dolphin.orig/Source/Core/InputCommon/GCPadStatus.h dolphin/Source/Core/InputCommon/GCPadStatus.h
--- dolphin.orig/Source/Core/InputCommon/GCPadStatus.h 2023-06-01 19:23:58.569633044 +0000
+++ dolphin/Source/Core/InputCommon/GCPadStatus.h 2023-06-05 18:48:45.595838339 +0000
--- dolphin.orig/Source/Core/InputCommon/GCPadStatus.h 2023-09-26 17:58:02.845996536 +0000
+++ dolphin/Source/Core/InputCommon/GCPadStatus.h 2023-09-26 18:02:22.836042087 +0000
@@ -26,6 +26,7 @@ enum PadButton
PAD_BUTTON_X = 0x0400,
PAD_BUTTON_Y = 0x0800,
@ -998,9 +991,101 @@ diff -rupN dolphin.orig/Source/Core/InputCommon/GCPadStatus.h dolphin/Source/Cor
struct GCPadStatus
diff -rupN dolphin.orig/Source/Core/VideoBackends/OGL/OGLRender.cpp dolphin/Source/Core/VideoBackends/OGL/OGLRender.cpp
--- dolphin.orig/Source/Core/VideoBackends/OGL/OGLRender.cpp 2023-06-01 19:24:09.954003175 +0000
+++ dolphin/Source/Core/VideoBackends/OGL/OGLRender.cpp 2023-06-05 18:48:45.615838979 +0000
@@ -1079,7 +1079,7 @@ void Renderer::CheckForSurfaceChange()
--- dolphin.orig/Source/Core/VideoBackends/OGL/OGLRender.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/OGL/OGLRender.cpp 2023-09-26 21:41:39.568275473 +0000
@@ -471,11 +471,7 @@ Renderer::Renderer(std::unique_ptr<GLCon
g_ogl_config.bSupportsDebug =
GLExtensions::Supports("GL_KHR_debug") || GLExtensions::Supports("GL_ARB_debug_output");
g_ogl_config.bSupportsTextureStorage = GLExtensions::Supports("GL_ARB_texture_storage");
- g_ogl_config.bSupports3DTextureStorageMultisample =
- GLExtensions::Supports("GL_ARB_texture_storage_multisample") ||
- GLExtensions::Supports("GL_OES_texture_storage_multisample_2d_array");
- g_ogl_config.bSupports2DTextureStorageMultisample =
- GLExtensions::Supports("GL_ARB_texture_storage_multisample");
+ g_ogl_config.SupportedMultisampleTexStorage = MultisampleTexStorageType::TexStorageNone;
g_ogl_config.bSupportsImageLoadStore = GLExtensions::Supports("GL_ARB_shader_image_load_store");
g_ogl_config.bSupportsConservativeDepth = GLExtensions::Supports("GL_ARB_conservative_depth");
g_ogl_config.bSupportsAniso = GLExtensions::Supports("GL_EXT_texture_filter_anisotropic");
@@ -506,9 +502,10 @@ Renderer::Renderer(std::unique_ptr<GLCon
if (m_main_gl_context->IsGLES())
{
- g_ogl_config.SupportedESPointSize = GLExtensions::Supports("GL_OES_geometry_point_size") ? 1 :
- GLExtensions::Supports("GL_EXT_geometry_point_size") ? 2 :
- 0;
+ g_ogl_config.SupportedESPointSize =
+ GLExtensions::Supports("GL_OES_geometry_point_size") ? EsPointSizeType::PointSizeOes :
+ GLExtensions::Supports("GL_EXT_geometry_point_size") ? EsPointSizeType::PointSizeExt :
+ EsPointSizeType::PointSizeNone;
g_ogl_config.SupportedESTextureBuffer =
GLExtensions::Supports("VERSION_GLES_3_2") ? EsTexbufType::TexbufCore :
GLExtensions::Supports("GL_OES_texture_buffer") ? EsTexbufType::TexbufOes :
@@ -548,21 +545,16 @@ Renderer::Renderer(std::unique_ptr<GLCon
g_Config.backend_info.bSupportsGeometryShaders = g_ogl_config.bSupportsAEP;
g_Config.backend_info.bSupportsComputeShaders = true;
g_Config.backend_info.bSupportsGSInstancing =
- g_Config.backend_info.bSupportsGeometryShaders && g_ogl_config.SupportedESPointSize > 0;
+ g_Config.backend_info.bSupportsGeometryShaders &&
+ g_ogl_config.SupportedESPointSize != EsPointSizeType::PointSizeNone;
g_Config.backend_info.bSupportsSSAA = g_ogl_config.bSupportsAEP;
g_Config.backend_info.bSupportsFragmentStoresAndAtomics = true;
g_ogl_config.bSupportsMSAA = true;
g_ogl_config.bSupportsTextureStorage = true;
- g_ogl_config.bSupports2DTextureStorageMultisample = true;
+ if (GLExtensions::Supports("GL_OES_texture_storage_multisample_2d_array"))
+ g_ogl_config.SupportedMultisampleTexStorage = MultisampleTexStorageType::TexStorageOes;
g_Config.backend_info.bSupportsBitfield = true;
g_Config.backend_info.bSupportsDynamicSamplerIndexing = g_ogl_config.bSupportsAEP;
- if (g_ActiveConfig.stereo_mode != StereoMode::Off && g_ActiveConfig.iMultisamples > 1 &&
- !g_ogl_config.bSupports3DTextureStorageMultisample)
- {
- // GLES 3.1 can't support stereo rendering and MSAA
- OSD::AddMessage("MSAA Stereo rendering isn't supported by your GPU.", 10000);
- Config::SetCurrent(Config::GFX_MSAA, UINT32_C(1));
- }
}
else
{
@@ -572,7 +564,8 @@ Renderer::Renderer(std::unique_ptr<GLCon
g_ogl_config.bSupportsImageLoadStore = true;
g_Config.backend_info.bSupportsGeometryShaders = true;
g_Config.backend_info.bSupportsComputeShaders = true;
- g_Config.backend_info.bSupportsGSInstancing = g_ogl_config.SupportedESPointSize > 0;
+ g_Config.backend_info.bSupportsGSInstancing =
+ g_ogl_config.SupportedESPointSize != EsPointSizeType::PointSizeNone;
g_Config.backend_info.bSupportsPaletteConversion = true;
g_Config.backend_info.bSupportsSSAA = true;
g_Config.backend_info.bSupportsFragmentStoresAndAtomics = true;
@@ -581,8 +574,7 @@ Renderer::Renderer(std::unique_ptr<GLCon
g_ogl_config.bSupportsDebug = true;
g_ogl_config.bSupportsMSAA = true;
g_ogl_config.bSupportsTextureStorage = true;
- g_ogl_config.bSupports2DTextureStorageMultisample = true;
- g_ogl_config.bSupports3DTextureStorageMultisample = true;
+ g_ogl_config.SupportedMultisampleTexStorage = MultisampleTexStorageType::TexStorageCore;
g_Config.backend_info.bSupportsBitfield = true;
g_Config.backend_info.bSupportsDynamicSamplerIndexing = true;
g_Config.backend_info.bSupportsSettingObjectNames = true;
@@ -590,6 +582,9 @@ Renderer::Renderer(std::unique_ptr<GLCon
}
else
{
+ if (GLExtensions::Supports("GL_ARB_texture_storage_multisample"))
+ g_ogl_config.SupportedMultisampleTexStorage = MultisampleTexStorageType::TexStorageCore;
+
if (GLExtensions::Version() < 300)
{
PanicAlertFmtT("GPU: OGL ERROR: Need at least GLSL 1.30\n"
@@ -628,7 +623,7 @@ Renderer::Renderer(std::unique_ptr<GLCon
{
// TODO: We should really parse the GL_SHADING_LANGUAGE_VERSION token.
g_ogl_config.eSupportedGLSLVersion = Glsl430;
- g_ogl_config.bSupportsTextureStorage = true;
+ g_ogl_config.SupportedMultisampleTexStorage = MultisampleTexStorageType::TexStorageCore;
g_ogl_config.bSupportsImageLoadStore = true;
g_Config.backend_info.bSupportsSSAA = true;
g_Config.backend_info.bSupportsSettingObjectNames = true;
@@ -1079,7 +1074,7 @@ void Renderer::CheckForSurfaceChange()
if (!m_surface_changed.TestAndClear())
return;
@ -1009,7 +1094,7 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/OGL/OGLRender.cpp dolphin/Sour
m_new_surface_handle = nullptr;
// With a surface change, the window likely has new dimensions.
@@ -1093,7 +1093,7 @@ void Renderer::CheckForSurfaceResize()
@@ -1093,7 +1088,7 @@ void Renderer::CheckForSurfaceResize()
if (!m_surface_resized.TestAndClear())
return;
@ -1018,9 +1103,139 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/OGL/OGLRender.cpp dolphin/Sour
m_backbuffer_width = m_main_gl_context->GetBackBufferWidth();
m_backbuffer_height = m_main_gl_context->GetBackBufferHeight();
m_system_framebuffer->UpdateDimensions(m_backbuffer_width, m_backbuffer_height);
diff -rupN dolphin.orig/Source/Core/VideoBackends/OGL/OGLRender.h dolphin/Source/Core/VideoBackends/OGL/OGLRender.h
--- dolphin.orig/Source/Core/VideoBackends/OGL/OGLRender.h 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/OGL/OGLRender.h 2023-09-26 21:32:17.039048706 +0000
@@ -31,6 +31,14 @@ enum GlslVersion
GlslEs310, // GLES 3.1
GlslEs320, // GLES 3.2
};
+
+enum class EsPointSizeType
+{
+ PointSizeNone,
+ PointSizeOes,
+ PointSizeExt,
+};
+
enum class EsTexbufType
{
TexbufNone,
@@ -46,6 +54,13 @@ enum class EsFbFetchType
FbFetchArm,
};
+enum class MultisampleTexStorageType
+{
+ TexStorageNone,
+ TexStorageCore,
+ TexStorageOes,
+};
+
// ogl-only config, so not in VideoConfig.h
struct VideoConfig
{
@@ -60,11 +75,10 @@ struct VideoConfig
bool bSupportsAEP;
bool bSupportsDebug;
bool bSupportsCopySubImage;
- u8 SupportedESPointSize;
+ EsPointSizeType SupportedESPointSize;
EsTexbufType SupportedESTextureBuffer;
bool bSupportsTextureStorage;
- bool bSupports2DTextureStorageMultisample;
- bool bSupports3DTextureStorageMultisample;
+ MultisampleTexStorageType SupportedMultisampleTexStorage;
bool bSupportsConservativeDepth;
bool bSupportsImageLoadStore;
bool bSupportsAniso;
diff -rupN dolphin.orig/Source/Core/VideoBackends/OGL/OGLTexture.cpp dolphin/Source/Core/VideoBackends/OGL/OGLTexture.cpp
--- dolphin.orig/Source/Core/VideoBackends/OGL/OGLTexture.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/OGL/OGLTexture.cpp 2023-09-26 21:34:37.398249032 +0000
@@ -128,12 +128,18 @@ OGLTexture::OGLTexture(const TextureConf
GLenum gl_internal_format = GetGLInternalFormatForTextureFormat(m_config.format, true);
if (tex_config.IsMultisampled())
{
- if (g_ogl_config.bSupportsTextureStorage)
+ ASSERT(g_ogl_config.bSupportsMSAA);
+ if (g_ogl_config.SupportedMultisampleTexStorage != MultisampleTexStorageType::TexStorageNone)
+ {
glTexStorage3DMultisample(target, tex_config.samples, gl_internal_format, m_config.width,
m_config.height, m_config.layers, GL_FALSE);
+ }
else
+ {
+ ASSERT(!g_ogl_config.bIsES);
glTexImage3DMultisample(target, tex_config.samples, gl_internal_format, m_config.width,
m_config.height, m_config.layers, GL_FALSE);
+ }
}
else if (g_ogl_config.bSupportsTextureStorage)
{
diff -rupN dolphin.orig/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp dolphin/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
--- dolphin.orig/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp 2023-09-26 21:37:11.705777665 +0000
@@ -661,12 +661,13 @@ void ProgramShaderCache::CreateHeader()
std::string SupportedESTextureBuffer;
switch (g_ogl_config.SupportedESPointSize)
{
- case 1:
+ case EsPointSizeType::PointSizeOes:
SupportedESPointSize = "#extension GL_OES_geometry_point_size : enable";
break;
- case 2:
+ case EsPointSizeType::PointSizeExt:
SupportedESPointSize = "#extension GL_EXT_geometry_point_size : enable";
break;
+ case EsPointSizeType::PointSizeNone:
default:
SupportedESPointSize = "";
break;
@@ -718,6 +719,13 @@ void ProgramShaderCache::CreateHeader()
break;
}
+ // The sampler2DMSArray keyword is reserved in GLSL ES 3.0 and 3.1, but is available in 3.2 and
+ // with GL_OES_texture_storage_multisample_2d_array for 3.1.
+ // See https://bugs.dolphin-emu.org/issues/13198.
+ const bool use_multisample_2d_array_precision =
+ v >= GlslEs320 ||
+ g_ogl_config.SupportedMultisampleTexStorage != MultisampleTexStorageType::TexStorageNone;
+
std::string shader_shuffle_string;
if (g_ogl_config.bSupportsShaderThreadShuffleNV)
{
@@ -762,6 +770,7 @@ void ProgramShaderCache::CreateHeader()
"{}\n" // shader thread shuffle
"{}\n" // derivative control
"{}\n" // query levels
+ "{}\n" // OES multisample texture storage
// Precision defines for GLSL ES
"{}\n"
@@ -847,12 +856,18 @@ void ProgramShaderCache::CreateHeader()
g_ActiveConfig.backend_info.bSupportsTextureQueryLevels ?
"#extension GL_ARB_texture_query_levels : enable" :
"",
+ // Note: GL_ARB_texture_storage_multisample doesn't have an #extension, as it doesn't
+ // need to change GLSL, but on GLES 3.1 sampler2DMSArray is a reserved keyword unless
+ // the extension is enabled. Thus, we don't need to check TexStorageCore/have an ARB version.
+ g_ogl_config.SupportedMultisampleTexStorage == MultisampleTexStorageType::TexStorageOes ?
+ "#extension GL_OES_texture_storage_multisample_2d_array : enable" :
+ "",
is_glsles ? "precision highp float;" : "", is_glsles ? "precision highp int;" : "",
is_glsles ? "precision highp sampler2DArray;" : "",
(is_glsles && g_ActiveConfig.backend_info.bSupportsPaletteConversion) ?
"precision highp usamplerBuffer;" :
"",
- v > GlslEs300 ? "precision highp sampler2DMSArray;" : "",
+ use_multisample_2d_array_precision ? "precision highp sampler2DMSArray;" : "",
v >= GlslEs310 ? "precision highp image2DArray;" : "");
}
diff -rupN dolphin.orig/Source/Core/VideoBackends/Software/SWOGLWindow.cpp dolphin/Source/Core/VideoBackends/Software/SWOGLWindow.cpp
--- dolphin.orig/Source/Core/VideoBackends/Software/SWOGLWindow.cpp 2023-06-01 19:23:58.577633304 +0000
+++ dolphin/Source/Core/VideoBackends/Software/SWOGLWindow.cpp 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Software/SWOGLWindow.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Software/SWOGLWindow.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -32,6 +32,16 @@ bool SWOGLWindow::IsHeadless() const
return m_gl_context->IsHeadless();
}
@ -1058,8 +1273,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Software/SWOGLWindow.cpp dolph
GLsizei glWidth = (GLsizei)m_gl_context->GetBackBufferWidth();
GLsizei glHeight = (GLsizei)m_gl_context->GetBackBufferHeight();
diff -rupN dolphin.orig/Source/Core/VideoBackends/Software/SWOGLWindow.h dolphin/Source/Core/VideoBackends/Software/SWOGLWindow.h
--- dolphin.orig/Source/Core/VideoBackends/Software/SWOGLWindow.h 2023-06-01 19:23:58.577633304 +0000
+++ dolphin/Source/Core/VideoBackends/Software/SWOGLWindow.h 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Software/SWOGLWindow.h 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Software/SWOGLWindow.h 2023-09-26 18:02:22.836042087 +0000
@@ -20,6 +20,10 @@ public:
GLContext* GetContext() const { return m_gl_context.get(); }
bool IsHeadless() const;
@ -1072,8 +1287,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Software/SWOGLWindow.h dolphin
void ShowImage(const AbstractTexture* image, const MathUtil::Rectangle<int>& xfb_region);
diff -rupN dolphin.orig/Source/Core/VideoBackends/Software/SWRenderer.cpp dolphin/Source/Core/VideoBackends/Software/SWRenderer.cpp
--- dolphin.orig/Source/Core/VideoBackends/Software/SWRenderer.cpp 2023-06-01 19:24:09.954003175 +0000
+++ dolphin/Source/Core/VideoBackends/Software/SWRenderer.cpp 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Software/SWRenderer.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Software/SWRenderer.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -60,17 +60,17 @@ SWRenderer::CreateFramebuffer(AbstractTe
static_cast<SWTexture*>(depth_attachment));
}
@ -1128,8 +1343,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Software/SWRenderer.cpp dolphi
{
u32 value = 0;
diff -rupN dolphin.orig/Source/Core/VideoBackends/Software/SWRenderer.h dolphin/Source/Core/VideoBackends/Software/SWRenderer.h
--- dolphin.orig/Source/Core/VideoBackends/Software/SWRenderer.h 2023-06-01 19:24:09.954003175 +0000
+++ dolphin/Source/Core/VideoBackends/Software/SWRenderer.h 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Software/SWRenderer.h 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Software/SWRenderer.h 2023-09-26 18:02:22.836042087 +0000
@@ -29,7 +29,7 @@ public:
std::unique_ptr<AbstractFramebuffer>
CreateFramebuffer(AbstractTexture* color_attachment, AbstractTexture* depth_attachment) override;
@ -1149,8 +1364,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Software/SWRenderer.h dolphin/
};
} // namespace SW
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/CMakeLists.txt dolphin/Source/Core/VideoBackends/Vulkan/CMakeLists.txt
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/CMakeLists.txt 2023-06-01 19:24:09.954003175 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/CMakeLists.txt 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/CMakeLists.txt 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/CMakeLists.txt 2023-09-26 18:02:22.836042087 +0000
@@ -35,6 +35,8 @@ add_library(videovulkan
VulkanContext.h
VulkanLoader.cpp
@ -1161,8 +1376,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/CMakeLists.txt dolphin/
target_link_libraries(videovulkan
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp dolphin/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp 2023-06-01 19:24:09.954003175 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -10,24 +10,24 @@
#include "Common/MsgHandler.h"
#include "Common/Thread.h"
@ -1562,8 +1777,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cp
-std::unique_ptr<CommandBufferManager> g_command_buffer_mgr;
} // namespace Vulkan
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/CommandBufferManager.h dolphin/Source/Core/VideoBackends/Vulkan/CommandBufferManager.h
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/CommandBufferManager.h 2023-06-01 19:24:09.954003175 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/CommandBufferManager.h 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/CommandBufferManager.h 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/CommandBufferManager.h 2023-09-26 18:02:22.836042087 +0000
@@ -22,10 +22,12 @@
namespace Vulkan
@ -1703,8 +1918,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/CommandBufferManager.h
} // namespace Vulkan
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/Constants.h dolphin/Source/Core/VideoBackends/Vulkan/Constants.h
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/Constants.h 2023-06-01 19:24:09.954003175 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/Constants.h 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/Constants.h 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/Constants.h 2023-09-26 18:02:22.836042087 +0000
@@ -12,7 +12,7 @@
namespace Vulkan
{
@ -1715,8 +1930,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/Constants.h dolphin/Sou
// Number of frames in flight, will be used to decide how many descriptor pools are used
constexpr size_t NUM_FRAMES_IN_FLIGHT = 2;
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/ObjectCache.cpp dolphin/Source/Core/VideoBackends/Vulkan/ObjectCache.cpp
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/ObjectCache.cpp 2023-06-01 19:24:09.954003175 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/ObjectCache.cpp 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/ObjectCache.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/ObjectCache.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -389,6 +389,8 @@ VkSampler ObjectCache::GetSampler(const
VkRenderPass ObjectCache::GetRenderPass(VkFormat color_format, VkFormat depth_format,
u32 multisamples, VkAttachmentLoadOp load_op)
@ -1736,8 +1951,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/ObjectCache.cpp dolphin
vkDestroyRenderPass(g_vulkan_context->GetDevice(), it.second, nullptr);
m_render_pass_cache.clear();
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/ObjectCache.h dolphin/Source/Core/VideoBackends/Vulkan/ObjectCache.h
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/ObjectCache.h 2023-06-01 19:23:58.577633304 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/ObjectCache.h 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/ObjectCache.h 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/ObjectCache.h 2023-09-26 18:02:22.836042087 +0000
@@ -7,6 +7,7 @@
#include <cstddef>
#include <map>
@ -1755,8 +1970,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/ObjectCache.h dolphin/S
std::map<RenderPassCacheKey, VkRenderPass> m_render_pass_cache;
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/StagingBuffer.cpp dolphin/Source/Core/VideoBackends/Vulkan/StagingBuffer.cpp
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/StagingBuffer.cpp 2023-06-01 19:23:58.577633304 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/StagingBuffer.cpp 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/StagingBuffer.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/StagingBuffer.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -8,6 +8,7 @@
#include "Common/Assert.h"
@ -1778,8 +1993,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/StagingBuffer.cpp dolph
void StagingBuffer::BufferMemoryBarrier(VkCommandBuffer command_buffer, VkBuffer buffer,
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/StateTracker.cpp dolphin/Source/Core/VideoBackends/Vulkan/StateTracker.cpp
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/StateTracker.cpp 2023-06-01 19:24:09.958003305 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/StateTracker.cpp 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/StateTracker.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/StateTracker.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -16,59 +16,93 @@
namespace Vulkan
@ -2179,8 +2394,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/StateTracker.cpp dolphi
g_object_cache->GetPipelineLayout(PIPELINE_LAYOUT_COMPUTE), 0, 1,
&m_compute_descriptor_set, 1, &m_bindings.utility_ubo_offset);
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/StateTracker.h dolphin/Source/Core/VideoBackends/Vulkan/StateTracker.h
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/StateTracker.h 2023-06-01 19:24:09.958003305 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/StateTracker.h 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/StateTracker.h 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/StateTracker.h 2023-09-26 18:02:22.836042087 +0000
@@ -13,28 +13,24 @@
namespace Vulkan
@ -2256,8 +2471,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/StateTracker.h dolphin/
};
} // namespace Vulkan
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKBoundingBox.cpp dolphin/Source/Core/VideoBackends/Vulkan/VKBoundingBox.cpp
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKBoundingBox.cpp 2023-06-01 19:24:09.958003305 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKBoundingBox.cpp 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKBoundingBox.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKBoundingBox.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -12,6 +12,7 @@
#include "VideoBackends/Vulkan/StagingBuffer.h"
#include "VideoBackends/Vulkan/StateTracker.h"
@ -2395,8 +2610,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKBoundingBox.cpp dolph
bool VKBoundingBox::CreateGPUBuffer()
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKMain.cpp dolphin/Source/Core/VideoBackends/Vulkan/VKMain.cpp
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKMain.cpp 2023-06-01 19:24:09.958003305 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKMain.cpp 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKMain.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKMain.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -18,6 +18,7 @@
#include "VideoBackends/Vulkan/VKVertexManager.h"
#include "VideoBackends/Vulkan/VulkanContext.h"
@ -2481,8 +2696,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKMain.cpp dolphin/Sour
ShutdownShared();
UnloadVulkanLibrary();
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKPerfQuery.cpp dolphin/Source/Core/VideoBackends/Vulkan/VKPerfQuery.cpp
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKPerfQuery.cpp 2023-06-01 19:24:09.958003305 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKPerfQuery.cpp 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKPerfQuery.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKPerfQuery.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -11,6 +11,7 @@
#include "Common/Logging/Log.h"
#include "Common/MsgHandler.h"
@ -2602,8 +2817,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKPerfQuery.cpp dolphin
Renderer::GetInstance()->ExecuteCommandBuffer(true, blocking);
}
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKRenderer.cpp dolphin/Source/Core/VideoBackends/Vulkan/VKRenderer.cpp
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKRenderer.cpp 2023-06-01 19:24:09.958003305 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKRenderer.cpp 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKRenderer.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKRenderer.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -31,6 +31,7 @@
#include "VideoBackends/Vulkan/VKVertexFormat.h"
#include "VideoBackends/Vulkan/VulkanContext.h"
@ -3325,7 +3540,7 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKRenderer.cpp dolphin/
} // namespace Vulkan
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKScheduler.cpp dolphin/Source/Core/VideoBackends/Vulkan/VKScheduler.cpp
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKScheduler.cpp 1970-01-01 00:00:00.000000000 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKScheduler.cpp 2023-06-05 18:48:45.615838979 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKScheduler.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -0,0 +1,155 @@
+// Copyright 2022 Dolphin Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
@ -3484,7 +3699,7 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKScheduler.cpp dolphin
+} // namespace Vulkan
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKScheduler.h dolphin/Source/Core/VideoBackends/Vulkan/VKScheduler.h
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKScheduler.h 1970-01-01 00:00:00.000000000 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKScheduler.h 2023-06-05 18:48:45.615838979 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKScheduler.h 2023-09-26 18:02:22.836042087 +0000
@@ -0,0 +1,160 @@
+// Copyright 2022 Dolphin Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
@ -3647,8 +3862,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKScheduler.h dolphin/S
+extern std::unique_ptr<Scheduler> g_scheduler;
+} // namespace Vulkan
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKStreamBuffer.cpp dolphin/Source/Core/VideoBackends/Vulkan/VKStreamBuffer.cpp
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKStreamBuffer.cpp 2023-06-01 19:23:58.577633304 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKStreamBuffer.cpp 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKStreamBuffer.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKStreamBuffer.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -12,6 +12,7 @@
#include "Common/MsgHandler.h"
@ -3722,8 +3937,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKStreamBuffer.cpp dolp
m_current_offset == iter->second ? m_tracked_fences.end() : ++iter);
m_current_offset = new_offset;
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKSwapChain.cpp dolphin/Source/Core/VideoBackends/Vulkan/VKSwapChain.cpp
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKSwapChain.cpp 2023-06-01 19:24:09.958003305 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKSwapChain.cpp 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKSwapChain.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKSwapChain.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -13,9 +13,9 @@
#include "VideoBackends/Vulkan/CommandBufferManager.h"
@ -3888,8 +4103,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKSwapChain.cpp dolphin
if (m_surface == VK_NULL_HANDLE)
return false;
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKSwapChain.h dolphin/Source/Core/VideoBackends/Vulkan/VKSwapChain.h
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKSwapChain.h 2023-06-01 19:23:58.577633304 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKSwapChain.h 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKSwapChain.h 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKSwapChain.h 2023-09-26 18:02:22.836042087 +0000
@@ -3,6 +3,7 @@
#pragma once
@ -3943,8 +4158,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKSwapChain.h dolphin/S
u32 m_height = 0;
u32 m_layers = 0;
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKTexture.cpp dolphin/Source/Core/VideoBackends/Vulkan/VKTexture.cpp
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKTexture.cpp 2023-06-01 19:44:08.124503603 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKTexture.cpp 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKTexture.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKTexture.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -21,6 +21,7 @@
#include "VideoBackends/Vulkan/VKStreamBuffer.h"
#include "VideoBackends/Vulkan/VulkanContext.h"
@ -4452,8 +4667,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKTexture.cpp dolphin/S
}
} // namespace Vulkan
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKTexture.h dolphin/Source/Core/VideoBackends/Vulkan/VKTexture.h
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKTexture.h 2023-06-01 19:24:09.958003305 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKTexture.h 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKTexture.h 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKTexture.h 2023-09-26 18:02:22.836042087 +0000
@@ -67,8 +67,8 @@ public:
// irrelevant and will not be loaded.
void OverrideImageLayout(VkImageLayout new_layout);
@ -4466,8 +4681,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKTexture.h dolphin/Sou
private:
bool CreateView(VkImageViewType type);
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKVertexManager.cpp dolphin/Source/Core/VideoBackends/Vulkan/VKVertexManager.cpp
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKVertexManager.cpp 2023-06-01 19:24:09.958003305 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKVertexManager.cpp 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VKVertexManager.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VKVertexManager.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -15,6 +15,7 @@
#include "VideoBackends/Vulkan/CommandBufferManager.h"
#include "VideoBackends/Vulkan/StateTracker.h"
@ -4662,8 +4877,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VKVertexManager.cpp dol
}
} // namespace Vulkan
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp dolphin/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp 2023-06-01 19:24:09.958003305 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -274,6 +274,13 @@ bool VulkanContext::SelectInstanceExtens
return false;
}
@ -4679,8 +4894,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp dolph
if (wstype == WindowSystemType::Android &&
!AddExtension(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, true))
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VulkanEntryPoints.inl dolphin/Source/Core/VideoBackends/Vulkan/VulkanEntryPoints.inl
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VulkanEntryPoints.inl 2023-06-01 19:23:58.577633304 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VulkanEntryPoints.inl 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VulkanEntryPoints.inl 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VulkanEntryPoints.inl 2023-09-26 18:02:22.836042087 +0000
@@ -49,6 +49,11 @@ VULKAN_INSTANCE_ENTRY_POINT(vkCreateXlib
VULKAN_INSTANCE_ENTRY_POINT(vkGetPhysicalDeviceXlibPresentationSupportKHR, false)
#endif
@ -4694,8 +4909,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VulkanEntryPoints.inl d
VULKAN_INSTANCE_ENTRY_POINT(vkCreateAndroidSurfaceKHR, false)
#endif
diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VulkanLoader.h dolphin/Source/Core/VideoBackends/Vulkan/VulkanLoader.h
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VulkanLoader.h 2023-06-01 19:24:09.958003305 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VulkanLoader.h 2023-06-05 18:48:45.615838979 +0000
--- dolphin.orig/Source/Core/VideoBackends/Vulkan/VulkanLoader.h 2023-09-26 17:58:02.853996721 +0000
+++ dolphin/Source/Core/VideoBackends/Vulkan/VulkanLoader.h 2023-09-26 18:02:22.836042087 +0000
@@ -13,6 +13,10 @@
#define VK_USE_PLATFORM_XLIB_KHR
#endif
@ -4708,8 +4923,8 @@ diff -rupN dolphin.orig/Source/Core/VideoBackends/Vulkan/VulkanLoader.h dolphin/
#define VK_USE_PLATFORM_ANDROID_KHR
#endif
diff -rupN dolphin.orig/Source/Core/VideoCommon/FramebufferManager.cpp dolphin/Source/Core/VideoCommon/FramebufferManager.cpp
--- dolphin.orig/Source/Core/VideoCommon/FramebufferManager.cpp 2023-06-01 19:24:09.958003305 +0000
+++ dolphin/Source/Core/VideoCommon/FramebufferManager.cpp 2023-06-05 19:16:23.547426723 +0000
--- dolphin.orig/Source/Core/VideoCommon/FramebufferManager.cpp 2023-09-26 17:58:02.857996813 +0000
+++ dolphin/Source/Core/VideoCommon/FramebufferManager.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -630,7 +630,7 @@ void FramebufferManager::DestroyReadback
bool FramebufferManager::CreateReadbackFramebuffer()
@ -4747,8 +4962,8 @@ diff -rupN dolphin.orig/Source/Core/VideoCommon/FramebufferManager.cpp dolphin/S
return;
}
diff -rupN dolphin.orig/Source/Core/VideoCommon/RenderBase.cpp dolphin/Source/Core/VideoCommon/RenderBase.cpp
--- dolphin.orig/Source/Core/VideoCommon/RenderBase.cpp 2023-06-01 19:24:09.958003305 +0000
+++ dolphin/Source/Core/VideoCommon/RenderBase.cpp 2023-06-05 20:18:15.508539814 +0000
--- dolphin.orig/Source/Core/VideoCommon/RenderBase.cpp 2023-09-26 17:58:02.857996813 +0000
+++ dolphin/Source/Core/VideoCommon/RenderBase.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -364,19 +364,24 @@ void Renderer::RenderToXFB(u32 xfbAddr,
return;
}
@ -4811,8 +5026,8 @@ diff -rupN dolphin.orig/Source/Core/VideoCommon/RenderBase.cpp dolphin/Source/Co
}
diff -rupN dolphin.orig/Source/Core/VideoCommon/RenderBase.h dolphin/Source/Core/VideoCommon/RenderBase.h
--- dolphin.orig/Source/Core/VideoCommon/RenderBase.h 2023-06-01 19:24:09.958003305 +0000
+++ dolphin/Source/Core/VideoCommon/RenderBase.h 2023-06-05 19:00:51.760701274 +0000
--- dolphin.orig/Source/Core/VideoCommon/RenderBase.h 2023-09-26 17:58:02.857996813 +0000
+++ dolphin/Source/Core/VideoCommon/RenderBase.h 2023-09-26 18:02:22.836042087 +0000
@@ -193,7 +193,8 @@ public:
std::tuple<MathUtil::Rectangle<int>, MathUtil::Rectangle<int>>
ConvertStereoRectangle(const MathUtil::Rectangle<int>& rc) const;
@ -4854,8 +5069,8 @@ diff -rupN dolphin.orig/Source/Core/VideoCommon/RenderBase.h dolphin/Source/Core
// These will be set on the first call to SetWindowSize.
int m_last_window_request_width = 0;
diff -rupN dolphin.orig/Source/Core/VideoCommon/TextureCacheBase.cpp dolphin/Source/Core/VideoCommon/TextureCacheBase.cpp
--- dolphin.orig/Source/Core/VideoCommon/TextureCacheBase.cpp 2023-06-01 19:24:09.962003435 +0000
+++ dolphin/Source/Core/VideoCommon/TextureCacheBase.cpp 2023-06-05 19:37:47.708471335 +0000
--- dolphin.orig/Source/Core/VideoCommon/TextureCacheBase.cpp 2023-09-26 17:58:02.857996813 +0000
+++ dolphin/Source/Core/VideoCommon/TextureCacheBase.cpp 2023-09-26 18:02:22.836042087 +0000
@@ -1046,7 +1046,7 @@ static void SetSamplerState(u32 index, f
// that have arbitrary contents, eg. are used for fog effects where the
// distance they kick in at is important to preserve at any resolution.

View file

@ -0,0 +1,111 @@
frameskip_type = 0
frameskip_value = 4
safe_frameskip = 0
show_frame_counter = 0
screen_orientation = 0
screen_swap = 0
savestate_number = 0
fast_forward = 0
enable_sound = 1
clock_speed = 0
threaded_3d = 0
mirror_touch = 0
compress_savestates = 1
savestate_snapshot = 1
unzip_roms = 0
preload_roms = 0
backup_in_savestates = 1
ignore_gamecard_limit = 0
frame_interval = 0
trim_roms = 0
fix_main_2d_screen = 0
disable_edge_marking = 0
interframe_blend = 0
hires_3d = 1
use_rtc_custom_time = 0
rtc_custom_time = 0
rtc_system_time = 0
slot2_device_type = 0
rumble_frames = 3
firmware.username = Jelos
firmware.language = 1
firmware.favorite_color = 0
firmware.birthday_month = 1
firmware.birthday_day = 1
enable_cheats = 1
controls_a[CONTROL_INDEX_UP] = 1217
controls_a[CONTROL_INDEX_DOWN] = 1153
controls_a[CONTROL_INDEX_LEFT] = 1216
controls_a[CONTROL_INDEX_RIGHT] = 1152
controls_a[CONTROL_INDEX_A] = 65535
controls_a[CONTROL_INDEX_B] = 65535
controls_a[CONTROL_INDEX_X] = 65535
controls_a[CONTROL_INDEX_Y] = 65535
controls_a[CONTROL_INDEX_L] = 65535
controls_a[CONTROL_INDEX_R] = 65535
controls_a[CONTROL_INDEX_START] = 65535
controls_a[CONTROL_INDEX_SELECT] = 65535
controls_a[CONTROL_INDEX_HINGE] = 65535
controls_a[CONTROL_INDEX_TOUCH_CURSOR_UP] = 65535
controls_a[CONTROL_INDEX_TOUCH_CURSOR_DOWN] = 65535
controls_a[CONTROL_INDEX_TOUCH_CURSOR_LEFT] = 65535
controls_a[CONTROL_INDEX_TOUCH_CURSOR_RIGHT] = 65535
controls_a[CONTROL_INDEX_TOUCH_CURSOR_PRESS] = 65535
controls_a[CONTROL_INDEX_MENU] = 65535
controls_a[CONTROL_INDEX_SAVE_STATE] = 65535
controls_a[CONTROL_INDEX_LOAD_STATE] = 65535
controls_a[CONTROL_INDEX_FAST_FORWARD] = 65535
controls_a[CONTROL_INDEX_SWAP_SCREENS] = 65535
controls_a[CONTROL_INDEX_SWAP_ORIENTATION_A] = 65535
controls_a[CONTROL_INDEX_SWAP_ORIENTATION_B] = 65535
controls_a[CONTROL_INDEX_LOAD_GAME] = 65535
controls_a[CONTROL_INDEX_QUIT] = 65535
controls_a[CONTROL_INDEX_FAKE_MICROPHONE] = 65535
controls_a[CONTROL_INDEX_UI_UP] = 1217
controls_a[CONTROL_INDEX_UI_DOWN] = 1153
controls_a[CONTROL_INDEX_UI_LEFT] = 1216
controls_a[CONTROL_INDEX_UI_RIGHT] = 1152
controls_a[CONTROL_INDEX_UI_SELECT] = 65535
controls_a[CONTROL_INDEX_UI_BACK] = 65535
controls_a[CONTROL_INDEX_UI_EXIT] = 65535
controls_a[CONTROL_INDEX_UI_PAGE_UP] = 65535
controls_a[CONTROL_INDEX_UI_PAGE_DOWN] = 65535
controls_a[CONTROL_INDEX_UI_SWITCH] = 65535
controls_b[CONTROL_INDEX_UP] = 1037
controls_b[CONTROL_INDEX_DOWN] = 1038
controls_b[CONTROL_INDEX_LEFT] = 1039
controls_b[CONTROL_INDEX_RIGHT] = 1040
controls_b[CONTROL_INDEX_A] = 1025
controls_b[CONTROL_INDEX_B] = 1024
controls_b[CONTROL_INDEX_X] = 1026
controls_b[CONTROL_INDEX_Y] = 1027
controls_b[CONTROL_INDEX_L] = 1028
controls_b[CONTROL_INDEX_R] = 1029
controls_b[CONTROL_INDEX_START] = 1033
controls_b[CONTROL_INDEX_SELECT] = 1032
controls_b[CONTROL_INDEX_HINGE] = 65535
controls_b[CONTROL_INDEX_TOUCH_CURSOR_UP] = 1219
controls_b[CONTROL_INDEX_TOUCH_CURSOR_DOWN] = 1155
controls_b[CONTROL_INDEX_TOUCH_CURSOR_LEFT] = 1218
controls_b[CONTROL_INDEX_TOUCH_CURSOR_RIGHT] = 1154
controls_b[CONTROL_INDEX_TOUCH_CURSOR_PRESS] = 1036
controls_b[CONTROL_INDEX_MENU] = 1035
controls_b[CONTROL_INDEX_SAVE_STATE] = 65535
controls_b[CONTROL_INDEX_LOAD_STATE] = 65535
controls_b[CONTROL_INDEX_FAST_FORWARD] = 65535
controls_b[CONTROL_INDEX_SWAP_SCREENS] = 65535
controls_b[CONTROL_INDEX_SWAP_ORIENTATION_A] = 1030
controls_b[CONTROL_INDEX_SWAP_ORIENTATION_B] = 1031
controls_b[CONTROL_INDEX_LOAD_GAME] = 65535
controls_b[CONTROL_INDEX_QUIT] = 65535
controls_b[CONTROL_INDEX_FAKE_MICROPHONE] = 65535
controls_b[CONTROL_INDEX_UI_UP] = 1037
controls_b[CONTROL_INDEX_UI_DOWN] = 1038
controls_b[CONTROL_INDEX_UI_LEFT] = 1039
controls_b[CONTROL_INDEX_UI_RIGHT] = 1040
controls_b[CONTROL_INDEX_UI_SELECT] = 1025
controls_b[CONTROL_INDEX_UI_BACK] = 65535
controls_b[CONTROL_INDEX_UI_EXIT] = 1024
controls_b[CONTROL_INDEX_UI_PAGE_UP] = 65535
controls_b[CONTROL_INDEX_UI_PAGE_DOWN] = 65535
controls_b[CONTROL_INDEX_UI_SWITCH] = 65535

View file

@ -321,7 +321,7 @@ Rewind = SDL-0/Back & SDL-0/+LeftTrigger
WindowX = 0
WindowY = 0
WindowWidth = 1920
WindowHeight = 1152
WindowHeight = 1080
[GameList]

View file

@ -9,15 +9,23 @@ PKG_URL="${PKG_SITE}.git"
PKG_SHORTDESC="Fast PlayStation 1 emulator for x86-64/AArch32/AArch64 "
PKG_TOOLCHAIN="cmake"
case ${DEVICE} in
RK356*)
PKG_VERSION="5ab5070d73f1acc51e064bd96be4ba6ce3c06f5c"
PKG_PATCH_DIRS+=" legacy"
PKG_CMAKE_OPTS_TARGET+=" -DUSE_DRMKMS=ON -DENABLE_EGL=ON -DUSE_MALI=OFF"
;;
*)
PKG_VERSION="0798292"
PKG_PATCH_DIRS+=" wayland"
case ${TARGET_ARCH} in
aarch64)
case ${DEVICE} in
RK356*)
PKG_VERSION="5ab5070d73f1acc51e064bd96be4ba6ce3c06f5c"
PKG_PATCH_DIRS+=" legacy"
PKG_CMAKE_OPTS_TARGET+=" -DUSE_DRMKMS=ON -DENABLE_EGL=ON -DUSE_MALI=OFF"
;;
*)
PKG_VERSION="bfa792ddbff11c102521124f235ccb310cac6e6a"
PKG_PATCH_DIRS+=" wayland/${TARGET_ARCH}"
;;
esac
;;
x86_64)
PKG_VERSION="a45b50c3e996af823d35a6a193458532c4f4316d"
PKG_PATCH_DIRS+=" wayland/${TARGET_ARCH}"
;;
esac
@ -37,6 +45,7 @@ fi
if [ "${VULKAN_SUPPORT}" = "yes" ]; then
PKG_DEPENDS_TARGET+=" vulkan-loader vulkan-headers"
PKG_CMAKE_OPTS_TARGET+=" -DENABLE_VULKAN=ON"
else PKG_CMAKE_OPTS_TARGET+=" -DENABLE_VULKAN=OFF"
fi
pre_configure_target() {

View file

@ -1,23 +0,0 @@
diff --git a/src/frontend-common/evdev_input_source.cpp b/src/frontend-common/evdev_input_source.cpp
index 970e0ca4..480fb0ba 100644
--- a/src/frontend-common/evdev_input_source.cpp
+++ b/src/frontend-common/evdev_input_source.cpp
@@ -328,7 +328,7 @@ std::optional<InputBindingKey> EvdevInputSource::ParseKeyString(const std::strin
if (abinding == axis.name)
{
key.source_subtype = InputSubclass::ControllerAxis;
- key.negative = (binding[0] == '-');
+ // key.negative = (binding[0] == '-');
key.data = axis.id;
return key;
}
@@ -365,7 +365,8 @@ std::string EvdevInputSource::ConvertKeyToString(InputBindingKey key)
{
if (static_cast<u32>(axis.id) == key.data)
{
- ret = fmt::format("{}/{}{}", cd->uniq, key.negative ? "-" : "+", axis.name);
+ //ret = fmt::format("{}/{}{}", cd->uniq, key.negative ? "-" : "+", axis.name);
+ ret = fmt::format("{}/{}{}", cd->uniq, axis.name);
break;
}
}

View file

@ -1,10 +1,10 @@
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2022-present BrooksyTech (https://github.com/brooksytech)
diff --git a/src/frontend-common/platform_misc_unix.cpp b/src/frontend-common/platform_misc_unix.cpp
diff --git a/src/util/platform_misc_unix.cpp b/src/util/platform_misc_unix.cpp
index 1f7ae9ec..e0487476 100644
--- a/src/frontend-common/platform_misc_unix.cpp
+++ b/src/frontend-common/platform_misc_unix.cpp
--- a/src/util/platform_misc_unix.cpp
+++ b/src/util/platform_misc_unix.cpp
@@ -24,12 +24,12 @@ static bool SetScreensaverInhibitX11(bool inhibit, const WindowInfo& wi)
char* argv[4] = {command.GetWriteableCharArray(), operation.GetWriteableCharArray(), id.GetWriteableCharArray(),
nullptr};

View file

@ -0,0 +1,22 @@
diff -rupN duckstation-sa.orig/src/duckstation-nogui/wayland_nogui_platform.cpp duckstation-sa/src/duckstation-nogui/wayland_nogui_platform.cpp
--- duckstation-sa.orig/src/duckstation-nogui/wayland_nogui_platform.cpp 2023-09-28 19:52:20.630654047 +0000
+++ duckstation-sa/src/duckstation-nogui/wayland_nogui_platform.cpp 2023-09-28 19:52:43.891283524 +0000
@@ -7,7 +7,6 @@
#include "common/string_util.h"
#include "common/threading.h"
#include "core/host.h"
-#include "core/host_settings.h"
#include "nogui_host.h"
#include "nogui_platform.h"
diff -rupN duckstation-sa.orig/src/duckstation-nogui/x11_nogui_platform.h duckstation-sa/src/duckstation-nogui/x11_nogui_platform.h
--- duckstation-sa.orig/src/duckstation-nogui/x11_nogui_platform.h 2023-09-28 19:52:20.630654047 +0000
+++ duckstation-sa/src/duckstation-nogui/x11_nogui_platform.h 2023-09-28 19:53:51.529094295 +0000
@@ -12,7 +12,6 @@
#include "common/string_util.h"
#include "common/threading.h"
#include "core/host.h"
-#include "core/host_settings.h"
#include "nogui_host.h"
#include "nogui_platform.h"

View file

@ -0,0 +1,22 @@
diff --git a/src/common/file_system.cpp b/src/common/file_system.cpp
index b22db26e..092fa9ee 100644
--- a/src/common/file_system.cpp
+++ b/src/common/file_system.cpp
@@ -1308,6 +1308,8 @@ bool FileSystem::DeleteDirectory(const char* path)
std::string FileSystem::GetProgramPath()
{
+ return "/storage/.config/duckstation";
+
std::wstring buffer;
buffer.resize(MAX_PATH);
@@ -1789,6 +1791,8 @@ bool FileSystem::DeleteDirectory(const char* path)
std::string FileSystem::GetProgramPath()
{
+ return "/storage/.config/duckstation";
+
#if defined(__linux__)
static const char* exeFileName = "/proc/self/exe";

View file

@ -0,0 +1,14 @@
diff --git a/src/common/file_system.cpp b/src/common/file_system.cpp
index b22db26e..ad856d93 100644
--- a/src/common/file_system.cpp
+++ b/src/common/file_system.cpp
@@ -315,6 +315,9 @@ std::string FileSystem::GetDisplayNameFromPath(const std::string_view& path)
std::string_view Path::GetDirectory(const std::string_view& path)
{
+
+return "/storage/.config/duckstation";
+
const std::string::size_type pos = GetLastSeperatorPosition(path, false);
if (pos == std::string_view::npos)
return {};

View file

@ -4,7 +4,7 @@
# Copyright (C) 2022-present Fewtarius
PKG_NAME="flycast-sa"
PKG_VERSION="213bc70e2d4bf14052af94255557792b4b14a0f4"
PKG_VERSION="cb91ad3ae0c1291485892bf3a9663a2fd303ce83"
PKG_LICENSE="GPLv2"
PKG_SITE="https://github.com/flyinghead/flycast"
PKG_URL="${PKG_SITE}.git"

View file

@ -8,7 +8,7 @@ PKG_VERSION="d05ea1965ad1f070859806a3a67aaf5ea6c46234"
PKG_LICENSE="GPLv3"
PKG_SITE="https://github.com/ZDoom/gzdoom"
PKG_URL="${PKG_SITE}.git"
PKG_DEPENDS_HOST="toolchain zmusic:host"
PKG_DEPENDS_HOST="toolchain SDL2:host zmusic:host"
PKG_DEPENDS_TARGET="toolchain SDL2 gzdoom-sa:host zmusic"
PKG_LONGDESC="GZDoom is a modder-friendly OpenGL and Vulkan source port based on the DOOM engine"
GET_HANDLER_SUPPORT="git"

View file

@ -2,7 +2,7 @@
# Copyright (C) 2018-present 5schatten (https://github.com/5schatten)
PKG_NAME="hatarisa"
PKG_VERSION="9756e36bb858c4e3b6039b07fe6f1b72263b1f70"
PKG_VERSION="18d783305e87d673b6641c9f0424f6609f47829d"
PKG_LICENSE="GPL"
PKG_SITE="https://github.com/hatari/hatari"
PKG_URL="https://github.com/hatari/hatari/archive/${PKG_VERSION}.tar.gz"

View file

@ -0,0 +1,147 @@
Key_A=-1
Key_B=-1
Key_Select=-1
Key_Start=-1
Key_Right=-1
Key_Left=-1
Key_Up=-1
Key_Down=-1
Key_R=-1
Key_L=-1
Key_X=-1
Key_Y=-1
Joy_A=1
Joy_B=0
Joy_Select=6
Joy_Start=7
Joy_Right=65794
Joy_Left=1114376
Joy_Up=17891585
Joy_Down=16843012
Joy_R=86114303
Joy_L=35782655
Joy_X=3
Joy_Y=2
HKKey_Lid=-1
HKKey_Mic=-1
HKKey_Pause=-1
HKKey_Reset=-1
HKKey_FastForward=-1
HKKey_FastForwardToggle=-1
HKKey_FullscreenToggle=-1
HKKey_SwapScreens=-1
HKKey_SolarSensorDecrease=-1
HKKey_SolarSensorIncrease=-1
HKKey_FrameStep=-1
HKKey_SaveState=-1
HKKey_LoadState=-1
HKJoy_Lid=-1
HKJoy_Mic=10
HKJoy_Pause=-1
HKJoy_Reset=-1
HKJoy_FastForward=-1
HKJoy_FastForwardToggle=-1
HKJoy_FullscreenToggle=-1
HKJoy_SwapScreens=9
HKJoy_SolarSensorDecrease=-1
HKJoy_SolarSensorIncrease=-1
HKJoy_FrameStep=-1
HKJoy_SaveState=5
HKJoy_LoadState=4
JoystickID=0
WindowWidth=1920
WindowHeight=1080
WindowMax=0
ScreenRotation=0
ScreenGap=0
ScreenLayout=2
ScreenSwap=0
ScreenSizing=3
IntegerScaling=0
ScreenAspectTop=0
ScreenAspectBot=0
ScreenFilter=1
ScreenUseGL=0
ScreenVSync=0
ScreenVSyncInterval=1
3DRenderer=0
Threaded3D=1
GL_ScaleFactor=1
GL_BetterPolygons=0
LimitFPS=1
AudioSync=0
ShowOSD=1
ConsoleType=0
DirectBoot=1
JIT_Enable=0
JIT_MaxBlockSize=32
JIT_BranchOptimisations=1
JIT_LiteralOptimisations=1
JIT_FastMemory=1
ExternalBIOSEnable=0
BIOS9Path=
BIOS7Path=
FirmwarePath=
DSiBIOS9Path=
DSiBIOS7Path=
DSiFirmwarePath=
DSiNANDPath=
DLDIEnable=0
DLDISDPath=dldi.bin
DLDISize=0
DLDIReadOnly=0
DLDIFolderSync=0
DLDIFolderPath=
DSiSDEnable=0
DSiSDPath=dsisd.bin
DSiSDSize=0
DSiSDReadOnly=0
DSiSDFolderSync=0
DSiSDFolderPath=
FirmwareOverrideSettings=0
FirmwareUsername=melonDS
FirmwareLanguage=1
FirmwareBirthdayMonth=1
FirmwareBirthdayDay=1
FirmwareFavouriteColour=0
FirmwareMessage=
FirmwareMAC=
MPAudioMode=1
MPRecvTimeout=25
LANDevice=
DirectLAN=0
SavStaRelocSRAM=0
AudioInterp=0
AudioBitrate=0
AudioVolume=256
MicInputType=0
MicWavPath=
LastROMFolder=
RecentROM_0=
RecentROM_1=
RecentROM_2=
RecentROM_3=
RecentROM_4=
RecentROM_5=
RecentROM_6=
RecentROM_7=
RecentROM_8=
RecentROM_9=
SaveFilePath=/storage/roms/nds
SavestatePath=/storage/roms/savestates/nds
CheatFilePath=
EnableCheats=0
MouseHide=0
MouseHideSeconds=5
PauseLostFocus=0
DSBatteryLevelOkay=1
DSiBatteryLevel=15
DSiBatteryCharging=1
Camera0_InputType=0
Camera0_ImagePath=
Camera0_CamDeviceName=
Camera0_XFlip=0
Camera1_InputType=0
Camera1_ImagePath=
Camera1_CamDeviceName=
Camera1_XFlip=0

View file

@ -11,14 +11,14 @@ PKG_DEPENDS_TARGET="toolchain libX11"
PKG_PRIORITY="optional"
PKG_SECTION="emulators"
PKG_SHORTDESC="Virtual Macintosh Plus"
PKG_TOOLCHAIN="manual"
PKG_TOOLCHAIN="make"
make_target() {
pre_make_target() {
cd ${PKG_BUILD}
gcc setup/tool.c -o setup_t
${TOOLCHAIN}/bin/host-gcc setup/tool.c -o setup_t
./setup_t -t lx64 -fullscreen 1 > setup.sh
. setup.sh
make
sed -i "s|gcc|${TARGET_PREFIX}gcc|" ${PKG_BUILD}/Makefile
}
makeinstall_target() {

View file

@ -46,7 +46,7 @@ make_target() {
rm -rf build
mkdir build
cd build
cmake -G Ninja ${ARM} -DCMAKE_BUILD_TYPE="Release" ..
cmake -G Ninja ${ARM} -DCMAKE_FIND_ROOT_PATH="${SYSROOT_PREFIX}" -DCMAKE_BUILD_TYPE="Release" ..
VERBOSE=1 cmake --build .
}

View file

@ -1,6 +0,0 @@
DocumentsFolderMode=User
CustomDocumentsFolder=/storage/.config/PCSX2
UseDefaultSettingsFolder=enabled
SettingsFolder=/storage/.config/PCSX2/inis
Install_Dir=/usr/bin
RunWizard=0

View file

@ -1,5 +0,0 @@
[Host0]
Url=www.example.com
Desc=Set DNS to 192.0.2.1 to use this host list
Address=0.0.0.0
Enabled=disabled

View file

@ -1,93 +0,0 @@
DisableDualSourceBlend = 0
DisableFramebufferFetch = 0
DumpDirectTextures = 1
DumpPaletteTextures = 1
DumpReplaceableMipmaps = 0
DumpReplaceableTextures = 0
DumpTexturesWithFMVActive = 0
GSDumpCompression = 0
HWDisableReadbacks = 0
IntegerScaling = 0
LoadTextureReplacements = 0
LoadTextureReplacementsAsync = 1
MaxAnisotropy = 0
OsdScale = 100
OsdShowCPU = 0
OsdShowFPS = 0
OsdShowGPU = 0
OsdShowGSStats = 0
OsdShowIndicators = 1
OsdShowMessages = 1
OsdShowResolution = 0
OsdShowSpeed = 0
OverrideGeometryShaders = -1
OverrideTextureBarriers = -1
PrecacheTextureReplacements = 0
Renderer = 14
ShadeBoost = 0
ShadeBoost_Brightness = 50
ShadeBoost_Contrast = 50
ShadeBoost_Saturation = 50
SkipDuplicateFrames = 0
TVShader = 0
ThreadedPresentation = 0
UseBlitSwapChain = 0
UseDebugDevice = 0
UserHacks = 0
UserHacks_AutoFlush = 0
UserHacks_CPUSpriteRenderBW = 0
UserHacks_CPU_FB_Conversion = 0
UserHacks_DisableDepthSupport = 0
UserHacks_DisablePartialInvalidation = 0
UserHacks_Disable_Safe_Features = 0
UserHacks_HalfPixelOffset = 0
UserHacks_Half_Bottom_Override = -1
UserHacks_SkipDraw_End = 0
UserHacks_SkipDraw_Start = 0
UserHacks_TCOffsetX = 0
UserHacks_TCOffsetY = 0
UserHacks_TextureInsideRt = 0
UserHacks_TriFilter = -1
UserHacks_WildHack = 0
UserHacks_align_sprite_X = 0
UserHacks_merge_pp_sprite = 0
UserHacks_round_sprite_offset = 0
accurate_blending_unit = 1
accurate_date = 1
autoflush_sw = 1
crc_hack_level = -1
deinterlace = 7
disable_hw_gl_draw = 0
disable_interlace_offset = 0
disable_shader_cache = 0
dithering_ps2 = 2
dump = 0
extrathreads = 2
extrathreads_height = 4
filter = 2
fxaa = 0
linear_present = 1
mipmap = 1
mipmap_hw = -1
override_GL_ARB_clear_texture = -1
override_GL_ARB_direct_state_access = -1
override_GL_ARB_gpu_shader5 = -1
override_GL_ARB_shader_image_load_store = -1
override_GL_ARB_texture_barrier = -1
paltex = 0
pcrtc_antiblur = 1
pcrtc_offsets = 0
pcrtc_overscan = 0
preload_frame_with_gs_data = 0
save = 0
savef = 0
savel = 5000
saven = 0
savet = 0
savez = 0
shaderfx = 0
shaderfx_conf = shaders/GS_FX_Settings.ini
shaderfx_glsl = shaders/GS.fx
texture_preloading = 2
upscale_multiplier = 1
wrap_gs_mem = 0

View file

@ -1,6 +0,0 @@
first_time_wizard = 1
options = 0
mouse_sensibility = 100
ff_intensity = 1
uid[0] = 0
uid[1] = 0

View file

@ -5,28 +5,26 @@ ConfirmShutdown = true
StartPaused = false
PauseOnFocusLoss = false
StartFullscreen = true
DoubleClickTogglesFullscreen = true
DoubleClickTogglesFullscreen = false
HideMouseCursor = false
RenderToSeparateWindow = false
HideMainWindowWhenRunning = false
DisableWindowResize = false
Theme = darkfusion
MainWindowGeometry = AdnQywADAAAAAAAAAAAAFAAABP8AAALjAAAAAAAAABQAAAO1AAACkwAAAAAABAAABQAAAAAAAAAAFAAABP8AAALj
MainWindowState = AAAA/wAAAAD9AAAAAAAABQAAAAK9AAAABAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAEAAAAOAHQAbwBvAGwAQgBhAHIAAAAAAP////8AAAAAAAAAAA==
ShowStatusBar = false
[Folders]
Bios = /storage/roms/bios
Snapshots = snaps
Savestates = sstates
MemoryCards = memcards
Bios = /storage/roms/bios/pcsx2/bios
Snapshots = /storage/roms/screenshots
Savestates = /storage/roms/savestates/ps2
MemoryCards = /storage/roms/saves/ps2
Logs = logs
Cheats = cheats
CheatsWS = cheats_ws
CheatsNI = cheats_ni
Cheats = /storage/roms/bios/pcsx2/cheats
CheatsWS = /storage/roms/bios/pcsx2/cheats_ws
CheatsNI = /storage/roms/bios/pcsx2/cheats_ni
Cache = cache
Textures = textures
Textures = /storage/roms/bios/pcsx2/textures
InputProfiles = inputprofiles
@ -52,6 +50,7 @@ WarnAboutUnsafeSettings = true
GzipIsoIndexTemplate = $(f).pindex.tmp
BlockDumpSaveDirectory =
EnableFastBoot = true
EnablePerGameSettings = true
[EmuCore/Speedhacks]
@ -122,12 +121,12 @@ DisableFramebufferFetch = false
ThreadedPresentation = false
SkipDuplicateFrames = false
OsdShowMessages = true
OsdShowSpeed = true
OsdShowFPS = true
OsdShowCPU = true
OsdShowGPU = true
OsdShowResolution = true
OsdShowGSStats = true
OsdShowSpeed = false
OsdShowFPS = false
OsdShowCPU = false
OsdShowGPU = false
OsdShowResolution = false
OsdShowGSStats = false
OsdShowIndicators = true
HWDisableReadbacks = false
paltex = false
@ -290,7 +289,7 @@ IOP.bitset = 0
[Filenames]
BIOS = scph39001.bin
BIOS =
[Framerate]
@ -337,27 +336,12 @@ SDLControllerEnhancedMode = false
[Hotkeys]
ToggleFullscreen = Keyboard/Alt & Keyboard/Return
CycleAspectRatio = Keyboard/F6
CycleInterlaceMode = Keyboard/F5
CycleMipmapMode = Keyboard/Insert
GSDumpMultiFrame = Keyboard/Control & Keyboard/Shift & Keyboard/F8
Screenshot = Keyboard/F8
GSDumpSingleFrame = Keyboard/Shift & Keyboard/F8
ToggleSoftwareRendering = Keyboard/F9
ZoomIn = Keyboard/Control & Keyboard/Plus
ZoomOut = Keyboard/Control & Keyboard/Minus
InputRecToggleMode = Keyboard/Shift & Keyboard/R
LoadStateFromSlot = Keyboard/F3
SaveStateToSlot = Keyboard/F1
NextSaveStateSlot = Keyboard/F2
PreviousSaveStateSlot = Keyboard/Shift & Keyboard/F2
OpenPauseMenu = Keyboard/Escape
ToggleFrameLimit = Keyboard/F4
TogglePause = Keyboard/Space
ToggleSlowMotion = Keyboard/Shift & Keyboard/Backtab
ToggleTurbo = Keyboard/Tab
HoldTurbo = Keyboard/Period
Screenshot = SDL-0/Back & SDL-0/B
LoadStateFromSlot = SDL-0/Back & SDL-0/LeftShoulder
SaveStateToSlot = SDL-0/Back & SDL-0/RightShoulder
OpenPauseMenu = SDL-0/Back & SDL-0/Y
ToggleTurbo = SDL-0/Back & SDL-0/+RightTrigger
ShutdownVM = SDL-0/Back & SDL-0/Start
[Pad]
@ -433,5 +417,6 @@ Type = None
[Pad8]
Type = None
[AutoUpdater]
CheckAtStartup = false

View file

@ -1,157 +0,0 @@
MainGuiPosition=93,371
SysSettingsTabName=Cpu
McdSettingsTabName=none
ComponentsTabName=
AppSettingsTabName=none
GameDatabaseTabName=none
LanguageId=0
LanguageCode=default
RecentIsoCount=20
GzipIsoIndexTemplate=$(f).pindex.tmp
Listbook_ImageSize=32
Toolbar_ImageSize=24
Toolbar_ShowLabels=enabled
CurrentBlockdump=
CurrentELF=
CurrentIRX=
EnableSpeedHacks=enabled
EnableGameFixes=disabled
EnableFastBoot=enabled
EnablePresets=enabled
PresetIndex=1
AskOnBoot=disabled
DevMode=disabled
CdvdSource=ISO
[ProgramLog]
Visible=disabled
AutoDock=enabled
DisplayPosition=492,371
DisplaySize=680,560
FontSize=8
Theme=Default
[Folders]
UseDefaultBios=enabled
UseDefaultSnapshots=enabled
UseDefaultSavestates=enabled
UseDefaultMemoryCards=enabled
UseDefaultLogs=enabled
UseDefaultLangs=enabled
UseDefaultCheats=enabled
UseDefaultCheatsWS=enabled
UseDefaultTextures=enabled
Bios=/storage/roms/bios
Snapshots=/storage/roms/screenshots
Savestates=/storage/saves/ps2
MemoryCards=/storage/saves/ps2
Logs=/var/log
Langs=/usr/bin/resources/locale
Cheats=/storage/cheats/ps2/cheats
CheatsWS=/storage/cheats/ps2/cheats_ws
Cache=/system/cache/ps2
Textures=/storage/.config/PCSX2
RunIso=/storage/PCSX2
RunELF=/storage/PCSX2
RunDisc=
[GSWindow]
CloseOnEsc=enabled
DefaultToFullscreen=disabled
AlwaysHideMouse=disabled
DisableResizeBorders=disabled
DisableScreenSaver=enabled
WindowSize=640,480
WindowPos=0,0
IsMaximized=disabled
IsFullscreen=disabled
EnableVsyncWindowFlag=disabled
IsToggleFullscreenOnDoubleClick=enabled
SyncToHostRefreshRate=disabled
AspectRatio=Auto 4:3/3:2 (Progressive)
FMVAspectRatioSwitch=Off
Zoom=100
[InputRecording]
VirtualPadPosition=-1,-1
m_frame_advance_amount=1
[Capture]
EnableAudio=enabled
[UiTemplates]
LimiterUnlimited=Max
LimiterTurbo=Turbo
LimiterSlowmo=Slowmo
LimiterNormal=Normal
OutputFrame=Frame
OutputField=Field
OutputProgressive=Progressive
OutputInterlaced=Interlaced
Paused=<PAUSED>
TitleTemplate=Slot: ${slot} | Speed: ${speed} (${vfps}) | ${videomode} | Limiter: ${limiter} | ${gs} | ${omodei} | ${cpuusage}
RecordingTemplate=Slot: ${slot} | Frame: ${frame}/${maxFrame} | Rec. Mode: ${mode} | Speed: ${speed} (${vfps}) | Limiter: ${limiter}
[MemoryCards]
Slot1_Enable=enabled
Slot1_Filename=Mcd001.ps2
Slot2_Enable=enabled
Slot2_Filename=Mcd002.ps2
Multitap1_Slot2_Enable=disabled
Multitap1_Slot2_Filename=Mcd-Multitap1-Slot02.ps2
Multitap1_Slot3_Enable=disabled
Multitap1_Slot3_Filename=Mcd-Multitap1-Slot03.ps2
Multitap1_Slot4_Enable=disabled
Multitap1_Slot4_Filename=Mcd-Multitap1-Slot04.ps2
Multitap2_Slot2_Enable=disabled
Multitap2_Slot2_Filename=Mcd-Multitap2-Slot02.ps2
Multitap2_Slot3_Enable=disabled
Multitap2_Slot3_Filename=Mcd-Multitap2-Slot03.ps2
Multitap2_Slot4_Enable=disabled
Multitap2_Slot4_Filename=Mcd-Multitap2-Slot04.ps2
[Filenames]
BIOS=scph39001.bin
[Framerate]
NominalScalar=1
TurboScalar=2
SlomoScalar=0.5
[ConsoleLogSources]
Devel=disabled
.EEout=enabled
.IOPout=enabled
.EErecPerf=disabled
.ELF=disabled
.SysEvents=disabled
.p\&xThread=disabled
.SYSout=disabled
.PGIFout=disabled
.Input\ Recording=disabled
.Controller\ Info=disabled
[TraceLogSources]
.SIF=disabled
EE.Bios=disabled
EE.Memory=disabled
EE.Disasm.R5900=disabled
EE.Disasm.COP0=disabled
EE.Disasm.FPU=disabled
EE.Disasm.VUmacro=disabled
EE.Disasm.Cache=disabled
EE.Registers.HwRegs=disabled
EE.Registers.UnknownRegs=disabled
EE.Registers.DmaRegs=disabled
EE.Registers.IPU=disabled
EE.GIFtags=disabled
EE.VIFcodes=disabled
EE.MSKPATH3=disabled
EE.Events.DmaCtrl=disabled
EE.Events.Counters=disabled
EE.Events.MFIFO=disabled
EE.Events.VIF=disabled
EE.Events.GIF=disabled
IOP.Bios=disabled
IOP.Memorycards=disabled
IOP.Pad=disabled
IOP.Disasm.R3000A=disabled
IOP.Disasm.Memory=disabled
IOP.Registers.HwRegs=disabled
IOP.Registers.UnknownRegs=disabled
IOP.Registers.DmaRegs=disabled
IOP.Events.DmaCrl=disabled
IOP.Events.Counters=disabled
IOP.Events.CDVD=disabled
IOP.Events.MDEC=disabled
[TraceLogSources/IOP.Disasm.COP2]
GPU=disabled

View file

@ -1,116 +0,0 @@
[EmuCore]
CdvdVerboseReads=disabled
CdvdDumpBlocks=disabled
CdvdShareWrite=disabled
EnablePatches=enabled
EnableCheats=disabled
EnablePINE=disabled
EnableWideScreenPatches=disabled
EnableNoInterlacingPatches=disabled
EnableRecordingTools=enabled
ConsoleToStdio=disabled
HostFs=disabled
PatchBios=disabled
PatchRegion=
BackupSavestate=enabled
SavestateZstdCompression=enabled
McdEnableEjection=enabled
McdFolderAutoManage=enabled
MultitapPort0_Enabled=disabled
MultitapPort1_Enabled=disabled
GzipIsoIndexTemplate=$(f).pindex.tmp
[EmuCore/Speedhacks]
EECycleRate=0
EECycleSkip=0
fastCDVD=disabled
IntcStat=enabled
WaitLoop=enabled
vuFlagHack=enabled
vuThread=disabled
vu1Instant=enabled
[EmuCore/CPU]
FPU.DenormalsAreZero=enabled
FPU.FlushToZero=enabled
FPU.Roundmode=3
AffinityControlMode=0
VU.DenormalsAreZero=enabled
VU.FlushToZero=enabled
VU.Roundmode=3
[EmuCore/CPU/Recompiler]
EnableEE=enabled
EnableIOP=enabled
EnableEECache=disabled
EnableVU0=enabled
EnableVU1=enabled
vuOverflow=enabled
vuExtraOverflow=disabled
vuSignOverflow=disabled
vuUnderflow=disabled
fpuOverflow=enabled
fpuExtraOverflow=disabled
fpuFullMode=disabled
StackFrameChecks=disabled
PreBlockCheckEE=disabled
PreBlockCheckIOP=disabled
[EmuCore/GS]
VsyncQueueSize=2
FrameLimitEnable=enabled
VsyncEnable=0
FramerateNTSC=59.94
FrameratePAL=50
[EmuCore/Gamefixes]
VuAddSubHack=disabled
FpuMulHack=disabled
FpuNegDivHack=disabled
XgKickHack=disabled
EETimingHack=disabled
SoftwareRendererFMVHack=disabled
SkipMPEGHack=disabled
OPHFlagHack=disabled
DMABusyHack=disabled
VIFFIFOHack=disabled
VIF1StallHack=disabled
GIFFIFOHack=disabled
GoemonTlbHack=disabled
IbitHack=disabled
VUSyncHack=disabled
VUOverflowHack=disabled
BlitInternalFPSHack=disabled
[EmuCore/Profiler]
Enabled=disabled
RecBlocks_EE=enabled
RecBlocks_IOP=enabled
RecBlocks_VU0=enabled
RecBlocks_VU1=enabled
[EmuCore/Debugger]
ShowDebuggerOnStart=disabled
AlignMemoryWindowStart=enabled
FontWidth=8
FontHeight=12
WindowWidth=1000
WindowHeight=720
MemoryViewBytesPerRow=16
[EmuCore/TraceLog]
Enabled=disabled
EE.bitset=0
IOP.bitset=0
[DEV9]
[DEV9/Eth]
EthEnable=disabled
EthApi=Unset
EthDevice=
EthLogDNS=disabled
InterceptDHCP=disabled
PS2IP=0.0.0.0
Mask=0.0.0.0
Gateway=0.0.0.0
DNS1=0.0.0.0
DNS2=0.0.0.0
AutoMask=enabled
AutoGateway=enabled
ModeDNS1=Auto
ModeDNS2=Auto
[DEV9/Hdd]
HddEnable=disabled
HddFile=DEV9hdd.raw
HddSizeSectors=83886080

View file

@ -1,43 +0,0 @@
[SOUNDTOUCH]
SequenceLengthMS=30
SeekWindowMS=20
OverlapMS=10
[MIXING]
Interpolation=5
FinalVolume=100
AdvancedVolumeControl=0
VolumeAdjustC(dB)=0
VolumeAdjustFL(dB)=0
VolumeAdjustFR(dB)=0
VolumeAdjustBL(dB)=0
VolumeAdjustBR(dB)=0
VolumeAdjustSL(dB)=0
VolumeAdjustSR(dB)=0
VolumeAdjustLFE(dB)=0
[OUTPUT]
Output_Module=cubeb
Latency=100
Synch_Mode=0
SpeakerConfiguration=0
[DEBUG]
Global_Enable=0
Show_Messages=0
Show_Messages_Key_On_Off=0
Show_Messages_Voice_Off=0
Show_Messages_DMA_Transfer=0
Show_Messages_AutoDMA=0
Show_Messages_Overruns=0
Show_Messages_CacheStats=0
Log_Register_Access=0
Log_DMA_Transfers=0
Log_WAVE_Output=0
Dump_Info=0
Dump_Memory=0
Dump_Regs=0
Access_Log_Filename=SPU2Log.txt
WaveLog_Filename=SPU2log.wav
DMA4Log_Filename=SPU2dma4.dat
DMA7Log_Filename=SPU2dma7.dat
Info_Dump_Filename=SPU2Cores.txt
Mem_Dump_Filename=SPU2mem.dat
Reg_Dump_Filename=SPU2regs.dat

View file

@ -5,12 +5,14 @@
. /etc/profile
ARG=${1//[\\]/}
jslisten set "-9 pcsx2-qt"
if [ ! -d "/storage/.config/PCSX2" ]
then
cp -rf /usr/config/PCSX2 /storage/.config
fi
@APPIMAGE@ -fastboot -- "${ARG}"
@APPIMAGE@ -fastboot -nogui -- "${ARG}"
#Workaround until we can learn why it doesn't exit cleanly when asked.
killall -9 pcsx2-qt
killall -9 pcsx2-qt

View file

@ -7,7 +7,7 @@ PKG_REV="1"
PKG_ARCH="any"
PKG_SITE="https://github.com/hrydgard/ppsspp"
PKG_URL="${PKG_SITE}.git"
PKG_VERSION="e829c97d7e78b6ec7c1a0ee031d58c32987194e6"
PKG_VERSION="aedd51f2f69fa3940c991a626be7df430883af4c"
PKG_LICENSE="GPLv2"
PKG_DEPENDS_TARGET="toolchain ffmpeg libzip SDL2 zlib zip"
PKG_SHORTDESC="PPSSPPDL"

View file

@ -1,8 +1,8 @@
diff --git a/SDL/SDLMain.cpp b/SDL/SDLMain.cpp
index 27695ec2d..e761cb8e8 100644
index dae1b6934..ea2230533 100644
--- a/SDL/SDLMain.cpp
+++ b/SDL/SDLMain.cpp
@@ -803,12 +803,7 @@ static void ProcessSDLEvent(SDL_Window *window, const SDL_Event &event, InputSta
@@ -817,12 +817,7 @@ static void ProcessSDLEvent(SDL_Window *window, const SDL_Event &event, InputSta
g_Config.iWindowWidth = new_width;
g_Config.iWindowHeight = new_height;
}
@ -16,15 +16,13 @@ index 27695ec2d..e761cb8e8 100644
break;
}
@@ -1444,10 +1439,7 @@ int main(int argc, char *argv[]) {
#if !defined(MOBILE_DEVICE)
if (lastUIState != GetUIState()) {
lastUIState = GetUIState();
- if (lastUIState == UISTATE_INGAME && g_Config.UseFullScreen() && !g_Config.bShowTouchControls)
- SDL_ShowCursor(SDL_DISABLE);
- if (lastUIState != UISTATE_INGAME || !g_Config.UseFullScreen())
- SDL_ShowCursor(SDL_ENABLE);
+ SDL_ShowCursor(SDL_DISABLE);
}
#endif
@@ -1435,9 +1430,7 @@ int main(int argc, char *argv[]) {
printf("Init from thread error: '%s'\n", error_message.c_str());
}
-#ifdef MOBILE_DEVICE
SDL_ShowCursor(SDL_DISABLE);
-#endif
// Ensure that the swap interval is set after context creation (needed for kmsdrm)
SDL_GL_SetSwapInterval(1);

View file

@ -3,7 +3,7 @@
# Copyright (C) 2023-present Fewtarius
PKG_NAME="retroarch"
PKG_VERSION="c5b2ed13826848d4ce5fcec81bb57724d680b505"
PKG_VERSION="0bbfba8137a9a103495cc1bc5368781ce05b0c80"
PKG_SITE="https://github.com/libretro/RetroArch"
PKG_URL="${PKG_SITE}.git"
PKG_LICENSE="GPLv3"

View file

@ -4,7 +4,7 @@ fluidsynth_misc_interpolation=4th
last_fullscreen_mode_width=1920
multi_midi=false
gui_browser_show_hidden=true
soundfont=/usr/share/soundfonts/GeneralUser.sf2/GeneralUser.sf2
soundfont=/usr/share/soundfonts/GeneralUser.sf2
fluidsynth_chorus_nr=3
fluidsynth_chorus_waveform=sine
music_driver=auto

View file

@ -2,7 +2,7 @@
# Copyright (C) 2022-present BrooksyTech (https://github.com/brooksytech)
PKG_NAME="yuzu-sa"
PKG_VERSION="aa6afb0cfedab2b73e87f882797f4d935c899f5d"
PKG_VERSION="53f904b740c00ee491565578012a8c739bd9ed77"
PKG_ARCH="x86_64"
PKG_LICENSE="GPLv3"
PKG_SITE="https://github.com/yuzu-emu/yuzu"

View file

@ -2,7 +2,7 @@
# Copyright (C) 2020-present Fewtarius
PKG_NAME="retroarch-joypads"
PKG_VERSION="5666e46bb89caf4e9af358fdb97a2b384cb62f36"
PKG_VERSION="37f429527d7b44fcc6e9d5c3861b89d89b803b4e"
PKG_LICENSE="GPL"
PKG_SITE="https://github.com/libretro/retroarch-joypad-autoconfig"
PKG_URL="${PKG_SITE}.git"

View file

@ -7,10 +7,10 @@ PKG_VERSION="2.28.2"
PKG_LICENSE="GPL"
PKG_SITE="https://www.libsdl.org/"
PKG_URL="https://www.libsdl.org/release/SDL2-${PKG_VERSION}.tar.gz"
PKG_DEPENDS_TARGET="toolchain alsa-lib systemd dbus pulseaudio libdrm"
PKG_DEPENDS_HOST="toolchain"
PKG_DEPENDS_TARGET="toolchain alsa-lib systemd dbus pulseaudio libdrm SDL2:host"
PKG_LONGDESC="Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware."
PKG_DEPENDS_HOST="toolchain:host distutilscross:host"
PKG_PATCH_DIRS+="${DEVICE}"
if [ ! "${OPENGL}" = "no" ]; then
PKG_DEPENDS_TARGET+=" ${OPENGL} glu"
@ -64,10 +64,35 @@ fi
case ${PROJECT} in
Rockchip)
PKG_DEPENDS_TARGET+=" librga"
PKG_PATCH_DIRS_TARGET+="${DEVICE}"
;;
esac
pre_configure_target(){
if [ -n "${PKG_PATCH_DIRS_TARGET}" ]
then
###
### Patching here is necessary to allow SDL2 to be built for
### use by host builds without requiring additional unnecessary
### packages to also be built (and break) during the build.
###
### It may be better served as a hook in scripts/build.
###
if [ -d "${PKG_DIR}/patches/${PKG_PATCH_DIRS_TARGET}" ]
then
cd $(get_build_dir SDL2)
for PATCH in ${PKG_DIR}/patches/${PKG_PATCH_DIRS_TARGET}/*
do
patch -p1 <${PATCH}
done
cd -
fi
### End
fi
export LDFLAGS="${LDFLAGS} -ludev"
PKG_CMAKE_OPTS_TARGET+="-DSDL_STATIC=OFF \
-DLIBC=ON \

View file

@ -22,8 +22,7 @@ case ${DEVICE} in
PKG_URL="https://mesa.freedesktop.org/archive/mesa-${PKG_VERSION}.tar.xz"
;;
*)
PKG_VERSION="23.1.7"
PKG_SHA256="409641eadf0ed1c7794797a6f5a0b0195b5580b282166e5ec5629c6bcda6acd3"
PKG_VERSION="23.2.1"
PKG_SITE="http://www.mesa3d.org/"
PKG_URL="https://mesa.freedesktop.org/archive/mesa-${PKG_VERSION}.tar.xz"
;;

View file

@ -0,0 +1,8 @@
#!/bin/sh
# SPDX-License-Identifier: Apache-2.0
# Copyright (C) 2021-present Fewtarius (https://github.com/fewtarius)
cat <<EOF >/storage/.config/profile.d/010-led_control
DEVICE_LED_CONTROL="true"
DEVICE_LED_BRIGHTNESS="true"
EOF

View file

@ -0,0 +1,9 @@
#!/bin/bash
# SPDX-License-Identifier: Apache-2.0
# Copyright (C) 2021-present Fewtarius (https://github.com/fewtarius)
cat <<EOF >/storage/.config/profile.d/020-fan_control
DEVICE_HAS_FAN="false"
DEVICE_TEMP_SENSOR="$(find /sys/devices/pci*/* -path "*/nvme" -prune -o -name temp1_input -print)"
EOF

View file

@ -0,0 +1,371 @@
#!/bin/sh
# SPDX-License-Identifier: Apache-2.0
# Copyright (C) 2023-present Fewtarius
# A simple tool to manipulate the controller LEDs using outb, thanks
# in large part to Maya Matuszczyk (https://github.com/Maccraft123)
# for help with reverse engineering.
. /etc/profile
OUTB="/usr/bin/outb"
ADDR_PORT="0x4e"
DATA_PORT="0x4f"
DEBUG=false
function debug_out() {
$DEBUG && echo "ledcontrol: $*"
}
function led_ctl() {
${OUTB} ${ADDR_PORT} 0x2e
${OUTB} ${DATA_PORT} 0x11
${OUTB} ${ADDR_PORT} 0x2f
${OUTB} ${DATA_PORT} 0xd1 # high
${OUTB} ${ADDR_PORT} 0x2e
${OUTB} ${DATA_PORT} 0x10
${OUTB} ${ADDR_PORT} 0x2f
${OUTB} ${DATA_PORT} ${1} # low
${OUTB} ${ADDR_PORT} 0x2e
${OUTB} ${DATA_PORT} 0x12
${OUTB} ${ADDR_PORT} 0x2f
${OUTB} ${DATA_PORT} ${2} # data
}
function led_open() {
led_ctl 0x87 0xa5
}
function led_close() {
led_ctl ${1} 0x01
}
function led_ack() {
led_open
led_ctl 0x70 0x0
led_close 0x86
}
function led_state() {
# 0x31 = off
# 0x37 = on
for ZONE in 0xb2 0x72
do
led_open
led_ctl ${ZONE} ${1}
led_ctl 0xc6 0x01
led_ack
done
}
function led_enable() {
led_state 0x37
led_ack
led_open
led_ctl 0xbf 0x0
led_close 0xc6
led_open
led_ctl 0x7f 0x0
led_close 0xc6
led_ack
led_open
led_ctl 0xc0 0x0
led_close 0xc6
led_open
led_ctl 0x80 0x0
led_close 0x86
led_ack
led_open
led_ctl 0xc1 0x5
led_close 0xc6
led_open
led_ctl 0x81 0x5
led_close 0xc6
led_ack
led_open
led_ctl 0xc2 0x5
led_close 0xc6
led_open
led_ctl 0x82 0x5
led_close 0x86
led_open
led_ctl 0x70 0x0
led_close 0x86
led_open
led_ctl 0xc3 0x5
led_close 0x86
led_open
led_ctl 0x83 0x5
led_close 0x86
led_ack
led_open
led_ctl 0xc4 0x5
led_close 0xc6
led_open
led_ctl 0x84 0x5
led_close 0x86
led_ack
led_open
led_ctl 0xc5 0x7
led_close 0xc6
led_open
led_ctl 0x85 0x7
led_close 0x86
led_open
led_ctl 0x70 0x0
led_close 0x86
led_open
led_ctl 0xc5 0x7
led_close 0xc6
led_open
led_ctl 0x85 0x7
led_close 0x86
led_open
led_ctl 0x70 0x0
led_close 0x86
led_open
led_ctl 0xb2 0xba
led_close 0xc6
led_open
led_ctl 0x72 0xba
led_close 0x86
led_open
led_ctl 0x70 0x0
led_close 0x86
led_ack
}
function led_color() {
# Zone 1 (Left Stick)
led_open
led_ctl 0xB3 ${1} # Quadrant 1
led_ack
led_open
led_ctl 0xB4 ${2}
led_ack
led_open
led_ctl 0xB5 ${3}
led_ack
led_open
led_ctl 0xB6 ${1} # Quadrant 2
led_ack
led_open
led_ctl 0xB7 ${2}
led_ack
led_open
led_ctl 0xB8 ${3}
led_ack
led_open
led_ctl 0xB9 ${1} # Quadrant 3
led_ack
led_open
led_ctl 0xBA ${2}
led_ack
led_open
led_ctl 0xBB ${3}
led_ack
led_open
led_ctl 0xBC ${1} # Quadrant 4
led_ack
led_open
led_ctl 0xBD ${2}
led_ack
led_open
led_ctl 0xBE ${3}
led_ack
# Zone 2 (Right Stick)
led_open
led_ctl 0x73 ${1} # Quadrant 1
led_ack
led_open
led_ctl 0x74 ${2}
led_ack
led_open
led_ctl 0x75 ${3}
led_ack
led_open
led_ctl 0x76 ${1} # Quadrant 2
led_ack
led_open
led_ctl 0x77 ${2}
led_ack
led_open
led_ctl 0x78 ${3}
led_ack
led_open
led_ctl 0x79 ${1} # Quadrant 3
led_ack
led_open
led_ctl 0x7A ${2}
led_ack
led_open
led_ctl 0x7B ${3}
led_ack
led_open
led_ctl 0x7C ${1} # Quadrant 4
led_ack
led_open
led_ctl 0x7D ${2}
led_ack
led_open
led_ctl 0x7E ${3}
led_ack
}
function intensity() {
printf "0x%X\n" $((${1} / ${2}))
}
GETBRIGHTNESS=$(get_setting led.brightness)
if [ ! -z "${2}" ]
then
LEDBRIGHTNESS=${2}
debug_out "Arg[2]: ${2}"
elif [ ! -z "${GETBRIGHTNESS}" ]
then
LEDBRIGHTNESS=${GETBRIGHTNESS}
debug_out "GETBRIGHTESS: ${GETBRIGHTNESS}"
else
debug_out "NO SETTING: min"
LEDBRIGHTNESS=min
set_setting led.brightness min
fi
case ${LEDBRIGHTNESS} in
max)
LEDBRIGHTNESS=1
set_setting led.brightness max
;;
mid)
LEDBRIGHTNESS=4
set_setting led.brightness mid
;;
min)
LEDBRIGHTNESS=8
set_setting led.brightness min
;;
esac
case ${1} in
off)
led_state 0x31
set_setting led.color off
;;
on)
led_state 0x37
set_setting led.color on
led_enable
;;
red)
COLOR=$(intensity 0xFF ${LEDBRIGHTNESS})
ledcontrol off
led_color ${COLOR} 0x00 0x00
set_setting led.color red
led_enable
;;
green)
COLOR=$(intensity 0xFF ${LEDBRIGHTNESS})
ledcontrol off
led_color 0x00 ${COLOR} 0x00
set_setting led.color green
led_enable
;;
blue)
COLOR=$(intensity 0xFF ${LEDBRIGHTNESS})
ledcontrol off
led_color 0x00 0x00 ${COLOR}
set_setting led.color blue
led_enable
;;
teal)
COLOR=$(intensity 0xFF ${LEDBRIGHTNESS})
ledcontrol off
led_color 0x00 ${COLOR} ${COLOR}
set_setting led.color teal
led_enable
;;
purple)
COLOR=$(intensity 0xFF ${LEDBRIGHTNESS})
ledcontrol off
led_color ${COLOR} 0x00 ${COLOR}
set_setting led.color purple
led_enable
;;
white)
COLOR=$(intensity 0xFF ${LEDBRIGHTNESS})
ledcontrol off
led_color ${COLOR} ${COLOR} ${COLOR}
set_setting led.color white
led_enable
;;
default)
del_setting led.color
;;
brightness)
set_setting led.brightness ${2}
ledcontrol $(get_setting led.color)
;;
*)
COLOR=$(get_setting led.color)
if [ ! -z "${COLOR}" ]
then
ledcontrol ${COLOR}
fi
;;
esac

View file

@ -5,6 +5,7 @@
cat <<EOF >/storage/.config/profile.d/020-fan_control
DEVICE_HAS_FAN="true"
DEVICE_PWM_FAN="$(find /sys/devices/platform/oxp-platform -name pwm1)"
DEVICE_FAN_INPUT="$(find /sys/devices/platform/oxp-platform -name fan*_input)"
DEVICE_TEMP_SENSOR="$(find /sys/devices/pci*/* -path "*/nvme" -prune -o -name temp1_input -print)"
EOF

View file

@ -4,7 +4,7 @@
#
# A simple tool to manipulate the controller LEDs using ectool, thanks to
# Maya (https://github.com/Maccraft123) for reverse engineering.
# Maya Matuszczyk (https://github.com/Maccraft123) for reverse engineering.
#
# Schema:
#
@ -98,9 +98,9 @@ then
LEDBRIGHTNESS=${GETBRIGHTNESS}
debug_out "GETBRIGHTESS: ${GETBRIGHTNESS}"
else
debug_out "NO SETTING: max"
LEDBRIGHTNESS=max
set_setting led.brightness max
debug_out "NO SETTING: min"
LEDBRIGHTNESS=min
set_setting led.brightness min
fi
case ${LEDBRIGHTNESS} in

View file

@ -0,0 +1 @@
ayn Loki Zero

View file

@ -4,6 +4,8 @@
cat <<EOF >/storage/.config/profile.d/020-fan_control
DEVICE_HAS_FAN="true"
DEVICE_PWM_FAN="$(find /sys/devices/platform/ayn-platform -name pwm1)"
DEVICE_FAN_INPUT="$(find /sys/devices/platform/ayn-platform -name fan*_input)"
DEVICE_TEMP_SENSOR="$(find /sys/devices/pci*/* -path "*/nvme" -prune -o -name temp1_input -print)"
EOF

Some files were not shown because too many files have changed in this diff Show more