Textmode 80x25 und 80x50

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Textmode 80x25 und 80x50

Beitrag von oDOSseus »

Hallo zusammen

Schonwieder ein neuer thread von mir, aber ich fand bei google keine Informationen darüber.
Aber von euch weiß es sicher jemand:
Wie kann ich zwischen den Text-Modi 80x50 und 80x25 hin und her schalten?

Die programmiersprache in der das geschieht kann C oder ASM sein. Aber wahrscheinlich muss es ja ASM sein xD

ich freue mich auf Antworten,
oDOSseus
freecrac
DOS-Guru
Beiträge: 861
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: Textmode 80x25 und 80x50

Beitrag von freecrac »

oDOSseus hat geschrieben:Hallo zusammen

Schonwieder ein neuer thread von mir, aber ich fand bei google keine Informationen darüber.
Aber von euch weiß es sicher jemand:
Wie kann ich zwischen den Text-Modi 80x50 und 80x25 hin und her schalten?

Die programmiersprache in der das geschieht kann C oder ASM sein. Aber wahrscheinlich muss es ja ASM sein xD

ich freue mich auf Antworten,
oDOSseus
Dabei kann ich helfen.
In meinem Textbetrachter wird ggf. auch hin und her geschaltet wenn vorher 80x25 eingestellt war:
http://www.alice-dsl.net/freecracmaps/Tool/TEXT-OUT.ZIP
Siehe dazu auch meinen Beitrag: Text butterweich scrollen(Panning)
http://www.dosforum.de/viewtopic.php?f=15&t=5900

80x50

Code: Alles auswählen

30 DB     xor bl, bl      ; Inhalt löschen
B8 12 11  mov ax,  1112h  ; 80x50
CD 10     int  10h

RBIL->inter61a.zip->INTERRUP.A
--------V-101112-----------------------------
INT 10 - VIDEO - TEXT-MODE CHARGEN - LOAD ROM 8x8 DBL-DOT PATTERNS (PS,EGA,VGA)
	AX = 1112h
	BL = block to load
Return: nothing
Notes:	(see AX=1110h)
SeeAlso: AX=1103h,AX=1110h,AX=1111h,AX=1114h,AH=1Bh,AX=CD10h
80x25

Code: Alles auswählen

30 DB     xor bl, bl
B8 14 11  mov ax,  1114h  ; 80x25
CD 10     int  10h

RBIL->inter61a.zip->INTERRUP.A
--------V-101114-----------------------------
INT 10 - VIDEO - TEXT-MODE CHARGEN - LOAD ROM 8x16 CHARACTER SET (VGA)
	AX = 1114h
	BL = block to load
Return: nothing
Notes:	(see AX=1110h)
Ralf Browns x86/MSDOS Interrupt List(RBIL)
http://www.pobox.com/~ralf
http://www.pobox.com/~ralf/files.html
ftp://ftp.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/

Dirk
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: Textmode 80x25 und 80x50

Beitrag von oDOSseus »

vielen herzlichen Dank.

Das hat mir weiter geholfen. Und es sind so herrlich wenige Zeilen =)

Das werde ich direkt einbauen, danke
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: Textmode 80x25 und 80x50

Beitrag von oDOSseus »

Gelöscht, da falsch platziert.
Zuletzt geändert von oDOSseus am Sa 14. Aug 2010, 14:37, insgesamt 1-mal geändert.
freecrac
DOS-Guru
Beiträge: 861
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: Textmode 80x25 und 80x50

Beitrag von freecrac »

oDOSseus hat geschrieben:vielen herzlichen Dank.

Das hat mir weiter geholfen.
prima
Und es sind so herrlich wenige Zeilen =)
Wenn man die 7 Bytes z.B als "Z50.com" abspeichert ist der Name genauso lang wie das Programm. :-D
Das werde ich direkt einbauen, danke
Mir persöhnlich gefällt 80x50 besser und so schalte ich es auch nach dem Booten gleich ein.

