Projekt CAMLBOY je Game Boy emulátor napsaný v OCaml, který běží v prohlížeči a na mobilech při 60 FPS.
Autor si vybral emulátor pro středně rozsáhlý projekt s jasnou specifikací a praktickým využitím pokročilých funkcí OCaml.
Architektura emulátoru obsahuje synchronizovanou hlavní smyčku, kde CPU, timer a GPU postupují podle počtu cyklů.
Komunikační rozhraní mezi moduly využívá signatury Addressable_intf.S pro 8bitové a Word_addressable_intf.S pro 16bitové operace.
Bus moduluje čtení a zápis dat podle adresy a směruje je na příslušné hardwarové moduly.
Pro lepší testovatelnost byla CPU refaktorována jako funktor, který přijímá abstraktní rozhraní busu.
Instrukční sada Game Boy je v OCaml implementována pomocí GADT, což umožňuje typově bezpečné zpracování argumentů.
Integrace testů pomocí test ROMů a ppx_expect zajišťuje regresní testování a podporuje explorativní vývoj.
Kompilace do JavaScriptu přes js_of_ocaml a knihovnu Brr umožnila snadné nasazení v prohlížeči.
Optimalizace na základě profilování (GPU, timer, tile_data, tile_map, Bigstringaf.unsafe_get) zvedla výkon z 20 FPS na 60–100 FPS v prohlížeči.
Benchmarky ukázaly rozdíly výkonu mezi různými OCaml backendy a režimy kompilace.
Autor oceňuje zlepšenou OCaml ekosystém (dune, Merlin, OCamlformat) a sílu statického typového systému s moduly.
Jako zdroje doporučuje Learn OCaml Workshop, Real World OCaml a dokumentaci o Game Boy architektuře a instrukční sadě.
Get notified when new stories are published for "🇨🇿 Hacker News Čeština "