Forum: PC-Programmierung ASCII-Zeichen selber entwickeln um im (VGA)Screen Modus 8 nutzen.


von Peter B. (funkheld)


Lesenswert?

Hallo, guten Tag.

Wie kann man einen eigenen ASCII-Code  für den Screen 8 (VGA) nutzen.
Wo wird er hingepackt und wie kann man bitte da drauf greifen.

Ich möchte einen Emulator im Tetxmodus herstellen.

Danke.

von Dirk B. (dirkb2)


Lesenswert?

Das S in ASCII steht für Standard (das C für Code)
Demnach gibt es kein eigenes ASCII

Möchtest du einen anderen Font/Symbole benutzen oder die Zuordnung vom 
Code zum darzustellendem Zeichen ändern?

von Rolf M. (rmagnus)


Lesenswert?

Peter B. schrieb:
> Wie kann man einen eigenen ASCII-Code  für den Screen 8 (VGA) nutzen.

Was ist ein "eigener ASCII-Code"?

von VGAChar (Gast)


Lesenswert?

Ich kann mir denken, was das werden soll.

Damals(tm) gab es auf fast allen Treiberdisketten zu den VGA-Karten ein 
Tool um Zeichen im Zeichensatz "umzumalen".

Ich habe dies benutzt um ASCII-Spiele etwas ansehnlicher zu machen.
Hatte allerdings den Nachteil, dass auch die Texte manchmal unleserlich 
wurden. (Die sahen dann aus wie Hieroglyphen)

Ich bezweifle aber, dass dies noch unter modernen Betriebssystemen 
geht...

von Peter B. (funkheld)


Lesenswert?

Ich möchte die Zeichen(Chars) selber schreiben und dann mit den Tasten 
auf den Screen sichtbar machen. Es soll die ROM-Chars ersetzen.

Wie kann man bitte meinen Charsatz dem Programm (Turbo Pascal ,  Borland 
c++ , PDS 7.1) zugänglich machen.

: Bearbeitet durch User
von W. (Gast)


Lesenswert?

Ich hatte mal mit lcd-image-converter[1] die einzelnen Zeichen gemalt.

[1] https://www.riuson.com/lcd-image-converter

von Peter B. (funkheld)


Lesenswert?

Danke für die info.

Malen kann ich sie.

Wie bekomme ich den Charset auf einem MS-DOS-Rechner 386 sichtbar , ohne 
in den Grafikmodus zu schalten.

von Dirk B. (dirkb2)


Lesenswert?

Mit Hilfe des VGA-BIOS:

Die Beschreibung gibt es noch: 
http://www.mcamafia.de/pdf/ibm_vgaxga_trm2.pdf

: Bearbeitet durch User
von WIRO (Gast)


Lesenswert?

Hier findet man ausführliche Informationen:
[[https://borncity.com/web/Library/DOSProgHB.PDF]]
Suche nach "Bitmuster" führt zum INT 1F.

Gruß
WIRO

von Peter B. (funkheld)


Lesenswert?

Danke für die Info.

Da es drin, was mir weiter hilft.

von Thomas Z. (usbman)


Lesenswert?

noch ein Literatur Hinweis
https://www.springer.com/de/book/9783322872395
Systemnahe Programmierung mit Borland Pascal

Dort ist in Kapitel 7 die VGA Programmierung beschrieben
INT 11h subfunktion 21h ist die Funktion zum Laden von Zeichensätzen im 
Textmode

Das Buch kann man noch kaufen, die Diskette bei Springer runterladen.
Das Buch gibt's auch auf Google books und div anderen Anbietern und es 
ist auf Deutsch.

von Peter B. (funkheld)


Angehängte Dateien:

Lesenswert?

Hallo, guten Tag.
Ich verstehe hier die Antwort nicht im Bild.
Wenn ich jetzt AL=1 nehme, muss da alles festgelegt werden?
Wo wird da ES:BP übergeben die ich bekomme?

danke

: Bearbeitet durch User
von Einer (Gast)


Lesenswert?

Peter B. schrieb:
> Wenn ich jetzt AL=1 nehme

Bei AL=1 werden die eingebauten Zeichensätze benutzt.
Da hat nur noch BL einfluss.

von Peter B. (funkheld)


Lesenswert?

Danke für die Info.

Jetzt funktioniert es im Textmodus mit den selbst erstellten Font.

von Peter B. (funkheld)


Angehängte Dateien:

Lesenswert?

Hallo, guten Tag.
Mit welchen Befehl kann man bitte die Textzeichen setzen ohne das ein 
Zwischenraum ist?

Ich habe die Werte mit $FF gefüllt bei meinen erstellten Buchstaben, 
eigentlich sollte kein Zwischenraum sein.

Danke.

: Bearbeitet durch User
von Nils (Gast)


Lesenswert?

Tja, das ist leider so.

Die VGA Karte fügt eine neunte Spalte selbst ein. Ausnahmen sind hier 
die Zeichen 0xc0 bis 0xdf. Das sind die Box Drawing Characters im 
original Zeichensatz. Dort wird die neunte Spalte durch Wiederholung des 
achten Pixels des Zeichens erzeugt.

von Peter B. (funkheld)


Lesenswert?

Danke.

Kann man da irgend etwas mit ASM ändern?

von Dirk B. (dirkb2)


Lesenswert?

Du kannst die Register der VGA-KArte auch mit anderen Sprachen 
beschreiben (sofern sie das unterstützt)

von Dirk B. (dirkb2)


Lesenswert?


von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Oder auf den Zeichensatz im Grafikmodus komplett verzichten und Punkt 
für Punkt selbst zeichen. Dann kannst Du bauen was immer Du möchtest.

Welche Auflösung war denn Screen 8? Unter DOS war es doch gar nicht so 
einfach, an die höheren Auflösungen oder True-Color-Modi dranzukommen. 
Wenn ich mich recht erinnere, musste man dafür doch die Grafikkarte 
direkt ansprechen.

von Peter B. (funkheld)


Lesenswert?

Im Grafikmodus VGA320x200 kann ich Zeichnen.

Ich suche eine Lösung ob man irgendwie die 9. Zeile zusammenrücken kann 
im Tetxmodus.

Ich verstehe die Tabellen oben nicht so, das ich da eine Lösung finde 
welchen Port ich wie setzen muss.

Danke

von Peter B. (funkheld)


Angehängte Dateien:

Lesenswert?

Wie schafft man es hier bei diesen Text-Fenster durchgehende Kästchen zu 
Zeichnen ohne die fehlende Linie? Findet man fast in jeder 
Programmiersprache.

Danke.

: Bearbeitet durch User
von cppbert (Gast)


Lesenswert?

Nils schrieb:
> Ausnahmen sind hier
> die Zeichen 0xc0 bis 0xdf. Das sind die Box Drawing Characters im
> original Zeichensatz.

immer alles lesen

von Peter B. (funkheld)


Lesenswert?

Danke.
Hatte ich nicht so verstanden.

Kann man die eigenen Zeichen mit den Befehl ausstatten?

: Bearbeitet durch User
von Dirk B. (dirkb2)


Lesenswert?

Peter B. schrieb:
> Danke.
> Hatte ich nicht so verstanden.
>
> Kann man die eigenen Zeichen mit den Befehl ausstatten?

Wenn sie im Bereich 0xc0 bis 0xdf liegen.

von Dirk B. (dirkb2)


Lesenswert?

Peter B. schrieb:
> Ich verstehe die Tabellen oben nicht so, das ich da eine Lösung finde
> welchen Port ich wie setzen muss.

Du musst einzelne Bits in den Registern setzen oder löschen.

Wie das geht, hängt von der Programmiersprache ab.
Für C müsste es im Forum auch ein Tutorial geben.

Edit: da ist es ja: 
https://www.mikrocontroller.net/articles/Bitmanipulation

: Bearbeitet durch User
von Peter B. (funkheld)


Lesenswert?

Danke.


Diese suche ich, damit ich die Strichlinie weg bekomme.
---------------------------------
Du musst einzelne Bits in den Registern setzen oder löschen.
---------------------------------

von cppbert (Gast)


Lesenswert?

Dirk B. schrieb:
> Peter B. schrieb:
>> Ich verstehe die Tabellen oben nicht so, das ich da eine Lösung finde
>> welchen Port ich wie setzen muss.
>
> Du musst einzelne Bits in den Registern setzen oder löschen.
>
> Wie das geht, hängt von der Programmiersprache ab.
> Für C müsste es im Forum auch ein Tutorial geben.
>
> Edit: da ist es ja:
> https://www.mikrocontroller.net/articles/Bitmanipulation

er weiss nicht welche Bits

von Dirk B. (dirkb2)


Lesenswert?

cppbert schrieb:
> er weiss nicht welche Bits

Das Bit 0 (9/8 Dot) im Clocking Mode Register (Index 01h).

Eine Belegung hatte ich schon verlinkt.

von cppbert (Gast)


Lesenswert?

Peter B. schrieb:
> Wie schafft man es hier bei diesen Text-Fenster durchgehende Kästchen zu
> Zeichnen ohne die fehlende Linie? Findet man fast in jeder
> Programmiersprache.

in dem du nur die Blockzeichen verwendest die im Bereich 0xc0 bis 0xdf 
liegen, so macht das die Applikation auf dem Screenshot - ohne eigenen 
Font und Register-Programmierung

von Peter B. (funkheld)


Angehängte Dateien:

Lesenswert?

Danke für die Hilfe.
Ich brauche 90 Blockgrafiken.

Jetzt funktioniert es.
Ich habe 6 neue Blöcke erzeugt als Muster die jetzt zusammen abgebildet 
werden zum Test.
3x2
--------------------------------
Program neuchar;

Uses
  Dos,Crt;

  var
    ofss : word;
    segm : word;

  CONST
  chardata : Array[1..96] of Byte = (
  $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,
  $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,
  $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,
  $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,
  $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,
  $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
   );

Procedure setlinie;
BEGIN
  asm
  mov dx,3c5h
  mov al,1
  out dx,al
  end;
END;

Procedure loadchar;
BEGIN
  segm:=seg(chardata);
  ofss:=ofs(chardata);
  asm
     mov ah,11h
     mov al,00h
     mov bh,10h
     mov bl,00h
     mov cx,6
     mov dx,65
     mov es,segm
     mov bp,ofss
     int 10h
  end;
END;

begin
  setlinie;
  loadChar;
  ClrScr;

  Write(#65);
  Write(#66);
  Write(#67);
  Writeln('');
  Write(#68);
  Write(#69);
  Write(#70);
  Writeln('');
  readln;
end.
---------------------------------------------

von Dirk B. (dirkb2)


Lesenswert?

Peter B. schrieb:
> Procedure setlinie;
> BEGIN
>   asm
>   mov dx,3c5h
>   mov al,1
>   out dx,al
>   end;
> END;

So einfach geht es nicht.
Steht aber alles in dem Link.

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

Das Sequencer-Register besteht aus mehreren Unterregister, die rst noch 
adressiert weerden müssen.
zudem musst du unbedingt den alten Wert lesen und mit dem gewünschten 
Wert manipulieren, damit keine Nebeneffekte auftauchen.

von Peter B. (funkheld)


Lesenswert?

.............................
zudem musst du unbedingt den alten Wert lesen und mit dem gewünschten
Wert manipulieren, damit keine Nebeneffekte auftauchen.
............................

Das ist logisch.

Ich habe es nur auf die schnelle getestet nach dem ich lange gesucht 
habe wie man es machen kann.

Ich kann alle Chars ändern, kann sie wie Sprite bewegen , nur in 
Achterschritten , kann die Farbe ändern.
Alles ohne Störungen.

Ich habe mein Ziel erreicht.

: Bearbeitet durch User
von cppbert (Gast)


Lesenswert?

Peter B. schrieb:
> Das ist logisch.
>
> Ich habe es nur auf die schnelle getestet nach dem ich lange gesucht
> habe wie man es machen kann.

dein Code programmier aber deine VGA Karte gar nicht richtig

1. du must den Index 1 in 3c4 schreiben
2. die Daten in 3c5 ändern - nicht überschreiben

alles andere ist einfach falsch und auch nicht richtig nur weil das bei 
dir richtig "aussieht"

von cppbert (Gast)


Lesenswert?

cppbert schrieb:
> Peter B. schrieb:
>> Das ist logisch.
>>
>> Ich habe es nur auf die schnelle getestet nach dem ich lange gesucht
>> habe wie man es machen kann.
>
> dein Code programmier aber deine VGA Karte gar nicht richtig
>
> 1. du must den Index 1 in 3c4 schreiben
> 2. die Daten in 3c5 ändern - nicht überschreiben
>
> alles andere ist einfach falsch und auch nicht richtig nur weil das bei
> dir richtig "aussieht"

du hast scheinbar nur Glück das dein Index schon auf 1 steht oder sowas 
- ist aber nicht garantiert und kann jederzeit anders sein und dann 
schreibst du mit 1 was völlig anderes als du denkst

mach es richtig dann funktioniert es auch IMMER richtig

von cppbert (Gast)


Lesenswert?

cppbert schrieb:
> cppbert schrieb:
>> Peter B. schrieb:
>>> Das ist logisch.
>>>
>>> Ich habe es nur auf die schnelle getestet nach dem ich lange gesucht
>>> habe wie man es machen kann.
>>
>> dein Code programmier aber deine VGA Karte gar nicht richtig
>>
>> 1. du must den Index 1 in 3c4 schreiben
>> 2. die Daten in 3c5 ändern - nicht überschreiben
>>
>> alles andere ist einfach falsch und auch nicht richtig nur weil das bei
>> dir richtig "aussieht"
>
> du hast scheinbar nur Glück das dein Index schon auf 1 steht oder sowas
> - ist aber nicht garantiert und kann jederzeit anders sein und dann
> schreibst du mit 1 was völlig anderes als du denkst
>
> mach es richtig dann funktioniert es auch IMMER richtig

also eher so
1
mov dx,3c4h // sequencer index register
2
out dx,1 // 1 = clocking mode register
3
4
mov dx,3c5h // sequencer data register
5
in al,dx // ist-wert lesen
6
7
or al,1 // das 1. bit auf 1 den rest belassen
8
out dx,al

von Peter B. (funkheld)


Lesenswert?

Also dieses:
mit cli /sti ?
-------------------
mov dx,3c4h
mov al,1
out dx,al

mov dx,3c5h
in al,dx
or al,00000001h
out dx,al
--------------------
Danke

von Dirk B. (dirkb2)


Lesenswert?

Peter B. schrieb:
> or al,00000001h
Das wäre von der Notation ein 32-Bit Wert. Bisschen dick augetragen für 
1 Byte.

01h oder 0000001b oder 1

Der Wert ist derselbe. Aber bei 00000010h sieht es dann schon anders 
aus.

von Peter B. (funkheld)


Lesenswert?

Da ich mich hier verschrieben.

von Peter B. (funkheld)


Lesenswert?

Bei dem OR oben habe ich mich verschrieben.

Wenn ich jetzt in den VGA-Modus 7 schalte :
Grafik 320x200 und Text ( 8 Seiten), kann ich die Buchstaben nicht 
ändern.
Geht da die Änderung nicht ? Oder muss ich da bitte andere Daten setzen? 
Und
welche?

--------------------------
  Les  BP,SegAddr
  mov ah,11h
  mov al,00h
  mov bh,10h
  mov bl,0
  mov cx,11
  mov dx,65
  int 10h
-------------------------

Danke.

: Bearbeitet durch User
von WIRO (Gast)


Lesenswert?

Kannst Du die finale Lösung bitte noch zeigen?
Danke!

Gruß
WIRO

von Peter B. (funkheld)


Lesenswert?

Welche Lösung meinst du bitte?

von WIRO (Gast)


Lesenswert?

Ich habe Dein Programm vom 01.04.2020 16:59 erfolgreich getestet, da es 
für mich auch interessant ist. In der Zwischenzeit kamen doch noch 
diverse Kommentare zu Fehlerquellen. Was müsste diesbezüglich an Deinem 
Programm (s. o.) korrigiert werden?

(Interessant wäre noch, wie man den Standardzeichensatz wieder 
aktiviert.)

Gruß
WIRO

von Mario M. (thelonging)


Lesenswert?

Peter B. schrieb:
> Wenn ich jetzt in den VGA-Modus 7 schalte :
> Grafik 320x200 und Text ( 8 Seiten), kann ich die Buchstaben nicht
> ändern

Für die Grafikmodi muss man die Subfunktionen ab 20h nehmen.
https://dos4gw.org/INT_10h_11h_17_Character_Generator_EGA

von Peter B. (funkheld)


Lesenswert?

Hier ist die bereinigte Version TP 6.0 :
Mit Q/A wechselt man die jeweils 6 Chars , die ohne Zwischenlinie 
erscheinen. Mit "menge" gehe ich die Anzahl der Char an und mit "anfang" 
ab welcher Charnummer man beginnen soll. Bei mir sind es 12 Char die bei 
Nummer 65 anfangen.

Hier waren Fehler drin : Procedure setlinie;
Die ich bereinigt haben nach besten wissen.
--------------------------------------------
Program neuchar;

Uses
  Dos,Crt;

  var
    ofss : word;
    segm : word;
    ch: char;

   CONST
  chardata : Array[1..192] of Byte = (
  $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,
  $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,
  $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,
  $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,
  $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,
  $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,

  $ff,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,
  $ff,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,
  $ff,$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,
  $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$ff,
  $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$ff,
  $1,$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,$ff
  );

Procedure setlinie;
BEGIN
  asm
  cli
  mov dx,3c4h
  mov al,1
  out dx,al

  mov dx,3c5h
  in al,dx
  or al,1
  out dx,al
  sti
  end;
END;

Procedure loadchar(menge,anfang:word);
BEGIN
  segm:=seg(chardata);
  ofss:=ofs(chardata);
  asm
     mov ah,11h
     mov al,00h
     mov bh,10h
     mov bl,00h
     mov cx,menge
     mov dx,anfang
     mov bp,ofss
     int 10h
  end;
END;

Procedure set1;
BEGIN
  ClrScr;
  Write(#65);
  Write(#66);
  Write(#67);
  Writeln('');
  Write(#68);
  Write(#69);
  Write(#70);
END;

Procedure set2;
BEGIN
  ClrScr;
  Write(#71);
  Write(#72);
  Write(#73);
  Writeln('');
  Write(#74);
  Write(#75);
  Write(#76);
  Writeln('');
END;

begin
  setlinie;
  loadChar(12,65);
  ClrScr;

  repeat
    ch := ReadKey;
    case ch of
      'q': set1;
      'a': set2;
    end;
  until ch = #27;
end.

-------------------------------------

Ich wollte mal ein Spiel mit 70 Jahren erstellen ohne den Grafikmodus.
So wie man es in den Anfängen gemacht hat.

https://de.wikibooks.org/wiki/Interrupts_80x86/_INT_10

Unter Funktion 11h ist eine Liste wie man auf die einzelnen ROM schalte.

: Bearbeitet durch User
von Peter B. (funkheld)


Lesenswert?

Danke Mario.
--------------------------------
20h - Load user-defined 8 x 8 character font (graphics
mode)
ES:BP    Pointer to user graphics table for
graphics characters 128-255. INT 1Fh
is set to this pointer
--------------------------------

Diesen Satz verstehe ich nicht:
INT 1Fh is set to this pointer


Geht dieses auch bitte:
------------------------------
21h - Load user-defined character font (graphics mode)
ES:BP    Pointer to user graphics table for
graphics characters 0-255
CX       Bytes per Character
BL       Number of Rows
00h - DL contains number of rows
01h - 14 (0Eh) rows
02h - 25 (19h) rows
03h - 43 (2Bh) rows
-----------------------------

danke.

: Bearbeitet durch User
von Mario M. (thelonging)


Lesenswert?

Das BIOS muss ja speichern, wo Deine Zeichentabelle liegt. Das tut es 
indem der Interruptvektor Int 1Fh mit der übergebenen Adresse geladen 
wird. Er zeigt also nicht auf eine Interruptroutine, sondern auf die 
Zeichentabelle.

: Bearbeitet durch User
von Peter B. (funkheld)


Lesenswert?

Danke.

Wie wird der  INT 1F bitte hier untergebracht?
---------------------------

Procedure loadchar(menge,anfang:word);
BEGIN
  segm:=seg(chardata);
  ofss:=ofs(chardata);
  asm
     mov ah,11h
     mov al,00h
     mov bh,10h
     mov bl,00h
     mov cx,menge
     mov dx,anfang

     mov bp,ofss
     int 10h
  end;
END;
-----------------------------

von Mario M. (thelonging)


Lesenswert?

Peter B. schrieb:
> Wie wird der  INT 1F bitte hier untergebracht?

Gar nicht, das macht der Int 10h.

von WIRO (Gast)


Lesenswert?

Die bereinigte Version TP 6.0 funktioniert nicht. Da stimmt mit der 
procedure setlinie irgendwas nicht.
(Die Unit "DOS" wird nicht benötigt.)

Gruß
WIRO

von Peter B. (funkheld)


Angehängte Dateien:

Lesenswert?

------------------------------
Da stimmt mit der
procedure setlinie irgendwas nicht.
------------------------------
Hier steht auch  noch etwas über VGA  Chars für TP :
http://swag.outpostbbs.net/CHARS/index.html

Und hier über die Linie 9:
Grafik im Textmodus.
https://guru-home.dyndns.org/Grafik-Textmodus.html

Was geht genau nicht bei dir.

Ich habe das Programm auf meine 2 Pc-MiniOltimer getestet unter DOS 3.2 
und mit der DosBox. Es funktioniert.

: Bearbeitet durch User
von WIRO (Gast)


Lesenswert?

Die erste Version funktioniert einwandfrei.
Mit der "bereinigten Version" erscheint am Monitor "Signal außerhalb des 
Bereiches" und das OS stürzt gnadenlos ab.

Meine Konfiguration:
Intel 486DX2, DOS 6.00, TP 6.0

Gruß
WIRO

von Peter B. (funkheld)


Lesenswert?

Meine erste Version ist falsch.
Es wurde hier durch Fachleute gesagt , das es nur zufällig funktioniert.

Ich habe die zweite Version nach wissen der Ratschläge hier gemacht.
Die nach meiner nochmaligen Kontrolle richtig ist.

Lies den Text hier unten:
(https://guru-home.dyndns.org/Grafik-Textmodus.html)
------------------------------
VGA-Karten müssen – im Gegensatz zu EGA-Grafikadaptern – zusätzlich von 
der 9 Bit breiten Zeichenmaske, bei der die letzte Bitspalte ja 
lediglich angehängt ist, auf die Darstellung der wirklich vorhandenen 8 
Bit breiten Maske umgeschaltet werden. Hierzu wird das 
Clocking-Mode-Register des Sequencers umprogrammiert. Heute übliche 
Multisync- oder Multiscan-Monitore haben keine Probleme, diese um 1/9 je 
Rasterzeile kürzeren Videosignale zu synchronisieren. Sollten sie mit 
Ihrem Monitor jedoch Probleme haben, so müssen die Register des 
CRT-Controllers neu programmiert werden.
------------------------------

: Bearbeitet durch User
von WIRO (Gast)


Lesenswert?

Der Absturz erfolgt bei:
  out dx,al

Gruß
WIRO

von WIRO (Gast)


Lesenswert?

Ich muss mich revidieren, es ist kein Absturz, es ist tatsächlich der 
Monitor, der das nicht darstellen kann.
(Tschuldigung!)

von Peter B. (funkheld)


Lesenswert?

Was für einen alten Monitor hast du denn?

von Dirk B. (dirkb2)


Lesenswert?

WIRO schrieb:
> Ich muss mich revidieren, es ist kein Absturz, es ist tatsächlich der
> Monitor, der das nicht darstellen kann.
> (Tschuldigung!)

Dann musst du wohl noch den Pixelclock mit ändern (verringern), da jetzt 
nur noch 640 Pixel statt 720 kommen und die VGA Karte jetzt eine Zeile 
schneller fertig bekommt.

: Bearbeitet durch User
von Peter B. (funkheld)


Lesenswert?

Hier steht oben drin:
-----------------------------------------
...müssen die Register des
CRT-Controllers neu programmiert werden.
-----------------------------------------

Wenn es bei dir läuft erzähl mal was du wie geändert hast im CRT?

: Bearbeitet durch User
von WIRO (Gast)


Lesenswert?

Mein Monitor ist ein BenQ FP91G X, der bisher auch bei unterschiedlichen 
Auflösungen keine Probleme gezeigt hat.

von Peter B. (funkheld)


Lesenswert?

So einen ähnlichen 15 Euro Monitor habe ich noch im Schrank stehen.
Der macht auch nicht viele Auflösungen mit , gerade wenn es um 
verschiedene Auflösungen geht mit Frequenzen verändern usw.

Da ich gerne Experimente mache (keine Basteleien) habe ich mir einen 
gekauft der automatisch einen großen Bereich abdeckt.

: Bearbeitet durch User
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.