Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - BigOlly

Seiten: 1 [2] 3 4 5
21
Lowlevel-Coding / festplatte als spielplatz?
« am: 16. February 2005, 19:17 »
Zitat
abgesehen davon bin ich in sachen festplattenzugriff noch nicht allzu versiert..


Du greifst auf die Festplatte im Grunde genauso wie auf die floppy. Nur die Laufwerksnummer ist ne andere. Also die erste Festplatte hat z.b. die 0x80.

Alles andere bleibt gleich: funktion 0x02, int13 usw.
22
Lowlevel-Coding / festplatte als spielplatz?
« am: 16. February 2005, 19:00 »
No Problemo, frag ruhig! ;-)


Also: Ja, Du siehst das richtig. Auch auf einer Festplatte sind die Sectoren (also auch der Bootsector) 512 Bytes groß, so wie bei den meissten Datenträgern (außer z.b. CDROMs die haben 2048 Byte pro Sector).

So, und nochmal zum "für Testzwecke....".
Klar kannst Du ohne Dateisystem für die Festplatte einen Bootsector schreiben und damit rumexperimentieren.
Nur irgendwann wirst Du sicher Dateien laden wollen, und dann musst Du Deinen Bootsector neu proggen.
Aber egal, probieren geht über studieren (sorry an alle hier die auf der UNI sind :lol: ), also bastel Dir einen....
23
Lowlevel-Coding / Bootloader von der 1. Lowlevel Ausgabe
« am: 16. February 2005, 18:47 »
an joachim_neu:


Ja Richtig! Mein Fehler! Hast gut aufgepasst..:lol:
Hab halt copy und paste gemacht und DX nicht geändert. :-)

Muß also heissen:
mov dh, 0 ; Head=0
mov dl, [bootdrv] ; Laufwerk



Allerdings: Stimmt Deine Erklärung nicht! ;-)  In DH würde nicht das bootdrv stehen sondern in DL!!!  Weil: Bei Intel werden die Bytes beim Speichern eines Wortes vertauscht. Wenn in [bootdrv]  0x0102 steht und Du lädst das Wort nach DX (mov dx, [bootdrv]) dann steht in DX: 0x0201 ! Trotzdem bleibt das natürlich ein Fehler weil das zuvor geladene DH ja wieder überschrieben wird.

Wenn ich die Zeilen aber vertausche und schreibe:
mov dx, [bootdrv]
mov dh, 0
dann würde es sogar fehlerfrei funktionieren! In DL steht das korrekte bootrv!
...aber das nur am Rande... ;-)
24
Lowlevel-Coding / Bootloader von der 1. Lowlevel Ausgabe
« am: 16. February 2005, 16:50 »
Hmmmmm...

zu 1.:
Das BIOS übergibt beim Start des Bootsectors im Register DL die BIOS-Laufwerks-Nummer von dem gebootet wurde. Diese sollte man eben sichern bevor man DL bzw. DX benutzt.
Außerdem könntest Du korrekter Weise beim lesen der Sectoren anstat:
mov dx, 0       ; Head=0, Laufwerk=0
auch:
mov dh, 0                   ; Head=0
mov dx, [bootdrv]       ; Laufwerk
schreiben.


zu 2.:
Die 13 ist der Stereucode "Cursor auf Zeilenanfang" (Caridge Return) und die 10 ist der Steuercode "neue zeile" (LineFeed). Damit wird der Cursor auf den Anfang der nächsten Zeile gesetzt. Das könntest Du auch weglassen, dann würde der Cursor halt hinter dem letzten punkt von "Loading..." stehen bleiben.


zu 3.:
Das ist nicht in 2 Worten erklärt. Entweder Du speicherst den Kernel in bestimmten Sectoren die Du dann von Deinem Bootloader aus lädst (und Dein Boot-Code sieht dannach aus, das Du dies willst), oder Du speicherst den Kernel als Datei auf der Diskette und liest ihn anhand von BiosParameterBlock, FAT und RootDir (jedenfalls wenn du FAT12 und FAT16 benutzt). Ich kann nur immer wieder auf TeeJay's Bootloader-tutorial verweisen.


