PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fragen



HellBird
18.08.2001, 17:40
ich hab hier im urlaub ein zwei Fragen gesammelt....

1. wie ist das mit Vesa programmierung:
* wie geht das im realmoede mehr als 320x200
* wie spricht man das an ... ich weiss schon int 14 aber auch aus RBsInterruptliste bin ich nicht schlau geworden

2. wie kann man zwischen pmode realmode und v86 umschalten und wie kann man erkennen in welchem man sich befindet? und wie kann man die hardware im pmode ansprechen - ueber in/out?

3.kennt jemand eine uebersichtlichere portliste als RalfBrowns?

4. kennt jemand eine Liste in der die Hexcodes fuer die einzelnen asmbefehle drinsteht?

Bunny
19.08.2001, 01:14
Ich bin zwar sau müde; aber ich versuch es mal.

1.1 Ich glaub mal eher das du INT 10h meinst.
1.2 Also, schau da mal ab INT 10h Funktion 4Eh Unterfunktion 02h nach. Da geht los.
1.3 Du kannst aber schon mit Int 10h Funktion 00h ne höhre Auflösung hinzaubern, glaub ich

2. Kannst es ja mal mit INT 15h Funktion 89h versuchen *g*. Aber schau mal hier im Forum, ich hab mal ne Link zur ner super Page zu dem Thema reingeschrieben. Hättest einfach mal suchen müssen.

3. glaub nicht

4. www.kultkiste.de/privat/ftp/assembly/opcodes.zip (http://www.kultkiste.de/privat/ftp/assembly/opcodes.zip)

LostMind
19.08.2001, 01:44
Tach,


wie geht das im realmoede mehr als 320x200

Was soll denn die Auflösung mit dem Real-/Protected Mode zu tun haben ? Es ändert sich wohl was beim I/O zum Videospeicher aber die Auflösung hat damit nix zu tun. Größere Auflösungen als 320x200x256 (Mode 13h), die mehr als ein Segment(64k) umfassen, lassen sich natürlich auch im Real Mode erreichen - dafür is ja der VESA Standart da. Die entsprechenden Modi (100h und folgende) können mit der gleichen Biosfunktion eingestellt werden wie auch der von dir beschriebene Modus 13h und zwar via INT 10h/00. Die Auflösung 800x600x256 entspricht beispielsweise dem Modus 103h. Da du in diesem Fall mit einem Segment nur einen kleinen Teil des Bildschirms ansprechen kannst, mußt die mit "Speicherfenstern" arbeiten. Das bedeutet das du wählen kannst auf welche "Stelle" des Graphikkartenspeichers (und damit des Bildschirms) das Segment im Hauptspeicher (meistens A000h) gemappt wird. Die ganzen VESA Biosfunktionen gibts übrigens bei INT 10h Unterfunktion 4Fh.


ich weiss schon int 14

INT 14 ist der Schnittstellen Interrupt - is auch ganz lustig - hat aber damit nix zu tun.


Ähnliche Topics hatten wir übrigens auch schonmal:
http://www.buhaboard.de/NonCGI/Forum23/HTML/000027.html
http://www.buhaboard.de/NonCGI/Forum23/HTML/000103.html
http://www.buhaboard.de/NonCGI/Forum23/HTML/000115.html



kennt jemand eine uebersichtlichere portliste als RalfBrowns?
Ja, in "Das BIOS Buch" von Alle Metzlar is eine - allerdings nicht besonders ausführlich !


kennt jemand eine Liste in der die Hexcodes fuer die einzelnen asmbefehle drinsteht?
Die Docus einiger Assembler enthalten derartige "Listen". Ansonsten können die Docus der Prozessorhersteller Aufschluß geben. Es is übrigens nich so einfach wie du vielleicht denkst - viele (komplexere) Befehle werden Bitweise zusammengesetzt wodurch man ihnen kein festen Hexwert zuschreiben kann.

MFG
LostMind

[Dieser Beitrag wurde von LostMind am 19. August 2001 editiert.]

CppThinker
23.08.2001, 21:44
HelpPC is auch nicht schlecht, zwar auch nicht so umfangreich wie RalfBrown's, aber schön übersichtlich.

mfG
CppThinker

HellBird
31.08.2001, 17:12
nochetwas....

im realmode:
eine .com-datei darf maximal 64kb enthalten und weil eine .com-datei beim start vollstaendig in den speicher geladen wird mueste man 64kb d.h. von 0000h-FFFFh fuer das programm nutzen koennen.
jetzt hab ich ein problem:
an A000 steht der grafikspeicher und in den Grafikspeicher kann man bis zu 320x200x1 byte addressieren: das sind 64000byte dann haette man aber fuer das programm keine 64kb mehr. ausserdem hab ich mal dieses schoene bild gefunden das mich dann vollstaendig durcheinandergebracht hat.

http://pure.l33t3.de/deinmeister/realmode_d.gif

da steht 640kb fuer das programm, und der grafikspeicher 640kb-704kb das kann man doch mit 16bit garnicht adressieren.

ausserdem wuerde es mich interresieren wo dos eigentlich steht und wo die interrupts sind

LostMind
31.08.2001, 18:41
Du rechnest völlig falsch - Segmentierung beachten! 0000h bis FFFFh in Segmenten ausgedrückt (*16) ist 1048560 Bytes also ca. 1023 kB, ungefähr 1 MB! Da drin haben 64 locker Platz. Die angegebene Graphik is in Ordnung. Und immer schön dran denken das jede Speicherstelle im Realmode mit einer Segment- und einer Offsetangabe adressiert wird.

Der wichtigste DOS Interrupt ist INT 21H, die Adresse von den entsprechenden Interrupthandler befindet sich in der Interruptvektortabelle die sich am Anfang des Speichers befindet. Diese ist 256 * 4 Bytes groß und enthält für jeden Interrupt einen jeweils 4 Bytes großen Zeiger (Segment,Offset) auf den jeweiligen Interrupthandler.

MFG
LostMind

HellBird
01.09.2001, 17:10
thx