From 1b9ea86e1b008ec682a6dae234072d04042b8b81 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Thu, 22 Oct 2026 11:45:42 +0200 Subject: [PATCH] feat: draw site images from data, host them scripts/sitediagrams.py writes the explainer, install flow, verification modes, MinUI card, pipeline and data layer diagrams as inline SVG from the registry, the platform files, the install manifests and the pipeline step list. A page asks for one with an image comment, which the decoration pass resolves. The two mermaid diagrams of the architecture page are replaced, so no page loads mermaid from unpkg. Platform logos and system icons are copied once by fetch_site_images.py with their source and owner recorded, and the build rewrites the remote links to the copies. validate_site refuses an image from another host. Three registry logos named a personal avatar instead of the project's (RomM, ROCKNIX, MiSTer FPGA) and MyMinUI's was a GitHub identicon, now dropped. One 1200x630 sharing card per section, a 404 page with search and the two entry pages, and a list of screenshots that need a real device. --- .github/workflows/deploy-site.yml | 1 + docs_assets/images-needed.md | 71 ++ docs_assets/logos/amberelec.png | Bin 0 -> 5202 bytes docs_assets/logos/batocera.svg | 1 + docs_assets/logos/bizhawk.png | Bin 0 -> 9207 bytes docs_assets/logos/emudeck.png | Bin 0 -> 11793 bytes docs_assets/logos/emuelec.png | Bin 0 -> 12839 bytes docs_assets/logos/knulli.png | Bin 0 -> 9856 bytes docs_assets/logos/lakka.svg | 36 + docs_assets/logos/minui.png | Bin 0 -> 6158 bytes docs_assets/logos/misterfpga.png | Bin 0 -> 12939 bytes docs_assets/logos/nextui.png | Bin 0 -> 17587 bytes docs_assets/logos/recalbox.svg | 1 + docs_assets/logos/retroarch.svg | 12 + docs_assets/logos/retrobat.png | Bin 0 -> 11980 bytes docs_assets/logos/retrodeck.svg | 53 ++ docs_assets/logos/retropie.png | Bin 0 -> 6916 bytes docs_assets/logos/rocknix.png | Bin 0 -> 7276 bytes docs_assets/logos/romm.png | Bin 0 -> 5979 bytes docs_assets/logos/sources.json | 124 +++ docs_assets/og/contribute.png | Bin 0 -> 17504 bytes docs_assets/og/explore.png | Bin 0 -> 18909 bytes docs_assets/og/home.png | Bin 0 -> 22442 bytes docs_assets/og/reference.png | Bin 0 -> 18245 bytes docs_assets/og/setup.png | Bin 0 -> 17734 bytes docs_assets/og/start.png | Bin 0 -> 19089 bytes docs_assets/overrides/404.html | 37 + docs_assets/overrides/main.html | 26 +- .../APF - Imagination Machine.png | Bin 0 -> 3075 bytes .../system-icons/Acorn - Archimedes.png | Bin 0 -> 2460 bytes .../system-icons/Acorn - BBC Micro.png | Bin 0 -> 1662 bytes docs_assets/system-icons/Amstrad - CPC.png | Bin 0 -> 1404 bytes .../system-icons/Apple - Macintosh.png | Bin 0 -> 2136 bytes docs_assets/system-icons/Aquaplus - PIECE.png | Bin 0 -> 1368 bytes docs_assets/system-icons/Atari - 2600.png | Bin 0 -> 1395 bytes docs_assets/system-icons/Atari - 5200.png | Bin 0 -> 731 bytes docs_assets/system-icons/Atari - 7800.png | Bin 0 -> 1040 bytes docs_assets/system-icons/Atari - Jaguar.png | Bin 0 -> 2498 bytes docs_assets/system-icons/Atari - Lynx.png | Bin 0 -> 1675 bytes docs_assets/system-icons/Atari - ST.png | Bin 0 -> 1700 bytes docs_assets/system-icons/Atari - XEGS.png | Bin 0 -> 2072 bytes .../system-icons/Bally - Astrocade.png | Bin 0 -> 1759 bytes .../system-icons/Bandai - WonderSwan.png | Bin 0 -> 2610 bytes .../system-icons/Bit Corporation - Gamate.png | Bin 0 -> 2840 bytes docs_assets/system-icons/Casio - Loopy.png | Bin 0 -> 2251 bytes docs_assets/system-icons/Casio - PV-2000.png | Bin 0 -> 2696 bytes .../system-icons/Coleco - ColecoVision.png | Bin 0 -> 1791 bytes .../system-icons/Commodore - Amiga.png | Bin 0 -> 1915 bytes .../system-icons/Commodore - VIC-20.png | Bin 0 -> 1568 bytes .../system-icons/Entex - Adventure Vision.png | Bin 0 -> 2696 bytes .../Epoch - Super Cassette Vision.png | Bin 0 -> 1519 bytes .../system-icons/Fairchild - Channel F.png | Bin 0 -> 1458 bytes .../system-icons/Fujitsu - FM Towns.png | Bin 0 -> 705 bytes docs_assets/system-icons/Fujitsu - FM-7.png | Bin 0 -> 2154 bytes docs_assets/system-icons/GCE - Vectrex.png | Bin 0 -> 1206 bytes docs_assets/system-icons/GamePark - GP32.png | Bin 0 -> 2582 bytes .../system-icons/Hartung - Game Master.png | Bin 0 -> 1955 bytes .../system-icons/Infocom - Z-Machine.png | Bin 0 -> 2351 bytes .../system-icons/Magnavox - Odyssey2.png | Bin 0 -> 2117 bytes .../system-icons/Mattel - Intellivision.png | Bin 0 -> 1892 bytes docs_assets/system-icons/Microsoft - MSX.png | Bin 0 -> 2285 bytes docs_assets/system-icons/Microsoft - Xbox.png | Bin 0 -> 2080 bytes docs_assets/system-icons/NEC - PC-88.png | Bin 0 -> 2142 bytes docs_assets/system-icons/NEC - PC-98.png | Bin 0 -> 1475 bytes docs_assets/system-icons/NEC - PC-FX.png | Bin 0 -> 938 bytes .../Nintendo - Game Boy Advance.png | Bin 0 -> 2581 bytes .../Nintendo - Game Boy Color.png | Bin 0 -> 2045 bytes .../system-icons/Nintendo - Game Boy.png | Bin 0 -> 1997 bytes .../system-icons/Nintendo - GameCube.png | Bin 0 -> 2957 bytes .../system-icons/Nintendo - Nintendo 64.png | Bin 0 -> 2170 bytes .../system-icons/Nintendo - Nintendo 64DD.png | Bin 0 -> 1991 bytes .../system-icons/Nintendo - Nintendo DS.png | Bin 0 -> 1589 bytes .../system-icons/Nintendo - Pokemon Mini.png | Bin 0 -> 3667 bytes .../system-icons/Nintendo - Satellaview.png | Bin 0 -> 1999 bytes .../system-icons/Nintendo - Switch.png | Bin 0 -> 916 bytes docs_assets/system-icons/Nintendo - Wii U.png | Bin 0 -> 684 bytes docs_assets/system-icons/Nintendo - Wii.png | Bin 0 -> 670 bytes docs_assets/system-icons/Nokia - N-Gage.png | Bin 0 -> 3124 bytes docs_assets/system-icons/Philips - CD-i.png | Bin 0 -> 1160 bytes .../system-icons/Philips - Videopac+.png | Bin 0 -> 1906 bytes .../system-icons/Pioneer - LaserActive.png | Bin 0 -> 1291 bytes docs_assets/system-icons/RCA - Studio II.png | Bin 0 -> 2216 bytes docs_assets/system-icons/SNK - Neo Geo CD.png | Bin 0 -> 1732 bytes .../system-icons/SNK - Neo Geo Pocket.png | Bin 0 -> 1756 bytes docs_assets/system-icons/SNK - Neo Geo.png | Bin 0 -> 1322 bytes docs_assets/system-icons/Sega - 32X.png | Bin 0 -> 1836 bytes docs_assets/system-icons/Sega - Beena.png | Bin 0 -> 3032 bytes docs_assets/system-icons/Sega - Chihiro.png | Bin 0 -> 4961 bytes docs_assets/system-icons/Sega - Dreamcast.png | Bin 0 -> 2214 bytes docs_assets/system-icons/Sega - Game Gear.png | Bin 0 -> 2163 bytes docs_assets/system-icons/Sega - Saturn.png | Bin 0 -> 1991 bytes docs_assets/system-icons/Sharp - X1.png | Bin 0 -> 2560 bytes docs_assets/system-icons/Sharp - X68000.png | Bin 0 -> 2239 bytes docs_assets/system-icons/Sinclair - ZX 81.png | Bin 0 -> 1389 bytes .../system-icons/Sinclair - ZX Spectrum.png | Bin 0 -> 1741 bytes .../system-icons/Sony - PlayStation 2.png | Bin 0 -> 613 bytes .../system-icons/Sony - PlayStation 4.png | Bin 0 -> 722 bytes .../Sony - PlayStation Portable.png | Bin 0 -> 1757 bytes .../system-icons/Sony - PlayStation Vita.png | Bin 0 -> 1669 bytes .../system-icons/Sony - PlayStation.png | Bin 0 -> 1662 bytes .../Texas Instruments - TI-83.png | Bin 0 -> 2507 bytes docs_assets/system-icons/Tiger - Game.com.png | Bin 0 -> 1983 bytes docs_assets/system-icons/Tomy - Tutor.png | Bin 0 -> 1995 bytes .../system-icons/VTech - CreatiVision.png | Bin 0 -> 1572 bytes docs_assets/system-icons/VTech - Socrates.png | Bin 0 -> 1653 bytes docs_assets/system-icons/VTech - V.Smile.png | Bin 0 -> 4376 bytes docs_assets/system-icons/Videoton - TVC.png | Bin 0 -> 1527 bytes docs_assets/system-icons/sources.json | 321 ++++++++ platforms/_registry.yml | 7 +- scripts/fetch_site_images.py | 187 +++++ scripts/generate_site.py | 16 +- scripts/make_og_cards.py | 48 ++ scripts/sitediagrams.py | 755 ++++++++++++++++++ scripts/siterender.py | 92 +-- scripts/validate_site.py | 19 + tests/test_site_images.py | 219 +++++ tests/test_site_render.py | 74 +- wiki/architecture.md | 36 +- wiki/testing-guide.md | 2 +- wiki/verification-modes.md | 1 + 120 files changed, 1963 insertions(+), 176 deletions(-) create mode 100644 docs_assets/images-needed.md create mode 100644 docs_assets/logos/amberelec.png create mode 100644 docs_assets/logos/batocera.svg create mode 100644 docs_assets/logos/bizhawk.png create mode 100644 docs_assets/logos/emudeck.png create mode 100644 docs_assets/logos/emuelec.png create mode 100644 docs_assets/logos/knulli.png create mode 100644 docs_assets/logos/lakka.svg create mode 100644 docs_assets/logos/minui.png create mode 100644 docs_assets/logos/misterfpga.png create mode 100644 docs_assets/logos/nextui.png create mode 100644 docs_assets/logos/recalbox.svg create mode 100644 docs_assets/logos/retroarch.svg create mode 100644 docs_assets/logos/retrobat.png create mode 100644 docs_assets/logos/retrodeck.svg create mode 100644 docs_assets/logos/retropie.png create mode 100644 docs_assets/logos/rocknix.png create mode 100644 docs_assets/logos/romm.png create mode 100644 docs_assets/logos/sources.json create mode 100644 docs_assets/og/contribute.png create mode 100644 docs_assets/og/explore.png create mode 100644 docs_assets/og/home.png create mode 100644 docs_assets/og/reference.png create mode 100644 docs_assets/og/setup.png create mode 100644 docs_assets/og/start.png create mode 100644 docs_assets/overrides/404.html create mode 100644 docs_assets/system-icons/APF - Imagination Machine.png create mode 100644 docs_assets/system-icons/Acorn - Archimedes.png create mode 100644 docs_assets/system-icons/Acorn - BBC Micro.png create mode 100644 docs_assets/system-icons/Amstrad - CPC.png create mode 100644 docs_assets/system-icons/Apple - Macintosh.png create mode 100644 docs_assets/system-icons/Aquaplus - PIECE.png create mode 100644 docs_assets/system-icons/Atari - 2600.png create mode 100644 docs_assets/system-icons/Atari - 5200.png create mode 100644 docs_assets/system-icons/Atari - 7800.png create mode 100644 docs_assets/system-icons/Atari - Jaguar.png create mode 100644 docs_assets/system-icons/Atari - Lynx.png create mode 100644 docs_assets/system-icons/Atari - ST.png create mode 100644 docs_assets/system-icons/Atari - XEGS.png create mode 100644 docs_assets/system-icons/Bally - Astrocade.png create mode 100644 docs_assets/system-icons/Bandai - WonderSwan.png create mode 100644 docs_assets/system-icons/Bit Corporation - Gamate.png create mode 100644 docs_assets/system-icons/Casio - Loopy.png create mode 100644 docs_assets/system-icons/Casio - PV-2000.png create mode 100644 docs_assets/system-icons/Coleco - ColecoVision.png create mode 100644 docs_assets/system-icons/Commodore - Amiga.png create mode 100644 docs_assets/system-icons/Commodore - VIC-20.png create mode 100644 docs_assets/system-icons/Entex - Adventure Vision.png create mode 100644 docs_assets/system-icons/Epoch - Super Cassette Vision.png create mode 100644 docs_assets/system-icons/Fairchild - Channel F.png create mode 100644 docs_assets/system-icons/Fujitsu - FM Towns.png create mode 100644 docs_assets/system-icons/Fujitsu - FM-7.png create mode 100644 docs_assets/system-icons/GCE - Vectrex.png create mode 100644 docs_assets/system-icons/GamePark - GP32.png create mode 100644 docs_assets/system-icons/Hartung - Game Master.png create mode 100644 docs_assets/system-icons/Infocom - Z-Machine.png create mode 100644 docs_assets/system-icons/Magnavox - Odyssey2.png create mode 100644 docs_assets/system-icons/Mattel - Intellivision.png create mode 100644 docs_assets/system-icons/Microsoft - MSX.png create mode 100644 docs_assets/system-icons/Microsoft - Xbox.png create mode 100644 docs_assets/system-icons/NEC - PC-88.png create mode 100644 docs_assets/system-icons/NEC - PC-98.png create mode 100644 docs_assets/system-icons/NEC - PC-FX.png create mode 100644 docs_assets/system-icons/Nintendo - Game Boy Advance.png create mode 100644 docs_assets/system-icons/Nintendo - Game Boy Color.png create mode 100644 docs_assets/system-icons/Nintendo - Game Boy.png create mode 100644 docs_assets/system-icons/Nintendo - GameCube.png create mode 100644 docs_assets/system-icons/Nintendo - Nintendo 64.png create mode 100644 docs_assets/system-icons/Nintendo - Nintendo 64DD.png create mode 100644 docs_assets/system-icons/Nintendo - Nintendo DS.png create mode 100644 docs_assets/system-icons/Nintendo - Pokemon Mini.png create mode 100644 docs_assets/system-icons/Nintendo - Satellaview.png create mode 100644 docs_assets/system-icons/Nintendo - Switch.png create mode 100644 docs_assets/system-icons/Nintendo - Wii U.png create mode 100644 docs_assets/system-icons/Nintendo - Wii.png create mode 100644 docs_assets/system-icons/Nokia - N-Gage.png create mode 100644 docs_assets/system-icons/Philips - CD-i.png create mode 100644 docs_assets/system-icons/Philips - Videopac+.png create mode 100644 docs_assets/system-icons/Pioneer - LaserActive.png create mode 100644 docs_assets/system-icons/RCA - Studio II.png create mode 100644 docs_assets/system-icons/SNK - Neo Geo CD.png create mode 100644 docs_assets/system-icons/SNK - Neo Geo Pocket.png create mode 100644 docs_assets/system-icons/SNK - Neo Geo.png create mode 100644 docs_assets/system-icons/Sega - 32X.png create mode 100644 docs_assets/system-icons/Sega - Beena.png create mode 100644 docs_assets/system-icons/Sega - Chihiro.png create mode 100644 docs_assets/system-icons/Sega - Dreamcast.png create mode 100644 docs_assets/system-icons/Sega - Game Gear.png create mode 100644 docs_assets/system-icons/Sega - Saturn.png create mode 100644 docs_assets/system-icons/Sharp - X1.png create mode 100644 docs_assets/system-icons/Sharp - X68000.png create mode 100644 docs_assets/system-icons/Sinclair - ZX 81.png create mode 100644 docs_assets/system-icons/Sinclair - ZX Spectrum.png create mode 100644 docs_assets/system-icons/Sony - PlayStation 2.png create mode 100644 docs_assets/system-icons/Sony - PlayStation 4.png create mode 100644 docs_assets/system-icons/Sony - PlayStation Portable.png create mode 100644 docs_assets/system-icons/Sony - PlayStation Vita.png create mode 100644 docs_assets/system-icons/Sony - PlayStation.png create mode 100644 docs_assets/system-icons/Texas Instruments - TI-83.png create mode 100644 docs_assets/system-icons/Tiger - Game.com.png create mode 100644 docs_assets/system-icons/Tomy - Tutor.png create mode 100644 docs_assets/system-icons/VTech - CreatiVision.png create mode 100644 docs_assets/system-icons/VTech - Socrates.png create mode 100644 docs_assets/system-icons/VTech - V.Smile.png create mode 100644 docs_assets/system-icons/Videoton - TVC.png create mode 100644 docs_assets/system-icons/sources.json create mode 100644 scripts/fetch_site_images.py create mode 100644 scripts/make_og_cards.py create mode 100644 scripts/sitediagrams.py create mode 100644 tests/test_site_images.py diff --git a/.github/workflows/deploy-site.yml b/.github/workflows/deploy-site.yml index 183deaba..7a7a5de7 100644 --- a/.github/workflows/deploy-site.yml +++ b/.github/workflows/deploy-site.yml @@ -43,6 +43,7 @@ on: - "scripts/restore_large_files.py" - "scripts/safeparse.py" - "scripts/sect233r1.py" + - "scripts/sitediagrams.py" - "scripts/siteexports.py" - "scripts/siterender.py" - "scripts/sitesources.py" diff --git a/docs_assets/images-needed.md b/docs_assets/images-needed.md new file mode 100644 index 00000000..4bc29a92 --- /dev/null +++ b/docs_assets/images-needed.md @@ -0,0 +1,71 @@ +# Images that need a real device + +These pictures show a real screen, so they are captured on a real install and +never drawn as a mock-up. Each entry says what the capture must show, where it +goes, and the alt text it carries. Folder layouts that follow from data are +drawn by `scripts/sitediagrams.py` instead (the MinUI card tree is +``). + +Captures: PNG or WebP, 1200 px wide at most, cropped tight, under 150 KB, +personal paths and user names removed. Menu labels are checked against the +current release of the software before the capture is used. Put each file in +`docs_assets/screens/` and note the software version in the commit message. + +## RetroArch System/BIOS directory + +Settings, Directory in RetroArch (Ozone menu), with the System/BIOS row +highlighted and its path visible. For the RetroArch pages on Windows, macOS, +Linux and Android. + +**Alt text**: RetroArch Settings, Directory screen, with the System/BIOS line highlighted showing the folder path. + +## RetroArch firmware check + +Main Menu, Information, Core Information after loading a PlayStation core, with +the firmware lines reading Present. For RetroArch and Lakka pages, "Done when". + +**Alt text**: RetroArch Core Information for a PlayStation core, each firmware line marked Present. + +## Steam Deck Desktop Mode and Konsole + +Two panels: the Steam Deck power menu with Switch to Desktop selected, then the +desktop with Konsole open and the install command pasted. For the EmuDeck and +RetroDECK pages. + +**Alt text**: Steam Deck power menu with Switch to Desktop selected, then the Konsole terminal open with the install command pasted. + +## Installer run, annotated + +A real installer run in a terminal with three marks: the detected BIOS folder +line, the confirmation prompt, and the Done line. For First install and every +setup page. + +**Alt text**: Installer output in a terminal, with marks on the detected folder, the install choice and the Done line. + +## Batocera network share from Windows + +Windows File Explorer with `\\BATOCERA\share\bios` in the address bar and the +BIOS files listed. For the Batocera and KNULLI pages. + +**Alt text**: Windows File Explorer showing the Batocera bios folder opened over the network. + +## Batocera missing BIOS screen + +Batocera's main menu path to the missing BIOS check, and the result screen with +no missing file for the consoles in use. For the Batocera page, "Done when". + +**Alt text**: Batocera missing BIOS check listing no missing files. + +## Recalbox BIOS manager + +Recalbox's BIOS checking screen with green, yellow and red entries visible. For +the Recalbox page. + +**Alt text**: Recalbox BIOS manager listing files marked present, present with another version, and missing. + +## A multi-part pack extracted + +A file manager showing two downloaded parts and the single folder both were +extracted into. For Get your files. + +**Alt text**: Two downloaded pack parts and the one folder both were extracted into. diff --git a/docs_assets/logos/amberelec.png b/docs_assets/logos/amberelec.png new file mode 100644 index 0000000000000000000000000000000000000000..ddc713f4374ec7272208d0d636da8e27c5747c70 GIT binary patch literal 5202 zcma)=Ra6uXu*R2VX$cWQy2XWc=>?>_lm_WqLK>t?V9`Z#iKRhSiNB;vcdT?Tg0zIB zAR(P{y>IvNp5K|7bH0a}Z_d0;te%cKB{>s0005xW)KD?_S8e|{NQwXDpIL#D0014M zri!9b(EMIrFxt2`zhBl|Vo@KNejk2G&JH_m))uk;i zOJzLhx@(?;2(4ZGz2vIAO(ha_%{}-bPUubB?-*Jn*uDNQGFrtiqP8j z)%d0R5M9uJ;{D9bp=aa{AO&{uySKt%sC@7fm#1XF=xGkLf~`ViDiBPhL<;o4M{(kb z!63D-CHpd{wr@(>eav+n_nrZ?av~;5zgv1g=WR{`xR9li#li)6h#f6J9cu4sAjKE~ zc8+%(7Ni>e5Ro5pWZKETVt1z}uxZ$O2wW4?MId%}W5|DbbP~ce&G24|792lU^XD_8 zR9>M@?#O)a@t<%)gKzm13JRw*syOi{;8&jKWR{AH^xK?=qoFgk&CNpF5JiGUYN}O= zx~LR!Vb9wU4RXe41&$&Ngs2;d8wgSKFYY^QFk~A~eXjAAR;-?c#l&rL>0z>#CPbhv zuEjMziAq^DyLWa%GoxbY?N<^{|WT9I3Y$2##nJA-J$U2Jh zz|#>oDMug$Y>l?_m&-R}pOKK%!n(A^OyIw5JkWM)S&&UC*M0pfTY17sZ!p3ez~Q)^ zi<0FU)QtJh#qCtH7^IH6Z)8kbM;}zhk>Op+HZhu^rpa~R`yxfw$b{iAY;@X*8Vt&9 zxD;z7t_vXE1|&?OUxGkp1-~AYmqKclXo$(kr)>@HDELh5USlAVt_d9Jz?p}p86{;M z@qUg3QFilwnMbb^)2754duOql`m!o1aoQpstJwKRFFc@0yxBr>99x$T(sbgQxh@X` zf*pL0F=TJpr2xe;a_Pw|HU*zrrES+W6rT~jLvW-VeXjKC)?@ula?=6uS zp2gxmg4cdtF?nEC$U;KG+?mOtJ!LJ)9k}z4B^3#^NrGF|yid0kQz^qw==F?xyIt*h z&^UL}>Ly1q5^ zvxXE;%=!~h&a}zkXKrcDAf!+CaA{@T+|njhT*5XtilAmYA?Br24`dMgELn-G=wnF- zWqO&)v{jNLqe=Vz;nbZm)-IgMg-(-%wm}7u#9IokE!8x;sB*Y?4`i@fMDU9H`{&HJ zL>gI<_}4?b1>n+MD0>BsUrqKZl^pj8mt%(JA%E&{>kAkkwsDyU@Z&x)V`ExS-AQCB ze%2VneUO%9!Q)P*W?-==dik45!$@>zK<2`#sVdRK&FCwir$uzhJtm`Tf`=QAD?HO5 zTcz~BicKbnrw310zA)716e4c$qST=D`2)#(4kfjqQ{w`eW?*U!C#{lAjr%_e@ZB%c zQ6Y_@As(KNE~9xQ25@L0tf?a4X?TFC0QAEkHmg`WD@N`eUUOybzKs*nR*jboLC%FF zY9eLUB6f%v7;u<8+F!j@X+VYx##a8f( z@J3(Fndzb9k;$MATSMiXGg!>D$qTo~Vkw9t}P6X&MQGTn})n`nttLX9^d$v>FQAz`a|`uDc$fzbf^w#B|U|6u+}#28g> zNfI5mI=$qYU#7%z%FT|CcQm$F&yZKjKUG`iql=5l1yQbw0hh<*F4z1UL?G4>1|Q&g=1k>;B&YwWAJO4NF5SyZhP}H~TK5qJoz^ z4~S=Go`5CK{cx+NOqG-wlv+;`qMlnQ$T&&J;NLU7Fi{2U^I1UDT&o_xJn1?+J z31cb#Tps5$q^Swf#!r#w|2X^u2Qf=LbN^BGS$d=}EY42{YAdaRtf(mVlhACd9Mv^K8(rq95`ZtgM>d)}~HsPX1jWSFzSheC} z!B!4C-=4_`%mf^Nv&gUWzwD*U#2Ry69Z&^sHp`EPInZM}mGww`6|@EqX9vd$hSSK6 zM>fJewttfa{Q6V=6KdgdzS~Wc1Q~h~+x_VP{YFZ43uFXQy#bSOc;=Ci6r>u}#+t=FEhzP;~+VO11a zN2hEpwb*q&aFUe4N2_S`HSDgd>uaWL$JM0FQ&wa=pT*+!9!~~U|1vuffvGac=Grbv zJu|3HgirNW=-t_fb%A)V_@->oZxpol&4>S1PJi%H2FWWtyggoDqqAumP%I`|ZiS7F z9Bc*r$u)QjlnOwvH~G+CAO$UH*Z!(PBSN^hS)I3p$8%r(d8hqzg(>NpBwoKh^*L%4 zy=L6>vuQR$(T+myZrms2HIg|3y_N6)f@FI<@szlf3ZF<7$q6K6G2xbU%0mE?XYcYh z8dgenAGmu=hTSPjSPp*#VjN&eMDlH%NpWP`A|qLwhqaf`;pKT_EFH7WJSB>OpTskl zajng4&YF_nB_Y-OdgKu?UXB!g7=0+Qr&wj%bkhKly=0YZ%oJqw+|2V${n@a)7Pjdg z6VWWKTe4uwf@^c87|A}M4FoA-I}vznNW0UCckG#Mx5=n@;3g^Jlj^}HQ5d_NZ$s}3 z(X|oD{?)1&s~e2hzM}#_<6+Lu#@1}!o3adO-aYzp(p9mddl?_R?W>(rjJ+vO zx~4=~Z`y{&N9=1!ZxCRL}|;f{GnMI8Hd zwU|e3?fS>xb}-|+ETN{R`GH&a#_xjfd>aB>JHk{GQtDGxp5xQS!Rc~^XA=1YjmdU`RmA$(Ld$K47puKW+x=xu-)3wW_aGz>gC zMDdv};$5&)RnyJK^EZGGL1Pq^C6X>&k0qVZJ=6iU&+eO7>~@Q9NrN;MyRRa{a3{f? zAD00d_eJhbBjS9%#?tRG1NTFw9QWu)m35oL_TwG}F3~vu+LiS?$+A))U2cfR9I!CZ`eCF=B{ zK?I>qE7TwWSowuqnYECcT2Rf(em{A|k54JIPRp6jS1z!%K8wY$((XX^C%?@HUTN@w zm>ZbiTslN~E$2B*CrF!a8(t_q0D$0GU+r zaw-v>@HwMBn-b=3$&78*ES&1N)(d8+A@YqZ6ZLb8HEMbc9PndgyADsf3*xc#wGlXY zV-YF*Z}p#ORB}bI=*oxXmiGECEt3vYd6w`f0mFWXnC?s12uge7FEtw!8|=|_D4e?B)OU^td32@X7wxic zhh-d;1J5>w?e&Bf10p^ou|>lvPUPq?^^+@CtAi3V3qBjfe~3Uho7S2g|1}v6wGeZIxxvI;-yG^iy&G?qOhwETJ zxZSDvVFqxBb*3lwC51`b@8eum=_MI(ak57~@?dmW)Hxuo99q|W2hM!COcqivieKdg z$(*R81g$oGk9_Degdm~4Ype1hs&`CIii+57SrCCKc}J)R%gjRU4wPs>H*Dl<4^d(w zK^2J)$&F{X8K1dr0MOA3;Fe5=Llm>kwQ)YF8U>rb(CpSGxMP+d_q`&c=hLlg4tL5k z>m1;AT(0ce(Oqf(mHLPw>=_lS_wXW%H3nP3ic=%SKD-G@*(`I(F%>sas|Lf39nV&9>K4KNybx=~znlB;)ZGaD;7mg# z95WInF$0ph(4$zeuzy9UI6)>D243Oo%y6JU&MZ-eSmjS2wr_3EgBy#iHE8ULl<9@}#pQpfbG?)u9MpVbN#wJU2-1lEUe!jNv71Z- zjQGaMnu59Ut*48Z2SsE|0p;hG_O4RC?yMYq?^TP}JJW&?#p1wn*Inds^#dIx3JuBY zgRqu2!td!1C=)mej?LOG%+Mmw^Pi&Y z1bJjMtKxgBXR5W|Jd4fs2(p_KIhsqdH=QDN@fqqNL#MywEb6L0TaFul_?0i6NWeNg zdoyENt~1T)ERc-zo~=P?UGVi@;|MN!I;yndvrw$cSHHkOW_W^GllR9IAb0WX@ZzfR z6=Wmnpom6I%Z{ZVCfLz5!UB1bpUcLfxpMMzS=e0Sda zQfc>lwmK5$FMD(uCT}oUWcHb~bm+mJVU2<10!a>0`lA6S-=ayE4tLy;Q;wz_+4^8Kq~p27MNN~Px{Uy;a59VKt=S%u)kGENC@6s zH00#fzp;TDKXeQDS5q027)6ntHyeVc8LDtNcezRB&M`uJK7D*ETgvyb5^00Sf|?B5 zf2F0d=>jj$hRNU3G*u1z&seF$avgW4EC1b3B>UcQrXaf>tB~6?WGVdI%CqCrX}@`k z4bb4VJT{ara9zxyMC#doYO)lxmMGVXl{5Y-E-v2weHW+a?_Xc-u^^CqND$$0yQA(#ZG!Pq9<#DuOt=^8E!}80WuVAwW}A KN2N;17V$r4;O$NT literal 0 HcmV?d00001 diff --git a/docs_assets/logos/batocera.svg b/docs_assets/logos/batocera.svg new file mode 100644 index 00000000..de36c9b4 --- /dev/null +++ b/docs_assets/logos/batocera.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs_assets/logos/bizhawk.png b/docs_assets/logos/bizhawk.png new file mode 100644 index 0000000000000000000000000000000000000000..511597b29170bc90ce886c59f169cd7248053b9d GIT binary patch literal 9207 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 literal 0 HcmV?d00001 diff --git a/docs_assets/logos/emuelec.png b/docs_assets/logos/emuelec.png new file mode 100644 index 0000000000000000000000000000000000000000..1c432fc52b9cb674aa03066ee7d034c114db5ab3 GIT binary patch literal 12839 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 FV1gIwpKJgC literal 0 HcmV?d00001 diff --git a/docs_assets/logos/knulli.png b/docs_assets/logos/knulli.png new file mode 100644 index 0000000000000000000000000000000000000000..fc8885f1cc93c4e1eef4f3dd11b96ef00a9bc027 GIT binary patch literal 9856 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

