Skip to content

Commit 105f98a

Browse files
committed
fix the tripple fault (pressing 3 times enter-key)
- no more pressing 3 Times Enter-key to Start Environment - minimize the kernel size up to 4.000 Bytes
1 parent 5122274 commit 105f98a

File tree

8 files changed

+447
-500
lines changed

8 files changed

+447
-500
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ confirm:
244244
# compiler flags ...
245245
# -----------------------------------------------------------------------------
246246
CFLAGS_C := -m32 -O1 -ffreestanding -Wall -Wextra \
247-
-nostdlib \
247+
-nostdlib -fno-ident \
248248
-nostartfiles \
249249
-fno-stack-protector \
250250
-fno-unwind-tables \

build/bin/kernel.map

Lines changed: 411 additions & 445 deletions
Large diffs are not rendered by default.

src/kernel/ahci.cc

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -386,13 +386,18 @@ int ahci_init(void)
386386
return -1;
387387
// A
388388
//printformat("ABAR phys: 0x%x\n", g_ahci.abar);
389-
389+
390390
g_hba = (hba_mem_t *)mmio_map(g_ahci.abar, 4096); // mind. 4KB
391391
// g_hba = (hba_mem_t *)(uintptr_t)g_ahci.abar;
392-
393-
//printformat("g_hba Pointer (virt): 0x%x\n", (uint32_t)g_hba);
394-
gfx_printf("AHCI-Version: 0x%x, Ports Implemented: 0x%x\n",
395-
g_hba->vs, g_hba->pi);
392+
393+
if (graph_mode == 1) {
394+
printformat("g_hba Pointer (virt): 0x%x\n", (uint32_t)g_hba);
395+
printformat("AHCI-Version: 0x%x, Ports Implemented: 0x%x\n",
396+
g_hba->vs, g_hba->pi);
397+
} else {
398+
gfx_printf("AHCI-Version: 0x%x, Ports Implemented: 0x%x\n",
399+
g_hba->vs, g_hba->pi);
400+
}
396401
// B
397402
// HBA einschalten (GHC.AE = 1)
398403
g_hba->ghc |= (1U << 31);

src/kernel/boot/boot2.asm

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,6 @@
2121
call print_base_str
2222
%endmacro
2323

24-
%macro PRINT_HINT 2
25-
mov di, (%1*80 + 8)*2
26-
mov si, %2
27-
mov bl, 0x4F
28-
call print_base_str
29-
%endmacro
30-
3124
BITS 16
3225
ORG 0x0500 ; Stage1 springt nach 0000:0500
3326

@@ -83,9 +76,6 @@ boot_menu:
8376
mov ax, 0xB800
8477
mov es, ax
8578
86-
; hinweis
87-
PRINT_HINT 1, note_str
88-
8979
; menu bar
9080
mov di, (0*80 + 0) * 2
9181
mov ax, 0x07DB
@@ -449,22 +439,6 @@ print_base_str:
449439
.endeDBstr:
450440
ret
451441

452-
print_hint_str:
453-
push cs
454-
pop ds
455-
mov ax, 0xB800
456-
mov es, ax
457-
mov ah, bl
458-
cld
459-
.loop2:
460-
lodsb
461-
test al, al
462-
jz .endeDCstr
463-
stosw
464-
jmp .loop2
465-
.endeDCstr:
466-
ret
467-
468442
; ------------------------------------------------------------
469443
; UI: Fill screen with char in AL and attr in AH
470444
; ------------------------------------------------------------
@@ -499,7 +473,7 @@ main_bootmenu_loop:
499473
int 0x16
500474
jz main_bootmenu_loop
501475

502-
; Taste lesen: AH=scancode, AL=ascii (bei Pfeiltasten AL=0 oder 0xE0)
476+
; Taste lesen: AH=bios scancode, AL=ascii (bei Pfeiltasten AL=0 oder 0xE0)
503477
mov ah, 0x00
504478
int 0x16
505479

@@ -648,13 +622,14 @@ enter_text_pm:
648622
a20_failed:
649623
mov si, msgA20FAIL
650624
call print_string
651-
hlt
625+
jmp $
652626
653627
; -------------------------------------------------
654628
; GDT laden, Protected Mode aktivieren
655629
; -------------------------------------------------
656630
A20ok:
657631
cli
632+
658633
lgdt [gdt_descriptor]
659634
660635
mov eax, cr0
@@ -905,7 +880,7 @@ pm_entry_kernel_2:
905880
;mov dword [0xB8000], 0x07420741 ; "AB"
906881
mov esp, 0x0009F000 ; irgendein 32-Bit-Stack im oberen Bereich
907882
908-
;mov dword [0xB8000], 0x072A072A ; "**" (2 Zeichen) weiß auf schwarz
883+
mov dword [0xB8000], 0x072A072A ; "**" (2 Zeichen) weiß auf schwarz
909884
910885
; entrypoint steht als dword am Anfang des
911886
; geladenen kernel.bin (kernel.ld)
@@ -961,8 +936,6 @@ msgDBASEvesa1024x728: db " Start dBase 2026 Graphics-Mode 1024x728 ... ", 0
961936
msgDBASE: db " -=< dBASE 2026 >=- ",0
962937
msgDBASEenv: db " Choose your Favorite Environment ", 0
963938

964-
note_str: db "Hint: You have to do tripple press ENTER-Key, to select Env ! ", 0
965-
966939
share1: db " ____ _ _ _ ____ _____ _ _ _ ____ _____ ", 0
967940
share2: db " / ___|| | | | / \ | _ \| ____| | | | | / \ | _ \| ____| ", 0
968941
share3: db " \___ \| |_| | / _ \ | |_) | _| | |/\| | / _ \ | |_) | _| ", 0
@@ -974,10 +947,6 @@ msgVESA_failModeInfo: db "[VESA] Error: ModeInfo." , 0
974947
msgVESA_failUnsupported: db "[VESA] Error: Unsupported.", 0
975948
msgVESA_failSetmode: db "[VESA] Error: SetMode." , 0
976949

