diff options
| author | HombreLaser <buran@silosneeded.com> | 2025-11-08 18:51:50 -0600 |
|---|---|---|
| committer | HombreLaser <buran@silosneeded.com> | 2025-11-08 18:51:50 -0600 |
| commit | 736204d8167e18f053d511daa849742ef95e8984 (patch) | |
| tree | d94da79809670bd1dacb9f712544d30919ea2265 | |
| parent | 3e0f87a19791b367065e9777f66d73c470df2944 (diff) | |
Big update baby
35 files changed, 802 insertions, 167 deletions
@@ -1,4 +1,5 @@ _site +*.sh .sass-cache .jekyll-cache .jekyll-metadata @@ -15,6 +15,7 @@ gem "minima", "~> 2.5" # gem "github-pages", group: :jekyll_plugins # If you have any plugins, put them here! group :jekyll_plugins do + gem "jekyll-toc" gem "jekyll-archives" gem "jekyll-feed", "~> 0.12" gem 'jekyll-paginate' diff --git a/Gemfile.lock b/Gemfile.lock index dd7564f..4bee1b7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -43,8 +43,9 @@ GEM sass-embedded (~> 1.54) jekyll-seo-tag (2.8.0) jekyll (>= 3.8, < 5.0) - jekyll-sitemap (1.4.0) - jekyll (>= 3.7, < 5.0) + jekyll-toc (0.19.0) + jekyll (>= 3.9) + nokogiri (~> 1.12) jekyll-watch (2.2.1) listen (~> 3.0) kramdown (2.4.0) @@ -60,9 +61,12 @@ GEM jekyll (>= 3.5, < 5.0) jekyll-feed (~> 0.9) jekyll-seo-tag (~> 2.1) + nokogiri (1.18.10-x86_64-linux-gnu) + racc (~> 1.4) pathutil (0.16.2) forwardable-extended (~> 2.6) public_suffix (5.0.5) + racc (1.8.1) rake (13.2.1) rb-fsevent (0.11.2) rb-inotify (0.10.1) @@ -88,7 +92,7 @@ DEPENDENCIES jekyll-paginate jekyll-polyglot jekyll-seo-tag - jekyll-sitemap + jekyll-toc minima (~> 2.5) tzinfo (>= 1, < 3) tzinfo-data diff --git a/_config.yml b/_config.yml index 5fbec06..30cdf83 100644 --- a/_config.yml +++ b/_config.yml @@ -46,6 +46,7 @@ pagination_slice: 3 # - vendor/gems/ # - vendor/ruby/ plugins: + - jekyll-toc - jekyll-feed - jekyll-paginate - jekyll-polyglot diff --git a/_data/en/strings.yml b/_data/en/strings.yml index fc233f9..744d75a 100644 --- a/_data/en/strings.yml +++ b/_data/en/strings.yml @@ -18,6 +18,7 @@ index: first: First last: Last post: + toc: Table of Contents next: Next previous: Previous read: Read diff --git a/_data/es/strings.yml b/_data/es/strings.yml index e36acf5..777c7a4 100644 --- a/_data/es/strings.yml +++ b/_data/es/strings.yml @@ -18,6 +18,7 @@ index: first: Primera last: Última post: + toc: Índice next: Siguiente previous: Anterior read: Leer diff --git a/_drafts/pc_crt_guide.md b/_drafts/pc_crt_guide.md new file mode 100644 index 0000000..d23e12b --- /dev/null +++ b/_drafts/pc_crt_guide.md @@ -0,0 +1,466 @@ +--- +layout: toc_post +title: The definitive guide on connecting your PC to a CRT TV +date: 31-10-2025 +tags: ["Tutorials", "Gaming"] +toc: true +--- + +If you've ever wondered how to use a normal PC on a consumer CRT TV, perhaps to play retro games via emulators, +then look no further. I've perused /vr/'s CRT threads and arcade projects and forums threads for a couple of years +now, and since a year earlier been playing on what I consider my dream setup. + +# What TV should you use? + +The world of cathode-ray tube enthusiasts in the internet can be described succinctly as a circle-jerk. Threads +are often derailed by both bragging about your super premium PVM you got for 5 bucks back in 2013 in a smug tone and by replying +unprompted that PVMs are shit for gaming and not what you really want. Successive posts become an exchange of "sour grapes" messages. + +To this I assure you: do not despair. The most sensible approach on deciding what CRT TV you should get if you don't have one already +is... the one you can get. Seriously. Specially if it's free. + +That's generally, but you want to wire up your computer to it, remember? Sadly, not every CRT is up to the task, but most of the ones you'll find are. +Just make sure they have component inputs. You know, those red, green and blue jacks: + + +<br><em class="caption">My TV component inputs</em> + +This is not all, however: while your TV having component inputs is a good start, there are some that have them but perform digital processing +operations on the signals they receive. In layman's terms, this means they won't be outputting the resolutions you want them to output, mainly, 240p[^1] and 480i[^2] +These TVs are mostly late HD CRT TVs, and they are hard to come by, so chances are the TV with component inputs you found on the curve is enough. But, if you want +to be certain, make sure you discard the following: + +* The TV has no digital inputs, like HDMI or DVI. +* It's not widescreen. +* Write down its model number, found in the back, and search for it on the [CRT database](https://crtdatabase.com/). If it can output 480p and 1080i, you're out of +luck. + +If you're wondering why this is the case, as it seems that if you found one of these mythic HD CRTs you've struck gold, is that, like modern TVs, they will try to +output everything in 480p, this means they will de-interlace[^3] the input and this will result in both poor image quality and input lag. To make matters +more complicated, this is not the case 100% of the time, as some of these TVs do output a native 480i signal, and others, while they don't output a true 480i resolution, +you could use 480p instead, and to play 240p games (pre-dreamcast) you'd do something called line-doubling[^4]. As you can see, this is +getting mind numbingly complicated real fast, and those subjects are out of the scope of this post, so I'll only take into account SDTVs[^5] + +## A case for RGB mods + +If you've come across this article, chances are you've been researching this subject for a while. That means the probability of you coming across the concept of 'RGB +mod' is high, and I'm here to assure you: they're not needed. As long as your TV has component inputs, that is. They do make it easier to output your computer's image +into a TV by making the use of an adapter unnecessary, but, as we'll see, the fact you have to make this mod, or pay someone to do it, negates that simplicity, in my +opinion. + +RGB modding a TV for the purpose of either achieving a better image quality or making it possible for a PC to output to it is only relevant when using a +composite[^6]-only set. And even then, you probably can do an even easier mod called, yes, [component mod](https://crtdatabase.com/modding/ypbpr). + +But if you can instead just go out and ask your grandma to give you her old TV with components, just do that. + + +<br><em class="caption">RGB modding a TV with component inputs be like</em> + +### Aren't RGB and component... different? + +Yes, they're different [color spaces](https://en.wikipedia.org/wiki/Color_space), but RGB signals can be converted to component, or, more precisely, YPbPr +trivially via passive adapters[^7]. This means no input lag. + +Adding RGB capability to your TV sounds great because that's the color space that the VGA connector uses, that's why you can bypass the adapter. + +# Hardware guide + +I suggest checking both the [Batocera CRT Script compatibility guide](https://github.com/ZFEbHVUE/Batocera-CRT-Script/wiki#-hardware-compatibility) and the +[Groovyarcade hardware suggestions general](https://gitlab.com/groovyarcade/support/-/wikis/2-Pre-Requisites-and-Installation/2.1-Hardware-Suggestions-General) for +the specifics, but, generally, only the GPU matters. And it's almost mandatory for that GPU to be an AMD card with analogue ports: either VGA or DVI-I. + +These cards are cheap as hell, I'm talking 15 bucks on ebay, and almost everywhere. That's also another advantage of this setup compared to, say, a MiSTER: +you'll save a ton of money while not sacrificing quality in your gaming experience. + +I'll suppose you're either acquainted or aware of good-old VGA. DVI-I, on the other hand, was never as popular, and the existence of DVI-D shrouds it in mystery +even more. But, the difference between DVI-D and DVI-I is that the latter can output an analogue video signal, while the former is almost a subset of HDMI, which +is entirely digital. + +To differentiate them, note that rightmost pins of a DVI-I connector are in the form of a cross with four points in each quadrant, [like this](https://en.wikipedia.org/wiki/Digital_Visual_Interface#/media/File:DVI_Connector_Pinout.svg). When using DVI-I, you'll be able to use a simple and cheap [passthrough](https://es.aliexpress.com/item/1005004543798892.html) adapter in order to connect your GPU to the VGA port of your VGA-to-Component adapter. + +If you want more specific recommendations, I'd advise you to look on either ebay or facebook marketplace for the following cards: +- R7 240 +- R7 250 +- R7 250x +- HD 8350 + +And, for a more general search, you can look for "AMD Radeon OEM"[^8], again, just make sure it has either a VGA or DVI-I port. + +For all the other computer parts that are not the GPU, the same rule as the TV applies: whatever you can get either cheaply or for free. Seriously. Sadly, emulators +are CPU heavy, so the only exception to this would be if you'd like to play the Nintendo 64, Playstation and Sega Saturn cores on retroarch. In that case, get +anything better than a Core i5 2550k, which would be most CPUs launched in the past 9 years. Any Ryzen of any generation would work, too, specially Ryzen 5 and up. +Personally, I'm rocking a Ryzen 5 2600, but I'll build another PC for this exact use case with a Core Duo from 2010. Of course, I won't be playing sega saturn, but +everything up to that generation of gaming will be fine. + +With a good CPU, and with that I mean anything better than a first gen Ryzen 5, you can also try run-ahead latency reduction[^9]. + +RAM, storage and power supply are irrelevant. Buy the cheapest you can get, and for storage, 240GB is a good start, if you want more, well, buy a bigger SSD. + +## The adapter + +This is the piece of hardware that will allow you to connect your PC, which would normally output an RGB signal, to your TV, via component. + +For a long time this was the missing piece of the puzzle and it's what killed my first attempt at this 5 or 6 years ago, but no more. (God this is starting to sound +like an ad) I recommend [bitfunx's RGB to YPbPr adapter](https://es.aliexpress.com/item/1005004721236631.html). It's cheap, it works (which is a novelty for chinese +products in this market segment) and it's not unobtanium like most other RGB to YPbPr adapters. + +It's what I've been using these past two years and I have had no issues whatsoever with it, the image quality is great. Although some people report the color codes +of the component jacks are not standard (as in, the green, red and blue jacks have their color switched up, so you must check which combination works) +that was not the case for me. + +What I do recommend though, is getting a good quality VGA cable and, if it's your case, a good DVI-VGA passthrough, too. By rule of thumb the good cables are thicker +than the bad ones. At first I used a random cable I came across on my house and a passthrough the dude who sold me the cheap radeon card gave me but artifacts +like ghosting were noticeable with them. I ruled out the adapter by connecting the computer to a regular monitor, so do be wary of that. + +# Software + +On the software side, most people will recommend you hack your GPU by installing a special driver for your card called 'CRT Emudriver', which allows your GPU to +be driven to the low dot-clocks[^10] needed to output CRT TV compatible signals. + +This is for use with windows. I'll take the mask off now, and tell you: I hate windows, and I would never recommend anyone to use it. But here, I wouldn't recommend +it not only because of a matter of principles, but because the alternative is arguably easier. + +The solution here is a linux distribution, and a linux distribution either thought from the ground up for this use case (wiring the PC to a esoteric 90's black box +display) or that can acquire that feature. + +What makes this easier than CRT emudriver and windows is that you don't need to install anything specific for your hardware and you don't have to go to the BIOS setup +for anything other than booting your linux usb: the linux kernel can be patched to support 15 kHz horizontal frequencies, e.g. those used by consumer TVs (computer +monitors, connected via VGA and capable of outputting higher resolutions are driven with a 31 kHz frequency instead). + +The display server we'll be using on linux can too be configured with modelines[^11] specifically for CRT TVs. + +Ok... I know that there's no universe in which that sounds easier than 'installing CRT emudriver'. Linux kernel 15 kHz patch? Modelines? What the +fuck. But the simplicity of this setup lies in the fact that the distribution we'll install already does all of that for us, out of the box, batteries included, +plug and play. We only have to burn a linux iso with [balena etcher](https://etcher.balena.io/#download-etcher), plug it in the computer we'll use, turn it on, +press either F12 or DEL like crazy, boot our USB and press enter a few times. That's it. + +Being bespoke distributions, the two I'll showcase here are designed as game centers/consoles, as in, you turn it on and use your controller to navigate +between your games. How can that get even comfier? It can't, this is the peak retro gaming emulation setup. + +While I used groovyarcade at first, I've been favoring batocera lately. The difference between them is that groovyarcade is from the ground-up an operating system +for arcade machines/CRT game centers: when you install it, it prompts you to choose the setup that best fits your case (being consumer CRT TVs, we'll all choose +the same option). It just works but I do concede that is oriented more towards power users: I'll recommend you configure retroarch as its main "front-end"[^12]. + +Batocera, on the other hand, is a more generalist distro. It is designed from the ground up to be a console basically, you can configure the theme of its menu, +download cover art, even watch movies via [kodi](https://kodi.tv/) and it is easier to play PC games, as in, non emulated ones, via lutris or specific linux binaries. +Using batocera on CRTs, unlike groovyarcade, is a matter of running a script post-installation. That sounds kinda scary, I know, but let me show you: you'll just have +to copy a couple commands verbatim from here and press enter a few times and that's it. + +## Installing Groovyarcade + +Head on over to the [groovyarcade's releases page](https://github.com/substring/os/releases) and download the .iso.xz file. You want an .iso though, not an +.iso.xz. You can use [7zip](https://www.7-zip.org/) to extract this file on windows. + +If you're on linux or any other unix or unix-like, try with `unxz`: + +```bash +unxz groovyarcade-2024.07-x86_64.iso.xz +``` +<br> + +If you're on windows, I recommend [balena etcher](https://etcher.balena.io/#download-etcher) to burn the .iso to your USB How to use it is outside the scope +of this post, and I don't have access to a windows machine, so just search for a balena etcher tutorial. You'd basically just connect your USB, open the program +and select the groovyarcade iso. + +When you have your USB ready, connect it to the PC you'll use with your CRT. Suffice to say I do recommend using an entirely different machine, and install the +operating system in the PC's main storage as the sole OS available, so you don't have to deal with dual booting. + +If you're using a fresh machine with no operating system present in its main storage chances are you won't have to do the following as it will boot directly to your +USB. So, try first booting your PC normally with your USB attached to check if this is the case. + +If your USB doesn't boot automatically, then when turning on your PC, the boot screen should tell you what key to press if you want to access either the boot menu or +the BIOS configuration. This varies across motherboards, but it is usually either F12 or DEL, pay attention to what the boot screen tells you. If your motherboard's +BIOS has a boot screen, just select your USB. If not, then you'll have to set it as the main boot option. + +Here comes what is probably the biggest technical hurdle in this tutorial: when installing groovyarcade (and running the script in batocera) you must have your PC +wired to the TV via the adapter and **not** use any other of your GPU's ports. So, if you're using a GPU with a DVI-I and Display ports, you **must** have only the +DVI-I connected. + +This is an issue because both the BIOS' and Groovyarcade installation medium's boot screen aren't compatible with a CRT TV. What you'll get if you switch to the +component input while the PC is booting up is a garbled mess that may harm your CRT, as at this point in time your CRT is outputting an image with a 31 kHz horizontal +frequency. + +There are two ways to remedy this. The first one is to use a [cable like this](https://es.aliexpress.com/item/1005008966431527.html) to display the image to two +monitors at once: one of which will be your TV and the other a regular VGA monitor. + +The other is to, first, make sure your USB boots by default, either by being the only bootable medium present or by being the default. Once you make sure it boots +unprompted, connect your PC to your TV, turn it on, wait 30 seconds or so, **while having your TV either turned off or switched to another input**, then, switch +to the component inputs, you'll then see what it appears like the following menu (but all garbled up and going up and down): + + + +If you don't want to risk it, then wait a minute to be sure and press enter once, after a couple of seconds switch to the component input. The TV should be displaying +a usable image. + +When you press enter once you will tell Groovyarcade to start outputting a more CRT friendly image with a horizontal frequency of 15 kHz so you can continue the +installation. You only need to press enter once because this is the first option the cursor is pointing at; the other 15 kHz option is for nvidia and intel +plebs, and you're using a radeon, right? + +When groovyarcade is trying to output a useful signal, it will ask you to confirm if you're seeing the output correctly. Press enter. After that, it will start +testing your hardware. + +It is recommended to have a speaker connected to the PC to be in the loop. This will be quick if you only have the analog connector active. + + + +After the tests are finished, it will tell you the results: + + + +In my case I failed in every respect, as I'm using a virtual machine in QEMU to take screenshots, but if you're using a radeon card with analog out like I told +you it'll probably say to you that your card is ideal and that you can output native resolutions. + +If this is not the case, it then will tell you that groovyarcade will use super resolutions[^13] instead. This is fine, both standard resolutions will still be +available (240p and 480i), refer to the glossary for the explanation on this. The worst case scenario is that you'll only be able to use 240p as it still is possible +that your card doesn't support interlaced resolutions, but this is rare on radeon cards, even in ones as recent as the RX500 series (via display port and a special +adapter of course -- I didn't mention it in the hardware section as I'm not familiar on using display port, and vehemently recommend to use analog outputs instead). + +After confirming your setup, Groovyarcade will then ask you for the desired mode: + + + +The only ones that we care about are the 15 kHz ones: the first, generic one, NTSC TV and the arcade standard resolution. +When I installed groovyarcade I chose NTSC, but in batocera the recommended one is the arcade standard resolution, so you can pick either. If you're not sure, +just pick NTSC. + +After this, everything that follows is usual operating system installation stuff: choose HD installation to install groovyarcade in your main storage (suffice to say, +make sure you don't have anything important there), choose your drive, don't skip swap and wait for the installation to finish. + +After that, unplug your usb, switch to another input, reboot, wait, switch back. You should be on the attract mode screen. + +### Setting retroarch as the main frontend + +After installing groovyarcade, it should boot to Attract Mode, groovyarcade's default front-end. If you only want to play arcade games, via (Groovy)MAME, you're set, +but, for a more generalist emulation machine, I recommend setting up retroarch. Suffice to say, you need to use a keyboard, groovyarcade's menu doesn't work with a +controller. Bummer. + +For this, press escape to return to groovyarcade's main menu: + + + +Go to setup, and then select `Front-End/Window Manager`. In the following menu: + + + +Select `retroarch`. It will tell you it is missing for your system, and prompt for its installation. Select 'Yes'. After installation, it will be set-up as the default +frontend. + +After that, back in the main menu, select `Emulators Setup` and then select `Retroarch`. Click yes when it prompts you to perform a full system upgrade. It will +show you a monstrous list of packages to either install or update. Click ok: + + + +After that, it will ask you to run an esoteric command, `sudo pacman -Syu`, in non-linux language, this means 'Full system upgrade'. If it asks you for missing +retroarch packages, press enter on 'Yes'. This will install all necessary retroarch 'cores', or more plainly, emulators. After finishing installation, you can +now use retroarch. From the main menu, run it by pressing enter on `Start frontend`. + +### Configuring retroarch + +When in retroarch, you should enable _switchres_. This is a program that will make retroarch output a resolution according to the game you're playing. So, if you're +playing a Dreamcast game, the resolution will switch to 480i, 240p if you're instead playing a snes one, all of this on the fly. Cool, right? + +To do this, go to `Settings` > `Video` > `CRT Switchres`, and, in the CRT Switchres configuration menu: + + + +Set INI in the `CRT Switchres` option. If, when installing groovyarcade it told you your GPU was compatible with low dot clocks, select Native in `Super Resolution`, +if not, you will need super resolutions. Select the one that works for you. It'll work for you if it displays at all, but you can't go wrong with 2560. + +## Installing Batocera + +Head on over to the [batocera project page](https://batocera.org/). Select the option for desktop PCs. +Follow the process detailed in the [groovyarcade section](#installing-groovyarcade) to burn and boot the batocera live iso. Just do note that batocera's bigger: +use a USB with a capacity of at least 16 GB. + +Do not connect your PC to a CRT TV just yet, use a regular monitor instead. + +When you boot to batocera, you'll actually boot up into a live ISO: you can use batocera off the USB. But we still have to install it to ensure a smooth experience +with a CRT TV. + +For this, (if using a keyboard) press space, you should see the following menu. Search for `System settings` and click on it (or press enter if using only a keyboard): + + + +Go all the way down until you find the `Install on a new disk` option. + + + + Click on it, and you should see the following menu: + + + +In `Target device` select your main storage device, in target architecture, x86_64. Confirm and install. After the installation is finished, power off your computer, +unplug the USB and turn it on. You should boot straight into batocera. + +### Enable SSH + +To connect to your batocera system from another computer, you must enable SSH (Or secure shell). For this, when you're in batocera's main menu, press F1 on your +keyboard. This will take you to a file manager. Inside, navigate to `/userdata/system/` and open the `batocera.conf` file. You should see a text file like this: + +``` +# ------------ A - System Options ----------- # + +## Security +## Enable this to enforce security, requiring a password to access the network share. +#system.security.enabled=0 + +## Services +# exampe: system.services=service1 service2 +#system.services= + +## Display rotation +## Leave commented out -> Auto. +## 0 -> No rotation. +## 1 -> Rotate 90 degrees clockwise. +## 2 -> Rotate 180 degrees clockwise. +## 3 -> Rotate 270 degrees clockwise. +#display.rotate=0 + +## Power button behavior +## Change what the power button does when pressed. +## shutdown -> Immediately shutdown the system. +## suspend -> Enter low-power standby mode. +## hybrid -> Enter an even lower-power standy mode, only available on supported devices. +#system.suspendmode=suspend + +## File system compression (btrfs only) +## Natively compresses files as they are stored, reduces disk write speed but increases space available. +#system.fscompression.enabled=0 + +## Send the CEC standby command to the first video output device during shutdown. +#system.cec.standby=1 +``` +<br> +Press `Control+F` and search for `system.ssh.enabled`. Set its value to 1 thus: + +`system.ssh.enabled=1` + +If it's preceded by a `#` character, like this: + +`# system.ssh.enabled=1` + +Remove the `#` character. After this, power off the PC. Disconnect any of the video ports of your GPU and now connect it to your CRT via either DVI-I or VGA through +the adapter. Make sure the TV is either turned off or switched to another input and then turn on the PC. + +### Configure batocera for use with a CRT TV + +As it stands, you still cannot use your batocera system on a CRT TV, for this you must download and run the [batocera CRT script](https://github.com/ZFEbHVUE/Batocera-CRT-Script), +which will run the setup groovyarcade did during its installation: patch your kernel with 15 kHz support, install the necessary modelines and tell the bootloader +to use the 15 kHz kernel alongside the most appropriate modeline for your TV. + +Don't fret: this script is just a plain-text wizard, press enter when it prompts you and select the `Arcade 15 kHz` option when it comes up. + +To run this script on your fresh batocera system, you must first know its local IP address. For this, press space to bring up the menu again and go to network settings. +You should see the following menu: + + + +Write down the IP address. Just as you should when transferring games to groovyarcade (and batocera too), download and install [filezilla](https://filezilla-project.org/download.php?type=client) (if you're on linx, your file manager should come with a SFTP client out of the box). + +When opening filezilla, in user, write `root`, the IP address of your batocera system, and in port, 22. When clicking connect, you should see a directory tree similar +to this: + + + +This is the system directory, found in `/userdata/system`. + +When filezilla is ready, download the [CRT script archive](https://github.com/ZFEbHVUE/Batocera-CRT-Script/archive/refs/heads/main.zip) and extract it. Enter into +that directory, which should be called `Batocera-CRT-Script-main`. Then, go to `userdata`, then `system` and you should see a directory called `Batocera-CRT-Script`. +Drag and drop it inside the `/userdata/system` directory in filezilla. + +Next, open a terminal. If you're on windows, it's called powershell, and SSH should be already installed. + +Write the following command on your terminal: + +``` +ssh root@[YOUR IP ADDRESS] +``` +<br> +It will prompt you for a password; type `linux` and press enter. If it seems as if nothing's being written (i.e. `*` characters are not appearing to obscure the +password), that's normal, just press enter after typing the password. + +After that, your terminal should show you the following text: + +``` + ____ __ ____ _____ ___ ____ ____ __ + ( _ \ /__\ (_ _)( _ )/ __)( ___)( _ \ /__\ + ) _ < /(__)\ )( )(_)(( (__ )__) ) / /(__)\ + (____/(__)(__)(__) (_____)\___)(____)(_)\_)(__)(__) + R E A D Y T O R E T R O + + +-- type 'batocera-check-updates' to check for stable branch -- +-- add 'butterfly' switch to check for latest arch developments -- + +Model: B450M_DS3H +System: Linux 6.15.11 +Architecture: x86_64 +CPU Model: AMD Ryzen 5 2600 Six-Core Processor +CPU Cores: 6 / CPU Threads: 12 +CPU Max Frequency: 3400 MHz +CPU Features: avx2 sse4_1 +Temperature: 49°C +Available Memory: 7027/7887 MB +Display Resolution: 640x480 +Display Refresh Rate: 59.96Hz +Data Partition Format: ext4 +Data Partition Available Space: 137G +Network IP Address: 192.168.0.198 +OS version: 42o 2025/10/06 14:36 +``` +<br><em class="caption">As you can see from the resolution, my system's already configured</em> + +Now, type: + +``` +cd /userdata/system/Batocera-CRT-Script/Batocera_ALLINONE/ +``` +<br> +To get in the CRT script's directory. After that, type: + +``` +chmod a+x Batocera-CRT-Script-v42.sh +``` +<br> +Before proceeding, **make sure** you're not using any other of your system's video ports; only your GPU's analogue output (DVI-I/VGA) should be in use, connected +to the TV via the adapter. + +When you're sure of this, execute the script by typing: + +``` +./Batocera-CRT-Script-v42.sh +``` +<br> +The setup wizard will start. Press enter when prompted, go with the defaults. When it prompts you for your type of display, select `Arcade 15kHz`, if you're +using a consumer CRT TV that is. + +After it finishes and you reboot the computer, you can transfer games just like you would with groovyarcade. In batocera, the ROM directories can be found in +`/userdata/roms`. In batocera, retroarch is already configured with switchres for use on a CRT TV. + +# Glossary + +[^1]: 240p: The resolution of most videogame consoles up to the Sega Dreamcast. It can be understood as a resolution that outputs 240 horizontal lines all the time, without blinking. It can be seen as a 480i[^2] that only shows one segment every frame. + +[^2]: 480i: Also called Standard Definition. In this resolution, the frame is divided in two segments of 240 lines each, which then are rendered one after the other, resulting in an effect in which the frame's composing segments interweave between each other. + +[^3]: De-interlace: To grab a 480i signal and mix both frame segments into one, giving the appearance of a progressive image. This requires processing and is the main reason why flat panels are terrible for retro gaming. This too happens to a 240p signal, as it basically is a hack on 480i. While a CRT doesn't care to show only one segment of the image, for a digital TV this is just another Standard Definition signal and must, too, be de-interlaced. + +[^4]: Line doubling: Basically, make a 480p image pass as a 240p one. This results in thicker scan-lines. + +[^5]: SDTVS: See 480i[^2] + +[^6]: Composite: That yellow jack connector ubiquitous in the analog era. + +[^7]: Passive adapter: An adapter that converts a signal into another without digital processing. + +[^8]: These were cards present in branded computers and all-in-ones, mostly Dell's. + +[^9]: Run-ahead latency reduction: When the emulator executes two instances of the emulation, one ahead of the other by n frames, and splicing via save states the state of the second instance to cut the frames of input lag. + +[^10]: Dot clock: or dot frequency, the amount of pixels being displayed by your GPU per second. + +[^11]: Modeline: a line of text that describes the characteristics of a video signal to be outputted by the computer. + +[^12]: In the context of groovyarcade, front-end just means the program that will be boot up by default. It normally is attract-mode, a frontend for (groovy)mame, but I recommend you use retroarch instead for a more general purpose gaming station. + +[^13]: Super resolutions: due to the problem some GPUs have with outputting low dot clocks required for SD resolutions, you can use super resolutions instead: this means outputting a resolution like '2560x240' instead of the usual '320x240' for example. This works because CRTs don't really care about horizontal resolutions, unlike modern displays: what matters is the _amount of lines_ shown. Because of the higher horizontal resolution, the dot clock you're actually displaying is higher than would it normally be, allowing even more GPUs to be compatible. As you can see, the horizontal 'super resolution' is normally a multiple of a lower, desired horizontal one. diff --git a/_includes/banner.liquid b/_includes/banner.liquid index 58285d2..af883ae 100644 --- a/_includes/banner.liquid +++ b/_includes/banner.liquid @@ -1,4 +1,4 @@ -<div class="my-4 column"> +<div class="my-4 column is-full"> <div class="mb-5 columns is-vcentered"> <div class="column is-narrow"> {% if site.lang != "es" %} @@ -12,22 +12,9 @@ {% endif %} </div> <div class="column"> - <div class="columns"> - {% for tongue in site.languages %} - <div class="column is-2"> - <a class="language" {% if tongue == site.active_lang %}style="font-weight: bold;"{% endif %} {% static_href %}href="{% if tongue == site.default_lang %}{{site.baseurl}}{{page.url}}{% else %}{{site.baseurl}}/{{tongue}}{{page.url}}{% endif %}"{% endstatic_href %} >{{ site.data[site.active_lang].strings[tongue] }}</a>{% if forloop.last == false %}{{" "}}{{ site.langsep }}{% endif %} - </div> - {% endfor %} - </div> - </div> - <div class="column is-1"> - <a href="{{ site.base_url }}/feed.xml"> - <span class="sr-only">Subscribe</span> - <svg class="rss-icon mr-4" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> - <title>RSS</title> - <path d="M19.199 24C19.199 13.467 10.533 4.8 0 4.8V0c13.165 0 24 10.835 24 24h-4.801zM3.291 17.415c1.814 0 3.293 1.479 3.293 3.295 0 1.813-1.485 3.29-3.301 3.29C1.47 24 0 22.526 0 20.71s1.475-3.294 3.291-3.295zM15.909 24h-4.665c0-6.169-5.075-11.245-11.244-11.245V8.09c8.727 0 15.909 7.184 15.909 15.91z"/> - </svg> - </a> + {% for tongue in site.languages %} + <a class="language" {% if tongue == site.active_lang %}style="font-weight: bold;"{% endif %} {% static_href %}href="{% if tongue == site.default_lang %}{{site.baseurl}}{{page.url}}{% else %}{{site.baseurl}}/{{tongue}}{{page.url}}{% endif %}"{% endstatic_href %} >{{ site.data[site.active_lang].strings[tongue] }}</a>{% if forloop.last == false %}{{" "}}{{ site.langsep }}{% endif %} + {% endfor %} </div> </div> {% include navigation.liquid %} diff --git a/_includes/footer.liquid b/_includes/footer.liquid new file mode 100644 index 0000000..715a716 --- /dev/null +++ b/_includes/footer.liquid @@ -0,0 +1,23 @@ +<div class="column"> + <ul> + <li> + <a href="https://git.silosneeded.com/cgit/blog.git" class="footer-element"> + {{ site.data[site.active_lang].strings.global.source_code }} + </a> + </li> + <li class="mt-4"> + <a href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.en" class="footer-element"> + CC BY-NC-ND + </a> + </li> + </ul> +</div> +<div class="column is-flex is-justify-content-end"> + <a href="{{ site.base_url }}/feed.xml"> + <span class="sr-only">Subscribe</span> + <svg class="rss-icon mr-4" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> + <title>RSS</title> + <path d="M19.199 24C19.199 13.467 10.533 4.8 0 4.8V0c13.165 0 24 10.835 24 24h-4.801zM3.291 17.415c1.814 0 3.293 1.479 3.293 3.295 0 1.813-1.485 3.29-3.301 3.29C1.47 24 0 22.526 0 20.71s1.475-3.294 3.291-3.295zM15.909 24h-4.665c0-6.169-5.075-11.245-11.244-11.245V8.09c8.727 0 15.909 7.184 15.909 15.91z"/> + </svg> + </a> +</div> diff --git a/_includes/header.liquid b/_includes/header.liquid index b79df83..77ef7b3 100644 --- a/_includes/header.liquid +++ b/_includes/header.liquid @@ -4,6 +4,7 @@ <meta charset="UTF-8"> <meta http-equiv="Content-Language" content="{{site.active_lang}}"> <meta name="font-license" content="{{ site.url }}/assets/fonts/OFL.txt"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{{ site.name }}</title> <link href="{{ site.baseurl }}/assets/css/bulma.min.css" rel="stylesheet" type="text/css"> <link href="{{ site.baseurl }}/assets/css/styles.css" rel="stylesheet" type="text/css"> diff --git a/_includes/navigation.liquid b/_includes/navigation.liquid index 0f0f2c0..3478c64 100644 --- a/_includes/navigation.liquid +++ b/_includes/navigation.liquid @@ -1,5 +1,5 @@ -<div class="tabs is-boxed is-medium is-large is-full mb-4"> - <ul> +<div class="tabs wrap-tabs is-boxed is-large is-full is-fullwidth mb-4"> + <ul class="is-wrap"> <li> <a href="{{ site.baseurl }}/about"> {{ site.data[site.active_lang].strings.global.about }} @@ -20,10 +20,5 @@ {{ site.data[site.active_lang].strings.global.tags }} </a> </li> - <li> - <a href="https://git.silosneeded.com/cgit/blog.git"> - {{ site.data[site.active_lang].strings.global.source_code }} - </a> - </li> </ul> </div> diff --git a/_layouts/base.liquid b/_layouts/base.liquid new file mode 100644 index 0000000..ef94592 --- /dev/null +++ b/_layouts/base.liquid @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html> + {% include header.liquid %} + + <body> + <div class="columns"> + {{ content }} + </div> + </body> +</html> diff --git a/_layouts/default.liquid b/_layouts/default.liquid index d91d73c..73891a0 100644 --- a/_layouts/default.liquid +++ b/_layouts/default.liquid @@ -1,17 +1,14 @@ -<!DOCTYPE html> -<html> - {% include header.liquid %} - - <body> - <div class="columns"> - <div class="column page-container"> - <div class="columns"> - {% include banner.liquid %} - </div> - <div class="columns"> - {{ content }} - </div> - </div> - </div> - </body> -</html> +--- +layout: base +--- +<div class="column page-container"> + <div class="columns"> + {% include banner.liquid %} + </div> + <div class="columns"> + {{ content }} + </div> + <div class="columns bottom mt-2"> + {% include footer.liquid %} + </div> +</div> diff --git a/_layouts/toc_post.liquid b/_layouts/toc_post.liquid new file mode 100644 index 0000000..6587f02 --- /dev/null +++ b/_layouts/toc_post.liquid @@ -0,0 +1,34 @@ +--- +layout: base +--- + +<div class="column"> + <div class="columns page-container"> + {% include banner.liquid %} + </div> + <div class="columns"> + <div class="column toc-column is-2"> + <h1 class="mb-2"> + <a style="color:#4D9DE0;"> + {{ site.data[site.active_lang].strings.post.toc }} + </a> + </h1> + {% toc %} + </div> + <div class="column post-with-toc-container mb-4"> + {% include page_header.liquid %} + {% include tags.liquid date=page.date tags=page.tags %} + <div class="column content"> + {{ content }} + </div> + <div class="column"> + {% include navigation_buttons.liquid %} + </div> + <div class="column"> + <div class="columns bottom mt-2"> + {% include footer.liquid %} + </div> + </div> + </div> + </div> +</div> diff --git a/about_me-en.md b/about_me-en.md index af045fb..c717e1b 100644 --- a/about_me-en.md +++ b/about_me-en.md @@ -50,4 +50,4 @@ your message sooner or later (Mostly later). ### Fediverse I'm on the fediverse too! I post in english and spanish, occasionally french if the opportunity arises. -You can follow me [here](https://social.silosneeded.com/users/sunbeam_rider). +You can follow me [here](https://shitposter.world/users/sunbeam_rider). diff --git a/about_me-es.md b/about_me-es.md index fd7dfaf..aca8e46 100644 --- a/about_me-es.md +++ b/about_me-es.md @@ -49,4 +49,4 @@ tu mensaje tarde o temprano. ### Fediverso También estoy en el fediverso. Publico mayoritariamente en inglés y español, ocasionalmente francés -si tengo la oportunidad. Me puedes seguir [aquí](https://social.silosneeded.com/users/sunbeam_rider). +si tengo la oportunidad. Me puedes seguir [aquí](https://shitposter.world/users/sunbeam_rider). diff --git a/assets/css/styles.css b/assets/css/styles.css index 3ad8db1..186faf7 100644 --- a/assets/css/styles.css +++ b/assets/css/styles.css @@ -10,33 +10,63 @@ --bulma-info-s: 43%; --bulma-info-l: 23%; --bulma-body-background-color: #E8E9EB; + --bulma-body-color: #000807; + --branding-color: #054a91; + --page-title-hover-color: #617284; + --footer-text-color: #617284; + --anchor-hover-color: #ed6a5a; + --footer-border-color: #c1c1d1; + --pagination-hover-color: #668eb0; + --header-color: #4F759B; + --header-two-color: #610F7F; + --header-three-color: #9DC4B5; } - body { - background: #E8E9EB; + .toc-entry a { + color: var(--bulma-body-color); + } + + .toc-entry::marker { + color: var(--header-color); + } + + .toc-entry a:hover { + color: var(--header-color); + } + + .footer-element { + color: var(--footer-text-color); + } + + .footer-element:hover { + color: var(--branding-color); } .page-title { - color: #054a91; + color: var(--branding-color); font-size: var(--bulma-size-3); } .page-title:hover { - color: #617284; + color: var(--footer-text-color); } .top-bar { - border-bottom: 1px solid #ed6a5a; + border-bottom: 1px solid var(--anchor-hover-color); + } + + .bottom { + border-top: 1px solid var(--footer-border-color); } .rss-icon { width:1.5rem; height: 1.5rem; - fill: #e28816; + fill: var(--rss-icon-color); } .rss-icon:hover { - fill: #b1844b; + fill: var(--rss-icon-hover-color); } a.svg { @@ -56,90 +86,90 @@ .svg-icon-body { width: .8rem; height: .8rem; - fill: #000807; + fill: var(--bulma-body-color); } .tag-icon { width: 1.2rem; height: 1.2rem; - fill: #000807; + fill: var(--bulma-body-color); } .tag-name { - color: #000807; + color: var(--bulma-body-color); font-size: 1.8em; } .tag-name:hover { - color: #054a91; + color: var(--branding-color); } .footer-content { - color: #000807 !important; + color: var(--bulma-body-color) !important; } .caption { - color: #000807; + color: var(--bulma-body-color); } .pagination-element { - color: #054a91; + color: var(--branding-color); } .pagination-element:hover { - color: #617284; + color: var(--foter-text-color); } .tabs { - --bulma-tabs-border-bottom-color: #ed6a5a; - --bulma-tabs-link-color: #ed6a5a; + --bulma-tabs-border-bottom-color: var(--anchor-hover-color); + --bulma-tabs-link-color: var(--anchor-hover-color); --bulma-tabs-boxed-link-hover-background-color: #b6756d; - --bulma-tabs-link-hover-color: #E8E9EB; + --bulma-tabs-link-hover-color: var(--bulma-body-background-color); } a.index-post-title { - color: #000807; + color: var(--bulma-body-color); } a.index-post-title:hover { - color: #054a91; + color: var(--branding-color); } a.archive-post-title { - color: #000807; + color: var(--bulma-body-color); } a.archive-post-title:hover { - color: #054a91; + color: var(--branding-color); } p { - color: #000807; + color: var(--bulma-body-color); } a { - color: #054a91; + color: var(--branding-color); } h1 { - color: #4F759B !important; + color: var(--header-color) !important; } h2 { - color: #610F7F !important; + color: var(--header-two-color) !important; } h3 { - color: #9DC4B5 !important; + color: var(--header-three-color) !important; } li { - color: #000807; + color: var(--bulma-body-color); font-size: 1.2rem; } li::marker { - color: #4D9DE0; + color: var(--header-color); } } @@ -154,40 +184,99 @@ --bulma-info-h: 253deg; --bulma-info-s: 30%; --bulma-info-l: 55%; - --bulma-body-color: #FBF9FF; + --bulma-body-color: #F5F5F5; --bulma-body-background-color: #2F2F37; + --branding-color: #3BB273; + --page-title-hover-color: #5d9979; + --footer-text-color: #c9c7cc; + --anchor-hover-color: #4D9DE0; + --footer-border-color: #6a6c7f; + --pagination-hover-color: #668eb0; + --header-two-color: #E15554; + --header-three-color: #7768AE; + } + + .toc-entry a { + color: var(--bulma-body-color); + } + + .toc-entry::marker { + color: var(--anchor-hover-color); + } + + .toc-entry a:hover { + color: var(--anchor-hover-color); } .page-title { - color: #3BB273; + color: var(--branding-color); font-size: var(--bulma-size-3); } .page-title:hover { - color: #5d9979; + color: var(--branding-color); + } + + .footer-element { + color: var(--footer-text-color); + } + + .footer-element:hover { + color: var(--anchor-hover-color); } .language { - color: #3BB273; + color: var(--branding-color); font-size: var(--bulma-size-6); } .top-bar { - border-bottom: 1px solid #4D9DE0; + border-bottom: 1px solid var(--anchor-hover-color); + } + + .bottom { + border-top: 1px solid var(--footer-border-color); } .rss-icon { width:1.5rem; height: 1.5rem; - fill: #e28816; + fill: var(--rss-icon-color); } .rss-icon:hover { - fill: #b1844b; + fill: var(--rss-icon-hover-color); + } + + .footer-element { + color: var(--footer-text-color); + } + + .footer-element:hover { + color: var(--anchor-hover-color); + } + + .language { + color: var(--branding-color); + font-size: var(--bulma-size-6); + } + + .top-bar { + border-bottom: 1px solid var(--anchor-hover-color); + } + + .bottom { + border-top: 1px solid var(--footer-border-color); + } + + .rss-icon { + width:1.5rem; + height: 1.5rem; + fill: var(--rss-icon-color); } - .is-info-button { - color: #F4FAFF; + .rss-icon:hover { + fill: var(--rss-icon-hover-color); } a.svg { @@ -201,7 +290,7 @@ top: 0; right: 0; bottom: 0; - left:0; + left: 0; } .svg-icon-body { @@ -222,78 +311,62 @@ } .tag-name:hover { - color: #668eb0; - } - - .footer-content { - color: #F4FAFF !important; - } - - .caption { - color: #E0E0E0; + color: var(--anchor-hover-color); } .pagination-element { - color: #4D9DE0; + color: var(--anchor-hover-color); } .pagination-element:hover { - color: #668eb0; + color: var(--pagination-hover-color); } .tabs { - --bulma-tabs-border-bottom-color: #4D9DE0; - --bulma-tabs-link-color: #4D9DE0; - --bulma-tabs-boxed-link-hover-background-color: #668eb0; - } - - a.footer-url { - color: #F4FAFF; + --bulma-tabs-border-bottom-color: var(--anchor-hover-color); + --bulma-tabs-link-color: var(--anchor-hover-color); + --bulma-tabs-boxed-link-hover-background-color: var(--pagination-hover-color); } a.index-post-title { - color: #F5F5F5; + color: var(--bulma-body-color); } a.index-post-title:hover { - color: #4D9DE0; + color: var(--anchor-hover-color); } a.archive-post-title { - color: #F5F5F5; + color: var(--bulma-body-color); } a.archive-post-title:hover { - color: #4D9DE0; - } - - p { - color: #F5F5F5; + color: var(--anchor-hover-color); } a { - color: #668eb0; + color: var(--pagination-hover-color); } h1 { - color: #4D9DE0 !important; + color: var(--anchor-hover-color) !important; } h2 { - color: #E15554 !important; + color: var(--header-two-color) !important; } h3 { - color: #7768AE !important; + color: var(--header-three-color) !important; } li { - color: #F5F5F5; + color: var(--bulma-body-color); font-size: 1.2rem; } li::marker { - color: #4D9DE0; + color: var(--anchor-hover-color); } } @@ -339,11 +412,25 @@ } } +@media (width <= 1000px) { + .post-with-toc-container { + flex: none; + width: 100%; + } +} + +@media (width > 1000px) { + .post-with-toc-container { + flex: none; + width: 60%; + } +} + .sr-only { clip: rect(0,0,0,0); border-width:0; - height:1px; - margin:-1px; + height: 1px; + margin: -1px; overflow:hidden; padding:0; position:absolute; @@ -351,6 +438,11 @@ width:1px } +.toc-entry { + padding-inline-start: 2ch; + list-style: inside; +} + .svg-icon { width:1.5rem; height: 1.5rem; @@ -362,6 +454,18 @@ font-size: 18px; } +.toc-column { + margin-inline-start: 4%; +} + +.is-wrap { + flex-wrap: wrap !important; +} + +.wrap-tabs { + display: block; +} + a.index-post-title { font-size: 2rem; } @@ -378,6 +482,11 @@ p.archive-post-date { margin-bottom: 0rem; } +.toc-entry a { + font-size: 18px; + text-decoration: underline; +} + h1 { font-size: 2rem; } @@ -389,3 +498,7 @@ h2 { p { font-size: 1.2rem; } +:root { + --rss-icon-color: #e28816; + --rss-icon-hover-color: #b1844b; +} diff --git a/assets/files/pgp_public_key.asc b/assets/files/pgp_public_key.asc index a27969a..4748b98 100644 --- a/assets/files/pgp_public_key.asc +++ b/assets/files/pgp_public_key.asc @@ -1,52 +1,52 @@ -----BEGIN PGP PUBLIC KEY BLOCK-----
-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
+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
-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
-opkA
-=PRIe
+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
+L2HQ
+=MHv/
-----END PGP PUBLIC KEY BLOCK-----
diff --git a/assets/images/2025/batocera_installation.jpg b/assets/images/2025/batocera_installation.jpg Binary files differnew file mode 100644 index 0000000..88928a4 --- /dev/null +++ b/assets/images/2025/batocera_installation.jpg diff --git a/assets/images/2025/batocera_menu.jpg b/assets/images/2025/batocera_menu.jpg Binary files differnew file mode 100644 index 0000000..37b35d3 --- /dev/null +++ b/assets/images/2025/batocera_menu.jpg diff --git a/assets/images/2025/batocera_system_dir.jpg b/assets/images/2025/batocera_system_dir.jpg Binary files differnew file mode 100644 index 0000000..e961574 --- /dev/null +++ b/assets/images/2025/batocera_system_dir.jpg diff --git a/assets/images/2025/component_inputs.jpg b/assets/images/2025/component_inputs.jpg Binary files differnew file mode 100644 index 0000000..3809456 --- /dev/null +++ b/assets/images/2025/component_inputs.jpg diff --git a/assets/images/2025/groovyarcade.jpg b/assets/images/2025/groovyarcade.jpg Binary files differnew file mode 100644 index 0000000..c861aec --- /dev/null +++ b/assets/images/2025/groovyarcade.jpg diff --git a/assets/images/2025/groovyarcade.png b/assets/images/2025/groovyarcade.png Binary files differnew file mode 100644 index 0000000..0be181f --- /dev/null +++ b/assets/images/2025/groovyarcade.png diff --git a/assets/images/2025/groovyarcade_frontends.jpg b/assets/images/2025/groovyarcade_frontends.jpg Binary files differnew file mode 100644 index 0000000..444b4e3 --- /dev/null +++ b/assets/images/2025/groovyarcade_frontends.jpg diff --git a/assets/images/2025/groovyarcade_frontends.png b/assets/images/2025/groovyarcade_frontends.png Binary files differnew file mode 100644 index 0000000..cf60e87 --- /dev/null +++ b/assets/images/2025/groovyarcade_frontends.png diff --git a/assets/images/2025/groovyarcade_install_screen.png b/assets/images/2025/groovyarcade_install_screen.png Binary files differnew file mode 100644 index 0000000..1e65374 --- /dev/null +++ b/assets/images/2025/groovyarcade_install_screen.png diff --git a/assets/images/2025/groovyarcade_options.png b/assets/images/2025/groovyarcade_options.png Binary files differnew file mode 100644 index 0000000..1e93d83 --- /dev/null +++ b/assets/images/2025/groovyarcade_options.png diff --git a/assets/images/2025/groovyarcade_test_results.png b/assets/images/2025/groovyarcade_test_results.png Binary files differnew file mode 100644 index 0000000..d112e89 --- /dev/null +++ b/assets/images/2025/groovyarcade_test_results.png diff --git a/assets/images/2025/groovyarcade_tests.png b/assets/images/2025/groovyarcade_tests.png Binary files differnew file mode 100644 index 0000000..a07ba2d --- /dev/null +++ b/assets/images/2025/groovyarcade_tests.png diff --git a/assets/images/2025/network_settings.jpg b/assets/images/2025/network_settings.jpg Binary files differnew file mode 100644 index 0000000..0b7cd76 --- /dev/null +++ b/assets/images/2025/network_settings.jpg diff --git a/assets/images/2025/retroarch_crt_switchres.jpg b/assets/images/2025/retroarch_crt_switchres.jpg Binary files differnew file mode 100644 index 0000000..69eb122 --- /dev/null +++ b/assets/images/2025/retroarch_crt_switchres.jpg diff --git a/assets/images/2025/rgb_modding_component_input_tvs.jpeg b/assets/images/2025/rgb_modding_component_input_tvs.jpeg Binary files differnew file mode 100644 index 0000000..9ce98e0 --- /dev/null +++ b/assets/images/2025/rgb_modding_component_input_tvs.jpeg diff --git a/assets/images/2025/settings_menu.jpg b/assets/images/2025/settings_menu.jpg Binary files differnew file mode 100644 index 0000000..89bc31d --- /dev/null +++ b/assets/images/2025/settings_menu.jpg diff --git a/assets/images/2025/woah_packages.jpg b/assets/images/2025/woah_packages.jpg Binary files differnew file mode 100644 index 0000000..2570daa --- /dev/null +++ b/assets/images/2025/woah_packages.jpg |