Dirk
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: Textmode 80x25 und 80x50

Beitrag von oDOSseus »

eine Frage hätte ich da noch:
Wenn ich bei 80x25 Text darstellen will, dann schreibe ich ihn immer direkt in den dafür vorgesehen Bereich im Speicher (0xB8000000). Das is ja auch nich so schwer mit 1 Byte Buchstabe und 1 Byte formatierung. Wie aber ist es bei 80x50er auflösung? Wo muss ich dahin schreiben? Diese Lösung wäre mir in C am liebsten, da ich in Assembler erst noch einiges aufarbeiten muss.

Außerdem:
hat der 80x50 modus einen besonderen Namen? dann kann ich danach vernünftig googlen. die suche nach "80x50" und einem suchwort befördert meist nur Müll zu tage.
freecrac
DOS-Guru
Beiträge: 861
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: Textmode 80x25 und 80x50

Beitrag von freecrac »

oDOSseus hat geschrieben:eine Frage hätte ich da noch:
Wenn ich bei 80x25 Text darstellen will, dann schreibe ich ihn immer direkt in den dafür vorgesehen Bereich im Speicher (0xB8000000). Das is ja auch nich so schwer mit 1 Byte Buchstabe und 1 Byte formatierung. Wie aber ist es bei 80x50er auflösung? Wo muss ich dahin schreiben? Diese Lösung wäre mir in C am liebsten, da ich in Assembler erst noch einiges aufarbeiten muss.

Außerdem:
hat der 80x50 modus einen besonderen Namen? dann kann ich danach vernünftig googlen. die suche nach "80x50" und einem suchwort befördert meist nur Müll zu tage.
Den Namen dafür kenne ich auch nicht.

Der Textbildschirm wird um 25 Zeilen größer und beim Zugriff auf die nachfolgenden 25 Zeilen wird der Zeiger wie bisher einfach nur weiter erhöht.

..

Ganz praktisch wenn man den momentanen Eingabebildschirm vor dem Starten der Anwendung so belässt wie er ist und nicht mit eigenen Textausgaben überschreibt.
So kann man seine eigene Ausgaben z.B. auf der zweiten Bildschirmseite machen und der Zustand von Seite 0 bleibt unverändert.
Wenn man zwischen verschiedenen Bildschirmseiten(Pages) hin und her umschalten möchte, muss nun der doppelte Speicherbedarf der Bildschirmseite(80x50) berücksichtigt werden,
da sich damit die Startadressen der nachfolgenden Pages geändert haben. Ich vermute die Anzahl der verfügbaren Pages insgesamt wird sich halbiert haben.

Dirk
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: Textmode 80x25 und 80x50

Beitrag von oDOSseus »

Hab ich schon versucht.
Klappte erst nicht.
Aber jetzt irgendwie schon xD
seltsam seltsam
Des weiteren ist bei mir DOS dabei abgestürzt. Das sollte mir zu denken geben xD
freecrac
DOS-Guru
Beiträge: 861
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: Textmode 80x25 und 80x50

Beitrag von freecrac »

oDOSseus hat geschrieben:Hab ich schon versucht.
Klappte erst nicht.
Aber jetzt irgendwie schon xD
seltsam seltsam
Des weiteren ist bei mir DOS dabei abgestürzt. Das sollte mir zu denken geben xD
Zum Testen könntest du dieses hier mal davor setzen, ggf. hat eine vorherige Anwendung etwas verstellt:

mov ax, 3 ; Textmode(color) einschalten.
int 10h

Dirk
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: Textmode 80x25 und 80x50

Beitrag von oDOSseus »

Sicher, dass du den interrupt meinst?
http://www.ctyme.com/intr/rb-0088.htm
freecrac
DOS-Guru
Beiträge: 861
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: Textmode 80x25 und 80x50

Beitrag von freecrac »