zu 4.:
ja, z.b. Ralph Browns Interrupt-List oder in Büchern wie PC-Intern. Sieh mal in die Linkliste.


zu 5.:
Ich kann hier nicht das ganze Hexadezimal-System erklären, aber viellecht eine Beispiel-Berechnung:

h2F8A

   2 * 16 * 16 * 16    (=8192)
+ F * 16 * 16           (=3840)
+ 8 * 16                  (=128)
+ A                         (=10)
= 12170

(A=10, B=11 .....  F=15)

...oder Du nimmst einfach den Windows-Taschenrechner!



okay, Alle Klarheiten beseitigt? :-)
25
Lowlevel-Coding / festplatte als spielplatz?
« am: 16. February 2005, 11:57 »
Hmmm.. klar kannst Du das auch ohne Filesystem machen. Wenn Du Dir eine Partition für Testzwecke anlegst, sie als "aktiv" (also bootbar) schaltest (80h in der Part-Table) dann liest das BIOS den ersten Sector dieser Partition in den Speicher und startet ihn.
In diesen Sector  musst halt vorher Dein Bootprogramm schreiben.

Was Dein Bootprogramm dann macht, ob es weitere Sectoren liest oder ein Dateisystem benutzt um den Kernel zu finden bleibt doch Dir überlassen.

Die Frage ist nur was willst Du? Willst Du nen Kernel von Platte laden? Dann musst Du Ihn finden, entweder Du weisst von Hause aus auf welchen Sectoren der liegt oder Du brauchst eine Struktur auf Deiner Partition die Dir sagt auf welchen Sectoren der Kernel steht... huuch... das wäre ja schon ein kleines Dateisystem.. :-)

Lange Rede kurzer Sinn:
Das BIOS läd in jedem Fall den ersten Sector der aktiven Partition. Was Dein Programmcode aus dem ersten Sector dann mit dem Rest der Partition macht kannst Du frei programmiern.


Gruß BigOlly

PS:
Warum willst Du das ohne Filesystem machen? FAT16 wäre doch ideal dafür. Hab ich's zu kompliziert erklärt? Ich präzisiere mich auch wenn was unklar ist. :-)
26
Offtopic / USB Speicher-Stick
« am: 07. February 2005, 01:02 »
Also ich würde mal sagen, selbst wenn Du das jedesmal auf den USB-Stick schreiben würdest bräuchtest du mehrere Jahre um die 100000 zu erreichen.
Außerdem denke ich das die 100000 auf eine Speicherzelle zu rechnen ist.

Aber mal was anderes:
Ich hoffe doch Du kannst Dein System auch gleich vom Stick booten. So hab ich das nämlich gemacht. Dann kann man nämlich zusätzlich auf allen Rechnern bei Freunden oder Verwanten oder sonstwo (Auf Arbeit wer's darf) sein System auf Lauffähigkeit mit "echten" Rechnern testen. :-)

...Nur mal so als Vorschlag...

Gruß BigOlly
27
Offtopic / ASM-Editor
« am: 04. February 2005, 20:49 »
Okay, dann ich jetzt auch:

Ich benutze UltraEdit. :-)
28
Lowlevel-Coding / VESA .. klar doch wie?
« am: 04. February 2005, 18:33 »
Ach ja, nochwas: Mein OS-loader funktioniert so!
Ich schalte zurück in den Real-Mode, springe zurück in den OS-Loader, dieser läd mir den gewünschten Treiber per BIOS vom Boot-Drive dort hin wo ich will (irgendwohin in die 4GB ber Switch in den PM), und springt nach dem laden zurück in dem PM und zum Kernel.

Und: es funzt!    =D>
29
Lowlevel-Coding / VESA .. klar doch wie?
« am: 04. February 2005, 18:30 »
Ja, mit den v86-Mode geht's natürlich auch. Aber dann muss man die 64-Bit-Möglichkeit für sein Betriebssystem begraben. Denn im Long-Mode (auch im Compatibility-Mode) wird kein v86 mehr unterstützt.  :cry:
30
Offtopic / Gmail?
« am: 02. February 2005, 22:52 »
okay, und kann man die box auch per pop (also z.b. outlook) abfragen?

