Autor Thema: [newby] Mehrere Zeilen ausgeben? (bezieht sich auf Magazin1)  (Gelesen 4493 mal)

s4mba

  • Beiträge: 4
    • Profil anzeigen
Gespeichert
Hallo,

ich habe gestern angefangen,
meinen Horizont zu erweitern und etwas neues dazuzulernen.
Kurz gesagt: Ich bastle gerade an meinem eigenen ersten OS.

Name ist schnell gefunden: hug0 (Auch Hugo genannt ;-))

Das Magazin1 habe ich auch erfolgreich durchgearbeitet,
was ja schoen einfach war :)

Aber jetz mal meine Frage:
In dem Kernel wird ja mit msg db "Welcome to StupidOS 1.0",13,10,0
msg_boot db "Press any key...",10,0
ein zweizeiliger Text ausgegeben, aber wie bekomme ich mehr Zeilen rein?

Ich haette anstelle von
Welcome to StupidOS 1.0
Press any key...

lieber
Welcome.
project: StupidOS
version: 1.0

Press any key...


Wie mache ich das?

(Bin ich nur gerade drauf gestossen.. viel mir so ein..)

Und sollte man nach Mag1 gleich mit Mag2 weitermachen?

Mir wurde gesagt, ich soll, sobald es generell erstmal startet, mit Multitasking weitermachen..

Wie seht ihr das?

thanks.
ciao


P.S.:
Bin neu hier im Forum..
Name: Fabian K.
Alter: 18 Jahre
Vorlieben: PHP, VB, Perl, Frauen ;)[/quote][/code]
ich kann nix und weiss nix.. und es liegt an EUCH, dies zu aendern!

xD
*headbanger*

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 30. August 2005, 12:06 »
Um weitere Zeilen hinzuzufügen musst du weitere "Variablen" wie z.B. msg_boot hinzufügen. Der Aufbau einer solchen Zeile ist immer gleich:
Name db "Text", 13, 10, 0
13,10 sorgt dabei für einen Zeilenumbruch und die 0 am Ende signalisiert das Ende eines Strings.

Wenn das fertig ist, musst du folgenden Code ausführen, der sich dann ähnlich wie ein print in Basic verhält:

mov si, VarName      ; In SI die Adresse des Texts kopieren
call putstr                 ; Funktion zum Anzeigen des Texts aufrufen


Zur 2. Frage: Bevor du ein echtes OS beginnst musst du dir zuerst überlegen, ob es im Real Mode oder im Protected Mode laufen soll. Außerdem musst du wissen, ob du einen monolithischen Kernel oder einen Microkernel willst. Alle weiteren Schritte hängen dann von diesen Entscheidungen ab.

s4mba

  • Beiträge: 4
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 30. August 2005, 12:33 »
Hallo,
netuerlich hat der Protected Mode seine Vorteile wegen der Unabhaengigkeit gegenueber anderen Prozessen, etc. (Soweit ich das verstanden habe), aber was ist dann der Vorteil vom Real Mode?


Und zum Kernel:
natuerlich bin ich mehr begeistert vom Microkernel, wegen der Auslagerung von Treibern, Dateisystemen, etc.., allerdings habe ich gehoert dass der monolithische schneller sein soll, weil die dinge alle includet sind und nicht erst reingeladen werden muessen!?

Im Grunde genommen will ich einfach erstmal das einfachste ;)

Ja okay, ich weiss, das liegt im Auge des betrachters, aber irgendwie hat ja jeder mal klein angefangen ;)
Ich weiss nicht genau welches besser ist. Waere fuer Vorschlaege dankbar :)


Und nochwas:
Lohnt es sich, wirklich tiefer in ASM einzusteigen, oder soll ich lieber gleich meine Kenntnisse in C/C++ erweitern? (kA welches genommen wird.. die meinungen spalten sich irgendwie)
Thanks.

P.S.:
Das OS soll nicht wirklich public werden, ich moechte einfach nur was fuer mich selber zusammenprogrammieren und fuer interessierte zum DL anbieten, aber nicht aus kommerziellen/Sonstigen gruenden.. ich lerne aus den fehlern anderer.. *auf Daniil K. zeig und grins*
Will halt nur lernen wie es geht und nicht die Weltherrschaft uebernehmen ;)
ich kann nix und weiss nix.. und es liegt an EUCH, dies zu aendern!

xD
*headbanger*

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 30. August 2005, 12:40 »
Ich würde an deiner Stelle einen monolithischen Kernel programmieren. Als Sprache ist C am sinnvollsten und er sollte im PMode arbeiten (macht heutzutage einfach mehr Sinn als Real Mode). Das ist die imho einfachste und beste Möglichkeit für den Anfang.

Gutes Tutorial für den Anfang: http://www.osdever.net/bkerndev/index.php?the_id=90

Zitat

Und nochwas:
Lohnt es sich, wirklich tiefer in ASM einzusteigen,

Du musst auf jeden Fall Grundkenntnisse haben, aber wenn du einen C-Kernel schreibst brauchst du dich nicht so seht mit ASM zu beschäftigen, da im wesentlichen nur der Bootloader in ASM geschrieben wird.

Zitat
.. ich lerne aus den fehlern anderer.. *auf Daniil K. zeig und grins*

*g* Sag ich ja: Der ist bekannt ^^

