ich habe noch ein kleines Problem mit meiner ASM-Baustelle.
Und zwar ist der Farbraum im Textmodus ja so eingeteilt: 16 Vordergrundfarben, 8 Hintergrundfarben und 1 Blinkbit.
Ich brauche das Blinken nicht und hätte gerne 16 Hintergrundfarben.
Mein Programm schreibt den Bildschirm voll mit Char 220, um einen Fake-Grafikscreen mit 80x50 px zu erhalten (immer zwei Pixel pro Char, einer über Vordergrundfarbe, einer über Hintergrundfarbe angesprochen).
Das zu rendernde Bild enthält leider auch Gelb und Weiß. Daraus werden Grau und Kackabraun mit Geblinke.
Code: Alles auswählen
...
;screen 03, 80x25 Char
mov ax, 0003h
mov bx, 0
mov cx, 0
mov dx, 0
int 10h
;blink off for CGA
mov ax,40h ;get port address
mov es,ax
mov dx,[es:063h]
add dx,4
mov al,[es:065h] ;take settings
and al,0dfh ;flick off bit 5 (Blink)
out dx,al ;send it to port in dx
mov [es:065h],al ;write changed flags back
;blink off for VGA
mov ax, 1003h
mov bx, 0
int 10h
...
- Die für CGA habe ich mir aus Internet-Häppchen zusammengeschustert. Funktioniert aber, jedoch direkt in Port zu schreiben ist wohl nicht die beste Methode.
- EGA bekomme ich gar nicht hin. Laut Doku gilt die VGA-Ausführung auch dafür. Klappt trotzdem nicht
- Das Bild müsste für MDA und Hercules auf S/W runtergerechnet werden. (Oder zumindest gesagt werden, dass mind. CGA benötigt wird, um die App auszuführen)
Nun meine 2 Fragen:
- Wie erkenne ich, welcher Grafikadaptertyp überhaupt verwendet wird? Zur Zeit werden ja immer beide Methoden ausgeführt.
- Wie stelle ich das Blinken bei EGA ab?
Edit:
CGA-Verhau kommentiert