(jaaa, meine fragen kommen häppchenweise.. :P  )
31
Offtopic / Gmail?
« am: 02. February 2005, 22:21 »
Sagt mal, welche Angaben verlangt Google bei Anmeldung für Gmail?
32
Lowlevel-Coding / festplatte als spielplatz?
« am: 02. February 2005, 12:29 »
Ähhhmm... Du kannst keinen FAT12-Bootsector für eine FAT16-Partition verwenden. Du musst einen FAT16-Bootsector schreiben. (Siehe Punkt 1 meiner Liste).  :-)

Und ja: Du musst bei diesem FAT16-Bootsector natürlich auch die FAT16-Werte im BPB (Bios-Parameter-Block) eintragen. Die sind aber nicht "fest" sondern die musst Du für Deine Partition von Hand auslesen.
(Bei FAT12 sind diese auch nicht fest, es scheint nur so weil wir alle bei FAT12 mit einer 1,44MB Diskette arbeiten!)

Hast Du eigentlich schon erfolgreich einen FAT12-Bootsector (z.b. mit Hilfe von TeeJay's Tutorial) geschrieben? Das solltest Du als Grundlage schon haben...

 :D

Gruß BigOlly
33
Lowlevel-Coding / festplatte als spielplatz?
« am: 02. February 2005, 12:12 »
Ja, ich boote mein System von Festplatte (in Abwechslung mit anderen Medien). Im Grunde ist das kein Problem und ein einfaches Ding.
Nur darf man halt keinen Fehler machen. In meinem Fall habe ich eine alte 3GB-Platte für diese Zwecke abgestellt.

Im Prinziep ist es ja nicht nötig jetzt schon von Platte zu booten und eigentlich mach ich das nur aus dem einfachen Grund weil ich sehen will ob ich die Sector-Berechnung im Bootsector richtig mache. Bei Partitionen ist das nämlich etwas anders als bei einer unpartitionierten FAT12 (ich sage nur 8Bit, 10Bit, 6Bit für Funktion 02h int13).
Also habe ich eine 2GB Partition und dahinter eine 1GB Partition erstellt. Von der 1GB-Partition boote ich mein System.

Hier mal die Schritte die Du brauchst um das zu bewerkstelligen:

1. FAT16-Bootsector schreiben (*siehe Anmerkung unten)
2. Festplatte auswählen :-)
3. eine freie Partition auf der Festplatte schaffen (und zwar unter 8GB und nicht größer als 2GB)
4. diese Partition unter DOS oder Windows als FAT16 formatieren
5. Bootsector der FAT16-Partition auslesen
6. im HEX-Editor die BPB-Werte des Bootsectors heraussuchen (Achtung: Little-Endian)
7. diese BPB-Werte in Deinen eigenen Bootsector eintragen und compilieren
8. compilierten Bootsector auf die Partition schreiben.
9. feddisch!

Anmerkung: Natürlich geht auch FAT32, aber darüber kann ich Dir nichts erzählen, und ich habe auch nicht geplant einen FAT32-Bootsector zu schreiben. Hab schließlich später ein eigenes Filesystem, und außerdem hat man bei FAT32 noch weniger Platz für Programmcode.

Als Programm zum lesen und schreiben des Bootsectors Deiner Partition kannst Du "DD" nehmen. Das gibt es auf der Webseite zum download von dem der auch RawWrite geschrieben hat. Die URL findest Du im Program RawWrite (ich habs nicht hier sonst würde ich die URL posten).

Nochwas zum programmieren des FAT16-Bootsectors:
Nimm nicht gleich die Festplatte sondern etwas was einfacher zu handhaben ist. Ich habe das mit ner Zip100 gemacht. Weil Du ja beim programmieren immer wieder -Bootsector compilieren, schreiben, testen... usw. machst.
Achtung: Zip-Disketten sind auch partitioniert!

Außerdem: Eine FAT16-Partition kann maximal 2GB groß sein (65536 * 64 Sectoren pro Cluster * 512 Byte), also mach sie nicht größer. Und: wenn Du Funktion 02h von int13 benutzen willst dann sorge dafür das die Partition unterhalb der 8GB-Marke liegt, ansonsten müsstest Du Dich mit den 4xh Extended-Int13-Funktionen beschäftigen, und für das alles ist der Bootsector zu klein.

Und noch was:
Um nicht für den Crash Deiner sämtlichen Daten verantwortlich zu sein.... DU DARFST KEINE FEHLER MACHEN BEIM SCHREIBEN DES BOOTSECTOR AUF DIE PLATTE...!!!   Auf Nummer Sicher gehst Du wenn du eine alte Festplatte nimmst die Du dafür abstellst.
Bei mir war das einfach weil ich die Platte per Wechselrahmen im PC habe (das ist zum OS-Entwickeln sowieso zu empfehlen).


So. Noch Fragen?   \:D/

Gruß BigOlly
34
Lyrisches Eck / Der erste Tag eines OS-Proggers...
« am: 31. January 2005, 20:21 »
Hi Leute.
Da ich den Eindruck habe das sich hier mancher das Schreiben eines eigenen Betriebssystems recht einfach vorstellt, und da ich sehe das der Eine oder Andere aus allen Wolken fällt wenn er merkt das dies gar nicht so einfach ist und man einiges können muß, habe ich beschlossen diese "Anfangs-Schwierigkeiten" mal in ein Lyrisches Format zu bringen.

Dieses Gedicht ist also allen gewidmet die entweder vor haben ein OS zu proggen, oder die schon angefangen haben und langsam merken das dies wohl nicht schnell mal "mit links" geht:

[-o<


Der erste Tag eines OS-Proggers:
--------------------------------------------

Der Tag ist lang und ich sitz' hier,
was ich jetzt mach denk' ich bei mir,
spiel ich ein Spiel ach nein mal sehn...
...ich denk' ich progge ein System!

So richtig eins mit Schnick und Schnack
da ist doch nichts was ich nicht pack,
mit Buttons, Icons bunt und fein,
gesagt getahn, so soll es sein!

Schon starte ich den ASM,
noch vorher schnell zum Clo ich renn'
nun geht es los doch halt ohh mann,
womit verdammt fang ich nur an?

Vielleicht ein Treiber für die Maus?
Vielleicht geh' ich vom Desktop aus?
Da merk' ich schnell ich brauch noch mehr
zuerst muss mal ein Kernel her!

Okay ein Kernel soll es sein
doch muss er in den Speicher rein!
Wie lad' ich den, mal sehn, mal sehn,
das kann nur beim booten gehn!

Nun brauch ich auch ein Bootprogramm,
dann fang ich damit erstmal an.
Ich grübel, denke, doch ohwei,
der erste Tag ist fast vorbei!

So einfach scheint das nicht zu sein,
das sieht wohl jeder anfangs ein!
Mal einfach ein OS geproggt,
da wär' wohl selbst Bill Gates geschockt!

Da muss ich wohl noch viel verstehn
ganz viele Doc's und Bücher sehn.
Und die Moral von der Geschicht:
Willst Du nicht lernen, klappt es nicht!


Wer das schon erlebt hat kann sich ja melden...   :D

Gruß BigOlly
35
Lowlevel-Coding / initialisieren der IDT
« am: 31. January 2005, 18:57 »
Mann könnte aber auch schreiben:

xor eax,eax
mov al, 0x8E
 \:D/

oder:

mov  eax,0xE0000008
rol eax,4
 :lol:


oder:

push dword 0xE8
pop eax


.... viele Wege führen nach Rom (...bzw. nach eax), aber

mov eax, 0x8e

ist natürlich am einfachsten!
 ](*,)
36
Hi Leute.

