{"id":19517982,"url":"https://github.com/henrybarreto/advanced","last_synced_at":"2025-02-26T00:13:21.709Z","repository":{"id":179278444,"uuid":"662800966","full_name":"henrybarreto/advanced","owner":"henrybarreto","description":"It's an experimental and learning propose libRetro front-end to mGBA.","archived":false,"fork":false,"pushed_at":"2025-02-09T02:25:41.000Z","size":105,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-24T05:55:56.880Z","etag":null,"topics":["bevy","libretro","mgba","pixels"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/henrybarreto.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-07-05T23:26:36.000Z","updated_at":"2025-02-09T02:25:44.000Z","dependencies_parsed_at":"2023-11-15T21:26:25.708Z","dependency_job_id":"24635329-f7a6-402e-b98a-3cc428a3c072","html_url":"https://github.com/henrybarreto/advanced","commit_stats":null,"previous_names":["henrybarreto/advanced"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henrybarreto%2Fadvanced","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henrybarreto%2Fadvanced/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henrybarreto%2Fadvanced/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henrybarreto%2Fadvanced/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/henrybarreto","download_url":"https://codeload.github.com/henrybarreto/advanced/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240766610,"owners_count":19854119,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bevy","libretro","mgba","pixels"],"created_at":"2024-11-11T00:07:48.423Z","updated_at":"2025-02-26T00:13:21.682Z","avatar_url":"https://github.com/henrybarreto.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Advanced\n\n```\n              _                               _ \n     /\\      | |                             | |\n    /  \\   __| |_   ____ _ _ __   ___ ___  __| |\n   / /\\ \\ / _` \\ \\ / / _` | '_ \\ / __/ _ \\/ _` |\n  / ____ \\ (_| |\\ V / (_| | | | | (_|  __/ (_| |\n /_/    \\_\\__,_| \\_/ \\__,_|_| |_|\\___\\___|\\__,_|\n\n```\n\nIt's an experimental and learning propose libRetro front-end to mGBA.\n\nThe primary goal of this experiment was to learn the fundamentals of Rust and C\nintegration through shared libraries, while also delving into the world of game\nemulation.\n\n## Results\n\nThe experiment successfully integrated the mGBA emulator with the libRetro\nfrontend in Rust, enabling the running of Game Boy Advance (GBA) games through\nthe libRetro API. The project demonstrated the capability to:\n\n- Load and run GBA ROMs using retro_load_game.\n- Capture and refresh video frames in the correct format for rendering.\n- Support user input through.\n- Save and load emulator states to/from disk, allowing for game state persistence.\n\nThe main challenge involved handling the different pixel formats between the\nmGBA core and libRetro, which was resolved by implementing a pixel format\nconverter to transform RGB565 into XRGB8888. Additionally, managing safe access\nto shared state data (such as button presses and video/audio frames) using\nRust's Cell and Unsafe blocks ensured a performant and functional emulator\nfrontend.\n\nOverall, the project met its objectives in both understanding Rust and C\nintegration and creating a working libRetro frontend for the mGBA emulator.\n\n## How to run it?\n\nIf you'd like to run it, you'll need:\n\n- `libretro.so` in `./lib` on the repository\n- `libretro.so` into some LD directory\n- A GBA ROM into the current directory with the name `test.gba`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhenrybarreto%2Fadvanced","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhenrybarreto%2Fadvanced","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhenrybarreto%2Fadvanced/lists"}