Autor Thema: Aussehen des kompletten RAMs  (Gelesen 17808 mal)

Paul

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« am: 27. February 2005, 22:34 »
Hi !
Ich möchte meinen RAM bis ins letzte Byte ausreizen, daher suche ich (bislang vergeblich) nach Infos, wie der RAM unterteilt ist. Also z.B. die Interruptvektor-Tabelle von 0000:0000 bis 0040:0000 und der Videoram von A000:0000 bis ... keine Ahnung
Das waren jetzt nur 2 Sachen, euch fällt sicherlich noch mehr ein
Also einfach eine Auflistung aller im RAM vorhandenen Komponenten (Anfang und Ende)

Danke schon mal für eure Hilfe

BigOlly

  • Beiträge: 88
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 28. February 2005, 02:50 »
In einem anderen Thread hatte blueXseven mal einen schönen Link zu diesem Thema gepostet, den ich gerne weiter gebe: :-)

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

Falls Du den Thread lesen willst, hier:
http://www.lowlevel.brainsware.org/forum/viewtopic.php?t=484

(es ging und den Erweiterten BIOS-Datenbereich)

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...)

Paul

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 28. February 2005, 12:43 »
Ah gut, das hilft mir doch schon mal weiter
Noch eine Frage: Im Realmode bleibt die EMS-Page im unteren Speicher ja ungenutzt. Wie groß ist die, wo fängt die an und kann ich die für meine Zwecke verwenden ? :-k

Achja, ich zitiere mal die Seite die du mir genannt hast:
C000:0000-C000:7FFF : video BIOS (32K is typical size)
 :?:  Wie ist denn das gemeint ? Legt die GraKa jetzt auch noch ihren Kram in meinen RAM ?? :shock:

Uh, nochwas: 0040:0000-0040:00FF : BIOS data area (BDA)
Steht da irgendwas super-wichtiges drin ? Hab bislang immer meinen Kernel an 0040h:0000h geladen :roll:

So, letzte Frage: Soweit ich das sehe, liegt der Speicherbereich für den Textmodus (B800h:0000h) im Bereich des VGA-Speichers. Ist das korrekt ?


Nachtrag: Verdammt, ich versteh die Welt nicht mehr !
Auf der Seite steht C800:0000-E000:FFFF : NOTHING
Aber wenn ich jetzt meine FAT-Tabelle ins Segment C800h und das RootDir ins Segment D000h lade, geht garnichts mehr. Wenn ich hingegen 2000h und 2500h nehme, geht alles Wunderbar. Aber ich will den ganzen FAT12-Kram nicht im unteren Speicher haben... :?

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #3 am: 28. February 2005, 13:58 »
türlich legen die auch ihren code und daten in den ram... macht das bios ja auch, wie soll man sonst anständig ints calllen? dann müsste ja jede karte anschlüsse zum ram und ne eigene CPU haben...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Paul

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 28. February 2005, 14:10 »
Ok des is klar :)

Aber wie wie gesagt liegt mein aktuelles Prob jetzt bei dem Speicherbereich C800:0000-E000:FFFF
Hat jemand Erfahrungen damit ? Warum geht nix mehr wenn ich meine FAT+Rootdir dorthin lade ?

Wie gesagt, ich will den RAM in meinem OS aufgeräumt halten und brauche da halt ne kleine "Spielwiese" für temporäre Codes und Daten, wie eben z.B. der FAT12-Kram

blueXseven

  • Gast
Gespeichert
« Antwort #5 am: 28. February 2005, 17:38 »
also den bereich von 0xA0000 bis 0xFFFFF kannst du wohl vergessen.
da werden diverse roms hingeladen. und herauszufinden wo jetzt noch
was frei ist dürfte ziemlich schwer sein.
und die bda darfst du auch nicht überschreiben, solange du die funktionen des bios benutzt.

Paul

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 28. February 2005, 20:54 »
Ok, hab meinen Kernel jetzt ins Segment 0050h verschoben :)

Der nächste Schritt wäre jetzt, in den Protected-Mode oder so umzuschalten, aber ich blick da einfach nich durch..
Und ohne meine geliebten BIOS-Ints bin ich verloren...ich kann doch nicht ein komplettes BIOS nachcoden...

Gibts da nicht eine Alternative, mit der ich weiterhin linear adressieren kann, aber trotzdem mehr speicher hab ?

Nachtrag:

Noch eine Frage:
Codes&Infos für HDD-Driver findet man ja zu genüge, z.B. diese Seite hier:http://www.nondot.org/sabre/os/files/Disk/HD_PORTS.asm

Aber in Sachen Floppy-Driver bin ich nicht fündig geworden. Woher nehmt ihr die Infos für eure Floppy-Treiber etc ?

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 28. February 2005, 21:47 »
Zur Alternative, der Unreal Mode oder wie er hieß könnte da helfen, da hast vollen speicher und biosints, code kann aber nur bis 1 mb ausgeführt werden...
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #8 am: 01. March 2005, 08:21 »
Zitat von: N00B
Zur Alternative, der Unreal Mode oder wie er hieß könnte da helfen, da hast vollen speicher und biosints, code kann aber nur bis 1 mb ausgeführt werden...


