TextMode 40x25 bei 8x16 Fontsize

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Antworten
Brueggi

TextMode 40x25 bei 8x16 Fontsize

Beitrag von Brueggi »

ich melde mich auch mal wieder zu Wort ;-)

Aktuell bastel ich gerade eine Umsetzung von Football Manager (Amstrad/Schneider CPC) - die soll dann später unter MS-DOS und BonnyDOS/286 laufen. Ich hab mir gedacht, ich nehme dazu den Textmodus. Da der CPC im Spiel auch nur den 40-Zeichenmodus nutzt, dachte ich mir, ich probier mal, wie das am PC aussieht.

Soweit so gut - nur schalte ich im Textmodus CO40 jetzt die Schrift von 9x16 auf 8x16, was im 80-Zeichemodus klappt, dann klackt mein Flexscan, das Bild erscheint mit dickem schwarzen Rand und der Hardware-Cursor blinkt rasend schnell (Rechner ist aber nicht abgestürzt). Ist das normal - oder ist das nicht das Gleiche, wie wenn ich im 80xyy Modus auf 8x16-Fonts umschalte?

(Rechner ist mein 486 SX-25 mit CL GD5426 Onboard-Karte)
wobo
DOS-Guru
Beiträge: 614
Registriert: So 17. Okt 2010, 14:40

Re: TextMode 40x25 bei 8x16 Fontsize

Beitrag von wobo »

Brueggi hat geschrieben: Soweit so gut - nur schalte ich im Textmodus CO40 jetzt die Schrift von 9x16 auf 8x16, was im 80-Zeichemodus klappt, dann klackt mein Flexscan, das Bild erscheint mit dickem schwarzen Rand und der Hardware-Cursor blinkt rasend schnell (Rechner ist aber nicht abgestürzt). Ist das normal - oder ist das nicht das Gleiche, wie wenn ich im 80xyy Modus auf 8x16-Fonts umschalte?

(Rechner ist mein 486 SX-25 mit CL GD5426 Onboard-Karte)
Müßte eigentlich schon klappen. Der 40x25 Mode ist ja hardware mäßig nichts anderes als ein 80x25 mit eingestelltem dot clock doubling. Am Timing für das Ausgabegerät (CRT, Flachbild) dürfte sich nichts ändern. Die Punktverdopplung macht die VGA normalerweise, ohne dass das Ausgabegerät was merkt.

Wie stellst Du denn von 9x16 auf 8x16 um? Im clocking mode register den 8-Punkte Mode anstelle des 9-Punkte Mode und den 25 Mhz clock an? Ist der Flexscan ein CRT oder was flacheres? Du kannst mir ja mal eine EXE schicken, dann teste ich das an meinem CRT, wenn Du einen Flachbildschirm hast.
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: TextMode 40x25 bei 8x16 Fontsize

Beitrag von DOSferatu »

Da gibts ein VGA-Register, wo man zwischen 8- und 9- Spaltenmode umschalten kann.
Ich schau mal bei Gelegenheit nach, welches das ist, bzw welches Bit man da flippen muß.
wobo
DOS-Guru
Beiträge: 614
Registriert: So 17. Okt 2010, 14:40

Re: TextMode 40x25 bei 8x16 Fontsize

Beitrag von wobo »

Also bei mir funktioniert das:

Code: Alles auswählen

uses crt, dos;

var r : registers;

begin
  r.ax := $0000;                   { Mode $00 = 40x25/16 }
  intr( $10, r );
  writeln( 'Mode 40x25...' );
  writeln( 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm' );
  writeln( 'Bitte Testtext eingeben und <Enter> fuer' );
  writeln( 'fertig druecken...' );
  readln;
  port[$3c4] := $01;               { von 9 dot auf 8 dot wechseln }
  port[$3c5] := port[$3c5] or 1;   { durch Setzen von Bit 0   }
  r.ax := $1000;                   { Bildschirmausrichtung anpassen }
  r.bl := $13;
  intr( $10, r );
  writeln( 'Nochmal <Enter> druecken!' );
  readln;
end.
System: 486sx25, vga: et4000, Multiscan - Monitor

Der Pixeltakt darf dabei nicht von 28 auf 25 Mhz umgestellt werden, sonst habe ich diesselben Symptome wie Brueggi.
Damit duerfte das ganze aber nicht auf Original 31.5khz-Festfrequenzler laufen...
Brueggi

Re: TextMode 40x25 bei 8x16 Fontsize

Beitrag von Brueggi »

Hi Ihr :-)

@Wobo: Das is alles?!? Ich nehme da einen Code aus der CD-Version vom PC Intern... der is vieeeel länger (im 80Z-Modus geht er aber ohne Probleme). Und nun machst du das Selbe mit den paar Zeilen Code... Ich schmunzel schon ein wenig :-) Ich werde deinen Code mal testen und berichten.
wobo
DOS-Guru
Beiträge: 614
Registriert: So 17. Okt 2010, 14:40

Re: TextMode 40x25 bei 8x16 Fontsize

Beitrag von wobo »

Hier die Version, die auch auf einem Festfrequenzler laufen müßte (ich kann das jetzt noch nicht verifizieren, frühestens erst am WE; die alte Version dürfte einem Festfrequenzler _nicht_ gut tun!):

Code: Alles auswählen

uses crt, dos;

var r : registers;

begin
  r.ax := $0000;                       { Mode $00 = 40x25/16 }
  intr( $10, r );
  writeln( 'Mode 40x25...' );
  writeln( 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm' );
  writeln( 'Bitte Testtext eingeben und <Enter> fuer' );
  writeln( 'fertig druecken...' );
  readln;
  Port[$3c4] := $00;                   { Sequencer Reset einleiten }
  Port[$3c5] := $01;
  Port[$3c2] := Port[$3cc] and not 12; { 25 Mhz Clock }
  Port[$3c4] := $01;                   { von 9 dot auf 8 dot wechseln }
  Port[$3c5] := port[$3c5] or 1;       { durch Setzen von Bit 0 }
  Port[$3c4] := $00;                   { Reset Ende }
  Port[$3c5] := $03;
  r.ax := $1000;                       { Bildschirmausrichtung anpassen }
  r.bl := $13;
  intr( $10, r );
  writeln( 'Nochmal <Enter> druecken!' );
  readln;
  TextMode( co80 );                    { 80x25 setzen }
end. 
Sind also doch recht viele Zeilen geworden.
Antworten