PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C] print() selbstgemacht?



BhaaL
27-05-2003, 13:55
Ich habe gemeinsam mit einem Freund begonnen, ein kleines Betriebssystem zu schreiben. Der Kernel sollte in C geschrieben sein, doch weil keine Libs verfügbar sind, bräuchte ich ne Funktion zur Ausgabe von Zeichen/Strings auf dem Bildschirm.

Ich hab gelesen, dafür muss man in den Grafikspeicher schreiben.
Davon hab ich keine Ahnung. Ich hoffe, jemand hier schon!

Kennt jemand Tutorials, eine Funktion oder ähnliches?(muss ja nicht unbedingt das printf() aus der stdio.h sein, es reicht, wenn man einen String ausgeben kann)

peschmae
27-05-2003, 14:14
naja, wenn du alle 2mm nachfragen musst, kommst du wohl nicht sehr weit :D

MfG Peschmä

P.S. ich weiss die Antwort auch nicht :o

ComSubVie
27-05-2003, 14:19
Du kannst ja versuchen die dietlibc statisch zu linken. Ansonsten kannst du entweder die BIOS-Funktionen verwenden (Interrupt 0x10) oder eben direkt in den VGA-Speicher schreiben (Adresse weiß ich nicht)

BhaaL
27-05-2003, 14:28
@peschmae: Wenn die Adresse vom Grafikspeicher länger als 2mm ist, dann stimmt das :D

@ComSubVie: Hää?! Von ner dietlibc hab ich noch nie was gehört...
Und das mit den BIOS-Funktionen muss ich mal meinem Freund vorsetzen.

@All: Kennt wer die Adresse?

arthur
27-05-2003, 14:34
Hi,
dafür hast du ja das bios, das dir die notwendigen funktionienen bietet,
hier ein link zu DER interupt liste:
http://www-2.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/files.html
ich würde mit interrupt 21 anfangen :)
und solange du nichts mit grafik machen möchtest,
hände weg vom direkten speicher zugriff oder int 10.
wg. dietlibc, setzt diese nicht auf linux als bs ?

gruss
Arthur

BhaaL
27-05-2003, 14:49
Hmm...
Aber Interrupts sind doch eher ASM, und eigentlich ging es hier um C!

Ich werds meinem Freund trotzdem vorsetzen, der hat mehr Ahnung von ASM als ich.
Und deinen Rat mit int 10 werde ich (höchstwahrscheinlich) befolgen, nur das mit dem dir. Speicherzugriff kann ich dir nicht versprechen! ;)

Dazu brauch ich aber erst Mal die Adresse vom Grafikspeicher, wo wir wieder am Anfang wären.
...
Da fällt mir was ein!
Beim GB(A)-Programmieren wusste ich wie lang/breit die Anzeigefläche/der Grafikspeicher ist. Aber hier?
Wer ahnung hat bitte helfen!!

An alle anderen trotzdem schon mal Danke!

The Ripper
27-05-2003, 15:08
Willkommen in der Systemprogrammierung :)
Lade dir die Interruptliste am Besten gleich runter, die wirst du nicht nur beim Programmieren in Assembler brauchen, sondern allgemein bei systemnaher Programmierung (unabhängig von der Sprache).
Deine Frage nach dem Videospeicher wird dort übrigens behandelt, und zwar in MEMORY.LST im Teil C:
--------V-MB8000000--------------------------
MEM B800h:0000h - EGA/VGA+ TEXT BUFFER
Size: 32768 BYTEs

BhaaL
27-05-2003, 17:56
Ich hab die Tabelle nur flüchtig durchgeguckt, danke!

Compuholic
27-05-2003, 21:37
Ich empfehle die Artikel von www.deinmeister.de

Ist zwar hauptsächlich auf ASM fixiert. Aber wenn du ein OS schreiben willst wirst du nicht um Assembler herumkommen. Sehr empfehlenswert ist der Artikel zur Speicheradressierung im Real und Protected Mode.

Wie schon "The Ripper" erwähnt hat. Eine Interruptliste ist unerläßtlich bei der Systemprogrammierung. Ich empfehle hierzu "Ralf Browns Interrupt List" (einfach mal bei google suchen, die ist ein Klassiker)

Weiterhin viel Spaß