977-
978-
vessatext_a: db "vESSA 1111", 13, 10, 0
979-
vessatext_b: db "vESSA CCCC", 13, 10, 0
980-
vessatext_c: db "gugu ", 13, 10, 0
981950
menuFlag db 4
982951

983952
; Puffer für VBE Mode Info (256 Byte reichen)

src/kernel/ckernel.cc

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ extern "C" void enter_usermode(void);
3030
extern "C" void irq_init(void);
3131
extern "C" void idt_init(void);
3232
extern "C" void isr_init(void);
33-
extern "C" void gdt_init(uint32_t);
33+
extern "C" void gdt_init();
3434
extern "C" void syscall_init(void);
3535
extern "C" void tasking_init(void);
3636

@@ -57,7 +57,7 @@ extern "C" int txt_main()
5757

5858
paging_init();
5959
kheap_init();
60-
60+
6161
//detect_memory(); // setzt max_mem
6262

6363
uint32_t stack_top = kernel_stack_top;
@@ -66,14 +66,15 @@ extern "C" int txt_main()
6666
uint32_t reserved = ((uint32_t)&__end + 0xFFF) & ~0xFFF;
6767
if (reserved < kernel_stack_top) reserved = kernel_stack_top; // Stack schützen
6868
page_init(reserved);
69-
69+
7070
// 3) aktuellen Stack als esp0 für TSS verwenden
7171
uint32_t esp;
7272
__asm__ volatile("mov %%esp, %0" : "=r"(esp));
73-
gdt_init(esp);
73+
gdt_init();
74+
7475
isr_init();
7576
irq_init();
76-
77+
7778
syscall_init();
7879
tasking_init();
7980

@@ -138,8 +139,8 @@ extern "C" int vid_main()
138139

139140
// 3) aktuellen Stack als esp0 für TSS verwenden
140141
uint32_t esp;
141-
__asm__ volatile("mov %%esp, %0" : "=r"(esp));
142-
gdt_init(esp);
142+
//__asm__ volatile("mov %%esp, %0" : "=r"(esp));
143+
gdt_init();
143144
isr_init();
144145
irq_init();
145146

src/kernel/gdt.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ gdt_entry_t gdt[GDT_ENTRIES];
5656
gdt_ptr_t gp;
5757
tss_entry_t tss_entry;
5858

59+
extern uint32_t kernel_stack_top;
60+
5961
static void gdt_set_gate(
6062
int num,
6163
uint32_t base,
@@ -94,11 +96,11 @@ static void write_tss(int num, uint16_t ss0, uint32_t esp0)
9496
tss_entry.iomap_base = sizeof(tss_entry_t);
9597
}
9698

97-
void gdt_init(uint32_t kernel_stack_top)
99+
void gdt_init()
98100
{
99101
gp.limit = sizeof(gdt) - 1;
100102
gp.base = (uint32_t)&gdt;
101-
103+
102104
// 0: Null-Descriptor
103105
gdt_set_gate(0, 0, 0, 0, 0);
104106

src/kernel/lba.inc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
; DONT CHANGE THIS FILE - all modifieds will be lost.
33
; -----------------------------------------------------
44
TEST_LBA equ 0
5-
BOOT2_LBA equ 584 ; start LBA BOOT2
5+
BOOT2_LBA equ 582 ; start LBA BOOT2
66
BOOT2_SECTORS equ 2 ; 2048 * 2
77
; -----------------------------------------------------
88
KERNEL_LBA equ 552 ; start LBA KERNEL
9-
KERNEL_SECTORS equ 29 ; 2048 * 29
9+
KERNEL_SECTORS equ 27 ; 2048 * 27
1010
; -----------------------------------------------------
1111
VBE_INFO_ADDR equ 0x0A00

src/kernel/paging.cc

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ static uint32_t page_table_next_free;
2222

2323
static uint32_t* first_page_table;
2424

25-
static uint32_t free_pages[PAGE_ENTRIES];
26-
static size_t free_page_count = 0;
27-
2825
# define MANAGED_MEMORY_BYTES (16 * 1024 * 1024) // 16 MiB
2926
# define MAX_PAGES (MANAGED_MEMORY_BYTES / PAGE_SIZE)
3027
# define BITMAP_SIZE_BYTES (MAX_PAGES / 8)
3128

29+
static uint32_t free_pages[MAX_PAGES];
30+
static size_t free_page_count = 0;
31+
3232
static uint8_t page_bitmap[BITMAP_SIZE_BYTES] __attribute__((aligned(16)));
3333

3434
// Bitmap helpers
@@ -109,6 +109,7 @@ void page_allocator_add_page(uint32_t phys_addr)
109109
if (free_page_count < MAX_PAGES) {
110110
free_pages[free_page_count++] = phys_addr;
111111
} else {
112+
printformat("FC: %d, MAX: %d\n",free_page_count, MAX_PAGES);
112113
// Optional: Fehlerbehandlung (kein Platz mehr im freien Stack)
113114
}
114115
}
@@ -233,4 +234,7 @@ void paging_init(void)
233234

234235
// kleiner Flush
235236
asm volatile("jmp .+2");
237+
238+
volatile uint16_t* vga = (volatile uint16_t*)0xB8000;
239+
vga[0] = 0x0F00 | 'L';
236240
}

0 commit comments

Comments
 (0)