summaryrefslogtreecommitdiff
path: root/twasm/package.nix
blob: ee4e25035d8a5d4dc76f7c95279c68e4d05097a0 (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
42
43
44
45
46
{
  bootler,
  stdenv,
  nasm,
  qemu,
  ...
}:
stdenv.mkDerivation {
  pname = "twasm";
  version = "0.1.0";
  src = ./.;
  buildPhase = ''
    ${nasm}/bin/nasm \
      asm/main.asm \
      -o out.bin \
      -w+all \
      -w-reloc-abs
  '';
  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 \
      -s \
      -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
  '';
}