From 03035c98b4ba3297b837e96080e78e0aac1e86db Mon Sep 17 00:00:00 2001 From: Aleksa Vučković Date: Mon, 31 Jan 2022 11:16:38 +0100 Subject: Promene --- Makefile | 3 +- include/01.pocetak/boot.s | 30 +-- include/01.pocetak/boot1.s | 5 + include/01.pocetak/boot2.s | 5 + include/01.pocetak/boot3.s | 2 + include/01.pocetak/boot4.s | 5 + include/01.pocetak/boot5.s | 6 + include/01.pocetak/boot6.s | 12 ++ include/01.pocetak/boot7.s | 1 + include/01.pocetak/deo1 | 5 - include/01.pocetak/deo10 | 5 - include/01.pocetak/deo11 | 12 -- include/01.pocetak/deo12 | 1 - include/01.pocetak/deo2 | 5 - include/01.pocetak/deo3 | 6 - include/01.pocetak/deo4 | 4 - include/01.pocetak/deo5 | 5 - include/01.pocetak/deo6 | 4 - include/01.pocetak/deo7 | 5 - include/01.pocetak/deo8 | 2 - include/01.pocetak/deo9 | 5 - include/02.vga/deo1 | 4 - include/02.vga/deo10 | 10 - include/02.vga/deo11 | 4 - include/02.vga/deo12 | 8 - include/02.vga/deo13 | 8 - include/02.vga/deo14 | 6 - include/02.vga/deo2 | 4 - include/02.vga/deo3 | 4 - include/02.vga/deo4 | 4 - include/02.vga/deo5 | 15 -- include/02.vga/deo6 | 5 - include/02.vga/deo7 | 6 - include/02.vga/deo8 | 4 - include/02.vga/deo9 | 5 - include/02.vga/vga.c | 26 +-- include/02.vga/vga1.c | 4 + include/02.vga/vga10.c | 10 + include/02.vga/vga11.c | 4 + include/02.vga/vga12.c | 8 + include/02.vga/vga13.c | 8 + include/02.vga/vga14.c | 7 + include/02.vga/vga2.c | 4 + include/02.vga/vga3.c | 4 + include/02.vga/vga4.c | 5 + include/02.vga/vga5.c | 15 ++ include/02.vga/vga6.c | 5 + include/02.vga/vga7.c | 6 + include/02.vga/vga8.c | 4 + include/02.vga/vga9.c | 5 + include/03.gdt/deo1 | 1 - include/03.gdt/deo2 | 9 - include/03.gdt/deo3 | 5 - include/03.gdt/deo4 | 1 - include/03.gdt/deo5 | 2 - include/03.gdt/deo6 | 9 - include/03.gdt/deo7 | 4 - include/03.gdt/deo8 | 5 - include/03.gdt/deo9 | 2 - include/03.gdt/gdt.c | 36 +--- include/03.gdt/gdt.h | 26 +++ include/03.gdt/gdt1.c | 2 + include/03.gdt/gdt1.h | 2 + include/03.gdt/gdt2.c | 1 + include/03.gdt/gdt2.h | 1 + include/03.gdt/gdt3.c | 2 + include/03.gdt/gdt3.h | 9 + include/03.gdt/gdt4.c | 10 + include/03.gdt/gdt4.h | 5 + include/03.gdt/gdt5.c | 4 + include/03.gdt/gdt5.h | 3 + include/03.gdt/gdt6.c | 5 + include/03.gdt/gdt6.h | 1 + include/03.gdt/gdt7.c | 2 + include/04.idt/deo1 | 3 - include/04.idt/deo10 | 4 - include/04.idt/deo11 | 14 -- include/04.idt/deo12 | 37 ---- include/04.idt/deo13 | 2 - include/04.idt/deo14 | 2 - include/04.idt/deo2 | 1 - include/04.idt/deo3 | 2 - include/04.idt/deo4 | 4 - include/04.idt/deo5 | 8 - include/04.idt/deo6 | 5 - include/04.idt/deo7 | 2 - include/04.idt/deo8 | 2 - include/04.idt/deo9 | 8 - include/04.idt/idt.c | 108 ---------- include/04.idt/idt.h | 37 ++++ include/04.idt/idt1.h | 2 + include/04.idt/idt2.h | 1 + include/04.idt/idt3.h | 1 + include/04.idt/idt4.h | 2 + include/04.idt/idt5.h | 4 + include/04.idt/idt6.h | 8 + include/04.idt/idt7.h | 5 + include/04.idt/idt8.h | 5 + include/04.idt/idt9.h | 1 + include/05.irq/idt.c | 83 ++++++++ include/05.irq/idt1.c | 4 + include/05.irq/idt2.c | 1 + include/05.irq/idt3.c | 2 + include/05.irq/idt4.c | 9 + include/05.irq/idt5.c | 4 + include/05.irq/idt6.c | 14 ++ include/05.irq/idt7.c | 37 ++++ include/05.irq/idt8.c | 2 + include/05.irq/idt9.c | 2 + include/06.keyboard/deo1 | 3 - include/06.keyboard/deo10 | 18 -- include/06.keyboard/deo11 | 5 - include/06.keyboard/deo12 | 11 - include/06.keyboard/deo13 | 11 - include/06.keyboard/deo14 | 3 - include/06.keyboard/deo15 | 3 - include/06.keyboard/deo16 | 4 - include/06.keyboard/deo17 | 8 - include/06.keyboard/deo18 | 23 --- include/06.keyboard/deo19 | 22 -- include/06.keyboard/deo2 | 7 - include/06.keyboard/deo20 | 7 - include/06.keyboard/deo3 | 7 - include/06.keyboard/deo4 | 6 - include/06.keyboard/deo5 | 7 - include/06.keyboard/deo6 | 5 - include/06.keyboard/deo7 | 6 - include/06.keyboard/deo8 | 3 - include/06.keyboard/deo9 | 4 - include/06.keyboard/keyboard.c | 27 +-- include/06.keyboard/keyboard1.c | 7 + include/06.keyboard/keyboard10.c | 11 + include/06.keyboard/keyboard11.c | 11 + include/06.keyboard/keyboard12.c | 3 + include/06.keyboard/keyboard13.c | 3 + include/06.keyboard/keyboard14.c | 4 + include/06.keyboard/keyboard15.c | 8 + include/06.keyboard/keyboard16.c | 23 +++ include/06.keyboard/keyboard17.c | 22 ++ include/06.keyboard/keyboard18.c | 7 + include/06.keyboard/keyboard2.c | 5 + include/06.keyboard/keyboard3.c | 3 + include/06.keyboard/keyboard4.c | 5 + include/06.keyboard/keyboard5.c | 6 + include/06.keyboard/keyboard6.c | 3 + include/06.keyboard/keyboard7.c | 4 + include/06.keyboard/keyboard8.c | 18 ++ include/06.keyboard/keyboard9.c | 5 + include/07.pit/deo1 | 3 - include/07.pit/deo10 | 4 - include/07.pit/deo2 | 1 - include/07.pit/deo3 | 4 - include/07.pit/deo4 | 9 - include/07.pit/deo5 | 3 - include/07.pit/deo6 | 3 - include/07.pit/deo7 | 4 - include/07.pit/deo8 | 2 - include/07.pit/deo9 | 3 - include/07.pit/timer.c | 17 +- include/07.pit/timer1.c | 4 + include/07.pit/timer2.c | 4 + include/07.pit/timer3.c | 8 + include/07.pit/timer4.c | 3 + include/07.pit/timer5.c | 4 + include/07.pit/timer6.c | 2 + include/07.pit/timer7.c | 3 + include/08.heap/deo1 | 1 - include/08.heap/deo10 | 5 - include/08.heap/deo11 | 4 - include/08.heap/deo12 | 5 - include/08.heap/deo13 | 7 - include/08.heap/deo14 | 4 - include/08.heap/deo15 | 3 - include/08.heap/deo16 | 5 - include/08.heap/deo17 | 3 - include/08.heap/deo18 | 4 - include/08.heap/deo19 | 4 - include/08.heap/deo2 | 7 - include/08.heap/deo20 | 2 - include/08.heap/deo21 | 2 - include/08.heap/deo22 | 2 - include/08.heap/deo23 | 9 - include/08.heap/deo24 | 7 - include/08.heap/deo25 | 20 -- include/08.heap/deo26 | 3 - include/08.heap/deo27 | 1 - include/08.heap/deo28 | 4 - include/08.heap/deo29 | 4 - include/08.heap/deo3 | 3 - include/08.heap/deo30 | 4 - include/08.heap/deo31 | 4 - include/08.heap/deo4 | 3 - include/08.heap/deo5 | 5 - include/08.heap/deo6 | 3 - include/08.heap/deo7 | 2 - include/08.heap/deo8 | 2 - include/08.heap/deo9 | 4 - include/08.heap/heap.c | 77 +++---- include/08.heap/heap1.c | 2 + include/08.heap/heap10.c | 7 + include/08.heap/heap11.c | 8 + include/08.heap/heap12.c | 6 + include/08.heap/heap13.c | 4 + include/08.heap/heap14.c | 4 + include/08.heap/heap15.c | 5 + include/08.heap/heap16.c | 5 + include/08.heap/heap17.c | 2 + include/08.heap/heap18.c | 2 + include/08.heap/heap19.c | 2 + include/08.heap/heap2.c | 4 + include/08.heap/heap20.c | 2 + include/08.heap/heap21.c | 10 + include/08.heap/heap22.c | 8 + include/08.heap/heap23.c | 21 ++ include/08.heap/heap24.c | 3 + include/08.heap/heap25.c | 1 + include/08.heap/heap26.c | 4 + include/08.heap/heap27.c | 4 + include/08.heap/heap28.c | 4 + include/08.heap/heap29.c | 4 + include/08.heap/heap3.c | 7 + include/08.heap/heap4.c | 3 + include/08.heap/heap5.c | 2 + include/08.heap/heap6.c | 2 + include/08.heap/heap7.c | 4 + include/08.heap/heap8.c | 5 + include/08.heap/heap9.c | 4 + include/09.paging/deo1 | 1 - include/09.paging/deo2 | 2 - include/09.paging/deo3 | 1 - include/09.paging/deo4 | 12 -- include/09.paging/deo5 | 1 - include/09.paging/deo6 | 4 - include/09.paging/deo7 | 7 - include/09.paging/deo8 | 3 - include/09.paging/deo9 | 7 - include/09.paging/paging.c | 16 +- include/09.paging/paging1.c | 2 + include/09.paging/paging2.c | 2 + include/09.paging/paging3.c | 1 + include/09.paging/paging4.c | 12 ++ include/09.paging/paging5.c | 1 + include/09.paging/paging6.c | 6 + include/09.paging/paging7.c | 8 + include/09.paging/paging8.c | 3 + include/09.paging/paging9.c | 7 + include/10.libc/asm.h | 13 +- include/10.libc/heap.h | 11 - include/10.libc/irq.h | 39 ---- include/10.libc/source/gdt.h | 26 +++ include/10.libc/source/heap.h | 31 +++ include/10.libc/source/idt.h | 37 ++++ include/10.libc/source/irq.h | 39 ++++ include/10.libc/source/irq_handler.h | 43 ++++ include/10.libc/source/kernel.h | 6 + include/10.libc/source/keyboard.h | 21 ++ include/10.libc/source/keymap.h | 14 ++ include/10.libc/source/paging.h | 10 + include/10.libc/source/stack_protector.h | 6 + include/10.libc/source/stdio.h | 6 + include/10.libc/source/string.h | 17 ++ include/10.libc/source/timer.h | 9 + include/10.libc/source/tty.h | 19 ++ include/10.libc/source/vga.h | 40 ++++ include/10.libc/stdio.h | 2 - include/10.libc/string.h | 11 - include/10.libc/types.h | 4 +- include/10.libc/vga.h | 29 --- include/setup.sh | 41 ++-- kernel.pdf | Bin 451732 -> 437581 bytes kernel.tex | 344 +++++++++++++++---------------- 271 files changed, 1396 insertions(+), 1192 deletions(-) create mode 100644 include/01.pocetak/boot1.s create mode 100644 include/01.pocetak/boot2.s create mode 100644 include/01.pocetak/boot3.s create mode 100644 include/01.pocetak/boot4.s create mode 100644 include/01.pocetak/boot5.s create mode 100644 include/01.pocetak/boot6.s create mode 100644 include/01.pocetak/boot7.s delete mode 100644 include/01.pocetak/deo1 delete mode 100644 include/01.pocetak/deo10 delete mode 100644 include/01.pocetak/deo11 delete mode 100644 include/01.pocetak/deo12 delete mode 100644 include/01.pocetak/deo2 delete mode 100644 include/01.pocetak/deo3 delete mode 100644 include/01.pocetak/deo4 delete mode 100644 include/01.pocetak/deo5 delete mode 100644 include/01.pocetak/deo6 delete mode 100644 include/01.pocetak/deo7 delete mode 100644 include/01.pocetak/deo8 delete mode 100644 include/01.pocetak/deo9 delete mode 100644 include/02.vga/deo1 delete mode 100644 include/02.vga/deo10 delete mode 100644 include/02.vga/deo11 delete mode 100644 include/02.vga/deo12 delete mode 100644 include/02.vga/deo13 delete mode 100644 include/02.vga/deo14 delete mode 100644 include/02.vga/deo2 delete mode 100644 include/02.vga/deo3 delete mode 100644 include/02.vga/deo4 delete mode 100644 include/02.vga/deo5 delete mode 100644 include/02.vga/deo6 delete mode 100644 include/02.vga/deo7 delete mode 100644 include/02.vga/deo8 delete mode 100644 include/02.vga/deo9 create mode 100644 include/02.vga/vga1.c create mode 100644 include/02.vga/vga10.c create mode 100644 include/02.vga/vga11.c create mode 100644 include/02.vga/vga12.c create mode 100644 include/02.vga/vga13.c create mode 100644 include/02.vga/vga14.c create mode 100644 include/02.vga/vga2.c create mode 100644 include/02.vga/vga3.c create mode 100644 include/02.vga/vga4.c create mode 100644 include/02.vga/vga5.c create mode 100644 include/02.vga/vga6.c create mode 100644 include/02.vga/vga7.c create mode 100644 include/02.vga/vga8.c create mode 100644 include/02.vga/vga9.c delete mode 100644 include/03.gdt/deo1 delete mode 100644 include/03.gdt/deo2 delete mode 100644 include/03.gdt/deo3 delete mode 100644 include/03.gdt/deo4 delete mode 100644 include/03.gdt/deo5 delete mode 100644 include/03.gdt/deo6 delete mode 100644 include/03.gdt/deo7 delete mode 100644 include/03.gdt/deo8 delete mode 100644 include/03.gdt/deo9 create mode 100644 include/03.gdt/gdt.h create mode 100644 include/03.gdt/gdt1.c create mode 100644 include/03.gdt/gdt1.h create mode 100644 include/03.gdt/gdt2.c create mode 100644 include/03.gdt/gdt2.h create mode 100644 include/03.gdt/gdt3.c create mode 100644 include/03.gdt/gdt3.h create mode 100644 include/03.gdt/gdt4.c create mode 100644 include/03.gdt/gdt4.h create mode 100644 include/03.gdt/gdt5.c create mode 100644 include/03.gdt/gdt5.h create mode 100644 include/03.gdt/gdt6.c create mode 100644 include/03.gdt/gdt6.h create mode 100644 include/03.gdt/gdt7.c delete mode 100644 include/04.idt/deo1 delete mode 100644 include/04.idt/deo10 delete mode 100644 include/04.idt/deo11 delete mode 100644 include/04.idt/deo12 delete mode 100644 include/04.idt/deo13 delete mode 100644 include/04.idt/deo14 delete mode 100644 include/04.idt/deo2 delete mode 100644 include/04.idt/deo3 delete mode 100644 include/04.idt/deo4 delete mode 100644 include/04.idt/deo5 delete mode 100644 include/04.idt/deo6 delete mode 100644 include/04.idt/deo7 delete mode 100644 include/04.idt/deo8 delete mode 100644 include/04.idt/deo9 delete mode 100644 include/04.idt/idt.c create mode 100644 include/04.idt/idt.h create mode 100644 include/04.idt/idt1.h create mode 100644 include/04.idt/idt2.h create mode 100644 include/04.idt/idt3.h create mode 100644 include/04.idt/idt4.h create mode 100644 include/04.idt/idt5.h create mode 100644 include/04.idt/idt6.h create mode 100644 include/04.idt/idt7.h create mode 100644 include/04.idt/idt8.h create mode 100644 include/04.idt/idt9.h create mode 100644 include/05.irq/idt.c create mode 100644 include/05.irq/idt1.c create mode 100644 include/05.irq/idt2.c create mode 100644 include/05.irq/idt3.c create mode 100644 include/05.irq/idt4.c create mode 100644 include/05.irq/idt5.c create mode 100644 include/05.irq/idt6.c create mode 100644 include/05.irq/idt7.c create mode 100644 include/05.irq/idt8.c create mode 100644 include/05.irq/idt9.c delete mode 100644 include/06.keyboard/deo1 delete mode 100644 include/06.keyboard/deo10 delete mode 100644 include/06.keyboard/deo11 delete mode 100644 include/06.keyboard/deo12 delete mode 100644 include/06.keyboard/deo13 delete mode 100644 include/06.keyboard/deo14 delete mode 100644 include/06.keyboard/deo15 delete mode 100644 include/06.keyboard/deo16 delete mode 100644 include/06.keyboard/deo17 delete mode 100644 include/06.keyboard/deo18 delete mode 100644 include/06.keyboard/deo19 delete mode 100644 include/06.keyboard/deo2 delete mode 100644 include/06.keyboard/deo20 delete mode 100644 include/06.keyboard/deo3 delete mode 100644 include/06.keyboard/deo4 delete mode 100644 include/06.keyboard/deo5 delete mode 100644 include/06.keyboard/deo6 delete mode 100644 include/06.keyboard/deo7 delete mode 100644 include/06.keyboard/deo8 delete mode 100644 include/06.keyboard/deo9 create mode 100644 include/06.keyboard/keyboard1.c create mode 100644 include/06.keyboard/keyboard10.c create mode 100644 include/06.keyboard/keyboard11.c create mode 100644 include/06.keyboard/keyboard12.c create mode 100644 include/06.keyboard/keyboard13.c create mode 100644 include/06.keyboard/keyboard14.c create mode 100644 include/06.keyboard/keyboard15.c create mode 100644 include/06.keyboard/keyboard16.c create mode 100644 include/06.keyboard/keyboard17.c create mode 100644 include/06.keyboard/keyboard18.c create mode 100644 include/06.keyboard/keyboard2.c create mode 100644 include/06.keyboard/keyboard3.c create mode 100644 include/06.keyboard/keyboard4.c create mode 100644 include/06.keyboard/keyboard5.c create mode 100644 include/06.keyboard/keyboard6.c create mode 100644 include/06.keyboard/keyboard7.c create mode 100644 include/06.keyboard/keyboard8.c create mode 100644 include/06.keyboard/keyboard9.c delete mode 100644 include/07.pit/deo1 delete mode 100644 include/07.pit/deo10 delete mode 100644 include/07.pit/deo2 delete mode 100644 include/07.pit/deo3 delete mode 100644 include/07.pit/deo4 delete mode 100644 include/07.pit/deo5 delete mode 100644 include/07.pit/deo6 delete mode 100644 include/07.pit/deo7 delete mode 100644 include/07.pit/deo8 delete mode 100644 include/07.pit/deo9 create mode 100644 include/07.pit/timer1.c create mode 100644 include/07.pit/timer2.c create mode 100644 include/07.pit/timer3.c create mode 100644 include/07.pit/timer4.c create mode 100644 include/07.pit/timer5.c create mode 100644 include/07.pit/timer6.c create mode 100644 include/07.pit/timer7.c delete mode 100644 include/08.heap/deo1 delete mode 100644 include/08.heap/deo10 delete mode 100644 include/08.heap/deo11 delete mode 100644 include/08.heap/deo12 delete mode 100644 include/08.heap/deo13 delete mode 100644 include/08.heap/deo14 delete mode 100644 include/08.heap/deo15 delete mode 100644 include/08.heap/deo16 delete mode 100644 include/08.heap/deo17 delete mode 100644 include/08.heap/deo18 delete mode 100644 include/08.heap/deo19 delete mode 100644 include/08.heap/deo2 delete mode 100644 include/08.heap/deo20 delete mode 100644 include/08.heap/deo21 delete mode 100644 include/08.heap/deo22 delete mode 100644 include/08.heap/deo23 delete mode 100644 include/08.heap/deo24 delete mode 100644 include/08.heap/deo25 delete mode 100644 include/08.heap/deo26 delete mode 100644 include/08.heap/deo27 delete mode 100644 include/08.heap/deo28 delete mode 100644 include/08.heap/deo29 delete mode 100644 include/08.heap/deo3 delete mode 100644 include/08.heap/deo30 delete mode 100644 include/08.heap/deo31 delete mode 100644 include/08.heap/deo4 delete mode 100644 include/08.heap/deo5 delete mode 100644 include/08.heap/deo6 delete mode 100644 include/08.heap/deo7 delete mode 100644 include/08.heap/deo8 delete mode 100644 include/08.heap/deo9 create mode 100644 include/08.heap/heap1.c create mode 100644 include/08.heap/heap10.c create mode 100644 include/08.heap/heap11.c create mode 100644 include/08.heap/heap12.c create mode 100644 include/08.heap/heap13.c create mode 100644 include/08.heap/heap14.c create mode 100644 include/08.heap/heap15.c create mode 100644 include/08.heap/heap16.c create mode 100644 include/08.heap/heap17.c create mode 100644 include/08.heap/heap18.c create mode 100644 include/08.heap/heap19.c create mode 100644 include/08.heap/heap2.c create mode 100644 include/08.heap/heap20.c create mode 100644 include/08.heap/heap21.c create mode 100644 include/08.heap/heap22.c create mode 100644 include/08.heap/heap23.c create mode 100644 include/08.heap/heap24.c create mode 100644 include/08.heap/heap25.c create mode 100644 include/08.heap/heap26.c create mode 100644 include/08.heap/heap27.c create mode 100644 include/08.heap/heap28.c create mode 100644 include/08.heap/heap29.c create mode 100644 include/08.heap/heap3.c create mode 100644 include/08.heap/heap4.c create mode 100644 include/08.heap/heap5.c create mode 100644 include/08.heap/heap6.c create mode 100644 include/08.heap/heap7.c create mode 100644 include/08.heap/heap8.c create mode 100644 include/08.heap/heap9.c delete mode 100644 include/09.paging/deo1 delete mode 100644 include/09.paging/deo2 delete mode 100644 include/09.paging/deo3 delete mode 100644 include/09.paging/deo4 delete mode 100644 include/09.paging/deo5 delete mode 100644 include/09.paging/deo6 delete mode 100644 include/09.paging/deo7 delete mode 100644 include/09.paging/deo8 delete mode 100644 include/09.paging/deo9 create mode 100644 include/09.paging/paging1.c create mode 100644 include/09.paging/paging2.c create mode 100644 include/09.paging/paging3.c create mode 100644 include/09.paging/paging4.c create mode 100644 include/09.paging/paging5.c create mode 100644 include/09.paging/paging6.c create mode 100644 include/09.paging/paging7.c create mode 100644 include/09.paging/paging8.c create mode 100644 include/09.paging/paging9.c delete mode 100644 include/10.libc/heap.h delete mode 100644 include/10.libc/irq.h create mode 100644 include/10.libc/source/gdt.h create mode 100644 include/10.libc/source/heap.h create mode 100644 include/10.libc/source/idt.h create mode 100644 include/10.libc/source/irq.h create mode 100644 include/10.libc/source/irq_handler.h create mode 100644 include/10.libc/source/kernel.h create mode 100644 include/10.libc/source/keyboard.h create mode 100644 include/10.libc/source/keymap.h create mode 100644 include/10.libc/source/paging.h create mode 100644 include/10.libc/source/stack_protector.h create mode 100644 include/10.libc/source/stdio.h create mode 100644 include/10.libc/source/string.h create mode 100644 include/10.libc/source/timer.h create mode 100644 include/10.libc/source/tty.h create mode 100644 include/10.libc/source/vga.h delete mode 100644 include/10.libc/vga.h diff --git a/Makefile b/Makefile index 881f5be..f1fa7f3 100644 --- a/Makefile +++ b/Makefile @@ -13,4 +13,5 @@ $(PDF_FILE): $(TEX_FILE) $(BIB_FILE) pdflatex $(TEX_FILE) clean: - rm $(PDF_FILE) + git clean -dfx + rm -f $(PDF_FILE) diff --git a/include/01.pocetak/boot.s b/include/01.pocetak/boot.s index 907cd3c..f65cc72 100644 --- a/include/01.pocetak/boot.s +++ b/include/01.pocetak/boot.s @@ -10,35 +10,6 @@ .long FLAGS .long CHECKSUM -.global _start -.global load_gdt -.global load_idt -.global enable_interrupts -.global ioport_in -.global ioport_out - -load_gdt: - movl 4(%esp), %edx - lgdt (%edx) - ret - -load_idt: - movl 4(%esp), %edx - lidt (%edx) - sti - ret - -ioport_in: - movl 4(%esp),%edx - in %dx,%al - ret - -ioport_out: - movl 4(%esp),%edx - movl 8(%esp),%eax - outb %al,%dx - ret - .set CODE_SEGMENT, 0x08 .set DATA_SEGMENT, 0x10 @@ -49,6 +20,7 @@ stack_bottom: stack_top: .section .text +.global _start .type _start, @function _start: call init_gdt_table diff --git a/include/01.pocetak/boot1.s b/include/01.pocetak/boot1.s new file mode 100644 index 0000000..0e1bfbe --- /dev/null +++ b/include/01.pocetak/boot1.s @@ -0,0 +1,5 @@ +.set ALIGN, 1<<0 +.set MEMINFO, 1<<1 +.set FLAGS, ALIGN | MEMINFO +.set MAGIC, 0x1BADB002 +.set CHECKSUM, -(MAGIC + FLAGS) diff --git a/include/01.pocetak/boot2.s b/include/01.pocetak/boot2.s new file mode 100644 index 0000000..cd7b353 --- /dev/null +++ b/include/01.pocetak/boot2.s @@ -0,0 +1,5 @@ +.section .multiboot +.align 4 +.long MAGIC +.long FLAGS +.long CHECKSUM diff --git a/include/01.pocetak/boot3.s b/include/01.pocetak/boot3.s new file mode 100644 index 0000000..cd3f772 --- /dev/null +++ b/include/01.pocetak/boot3.s @@ -0,0 +1,2 @@ +.set CODE_SEGMENT, 0x08 +.set DATA_SEGMENT, 0x10 diff --git a/include/01.pocetak/boot4.s b/include/01.pocetak/boot4.s new file mode 100644 index 0000000..a9280a6 --- /dev/null +++ b/include/01.pocetak/boot4.s @@ -0,0 +1,5 @@ +.section .bss +.align 16 +stack_bottom: +.skip 16384 +stack_top: diff --git a/include/01.pocetak/boot5.s b/include/01.pocetak/boot5.s new file mode 100644 index 0000000..2fe5ffc --- /dev/null +++ b/include/01.pocetak/boot5.s @@ -0,0 +1,6 @@ +.section .text +.global _start +.type _start, @function +_start: + call init_gdt_table + ljmp $CODE_SEGMENT, $code diff --git a/include/01.pocetak/boot6.s b/include/01.pocetak/boot6.s new file mode 100644 index 0000000..bd0f1da --- /dev/null +++ b/include/01.pocetak/boot6.s @@ -0,0 +1,12 @@ +code: + movw $DATA_SEGMENT, %ax + movw %ax, %ds + movw %ax, %es + movw %ax, %fs + movw %ax, %gs + movw %ax, %ss + movl $stack_top, %esp + cli + call _init + call kernel_main + hlt diff --git a/include/01.pocetak/boot7.s b/include/01.pocetak/boot7.s new file mode 100644 index 0000000..d1d8388 --- /dev/null +++ b/include/01.pocetak/boot7.s @@ -0,0 +1 @@ +.size _start, . - _start diff --git a/include/01.pocetak/deo1 b/include/01.pocetak/deo1 deleted file mode 100644 index 0e1bfbe..0000000 --- a/include/01.pocetak/deo1 +++ /dev/null @@ -1,5 +0,0 @@ -.set ALIGN, 1<<0 -.set MEMINFO, 1<<1 -.set FLAGS, ALIGN | MEMINFO -.set MAGIC, 0x1BADB002 -.set CHECKSUM, -(MAGIC + FLAGS) diff --git a/include/01.pocetak/deo10 b/include/01.pocetak/deo10 deleted file mode 100644 index 3cd7ea1..0000000 --- a/include/01.pocetak/deo10 +++ /dev/null @@ -1,5 +0,0 @@ -.section .text -.type _start, @function -_start: - call init_gdt_table - ljmp $CODE_SEGMENT, $code diff --git a/include/01.pocetak/deo11 b/include/01.pocetak/deo11 deleted file mode 100644 index bd0f1da..0000000 --- a/include/01.pocetak/deo11 +++ /dev/null @@ -1,12 +0,0 @@ -code: - movw $DATA_SEGMENT, %ax - movw %ax, %ds - movw %ax, %es - movw %ax, %fs - movw %ax, %gs - movw %ax, %ss - movl $stack_top, %esp - cli - call _init - call kernel_main - hlt diff --git a/include/01.pocetak/deo12 b/include/01.pocetak/deo12 deleted file mode 100644 index d1d8388..0000000 --- a/include/01.pocetak/deo12 +++ /dev/null @@ -1 +0,0 @@ -.size _start, . - _start diff --git a/include/01.pocetak/deo2 b/include/01.pocetak/deo2 deleted file mode 100644 index cd7b353..0000000 --- a/include/01.pocetak/deo2 +++ /dev/null @@ -1,5 +0,0 @@ -.section .multiboot -.align 4 -.long MAGIC -.long FLAGS -.long CHECKSUM diff --git a/include/01.pocetak/deo3 b/include/01.pocetak/deo3 deleted file mode 100644 index 44fcb34..0000000 --- a/include/01.pocetak/deo3 +++ /dev/null @@ -1,6 +0,0 @@ -.global _start -.global load_gdt -.global load_idt -.global enable_interrupts -.global ioport_in -.global ioport_out diff --git a/include/01.pocetak/deo4 b/include/01.pocetak/deo4 deleted file mode 100644 index 975ee19..0000000 --- a/include/01.pocetak/deo4 +++ /dev/null @@ -1,4 +0,0 @@ -load_gdt: - movl 4(%esp), %edx - lgdt (%edx) - ret diff --git a/include/01.pocetak/deo5 b/include/01.pocetak/deo5 deleted file mode 100644 index 6f095e9..0000000 --- a/include/01.pocetak/deo5 +++ /dev/null @@ -1,5 +0,0 @@ -load_idt: - movl 4(%esp), %edx - lidt (%edx) - sti - ret diff --git a/include/01.pocetak/deo6 b/include/01.pocetak/deo6 deleted file mode 100644 index 3f23d36..0000000 --- a/include/01.pocetak/deo6 +++ /dev/null @@ -1,4 +0,0 @@ -ioport_in: - movl 4(%esp),%edx - in %dx,%al - ret diff --git a/include/01.pocetak/deo7 b/include/01.pocetak/deo7 deleted file mode 100644 index f441d17..0000000 --- a/include/01.pocetak/deo7 +++ /dev/null @@ -1,5 +0,0 @@ -ioport_out: - movl 4(%esp),%edx - movl 8(%esp),%eax - outb %al,%dx - ret diff --git a/include/01.pocetak/deo8 b/include/01.pocetak/deo8 deleted file mode 100644 index cd3f772..0000000 --- a/include/01.pocetak/deo8 +++ /dev/null @@ -1,2 +0,0 @@ -.set CODE_SEGMENT, 0x08 -.set DATA_SEGMENT, 0x10 diff --git a/include/01.pocetak/deo9 b/include/01.pocetak/deo9 deleted file mode 100644 index a9280a6..0000000 --- a/include/01.pocetak/deo9 +++ /dev/null @@ -1,5 +0,0 @@ -.section .bss -.align 16 -stack_bottom: -.skip 16384 -stack_top: diff --git a/include/02.vga/deo1 b/include/02.vga/deo1 deleted file mode 100644 index dfee578..0000000 --- a/include/02.vga/deo1 +++ /dev/null @@ -1,4 +0,0 @@ -#include -#include -#include -#include diff --git a/include/02.vga/deo10 b/include/02.vga/deo10 deleted file mode 100644 index 9511b21..0000000 --- a/include/02.vga/deo10 +++ /dev/null @@ -1,10 +0,0 @@ -void terminal_putchar(char c) -{ - if(c=='\n') terminal_column=0,terminal_row++; - else - { - terminal_putentryat(c, terminal_color, terminal_column, terminal_row); - next_field(); - } - if (terminal_row==VGA_HEIGHT) movescreen(); -} diff --git a/include/02.vga/deo11 b/include/02.vga/deo11 deleted file mode 100644 index 8a757f4..0000000 --- a/include/02.vga/deo11 +++ /dev/null @@ -1,4 +0,0 @@ -void terminal_writestring(char* data) -{ - for(int i=0;data[i]!='\0';i++) terminal_putchar(data[i]); -} diff --git a/include/02.vga/deo12 b/include/02.vga/deo12 deleted file mode 100644 index be40f5a..0000000 --- a/include/02.vga/deo12 +++ /dev/null @@ -1,8 +0,0 @@ -void terminal_writeint(uint32_t num) -{ - char string[100]; - for(int i=0;i<100;i++) string[i]='\0'; - char *str=string; - itos(num,str); - terminal_writestring(str); -} diff --git a/include/02.vga/deo13 b/include/02.vga/deo13 deleted file mode 100644 index dfa3994..0000000 --- a/include/02.vga/deo13 +++ /dev/null @@ -1,8 +0,0 @@ -void terminal_writefloat(double num) -{ - char string[100]; - for(int i=0;i<100;i++) string[i]='\0'; - char *str=string; - ftos(num,str); - terminal_writestring(str); -} diff --git a/include/02.vga/deo14 b/include/02.vga/deo14 deleted file mode 100644 index efe6d3a..0000000 --- a/include/02.vga/deo14 +++ /dev/null @@ -1,6 +0,0 @@ -void clear() -{ - for(size_t i=0;i #include -#include +#include #include -#include size_t terminal_row; size_t terminal_column; @@ -10,15 +10,16 @@ uint16_t* terminal_buffer; void set_color(enum vga_color fg, enum vga_color bg) { - terminal_color = fg | bg << 4; + terminal_color = (uint8_t)(fg|bg<<4); } -static inline uint16_t vga_entry(unsigned char uc, uint8_t color) +static inline uint16_t vga_entry(char uc, uint8_t color); +static inline uint16_t vga_entry(char uc, uint8_t color) { - return (uint16_t) uc | (uint16_t) color << 8; + return (uint16_t)(uc|color<<8); } -void terminal_initialize() +void terminal_initialize(void) { terminal_row=0; terminal_column=0; @@ -40,19 +41,19 @@ void terminal_putentryat(char c, uint8_t color, size_t x, size_t y) terminal_buffer[index]=vga_entry(c, color); } -void movescreen() +void movescreen(void) { terminal_row--; for(size_t i=0;i +#include +#include +#include diff --git a/include/02.vga/vga10.c b/include/02.vga/vga10.c new file mode 100644 index 0000000..9511b21 --- /dev/null +++ b/include/02.vga/vga10.c @@ -0,0 +1,10 @@ +void terminal_putchar(char c) +{ + if(c=='\n') terminal_column=0,terminal_row++; + else + { + terminal_putentryat(c, terminal_color, terminal_column, terminal_row); + next_field(); + } + if (terminal_row==VGA_HEIGHT) movescreen(); +} diff --git a/include/02.vga/vga11.c b/include/02.vga/vga11.c new file mode 100644 index 0000000..d2a78f5 --- /dev/null +++ b/include/02.vga/vga11.c @@ -0,0 +1,4 @@ +void terminal_writestring(const char* data) +{ + for(int i=0;data[i]!='\0';i++) terminal_putchar(data[i]); +} diff --git a/include/02.vga/vga12.c b/include/02.vga/vga12.c new file mode 100644 index 0000000..be40f5a --- /dev/null +++ b/include/02.vga/vga12.c @@ -0,0 +1,8 @@ +void terminal_writeint(uint32_t num) +{ + char string[100]; + for(int i=0;i<100;i++) string[i]='\0'; + char *str=string; + itos(num,str); + terminal_writestring(str); +} diff --git a/include/02.vga/vga13.c b/include/02.vga/vga13.c new file mode 100644 index 0000000..dfa3994 --- /dev/null +++ b/include/02.vga/vga13.c @@ -0,0 +1,8 @@ +void terminal_writefloat(double num) +{ + char string[100]; + for(int i=0;i<100;i++) string[i]='\0'; + char *str=string; + ftos(num,str); + terminal_writestring(str); +} diff --git a/include/02.vga/vga14.c b/include/02.vga/vga14.c new file mode 100644 index 0000000..5ad2ed9 --- /dev/null +++ b/include/02.vga/vga14.c @@ -0,0 +1,7 @@ +void clear(void) +{ + for(size_t i=0;i diff --git a/include/03.gdt/deo2 b/include/03.gdt/deo2 deleted file mode 100644 index cbc5e1d..0000000 --- a/include/03.gdt/deo2 +++ /dev/null @@ -1,9 +0,0 @@ -struct gdt_entry -{ - uint16_t limit; - uint16_t base1; - uint8_t base2; - uint8_t access; - uint8_t limit_flags; - uint8_t base3; -} __attribute__((packed)); diff --git a/include/03.gdt/deo3 b/include/03.gdt/deo3 deleted file mode 100644 index e708661..0000000 --- a/include/03.gdt/deo3 +++ /dev/null @@ -1,5 +0,0 @@ -struct gdt_pointer -{ - uint16_t size; - uint32_t offset; -} __attribute__((packed)); diff --git a/include/03.gdt/deo4 b/include/03.gdt/deo4 deleted file mode 100644 index 1abf809..0000000 --- a/include/03.gdt/deo4 +++ /dev/null @@ -1 +0,0 @@ -extern void load_gdt(struct gdt_pointer *gdtp); diff --git a/include/03.gdt/deo5 b/include/03.gdt/deo5 deleted file mode 100644 index ba7c6e2..0000000 --- a/include/03.gdt/deo5 +++ /dev/null @@ -1,2 +0,0 @@ -struct gdt_entry gdt[5]; -struct gdt_pointer gdtp; diff --git a/include/03.gdt/deo6 b/include/03.gdt/deo6 deleted file mode 100644 index 8d6a1f0..0000000 --- a/include/03.gdt/deo6 +++ /dev/null @@ -1,9 +0,0 @@ -void init_gdt_entry(size_t num, uint32_t limit, uint32_t base, uint8_t access, uint8_t limit_flags) -{ - gdt[num].limit=limit; - gdt[num].base1=(base & 0xffff); - gdt[num].base2=(base & 0xff0000) >> 16; - gdt[num].access=access; - gdt[num].limit_flags=limit_flags; - gdt[num].base3=(base & 0xff000000) >> 24; -} diff --git a/include/03.gdt/deo7 b/include/03.gdt/deo7 deleted file mode 100644 index d69d009..0000000 --- a/include/03.gdt/deo7 +++ /dev/null @@ -1,4 +0,0 @@ -void init_gdt_table() -{ - gdtp.size=sizeof(gdt)-1; - gdtp.offset=(uint32_t)&gdt; diff --git a/include/03.gdt/deo8 b/include/03.gdt/deo8 deleted file mode 100644 index a122d84..0000000 --- a/include/03.gdt/deo8 +++ /dev/null @@ -1,5 +0,0 @@ - init_gdt_entry(0,0,0,0,0); // null segment - init_gdt_entry(1,0xffffffff,0,0b10011010,0b11001111); // code segment - init_gdt_entry(2,0xffffffff,0,0b10010010,0b11001111); // data segment - init_gdt_entry(3,0xffffffff,0,0b11111010,0b11001111); // user mode code segment - init_gdt_entry(4,0xffffffff,0,0b11110010,0b11001111); // user mode data segment diff --git a/include/03.gdt/deo9 b/include/03.gdt/deo9 deleted file mode 100644 index 89736a5..0000000 --- a/include/03.gdt/deo9 +++ /dev/null @@ -1,2 +0,0 @@ - load_gdt(&gdtp); -} diff --git a/include/03.gdt/gdt.c b/include/03.gdt/gdt.c index e3d2b4c..76ae9dd 100644 --- a/include/03.gdt/gdt.c +++ b/include/03.gdt/gdt.c @@ -1,46 +1,32 @@ +#include #include -struct gdt_entry -{ - uint16_t limit; - uint16_t base1; - uint8_t base2; - uint8_t access; - uint8_t limit_flags; - uint8_t base3; -} __attribute__((packed)); - -struct gdt_pointer -{ - uint16_t size; - uint32_t offset; -} __attribute__((packed)); - extern void load_gdt(struct gdt_pointer *gdtp); struct gdt_entry gdt[5]; struct gdt_pointer gdtp; -void init_gdt_entry(size_t num, uint32_t limit, uint32_t base, uint8_t access, uint8_t limit_flags) +void init_gdt_entry(size_t num, uint16_t limit, uint32_t base, uint8_t access, + uint8_t limit_flags) { gdt[num].limit=limit; gdt[num].base1=(base & 0xffff); - gdt[num].base2=(base & 0xff0000) >> 16; + gdt[num].base2=(uint8_t)((base & 0xff0000) >> 16); gdt[num].access=access; gdt[num].limit_flags=limit_flags; - gdt[num].base3=(base & 0xff000000) >> 24; + gdt[num].base3=(uint8_t)((base & 0xff000000) >> 24); } -void init_gdt_table() +void init_gdt_table(void) { gdtp.size=sizeof(gdt)-1; gdtp.offset=(uint32_t)&gdt; - init_gdt_entry(0,0,0,0,0); // null segment - init_gdt_entry(1,0xffffffff,0,0b10011010,0b11001111); // code segment - init_gdt_entry(2,0xffffffff,0,0b10010010,0b11001111); // data segment - init_gdt_entry(3,0xffffffff,0,0b11111010,0b11001111); // user mode code segment - init_gdt_entry(4,0xffffffff,0,0b11110010,0b11001111); // user mode data segment + init_gdt_entry(0,0,0,0,0); // null segment + init_gdt_entry(1,0xffff,0,0x9a,0xcf); // code segment + init_gdt_entry(2,0xffff,0,0x92,0xcf); // data segment + init_gdt_entry(3,0xffff,0,0xfa,0xcf); // user mode code segment + init_gdt_entry(4,0xffff,0,0xf2,0xcf); // user mode data segment load_gdt(&gdtp); } diff --git a/include/03.gdt/gdt.h b/include/03.gdt/gdt.h new file mode 100644 index 0000000..f31a982 --- /dev/null +++ b/include/03.gdt/gdt.h @@ -0,0 +1,26 @@ +#ifndef SOURCE_GDT_H +#define SOURCE_GDT_H + +#include + +struct gdt_entry +{ + uint16_t limit; + uint16_t base1; + uint8_t base2; + uint8_t access; + uint8_t limit_flags; + uint8_t base3; +} __attribute__((packed)); + +struct gdt_pointer +{ + uint16_t size; + uint32_t offset; +} __attribute__((packed)); + +void init_gdt_entry(size_t num, uint16_t limit, uint32_t base, uint8_t access, + uint8_t limit_flags); +void init_gdt_table(void); + +#endif diff --git a/include/03.gdt/gdt1.c b/include/03.gdt/gdt1.c new file mode 100644 index 0000000..dfd3835 --- /dev/null +++ b/include/03.gdt/gdt1.c @@ -0,0 +1,2 @@ +#include +#include diff --git a/include/03.gdt/gdt1.h b/include/03.gdt/gdt1.h new file mode 100644 index 0000000..07fcf62 --- /dev/null +++ b/include/03.gdt/gdt1.h @@ -0,0 +1,2 @@ +#ifndef SOURCE_GDT_H +#define SOURCE_GDT_H diff --git a/include/03.gdt/gdt2.c b/include/03.gdt/gdt2.c new file mode 100644 index 0000000..1abf809 --- /dev/null +++ b/include/03.gdt/gdt2.c @@ -0,0 +1 @@ +extern void load_gdt(struct gdt_pointer *gdtp); diff --git a/include/03.gdt/gdt2.h b/include/03.gdt/gdt2.h new file mode 100644 index 0000000..c45e28b --- /dev/null +++ b/include/03.gdt/gdt2.h @@ -0,0 +1 @@ +#include diff --git a/include/03.gdt/gdt3.c b/include/03.gdt/gdt3.c new file mode 100644 index 0000000..ba7c6e2 --- /dev/null +++ b/include/03.gdt/gdt3.c @@ -0,0 +1,2 @@ +struct gdt_entry gdt[5]; +struct gdt_pointer gdtp; diff --git a/include/03.gdt/gdt3.h b/include/03.gdt/gdt3.h new file mode 100644 index 0000000..cbc5e1d --- /dev/null +++ b/include/03.gdt/gdt3.h @@ -0,0 +1,9 @@ +struct gdt_entry +{ + uint16_t limit; + uint16_t base1; + uint8_t base2; + uint8_t access; + uint8_t limit_flags; + uint8_t base3; +} __attribute__((packed)); diff --git a/include/03.gdt/gdt4.c b/include/03.gdt/gdt4.c new file mode 100644 index 0000000..ebff5cb --- /dev/null +++ b/include/03.gdt/gdt4.c @@ -0,0 +1,10 @@ +void init_gdt_entry(size_t num, uint16_t limit, uint32_t base, uint8_t access, + uint8_t limit_flags) +{ + gdt[num].limit=limit; + gdt[num].base1=(base & 0xffff); + gdt[num].base2=(uint8_t)((base & 0xff0000) >> 16); + gdt[num].access=access; + gdt[num].limit_flags=limit_flags; + gdt[num].base3=(uint8_t)((base & 0xff000000) >> 24); +} diff --git a/include/03.gdt/gdt4.h b/include/03.gdt/gdt4.h new file mode 100644 index 0000000..e708661 --- /dev/null +++ b/include/03.gdt/gdt4.h @@ -0,0 +1,5 @@ +struct gdt_pointer +{ + uint16_t size; + uint32_t offset; +} __attribute__((packed)); diff --git a/include/03.gdt/gdt5.c b/include/03.gdt/gdt5.c new file mode 100644 index 0000000..c41ef42 --- /dev/null +++ b/include/03.gdt/gdt5.c @@ -0,0 +1,4 @@ +void init_gdt_table(void) +{ + gdtp.size=sizeof(gdt)-1; + gdtp.offset=(uint32_t)&gdt; diff --git a/include/03.gdt/gdt5.h b/include/03.gdt/gdt5.h new file mode 100644 index 0000000..430309c --- /dev/null +++ b/include/03.gdt/gdt5.h @@ -0,0 +1,3 @@ +void init_gdt_entry(size_t num, uint16_t limit, uint32_t base, uint8_t access, + uint8_t limit_flags); +void init_gdt_table(void); diff --git a/include/03.gdt/gdt6.c b/include/03.gdt/gdt6.c new file mode 100644 index 0000000..974a942 --- /dev/null +++ b/include/03.gdt/gdt6.c @@ -0,0 +1,5 @@ + init_gdt_entry(0,0,0,0,0); // null segment + init_gdt_entry(1,0xffff,0,0x9a,0xcf); // code segment + init_gdt_entry(2,0xffff,0,0x92,0xcf); // data segment + init_gdt_entry(3,0xffff,0,0xfa,0xcf); // user mode code segment + init_gdt_entry(4,0xffff,0,0xf2,0xcf); // user mode data segment diff --git a/include/03.gdt/gdt6.h b/include/03.gdt/gdt6.h new file mode 100644 index 0000000..69331c3 --- /dev/null +++ b/include/03.gdt/gdt6.h @@ -0,0 +1 @@ +#endif diff --git a/include/03.gdt/gdt7.c b/include/03.gdt/gdt7.c new file mode 100644 index 0000000..89736a5 --- /dev/null +++ b/include/03.gdt/gdt7.c @@ -0,0 +1,2 @@ + load_gdt(&gdtp); +} diff --git a/include/04.idt/deo1 b/include/04.idt/deo1 deleted file mode 100644 index 7c174c9..0000000 --- a/include/04.idt/deo1 +++ /dev/null @@ -1,3 +0,0 @@ -#include -#include -#include diff --git a/include/04.idt/deo10 b/include/04.idt/deo10 deleted file mode 100644 index 409dd15..0000000 --- a/include/04.idt/deo10 +++ /dev/null @@ -1,4 +0,0 @@ -void add_idt_entry(size_t num,uint32_t offset) -{ - init_idt_entry(num,offset,KERNEL_CODE,INTERRUPT_GATE_32); -} diff --git a/include/04.idt/deo11 b/include/04.idt/deo11 deleted file mode 100644 index 055e22a..0000000 --- a/include/04.idt/deo11 +++ /dev/null @@ -1,14 +0,0 @@ -void init_pic() -{ - ioport_out(PIC1_COMMAND_PORT, 0x11); - ioport_out(PIC2_COMMAND_PORT, 0x11); - ioport_out(PIC1_DATA_PORT, 0x20); - ioport_out(PIC2_DATA_PORT, 0x28); - ioport_out(PIC1_DATA_PORT, 0x04); - ioport_out(PIC2_DATA_PORT, 0x02); - ioport_out(PIC1_DATA_PORT, 0x01); - ioport_out(PIC2_DATA_PORT, 0x01); - ioport_out(PIC1_DATA_PORT, 0xff); - ioport_out(PIC2_DATA_PORT, 0xff); - ioport_out(PIC1_DATA_PORT, 0xFC); -} diff --git a/include/04.idt/deo12 b/include/04.idt/deo12 deleted file mode 100644 index ea57b35..0000000 --- a/include/04.idt/deo12 +++ /dev/null @@ -1,37 +0,0 @@ -void init_idt_table() -{ - init_pic(); - add_idt_entry(0,(uint32_t)irq0); - add_idt_entry(1,(uint32_t)irq1); - add_idt_entry(2,(uint32_t)irq2); - add_idt_entry(3,(uint32_t)irq3); - add_idt_entry(4,(uint32_t)irq4); - add_idt_entry(5,(uint32_t)irq5); - add_idt_entry(6,(uint32_t)irq6); - add_idt_entry(7,(uint32_t)irq7); - add_idt_entry(8,(uint32_t)irq8); - add_idt_entry(9,(uint32_t)irq9); - add_idt_entry(10,(uint32_t)irq10); - add_idt_entry(11,(uint32_t)irq11); - add_idt_entry(12,(uint32_t)irq12); - add_idt_entry(13,(uint32_t)irq13); - add_idt_entry(14,(uint32_t)irq14); - add_idt_entry(15,(uint32_t)irq15); - add_idt_entry(16,(uint32_t)irq16); - add_idt_entry(17,(uint32_t)irq17); - add_idt_entry(18,(uint32_t)irq18); - add_idt_entry(19,(uint32_t)irq19); - add_idt_entry(20,(uint32_t)irq20); - add_idt_entry(21,(uint32_t)irq21); - add_idt_entry(22,(uint32_t)irq22); - add_idt_entry(23,(uint32_t)irq23); - add_idt_entry(24,(uint32_t)irq24); - add_idt_entry(25,(uint32_t)irq25); - add_idt_entry(26,(uint32_t)irq26); - add_idt_entry(27,(uint32_t)irq27); - add_idt_entry(28,(uint32_t)irq28); - add_idt_entry(29,(uint32_t)irq29); - add_idt_entry(30,(uint32_t)irq30); - add_idt_entry(31,(uint32_t)irq31); - add_idt_entry(32,(uint32_t)timer_irq); - add_idt_entry(33,(uint32_t)keyboard_irq); diff --git a/include/04.idt/deo13 b/include/04.idt/deo13 deleted file mode 100644 index 427144b..0000000 --- a/include/04.idt/deo13 +++ /dev/null @@ -1,2 +0,0 @@ - idtp.size=sizeof(struct idt_entry)*256-1; - idtp.offset=(uint32_t)&idt; diff --git a/include/04.idt/deo14 b/include/04.idt/deo14 deleted file mode 100644 index 8442fdc..0000000 --- a/include/04.idt/deo14 +++ /dev/null @@ -1,2 +0,0 @@ - load_idt(&idtp); -} diff --git a/include/04.idt/deo2 b/include/04.idt/deo2 deleted file mode 100644 index afb8506..0000000 --- a/include/04.idt/deo2 +++ /dev/null @@ -1 +0,0 @@ -#define INTERRUPT_GATE_32 0x8E diff --git a/include/04.idt/deo3 b/include/04.idt/deo3 deleted file mode 100644 index c564d8a..0000000 --- a/include/04.idt/deo3 +++ /dev/null @@ -1,2 +0,0 @@ -#define KERNEL_CODE 0x08 -#define KERNEL_DATA 0x10 diff --git a/include/04.idt/deo4 b/include/04.idt/deo4 deleted file mode 100644 index ca70fa7..0000000 --- a/include/04.idt/deo4 +++ /dev/null @@ -1,4 +0,0 @@ -#define PIC1_COMMAND_PORT 0x20 -#define PIC1_DATA_PORT 0x21 -#define PIC2_COMMAND_PORT 0xA0 -#define PIC2_DATA_PORT 0xA1 diff --git a/include/04.idt/deo5 b/include/04.idt/deo5 deleted file mode 100644 index dcab25c..0000000 --- a/include/04.idt/deo5 +++ /dev/null @@ -1,8 +0,0 @@ -struct idt_entry -{ - uint16_t offset1; - uint16_t selector; - uint8_t zero; - uint8_t type_attr; - uint16_t offset2; -} __attribute__((packed)); diff --git a/include/04.idt/deo6 b/include/04.idt/deo6 deleted file mode 100644 index fe1bff5..0000000 --- a/include/04.idt/deo6 +++ /dev/null @@ -1,5 +0,0 @@ -struct idt_pointer -{ - uint16_t size; - uint32_t offset; -} __attribute__((packed)); diff --git a/include/04.idt/deo7 b/include/04.idt/deo7 deleted file mode 100644 index ffa0e82..0000000 --- a/include/04.idt/deo7 +++ /dev/null @@ -1,2 +0,0 @@ -extern void load_idt(struct idt_pointer *idtp); -extern void keyboard_irq(); diff --git a/include/04.idt/deo8 b/include/04.idt/deo8 deleted file mode 100644 index 28b2298..0000000 --- a/include/04.idt/deo8 +++ /dev/null @@ -1,2 +0,0 @@ -struct idt_entry idt[256]; -struct idt_pointer idtp; diff --git a/include/04.idt/deo9 b/include/04.idt/deo9 deleted file mode 100644 index d11c19e..0000000 --- a/include/04.idt/deo9 +++ /dev/null @@ -1,8 +0,0 @@ -void init_idt_entry(size_t num, uint32_t offset, uint16_t selector, uint8_t type_attr) -{ - idt[num].offset1=(offset & 0xffff); - idt[num].selector=selector; - idt[num].zero=0; - idt[num].type_attr=type_attr; - idt[num].offset2=(offset & 0xffff0000)>>16; -} diff --git a/include/04.idt/idt.c b/include/04.idt/idt.c deleted file mode 100644 index 843c9da..0000000 --- a/include/04.idt/idt.c +++ /dev/null @@ -1,108 +0,0 @@ -#include -#include -#include - -#define INTERRUPT_GATE_32 0x8E - -#define KERNEL_CODE 0x08 -#define KERNEL_DATA 0x10 - -#define PIC1_COMMAND_PORT 0x20 -#define PIC1_DATA_PORT 0x21 -#define PIC2_COMMAND_PORT 0xA0 -#define PIC2_DATA_PORT 0xA1 - -struct idt_entry -{ - uint16_t offset1; - uint16_t selector; - uint8_t zero; - uint8_t type_attr; - uint16_t offset2; -} __attribute__((packed)); - -struct idt_pointer -{ - uint16_t size; - uint32_t offset; -} __attribute__((packed)); - - -extern void load_idt(struct idt_pointer *idtp); -extern void keyboard_irq(); - -struct idt_entry idt[256]; -struct idt_pointer idtp; - -void init_idt_entry(size_t num, uint32_t offset, uint16_t selector, uint8_t type_attr) -{ - idt[num].offset1=(offset & 0xffff); - idt[num].selector=selector; - idt[num].zero=0; - idt[num].type_attr=type_attr; - idt[num].offset2=(offset & 0xffff0000)>>16; -} - -void add_idt_entry(size_t num,uint32_t offset) -{ - init_idt_entry(num,offset,KERNEL_CODE,INTERRUPT_GATE_32); -} - -void init_pic() -{ - ioport_out(PIC1_COMMAND_PORT, 0x11); - ioport_out(PIC2_COMMAND_PORT, 0x11); - ioport_out(PIC1_DATA_PORT, 0x20); - ioport_out(PIC2_DATA_PORT, 0x28); - ioport_out(PIC1_DATA_PORT, 0x04); - ioport_out(PIC2_DATA_PORT, 0x02); - ioport_out(PIC1_DATA_PORT, 0x01); - ioport_out(PIC2_DATA_PORT, 0x01); - ioport_out(PIC1_DATA_PORT, 0xff); - ioport_out(PIC2_DATA_PORT, 0xff); - ioport_out(PIC1_DATA_PORT, 0xFC); -} - -void init_idt_table() -{ - init_pic(); - add_idt_entry(0,(uint32_t)irq0); - add_idt_entry(1,(uint32_t)irq1); - add_idt_entry(2,(uint32_t)irq2); - add_idt_entry(3,(uint32_t)irq3); - add_idt_entry(4,(uint32_t)irq4); - add_idt_entry(5,(uint32_t)irq5); - add_idt_entry(6,(uint32_t)irq6); - add_idt_entry(7,(uint32_t)irq7); - add_idt_entry(8,(uint32_t)irq8); - add_idt_entry(9,(uint32_t)irq9); - add_idt_entry(10,(uint32_t)irq10); - add_idt_entry(11,(uint32_t)irq11); - add_idt_entry(12,(uint32_t)irq12); - add_idt_entry(13,(uint32_t)irq13); - add_idt_entry(14,(uint32_t)irq14); - add_idt_entry(15,(uint32_t)irq15); - add_idt_entry(16,(uint32_t)irq16); - add_idt_entry(17,(uint32_t)irq17); - add_idt_entry(18,(uint32_t)irq18); - add_idt_entry(19,(uint32_t)irq19); - add_idt_entry(20,(uint32_t)irq20); - add_idt_entry(21,(uint32_t)irq21); - add_idt_entry(22,(uint32_t)irq22); - add_idt_entry(23,(uint32_t)irq23); - add_idt_entry(24,(uint32_t)irq24); - add_idt_entry(25,(uint32_t)irq25); - add_idt_entry(26,(uint32_t)irq26); - add_idt_entry(27,(uint32_t)irq27); - add_idt_entry(28,(uint32_t)irq28); - add_idt_entry(29,(uint32_t)irq29); - add_idt_entry(30,(uint32_t)irq30); - add_idt_entry(31,(uint32_t)irq31); - add_idt_entry(32,(uint32_t)timer_irq); - add_idt_entry(33,(uint32_t)keyboard_irq); - - idtp.size=sizeof(struct idt_entry)*256-1; - idtp.offset=(uint32_t)&idt; - - load_idt(&idtp); -} diff --git a/include/04.idt/idt.h b/include/04.idt/idt.h new file mode 100644 index 0000000..cbae940 --- /dev/null +++ b/include/04.idt/idt.h @@ -0,0 +1,37 @@ +#ifndef SOURCE_IDT_H +#define SOURCE_IDT_H + +#include + +#define INTERRUPT_GATE_32 0x8E + +#define KERNEL_CODE 0x08 +#define KERNEL_DATA 0x10 + +#define PIC1_COMMAND_PORT 0x20 +#define PIC1_DATA_PORT 0x21 +#define PIC2_COMMAND_PORT 0xA0 +#define PIC2_DATA_PORT 0xA1 + +struct idt_entry +{ + uint16_t offset1; + uint16_t selector; + uint8_t zero; + uint8_t type_attr; + uint16_t offset2; +} __attribute__((packed)); + +struct idt_pointer +{ + uint16_t size; + uint32_t offset; +} __attribute__((packed)); + +void init_idt_entry(size_t num, uint32_t offset, uint16_t selector, uint8_t + type_attr); +void add_idt_entry(size_t num,uint32_t offset); +void init_pic(void); +void init_idt_table(void); + +#endif diff --git a/include/04.idt/idt1.h b/include/04.idt/idt1.h new file mode 100644 index 0000000..46876e9 --- /dev/null +++ b/include/04.idt/idt1.h @@ -0,0 +1,2 @@ +#ifndef SOURCE_IDT_H +#define SOURCE_IDT_H diff --git a/include/04.idt/idt2.h b/include/04.idt/idt2.h new file mode 100644 index 0000000..c45e28b --- /dev/null +++ b/include/04.idt/idt2.h @@ -0,0 +1 @@ +#include diff --git a/include/04.idt/idt3.h b/include/04.idt/idt3.h new file mode 100644 index 0000000..afb8506 --- /dev/null +++ b/include/04.idt/idt3.h @@ -0,0 +1 @@ +#define INTERRUPT_GATE_32 0x8E diff --git a/include/04.idt/idt4.h b/include/04.idt/idt4.h new file mode 100644 index 0000000..c564d8a --- /dev/null +++ b/include/04.idt/idt4.h @@ -0,0 +1,2 @@ +#define KERNEL_CODE 0x08 +#define KERNEL_DATA 0x10 diff --git a/include/04.idt/idt5.h b/include/04.idt/idt5.h new file mode 100644 index 0000000..ca70fa7 --- /dev/null +++ b/include/04.idt/idt5.h @@ -0,0 +1,4 @@ +#define PIC1_COMMAND_PORT 0x20 +#define PIC1_DATA_PORT 0x21 +#define PIC2_COMMAND_PORT 0xA0 +#define PIC2_DATA_PORT 0xA1 diff --git a/include/04.idt/idt6.h b/include/04.idt/idt6.h new file mode 100644 index 0000000..dcab25c --- /dev/null +++ b/include/04.idt/idt6.h @@ -0,0 +1,8 @@ +struct idt_entry +{ + uint16_t offset1; + uint16_t selector; + uint8_t zero; + uint8_t type_attr; + uint16_t offset2; +} __attribute__((packed)); diff --git a/include/04.idt/idt7.h b/include/04.idt/idt7.h new file mode 100644 index 0000000..fe1bff5 --- /dev/null +++ b/include/04.idt/idt7.h @@ -0,0 +1,5 @@ +struct idt_pointer +{ + uint16_t size; + uint32_t offset; +} __attribute__((packed)); diff --git a/include/04.idt/idt8.h b/include/04.idt/idt8.h new file mode 100644 index 0000000..046ac06 --- /dev/null +++ b/include/04.idt/idt8.h @@ -0,0 +1,5 @@ +void init_idt_entry(size_t num, uint32_t offset, uint16_t selector, uint8_t + type_attr); +void add_idt_entry(size_t num,uint32_t offset); +void init_pic(void); +void init_idt_table(void); diff --git a/include/04.idt/idt9.h b/include/04.idt/idt9.h new file mode 100644 index 0000000..69331c3 --- /dev/null +++ b/include/04.idt/idt9.h @@ -0,0 +1 @@ +#endif diff --git a/include/05.irq/idt.c b/include/05.irq/idt.c new file mode 100644 index 0000000..f73d574 --- /dev/null +++ b/include/05.irq/idt.c @@ -0,0 +1,83 @@ +#include +#include +#include +#include + +extern void load_idt(struct idt_pointer *idtp); + +struct idt_entry idt[256]; +struct idt_pointer idtp; + +void init_idt_entry(size_t num, uint32_t offset, uint16_t selector, uint8_t + type_attr) +{ + idt[num].offset1=(uint16_t)(offset & 0xffff); + idt[num].selector=selector; + idt[num].zero=0; + idt[num].type_attr=type_attr; + idt[num].offset2=(uint16_t)((offset & 0xffff0000)>>16); +} + +void add_idt_entry(size_t num, uint32_t offset) +{ + init_idt_entry(num,offset,KERNEL_CODE,INTERRUPT_GATE_32); +} + +void init_pic(void) +{ + ioport_out(PIC1_COMMAND_PORT, 0x11); + ioport_out(PIC2_COMMAND_PORT, 0x11); + ioport_out(PIC1_DATA_PORT, 0x20); + ioport_out(PIC2_DATA_PORT, 0x28); + ioport_out(PIC1_DATA_PORT, 0x04); + ioport_out(PIC2_DATA_PORT, 0x02); + ioport_out(PIC1_DATA_PORT, 0x01); + ioport_out(PIC2_DATA_PORT, 0x01); + ioport_out(PIC1_DATA_PORT, 0xff); + ioport_out(PIC2_DATA_PORT, 0xff); + ioport_out(PIC1_DATA_PORT, 0xFC); +} + +void init_idt_table(void) +{ + init_pic(); + add_idt_entry(0,(uint32_t)irq0); + add_idt_entry(1,(uint32_t)irq1); + add_idt_entry(2,(uint32_t)irq2); + add_idt_entry(3,(uint32_t)irq3); + add_idt_entry(4,(uint32_t)irq4); + add_idt_entry(5,(uint32_t)irq5); + add_idt_entry(6,(uint32_t)irq6); + add_idt_entry(7,(uint32_t)irq7); + add_idt_entry(8,(uint32_t)irq8); + add_idt_entry(9,(uint32_t)irq9); + add_idt_entry(10,(uint32_t)irq10); + add_idt_entry(11,(uint32_t)irq11); + add_idt_entry(12,(uint32_t)irq12); + add_idt_entry(13,(uint32_t)irq13); + add_idt_entry(14,(uint32_t)irq14); + add_idt_entry(15,(uint32_t)irq15); + add_idt_entry(16,(uint32_t)irq16); + add_idt_entry(17,(uint32_t)irq17); + add_idt_entry(18,(uint32_t)irq18); + add_idt_entry(19,(uint32_t)irq19); + add_idt_entry(20,(uint32_t)irq20); + add_idt_entry(21,(uint32_t)irq21); + add_idt_entry(22,(uint32_t)irq22); + add_idt_entry(23,(uint32_t)irq23); + add_idt_entry(24,(uint32_t)irq24); + add_idt_entry(25,(uint32_t)irq25); + add_idt_entry(26,(uint32_t)irq26); + add_idt_entry(27,(uint32_t)irq27); + add_idt_entry(28,(uint32_t)irq28); + add_idt_entry(29,(uint32_t)irq29); + add_idt_entry(30,(uint32_t)irq30); + add_idt_entry(31,(uint32_t)irq31); + add_idt_entry(32,(uint32_t)timer_irq); + add_idt_entry(33,(uint32_t)keyboard_irq); + + idtp.size=sizeof(struct idt_entry)*256-1; + idtp.offset=(uint32_t)&idt; + + load_idt(&idtp); +} diff --git a/include/05.irq/idt1.c b/include/05.irq/idt1.c new file mode 100644 index 0000000..991abe3 --- /dev/null +++ b/include/05.irq/idt1.c @@ -0,0 +1,4 @@ +#include +#include +#include +#include diff --git a/include/05.irq/idt2.c b/include/05.irq/idt2.c new file mode 100644 index 0000000..f284e8b --- /dev/null +++ b/include/05.irq/idt2.c @@ -0,0 +1 @@ +extern void load_idt(struct idt_pointer *idtp); diff --git a/include/05.irq/idt3.c b/include/05.irq/idt3.c new file mode 100644 index 0000000..28b2298 --- /dev/null +++ b/include/05.irq/idt3.c @@ -0,0 +1,2 @@ +struct idt_entry idt[256]; +struct idt_pointer idtp; diff --git a/include/05.irq/idt4.c b/include/05.irq/idt4.c new file mode 100644 index 0000000..e0d97ff --- /dev/null +++ b/include/05.irq/idt4.c @@ -0,0 +1,9 @@ +void init_idt_entry(size_t num, uint32_t offset, uint16_t selector, uint8_t + type_attr) +{ + idt[num].offset1=(uint16_t)(offset & 0xffff); + idt[num].selector=selector; + idt[num].zero=0; + idt[num].type_attr=type_attr; + idt[num].offset2=(uint16_t)((offset & 0xffff0000)>>16); +} diff --git a/include/05.irq/idt5.c b/include/05.irq/idt5.c new file mode 100644 index 0000000..0e0e2ea --- /dev/null +++ b/include/05.irq/idt5.c @@ -0,0 +1,4 @@ +void add_idt_entry(size_t num, uint32_t offset) +{ + init_idt_entry(num,offset,KERNEL_CODE,INTERRUPT_GATE_32); +} diff --git a/include/05.irq/idt6.c b/include/05.irq/idt6.c new file mode 100644 index 0000000..eae37fa --- /dev/null +++ b/include/05.irq/idt6.c @@ -0,0 +1,14 @@ +void init_pic(void) +{ + ioport_out(PIC1_COMMAND_PORT, 0x11); + ioport_out(PIC2_COMMAND_PORT, 0x11); + ioport_out(PIC1_DATA_PORT, 0x20); + ioport_out(PIC2_DATA_PORT, 0x28); + ioport_out(PIC1_DATA_PORT, 0x04); + ioport_out(PIC2_DATA_PORT, 0x02); + ioport_out(PIC1_DATA_PORT, 0x01); + ioport_out(PIC2_DATA_PORT, 0x01); + ioport_out(PIC1_DATA_PORT, 0xff); + ioport_out(PIC2_DATA_PORT, 0xff); + ioport_out(PIC1_DATA_PORT, 0xFC); +} diff --git a/include/05.irq/idt7.c b/include/05.irq/idt7.c new file mode 100644 index 0000000..14d0f1a --- /dev/null +++ b/include/05.irq/idt7.c @@ -0,0 +1,37 @@ +void init_idt_table(void) +{ + init_pic(); + add_idt_entry(0,(uint32_t)irq0); + add_idt_entry(1,(uint32_t)irq1); + add_idt_entry(2,(uint32_t)irq2); + add_idt_entry(3,(uint32_t)irq3); + add_idt_entry(4,(uint32_t)irq4); + add_idt_entry(5,(uint32_t)irq5); + add_idt_entry(6,(uint32_t)irq6); + add_idt_entry(7,(uint32_t)irq7); + add_idt_entry(8,(uint32_t)irq8); + add_idt_entry(9,(uint32_t)irq9); + add_idt_entry(10,(uint32_t)irq10); + add_idt_entry(11,(uint32_t)irq11); + add_idt_entry(12,(uint32_t)irq12); + add_idt_entry(13,(uint32_t)irq13); + add_idt_entry(14,(uint32_t)irq14); + add_idt_entry(15,(uint32_t)irq15); + add_idt_entry(16,(uint32_t)irq16); + add_idt_entry(17,(uint32_t)irq17); + add_idt_entry(18,(uint32_t)irq18); + add_idt_entry(19,(uint32_t)irq19); + add_idt_entry(20,(uint32_t)irq20); + add_idt_entry(21,(uint32_t)irq21); + add_idt_entry(22,(uint32_t)irq22); + add_idt_entry(23,(uint32_t)irq23); + add_idt_entry(24,(uint32_t)irq24); + add_idt_entry(25,(uint32_t)irq25); + add_idt_entry(26,(uint32_t)irq26); + add_idt_entry(27,(uint32_t)irq27); + add_idt_entry(28,(uint32_t)irq28); + add_idt_entry(29,(uint32_t)irq29); + add_idt_entry(30,(uint32_t)irq30); + add_idt_entry(31,(uint32_t)irq31); + add_idt_entry(32,(uint32_t)timer_irq); + add_idt_entry(33,(uint32_t)keyboard_irq); diff --git a/include/05.irq/idt8.c b/include/05.irq/idt8.c new file mode 100644 index 0000000..427144b --- /dev/null +++ b/include/05.irq/idt8.c @@ -0,0 +1,2 @@ + idtp.size=sizeof(struct idt_entry)*256-1; + idtp.offset=(uint32_t)&idt; diff --git a/include/05.irq/idt9.c b/include/05.irq/idt9.c new file mode 100644 index 0000000..8442fdc --- /dev/null +++ b/include/05.irq/idt9.c @@ -0,0 +1,2 @@ + load_idt(&idtp); +} diff --git a/include/06.keyboard/deo1 b/include/06.keyboard/deo1 deleted file mode 100644 index 13fd550..0000000 --- a/include/06.keyboard/deo1 +++ /dev/null @@ -1,3 +0,0 @@ -#include -#include -#include diff --git a/include/06.keyboard/deo10 b/include/06.keyboard/deo10 deleted file mode 100644 index e5d558c..0000000 --- a/include/06.keyboard/deo10 +++ /dev/null @@ -1,18 +0,0 @@ -void enter() -{ - printf("\n"); - if(buffer_index>0) - { - tty(buffer[buffer_current]); - buffer_size[buffer_current]=buffer_index; - if(buffer_current==buffer_all) buffer_current=(++buffer_all); - else - { - for(size_t i=0;i0) - { - buffer_size[buffer_current]=buffer_index; - for(size_t i=0;i #include #include -#include +#include +#include +#include +#include -#define BUFFER_SIZE 200 -#define BUFFER_LOG 200 char buffer[BUFFER_LOG][BUFFER_SIZE]; size_t buffer_size[BUFFER_LOG]; size_t buffer_current=0; size_t buffer_all=0; size_t buffer_index=0; -#define PIC1_COMMAND_PORT 0x20 -#define PIC1_DATA_PORT 0x21 -#define PIC2_COMMAND_PORT 0xA0 -#define PIC2_DATA_PORT 0xA1 -// IO Ports for Keyboard -#define KEYBOARD_DATA_PORT 0x60 -#define KEYBOARD_STATUS_PORT 0x64 - -void previous_field(void); -void tty(char *buffer); -void prompt(void); -void clear(); -void us_en(char keymap[]); -void us_en_shift(char keymap[]); - char charcode[256]; char shift_charcode[256]; bool ispressed[128]; -#define lshift 0x2A -#define rshift 0x36 -#define lctrl 0x1D -#define rctrl 0x1D void init_keyboard() { diff --git a/include/06.keyboard/keyboard1.c b/include/06.keyboard/keyboard1.c new file mode 100644 index 0000000..7576f1e --- /dev/null +++ b/include/06.keyboard/keyboard1.c @@ -0,0 +1,7 @@ +#include +#include +#include +#include +#include +#include +#include diff --git a/include/06.keyboard/keyboard10.c b/include/06.keyboard/keyboard10.c new file mode 100644 index 0000000..b40c42b --- /dev/null +++ b/include/06.keyboard/keyboard10.c @@ -0,0 +1,11 @@ +void keyup() +{ + if(buffer_current>0) + { + buffer_size[buffer_current]=buffer_index; + for(size_t i=0;i0) + { + tty(buffer[buffer_current]); + buffer_size[buffer_current]=buffer_index; + if(buffer_current==buffer_all) buffer_current=(++buffer_all); + else + { + for(size_t i=0;i -#include -#include diff --git a/include/07.pit/deo10 b/include/07.pit/deo10 deleted file mode 100644 index 208a223..0000000 --- a/include/07.pit/deo10 +++ /dev/null @@ -1,4 +0,0 @@ - // Send the frequency divisor. - ioport_out(0x40, l); - ioport_out(0x40, h); -} diff --git a/include/07.pit/deo2 b/include/07.pit/deo2 deleted file mode 100644 index dfa7284..0000000 --- a/include/07.pit/deo2 +++ /dev/null @@ -1 +0,0 @@ -void add_idt_entry(size_t num,uint32_t offset); diff --git a/include/07.pit/deo3 b/include/07.pit/deo3 deleted file mode 100644 index 025eb31..0000000 --- a/include/07.pit/deo3 +++ /dev/null @@ -1,4 +0,0 @@ -uint32_t tick=0; -const uint32_t TICKS_PER_SECOND=50; -extern uint32_t time; -uint32_t time=0; diff --git a/include/07.pit/deo4 b/include/07.pit/deo4 deleted file mode 100644 index 8eba051..0000000 --- a/include/07.pit/deo4 +++ /dev/null @@ -1,9 +0,0 @@ -void timer_handler() -{ - tick++; - if(tick==TICKS_PER_SECOND) - { - //printf("%d seconds passed\n",time); - tick=0; - time++; - } diff --git a/include/07.pit/deo5 b/include/07.pit/deo5 deleted file mode 100644 index eaf7bcf..0000000 --- a/include/07.pit/deo5 +++ /dev/null @@ -1,3 +0,0 @@ - ioport_out(0x20, 0x20); - ioport_out(0xa0,0x20); -} diff --git a/include/07.pit/deo6 b/include/07.pit/deo6 deleted file mode 100644 index 12cee6a..0000000 --- a/include/07.pit/deo6 +++ /dev/null @@ -1,3 +0,0 @@ -void init_timer(uint32_t frequency) -{ - // Firstly, register our timer callback. diff --git a/include/07.pit/deo7 b/include/07.pit/deo7 deleted file mode 100644 index c780ebc..0000000 --- a/include/07.pit/deo7 +++ /dev/null @@ -1,4 +0,0 @@ - // The value we send to the PIT is the value to divide it's input clock - // (1193180 Hz) by, to get our required frequency. Important to note is - // that the divisor must be small enough to fit into 16-bits. - uint32_t divisor = 1193180 / frequency; diff --git a/include/07.pit/deo8 b/include/07.pit/deo8 deleted file mode 100644 index 8c64aaf..0000000 --- a/include/07.pit/deo8 +++ /dev/null @@ -1,2 +0,0 @@ - // Send the command byte. - ioport_out(0x43, 0x36); diff --git a/include/07.pit/deo9 b/include/07.pit/deo9 deleted file mode 100644 index 1deca04..0000000 --- a/include/07.pit/deo9 +++ /dev/null @@ -1,3 +0,0 @@ - // Divisor has to be sent byte-wise, so split here into upper/lower bytes. - uint8_t l = (uint8_t)(divisor & 0xFF); - uint8_t h = (uint8_t)( (divisor>>8) & 0xFF ); diff --git a/include/07.pit/timer.c b/include/07.pit/timer.c index 390e512..3a8f159 100644 --- a/include/07.pit/timer.c +++ b/include/07.pit/timer.c @@ -1,20 +1,18 @@ +#include #include #include -#include - -void add_idt_entry(size_t num,uint32_t offset); +#include uint32_t tick=0; const uint32_t TICKS_PER_SECOND=50; extern uint32_t time; uint32_t time=0; -void timer_handler() +void timer_handler(void) { tick++; if(tick==TICKS_PER_SECOND) { - //printf("%d seconds passed\n",time); tick=0; time++; } @@ -25,21 +23,12 @@ void timer_handler() void init_timer(uint32_t frequency) { - // Firstly, register our timer callback. - - // The value we send to the PIT is the value to divide it's input clock - // (1193180 Hz) by, to get our required frequency. Important to note is - // that the divisor must be small enough to fit into 16-bits. uint32_t divisor = 1193180 / frequency; - - // Send the command byte. ioport_out(0x43, 0x36); - // Divisor has to be sent byte-wise, so split here into upper/lower bytes. uint8_t l = (uint8_t)(divisor & 0xFF); uint8_t h = (uint8_t)( (divisor>>8) & 0xFF ); - // Send the frequency divisor. ioport_out(0x40, l); ioport_out(0x40, h); } diff --git a/include/07.pit/timer1.c b/include/07.pit/timer1.c new file mode 100644 index 0000000..02e3f5b --- /dev/null +++ b/include/07.pit/timer1.c @@ -0,0 +1,4 @@ +#include +#include +#include +#include diff --git a/include/07.pit/timer2.c b/include/07.pit/timer2.c new file mode 100644 index 0000000..025eb31 --- /dev/null +++ b/include/07.pit/timer2.c @@ -0,0 +1,4 @@ +uint32_t tick=0; +const uint32_t TICKS_PER_SECOND=50; +extern uint32_t time; +uint32_t time=0; diff --git a/include/07.pit/timer3.c b/include/07.pit/timer3.c new file mode 100644 index 0000000..6527a48 --- /dev/null +++ b/include/07.pit/timer3.c @@ -0,0 +1,8 @@ +void timer_handler(void) +{ + tick++; + if(tick==TICKS_PER_SECOND) + { + tick=0; + time++; + } diff --git a/include/07.pit/timer4.c b/include/07.pit/timer4.c new file mode 100644 index 0000000..eaf7bcf --- /dev/null +++ b/include/07.pit/timer4.c @@ -0,0 +1,3 @@ + ioport_out(0x20, 0x20); + ioport_out(0xa0,0x20); +} diff --git a/include/07.pit/timer5.c b/include/07.pit/timer5.c new file mode 100644 index 0000000..c1718a5 --- /dev/null +++ b/include/07.pit/timer5.c @@ -0,0 +1,4 @@ +void init_timer(uint32_t frequency) +{ + uint32_t divisor = 1193180 / frequency; + ioport_out(0x43, 0x36); diff --git a/include/07.pit/timer6.c b/include/07.pit/timer6.c new file mode 100644 index 0000000..c93e648 --- /dev/null +++ b/include/07.pit/timer6.c @@ -0,0 +1,2 @@ + uint8_t l = (uint8_t)(divisor & 0xFF); + uint8_t h = (uint8_t)( (divisor>>8) & 0xFF ); diff --git a/include/07.pit/timer7.c b/include/07.pit/timer7.c new file mode 100644 index 0000000..b7da9b6 --- /dev/null +++ b/include/07.pit/timer7.c @@ -0,0 +1,3 @@ + ioport_out(0x40, l); + ioport_out(0x40, h); +} diff --git a/include/08.heap/deo1 b/include/08.heap/deo1 deleted file mode 100644 index c45e28b..0000000 --- a/include/08.heap/deo1 +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/include/08.heap/deo10 b/include/08.heap/deo10 deleted file mode 100644 index fd64ff9..0000000 --- a/include/08.heap/deo10 +++ /dev/null @@ -1,5 +0,0 @@ - /* reserve room for bitmap */ - bcnt = (bcnt / bsize) * bsize < bcnt ? bcnt / bsize + 1 : bcnt / bsize; - for (x = 0; x < bcnt; ++x) { - bm[x] = 5; - } diff --git a/include/08.heap/deo11 b/include/08.heap/deo11 deleted file mode 100644 index a61193b..0000000 --- a/include/08.heap/deo11 +++ /dev/null @@ -1,4 +0,0 @@ - b->lfb = bcnt - 1; - b->used = bcnt; - return 1; -} diff --git a/include/08.heap/deo12 b/include/08.heap/deo12 deleted file mode 100644 index 84c5721..0000000 --- a/include/08.heap/deo12 +++ /dev/null @@ -1,5 +0,0 @@ -static uint8_t k_heapBMGetNID(uint8_t a, uint8_t b) { - uint8_t c; - for (c = a + 1; c == b || c == 0; ++c); - return c; -} diff --git a/include/08.heap/deo13 b/include/08.heap/deo13 deleted file mode 100644 index 369c3f3..0000000 --- a/include/08.heap/deo13 +++ /dev/null @@ -1,7 +0,0 @@ -void *k_heapBMAlloc(KHEAPBM *heap, uint32_t size) { - KHEAPBLOCKBM *b; - uint8_t *bm; - uint32_t bcnt; - uint32_t x, y, z; - uint32_t bneed; - uint8_t nid; diff --git a/include/08.heap/deo14 b/include/08.heap/deo14 deleted file mode 100644 index 8bfb6f0..0000000 --- a/include/08.heap/deo14 +++ /dev/null @@ -1,4 +0,0 @@ - /* iterate blocks */ - for (b = heap->fblock; b; b = b->next) { - /* check if block has enough room */ - if (b->size - (b->used * b->bsize) >= size) { diff --git a/include/08.heap/deo15 b/include/08.heap/deo15 deleted file mode 100644 index a867821..0000000 --- a/include/08.heap/deo15 +++ /dev/null @@ -1,3 +0,0 @@ - bcnt = b->size / b->bsize; - bneed = (size / b->bsize) * b->bsize < size ? size / b->bsize + 1 : size / b->bsize; - bm = (uint8_t*)&b[1]; diff --git a/include/08.heap/deo16 b/include/08.heap/deo16 deleted file mode 100644 index 78f4675..0000000 --- a/include/08.heap/deo16 +++ /dev/null @@ -1,5 +0,0 @@ - for (x = (b->lfb + 1 >= bcnt ? 0 : b->lfb + 1); x != b->lfb; ++x) { - /* just wrap around */ - if (x >= bcnt) { - x = 0; - } diff --git a/include/08.heap/deo17 b/include/08.heap/deo17 deleted file mode 100644 index d20be4c..0000000 --- a/include/08.heap/deo17 +++ /dev/null @@ -1,3 +0,0 @@ - if (bm[x] == 0) { - /* count free blocks */ - for (y = 0; bm[x + y] == 0 && y < bneed && (x + y) < bcnt; ++y); diff --git a/include/08.heap/deo18 b/include/08.heap/deo18 deleted file mode 100644 index fed8463..0000000 --- a/include/08.heap/deo18 +++ /dev/null @@ -1,4 +0,0 @@ - /* we have enough, now allocate them */ - if (y == bneed) { - /* find ID that does not match left or right */ - nid = k_heapBMGetNID(bm[x - 1], bm[x + y]); diff --git a/include/08.heap/deo19 b/include/08.heap/deo19 deleted file mode 100644 index 9b49484..0000000 --- a/include/08.heap/deo19 +++ /dev/null @@ -1,4 +0,0 @@ - /* allocate by setting id */ - for (z = 0; z < y; ++z) { - bm[x + z] = nid; - } diff --git a/include/08.heap/deo2 b/include/08.heap/deo2 deleted file mode 100644 index 2a69314..0000000 --- a/include/08.heap/deo2 +++ /dev/null @@ -1,7 +0,0 @@ -typedef struct _KHEAPBLOCKBM { - struct _KHEAPBLOCKBM *next; - uint32_t size; - uint32_t used; - uint32_t bsize; - uint32_t lfb; -} KHEAPBLOCKBM; diff --git a/include/08.heap/deo20 b/include/08.heap/deo20 deleted file mode 100644 index f141368..0000000 --- a/include/08.heap/deo20 +++ /dev/null @@ -1,2 +0,0 @@ - /* optimization */ - b->lfb = (x + bneed) - 2; diff --git a/include/08.heap/deo21 b/include/08.heap/deo21 deleted file mode 100644 index 8fd73e2..0000000 --- a/include/08.heap/deo21 +++ /dev/null @@ -1,2 +0,0 @@ - /* count used blocks NOT bytes */ - b->used += y; diff --git a/include/08.heap/deo22 b/include/08.heap/deo22 deleted file mode 100644 index 98c1157..0000000 --- a/include/08.heap/deo22 +++ /dev/null @@ -1,2 +0,0 @@ - return (void*)(x * b->bsize + (uintptr_t)&b[1]); - } diff --git a/include/08.heap/deo23 b/include/08.heap/deo23 deleted file mode 100644 index 21aa8c8..0000000 --- a/include/08.heap/deo23 +++ /dev/null @@ -1,9 +0,0 @@ - /* x will be incremented by one ONCE more in our FOR loop */ - x += (y - 1); - continue; - } - } - } - } - return 0; -} diff --git a/include/08.heap/deo24 b/include/08.heap/deo24 deleted file mode 100644 index e9c116b..0000000 --- a/include/08.heap/deo24 +++ /dev/null @@ -1,7 +0,0 @@ -void k_heapBMFree(KHEAPBM *heap, void *ptr) { - KHEAPBLOCKBM *b; - uintptr_t ptroff; - uint32_t bi, x; - uint8_t *bm; - uint8_t id; - uint32_t max; diff --git a/include/08.heap/deo25 b/include/08.heap/deo25 deleted file mode 100644 index 1a22151..0000000 --- a/include/08.heap/deo25 +++ /dev/null @@ -1,20 +0,0 @@ - for (b = heap->fblock; b; b = b->next) { - if ((uintptr_t)ptr > (uintptr_t)b && (uintptr_t)ptr < (uintptr_t)b + sizeof(KHEAPBLOCKBM) + b->size) { - /* found block */ - ptroff = (uintptr_t)ptr - (uintptr_t)&b[1]; /* get offset to get block */ - /* block offset in BM */ - bi = ptroff / b->bsize; - /* .. */ - bm = (uint8_t*)&b[1]; - /* clear allocation */ - id = bm[bi]; - /* oddly.. GCC did not optimize this */ - max = b->size / b->bsize; - for (x = bi; bm[x] == id && x < max; ++x) { - bm[x] = 0; - } - /* update free block count */ - b->used -= x - bi; - return; - } - } diff --git a/include/08.heap/deo26 b/include/08.heap/deo26 deleted file mode 100644 index 11a4697..0000000 --- a/include/08.heap/deo26 +++ /dev/null @@ -1,3 +0,0 @@ - /* this error needs to be raised or reported somehow */ - return; -} diff --git a/include/08.heap/deo27 b/include/08.heap/deo27 deleted file mode 100644 index 6ac75a9..0000000 --- a/include/08.heap/deo27 +++ /dev/null @@ -1 +0,0 @@ -KHEAPBM kheap; diff --git a/include/08.heap/deo28 b/include/08.heap/deo28 deleted file mode 100644 index 6d7223d..0000000 --- a/include/08.heap/deo28 +++ /dev/null @@ -1,4 +0,0 @@ -void kheapinit() -{ - k_heapBMInit(&kheap); -} diff --git a/include/08.heap/deo29 b/include/08.heap/deo29 deleted file mode 100644 index de767a2..0000000 --- a/include/08.heap/deo29 +++ /dev/null @@ -1,4 +0,0 @@ -int kheapaddblock(uintptr_t addr,uint32_t size,uint32_t bsize) -{ - return k_heapBMAddBlock(&kheap,addr,size,bsize); -} diff --git a/include/08.heap/deo3 b/include/08.heap/deo3 deleted file mode 100644 index d07786d..0000000 --- a/include/08.heap/deo3 +++ /dev/null @@ -1,3 +0,0 @@ -typedef struct _KHEAPBM { - KHEAPBLOCKBM *fblock; -} KHEAPBM; diff --git a/include/08.heap/deo30 b/include/08.heap/deo30 deleted file mode 100644 index 22972f4..0000000 --- a/include/08.heap/deo30 +++ /dev/null @@ -1,4 +0,0 @@ -void *kmalloc(uint32_t size) -{ - return k_heapBMAlloc(&kheap,size); -} diff --git a/include/08.heap/deo31 b/include/08.heap/deo31 deleted file mode 100644 index d4d5941..0000000 --- a/include/08.heap/deo31 +++ /dev/null @@ -1,4 +0,0 @@ -void kfree(void *ptr) -{ - k_heapBMFree(&kheap,ptr); -} diff --git a/include/08.heap/deo4 b/include/08.heap/deo4 deleted file mode 100644 index c2dc3b5..0000000 --- a/include/08.heap/deo4 +++ /dev/null @@ -1,3 +0,0 @@ -void k_heapBMInit(KHEAPBM *heap) { - heap->fblock = 0; -} diff --git a/include/08.heap/deo5 b/include/08.heap/deo5 deleted file mode 100644 index 8eda156..0000000 --- a/include/08.heap/deo5 +++ /dev/null @@ -1,5 +0,0 @@ -int k_heapBMAddBlock(KHEAPBM *heap, uintptr_t addr, uint32_t size, uint32_t bsize) { - KHEAPBLOCKBM *b; - uint32_t bcnt; - uint32_t x; - uint8_t *bm; diff --git a/include/08.heap/deo6 b/include/08.heap/deo6 deleted file mode 100644 index 024a09a..0000000 --- a/include/08.heap/deo6 +++ /dev/null @@ -1,3 +0,0 @@ - b = (KHEAPBLOCKBM*)addr; - b->size = size - sizeof(KHEAPBLOCKBM); - b->bsize = bsize; diff --git a/include/08.heap/deo7 b/include/08.heap/deo7 deleted file mode 100644 index c816b2c..0000000 --- a/include/08.heap/deo7 +++ /dev/null @@ -1,2 +0,0 @@ - b->next = heap->fblock; - heap->fblock = b; diff --git a/include/08.heap/deo8 b/include/08.heap/deo8 deleted file mode 100644 index 3a9ea03..0000000 --- a/include/08.heap/deo8 +++ /dev/null @@ -1,2 +0,0 @@ - bcnt = b->size / b->bsize; - bm = (uint8_t*)&b[1]; diff --git a/include/08.heap/deo9 b/include/08.heap/deo9 deleted file mode 100644 index 7183948..0000000 --- a/include/08.heap/deo9 +++ /dev/null @@ -1,4 +0,0 @@ - /* clear bitmap */ - for (x = 0; x < bcnt; ++x) { - bm[x] = 0; - } diff --git a/include/08.heap/heap.c b/include/08.heap/heap.c index 99d0a37..3120ed8 100644 --- a/include/08.heap/heap.c +++ b/include/08.heap/heap.c @@ -1,22 +1,14 @@ +#include #include -typedef struct _KHEAPBLOCKBM { - struct _KHEAPBLOCKBM *next; - uint32_t size; - uint32_t used; - uint32_t bsize; - uint32_t lfb; -} KHEAPBLOCKBM; - -typedef struct _KHEAPBM { - KHEAPBLOCKBM *fblock; -} KHEAPBM; - -void k_heapBMInit(KHEAPBM *heap) { +void k_heapBMInit(KHEAPBM *heap) +{ heap->fblock = 0; } -int k_heapBMAddBlock(KHEAPBM *heap, uintptr_t addr, uint32_t size, uint32_t bsize) { +int k_heapBMAddBlock(KHEAPBM *heap, uintptr_t addr, uint32_t size, uint32_t + bsize) +{ KHEAPBLOCKBM *b; uint32_t bcnt; uint32_t x; @@ -48,13 +40,16 @@ int k_heapBMAddBlock(KHEAPBM *heap, uintptr_t addr, uint32_t size, uint32_t bsiz return 1; } -static uint8_t k_heapBMGetNID(uint8_t a, uint8_t b) { +static uint8_t k_heapBMGetNID(uint8_t a, uint8_t b); +static uint8_t k_heapBMGetNID(uint8_t a, uint8_t b) +{ uint8_t c; - for (c = a + 1; c == b || c == 0; ++c); + for (c=a+1;c==b||c==0;++c); return c; } -void *k_heapBMAlloc(KHEAPBM *heap, uint32_t size) { +void *k_heapBMAlloc(KHEAPBM *heap, uint32_t size) +{ KHEAPBLOCKBM *b; uint8_t *bm; uint32_t bcnt; @@ -63,33 +58,36 @@ void *k_heapBMAlloc(KHEAPBM *heap, uint32_t size) { uint8_t nid; /* iterate blocks */ - for (b = heap->fblock; b; b = b->next) { + for (b = heap->fblock; b; b = b->next) + { /* check if block has enough room */ - if (b->size - (b->used * b->bsize) >= size) { + if (b->size - (b->used * b->bsize) >= size) + { bcnt = b->size / b->bsize; - bneed = (size / b->bsize) * b->bsize < size ? size / b->bsize + 1 : size / b->bsize; + bneed = (size / b->bsize) * b->bsize < size ? size / b->bsize + 1 : + size / b->bsize; bm = (uint8_t*)&b[1]; - for (x = (b->lfb + 1 >= bcnt ? 0 : b->lfb + 1); x != b->lfb; ++x) { + for (x = (b->lfb + 1 >= bcnt ? 0 : b->lfb + 1); x != b->lfb; ++x) + { /* just wrap around */ - if (x >= bcnt) { - x = 0; - } + if (x >= bcnt) x = 0; - if (bm[x] == 0) { + if (bm[x] == 0) + { /* count free blocks */ - for (y = 0; bm[x + y] == 0 && y < bneed && (x + y) < bcnt; ++y); + for (y = 0; bm[x + y] == 0 && y < bneed && (x + y) < bcnt; + ++y); /* we have enough, now allocate them */ - if (y == bneed) { + if (y == bneed) + { /* find ID that does not match left or right */ nid = k_heapBMGetNID(bm[x - 1], bm[x + y]); /* allocate by setting id */ - for (z = 0; z < y; ++z) { - bm[x + z] = nid; - } + for (z = 0; z < y; ++z) bm[x + z] = nid; /* optimization */ b->lfb = (x + bneed) - 2; @@ -100,7 +98,8 @@ void *k_heapBMAlloc(KHEAPBM *heap, uint32_t size) { return (void*)(x * b->bsize + (uintptr_t)&b[1]); } - /* x will be incremented by one ONCE more in our FOR loop */ + /* x will be incremented by one ONCE more in our FOR loop + * */ x += (y - 1); continue; } @@ -110,7 +109,8 @@ void *k_heapBMAlloc(KHEAPBM *heap, uint32_t size) { return 0; } -void k_heapBMFree(KHEAPBM *heap, void *ptr) { +void k_heapBMFree(KHEAPBM *heap, void *ptr) +{ KHEAPBLOCKBM *b; uintptr_t ptroff; uint32_t bi, x; @@ -118,10 +118,13 @@ void k_heapBMFree(KHEAPBM *heap, void *ptr) { uint8_t id; uint32_t max; - for (b = heap->fblock; b; b = b->next) { - if ((uintptr_t)ptr > (uintptr_t)b && (uintptr_t)ptr < (uintptr_t)b + sizeof(KHEAPBLOCKBM) + b->size) { + for (b = heap->fblock; b; b = b->next) + { + if ((uintptr_t)ptr > (uintptr_t)b && (uintptr_t)ptr < (uintptr_t)b + + sizeof(KHEAPBLOCKBM) + b->size) { /* found block */ - ptroff = (uintptr_t)ptr - (uintptr_t)&b[1]; /* get offset to get block */ + ptroff = (uintptr_t)ptr - (uintptr_t)&b[1]; /* get offset to get + block */ /* block offset in BM */ bi = ptroff / b->bsize; /* .. */ @@ -130,9 +133,7 @@ void k_heapBMFree(KHEAPBM *heap, void *ptr) { id = bm[bi]; /* oddly.. GCC did not optimize this */ max = b->size / b->bsize; - for (x = bi; bm[x] == id && x < max; ++x) { - bm[x] = 0; - } + for (x = bi; bm[x] == id && x < max; ++x) bm[x] = 0; /* update free block count */ b->used -= x - bi; return; diff --git a/include/08.heap/heap1.c b/include/08.heap/heap1.c new file mode 100644 index 0000000..24aa321 --- /dev/null +++ b/include/08.heap/heap1.c @@ -0,0 +1,2 @@ +#include +#include diff --git a/include/08.heap/heap10.c b/include/08.heap/heap10.c new file mode 100644 index 0000000..15505de --- /dev/null +++ b/include/08.heap/heap10.c @@ -0,0 +1,7 @@ +static uint8_t k_heapBMGetNID(uint8_t a, uint8_t b); +static uint8_t k_heapBMGetNID(uint8_t a, uint8_t b) +{ + uint8_t c; + for (c=a+1;c==b||c==0;++c); + return c; +} diff --git a/include/08.heap/heap11.c b/include/08.heap/heap11.c new file mode 100644 index 0000000..90d72d6 --- /dev/null +++ b/include/08.heap/heap11.c @@ -0,0 +1,8 @@ +void *k_heapBMAlloc(KHEAPBM *heap, uint32_t size) +{ + KHEAPBLOCKBM *b; + uint8_t *bm; + uint32_t bcnt; + uint32_t x, y, z; + uint32_t bneed; + uint8_t nid; diff --git a/include/08.heap/heap12.c b/include/08.heap/heap12.c new file mode 100644 index 0000000..78285eb --- /dev/null +++ b/include/08.heap/heap12.c @@ -0,0 +1,6 @@ + /* iterate blocks */ + for (b = heap->fblock; b; b = b->next) + { + /* check if block has enough room */ + if (b->size - (b->used * b->bsize) >= size) + { diff --git a/include/08.heap/heap13.c b/include/08.heap/heap13.c new file mode 100644 index 0000000..ab7463c --- /dev/null +++ b/include/08.heap/heap13.c @@ -0,0 +1,4 @@ + bcnt = b->size / b->bsize; + bneed = (size / b->bsize) * b->bsize < size ? size / b->bsize + 1 : + size / b->bsize; + bm = (uint8_t*)&b[1]; diff --git a/include/08.heap/heap14.c b/include/08.heap/heap14.c new file mode 100644 index 0000000..6edcf6f --- /dev/null +++ b/include/08.heap/heap14.c @@ -0,0 +1,4 @@ + for (x = (b->lfb + 1 >= bcnt ? 0 : b->lfb + 1); x != b->lfb; ++x) + { + /* just wrap around */ + if (x >= bcnt) x = 0; diff --git a/include/08.heap/heap15.c b/include/08.heap/heap15.c new file mode 100644 index 0000000..5a39a40 --- /dev/null +++ b/include/08.heap/heap15.c @@ -0,0 +1,5 @@ + if (bm[x] == 0) + { + /* count free blocks */ + for (y = 0; bm[x + y] == 0 && y < bneed && (x + y) < bcnt; + ++y); diff --git a/include/08.heap/heap16.c b/include/08.heap/heap16.c new file mode 100644 index 0000000..206a5e0 --- /dev/null +++ b/include/08.heap/heap16.c @@ -0,0 +1,5 @@ + /* we have enough, now allocate them */ + if (y == bneed) + { + /* find ID that does not match left or right */ + nid = k_heapBMGetNID(bm[x - 1], bm[x + y]); diff --git a/include/08.heap/heap17.c b/include/08.heap/heap17.c new file mode 100644 index 0000000..ff94380 --- /dev/null +++ b/include/08.heap/heap17.c @@ -0,0 +1,2 @@ + /* allocate by setting id */ + for (z = 0; z < y; ++z) bm[x + z] = nid; diff --git a/include/08.heap/heap18.c b/include/08.heap/heap18.c new file mode 100644 index 0000000..f141368 --- /dev/null +++ b/include/08.heap/heap18.c @@ -0,0 +1,2 @@ + /* optimization */ + b->lfb = (x + bneed) - 2; diff --git a/include/08.heap/heap19.c b/include/08.heap/heap19.c new file mode 100644 index 0000000..8fd73e2 --- /dev/null +++ b/include/08.heap/heap19.c @@ -0,0 +1,2 @@ + /* count used blocks NOT bytes */ + b->used += y; diff --git a/include/08.heap/heap2.c b/include/08.heap/heap2.c new file mode 100644 index 0000000..8757694 --- /dev/null +++ b/include/08.heap/heap2.c @@ -0,0 +1,4 @@ +void k_heapBMInit(KHEAPBM *heap) +{ + heap->fblock = 0; +} diff --git a/include/08.heap/heap20.c b/include/08.heap/heap20.c new file mode 100644 index 0000000..98c1157 --- /dev/null +++ b/include/08.heap/heap20.c @@ -0,0 +1,2 @@ + return (void*)(x * b->bsize + (uintptr_t)&b[1]); + } diff --git a/include/08.heap/heap21.c b/include/08.heap/heap21.c new file mode 100644 index 0000000..2ed3f8c --- /dev/null +++ b/include/08.heap/heap21.c @@ -0,0 +1,10 @@ + /* x will be incremented by one ONCE more in our FOR loop + * */ + x += (y - 1); + continue; + } + } + } + } + return 0; +} diff --git a/include/08.heap/heap22.c b/include/08.heap/heap22.c new file mode 100644 index 0000000..88cd773 --- /dev/null +++ b/include/08.heap/heap22.c @@ -0,0 +1,8 @@ +void k_heapBMFree(KHEAPBM *heap, void *ptr) +{ + KHEAPBLOCKBM *b; + uintptr_t ptroff; + uint32_t bi, x; + uint8_t *bm; + uint8_t id; + uint32_t max; diff --git a/include/08.heap/heap23.c b/include/08.heap/heap23.c new file mode 100644 index 0000000..70305b7 --- /dev/null +++ b/include/08.heap/heap23.c @@ -0,0 +1,21 @@ + for (b = heap->fblock; b; b = b->next) + { + if ((uintptr_t)ptr > (uintptr_t)b && (uintptr_t)ptr < (uintptr_t)b + + sizeof(KHEAPBLOCKBM) + b->size) { + /* found block */ + ptroff = (uintptr_t)ptr - (uintptr_t)&b[1]; /* get offset to get + block */ + /* block offset in BM */ + bi = ptroff / b->bsize; + /* .. */ + bm = (uint8_t*)&b[1]; + /* clear allocation */ + id = bm[bi]; + /* oddly.. GCC did not optimize this */ + max = b->size / b->bsize; + for (x = bi; bm[x] == id && x < max; ++x) bm[x] = 0; + /* update free block count */ + b->used -= x - bi; + return; + } + } diff --git a/include/08.heap/heap24.c b/include/08.heap/heap24.c new file mode 100644 index 0000000..11a4697 --- /dev/null +++ b/include/08.heap/heap24.c @@ -0,0 +1,3 @@ + /* this error needs to be raised or reported somehow */ + return; +} diff --git a/include/08.heap/heap25.c b/include/08.heap/heap25.c new file mode 100644 index 0000000..6ac75a9 --- /dev/null +++ b/include/08.heap/heap25.c @@ -0,0 +1 @@ +KHEAPBM kheap; diff --git a/include/08.heap/heap26.c b/include/08.heap/heap26.c new file mode 100644 index 0000000..6d7223d --- /dev/null +++ b/include/08.heap/heap26.c @@ -0,0 +1,4 @@ +void kheapinit() +{ + k_heapBMInit(&kheap); +} diff --git a/include/08.heap/heap27.c b/include/08.heap/heap27.c new file mode 100644 index 0000000..de767a2 --- /dev/null +++ b/include/08.heap/heap27.c @@ -0,0 +1,4 @@ +int kheapaddblock(uintptr_t addr,uint32_t size,uint32_t bsize) +{ + return k_heapBMAddBlock(&kheap,addr,size,bsize); +} diff --git a/include/08.heap/heap28.c b/include/08.heap/heap28.c new file mode 100644 index 0000000..22972f4 --- /dev/null +++ b/include/08.heap/heap28.c @@ -0,0 +1,4 @@ +void *kmalloc(uint32_t size) +{ + return k_heapBMAlloc(&kheap,size); +} diff --git a/include/08.heap/heap29.c b/include/08.heap/heap29.c new file mode 100644 index 0000000..d4d5941 --- /dev/null +++ b/include/08.heap/heap29.c @@ -0,0 +1,4 @@ +void kfree(void *ptr) +{ + k_heapBMFree(&kheap,ptr); +} diff --git a/include/08.heap/heap3.c b/include/08.heap/heap3.c new file mode 100644 index 0000000..dceb8a3 --- /dev/null +++ b/include/08.heap/heap3.c @@ -0,0 +1,7 @@ +int k_heapBMAddBlock(KHEAPBM *heap, uintptr_t addr, uint32_t size, uint32_t + bsize) +{ + KHEAPBLOCKBM *b; + uint32_t bcnt; + uint32_t x; + uint8_t *bm; diff --git a/include/08.heap/heap4.c b/include/08.heap/heap4.c new file mode 100644 index 0000000..024a09a --- /dev/null +++ b/include/08.heap/heap4.c @@ -0,0 +1,3 @@ + b = (KHEAPBLOCKBM*)addr; + b->size = size - sizeof(KHEAPBLOCKBM); + b->bsize = bsize; diff --git a/include/08.heap/heap5.c b/include/08.heap/heap5.c new file mode 100644 index 0000000..c816b2c --- /dev/null +++ b/include/08.heap/heap5.c @@ -0,0 +1,2 @@ + b->next = heap->fblock; + heap->fblock = b; diff --git a/include/08.heap/heap6.c b/include/08.heap/heap6.c new file mode 100644 index 0000000..3a9ea03 --- /dev/null +++ b/include/08.heap/heap6.c @@ -0,0 +1,2 @@ + bcnt = b->size / b->bsize; + bm = (uint8_t*)&b[1]; diff --git a/include/08.heap/heap7.c b/include/08.heap/heap7.c new file mode 100644 index 0000000..7183948 --- /dev/null +++ b/include/08.heap/heap7.c @@ -0,0 +1,4 @@ + /* clear bitmap */ + for (x = 0; x < bcnt; ++x) { + bm[x] = 0; + } diff --git a/include/08.heap/heap8.c b/include/08.heap/heap8.c new file mode 100644 index 0000000..fd64ff9 --- /dev/null +++ b/include/08.heap/heap8.c @@ -0,0 +1,5 @@ + /* reserve room for bitmap */ + bcnt = (bcnt / bsize) * bsize < bcnt ? bcnt / bsize + 1 : bcnt / bsize; + for (x = 0; x < bcnt; ++x) { + bm[x] = 5; + } diff --git a/include/08.heap/heap9.c b/include/08.heap/heap9.c new file mode 100644 index 0000000..a61193b --- /dev/null +++ b/include/08.heap/heap9.c @@ -0,0 +1,4 @@ + b->lfb = bcnt - 1; + b->used = bcnt; + return 1; +} diff --git a/include/09.paging/deo1 b/include/09.paging/deo1 deleted file mode 100644 index c45e28b..0000000 --- a/include/09.paging/deo1 +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/include/09.paging/deo2 b/include/09.paging/deo2 deleted file mode 100644 index b56d18e..0000000 --- a/include/09.paging/deo2 +++ /dev/null @@ -1,2 +0,0 @@ -extern void loadPageDirectory(uint32_t*); -extern void enablePaging(); diff --git a/include/09.paging/deo3 b/include/09.paging/deo3 deleted file mode 100644 index cbfbd25..0000000 --- a/include/09.paging/deo3 +++ /dev/null @@ -1 +0,0 @@ -uint32_t page_directory[1024] __attribute__((aligned(4096))); diff --git a/include/09.paging/deo4 b/include/09.paging/deo4 deleted file mode 100644 index 6905d35..0000000 --- a/include/09.paging/deo4 +++ /dev/null @@ -1,12 +0,0 @@ -void set_pd() -{ - //set each entry to not present - for(size_t i=0;i<1024;i++) - { - // This sets the following flags to the pages: - // Supervisor: Only kernel-mode can access them - // Write Enabled: It can be both read from and written to - // Not Present: The page table is not present - page_directory[i] = 0x00000002; - } -} diff --git a/include/09.paging/deo5 b/include/09.paging/deo5 deleted file mode 100644 index 57f997d..0000000 --- a/include/09.paging/deo5 +++ /dev/null @@ -1 +0,0 @@ -uint32_t page_table[1024][1024] __attribute__((aligned(4096))); diff --git a/include/09.paging/deo6 b/include/09.paging/deo6 deleted file mode 100644 index 4e670bb..0000000 --- a/include/09.paging/deo6 +++ /dev/null @@ -1,4 +0,0 @@ -void set_pt(size_t num,uint32_t address) -{ - // holds the physical address where we want to start mapping these pages to. - // in this case, we want to map these pages to the very beginning of memory. diff --git a/include/09.paging/deo7 b/include/09.paging/deo7 deleted file mode 100644 index 5898f28..0000000 --- a/include/09.paging/deo7 +++ /dev/null @@ -1,7 +0,0 @@ - //we will fill all 1024 entries in the table, mapping 4 megabytes - for(size_t i=0;i<1024;i++) - { - // As the address is page aligned, it will always leave 12 bits zeroed. - // Those bits are used by the attributes ;) - page_table[num][i] = (address + i * 0x1000) | 3; // attributes: supervisor level, read/write, present. - } diff --git a/include/09.paging/deo8 b/include/09.paging/deo8 deleted file mode 100644 index b842a0c..0000000 --- a/include/09.paging/deo8 +++ /dev/null @@ -1,3 +0,0 @@ - page_directory[num] = ((uint32_t)page_table[num]) | 3; - // attributes: supervisor level, read/write, present -} diff --git a/include/09.paging/deo9 b/include/09.paging/deo9 deleted file mode 100644 index d99797b..0000000 --- a/include/09.paging/deo9 +++ /dev/null @@ -1,7 +0,0 @@ -void set_paging() -{ - set_pd(); - for(size_t i=0;i<1024;i++) set_pt(i,0x00400000 * i); // all 4GB mapped - loadPageDirectory(page_directory); - enablePaging(); -} diff --git a/include/09.paging/paging.c b/include/09.paging/paging.c index f08530d..9c4875a 100644 --- a/include/09.paging/paging.c +++ b/include/09.paging/paging.c @@ -1,11 +1,12 @@ +#include #include extern void loadPageDirectory(uint32_t*); -extern void enablePaging(); +extern void enablePaging(void); uint32_t page_directory[1024] __attribute__((aligned(4096))); -void set_pd() +void set_pd(void) { //set each entry to not present for(size_t i=0;i<1024;i++) @@ -22,22 +23,25 @@ uint32_t page_table[1024][1024] __attribute__((aligned(4096))); void set_pt(size_t num,uint32_t address) { - // holds the physical address where we want to start mapping these pages to. - // in this case, we want to map these pages to the very beginning of memory. + // holds the physical address where we want to start mapping these pages + // to. + // in this case, we want to map these pages to the very beginning of + // memory. //we will fill all 1024 entries in the table, mapping 4 megabytes for(size_t i=0;i<1024;i++) { // As the address is page aligned, it will always leave 12 bits zeroed. // Those bits are used by the attributes ;) - page_table[num][i] = (address + i * 0x1000) | 3; // attributes: supervisor level, read/write, present. + page_table[num][i] = (address + i * 0x1000) | 3; // attributes: + supervisor level, read/write, present. } page_directory[num] = ((uint32_t)page_table[num]) | 3; // attributes: supervisor level, read/write, present } -void set_paging() +void set_paging(void) { set_pd(); for(size_t i=0;i<1024;i++) set_pt(i,0x00400000 * i); // all 4GB mapped diff --git a/include/09.paging/paging1.c b/include/09.paging/paging1.c new file mode 100644 index 0000000..2893924 --- /dev/null +++ b/include/09.paging/paging1.c @@ -0,0 +1,2 @@ +#include +#include diff --git a/include/09.paging/paging2.c b/include/09.paging/paging2.c new file mode 100644 index 0000000..8baa0b4 --- /dev/null +++ b/include/09.paging/paging2.c @@ -0,0 +1,2 @@ +extern void loadPageDirectory(uint32_t*); +extern void enablePaging(void); diff --git a/include/09.paging/paging3.c b/include/09.paging/paging3.c new file mode 100644 index 0000000..cbfbd25 --- /dev/null +++ b/include/09.paging/paging3.c @@ -0,0 +1 @@ +uint32_t page_directory[1024] __attribute__((aligned(4096))); diff --git a/include/09.paging/paging4.c b/include/09.paging/paging4.c new file mode 100644 index 0000000..2523a96 --- /dev/null +++ b/include/09.paging/paging4.c @@ -0,0 +1,12 @@ +void set_pd(void) +{ + //set each entry to not present + for(size_t i=0;i<1024;i++) + { + // This sets the following flags to the pages: + // Supervisor: Only kernel-mode can access them + // Write Enabled: It can be both read from and written to + // Not Present: The page table is not present + page_directory[i] = 0x00000002; + } +} diff --git a/include/09.paging/paging5.c b/include/09.paging/paging5.c new file mode 100644 index 0000000..57f997d --- /dev/null +++ b/include/09.paging/paging5.c @@ -0,0 +1 @@ +uint32_t page_table[1024][1024] __attribute__((aligned(4096))); diff --git a/include/09.paging/paging6.c b/include/09.paging/paging6.c new file mode 100644 index 0000000..c5ffd58 --- /dev/null +++ b/include/09.paging/paging6.c @@ -0,0 +1,6 @@ +void set_pt(size_t num,uint32_t address) +{ + // holds the physical address where we want to start mapping these pages + // to. + // in this case, we want to map these pages to the very beginning of + // memory. diff --git a/include/09.paging/paging7.c b/include/09.paging/paging7.c new file mode 100644 index 0000000..1b9c590 --- /dev/null +++ b/include/09.paging/paging7.c @@ -0,0 +1,8 @@ + //we will fill all 1024 entries in the table, mapping 4 megabytes + for(size_t i=0;i<1024;i++) + { + // As the address is page aligned, it will always leave 12 bits zeroed. + // Those bits are used by the attributes ;) + page_table[num][i] = (address + i * 0x1000) | 3; // attributes: + supervisor level, read/write, present. + } diff --git a/include/09.paging/paging8.c b/include/09.paging/paging8.c new file mode 100644 index 0000000..b842a0c --- /dev/null +++ b/include/09.paging/paging8.c @@ -0,0 +1,3 @@ + page_directory[num] = ((uint32_t)page_table[num]) | 3; + // attributes: supervisor level, read/write, present +} diff --git a/include/09.paging/paging9.c b/include/09.paging/paging9.c new file mode 100644 index 0000000..eacd1a6 --- /dev/null +++ b/include/09.paging/paging9.c @@ -0,0 +1,7 @@ +void set_paging(void) +{ + set_pd(); + for(size_t i=0;i<1024;i++) set_pt(i,0x00400000 * i); // all 4GB mapped + loadPageDirectory(page_directory); + enablePaging(); +} diff --git a/include/10.libc/asm.h b/include/10.libc/asm.h index 9f2a9e6..ee15f00 100644 --- a/include/10.libc/asm.h +++ b/include/10.libc/asm.h @@ -1,9 +1,16 @@ -#ifndef ASM_H -#define ASM_H +#ifndef SOURCE_ASM_H +#define SOURCE_ASM_H #include +#define PIC1_COMMAND_PORT 0x20 +#define PIC1_DATA_PORT 0x21 +#define PIC2_COMMAND_PORT 0xA0 +#define PIC2_DATA_PORT 0xA1 + + extern uint8_t ioport_in(uint8_t port); -extern void ioport_out(uint8_t port, char data); +extern void ioport_out(uint8_t port, int data); + #endif diff --git a/include/10.libc/heap.h b/include/10.libc/heap.h deleted file mode 100644 index fa32f26..0000000 --- a/include/10.libc/heap.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef HEAP_H -#define HEAP_H - -#include - -void kheapinit(); -int kheapaddblock(uintptr_t addr,uint32_t size,uint32_t bsize); -void *kmalloc(uint32_t size); -void kfree(void *ptr); - -#endif diff --git a/include/10.libc/irq.h b/include/10.libc/irq.h deleted file mode 100644 index 58b3cd3..0000000 --- a/include/10.libc/irq.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef IRQ_H -#define IRQ_H - -extern void irq0(); -extern void irq1(); -extern void irq2(); -extern void irq3(); -extern void irq4(); -extern void irq5(); -extern void irq6(); -extern void irq7(); -extern void irq8(); -extern void irq9(); -extern void irq10(); -extern void irq11(); -extern void irq12(); -extern void irq13(); -extern void irq14(); -extern void irq15(); -extern void irq16(); -extern void irq17(); -extern void irq18(); -extern void irq19(); -extern void irq20(); -extern void irq21(); -extern void irq22(); -extern void irq23(); -extern void irq24(); -extern void irq25(); -extern void irq26(); -extern void irq27(); -extern void irq28(); -extern void irq29(); -extern void irq30(); -extern void irq31(); -extern void timer_irq(); -extern void keyboard_irq(); - -#endif diff --git a/include/10.libc/source/gdt.h b/include/10.libc/source/gdt.h new file mode 100644 index 0000000..f31a982 --- /dev/null +++ b/include/10.libc/source/gdt.h @@ -0,0 +1,26 @@ +#ifndef SOURCE_GDT_H +#define SOURCE_GDT_H + +#include + +struct gdt_entry +{ + uint16_t limit; + uint16_t base1; + uint8_t base2; + uint8_t access; + uint8_t limit_flags; + uint8_t base3; +} __attribute__((packed)); + +struct gdt_pointer +{ + uint16_t size; + uint32_t offset; +} __attribute__((packed)); + +void init_gdt_entry(size_t num, uint16_t limit, uint32_t base, uint8_t access, + uint8_t limit_flags); +void init_gdt_table(void); + +#endif diff --git a/include/10.libc/source/heap.h b/include/10.libc/source/heap.h new file mode 100644 index 0000000..4bf12a7 --- /dev/null +++ b/include/10.libc/source/heap.h @@ -0,0 +1,31 @@ +#ifndef SOURCE_HEAP_H +#define SOURCE_HEAP_H + +#include + +typedef struct _KHEAPBLOCKBM { + struct _KHEAPBLOCKBM *next; + uint32_t size; + uint32_t used; + uint32_t bsize; + uint32_t lfb; +} KHEAPBLOCKBM; + +typedef struct _KHEAPBM { + KHEAPBLOCKBM *fblock; +} KHEAPBM; + +extern KHEAPBM kheap; + +void k_heapBMInit(KHEAPBM *heap); +int k_heapBMAddBlock(KHEAPBM *heap, uintptr_t addr, uint32_t size, uint32_t + bsize); +void *k_heapBMAlloc(KHEAPBM *heap, uint32_t size); +void k_heapBMFree(KHEAPBM *heap, void *ptr); + +void kheapinit(void); +int kheapaddblock(uintptr_t addr,uint32_t size,uint32_t bsize); +void *kmalloc(uint32_t size); +void kfree(void *ptr); + +#endif diff --git a/include/10.libc/source/idt.h b/include/10.libc/source/idt.h new file mode 100644 index 0000000..cbae940 --- /dev/null +++ b/include/10.libc/source/idt.h @@ -0,0 +1,37 @@ +#ifndef SOURCE_IDT_H +#define SOURCE_IDT_H + +#include + +#define INTERRUPT_GATE_32 0x8E + +#define KERNEL_CODE 0x08 +#define KERNEL_DATA 0x10 + +#define PIC1_COMMAND_PORT 0x20 +#define PIC1_DATA_PORT 0x21 +#define PIC2_COMMAND_PORT 0xA0 +#define PIC2_DATA_PORT 0xA1 + +struct idt_entry +{ + uint16_t offset1; + uint16_t selector; + uint8_t zero; + uint8_t type_attr; + uint16_t offset2; +} __attribute__((packed)); + +struct idt_pointer +{ + uint16_t size; + uint32_t offset; +} __attribute__((packed)); + +void init_idt_entry(size_t num, uint32_t offset, uint16_t selector, uint8_t + type_attr); +void add_idt_entry(size_t num,uint32_t offset); +void init_pic(void); +void init_idt_table(void); + +#endif diff --git a/include/10.libc/source/irq.h b/include/10.libc/source/irq.h new file mode 100644 index 0000000..febf3e1 --- /dev/null +++ b/include/10.libc/source/irq.h @@ -0,0 +1,39 @@ +#ifndef SOURCE_IRQ_H +#define SOURCE_IRQ_H + +extern void irq0(void); +extern void irq1(void); +extern void irq2(void); +extern void irq3(void); +extern void irq4(void); +extern void irq5(void); +extern void irq6(void); +extern void irq7(void); +extern void irq8(void); +extern void irq9(void); +extern void irq10(void); +extern void irq11(void); +extern void irq12(void); +extern void irq13(void); +extern void irq14(void); +extern void irq15(void); +extern void irq16(void); +extern void irq17(void); +extern void irq18(void); +extern void irq19(void); +extern void irq20(void); +extern void irq21(void); +extern void irq22(void); +extern void irq23(void); +extern void irq24(void); +extern void irq25(void); +extern void irq26(void); +extern void irq27(void); +extern void irq28(void); +extern void irq29(void); +extern void irq30(void); +extern void irq31(void); +extern void timer_irq(void); +extern void keyboard_irq(void); + +#endif diff --git a/include/10.libc/source/irq_handler.h b/include/10.libc/source/irq_handler.h new file mode 100644 index 0000000..a20ed70 --- /dev/null +++ b/include/10.libc/source/irq_handler.h @@ -0,0 +1,43 @@ +#ifndef SOURCE_IRQ_HANDLER_H +#define SOURCE_IRQ_HANDLER_H + +#define INTERRUPT_GATE_32 0x8e + +#define KERNEL_CODE 0x08 +#define KERNEL_DATA 0x10 + + +void irq0_handler(void); +void irq1_handler(void); +void irq2_handler(void); +void irq3_handler(void); +void irq4_handler(void); +void irq5_handler(void); +void irq6_handler(void); +void irq7_handler(void); +void irq8_handler(void); +void irq9_handler(void); +void irq10_handler(void); +void irq11_handler(void); +void irq12_handler(void); +void irq13_handler(void); +void irq14_handler(void); +void irq15_handler(void); +void irq16_handler(void); +void irq17_handler(void); +void irq18_handler(void); +void irq19_handler(void); +void irq20_handler(void); +void irq21_handler(void); +void irq22_handler(void); +void irq23_handler(void); +void irq24_handler(void); +void irq25_handler(void); +void irq26_handler(void); +void irq27_handler(void); +void irq28_handler(void); +void irq29_handler(void); +void irq30_handler(void); +void irq31_handler(void); + +#endif diff --git a/include/10.libc/source/kernel.h b/include/10.libc/source/kernel.h new file mode 100644 index 0000000..0a3903f --- /dev/null +++ b/include/10.libc/source/kernel.h @@ -0,0 +1,6 @@ +#ifndef SOURCE_KERNEL_H +#define SOURCE_KERNEL_H + +void kernel_main(void); + +#endif diff --git a/include/10.libc/source/keyboard.h b/include/10.libc/source/keyboard.h new file mode 100644 index 0000000..a023e66 --- /dev/null +++ b/include/10.libc/source/keyboard.h @@ -0,0 +1,21 @@ +#ifndef SOURCE_KEYBOARD_H +#define SOURCE_KEYBOARD_H + +#define BUFFER_SIZE 200 +#define BUFFER_LOG 200 + +#define KEYBOARD_DATA_PORT 0x60 +#define KEYBOARD_STATUS_PORT 0x64 + +void init_keyboard(void); +void deletelast(void); +void backspace(void); +void enter(void); +void space(void); +void keyup(void); +void keydown(void); +void keyleft(void); +void keyright(void); +void keyboard_handler(void); + +#endif diff --git a/include/10.libc/source/keymap.h b/include/10.libc/source/keymap.h new file mode 100644 index 0000000..7d01291 --- /dev/null +++ b/include/10.libc/source/keymap.h @@ -0,0 +1,14 @@ +#ifndef SOURCE_KEYMAP_H +#define SOURCE_KEYMAP_H + +#include + +#define lshift 0x2A +#define rshift 0x36 +#define lctrl 0x1D +#define rctrl 0x1D + +void us_en(char keymap[]); +void us_en_shift(char keymap[]); + +#endif diff --git a/include/10.libc/source/paging.h b/include/10.libc/source/paging.h new file mode 100644 index 0000000..dc4e357 --- /dev/null +++ b/include/10.libc/source/paging.h @@ -0,0 +1,10 @@ +#ifndef SOURCE_PAGING_H +#define SOURCE_PAGING_H + +#include + +void set_pd(void); +void set_pt(size_t num, uint32_t address); +void set_paging(void); + +#endif diff --git a/include/10.libc/source/stack_protector.h b/include/10.libc/source/stack_protector.h new file mode 100644 index 0000000..d5532e2 --- /dev/null +++ b/include/10.libc/source/stack_protector.h @@ -0,0 +1,6 @@ +#ifndef SOURCE_STACK_PROTECTOR_H +#define SOURCE_STACK_PROTECTOR_H + +void __stack_chk_fail(void); + +#endif diff --git a/include/10.libc/source/stdio.h b/include/10.libc/source/stdio.h new file mode 100644 index 0000000..dbf901a --- /dev/null +++ b/include/10.libc/source/stdio.h @@ -0,0 +1,6 @@ +#ifndef SOURCE_STDIO_H +#define SOURCE_STDIO_H + +void printf(const char *str, ...); + +#endif diff --git a/include/10.libc/source/string.h b/include/10.libc/source/string.h new file mode 100644 index 0000000..98aef4f --- /dev/null +++ b/include/10.libc/source/string.h @@ -0,0 +1,17 @@ +#ifndef SOURCE_STRING_H +#define SOURCE_STRING_H + +#include + +size_t stringlen(char* str); +bool stringcmp(const char* str1, const char* str2); +void stringcat(char* str1, const char* str2); +void stringcpy(char* str1, const char* str2); +void stringrev(char* str); + +void itos(uint32_t num, char *str); +uint32_t stoi(const char* str); +double stof(const char* str); +void ftos(double num, char* str); + +#endif diff --git a/include/10.libc/source/timer.h b/include/10.libc/source/timer.h new file mode 100644 index 0000000..bfdc4cd --- /dev/null +++ b/include/10.libc/source/timer.h @@ -0,0 +1,9 @@ +#ifndef SOURCE_TIMER_H +#define SOURCE_TIMER_H + +#include + +void timer_handler(void); +void init_timer(uint32_t frequency); + +#endif diff --git a/include/10.libc/source/tty.h b/include/10.libc/source/tty.h new file mode 100644 index 0000000..2b22eff --- /dev/null +++ b/include/10.libc/source/tty.h @@ -0,0 +1,19 @@ +#ifndef SOURCE_TTY_H +#define SOURCE_TTY_H + +#include + +#define CMD_LENGTH 20 + +size_t pieces(char pieces[][CMD_LENGTH], char *buffer); +void echo(size_t numberof, char parts[][CMD_LENGTH]); +void merge(char parts[][CMD_LENGTH]); +void ls(void); +void number(size_t numberof, char parts[][CMD_LENGTH]); +void uptime(void); +void prompt(void); +void neofetch(void); +void help(void); +void tty(char *buffer); + +#endif diff --git a/include/10.libc/source/vga.h b/include/10.libc/source/vga.h new file mode 100644 index 0000000..69abc44 --- /dev/null +++ b/include/10.libc/source/vga.h @@ -0,0 +1,40 @@ +#ifndef SOURCE_VGA_H +#define SOURCE_VGA_H + +#include + +static const size_t VGA_WIDTH = 80; +static const size_t VGA_HEIGHT = 25; + +enum vga_color { + VGA_COLOR_BLACK = 0, + VGA_COLOR_DARK_BLUE = 1, + VGA_COLOR_GREEN = 2, + VGA_COLOR_TURQUOISE = 3, + VGA_COLOR_RED = 4, + VGA_COLOR_PURPLE = 5, + VGA_COLOR_BROWN = 6, + VGA_COLOR_LIGHT_GREY = 7, + VGA_COLOR_DARK_GREY = 8, + VGA_COLOR_BLUE = 9, + VGA_COLOR_LIGHT_GREEN = 10, + VGA_COLOR_LIGHT_BLUE = 11, + VGA_COLOR_LIGHT_RED = 12, + VGA_COLOR_PINK = 13, + VGA_COLOR_YELLOW = 14, + VGA_COLOR_WHITE = 15, +}; + +void set_color(enum vga_color fg, enum vga_color bg); +void terminal_initialize(void); +void terminal_putentryat(char c, uint8_t color, size_t x, size_t y); +void movescreen(void); +void next_field(void); +void previous_field(void); +void terminal_putchar(char c); +void terminal_writestring(const char* data); +void terminal_writeint(uint32_t num); +void terminal_writefloat(double num); +void clear(void); + +#endif diff --git a/include/10.libc/stdio.h b/include/10.libc/stdio.h index 6bb87be..88f18cc 100644 --- a/include/10.libc/stdio.h +++ b/include/10.libc/stdio.h @@ -20,6 +20,4 @@ size_t fwrite(const void*, size_t, size_t, FILE*); void setbuf(FILE*, char*); int vfprintf(FILE*, const char*, va_list); -void printf(char *str, ...); - #endif diff --git a/include/10.libc/string.h b/include/10.libc/string.h index 78fa956..16da969 100644 --- a/include/10.libc/string.h +++ b/include/10.libc/string.h @@ -8,15 +8,4 @@ void* memset(void*, int, size_t); char* strcpy(char*, const char*); size_t strlen(const char*); -#include - -size_t stringlen(char *str); -bool stringcmp(char *str1,char *str2); -void stringcat(char *str1,char *str2); -void stringrev(char *str); -void itos(uint32_t num,char *str); -uint32_t stoi(const char *str); -double stof(const char *str); -void ftos(double num, char *str); - #endif diff --git a/include/10.libc/types.h b/include/10.libc/types.h index a6d6530..391284d 100644 --- a/include/10.libc/types.h +++ b/include/10.libc/types.h @@ -1,5 +1,5 @@ -#ifndef TYPES_H -#define TYPES_H +#ifndef SOURCE_TYPES_H +#define SOURCE_TYPES_H #include #include diff --git a/include/10.libc/vga.h b/include/10.libc/vga.h deleted file mode 100644 index eb43644..0000000 --- a/include/10.libc/vga.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef VGA_H -#define VGA_H - -#include - -static const size_t VGA_WIDTH = 80; -static const size_t VGA_HEIGHT = 25; - -enum vga_color { - VGA_COLOR_BLACK = 0, - VGA_COLOR_DARK_BLUE = 1, - VGA_COLOR_GREEN = 2, - VGA_COLOR_TURQUOISE = 3, - VGA_COLOR_RED = 4, - VGA_COLOR_PURPLE = 5, - VGA_COLOR_BROWN = 6, - VGA_COLOR_LIGHT_GREY = 7, - VGA_COLOR_DARK_GREY = 8, - VGA_COLOR_BLUE = 9, - VGA_COLOR_LIGHT_GREEN = 10, - VGA_COLOR_LIGHT_BLUE = 11, - VGA_COLOR_LIGHT_RED = 12, - VGA_COLOR_PINK = 13, - VGA_COLOR_YELLOW = 14, - VGA_COLOR_WHITE = 15, -}; -void set_color(enum vga_color fg, enum vga_color bg); - -#endif diff --git a/include/setup.sh b/include/setup.sh index adc27cb..26c70dc 100755 --- a/include/setup.sh +++ b/include/setup.sh @@ -6,42 +6,49 @@ mkdir "01.pocetak" "02.vga" "03.gdt" "04.idt" "05.irq" "06.keyboard" "07.pit" "0 cp ../../mykernel/src/as/boot.s ./01.pocetak cd 01.pocetak || exit -awk -v RS= '{print > ("deo" NR )}' boot.s -cd .. || exit +awk -v RS= '{print > ("boot" NR ".s")}' boot.s +cd .. cp ../../mykernel/src/c/vga.c ./02.vga cd 02.vga || exit -awk -v RS= '{print > ("deo" NR )}' vga.c -cd .. || exit +awk -v RS= '{print > ("vga" NR ".c")}' vga.c +cd .. cp ../../mykernel/src/c/gdt.c ./03.gdt +cp ../../mykernel/src/include/source/gdt.h ./03.gdt cd 03.gdt || exit -awk -v RS= '{print > ("deo" NR )}' gdt.c -cd .. || exit +awk -v RS= '{print > ("gdt" NR ".c")}' gdt.c +awk -v RS= '{print > ("gdt" NR ".h")}' gdt.h +cd .. -cp ../../mykernel/src/c/idt.c ./04.idt +cp ../../mykernel/src/include/source/idt.h ./04.idt cd 04.idt || exit -awk -v RS= '{print > ("deo" NR )}' idt.c -cd .. || exit +awk -v RS= '{print > ("idt" NR ".h")}' idt.h +cd .. + +cp ../../mykernel/src/c/idt.c ./05.irq +cd 05.irq || exit +awk -v RS= '{print > ("idt" NR ".c")}' idt.c +cd .. cp ../../mykernel/src/c/keyboard.c ./06.keyboard cd 06.keyboard || exit -awk -v RS= '{print > ("deo" NR )}' keyboard.c -cd .. || exit +awk -v RS= '{print > ("keyboard" NR ".c")}' keyboard.c +cd .. cp ../../mykernel/src/c/timer.c ./07.pit cd 07.pit || exit -awk -v RS= '{print > ("deo" NR )}' timer.c -cd .. || exit +awk -v RS= '{print > ("timer" NR ".c")}' timer.c +cd .. cp ../../mykernel/src/c/heap.c ./08.heap cd 08.heap || exit -awk -v RS= '{print > ("deo" NR )}' heap.c -cd .. || exit +awk -v RS= '{print > ("heap" NR ".c")}' heap.c +cd .. cp ../../mykernel/src/c/paging.c ./09.paging cd 09.paging || exit -awk -v RS= '{print > ("deo" NR )}' paging.c -cd .. || exit +awk -v RS= '{print > ("paging" NR ".c")}' paging.c +cd .. cp -r ../../mykernel/src/include/* ./10.libc diff --git a/kernel.pdf b/kernel.pdf index f5d3b11..6d6f0c6 100644 Binary files a/kernel.pdf and b/kernel.pdf differ diff --git a/kernel.tex b/kernel.tex index c407859..56d999d 100644 --- a/kernel.tex +++ b/kernel.tex @@ -76,7 +76,8 @@ \vspace*{10pt} \begin{center} - {\naslov Izrada \textbf{\eng\Large X86 32bit i686} jezgra operativnog sistema} + {\naslov Izrada \textbf{\eng\Large X86 32bit i686} jezgra operativnog + sistema} \end{center} \vspace*{70mm} @@ -132,13 +133,14 @@ Kod, zajedno sa svim alatima za njegovo korishenje i upotrebu, je dostupan pod Ovaj projakat se konstantno unapredjuje i nemoguc1e je odrzhavati sinhronizovanim fajlove koji sachinjavaju operativni sistem, a koji se -istovremeno pominju u ovom radu. Iz tog razloga, rad c1e biti napisan za verziju -operativnog sistema 1.0.0. Na stranici {\eng GitHub}-a ova verzija se mozhe -nac1i pod {\eng tag/s} sekcijom na stranici projekta. +istovremeno pominju u ovom radu. Iz tog razloga, rad c1e biti napisan za +verziju operativnog sistema 1.0.0. Na stranici {\eng GitHub}-a ova verzija se +mozhe nac1i pod {\eng tag/s} sekcijom na stranici projekta. Radi laksheg kompajlovanja koda od strane chitaoca, kreiran je {\eng toolchain} -- set alata, specifichno za kompajlovanje ovog operativnog sistema, koji se mozhe -nac1i na stranici {\eng\url{https://github.com/aleksav013/aleksa-toolchain}}, +- set alata, specifichno za kompajlovanje ovog operativnog sistema, koji se +mozhe nac1i na stranici +{\eng\url{https://github.com/aleksav013/aleksa-toolchain}}, takodje dostupan pod {\eng GPLv3} licencom otvorenog koda. Set alata {\eng aleksa-toolchain} kreiran je takodje i iz razloga shto je zapravo neizbezhan proces kreiranja {\eng cross-compilera} - kompajlera koji kompapajluje kod za @@ -156,9 +158,10 @@ potrebnom za njegovo razumevanje. \chapter{{\eng X86} arhitektura} \bigskip -{\eng X86} arhitektura je probitno bila osmobitna (sadrzhala je registre duzhine 8 -bitova), 16bitna, zatim 32bitna i na kraju 64bitna. Danas 64bitnu {\eng X86} -arhitekturu znamo kao i {\eng{} AMD64}, {\eng X86-64} ili {\eng X86\_64}.\\ +{\eng X86} arhitektura je probitno bila osmobitna (sadrzhala je registre +duzhine 8 bitova), 16bitna, zatim 32bitna i na kraju 64bitna. Danas 64bitnu +{\eng X86} arhitekturu znamo kao i {\eng{} AMD64}, {\eng X86-64} ili {\eng +X86\_64}.\\ Zajedno sa {\eng ARM}-om jedna od najkorish\/c1enijih arhitektura danashnjice. @@ -168,8 +171,10 @@ Zajedno sa {\eng ARM}-om jedna od najkorish\/c1enijih arhitektura danashnjice. Postoji vishe vrsta registara procesora\cite[75]{misc:1}. Neki od osnovnih registara koje je potrebno pomenuti dati su u tekstu koji sledi. Razlog zbog kojeg su navedena i imena registara prethodnih verzija {\eng X86} arhitekture -je zbog toga shto je moguc1e adresirati prvih {\eng x} bitova ako se koristi ime -registra za {\eng x}-tobitnu verziju {\eng X86} arhitekture. Naravno, ovo vazhi samo +je zbog toga shto je moguc1e adresirati prvih {\eng x} bitova ako se koristi +ime +registra za {\eng x}-tobitnu verziju {\eng X86} arhitekture. Naravno, ovo vazhi +samo ukoliko je duzhina registra vec1a ili jednaka duzhini registra chiju notaciju koristimo.\\ @@ -292,7 +297,8 @@ Specifichna uloga segmentnih registara: \medskip Realni mod je stanje procesora u kojem nam je dozvoljeno adresiranje samo prvih -20 megabajta memorije. Prelazak iz realnog u zastic1eni mod postizhe se dalekim skokom +20 megabajta memorije. Prelazak iz realnog u zastic1eni mod postizhe se dalekim +skokom {\eng "far jump"}. %{\eng\url{https://wiki.osdev.org/Real_Mode}} @@ -308,7 +314,8 @@ shto je to hardverski predvidjeno. \section{{\eng Protected mode}} \medskip -Zashtic1en mod je stanje procesora u kojem procesor ima pun pristup celom opsegu +Zashtic1en mod je stanje procesora u kojem procesor ima pun pristup celom +opsegu memorije za razliku od realnog moda. %{\eng\url{https://wiki.osdev.org/Protected_Mode}} @@ -367,7 +374,8 @@ Jedini programi sa ove liste koji nije kreirao {\eng GNU} su {\eng QEMU} virtualna mashina, {\eng git} i {\eng NeoVim}.\\ Operativni sistem korish\/c1en u izradi ovog projekta je {\eng Artix Linux}. -{\eng Artix Linux} je {\eng GNU/Linux} distribucija bazirana na {\eng Arch Linux}-u. +{\eng Artix Linux} je {\eng GNU/Linux} distribucija bazirana na {\eng Arch +Linux}-u. Vec1ina korish\/c1enih programa je vec1 kompajlovana i spremna za upotrebu i nalazi se u oficijalnim repozitorijima.\\ @@ -394,17 +402,20 @@ kreiranje biblioteka ({\eng ar}). \smallskip Iz razloga shto se ne koristi standardna biblioteka vec1 samostalno napisana -specificno za ovaj projekat, potrebno je manuelno kompajlovati {\eng GNU Binutils}. +specificno za ovaj projekat, potrebno je manuelno kompajlovati {\eng GNU +Binutils}. Medjutim, postoji moguc1nost korish\/c1enja vec1 spremnog paketa koji se za distribucije bazirane na {\eng Arch Linux}-u mozhe nac1i na stanici -{\eng\url{https://aur.archlinux.org/packages/i686-elf-binutils/}}. Pojedine distribucije +{\eng\url{https://aur.archlinux.org/packages/i686-elf-binutils/}}. Pojedine +distribucije vec1 imaju ovaj paket kompajlovan, ali je preporuka manuelno kompajlovati da bi se izbegla nekompatibilnost, a i prosto iz razloga shto c1e nakon formiranja nashe {\eng C} biblioteke biti neophodno kompajlovati ovaj program za svaki sistem posebno. Za one koje zhele sami da kompajluju dat je deo instrukcija koji se razlikuje -od uput\/stva datog na zvanichnom sajtu a tiche se konfigurisanja pre kompilacije.\\ +od uput\/stva datog na zvanichnom sajtu a tiche se konfigurisanja pre +kompilacije.\\ \begin{minipage}{\textwidth}\eng\lstinputlisting[language=make]{include/00.alati/binutils/binutils1}\srb\end{minipage} @@ -415,7 +426,8 @@ Nakon dodavanja nashe {\eng C} biblioteke potrebno je kompajlovati {\eng GNU Binutils} tako da tu biblioteku i koristi prilikom kompajlovanja nasheg operativnog sistema. -\textbf{Napomena:} Potrebno je postaviti {\eng \$SYSROOT} na lokaciju gde se biblioteka nalazi. +\textbf{Napomena:} Potrebno je postaviti {\eng \$SYSROOT} na lokaciju gde se +biblioteka nalazi. To je moguc1e uraditi na sledec1i nachin:\\ \begin{minipage}{\textwidth}\eng\lstinputlisting[language=make]{include/00.alati/binutils/exportsysroot}\srb\end{minipage} @@ -441,7 +453,8 @@ Ovaj program je korish\/c1en za kompajlovanje dela koda napisanog u asembleru. \subsection{{\eng GNU Linker}} \smallskip -Ovaj program je korish\/c1en za linkovanje, tj. "spajanje" svog komapjlovanog koda +Ovaj program je korish\/c1en za linkovanje, tj. "spajanje" svog komapjlovanog +koda u jednu binarnu datoteku tipa {\eng ELF} koja predstavlja kernel. \section{{\eng GCC}} @@ -491,7 +504,8 @@ zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje. {\eng QEMU} je virtualna mashina u kojoj c1e jezgro biti testirano i prikazano zarad praktichnih razloga. {\eng QEMU} je odabran za ovaj projekat jer za razliku od drugih virutalnih mashina poseduje {\eng cli (command line -interface)} iz koga se lako mozhe pozivati iz skripti kao shto su {\eng Makefile}-ovi. +interface)} iz koga se lako mozhe pozivati iz skripti kao shto su {\eng +Makefile}-ovi. \section{{\eng Make}} \medskip @@ -600,59 +614,54 @@ trenutnu verziju rada, s obrzirom na to da bi rad bio nepotrebno duzhi. U prvom delu postavljamo promenljive na vrednosti koje su odredjene {\eng Multiboot2} standardom da bi {\eng bootloader} prepoznao nashe jezgro. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo1}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot1.s}\srb\end{minipage} Nakon toga postavljamo prvih 512 bitova na prethodno pomenute vrednosti ali tako da za svaku promenljivu ostavljamo 32 bita prostora. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo2}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot2.s}\srb\end{minipage} Postavljamo funkcije koje cemo definisati u ovom fajlu za globalne da bi smo kasnije mogli da ih pozivamo iz {\eng C}-a. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo3}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot3.s}\srb\end{minipage} Funkcija za uchitavanje {\eng gdt} tabele. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo4}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot4.s}\srb\end{minipage} Funkcija za uchitavanje {\eng idt} tabele. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo5}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot5.s}\srb\end{minipage} Funkcije koje su zaduzene za razmenu informacija preko magistrale za ulaz/izlaz. Koristi se pri inicijalizaciji {\eng IRQ}-a i korish\/c1enju tastature. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo6}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo7}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot6.s}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot7.s}\srb\end{minipage} Segmenti za kod i podatke koji su postavljeni u {\eng gdt} tabeli. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo8}\srb\end{minipage} Definishemo sekciju {\eng bss} u kojoj kreiramo stek i dodeljujemo mu 16 kilobajta. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo9}\srb\end{minipage} Definishemo pochetnu funkciju {\eng \_start} pozivajuc1i funkciju za inicijalizaciju {\eng gdt} tabele i "skachemo" na segment koda. Ovaj postupak ima naziv {\eng "far jump"} jer skachemo van tekuc1eg segmenta. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo10}\srb\end{minipage} U segmentu koda postavljamo segmentne registre na adresu segmenta podataka. -Zatim postavljamo {\eng esp} registar na pochetak steka koji smo inicijalizovali +Zatim postavljamo {\eng esp} registar na pochetak steka koji smo +inicijalizovali u {\eng bss} sekciji i predajemo upravljanje {\eng kernel\_main} funkciji. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo11}\srb\end{minipage} Postavljamo velichinu funkcije {\eng \_start} shto nam kasnije mozhe biti korisno pri {\eng debug}-ovanju. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo12}\srb\end{minipage} - \section{Ispis na ekran - {\eng VGA}} @@ -660,126 +669,134 @@ korisno pri {\eng debug}-ovanju. {\eng c/vga.c}: -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo1}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga1.c}\srb\end{minipage} -Primetimo da u {\eng C}-u koristimo {\eng uintX\_t} promenljive. To je zbog toga +Primetimo da u {\eng C}-u koristimo {\eng uintX\_t} promenljive. To je zbog +toga shto nam je u ovakvom okruzhenju vrlo bitno da pazimo na velichinu koju zauzimaju promenljive. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo2}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga2.c}\srb\end{minipage} -4 znachajnija bita oznachavaju boju pozadine, dok ostala 4 bita oznachavaju boju karaktera. +4 znachajnija bita oznachavaju boju pozadine, dok ostala 4 bita oznachavaju +boju karaktera. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo3}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga3.c}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo4}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga4.c}\srb\end{minipage} Na {\eng VGA} izlaz ispisujemo tako shto pochev od adrese {\eng 0xB80000} pishemo shesnaestobitne vrednosti koje se prevode u karaktere i njihovu boju. 8 -znachajnijih bitova odredjuju boju karaktera dok preostalih 8 bitova oznachavaju +znachajnijih bitova odredjuju boju karaktera dok preostalih 8 bitova +oznachavaju karakter. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo5}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga5.c}\srb\end{minipage} Funkcija koja ispisuje karakter na monitoru. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo6}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga6.c}\srb\end{minipage} Fukcija koja pomera sve do sada ispisano za jedan red na dole i oslobadja novi red kada ponestane mesta na ekranu. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo7}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga7.c}\srb\end{minipage} -Funkfija koja postavlja brojache kolone i reda na sledec1e, uglavnom prazno, polje na ekranu. +Funkfija koja postavlja brojache kolone i reda na sledec1e, uglavnom prazno, +polje na ekranu. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo8}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga8.c}\srb\end{minipage} Funkfija koja postavlja brojache kolone i reda na proshlo polje na ekranu. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo9}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga9.c}\srb\end{minipage} Funkcija koja ispisuje jedan karakter na ekran. Proverava da li je potrebno ispisati novi red umesto karaktera {\eng '$\backslash$n'}, kao i da li je potrebno osloboditi novi red ukoliko se ekran popunio. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo10}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga10.c}\srb\end{minipage} Funkcija koja ispisuje niz karaktera na ekran. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo11}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga11.c}\srb\end{minipage} -Funcija koja ispisuje celobrojnu vrednost na ekran tako shto je prvo pretvori u niz +Funcija koja ispisuje celobrojnu vrednost na ekran tako shto je prvo pretvori u +niz karaktera a zatim iskoristi prethodnu funkciju. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo12}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga12.c}\srb\end{minipage} Funcija koja ispisuje realnu vrednost na ekran tako shto je prvo pretvori u niz karaktera a zatim iskoristi funkciju za ispis niza karaktera. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo13}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga13.c}\srb\end{minipage} -Funkcija koja brishe sve sa ekrana i postavlja brojache kolone i reda na pochetnu poziciju. +Funkcija koja brishe sve sa ekrana i postavlja brojache kolone i reda na +pochetnu poziciju. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo14}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga14.c}\srb\end{minipage} \section{{\eng Global Desctiptor Table}} \medskip +{\eng include/source/gdt.h}: + +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt1.h}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt2.h}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt3.h}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt4.h}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt5.h}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt6.h}\srb\end{minipage} + {\eng c/gdt.c}: -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo1}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt1.c}\srb\end{minipage} Format u kom rachunar prihvata unos pojedinachnih definicija segmenata. Primetimo {\eng \_\_attribute\_\_((packed))}, na kraju definicije strukture. To nam oznachava da se nece ostavljati mesta u memoriji izmedju promenljivih unutar strukture, vec1 c1e se "pakovati" jedna do druge u memoriji. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo2}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt2.c}\srb\end{minipage} Format koji rachunar prihvata za tabelu svih definicija segmenata. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo3}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt3.c}\srb\end{minipage} Funcija iz asemblera koja uchitava tabelu segmenata, kreiranu u sledec1ih nekoliko funcija, u odgovarajuc1i registar. Ovu funciju smo imali priliku videti u pochetnom fajlu. -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo4}\srb\end{minipage} - - -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo5}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt4.c}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo6}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt5.c}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo7}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt6.c}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo8}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt7.c}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo9}\srb\end{minipage} - %{\eng\url{https://wiki.osdev.org/GDT}} \section{{\eng Interrupt Desctiptor Table}} \medskip -{\eng c/idt.c}: +{\eng include/source/idt.h}: -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo1}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo2}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo3}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo4}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo5}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo6}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo7}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo8}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo9}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo10}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo11}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt1.h}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt2.h}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt3.h}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt4.h}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt5.h}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt6.h}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt7.h}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt8.h}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt9.h}\srb\end{minipage} %{\eng\url{https://wiki.osdev.org/IDT}} @@ -787,9 +804,15 @@ videti u pochetnom fajlu. \medskip {\eng c/idt.c}: -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo12}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo13}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo14}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/05.irq/idt1.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/05.irq/idt2.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/05.irq/idt3.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/05.irq/idt4.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/05.irq/idt5.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/05.irq/idt6.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/05.irq/idt7.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/05.irq/idt8.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/05.irq/idt9.c}\srb\end{minipage} %{\eng\url{https://wiki.osdev.org/IRQ}} @@ -800,42 +823,37 @@ videti u pochetnom fajlu. {\eng c/keyboard.c}: -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo1}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo2}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo3}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo4}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo5}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo6}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo7}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo8}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo9}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo10}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo11}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo12}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo13}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo14}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo15}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo16}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo17}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo18}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo19}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo20}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard1.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard2.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard3.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard4.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard5.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard6.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard7.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard8.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard9.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard10.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard11.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard12.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard13.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard14.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard15.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard16.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard17.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/keyboard18.c}\srb\end{minipage} \section{{\eng PIT - Programmable Interval Timer}} \medskip {\eng c/timer.c}: -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/deo1}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/deo2}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/deo3}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/deo4}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/deo5}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/deo6}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/deo7}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/deo8}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/deo9}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/deo10}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/timer1.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/timer2.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/timer3.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/timer4.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/timer5.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/timer6.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/timer7.c}\srb\end{minipage} %{\eng\url{https://wiki.osdev.org/PIT}} \section{{\eng Heap}} @@ -845,37 +863,35 @@ videti u pochetnom fajlu. \cite{book:1412}\\ -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo1}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo2}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo3}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo4}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo5}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo6}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo7}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo8}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo9}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo10}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo11}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo12}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo13}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo14}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo15}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo16}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo17}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo18}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo19}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo20}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo21}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo22}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo23}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo24}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo25}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo26}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo27}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo28}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo29}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo30}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo31}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap1.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap2.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap3.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap4.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap5.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap6.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap7.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap8.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap9.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap10.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap11.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap12.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap13.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap14.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap15.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap16.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap17.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap18.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap19.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap20.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap21.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap22.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap23.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap24.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap25.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap26.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap27.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap28.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/heap29.c}\srb\end{minipage} %{\eng\url{https://wiki.osdev.org/Heap}} \section{{\eng Paging}} @@ -883,38 +899,30 @@ videti u pochetnom fajlu. {\eng c/paging.c}: -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/deo1}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/deo2}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/deo3}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/deo4}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/deo5}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/deo6}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/deo7}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/deo8}\srb\end{minipage} -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/deo9}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/paging1.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/paging2.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/paging3.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/paging4.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/paging5.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/paging6.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/paging7.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/paging8.c}\srb\end{minipage} +\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/paging9.c}\srb\end{minipage} %{\eng\url{https://wiki.osdev.org/Paging}} -\section{Moj {\eng LIBC}} +\section{Minimalna \eng{C} biblioteka} \medskip %{\eng\url{https://wiki.osdev.org/Creating_a_C_Library}} - -{\eng include/asm.h}: - -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/asm.h}\srb\end{minipage} +% +%{\eng include/asm.h}: +% +%\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/asm.h}\srb\end{minipage} {\eng include/errno.h}: \begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/errno.h}\srb\end{minipage} -{\eng include/heap.h}: - -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/heap.h}\srb\end{minipage} - -{\eng include/irq.h}: - -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C,linerange={1-5,36-40}]{include/10.libc/irq.h}\srb\end{minipage} - {\eng include/stdio.h}: \begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/stdio.h}\srb\end{minipage} @@ -931,18 +939,10 @@ videti u pochetnom fajlu. \begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/time.h}\srb\end{minipage} -{\eng include/types.h}: - -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/types.h}\srb\end{minipage} - {\eng include/unistd.h}: \begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/unistd.h}\srb\end{minipage} -{\eng include/vga.h}: - -\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/vga.h}\srb\end{minipage} - {\eng include/sys/types.h}: \begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/sys/types.h}\srb\end{minipage} -- cgit v1.2.3