chore: sync repo
This commit is contained in:
parent
536f18f8cb
commit
180c1254e6
|
@ -1,29 +0,0 @@
|
|||
struc TSS {
|
||||
.prev_tss dd ?
|
||||
.esp0 dd ?
|
||||
.ss0 dd ?
|
||||
.esp1 dd ?
|
||||
.ss1 dd ?
|
||||
.esp2 dd ?
|
||||
.ss2 dd ?
|
||||
.cr3 dd ?
|
||||
.eip dd ?
|
||||
.eflags dd ?
|
||||
.eax dd ?
|
||||
.ecx dd ?
|
||||
.edx dd ?
|
||||
.ebx dd ?
|
||||
.esp dd ?
|
||||
.ebp dd ?
|
||||
.esi dd ?
|
||||
.edi dd ?
|
||||
.es dd ?
|
||||
.cs dd ?
|
||||
.ss dd ?
|
||||
.ds dd ?
|
||||
.fs dd ?
|
||||
.gs dd ?
|
||||
.ldt dd ?
|
||||
.trap dw ?
|
||||
.iomap dw ?
|
||||
}
|
|
@ -52,7 +52,10 @@ kmain:
|
|||
add ebx, KERNEL_VIRT_BASE
|
||||
call pmm_free_range
|
||||
|
||||
; idt, gdt
|
||||
; load kernel gdt
|
||||
lgdt [pGDT]
|
||||
; I don't think i need to reload segment cuz their value are already correct
|
||||
|
||||
|
||||
|
||||
.halt:
|
||||
|
@ -69,6 +72,7 @@ kmain:
|
|||
include 'dev/vga_console.inc'
|
||||
include 'mm/mm.inc'
|
||||
include 'lock.inc'
|
||||
include 'gdt.inc'
|
||||
|
||||
szMsgKernelAlive db "Kernel is alive", 0
|
||||
szErrorBootProtocol db "Error: wrong magic number", 0
|
||||
|
|
|
@ -10,6 +10,18 @@ CMOS_REG_HOUR = 0x04
|
|||
|
||||
COM1 = 0x3F8
|
||||
|
||||
;klog_kputc:
|
||||
; mov dx, COM1 + 5
|
||||
; push eax
|
||||
;@@:
|
||||
; in al, dx
|
||||
; and al, 0x20
|
||||
; jnz @b
|
||||
; pop eax
|
||||
; mov dx, COM1
|
||||
; out dx, al
|
||||
; ret
|
||||
|
||||
;; Function: klog_print
|
||||
;;
|
||||
;; In:
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
;; File: lock.inc
|
||||
|
||||
;; Function: lock_acquire
|
||||
;;
|
||||
;; In:
|
||||
;; EAX - lock address
|
||||
lock_acquire:
|
||||
mov edx, 1
|
||||
xchg edx, [eax]
|
||||
|
@ -7,6 +11,10 @@ lock_acquire:
|
|||
jnz lock_acquire
|
||||
ret
|
||||
|
||||
;; Function: lock_release
|
||||
;;
|
||||
;; In:
|
||||
;; EAX - lock address
|
||||
lock_release:
|
||||
xor edx, edx
|
||||
xchg [eax], edx
|
||||
|
|
159
kernel/sys/cpu.inc
Normal file
159
kernel/sys/cpu.inc
Normal file
|
@ -0,0 +1,159 @@
|
|||
;; File: cpu.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 {
|
||||
.prev_tss dd ?
|
||||
.esp0 dd ?
|
||||
.ss0 dd ?
|
||||
.esp1 dd ?
|
||||
.ss1 dd ?
|
||||
.esp2 dd ?
|
||||
.ss2 dd ?
|
||||
.cr3 dd ?
|
||||
.eip dd ?
|
||||
.eflags dd ?
|
||||
.eax dd ?
|
||||
.ecx dd ?
|
||||
.edx dd ?
|
||||
.ebx dd ?
|
||||
.esp dd ?
|
||||
.ebp dd ?
|
||||
.esi dd ?
|
||||
.edi dd ?
|
||||
.es dd ?
|
||||
.cs dd ?
|
||||
.ss dd ?
|
||||
.ds dd ?
|
||||
.fs dd ?
|
||||
.gs dd ?
|
||||
.ldt dd ?
|
||||
.trap dw ?
|
||||
.iomap dw ?
|
||||
}
|
||||
|
||||
;; 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
|
Loading…
Reference in a new issue