diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aa3fb55..a5bbddc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ jobs: - name: Install dependencies run: | sudo apt-get update - sudo apt-get install build-essential llvm lld nasm mtools + sudo apt-get install build-essential fasm mtools - name: Build run: | make diff --git a/.gitignore b/.gitignore index e6578db..f96e679 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ a.out *.old /bx_enh_dbg.ini bochsrc.bxrc +/tmp diff --git a/Makefile b/Makefile index 4da9ba7..f9c4a2c 100644 --- a/Makefile +++ b/Makefile @@ -1,31 +1,32 @@ -.DEFAULT_GOAL := all -TOPDIR := $(CURDIR) -export TOPDIR +TOPDIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST)))) +SYSROOTDIR := $(TOPDIR)/sysroot +TOOLSDIR := $(TOPDIR)/tools -SUBDIR := thirdparty lib bin kernel +RM = echo -CLEANFILES += stupid.iso stupid.tar.gz +SUBDIRS := kernel lib bin -.PHONY: docs -docs: - -mkdir -p docs/html - naturaldocs -p docs/config -img docs/img -xi tmp -i . -o HTML docs/html - cp docs/img/favicon.ico docs/html/ +TARGET = stupid.iso stupid.tar.gz + +.PHONY: all +all: $(TARGET) + +GOAL:=install +clean: GOAL:=clean + +.PHONY: $(SUBDIRS) +$(SUBDIRS): + @echo "📁 $@" + DESTDIR=$(SYSROOTDIR) $(MAKE) -C $@ $(GOAL) .PHONY: stupid.iso -stupid.iso: - $(MAKE) all - DESTDIR=$(TOPDIR)/sysroot $(MAKE) install +stupid.iso: $(SUBDIRS) $(TOPDIR)/tools/create-iso $@ sysroot .PHONY: stupid.tar.gz -stupid.tar.gz: - $(MAKE) all - DESTDIR=$(TOPDIR)/sysroot $(MAKE) install +stupid.tar.gz: $(SUBDIRS) tar -czvf $@ sysroot -run: stupid.iso - qemu-system-i386 -cdrom $< -serial stdio - -include $(TOPDIR)/share/mk/stupid.subdir.mk -include $(TOPDIR)/share/mk/stupid.clean.mk +.PHONY: clean +clean: $(SUBDIRS) + $(RM) $(TARGET) $(SYSROOTDIR) \ No newline at end of file diff --git a/bin/Makefile b/bin/Makefile index 44f981f..66aafb1 100644 --- a/bin/Makefile +++ b/bin/Makefile @@ -1,3 +1,11 @@ -NOSUBDIR := 1 +SUBDIRS = cmd -include $(TOPDIR)/share/mk/stupid.subdir.mk +TOPGOALS = all clean install + +.PHONY: $(SUBDIRS) +$(SUBDIRS): + @echo "📁 bin/$@" + DESTDIR=$(DESTDIR)/bin $(MAKE) -C $@ $(MAKECMDGOALS) + +.PHONY: $(TOPGOALS) +$(TOPGOALS): $(SUBDIRS) diff --git a/bin/cmd/Makefile b/bin/cmd/Makefile new file mode 100644 index 0000000..8d1fed2 --- /dev/null +++ b/bin/cmd/Makefile @@ -0,0 +1,5 @@ +all: + +clean: + +install: diff --git a/bin/cmd/builtins.inc b/bin/cmd/builtins.inc new file mode 100644 index 0000000..998055e --- /dev/null +++ b/bin/cmd/builtins.inc @@ -0,0 +1,6 @@ +builtins: + db 2, 'cd' + db 1, '.' + db 3, 'set' + db 5, 'unset' + db 4, 'exit' \ No newline at end of file diff --git a/bin/cmd/cmd.asm b/bin/cmd/cmd.asm new file mode 100644 index 0000000..ea7e2ea --- /dev/null +++ b/bin/cmd/cmd.asm @@ -0,0 +1,8 @@ + format ELF + entry start + + include 'builtins.inc' + +start: + + int 0x2A \ No newline at end of file diff --git a/docs/intro.txt b/docs/intro.txt index f78af8f..fe96824 100644 --- a/docs/intro.txt +++ b/docs/intro.txt @@ -9,10 +9,7 @@ Donate: - - - Monero: 85cm3SuAs98dcqXcdiyCNz6hkb5fKwHbtJYr8cyFdAGWKgj8rG3kPENNv1BXVp2HsiaC8otTzxxaEEuUVZQFxrSr7eBY2uw -- Zcash: zs1sqsdn4acrqygvupmhwl5vvzcdjk6fd4p6n3k4nzdey0huq7cwkl2ca7dru8alhhtan47wjes0x9 - Bitcoin: bc1qhpxa0hgj0mjstttkjgg6ees9dj5kadty04kgpp -- Oxen: LDrNKN6iXh98zUZbwa9iGmeuiWbrzU2WTKWwcwMYFSeCj2QACxfyFXNVQyN8QBe61bFgqtykTYpgcaWvf2C1K77KMQ82DaC -- Gridcoin: S8tw8EWXQ6p529kLEniCePceNAFTyc3GKM About: License diff --git a/kernel/Makefile b/kernel/Makefile index a7bf698..375f727 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -1,17 +1,27 @@ +AS = fasm +RM = rm -f +INSTALL = install + KERNEL = vmstupid +SRCS = kernel.asm \ + const.inc \ + boot/multiboot.inc \ + boot/boot.inc \ + mm/mm.inc -SRCS = boot/head.s \ - boot/gdt.s \ - boot/idt.s \ - boot/isr.s \ - boot/tss.s \ - kernel.s \ - lib/log.s dev/at/serial.s \ - i18n/msg_en.s -INCS = sys/multiboot.inc \ - sys/i386/cpuid.inc \ - sys/i386/mmu.inc \ - sys/i386/registers.inc +.PHONY: all +all: $(KERNEL) -include $(TOPDIR)/share/mk/stupid.kernel.mk -#include $(TOPDIR)/share/mk/stupid.inc.mk +$(KERNEL): $(SRCS) + $(AS) kernel.asm $@ + +.PHONY: clean +clean: + $(RM) $(KERNEL) + +.PHONY: install +install: $(KERNEL) + @ mkdir -p $(DESTDIR) + install $< $(DESTDIR) + +.PHONY: all clean \ No newline at end of file diff --git a/kernel/base/console.s b/kernel/base/console.s deleted file mode 100644 index ddc16fc..0000000 --- a/kernel/base/console.s +++ /dev/null @@ -1,4 +0,0 @@ -struc console - .init: - -endstruc diff --git a/kernel/boot/boot.inc b/kernel/boot/boot.inc new file mode 100644 index 0000000..49a8c65 --- /dev/null +++ b/kernel/boot/boot.inc @@ -0,0 +1,35 @@ + ORG 0x100000 + ALIGN 4 + USE32 + + INCLUDE 'boot/multiboot.inc' + INCLUDE 'const.inc' + +mb_header MultibootHeader MB_FLAGS, mb_header, VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_DEPTH + +_start: + cli + cmp eax, MULTIBOOT_MAGIC + jne hang + + ; iterate over memory + + ; + + ; + xor esi, esi + mov edi, kernel_page_table - KBASE + + mov ecx, kernel_page_directory - KBASE + mov cr3, ecx + + mov ecx, cr0 + + +hang: + hlt + jmp $-1 + + ; SEGMENT readable writable + +boot_struct dd 0x0 \ No newline at end of file diff --git a/kernel/boot/gdt.s b/kernel/boot/gdt.s deleted file mode 100644 index f5d02d7..0000000 --- a/kernel/boot/gdt.s +++ /dev/null @@ -1,94 +0,0 @@ - ;; File: gdt.s - ;; -[BITS 32] - -%include "sys/i386/mmu.inc" - -section .text - - ; Function: gdt_setup - ; - ; in: - ; none - ; - ; out: - ; none - ; -global gdt_setup -gdt_setup: - ;; install tss - lea eax, gdt_entries.tss - push eax - extern tss_install - call tss_install - pop eax - - ;; setup gdt - lgdt [gdt_ptr] - mov eax, cr0 - or al, 1 - mov cr0, eax - jmp 0x08:.flush_cs -.flush_cs: - mov ax, 0x10 ; data segment - mov ds, ax - mov es, ax - mov fs, ax - mov gs, ax - mov ss, ax - ret - -section .data - -gdt_ptr: - dw gdt_entries.end - gdt_entries - 1 - dd gdt_entries - -gdt_entries: - ;; null descriptor - dd 0x0 - dd 0x0 - - ;; kernel mode code segment - istruc gdt_entry - at gdt_entry.limit_low, dw 0xFFFF - at gdt_entry.base_low, dw 0x0000 - at gdt_entry.base_mid, db 0x00 - at gdt_entry.access, db 0x9A - at gdt_entry.flags, db 0xCF - at gdt_entry.base_high, db 0x00 - iend - - ;; kernel mode data segment - istruc gdt_entry - at gdt_entry.limit_low, dw 0xFFFF - at gdt_entry.base_low, dw 0x0000 - at gdt_entry.base_mid, db 0x00 - at gdt_entry.access, db 0x92 - at gdt_entry.flags, db 0xCF - at gdt_entry.base_high, db 0x00 - iend - - ;; user mode code segment - istruc gdt_entry - at gdt_entry.limit_low, dw 0xFFFF - at gdt_entry.base_low, dw 0x0000 - at gdt_entry.base_mid, db 0x00 - at gdt_entry.access, db 0xFA - at gdt_entry.flags, db 0xCF - at gdt_entry.base_high, db 0x00 - iend - - ;; user mode data segment - istruc gdt_entry - at gdt_entry.limit_low, dw 0xFFFF - at gdt_entry.base_low, dw 0x0000 - at gdt_entry.base_mid, db 0x00 - at gdt_entry.access, db 0xF2 - at gdt_entry.flags, db 0xCF - at gdt_entry.base_high, db 0x00 - iend - -.tss: - times gdt_entry_size db 0 -.end: diff --git a/kernel/boot/head.s b/kernel/boot/head.s deleted file mode 100644 index 00da87e..0000000 --- a/kernel/boot/head.s +++ /dev/null @@ -1,125 +0,0 @@ - ;; File: head.s - ;; - ;; About: CPU compatibility - ;; /!\ Only work on *486+* for now. - ;; - `invlpg` which is not part of 386 ISA. - ;; -[BITS 32] - -%include "sys/multiboot.inc" -%include "sys/i386/registers.inc" -%include "sys/i386/mmu.inc" - - ;; Define: MB_HDR_FLAGS -MB_HDR_FLAGS equ MB_HDR_ALIGN | MB_HDR_MEMINFO | MB_HDR_VIDEO - -section .multiboot.data -align 4 - istruc mb_header - at mb_header.magic, dd MB_HDR_MAGIC - at mb_header.flags, dd MB_HDR_FLAGS - at mb_header.checksum, dd -(MB_HDR_MAGIC + MB_HDR_FLAGS) - - ; video mode info - at mb_header.mode_type, dd 0 - at mb_header.width, dd 1024 - at mb_header.height, dd 768 - at mb_header.depth, dd 32 - iend - -section .multiboot.text - - ;; Function: entry - ;; Setup boot page table, map kernel to higher half - ;; then jump to - ;; - ;; in: - ;; EAX - Multiboot magic - ;; EBX - Multiboot structure - ;; - ;; out: - ;; none - ;; -global entry -entry: - ;; disable interrupt - cli - - ;; save boot params - mov edi, eax - mov esi, ebx - - ;; setup 4MB paging - ;; TODO: check if 4MB paging is available - mov eax, cr4 - or eax, CR4_PSE - mov cr4, eax - - cmp edi, MB_MAGIC - jne .skip_map_multiboot - ;; check if multiboot struct is in first 4Mib - ;; otherwith add entry in page dir - mov eax, 400000 - cmp ebx, eax - jg .map_multiboot - jmp .skip_map_multiboot -.map_multiboot: - ;; TODO: for now let's assume data are bellow 4Mib - jmp .end -.skip_map_multiboot: - add esi, KERNBASE -.end: - extern page_directory - mov eax, V2P(boot_page_dir) - mov cr3, eax - - ;; enable paging - mov eax, cr0 - or eax, CR0_PG | CR0_PE | CR0_WP - mov cr0, eax - - ;; Jump to higher half - lea eax, entry_high - jmp eax ; near jump, indirect - -section .text - - ;; Function: entry_high - ;; Invalidate page[0], setup stack then call -entry_high: - ;; unmap first 4MiB, since it's not needed anymore - mov dword [boot_page_dir], 0 - invlpg [0] - - ;; Setup stack - extern stack_top - mov esp, stack_top - xor ebp, ebp - - ;; Setup GDT: we "disable" segmentation - extern gdt_setup - call gdt_setup - - extern tss_flush - call tss_flush - - extern idt_setup - call idt_setup - - push esi ; multiboot struct - push edi ; multiboot magic - extern kmain - call kmain - - cli -hang: - hlt - jmp hang - -section .data -align 0x1000 -boot_page_dir: - dd 0 | PDE_P | PDE_W | PDE_PS - times (P2PDE(KERNBASE) - 1) dd 0 - dd 0 | PDE_P | PDE_W | PDE_PS - times 0x400 - (boot_page_dir - $$) dd 0 diff --git a/kernel/boot/idt.s b/kernel/boot/idt.s deleted file mode 100644 index d41b737..0000000 --- a/kernel/boot/idt.s +++ /dev/null @@ -1,57 +0,0 @@ - ;; File: idt.s - ;; -[BITS 32] - -%include "sys/i386/cpu.inc" - -section .text - -idt_set_table: - push ebp - mov ebp, esp - - mov ecx, [ebp + 8] - - extern isr_list - mov eax, [isr_list + (ecx * 4)] - - ; offset (low) - mov word [idt_entries + (ecx * 8)], ax - ; segment selector (kernel code) - mov word [idt_entries + (ecx * 8) + idt_gate.selector], 0x08 - ; zero (skip) - ; attr: 1 (Present) 00 (DPL) 0 1 (D: 32bits) 110 - mov byte [idt_entries + (ecx * 8) + idt_gate.attributes], 0x8E - - ; offset (high) - shr eax, 16 - mov word [idt_entries + (ecx * 8) + idt_gate.offset_high], ax - - leave - ret - -global idt_setup -idt_setup: -%assign i 0 -%rep 32 - push dword i - call idt_set_table - add esp, 4 -%assign i i+1 -%endrep - - lidt [idt_ptr] - sti - ret - -section .data -align 8 -idt_ptr: - dw idt_entries.end-idt_entries-1 - dd idt_entries - -; variable: idt_entries -align 8 -idt_entries: - times 256 dd 0x00000000, 0x00000000 -.end: diff --git a/kernel/boot/isr.s b/kernel/boot/isr.s deleted file mode 100644 index 8e47cb8..0000000 --- a/kernel/boot/isr.s +++ /dev/null @@ -1,124 +0,0 @@ -[BITS 32] - -%include "sys/i386/cpu.inc" -%include "base.inc" - -%macro ISR_NO_ERR 1 -isr%1: - push dword 0 - push dword %1 - jmp isr_common -%endmacro - -%macro ISR_ERR 1 -isr%1: - push dword %1 - jmp isr_common -%endmacro - -%macro ISR_ADDR 1 - dd isr%1 -%endmacro - -section .text - -ISR_NO_ERR 0 -ISR_NO_ERR 1 -ISR_NO_ERR 2 -ISR_NO_ERR 3 -ISR_NO_ERR 4 -ISR_NO_ERR 5 -ISR_NO_ERR 6 -ISR_NO_ERR 7 -ISR_ERR 8 -ISR_NO_ERR 9 -ISR_ERR 10 -ISR_ERR 11 -ISR_ERR 12 -ISR_ERR 13 -ISR_ERR 14 -ISR_NO_ERR 15 -ISR_NO_ERR 16 -ISR_NO_ERR 17 -ISR_NO_ERR 18 -ISR_NO_ERR 19 -ISR_NO_ERR 20 -ISR_NO_ERR 21 -ISR_NO_ERR 22 -ISR_NO_ERR 23 -ISR_NO_ERR 24 -ISR_NO_ERR 25 -ISR_NO_ERR 26 -ISR_NO_ERR 27 -ISR_NO_ERR 28 -ISR_NO_ERR 29 -ISR_NO_ERR 30 -ISR_NO_ERR 31 - -%assign i 32 -%rep 224 -ISR_NO_ERR i -%assign i i+1 -%endrep - -panic: - LOG msg_interrupt - ;htl - ;jmp panic - ret - - -isr_handler: - push ebp - mov ebp, esp - -.end: - leave - ret - -isr_common: - xchg bx, bx - push ds - push es - push fs - push gs - pusha - - mov ax, 0x10 ; data segment - mov ds, ax - mov es, ax - mov fs, ax - mov gs, ax - - LOG msg_interrupt - ;call isr_handler - ;extern pic_eoi - ;call pic_eoi - - popa - pop gs - pop fs - pop es - pop ds - add esp, 8 ; int no & error code - - iret - -section .data -global isr_list -isr_list: -%assign i 0 -%rep 256 -ISR_ADDR i -%assign i i+1 -%endrep - -section .rodata - -msg_interrupt db "interrupt", 0xA - db "edi: %x esi: %x ebp: %x esp: %x", 0xA - db "ebx: %x edx: %x ecx: %x eax: %x", 0xA - db "gs: %x fs: %x es: %x ds: %x", 0xA - db "int: %x err: %x eip: %x cs: %x", 0xA - db "flg: %x usp: %x ss: %x", 0x0 -file db __FILE__, 0 diff --git a/kernel/boot/memory.s b/kernel/boot/memory.s deleted file mode 100644 index 4a666aa..0000000 --- a/kernel/boot/memory.s +++ /dev/null @@ -1,25 +0,0 @@ - extern kernel_start - extern kernel_end - extern kernel_size - -pmm_check_page_free: - push ebp - mov ebp, esp - - - leave - ret - -pmm_setup_from_multiboot_mmap: - push ebp - mov ebp, esp - push edi - push esi - push ebx - - mov eax, [esi + mb_info.mmap_addr] - pop ebx - pop esi - pop edi - leave - ret diff --git a/kernel/boot/multiboot.inc b/kernel/boot/multiboot.inc new file mode 100644 index 0000000..179bd0c --- /dev/null +++ b/kernel/boot/multiboot.inc @@ -0,0 +1,106 @@ +MULTIBOOT_HDR_MAGIC = 0x1BADB002 +MULTIBOOT_MAGIC = 0x2BADB002 + +MULTIBOOT_HDR_ALIGN = 0x1 +MULTIBOOT_HDR_MEMINFO = 0x2 +MULTIBOOT_HDR_VIDEO = 0x4 + +struc MultibootHeader flags,addr,width,height,depth +{ + .magic dd MULTIBOOT_HDR_MAGIC + .flags dd flags + .checksum dd -(MULTIBOOT_HDR_MAGIC + flags) + + ; address fields (we'll just skip them) + .header_addr dd addr + .load_addr dd 0x100000 + .load_end_addr dd _edata - KBASE + .bss_end_addr dd _end - KBASE + .entry_addr dd _start + + ; Video mode + .mode_type dd 0x0 + .width dd width + .height dd height + .depth dd depth +} + +struc MultibootData +{ + .flags dd ? + + ; if flags[0] is set + .mem_lower dd ? + .mem_upper dd ? + + ; if flags[1] is set + .boot_device dd ? + + ; if flags[2] is set + .cmdline dd ? + + ; if flags[3] is set + .mods_count dd ? + .mods_addr dd ? + + ; if flags[4] is set + .syms dd 4 dup ? + + ; if flags[6] is set + .mmap_length dd ? + .mmap_addr dd ? + + ; if flags[7] is set + .drives_length dd ? + .drives_addr dd ? + + ; if flags[8] is set + .config_table dd ? + + ; if flags[9] is set + .bootloader_name dd ? + + ; if flags[10] is set + .apm_table dd ? + + ; if flags[11] is set + .vbe_control_info dd ? + .vbe_mode_info dd ? + .vbe_mode dw ? + .vbe_if_seg dw ? + .vbe_if_off dw ? + .vbe_if_length dw ? + + ; if flags[12] is set + .fb_addr dq ? + .fb_pitch dd ? + .fb_width dd ? + .fb_height dd ? + .fb_bpp db ? + .fb_type db ? + .fb_misc dw 3 dup ? +} + +MULTIBOOT_DATA_MEM = 0x0001 +MULTIBOOT_DATA_BOOTDEV = 0x0002 +MULTIBOOT_DATA_CMDLINE = 0x0004 +MULTIBOOT_DATA_MODULES = 0x0008 +MULTIBOOT_DATA_MMAP = 0x0040 +MULTIBOOT_DATA_DRIVES = 0x0080 +MULTIBOOT_DATA_BOOTLOADER_NAME = 0x0200 +MULTIBOOT_DATA_VBE = 0x0800 +MULTIBOOT_DATA_FB = 0x1000 + +struc MultibootMMap +{ + .size dd ? + .addr dq ? + .length dq ? + .type dd ? +} + +MULTIBOOT_MEMORY_AVAILABLE = 0x1 +MULTIBOOT_MEMORY_RESERVED = 0x2 +MULTIBOOT_MEMORY_ACPI = 0x3 +MULTIBOOT_MEMORY_NVS = 0x4 +MULTIBOOT_MEMORY_BADPARAM = 0x5 diff --git a/kernel/boot/tss.s b/kernel/boot/tss.s deleted file mode 100644 index e20172e..0000000 --- a/kernel/boot/tss.s +++ /dev/null @@ -1,44 +0,0 @@ -%include "sys/i386/mmu.inc" -%include "sys/i386/task.inc" - -section .text -global tss_install -tss_install: - push ebp - mov ebp, esp - push esi - mov esi, [ebp + 8] - - mov eax, tss_size - lea ebx, tss_entry - mov [esi + gdt_entry.limit_low], ax - mov [esi + gdt_entry.base_low], bx - shr eax, 16 - mov [esi + gdt_entry.base_mid], al - - mov al, 0x9 | (1 << 7) - mov [esi + gdt_entry.access], al - - shr ebx, 16 - and bl, 0xF - mov [esi + gdt_entry.flags], bl - - mov [esi + gdt_entry.base_high], ah - - mov dword [tss_entry + tss.ss0], 0x10 - extern stack_top - mov dword [tss_entry + tss.esp0], stack_top - - leave - ret - -global tss_flush -tss_flush: - mov ax, (5 * 8) | 0 - ltr ax - ret - -section .data - -tss_entry: - times tss_size db 0 diff --git a/kernel/const.inc b/kernel/const.inc new file mode 100644 index 0000000..95ad750 --- /dev/null +++ b/kernel/const.inc @@ -0,0 +1,53 @@ +KBASE = 0xC0000000 +PSIZE = 0x1000 + +; --------- VERSION ------------- +VERSION_MAJOR = 1 +VERSION_MINOR = 0 + + +; --------- BOOT PARAMS --------- +MB_FLAGS = MULTIBOOT_HDR_ALIGN or MULTIBOOT_HDR_MEMINFO or MULTIBOOT_HDR_VIDEO +VIDEO_WIDTH = 1024 +VIDEO_HEIGHT = 768 +VIDEO_DEPTH = 32 + +; --------- Registers ------------ +CR0_PE = 0x00000001 +CR0_MP = 0x00000002 +CR0_EM = 0x00000004 +CR0_TS = 0x00000008 +CR0_ET = 0x00000010 +CR0_NE = 0x00000020 +CR0_WP = 0x00010000 +CR0_AM = 0x00040000 +CR0_NW = 0x20000000 +CR0_CD = 0x40000000 +CR0_PG = 0x80000000 + +CR3_PWT = 0x08 +CR3_PCD = 0x10 + +CR4_VME = 0x0000001 +CR4_PVI = 0x0000002 +CR4_TSD = 0x0000004 +CR4_DE = 0x0000008 +CR4_PSE = 0x0000010 +CR4_PAE = 0x0000020 +CR4_MCE = 0x0000040 +CR4_PGE = 0x0000080 +CR4_PCE = 0x0000100 +CR4_OSDXSR = 0x0000200 +CR4_OSXMMEXCPT = 0x0000400 +CR4_UMIP = 0x0000800 +CR4_VMXE = 0x0002000 +CR4_SMXE = 0x0004000 +CR4_FSGSBASE = 0x0010000 +CR4_PCIDE = 0x0020000 +CR4_OSXSAVE = 0x0040000 +CR4_SMEP = 0x0100000 +CR4_SMAP = 0x0200000 +CR4_PKE = 0x0400000 +CR4_CET = 0x0800000 +CR4_PKS = 0x1000000 + diff --git a/kernel/dev/at/cmos.s b/kernel/dev/at/cmos.s deleted file mode 100644 index a5127ee..0000000 --- a/kernel/dev/at/cmos.s +++ /dev/null @@ -1,72 +0,0 @@ - ;; File: cmos.s - ;; Real/Time Clock/CMOS RAM - ;; - ;; > +-------------+------------------------------+ - ;; > | 0x00 - 0x0D | *Real-time clock information | - ;; > +-------------+------------------------------+ - ;; > | 0x0E | *Diagnostic status byte | - ;; > +-------------+------------------------------+ - ;; > | 0x0F | *Shutdown status byte | - ;; > +-------------+------------------------------+ - ;; > | 0x10 | Diskette drive type byte | - ;; > +-------------+------------------------------+ - ;; > | 0x12 | Fixed disk type byte | - ;; > +-------------+------------------------------+ - ;; > | 0x14 | Equipment byte | - ;; > +-------------+------------------------------+ - ;; > | 0x15 | Low base memory byte | - ;; > +-------------+------------------------------+ - ;; > | 0x16 | High base memory byte | - ;; > +-------------+------------------------------+ - ;; > | 0x17 | Low expansion memory byte | - ;; > +-------------+------------------------------+ - ;; > | 0x18 | High expansion memory byte | - ;; > +-------------+------------------------------+ - ;; > | 0x19 | Disk C extended byte | - ;; > +-------------+------------------------------+ - ;; > | 0x1A | Disk D extended byte | - ;; > +-------------+------------------------------+ - ;; > | 0x2E - 0x2F | CMOS checksum | - ;; > +-------------+------------------------------+ - ;; > | 0x30 | *Low expansion memory byte | - ;; > +-------------+------------------------------+ - ;; > | 0x31 | *High expansion memory byte | - ;; > +-------------+------------------------------+ - ;; > | 0x32 | *Date century byte | - ;; > +-------------+------------------------------+ - ;; > | 0x33 | *Flags | - ;; > +-------------+------------------------------+ - -CMOS_RTC equ 0x00 - -RTC_SECONDS equ 0x00 -RTC_SECOND_ALRM equ 0x01 -RTC_MINUTES equ 0x02 -RTC_MINUTE_ALRM equ 0x03 -RTC_HOURS equ 0x04 -RTC_HOUR_ALRM equ 0x05 -RTC_WEEKDAY equ 0x06 -RTC_DATE_OF_MONTH equ 0x07 -RTC_MONTH equ 0x08 -RTC_YEAR equ 0x09 -RTC_STATUS_REGA equ 0x0A -RTC_STATUS_REGB equ 0x0B -RTC_STATUS_REGC equ 0x0C -RTC_STATUS_REGD equ 0x0D - -STATUS_REGA_UIP equ (1 << 7) - -STATUS_REGB_PIE equ (1 << 6) -STATUS_REGB_AIE equ (1 << 5) -STATUS_REGB_UIE equ (1 << 4) -STATUS_REGB_SQWE equ (1 << 3) -STATUS_REGB_DM equ (1 << 2) -STATUS_REGB_24H equ (1 << 1) -STATUS_REGB_DSE equ (1 << 0) - -CMOS_CENTURY equ 0x32 - - - - - diff --git a/kernel/dev/at/intro.txt b/kernel/dev/at/intro.txt deleted file mode 100644 index 4dd7880..0000000 --- a/kernel/dev/at/intro.txt +++ /dev/null @@ -1,54 +0,0 @@ -File: IBM PC/AT - -About: I/O Address Map - -> +---------------+-------------------------+ -> | 0x000 - 0x01F | DMA controller 1 | -> +---------------+-------------------------+ -> | 0x020 - 0x03F | 8259A, Primary | -> +---------------+-------------------------+ -> | 0x040 - 0x05F | Timer | -> +---------------+-------------------------+ -> | 0x060 - 0x06F | Keyboard | -> +---------------+-------------------------+ -> | 0x070 - 0x07F | CMOS | -> +---------------+-------------------------+ -> | 0x080 - 0x09F | DMA page register | -> +---------------+-------------------------+ -> | 0x0A0 - 0x0BF | 8259A, Secondary | -> +---------------+-------------------------+ -> | 0x0C0 - 0x0DF | DMA controller 2 | -> +---------------+-------------------------+ -> | 0x0F0 | Clear Math Coprocessor | -> +---------------+-------------------------+ -> | 0x0F1 | Reset Math Coprocessor | -> +---------------+-------------------------+ -> | 0x0F8 - 0x0FF | Math Coprocessor | -> +---------------+-------------------------+ -> | 0x1F0 - 0x1F8 | Fixed Disk | -> +---------------+-------------------------+ -> | 0x200 - 0x207 | Game I/O | -> +---------------+-------------------------+ -> | 0x278 - 0x27F | Parallel printer port 2 | -> +---------------+-------------------------+ -> | 0x2F8 - 0x2FF | Serial port 2 | -> +---------------+-------------------------+ -> | 0x300 - 0x31F | Prototype card | -> +---------------+-------------------------+ -> | 0x360 - 0x363 | PC Network (low) | -> +---------------+-------------------------+ -> | 0x368 - 0x36B | PC Network (high) | -> +---------------+-------------------------+ -> | 0x378 - 0x37F | Parallel printer port 1 | -> +---------------+-------------------------+ -> | 0x380 - 0x38F | SDLC, bisynchronous 2 | -> +---------------+-------------------------+ -> | 0x3B0 - 0x3BF | Monochrome Display | -> +---------------+-------------------------+ -> | 0x3D0 - 0x3DF | Color Monitor Adapter | -> +---------------+-------------------------+ -> | 0x3F0 - 0x3F7 | Diskette controller | -> +---------------+-------------------------+ -> | 0x3F8 - 0x3FF | Serial port 1 | -> +---------------+-------------------------+ - diff --git a/kernel/dev/at/kbd.S b/kernel/dev/at/kbd.S deleted file mode 100644 index e69de29..0000000 diff --git a/kernel/dev/at/pit.s b/kernel/dev/at/pit.s deleted file mode 100644 index eeab59f..0000000 --- a/kernel/dev/at/pit.s +++ /dev/null @@ -1,15 +0,0 @@ - ;; File: pit.s - ;; Programmable Interval Timer (8253/8254) - -PIT_CHAN_0 equ 0x40 -PIT_CHAN_1 equ 0x41 -PIT_CHAN_2 equ 0x42 -PIT_CMD equ 0x43 - -CMD_CHANNEL_1 equ (0x1 << 6) -CMD_CHANNEL_2 equ (0x2 << 6) -CMD_READ_BACK equ (0x3 << 6) -CMD_ACCESS_LO equ (0x1 << 4) -CMD_ACCESS_HI equ (0x2 << 4) -CMD_ACCESS_LO_HI equ (0x3 << 4) - diff --git a/kernel/dev/at/serial.s b/kernel/dev/at/serial.s deleted file mode 100644 index 2aa194a..0000000 --- a/kernel/dev/at/serial.s +++ /dev/null @@ -1,64 +0,0 @@ -section .text - -COM1 equ 0x3F8 -COM2 equ 0x2F8 -COM3 equ 0x3E8 -COM4 equ 0x2E8 - -THR equ 0x0 -RBR equ 0x0 -IER equ 0x1 -IIR equ 0x2 -LCR equ 0x3 -MCR equ 0x4 -LSR equ 0x5 -MSR equ 0x7 -DLL equ 0x0 -DLH equ 0x0 - -%macro COM_OUT 3 - mov dx, %1+%2 - mov al, %3 - out dx, al -%endmacro - -%macro COM_IN 2 - mov dx, %1+%2 - in al, dx -%endmacro - - ; Function: serial_init - ; - ; in: - ; none - ; - ; out: - ; none - ; -global serial_init -serial_init: - COM_OUT COM1, IER, 0x00 - COM_OUT COM1, LCR, 0x80 - COM_OUT COM1, DLH, 0x00 - COM_OUT COM1, DLL, 0x0C - - COM_OUT COM1, LCR, 0x03 - - ret - - ; Function: serial_write - ; - ; in: - ; none - ; - ; out: - ; none - ; -global serial_write -serial_write: - push ebp - mov ebp, esp - mov ecx, [ebp + 8] - COM_OUT COM1, THR, cl - leave - ret diff --git a/kernel/fs/vfs.inc b/kernel/fs/vfs.inc deleted file mode 100644 index f78618e..0000000 --- a/kernel/fs/vfs.inc +++ /dev/null @@ -1,14 +0,0 @@ - -struc superblock - .devid: resd 1 - .size: resd 1 - .ninode: resd 1 - .fs_type: resd 1 -endstruc - -struc inode - .devid: resd 1 - .size: resd 1 - .inode: resd 1s - .access: resd 1 -endstruc diff --git a/kernel/i18n/i18n.inc b/kernel/i18n/i18n.inc deleted file mode 100644 index 0b8f8bd..0000000 --- a/kernel/i18n/i18n.inc +++ /dev/null @@ -1,3 +0,0 @@ -%include "i18n/lang.inc" - -extern msg_en diff --git a/kernel/i18n/lang.inc b/kernel/i18n/lang.inc deleted file mode 100644 index ba59ee3..0000000 --- a/kernel/i18n/lang.inc +++ /dev/null @@ -1,10 +0,0 @@ -struc lang_entry - .code: resb 2 - .data: resd 1 - .next: resd 1 -endstruc - -struc msg_table - .hello_world: resd 1 - .cpu_exceptions: resd 32 -endstruc diff --git a/kernel/i18n/msg_en.s b/kernel/i18n/msg_en.s deleted file mode 100644 index 408ab15..0000000 --- a/kernel/i18n/msg_en.s +++ /dev/null @@ -1,102 +0,0 @@ -; file: msg_en.s -; English strings - -%include "i18n/lang.inc" - -section .rodata -global lang_en -lang_en: - istruc lang_entry - at lang_entry.code, db "en" - at lang_entry.data, dd msg_en - at lang_entry.next, dd 0 - iend - -global msg_en -msg_en: - istruc msg_table - at msg_table.hello_world, dd msg_hello_world - at msg_table.cpu_exceptions, - dd msg_int_division_zero - dd msg_int_debug - dd msg_int_nmi - dd msg_int_breakpoint - dd msg_int_overflow - dd msg_int_range_exceeded - dd msg_int_invalid_opcode - dd msg_int_device_not_available - dd msg_int_double_fault - dd msg_int_coproc_segment_overrun - dd msg_int_invalid_tss - dd msg_int_seg_not_present - dd msg_int_stack_segfault - dd msg_int_gpf - dd msg_int_page_fault - dd msg_int_reserved - dd msg_int_fp_exception - dd msg_int_align_check - dd msg_int_machine_check - dd msg_int_simd_exception - dd msg_int_virt_exception - dd msg_int_reserved - dd msg_int_reserved - dd msg_int_reserved - dd msg_int_reserved - dd msg_int_reserved - dd msg_int_reserved - dd msg_int_reserved - dd msg_int_reserved - dd msg_int_reserved - dd msg_int_reserved - dd msg_int_reserved - iend - -msg_hello_world: - db "StupidOS v", STUPID_VERSION, " (built with NASM v", __NASM_VER__, " on ", __DATE__, " ", __TIME__, ")", 0 -msg_boot_info: - db "Bootloader: %s", 0 -msg_pmm_initialized: - db "PMM initialized", 0 -err_invalid_boot_magic: - db "[ERROR] Invalid boot magic (got: %x, expected: 0x2BADB002)", 0 -err_cannot_map_memory: - db "[ERROR] Can't map memory", 0 -warn_no_mmap: - db "[WARN] mmap flag not set", 0 -msg_mmap_entry: - db "Memory Map Entry:", 0xA - db 0x9, "Address: (hi): %x (lo): %x", 0xA - db 0x9, "Length: (hi): %x (lo): %x", 0xA - db 0x9, "Type: %x", 0 -msg_mem_block: - db "Free Memory:", 0xA - db 0x9, "Address: %x", 0xA - db 0x9, "Length: %x", 0 -msg_max_mem: - db "Max memory: %x", 0 -msg_bitmap_stored_at: - db "Bitmap stored at: %x", 0 - - -msg_int_division_zero: db "Division by zero", 0x0 -msg_int_debug: db "Debug", 0x0 -msg_int_nmi: db "Non-maskable interrupt", 0x0 -msg_int_breakpoint: db "Breakpoint", 0x0 -msg_int_overflow: db "Overflow", 0x0 -msg_int_range_exceeded: db "Bound range exceeded", 0x0 -msg_int_invalid_opcode: db "Invalid Opcode", 0x0 -msg_int_device_not_available: db "Device not available", 0x0 -msg_int_double_fault: db "Double fault", 0x0 -msg_int_coproc_segment_overrun: db "Coprocessor segment overrun", 0x0 -msg_int_invalid_tss: db "Invalid TSS", 0x0 -msg_int_seg_not_present: db "Segment not present", 0x0 -msg_int_stack_segfault: db "Stack segment fault", 0x0 -msg_int_gpf: db "General Protection Fault", 0x0 -msg_int_page_fault: db "Page fault", 0x0 -msg_int_reserved: db "Reserved", 0x0 -msg_int_fp_exception: db "x87 Floating-Point Exception", 0x0 -msg_int_align_check: db "Aligment check", 0x0 -msg_int_machine_check: db "Machine check", 0x0 -msg_int_simd_exception: db "SIMD Floating-Point exception", 0x0 -msg_int_virt_exception: db "Virtualization exception", 0x0 -msg_int_sec_exception: db "Security exception", 0x0 diff --git a/kernel/intro.txt b/kernel/intro.txt deleted file mode 100644 index 3f79d60..0000000 Binary files a/kernel/intro.txt and /dev/null differ diff --git a/kernel/kernel.asm b/kernel/kernel.asm new file mode 100644 index 0000000..8ba44fc --- /dev/null +++ b/kernel/kernel.asm @@ -0,0 +1,15 @@ + INCLUDE 'boot/boot.inc' + + ORG $ + KBASE + + INCLUDE 'mm/mm.inc' + +kmain: + nop + +_edata: + + ; BSS + rb 0x4000 + +_end: \ No newline at end of file diff --git a/kernel/kernel.s b/kernel/kernel.s deleted file mode 100644 index edba150..0000000 --- a/kernel/kernel.s +++ /dev/null @@ -1,38 +0,0 @@ -; File: kernel.s -[BITS 32] - -%include "base.inc" - -section .bss -align 16 -stack_bottom: - resb 16384 -global stack_top -stack_top: - -section .text -; Function: kmain -global kmain -kmain: - push ebp - mov ebp, esp - ;; TODO: console init - - extern serial_init - call serial_init - - LOG msg_hello_world - LOG msg_print_boot, esi, edi - - int3 - ;; setup cpu - ;; initialize vm - - leave - ret - -section .rodata - -msg_hello_world db "StupidOS v", STUPID_VERSION, " (built with ", __NASM_VER__, " on ", __DATE__, " ", __TIME__, ")", 0 -msg_print_boot db "ESI: %x | EDI: %x", 0 -file db __FILE__, 0 diff --git a/kernel/linker.ld b/kernel/linker.ld deleted file mode 100644 index 493e315..0000000 --- a/kernel/linker.ld +++ /dev/null @@ -1,39 +0,0 @@ -OUTPUT_ARCH(i386) -ENTRY(entry) - -SECTIONS -{ - . = 1M; - - kernel_start = .; - - .multiboot ALIGN(0x1000): { - KEEP(*(.multiboot.data)) - KEEP(*(.multiboot.text)) - } - - . += 0xC0100000; - - .text ALIGN(0x1000) : AT(ADDR(.text) - 0xC0000000) { - *(.text) - } - - .rodata ALIGN(0x1000) : AT(ADDR(.rodata) - 0xC0000000) { - *(.rodata) - } - - .data ALIGN(0x1000) : AT(ADDR(.data) - 0xC0000000) { - *(.data) - } - - .bss ALIGN(0x1000) : AT(ADDR(.bss) - 0xC0000000) { - bss_start = .; - *(COMMON) - *(.bss) - bss_end = .; - } - - kernel_end = .; -} - -kernel_size = kernel_end - kernel_start; diff --git a/kernel/mm/mm.inc b/kernel/mm/mm.inc new file mode 100644 index 0000000..71b67d5 --- /dev/null +++ b/kernel/mm/mm.inc @@ -0,0 +1,11 @@ +free_block_head dd 0x0 + +mm_init: + + ret + + +kernel_page_directory: + dd 0x1000 dup 0x0 +kernel_page_table: + dd 0x1000 dup 0x0 \ No newline at end of file diff --git a/kernel/mm/stats.inc b/kernel/mm/stats.inc new file mode 100644 index 0000000..8e6f814 --- /dev/null +++ b/kernel/mm/stats.inc @@ -0,0 +1,7 @@ +struc VMStat +{ + total_page dd 0 + free_pages dd 0 + used_pages dd 0 +} + diff --git a/kernel/paging.s b/kernel/paging.s deleted file mode 100644 index c34f969..0000000 --- a/kernel/paging.s +++ /dev/null @@ -1,16 +0,0 @@ -[BITS 32] - -PE_PRESENT equ 1 << 0 -PE_WRITABLE equ 1 << 1 -PE_USERMODE equ 1 << 2 -PE_ACCESSED equ 1 << 5 -PE_DIRTY equ 1 << 6 - -section .bss -align 4096 -global page_directory -page_directory: - resb 4096 -global boot_page_table -boot_page_table: - resb 4096 diff --git a/kernel/pic.s b/kernel/pic.s deleted file mode 100644 index 2fd87a5..0000000 --- a/kernel/pic.s +++ /dev/null @@ -1,114 +0,0 @@ -; file: pic.s -; -[BITS 32] - -PIC1_INT_START equ 0x20 -PIC2_INT_START equ 0x28 -PIC_INT_END equ PIC2_INT_START + 7 - -PIC1_CMD equ 0x20 -PIC1_DATA equ 0x21 -PIC2_CMD equ 0xA0 -PIC2_DATA equ 0xA1 - -; Initialization Command Words (ICWs) -ICW1_INIT equ 1 << 4 -ICW1_ICW4 equ 1 << 0 -ICW1_SINGLE equ 1 << 1 -ICW1_INTERVAL4 equ 1 << 2 -ICW1_LVL_MODE equ 1 << 3 - -ICW4_8086_MODE equ 1 << 0 -ICW4_AUTO_EOI equ 1 << 1 -ICW4_BUF_SLAVE equ 1 << 3 -ICW4_BUF_MASTER equ 1 << 3 | 1 << 2 -ICW4_SFNM equ 1 << 4 - -; Operation Command Words (OWCs) -OCW2_EOI equ 1 << 5 - -section .text - - ; Function: setup_pic - ; - ; in: - ; none - ; - ; out: - ; none - ; -global pic_setup -pic_setup: - push ebp - mov ebp, esp - sub esp, 2 - - in al, PIC1_DATA - mov [ebp - 2], al - in al, PIC2_DATA - mov [ebp - 1], al - - mov al, ICW1_INIT | ICW1_ICW4 - out PIC1_CMD, al - out PIC2_CMD, al - - mov al, PIC1_INT_START - out PIC1_DATA, al - mov al, PIC2_INT_START - out PIC2_DATA, al - - mov al, 4 - out PIC1_DATA, al - mov al, 2 - out PIC2_DATA, al - - mov al, ICW4_8086_MODE - out PIC1_DATA, al - out PIC2_DATA, al - - mov al, [ebp - 2] - out PIC1_DATA, al - mov al, [ebp - 1] - out PIC2_DATA, al - - leave - ret - - ; Function: pic_eoi - ; - ; in: - ; none - ; - ; out: - ; none - ; -global pic_eoi -pic_eoi: - push ebp - mov ebp, esp - - mov al, OCW2_EOI - - cmp byte [ebp + 8], PIC1_INT_START - jb .end - cmp byte [ebp + 8], PIC_INT_END - ja .end - - cmp byte [ebp + 8], PIC2_INT_START - jb .pic1 - out PIC2_CMD, al - jmp .end -.pic1: - out PIC1_CMD, al - -.end: - leave - ret - - ; Function: pic_disable -global pic_disable -pic_disable: - mov al, 0xFF - out PIC1_DATA, al - out PIC2_DATA, al - ret diff --git a/kernel/pmm.s b/kernel/pmm.s deleted file mode 100644 index 6b8ed9c..0000000 --- a/kernel/pmm.s +++ /dev/null @@ -1,387 +0,0 @@ -; File: pmm.s -[BITS 32] - ;; XXX: align address to page - -%include "base.inc" -%include "sys/multiboot.inc" - -extern kernel_size -extern kernel_end - -struc bitmap - .length: resd 1 - .addr: resd 1 -endstruc - -section .text - -bitmap_count_free_page: - push ebp - mov ebp, esp - push edi - push esi - push ebx - - mov edi, [bitmap_info + bitmap.addr] - xor ebx, ebx - -.loop: - - inc edi - inc ebx - cmp ebx, [bitmap_info] - jb .loop -.end: - pop ebx - pop esi - pop edi - leave - ret - -bitmap_mark: - push ebp - mov ebp, esp - push edi - push esi - - mov edi, 1 - mov eax, [ebp + 8] - and eax, 0x7 ; eax % 8 - mov ecx, eax - shl edi, cl - - mov eax, [ebp + 8] - shr eax, 0x3 ; eax / 8 - mov esi, [bitmap_info + bitmap.addr] - add esi, eax - mov dl, byte [esi] - - mov ecx, [ebp + 12] - test ecx, ecx - jz .clear - - or edx, edi ; set bit - jmp .end - -.clear: - not edi - and edx, edi ; clear bit - -.end: - mov byte [esi], dl - - pop esi - pop edi - leave - ret - -init_bitmap: - push ebp - mov ebp, esp - push edi - - mov ecx, [bitmap_info] - mov edi, [bitmap_info + bitmap.addr] - rep stosb - - xchg bx, bx - - pop edi - leave - ret - -bitmap_mark_range_free: - push ebp - mov ebp, esp - push edi - push esi - push ebx - - mov edi, [ebp + 8] ; start address - mov esi, [ebp + 12] ; length - xor ebx, ebx ; counter (I know I SHOUD use 'ecx' as counter - ; but since the ABI state it's not preserved - ; accross function call) - push dword 0 ; bitmap_mark(addr, 0) == clear -.loop: - cmp ebx, esi - jnb .end_loop - add edi, ebx - jc .end_loop ; exit on overflow - push edi - call bitmap_mark - add esp, 4 - - add ebx, 0x1000 ; add page size - jmp .loop -.end_loop: - add esp, 4 - pop ebx - pop esi - pop edi - leave - ret - -setup_pmm_mmap: - push ebp - mov ebp, esp - sub esp, 4 - push edi - push esi - push ebx - - mov edi, [ebp + 8] ; mb_mmap struct addr - mov esi, [ebp + 12] ; mmap length - xor ebx, ebx ; pass - mov [ebp - 4], ebx ; set max addr to 0 -.loop: - ;; TODO: PAE stuff - ;; skip address > 32bit - mov eax, [edi + mb_mmap.addr + 4] - and eax, eax - jnz .next - mov eax, [edi + mb_mmap.length + 4] - and eax, eax - jnz .next - - ;; check if first pass - and ebx, ebx - jz .first_pass - mov eax, [edi + mb_mmap.type] - and eax, 0x1 ; check if free - jz .next - ;; - mov eax, [bitmap_info] - mov ecx, [mb_mmap.length] - cmp eax, ecx - ja .next - - cmp ebx, 0x1 - jne .third_pass - mov eax, [edi + mb_mmap.addr] - mov [bitmap_info + bitmap.addr], eax - LOG msg_bitmap_stored_at, eax - call init_bitmap ; mark all memory as used - jmp .bitmap_size_already_set - - ;; TODO: mark as free in bitmap -.third_pass: - push dword [edi + mb_mmap.length] - push dword [edi + mb_mmap.addr] - call bitmap_mark_range_free - add esp, 8 - jmp .next - - ;; first pass then calculate higher address -.first_pass: - LOG msg_mmap_entry, dword [edi + mb_mmap.addr + 4], \ - dword [edi + mb_mmap.addr], \ - dword [edi + mb_mmap.length + 4], \ - dword [edi + mb_mmap.length], \ - dword [edi + mb_mmap.type] - mov eax, [edi + mb_mmap.length] - add eax, [edi + mb_mmap.addr] - jnc .no_overflow - mov eax, -1 ; if overflow set eax to (uint32_t)-1 -.no_overflow: - mov edx, [ebp - 4] - cmp edx, eax - ja .next - mov [ebp - 4], eax - -.next: - mov eax, [edi + mb_mmap.size] - add eax, 0x4 - add edi, eax ; jump to next entry - sub esi, eax - jnz .loop - - and ebx, ebx - jnz .bitmap_size_already_set - LOG msg_max_mem, dword [ebp - 4] - - mov eax, [ebp - 4] - shr eax, 15 ; eax / (4096*8) - mov [bitmap_info], eax - -.bitmap_size_already_set: - mov edi, [ebp + 8] ; mb_mmap struct addr - mov esi, [ebp + 12] ; mmap length - inc ebx - cmp ebx, 2 - jbe .loop - - pop ebx - pop esi - pop edi - leave - ret - -setup_pmm_legacy: - push ebp - mov ebp, esp - push edi - push esi - push ebx - xor eax, eax - mov ecx, [ebp + 8] - shl ecx, 0xA ; ecx * 1KiB - mov esi, ecx - LOG msg_mem_block, eax, ecx - - mov eax, 0x100000 - mov ecx, [ebp + 12] - shl ecx, 0xA ; ecx * 1KiB - mov ebx, ecx - mov edi, eax - add edi, ecx - LOG msg_mem_block, eax, ecx - - LOG msg_max_mem, edi - - shr edi, 15 ; (edi / (4046*8)) - mov dword [bitmap_info], edi - - cmp edi, esi - ja .try_high - mov dword [bitmap_info + bitmap.addr], 0 - jmp .initialize_bitmap - -.try_high: - mov eax, ebx - sub ebx, kernel_size - cmp edi, ebx - ja .err_no_mem - mov dword [bitmap_info + bitmap.addr], kernel_end - -.initialize_bitmap: - call init_bitmap - - push esi - push dword 0 - call bitmap_mark_range_free - - push ebx - push dword 0x100000 - call bitmap_mark_range_free - - xor eax, eax - jmp .end - -.err_no_mem: - mov eax, 1 - -.end: - pop ebx - pop esi - pop edi - leave - ret - -global setup_pmm -setup_pmm: - push ebp - mov ebp, esp - push edi - push esi - push ebx - - mov edi, [ebp + 8] - - mov eax, [edi] - and eax, 0x40 ; (1 << 6) - jz .no_mmap - - push dword [edi + mb_info.mmap_length] - push dword [edi + mb_info.mmap_addr] - call setup_pmm_mmap - add esp, 8 - - jmp .end_mem_detection - -.no_mmap: - LOG warn_no_mmap - mov eax, [edi] - and eax, 0x1 - jz .err - - push dword [edi + mb_info.mem_upper] - push dword [edi + mb_info.mem_lower] - call setup_pmm_legacy - add esp, 8 - -.end_mem_detection: - ;; mark bitmap as used - xor ebx, ebx - mov edi, [bitmap_info + bitmap.addr] - mov esi, [bitmap_info] - push dword 1 ; bitmap_mark(addr, 1) == set - -.loop: - cmp ebx, edi - jnb .end_loop - add edi, ebx - push edi - call bitmap_mark - add esp, 4 - - add ebx, 0x1000 - jmp .loop -.end_loop: - add esp, 4 ; previous "push dword 0" - - xor eax, eax - jmp .end -.err: - mov eax, 1 -.end: - pop ebx - pop esi - pop ebx - leave - ret - -global alloc_frames -alloc_frames: - push esp - mov ebp, esp - push edi - push esi - - mov edi, [ebp + 8] ; count - - pop esi - pop edi - leave - ret - -global free_frames -free_frames: - push esp - mov ebp, esp - - call bitmap_mark_range_free - - leave - ret - -section .data -bitmap_info: - istruc bitmap - at bitmap.length, dd 0 - at bitmap.addr, dd 0 - iend - -section .rodata -warn_no_mmap db "[WARN] mmap flag not set", 0 -msg_mmap_entry db "Memory Map Entry:", 0xA - db 0x9, "Address: (hi): %x (lo): %x", 0xA - db 0x9, "Length: (hi): %x (lo): %x", 0xA - db 0x9, "Type: %x", 0 -msg_mem_block db "Free Memory:", 0xA - db 0x9, "Address: %x", 0xA - db 0x9, "Length: %x", 0 -msg_max_mem db "Max memory: %x", 0 -msg_dump_x db "dump: %x", 0 -msg_bitmap_stored_at db "Bitmap stored at: %x", 0 -file db __FILE__, 0 diff --git a/kernel/sys/i386/cpu.inc b/kernel/sys/i386/cpu.inc deleted file mode 100644 index 063d4c9..0000000 --- a/kernel/sys/i386/cpu.inc +++ /dev/null @@ -1,70 +0,0 @@ - ;; File: cpu.inc - - ;; Structure: idt_gate - ;; .offset_low - TODO - ;; .selector - TODO - ;; .zero - TODO - ;; .attributes - TODO - ;; .offset_high - TODO - ;; -struc idt_gate - .offset_low: resw 1 - .selector: resw 1 - .zero: resb 1 - .attributes: resb 1 - .offset_high: resw 1 -endstruc - - ;; About: Gates - ;; - Task Gate - ;; > 31 23 15 7 0 - ;; > +----------------|----------------+-----------------|-----------------+ - ;; > | (NOT USED) | P DPL 0 0 1 0 1 (NOT USED) | - ;; > +----------------|----------------+-----------------|-----------------+ - ;; > | SELECTOR | (NOT USED) | - ;; > +----------------|----------------+-----------------|-----------------+ - ;; - ;; - Interrupt Gate - ;; > 31 23 15 7 0 - ;; > +----------------|----------------+-----------------|-----------------+ - ;; > | OFFSET 31..16 | P DPL 0 1 1 1 0 0 0 0 0 0 0 0 0 | - ;; > +----------------|----------------+-----------------|-----------------+ - ;; > | SELECTOR | OFFSET 15..0 | - ;; > +--------------- |----------------+-----------------|-----------------+ - ;; - ;; - Trap Gate - ;; > 31 23 15 7 0 - ;; > +----------------|----------------+-----------------|-----------------+ - ;; > | OFFSET 31..16 | P DPL 0 1 1 1 1 0 0 0 0 0 0 0 0 | - ;; > +----------------|----------------+-----------------|-----------------+ - ;; > | SELECTOR | OFFSET 15..0 | - ;; > +--------------- |----------------+-----------------|-----------------+ - -struc intframe - ;; registers - .edi: resd 1 - .esi: resd 1 - .ebp: resd 1 - .esp: resd 1 - .ebx: resd 1 - .edx: resd 1 - .ecx: resd 1 - .eax: resd 1 - - ;; - .gs: resd 1 - .fs: resd 1 - .es: resd 1 - .ds: resd 1 - .intno: resd 1 - - ;; by x86 hardware - .err: resd 1 - .eip: resd 1 - .cs: resd 1 - .eflags: resd 1 - - ;; crossring - .useresp: resd 1 - .ss: resd 1 -endstruc diff --git a/kernel/sys/i386/cpuid.inc b/kernel/sys/i386/cpuid.inc deleted file mode 100644 index 907f8bc..0000000 --- a/kernel/sys/i386/cpuid.inc +++ /dev/null @@ -1,13 +0,0 @@ - ;; File: cpuid.inc - -CPUID_VENDORID equ 0x0 -CPUID_GETFEATURES equ 0x1 - -CPUID_FEAT_EDX_FPU equ 1 << 0 -CPUID_FEAT_EDX_VME equ 1 << 1 -CPUID_FEAT_EDX_DE equ 1 << 2 -CPUID_FEAT_EDX_PSE equ 1 << 3 -CPUID_FEAT_EDX_TSC equ 1 << 4 -CPUID_FEAT_EDX_MSR equ 1 << 5 -CPUID_FEAT_EDX_PAE equ 1 << 6 -CPUID_FEAT_EDX_MCE equ 1 << 7 diff --git a/kernel/sys/i386/mmu.inc b/kernel/sys/i386/mmu.inc deleted file mode 100644 index 3dec584..0000000 --- a/kernel/sys/i386/mmu.inc +++ /dev/null @@ -1,91 +0,0 @@ - ;; File: mmu.inc - ;; - ;; About: Address Translation - ;; - ;; Since we don't use segmentation, this is how address translation works - ;; > 31 21 11 0 - ;; > +--------+--------+--------+ - ;; > | DIR | PAGE | OFFSET | - ;; > +--------+--------+--------+ - ;; > | - ;; > v - ;; > Page Translation - ;; > | - ;; > 31 v 0 - ;; > +--------------------------+ - ;; > | Pyshical address | - ;; > +--------------------------+ - ;; - ;; About: Page Translation - ;; - ;; > +--------+--------+--------+ +--------+ - ;; > | DIR | PAGE | OFFSET |-----+ | Phys | - ;; > +--------+--------+--------+ +------>| addr | - ;; > | | | | - ;; > | +----+ +--------+ - ;; > | Page Dir | +---> Page Frame - ;; > | +---------+ | +--------+ | - ;; > | | | | | | | - ;; > +->| PDE |-+ +->| PTE |-+ - ;; > | | | | | - ;; > +---------+ | +--------+ - ;; > +----> Page Table - ;; > - ;; - - ;; Macro: V2P(addr) - ;; Convert Kernel Address to Physical Address -%define V2P(addr) (addr - KERNBASE) - - ;; Macro: P2V(addr) - ;; Convert Physical Address to Kernel Address -%define P2V(addr) (addr + KERNBASE) - -%define P2PDE(addr) ((addr >> 22) & 0x3FF) -%define PDE2P(addr) (addr << 22) -%define P2PTE(addr) ((addr >> 12) & 0x3FF) - - ;; Defines: Page Directory Flags - ;; PDE_P - Present - ;; PDE_W - Writable - ;; PDE_U - User - ;; PDE_PWT - Write-Through - ;; PDE_PS - 4MiB page -PDE_P equ 1 << 0 -PDE_W equ 1 << 1 -PDE_U equ 1 << 2 -PDE_PWT equ 1 << 3 -PDE_PCD equ 1 << 4 -PDE_A equ 1 << 5 -PDE_D equ 1 << 6 -PDE_PS equ 1 << 7 -PDE_G equ 1 << 8 - - ;; Defines: Page Table Flags - ;; PTE_P - Present - ;; PTE_W - Writable - ;; PTE_U - User - ;; PTE_PWT - Write-Through - ;; PTE_PCD - Cache Disable - ;; PTE_A - Accessed - ;; PTE_D - Dirty - ;; PTE_PAT - TODO - ;; PTE_G - TODO -PTE_P equ 1 << 0 -PTE_W equ 1 << 1 -PTE_U equ 1 << 2 -PTE_PWT equ 1 << 3 -PTE_PCD equ 1 << 4 -PTE_A equ 1 << 5 -PTE_D equ 1 << 6 -PTE_PAT equ 1 << 7 -PTE_G equ 1 << 8 - -struc gdt_entry - .limit_low: resw 1 - .base_low: resw 1 - .base_mid: resb 1 - .access: resb 1 - .flags: resb 1 - .base_high: resb 1 -endstruc diff --git a/kernel/sys/i386/registers.inc b/kernel/sys/i386/registers.inc deleted file mode 100644 index 91fe26e..0000000 --- a/kernel/sys/i386/registers.inc +++ /dev/null @@ -1,126 +0,0 @@ - ;; File: registers.inc - - - ;; ========================================================================= - ;; Control Registers - ;; ========================================================================= - - ;; Defines: CR0 - ;; CR0_PE - Protected Mode Enable - ;; CR0_MP - Monitor co-processor - ;; CR0_EM - x87 FPU Emulation - ;; CR0_TS - Task switched - ;; CR0_ET - Extension type - ;; CR0_NE - Numeric error - ;; CR0_WP - Write protect - ;; CR0_AM - Alignment mask - ;; CR0_NW - Not-write through - ;; CR0_CD - Cache disable - ;; CR0_PG - Paging -CR0_PE equ 1 << 0 -CR0_MP equ 1 << 1 -CR0_EM equ 1 << 2 -CR0_TS equ 1 << 3 -CR0_ET equ 1 << 4 -CR0_NE equ 1 << 5 -CR0_WP equ 1 << 16 -CR0_AM equ 1 << 18 -CR0_NW equ 1 << 29 -CR0_CD equ 1 << 30 -CR0_PG equ 1 << 31 - - ;; Defines: CR3 - ;; CR3_PWT - Page-level Write-Through - ;; CR3_PCD - Page-level Cache Disable -CR3_PWT equ 1 << 3 -CR3_PCD equ 1 << 4 - - ;; Defines: CR4 - ;; CR4_VME - Virtual 8086 Mode Extensions - ;; CR4_PVI - Protected-mode Virtual Interrupts - ;; CR4_TSD - Time Stamp Disable - ;; CR4_DE - Debugging Extensions - ;; CR4_PSE - Page Size Extension - ;; CR4_PAE - Physical Address Extension - ;; CR4_MCE - Machine Check Exception - ;; CR4_PGE - Page Global Enabled - ;; CR4_PCE - Performance-Monitoring Counter enable - ;; CR4_OSFXSR - Operating system support for FXSAVE and FXRSTOR - ;; instructions - ;; CR4_OSXMMEXCPT - Operating System Support for Unmasked SIMD - ;; Floating-Point Excepions - ;; CR4_UMIP - User-Mode Instruction Prevention - ;; CR4_VMXE - Virtual Machine Extensions Enable - ;; CR4_SMXE - Safer Mode Extensions Enable - ;; CR4_FSGSBASE - - ;; CR4_PCIDE - PCID Enable - ;; CR4_OSXSSAVE - XSAVE and Processor Extended States Enable - ;; CR4_SMEP - Supervisor Mode Execution Protection Enable - ;; CR4_SMAP - Supervisor Mode Access Prevention Enable - ;; CR4_PKE - Protection Key Enable - ;; CR4_CET - Control-flow Enforcement Technology - ;; CR4_PKS - Enable Protection Keys for Supervisor-Mode Pages -CR4_VME equ 1 << 0 -CR4_PVI equ 1 << 1 -CR4_TSD equ 1 << 2 -CR4_DE equ 1 << 3 -CR4_PSE equ 1 << 4 -CR4_PAE equ 1 << 5 -CR4_MCE equ 1 << 6 -CR4_PGE equ 1 << 7 -CR4_PCE equ 1 << 8 -CR4_OSDXSR equ 1 << 9 -CR4_OSXMMEXCPT equ 1 << 10 -CR4_UMIP equ 1 << 11 -CR4_VMXE equ 1 << 13 -CR4_SMXE equ 1 << 14 -CR4_FSGSBASE equ 1 << 16 -CR4_PCIDE equ 1 << 17 -CR4_OSXSAVE equ 1 << 18 -CR4_SMEP equ 1 << 20 -CR4_SMAP equ 1 << 21 -CR4_PKE equ 1 << 22 -CR4_CET equ 1 << 23 -CR4_PKS equ 1 << 24 - - ;; ========================================================================= - ;; eflags - ;; ========================================================================= - - ;; Defines: EFLAGS - ;; EFLAGS_CF - Carry flag - ;; EFLAGS_PF - Parity flag - ;; EFLAGS_AF - Auxiliary flag - ;; EFLAGS_ZF - Zero flag - ;; EFLAGS_SF - Sign flag - ;; EFLAGS_TF - Trap flag - ;; EFLAGS_IF - Interrupt enable flag - ;; EFLAGS_DF - Direction flag - ;; EFLAGS_OF - Overflow flag - ;; EFLAGS_IOPL1 - I/O privilege flag - ;; EFLAGS_IOPL2 - I/O privilege flag - ;; EFLAGS_NT - Nested task flag - ;; EFLAGS_RF - Resume flag - ;; EFLAGS_VM - Virtual 8086 mode flag - ;; EFLAGS_AC - Alignment check - ;; EFLAGS_VIF - Virtual Interrupt flag - ;; EFLAGS_VIP - Virtual Interrupt pending - ;; EFLAGS_ID - CPUID instruction available -EFLAGS_CF equ 1 << 0 -EFLAGS_PF equ 1 << 2 -EFLAGS_AF equ 1 << 4 -EFLAGS_ZF equ 1 << 6 -EFLAGS_SF equ 1 << 7 -EFLAGS_TF equ 1 << 8 -EFLAGS_IF equ 1 << 9 -EFLAGS_DF equ 1 << 10 -EFLAGS_OF equ 1 << 11 -EFLAGS_IOPL1 equ 1 << 12 -EFLAGS_IOPL2 equ 1 << 13 -EFLAGS_NT equ 1 << 14 -EFLAGS_RF equ 1 << 16 -EFLAGS_VM equ 1 << 17 -EFLAGS_AC equ 1 << 18 -EFLAGS_VIF equ 1 << 19 -EFLAGS_VIP equ 1 << 20 -EFLAGS_ID equ 1 << 21 diff --git a/kernel/sys/i386/task.inc b/kernel/sys/i386/task.inc deleted file mode 100644 index 0cbaa01..0000000 --- a/kernel/sys/i386/task.inc +++ /dev/null @@ -1,99 +0,0 @@ - ;; File: task.inc - ;; - - ;; Structure: tss - ;; - ;; > 31 23 15 7 0 - ;; > +----------|----------+----------|----------+ - ;; > 0x64 | I/O map base | 00000000 0000000T | - ;; > +----------|----------+----------|----------+ - ;; > 0x60 | 00000000 00000000 | LDT | - ;; > +----------|----------+----------|----------+ - ;; > 0x5c | 00000000 00000000 | GS | - ;; > +----------|----------+----------|----------+ - ;; > 0x58 | 00000000 00000000 | FS | - ;; > +----------|----------+----------|----------+ - ;; > 0x54 | 00000000 00000000 | DS | - ;; > +----------|----------+----------|----------+ - ;; > 0x50 | 00000000 00000000 | SS | - ;; > +----------|----------+----------|----------+ - ;; > 0x4C | 00000000 00000000 | CS | - ;; > +----------|----------+----------|----------+ - ;; > 0x48 | 00000000 00000000 | ES | - ;; > +----------|----------+----------|----------+ - ;; > 0x44 | EDI | - ;; > +----------|----------+----------|----------+ - ;; > 0x40 | ESI | - ;; > +----------|----------+----------|----------+ - ;; > 0x3C | EBP | - ;; > +----------|----------+----------|----------+ - ;; > 0x38 | ESP | - ;; > +----------|----------+----------|----------+ - ;; > 0x34 | EBX | - ;; > +----------|----------+----------|----------+ - ;; > 0x30 | EDX | - ;; > +----------|----------+----------|----------+ - ;; > 0x2C | ECX | - ;; > +----------|----------+----------|----------+ - ;; > 0x28 | EAX | - ;; > +----------|----------+----------|----------+ - ;; > 0x24 | EFLAGS | - ;; > +----------|----------+----------|----------+ - ;; > 0x20 | EIP | - ;; > +----------|----------+----------|----------+ - ;; > 0x1C | CR3 | - ;; > +----------|----------+----------|----------+ - ;; > 0x18 | 00000000 00000000 | SS2 | - ;; > +----------|----------+----------|----------+ - ;; > 0x14 | ESP2 | - ;; > +----------|----------+----------|----------+ - ;; > 0x10 | 00000000 00000000 | SS1 | - ;; > +----------|----------+----------|----------+ - ;; > 0x0C | ESP1 | - ;; > +----------|----------+----------|----------+ - ;; > 0x08 | 00000000 00000000 | SS0 | - ;; > +----------|----------+----------|----------+ - ;; > 0x04 | ESP0 | - ;; > +----------|----------+----------|----------+ - ;; > 0x00 | 00000000 00000000 | old TSS selector | - ;; > +----------|----------+----------|----------+ -struc tss - .link: resw 1 - resw 1 - .esp0: resd 1 - .ss0: resw 1 - resw 1 - .esp1: resd 1 - .ss1: resw 1 - resw 1 - .esp2: resd 1 - .ss2: resw 1 - resw 1 - .cr3: resd 1 - .eip: resd 1 - .eflags: resd 1 - .eax: resd 1 - .ecx: resd 1 - .edx: resd 1 - .ebx: resd 1 - .esp: resd 1 - .ebp: resd 1 - .esi: resd 1 - .edi: resd 1 - .es: resw 1 - resw 1 - .cs: resw 1 - resw 1 - .ss: resw 1 - resw 1 - .ds: resw 1 - resw 1 - .fs: resw 1 - resw 1 - .gs: resw 1 - resw 1 - .ldtr: resw 1 - resw 1 - .iopb: resw 1 - resw 1 -endstruc diff --git a/kernel/sys/multiboot.inc b/kernel/sys/multiboot.inc deleted file mode 100644 index ccf0156..0000000 --- a/kernel/sys/multiboot.inc +++ /dev/null @@ -1,140 +0,0 @@ -; File: multiboot.inc - -; Define: MB_HDR_MAGIC -; Multiboot Header Magic -MB_HDR_MAGIC equ 0x1BADB002 - -; Define: MB_MAGIC -; Multiboot Magic passed by the bootloader. -MB_MAGIC equ 0x2BADB002 - -; Structure: mb_header -; -; .magic - todo -; .flags - See -; .checksum - todo -; .aout_kludge - todo -; .mode_type - todo -; .width - todo -; .height - todo -; .depth - todo -struc mb_header - .magic: resd 1 - .flags: resd 1 - .checksum: resd 1 - .aout_kludge: resd 5 - .mode_type: resd 1 - .width: resd 1 - .height: resd 1 - .depth: resd 1 -endstruc - -; Defines: flags -; -; MB_HDR_ALIGN - todo -; MB_HDR_MEMINFO - -; MB_HDR_VIDEO - todo -MB_HDR_ALIGN equ 1 << 0 -MB_HDR_MEMINFO equ 1 << 1 -MB_HDR_VIDEO equ 1 << 2 - -; Structure: mb_info -; -; Fields: -; .flags - See -; .mem_lower - todo -; .mem_upper - todo -; .boot_device - todo -; . -struc mb_info - - ;; flags - .flags: resd 1 - - ;; flags[0] is set - .mem_lower: resd 1 - .mem_upper: resd 1 - - ;; flags[1] is set - .boot_device: resd 1 - - ;; flags[2] is set - .cmdline: resd 1 - - ;; flags[3] is set - .mods_count: resd 1 - .mods_addr: resd 1 - - ;; flags[4] || flags[4] is set - .syms: resd 4 - - ;; flags[6] is set - .mmap_length: resd 1 - ; - ; see - .mmap_addr: resd 1 - - ;; flags[7] is set - .drives_length: resd 1 - .drives_addr: resd 1 - - ;; flags[8] is set - .config_table: resd 1 - - ;; flags[9] is set - .bootloader_name: resd 1 - - ;; flags[10] is set - .apm_table: resd 1 - - ;; - .vbe_control_info: resd 1 - .vbe_mode_info: resd 1 - .vbe_mode: resw 1 - .vbe_interface_seg: resw 1 - .vbe_interface_off: resw 1 - .vbe_interface_len: resw 1 - - .framebuffer_addr: resq 1 - .framebuffer_pitch: resd 1 - .framebuffer_width: resd 1 - .framebuffer_height: resd 1 - .framebuffer_bpp: resb 1 - .framebuffer_type: resb 1 - .framebuffer_misc: resw 3 -endstruc - -; Defines: flags -; -; MB_INFO_MEM - todo -; MB_INFO_BOOTDEV - todo -MB_INFO_MEM equ 1 << 0 -MB_INFO_BOOTDEV equ 1 << 1 -MB_INFO_CMDLINE equ 1 << 2 -MB_INFO_MODULES equ 1 << 3 -MB_INFO_MMAP equ 1 << 6 -MB_INFO_DRIVES equ 1 << 7 -MB_INFO_BOOTLOADER_NAME equ 1 << 9 -MB_INFO_VBE equ 1 << 11 -MB_INFO_FRAMEBUFFER equ 1 << 12 - -; Structure: mb_mmap -struc mb_mmap - .size: resd 1 - .addr: resq 1 - .length: resq 1 - .type: resd 1 -endstruc - -; Defines: types -; -; MB_MEMORY_AVAILABLE - 1 -; MB_MEMORY_RESERVED - 2 -; MB_MEMORY_ACPI - 3 -; MB_MEMORY_NVS - 4 -; MB_MEMORY_BADRAM - 5 -%define MB_MEMORY_AVAILABLE 1 -%define MB_MEMORY_RESERVED 2 -%define MB_MEMORY_ACPI 3 -%define MB_MEMORY_NVS 4 -%define MB_MEMORY_BADRAM 5 diff --git a/kernel/syscall.s b/kernel/syscall.s deleted file mode 100644 index 8039951..0000000 --- a/kernel/syscall.s +++ /dev/null @@ -1,11 +0,0 @@ -[BITS 32] - -global syscall_table -syscall_table: - dd 0 ; sys_exit - dd 0 ; sys_fork - dd 0 ; sys_read - dd 0 ; sys_write - dd 0 ; sys_open - dd 0 ; sys_close -.end: diff --git a/kernel/vm/pmap.s b/kernel/vm/pmap.s deleted file mode 100644 index 5e8e348..0000000 --- a/kernel/vm/pmap.s +++ /dev/null @@ -1,46 +0,0 @@ - ;; File: pmap.s - ;; Physical Memory Map - - ;; Structure: pmap_block - ;; - ;; .next - pointer to next pmap_block struct - ;; .phys_start - start physical address of memory range - ;; .phys_end - stop address of memory range - ;; .bitmap_size - bitmap size (max: 0xFF0) - ;; .last_alloc - last allocated frame in bitmap - ;; .bitmap - bitmap array - ;; - ;; > pmap_block - ;; > 0x0000 +-------------+ - ;; > | next |-----> pmap_block - ;; > 0x0004 +-------------+ +----------+ - ;; > | phys start | | next |----> NULL (0x0) - ;; > 0x0008 +-------------+ +----------+ - ;; > | phys end | | ..... | - ;; > 0x000C +-------------+ | ..... | - ;; > | bitmap size | | ..... | - ;; > 0x000e +-------------+ +----------+ - ;; > | last alloc | - ;; > 0x0010 +-------------+ - ;; > | bitmap | - ;; > 0x???? +-------------+ (bitmap size * 4) - ;; -struct pmap_block - .next: resd 1 - .phys_start: resd 1 - .phys_end: resd 1 - .bitmap_size: resw 1 - .last_alloc: resw 1 - .bitmap: -endstruc - -section .text - ;; Function: pmap_bootstrap - ;; - ;; (see pmap_bootstrap.png) -pmap_bootstrap: - push esp - mov esp, ebp - - leave - ret diff --git a/kernel/vm/vm.inc b/kernel/vm/vm.inc deleted file mode 100644 index 5cae722..0000000 --- a/kernel/vm/vm.inc +++ /dev/null @@ -1,60 +0,0 @@ - ;; File: vm.inc - ;; Stupid OS virtual Memory manager - ;; - ;; About: Memory Management - ;; - ;; Terminology: - ;; VA - Virtual Address - ;; PA - Physical Address - ;; PDE - Page Directory Entry - ;; PTE - Page Table Entry - ;; - ;; Memory Layout: - ;; - ;; Virtual Memory above `0xC0000000` is mapped as kernel only flags - ;; - ;; > Virtual - ;; > 0xFFFFFFFF +---------------+ - ;; > | | - ;; > | Device Memory | - ;; > | | - ;; > +---------------+ - ;; > | | - ;; > | Kernel Heap | - ;; > | | - ;; > KERN_END +---------------+ - ;; > | | - ;; > | Stupid Kernel | - ;; > | | - ;; > 0xC0100000 +---------------+ - ;; > | I/O Space and | - ;; > | phys memory | - ;; > | Lower than 1M | kernel mode only - ;; > 0xC0000000 +---------------+ - ;; > | | user mode - ;; > | userspace | - ;; > | | - ;; > 0x00000000 +---------------+ - ;; - ;; Page Frame Allocator - ;; -%define K2P(addr) (addr - KERNBASE) -%define P2K(addr) (addr + KERNBASE) - -struc vm_kmap - .virt: resd 1 - .phys_start: resd 1 - .phys_stop: resd 1 - .access: resb 1 -endstruc - -struc vm_map - .pmap: resd 1 - -endstruc - -struc - .directory: resd 1 - .ref_count: resd 1 - -endstruc diff --git a/lib/Makefile b/lib/Makefile index c5d09e0..b25107e 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -1,3 +1,11 @@ -SUBDIR = base crypto +SUBDIRS = crypto -include $(TOPDIR)/share/mk/stupid.subdir.mk +TOPGOALS = all clean install + +.PHONY: $(SUBDIRS) +$(SUBDIRS): + @echo "📁 lib/$@" + DESTDIR=$(DESTDIR)/lib $(MAKE) -C $@ $(MAKECMDGOALS) + +.PHONY: $(TOPGOALS) +$(TOPGOALS): $(SUBDIRS) diff --git a/lib/base/Makefile b/lib/base/Makefile deleted file mode 100644 index ee023b9..0000000 --- a/lib/base/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -LIB = base -SRCS = log.s -INCS = base.inc - -include $(TOPDIR)/share/mk/stupid.lib.mk -#include $(TOPDIR)/share/mk/stupid.inc.mk diff --git a/lib/base/base.inc b/lib/base/base.inc deleted file mode 100644 index 49883fb..0000000 --- a/lib/base/base.inc +++ /dev/null @@ -1,26 +0,0 @@ -; file: base.inc - -extern log_impl - -; macro: LOG -; -; example: -; (start code) -; LOG msg_boot_info, eax -; (end) -%macro LOG 1-* -%ifdef DEBUG -%rep %0 -%rotate -1 - push %1 -%endrep - push file - - call log_impl - - add esp, 4 -%rep %0 - add esp, 4 -%endrep -%endif -%endmacro diff --git a/lib/base/log.s b/lib/base/log.s deleted file mode 100644 index c1e8717..0000000 --- a/lib/base/log.s +++ /dev/null @@ -1,158 +0,0 @@ -; file: log.s -[BITS 32] - -%ifdef __KERNEL__ -extern serial_write -%endif - -section .text -; Function: putstr -; -putstr: - push ebp - mov ebp, esp - push edi - mov edi, [ebp + 8] - -.loop: - mov eax, [edi] - cmp al, 0 - je .end - push eax -%ifdef __KERNEL__ - call serial_write -%else -%endif - add esp, 4 - inc edi - jmp .loop -.end: - pop edi - leave - ret - -; Function: puthex -; -puthex: - push ebp - mov ebp, esp - push edi - push esi - mov edi, [ebp + 8] ; number - - mov eax, hexprefix - push hexprefix - call putstr - add esp, 4 - - mov edx, 0xF - mov ecx, 0x8 - mov esi, buffer -.loop: - rol edi, 4 - mov eax, edi - and eax, edx - mov al, [digits + eax] - mov [esi], al - inc esi - dec ecx - jnz .loop - - mov eax, buffer - push eax - call putstr - add esp, 4 - - pop esi - pop edi - leave - ret - -; Function: log_impl -; -global log_impl -log_impl: - push ebp - mov ebp, esp - push edi - push esi - push ebx - mov eax, [ebp + 8] - - push eax - call putstr - add esp, 4 - -%ifdef __KERNEL__ - mov eax, ':' - push eax - call serial_write - add esp, 4 -%else -%endif - - mov edi, [ebp + 12] - mov esi, 12 -.loop: - mov eax, [edi] - cmp al, 0 - je .end - cmp al, '%' - jne .putchar - inc edi - mov eax, [edi] - cmp al, '%' - je .next - cmp al, 'x' - jne .check_s - add esi, 4 - mov ebx, ebp - add ebx, esi - mov eax, [ebx] - push eax - call puthex - add esp, 4 - jmp .next -.check_s: - cmp al, 's' - jne .unknown_format - add esi, 4 - mov ebx, ebp - add ebx, esi - mov eax, [ebx] - push eax - call putstr - add esp, 4 - jmp .next -.unknown_format: - mov al, '?' -.putchar: - push eax -%ifdef __KERNEL__ - call serial_write -%else - ;; TODO -%endif - add esp, 4 -.next: - inc edi - jmp .loop -.end: - - ;; print new line -%ifdef __KERNEL__ - mov al, 0xA - push eax - call serial_write - add esp, 4 -%else -%endif - pop ebx - pop esi - pop edi - leave - ret - -digits db '0123456789ABCDEF' -hexprefix db '0x', 0 -buffer db '00000000', 0 diff --git a/lib/crypto/Makefile b/lib/crypto/Makefile index 1141a51..8d1fed2 100644 --- a/lib/crypto/Makefile +++ b/lib/crypto/Makefile @@ -1,4 +1,5 @@ -LIB = crypto -SRCS = hash/sha256.s +all: -include $(TOPDIR)/share/mk/stupid.lib.mk +clean: + +install: diff --git a/share/mk/stupid.clean.mk b/share/mk/stupid.clean.mk deleted file mode 100644 index 032e219..0000000 --- a/share/mk/stupid.clean.mk +++ /dev/null @@ -1,5 +0,0 @@ -# File: stupid.clean.mk -# - -clean: - $(RM) $(CLEANFILES) diff --git a/share/mk/stupid.inc.mk b/share/mk/stupid.inc.mk deleted file mode 100644 index 9738d61..0000000 --- a/share/mk/stupid.inc.mk +++ /dev/null @@ -1,9 +0,0 @@ -include $(TOPDIR)/share/mk/stupid.own.mk - -ifdef INCS - -install:: - $(INSTALL) -d $(DESTDIR)$(INCSDIR) - $(INSTALL) $^ $(DESTDIR)$(INCSDIR) - -endif diff --git a/share/mk/stupid.kernel.mk b/share/mk/stupid.kernel.mk deleted file mode 100644 index e94551e..0000000 --- a/share/mk/stupid.kernel.mk +++ /dev/null @@ -1,45 +0,0 @@ -# File: stupid.kernel.mk -# -include $(TOPDIR)/share/mk/stupid.own.mk - -ifdef KERNEL - -KERNBASE ?= 0xC0000000 - -ASFLAGS += -D__KERNEL__ -I$(TOPDIR)/kernel -DKERNBASE=$(KERNBASE) \ - -I$(TOPDIR)/lib/base - -OBJS = $(addsuffix .o, $(basename $(SRCS))) -OBJS-dbg = $(addsuffix .dbg.o, $(basename $(SRCS))) - -CLEANFILES += $(KERNEL) $(KERNEL)-dbg $(OBJS) $(OBJS-dbg) - -$(KERNEL): $(OBJS) - $(LD) -T $(TOPDIR)/kernel/linker.ld -nostdlib -o $@ $^ - -$(KERNEL)-dbg: $(OBJS-dbg) - $(LD) -T $(TOPDIR)/kernel/linker.ld -nostdlib -o $@ $^ - -%.o: %.s - $(AS) $(ASFLAGS) -o $@ $< - -%.dbg.o: %.s - $(AS) $(ASFLAGS) $(ASDBGFLAGS) -o $@ $< - -lib/%.o: ../lib/base/%.s - @$(MKCWD) - $(AS) $(ASFLAGS) -o $@ $< - -lib/%.dbg.o: ../lib/base/%.s - @$(MKCWD) - $(AS) $(ASFLAGS) $(ASDBGFLAGS) -o $@ $< - -all: $(KERNEL) $(KERNEL)-dbg - -install:: $(KERNEL) $(KERNEL)-dbg - $(INSTALL) -d $(DESTDIR)/ - $(INSTALL) $^ $(DESTDIR)/ - -endif - -include $(TOPDIR)/share/mk/stupid.clean.mk diff --git a/share/mk/stupid.lib.mk b/share/mk/stupid.lib.mk deleted file mode 100644 index c13feb7..0000000 --- a/share/mk/stupid.lib.mk +++ /dev/null @@ -1,37 +0,0 @@ -# File: stupid.lib.mk -# Support for building libraries - -include $(TOPDIR)/share/mk/stupid.own.mk - -ifdef LIB - -CLEANFILES += lib$(LIB).a - -ifdef SRCS - -OBJS += $(addsuffix .o, $(basename $(SRCS))) - -CLEANFILES += $(OBJS) - -lib$(LIB).a: $(OBJS) - $(AR) rcs $@ $^ - -else - -CLEANFILES += $(LIB).o - -lib$(LIB).a: $(LIB).o - $(AR) rcs $@ $^ - -endif - -all: lib$(LIB).a - -install:: lib$(LIB).a - $(INSTALL) -d $(DESTDIR)$(LIBDIR) - $(INSTALL) $< $(DESTDIR)$(LIBDIR) - -endif - -include $(TOPDIR)/share/mk/stupid.clean.mk -include $(TOPDIR)/share/mk/stupid.sys.mk diff --git a/share/mk/stupid.own.mk b/share/mk/stupid.own.mk deleted file mode 100644 index 75703cc..0000000 --- a/share/mk/stupid.own.mk +++ /dev/null @@ -1,33 +0,0 @@ -# File: stupid.own.mk -# Define common variables -ifndef _STUPID_OWN_MK_ -_STUPID_OWN_MK_=1 - -.DEFAULT_GOAL := all - -BINDIR = /bin -LIBDIR = /lib - -CC = clang -target i386-none-elf -CXX = clang++ -target i386-none-elf - -AS = nasm -LD = ld.lld -PLSCC = plsc -OBJCOPY = llvm-objcopy -OBJDUMP = llvm-objdump -INSTALL = install - -MKCWD = mkdir -p $(@D) - -TARGETS = all clean install -.PHONY: $(TARGETS) - -EXTRAFLAGS = -DSTUPID_VERSION="\"0.0\"" -D__STUPID__ - -CFLAGS += -Wall -Werror -Wextra $(EXTRAFLAGS) -CXXFLAGS += -Wall -Werror -Wextra $(EXTRAFLAGS) -ASFLAGS += -felf -I$(TOPDIR)/lib $(EXTRAFLAGS) -ASDBGFLAGS += -F dwarf -g -DDEBUG - -endif diff --git a/share/mk/stupid.prog.mk b/share/mk/stupid.prog.mk deleted file mode 100644 index 5fa3a65..0000000 --- a/share/mk/stupid.prog.mk +++ /dev/null @@ -1,45 +0,0 @@ -# File: stupid.prog.mk -# Building programs from source files -# -# targets: -# - all: -# build the program and its manual page. -# - clean: -# remove the program and any object files. -# - install: -# install the program and its manual page. - -include $(TOPDIR)/share/mk/stupid.own.mk - -ifdef PROG - -CLEANFILES += $(PROG) - -ifdef SRCS - -OBJS += $(addsuffix .o, $(basename $(SRCS))) - -CLEANFILES += $(OBJS) - -$(PROG): $(OBJS) - $(CC) $(CFLAGS) -o $@ $^ $(LDADD) - -else - -CLEANFILES += $(PROG).o - -$(PROG): $(PROG).o - $(CC) $(CFLAGS) -o $@ $< $(LDADD) - -endif - -all: $(PROG) - -install:: $(PROG) - $(INSTALL) -d $(DESTDIR)$(LIBDIR) - $(INSTALL) $< $(DESTDIR)$(LIBDIR) - -endif - -include $(TOPDIR)/share/mk/stupid.clean.mk -include $(TOPDIR)/share/mk/stupid.sys.mk diff --git a/share/mk/stupid.subdir.mk b/share/mk/stupid.subdir.mk deleted file mode 100644 index 05eba99..0000000 --- a/share/mk/stupid.subdir.mk +++ /dev/null @@ -1,20 +0,0 @@ -# File: stupid.subdir.mk -# Targets for building subdirectories - -.DEFAULT_GOAL := all -TOPGOALS = all clean install - -ifndef NOSUBDIR - -.PHONY: $(SUBDIR) -$(SUBDIR): - $(MAKE) -C $@ $(MAKECMDGOALS) - -$(TOPGOALS): $(SUBDIR) - -else - -# ensure target exist -$(TOPGOALS): - -endif diff --git a/share/mk/stupid.sys.mk b/share/mk/stupid.sys.mk deleted file mode 100644 index dc7f4bc..0000000 --- a/share/mk/stupid.sys.mk +++ /dev/null @@ -1,19 +0,0 @@ -# File: stupid.sys.mk - -%.o: %.c - $(CC) -c -o $@ $< $(CFLAGS) - -%.o: %.cc - $(CXX) -c -o $@ $< $(CXXFLAGS) - -%.o: %.cpp - $(CXX) -c -o $@ $< $(CXXFLAGS) - -%.o: %.cxx - $(CXX) -c -o $@ $< $(CXXFLAGS) - -%.o: %.C - $(CXX) -c -o $@ $< $(CXXFLAGS) - -%.o: %.s - $(AS) $(ASFLAGS) -o $@ $< diff --git a/thirdparty/Makefile b/thirdparty/Makefile deleted file mode 100644 index 44f981f..0000000 --- a/thirdparty/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -NOSUBDIR := 1 - -include $(TOPDIR)/share/mk/stupid.subdir.mk diff --git a/tools/create-iso b/tools/create-iso index 40a7a80..c6f5355 100755 --- a/tools/create-iso +++ b/tools/create-iso @@ -12,12 +12,6 @@ menuentry "StupidOS" { boot } -menuentry "StupidOS (debug)" { - hashsum --hash sha256 --check /boot/hashfile --prefix / - multiboot /vmstupid-dbg "lang=en" - boot -} - EOF ) @@ -25,7 +19,6 @@ gen_iso_file() { mkdir -p "$2/boot/grub" echo "$grub_config" > "$2/boot/grub/grub.cfg" sha256sum "$2/vmstupid" > "$2/boot/hashfile" - sha256sum "$2/vmstupid-dbg" >> "$2/boot/hashfile" grub-mkrescue -o $1 $2 }