diff --git a/AAVMF_CODE.fd b/AAVMF_CODE.fd
new file mode 100644
index 0000000..b317c63
Binary files /dev/null and b/AAVMF_CODE.fd differ
diff --git a/Cargo.lock b/Cargo.lock
index da83d79..f6af26a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -859,12 +859,12 @@ dependencies = [
 [[package]]
 name = "hbbytecode"
 version = "0.1.0"
-source = "git+https://git.ablecorp.us/ableos/holey-bytes#75995422262a192f2c87713d239856e98c799f41"
+source = "git+https://git.ablecorp.us/ableos/holey-bytes#6a444bd29ea6d474ec98edbc11b27030825b86e2"
 
 [[package]]
 name = "hbvm"
 version = "0.1.0"
-source = "git+https://git.ablecorp.us/ableos/holey-bytes#75995422262a192f2c87713d239856e98c799f41"
+source = "git+https://git.ablecorp.us/ableos/holey-bytes#6a444bd29ea6d474ec98edbc11b27030825b86e2"
 dependencies = [
  "delegate",
  "derive_more",
diff --git a/README.md b/README.md
index e8c6016..846e497 100644
--- a/README.md
+++ b/README.md
@@ -20,8 +20,11 @@ TODO
         - PS/2 Keyboard driver
         - VGA driver
         - SVGA driver
-        - File system 
+        - File system
+            TarFS
+                Pass in a tar file as an initrd and parse it with TarFS
         - VFS
+                Being (written)[https://git.ablecorp.us/bee/ableos-vfs] by Bee
         - Disk driver
         - A ton more
 ```
diff --git a/arm.sh b/arm.sh
new file mode 100755
index 0000000..addf7e5
--- /dev/null
+++ b/arm.sh
@@ -0,0 +1,11 @@
+qemu-system-aarch64 -m 1024 -cpu cortex-a57 \
+-M virt -pflash "AAVMF_CODE.fd" \
+-device virtio-gpu-pci \
+-device virtio-mouse-device \
+-device virtio-keyboard-device \
+-kernel limine/BOOTX64.EFI
+# -device virtio-serial-pci \
+# -drive if=none,file=target/disk.img,id=hd0 \
+# -device virtio-blk-device,drive=hd0
+
+# -kernel target/aarch64-virt-ableos/debug/kernel
diff --git a/kernel/src/kmain.rs b/kernel/src/kmain.rs
index 5e3d8cb..029b6f6 100644
--- a/kernel/src/kmain.rs
+++ b/kernel/src/kmain.rs
@@ -4,7 +4,6 @@
 use {
     crate::{
         bootmodules::{build_cmd, BootModules},
-        capabilities,
         device_tree::DeviceTree,
         scheduler::Scheduler,
     },
@@ -38,10 +37,10 @@ pub fn kmain(cmdline: &str, boot_modules: BootModules) -> ! {
     // TODO: schedule the filesystem driver from the initramfs
     // TODO: schedule the init system from the initramfs
 
-    capabilities::example();
+    // capabilities::example();
 
     let mut sched = Scheduler::new();
-    // AHEM that isn't a valid HBVM program
+
     sched.new_process(boot_modules[0].bytes.clone());
     sched.new_process(boot_modules[1].bytes.clone());
 
diff --git a/kernel/src/scheduler.rs b/kernel/src/scheduler.rs
index 0ef4782..a7b683a 100644
--- a/kernel/src/scheduler.rs
+++ b/kernel/src/scheduler.rs
@@ -48,11 +48,29 @@ impl Scheduler<'_> {
             }
 
             let mut prog = self.data.pop_front().unwrap();
-            prog.run().unwrap();
+            let ret = prog.run();
+            match ret {
+                Ok(oki) => match oki {
+                    hbvm::vm::VmRunOk::End => {
+                        log::info!(
+                            "Program ended. {} programs remaining.",
+                            // Add one here because we pop a program
+                            self.data.len() + 1
+                        )
+                    }
+                    hbvm::vm::VmRunOk::Timer => {
+                        log::info!("Timer exhausted. Scheduled program");
+                        self.data.push_back(prog);
+                    }
+                    hbvm::vm::VmRunOk::Ecall => {
+                        // panic!();
+                        log::info!("{:?}", prog.registers);
+                        self.data.push_back(prog);
+                    }
+                },
 
-            // log::info!("VM registers {:?}", prog.registers);
-            log::info!("Scheduled program");
-            self.data.push_back(prog);
+                Err(_) => {}
+            }
         }
     }
 }
diff --git a/repbuild/holeybytes/ecall.hb b/repbuild/holeybytes/ecall.hb
new file mode 100644
index 0000000..3ecd89a
Binary files /dev/null and b/repbuild/holeybytes/ecall.hb differ
diff --git a/repbuild/holeybytes/inf_loop.hb b/repbuild/holeybytes/inf_loop.hb
new file mode 100644
index 0000000..0a4fe61
Binary files /dev/null and b/repbuild/holeybytes/inf_loop.hb differ
diff --git a/repbuild/inf_loop.hb b/repbuild/inf_loop.hb
deleted file mode 100644
index 2896284..0000000
Binary files a/repbuild/inf_loop.hb and /dev/null differ
diff --git a/repbuild/limine.cfg b/repbuild/limine.cfg
index bddfbce..6948659 100644
--- a/repbuild/limine.cfg
+++ b/repbuild/limine.cfg
@@ -21,5 +21,5 @@ TERM_BACKDROP=008080
     MODULE_PATH=boot:///inf_loop.hb
     MODULE_CMDLINE="diskid=123456789"
 
-    MODULE_PATH=boot:///inf_loop.hb
+    MODULE_PATH=boot:///ecall.hb
     MODULE_CMDLINE=""
\ No newline at end of file
diff --git a/repbuild/src/main.rs b/repbuild/src/main.rs
index d7d688e..041e51b 100644
--- a/repbuild/src/main.rs
+++ b/repbuild/src/main.rs
@@ -122,10 +122,15 @@ fn get_fs() -> Result<FileSystem<impl ReadWriteSeek>, io::Error> {
         &mut fs.root_dir().create_file("background.bmp")?,
     )?;
     io::copy(
-        &mut File::open("repbuild/inf_loop.hb")?,
+        &mut File::open("repbuild/holeybytes/inf_loop.hb")?,
         &mut fs.root_dir().create_file("inf_loop.hb")?,
     )?;
 
+    io::copy(
+        &mut File::open("repbuild/holeybytes/ecall.hb")?,
+        &mut fs.root_dir().create_file("ecall.hb")?,
+    )?;
+
     drop(bootdir);
     Ok(fs)
 }
@@ -224,8 +229,17 @@ fn run(release: bool, target: Target) -> Result<(), Error> {
 
     if target == Target::Aarch64 {
         com.args([
-            "-M", "virt", "-m", //
+            "-bios",
+            "target/OVMF_CODE.fd",
+            "-M",
+            "virt",
+            "-device",
+            "ramfb",
+            "-m", //
             "128M",
+            //
+            "-drive",
+            "file=target/disk.img,format=raw",
             // "-serial", "stdio",
         ]);
     }