Also Grundsätzlich ist die Sache mit der Grafik-Programmierung die größte Hürde die ein OS-Progger nehmen muss. Meiner Meinung nach jedenfalls.

Mann bin ich froh das ich von einer GUI noch Meilenweit entfernt bin. Warscheinlich baue ich auch erst mal eine so eine Art "Zeichen-Mode-GUI" (vielleicht kann sich ja noch jemand an die Turbo-Vision-Bibliotheken von Turbo-Pascal erinnern, das war sowas ähnliches...).

Das Problem ist: Für alles kann man im Grunde Treiber schreiben, Netzkarten, USB, Tastatur, Scanner, Maus, Timer, APIC, Zip, CD..... usw.  weil alles ist dokumentiert und früher oder später findet man entsprechende Spezifikationen im Netzt. Allerdings gibt es eine Ausnahme: So gut wie sämtliche Grafik-Chips werden mit Ihren Register-Sätzen von den Herstelern so geheim gehalten wie die Farbe des Clopapiers des CIA-Chefs!

Und nun zu VESA:
Leider ist das so ziemlich die einzige Möglichkeit für einen OS-Progger (*heul*) eine Grafik-GUI (doppelt-gemoppelt  :wink: ) zu proggen. Und wenn man ein 32-Bit OS proggt (also in den P-Mode geht) dann gibt es im Grunde nur 2 Möglichkeiten mit VESA zu arbeiten (bitte korregiert mich wenn ich eine Möglichkeit übersehen hab).

1. Man schaltet den gewünschten Grafikmode schon beim booten mit hilfe des Bios ein und bleibt dann für alle Ewigkeit, bzw. bis zum nächsten Reset in diesem Mode.

2. Man benutzt die "PMode-Schnittstelle" die es ab VBE 3.0 gibt. Leider haben meiner Meinung nach nicht viele Grafikkarten diese Schnittstelle. Und wenn ich richtig gelesen hab ist die auch nicht ganz so einfach zu proggen.

Eine Möglichkeit würde mir noch einfallen: Evtl. könnte man einen "Vesa-Treiber" schreiben der für die Mode-Umschaltung das Multitasking, und das Paging abschaltet, in den Real-Mode schaltet, das BIOS für die Vesa-Einstellungen benutzt, und dann wieder den P-Mode, Paging und Multitsaking aktiviert....  Hilfe, wer will das proggen....   :-k


Gruß BigOlly

PS: Falls irgend jemand da draußen Spezifikations-Unterlagen über z.B. den S3-Trio64 Chipsatz hat....   BITTE MELDEN !!!
 :roll:
37
Lowlevel-Coding / 64-Bit, hat schon jemand rumprobiert?
« am: 28. January 2005, 18:43 »
Also, wenn jemand was erklärt bekommt und es SOFORT versteht, dann hat er "gleich ge schaltet"...   :lol:

Okay, zum Ernst der Bits:
Hier mal zwei Zitate aus der AMD64-Dok:

"The DS, ES, and SS segments are ignored in 64-bit mode."

"Segmentation is disabled in 64-bit mode.
...
In data-segment descriptors referenced by the DS, ES and
SS segment registers, the base-address field is ignored.
For the purpose of virtual-address calculations, the base address
is treated as if it has a value of zero."

*alles sehr merkwürdig*
38
Lowlevel-Coding / nur 1 TSS ...?
« am: 28. January 2005, 18:10 »
Ich versteh nicht ganz wozu das eine TSS gut ist wenn es kein Hardware-Multitasking mehr gibt... *grübel*

Und ja, DS und ES gibt es noch, aber die sind gleichgeschaltet mit CS.
Wenn die Applikation in einem riesigen flat-Speicherbereich läuft, wie es im Long-Mode ja anscheindend vorgesehen ist, dann ist das auf den ersten Blick zu verstehen, aber das hiesse ja auch das Code und Daten nicht mehr "voreinander geschützt" sind, denke ich....
39
OS-Design / ...The Mysterium of Hidden_Sec... :-)
« am: 28. January 2005, 03:07 »
Also eigentlich ist es ganz einfach.
Ich schildere kurz wie ich drauf gekommen bin.