s4mba

  • Beiträge: 4
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 31. August 2005, 13:03 »
Ja, das ist die Frage:
ASM oder C?

Kann beides mehr schlecht als recht..

Wuerde es am liebsten in reinem ASM versuchen, habe aber gehoert, das waere so, als wuerde man sich ne schrotflinte an den kopf halten und testen, wie locker der Abzug sitzt.. Mir wurde halt gesagt, dass ASM um weiten krasser ist zum Programmieren, als C/C++..

Ist da was dran?
ich kann nix und weiss nix.. und es liegt an EUCH, dies zu aendern!

xD
*headbanger*

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 31. August 2005, 13:35 »
Naja, man kann nicht sagen, dass eins besser ist. Es ist eigentlich geschmackssache. ASM würde ich für einen Real Mode-Kernel verwenden und C eher für einen PMode-Kernel. Vorteile von ASM sind:
o Schneller
o Einige Systemsachen können direkter formuliert werden
Vorteile von C:
o Weniger Code, der leichter zu verstehen ist
o Leichter portierbar
o Dank Strukturen, ... sind vor allem Dateisysteme leichter zu programmieren
o Enthält keinen Code der sich um Segmente, Vars auf dem Stack und andere unübersichtliche Sachen kümmert
o C ist leichter zu lernen

jeb

  • Beiträge: 341
    • Profil anzeigen
    • http://www.jebdev.net
Gespeichert
« Antwort #6 am: 31. August 2005, 16:25 »
ob ASM wirklich viel schneller ist als C ist nicht gesagt. Zudem denke ich muss mal gesagt werden, dass man im RealMode NUR 1MB Speicher adressieren kann (oder geht auch da A20?).

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 31. August 2005, 16:34 »
Die 21. Addressleitung kann man auch im Realmode aktivieren.
Jedoch kann man in 20 Bit (4Bits im Segmentregister + 16Bit Addressen) nur 1 * 1024 * 1024 (2^20) verschiedene Addressen speichern, daher ist der Speicher auf 1 MB begrenzt.

Der Vorteil von C ist halt, das es portabel ist und dass man Strukturen benutzen kann, was man bei "normalen" Assemblern nicht machen kann. ASM ist nicht viel schwerer, aber ich würde es wegen der fehlenden Portabilität nicht für das gesammte OS benutzen.

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 31. August 2005, 17:50 »
Also dass man in ASM keine Strukturen benutzen kann ist mir neu, denn wer kennt nicht den Netwide Assembler (NASM), da ist das eindeutig möglich ;-).
Aber zu der Frage, ob Asm oder C, ich glaube der schwerwiegendste Faktor ist die Fehlersuche und das umändern von Code, da Asm-Code um weiten unübersichtlicher und unverständlicher ist als C-Code (es gibt auch Ausnahmen :) ). Portabilität ist glaube ich am Anfang eines Hobby OS ein ziemlich unbeutender Faktor, da es ein Heidenaufwand ist sich in eine Prozessor- und Computerarchitektur reinzuwühlen, geschweige denn 2! Um Assembler kommt man auf jeden Fall nicht herum, und wenn man darin tiefer einsteigt, versteht man immer besser wie was funktioniert, ist also meines Erachtens empfehlenswert.
Für komplexe Programmteile sollte man aber die Finger von Asm lassen und diese lieber in C Coden, das schont Zeit und Nerven.
Nun zum Real/Protected Mode, für beides sind beide Sprachen geeignet, nur nicht alle Compiler. Ich empfehle aber auf jeden Fall den Protected Mode (in 32bit Version), da man in diesem viel größere Gestaltungsmöglichkeiten hat als im Realmode. Es gibt keinen mir bekannten Vorteil im Realmode, und dass man da auf die BIOS-Interrupts zugreifen kann, ist eher eine Plage als etwas Gutes, es verleitet zu Faulheit -> lieber selbst die Treiber coden, macht mehr Spaß. Aber wer ein DOS2005 schreiben will, kann das natürlich tun.
Agieren statt Konsumieren!

s4mba

  • Beiträge: 4
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 31. August 2005, 19:11 »
Also 32'er PM :)

Okay..

Und in C++

Okay..

Und was mache ich jetz mit meinen gewonnen Informationen? ;)
ich kann nix und weiss nix.. und es liegt an EUCH, dies zu aendern!

xD
*headbanger*

maumo

  • Beiträge: 182
    • Profil anzeigen
    • http://maumo.50webs.com/
Gespeichert
« Antwort #10 am: 31. August 2005, 19:18 »
erstmal solltest du einen bootloader schreiben, der dich in diesen modus bringt. dann soltest du ein paar einfache kernel grundlagen bauen (a lá GDT, IDT, PAGING und so). dazu einfach mal

http://my.execpc.com/~geezer/osd/index.htm

und

http://www.osdever.net/

reinziehen.

auf jeden fall bKerndev und Xosdev!

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 31. August 2005, 20:40 »
Naja, man kann einen eigenen Bootloader schreiben, aber ich tendiere eher dazu zu sagen, GRUB zu benutzen, so kann man geschickt die gesamte 16bit und auch Realmode-programmierung umgehen. Und man kann sich natürlich sofort mit dem eigentlichen Kern(el)-Thema befassen, OS Coding :)
Agieren statt Konsumieren!

 

Einloggen