{"id":20760457,"url":"https://github.com/print3m/printos","last_synced_at":"2025-04-30T05:48:11.507Z","repository":{"id":158718690,"uuid":"627109488","full_name":"Print3M/printOS","owner":"Print3M","description":"Hobby simple kernel (x86-64) and bootloader (UEFI) written in C++.","archived":false,"fork":false,"pushed_at":"2024-09-23T15:58:49.000Z","size":1491,"stargazers_count":12,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-30T05:48:04.059Z","etag":null,"topics":["bootloader","c","cpp","hobby-os","kernel","low-level-programming","os-dev","uefi","x86-64"],"latest_commit_sha":null,"homepage":"","language":"C++","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/Print3M.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-04-12T19:59:13.000Z","updated_at":"2025-01-07T09:25:46.000Z","dependencies_parsed_at":"2024-06-02T23:25:20.412Z","dependency_job_id":"f15b533f-4847-4536-8e1e-78a1bbb27f4d","html_url":"https://github.com/Print3M/printOS","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Print3M%2FprintOS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Print3M%2FprintOS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Print3M%2FprintOS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Print3M%2FprintOS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Print3M","download_url":"https://codeload.github.com/Print3M/printOS/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251651220,"owners_count":21621702,"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":["bootloader","c","cpp","hobby-os","kernel","low-level-programming","os-dev","uefi","x86-64"],"created_at":"2024-11-17T10:13:41.653Z","updated_at":"2025-04-30T05:48:11.482Z","avatar_url":"https://github.com/Print3M.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# printOS\n\n## How to setup\n\n### Requirements\n\n- NASM\n- gcc \u0026\u0026 g++\n- Qemu (`sudo apt install qemu qemu-utils qemu-system-x86 qemu-system-gui`)\n\n### Start development\n\n1. Download a GNU-EFI source code. Place it in the `bootloader/gnuefi` directory.\n2. `./init.sh`\n\n### Run OS\n\nTool chain: `./recompile.sh \u0026\u0026 ./build-img.sh \u0026\u0026 ./run.sh`\n\n## Kernel\n64-bit simple hobby kernel written in C++ for educational purpose and fun.\n![Kernel info](_img/kernel-1.png)\n\n### Features\n\n- [x] CPUID - state and features checking\n- [x] Framebuffer (double-buffering) driver, writing output, colors\n- [x] Basic read-only console (+ auto-scroll)\n- [x] GDT - flat model\n- [x] Physical memory allocator\n- [x] Virtual memory - 64-bit paging\n- [x] IDT - basic interrupts\n- [x] Very basic libc (it will be written further if needed)\n- [x] Kernel panic \u0026\u0026 asserts\n- [x] ACPI support\n- [X] Local APIC and I/O APIC support\n- [X] High Precision Event Timer (HPET): one-shot and periodic mode\n- [X] Heap (kmalloc \u0026 free)\n- [ ] PS/2 driver (keyboard support)\n- [ ] All x86 exceptions\n- [ ] Uniprocessor multitasking\n- [ ] User mode\n- [ ] Virtual relocation over 0xFFFFFFFF\n\n## Bootloader (UEFI)\nMy GNU-EFI (UEFI) bootloader written in C for fun and education.\n![Bootloader info](_img/bootloader-1.png)\n\n### Features\n\n- [x] Reading kernel file from drive\n- [x] ELF kernel parsing and loading into memory\n- [x] Framebuffer initialization\n- [x] Memory map gathering\n- [x] Psf font loading\n- [x] ACPI support\n- [x] Error checking\n- [x] Jumping into kernel\n\n### Documentation \u0026 specifications abbreviations used in comments\n\n- IM3 - Intel Manual, vol. 3\n- EFI - UEFI Specification\n- ACP - ACPI Documentation\n- APC - APIC Specification\n- IOA - IO APIC Documentation\n- HPT - HPET Documentation\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprint3m%2Fprintos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprint3m%2Fprintos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprint3m%2Fprintos/lists"}