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/loader_test.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 kernel/loader_test.c (limited to 'kernel/loader_test.c') diff --git a/kernel/loader_test.c b/kernel/loader_test.c new file mode 100644 index 0000000..1241a39 --- /dev/null +++ b/kernel/loader_test.c @@ -0,0 +1,12 @@ +#include +#include +#include "loader.c" /* берём aout_parse из настоящего загрузчика */ +int main(int c, char**v){ + FILE*f=fopen(v[1],"rb"); fseek(f,0,SEEK_END); long n=ftell(f); rewind(f); + u8*b=malloc(n); fread(b,1,n,f); fclose(f); + Exec e; int r=aout_parse(b,&e); + printf("aout_parse: %s\n", r==0?"OK (I_MAGIC 386)":"НЕ наш формат"); + printf(" magic=0x%X text=%u data=%u bss=%u entry=0x%X\n",e.magic,e.text,e.data,e.bss,e.entry); + printf(" сегменты @ file+%d, грузятся -> 0x%X\n",HDRSZ,e.entry); + return r; +} -- cgit v1.2.3