diff options
| author | andromeda <andromeda@lenovo> | 2026-02-28 23:25:10 +0100 |
|---|---|---|
| committer | andromeda <andromeda@lenovo> | 2026-02-28 23:25:10 +0100 |
| commit | e98380107bb353931c6bd55969b614b9d6592de8 (patch) | |
| tree | 174b61ff5892a7da88ff200932cd75a4f9500c18 | |
| parent | 1bd2067333777507d56098899ea37df62f297e7c (diff) | |
boots in qemu
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | boot.asm | 7 | ||||
| -rw-r--r-- | flake.nix | 9 | ||||
| -rw-r--r-- | package.nix | 45 |
4 files changed, 61 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fcfc4a1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +result* diff --git a/boot.asm b/boot.asm new file mode 100644 index 0000000..ddef7eb --- /dev/null +++ b/boot.asm @@ -0,0 +1,7 @@ +; yoinked from osdev.org +hang: + jmp hang + +times 510-($-$$) db 0 ; 2 bytes less now +db 0x55 +db 0xAA @@ -6,6 +6,13 @@ nixpkgs, self, ... - }: { + }: let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + in { + packages.${system}.default = pkgs.callPackage ./package.nix {}; + devShells.${system}.default = pkgs.mkShell { + inputsFrom = [self.packages.${system}.default]; + }; }; } diff --git a/package.nix b/package.nix new file mode 100644 index 0000000..150b46b --- /dev/null +++ b/package.nix @@ -0,0 +1,45 @@ +{ + stdenv, + nasm, + qemu, + ... +}: let + bootImg = "boot"; +in + stdenv.mkDerivation { + pname = "bootler"; + version = "0.1.0"; + src = ./.; + buildPhase = '' + ${nasm}/bin/nasm boot.asm -o ${bootImg} + ''; + installPhase = '' + mkdir -p $out/bin + cp ${bootImg} $out/bin + + # create emulation binary + cat<<EOF>$out/bin/bootler + #!/usr/bin/env bash + + # create temp dir + mkdir -p ./.bootler + cp $(echo $out)/bin/${bootImg} ./.bootler/${bootImg} + chmod a+w ./.bootler/${bootImg} + + echo "press any key to continue. Qemu will clear the screen..." + read -s -n 1 + + # run image + ${qemu}/bin/qemu-system-x86_64 \ + -nographic \ + -hda ./.bootler/${bootImg} + + # clean up + rm ./.bootler -r + + EOF + + chmod +x $out/bin/${bootImg} + chmod +x $out/bin/bootler + ''; + } |
