summaryrefslogtreecommitdiff
path: root/applications
diff options
context:
space:
mode:
Diffstat (limited to 'applications')
-rw-r--r--applications/init/main.cpp24
-rw-r--r--applications/link.ld38
2 files changed, 62 insertions, 0 deletions
diff --git a/applications/init/main.cpp b/applications/init/main.cpp
new file mode 100644
index 0000000..7aa2a38
--- /dev/null
+++ b/applications/init/main.cpp
@@ -0,0 +1,24 @@
+#include <mercury/syscall.hpp>
+
+using mercury::syscall::encoded_color;
+using mercury::syscall::color;
+
+encoded_color *fb;
+uint32_t fb_width;
+uint32_t fb_height;
+uint32_t fb_pitch;
+
+int main(int, char **) {
+ mercury::syscall::get_framebuffer(fb, fb_width, fb_height, fb_pitch);
+ for (uint32_t y = 0; y < fb_height; ++y)
+ for (uint32_t x = 0; x < fb_width; ++x) {
+ color c = {
+ .r = 0,
+ .g = (uint8_t)(y * 255 / fb_height),
+ .b = (uint8_t)(x * 255 / fb_width)
+ };
+ fb[y * fb_pitch + x] = mercury::syscall::encode_color(c);
+ }
+ mercury::syscall::draw_framebuffer();
+ return 0;
+}
diff --git a/applications/link.ld b/applications/link.ld
new file mode 100644
index 0000000..eaba220
--- /dev/null
+++ b/applications/link.ld
@@ -0,0 +1,38 @@
+OUTPUT_FORMAT(elf64-x86-64)
+OUTPUT_ARCH(i386:x86-64)
+
+ENTRY(_entry)
+
+PHDRS {
+ rx PT_LOAD FLAGS(5);
+ ro PT_LOAD FLAGS(4);
+ rw PT_LOAD FLAGS(6);
+}
+
+SECTIONS {
+
+ /* see also ../documentation/memory.txt */
+ . = 0x200000;
+
+ .text : {
+ *(.text .text.*)
+ } : rx
+
+ . = ALIGN(0x200000);
+
+ .rodata : {
+ *(.rodata .rodata.*)
+ } : ro
+
+ . = ALIGN(0x200000);
+
+ .data : {
+ *(.data .data.*)
+ } : rw
+
+ .bss : {
+ *(.bss .bss.*)
+ *(COMMON)
+ } : rw
+
+}