Skip to content

Commit 2835072

Browse files
POC FINAL
1 parent 9afa40a commit 2835072

File tree

10 files changed

+348
-317
lines changed

10 files changed

+348
-317
lines changed

os.iso

0 Bytes
Binary file not shown.

run.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export DISPLAY=:0
2+
printf "\n###Running QEMU...###\n"
3+
qemu-system-i386 -cdrom os.iso

src/boot/boot.asm

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@ global loader
22
33
extern kmain
44

5+
; Prepare GRUB header
56
MODULEALIGN equ 1<<0
67
MEMINFO equ 1<<1
78
FLAGS equ MODULEALIGN | MEMINFO
89
MAGIC equ 0x1BADB002
910
CHECKSUM equ -(MAGIC + FLAGS)
1011
1112
section .text
12-
13+
14+
; Define GRUB Header
1315
align 4
1416
dd MAGIC
1517
dd FLAGS
@@ -18,10 +20,11 @@ align 4
1820
STACKSIZE equ 0x4000
1921
2022
loader:
23+
; Setup the stack
2124
mov esp, stack + STACKSIZE
22-
push eax
23-
push ebx
24-
25+
26+
push eax ; Magic number
27+
push ebx ; Multiboot information
2528
call kmain
2629
2730
cli

src/kernel/descriptors.c

Lines changed: 1 addition & 302 deletions
Original file line numberDiff line numberDiff line change
@@ -1,306 +1,5 @@
11
#include "descriptors.h"
22

