| Zeile 10: | Zeile 10: | ||
== D als Sprache für ein Betriebssystem == | == D als Sprache für ein Betriebssystem == | ||
| − | D kann primär als objektorientiertes C (ähnlich C++) gesehen werden. Mit D lässt sich genauso wie in C sehr systemnah programmieren, es sind Sprachmittel wie Pointer vorhanden und man kann per Inline-[[Assembler]] (Intel-Syntax) Assembler-Routinen einbauen. Einzig muss (z.B. für den [[Kernel]]) ein kleines Runtime implementiert werden, welcher Funktionen zum Überprüfen von Werten während der Laufzeit zur Verfügung stellt (mehr dazu weiter unten). Um Sprachmittel wie Konstruktoren und | + | D kann primär als objektorientiertes C (ähnlich C++) gesehen werden. Mit D lässt sich genauso wie in C sehr systemnah programmieren, es sind Sprachmittel wie Pointer vorhanden und man kann per Inline-[[Assembler]] (Intel-Syntax) Assembler-Routinen einbauen. Einzig muss (z.B. für den [[Kernel]]) ein kleines Runtime implementiert werden, welcher Funktionen zum Überprüfen von Werten während der Laufzeit zur Verfügung stellt (mehr dazu weiter unten). Um Sprachmittel wie Konstruktoren und Destruktoren einzusetzen, bedarf es ebenfalls Laufzeitunterstützung. |
== Kernel in D == | == Kernel in D == | ||
| Zeile 118: | Zeile 118: | ||
const uint LINES = 24; | const uint LINES = 24; | ||
| − | ubyte* vidmem = cast(ubyte*) | + | ubyte* vidmem = cast(ubyte*)0x000B8000; |
for (int i = 0; i < COLUMNS * LINES * 2; i++) { | for (int i = 0; i < COLUMNS * LINES * 2; i++) { | ||
| Zeile 203: | Zeile 203: | ||
$ nasm -f elf -o ./obj/start.o ./src/kernel/start.asm | $ nasm -f elf -o ./obj/start.o ./src/kernel/start.asm | ||
und | und | ||
| − | $ gdc -nostdlib | + | $ gdc -nostdlib -g -c -o ./obj/kernel.main.o ./src/kernel/kernel.main.d |
gelinkt wird's so: | gelinkt wird's so: | ||
$ ld -T link.d -o dkernel ./obj/start.o ./obj/kernel.main.o | $ ld -T link.d -o dkernel ./obj/start.o ./obj/kernel.main.o | ||