Autor Thema: festplatte als spielplatz?  (Gelesen 4537 mal)

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« am: 02. February 2005, 11:02 »
hat vielleicht schon mal jemand versucht eine partition anstelle einer diskette fuer testzwecke zu verwenden? wenn ja, wuerde mich interessieren wie und womit der bootsector geschrieben wurde, welches dateisystem, etc.

lg, hannibal
\\o
o//
\o/

BigOlly

  • Beiträge: 88
    • Profil anzeigen
Gespeichert
« Antwort #1 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
====================================================
Zitat: "Es ist schwierig zu antworten, wenn man die Frage nicht versteht."
(würde mich ja mal interessieren ob jemand weiß woher dieser Satz stammt...)

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #2 am: 02. February 2005, 12:19 »
danke, das ist alles schon mal sehr hilfreich.. zu wissen, dass das ganze auch so in der einfachen art moeglich ist.

ich hab das grad mal probiert mit einer 100mb fat16-partition und einem fat12-bootsector..das will nicht so ganz :o  ..also muss ich scheinbar irgendwelche parameter im bootsector aendern, seh ich das richtig? :-k

edit: mir faellt gerade ein.. der bootsector ist ja eigentlich gar nicht fuer irgendein filesystem geschrieben..der soll nur ein interrupt eintragen und immer wieder ausfuehren! sollte doch trotzdem gehen, oder?

(btw: vorerst ist der bootsector alleine das programm an sich - soll so eine kleine 'schreibmaschine' bzw ein einfacher tastatur-treiber werden.)

lg, hannibal :-k
\\o
o//
\o/

BigOlly

  • Beiträge: 88
    • Profil anzeigen
Gespeichert
« Antwort #3 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
====================================================
Zitat: "Es ist schwierig zu antworten, wenn man die Frage nicht versteht."
(würde mich ja mal interessieren ob jemand weiß woher dieser Satz stammt...)

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #4 am: 02. February 2005, 12:34 »
Zitat von: BigOlly

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


aeehm..ja..glaube schon .. :)

na dann werd ich mich mal fortbilden  8-[
\\o
o//
\o/

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #5 am: 16. February 2005, 09:33 »
ich haette da nochmal eine frage:
besteht irgendwie die moeglichkeit das ganze _ohne_ filesystem zu machen? auf einer diskette funktioniert das ja auch, man muss eben nur das programm in den bootsector reinschmeissen!

lg, hannibal
\\o
o//
\o/

BigOlly

  • Beiträge: 88
    • Profil anzeigen
Gespeichert
« Antwort #6 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. :-)
====================================================
Zitat: "Es ist schwierig zu antworten, wenn man die Frage nicht versteht."
(würde mich ja mal interessieren ob jemand weiß woher dieser Satz stammt...)

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #7 am: 16. February 2005, 18:39 »
naja .. 'ich bin noch nicht so weit' .. :wink: .. soll heissen ich bin mir noch nicht wirklich darueber im klaren was ich eigentlich genau machen will. zu testzwecken wuerde mir insofern eine partition ohne dateisystem vollkommen genuegen. hier ist der bootsector ja genauso 512byte gross, sehe ich das richtig?

lg, hannibal

(und danke fuer die geduld  :) )
\\o
o//
\o/

BigOlly

  • Beiträge: 88
    • Profil anzeigen
Gespeichert
« Antwort #8 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....
====================================================
Zitat: "Es ist schwierig zu antworten, wenn man die Frage nicht versteht."
(würde mich ja mal interessieren ob jemand weiß woher dieser Satz stammt...)

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #9 am: 16. February 2005, 19:06 »
mein einziges problem ist eigentlich nur die lerndichte bzw die damit verbundenen erfolgserlebnisse (=> motivation). natuerlich koennte ich gleich mal versuchen da einen kernel mit ext2 und grub als loader zu basteln..nur seh ich hier das scheitern schon als vorprogrammiert :)

abgesehen davon bin ich in sachen festplattenzugriff noch nicht allzu versiert.. :?

naja...weiterbildung ist hier wohl das schluesselwort (im selbststudium natuerlich ;) ).

lg, hannibal
\\o
o//
\o/

BigOlly

  • Beiträge: 88
    • Profil anzeigen
Gespeichert
« Antwort #10 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.
====================================================
Zitat: "Es ist schwierig zu antworten, wenn man die Frage nicht versteht."
(würde mich ja mal interessieren ob jemand weiß woher dieser Satz stammt...)

 

Einloggen