oDOSseus hat geschrieben:Sicher, dass du den interrupt meinst?
http://www.ctyme.com/intr/rb-0088.htm
Den meinte ich nicht, sondern diesen hier:
http://www.ctyme.com/intr/rb-0069.htm

VIDEO - SET VIDEO MODE

AH = 00h
AL = desired video mode (see #00010)

03h = T 80x25 8x8 640x200 16 4 B800 CGA,PCjr,Tandy
= T 80x25 8x14 640x350 16/64 8 B800 EGA
= T 80x25 8x16 640x400 16 8 B800 MCGA
= T 80x25 9x16 720x400 16 8 B800 VGA
= T 80x43 8x8 640x350 16 4 B800 EGA,VGA [17]
= T 80x50 8x8 640x400 16 4 B800 VGA [17]

Die Register AX, BX, CX und DX kann man in Highbyte und Lowbyte unterteilen und auch jeweils seperat auf diese Bytes mit ihrem jeweiligen Registernamen zugreifen.
Das AX -Register wird unterteilt in Lowbyte(AL) und dem Highbyte(AH).
BL + BH = BX
CL + CH = CX
DL + DH = DX

Mit "mov ax, 0003" wird AH = 00 und AL = 03. (Die vorderen Nullen habe ich hier mal zum besseren Verständniss mit eingetragen.)
Vergleichsweise könnte man auch dafür "mov ah, 0" und "mov al, 3" benutzen.

Dirk
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: Textmode 80x25 und 80x50

Beitrag von oDOSseus »

Oh ich habe mich verlesen
Ich las AH statt AX, wahrscheinlich weil ich es gewohnt bin das die Funktionsnummer in AH steht xD.
Mein fehler. Sah wohl ziemlich dumm aus xD.
freecrac
DOS-Guru
Beiträge: 861
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: Textmode 80x25 und 80x50

Beitrag von freecrac »

oDOSseus hat geschrieben:Oh ich habe mich verlesen
Ich las AH statt AX, wahrscheinlich weil ich es gewohnt bin das die Funktionsnummer in AH steht xD.
Mein fehler. Sah wohl ziemlich dumm aus xD.
Das kann am Anfang schon mal passieren.

Dirk
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: Textmode 80x25 und 80x50

Beitrag von DOSferatu »

oDOSseus hat geschrieben:Oh ich habe mich verlesen
Ich las AH statt AX, wahrscheinlich weil ich es gewohnt bin das die Funktionsnummer in AH steht xD.
Mein fehler. Sah wohl ziemlich dumm aus xD.
Die Funktionsnummer steht ja auch hier in AH. Nur ist die Funktionsnummer eben 0.
In AL steht ja nicht die Funktionsnummer, sondern der Parameter (in diesem Fall die Nummer des Text-/Grafikmodus).
freecrac
DOS-Guru
Beiträge: 861
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: Textmode 80x25 und 80x50

Beitrag von freecrac »

DOSferatu hat geschrieben:
oDOSseus hat geschrieben:Oh ich habe mich verlesen
Ich las AH statt AX, wahrscheinlich weil ich es gewohnt bin das die Funktionsnummer in AH steht xD.
Mein fehler. Sah wohl ziemlich dumm aus xD.
Die Funktionsnummer steht ja auch hier in AH. Nur ist die Funktionsnummer eben 0.
In AL steht ja nicht die Funktionsnummer, sondern der Parameter (in diesem Fall die Nummer des Text-/Grafikmodus).
Welche Probleme können dabei Auftreten wenn man für eine DOS-Anwendung mit Inline Assembler-Befehle in ein C-Listing einbaut und gibt es Probleme bei der Ausführung von Subroutinen(Stack) und/oder Zugriffe auf einen Datenbereich,
welche Fehler können dabei passieren und wie stellt man das genau an?

Ein paar kurze Beispiele wären hilfreich.

Dirk
Antworten