3-
extern void gdt_write(unsigned int);
4-
extern void idt_write(unsigned int);
5-
6-
#pragma region isrs
7-
extern void isr0();
8-
extern void isr1();
9-
extern void isr2();
10-
extern void isr3();
11-
extern void isr4();
12-
extern void isr5();
13-
extern void isr6();
14-
extern void isr7();
15-
extern void isr8();
16-
extern void isr9();
17-
extern void isr10();
18-
extern void isr11();
19-
extern void isr12();
20-
extern void isr13();
21-
extern void isr14();
22-
extern void isr15();
23-
extern void isr16();
24-
extern void isr17();
25-
extern void isr18();
26-
extern void isr19();
27-
extern void isr20();
28-
extern void isr21();
29-
extern void isr22();
30-
extern void isr23();
31-
extern void isr24();
32-
extern void isr25();
33-
extern void isr26();
34-
extern void isr27();
35-
extern void isr28();
36-
extern void isr29();
37-
extern void isr30();
38-
extern void isr31();
39-
extern void isr32();
40-
extern void isr33();
41-
extern void isr34();
42-
extern void isr35();
43-
extern void isr36();
44-
extern void isr37();
45-
extern void isr38();
46-
extern void isr39();
47-
extern void isr40();
48-
extern void isr41();
49-
extern void isr42();
50-
extern void isr43();
51-
extern void isr44();
52-
extern void isr45();
53-
extern void isr46();
54-
extern void isr47();
55-
extern void isr48();
56-
extern void isr49();
57-
extern void isr50();
58-
extern void isr51();
59-
extern void isr52();
60-
extern void isr53();
61-
extern void isr54();
62-
extern void isr55();
63-
extern void isr56();
64-
extern void isr57();
65-
extern void isr58();
66-
extern void isr59();
67-
extern void isr60();
68-
extern void isr61();
69-
extern void isr62();
70-
extern void isr63();
71-
extern void isr64();
72-
extern void isr65();
73-
extern void isr66();
74-
extern void isr67();
75-
extern void isr68();
76-
extern void isr69();
77-
extern void isr70();
78-
extern void isr71();
79-
extern void isr72();
80-
extern void isr73();
81-
extern void isr74();
82-
extern void isr75();
83-
extern void isr76();
84-
extern void isr77();
85-
extern void isr78();
86-
extern void isr79();
87-
extern void isr80();
88-
extern void isr81();
89-
extern void isr82();
90-
extern void isr83();
91-
extern void isr84();
92-
extern void isr85();
93-
extern void isr86();
94-
extern void isr87();
95-
extern void isr88();
96-
extern void isr89();
97-
extern void isr90();
98-
extern void isr91();
99-
extern void isr92();
100-
extern void isr93();
101-
extern void isr94();
102-
extern void isr95();
103-
extern void isr96();
104-
extern void isr97();
105-
extern void isr98();
106-
extern void isr99();
107-
extern void isr100();
108-
extern void isr101();
109-
extern void isr102();
110-
extern void isr103();
111-
extern void isr104();
112-
extern void isr105();
113-
extern void isr106();
114-
extern void isr107();
115-
extern void isr108();
116-
extern void isr109();
117-
extern void isr110();
118-
extern void isr111();
119-
extern void isr112();
120-
extern void isr113();
121-
extern void isr114();
122-
extern void isr115();
123-
extern void isr116();
124-
extern void isr117();
125-
extern void isr118();
126-
extern void isr119();
127-
extern void isr120();
128-
extern void isr121();
129-
extern void isr122();
130-
extern void isr123();
131-
extern void isr124();
132-
extern void isr125();
133-
extern void isr126();
134-
extern void isr127();
135-
extern void isr128();
136-
extern void isr129();
137-
extern void isr130();
138-
extern void isr131();
139-
extern void isr132();
140-
extern void isr133();
141-
extern void isr134();
142-
extern void isr135();
143-
extern void isr136();
144-
extern void isr137();
145-
extern void isr138();
146-
extern void isr139();
147-
extern void isr140();
148-
extern void isr141();
149-
extern void isr142();
150-
extern void isr143();
151-
extern void isr144();
152-
extern void isr145();
153-
extern void isr146();
154-
extern void isr147();
155-
extern void isr148();
156-
extern void isr149();
157-
extern void isr150();
158-
extern void isr151();
159-
extern void isr152();
160-
extern void isr153();
161-
extern void isr154();
162-
extern void isr155();
163-
extern void isr156();
164-
extern void isr157();
165-
extern void isr158();
166-
extern void isr159();
167-
extern void isr160();
168-
extern void isr161();
169-
extern void isr162();
170-
extern void isr163();
171-
extern void isr164();
172-
extern void isr165();
173-
extern void isr166();
174-
extern void isr167();
175-
extern void isr168();
176-
extern void isr169();
177-
extern void isr170();
178-
extern void isr171();
179-
extern void isr172();
180-
extern void isr173();
181-
extern void isr174();
182-
extern void isr175();
183-
extern void isr176();
184-
extern void isr177();
185-
extern void isr178();
186-
extern void isr179();
187-
extern void isr180();
188-
extern void isr181();
189-
extern void isr182();
190-
extern void isr183();
191-
extern void isr184();
192-
extern void isr185();
193-
extern void isr186();
194-
extern void isr187();
195-
extern void isr188();
196-
extern void isr189();
197-
extern void isr190();
198-
extern void isr191();
199-
extern void isr192();
200-
extern void isr193();
201-
extern void isr194();
202-
extern void isr195();
203-
extern void isr196();
204-
extern void isr197();
205-
extern void isr198();
206-
extern void isr199();
207-
extern void isr200();
208-
extern void isr201();
209-
extern void isr202();
210-
extern void isr203();
211-
extern void isr204();
212-
extern void isr205();
213-
extern void isr206();
214-
extern void isr207();
215-
extern void isr208();
216-
extern void isr209();
217-
extern void isr210();
218-
extern void isr211();
219-
extern void isr212();
220-
extern void isr213();
221-
extern void isr214();
222-
extern void isr215();
223-
extern void isr216();
224-
extern void isr217();
225-
extern void isr218();
226-
extern void isr219();
227-
extern void isr220();
228-
extern void isr221();
229-
extern void isr222();
230-
extern void isr223();
231-
extern void isr224();
232-
extern void isr225();
233-
extern void isr226();
234-
extern void isr227();
235-
extern void isr228();
236-
extern void isr229();
237-
extern void isr230();
238-
extern void isr231();
239-
extern void isr232();
240-
extern void isr233();
241-
extern void isr234();
242-
extern void isr235();
243-
extern void isr236();
244-
extern void isr237();
245-
extern void isr238();
246-
extern void isr239();
247-
extern void isr240();
248-
extern void isr241();
249-
extern void isr242();
250-
extern void isr243();
251-
extern void isr244();
252-
extern void isr245();
253-
extern void isr246();
254-
extern void isr247();
255-
extern void isr248();
256-
extern void isr249();
257-
extern void isr250();
258-
extern void isr251();
259-
extern void isr252();
260-
extern void isr253();
261-
extern void isr254();
262-
extern void isr255();
263-
#pragma endregion
264-
265-
// A struct that represents a line in the GDT
266-
struct gdt_entry_struct {
267-
unsigned short limit_low;
268-
unsigned short base_low;
269-
unsigned char base_middle;
270-
unsigned char access;
271-
unsigned char granularity; // 4 bits of the limit and 4 bits which are flags
272-
unsigned char base_high;
273-
} __attribute__((packed)); //No padding
274-
275-
typedef struct gdt_entry_struct gdt_entry_t;
276-
277-
// A struct that represents the pointer passed to lgdt (a.k.a. GDT descriptor)
278-
struct gdt_ptr_struct {
279-
unsigned short limit;
280-
unsigned int base;
281-
} __attribute__((packed));
282-
283-
typedef struct gdt_ptr_struct gdt_ptr_t;
284-
285-
// A struct that represents a line in the IDT
286-
struct idt_entry_struct{
287-
unsigned short base_low;
288-
unsigned short selector;
289-
unsigned char always0;
290-
unsigned char flags;
291-
unsigned short base_high;
292-
} __attribute__((packed));
293-
294-
typedef struct idt_entry_struct idt_entry_t;
295-
296-
// A struct that represents the pointer passed to lidt (a.k.a. IDT descriptor)
297-
struct idt_ptr_struct{
298-
unsigned short limit;
299-
unsigned int base;
300-
} __attribute__((packed));
301-
302-
typedef struct idt_ptr_struct idt_ptr_t;
303-
3043
// Define GDT
3054
gdt_entry_t gdt_entries[5];
3065
// Define IDT
@@ -338,7 +37,7 @@ void idt_set_gate(int index,unsigned int base, unsigned short selector, unsigned
33837
idt_entries[index].base_high = (base >> 16) & 0xFFFF;
33938
idt_entries[index].selector = selector;
34039
idt_entries[index].always0 = 0;
341-
idt_entries[index].flags = flags;
40+
idt_entries[index].flags = flags;
34241
}
34342

34443
// Setup the IDT

0 commit comments

Comments
 (0)