Nachdem ich den FloppyFAT12-Boocode entwickelt hatte hab ich begonnen FAT16-Bootcode zu basteln, damit ich auch von Zip und LS booten kann.
Dabei habe ich eine Zip100 genauer untersucht um z.b. herauszufinden vieviele Sectoren pro Cluster, wieviel Sectoren pro Track usw. vorhanden sind.
Dabei fand ich zu meinem "Entsetzen" heraus das alle mir unter die Finger gekommenen Zip100, Zip250, LS120, USB-Stick usw. wie Festplatten Partitioniert sind. (Ich erwähnte es schon). Nur halt mit einer großen, Mediumfüllenden Partition.
Und wie das bei Partitionen so üblich ist beginnt die Partition am Anfang des nächsten Tracks. (Der erste Track ist ja durch den MBR (mit Partiton-Table) schon "angerissen")

Bei einer Zip100 sieht das so aus:

- Bootsector
- 31 unbenutzte Sectoren (32 Sectoren pro Track)
- Start der Partition, also Bootsector (Cylinder0, Kopf1, Sector1)

Aber nun konnte ich die Nummern der Sectoren zum einlesen von FAT und  RootDir nicht mehr korrekt berechnen....   Der Bootsector war ja nicht mehr Sector 0 (wie bei FAT12 ohne Partition) sondern in diesem Fall Sector 33, die Fat lag nicht ab Sector 1 sondern ab Sector 34 und das RootDir lag nicht an Sector 1+(Anzahl-Sectoren-beider-FATs)....
(Das Problem potenziert sich noch wenn man an eine Fat16-Partition auf einer Festplatte denkt wo mehr als 1 Partition drauf ist...)

Also hab ich die Zip100 mit DOS bootfähig gemacht und geguckt wie der DOS-Bootcode das macht...
Und siehe da... der benutzte auch den Eintrag Hidden_Sec zur Berechnung...

Ein bisschen Recherche im Netz brachte dann die Lösung...

(Ich weiß, ich weiß, ich schweife aus... aber nun die Erklärung:)


In BpbHiddenSec steht die "Anzahl der Sectoren vor der Partition".

Das ist es schon!
Hidden ist da als Name natürlich Irre führend.
Aber immerhin, denke einfach ein FAT16-Bootcode auf der 2. Partition auf der Festplatte wird gebootet. Der Bootcode müsste erst den MBR einlesen und feststellen: 1. auf welcher Partition er selber liegt und 2. auf welchem Sector die Partition beginnt.  Und dann erst kann der Bootcode Fat, RootDir und Kernel einlesen...
(Ich weiß, das MBR-Programm sollte eigentlich einen Pointer auf den Partition-Table-Eintrag liefern...)

Kurz: Wer von Zip booten möchte muss bei der Berechnung der Sectoren immer den Wert in Hidden_Sec dazuaddieren und dann funktioniert es wie es soll.

(Ich hoffe ich war nicht zu ausschweifend...  :P  )
40
Offtopic / Hat zufällig jemand ein Asus A8V deluxe ?
« am: 27. January 2005, 21:54 »
Nun ja, ich denke der Prozessor-Hersteller ist nicht die richtige Adresse für Frust. Ich weiss nicht wer das festlegt. Ich vermute das ist ein "Konsortium" von IBM, Microsoft usw.  die dann den "PC-Standard" weiterentwickeln.

Und wenn das BIOS mehr Datenbereich braucht, und der dann auch noch unter 1MB liegen soll... dann bleibt nicht viel.

Schade nur das alles irgendwie nur langsam durchsickert. Die BIOS-Hersteller werden das schon alles wissen, und alle anderen.....   also z.b. wir.... hmmmmm   ..die müssen halt sehen woher die Infos kommen.

ABER DAFÜR HABEN WIR JA UNSERE COMMUNITY...  :D
Seiten: 1 [2] 3 4 5

Einloggen