![]() |
e/a-programmierung
hi
ich beschäftige mich seit einer weile mit assembly weil ich (versuche) zu lernen, wie man so dinge wie hardware- und bestriebssystemprogrammierung gemacht werden und jetz mal eine frage zu e/a-programmierung in assembly: da wird immer von adressierung über ports und/oder memory-mapping geredet..aber wie finde ich denn beispielsweise raus, welche hardware an meinem (oder irgendeinem anderen) computer liegt? ist das irgendetwas fest vorgegebenes oder kann ich das selbst irgendwie zuweisen? wenn ja, wie macht man sowas? und wie wird memory mapping implementiert..also wie kann ich beispielsweise einem port einer speicherregion zuweisen? hat das einer von euch schon mal gemacht? danke, martin |
Re: e/a-programmierung
Memory Mapping macht im Prinzip nichts anderes als Speicherbereiche im Hauptspeicher abbilden. Wenn du zum Beispiel auf den Bildspeicher deiner Grafikkarte zugreifen willst kannst du diesen über Hauptspeicher-Adressen erreichen. Die Speicheradressen selbst für die VGA-Karte etc sind natürlich vorgegeben, da der Programmierer ja wissen muß wie er die Geräte programmieren muß.
|
Re: e/a-programmierung
Und z.B. das PCI Subsystem verwaltet die Karten und kann deren (vom BIOS) zugeordneten Speicherbereich (mapped memory) zurück geben sowie deren (vom BIOS) zugeordneten IRQ's zurück geben. Wenn die PCI Geräte noch nicht initialisiert wurden, dann kannst du genau dieses machen und somit musst du alle Resourcen verwalten um sie dann intelligent an die Hardware zu verteilen.
|
Re: e/a-programmierung
ok
gehen wir mal davon aus: der rechner wird frisch eingeschaltet wie kann ich jetzt beispielsweise eine kleine willkommens-meldung auf dem bildschirm ausgeben? ich meine, ohne dabei auf interrupts zuzugreifen? |
Re: e/a-programmierung
Ok, also Real Mode und als Bootsektor o.ä. angelagertes:
Schreibe deine Nachricht einfach in den Speicher der Grafikkarte. Dabei in den Speicher für den Textmodus (Segment b800h) und dort ab Offset 0. Dabei ist als erstes der Zeichencode (1 Byte) und darauf folgend der Farbcode (1 Byte). Daher musst du jedes Byte an einer geraden Adresse ein Zeichen deines Strings schreiben. Diese Nachricht sollte dann zu sehen sein, aber bei folgenden Situationen nicht: 1. Der Rechner ist nicht im Textmodus 2. Er hat keine Grafikkarte *g* 3. Er hat keine CGA, EGA, MCGA, VGA oder S-VGA Karte sondern nur eine MDA Karte (Dann gleiches, nur halt an Segment b000h, gleicher Aufbau wie oben beschrieben) 4. Der Speicher der Grafikkarte wurde nicht eingeblendet an der Stelle. |
Re: e/a-programmierung
cool
das ist ja schon mal ein anfang kennst du vielleicht auch noch entsprechende dokumente im netz mit denen man so richtig i/o-programmierung lernen kann? im intel-handbuch steht bei i/o nur drin, wie man bytes zwischen prozessor und ports bzw memory hin- und herbewegt, aber dadurch bin ich leider immer noch nicht schlauer: z.b. wo welches device zu finden ist und wie es ankommende daten interpretiert mir is natürlich schon klar, dass das alles auch herstellerabhängig ist, aber die grundlegenede schnittstelle müsste ja bei so ziemlich allen gerätetypen gleich sein, oder? sonst könnte doch wohl kaum jeder standard-treiber eine grafik- bzw. soundkarte betreiben, oder (korrigiert mich, wenn ich mich irre...) danke, martin |
Re: e/a-programmierung
|
Re: e/a-programmierung
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz