Forum: PC-Programmierung Wie wird die VGA-Adresse erhöht bei Defseg bitte


von Peter B. (funkheld)


Lesenswert?

Hallo, guten Tag.
Wie wird bitte die Segmentadresse von VGA erhöht?

Ich möchte bitte einen VGA-Screen 800x400 mit Grafik beschreiben.
Nach 80 Zeilen kommen die nächsten 80 Zeilen

Wie sieht bitte das nächste Segment aus ( DEf Seg=...)?
-------------------
def seg=&ha000
for z&=0 to 64000
  poke z&,64
next z&
.......
.......
------------------

Danke.

von Jim M. (turboj)


Lesenswert?

Da gibt es keine größere.

Es ist nur ein 64KB Segment ab hex A000 aktiv, welches von der CPU 
komplett mittels dem 16 Bit Offset (Register) angesprochen werden kann.

Um andere Adressen im VGA Speicher zu mappen muss man dessen Register 
umprogrammieren. Wie habe ich lange vergessen.

Und 800 horizontale Pixel klingt nach SVGA und nicht mehr nach VGA - da 
hatte man nur 640 Pixel horizontal in den Modi mit vernünftiger Anzahl 
an Farben.

von Peter B. (funkheld)


Lesenswert?

Danke.

ja das ist SVGA.
Ich weiss nur nicht mehr wie die Segmentadresse sich mit dem offset 
aufteilt bei den nächsten 64000 Byte.

von Εrnst B. (ernst)


Lesenswert?

Peter B. schrieb:
> Ich weiss nur nicht mehr wie die Segmentadresse sich mit dem offset
> aufteilt

Die physikalische Speicheradresse ist (in Real Mode)

Segment * 16 + Offset.

von Jim M. (turboj)


Lesenswert?

Peter B. schrieb:
> Ich weiss nur nicht mehr wie die Segmentadresse sich mit dem offset
> aufteilt bei den nächsten 64000 Byte.

Gibt es nicht.

Du musst der Karte sagen welchen Teil des (deutlich größeren) 
Framebuffers sie auf dem A000 Segment als Fenster abbilden soll damit 
die CPU darauf zugreifen kann.

Für die CPU liegen die Daten immer von (einschließlich) A000 bis 
(ausschließlich) B000 im Speicher.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Jim M. schrieb:
> Für die CPU liegen die Daten immer von (einschließlich) A000 bis
> (ausschließlich) B000 im Speicher.

Nö. Im Mode 00 belegt sie 128kB, beginnend bei 0hA0000 und endend bei 
0hBFFFF:

https://web.stanford.edu/class/cs140/projects/pintos/specs/freevga/vga/vgamem.htm#mapping

von Thomas Z. (usbman)


Lesenswert?

du must die neue Segmentadresse normalisieren
etwa so:
seg = (0xA000 * 16 + 64000) / 16

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.