feat(kernel): wip serial logger
This commit is contained in:
parent
031e09b3ff
commit
41676291fe
|
@ -225,8 +225,9 @@ common32:
|
|||
mov eax, STPDBOOT_MAGIC
|
||||
mov ebx, boot_structure
|
||||
|
||||
mov eax, 0xC0000000
|
||||
jmp eax
|
||||
mov ecx, 0xC0000000
|
||||
jmp ecx
|
||||
|
||||
hang:
|
||||
hlt
|
||||
jmp $
|
||||
|
|
|
@ -5,6 +5,8 @@ INSTALL = install
|
|||
KERNEL = vmstupid.sys
|
||||
SRCS = kernel.asm \
|
||||
const.inc \
|
||||
klog.inc \
|
||||
dev/vga_console.inc \
|
||||
mm/mm.inc
|
||||
|
||||
.PHONY: all
|
||||
|
|
|
@ -46,3 +46,5 @@ CR4_PKE = 0x0400000
|
|||
CR4_CET = 0x0800000
|
||||
CR4_PKS = 0x1000000
|
||||
|
||||
CR = 0x0D
|
||||
LF = 0x0A
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
struc console
|
||||
{
|
||||
.buffer db 80*25 dup (?)
|
||||
.lineno db ?
|
||||
.colno db ?
|
||||
}
|
||||
VGA_COLUMNS = 80
|
||||
VGA_LINES = 25
|
||||
VGA_BASE = 0xC03B0000
|
||||
|
||||
vga_lineno db 0
|
||||
vga_colno db 0
|
||||
|
||||
|
||||
;; Function: vga_console_clear
|
||||
vga_console_clear:
|
||||
mov ecx, VGA_COLUMNS*VGA_LINES
|
||||
xor al, al
|
||||
mov edi, VGA_BASE
|
||||
rep stosb
|
||||
ret
|
||||
|
||||
|
|
10
kernel/init.inc
Normal file
10
kernel/init.inc
Normal file
|
@ -0,0 +1,10 @@
|
|||
struc TSS {
|
||||
.link dw ?
|
||||
.link_h dw ?
|
||||
.esp0 dd ?
|
||||
.ss0 dw ?
|
||||
.ss0_h dw ?
|
||||
.esp1 dd ?
|
||||
.ss1 dw ?
|
||||
|
||||
}
|
|
@ -1,4 +1,6 @@
|
|||
;; File: kernel.asm
|
||||
format binary
|
||||
|
||||
include 'const.inc'
|
||||
|
||||
org KBASE
|
||||
|
@ -9,9 +11,6 @@
|
|||
db 'STPDKRNL'
|
||||
db 32 dup(0)
|
||||
|
||||
include 'klog.inc'
|
||||
include 'mm/mm.inc'
|
||||
|
||||
;; Function: kmain
|
||||
;;
|
||||
;; Parameters:
|
||||
|
@ -20,24 +19,42 @@ db 32 dup(0)
|
|||
;; EBX - Boot structure address
|
||||
;;
|
||||
kmain:
|
||||
xchg bx, bx
|
||||
mov [0xC03B0000], dword 0x08690948
|
||||
mov [0xC03B0004], dword 0x05690648
|
||||
; TODO: interupt, vmm
|
||||
mov esp, stack_top
|
||||
|
||||
cmp eax, STPDBOOT_MAGIC
|
||||
jne .halt
|
||||
|
||||
; init memory manager
|
||||
; init idt, gdt
|
||||
; copy boot structure
|
||||
xchg bx, bx
|
||||
call vga_console_clear
|
||||
|
||||
mov [0xC03B0000], dword 0x08740953
|
||||
mov [0xC03B0004], dword 0x05700675
|
||||
mov [0xC03B0008], dword 0x03640469
|
||||
mov [0xC03B000C], dword 0x0153024F
|
||||
|
||||
|
||||
;KLOG_INIT
|
||||
|
||||
;KLOG "kernel alive"
|
||||
mov esi, szMsgKernelAlive
|
||||
call klog
|
||||
|
||||
.halt:
|
||||
hlt
|
||||
jmp $
|
||||
|
||||
_edata:
|
||||
include 'klog.inc'
|
||||
include 'dev/vga_console.inc'
|
||||
include 'mm/mm.inc'
|
||||
|
||||
; BSS
|
||||
szMsgKernelAlive db "Kernel is alive", 0
|
||||
|
||||
align 4
|
||||
stack_bottom:
|
||||
rb 0x4000
|
||||
stack_top:
|
||||
|
||||
_end:
|
||||
dd 0x0
|
||||
|
|
|
@ -1,11 +1,92 @@
|
|||
CMOS_ADDRESS = 0x70
|
||||
CMOS_DATA = 0x71
|
||||
|
||||
CMOS_REG_SECOND = 0x00
|
||||
CMOS_REG_MINUTE = 0x02
|
||||
CMOS_REG_HOUR = 0x04
|
||||
|
||||
COM1 = 0x3F8
|
||||
|
||||
klog_print:
|
||||
mov dx, COM1
|
||||
@@:
|
||||
lodsb
|
||||
or al, al
|
||||
jz @f
|
||||
out dx, al
|
||||
jmp @b
|
||||
@@:
|
||||
ret
|
||||
|
||||
klog_print_date:
|
||||
clc
|
||||
@@:
|
||||
mov al, 0x0A
|
||||
out CMOS_ADDRESS, al
|
||||
in al, CMOS_DATA
|
||||
and al, 0x80
|
||||
jnz @b
|
||||
|
||||
mov al, CMOS_REG_HOUR
|
||||
out CMOS_ADDRESS, al
|
||||
in al, CMOS_DATA
|
||||
|
||||
mov ah, al
|
||||
shr ah, 4
|
||||
and ah, 0xF
|
||||
and al, 0xF
|
||||
|
||||
add ah, 0x30
|
||||
add al, 0x30
|
||||
mov [szTime + 1], ah
|
||||
mov [szTime + 2], al
|
||||
|
||||
mov al, CMOS_REG_MINUTE
|
||||
out CMOS_ADDRESS, al
|
||||
in al, CMOS_DATA
|
||||
|
||||
mov ah, al
|
||||
shr ah, 4
|
||||
and ah, 0xF
|
||||
and al, 0xF
|
||||
|
||||
add ah, 0x30
|
||||
add al, 0x30
|
||||
mov [szTime + 4], ah
|
||||
mov [szTime + 5], al
|
||||
|
||||
mov al, CMOS_REG_SECOND
|
||||
out CMOS_ADDRESS, al
|
||||
in al, CMOS_DATA
|
||||
|
||||
mov ah, al
|
||||
shr ah, 4
|
||||
and ah, 0xF
|
||||
and al, 0xF
|
||||
|
||||
add ah, 0x30
|
||||
add al, 0x30
|
||||
|
||||
mov [szTime + 7], ah
|
||||
mov [szTime + 8], al
|
||||
|
||||
|
||||
push esi
|
||||
mov esi, szTime
|
||||
call klog_print
|
||||
pop esi
|
||||
|
||||
ret
|
||||
|
||||
macro KLOG_INIT {
|
||||
}
|
||||
;; Function: klog
|
||||
;; Output kernel log
|
||||
klog:
|
||||
call klog_print_date
|
||||
|
||||
macro KLOG msg {
|
||||
out 0xe9, al
|
||||
}
|
||||
call klog_print
|
||||
|
||||
mov esi, szCRLF
|
||||
call klog_print
|
||||
ret
|
||||
|
||||
szTime db '[00:00:00] ', 0
|
||||
szCRLF db CR, LF, 0
|
||||
|
|
Loading…
Reference in a new issue