Split out libtock_core
diff --git a/Cargo.toml b/Cargo.toml
index 2fcb4bf..50c20ef 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -10,6 +10,7 @@
 
 [dependencies]
 core = { package = "async-support", path = "async-support" }
+libtock-core = { path = "core" }
 libtock_codegen = { path = "codegen" }
 linked_list_allocator = { optional = true, version = "=0.6.5", default-features = false }
 futures = { version = "0.3.1", default-features = false, features = ["unstable", "cfg-target-has-atomic"] }
@@ -52,4 +53,5 @@
 members = [
     "async-support",
     "codegen",
+    "core"
 ]
diff --git a/core/Cargo.toml b/core/Cargo.toml
new file mode 100644
index 0000000..6f300f4
--- /dev/null
+++ b/core/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "libtock-core"
+version = "0.1.0"
+authors = ["torfmaster <briefe@kebes.de>", "Woyten <woyten.tielesch@online.de>"]
+edition = "2018"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/src/callback.rs b/core/src/callback.rs
similarity index 100%
rename from src/callback.rs
rename to core/src/callback.rs
diff --git a/core/src/debug/mod.rs b/core/src/debug/mod.rs
new file mode 100644
index 0000000..1f30644
--- /dev/null
+++ b/core/src/debug/mod.rs
@@ -0,0 +1,5 @@
+#[cfg_attr(target_arch = "arm", path = "platform_arm.rs")]
+#[cfg_attr(target_arch = "riscv32", path = "platform_riscv32.rs")]
+mod platform;
+
+pub use platform::*;
diff --git a/core/src/debug/platform.rs b/core/src/debug/platform.rs
new file mode 100644
index 0000000..6be01d8
--- /dev/null
+++ b/core/src/debug/platform.rs
@@ -0,0 +1,3 @@
+pub fn get_stack_pointer() -> usize {
+    panic!("Not implemented yet")
+}
diff --git a/core/src/debug/platform_arm.rs b/core/src/debug/platform_arm.rs
new file mode 100644
index 0000000..46211b3
--- /dev/null
+++ b/core/src/debug/platform_arm.rs
@@ -0,0 +1,5 @@
+pub fn get_stack_pointer() -> usize {
+    let stack_pointer;
+    unsafe { asm!("mov $0, sp" : "=r"(stack_pointer) : : : "volatile") };
+    stack_pointer
+}
diff --git a/core/src/debug/platform_riscv32.rs b/core/src/debug/platform_riscv32.rs
new file mode 100644
index 0000000..7f4a4e0
--- /dev/null
+++ b/core/src/debug/platform_riscv32.rs
@@ -0,0 +1,5 @@
+pub fn get_stack_pointer() -> usize {
+    let stack_pointer;
+    unsafe { asm!("mv $0, sp" : "=r"(stack_pointer) : : : "volatile") };
+    stack_pointer
+}
diff --git a/src/entry_point/mod.rs b/core/src/entry_point/mod.rs
similarity index 97%
rename from src/entry_point/mod.rs
rename to core/src/entry_point/mod.rs
index 09044bd..d63b174 100644
--- a/src/entry_point/mod.rs
+++ b/core/src/entry_point/mod.rs
@@ -57,10 +57,6 @@
 
 #[cfg_attr(target_arch = "riscv32", path = "start_item_riscv32.rs")]
 #[cfg_attr(target_arch = "arm", path = "start_item_arm.rs")]
-#[cfg_attr(
-    not(any(target_arch = "arm", target_arch = "riscv32")),
-    path = "start_item_mock.rs"
-)]
 mod start_item;
 
 /// The header encoded at the beginning of .text by the linker script. It is
