diff --git a/.gitignore b/.gitignore index e084653..727feee 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,5 @@ bochsrc.bxrc *.EFI *.fd *.mod +webring.json +webring.txt diff --git a/Makefile b/Makefile index e431004..ddccd6d 100644 --- a/Makefile +++ b/Makefile @@ -112,6 +112,8 @@ run-efi: all OVMF32.fd .PHONY: docs docs: @mkdir -p docs/html + wget -O docs/webring.json https://webring.devse.wiki/webring.json + python3 docs/devsewebring.py docs/webring.json docs/webring.txt naturaldocs -p docs/config -img docs/img -xi sysroot -i . -ro -o HTML docs/html cp docs/img/favicon.ico docs/html/ diff --git a/docs/devsewebring.py b/docs/devsewebring.py new file mode 100644 index 0000000..92cd63a --- /dev/null +++ b/docs/devsewebring.py @@ -0,0 +1,14 @@ +import sys +import json + +if __name__ == '__main__': + source = sys.argv[1] + dest = sys.argv[2] + + data = None + with open(source, "r") as f: + data = json.load(f) + with open(dest, "w") as f: + f.write("File: Webring\n\n") + for entry in data: + f.write(f"- <{entry['name']} at {entry['protocols']['http']['clearnet']}> : {entry['description']}\n\n") diff --git a/kernel/gdt.inc b/kernel/gdt.inc new file mode 100644 index 0000000..c798514 --- /dev/null +++ b/kernel/gdt.inc @@ -0,0 +1,32 @@ + +gdt: + ; null descriptor + dd 0 + dd 0 + + ; kernel code descriptor + dw 0xFFFF, 0x0000 + db 0x00, 0x9a, 0xCF, 0x00 + + ; kernel data descriptor + dw 0xFFFF, 0x0000 + db 0x00, 0x92, 0xCF, 0x00 + + ; user code descriptor + dw 0xFFFF, 0x0000 + db 0x00, 0xFA, 0xCF, 0x00 + + ; user data descriptor + dw 0xFFFF, 0x0000 + db 0x00, 0xF2, 0xCF, 0x00 + + ; Tss +;.tss: +; dw ? +; dd ? + +.end: + +pGDT: + dw gdt.end - gdt - 1 + dd gdt diff --git a/kernel/kernel.asm b/kernel/kernel.asm index a216787..7b5d605 100644 --- a/kernel/kernel.asm +++ b/kernel/kernel.asm @@ -52,8 +52,6 @@ kmain: add ebx, KERNEL_VIRT_BASE call pmm_free_range - ; map whole memory - ; idt, gdt diff --git a/kernel/mm/pmm.inc b/kernel/mm/pmm.inc index 1e2c5be..1f5c4ca 100644 --- a/kernel/mm/pmm.inc +++ b/kernel/mm/pmm.inc @@ -1,16 +1,15 @@ ;; File: pmm.inc macro ALIGN reg { - local end + local ..end push reg and reg, 0xFFF pop reg - jz end + jz ..end and reg, 0xFFFFF000 add reg, 0x1000 -end: - +..end: } ;; Function: pmm_init @@ -37,6 +36,10 @@ pmm_alloc_page: mov eax, [pFreeList] mov edx, [eax] mov [pFreeList], edx + + inc [cUsedPage] + dec [cFreePage] + ret .error: mov esi, szErrorNoMemLeft @@ -55,11 +58,13 @@ pmm_free_page: mov edx, [pFreeList] mov [eax], edx mov [pFreeList], eax + + inc [cFreePage] + dec [cUsedPage] @@: ret ;; Function: pmm_free_range - ;; TODO: allignment ;; ;; In: ;; EAX - Start @@ -84,11 +89,20 @@ pmm_free_range: mov [esi], eax mov [pFreeList], esi + inc [cTotalPage] + inc [cFreePage] + add esi, 4096 cmp esi, [ebp-8] jb .loop + push dword [cFreePage] + push dword [cUsedPage] + push dword [cTotalPage] + mov esi, szMsgPmmStats + call klog + leave ret @@ -96,3 +110,9 @@ pFreeList dd 0 szMsgPmmInit db "PMM: initialize", 0 szMsgPmmFreeRange db "PMM: add free memory range %x - %x", 0 szErrorNoMemLeft db "Error: no free memory left", 0 +szMsgPmmStats db "PMM: Total page: %x | Used page: %x | Free page: %x", 0 + +; Some stats +cFreePage dd 0 +cUsedPage dd 0 +cTotalPage dd 0