qaN=xTjXZ*sulyR6kXqVevLDxnT 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 mUSYs140z>wg#mw_*Z&9jvrb<37kz2~0000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs_assets/logos/minui.png b/docs_assets/logos/minui.png new file mode 100644 index 0000000000000000000000000000000000000000..cc59063a47ea4a9dd79a94cb309174bb781f9ad7 GIT binary patch literal 6158 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 literal 0 HcmV?d00001 diff --git a/docs_assets/logos/misterfpga.png b/docs_assets/logos/misterfpga.png new file mode 100644 index 0000000000000000000000000000000000000000..3582164402caf4d72e382861b37e4cb6c0d1b00d GIT binary patch literal 12939 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 BQ-S~h literal 0 HcmV?d00001 diff --git a/docs_assets/logos/nextui.png b/docs_assets/logos/nextui.png new file mode 100644 index 0000000000000000000000000000000000000000..dd758331398addb1a222892855a76d0baddca351 GIT binary patch literal 17587 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 literal 0 HcmV?d00001 diff --git a/docs_assets/logos/recalbox.svg b/docs_assets/logos/recalbox.svg new file mode 100644 index 00000000..b96d2dd1 --- /dev/null +++ b/docs_assets/logos/recalbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs_assets/logos/retroarch.svg b/docs_assets/logos/retroarch.svg new file mode 100644 index 00000000..a35b434a --- /dev/null +++ b/docs_assets/logos/retroarch.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/docs_assets/logos/retrobat.png b/docs_assets/logos/retrobat.png new file mode 100644 index 0000000000000000000000000000000000000000..2b4395ac6ad1e8b598a1fde302121405103bf90f GIT binary patch literal 11980 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 literal 0 HcmV?d00001 diff --git a/docs_assets/logos/retrodeck.svg b/docs_assets/logos/retrodeck.svg new file mode 100644 index 00000000..185f9d63 --- /dev/null +++ b/docs_assets/logos/retrodeck.svg @@ -0,0 +1,53 @@ + + diff --git a/docs_assets/logos/retropie.png b/docs_assets/logos/retropie.png new file mode 100644 index 0000000000000000000000000000000000000000..e388562524f2802ff6a21750a961ae3ef76b2e6f GIT binary patch literal 6916 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 KMNUMnLSTaGz;QwV literal 0 HcmV?d00001 diff --git a/docs_assets/logos/rocknix.png b/docs_assets/logos/rocknix.png new file mode 100644 index 0000000000000000000000000000000000000000..8158615dd6587ca243591cabbf12a5862b9ce2a4 GIT binary patch literal 7276 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 literal 0 HcmV?d00001 diff --git a/docs_assets/logos/romm.png b/docs_assets/logos/romm.png new file mode 100644 index 0000000000000000000000000000000000000000..71d38413a8bd48bb63cf874f38b7d8c4ab8ee148 GIT binary patch literal 5979 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 JPDHLkV1gcGrAYt) literal 0 HcmV?d00001 diff --git a/docs_assets/logos/sources.json b/docs_assets/logos/sources.json new file mode 100644 index 00000000..590c551d --- /dev/null +++ b/docs_assets/logos/sources.json @@ -0,0 +1,124 @@ +{ + "note": "Each platform's own logo, owned by its project and shown only to name that platform. Copied once by scripts/fetch_site_images.py.", + "images": [ + { + "file": "amberelec.png", + "platform": "amberelec", + "source": "https://avatars.githubusercontent.com/u/102820909", + "owner": "AmberELEC", + "licence": "GitHub organisation avatar of AmberELEC" + }, + { + "file": "batocera.svg", + "platform": "batocera", + "source": "https://raw.githubusercontent.com/batocera-linux/batocera-emulationstation/master/resources/splash_batocera.svg", + "owner": "Batocera", + "licence": "repository licence MIT" + }, + { + "file": "bizhawk.png", + "platform": "bizhawk", + "source": "https://avatars.githubusercontent.com/u/11743303", + "owner": "TASVideos", + "licence": "GitHub organisation avatar of TASEmulators" + }, + { + "file": "emudeck.png", + "platform": "emudeck", + "source": "https://raw.githubusercontent.com/dragoonDorise/EmuDeck/main/icons/EmuDeck.png", + "owner": "EmuDeck", + "licence": "repository licence GPL-3.0" + }, + { + "file": "emuelec.png", + "platform": "emuelec", + "source": "https://avatars.githubusercontent.com/u/57574835", + "owner": "EmuELEC", + "licence": "GitHub organisation avatar of EmuELEC" + }, + { + "file": "knulli.png", + "platform": "knulli", + "source": "https://avatars.githubusercontent.com/u/166268572", + "owner": "KNULLI", + "licence": "GitHub organisation avatar of knulli-cfw" + }, + { + "file": "lakka.svg", + "platform": "lakka", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/src/xmb/flatui/lakka.svg", + "owner": "Lakka (libretro)", + "licence": "file from libretro/retroarch-assets, CC-BY-4.0" + }, + { + "file": "minui.png", + "platform": "minui", + "source": "https://avatars.githubusercontent.com/u/225589", + "owner": "Shaun Inman", + "licence": "GitHub avatar of shauninman, the author of MinUI" + }, + { + "file": "misterfpga.png", + "platform": "misterfpga", + "source": "https://avatars.githubusercontent.com/u/29345272", + "owner": "MiSTer FPGA", + "licence": "GitHub organisation avatar of MiSTer-devel" + }, + { + "file": "nextui.png", + "platform": "nextui", + "source": "https://avatars.githubusercontent.com/u/202386615", + "owner": "LoveRetro", + "licence": "GitHub organisation avatar of LoveRetro" + }, + { + "file": "recalbox.svg", + "platform": "recalbox", + "source": "https://raw.githubusercontent.com/homarr-labs/dashboard-icons/main/svg/recalbox.svg", + "owner": "Recalbox", + "licence": "file from homarr-labs/dashboard-icons, Apache-2.0" + }, + { + "file": "retroarch.svg", + "platform": "retroarch", + "source": "https://raw.githubusercontent.com/libretro/RetroArch/master/media/retroarch-vector_invader-only.svg", + "owner": "libretro", + "licence": "repository licence GPL-3.0" + }, + { + "file": "retrobat.png", + "platform": "retrobat", + "source": "https://raw.githubusercontent.com/RetroBat-Official/retrobat/main/system/resources/retrobat_logo_notext.png", + "owner": "RetroBat", + "licence": "repository states no licence" + }, + { + "file": "retrodeck.svg", + "platform": "retrodeck", + "source": "https://raw.githubusercontent.com/RetroDECK/RetroDECK/main/res/icon.svg", + "owner": "RetroDECK", + "licence": "repository licence GPL-3.0" + }, + { + "file": "retropie.png", + "platform": "retropie", + "source": "https://avatars.githubusercontent.com/u/11378204", + "owner": "RetroPie", + "licence": "GitHub organisation avatar of RetroPie" + }, + { + "file": "rocknix.png", + "platform": "rocknix", + "source": "https://avatars.githubusercontent.com/u/163176886", + "owner": "ROCKNIX", + "licence": "GitHub organisation avatar of ROCKNIX" + }, + { + "file": "romm.png", + "platform": "romm", + "source": "https://avatars.githubusercontent.com/u/164058018", + "owner": "RomM", + "licence": "GitHub organisation avatar of rommapp" + } + ] +} diff --git a/docs_assets/og/contribute.png b/docs_assets/og/contribute.png new file mode 100644 index 0000000000000000000000000000000000000000..88a40b47df903051ce318250fd0fd2ff3341681c GIT binary patch literal 17504 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 KelF{r5}E)JKkU~4 literal 0 HcmV?d00001 diff --git a/docs_assets/og/explore.png b/docs_assets/og/explore.png new file mode 100644 index 0000000000000000000000000000000000000000..7e4c409de964aaff47e635df9b4ea42e2412341d GIT binary patch literal 18909 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 literal 0 HcmV?d00001 diff --git a/docs_assets/og/start.png b/docs_assets/og/start.png new file mode 100644 index 0000000000000000000000000000000000000000..1524523099ebad101c178cf3c60cb3f3d85c66a2 GIT binary patch literal 19089 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 KO`D9plK%zOdiqNM literal 0 HcmV?d00001 diff --git a/docs_assets/overrides/404.html b/docs_assets/overrides/404.html new file mode 100644 index 00000000..59ad2c3d --- /dev/null +++ b/docs_assets/overrides/404.html @@ -0,0 +1,37 @@ +{% extends "main.html" %} + +{# + The page a stale link lands on. Pages have moved before (file cards + refiled between manufacturers), so it offers the search, the two pages a + visitor most often wants, and the list a moved emulator, system or + platform page belongs to. +#} +{% block content %} +

Page not found

+

This address has no page. It may have moved since the link was written.

+