und keinen speicherschutz! man könnte auch das OS als VM-Task im PM mit einem hintergrundsteuerungsprogramm laufen lassen, oder da einen task machen, der als treiber fungiert, denn der kann bios-ints aufrufen, wenn man a bisserl rumfuchtelt...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

BigOlly

  • Beiträge: 88
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 01. March 2005, 13:13 »
Tja, mann könnte sogar sagen das jedes 32-Bit-OS die gesammten Bios-Ints nachproggen muss. :-)
Das ist nunmal so. Deshalb ist es ja auch keine Aufgabe wie "ich progge mal ein Programm" sondern wie "ich progge mal ein OS".  ](*,)

Nochmal zum Speicher zwischen A0000h und FFFFFh:
Wie blueXseven schon sagt... lieber nicht benutzen. Selbst wenn Du das hinbekommst, sobald Dein OS auf einem anderen Rechner gestartet wird, könnte dieser Bereich schon wieder gaaaanz anders aussehen. Und wenn Du mal ne PCI-Karte reinsteckst (z.B. SCSI) könnte diese auch wieder einen Block da oben brauchen, und schwups ist auch schon wieder Deine RAM-Planung dahin.

Aber Du hast Recht, die 640kB (bzw 632kB ohne BDA und EBDA) sind natürlich etwas knapp für ein neues tolles schönes OS.
Deshalb benutze ich den Bereich da unten auch nur für die Boot-Programme (Bootsectoren) und für meinen Kernelloader. Dieser läd den Kernel an die Adresse 100000h (also genau an 1MB) und startet diesen.
Aber das geht natürlich nicht ohne PM.

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...)

Paul

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 01. March 2005, 18:09 »
Argh ! Ich blick durch den f***ing PM einfach nicht durch und Bochs hängt sich jedes Mal auf wenn ich irgendwelche Codebeispiele ausprobiere :evil:

Ok, aber man kann ja schon mal vorsorgen. Ich hab mir jetzt vorgenommen, alle INTs selber zu coden, keine BIOS-Ints mehr !
Daher nochmal die Frage: Wo finde ich Codes um das Floppy Drive über Ports steuern zu können ? :?:

Ich hoffe jemand von euch kann mir helfen, danke schon mal :)

Netmaster

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 11. April 2005, 23:51 »
Ich hab ne Frage, passend zum Thema, wie kann ich POST-Routine auslesen, ist es möglich einfach nen Bootloader zu schreiben, der einfach den Bereich oberhalb von f000:fff0 ausliest, bzw den gesamten MByte ím realmode auf die Floppy speichert und dann beginnend ab f000:fff0 (Alte Adresse) ausführt oder mit dem Debugger durchgeht ???
Chaos ist die höchste Form der Ordnung ;)

crashmakerMX

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 22. April 2005, 10:39 »
Zitat von: ICC

Daher nochmal die Frage: Wo finde ich Codes um das Floppy Drive über Ports steuern zu können ? :?:


here you are:

http://www.nondot.org/sabre/os/articles/DiskandDiscDrives/

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 02. May 2005, 20:52 »
Hi,

den Bereich von 0xa0000 bis 0xfffff muss man nicht ganz vergessen, soweit ich weis sieht es da folgendermaßen aus:

  0xa0000-0xbffff  VGA RAM für verschiedene Videomodi (Text,CGA,VGA)
  0xc0000-0xc7ffff  VGA Rom (VGA BIOS, Fonts, VBE Interface usw.)
  0xc8000-0xdffff  Platz für Extension ROMs :idea:
  0xe0000-0xfffff :!: BIOS ROM

Der Trick den Platz für den Extension ROM zu nutzen ist dabei nur die ROM-Header zu identifizieren und so die Bereiche, wo ROMs gemappt sind nicht mit eigenen Zeugs zu überschreiben zu versuchen. Der Rest ist auf jeden Fall Speicher der feinsten Art und gibt dir für dein RealMode(????) OS noch etwas Platz.

ROM Layout:
 Offset  Size  Desc
  0x00    2     0xaa55  "Magic" um ROM zu identifizieren
  0x02    1     Größe des ROM in Bytes (muss noch mal 512 genommen werden)
   und noch weiteres, ich kanns aber im Moment nicht finden.

Kannst ja mal googeln.

Aber die bessere Alternative ist der Protected oder der Long Mode, da braucht man sich nicht mehr über jedes Byte gedanken zu machen :wink:

Gruß n3Ro
Agieren statt Konsumieren!

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 02. May 2005, 21:09 »
Oder schau einfach mal hier rein:

http://www.osdever.net/documents/PNPBIOSSpecification-v1.0a.pdf?the_id=51
(hoffentlich ist das osdever.net bald wieder richtig online :( )

Da steht es ganz genau.

Gruß n3Ro.
Agieren statt Konsumieren!

 

Einloggen