From c480e76433f9bb8ce8ce9d5802cdada8883db184 Mon Sep 17 00:00:00 2001 From: claude Date: Sun, 12 Jul 2026 01:31:26 +0000 Subject: 🌭 kernel/: болваночное ядро (пишет в 0xB8000) + загрузчик Plan9 a.out MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- kernel/kernel.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 kernel/kernel.c (limited to 'kernel/kernel.c') 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 */ + ; +} -- cgit v1.2.3