+
+ + +{% endblock %} diff --git a/docs_assets/overrides/main.html b/docs_assets/overrides/main.html index 4348d78c..893d3b1e 100644 --- a/docs_assets/overrides/main.html +++ b/docs_assets/overrides/main.html @@ -9,25 +9,43 @@ taking on two image dependencies. The links get shared on Discord, Reddit and forums, where a bare URL with no preview is the difference between a card and a grey rectangle. + + One sharing card per section (docs_assets/og, made by + scripts/make_og_cards.py). The section is the page's level when the + generator gives one, otherwise it follows from the URL. #} {% block extrahead %} {% set page_title = page.meta.title if page and page.meta and page.meta.title else (page.title if page and page.title else config.site_name) %} {% set page_description = page.meta.description if page and page.meta and page.meta.description else config.site_description %} {% set page_url = page.canonical_url if page and page.canonical_url else config.site_url %} - {% set preview_image = config.site_url ~ 'assets/images/logo.png' if config.site_url else '' %} + {% set url = page.url if page and page.url else '' %} + {% set level = page.meta.level if page and page.meta and page.meta.level else '' %} + {% if not url %}{% set section = 'home' %} + {% elif level in ['start', 'setup', 'explore', 'reference', 'contribute'] %}{% set section = level %} + {% elif url.startswith('which-pack') or url.startswith('wiki/first-install') or url.startswith('wiki/faq') or url.startswith('wiki/getting-started') %}{% set section = 'start' %} + {% elif url.startswith('platforms') %}{% set section = 'setup' %} + {% elif url.startswith('systems') or url.startswith('emulators') or url.startswith('files') %}{% set section = 'explore' %} + {% elif url.startswith('contributing') or url.startswith('wiki/adding') or url.startswith('wiki/profiling') or url.startswith('wiki/testing') or url.startswith('wiki/release') %}{% set section = 'contribute' %} + {% else %}{% set section = 'reference' %}{% endif %} + {% set preview_image = config.site_url ~ 'assets/og/' ~ section ~ '.png' if config.site_url else '' %} - + {% if page_url %}{% endif %} - {% if preview_image %}{% endif %} + {% if preview_image %} + + + + + {% endif %} {# The sitemap, named from every page: a project site under /retrobios/ cannot serve the host-root robots.txt that would announce it. #} {% if config.site_url %}{% endif %} - + {% if preview_image %}{% endif %} diff --git a/docs_assets/system-icons/APF - Imagination Machine.png b/docs_assets/system-icons/APF - Imagination Machine.png new file mode 100644 index 0000000000000000000000000000000000000000..555187b620307933411969990a616b2afd6c623e GIT binary patch literal 3075 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 RGMfMZ002ovPDHLkV1jOjy9WRO literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Acorn - Archimedes.png b/docs_assets/system-icons/Acorn - Archimedes.png new file mode 100644 index 0000000000000000000000000000000000000000..2095ae0045053d6c6b9f827ae69fd559b8333045 GIT binary patch literal 2460 zcmV;N31jw&P)342Otluh&a9HZ~sL zzI}UQttB`J#nr1qG^dArzJOHow3clkVj{PY2F z+(ASTRh+e`>IrO(C2)q%9!`Jkocr(~a{_=QiA|PeX_~|<0wSu7hz6MUn2RWH6DzGz zP173fMNw&=fr6fbtu}%Q(j;EVvMf!KnAvQTiP(DJy00)Mi|-y4d6u((ZfS*FsPoy7>lYWih`vm3e$eS9|8NpA_7qyg}uPp zQQqs}y|>f78Ms&PkBTxF^gvD984Zhn`WkEuX%eHVj0SyN;Mz59*OXJSRg@sGqc{rl zJkO)U2=scrBuT=db=Ky2CPh)&-N_UeI(SLPHpU<#^z+`Ltsgl1=2%1+4*PHXj);nL z#wJNP==FLDK+x%Q=ytnF5{FC9S<2Fjs#;Y=ytKJ@mwL=XYY^RuI>2P&_? z()I@L7d%W+J^0h7WAQ3s=xh>)OWkfa>2x{-S=Kdan#M^Itt`x<69z0V4e_FF7#I17 z;Sd`G#@a<^)fb}kCfJ-Hk*|Gkk%~zYt)yuhXIa+-c`tWqnkI1^js=Gr#aK%>>wq+E z5Y3{eyoe8?^A$2s5h0F)ahj${-pgGOhM{%Nxne%co_@YTRn^v7z;-avke42UFIfiP z4w+Ni2_40Jo;l}S7H;d%lYX89@-x z)D;HBrpf8yEX&r8G(LU3C?IgSFg#|?;s~Mh0$Vr7POGAL0qeq3lhrpBWmzKLoOA$H z*2Y7cM%bI~arx#t<$wH&-T(X$2?Lx6(o!moPl!{eX*g2p*I-qS1`@FH}IzXOyJalY7e2n)H1ctg%k~kpCGQQZE(0B+Ocn{7&T??aO7yH83li+BRaMrTD zy~CZ4KgZfGK_F~=^n`0ymiT;gmtj9fM49eYoL$Sgdv6=ZG8-FPCv|2OXIFFX-g}0- zzQV@F7T2#V^Wf1gbyd*)<|RJ4w@Fz;+%e2c&uEZx@q*>!yZ5PTLlhdSM(G5GdC_q5 z#syZ+432$L30~|@P3(rb^mYKUW48d;JU zM#GdF*Op1*kZ*lsOd5w=zq-t5kZ}HNpNr=Q4D*DW*H&JsGst6Z-56sn4Er$1Eu9eZ zOo?Nq-!mkUlBGf~>u~GFm~(4=u3uT<{JHkp?^)9LWLpVdBw_PH+1mCv7f@7FCewoX zyyiE*d(6D3`TdrFEnz1wS%;w5)___#0hEdgOVZ74gy~`t3$L%%G97$|mAA!1ty?vpog|bqfKHCEfW#xJBaF?R2 z`FwGG^km9pT2j>>w5?8?M|9>z&6BM?rh64-1v`@l#n1^A5ycvq&pnT}=3Kqnme{gt zc=%{SReR?1nzCw`&l~22P*uli_Q^whIQi71X_s5ySf?l|?)~vIL_Ga`jX^)5ENd=Z z7~s9qO?!t`p&fXXOIf>i^ZF{E-ruCD8*W~|gerV;?>^22?9U56xp$wPNktf1e*61- zj0Q2wOUop2fcHWaIlT8ok!uGaPV%y&4ygAc{XCTm=Y|aWIcLWM>bj<`rc`yq#d9OP z2;TccgZ2671bSouGKM&g5I?6VYtF9rF+edN5GN7N8bp;e?XWaT*xPRqQQ|n{(uFhZ zP71OtVzytAbt905JWs`YImY&a#g_#!j`e%O@ng*XGR&S5Dh|9;mZ5x5K&t|e!u55{t&0taGle z{WQz6p0(Blv)RnwxpU`kS(YEkS2-X4AH-T~qbLezvzh1XF6Qg_^U|N)&rI*+oxGE; avHTC{O)6_AI>VO$0000TgHF@ literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Acorn - BBC Micro.png b/docs_assets/system-icons/Acorn - BBC Micro.png new file mode 100644 index 0000000000000000000000000000000000000000..884d75b4b87ca6f6ff39746ac9b268b14ff0e17d GIT binary patch literal 1662 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 KMNUMnLSTYJuAnmj literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Apple - Macintosh.png b/docs_assets/system-icons/Apple - Macintosh.png new file mode 100644 index 0000000000000000000000000000000000000000..5ebf86fd7bc142eb27ec94759753d3a92e56e8a7 GIT binary patch literal 2136 zcmV-e2&eanP)dD6A z0x6|l073|GZ|+^nutS)#Mio>?$HEwB8IY`>9=d-J=A`u5H}zBq(`JZ^jyBWHoWFTC3&$=4 z-8kd95+csw1eo(O11@6x!eP#ELLlxhp%7{bQJ}otNRuy?(0Ru)3Dy5|P^cwz762hI z=kCXWIxm1s8{gWHLD22&cTGaV=%~ZZD$+vRH)|2vxu@9MiCYf z>BWFBL4-JCCS+LzFVOi#WYp9ibI*%Am?Rn;CdZ_deH!1WWy-{X6CML|2cT!{~bn{S*HN0SH?F5i5jPOpU2E7ippKx%*>Yp zNGX}RskxVzFRdUY1M|gm{&_ra<_Li?8keQIX-diZ0B|!?W*)DtT|!wZm&6=xU;gU%SY636gUQ!2 zmG*zU6k05PL1D_q;%LKfr6{zS6U%si#E zd@GSOxtUpVFQ)sRKm6!JJpKGRsw$xQ29x=!>3L-7oErIh~urkOIV?_IWSFcpn)D{GB zJF#lRfY$(;{yZ+Pt}gAkU8JyKrb)=TJ5tg~>{ufqRXtThoMu1`wStZTv?btqSJ!1@ zI2>X$E+%dB7$a6!29wR5nU|_+tt1!6fGSc-Nv)O8`FEf0j^S{$v?zM<@)eGbUV)fk z=2#izxVC#0S zRNB9u?3bS$92`8kd-v|+Y2#@#4_`e0^wXdI z=IPVVtrvhcFPj;*wzl}@&6{iZ0>^^~503Wt_iffo?hEJd{~HerZ22F|%U0Tket!OQ zk|d`=5d0E`VI+ju>EewsNYgZyQvPv%e*UJasy{z|{FpA+v=M-%L{X%wsuD#}{5Bqs z2TCb?{`?un7<6q6=NyC(I5{~108A#6pM2l{bubwC0Mf_$$!E0Th)6JV!OS|(bA0&l z0a=zYGj|HWT8khE?EClc!OS2~K}5nBW1s5xB!Cqy6A?)O*7H2pT4NUgJkMiej19w( z-~9N7?!MgNIo`=l2450-Nv5Yr^%56y&NWJ_%4(xIc$0y@vc}HES_`f9Ms2x`1-@wj z`w}98)*6?Wmm7hQ+c_-3*^WUuYFt(+g(!+PQk-n(LJrOn{3t0|xL@wWS;Q$MV z540{hhdcMg09@EySa41nCar=zypmPa!&9PJYTf!KkisSViCUWnLXo55uJ z`84vGj~Ih{TWYs00O63&d`ReB10V$90kU)i9Sb;EI9Kb9m}(8SJu4Gn9Ux&4ga@sy zurUB@EtFDt_wF66t?NS4^O_=~wwbW;$rjrN5QsB{G(1%wo^#v+*|IPede zYppei2+WLV5CH(wQgKWYmM1-1|bAk@R~AqLSkbKlv1^Zt%LL=UZ1?K z&2DRe%2&`@<0v{puh#PtufPTLZ|G>Xj7j08}m2ChpGv@O-q$knu_u-sFS(Z>r zfrv1h%`i{q5JDi&a@^e906+s^HS#bsoOO?e&7E*yS>TE%F^Zxrf6IywW!@*1@=W_S9N3t|ZBzV9#9F(%Jka%%b; z`1I-1#xEUSd`y%QN~vzcXdK5V%W~&MuI2lIb87%g z&{tPiNt&j&qtWR1|DxuTrm48RyiA_jT0E=GSFc|2U@(x2za8vl;fs(>lgUJ1Utd3& afc^pPjR6}#EMBYt00005$?8 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Atari - 2600.png b/docs_assets/system-icons/Atari - 2600.png new file mode 100644 index 0000000000000000000000000000000000000000..7371a2ad75b32f6d5021f890014b43ad9404f226 GIT binary patch literal 1395 zcmV-(1&sQMP)=w{gPN$M%@Gjgdz~&00P=&kSx+gSKaxGbYxa^ zD1typ5ZIMvr83`~nS1Z)f*gt_sXSWPp$Z<5z|5V?Gxxmy=Rw%gmbSE|ACd$>M6TuG zRrUYC0@hkW2&n3{kw`=k5z4Z}-M@d|J$(4^7vu4GoO90CK>%ZnX*Qe9M~@!;)mdw$ z)oL|QPEOuCKR-Y4-X~Qx8>;zSRh8Y_+k1L+bo7z6R-CF*mSy?)@#Ei|ot+)GTCI(B zB@tmX8qw)=9v>ba{z+AFvj^h6@7=g@BevV^oO3oC>N?qbZ@l+CnL($kALg8GSrkrl z&N-#cbRo!PQJCCn*?P?_ZYZiqkszlH4c^%q7wOUh3QZF^ybWa(1P~)=*17m1vwH#N zaUx4;@w;Ro*7B(HX}v5)rtvua5FGsd>qyo$0wjg~7VI=z3`UAGP!t7?MgtIXPE;|n z(`b-YvBuP{SD%KQ^EYO7Rh?qEF{mnLhUfL~s;UCO2M@rcDDcikzwzGYBDB-fYFQ-v*M*IXcJYa)KF&O!;k((nFO_g=NElG z{^V0^Xwe-^IC|%pqX)_s{c*|Z^9wHeBYMMv?r`$*cQEGk{DO=Am?Vy25!t(Y zk9XhyfWf51HClXj@+F_0e2Mr5xCS48@+r?R`lt<*S%|vop6+EI&FqH)moqj92gg6d zdoZTY&3n82{O+3sKZXXR?pFZ(v~9_`-)a|TzA5PxMKN!5>g!kC zewJlPN@?D()Yn&$Tb6z~Yrf7NbUB#Uy?6PUTeneFsj6yabG`PetWZ_eisI_>!dknw z?KM~VVF+PmJ%liY%U47pgcUFF-s7C(s_DsE7ZRCPfo4{8z0T3gqNa^8EAL&tH&?lk zh~T}SGxOfh1$&iLYdhzRbM7T2u8TwWZ9!GL((CGzRTbylT#)b5L^89u_c4pT=&xHVhnW3uvQk)1Pg5C>FCKDVVAKN}!;Qs#Jo72-% zdv$g7dAVHv(w`3GhWM8qj7uBsv;*>pPnadvig zBO)+ya6X@Ze0qBNWUWm$pos|HdjOaKxB;*MFvd7*tz=my060u-)ARi6O`Gj~?xwZ8!X-g_J!9qj^GYhjFmF{U*DGlQ95-66$$e(VE-pIlP`ovW+wMffI3=Qu1x`**kmor>q*ID}k2I>PU}iYy z@bK`^bRqA3fPYcU)pK;JvQNK8Ei@X95JE^g z3uRe`5W)r^65Zb3!a3J^L3-~D6hc6r=O~H-s=Bej-Q67?A0J_iNy?4tZW95DqCim; z`&}qCfDl5%E4=sn%jtSImYN0XF&R6@XIJ7BSKWHhZtK|SiDQkCS}KiRv2TKR0O~b( zN|uNKBGQNnQ}2?-<8g99ybV&8<^C98W@Tm}B1yO!mGuUK?rSM??>z(HRL@_Tnb$34 zz5_6wPQL?K^yQGR0$^t3d470)e*U#*$E=6U-2a2_zPAIzpFRG&{01t`$Fh*nn=$|Z N002ovPDHLkV1gWBQda-~ literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Atari - 7800.png b/docs_assets/system-icons/Atari - 7800.png new file mode 100644 index 0000000000000000000000000000000000000000..14e5563337e87fd5c00155ddc6ede30842c78be3 GIT binary patch literal 1040 zcmV+r1n>KaP)rkjEInBnRL5dfBj6@-{1eL)9Jht5m|**XJ$S+IyyZ#IOy9}t7Y2l_IKTG_wC@r z;0J512f*HWc<(2AQv7G_FbV+$h)If~F!e9%hwXOTpPZZwY?35KL}WM|zP-G>d~J*Y z5y2G>qRXL>a2!HauW&gBCQcfS#xF^d7^|vEM5L;zb52xM05E~T#7jY-D2lQv-g{Qn z^cu6;vM0}T%CnrUwNO=FRtI*@ah~T@@Ub7~fo0AGw_#+gxU300D*}u7&tvUa3h=1gkg(G$a^EmYL=cgMx49y6uer*9rit6>Y&RZ{ zD5+l1jbHT8S|;Mxzn>{XU3jqJdI1t3bdxcY74NQZ4XM{JK~Xc#q!MJYsK7Ob`m@ zYe4RvMgfEbFkQ9jMh`(DP%Y+@XS#cQo$a|nfMtxR_#1Rr9Y6p@?$+`3I<5C}Ad}lZ zQ4mE4xIR}$CUaLv?;w!GdOHCV)=;;9;pIPvP`0xG6o3`*%MXB+84RjGWPqQ}fZr~G zz+5W}0D+-eAPK(3*IPeAbv(PuL?G|+#h-nU^D}l#0K6!^f8h{EenOxOeSe&t;`hSg zo%!a@6#xL7znE+Mn+&{}^MT^$`6e{Sd<_U^rvhsOY;A2pRVNxaKR?IC#RY=EKIqU$ z=Xo(L;HLViL{^~DXrSG0-!!2x468(jhZ16IF2zMkHO4{q6k@*!F!L5jg46X)>^IAYGRBLYi$*cthF%4AP9o$IS7KMv1evj zYpZ%82!iVQ8k2bMVXf8adVo|_nYk845nF3nL=Z(0rpQ%?t4{^KoToICvOWDSj$?Mt zfthRNnXXOK)H5?To6UEsIx@!iC3bG{-kWB#dC1J1rm45RUe6yNAHVN(I%aow_t%vO zomUqe?|Z$TuQn#z+uJ5dl9jk(8jVKM>-9XIgRHMv*Rqxsmwy3XG4(T0Wj1{P0000< KMNUMnLSTXbAnh0c literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Atari - Jaguar.png b/docs_assets/system-icons/Atari - Jaguar.png new file mode 100644 index 0000000000000000000000000000000000000000..a97bc861c62327562a2c223c485eecaa945d1312 GIT binary patch literal 2498 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 M07*qoM6N<$g7uoZegFUf literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Atari - Lynx.png b/docs_assets/system-icons/Atari - Lynx.png new file mode 100644 index 0000000000000000000000000000000000000000..e41d17a109e13d71e7402abf7d294856faa93fe8 GIT binary patch literal 1675 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 UDuSU&LI3~&07*qoM6N<$f_FyhZvX%Q literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Bit Corporation - Gamate.png b/docs_assets/system-icons/Bit Corporation - Gamate.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e8d9b8d72b1a5b1f0004a4ff1ab76a5fd54c24 GIT binary patch literal 2840 zcmV+z3+MESP)BvpA>`^EM;sZgoJkL+XqhooG2&O`DC zBs^|XSb1=EIFiV`>*oIv&+8_i%Lb|_n&p9*Gorim`kc0$gtJqDd=&IH^ zI`_<(>6z}Yd%gjl$uoH-&*V2L^wd5~n?J3p|91=^q8$hLxPcDaJ<7l*F_xZWHi-x# z^4RySwQ$aXnF#&#e0N%t8pc_kN_Rs!{KKy)4VR zh!_z1Jt~-)W16Nd=UgjEl8$q3&05b^ zYK*kq4<}BXNRJ&mHqmG_MryTMJ~A?rkBp4uS(atq``Y!duKz*1-9D{R8X~bFBBQFB zKmmaQ3Sf(mLlq!^K>z_nR55dh*)+*;bG$x&<+2$l@ zZm-#Fu3f!)_5K%Md{J&4D{XvGtJUc2*|Ud_969m=5lwZw-Mzh{w|lL-Hr4C(o-e9m zZ&g;)A%qEERcN-?Py~fx07L=+2}2m$`>udc33y--M*%WRXpD`(B?+8!tzNHJ9~~Y2 zuiX>7|7~Ps+f)FN?h*uf~ zqV}ILRIYT!Fm>pgXpD`Bh+1YA5#bo)#(wWl?U}mp(n~M>@WzcBH_o3w|9Mqa001+z z z7Y4P%g6AeZd?4(lhuwc;7z72JRoq>2SiEVlJJ*d!!h=67Sa&rr0ZEcnt1GK-&CShS zId$^X>L>sH$>P$|k}v?w%*-_E_4=NLI}7hxYXyJ}KA@_qO)4UNjNX6(mK3Q|WT_%c z6fRL%x4pWg|4x?n+gQ?Vk-aMh(vNvWFuIYUs@7U73wIXYt=H>&W@cs@>lW|dzkgS= z)jU|1AaVCJz^*OSXbS@c)a?Zk`VZCt@rTt*KLwb;QQ>Sb`OnAo5!izCfe^Wgsd z`*#5V=Xp-!GgX1rlzK{dcDpz&vQZI#KSP^51i>i0%3Y;m1SW@kV2p; z01--8L$2}wl0op^Hg|?0RTR|G>L!y@id?b(nOy6;8h9U6YBL6&1MScbld!5ADVd~D0#g1m;Zq?-&(<- zp2T;4Zy9HPe-ZEf`M06!o~|1)P!xpkpZgi!c;gm6`se`u_U}$2%VZmu+tg6e?pnP4 z-5WUb$_o5~h4dKGWB3J&Gq0@Rt=GRoyJKNkHzCv$=K$S#@MX!!vnI}-y@82|3V(F= z1{#eLA@D=1zz;BAp-Nzic=fdY+05XLI}p%&HzGX>&iR| z_DUfvuP{^{NC3x=4stI9Wng)gv0D^0SPCMA_l)nK`x#z;{eSS`zwE=`{Pl}?|H2{k ziUyohi1dp+V@)T75X!Pt+iW)D+S*z#&+^+V5QrLldTA18es>xEjs367vh%I= z&)$Hwz@Prf9Nxch2u0aImI;QtNmWIj<+slWhcc#X|X4ZsHcL=DcInVnmI*173|3( z7D|gRJ1J5Y7^7&lQoKJqjpgM8v$KcMD;h}C2ZJ98KSEwA<~q$;ruk z0D%Zh>hRuQd>e0m_bdGN07fqlVH8O}7bs9g!NvQ@Ac6=91IaMuZbqpen}m!|28F{V&OW~@Nf zVfLR+;2(c9Ok`$|$oey4jKS3IiS;r&#)uFFQ3N7_L1DOQH^*!+>KN8A1{DC3B!Mwz zussCQRI#>}B28tx^N%|hE+-Ugq*(CCa@j)p; zOqiIMSg(&%6)FnRz5!7LGT0WfF))M85EHN0RqOlO4YidjcFMdm*iBx$!=t#aLf zg@uKl_kLw`boAoN%F6egbCs$lG186{QkG?#XIcjptZrcGh6sZVY#a^#r;RJa5A83u zA-h5dA*t8v7rpl@3kwVV6(Azqym`~l&(GgEcJ$Z}E?>U0Mfos4evLX^!-?kgZrIy7}K=D(DiStDv1aU`s6|XIyN@; zuQM;t{8d?&UtPFx;is)uONnSRFSKvpKJ(5y?;Lyn`RDib%HF}%`>V%0oz6iY{J2C( zqr_SWAy?H}j4@Z$EXJ4tNS>5^9;`?;VCD*AOpl1V*4mz7(`Cb@vu<^CbaZZfV*JZI z&F602x^?@54?ehh`}Xa)9zR=|IcCP`)2By{9z8laIXT%F9UZMDN#cw###(EQF$n-C zB2GkHj4=rzWW%fXKKIdQ5+xTAGvGEO8}2#d3g=wUT3Z-ns^OKHJu`a%KE_yu5JHSG zR#oLYolbXYX{mYb+O?(6KKpEKNGxn(=62#8UE)w5t8(0000i5EPr;n6h%r26lS^CzCw%M2Ixf} zz-W!6MH9Go;k0O+#z<4tilaD6WKj}-mt5}7%;^QWv`CR69lMQy`T&br%gUgpMmseI+j^%PWPY5B7lH{$mw$*9{ckbNTeCw^Zw!$z>PJ@uiWbnot zZ+!FAsZ*zdAUJ1?`7RM%(v z^=C?{*N(CcXsxf#&(Htrop;`O@5+@c_m%Jaw6e1DOsm!UzLfGcW{!wR01yCdfBagt zC&9wZR!aF=tJQjcWo6}a-}krG;^Lyp<#L|2_8bu<53BymN5Kvf41$Ps-yF{6a=G6v zE-or1gh1b5og)Hx8Z!cbBYHHDG$sYKM-4oazH5w`>hGnLu+|>>oSL-xv<;?_lyWR6 zV+`8u_Sp4N4AxqBo(CbsM1iQ$4dOUPyol*IJ7p2(YlQfJ`Pc zIW6d834#FCY8AfkPd|ZV({{TJ*L9K0yA~Y11cnhfYusXYglUss&v?9L#^b;T=SZm?BE}G3IYPH%U8L;CxNT<_7V8=bD zl!8)ff1rZadS-N9NqoyIG#yn?m0wV6EOp@A!L zdF^%^VHi#YHY+)fgG!}>YuB#9T8nHpJGiX1xOVLtDwWDi&O;q0CD(OPDwPIvtyXKQ z_n6hyMo|P~4ASZJkYJQj=ytn^qG+g2d1wZN5UAB^xPSjXgb;(El1il>=_Ha^v$V8? zGiT1=gAYD{lyU&p7=yL7H7qSH%_J-}%{A8R^?~lYuKQRkt&0~gVtIKPckkXs7>3AX zGB|niBu<|`J#zq6hXoSP^FSnE*+NP6$kHEWfSIwnx{B4+Rak2W(Lai!ne(wjY@nw` z^YcCg0mcGxZ1K2D5TZ4BKbuL|NeFGYXCb3Hu9P~cGZoMb@Q9&lm?A0x_P2qT96Q@snjJ(&t51zdVOA_fY z#B;ZAgCBESDe+pP*{e8cRKT>oNe~-ce~3E5<=RztVj9V$+Q5Q9iOIv<81lv1$PqF%290Kza7sZ=OuiPkWK-`JmH5g_U5$iF~uMYzzVXKnKS?mKr=nK?>DA~GF-=TAf+7STb)h^ z0MO}lP^;C@Z}q@&oWZFuvrQs(I-UM~tyXJnZEa~8$1z&1R^#m1vvbV+DS(SiL{dPX zC=2`SF^QGql2^YW`RRFLZDIC-68#Q0?d#c$Ues4pE2T6+5TMiPkdzXR_hq1C?ns8aA8F8X<&aX2HzAP)hy%?YH0laC37rrX<2$x^$^{;lhO%jWOTS zTK`lC@f<)9)RVUDdmy4AkFZBX+W@wO5On};B8vODREC-7nR$tbP7qNpQJH?aY=sb3 zN{KKGA%qY_WPRU99LEU5PzWJJl0aH(KbBJdT1t8Q`t|GoxO(+!g@}g#51c=L-hcJg zSI-oS#izU7?pdw%_n7&40P}q*?h?_u<2e6RO5K%G?lE)F?RMKy6h&HVW39DBL{dtT zN~KcSY}NxXr?oy2MbTMi{TK+3&uX8KqK5oIihl;pEAasWz7dLL)sO;_S+5LqMjZ2u4+O%9QtA&Myly ziaMQ6*laf2l}e?)v9ZxuUtbS{AmCAq6MypU&-P~hS2e8{I_`U(=TR<~qii-Sgb<{) z<}eIxtJUIB0VVCl(S2xInmevJHB0AV8q?DRlz<-B{F;e@|J5JIQ5&4KHS>g?&=cy> Ze*kt&;VrCK3>E+Y002ovPDHLkV1g@FNFM+I literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Casio - PV-2000.png b/docs_assets/system-icons/Casio - PV-2000.png new file mode 100644 index 0000000000000000000000000000000000000000..eb77b9784ca3ca30497a5d72aaedddcdecc8985f GIT binary patch literal 2696 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 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Commodore - Amiga.png b/docs_assets/system-icons/Commodore - Amiga.png new file mode 100644 index 0000000000000000000000000000000000000000..c437d3b52a6f0f38261821d430bc7ba98470a143 GIT binary patch literal 1915 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 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Fairchild - Channel F.png b/docs_assets/system-icons/Fairchild - Channel F.png new file mode 100644 index 0000000000000000000000000000000000000000..cba04c4d469c9ec6a8634624108853cd5ffedd57 GIT binary patch literal 1458 zcmV;j1x@;iP)A-;l&WE5xgomN2Dx9@+{rYwPZMUoUKBMXBX*zc7*e_HSAp|*c z_M@iF@ExLx7zHj(_Z9(b?N}qQ(>r&JfUy>ze{pRrbHG@;V*#jmNe^6UvA{u#TyLJxP(}CuJ9!`uwj1k6| zkyH*DN{Y_89|-UOr4&^~r_;gA%na_dS_741oBl-v)oK-$EJM59hVBYL6*0>YnE{bK zYeK|~yWK9nSYF1_7hl9jOG_wIaQ*&h5h&_) zlrf^!YJr)ddmDbl7-6m5@Vy;?wHC|_5rrXwGNY)~kc|SM%qXf=B*wrRgSZD#i-uB6 z2m>|TIfs6~k37$}1t`lBWm&>G2LV8;C~Gxns|DOQsqMWvPXI!iB4imV#-J!mhy*YZ zL;-*{RFa)+B0`cRU}kvl(d~9|>eMN8yWMStf)E1c=H_tm;zbx{P>k?tijbzDJl`;X zHbj5`^s80Cn1Q$?5&e=80+1#Eq=XL%< zMJ|MZJ9qA2YHA81GRTa29a)}lok9wrsMTPNfvO+`#Z!j^8v7OhSs|cu5Wj5f!~d?` zK&6tR(U``yYpa{uD=S~&cI#^-Ndi^H{{8zgya^pC{hV`XHk*U0G>m3Zt0BF8dvgF1 zK>*;h3@H&*1Vtdca{4Zwe!j$Oe{!J37x252&*042zu~d@gZS-Bzrm|#|N1@qrIW|; z$3LILxxfDd^?H4MREY@b4pQM(at?{WXBooK-ZTPbmO-rrGr^Y;Ou)@=7@e;SI(-Ip zzQyW|+vxRjbUIz!xN&Ps`);p4%=3X0-uuB_*DlKPnzU(*0aPK@qO4T5PNBSBABebX zIc*7lI9EeJ&{zb6>BXrB7g`%fQ|=@1E7N3M;Mnt72DeE94c8h+%htP2!i)J%HGoNh=}GIjgOPEEZEuz5qeGGb?2 zQ8LNEN|Pf@9DlK6#}0z$m`o;0Yptxcf{0!+L0LYfZ?2<2T>wDDP|J>ymIRmmR1FiM@aiOZ;`(8IL4GO7rEG45` zfSJJ<6D`t21t202ky802Ng4$SVgaR8={`-nQLr;`ZiROVaI4V*v;ZwY3(x|z04+cZ zaF1OHA_CVk^=zHqwxrDS9IUlvjqED6&^OlLTf@vS7z_Xr;cz&V$`1wuVCMU^zo#?NTlHZw|2E?}3?LRby2JtN#%ZbUK~;0I=4+0cfgvqtGrC`rAe}D0Jp$$xqO;Vr$4pUU+SEd?RJ|lm&+&L!(PjLT5A}O n$0-2#h8f&!HZNJ0dF${SU*SmB2&%wR00000NkvXXu0mjfQ1CI; literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Fujitsu - FM-7.png b/docs_assets/system-icons/Fujitsu - FM-7.png new file mode 100644 index 0000000000000000000000000000000000000000..455a850dfae6bf77cfdcae25f98905f91989a04d GIT binary patch literal 2154 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 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/GCE - Vectrex.png b/docs_assets/system-icons/GCE - Vectrex.png new file mode 100644 index 0000000000000000000000000000000000000000..56b2b9daeb7392d071b0bc29c33231944d15c90a GIT binary patch literal 1206 zcmV;n1WEgeP)(R8r0`HgTngGRQE=y~pTJGOfU9=xH)ywR+enr!B(#Vd zMIJ=uv64yDWHK{1b8k19VN4T~n5eYOfm!6vojdn;&i~|O&V*ouWilBoEiDP96h6`@ zrMSMnmfdc5=y^Wu0;Lod7Z=6u?(X-F<8(d}z%e63(A(QvDuh4~1oW+= zKnMY23{py3sZ{990E7?}i$!>z2gh+D8BsdlV1&s@2thudM>dh*An#YnY}Pt>0)gP%f9}1JIXIv~fZRJkP`S_BOV*w&vpfYPE`5t%g)8 z6+wjeoC`p_MmUaxwY4?u?d?S#eC@ZZ)*6&jtgo-*@$nHSCnqpX6Vnt=K5c^adOfVJ zu7Xku+qS_upUL~ZUJvDR8LO+SI6gj}+8KP7gky}&oCA!pXKPOVQv?5TO8^pp1Rw!O z01|)%AOT1K5`Y9C0Z0Ho%3k$M96kpJL4aBNypG)=)|zlgXf7uVa6If3A(KdcBTJCKGk)CXL8g0HqWYLLisR zq1|pnYYoFNP_0%`tybsKS_BYn9sqK=9E1>1O0ic1^gXT&!)S8O+l4~GOsCV4WWuOS zBbT@lLZG#d38#ZMa>8$VxNUHwt3)qasuD&O~M z==FHBcU;)RbA*s*G6}B@6IuwNT-T+Wo0~r^FE9UPS=Ohp`85$hxR`C*y~D%9+RDnx zf@zxHD5W5!M7P^T93bw&bUGb-gf)ND5O(b19JYPH&w(sby(!6QE2>-8X|gzx+RnnNj#zINk> z);e-Te2h|>ZnawNqoX6c*=*`j0DN4?8DkWHj*kzMP<*q4HwxvF%jLirizEa9rfH7K z6U`WldeH2 zEDWubGU_M~CUHC;2HWn1LIIX#AqWE8-`~S^U09ZdQmGWJ73RZRRboX5QLm|%!(=w> zb9kS(03iK0l$0^{?3L3f2@Ptt*=)k|JV+_wx-JMIczSw@=5;!qu=ddY7?}$|U%#$l z7=KerHKmkHQhkR-$@4rALXb|UqcPw20U&xm#yQuVbE36&CyDe}fI^{=tyC(Fot>Q@ z2_XzKSiESBfe-TeJab()JJU}I060EA{&I0~@zwYJcm1z~VHm8@Xt<-I`MHq)$07*qoM6N<$f>!J=i~s-t literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/GamePark - GP32.png b/docs_assets/system-icons/GamePark - GP32.png new file mode 100644 index 0000000000000000000000000000000000000000..218bf89c83e2ecfb3d9b737ac54806e97ba51eaf GIT binary patch literal 2582 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 KMNUMnLSTX_#0hBt literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/NEC - PC-88.png b/docs_assets/system-icons/NEC - PC-88.png new file mode 100644 index 0000000000000000000000000000000000000000..3d25da4d5934d74e351146c182f89a5348c27073 GIT binary patch literal 2142 zcmV-k2%-0hP)Z`nj$4iVk||Z97ob2LFPU{0G~2|gUm6Rf%DN4Ifw|`BNBzYgKZ|*NZ#j-LwX(AEx5;=I1&wK%7us;-&_6T(bW+h;^WedQfBC*| z0Z4#!I_-L%7bHod27|%CFbp}NF^xup^Avm47$BF+0Z^~k-+Hdrnrt?UWm)5lqqQDL zDW&ImK{}mw0iTq?XIU09l}Z`D@4LS5=TE0otu>};lF#Qaq`+vsd_I361x(ZA zbUYe{f$#fy-}l{ADrLy2sVU)kp6mPm{A58JDd0E`tE;OQ!tls)rBdm_^CzJ-`t^N( z-t#>- zOnT*Y&#wyjKdAsh2qufIJXIj@Jn!7rVsg@`A2~gK-SZ?o-#(r|sk43BSOLqjI6OS$ z`|rO;N_i%bEz5di51c3Xq?aexeiOm9Hi#mDX-3?olG)M+GwnILjr!ZHb9k$74vqPTeJySZJCZEsK z?RN1z565vxr_)%L#cY0tO2y-JyD!c=^{lO}vA4TN*beFU`#gH|h*T=Y-tHbj5O7dA z!1Fxn^*T`$kt7L!)c$yZr?Owc^E{r`pAtn8DpAyGH5|ubdwUyzFbuhR^(vk>6wI=$ zaSE4Gj^8PzFieRs&!%^Io&x1^nd#|iEX!i9Fh{rBWnpoFR;xu}zJN*;nIMB!nlKD0 z%opf%I&Z{NEEZ`sTR4t`>$$M9`?#)4W3PeddGz~z!gh#K>Wz5r-Mfb+ zEgFpmuIqC9_HEkjHd0EehgIS@rq}J!@Av6+Iy~HYNT<_be{Y{gqj9Flit|!f9LMBx zIUL)e_(74Sr6s1Pr@40R8m{ZIwy}oq`&_+xm6@3tii>Z@^YPlp*tX5w+}t>uX{}jW zUZPkmGBYznd9_SBo#vx!ACXR{DX*5v<#Vt1z^JGlA0H!x;Nak3h(Qd(c1YBZxW9Fu zZnw+tzyD6Z->21T4TDwlQl4h3NirBFfUq_6>Q6uY#FHmauq=xtNvP~s==FN^x;?tx zF70-k?f+~Oh9Nr-cBmiMU+)2>6xXj`r%))cxVXsr+B%-=vA(em8rIj>aUGZC50{yp zoh1kY%H=ZBl&o*8V_>kpah7Lwbrs+D`Rp&BA*JNXl`F(?Oc;ikrb&_{EEX4;pPwfP z0+v5q#`k?n{1j0X;rSj>6j6OtB@9FQQ6IxF z==b|*t?72V93CFh?RKeF&+-fg1Ah7C7Y+^%I66MUbzGi2d4g@*Zk6NupD{P(dz!?Zxmc`cA7Dw-!YhBjW_%#BKUv)LT?LL;S`%_h6MyEGaNq9{UI^2L&mfkvPC9WL-ErD z6GhQDS&Z84D2k|7tF)ReTCEn%R&$t@1~I!2cgbWj)c&Zw970hP>4k*__4U_ZtI2M3 zR9TZGA(zY1YPBxh&)>Llz5Vsmrz zw`#STjD1!t7ERZ6#k+c~I0>^}ucxZj>U(jI`}Q9=-UmAKf#Z@c>5?w#k}gXB1^NYQ UeM$(2W&i*H07*qoM6N<$f}K<>;{X5v literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/NEC - PC-98.png b/docs_assets/system-icons/NEC - PC-98.png new file mode 100644 index 0000000000000000000000000000000000000000..baf2062f9e6c5628c22ccd1da7b056593a40dd2d GIT binary patch literal 1475 zcmV;!1w8tRP)RiOyWbJ0qkyJv87|!GqdKhX3qh-77=wmgS2vaddWul19w00 zfSEBrKR-M=I$D19*;y?SvBky3oqE0AQz>@`bqidr4pSz)aqy z@mcKM9n73OdGhDuJ9mCuZ0)riL_`EM8cjE|eFWy_=7w(ExbYb?Q>F|P5zS0r{AOnQ z{CCyi5mnLPa4<0(o*r;Ydm>U5DXp%*`04MJ?H`hKN$x&o=J)R1`*mq)sTIe@#^~0q zTVH(q(UofxmqtE!2iz^FV@Hzuw=rO{GE{=b0EdAoWQU#J9st_x7`ssY`kkq%rxZ9a zhz+nnz_X3|FC!x()z#J2pX21@M5$aZmp=Vu>h|mhQ(v{)0sttLA|5UMj?JxY1Hfix z4u_KgnYB)9PXwqKN+lk>Hvi%GF@*G)JIdvVKc3X?|Mhh3(d6VrDZ0B;hE21XNTOl{ z;zSIsR+~d0CL%C1pOp)NfDjnXJ;iQ)Pbx#@Q~|iDI%h#l?(VTWvO}OK3S%ZFN(0Hv z(P%WGdC+uatkc>9fU2fKo5m10J>T3yAnukq7NsyVgPOt2P;WH*mit8{-4~?tSoFtg z22<->VariTL=XKQ7b2hrb?a*db^u8tpyMh)1gI(8tnaiUNs{9skcARV4QAd~;R!$@ z0zVc4o*|HBfj+Z1NFpicDewd?(p^;Hj=s52PSivdIqx}E5UW}j#p)l87D*K-vLhGy zp1i^L&T6S@W=uLB0-`z)jf|N=RgV_~4nRdQ2z{Bkr_~s}i!m3KkU>Gf&5(!yM@1l~ z9jaRBcW2&O9#W0DD21sSaz@&BIw5kjG}@`cS>Ox;0+jI~KPm!5Y2X}|d(WH?i4@i( zE@Yx=10cG06*KQ?Q0|?3^-%tCc61`6H6j_Epx1EVA{ucR|2Shl2i0Oa(Gvj~1SZ&a?lYV_=L_tNUF#5t@4~sJRVS%6Pf6%eg!;w`bCp1`(KGTtuUZP9kq)`I{Nr z+YM}Py#O=kuM9v$aOLteCMGU+W&<&nu(7d;we<}?H*yI{TN=3_ajjNM>h*f#pIZIS z`ex%U00ZdM>jP1G|C%HQqI~Mk)M_V`QllL5^ dU@oh><6qUtCrtf3Ea3nE002ovPDHLkV1nLgrL#pM>h(J9@9(=1f)deO8C3-{(`Ymj z0Epw5MWj&P7(<;-C+l{*x{5vYDj_1MDh>_~`1JJj#5w0gM3%fms;aZ~MTMC;%d+hJ z{QS>$yDj-QmleATK%>!!cXxM_qobqWk|g;lgb-*>v#P2ZW6agn)n@=WK0f}mO!nd7 z;oHs4&6h@_5x3jz;kyFlMMN}&5DpIye@&9)=MX|6^vTJ|F95K&w^uDP#u$S*j&HB8 zum2E{m0ZZKItGY{y!UCR(-8myfX6-$RmF5YilQn2+~3~|5kW*iM3}DUIsl}!Xpp=o zz!-v=nN<};v=AU~bz=JqrYQhmXJ=<&V5X|D)}q_(ZU#VA(eL-c%*e6~%)Aib>FEgo z5JFf8AR=(iq2KSnD*AknU=GeXIOjk_3jqMYdk+9`&J{(tu+~oWZN!DPx3^KPR+sib z9&T5w)ula<_tr)LL}c%#Z6r zM1Z&N@RLVStPqm z&xZhHSqAU@vuwlcAobp(QmIVpv&T`n!TCu|mSvkutE6cPX2xhV0yDp8JtBhl9%pA~ z0D#-uTUcvfK&mQ41aTZAP1DV#RqFLR>h(GXg8{NEdy)4cA{b*}?Z4`yD1tF&u8eaI zl}ZK1n9ZeCazmmh!q(OnLI@K#2_Zm4z|0s72G8O0c-8Es|Mct!m9?oUhkVR#xOIz zJ3!trtyXK)>-8QkFE2l@a@phJ;^Oz$UiN6UTBB74^~&?s_jcXpABlJ_i8+yBdjJ3c M07*qoM6N<$f>A5H+yDRo literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Nintendo - Game Boy Advance.png b/docs_assets/system-icons/Nintendo - Game Boy Advance.png new file mode 100644 index 0000000000000000000000000000000000000000..a475840c75b272c1206c6f8319d4635b08fb335d GIT binary patch literal 2581 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 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Nintendo - Game Boy Color.png b/docs_assets/system-icons/Nintendo - Game Boy Color.png new file mode 100644 index 0000000000000000000000000000000000000000..aa33b387ff92538faa76db2d19aa924da2c05aa2 GIT binary patch literal 2045 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 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Nintendo - GameCube.png b/docs_assets/system-icons/Nintendo - GameCube.png new file mode 100644 index 0000000000000000000000000000000000000000..0ff194ea0f229f3163d96f0b21ffa02901a1a0ae GIT binary patch literal 2957 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 D!oa_G literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Nintendo - Nintendo 64.png b/docs_assets/system-icons/Nintendo - Nintendo 64.png new file mode 100644 index 0000000000000000000000000000000000000000..472e841d81ce608fc3764fa4405df7f058fc20d1 GIT binary patch literal 2170 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 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Nintendo - Nintendo 64DD.png b/docs_assets/system-icons/Nintendo - Nintendo 64DD.png new file mode 100644 index 0000000000000000000000000000000000000000..15e472ceeeefd0d5afb91b40960125bea843f385 GIT binary patch literal 1991 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 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Nintendo - Pokemon Mini.png b/docs_assets/system-icons/Nintendo - Pokemon Mini.png new file mode 100644 index 0000000000000000000000000000000000000000..e3fc20ed8cc52b72f1f0d49faac5e5100fe30197 GIT binary patch literal 3667 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 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Nintendo - Switch.png b/docs_assets/system-icons/Nintendo - Switch.png new file mode 100644 index 0000000000000000000000000000000000000000..b893522dbaabcdd77d5a6e0f8c0967ebdd0c07eb GIT binary patch literal 916 zcmV;F18e+=P)qYh$o=iH%N{Tm*?z5Dh}2=Kc$(&mWLJN}noqD&qejWqKs297l(a z0xONJ1B1n_m-X&?XI_f)Iv}CwE{TFKnol#UH>1(_{g|1zfW>05SS%Kc#qv~8{=v+j zlyGCr|11N$ySrYsTJ_R2)kL(EVnqbSV$r#|xtVsm-6;SlB7%ruZ*Q-;y}kYAWHQN^ z*;&%E(WO#Jot>Ti*6nuR5D`>9IhjnN;c!?zIXU^RP$-BoW~tJ^%rcwJXn%kI+sR}S z<@SXG^d47h{hXO0B1>03T5AxIOZRGA&BbGG6e2PJ3=u8cwUld;d9eRDwRB~^(>$Gx6=MMg+6K*5oB35E0s!~>$-^J7^+w- zqTOz9wOXy_XfzsWtp`_ESDVai0PsJJ+J^)qca(@8eV~ZQXsy}z{eg&#TCG;I-EQOP z=;&NE8jZr{=H}?76;4Zw&Z-T!RueAm})sO;Z3smSylf4?z%MeSIC{ z@fej#1z{MX*=!<75{yP8G@H!_PUjg?NNZ`l5{D zIDW9F<2YdEThH?n-}hfLGiO;QYB(Iu27|%dot>SZuCK3uK0ZGF{_gIs{McLYv4{Kq zdLmk6FHO@2V;F{uHM#Avpoqxi;Nak!TCH~5@Auyhhr^jl(-fUf=e*r+V{L8i3ub;% ztJM}!%rlXXPxuleNs<>t^t|8i|Jvzv&eJq~-wVZYj35Z2jg1Yhl)7SOx!>sJ5qZic zkC{a&MULa>APAy3j1FHH>@TIoVzF2(7K_F5-}48y3)LU2ydo|D0000pfGmkfKW)Mn_X0u6+MuSyVVMPNGaXcPNnx?MwoC1NMsu0KV zyEu-IR8lp?nmQtyyAGES4A0Ncd6s1#@9*zpW(HM-*|$RX0c$N- zYu|P{onEKY*-q0mE1Jh;g){Tm7~_~(RF$g+000QX&^Q@Bkjb19$)r z-~l|q^m&PE4G;u@omNBF4}gf^@$oStqDHsd{V;p*uLXdrk}<{&hr>@vlAK0Sv>k>a zsOsGJ@cLxk5KBtxR3pZTliX;zA(1)D!2S5m`3T$@(1HL!B0|O(DvH7?rKsrufXQUSS65eY{vB$sTL!S! z((&=}^Ios_EQAmMphbLA zFJp|UDTIiK(MFHQ;}6zatF_i;S$+Xfn+dZjrBzi``%m^?b-Ufy)9I9&N&*1VT2paQ z44`0{nTd$jL6|k_^7iKY4Kp(XXrvj0gaEK}js}Cl34T?!lx6vK)xw#&n_Fjhb(U&C5UfdYjp7!is6H~o{8 zQk7Cl=jZ3&y!UAlqWSr_ej}5$mXuahRh3FHadA+*6%lE-+iKP;4~7nHQOpp+LMbH` zVz>o>Rhi!^!2DDqB2uXDxvd2JP5l1=DC{;MR`G6hVV5%iB9a{iXrl>)-7TTnKXINy z8IS=PkO3Kx0U3}18IS=PkO3Kx0U3}18L&-Jzr{4SwbbMm)1qgx@Z$lT?rt)jPH7W6 z_A@|=iDDHW4=~2CYdIzmH@sOt4`AmU8DscS01*-A++M5IQUKHj0m?Z?&bd9QsasR? z^3HodB%%;wOdI=5EhNSm?Y$p4=iDm90{}A<0P^0)i;Ig-DW!5a9KOe@ z^76CyJ_4Zo69~V>($gxNK5nycfH2c|JPt9&rRODn0ImHw*9LZ`uK)l507*qoM6N<$ Ef{76@&;S4c literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Nokia - N-Gage.png b/docs_assets/system-icons/Nokia - N-Gage.png new file mode 100644 index 0000000000000000000000000000000000000000..7786f38bc30a059f71c83cf65bac1cf2266038f4 GIT binary patch literal 3124 zcmV-449oM0P)>L0s1?mwqvhYlFyWU)K8!JB0i2DGDnKq5Q@v=9lT;dQ0m2eg`f zV;|7GG5Zu=R~r@-Rsw0opkyZy$P(-+t|i7w(7T9I zcZ%(fv?WPGAP}H|K!E!Fe&+M}n8)K`s;WwgqA#KSpPOw&|3=S-GmjZ*4y9LEI!$8l)AUYG7*3-@NQKOx}v`yEM=#7)77 z5TeaFHzY~2RaLbaW2Wo6X1m>Pw_2^XVHmC1+1c#r)2G)7A)A&Wo#0*9#S1UI5Ib<- zKqkAK9W0iLd)w`H%(m@FyWI{k#(ber$SZ_U9LG@{$AO|KV2q(uDq((p{(V34{=E&XG!`@YY*zp{J(@mSv$(DB$GDlVa}T z93)A?+S(d?J|7fCx$j{kgut>atgWpf8jV6Y0+~z(&pr1XO(YVEEXzuvP|)9g`)y>i z*-ddNrP#Z7?>~=^j~kaRT{^S0v}99C!8!|$jg2L2+wNUjTKc;{Fd$@E7D5OZhCvI3 z0^WW1UF_Spj}8wHqpzjjg4W?o;|QE>z)}!Q4}mJEMRhS z63u24U0q#x<&{^!7{lD$94=nGh$~mF2#?2ufq?-G4GoEX`}X1Ek3XgtE?oHgR4Vny z@$vEa($dnh>$)2R0)YUD$KyM4x!kzxx{NW#2_ejJ91IN&p}(&mtHo9P{cuh-%C`|;j;@1a(!p}V`gV`Z97 zr;*R+;W!SRn3#YhN&Lcv3*Kxtn@J=R-+R5@tYH`~1As&#p@c%A;Qajjup~)fj8Vfd z@T?M10IQEaU9ivshVKfu?B)27_2#U41f@O8sXn7GsNx zi#7v*NF<_CO8tgm?2=^}wr!)Qrw7kJ|2#P7a9tOMVIY}I;up{S0>?i(j#xB?w%LYZ z7TkTrP*j#YISxgmSrz#l=OOIdcX8sO!3DwOW0O zqWE|0*r9F`2nK^5(=-FNZST-^9h`F-iA3Ny4w}s-d_EsI=crUF2#3QUguu3KSf&Nr zwy`y>JqS8GV45Zc)ebjritCVcVp+yo#^T5K{A=dlTSWLj~_pd zW5$<2`tN8A_?>4?mDf0O|D5a1j3AtPj)oK-%Wnpe^jysOS48sWPx~>sI zz;s-FNqf1SY6^(FN6^`X&dU}k0pwq+yW4{VeIa34zjtyYp1 z84Fhykjv%p*kg|&91f#cEW)KPn4 zas-Sq7>0qlxjAGq8Bj`*&1O+9m$85UemIVU<>h6puC69~dU~{AFi4rM>yoOfs%2R_ zIOo{izneZj_&DnIIv#oC5$x>U3Du)wad8ntLqp)4qtR&KlTSWDwOWP5B*1+5658YO zpja$oW@ZMdRBH2p6SCokPRa6PK}unoW<*t0#pm-;W}2qpoO9Q88@;`~;y3^F8`0C# zLnkLE5s5^QOeQyTbtDpj-|xrOt5?A}hb+rb6a~#j^JiJ9vum;}L(?>@+*rY}W5{7NA%wu<;v#I@7P(vwUaz;#Ip>yTxvWqq@LH`_4~N53)oS&i zBuS!Ht3e2XVzG!sA_0%b1CPgp+1XiKy?PZ>Q&SK^Y}~#c4HdU?%O!O$+jRcpx-NYB zMta`ew;R8H^VgeYMyF0%Uth=a@-nK`Di#(Nu&}TILI@om9{#pgt2K(nBA0C2Mm!!T zBO@d3`Sa&TEz62L{q)nEQcCmrJcJN9dGaJqojQf->1kxMS;(>s#uzx~0Dwxlf^<5K zL?QtIV2s`I*GbEjN(I-hT|+z`hu7;xyWK{$T17k_hh{(gY^*@e`jQs0`3m4`uUAojH01yg=$eVAzIYudc?29kH_-!VWiT3pLi0SER ztgo-rN~HoyDf;^QAj|SCZJy0-Twl75P%wm8JOpD!+#77@}gj&4@$8nI) zz)LT^1h3bNQmKURzyBVlX`)mriAtpc&N(d> zi-^bLACHWT{9C)-&K)~;?A-P1*KI-wq|QQ>O2xT$?b=FjZ?6~{8oC&d$0rTL&>M|L z-;pCn$Qy6G!2uu^i;+wwgO!yPeEaRUV2nYy0$p8Q=n8egr~BabdZB3=G)>!7H5d#c z90?;Hk0Y`p0!k?~j|SIuF*-Vm0|ySkFboV14vJS_ebu3qN}ql98S!{Lr^d#{e%s&Q z|7kv-U;N;M4`yGZ~^zn#+7VozbU0q6%~>sfpZR3RmJPCzb-133ibQ_ z^vf^5#Psy^H|ccx-(#`Z+>IMI3R6>4*Up_g*XWckx3rYElK=pZ$AhPyda7%9c(^|r zjm9ory7U+2a`{C`l14iRRns)l>9h$5sz&LI@-(L6RgenF&T2T)3i> z*jud@?er9uWt|O&!~ZcbFmSO@C={lrr>}kU%{S|oW&I?^yG|uKZRXA9n@mhhga-!) zQ_*NNn$PFcH*Vbc%X+;&;kxclMNyzA3S?P^BuSeMjqAE%D*-|X?W9r1aW<-1%j$G+ z*8_pTnPf8g-?3Qi$`3#MuzK<0#p_>x{qrD@>464YcOo)8JRBGp7)V5;(TJ+5 zkxHeKDwoTTRIAlJrfH^x5E0jPLxd2ebDM4%p#VS|1T`kHlB%jpfk5C&I2^vx-QAsS zwOXY@p-`NkpI6AuWvf&wIUS{c zZs7mxIp&{o1bMGPz(Wsrf9_EB_5f~I@NVz_PnF)rHny>iZEWMu9sdJ(!bfKkcNvNR O0000zvDtwL4^gu|(1ul-nOpB-S0HP%>TjTe9bKq+;I+2aBzNp{>yMQ`~iS88_lm98yh${IM^p5d1C^UWm)Iu=B9ZOU;GMy!XW&2 zcX#(2Gs6@f9*ssnS!2IgYtifVT7$u$KQH$d72PTYKq&=gj=~@evn<1CH1Yv_BO;hF zOCcg>t!3Z$^E6AtZm$~>7N?IuN{db_y}BqsP_0(s`+f?*IOm*@o$%%ovSEGs*RO zz0%r=qUces7dCjFhad=6n?m!vskNR--1EFg^&=wCy8QeQk(m)StB|;|;>m?Fk*?S4Ti?HbZ;D8Th>ByIpX)_q%*=!5foC0oKycd4 zB~i2zn@5SZJ1e-BuU~pKCDzKq33z2F~+NJ)n9K^0)fso`kQ^^HpkZG z7Mxv7f{4;A%fdL04}&21jhUq=ViFOZW~l<;8DoYb^6at7G80)M0uLCh7)*SpW-@og z8Kr3&rdbLR(M8RgB3FYT_TitH= z!C>pYM^Z{548!W)-rgT2qs718(P$A-6#YIiTC6IiKK^j`h>GbF{KY09ju7ZuqJD#oy+25F1ds8u)(;)NesUI+E?{VoZaSrE}nnM~%7LqkKBMMNMXa+1kDmeL9= zivb7_L53l$Fa&lvL>GRDBRZ7?%dR#qYrFveI!B#beA%uGbo(lmeo zV5eHe@uejQB7hmIM~+}Mn}yVRTN2ESzP>)(xpN0suU_2|5D_5^L-hCei_0sag%Z127>3eBVd4T16}t+ZI%t zfRqwiYY3}M?gPMkQg>&aScWHK2j zrQo`5)EHm@!nW;IA__duW2;y!hLuXi&Gz?yUe0E*GCYiAnImPcw#97Q{=8Hwxy52Jv^>v4xm>Oe4h}9-qk*}z zXT?|LGFS)@GqjYT7O0)v$oG9D5{aG&Xsw}?+VPv)xlW6~V!2$ddY;z|;$pE_otm0j zi4j%2qes*A;b9N}Lj)NFu$X}zG-ZqdGb0Sco&a@eGP3V8b0rpwtrUyJY9|ZT>-9hg z5hjw!h9pWGW0+cjf_S`H%yt0Q&L&ZOIv$Tl%|hI=Ktl)-*6a0PLo@>bYfYxB0vjTj zrpk8JXq!mXoE}xQ*3^yJ+8kU&w5MS~N*Nh^)N_OoTh6h%Ke)cWj#MgzR4Uc8cG`qX zrP8i#M0fR$$K%LkGLg=4T^FwF!f~9f1OULcZ3rO{hGC?xvb(?Og@7@pQ;nmzkq}}_ z;9K25lF1~55D0=GvI`{=iOBD?Q)v`8O(v5Ylw@tr&#mrsi^g{A-}e%b+r>?Lws;f{ zt@WcV&^A%qCAwdhQi9pQR|>`$2q8LE)G$A+(8hqep6z9iF$OW)hHY60nLF1e+bMAa z0mpG5rQAZm7=sV4e}uyPXE>ZrcLJ&2s3RVWH+>m^B_)(n=lvG+v>R}MwqGzxzSM^8z0B~{5&q4JC9O%4Mc>g$&-L-X0p-IT;x4# zt0kCZ5+`2yF?2e;YvtcI26natqv3h*JP+|i0;N(3f||kSx-}TXFwF40MzlSv4*a|#Dt>Jqf*ccdQD5aoTcjf`zY70EikG3ZWpp`!nq2oD{}#V;~~L)2A^x`IzhXeuL9LJdNq8Nxb{3Ut+aXLOdRa z;eB)=W=1-l#?as(s?{p$^*TmIM&Psrml*I|g!=bnR%#jv)vwtp@pgn;M! zICktfW`8n^^-2Y|3I)9N#+#_sYWU>Vt;b*2>$rLA6TJQATR8QDQ&_K7drqSS05dZ) zhc8~dc$S%eEu|bFA~wc|ZUTk5dH71fwrmigbHCGl*Rvn%_Ox~~Ke1uPZe!9~7ljZ% zy>{)|2RClqShu=cVx`pK*7dsB9LV2&aT8=15T5nwT7yy{(5|T{B6Bn|41nv2qE+k6*tCc ztu;G2IeCA5ef>^r4IFQ-*Xy5NUS59AvTP%vr=So*oY(eLC@ECz?|t6`02Bc54gmf! zfOB4DS*96d8UUzIm@&p_#P^8l1lbw@DCfKy^&anNO^h-0%`>9`P1Ar70+dofDaB`j za}IsqgAigb8b%uIx(5uDywGi~%9U==l^xsZZ(Y z2F4i3vJ8r%@OlQ(sOx&;zSbJ*y57hm*M3D&0Ovf3`J4veLtWQF(==P2ve6Ji1ko6V zVXJ2ec^#A06{dAvBYke|NnM*$N;kabLW6VeMZ<^Su3op%^wk;~+63cvS2U*25kj`E zg}iQz8ND7WlF=Nn1@41}t)MXmD5X)aPaPIA!Wlv#7D++Fj(L18#4u=hh{clXz_bUN z3bN4!#(Ichu!dk|c7?aMm5@@xFbreQlhW5nDT77F*Gj}XfRHn3NC0CDilT^in<;4c z7$&s$Y&MHV0#AuMDJ3YSpzFG1G_V;%Ic?j5);cNHrIb;{lbg9I*QcPNwH{k8eYUBB_20XbWV5JRNohO2(Kysxz$YlO?|Hq|Pn z;?3NYw|yL)iUum~YUGSDkmtGA>!Dhc%tEn_(1(Wo>ADtT7#E}MRf(s4Q3@Kd837q4 z=Jn9jw)0Fp<#FHai%i8B8|PC_fN!D#?vY~uvNHT$|wBJApEdpOIo z;23J3Q23fT##r0{{ITsx7k{Uq5o^X$+6qJ?&vS39Ph)*ZEUx$I;deQqa7}H=mDn|H zp||mqF*eqXR3ngKaGsdT49&_rC$Wu&QVJMjV_0DhV6T)~b@8xl7={sH9E338Q>%C~ z3*jbHmOx}uyk#F(+H&mV-SwPxr}qFM!MkkwJx{i|EmUg_TI+*-;fKs+>&M9(cG!39 za?1Q)7|{3qc#2I3A$+x3sj8~#vMfKozP|ngML=cj`L-KA@$w*0b5{hxvT|3h?$<11Tk3 zTwEN@%Wgsl%;)pIZCg0{MeH&1m=O41{Lupd;44NOdMbNeGid+-002ovPDHLkV1kQu BcH;m5 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/RCA - Studio II.png b/docs_assets/system-icons/RCA - Studio II.png new file mode 100644 index 0000000000000000000000000000000000000000..47c0914a3fefea12c37a68bb740e61fa7f97d769 GIT binary patch literal 2216 zcmV;Z2v_%sP)A}FDRwo(ozj9H%IU=&@hBjNrm-OF@ zC9E|l6k-ex4&JjF2L}hKP>5lzxo7XKQGVdS0b8rpq9}?uj$_l$Q52adifrH0T5C7e7mX_ap@4YL|rFxgh^=ybJis{6O6Nk#>@<5U#srNoO=X}n+aY)m24Lj$g-EO;U z*RJ_BAyh7x>AB~gJ5;aNCrYK#05e--$TCyJ%&}pLm?>tan28E(xX6UqMm#`D>D7O< z-VGsy?O4zlW9s{dpHkA;J6RS*DnYuUnuusBqG=FyB9e-z3qiez_)e#@eD&(p#%r&= zc4cX4Ni7j@`t<4jlarGVRV#Sr8{>PvO~iwM4ltv@hGS+fGLa=BFcCnR3$0-g6BO>r zJ-cgn2xI|;Zklieh5F`vd+^wikw;V&K1deV3P>K~qUuGYD?w5bBmga|%AM=8%}bTa z&9{?lJR!ViAA`>=QKUcB(a3z*nHfipipgW=&}y!pl(eE>*Ma351{tqst$?;8C(qIf9^aQjRszM-Ky}M_pekF_ zCEM`;5u9^4dh`fNr6NW~MsVuXDU6Ja;N(*$v48)5{O$dlxd#YPLEO9o=~;H&MBccx zZe7bRm(je{gfXTsDHTir6J<{bNc|dSNMDf2 znk3(jt}S^W!%{*JfpZSbjDgYsm>JGFg#0Agii}2p#^Upp5GlL*l z8rXx5F;LA)q*4*WHAub#R)D1q(k>JXA|Ql-Dg?}oPAAz^*WW+?6ubep@Me(N?IuW) z1g-fNE?&Hd)_e;|lAzm7&9AIYDYD4he;rQ`M{Q5V)LKHHhmOE2RmP`{rfw z1|r&)t}SgqL{KaiFhAeItFQhRoY!AwUg@Gl6!Y^f6pID)jt{GABPa-@3f{FV+gFaF zl&7xdX1^z0n{9vqNDx%3W&G^L%Aw#J~< zzKuV;{yG5QC(k~M;hI743gmNpa;nub&OHANZq79~)b-@!51?8tLxOxMnCxoe0!iwS zdWVuJ;Mmba_|`X%t_sw(mE1XxG)-Z0Yh|I7+1GiGQn`vBKm9ZSpj0ly`2~I48zR5 zrk^NtGZ8^lQ7RStETa%*7&uhMDgXc<91Ivtg_V^lB1mqWBuUWebdc>Y^I{MY70KqP zLPW5*v@8-th}q_wBfGG0+ox%ob`$?ewGuz-eL(wP3oEARby2;AQ;xJm5Fks!VzB@q ztD3s9#3i`CD&xT`-}2YoZr{!kR-p=pYTh^js>&TaxdF{=2J) zX6djdG!^hrNk!qIeRic}RTpiV$e z6&^qeg;RwWg(n~=;8o#OCFFC0ii)U)ys7WZ%zW0kaN)xBFI}rlOiY+stri($$Xd(R z+TN3mG29#HY>Y9z_x)qb%w&u)oYzGW(GWrq5%u2t5Q2mdBpa@dz4y}N{9TVVf2Zws z+cg@Eur}dyK>0eZ8I55uG1!=ux-O!S5FjcDy&H(HL6@p-{c3T$SB=}f8{LlHHCXYV qy7c`ztiD4#v_m_zLp$_8NB;(6G+fJ*LjNrQ00006 zwY5KOZf>qcQS?U;Kp;BnK9Hs<#0mU@58QT+2pGfzuwhthf1+QZ3I)pL^1s&B*8TzD z`;Co_cQy<|US3{)xVgEx_T$cvfAKsI7a@p^78vI4EJrdS~Z12!H=ToYin(4j1d6#a|4~6oFGlpv1C9*P%4#RjQQNZQdQ+B zioTwmo!zKbtH!D-@u|d_;i9U1k@ug*B7nw=_0MF$0$^s2nVD6U_~76mX*3$Gx!T;f znTJ#D3~wxx5mxo;bdM(g0*wkf0DKu%iN=JV%hfUwNt&h)+MV{o!ootx%+1ka z6(ZuR!3ijIEJb`Botce8gs_NUXJ_Xys04e~+U8XdQdOvop$0OYS3$^H+YBnf-p zp@_gTGZq&Yr`w(Oe43_HSsUex3@0K?el>}4tu%-TMD#iRIfSO#o%a0V;^H(jx9oKl zg8&9&Vq#)!H89LZ2GQ#T%H|MSSy|b$);2|CnutV1SVbW!!zF}>j0gXt4FUva9xf@E z7{ml-&LMOdRD!)9zW?EJ2oVvA6GasK0$l1KBIxydh~pTO6O$0V-A>EII6gT>p-@1n zSOPP{Sc7;FBaY)QhY%6LdiG3IDwPVHbGPb%F$N%@P$P8Bmiu^UjHTx!|Ke;jK`V@6lP?-eJ5pTo5JLF|N7^Fdk5|v zxOd>*fqMtW=K$RS3$L)jUPf^YnTU)N8r|;YTfU#m5#;ilRwX+ zL`0{QV9pigyy*qe{e+0@Y$4--awd+5V2l~E9oAZSz6WdVWo+FQ5E6m02A=1^IX85K znTIqW5rLS_9(w2%c+MO>&#~qQj-KxgPiaQsdSeGBCnn*hof1^b$FhKVySpx)^1$HB7)hOS%hH-5y89n@6hRVhLLCHpTK1F_eH$U zXvQuo%3SwNn}T)D!8zxMD9$`jt+jp-1aQv57=vn1MW@rbvLJomhhNB8HC3e9^4+Qc znd5_afH;o7wD3~^J`u(4RKWZD`$@OkJ)VC!zoDuFRrQ^7X|LB4&-1{1%30o|EgELP z^AN@{!Z-#z4c9osdhNwA*dhY&V68K}1SK>YP*OoaXmLqyW@ftJbp$Rdvi-?RM2Vr_scOn$zRZ ztKS9kXAY;QMo?9D&avlt+m9YS`fK^C^4pg$U;evZucwBH@ZrOU^y9~m?^l*rXlZHb zJ8|-{+wIP`+O5h-?}Q1&s!Ae4s!GWqp}}B4`7;qA=NvIJF*At>v2)ZZ6)7qf$fPNW z>b2j^#$gd*5g}`BeeU;je}DY=@!#Tp{GaE~pa1jCn>T$TI&Exu@k~uk@v~>o=9iY1 z9!^e9&NQ3Nl~${@(u;dFbz00@VKPWC7!1xpBCi3@_eR>Np6#DEc$WsY<0%E*6UgbII}fIK(;U z`u%>~>2#ucz21EN`gN;buczm2rO&NP^80GF%H?vIJ^R{`E@`wgvok$iRbPMgRRfoHX_t0s|4*Y6 zH;BII35&=KFNmO&`rbrcDb)sgD%@IYIOhm}e5r`>-b;*e8bZs<%k<#EgY}J#jTLLH z`I4hw*L8UJ?%m$gr%!hVgMm<%Wq9=H(NC^lzkcWK+qXXga8)VABBD-9-$me?ndkl8 z%;}%ku3h`vn>TO%`uOqVKbwt>4ZFI!dgb}^=fA4!`sZ1e&0HuV0;Lp+qQJ|SFJ~{N z^I(Grw{PD@mSte(Hb^1@B5JRP!y&e}xBsxYx%umjjSXv>KbZNdb1oQTn3+#RpPAvD z!~Xt0c6WDSjA;iyZ`6qhAq3pGaRdE+A0dRPahVw*1f*%o&N&rhyxKTDiT4_S5fKKU z=Fuw=!59N$44C=cnNUi#3^*$oM1+Hb0~{S4VQp=Vt+i@AR{;3v08PBzq;OtzMFheO zr4*cV=c26Id&nt)Xac6SK2g6+HlS|Yi(jIy>(7Rgh`?HlKmP8w_{ZzlFviS%uHWxtX=w>sYgAP=^{o?cWm(o1Hmx;8 z1X}BM01*L*fbspT*Msr?j1IU_R2M{_h(;M7A1AWYeK1W^G)xp@Y#r$L`zNZkh=5}R z$9N_OSjC0VAtIDji4TV#z|83NdN7?bWo8XrmL=*?x72Bkg)wHf+#vdRd_H$BjCxs> zI2atDsl3O>$H?;>&bs*y_}ZhaO2in!k)gCg2mwiwz*>9pT7d{LMwC_A7PZNmARWpu zU9Jx?AclzHa5%LtJb7ek1_CX_?3wGqc%qfBu(!7d7Dk$+NYVu5upGfVOW~}Wa$?#6 z8PQo?*Hfvi>l)hVQA93CZPPe_A3l75uRKT*idbOjt0m;U99nDi@*e8Co{}48dJt+E zsG-$n9W1H~|4l6OY4k@5GlEJIn9 zfBfSB{lU3lO7sSeB<=zrPhPm;yFp5Rmm=E>w)g6pi= z>Au(0fx52Yy&u&c?-65c&nKC2rUR4BMOR^p2%K}%(NYRYlAMWRMP!8arWcs#`Wm)t z=({-wfY{MpW>Fd^ADo)tc)+qK@cQpB5$f>y)G7jP49cPy)txg!?#w$7);av^{d@fW zn{UpAd2I}=b8QLJJLMZuX|Y%mfY^_C%5!PC0t4hL&%Yrna3=gyy=J$v?-7cX8MQ^Ph7A3j{ad-v{b06!QE z2Dd{9U)OcL>b+lK=H(E=vWR@e%sGI(*}0pwR%TJ^yfroPY*0#-M0Bi_I@DSpYOVLI zwF7JIzl|~PmzS5n1F*fdwe{VTCr@@nWLn+dx^>ImyLa#FwY9Z=nx;vbrb&_{iF3{= zrBY^2nj?geFmoD0NMekMh&X08B4S0vbhjpnh?P=-h-xD8L=?2vl`*DNN>#>~N^4yy zr79w-n7Q=c`>Lv{vMj5zEUVq!-NUV|t@p29y{b>_uT0X@Sbb8S=hW-9#}W~K8i(xBO4n{0ljdfD;OaQlKy+=V)+J3l(@;nOgE yUX|JvZu8d7+%Nkl)3#^%Fx~ulk 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 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Sega - Game Gear.png b/docs_assets/system-icons/Sega - Game Gear.png new file mode 100644 index 0000000000000000000000000000000000000000..169bbaa123848a039e6fad08b1b03de6953f1a07 GIT binary patch literal 2163 zcmV-(2#oiMP)-qCv}sV?;s>hz7LCA874G_Wq>&MHXKB3j%l(auL{oVTg_r z%C;nv6gfT9U0qeTvS9aMNK-N?%SZz70F8OoRNd#fw=QsvYh2?R*SN<2F~p@7332B2 zmymOQ?LL?J&#U%$tpY@JW`oOa@|#-t0^>3Byr0AdGAx(w%oQYd+*tMpS|}8 zA>gl7~)p`1I3HH@CO9?=f@Lw(X>C+j2giPr9xfdG9B)*=+RFPd_~j zA>2$URRGu+^CG2Grj#r*yOfdvU@i(hAq0dFQ3%lyQ75Hrq?B`|)XW$&*IG}FF;k_~ zRBJseiejpis>`yR8Dko2?c7>BC8F8R&d%4LfByMC0H~ZZKKS4R{ouiaKkV-AKHA&c z`!h4I<(!@O9sr=Vh7bZdXEaTN-o*$ZtO_9(xw90fd{H#^=P3YX&Utl+Wg>!73f5Yb zWeF)IQevc(V67R}v_y3D{`>F$^}&M&d3SgB+2hBLg93o}-g|G%%qx3)d!MD0CQ?cW zAy`U@5CS{rFrUw{zrRl*gh3eeUVu^x%uMHm{iWREloGmb5e+PafYutDoA1JCiL5fT zG1M#SQc4?pdwZXK{PD+s+uGV1J%0T7NCCjg%8IM&`esULq?F>EGv%DAw>mL1rqe0B z_b|pR*om1*N{JXFLI_u)S*gFdH-~JPF4!~Io zrP*w@T2++;041eFQ51GQpRe^B@{;vIM2In>EK4Y*keR^)H@{`hXJ#m=P*y95?K2!t zzkv`MIWv$mgb7nRNeF?I5~`|# zloDENlw}Da1YW*;iKb~Fgg^)ZRaGIzSV}3SF-DM5N=PXsGuwfpXR{f~vIH}uZQDgY zFf+#E@ulhVDj*_MRrRwR6hh$S2mxkZgbxv6KA)qn_;Aj_IrmBfsoolSiBLGkc%}|0rO>u5 zlv0Q>VltWF;NSqvj2PpY{`@MOKRnCf)3z-_2vADFIk%wkr5=k;otSgZ87ifebIw^x z*$oQ^OAiUvb=^XlAx1YhH}T_-KQ4ZI)8sYAV10f4Or+rd=kwv$%bHV4S@jo( zNJQ;L2XtMx2&18(dGApa1@7Lxi>7JbNQt3wD~e*VzmyVXS^i>P5mDRU9kTM?=NMzM z*4F12h7cCXJRCwqu+}cRNax(*(5v!3^J&YxT=6dhYi%84Oy2vfnx@I#`_5W>()U5U zY=LDr4u=j(3^6<~##KEqVr^~hyAVQX+cwLbGbWQseE9HTk#qj%;o;#& z-up2#lQ;$XyDJMJn25N)9uCa)YpWUyA#(qu;hbJ*VrG$2q8KA-t)Jh&fB!G{?%mt{ z^2;y3-rL)22LbWu(WCY4?d^}Gl_8; zy`|}O_krcml~S^`_TOu3YhP__Z2Wy|YwI5=rDr=kJKucq#TU<*`KH2g!z1_C$t)^*igb*e%#!*VCU}o1}=IK>ov8-%w z-HwP_DP^OSs&o^CwT9 z#Gj2-mJ`WZi#vDj=sS1rl(%l(s#aE3s?lgvmStHu=d3Zt5RpwOnUs==F`5{o$~h}$ zmdq@3J`K+$p%W1$B1%GtsFaFIscsmtFthKvu4~)Y&*$@|uIu^n@$u}%ix;z}PoK`8 zK7AU7_GMXCalz>0!piELLseBY8jWZ)8p*OOm2*y6Yo*p&YOSSGiu!?;pygh;A8z%< zhhvN!LP#NmVXzhF^Lec6I@NW}v)PQ>w!N_7J6|8ft0-=nZT?#$#>>bduCm#i3~AqV p!27>2m%YX{u5pcPT;n&#e*hCWN9)qvpFIEo002ovPDHLkV1oEUDdqqG literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Sega - Saturn.png b/docs_assets/system-icons/Sega - Saturn.png new file mode 100644 index 0000000000000000000000000000000000000000..3c3a03c932fcd3bd7cf73c57e843dcbf4bbb8e11 GIT binary patch literal 1991 zcmV;&2RQhNP)#mvZft?6;4YuS#f>>6hfHo0aBDmy+5JK{ae}F#<<-#dfgb>#~a6m#q ztB}ihBuAQ+u`o*%HZapuU0*qPs<*q{^X06gI3>00>F%oc{eJJgW+*Mj7|z1--dArh z#?B1$b$%;cCrJW!^u+(K^6tI&7Ofy@$27@!asc%mQPK zE2Tzpl0IfBMXeJMF9OLcVw}1Zd;luvM#>U@CO369rywmCQCXb=*Tb7G7+-e5n*7@TupjDd*o`t@rJheLF`T}UZ08jV&GKuU?d zy*<2n^9H?M4?8}U``P@bR$~iB5G!U@X!WaYZ{n7#i zO$YxE`7B+`M_S&|o0ENPFe?3NT`el3Hd^((l~GW!|@ z2&v2%1I{^w5RGvlgn-t%k~+h|%V2`{zM_EgilS(y0*o8%vN=PxnWd39 zj*k%v+HYd4E-2^xn4t5l9t1A)*eHMy0z_0~hgpYOYb!2OK6sX?!#P37avYQen-w#` zE9zFJCN0hi#(>5_gJn%F3gWs@Wjf)Sg~IiBPn?B}F+~Z{#YnfYwyhl?C9OgNX3%-8&42LmVC+Vl)~- z2!SL?kftfR-7YR%xPY~_HFP?i(-k0qO_pUvIWa51IOoW+3@=~4#P04cLa!apu+|pB z3n8$+zK(|vA0kcDmHGl&rg^E~Pm-iypveNxImB^{SFc`SFc{$c`SX=pMoNiRtA$Rd zQ?WprrpJ(YkubDM(@}n2hx?`&xPALJ?%cUk>?sS;6a&VXW5K*AjV@(@I&+K4i9jq# zl9?rU*#&21zGd1>n%BVBv%;$VYPmOPa>b@h)^u;ylwvNB1?kJ(&oVx_sEl4juSo&( z_Rkd{^uH&a7@QPe0xfH8WB0a{0Ks&1Eu3b3RCc#=ik(N3&+Ghy6~f5lw0eOi_Y70I zrU^!)0A)BYgA5T>T1n1%F_D;O+Ireu^j@Cl#rYwf2JHu)%2U8&S*YH3mIa8Ss2~tU z5sWd=S{He}$ua?X!~Kx=>%Lwdmk?2*#5j(N0YZJ`*eF1#TSDLjCc@@8j*;hi@w_ZZ zaJ3L{O(T#nXR6PI0w_A?3VMP0@Lu_M=*j0!CCXYe#uNugDGLy?))r_S2w7_@W03l2 zzU=2g;P5QCOc-u4#-O#X1o6sKiLg1(bF|xSWLX9PXt&$Q^Bh`h#Bp31iF@zijD@R% zAQ(7_V}Y3GIfM|1rmGS5-^_?K0N&kqF*JDU!Mm6s2~3Y{m(JJ`QvXO+7fQ+ zYGFSSq2KQp=kMwjP7>~zbjJc8vIaezUXv(m2&Z$D~o&f4hlun_tg$)hx^4oP(4S zN-5)l84{mfioivJ~h=^h$ ziiju{Lc~!N$)j&-vPDD*W2_~mOgZOqBfLihFBptHLU0lUW<8uXv#QoyDK+xmPmD2R zrPRbZr?l3}TALeVa$}4(#^hRS{pHJ-(bK0-|GKxgr&$P;R;z{e_4Px~SO7XO(b*u8h{!>D~bSb^+ Z`ZrbdnAi}Uq5%K^002ovPDHLkV1fyz+ztQ$ literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Sharp - X1.png b/docs_assets/system-icons/Sharp - X1.png new file mode 100644 index 0000000000000000000000000000000000000000..055c9b952b65495e1adaac44dba73dd5c369766e GIT binary patch literal 2560 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 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Sinclair - ZX 81.png b/docs_assets/system-icons/Sinclair - ZX 81.png new file mode 100644 index 0000000000000000000000000000000000000000..db75644ca23102e8656005b08d82dbfa1c17188d GIT binary patch literal 1389 zcmV-z1(N!SP)mO%3bk)ZcaJ>TY-$FXQh$1VBU(5pvFm$dfks&c>WGIp@EK2WGRGyn6M@ zsp_*Z+8D!!4_ST5ZOI|0nGM46}RfuoH>tse-)7zrUf z>G~=n#27iPH3NaRZQ1YlJck^(xVU&o;B-ZPvWwPd>@z&`@j~E*z~7y~v#&w}f$@0E zY&OF=_v9C{@p$}@fH4MR%sqy8JD>CCKPvwj>`4oOhzxcuSx##Rb+|Qb=sK zTjq;7#+XOL=A7AXw`@1tAv(_YT<(0U=DkNm=xm3o;=KpJT8p(7?>(xDu?FWI&N~Fb z*dA+)c{FU!8Efs3yuX>mB0|@7eEj$ka^Ib1&9rR`0x?8HgxzijKnQ`*1&lG|oQW~A z{IEofkYaiq?6FJ!T-bfq1FA}MXaE?EMu-(um6Xyjn<*u7&iIkJzE@rNVp9bT&m*xxKyR z^70Zt^2G2sSb(-^S*=!I4x#grVuE~}HSOJOj6qfV**LoPR9028W>QK>lt;sg^d9-$ zmH5sBs>G;lC%cPtj^t+&x5=Bt} z&@|0ZRWh08&@dX0`lLK2U{Msq4(c(mnLbDM`~BC2koTUet1H9^`|UAyuaB{NdyL(S zDVmg@)6dN3bKJ-gyGT`4EUp$9YaR`o$*imO*Aqx7QP(v9UDpv~WWU=F9#K`0-diaq z4u=D_v!s+rvBw%Qe+t{SZEwe}CX_-63DLpH8&fwuKCt zPx5ICaEcWXHk-}xe6D*>Muu5G@6{d<$T?F?3d(5-KwZ~3>lly6Xjb;SJ(F^RwU!to z&7om-F&ko=43o)(OlG&+QH%?mcW6@Tx@J0?4hE)}m`GXK? zeC!g$P}lW9{EHrNBS%@5i0R$!ou{0YXzCZa$z*~bdAhbEhB)Y|DmiD$SxMGR(=-&5 zf^jh>hDh7Clx2yreJ2@A=yl1oUCVeprks|fm}r}}FCZtgZLA^0@Z}IP#$*xEuIaSO z6+%B#!Gz(!D}*pKRw*UAuA{1Y-LC8U+Mbk5rt3Pk+bxIsfT|KgU|p?0RToWEw^gs( zbflQ*+78V}-Sryberw;htsWQJe2+lRImZ}F=bX``X209tYiZlIMG(XYhr?lrdlBJW z_l}4$hPG*Gax>`G`+CR`fL+)P*p&L2AHGu`hJ5T(Gh>V~&N*U?Wj-c}GscMb-WNsj z<6^NmIOo#cURhP|Z61D4KJTl(7W)VOS7VH}D2kuF_ud#IZn<2Bs;bs+-n{uC#`xVc vy5LwZm&@?%ubBQCmwYeRtS{qbJm2vvt1#TGz~t^w00000NkvXXu0mjfBGAN4 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Sinclair - ZX Spectrum.png b/docs_assets/system-icons/Sinclair - ZX Spectrum.png new file mode 100644 index 0000000000000000000000000000000000000000..465ba9d55e22eef1112435b2dcdf605d77cc6fd9 GIT binary patch literal 1741 zcmV;;1~U1HP)>NNyUa`PLC<}x@AY~B=R_xe>E&K!Q zkPt{j$Os{}yp#n-3JV*@Oz_w~&v5aLbWBE8m3@?Out`_c``ycxPp65L`tb`DRVc5Se6bf9we*MDy{QO)T$H{3A zCFdN4LLtAtzTUiX$sT;5n(TKenF zn>W|B5P~R*qUGh~uQVEsPv`UbQyWS`2$CdWVPWC@#l^)x3n9>tABbEo*YP|r%jI(R zG=Bl5l+5LF9q~BU^`Y2O)>`eHJGBG=Yps>eIW@Q;dCp}_U`*f{ML(IQPIDnUYJK|9 z_9luVj4?RphK7ThaFl+yUL4l{8`#5jz*_q>fjEwd;~1qB&bgtHlyXS$ux^Y&N;!0H ztwkwyr0ug}2loa9;y6C~3sfofL@9Nm*!A^wHr6-LTK_wYj@tuLN(zMn0J&Tatu@7B5$7CQYx4O# zg<=7d8I)3ey->iIzFsUAky4&Gwja_kh&po=0VyRx5OC+t9h`H-QH(K$PN#zul3uUJ z-tHco8=C+GK|l}$=$ytFLlj2bzI7X=6mfiV*g@NzJtpo1ROB&fG|Mtt2QAvIHd<>u z&%qFj}=~4XF84MuA5rxb-*AJmMCW#Z0 zB*7Td*Q10qO)*(tAB0(!X2UFIj3G&q6UC-+Obf#&_fo#}O-t}?jY|6QqmL>UCNtdq z;4aqMVLtA3I>VGErKH(xj-hxupC3cT8q+( zTD8_cfA&I>G+}CL3W1>AZliOWQmKSodwUz-_o>(G0IaO6P^na?)oK`HSpLT{ z3+ES@n3y040@ha7xLCi4QtCvouUx9L^(fCTzPQbM_pWm34_|}I?-3kBKnOvarZk&P zgb;K)U7|Q*XJ-e1Fbr|l4ap`+!v6j~K@jxgJxORbn@B0285<@M+iN>qRSECS<=OvD zo!LLW17Cg}p3FjrOL@23jkW$$fv1G=6k+B{s%z_Uu{aYI6YWHh0PA^Gr@nVy$IsYm3?0S@QWjQ54ZSXmR%3 z*}l_*zSEgAGdSni-r8n*dYYnFBu!G9yG_oWJBO5#PNzd0$IQ+3{p{@QP%4!um&+Jq z*xufzR;!_2{c%n?)-P0s=o6`ssGN zOifKutyW3Xl-5CuYPCu}r)gQi?UrErFDVssi--Ou%)NYkFVt?gSy@>brm(Kx#rJ)j zbp%1c!-o&iT9YOze&BO|<^FI%&N-qu0@uf8CZpMGl4TizAFz6Vb(me!EFJo3x7$Qv zM61=pT1yZFG}hLLo#HLkqxId0Uv0il_OngoNGCMf3mL6-=KH>Fx7%_+$T`RU-u_6x z)SpQTgcJmRFw(cTTCEY=L2Qp;A0JFQ?auI-@BE>ymXejE$Hn!Gx8L05?XMSE{qZGc znt!r7mzPpXGeW>Q=i)e??DcxOP$(Qb*c#b{A7Lc;pJEM;u2B3yw%Ph2{B-9U)ptLn z+iQ@B5^)?)y2p#u&N+(3V)4qAE5AN}{`^g)l=-;N$_@|-OilOr{=em4qEIukNf9-400000NkvXXu0mjfCw5_; literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Sony - PlayStation 2.png b/docs_assets/system-icons/Sony - PlayStation 2.png new file mode 100644 index 0000000000000000000000000000000000000000..f32ab5ea8f0448be1d57e40beaafa10720c2fac7 GIT binary patch literal 613 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 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Sony - PlayStation Vita.png b/docs_assets/system-icons/Sony - PlayStation Vita.png new file mode 100644 index 0000000000000000000000000000000000000000..81c5710d7a2f619c489976eed82dacaadabe86cf GIT binary patch literal 1669 zcmV;027394P)Yz18Gg>0Gah?vW5^M!PZc<24P*hM6YBwOEE24-sT@kV9`u>5t=nv?=iz=*& zbj1c$L{~xr32LG0QVJFVYUg4cOyX-R?!+Ev;+gZ&1+g2TpsQ9k(v=@+bT&tt=ly!# z_q@OuV~jDz7-Nj_`9OZqB|_dghYh9FJLmsq86lvQes&L2NnWv(#bP8J z4r{uuk0b=X@2hUND|UBxm6Y-WP9HVk@TF`vt1T`rPULdAWIP@}Vwz@%jwmEjO1ZbU z=i0X2uGMNg#bWVaTU%S=zZpW_Cm#p|aN)v*ql=4+Ka0oX=~OE9b6wZx*4Ni_<#IVR zY#XGMn4O(2#*o*4FUo(IaHD+5fMwegGI_C=?2CT^FmXtC*RYsn+ZDKOZ@Aq$&QDBCc%J74g25n!5O7_0 zP$#481>tZQhG9_8^8&iAdyPipe4$WywzRa=efaR<_pe^P@+knEI&~^7gvgajrK^!h zMEbrT5JG@+jzAzV=m(=BPY8h!Vj$x}2oOR7u~~BHjh(Ep=lZ@rC^K=&d&j*6m(sOrfL1!gRbi!grM1M9*;yK;bbzYQNu6@ zV~q8By~sh{(O@tL#u$RZAPmERlyYS0b2x=`T?bUUG&@eDAK6^4=E*F*M+X@=!=QtI0G(&zVZIxq?CdX0@-X901$~p zP_NhfO=Be9?>jJ^P6Gf;)5O-+7AU134470(2`Q!2G_A)uhwu9`8jZs9JXEVy*tU&C zBJqLc!yYFRi3DuhMzvan=Xr=mqwsxSa?YV?T2HR;$z<}oUayB1ra8 zcq*j?rBpT=4Rksk)a!M)t_w=(z!Ss#4*n0X_SnM0!q?4avso+_9ROgIQaFyI9zTBk^4z&|-)?ShezUo``GpVyQc5a>fTn5E zbzOS@{{4}p&q2gxr_-TIDasgwl#=H2`EQOLJNE6JJ9l0>j-x20Zyz*-5HQBDy1IJY zvaGpUt@e8%gx~3Oo^5Sy{km4GSxPA`rKCzJ*`FGRAwYx>s%e^3O0j%CU&&-Le>F{W zo>Hn$PELMRsZ>g9YirLr=WnBRSbGzR1if@ z>d2gPoH=vm?i^h5oj^y}fzu+O>bQS}i$v(7fM3;_*0HUS6J_ot>RA z48!7_Cm3TtDV0hmUc7h_W{eH3Blo3qW@e^);>3xkQpyHntkvuFD&=zd)va5%s2q^)v0N^fNF);RU@&NCnx>7S280k|e}BK%YPIZIt=1})O1qUx#sB1^ z{{1D^;Y+btj6|c+k*-xbosQVu-Bq9B_2XS^{U}z8V~jDz7-Nhv#t86l$G5|$Pf!b? P00000NkvXXu0mjf*GoC9 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Sony - PlayStation.png b/docs_assets/system-icons/Sony - PlayStation.png new file mode 100644 index 0000000000000000000000000000000000000000..cb5cbc3ce612f03d4230c103eb8cff20428b3f1e GIT binary patch literal 1662 zcmV-^27&pBP)NklFA^V0DIdf2(b6XF7gyXg1ki@!#?JylaU21YXJoj zhThmC4LRhH-CcVak@^Yk;f$o+0C534Xhxi>uKMclYv7A~kw3T4wLgf~dYPH;#)wxJ+8yU(9L|Hld^FcHbJ zEKd&)55L>r-*?}^$xq0aJ zx$>O=V3~RQ@#Dwwkf=3HgST(r{x}|w=O-s8weo$RwAOZSZ|@sswq;q?LI^b=2V&3j z;x>tmF<@p0A)u6kQVJxN-?3$At)aDswH8DKDP@<$i^T$UUF%gkt+iT8>F(|AeRF(# z{5RkCNnLo0nYk812mtEhSyer(wHEE;c^=|8hUa@r<8M?a=H($4)dG2*W3gC32!S?# zh-jrwDJ6suf|=_Jn=cJz=C$gf5JDJZ;5ZIOqY;8I=nTCHqxLY4FsP)H|zO@H&&KVtu-Dzcz~U+cDjlJzMlGhQDDme0YMnR4}ARgpWiT@ zP9cQAs#1E>As7OcKI8K|$JX{19;J^u>)ZrNb@F;x*%NBW_BaUMX?FUz@z~IhG zM5w9?%#1WmVT{3T#TbJ$O~K5ls%oYFl?V7-31!PDs}kvMdS`P`t25nAQC8&=Vrz^Y zVjbud^8(x3+fYia9qJY35lSg+Z*QZR7i%T;UgZ+ z;D}r40H1{5XrfC31Z^2jzA!de@va3ACm~L}YQlXre_uk0L zdD-dQsF6u25y#8*)bl(*SmL>8$AJzwqF{tYruIt`p12CV@5d;B<2w9eWGTGJ>Tg2_aLH6WkV3fmtH3#ywBd_{OlZ26hUhZV@xkR zKV_Th3uoWU*4k?&Rw;#|C{WjRFRjwYA`nqGQ(dK1+6}LbwAT7}cC=;olSyo?T@pn~ z!Sg&+Rka*#1z@yU&gwyMH5%4+U1+T_nM`_#t*hQ@8{ti2OG=5lu0ceCnGpm5&d$y{ zX97T7*YJHGN+~citi4>E)rBIGQo432y3P2ytbqogkdP$FHSUIpRBJ$+J1xI6gj)1G z?;1RrS+`zJk_1IjKx+*mg75nX!w|+8ErbwKN|%-bRaF%$rNq(E(YMc@J^QQg`@Ug= z-DDR(KlvFy?f!(X|MfKrRe&sA?H74fRlVeHOTDZ^?z*lUUrpLD46hH97xZIY*El*l z`c^3=s;Xi&o6Y$2^t2d_M!&v$_wI)v2*!qu@r*~mB)?!Xo#6Q2$0%e033-iPFN$K~ zx~_LydOeDw-GhUJ!Ss65G{2sno))v&jJpet7cX9Wb;Ex1>$h$c^>i#+X0CHR~7oB7b)IFK+}2iJEu_i2wiq07*qo IM6N<$f`A?${Qv*} literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Texas Instruments - TI-83.png b/docs_assets/system-icons/Texas Instruments - TI-83.png new file mode 100644 index 0000000000000000000000000000000000000000..7419784fb41e626733bebdcd904db29dde5ad030 GIT binary patch literal 2507 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 R!#Mx|002ovPDHLkV1j=$y1)Pc literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/Tomy - Tutor.png b/docs_assets/system-icons/Tomy - Tutor.png new file mode 100644 index 0000000000000000000000000000000000000000..81677a2d7f2639c692ea02a9965508ab63e5eb28 GIT binary patch literal 1995 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 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/VTech - V.Smile.png b/docs_assets/system-icons/VTech - V.Smile.png new file mode 100644 index 0000000000000000000000000000000000000000..c89421e9ab141a897f96114ad3f85f20fd2daf2c GIT binary patch literal 4376 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 literal 0 HcmV?d00001 diff --git a/docs_assets/system-icons/sources.json b/docs_assets/system-icons/sources.json new file mode 100644 index 00000000..9e65327f --- /dev/null +++ b/docs_assets/system-icons/sources.json @@ -0,0 +1,321 @@ +{ + "note": "System icons from libretro/retroarch-assets (xmb/systematic), licensed CC-BY-4.0 by the libretro team. Resized to 48 px.", + "images": [ + { + "file": "APF - Imagination Machine.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/APF%20-%20Imagination%20Machine.png" + }, + { + "file": "Acorn - Archimedes.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Acorn%20-%20Archimedes.png" + }, + { + "file": "Acorn - BBC Micro.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Acorn%20-%20BBC%20Micro.png" + }, + { + "file": "Amstrad - CPC.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Amstrad%20-%20CPC.png" + }, + { + "file": "Apple - Macintosh.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Apple%20-%20Macintosh.png" + }, + { + "file": "Aquaplus - PIECE.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Aquaplus%20-%20PIECE.png" + }, + { + "file": "Atari - 2600.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Atari%20-%202600.png" + }, + { + "file": "Atari - 5200.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Atari%20-%205200.png" + }, + { + "file": "Atari - 7800.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Atari%20-%207800.png" + }, + { + "file": "Atari - Jaguar.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Atari%20-%20Jaguar.png" + }, + { + "file": "Atari - Lynx.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Atari%20-%20Lynx.png" + }, + { + "file": "Atari - ST.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Atari%20-%20ST.png" + }, + { + "file": "Atari - XEGS.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Atari%20-%20XEGS.png" + }, + { + "file": "Bally - Astrocade.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Bally%20-%20Astrocade.png" + }, + { + "file": "Bandai - WonderSwan.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Bandai%20-%20WonderSwan.png" + }, + { + "file": "Bit Corporation - Gamate.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Bit%20Corporation%20-%20Gamate.png" + }, + { + "file": "Casio - Loopy.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Casio%20-%20Loopy.png" + }, + { + "file": "Casio - PV-2000.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Casio%20-%20PV-2000.png" + }, + { + "file": "Coleco - ColecoVision.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Coleco%20-%20ColecoVision.png" + }, + { + "file": "Commodore - Amiga.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Commodore%20-%20Amiga.png" + }, + { + "file": "Commodore - VIC-20.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Commodore%20-%20VIC-20.png" + }, + { + "file": "Entex - Adventure Vision.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Entex%20-%20Adventure%20Vision.png" + }, + { + "file": "Epoch - Super Cassette Vision.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Epoch%20-%20Super%20Cassette%20Vision.png" + }, + { + "file": "Fairchild - Channel F.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Fairchild%20-%20Channel%20F.png" + }, + { + "file": "Fujitsu - FM Towns.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Fujitsu%20-%20FM%20Towns.png" + }, + { + "file": "Fujitsu - FM-7.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Fujitsu%20-%20FM-7.png" + }, + { + "file": "GCE - Vectrex.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/GCE%20-%20Vectrex.png" + }, + { + "file": "GamePark - GP32.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/GamePark%20-%20GP32.png" + }, + { + "file": "Hartung - Game Master.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Hartung%20-%20Game%20Master.png" + }, + { + "file": "Infocom - Z-Machine.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Infocom%20-%20Z-Machine.png" + }, + { + "file": "Magnavox - Odyssey2.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Magnavox%20-%20Odyssey2.png" + }, + { + "file": "Mattel - Intellivision.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Mattel%20-%20Intellivision.png" + }, + { + "file": "Microsoft - MSX.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Microsoft%20-%20MSX.png" + }, + { + "file": "Microsoft - Xbox.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Microsoft%20-%20Xbox.png" + }, + { + "file": "NEC - PC-88.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/NEC%20-%20PC-88.png" + }, + { + "file": "NEC - PC-98.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/NEC%20-%20PC-98.png" + }, + { + "file": "NEC - PC-FX.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/NEC%20-%20PC-FX.png" + }, + { + "file": "Nintendo - Game Boy Advance.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Game%20Boy%20Advance.png" + }, + { + "file": "Nintendo - Game Boy Color.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Game%20Boy%20Color.png" + }, + { + "file": "Nintendo - Game Boy.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Game%20Boy.png" + }, + { + "file": "Nintendo - GameCube.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20GameCube.png" + }, + { + "file": "Nintendo - Nintendo 64.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Nintendo%2064.png" + }, + { + "file": "Nintendo - Nintendo 64DD.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Nintendo%2064DD.png" + }, + { + "file": "Nintendo - Nintendo DS.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Nintendo%20DS.png" + }, + { + "file": "Nintendo - Pokemon Mini.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Pokemon%20Mini.png" + }, + { + "file": "Nintendo - Satellaview.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Satellaview.png" + }, + { + "file": "Nintendo - Switch.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Switch.png" + }, + { + "file": "Nintendo - Wii U.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Wii%20U.png" + }, + { + "file": "Nintendo - Wii.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Wii.png" + }, + { + "file": "Nokia - N-Gage.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nokia%20-%20N-Gage.png" + }, + { + "file": "Philips - CD-i.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Philips%20-%20CD-i.png" + }, + { + "file": "Philips - Videopac+.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Philips%20-%20Videopac%2B.png" + }, + { + "file": "Pioneer - LaserActive.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Pioneer%20-%20LaserActive.png" + }, + { + "file": "RCA - Studio II.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/RCA%20-%20Studio%20II.png" + }, + { + "file": "SNK - Neo Geo CD.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/SNK%20-%20Neo%20Geo%20CD.png" + }, + { + "file": "SNK - Neo Geo Pocket.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/SNK%20-%20Neo%20Geo%20Pocket.png" + }, + { + "file": "SNK - Neo Geo.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/SNK%20-%20Neo%20Geo.png" + }, + { + "file": "Sega - 32X.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sega%20-%2032X.png" + }, + { + "file": "Sega - Beena.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sega%20-%20Beena.png" + }, + { + "file": "Sega - Chihiro.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sega%20-%20Chihiro.png" + }, + { + "file": "Sega - Dreamcast.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sega%20-%20Dreamcast.png" + }, + { + "file": "Sega - Game Gear.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sega%20-%20Game%20Gear.png" + }, + { + "file": "Sega - Saturn.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sega%20-%20Saturn.png" + }, + { + "file": "Sharp - X1.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sharp%20-%20X1.png" + }, + { + "file": "Sharp - X68000.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sharp%20-%20X68000.png" + }, + { + "file": "Sinclair - ZX 81.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sinclair%20-%20ZX%2081.png" + }, + { + "file": "Sinclair - ZX Spectrum.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sinclair%20-%20ZX%20Spectrum.png" + }, + { + "file": "Sony - PlayStation 2.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sony%20-%20PlayStation%202.png" + }, + { + "file": "Sony - PlayStation 4.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sony%20-%20PlayStation%204.png" + }, + { + "file": "Sony - PlayStation Portable.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sony%20-%20PlayStation%20Portable.png" + }, + { + "file": "Sony - PlayStation Vita.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sony%20-%20PlayStation%20Vita.png" + }, + { + "file": "Sony - PlayStation.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sony%20-%20PlayStation.png" + }, + { + "file": "Texas Instruments - TI-83.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Texas%20Instruments%20-%20TI-83.png" + }, + { + "file": "Tiger - Game.com.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Tiger%20-%20Game.com.png" + }, + { + "file": "Tomy - Tutor.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Tomy%20-%20Tutor.png" + }, + { + "file": "VTech - CreatiVision.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/VTech%20-%20CreatiVision.png" + }, + { + "file": "VTech - Socrates.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/VTech%20-%20Socrates.png" + }, + { + "file": "VTech - V.Smile.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/VTech%20-%20V.Smile.png" + }, + { + "file": "Videoton - TVC.png", + "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Videoton%20-%20TVC.png" + } + ] +} diff --git a/platforms/_registry.yml b/platforms/_registry.yml index dcc12fd8..f10c54cb 100644 --- a/platforms/_registry.yml +++ b/platforms/_registry.yml @@ -665,7 +665,7 @@ platforms: config: romm.yml status: active extract_to: library/bios/ - logo: https://avatars.githubusercontent.com/u/168586850 + logo: https://avatars.githubusercontent.com/u/164058018 scraper: romm source_url: https://raw.githubusercontent.com/rommapp/romm/master/backend/models/fixtures/known_bios_files.json source_format: json @@ -727,7 +727,7 @@ platforms: config: rocknix.yml status: active extract_to: /storage/roms/bios/ - logo: https://avatars.githubusercontent.com/u/152618023 + logo: https://avatars.githubusercontent.com/u/163176886 scraper: rocknix schedule: weekly target_scraper: rocknix_targets @@ -897,7 +897,7 @@ platforms: config: misterfpga.yml status: active extract_to: /media/fat/games/ - logo: https://avatars.githubusercontent.com/u/47264183 + logo: https://avatars.githubusercontent.com/u/29345272 scraper: misterfpga source_url: https://raw.githubusercontent.com/ajgowans/BiosDB_MiSTer/db/bios_db.json.zip source_format: mister_downloader_db @@ -980,7 +980,6 @@ platforms: # minarch hands each core SDCARD_PATH/Bios/ # (workspace/all/minarch/minarch.c:3532). extract_to: / - logo: https://avatars.githubusercontent.com/u/10894566 scraper: myminui # minarch hands each core a folder and names no file (workspace/all/minarch/minarch.c:3532): # there is no BIOS list of its own to export corrected. diff --git a/scripts/fetch_site_images.py b/scripts/fetch_site_images.py new file mode 100644 index 00000000..410b0214 --- /dev/null +++ b/scripts/fetch_site_images.py @@ -0,0 +1,187 @@ +#!/usr/bin/env python3 +"""Download the platform logos and system icons the site shows, once. + +The site served these from other hosts: GitHub avatars and files on the +``master`` branch of upstream repositories. A rename upstream broke an image +in silence, and every page view hit third-party hosts. This tool copies them +into ``docs_assets/logos/`` and ``docs_assets/system-icons/``, which are +committed, and records where each came from in a ``sources.json`` beside +them. The site build only reads those copies (``sitediagrams.localize_images``). + +Raster images are normalised to a square PNG (96 px for logos, 48 px for +system icons) so every tile has the same weight; SVG is kept as published. +Normalising needs Pillow. This is a maintenance tool run by hand when a +logo changes, not a build step: the build stays on the standard library +and PyYAML. + + python scripts/fetch_site_images.py # logos and icons + python scripts/fetch_site_images.py --only logos +""" + +from __future__ import annotations + +import argparse +import io +import json +import sys +import urllib.error +import urllib.parse +import urllib.request +from pathlib import Path + +import yaml + +ROOT = Path(__file__).resolve().parent.parent +sys.path.insert(0, str(ROOT / "scripts")) + +LOGO_DIR = ROOT / "docs_assets" / "logos" +ICON_DIR = ROOT / "docs_assets" / "system-icons" +LOGO_SIZE = 96 +ICON_SIZE = 48 +AVATAR_HOST = "avatars.githubusercontent.com" +USER_AGENT = "retrobios-site-images" + +# Who owns each mark. Logos are shown to name the platform they belong to; +# the note says so, and gives the licence of the repository the file was +# taken from when that repository states one. +OWNERS = { + "retroarch": ("libretro", "repository licence GPL-3.0"), + "lakka": ("Lakka (libretro)", "file from libretro/retroarch-assets, CC-BY-4.0"), + "batocera": ("Batocera", "repository licence MIT"), + "recalbox": ("Recalbox", "file from homarr-labs/dashboard-icons, Apache-2.0"), + "retrobat": ("RetroBat", "repository states no licence"), + "emudeck": ("EmuDeck", "repository licence GPL-3.0"), + "retrodeck": ("RetroDECK", "repository licence GPL-3.0"), + "romm": ("RomM", "GitHub organisation avatar of rommapp"), + "rocknix": ("ROCKNIX", "GitHub organisation avatar of ROCKNIX"), + "amberelec": ("AmberELEC", "GitHub organisation avatar of AmberELEC"), + "emuelec": ("EmuELEC", "GitHub organisation avatar of EmuELEC"), + "knulli": ("KNULLI", "GitHub organisation avatar of knulli-cfw"), + "retropie": ("RetroPie", "GitHub organisation avatar of RetroPie"), + "bizhawk": ("TASVideos", "GitHub organisation avatar of TASEmulators"), + "misterfpga": ("MiSTer FPGA", "GitHub organisation avatar of MiSTer-devel"), + "minui": ("Shaun Inman", "GitHub avatar of shauninman, the author of MinUI"), + "nextui": ("LoveRetro", "GitHub organisation avatar of LoveRetro"), +} + + +def fetch(url: str) -> bytes: + request = urllib.request.Request(url, headers={"User-Agent": USER_AGENT}) + with urllib.request.urlopen(request, timeout=60) as response: + return response.read() + + +def square_png(data: bytes, size: int) -> bytes: + try: + from PIL import Image + except ImportError as exc: + raise SystemExit("Pillow is needed to normalise raster images: pip install Pillow") from exc + image = Image.open(io.BytesIO(data)).convert("RGBA") + image.thumbnail((size, size), Image.LANCZOS) + tile = Image.new("RGBA", (size, size), (0, 0, 0, 0)) + tile.paste(image, ((size - image.width) // 2, (size - image.height) // 2), image) + out = io.BytesIO() + tile.save(out, "PNG", optimize=True) + return out.getvalue() + + +def is_svg(data: bytes) -> bool: + head = data[:512].lstrip().lower() + return head.startswith(b" bytes: + lowered = data.lower() + for token in (b" None: + entries.sort(key=lambda entry: entry["file"]) + document = {"note": note, "images": entries} + (directory / "sources.json").write_text( + json.dumps(document, indent=2, ensure_ascii=False) + "\n", encoding="utf-8" + ) + + +def fetch_logos() -> None: + with open(ROOT / "platforms" / "_registry.yml", encoding="utf-8") as handle: + platforms = yaml.safe_load(handle)["platforms"] + LOGO_DIR.mkdir(parents=True, exist_ok=True) + entries = [] + for name, entry in sorted(platforms.items()): + url = entry.get("logo") + if not url: + continue + download = f"{url}?s={LOGO_SIZE * 2}" if AVATAR_HOST in url else url + data = fetch(download) + if is_svg(data): + file_name, payload = f"{name}.svg", safe_svg(data, url) + else: + file_name, payload = f"{name}.png", square_png(data, LOGO_SIZE) + for stale in LOGO_DIR.glob(f"{name}.*"): + if stale.name != file_name: + stale.unlink() + (LOGO_DIR / file_name).write_bytes(payload) + owner, licence = OWNERS.get(name, (name, "ownership not recorded")) + entries.append({ + "file": file_name, "platform": name, "source": url, + "owner": owner, "licence": licence, + }) + print(f" {file_name} from {url}") + write_manifest( + LOGO_DIR, + "Each platform's own logo, owned by its project and shown only to name that " + "platform. Copied once by scripts/fetch_site_images.py.", + entries, + ) + + +def fetch_icons() -> None: + from generate_site import _group_by_manufacturer, load_database + from siterender import SYSTEM_ICON_BASE, _icon_name + + db = load_database(str(ROOT / "database.json")) + names = sorted({ + _icon_name(manufacturer, console) + for manufacturer, consoles in _group_by_manufacturer(db).items() + for console in consoles + }) + ICON_DIR.mkdir(parents=True, exist_ok=True) + entries = [] + for name in names: + url = f"{SYSTEM_ICON_BASE}/{urllib.parse.quote(name)}.png" + try: + data = fetch(url) + except urllib.error.HTTPError as exc: + if exc.code == 404: + continue + raise + file_name = f"{name}.png" + (ICON_DIR / file_name).write_bytes(square_png(data, ICON_SIZE)) + entries.append({"file": file_name, "source": url}) + print(f" {file_name}") + write_manifest( + ICON_DIR, + "System icons from libretro/retroarch-assets (xmb/systematic), " + "licensed CC-BY-4.0 by the libretro team. Resized to 48 px.", + entries, + ) + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__.split("\n\n")[0]) + parser.add_argument("--only", choices=("logos", "icons"), help="fetch one kind only") + args = parser.parse_args() + if args.only in (None, "logos"): + print("Platform logos:") + fetch_logos() + if args.only in (None, "icons"): + print("System icons:") + fetch_icons() + + +if __name__ == "__main__": + main() diff --git a/scripts/generate_site.py b/scripts/generate_site.py index 55573f1e..02872ee3 100644 --- a/scripts/generate_site.py +++ b/scripts/generate_site.py @@ -1810,11 +1810,16 @@ def decorate_markdown_pages(docs: Path) -> None: relative = path.relative_to(docs) if any(part in LOCAL_NOTE_DIRS for part in relative.parts[:-1]): continue - markdown = path.read_text(encoding="utf-8") + original = path.read_text(encoding="utf-8") + markdown = prepare_page(original, relative) + for image_id in unresolved_images(markdown): + print(f" WARNING: {relative}: no diagram named {image_id!r}", file=sys.stderr) stripped = _undecorated(markdown) if stripped is not markdown: markdown = stripped elif markdown.startswith("---\n"): + if markdown != original: + write_decorated(path, markdown) continue title = _page_title(markdown, relative) @@ -5647,6 +5652,12 @@ def _generate(args: argparse.Namespace) -> None: images_dest = docs / "assets" / "images" images_dest.mkdir(parents=True, exist_ok=True) + # Logos, system icons and sharing cards are served from the site itself + # (docs_assets/*/sources.json records where each came from). + for folder in ("logos", "system-icons", "og"): + source = Path("docs_assets") / folder + if source.is_dir(): + shutil.copytree(source, docs / "assets" / folder, dirs_exist_ok=True) assets_src = Path(".github") / "assets" for name, dest_name in [("logo.png", "logo.png"), ("favicon.png", "favicon.png")]: src = assets_src / name @@ -6003,6 +6014,7 @@ validation: if stale: print(f"Removed {stale} page(s) nothing produced this run") +from sitediagrams import prepare_page, unresolved_images # noqa: E402,F401 from sitewrite import ( # noqa: E402,F401 _produced, _record, @@ -6042,7 +6054,7 @@ from siterender import ( # noqa: E402,F401 prime_system_icons, _icon_available, SYSTEM_ICON_BASE, - ICON_CACHE_PATH, + ICON_DIR, ) if __name__ == "__main__": diff --git a/scripts/make_og_cards.py b/scripts/make_og_cards.py new file mode 100644 index 00000000..ec472fb5 --- /dev/null +++ b/scripts/make_og_cards.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +"""Render the sharing cards (Open Graph images) to PNG, once. + +Each card is an SVG written by ``sitediagrams.og_card_svg`` from the +registry, rasterised by a headless Chromium through Playwright, then +committed under ``docs_assets/og/``. The site build copies the PNG files and +never runs this script, so it adds nothing to the build's dependencies. +Run it again when a section's wording or the platform count changes. + + python scripts/make_og_cards.py +""" + +from __future__ import annotations + +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent +sys.path.insert(0, str(ROOT / "scripts")) + +from sitediagrams import OG_SECTIONS, og_card_svg # noqa: E402 + +OUT = ROOT / "docs_assets" / "og" +LOGO = ROOT / ".github" / "assets" / "logo.png" + + +def main() -> None: + try: + from playwright.sync_api import sync_playwright + except ImportError as exc: + raise SystemExit("Playwright with Chromium is needed: pip install playwright") from exc + OUT.mkdir(parents=True, exist_ok=True) + logo = LOGO.read_bytes() + with sync_playwright() as playwright: + browser = playwright.chromium.launch() + page = browser.new_page(viewport={"width": 1200, "height": 630}) + for section in OG_SECTIONS: + page.set_content( + '' + og_card_svg(section, logo) + "" + ) + path = OUT / f"{section}.png" + page.screenshot(path=str(path), clip={"x": 0, "y": 0, "width": 1200, "height": 630}) + print(path.relative_to(ROOT)) + browser.close() + + +if __name__ == "__main__": + main() diff --git a/scripts/sitediagrams.py b/scripts/sitediagrams.py new file mode 100644 index 00000000..1117657c --- /dev/null +++ b/scripts/sitediagrams.py @@ -0,0 +1,755 @@ +"""Diagrams for the site, written as SVG from the repository's own data. + +Each diagram is a function of the registry, the platform files, the +pipeline's step list or the install manifests, so it changes when the data +does and never needs redrawing by hand. Output is deterministic: sorted +inputs, fixed number formatting, ids derived from the diagram's name. + +A page asks for a diagram with an HTML comment on a line of its own:: + + + +``resolve_images`` replaces the comment with the figure. The SVG is inline +so its text takes the page font and its colours come from the theme +variables in ``docs_assets/extra.css``: it follows the palette toggle, which +an ```` cannot. Presentation attributes give the same drawing a +readable default when the SVG is opened on its own. + +Every figure carries two layouts, wide and narrow, and the stylesheet shows +one: a 720-unit drawing scaled to a phone would print 9 px text. +""" + +from __future__ import annotations + +import ast +import json +import re +import sys +import urllib.parse +from collections import Counter +from collections.abc import Callable +from dataclasses import dataclass, field +from functools import lru_cache +from pathlib import Path +from xml.sax.saxutils import escape + +ROOT = Path(__file__).resolve().parent.parent +sys.path.insert(0, str(ROOT / "scripts")) + +PLACEHOLDER = re.compile(r"(?m)^([ \t]*)[ \t]*$") +PLACEHOLDER_ANYWHERE = re.compile(r"") + +FONT = "system-ui, -apple-system, 'Segoe UI', Helvetica, Arial, sans-serif" +TITLE_SIZE = 14 +TEXT_SIZE = 12.5 +LINE = 17 +PAD = 10 +WIDE = 720 +NARROW = 340 + +# Default colours for an SVG read outside the page; the stylesheet replaces +# them on the site through the rb-d-* classes. +INK = "#1f2233" +FILL = "#f5f6fa" +STROKE = "#8c92ac" +ACCENT = "#3b3f7a" +MUTED = "#546e7a" + + +def _width(text: str, size: float, bold: bool = False) -> float: + """Rough advance of a sans-serif string: 0.56 em a character, 0.6 bold.""" + return len(text) * size * (0.6 if bold else 0.56) + + +def wrap(text: str, width: float, size: float, bold: bool = False) -> list[str]: + """Greedy word wrap against the estimated advance.""" + lines: list[str] = [] + current = "" + for word in text.split(): + candidate = f"{current} {word}".strip() + if current and _width(candidate, size, bold) > width: + lines.append(current) + current = word + else: + current = candidate + if current: + lines.append(current) + return lines + + +def _n(value: float) -> str: + text = f"{value:.1f}" + return text[:-2] if text.endswith(".0") else text + + +@dataclass +class Box: + title: str + lines: list[str] = field(default_factory=list) + accent: bool = False + number: str = "" + + +@dataclass +class Figure: + """One diagram: what it shows, said twice (alt and caption), and drawn twice.""" + + image_id: str + title: str + desc: str + caption: str + wide: Callable[[], tuple[float, float, list[str]]] + narrow: Callable[[], tuple[float, float, list[str]]] + + +# Drawing primitives + + +def _text(x: float, y: float, value: str, size: float = TEXT_SIZE, + bold: bool = False, anchor: str = "start", cls: str = "") -> str: + weight = ' font-weight="600"' if bold else "" + klass = f' class="{cls}"' if cls else "" + fill = MUTED if cls == "rb-d-muted" else ("#ffffff" if cls == "rb-d-numtext" else INK) + return ( + f'{escape(value)}' + ) + + +def _rect(x: float, y: float, w: float, h: float, accent: bool = False) -> str: + cls = "rb-d-box rb-d-accent" if accent else "rb-d-box" + stroke = ACCENT if accent else STROKE + width = 2 if accent else 1 + return ( + f'' + ) + + +def _badge_side(number: str) -> float: + return max(20.0, _width(number, 11, True) + 10) + + +def _badge(x: float, y: float, number: str) -> list[str]: + side = _badge_side(number) + return [ + f'', + _text(x + side / 2, y + 14, number, 11, True, "middle", "rb-d-numtext"), + ] + + +def _line(points: list[tuple[float, float]], head: bool = True) -> list[str]: + """A connector through *points*, with a drawn arrowhead at the end. + + The head is a small triangle, never a text glyph. + """ + path = " ".join( + f"{'M' if index == 0 else 'L'}{_n(x)} {_n(y)}" for index, (x, y) in enumerate(points) + ) + out = [ + f'' + ] + if head and len(points) >= 2: + (x1, y1), (x2, y2) = points[-2], points[-1] + if x1 == x2: + sign = 1 if y2 > y1 else -1 + tri = [(x2, y2), (x2 - 5, y2 - 8 * sign), (x2 + 5, y2 - 8 * sign)] + else: + sign = 1 if x2 > x1 else -1 + tri = [(x2, y2), (x2 - 8 * sign, y2 - 5), (x2 - 8 * sign, y2 + 5)] + out.append( + '' + ) + return out + + +def _box_height(box: Box, width: float) -> tuple[list[str], list[str], float]: + inner = width - 2 * PAD + title_lines = wrap(box.title, inner - (_badge_side(box.number) + 8 if box.number else 0), + TITLE_SIZE, True) + body: list[str] = [] + for line in box.lines: + body.extend(wrap(line, inner, TEXT_SIZE)) + height = PAD + len(title_lines) * LINE + (6 if body else 0) + len(body) * LINE + PAD + if box.number: + height = max(height, PAD * 2 + 20) + return title_lines, body, height + 2 + + +def _draw_box(box: Box, x: float, y: float, width: float, height: float, + title_lines: list[str], body: list[str]) -> list[str]: + out = [_rect(x, y, width, height, box.accent)] + tx = x + PAD + if box.number: + out.extend(_badge(x + PAD, y + PAD, box.number)) + tx += _badge_side(box.number) + 8 + cy = y + PAD + 13 + for line in title_lines: + out.append(_text(tx, cy, line, TITLE_SIZE, True)) + cy += LINE + cy += 6 + for line in body: + out.append(_text(x + PAD, cy, line, TEXT_SIZE, cls="rb-d-muted")) + cy += LINE + return out + + +def flow(boxes: list[Box], vertical: bool, total: float) -> tuple[float, float, list[str]]: + """Boxes joined in order: a row on a wide screen, a column on a narrow one.""" + out: list[str] = [] + if vertical: + width = total + y = 1.0 + for index, box in enumerate(boxes): + title_lines, body, height = _box_height(box, width - 2) + out.extend(_draw_box(box, 1, y, width - 2, height, title_lines, body)) + y += height + if index < len(boxes) - 1: + out.extend(_line([(width / 2, y), (width / 2, y + 22)])) + y += 24 + return width, y + 1, out + gap = 26.0 + width = (total - gap * (len(boxes) - 1) - 2) / len(boxes) + measured = [_box_height(box, width) for box in boxes] + height = max(m[2] for m in measured) + for index, (box, (title_lines, body, _)) in enumerate(zip(boxes, measured)): + x = 1 + index * (width + gap) + out.extend(_draw_box(box, x, 1, width, height, title_lines, body)) + if index < len(boxes) - 1: + mid = 1 + height / 2 + out.extend(_line([(x + width, mid), (x + width + gap - 1, mid)])) + return total, height + 2, out + + +def columns(boxes: list[Box], vertical: bool, total: float) -> tuple[float, float, list[str]]: + """Side-by-side boxes with no order between them.""" + out: list[str] = [] + if vertical: + y = 1.0 + for box in boxes: + title_lines, body, height = _box_height(box, total - 2) + out.extend(_draw_box(box, 1, y, total - 2, height, title_lines, body)) + y += height + 12 + return total, y - 11, out + gap = 16.0 + width = (total - gap * (len(boxes) - 1) - 2) / len(boxes) + measured = [_box_height(box, width) for box in boxes] + height = max(m[2] for m in measured) + for index, (box, (title_lines, body, _)) in enumerate(zip(boxes, measured)): + out.extend(_draw_box(box, 1 + index * (width + gap), 1, width, height, title_lines, body)) + return total, height + 2, out + + +def grid(boxes: list[Box], per_row: int, total: float) -> tuple[float, float, list[str]]: + """Ordered boxes in rows, each row joined to the next by an elbow line.""" + out: list[str] = [] + gap_x, gap_y = 18.0, 30.0 + width = (total - gap_x * (per_row - 1) - 2) / per_row + rows = [boxes[i:i + per_row] for i in range(0, len(boxes), per_row)] + y = 1.0 + previous_end: tuple[float, float] | None = None + for row in rows: + measured = [_box_height(box, width) for box in row] + height = max(m[2] for m in measured) + for index, (box, (title_lines, body, _)) in enumerate(zip(row, measured)): + x = 1 + index * (width + gap_x) + if previous_end is not None and index == 0: + px, py = previous_end + out.extend(_line([(px, py), (px, py + gap_y / 2), (x + width / 2, py + gap_y / 2), + (x + width / 2, y)])) + out.extend(_draw_box(box, x, y, width, height, title_lines, body)) + if index < len(row) - 1: + out.extend(_line([(x + width, y + height / 2), (x + width + gap_x - 1, y + height / 2)])) + previous_end = (x + width / 2, y + height) + y += height + gap_y + return total, y - gap_y + 1, out + + +def svg(figure: Figure, layout: str, suffix: str) -> str: + """One layout of *figure* as a standalone, accessible SVG element.""" + width, height, body = (figure.wide if layout == "wide" else figure.narrow)() + base = f"rb-fig-{figure.image_id}{suffix}-{layout}" + return ( + f'' + f'{escape(figure.title)}' + f'{escape(figure.desc)}' + + "".join(body) + + "" + ) + + +# Data + + +@lru_cache(maxsize=None) +def registry() -> dict: + import yaml + + with open(ROOT / "platforms" / "_registry.yml", encoding="utf-8") as handle: + return yaml.safe_load(handle).get("platforms", {}) + + +@lru_cache(maxsize=None) +def platform_modes() -> dict[str, tuple[str, str, str | None]]: + """name -> (display name, verification mode, hash rule) for every platform.""" + from common import list_registered_platforms, load_platform_config + + out: dict[str, tuple[str, str, str | None]] = {} + for name in sorted(list_registered_platforms(str(ROOT / "platforms"), include_archived=True)): + config = load_platform_config(name, str(ROOT / "platforms")) + rule = registry().get(name, {}).get("hash_rule") or config.get("hash_rule") + out[name] = (config.get("platform", name), config.get("verification_mode", ""), rule) + return out + + +def _display(name: str) -> str: + return platform_modes()[name][0] + + +def _folder(name: str) -> str: + return str(registry()[name].get("extract_to", "")).strip() + + +# Frontends and emulators shown in the explainer. Each pair is one a user +# meets together; tests check that the platform runs that emulator. +CHAIN_EXAMPLES = (("batocera", "duckstation"), ("emudeck", "pcsx2"), ("retroarch", "beetle_psx")) + + +@lru_cache(maxsize=None) +def emulator_names() -> dict[str, str]: + import yaml + + names: dict[str, str] = {} + for _, emulator in CHAIN_EXAMPLES: + with open(ROOT / "emulators" / f"{emulator}.yml", encoding="utf-8") as handle: + label = str(yaml.safe_load(handle).get("emulator", emulator)) + names[emulator] = re.sub(r"\s*\(.*\)$", "", label) + return names + + +def _bios_chain_boxes() -> list[Box]: + active = sum(1 for entry in registry().values() if entry.get("status") == "active") + frontends = [_display(platform) for platform, _ in CHAIN_EXAMPLES] + emulators = [emulator_names()[emulator] for _, emulator in CHAIN_EXAMPLES] + folders = [f"{_display(platform)}: {_folder(platform)}" for platform, _ in CHAIN_EXAMPLES] + return [ + Box("Your device", ["A PC, a Steam Deck, a handheld or a TV box"], number="1"), + Box("Frontend", [ + "The menu you pick a game from:", + f"{', '.join(frontends)} and {active - len(frontends)} more", + ], number="2"), + Box("Emulator", [ + "Starts the game and reads its BIOS:", + ", ".join(emulators), + ], number="3"), + Box("BIOS folder", folders + ["The pack or the installer fills it"], + accent=True, number="4"), + ] + + +def _install_boxes() -> list[Box]: + detected = sum(1 for entry in registry().values() if entry.get("install", {}).get("detect")) + return [ + Box("Run one command", ["The same line on Linux, macOS, Windows and handhelds"], number="1"), + Box("Find the setup", [f"Looks for {detected} frontends and their BIOS folders"], number="2"), + Box("Read the folder", ["Hashes the files already there"], number="3"), + Box("Download the rest", ["Only what is missing or different"], number="4"), + Box("Check each file", ["Its SHA-1 must match before it is saved"], accent=True, number="5"), + ] + + +MODE_TEXT = { + "existence": ("Name only", "Only the file's name and place count. Its content is not read."), + "md5": ("MD5 fingerprint", "The content must match an MD5 the platform lists."), + "sha1": ("SHA-1 fingerprint", "The content must match a SHA-1 the platform lists."), +} + + +def _mode_boxes() -> list[Box]: + by_mode: dict[str, list[str]] = {mode: [] for mode in MODE_TEXT} + for display, mode, rule in platform_modes().values(): + label = f"{display} (size, then any hash)" if rule == "size_and_any_hash" else display + by_mode.setdefault(mode, []).append(label) + boxes = [] + for mode, (title, text) in MODE_TEXT.items(): + names = sorted(by_mode.get(mode, []), key=str.casefold) + count = f"{len(names)} platform" + ("" if len(names) == 1 else "s") + boxes.append(Box(title, [text, f"{count}: " + ", ".join(names)])) + return boxes + + +def _mode_summary() -> str: + parts = [] + for mode, (title, _) in MODE_TEXT.items(): + names = sorted( + (display for display, m, _ in platform_modes().values() if m == mode), key=str.casefold + ) + parts.append(f"{title}: {', '.join(names)}.") + return " ".join(parts) + + +# MinUI names a BIOS folder after the tag in parentheses of the ROM folder. +# These are three of the tags its launch scripts read. +MINUI_EXAMPLES = (("Sony PlayStation", "PS"), ("Game Boy Advance", "GBA"), ("Sega Genesis", "MD")) + + +@lru_cache(maxsize=None) +def minui_files() -> dict[str, list[str]]: + manifest = json.loads((ROOT / "install" / "minui.json").read_text(encoding="utf-8")) + by_tag: dict[str, list[str]] = {} + for entry in manifest.get("files", []): + parts = str(entry.get("dest", "")).split("/") + if len(parts) == 3 and parts[0] == "Bios": + by_tag.setdefault(parts[1], []).append(parts[2]) + return {tag: sorted(names, key=str.casefold) for tag, names in by_tag.items()} + + +def _minui_wide() -> tuple[float, float, list[str]]: + out: list[str] = [] + left_x, right_x, row = 1.0, 430.0, 22.0 + out.append(_text(left_x, 16, "Roms/", TITLE_SIZE, True)) + out.append(_text(right_x, 16, "Bios/", TITLE_SIZE, True)) + y = 30.0 + for name, tag in MINUI_EXAMPLES: + files = minui_files().get(tag, []) + shown = files[:2] + ([f"and {len(files) - 2} more"] if len(files) > 2 else []) + height = max(row + 8, 14 + row * (1 + len(shown))) + label = f"{name} ({tag})/" + out.append(_rect(left_x + 14, y, 250, row + 8)) + out.append(_text(left_x + 24, y + 19, label, TEXT_SIZE, True)) + out.append(_rect(right_x + 14, y, 250, height)) + out.append(_text(right_x + 24, y + 19, f"{tag}/", TEXT_SIZE, True)) + for index, file_name in enumerate(shown): + out.append(_text(right_x + 40, y + 19 + row * (index + 1), file_name, TEXT_SIZE, + cls="rb-d-muted")) + out.extend(_line([(left_x + 264, y + (row + 8) / 2), (right_x + 13, y + (row + 8) / 2)])) + out.append(_text((left_x + 264 + right_x + 14) / 2, y + (row + 8) / 2 - 6, + f"tag {tag}", 11, anchor="middle", cls="rb-d-muted")) + y += height + 14 + return WIDE, y - 12, out + + +def _minui_narrow() -> tuple[float, float, list[str]]: + out: list[str] = [] + y = 1.0 + for name, tag in MINUI_EXAMPLES: + files = minui_files().get(tag, []) + out.append(_rect(1, y, NARROW - 2, 30)) + out.append(_text(11, y + 20, f"Roms/{name} ({tag})/", TEXT_SIZE, True)) + out.extend(_line([(NARROW / 2, y + 30), (NARROW / 2, y + 52)])) + out.append(_text(NARROW / 2 + 10, y + 45, f"tag {tag}", 11, cls="rb-d-muted")) + y += 54 + detail = "" + if len(files) == 1: + detail = files[0] + elif files: + detail = f"{len(files)} files, such as {files[0]}" + height = 30 + (LINE if detail else 0) + out.append(_rect(1, y, NARROW - 2, height, accent=True)) + out.append(_text(11, y + 20, f"Bios/{tag}/", TEXT_SIZE, True)) + if detail: + out.append(_text(11, y + 20 + LINE, detail, TEXT_SIZE, cls="rb-d-muted")) + y += height + 18 + return NARROW, y - 17, out + + +def _pipeline_boxes() -> list[Box]: + """The steps pipeline.py runs, read from its STEP_LABELS literal.""" + tree = ast.parse((ROOT / "scripts" / "pipeline.py").read_text(encoding="utf-8")) + for node in ast.walk(tree): + target = getattr(node, "target", None) or (getattr(node, "targets", [None]) or [None])[0] + if isinstance(target, ast.Name) and target.id == "STEP_LABELS": + labels = ast.literal_eval(node.value) + break + else: + raise RuntimeError("STEP_LABELS not found in scripts/pipeline.py") + boxes = [] + for label in labels.values(): + number, title = label.split(" ", 1) + title = title.replace("mame", "MAME").replace("fbneo", "FBNeo") + boxes.append(Box(title[0].upper() + title[1:], number=number)) + return boxes + + +def _layers(vertical: bool) -> tuple[float, float, list[str]]: + shared = Box("_shared.yml", ["Curated groups shared between platforms"]) + platform = Box("Platform files", ["Scraped from each platform"]) + profiles = Box("Emulator profiles", ["Read from emulator source code"]) + pack = Box("Pack generation", ["Platform baseline plus what its cores load"], accent=True) + zip_box = Box("One ZIP pack per platform") + out: list[str] = [] + + def place(box: Box, x: float, y: float, w: float) -> tuple[float, float, float, float]: + title_lines, body, h = _box_height(box, w) + out.extend(_draw_box(box, x, y, w, h, title_lines, body)) + return x, y, w, h + + if not vertical: + px, py, pw, ph = place(platform, 1, 1, 200) + sx, sy, sw, sh = place(shared, 1, py + ph + 26, 200) + ex, ey, ew, eh = place(profiles, 1, sy + sh + 26, 200) + out.extend(_line([(sx + sw / 2, sy), (px + pw / 2, py + ph)])) + out.extend(_line([(sx + sw / 2, sy + sh), (ex + ew / 2, ey)])) + _, _, pack_h = _box_height(pack, 200) + gx, gy, gw, gh = place(pack, 270, sy + (sh - pack_h) / 2, 200) + out.extend(_line([(px + pw, py + ph / 2), (240, py + ph / 2), (240, gy + 20), (gx - 1, gy + 20)])) + out.extend(_line([(ex + ew, ey + eh / 2), (240, ey + eh / 2), (240, gy + gh - 20), + (gx - 1, gy + gh - 20)])) + zx, zy, zw, zh = place(zip_box, 518, gy + (gh - 42) / 2, 200) + out.extend(_line([(gx + gw, gy + gh / 2), (zx - 1, gy + gh / 2)])) + return WIDE, max(ey + eh, gy + gh) + 2, out + + w = NARROW - 2 + half = (w - 14) / 2 + sx, sy, sw, sh = place(shared, 1, 1, w) + px, py, pw, ph = place(platform, 1, sy + sh + 26, half) + ex, ey, ew, eh = place(profiles, 15 + half, py, half) + out.extend(_line([(px + pw / 2, sy + sh), (px + pw / 2, py)])) + out.extend(_line([(ex + ew / 2, sy + sh), (ex + ew / 2, ey)])) + bottom = max(py + ph, ey + eh) + gx, gy, gw, gh = place(pack, 1, bottom + 26, w) + out.extend(_line([(px + pw / 2, py + ph), (px + pw / 2, gy)])) + out.extend(_line([(ex + ew / 2, ey + eh), (ex + ew / 2, gy)])) + zx, zy, zw, zh = place(zip_box, 1, gy + gh + 26, w) + out.extend(_line([(NARROW / 2, gy + gh), (NARROW / 2, zy)])) + return NARROW, zy + zh + 2, out + + +def _figures() -> dict[str, Figure]: + chain = _bios_chain_boxes + install = _install_boxes + return { + "bios-chain": Figure( + "bios-chain", + "How a BIOS file is used", + "A device runs a frontend, the frontend starts an emulator, and the emulator " + "reads BIOS files from one folder. The pack or the installer fills that folder.", + "The frontend is the menu, the emulator runs the game, and the BIOS folder is the " + "one place both look. Filling that folder is all a pack does.", + lambda: flow(chain(), False, WIDE), + lambda: flow(chain(), True, NARROW), + ), + "install-flow": Figure( + "install-flow", + "What the installer does", + "Install flow: run the command, the installer finds your setup, reads the BIOS " + "folder, downloads what is missing or different, then checks each file before " + "saving it.", + "Running the command again repeats the same steps and downloads only what changed.", + lambda: flow(install(), False, WIDE), + lambda: flow(install(), True, NARROW), + ), + "verification-modes": Figure( + "verification-modes", + "How each platform checks a file", + "Three ways platforms check a BIOS file. " + _mode_summary(), + "Each platform's own check, read from its source code. A file that passes on one " + "platform can be refused on another.", + lambda: columns(_mode_boxes(), False, WIDE), + lambda: columns(_mode_boxes(), True, NARROW), + ), + "minui-card": Figure( + "minui-card", + "MinUI card layout", + "SD card folders: the tag in parentheses of each Roms folder, such as PS, names " + "the matching folder under Bios.", + "The folder under Bios takes the tag in parentheses of the ROM folder, not its " + "full name. Files listed are the ones the MinUI pack puts there.", + _minui_wide, + _minui_narrow, + ), + "pipeline": Figure( + "pipeline", + "Pipeline steps", + "The pipeline runs its steps in order: " + + ", ".join(f"{b.number} {b.title}" for b in _pipeline_boxes()) + ".", + "Read from the step list in scripts/pipeline.py, numbered as the run prints them.", + lambda: grid(_pipeline_boxes(), 4, WIDE), + lambda: grid(_pipeline_boxes(), 2, NARROW), + ), + "data-layers": Figure( + "data-layers", + "Three layers of data", + "Platform files and emulator profiles both feed pack generation, _shared.yml " + "adds curated groups to both, and pack generation writes one ZIP per platform.", + "The platform's list is the baseline, the profiles add what the cores load.", + lambda: _layers(False), + lambda: _layers(True), + ), + } + + +@lru_cache(maxsize=None) +def figures() -> dict[str, Figure]: + return _figures() + + +IMAGE_IDS = ("bios-chain", "install-flow", "verification-modes", "minui-card", "pipeline", "data-layers") + +# Entities for the characters Markdown reads as syntax, for a figure that +# lands indented (in a list, a tab or an admonition), where it is parsed as +# inline text rather than kept as a raw HTML block. +_INLINE_ESCAPES = str.maketrans({"_": "_", "*": "*", "`": "`", "[": "[", "]": "]"}) + + +def figure_html(image_id: str, occurrence: int = 1, inline: bool = False) -> str: + figure = figures()[image_id] + suffix = "" if occurrence == 1 else f"-{occurrence}" + drawings = svg(figure, "wide", suffix) + svg(figure, "narrow", suffix) + caption = escape(figure.caption) + anchor = f"rb-fig-{image_id}{suffix}" + if inline: + html = ( + f'' + f'{drawings}{caption}' + ) + return html.translate(_INLINE_ESCAPES) + return ( + f'
\n' + f"{drawings}\n" + f"
{caption}
\n" + "
" + ) + + +def resolve_images(markdown: str) -> str: + """Replace each image placeholder line with its figure. + + An unknown id is left in place: validate_site reports the comment in the + built page, and the test of placeholders names it. + """ + if "\n\ntext\n\n\n" + ) + ids = re.findall(r'\bid="([^"]+)"', page) + self.assertEqual(len(ids), len(set(ids))) + + +class PlaceholdersResolve(unittest.TestCase): + """A page asks for a diagram by id. A name no function answers stays a + comment, which validate_site reports in the built page.""" + + def test_every_placeholder_in_the_sources_names_a_diagram(self): + sources = [*sorted((ROOT / "wiki").glob("*.md")), *sorted((ROOT / "scripts").glob("*.py"))] + found = 0 + for path in sources: + text = path.read_text(encoding="utf-8") + for image_id in sitediagrams.PLACEHOLDER_ANYWHERE.findall(text): + found += 1 + with self.subTest(page=path.name, image=image_id): + self.assertIn(image_id, sitediagrams.IMAGE_IDS) + self.assertGreater(found, 0) + + def test_a_block_placeholder_becomes_a_figure(self): + page = sitediagrams.resolve_images("Intro\n\n\n\nMore\n") + self.assertIn('
\n") + line = page.splitlines()[2] + self.assertTrue(line.startswith(" list[dict]: + path = ROOT / "docs_assets" / folder / "sources.json" + return json.loads(path.read_text(encoding="utf-8"))["images"] + + def test_every_registry_logo_has_a_local_copy(self): + import yaml + + registry = yaml.safe_load((ROOT / "platforms" / "_registry.yml").read_text())["platforms"] + copies = {entry["platform"]: entry for entry in self._manifest("logos")} + for name, entry in registry.items(): + if not entry.get("logo"): + continue + with self.subTest(platform=name): + self.assertIn(name, copies, "run scripts/fetch_site_images.py --only logos") + self.assertEqual(copies[name]["source"], entry["logo"]) + self.assertTrue((ROOT / "docs_assets" / "logos" / copies[name]["file"]).is_file()) + self.assertTrue(copies[name]["owner"] and copies[name]["licence"]) + + def test_every_recorded_icon_exists(self): + for entry in self._manifest("system-icons"): + with self.subTest(icon=entry["file"]): + self.assertTrue((ROOT / "docs_assets" / "system-icons" / entry["file"]).is_file()) + + def test_remote_links_with_a_copy_are_rewritten(self): + logo = self._manifest("logos")[0] + page = f"| ![X]({logo['source']}){{ width=20 }} | |" + local = sitediagrams.localize_images(page, Path("platforms/x.md")) + self.assertNotIn(logo["source"], local) + self.assertEqual(local.count(f"../assets/logos/{logo['file']}"), 2) + + def test_icon_paths_are_link_safe(self): + icon = self._manifest("system-icons")[0] + local = sitediagrams.localize_images(f"![a]({icon['source']})", Path("systems/x.md")) + self.assertNotIn(" ", local) + + def test_the_validator_refuses_a_remote_image(self): + from validate_site import _parse_page + + with tempfile.TemporaryDirectory(dir=ROOT / "tests") as tmp: + path = Path(tmp) / "index.html" + path.write_text( + 'x' + 'y' + ) + page = _parse_page(path) + self.assertEqual(page.remote_images, ["https://example.org/a.png"]) + self.assertEqual(page.placeholders, ["nope"]) + + +class SharingCards(unittest.TestCase): + def test_one_card_per_section_at_the_open_graph_size(self): + import struct + + for section in sitediagrams.OG_SECTIONS: + with self.subTest(section=section): + data = (ROOT / "docs_assets" / "og" / f"{section}.png").read_bytes() + self.assertEqual(data[:8], b"\x89PNG\r\n\x1a\n") + self.assertEqual(struct.unpack(">II", data[16:24]), (1200, 630)) + ET.fromstring(sitediagrams.og_card_svg(section, b"png")) + + def test_the_template_names_every_section(self): + template = (ROOT / "docs_assets" / "overrides" / "main.html").read_text(encoding="utf-8") + named = set(re.findall(r"section = '([a-z]+)'", template)) + self.assertEqual(named, set(sitediagrams.OG_SECTIONS)) + + +class ImagesStillNeeded(unittest.TestCase): + """Screens that need a real device are listed, never drawn as a mock-up.""" + + def test_the_list_gives_each_capture_its_alt_text(self): + text = (ROOT / "docs_assets" / "images-needed.md").read_text(encoding="utf-8") + entries = re.findall(r"(?m)^## ", text) + self.assertGreater(len(entries), 3) + self.assertEqual(len(entries), len(re.findall(r"(?m)^\*\*Alt text\*\*", text))) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_site_render.py b/tests/test_site_render.py index 8f7dd3b1..78d9aeb5 100644 --- a/tests/test_site_render.py +++ b/tests/test_site_render.py @@ -1,15 +1,10 @@ -"""Renderings shared by the site pages, and the icon cache they read. - -No network: icon checks are answered by a stub. -""" +"""Renderings shared by the site pages, and the icon copies they read.""" from __future__ import annotations -import json import sys import tempfile import unittest -import urllib.error from pathlib import Path from unittest import mock @@ -19,65 +14,32 @@ sys.path.insert(0, str(REPO_ROOT / "scripts")) import siterender # noqa: E402 -class _Served: - status = 200 - - def __enter__(self) -> "_Served": - return self - - def __exit__(self, *exc: object) -> None: - return None - - -class IconCacheIsReplacedWhole(unittest.TestCase): - """The cache was truncated then dumped in place: a concurrent reader saw - half a file, took it for empty, and an offline run then wrote ``{}`` - over every recorded icon.""" +class IconsComeFromTheLocalCopies(unittest.TestCase): + """Icons were checked against upstream with a HEAD request per system on + every build, and linked from a branch tip. The build now reads the copies + in docs_assets/system-icons and makes no request.""" def setUp(self) -> None: - tmp = tempfile.TemporaryDirectory() - self.addCleanup(tmp.cleanup) - self.path = Path(tmp.name) / "system_icons.json" - patcher = mock.patch.object(siterender, "ICON_CACHE_PATH", self.path) - patcher.start() - self.addCleanup(patcher.stop) saved = dict(siterender._icon_available) self.addCleanup(lambda: (siterender._icon_available.clear(), siterender._icon_available.update(saved))) - def test_an_offline_run_leaves_an_unreadable_cache_untouched(self): - self.path.write_text('{"Sega - Mega Drive": tr') - offline = mock.patch.object( - siterender.urllib.request, "urlopen", - side_effect=urllib.error.URLError("offline")) - with offline, mock.patch("sys.stderr"), mock.patch("builtins.print"): - siterender.prime_system_icons({"Sega - Mega Drive"}) - self.assertEqual(self.path.read_text(), '{"Sega - Mega Drive": tr') - - def test_names_another_run_recorded_meanwhile_are_kept(self): - self.path.write_text(json.dumps({"A - One": True})) - - def answer(*_args: object, **_kwargs: object) -> _Served: - # A second build records its own check while this one runs. - self.path.write_text(json.dumps({"A - One": True, "C - Three": False})) - return _Served() - - with mock.patch.object(siterender.urllib.request, "urlopen", side_effect=answer), \ + def test_availability_is_the_folder(self): + tmp = tempfile.TemporaryDirectory() + self.addCleanup(tmp.cleanup) + folder = Path(tmp.name) / "docs_assets" / "system-icons" + folder.mkdir(parents=True) + (folder / "A - One.png").write_bytes(b"png") + with mock.patch.object(siterender, "ICON_DIR", folder), \ mock.patch("builtins.print"): siterender.prime_system_icons({"A - One", "B - Two"}) - self.assertEqual(json.loads(self.path.read_text()), - {"A - One": True, "B - Two": True, "C - Three": False}) - self.assertEqual(sorted(p.name for p in self.path.parent.iterdir()), - ["system_icons.json"]) + self.assertTrue(siterender._icon_available["A - One"]) + self.assertFalse(siterender._icon_available["B - Two"]) + self.assertEqual(siterender.system_icon_markdown("B", "Two"), "") + self.assertIn("A%20-%20One.png", siterender.system_icon_markdown("A", "One")) - def test_the_write_goes_through_a_scratch_file(self): - with mock.patch.object(siterender.urllib.request, "urlopen", - return_value=_Served()), \ - mock.patch.object(siterender, "write_text_atomic", - wraps=siterender.write_text_atomic) as atomic, \ - mock.patch("builtins.print"): - siterender.prime_system_icons({"B - Two"}) - atomic.assert_called_once() + def test_no_request_is_made(self): + self.assertNotIn("urllib.request", (REPO_ROOT / "scripts" / "siterender.py").read_text()) class EveryPageAddressesPlatformsAsPeers(unittest.TestCase): diff --git a/wiki/architecture.md b/wiki/architecture.md index dc301edf..afc88564 100644 --- a/wiki/architecture.md +++ b/wiki/architecture.md @@ -106,26 +106,7 @@ MAME/FBNeo hashes, verify, packs, install manifests, target manifests, consistency check, pack integrity, README, site. See [tools](tools.md) for the full pipeline reference. -```mermaid -graph LR - A[generate_db] --> A2[provenance report] - A2 --> B[refresh_data_dirs] - B --> C[MAME/FBNeo hashes] - C --> D[verify --all] - D --> E[generate_pack --all] - E --> F[install manifests] - F --> G[target manifests] - G --> H[consistency check] - H --> H2[pack integrity] - H2 --> I[generate_readme] - I --> J[generate_site] - - style A fill:#2d333b,stroke:#adbac7,color:#adbac7 - style D fill:#2d333b,stroke:#adbac7,color:#adbac7 - style E fill:#2d333b,stroke:#adbac7,color:#adbac7 - style H2 fill:#2d333b,stroke:#adbac7,color:#adbac7 - style J fill:#2d333b,stroke:#adbac7,color:#adbac7 -``` + ## Three layers of data @@ -168,20 +149,7 @@ platform itself declares: the export, the truth diff and the site's comparison tables. Counted as the platform's, they were written into System.dat as if libretro had declared them. -```mermaid -graph TD - PY[Platform YAML
scraped from upstream] --> PG[Pack generation] - EP[Emulator profiles
source-verified] --> PG - SH[_shared.yml
curated shared files] --> PY - SH --> EP - PG --> ZIP[ZIP pack per platform] - - style PY fill:#2d333b,stroke:#adbac7,color:#adbac7 - style EP fill:#2d333b,stroke:#adbac7,color:#adbac7 - style SH fill:#2d333b,stroke:#adbac7,color:#adbac7 - style PG fill:#2d333b,stroke:#adbac7,color:#adbac7 - style ZIP fill:#2d333b,stroke:#adbac7,color:#adbac7 -``` + ## The inverted model diff --git a/wiki/testing-guide.md b/wiki/testing-guide.md index fcb8793f..00774d9b 100644 --- a/wiki/testing-guide.md +++ b/wiki/testing-guide.md @@ -47,7 +47,7 @@ Every module in `tests/`, by the area it guards. | Handheld port | stubbed PortMaster dialogs, fake installer | `test_port` | | Truth and native export | synthetic + cached originals | `test_export_counts`, `test_export_native_layer`, `test_export_report`, `test_exporters`, `test_truth_data_dir_readers`, `test_truth_diff`, `test_truth_layout` | | Scrapers, upstream and provenance | inline sources, synthetic | `test_check_freshness`, `test_dedup`, `test_elec_scrapers`, `test_fbneo_parser`, `test_find_pinned_revision`, `test_hash_merge`, `test_launchers`, `test_launchers_emudeck`, `test_launchers_recalbox`, `test_launchers_retrobat`, `test_launchers_retrodeck`, `test_launchers_retropie`, `test_launchers_rocknix`, `test_mame_devices`, `test_mame_parser`, `test_mame_ref_audit`, `test_profile_sync`, `test_provenance`, `test_refresh_data_dirs`, `test_refresh_failures`, `test_refresh_stale`, `test_retrodeck_scraper_errors`, `test_romset_recipes`, `test_scraper_contract`, `test_upstream`, `test_upstream_index` | -| Site, docs and repository contracts | rendered pages, sources | `test_contributing_text`, `test_data_dir_refs`, `test_dataclass_defaults`, `test_doc_pages`, `test_doc_surfaces`, `test_optional_dependencies`, `test_prose_style`, `test_site_availability`, `test_site_cores`, `test_site_emulator_page`, `test_site_exports`, `test_site_platform_hashes`, `test_site_render`, `test_site_system_links`, `test_site_validation`, `test_site_write`, `test_validate_pr`, `test_validate_pr_flow`, `test_validate_pr_hashes`, `test_workflow_paths` | +| Site, docs and repository contracts | rendered pages, sources | `test_contributing_text`, `test_data_dir_refs`, `test_dataclass_defaults`, `test_doc_pages`, `test_doc_surfaces`, `test_optional_dependencies`, `test_prose_style`, `test_site_availability`, `test_site_cores`, `test_site_emulator_page`, `test_site_exports`, `test_site_images`, `test_site_platform_hashes`, `test_site_render`, `test_site_system_links`, `test_site_validation`, `test_site_write`, `test_validate_pr`, `test_validate_pr_flow`, `test_validate_pr_hashes`, `test_workflow_paths` | ## Test architecture diff --git a/wiki/verification-modes.md b/wiki/verification-modes.md index 112cc9ba..19f39e42 100644 --- a/wiki/verification-modes.md +++ b/wiki/verification-modes.md @@ -3,6 +3,7 @@ Each platform verifies BIOS files differently. `verify.py` replicates the native behavior of each platform so that verification results match what the platform itself would report. + ## Existence mode