diff --git a/src/entry_point/start_item_mock.rs b/core/src/entry_point/start_item.rs
similarity index 100%
rename from src/entry_point/start_item_mock.rs
rename to core/src/entry_point/start_item.rs
diff --git a/src/entry_point/start_item_arm.rs b/core/src/entry_point/start_item_arm.rs
similarity index 100%
rename from src/entry_point/start_item_arm.rs
rename to core/src/entry_point/start_item_arm.rs
diff --git a/src/entry_point/start_item_riscv32.rs b/core/src/entry_point/start_item_riscv32.rs
similarity index 100%
rename from src/entry_point/start_item_riscv32.rs
rename to core/src/entry_point/start_item_riscv32.rs
diff --git a/src/lang_items.rs b/core/src/lang_items.rs
similarity index 96%
rename from src/lang_items.rs
rename to core/src/lang_items.rs
index 5a28186..6bbb257 100644
--- a/src/lang_items.rs
+++ b/core/src/lang_items.rs
@@ -55,7 +55,7 @@
 
 unsafe fn report_panic() -> ! {
     // Signal a panic using the LowLevelDebug capsule (if available).
-    super::debug::low_level_status_code(1);
+    let _ = syscalls::command1_insecure(8, 1, 1);
 
     loop {
         syscalls::raw::yieldk();
diff --git a/core/src/lib.rs b/core/src/lib.rs
new file mode 100644
index 0000000..c8ffa54
--- /dev/null
+++ b/core/src/lib.rs
@@ -0,0 +1,14 @@
+#![feature(asm, lang_items, naked_functions)]
+#![cfg_attr(any(target_arch = "arm", target_arch = "riscv32"), no_std)]
+
+mod entry_point;
+#[cfg(any(target_arch = "arm", target_arch = "riscv32"))]
+mod lang_items;
+
+pub mod callback;
+pub mod debug;
+pub mod memop;
+pub mod result;
+pub mod shared_memory;
+pub mod syscalls;
+pub mod unwind_symbols;
diff --git a/src/memop.rs b/core/src/memop.rs
similarity index 100%
rename from src/memop.rs
rename to core/src/memop.rs
diff --git a/src/result.rs b/core/src/result.rs
similarity index 100%
rename from src/result.rs
rename to core/src/result.rs
diff --git a/src/shared_memory.rs b/core/src/shared_memory.rs
similarity index 100%
rename from src/shared_memory.rs
rename to core/src/shared_memory.rs
diff --git a/src/syscalls/mod.rs b/core/src/syscalls/mod.rs
similarity index 97%
rename from src/syscalls/mod.rs
rename to core/src/syscalls/mod.rs
index c0289e5..833c356 100644
--- a/src/syscalls/mod.rs
+++ b/core/src/syscalls/mod.rs
@@ -1,9 +1,5 @@
 #[cfg_attr(target_arch = "riscv32", path = "platform_riscv32.rs")]
 #[cfg_attr(target_arch = "arm", path = "platform_arm.rs")]
-#[cfg_attr(
-    not(any(target_arch = "arm", target_arch = "riscv32")),
-    path = "platform_mock.rs"
-)]
 mod platform;
 
 use crate::callback::CallbackSubscription;
diff --git a/src/syscalls/platform_mock.rs b/core/src/syscalls/platform.rs
similarity index 100%
rename from src/syscalls/platform_mock.rs
rename to core/src/syscalls/platform.rs
diff --git a/src/syscalls/platform_arm.rs b/core/src/syscalls/platform_arm.rs
similarity index 100%
rename from src/syscalls/platform_arm.rs
rename to core/src/syscalls/platform_arm.rs
diff --git a/src/syscalls/platform_riscv32.rs b/core/src/syscalls/platform_riscv32.rs
similarity index 100%
rename from src/syscalls/platform_riscv32.rs
rename to core/src/syscalls/platform_riscv32.rs
diff --git a/src/unwind_symbols.rs b/core/src/unwind_symbols.rs
similarity index 100%
rename from src/unwind_symbols.rs
rename to core/src/unwind_symbols.rs
diff --git a/src/debug/mod.rs b/src/debug/mod.rs
index 4596aaa..3bae683 100644
--- a/src/debug/mod.rs
+++ b/src/debug/mod.rs
@@ -3,6 +3,7 @@
 mod low_level_debug;
 
 use crate::drivers;
+use libtock_core::debug as core_debug;
 
 pub use low_level_debug::*;
 
@@ -21,22 +22,15 @@
     let _ = console.write(buffer);
 }
 
-#[cfg(target_arch = "arm")]
 pub fn print_stack_pointer() {
-    let stack_pointer;
-    unsafe { asm!("mov $0, sp" : "=r"(stack_pointer) : : : "volatile") };
-
     let mut buffer = [b'\n'; 15];
     buffer[0..4].clone_from_slice(b"SP: ");
-    write_as_hex(&mut buffer[4..15], stack_pointer);
+    write_as_hex(&mut buffer[4..15], core_debug::get_stack_pointer());
     let drivers = unsafe { drivers::retrieve_drivers_unsafe() };
     let mut console = drivers.console.create_console();
     let _ = console.write(buffer);
 }
 
-#[cfg(target_arch = "riscv32")]
-pub fn print_stack_pointer() {}
-
 #[inline(always)]
 /// Dumps address
 /// # Safety
diff --git a/src/lib.rs b/src/lib.rs
index 0744a53..9ff7725 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,18 +1,13 @@
-#![feature(asm, lang_items, naked_functions)]
 #![cfg_attr(feature = "alloc", feature(alloc_error_handler))]
 #![cfg_attr(any(target_arch = "arm", target_arch = "riscv32"), no_std)]
 
 #[cfg(feature = "alloc")]
 mod alloc;
-mod entry_point;
-#[cfg(any(target_arch = "arm", target_arch = "riscv32"))]
-mod lang_items;
 
 pub mod adc;
 pub mod ble_composer;
 pub mod ble_parser;
 pub mod buttons;
-pub mod callback;
 pub mod console;
 pub mod debug;
 pub mod drivers;
@@ -20,16 +15,12 @@
 pub mod futures;
 pub mod gpio;
 pub mod leds;
-pub mod memop;
-pub mod result;
 pub mod rng;
 pub mod sensors;
-pub mod shared_memory;
 pub mod simple_ble;
-pub mod syscalls;
 pub mod temperature;
 pub mod timer;
-pub mod unwind_symbols;
 
 pub use drivers::retrieve_drivers;
 pub use libtock_codegen::main;
+pub use libtock_core::*;