summaryrefslogtreecommitdiff
path: root/twasm/package.nix
blob: f621780474f393d77517841784a564c10883b9b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
{
  bootler,
  stdenv,
  nasm,
  qemu,
  ...
}:
stdenv.mkDerivation {
  pname = "twasm";
  version = "0.1.0";
  src = ./.;
  buildPhase = ''
    ${nasm}/bin/nasm asm/main.asm -o out.bin
  '';
  installPhase = ''
    dd if=/dev/zero of=disk bs=512 count=2880
    dd if=${bootler}/bin/boot.bin of=disk conv=notrunc
    dd if=out.bin of=disk bs=512 seek=1 conv=notrunc

    mkdir -p $out/bin

    cat<<EOF>$out/bin/twasm
    #!/usr/bin/env bash

    mkdir -p ./.bootle
    cp $(echo $out)/bin/disk ./.bootle/disk
    chmod a+w ./.bootle/disk

    ${qemu}/bin/qemu-system-x86_64 \
      -nographic \
      -drive file=./.bootle/disk,format=raw,index=0,media=disk

    rm ./.bootle -r
    EOF

    chmod +x $out/bin/twasm

    cp out.bin $out/bin
    cp disk $out/bin
  '';
}