From a6150a43bd4622df7541780018d1d6f2e839ea07 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Wed, 25 Mar 2026 15:29:58 +0100 Subject: [PATCH] feat: group emulators by classification, slim mkdocs nav, add pymdownx extensions --- mkdocs.yml | 491 ++++++++++++++++++++++++--------------- scripts/generate_site.py | 192 +++++++++++---- 2 files changed, 456 insertions(+), 227 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index b8c4fbdb..3369ae21 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -24,6 +24,7 @@ theme: - navigation.tabs - navigation.sections - navigation.top + - navigation.indexes - search.suggest - search.highlight - content.tabs.link @@ -32,8 +33,13 @@ markdown_extensions: - tables - admonition - attr_list +- md_in_html - toc: permalink: true +- pymdownx.details +- pymdownx.superfences +- pymdownx.tabbed: + alternate_style: true plugins: - search nav: @@ -46,6 +52,7 @@ nav: - Recalbox: platforms/recalbox.md - RetroArch: platforms/retroarch.md - RetroBat: platforms/retrobat.md + - RetroDECK: platforms/retrodeck.md - RetroPie: platforms/retropie.md - Systems: - Overview: systems/index.md @@ -56,6 +63,7 @@ nav: - Apple: systems/apple.md - Arcade: systems/arcade.md - Atari: systems/atari.md + - BBK: systems/bbk.md - Bally: systems/bally.md - Bandai: systems/bandai.md - Bit Corporation: systems/bit-corporation.md @@ -79,20 +87,27 @@ nav: - GamePark: systems/gamepark.md - Grundy: systems/grundy.md - Hartung: systems/hartung.md + - IBM: systems/ibm.md - Id Software: systems/id-software.md - Infocom: systems/infocom.md - Java: systems/java.md + - Jupiter: systems/jupiter.md + - Lambda: systems/lambda.md + - Lexaloffle: systems/lexaloffle.md - Magnavox: systems/magnavox.md - Mattel: systems/mattel.md + - Microdigital: systems/microdigital.md - Microsoft: systems/microsoft.md - NEC: systems/nec.md - Nintendo: systems/nintendo.md - Nokia: systems/nokia.md - Oric: systems/oric.md + - Other: systems/other.md - Palm: systems/palm.md - Philips: systems/philips.md - Pioneer: systems/pioneer.md - RPG Maker: systems/rpg-maker.md + - Ringo: systems/ringo.md - SNK: systems/snk.md - ScummVM: systems/scummvm.md - Sega: systems/sega.md @@ -103,6 +118,7 @@ nav: - Tandy: systems/tandy.md - Texas Instruments: systems/texas-instruments.md - Tiger: systems/tiger.md + - Timex: systems/timex.md - Tomy: systems/tomy.md - VTech: systems/vtech.md - Videoton: systems/videoton.md @@ -111,192 +127,291 @@ nav: - xrick: systems/xrick.md - Emulators: - Overview: emulators/index.md - - '2048': emulators/2048.md - - 3DEngine: emulators/3dengine.md - - EightyOne: emulators/81.md - - a5200: emulators/a5200.md - - amiarcadia: emulators/amiarcadia.md - - Anarch: emulators/anarch.md - - AppleWin: emulators/applewin.md - - Ardens: emulators/ardens.md - - Arduous: emulators/arduous.md - - Atari800: emulators/atari800.md - - b2: emulators/b2.md - - Beetle Lynx (Mednafen Lynx): emulators/beetle_lynx.md - - Beetle NGP (Mednafen Neo Geo Pocket): emulators/beetle_ngp.md - - Beetle PCE (Mednafen PCE): emulators/beetle_pce.md - - Beetle PC-FX (Mednafen): emulators/beetle_pcfx.md - - Beetle PSX (Mednafen PSX): emulators/beetle_psx.md - - Beetle Saturn (Mednafen): emulators/beetle_saturn.md - - Beetle VB (Mednafen Virtual Boy): emulators/beetle_vb.md - - Beetle WonderSwan (Mednafen WonderSwan): emulators/beetle_wswan.md - - BennuGD: emulators/bennugd.md - - bk-emulator: emulators/bk.md - - BlastEm: emulators/blastem.md - - blueMSX: emulators/bluemsx.md - - bnes: emulators/bnes.md - - boom3: emulators/boom3.md - - Boytacean: emulators/boytacean.md - - bsnes: emulators/bsnes.md - - Cannonball: emulators/cannonball.md - - Caprice32: emulators/cap32.md - - Cemu: emulators/cemu.md - - ChaiLove: emulators/chailove.md - - Citra / Lime3DS / Azahar: emulators/citra.md - - ClownMDEmu: emulators/clownmdemu.md - - Craft: emulators/craft.md - - CrocoDS: emulators/crocods.md - - Cruzes: emulators/cruzes.md - - Daphne: emulators/daphne.md - - DeSmuME: emulators/desmume.md - - DICE: emulators/dice.md - - Dinothawr: emulators/dinothawr.md - - DirectXBox: emulators/directxbox.md - - Dolphin: emulators/dolphin.md - - Dolphin Launcher: emulators/dolphin_launcher.md - - DOSBox-core: emulators/dosbox_core.md - - DOSBox Pure: emulators/dosbox_pure.md - - DoubleCherryGB: emulators/doublecherrygb.md - - doukutsu-rs: emulators/doukutsu_rs.md - - DuckStation: emulators/duckstation.md - - EasyRPG Player: emulators/easyrpg.md - - ECWolf: emulators/ecwolf.md - - EmuSCV: emulators/emuscv.md - - emux (CHIP-8): emulators/emux_chip8.md - - ep128emu-core: emulators/ep128emu.md - - FAKE-08: emulators/fake08.md - - FinalBurn Neo: emulators/fbneo.md - - FCEUmm: emulators/fceumm.md - - FFmpeg: emulators/ffmpeg.md - - fixGB: emulators/fixgb.md - - Flycast: emulators/flycast.md - - fMSX: emulators/fmsx.md - - FreeChaF: emulators/freechaf.md - - FreeIntv: emulators/freeintv.md - - FreeIntv (Touchscreen Overlay): emulators/freeintv_ts_overlay.md - - FreeJ2ME: emulators/freej2me.md - - Frodo: emulators/frodo.md - - Fuse: emulators/fuse.md - - galaksija: emulators/galaksija.md - - GAM4980: emulators/gam4980.md - - Gambatte: emulators/gambatte.md - - Gearcoleco: emulators/gearcoleco.md - - Geargrafx: emulators/geargrafx.md - - Gearlynx: emulators/gearlynx.md - - Gearsystem: emulators/gearsystem.md - - Genesis Plus GX: emulators/genesis_plus_gx.md - - Geolith: emulators/geolith.md - - Game Music Emu: emulators/gme.md - - Gong: emulators/gong.md - - gpSP: emulators/gpsp.md - - Game & Watch: emulators/gw.md - - Handy: emulators/handy.md - - Hatari: emulators/hatari.md - - HBMAME (Homebrew MAME): emulators/hbmame.md - - Holani: emulators/holani.md - - Image Viewer: emulators/imageviewer.md - - Ishiiruka: emulators/ishiiruka.md - - JAXE: emulators/jaxe.md - - JollyCV: emulators/jollycv.md - - Jump 'n Bump: emulators/jumpnbump.md - - Kronos: emulators/kronos.md - - LowRes NX: emulators/lowresnx.md - - Lutro: emulators/lutro.md - - M2000: emulators/m2000.md - - MAME 2003-Plus: emulators/mame2003_plus.md - - MAME 2010: emulators/mame2010.md - - MAME 2016: emulators/mame2016.md - - MCSoftserve: emulators/mcsoftserve.md - - MelonDS: emulators/melonds.md - - Mesen: emulators/mesen.md - - Meteor GBA: emulators/meteor.md - - mGBA: emulators/mgba.md - - Mini vMac: emulators/minivmac.md - - mkxp-z: emulators/mkxp_z.md - - MojoZork: emulators/mojozork.md - - Moonlight: emulators/moonlight.md - - mpv: emulators/mpv.md - - Mr.Boom: emulators/mrboom.md - - Mu: emulators/mu.md - - Mupen64Plus-Next: emulators/mupen64plus.md - - NeoCD: emulators/neocd.md - - Nestopia UE: emulators/nestopia.md - - NooDS: emulators/noods.md - - NP2kai: emulators/np2kai.md - - Numero: emulators/numero.md - - NXEngine: emulators/nxengine.md - - O2EM: emulators/o2em.md - - Oberon: emulators/oberon.md - - ONScripter: emulators/onscripter.md - - ONScripter Yuri: emulators/onsyuri.md - - OpenLara: emulators/openlara.md - - OpenTyrian: emulators/opentyrian.md - - Opera (4DO): emulators/opera.md - - Panda3DS: emulators/panda3ds.md - - Pascal Pong: emulators/pascal_pong.md - - PCem: emulators/pcem.md - - PCSX2: emulators/pcsx2.md - - PCSX-ReARMed: emulators/pcsx_rearmed.md - - PD777: emulators/pd777.md - - PicoDrive: emulators/picodrive.md - - Play!: emulators/play.md - - PocketCDG: emulators/pocketcdg.md - - PokeMini: emulators/pokemini.md - - PPSSPP: emulators/ppsspp.md - - PrBoom: emulators/prboom.md - - ProSystem: emulators/prosystem.md - - PUAE (P-UAE): emulators/puae.md - - PuzzleScript: emulators/puzzlescript.md - - px68k: emulators/px68k.md - - QEMU: emulators/qemu.md - - QUASI88: emulators/quasi88.md - - RACE (Neo Geo Pocket): emulators/race.md - - Redbook: emulators/redbook.md - - REminiscence: emulators/reminiscence.md - - RemoteJoy: emulators/remotejoy.md - - Retro8: emulators/retro8.md - - RetroDream: emulators/retrodream.md - - ROM Cleaner: emulators/romcleaner.md - - RPCS3: emulators/rpcs3.md - - Rustation: emulators/rustation.md - - RVVM: emulators/rvvm.md - - SAME CDi: emulators/same_cdi.md - - SameBoy: emulators/sameboy.md - - ScummVM: emulators/scummvm.md - - SDLPAL: emulators/sdlpal.md - - SimCoupe: emulators/simcp.md - - SMS Plus GX: emulators/smsplus.md - - snes9x: emulators/snes9x.md - - SquirrelJME: emulators/squirreljme.md - - Stella: emulators/stella.md - - Stone Soup: emulators/stonesoup.md - - Super Bros War: emulators/superbroswar.md - - Syobon Action: emulators/syobonaction.md - - TamaLIBretro: emulators/tamalibretro.md - - TempGBA: emulators/tempgba.md - - TGB Dual: emulators/tgbdual.md - - Theodore: emulators/theodore.md - - The Powder Toy: emulators/thepowdertoy.md - - TIC-80: emulators/tic80.md - - TyrQuake: emulators/tyrquake.md - - MicroW8: emulators/uw8.md - - UXN: emulators/uxn.md - - uzem: emulators/uzem.md - - VaporSpec: emulators/vaporspec.md - - VBA-Next: emulators/vba_next.md - - vecx: emulators/vecx.md - - VeMUlator: emulators/vemulator.md - - VICE: emulators/vice.md - - Vircon32: emulators/vircon32.md - - Virtual Jaguar: emulators/virtualjaguar.md - - VirtualXT: emulators/virtualxt.md - - Vita3K: emulators/vita3k.md - - vitaQuakeII: emulators/vitaquake2.md - - vitaQuakeIII: emulators/vitaquake3.md - - WASM-4: emulators/wasm4.md - - X Millennium: emulators/x1.md - - x64sdl: emulators/x64sdl.md - - Xemu: emulators/xemu.md - - XRick: emulators/xrick.md + - Official ports (59): + - amiarcadia: emulators/amiarcadia.md + - Amiberry: emulators/amiberry.md + - Ardens: emulators/ardens.md + - Atari800: emulators/atari800.md + - BlastEm: emulators/blastem.md + - Boytacean: emulators/boytacean.md + - bsnes: emulators/bsnes.md + - ClownMDEmu: emulators/clownmdemu.md + - CrocoDS: emulators/crocods.md + - DirkSimple: emulators/dirksimple.md + - DuckStation: emulators/duckstation.md + - emux (CHIP-8): emulators/emux_chip8.md + - emux (Game Boy): emulators/emux_gb.md + - emux (NES): emulators/emux_nes.md + - emux (SMS): emulators/emux_sms.md + - FinalBurn Neo: emulators/fbneo.md + - FinalBurn Neo (CPS-1/CPS-2): emulators/fbneo_cps12.md + - FinalBurn Neo (Neo Geo): emulators/fbneo_neogeo.md + - fixGB: emulators/fixgb.md + - fixNES: emulators/fixnes.md + - Flycast: emulators/flycast.md + - FreeJ2ME: emulators/freej2me.md + - galaksija: emulators/galaksija.md + - Gearboy: emulators/gearboy.md + - Gearcoleco: emulators/gearcoleco.md + - Geargrafx: emulators/geargrafx.md + - Gearlynx: emulators/gearlynx.md + - Gearsystem: emulators/gearsystem.md + - Geolith: emulators/geolith.md + - Holani: emulators/holani.md + - JAXE: emulators/jaxe.md + - JollyCV: emulators/jollycv.md + - Kronos: emulators/kronos.md + - LowRes NX: emulators/lowresnx.md + - M2000: emulators/m2000.md + - MAME: emulators/mame.md + - MAME Arcade: emulators/mamearcade.md + - MAME MESS: emulators/mamemess.md + - Mesen: emulators/mesen.md + - mesen-s: emulators/mesen-s.md + - mGBA: emulators/mgba.md + - Mr.Boom: emulators/mrboom.md + - Panda3DS: emulators/panda3ds.md + - PicoDrive: emulators/picodrive.md + - play: emulators/play.md + - PPSSPP: emulators/ppsspp.md + - Rustation: emulators/rustation.md + - RVVM: emulators/rvvm.md + - SameBoy: emulators/sameboy.md + - sameduck: emulators/sameduck.md + - SDLPAL: emulators/sdlpal.md + - skyemu: emulators/skyemu.md + - snes9x: emulators/snes9x.md + - SquirrelJME: emulators/squirreljme.md + - VaporSpec: emulators/vaporspec.md + - VBA-M: emulators/vbam.md + - VeMUlator: emulators/vemulator.md + - Vircon32: emulators/vircon32.md + - vitaQuakeII: emulators/vitaquake2.md + - Community forks (100): + - EightyOne: emulators/81.md + - a5200: emulators/a5200.md + - Anarch: emulators/anarch.md + - AppleWin: emulators/applewin.md + - Azahar: emulators/azahar.md + - b2: emulators/b2.md + - Beetle Lynx (Mednafen Lynx): emulators/beetle_lynx.md + - Beetle NGP (Mednafen Neo Geo Pocket): emulators/beetle_ngp.md + - Beetle PCE (Mednafen PCE): emulators/beetle_pce.md + - Beetle PC-FX (Mednafen): emulators/beetle_pcfx.md + - Beetle PSX (Mednafen PSX): emulators/beetle_psx.md + - beetle_saturn: emulators/beetle_saturn.md + - Beetle VB (Mednafen Virtual Boy): emulators/beetle_vb.md + - BennuGD: emulators/bennugd.md + - bk-emulator: emulators/bk.md + - blueMSX: emulators/bluemsx.md + - bsnes-jg: emulators/bsnes-jg.md + - Caprice32: emulators/cap32.md + - ChimeraSNES: emulators/chimerasnes.md + - Citra: emulators/citra.md + - Citra Canary: emulators/citra_canary.md + - Daphne: emulators/daphne.md + - DeSmuME: emulators/desmume.md + - DICE: emulators/dice.md + - Dolphin: emulators/dolphin.md + - DOSBox: emulators/dosbox.md + - DOSBox-core: emulators/dosbox_core.md + - DOSBox-SVN: emulators/dosbox_svn.md + - DOSBox-SVN CE: emulators/dosbox_svn_ce.md + - EmuSCV: emulators/emuscv.md + - ep128emu_core: emulators/ep128emu_core.md + - FCEUmm: emulators/fceumm.md + - fMSX: emulators/fmsx.md + - Frodo: emulators/frodo.md + - FS-UAE: emulators/fsuae.md + - Fuse: emulators/fuse.md + - Gambatte: emulators/gambatte.md + - Genesis Plus GX: emulators/genesis_plus_gx.md + - gpSP: emulators/gpsp.md + - Handy: emulators/handy.md + - higan (SFC Accuracy): emulators/higan_sfc.md + - LRPS2: emulators/lrps2.md + - mednafen_pce: emulators/mednafen_pce.md + - mednafen_pce_fast: emulators/mednafen_pce_fast.md + - mednafen_supafaust: emulators/mednafen_supafaust.md + - mednafen_supergrafx: emulators/mednafen_supergrafx.md + - melonDS: emulators/melonds.md + - melonDS DS: emulators/melonds_ds.md + - Meteor GBA: emulators/meteor.md + - Mini vMac: emulators/minivmac.md + - Moonlight: emulators/moonlight.md + - mpv: emulators/mpv.md + - nekop2: emulators/nekop2.md + - nes: emulators/nes.md + - Nestopia UE: emulators/nestopia.md + - NooDS: emulators/noods.md + - Numero: emulators/numero.md + - O2EM: emulators/o2em.md + - Oberon: emulators/oberon.md + - ONScripter: emulators/onscripter.md + - Opera (4DO): emulators/opera.md + - ParaLLEl N64: emulators/parallel_n64.md + - PCem: emulators/pcem.md + - PCSX1: emulators/pcsx1.md + - PD777: emulators/pd777.md + - PokeMini: emulators/pokemini.md + - Potator: emulators/potator.md + - ProSystem: emulators/prosystem.md + - PUAE (P-UAE): emulators/puae.md + - px68k: emulators/px68k.md + - QEMU: emulators/qemu.md + - QUASI88: emulators/quasi88.md + - QuickNES: emulators/quicknes.md + - RACE (Neo Geo Pocket): emulators/race.md + - REminiscence: emulators/reminiscence.md + - RetroDream: emulators/retrodream.md + - SAME CDi: emulators/same_cdi.md + - SimCoupe: emulators/simcp.md + - swanstation: emulators/swanstation.md + - Syobon Action: emulators/syobonaction.md + - TamaLIBretro: emulators/tamalibretro.md + - TempGBA: emulators/tempgba.md + - TGB Dual: emulators/tgbdual.md + - trident: emulators/trident.md + - uae4arm: emulators/uae4arm.md + - UXN: emulators/uxn.md + - vecx: emulators/vecx.md + - VICE x128: emulators/vice_x128.md + - VICE x64: emulators/vice_x64.md + - VICE x64dtv: emulators/vice_x64dtv.md + - VICE x64sc: emulators/vice_x64sc.md + - VICE xcbm2: emulators/vice_xcbm2.md + - VICE xcbm5x0: emulators/vice_xcbm5x0.md + - VICE xpet: emulators/vice_xpet.md + - VICE xplus4: emulators/vice_xplus4.md + - VICE xscpu64: emulators/vice_xscpu64.md + - VICE xvic: emulators/vice_xvic.md + - Virtual Jaguar: emulators/virtualjaguar.md + - vitaQuakeIII: emulators/vitaquake3.md + - vitavoyager: emulators/vitavoyager.md + - Pure libretro (29): + - '2048': emulators/2048.md + - 3DEngine: emulators/3dengine.md + - Arduous: emulators/arduous.md + - Beetle WonderSwan (Mednafen WonderSwan): emulators/beetle_wswan.md + - Craft: emulators/craft.md + - Cruzes: emulators/cruzes.md + - DirectXBox: emulators/directxbox.md + - FFmpeg: emulators/ffmpeg.md + - FreeChaF: emulators/freechaf.md + - FreeIntv: emulators/freeintv.md + - GAM4980: emulators/gam4980.md + - Game Music Emu: emulators/gme.md + - Gong: emulators/gong.md + - Game & Watch: emulators/gw.md + - Image Viewer: emulators/imageviewer.md + - MCSoftserve: emulators/mcsoftserve.md + - MojoZork: emulators/mojozork.md + - Mu: emulators/mu.md + - NeoCD: emulators/neocd.md + - Pascal Pong: emulators/pascal_pong.md + - PocketCDG: emulators/pocketcdg.md + - Redbook: emulators/redbook.md + - RemoteJoy: emulators/remotejoy.md + - ROM Cleaner: emulators/romcleaner.md + - Theodore: emulators/theodore.md + - The Powder Toy: emulators/thepowdertoy.md + - MicroW8: emulators/uw8.md + - uzem: emulators/uzem.md + - VirtualXT: emulators/virtualxt.md + - Game engines (23): + - boom3: emulators/boom3.md + - Cannonball: emulators/cannonball.md + - ChaiLove: emulators/chailove.md + - Dinothawr: emulators/dinothawr.md + - doukutsu-rs: emulators/doukutsu_rs.md + - EasyRPG Player: emulators/easyrpg.md + - ECWolf: emulators/ecwolf.md + - FAKE-08: emulators/fake08.md + - Jump 'n Bump: emulators/jumpnbump.md + - Lutro: emulators/lutro.md + - mkxp-z: emulators/mkxp_z.md + - NXEngine: emulators/nxengine.md + - ONScripter Yuri: emulators/onsyuri.md + - OpenLara: emulators/openlara.md + - OpenTyrian: emulators/opentyrian.md + - PrBoom: emulators/prboom.md + - PuzzleScript: emulators/puzzlescript.md + - Retro8: emulators/retro8.md + - ScummVM: emulators/scummvm.md + - Super Bros War: emulators/superbroswar.md + - TIC-80: emulators/tic80.md + - TyrQuake: emulators/tyrquake.md + - WASM-4: emulators/wasm4.md + - Enhanced forks (12): + - bsnes-hd beta: emulators/bsnes_hd_beta.md + - bsnes-mercury: emulators/bsnes_mercury.md + - DOSBox Pure: emulators/dosbox_pure.md + - DoubleCherryGB: emulators/doublecherrygb.md + - Genesis Plus GX Wide: emulators/genesis_plus_gx_wide.md + - HBMAME (Homebrew MAME): emulators/hbmame.md + - nSide (SFC Balanced): emulators/higan_sfc_balanced.md + - Ishiiruka: emulators/ishiiruka.md + - MAME 2003-Plus: emulators/mame2003_plus.md + - Mupen64Plus-Next: emulators/mupen64plus_next.md + - NP2kai: emulators/np2kai.md + - SMS Plus GX: emulators/smsplus.md + - Frozen snapshots (32): + - bnes: emulators/bnes.md + - bsnes 2014: emulators/bsnes2014.md + - bsnes C++98: emulators/bsnes_cplusplus98.md + - CDi 2015: emulators/cdi2015.md + - Citra 2018: emulators/citra2018.md + - DeSmuME 2015: emulators/desmume2015.md + - FB Alpha 2012: emulators/fbalpha2012.md + - FB Alpha 2012 CPS-1: emulators/fbalpha2012_cps1.md + - FB Alpha 2012 CPS-2: emulators/fbalpha2012_cps2.md + - FB Alpha 2012 CPS-3: emulators/fbalpha2012_cps3.md + - FB Alpha 2012 Neo Geo: emulators/fbalpha2012_neogeo.md + - Hatari: emulators/hatari.md + - MAME 2000: emulators/mame2000.md + - MAME 2003: emulators/mame2003.md + - MAME 2003 Midway: emulators/mame2003_midway.md + - MAME 2009: emulators/mame2009.md + - MAME 2010: emulators/mame2010.md + - MAME 2015: emulators/mame2015.md + - MAME 2016: emulators/mame2016.md + - mednafen_gba: emulators/mednafen_gba.md + - mednafen_snes: emulators/mednafen_snes.md + - MESS 2015: emulators/mess2015.md + - PUAE 2021: emulators/puae2021.md + - Snes9x 2002: emulators/snes9x2002.md + - Snes9x 2005: emulators/snes9x2005.md + - Snes9x 2005 Plus: emulators/snes9x2005_plus.md + - Snes9x 2010: emulators/snes9x2010.md + - Stella 2014: emulators/stella2014.md + - Stella 2023: emulators/stella2023.md + - Stone Soup: emulators/stonesoup.md + - UME 2015: emulators/ume2015.md + - VBA-Next: emulators/vba_next.md + - Embedded HLE (1): + - PCSX-ReARMed: emulators/pcsx_rearmed.md + - Launchers (1): + - Dolphin Launcher: emulators/dolphin_launcher.md + - Other (13): + - Beetle GBA (Mednafen): emulators/beetle_gba.md + - Cemu: emulators/cemu.md + - ep128emu-core: emulators/ep128emu.md + - PCSX2: emulators/pcsx2.md + - Redream: emulators/redream.md + - RPCS3: emulators/rpcs3.md + - VBA-M: emulators/vba_m.md + - VICE: emulators/vice.md + - Vita3K: emulators/vita3k.md + - X Millennium: emulators/x1.md + - x64sdl: emulators/x64sdl.md + - Xemu: emulators/xemu.md + - XRick: emulators/xrick.md +- Cross-reference: cross-reference.md - Gap Analysis: gaps.md -- Contributing: contributing.md \ No newline at end of file +- Wiki: + - Overview: wiki/index.md + - Architecture: wiki/architecture.md + - Tools: wiki/tools.md + - Profiling guide: wiki/profiling.md + - Data model: wiki/data-model.md +- Contributing: contributing.md diff --git a/scripts/generate_site.py b/scripts/generate_site.py index 488eb8c3..f80025b9 100644 --- a/scripts/generate_site.py +++ b/scripts/generate_site.py @@ -578,39 +578,84 @@ def generate_system_page( # --------------------------------------------------------------------------- def generate_emulators_index(profiles: dict) -> str: + unique = {k: v for k, v in profiles.items() if v.get("type") not in ("alias", "test")} + aliases = {k: v for k, v in profiles.items() if v.get("type") == "alias"} + + # Group by classification + by_class: dict[str, list[tuple[str, dict]]] = {} + for name in sorted(unique.keys()): + p = unique[name] + cls = p.get("core_classification", "other") + by_class.setdefault(cls, []).append((name, p)) + + total_files = sum(len(p.get("files", [])) for p in unique.values()) + lines = [ f"# Emulators - {SITE_NAME}", "", - "| Engine | Type | Systems | Files |", - "|--------|------|---------|-------|", + f"**{len(unique)}** emulator profiles, **{total_files}** files total, **{len(aliases)}** aliases.", + "", + "| Classification | Count | Description |", + "|---------------|-------|-------------|", ] - unique = {k: v for k, v in profiles.items() if v.get("type") not in ("alias", "test")} - test_cores = {k: v for k, v in profiles.items() if v.get("type") == "test"} - aliases = {k: v for k, v in profiles.items() if v.get("type") == "alias"} + cls_desc = { + "official_port": "Same author maintains both standalone and libretro", + "community_fork": "Third-party port to libretro", + "pure_libretro": "Built for libretro, no standalone version", + "game_engine": "Game engine reimplementation", + "enhanced_fork": "Fork with added features", + "frozen_snapshot": "Frozen at an old version", + "embedded_hle": "All ROMs compiled into binary", + "launcher": "Launches an external emulator", + "other": "Unclassified", + } - for name in sorted(unique.keys()): - p = unique[name] - emu_name = p.get("emulator", name) - emu_type = p.get("type", "unknown") - systems = p.get("systems", []) - files = p.get("files", []) - sys_str = ", ".join(systems[:3]) - if len(systems) > 3: - sys_str += f" +{len(systems)-3}" + cls_order = ["official_port", "community_fork", "pure_libretro", + "game_engine", "enhanced_fork", "frozen_snapshot", + "embedded_hle", "launcher", "other"] - lines.append( - f"| [{emu_name}]({name}.md) | {emu_type} | " - f"{sys_str} | {len(files)} |" - ) + for cls in cls_order: + entries = by_class.get(cls, []) + if not entries: + continue + desc = cls_desc.get(cls, "") + anchor = cls.replace("_", "-") + lines.append(f"| [{cls}](#{anchor}) | {len(entries)} | {desc} |") + lines.append("") + + # Per-classification sections + for cls in cls_order: + entries = by_class.get(cls, []) + if not entries: + continue + lines.extend([ + f"## {cls}", + "", + "| Engine | Systems | Files |", + "|--------|---------|-------|", + ]) + + for name, p in entries: + emu_name = p.get("emulator", name) + systems = p.get("systems", []) + files = p.get("files", []) + sys_str = ", ".join(systems[:3]) + if len(systems) > 3: + sys_str += f" +{len(systems) - 3}" + lines.append( + f"| [{emu_name}]({name}.md) | {sys_str} | {len(files)} |" + ) + lines.append("") if aliases: - lines.extend(["", "## Aliases", ""]) + lines.extend(["## Aliases", ""]) lines.append("| Core | Points to |") lines.append("|------|-----------|") for name in sorted(aliases.keys()): parent = aliases[name].get("alias_of", "unknown") lines.append(f"| {name} | [{parent}]({parent}.md) |") + lines.append("") return "\n".join(lines) + "\n" @@ -1067,15 +1112,16 @@ def generate_gap_analysis( "source_ref": g["source_ref"], }) - # Build reverse map: emulator -> platforms that use it + # Build reverse map: emulator -> platforms that use it (via cores: field) + from common import resolve_platform_cores emu_to_platforms: dict[str, set[str]] = {} - for pname, pfiles in platform_files.items(): - for emu_name, emu_profile in profiles.items(): - if emu_profile.get("type") == "alias": - continue - emu_file_names = {f.get("name", "") for f in emu_profile.get("files", [])} - if emu_file_names & pfiles: - emu_to_platforms.setdefault(emu_name, set()).add(pname) + unique_profiles = {k: v for k, v in profiles.items() + if v.get("type") not in ("alias", "test")} + for pname in coverages: + config = coverages[pname]["config"] + matched = resolve_platform_cores(config, unique_profiles) + for emu_name in matched: + emu_to_platforms.setdefault(emu_name, set()).add(pname) if missing_details: req_missing = [m for m in missing_details if m["required"]] @@ -1910,10 +1956,38 @@ def generate_mkdocs_nav( system_nav.append({mfr: f"systems/{slug}.md"}) unique_profiles = {k: v for k, v in profiles.items() if v.get("type") not in ("alias", "test")} - emu_nav = [{"Overview": "emulators/index.md"}] + + # Group emulators by classification for nav + by_class: dict[str, list[tuple[str, str]]] = {} for name in sorted(unique_profiles.keys()): - display = unique_profiles[name].get("emulator", name) - emu_nav.append({display: f"emulators/{name}.md"}) + p = unique_profiles[name] + cls = p.get("core_classification", "other") + display = p.get("emulator", name) + by_class.setdefault(cls, []).append((display, f"emulators/{name}.md")) + + # Classification display names + cls_labels = { + "pure_libretro": "Pure libretro", + "official_port": "Official ports", + "community_fork": "Community forks", + "frozen_snapshot": "Frozen snapshots", + "enhanced_fork": "Enhanced forks", + "game_engine": "Game engines", + "embedded_hle": "Embedded HLE", + "launcher": "Launchers", + "other": "Other", + } + + emu_nav: list = [{"Overview": "emulators/index.md"}] + for cls in ["official_port", "community_fork", "pure_libretro", + "game_engine", "enhanced_fork", "frozen_snapshot", + "embedded_hle", "launcher", "other"]: + entries = by_class.get(cls, []) + if not entries: + continue + label = cls_labels.get(cls, cls) + sub = [{display: path} for display, path in entries] + emu_nav.append({f"{label} ({len(entries)})": sub}) wiki_nav = [ {"Overview": "wiki/index.md"}, @@ -2054,16 +2128,56 @@ def main(): nav = generate_mkdocs_nav(coverages, manufacturers, profiles) nav_yaml = yaml.dump({"nav": nav}, default_flow_style=False, sort_keys=False, allow_unicode=True) - with open("mkdocs.yml") as f: - content = f.read() - # Replace nav section (everything from \nnav: to the next top-level key or EOF) - import re - if "\nnav:" in content: - content = re.sub(r'\nnav:\n(?:[ \t]+.*\n?)*', '\n' + nav_yaml, content, count=1) - else: - content += "\n" + nav_yaml + # Rewrite mkdocs.yml entirely (static config + generated nav) + mkdocs_static = """\ +site_name: RetroBIOS +site_url: https://abdess.github.io/retrobios/ +repo_url: https://github.com/Abdess/retrobios +repo_name: Abdess/retrobios +theme: + name: material + palette: + - media: (prefers-color-scheme) + toggle: + icon: material/brightness-auto + name: Switch to light mode + - media: '(prefers-color-scheme: light)' + scheme: default + toggle: + icon: material/brightness-7 + name: Switch to dark mode + - media: '(prefers-color-scheme: dark)' + scheme: slate + toggle: + icon: material/brightness-4 + name: Switch to auto + font: false + features: + - navigation.tabs + - navigation.sections + - navigation.top + - navigation.indexes + - search.suggest + - search.highlight + - content.tabs.link + - toc.follow +markdown_extensions: +- tables +- admonition +- attr_list +- md_in_html +- toc: + permalink: true +- pymdownx.details +- pymdownx.superfences +- pymdownx.tabbed: + alternate_style: true +plugins: +- search +""" with open("mkdocs.yml", "w") as f: - f.write(content) + f.write(mkdocs_static) + f.write(nav_yaml) total_pages = ( 1 # home