{"id":18707307,"url":"https://github.com/gboncoffee/ggb86","last_synced_at":"2025-11-09T08:30:38.973Z","repository":{"id":207097479,"uuid":"718404461","full_name":"gboncoffee/ggb86","owner":"gboncoffee","description":"Simple bootloader for x86 machines and the FAT 32 filesystem.","archived":false,"fork":false,"pushed_at":"2024-10-14T13:49:23.000Z","size":10,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-28T07:20:22.046Z","etag":null,"topics":["assembly","bios","bootloader","operating-system","x86","x86-64"],"latest_commit_sha":null,"homepage":"","language":"Assembly","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gboncoffee.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-14T02:12:20.000Z","updated_at":"2024-10-14T13:49:27.000Z","dependencies_parsed_at":"2024-09-15T23:44:22.219Z","dependency_job_id":"04d9044f-431f-48dd-bf0f-595ad9e6247f","html_url":"https://github.com/gboncoffee/ggb86","commit_stats":null,"previous_names":["gboncoffee/ggb86"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gboncoffee%2Fggb86","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gboncoffee%2Fggb86/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gboncoffee%2Fggb86/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gboncoffee%2Fggb86/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gboncoffee","download_url":"https://codeload.github.com/gboncoffee/ggb86/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239571540,"owners_count":19661164,"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":["assembly","bios","bootloader","operating-system","x86","x86-64"],"created_at":"2024-11-07T12:17:26.536Z","updated_at":"2025-11-09T08:30:38.941Z","avatar_url":"https://github.com/gboncoffee.png","language":"Assembly","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GGB86 - Gabriel's Good Bootloader for x86\n\nSimple bootloader for x86 machines and the FAT 32 filesystem. Loads kernels from\nthe boot disk, from reserved FAT 32 sectors to the `0x1000` address, switches to\n32 bit protected mode and transfers control to the kernel.\n\nA dumb kernel is included for testing.\n\n## Quickstart\n\nYou'll need the Netwide Assembler (NASM) and the GNU C toolchain (GCC, LD and\nMake) to build. Also, your system needs a `cat` implementation in the `$PATH`.\n\nUse `make` to create everything: the bootloader and the dumb kernel, with both\nlinked in the `os_image32.img` file. The `bios_x86` file is just the MBR boot\nsector (i.e., the bootloader itself) and FAT boilerplate and the `kernel32` is\njust the compiled kernel.\n\nThe script `boot.sh` launches the image in a QEMU-KVM virtual machine.\n\n## How it works\n\nThe FAT filesystem itself has as header a `jmp` instruction so bootloaders keep\nworking (I don't know if they would be very useful otherwise...). So the first\nsector of the disk image has the FAT stuff and the bootloader. In the FAT\nmetadata, 32 sectors are reserved, being the first three:\n\n- First: FAT metadata and the bootloader;  \n- Second: FSInfo struct of FAT 32;  \n- Third: Reserved for the root directory.\n\nThe remaining 29 are reserved for the kernel, which could also be a second stage\nbootloader. The entry of the kernel should of course be at the start of the\nfourth sector, as the bootloader loads those 8 sectors to the address `0x1000`\nand simply jumps there.\n\n## TODO\n\n- Change from NASM to GNU AS.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgboncoffee%2Fggb86","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgboncoffee%2Fggb86","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgboncoffee%2Fggb86/lists"}