From 4d5bbe30034c9f37e243f80a66cc2fbda6bd5992 Mon Sep 17 00:00:00 2001 From: d0p1 Date: Sun, 7 Jul 2024 15:29:41 +0200 Subject: [PATCH] chore: random docs --- kernel/dev/at/intro.txt | 53 ++++++++++++++++ kernel/dev/vga_console.inc | 2 + kernel/idt.inc | 10 +++ kernel/intro.txt | 8 +++ kernel/lock.inc | 17 +++++ kernel/mm/mm.inc | 21 +++++-- kernel/sys/mmu.inc | 70 +++++++++++++++++++++ kernel/sys/register.inc | 126 +++++++++++++++++++++++++++++++++++++ 8 files changed, 303 insertions(+), 4 deletions(-) create mode 100644 kernel/dev/at/intro.txt create mode 100644 kernel/lock.inc create mode 100644 kernel/sys/mmu.inc create mode 100644 kernel/sys/register.inc diff --git a/kernel/dev/at/intro.txt b/kernel/dev/at/intro.txt new file mode 100644 index 0000000..b6c02c6 --- /dev/null +++ b/kernel/dev/at/intro.txt @@ -0,0 +1,53 @@ +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/vga_console.inc b/kernel/dev/vga_console.inc index 3ea9646..5000eaa 100644 --- a/kernel/dev/vga_console.inc +++ b/kernel/dev/vga_console.inc @@ -1,3 +1,5 @@ + ;; File: vga_console.inc + VGA_COLUMNS = 80 VGA_LINES = 25 VGA_BASE = 0xC03B0000 diff --git a/kernel/idt.inc b/kernel/idt.inc index e69de29..a344cca 100644 --- a/kernel/idt.inc +++ b/kernel/idt.inc @@ -0,0 +1,10 @@ + +idt_set_table: + ret + +idt_setup: + ret + +pIdt: + dw ? + dd ? diff --git a/kernel/intro.txt b/kernel/intro.txt index c84d34f..b0c12e1 100644 --- a/kernel/intro.txt +++ b/kernel/intro.txt @@ -2,6 +2,14 @@ File: Introduction About: kernel memory map +Kernel Source Overview: + +> kernel +> ├── dev +> ├── fs +> └── mm + + > > Physical map virtual map > +---------------+ diff --git a/kernel/lock.inc b/kernel/lock.inc new file mode 100644 index 0000000..5c632bb --- /dev/null +++ b/kernel/lock.inc @@ -0,0 +1,17 @@ + + ;; +lock_acquire: + lock bts [eax], 0 + jnc .end +@@: + pause + test [eax], 1 + jne @b + + lock bts [eax], 0 + jc @b +.end: + ret + +release: + mov [eax], 0 diff --git a/kernel/mm/mm.inc b/kernel/mm/mm.inc index d4a2bd3..1a97a08 100644 --- a/kernel/mm/mm.inc +++ b/kernel/mm/mm.inc @@ -1,5 +1,6 @@ - ;; File: mm.inc + ;; StupidOS Memory Manager + include "pmm.inc" mm_init: @@ -13,11 +14,23 @@ mm_init: mov esi, szMsgMmKernelPgDir call klog - ;; Map kernel - + ; clear page dir + mov ecx, 4096 + xor al, al + mov edi, [pKernelPgDir] + rep stosb + + ;; Map kernel and kmemory + call pmm_alloc_page + push eax + mov ecx, 4096 + mov edi, eax + xor al, al + rep stosb + pop eax + ;; Map video - ;; Map low memory at ???? ;; Map free memory diff --git a/kernel/sys/mmu.inc b/kernel/sys/mmu.inc new file mode 100644 index 0000000..2d004e1 --- /dev/null +++ b/kernel/sys/mmu.inc @@ -0,0 +1,70 @@ + ;; 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 + ;; > + ;; + + ;; 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 diff --git a/kernel/sys/register.inc b/kernel/sys/register.inc new file mode 100644 index 0000000..91fe26e --- /dev/null +++ b/kernel/sys/register.inc @@ -0,0 +1,126 @@ + ;; 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