Skip to content

Commit 25fa180

Browse files
committed
Enable 32 bit protected mode
1 parent 187ccbb commit 25fa180

File tree

8 files changed

+83
-68
lines changed

8 files changed

+83
-68
lines changed

Makefile

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ app_dashboard = $(BUILD_APP)/dashboard
3232

3333
# Parameters
3434
BT_STAGE2_SECTOR_COUNT = 19 # In Hex
35+
KERNEL_MEMORY_LOCATION = 0xC000 # 16 bit for now
3536
SOURCE_SNAPSHOT="\"$$(git rev-parse --short HEAD)$$(git diff --quiet || echo '_unstaged')\""
3637

3738
# General Assumptions
@@ -54,17 +55,17 @@ $(image_vmdk): $(bt_stage1) $(bt_stage2) $(kernel_core) $(app_calc) $(app_tick_t
5455
@echo "Stage 2 Size : " $$(stat -c %s $(bt_stage2))
5556
@echo "Want BT_STAGE2_SECTOR_COUNT : 0x"$$(printf "%x\n" $$(( $$(stat -c %s $(bt_stage2)) / 512)) )
5657
@echo "Got BT_STAGE2_SECTOR_COUNT : 0x"$(BT_STAGE2_SECTOR_COUNT)
57-
58+
5859
@echo "AppCalc Sector Start : "$$(( 1 + $$(stat -c %s $(image_vmdk)) / 512 ))
5960
cat $(app_calc) >> $@
6061
@echo "AppCalc Sector Count : "$$(( $$(stat -c %s $(app_calc)) / 512))
6162
@echo "App Calc Size : " $$(stat -c %s $(app_calc))
62-
63+
6364
@echo "App TickTacToe Sector Start : "$$(( 1 + $$(stat -c %s $(image_vmdk)) / 512 ))
6465
cat $(app_tick_tac_toe) >> $@
6566
@echo "App TickTacToe Sector Count : "$$(( $$(stat -c %s $(app_tick_tac_toe)) / 512))
6667
@echo "App TickTacToe Size : " $$(stat -c %s $(app_tick_tac_toe))
67-
68+
6869
@echo "Kernel Core Sector Start : "$$(( 1 + $$(stat -c %s $(image_vmdk)) / 512 ))
6970
cat $(kernel_core) >> $@
7071
@echo "Kernel Core Sector Count : "$$(( $$(stat -c %s $(kernel_core)) / 512))
@@ -98,18 +99,18 @@ $(bt_stage1): $(SRC_BOOTLOADER)/stage1.asm $(SRC_BOOTLOADER)/constants.asm $(SRC
9899
nasm -o $@ -f bin -i $(SRC_BOOTLOADER)/ -D BT_STAGE2_SECTOR_COUNT=$(BT_STAGE2_SECTOR_COUNT) $<
99100
truncate --size=%512 $@
100101

101-
$(bt_stage2): $(SRC_BOOTLOADER)/stage2.asm $(SRC_BOOTLOADER)/stage2.c $(SRC_BOOTLOADER)/io.asm $(SRC_BOOTLOADER)/constants.asm $(BUILD_LIB_UTILS)/libutils $(BUILD_DRIVERS)/display/libtm_bios
102+
$(bt_stage2): $(SRC_BOOTLOADER)/stage2.asm $(SRC_BOOTLOADER)/stage2.c $(SRC_BOOTLOADER)/io.asm $(SRC_BOOTLOADER)/constants.asm $(BUILD_LIB_UTILS)/libutils_16 $(BUILD_DRIVERS)/display/libtm_bios
102103
mkdir -p $$(dirname $(bt_stage2))
103104
nasm -o $(BUILD_BOOTLOADER)/stage2_asm.o -f elf32 -i $(SRC_BOOTLOADER)/ $(SRC_BOOTLOADER)/stage2.asm
104-
gcc -m16 -fno-pie -c -Isrc -o $(BUILD_BOOTLOADER)/stage2_c.o $(SRC_BOOTLOADER)/stage2.c
105-
ld --oformat binary -m elf_i386 -Ttext 0x8000 --strip-all -o $@ $(BUILD_BOOTLOADER)/stage2_asm.o $(BUILD_BOOTLOADER)/stage2_c.o $(BUILD_LIB_UTILS)/libutils $(BUILD_DRIVERS)/display/libtm_bios
105+
gcc -m16 -fno-pie -c -Isrc -D KERNEL_MEMORY_LOCATION=$(KERNEL_MEMORY_LOCATION) -o $(BUILD_BOOTLOADER)/stage2_c.o $(SRC_BOOTLOADER)/stage2.c
106+
ld --oformat binary -m elf_i386 -Ttext 0x8000 --strip-all -o $@ $(BUILD_BOOTLOADER)/stage2_asm.o $(BUILD_BOOTLOADER)/stage2_c.o $(BUILD_LIB_UTILS)/libutils_16 $(BUILD_DRIVERS)/display/libtm_bios
106107
truncate --size=%512 $@
107108

108109
$(kernel_core): $(SRC_KERNEL)/core.asm $(SRC_KERNEL)/core.c $(SRC_KERNEL)/essentials.c $(SRC_LIB_UTILS)/io.h $(SRC_DRIVERS)/keyboard/keyboard.h $(BUILD_LIB_UTILS)/libutils $(BUILD_DRIVERS)/keyboard/libkeyboard $(BUILD_DRIVERS)/display/libtm_vga # And other io.h dependecies -_-
109110
mkdir -p $$(dirname $(kernel_core))
110111
nasm -o $(BUILD_KERNEL)/core_asm.o -f elf32 $(SRC_KERNEL)/core.asm
111-
gcc -m16 -fno-pie -c -Isrc -o $(BUILD_KERNEL)/core_c.o $(SRC_KERNEL)/core.c
112-
ld --oformat binary -m elf_i386 --trace -Ttext 0xC000 --strip-all -o $(kernel_core) $(BUILD_KERNEL)/core_asm.o $(BUILD_KERNEL)/core_c.o $(BUILD_LIB_UTILS)/libutils $(BUILD_DRIVERS)/keyboard/libkeyboard $(BUILD_DRIVERS)/display/libtm_vga
112+
gcc -m32 -fno-pie -c -Isrc -o $(BUILD_KERNEL)/core_c.o $(SRC_KERNEL)/core.c
113+
ld --oformat binary -m elf_i386 --trace -Ttext 0x0000 --strip-all -o $(kernel_core) $(BUILD_KERNEL)/core_asm.o $(BUILD_KERNEL)/core_c.o $(BUILD_LIB_UTILS)/libutils $(BUILD_DRIVERS)/keyboard/libkeyboard $(BUILD_DRIVERS)/display/libtm_vga
113114
truncate --size=%512 $(kernel_core)
114115

115116
# Libraries
@@ -119,24 +120,25 @@ $(app_entry): $(SRC_LIB)/app/entry.asm
119120
nasm -o $@ -f elf32 $<
120121

121122
$(BUILD_DRIVERS)/display/libtm_bios: $(SRC_DRIVERS)/display/text_mode_bios.c $(SRC_DRIVERS)/display/text_mode_bios.asm $(SRC_DRIVERS)/display/text_mode.h
123+
# 16 bit mode
122124
mkdir -p $(BUILD_DRIVERS)/display/
123125
gcc -m16 -fno-pie -c -Isrc -o $(BUILD_DRIVERS)/display/text_mode_bios_c.o $(SRC_DRIVERS)/display/text_mode_bios.c
124126
nasm -o $(SRC_DRIVERS)/display/text_mode_bios_asm.o -f elf32 $(SRC_DRIVERS)/display/text_mode_bios.asm
125127
ar rc $@ $(BUILD_DRIVERS)/display/text_mode_bios_c.o $(SRC_DRIVERS)/display/text_mode_bios_asm.o
126128

127129
$(BUILD_DRIVERS)/display/libtm_vga: $(SRC_DRIVERS)/display/text_mode_vga.c $(SRC_DRIVERS)/display/text_mode_vga.asm $(SRC_DRIVERS)/display/text_mode.h
128130
mkdir -p $(BUILD_DRIVERS)/display/
129-
gcc -m16 -fno-pie -c -Isrc -o $(BUILD_DRIVERS)/display/text_mode_vga_c.o $(SRC_DRIVERS)/display/text_mode_vga.c
131+
gcc -m32 -fno-pie -c -Isrc -o $(BUILD_DRIVERS)/display/text_mode_vga_c.o $(SRC_DRIVERS)/display/text_mode_vga.c
130132
nasm -o $(SRC_DRIVERS)/display/text_mode_vga_asm.o -f elf32 $(SRC_DRIVERS)/display/text_mode_vga.asm
131133
ar rc $@ $(BUILD_DRIVERS)/display/text_mode_vga_c.o $(SRC_DRIVERS)/display/text_mode_vga_asm.o
132134

133135
$(BUILD_DRIVERS)/keyboard/libkeyboard: $(SRC_DRIVERS)/keyboard/keyboard.c $(SRC_DRIVERS)/keyboard/keyboard.asm $(SRC_DRIVERS)/keyboard/keyboard.h $(SRC_LIB_UTILS)/time.h
134136
mkdir -p $(BUILD_DRIVERS)/keyboard/
135-
gcc -m16 -fno-pie -c -Isrc -o $(BUILD_DRIVERS)/keyboard/keyboard_c.o $(SRC_DRIVERS)/keyboard/keyboard.c
137+
gcc -m32 -fno-pie -c -Isrc -o $(BUILD_DRIVERS)/keyboard/keyboard_c.o $(SRC_DRIVERS)/keyboard/keyboard.c
136138
nasm -o $(SRC_DRIVERS)/keyboard/keyboard_asm.o -f elf32 $(SRC_DRIVERS)/keyboard/keyboard.asm
137139
ar rc $@ $(BUILD_DRIVERS)/keyboard/keyboard_c.o $(SRC_DRIVERS)/keyboard/keyboard_asm.o
138140

139-
$(BUILD_LIB_UTILS)/libutils: $(SRC_LIB_UTILS)/io.c $(SRC_LIB_UTILS)/io.h $(SRC_LIB_UTILS)/string.c $(SRC_LIB_UTILS)/string.h $(SRC_LIB_UTILS)/disk.c $(SRC_LIB_UTILS)/disk.asm $(SRC_LIB_UTILS)/disk.h $(SRC_LIB_UTILS)/panic.c $(SRC_LIB_UTILS)/panic.h $(SRC_LIB_UTILS)/panic.asm $(SRC_LIB_UTILS)/time.c $(SRC_LIB_UTILS)/time.h $(SRC_LIB_UTILS)/time.asm $(SRC_LIB_UTILS)/color.c $(SRC_LIB_UTILS)/color.h
141+
$(BUILD_LIB_UTILS)/libutils_16: $(SRC_LIB_UTILS)/io.c $(SRC_LIB_UTILS)/io.h $(SRC_LIB_UTILS)/string.c $(SRC_LIB_UTILS)/string.h $(SRC_LIB_UTILS)/disk.c $(SRC_LIB_UTILS)/disk.asm $(SRC_LIB_UTILS)/disk.h $(SRC_LIB_UTILS)/panic.c $(SRC_LIB_UTILS)/panic.h $(SRC_LIB_UTILS)/panic.asm $(SRC_LIB_UTILS)/time.c $(SRC_LIB_UTILS)/time.h $(SRC_LIB_UTILS)/time.asm $(SRC_LIB_UTILS)/color.c $(SRC_LIB_UTILS)/color.h
140142
mkdir -p $(BUILD_LIB_UTILS)/
141143
gcc -m16 -fno-pie -c -Isrc -o $(BUILD_LIB_UTILS)/io.o $(SRC_LIB_UTILS)/io.c
142144
gcc -m16 -fno-pie -c -Isrc -o $(BUILD_LIB_UTILS)/string.o $(SRC_LIB_UTILS)/string.c
@@ -149,14 +151,27 @@ $(BUILD_LIB_UTILS)/libutils: $(SRC_LIB_UTILS)/io.c $(SRC_LIB_UTILS)/io.h $(SRC_L
149151
nasm -o $(BUILD_LIB_UTILS)/time_asm.o -f elf32 $(SRC_LIB_UTILS)/time.asm
150152
ar rc $@ $(BUILD_LIB_UTILS)/io.o $(BUILD_LIB_UTILS)/string.o $(BUILD_LIB_UTILS)/color.o $(BUILD_LIB_UTILS)/disk_c.o $(BUILD_LIB_UTILS)/disk_asm.o $(BUILD_LIB_UTILS)/panic_c.o $(BUILD_LIB_UTILS)/panic_asm.o $(BUILD_LIB_UTILS)/time_c.o $(BUILD_LIB_UTILS)/time_asm.o
151153

154+
$(BUILD_LIB_UTILS)/libutils: $(SRC_LIB_UTILS)/io.c $(SRC_LIB_UTILS)/io.h $(SRC_LIB_UTILS)/string.c $(SRC_LIB_UTILS)/string.h $(SRC_LIB_UTILS)/disk.c $(SRC_LIB_UTILS)/disk.asm $(SRC_LIB_UTILS)/disk.h $(SRC_LIB_UTILS)/panic.c $(SRC_LIB_UTILS)/panic.h $(SRC_LIB_UTILS)/panic.asm $(SRC_LIB_UTILS)/time.c $(SRC_LIB_UTILS)/time.h $(SRC_LIB_UTILS)/time.asm $(SRC_LIB_UTILS)/color.c $(SRC_LIB_UTILS)/color.h
155+
mkdir -p $(BUILD_LIB_UTILS)/
156+
gcc -m32 -fno-pie -c -Isrc -o $(BUILD_LIB_UTILS)/io.o $(SRC_LIB_UTILS)/io.c
157+
gcc -m32 -fno-pie -c -Isrc -o $(BUILD_LIB_UTILS)/string.o $(SRC_LIB_UTILS)/string.c
158+
gcc -m32 -fno-pie -c -Isrc -o $(BUILD_LIB_UTILS)/color.o $(SRC_LIB_UTILS)/color.c
159+
gcc -m32 -fno-pie -c -Isrc -o $(BUILD_LIB_UTILS)/disk_c.o $(SRC_LIB_UTILS)/disk.c
160+
nasm -o $(BUILD_LIB_UTILS)/disk_asm.o -f elf32 $(SRC_LIB_UTILS)/disk.asm
161+
gcc -m32 -fno-pie -c -D__SOURCE_SNAPSHOT__=$(SOURCE_SNAPSHOT) -Isrc -o $(BUILD_LIB_UTILS)/panic_c.o $(SRC_LIB_UTILS)/panic.c
162+
nasm -o $(BUILD_LIB_UTILS)/panic_asm.o -f elf32 $(SRC_LIB_UTILS)/panic.asm
163+
gcc -m32 -fno-pie -c -Isrc -o $(BUILD_LIB_UTILS)/time_c.o $(SRC_LIB_UTILS)/time.c
164+
nasm -o $(BUILD_LIB_UTILS)/time_asm.o -f elf32 $(SRC_LIB_UTILS)/time.asm
165+
ar rc $@ $(BUILD_LIB_UTILS)/io.o $(BUILD_LIB_UTILS)/string.o $(BUILD_LIB_UTILS)/color.o $(BUILD_LIB_UTILS)/disk_c.o $(BUILD_LIB_UTILS)/disk_asm.o $(BUILD_LIB_UTILS)/panic_c.o $(BUILD_LIB_UTILS)/panic_asm.o $(BUILD_LIB_UTILS)/time_c.o $(BUILD_LIB_UTILS)/time_asm.o
166+
152167
# User Applications
153-
$(app_calc): $(app_entry) $(SRC_APP)/calc.c $(SRC_LIB_UTILS)/io.h $(SRC_LIB_UTILS)/time.h $(BUILD_LIB_UTILS)/libutils # And dependecies :/
168+
$(app_calc): $(app_entry) $(SRC_APP)/calc.c $(SRC_LIB_UTILS)/io.h $(SRC_LIB_UTILS)/time.h $(BUILD_LIB_UTILS)/libutils $(BUILD_DRIVERS)/display/libtm_vga # And dependecies :/
154169
mkdir -p $$(dirname $(app_calc))
155170
gcc -m16 -fno-pie -c -Isrc -o $(BUILD_APP)/calc.o $(SRC_APP)/calc.c
156171
ld --oformat binary -m elf_i386 -Ttext 0x2000 --strip-all -o $@ $(app_entry) $(BUILD_APP)/calc.o $(BUILD_LIB_UTILS)/libutils $(BUILD_DRIVERS)/display/libtm_vga
157172
truncate --size=%512 $@
158173

159-
$(app_tick_tac_toe): $(app_entry) $(SRC_APP)/tic_tac_toe.c $(SRC_LIB_UTILS)/io.h $(SRC_LIB_UTILS)/time.h $(BUILD_LIB_UTILS)/libutils # And dependecies :/
174+
$(app_tick_tac_toe): $(app_entry) $(SRC_APP)/tic_tac_toe.c $(SRC_LIB_UTILS)/io.h $(SRC_LIB_UTILS)/time.h $(BUILD_LIB_UTILS)/libutils $(BUILD_DRIVERS)/display/libtm_vga # And dependecies :/
160175
mkdir -p $$(dirname $(app_tick_tac_toe))
161176
gcc -m16 -fno-pie -c -Isrc -o $(BUILD_APP)/tic_tac_toe.o $(SRC_APP)/tic_tac_toe.c
162177
ld --oformat binary -m elf_i386 -Ttext 0x2000 --strip-all -o $@ $(app_entry) $(BUILD_APP)/tic_tac_toe.o $(BUILD_LIB_UTILS)/libutils $(BUILD_DRIVERS)/display/libtm_vga

src/bootloader/stage2.asm

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ global label_exit
3939
mov eax, cr0
4040
or eax, 0x00000001
4141
mov cr0, eax
42-
;jmp 0x08:0x0000 ; address to kernel in memory
43-
jmp 0x08:long_jump_enter_protected
42+
jmp 0x08:0x0000 ; address to kernel in memory
4443

4544
label_exit:
4645
HLT
@@ -49,17 +48,4 @@ global label_exit
4948

5049
[SECTION .data]
5150
bl_stage_2 db "Bootloader: Stage 2"
52-
bl_stage_2_len equ ($-bl_stage_2)
53-
54-
55-
[BITS 16]
56-
long_jump_enter_protected:
57-
; this won't be required here in future.
58-
mov ax, 0x10
59-
mov ds, ax
60-
mov ss, ax
61-
mov es, ax
62-
mov fs, ax
63-
mov gs, ax
64-
; Hardcoded Kernel Load Address
65-
jmp 0x08:0xC000
51+
bl_stage_2_len equ ($-bl_stage_2)

src/bootloader/stage2.c

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,22 +49,25 @@ extern void label_exit();
4949
int populate_gdt_table() {
5050
// Assumption DS = 0
5151
// Populate simple overlapping code and data segment.
52+
53+
// Kernel Memory Location: 0x100000
54+
5255
populate_gct_entry(
5356
&gdt_table[0],
5457
0,0,0,0);
5558
// Kernel Code Segment Selector
5659
populate_gct_entry(
5760
&gdt_table[1],
58-
0x00000000,0x0fffffff,
59-
// 0x0000C000,0x0fffffff,
60-
0b00000000,
61+
// 0x00000000,0x0fffffff,
62+
KERNEL_MEMORY_LOCATION, 0x0fffffff,
63+
0b0100, // 32-bit protected mode
6164
0x9a);
6265
// Kernel Data Segment Selector
6366
populate_gct_entry(
6467
&gdt_table[2],
65-
0x00000000,0x0fffffff,
66-
// 0x000000C000,0x0fffffff,
67-
0b00000000,
68+
// 0x00000000,0x0fffffff,
69+
KERNEL_MEMORY_LOCATION, 0x0fffffff,
70+
0b0100, // 32-bit protected mode
6871
0x92);
6972

7073
// Issue#2: For some reason gdtr.base_address assigned is not
@@ -88,13 +91,15 @@ int populate_gdt_table() {
8891
}
8992

9093
void load_kernel() {
91-
int err = load_sectors(0xC000, 0x80, DISK_KERNEL_SECTOR_START, DISK_KERNEL_SECTOR_COUNT);
94+
// As we are in real mode with DS as 0
95+
// KERNEL_MEMORY_LOCATION should be within 16 bit for now.
96+
int err = load_sectors(KERNEL_MEMORY_LOCATION, 0x80, DISK_KERNEL_SECTOR_START, DISK_KERNEL_SECTOR_COUNT);
9297
if(err) {
9398
print_line("Failed to load kernel in memory: ");
9499
print_int(err);
95100
label_exit();
96101
} else {
97-
print_memory_hex((char*)0xC000, 16);
102+
print_memory_hex((char*)KERNEL_MEMORY_LOCATION, 16);
98103
}
99104
}
100105

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
[BITS 16]
1+
[BITS 32]
22

33
global _low_put_char
44
global _low_vga_copy_step
@@ -7,6 +7,10 @@ global _low_vga_copy_step
77
_low_put_char:
88
push ebp
99
mov ebp, esp
10+
push ds
11+
mov eax, 0
12+
mov ds, eax ; memory address mapping is absolute
13+
1014

1115
mov ebx,[ebp + 0x10] ; (ROW_WIDTH*y+x)
1216
shl ebx, 1
@@ -15,27 +19,33 @@ global _low_vga_copy_step
1519
mov ah, [ebp + 0xc] ; (color)
1620
mov [ebx], ax
1721

22+
pop ds
1823
mov esp, ebp
1924
pop ebp
2025
ret
2126

2227
_low_vga_copy_step:
2328
push ebp
2429
mov ebp, esp
30+
push ds
31+
mov eax, 0
32+
mov ds, eax ; memory address mapping is absolute
33+
2534
; Copy char+colors in Row Order Format
2635
mov eax,[ebp + 0x8] ; (ROW_WIDTH*y1+x1)
2736
mov ebx,[ebp + 0xc] ; (ROW_WIDTH*y2+x2)
2837
mov ecx,[ebp + 0x10] ; (bytes_count/2)
2938
add eax,0xb8000
3039
add ebx,0xb8000
31-
40+
3241
_low_vga_copy_step_internal:
3342
mov dx, [eax]
3443
mov [ebx], dx
3544
add eax, 2
3645
add ebx, 2
3746
loop _low_vga_copy_step_internal
3847

48+
pop ds
3949
mov esp, ebp
4050
pop ebp
4151
ret

src/drivers/keyboard/keyboard.asm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
[BITS 16]
1+
[BITS 32]
22

33
global port_write
44
global port_read
@@ -7,7 +7,7 @@ global port_read
77
port_write:
88
push ebp
99
mov ebp, esp
10-
10+
1111
mov al, [ebp + 0xc] ; value
1212
mov dx, [ebp + 0x8] ; port
1313
out dx, al
@@ -19,7 +19,7 @@ global port_read
1919
port_read:
2020
push ebp
2121
mov ebp, esp
22-
22+
2323
mov dx, [ebp + 0x8] ; port
2424
in al, dx
2525
and eax, 0xFF

src/drivers/keyboard/keyboard.c

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -179,36 +179,34 @@ void keyboard_init() {
179179
if (out != 0xFA) {
180180
PANIC(out, "reset ps/2 first failed");
181181
}
182-
// if(second_port_exists) {
183-
// // reset second port
184-
// write_to_ps2_first_port(0xFF);
185-
// out = read_reply();
186-
// if (out != 0xFA) {
187-
// PANIC(out, "reset ps/2 second failed");
188-
// }
189-
// }
182+
if(second_port_exists) {
183+
// reset second port
184+
out = write_to_ps2_first_port(0xFF, 1);
185+
if (out != 0xFA) {
186+
PANIC(out, "reset ps/2 second failed");
187+
}
188+
}
190189

191190
// scan code
192-
// write_to_ps2_first_port(0xF0, 0);
193-
// out = write_to_ps2_first_port(0, 1);
194-
// if (out != 0xFA) {
195-
// PANIC(out, "failed to get scan code");
196-
// } else {
197-
// PANIC(out, "got get scan code");
198-
// }
199-
// write_to_ps2_first_port(0xF4);
191+
write_to_ps2_first_port(0xF0, 0);
192+
out = write_to_ps2_first_port(0, 1);
193+
if (out != 0xFA) {
194+
PANIC(out, "failed to get scan code");
195+
} else {
196+
PANIC(out, "got get scan code");
197+
}
198+
write_to_ps2_first_port(0xF4, 0);
200199

201200
// Caps
202201
write_to_ps2_first_port(0xED, 0);
203202
out = write_to_ps2_first_port(7, 1);
204203
if (out != 0xFA) {
205204
PANIC(out, "caps failed");
206205
}
207-
// write_to_ps2_first_port(0xF4);
208-
// out = read_reply();
209-
// if (out != 0xFA) {
210-
// PANIC(out, "scan failed");
211-
// }
206+
out = write_to_ps2_first_port(0xF4, 1);
207+
if (out != 0xFA) {
208+
PANIC(out, "scan failed");
209+
}
212210

213211
// // detect device type
214212
out = write_to_ps2_first_port(0xF5, 1);

src/kernel/core.asm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
[BITS 16]
1+
[BITS 32]
22

33
extern entry_core
44
global __low_va_args
55

66
[SECTION .text]
77
mov ax, 0x10
8-
mov ds, ax
9-
mov ss, ax
108
mov es, ax
9+
mov ss, ax
10+
mov ds, ax
1111
mov fs, ax
1212
mov gs, ax
1313
jmp entry_core

src/kernel/core.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#include <drivers/display/text_mode.h>
12
#include <drivers/keyboard/keyboard.h>
23
#include <kernel/essentials.c>
34
#include <lib/utils/io.h>
@@ -25,9 +26,9 @@ void exec(int sector_index, int sector_count){
2526
void entry_core() {
2627
set_color_bg(C_BLACK);
2728
set_color_fg(C_WHITE);
28-
29+
2930
move_xy(6,22);
3031
print_line("Initializing Kernel...");
31-
keyboard_init();
32+
// keyboard_init();
3233
PANIC(501, "Kernel is under development!!!");
3334
}

0 commit comments

Comments
 (0)