Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: lowlevel am 01. May 2005, 17:55
-
Hallo Leute,
ich bin totaler Anfänger im "lowlevel" coding. Hab mich aber dazu entschlossen mehr über die wirklichen Grundlagen des PC zu erfahren.
Ich finde das Magazin deshalb einfach nur genial.
Nun aber zu meiner Frage:
Ich habe mir den Code (Bootloader und Kernel) des ersten Magazins mal angesehen. Ich würde dies nun gerne nachmachen, allerdings habe ich kein Floppydisk-Laufwerk. Kann ich also die fertig kompilierte Binärdatei auch irgendwie auf CD brennen???
(Bei Nero gibst doch so ne Funktion: Bootfähige CD erstellen)
Bitte kommt mir nicht mit allzu komplizierten Antworten. :D
Wie gesagt bin ja Anfänger. :D
-
Erstmal heisse ich dich als Admin herzlich willkommen^^
So, eine bootfähige CD ist normalerweise möglich. Aber nicht mit diesem Bootloader. Denn dieser benutzt Bios Int 13h und der ist soweit ich weiss nicht für CD's gedacht.
Du kannst aber auch bochs benutzen und dort mit Images arbeiten, dann brauchst du zumindest für das testen in Bochs keine Diskette. Für den Anfang genügt das. Das ersetzt allerdings nicht das Testen auf echten PC's. Dazu bräuchtest du dann eine bootfähige CD (wie das genau funzt weiss ich nicht, hab das nie in Betracht gezogen für mich) oder installierst es auf der Festplatte, was vorerst aber nicht relevant sein dürfte.
-
ähhh.....
was hat es mit "bochs" auf sich??? *kp*
-
Bochs ist ein Emulator der einen kompletten x86er PC samt Hardware per Software emuliert.
-
tja keine Ahnung.... Werd mich dann wohl mal bei Google umschauen müssen...Oder kannst du mir in igendeiner Weise weiterhelfen?
da ich mich entschlossen hab, mich damit intensiver zu beschäftigen, habe ich überlegt ob ich mir nicht ein ext. Floppy Laufwerk holen soll. Allerdings kann ich im BIOS nicht einstellen, dass von USb gebootet werden soll.
Anmerkung: Hab voll das mist BIOS. Kann fast garnichts einstellen. Liegt das daran, dass ich nen Laptop hab???
-
Keine Ahnung inwiefern sich Laptops da von Desktop-PC's unterscheiden.
Runterladen kannst du dir Bochs auf deren HP, google einfach mal.
Und ein kleines Tut um es einzustellen hat joachim_neu schonmal geschrieben, dass findest du in der Tutorial Section. Ansonsten gibts auch noch ICQ;) 332-061-907
-
hab mir das jetzt mal runtergeladen.
Und (alles) so gemacht wie es im Tut stand.
Allerdings kapier ich nicht, was "9. Kopiere dein OS-Image auf die Datei "a.floppy" " heißt.
Wenn ich auf die Datei OS.bxrc klicke, erscheint folgendes:
00000000000i[APIC?] local apic in initializing
========================================================================
Bochs x86 Emulator 2.2.pre2
Build from CVS snapshot on March 25, 2005
========================================================================
00000000000i[ ] reading configuration from D:\Programme\Bochs\Bochs-
\OS\OS.bxrc
00000000000i[ ] WARNING: syntax has changed, please use 'vgaromimage
..' now
00000000000e[ ] D:\Programme\Bochs\Bochs-2.2.pre2\OS\OS.bxrc: usb ir
deprecated (assigned by BIOS).
00000000000i[ ] D:\Programme\Bochs\Bochs-2.2.pre2\OS\OS.bxrc: vga_up
erval seems awfully small!
00000000000p[ ] >>PANIC<< newharddrivesupport directive is deprecate
ould be removed.
00000000000i[SYS ] Last time is 0
00000000000i[ ] restoring default signal behavior
========================================================================
Bochs is exiting with the following message:
[ ] newharddrivesupport directive is deprecated and should be remove
========================================================================
00000000000i[CTRL ] quit_sim called with exit code 1
Bochs is exiting. Press ENTER when you're ready to close this window.
Was nun...?
-
mit nr.9 mein er sicherlich dass dein os-image dann so heissen soll.
joachim_neu hat das config file noch für eine version geschrieben die älter ist. Da wurden einige tags noch benutzt die es in den neueren nicht mehr gibt
z.b. newharddrivesupport: enabled=1 muss raus
dann sollte er eigentlich nicht mehr darüber meckern, einige andere angaben sind auch veraltet dürften aber keine probleme machen
-
Cool, danke für den Tipp.
Hab newharddrivesuport rausgenommen. Jetzt gehts.......relativ.... Wenn ich jetzt starte erscheint kurz darauf "Bochs for Window - Display". Dies verschwindet jedoch gleich wieder.
(Konnte ich nur durch einen Screenshot erkennen)
Wie gehts weiter.... :?
-
wieviel erfahrung / ahnung hast du denn sonst so beim programmieren? hast du schon mal mit (irgend)einem assembler gearbeitet?
am besten du ladest dir mal, da du ja, wie ich, kein internes diskettenlaufwerk hast, einen treiber fuer virtuelle laufwerke runter. ich hab hier ein sehr nettes programm, das ich im netz leider nicht mehr finde =\ . hab dafuer hier ein sehr aehnliches gefunden:
http://chitchat.at.infoseek.co.jp/vmware/vfd.html#download
einfach mal runterladen und ausprobieren.
im bochs-ordner findest du eine bximage.exe (oder so), wenn du die in der eingabeaufforderung oeffnest, dann kannst du dir ein floppy-image erzeugen lassen, das du dann als virtuelles laufwerk einsetzen kannst.
warum ein virtuelles laufwerk und nicht einfach vom image booten?
ganz einfach, weil du dann beim fat12 bootloader nicht einfach deine dateien reinkopieren kannst; mit dem vfd geht das einfach per explorer.
dann bleibt da noch die frage, wie du den bootsektor auf die diskette bekommst. ganz einfach mit rawwrite:
http://uranus.it.swin.edu.au/~jn/linux/rawwrite.htm
hoffe geholfen zu haben :shock: :wink:
-
danke erstmal.
ich werde das ganze mal ausprobieren.
Momentan frage ich mich dann nur noch, wie ich dann von der virtuellen Diskette booten kann!?
Ich habe angefangen mit dem MASM zu proggen. Bin auf die Idee gekommen, weil ich dauernd die Debugger Ausgabe beim Visualstudio gesehen hab und ich nie wusste was das eigentlich alles heißt. ich programmiere C++.
-
Nya, dein richtiger PC bootet gar nicht vom Image, Bochs bootet davon, Bochs simuliert einen PC.
MASM ist allerdings nicht sehr weit verbreitet, den meisten Einfluss hat NASM (beim os-dev) aber auch FASM ist zum Beispiel sehr empfehlenswert, falls dir MASM mal nichtmehr gefällt :)
-
schau dir mal die bochsrc-sample.txt im bochs-ordner an.
da findet sich eine zeile wie:
floppy=a:\;1.44;inserted
oder so irgendwie.
achja..ich empfehle dir nasm oder gas, da die im lowlevel-bereich weitaus verbreiteter sind ;)
-
Du ruftst deine bochs.exe mit dem Parameter "-q" auf, dann bootet er von der Diskette.
-
Am besten wäre freilich, wenn du dir erstmal das generelle Konzept des
PCs anschaust. Dazu gibt es ne ganze Masse feiner Buecher, z.B. das PC-
Hardwarebuch. Wäre sicherlich nicht verkehrt, ich finde es sehr gut.
Andere hier im Forum können sicherlich noch viel genauere Tipps
abgeben als ich hier und jetzt.
Auch wenn ich mit Kanonen auf Spatzen schiesse, aber bevor du anfängst,
solltest du erstmal einen solchen Wälzer grösstenteils verstanden haben.
Und zu deiner Frage - du kannst ein Floppydisk-Image auf eine CD
brennen, dann bootet das BIOS von ebendiesem Image. Das ist aber
sehr viel Aufwand, besonders, weil du am Anfang x-mal Kleinigkeiten
verändern musst. Das macht auch keine CD-RW auf Dauer mit.
Dazu nimmst du einen PC-Emulator oder besser einen PC-Simulator wie
Bochs. Dieser wird im späteren Verlauf noch wichtig werden :)
Wenn alles im Bochs läuft, kannst du mit dem Testen auf einem echten
PC anfangen.
Svenska
-
Ich komm irgendwie nicht richtig weiter.
1) Hab myOS.raw
2) Hab A: virtuell mit VFD erstellt
3) Hab mit rawwritewin.exe myOS.raw auf A: kopiert
jetzt kann ich nicht mehr auf A: zugreifen, da Meldung unformatiert.
4) Was jetzt??
Es ist mir klar, dass ich nicht von jetzt auf gleich mein eigene OS programmieren kann. Aber ich möchte hiermit erstmal sozusagen "einen Grundstein" setzen, damit ich schon mal ungefähre Vostellungen habe, wie das alles geht.
-
wenn du dein os auf die diskette kopierst, zerstört es das vorhandene dateisystem und die diskette kann so nicht mehr gelesen werden
-
Ok, kapiert.
Und wie starte ich das ganze jetzt?
-
in bochs gibt es irgend eine möglichkeit, direkt von diskette zu starten. damit bin ich aber überfragt
-
habs fast. Allerdings brauch ich noch genaue Einstellungen in der bochsrc.txt
-
wenn ich das was man hier so mitliest richtig verstanden hab muss in bochs als floppy der pfad angegeben werden (also z.b. floppya=A: + die restlichen Parameter). funzt aber angeblich nur unter win2k/xp(/nt ?)
EDIT: folgendes in die bochsrc: floppya: 1_44=a:, status=inserted
funzt aber nicht unter 98, und damit wahrscheinlich auch nicht unter 95 oder ME (siehe http://www.lowlevel.brainsware.org/forum/viewtopic.php?t=656&highlight=bochs )
-
Ich weiß zwar jetzt nicht, was ich genau in der Config (bochsrc.txt) einstellen muss, aber momentan bricht das Programm immer mit folgendem Fehler ab:
FATAL: Could not read the bootdisk
--------------------------------------------------
Ich dachte nicht, dass das so schwer sein würde,
wenn ich jetzt noch nicht einmal selber etwas
gecodet habe. :roll:
-
Diese Zeile muss wohl auch noch modifiziert werden:
1)floppya: 1_44=floppy.img, status=inserted
2)floppya: 1_44=a, status=inserted
beides Fehler
-
floppya: 1_44="a:", status=inserted
Aber beschäftige dich erstmal mit den Grundlagen, bevor du lowlevelst.
-
Ich wollte wie gesagt halt erstmal ne Vorstellung haben.
ABER, danke es funzt.
Leider kann ich das Programm nicht durch Tastendruck beenden.... :x
-
Ich wollte wie gesagt halt erstmal ne Vorstellung haben.
ABER, danke es funzt.
Leider kann ich das Programm nicht durch Tastendruck beenden.... :x
meinst du bochs, oder deinen bootsektor?
bochs beendest du am besten mit dem button oben rechts (Quit).
deinen bootsektor kannst du so nicht einfach beenden, da musst du schon bochs schliessen (wie bei einem echten pc, wenn du von diskette bootest) ;)
lg, hannibal
-
Soweit ich den Kernel verstanden habe wird am Ende neu gestartet.
Code:
; Rebooten (HEX Dump).
reboot:
db 0EAh
dw 0000h
dw 0FFFFh
:?:
-
dann startet bochs (also zumindest die simulation) staendig neu..sollte sich durch ein kurzes flackern am virtuellen bildschirm erkennbar machen.
-
*ups*
Stimmt ja. Es handelt sich ja um einen Restart und nicht um einen Shutdown........
-
also falls du immer noch von CD starten möchtest:
Mit Nero (burning Rom [sofern du win hast]) kannst du ein Floppyemulation brennen. Wähle einfach Boot-CD.
mfg, jeb
-
Danke für eure Hilfe.
Noch eine Frage:
Kann mir noch einer sagen, wie man den Rechner nicht neu bootet, sondern herunterfährt?
-
Was willst du den bitte herunterfahren? Beim Herunterfahren von Windows oder Linux werden Systemdienste beendet und Einstellungen gespeichert usw. Da du keine Systemdienste hast gibts auch nix zum runterfahren.
Wenn du mit Runterfahren allerdings ausschalten meinst musst du mal die Lowlevel Ausgaben durchschauen in irgendeiner war mal ein APM Shutdown Teil in Assembler.
-
Hab sowas gefunden. Weiß allerdings nicht, was da genau passiert.
mov ax,$5301
xor bx,bx
int $15
mov ax,$530e
xor bx,bx
mov cx,01
int $15
mov ax,$530f
mov bx,1
mov cx,bx
int $15
mov ax,$5308
mov bx,1
mov cx,bx
int $15
mov ax,$5307
mov bx,1
mov cx,3
int $15
-
Das ist ein APM-Poweroff Code. Das läuft komplett über den Int 0x15. Wer wissen will wie der funktioniert muss einfach nach googlen oder in dieser Interrupt List nachsehen. Was mich ein wenig irritiert ist das vor Hex Zahlen immer ein $ steht. Ich würds durch ein "0x" ersetzen.