summaryrefslogtreecommitdiff
path: root/kernel/kernel.c
diff options
context:
space:
mode:
authorclaude <[email protected]>2026-07-12 01:31:26 +0000
committerclaude <[email protected]>2026-07-12 01:31:26 +0000
commitc480e76433f9bb8ce8ce9d5802cdada8883db184 (patch)
treef84928e5a12c234ec44e899198dca9a41d02170b /kernel/kernel.c
parenta4dce7f4d920e492d38c32ad3e42efdcfef3b3f1 (diff)
downloadplan9-kencc-linux-c480e76433f9bb8ce8ce9d5802cdada8883db184.tar.gz
plan9-kencc-linux-c480e76433f9bb8ce8ce9d5802cdada8883db184.zip
🌭 kernel/: болваночное ядро (пишет в 0xB8000) + загрузчик Plan9 a.out
- kernel.c + kern.s: 386-ядро, пишет строку в VGA-текстбуфер 0xB8000, halt. Собирается 8a+8c+8l в Plan9 a.out (I_MAGIC, entry 0x100000). - loader.c: загрузчик a.out (не ELF — выхлоп у нас a.out): разбор big-endian заголовка, загрузка сегментов по entry, зануление bss, прыжок. - проверено: kernel = валидный a.out с 0xB8000 в коде; loader.aout_parse корректно разбирает реальное ядро (entry/размеры сходятся). - bin/: добавлены 8a, 8l (386 ассемблер + линкер). Co-Authored-By: Claude Opus 4.8 <[email protected]>
Diffstat (limited to 'kernel/kernel.c')
-rw-r--r--kernel/kernel.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c
new file mode 100644
index 0000000..0440677
--- /dev/null
+++ b/kernel/kernel.c
@@ -0,0 +1,20 @@
+/* Plan9 C, 386 — kernel-болванка: пишет строку в VGA-текстбуфер 0xB8000. */
+typedef unsigned short ushort;
+typedef unsigned char uchar;
+
+void
+kmain(void)
+{
+ ushort *vga;
+ char *s;
+ int i;
+
+ vga = (ushort*)0xB8000; /* VGA text mode framebuffer */
+ for(i = 0; i < 80*25; i++)
+ vga[i] = (0x1F<<8) | ' '; /* очистить: белым по синему */
+ s = "PLAN9 KERNEL STUB -> writes to 0xB8000";
+ for(i = 0; s[i]; i++)
+ vga[i] = (0x1F<<8) | (uchar)s[i];
+ for(;;) /* halt */
+ ;
+}