Hallo iedereen!
Ik ben bezig met 't maken van een OS, en ik heb een kernel geschreven in C++, en die wil ik met deze bootloader laden:
Ik schrijf de kernel in C++ met de volgende compiler-command (of hoe noem je dat
):
-c *.cpp -ffreestanding -nostdlib -fno-builtin -fno-rtti -fno-exceptions
De kernel-source staat hier (3 bestanden):
Video.h:
Video.cpp:
De kernel compilen lukt, de bootloader ook maar ik moet alleen nog zorgen hoe ik de kernel ermee kan laden. Als iemand weet hoe dit moet, dan dank ik zeer
. Ik heb gegoogled maar ik kon echt niks vinden
.
Alvast bedankt!
Ik ben bezig met 't maken van een OS, en ik heb een kernel geschreven in C++, en die wil ik met deze bootloader laden:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| [BITS 32] [ORG 0x7C00] ; Main program main: mov ax,0x0000 mov ds,ax ;Load kernel ;Hierzo moet de kernel worden geladen jmp $ ; End Matter times 510-($-$$) db 0 ; Fill the rest with zeros dw 0xAA55 ; Boot loader signature |
Ik schrijf de kernel in C++ met de volgende compiler-command (of hoe noem je dat
-c *.cpp -ffreestanding -nostdlib -fno-builtin -fno-rtti -fno-exceptions
De kernel-source staat hier (3 bestanden):
Video.h:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| #ifndef VIDEO_H #define VIDEO_H class Video { public: Video() ; void clear() ; void write(char *cp) ; void put(char c) ; private: unsigned short *videomem ; //pointer to video memory unsigned int off ; //offset, used like a y cord unsigned int pos ; //position, used like x cord }; #endif |
Video.cpp:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| #include "Video.h" Video::Video() { pos=0 ; off=0 ; videomem = (unsigned short*) 0xb8000 ; } void Video::clear() { unsigned int i; for(i=0; i<(80*25); i++) { videomem[i] = (unsigned char) ' ' | 0x0700 ; } pos=0 ; off=0 ; } void Video::write(char *cp) { char *str = cp, *ch; for (ch = str; *ch; ch++) { put(*ch) ; } } void Video::put(char c) { if(pos>=80) { pos=0 ; off += 80 ; } if(off>=(80*25)) { clear() ; //should scroll the screen, but for now, just clear } videomem[off + pos] = (unsigned char) c | 0x0700 ; pos++ ; } |
C++:
1
2
3
4
5
6
| #include "Video.h" int main(void) { Video vid ; //local, (global variables need some Run-Time support code) vid.write("Hello, world!") ; } |
De kernel compilen lukt, de bootloader ook maar ik moet alleen nog zorgen hoe ik de kernel ermee kan laden. Als iemand weet hoe dit moet, dan dank ik zeer
Alvast bedankt!