StupidOS/kernel/gdt.s

77 lines
961 B
ArmAsm
Raw Normal View History

2023-06-05 08:03:05 +00:00
; file: gdt.s
;
;
2023-01-15 19:25:25 +00:00
[BITS 32]
section .text
2023-06-05 08:03:05 +00:00
; Function: setup_gdt
;
; in:
; none
;
; out:
; none
;
2023-01-15 19:25:25 +00:00
global setup_gdt
setup_gdt:
lgdt [gdt_ptr]
2023-05-22 12:01:20 +00:00
mov eax, cr0
or al, 1
mov cr0, eax
2023-01-15 19:25:25 +00:00
jmp 0x08:.flush_cs
.flush_cs:
2023-01-17 14:36:21 +00:00
mov ax, 0x10 ; data segment
2023-01-15 19:25:25 +00:00
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
2023-01-17 14:36:21 +00:00
dd 0x0
dd 0x0
2023-01-15 19:25:25 +00:00
;; kernel mode code segment
2023-01-17 14:36:21 +00:00
dw 0xFFFF ; Limit
2023-05-22 12:01:20 +00:00
dw 0x0000 ; Base (low)
2023-01-17 14:36:21 +00:00
db 0x00 ; Base (mid)
db 0x9A ; Access: 1 (P) 0 (DPL), 1 (S), 1010 (Type)
db 0xCF ; Granularity: 1 (G), 1 (D/B), 0 (AVL), Limit
db 0x00 ; Base (high)
2023-01-15 19:25:25 +00:00
;; kernel mode data segment
dw 0xFFFF
2023-05-22 12:01:20 +00:00
dw 0x0000
2023-01-15 19:25:25 +00:00
db 0x00
db 0x92
db 0xCF
db 0x00
;; user mode code segment
dw 0xFFFF
2023-05-22 12:01:20 +00:00
dw 0x0000
2023-01-15 19:25:25 +00:00
db 0x00
db 0xFA
db 0xCF
db 0x00
;; user mode data segment
dw 0xFFFF
2023-05-22 12:01:20 +00:00
dw 0x0000
2023-01-15 19:25:25 +00:00
db 0x00
db 0xF2
db 0xCF
db 0x00
;; TSS
.end: