Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   e/a-programmierung (https://www.delphipraxis.net/79949-e-programmierung.html)

sancho1980 31. Okt 2006 17:46


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

boserPascal 31. Okt 2006 18:10

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

Muetze1 31. Okt 2006 18:33

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.

sancho1980 31. Okt 2006 19:35

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?

Muetze1 31. Okt 2006 22:33

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.

sancho1980 31. Okt 2006 22:45

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

Muetze1 31. Okt 2006 22:56

Re: e/a-programmierung
 
Ich empfehle dir (ui, ich kann den ISBN Link nutzen) dazu ein amerikanisches Buch: http://www.amazon.de/exec/obidos/ASIN/0201479508/delphipraxis-21

BUG 3. Nov 2006 16:57

Re: e/a-programmierung
 
Im Lowlevel-Magazin findest du mehr zur OS-Programmierung.

Bug


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz