Textmode 80x25 und 80x50

Textmode 80x25 und 80x50

Beitragvon oDOSseus » Fr 13. Aug 2010, 20:09

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
Benutzeravatar
oDOSseus
LAN Manager
 
Beiträge: 241
Registriert: Di 10. Aug 2010, 14:21

Re: Textmode 80x25 und 80x50

Beitragvon freecrac » Sa 14. Aug 2010, 03:40

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)
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
freecrac
DOS-Guru
 
Beiträge: 861
Registriert: Mi 21. Apr 2010, 10:44
Wohnort: Hamburg Horn

Re: Textmode 80x25 und 80x50

Beitragvon oDOSseus » Sa 14. Aug 2010, 11:44

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: 241
Registriert: Di 10. Aug 2010, 14:21

Re: Textmode 80x25 und 80x50

Beitragvon oDOSseus » Sa 14. Aug 2010, 13:02

Gelöscht, da falsch platziert.
Zuletzt geändert von oDOSseus am Sa 14. Aug 2010, 13:37, insgesamt 1-mal geändert.
Benutzeravatar
oDOSseus
LAN Manager
 
Beiträge: 241
Registriert: Di 10. Aug 2010, 14:21

Re: Textmode 80x25 und 80x50

Beitragvon freecrac » Sa 14. Aug 2010, 13:13

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
freecrac
DOS-Guru
 
Beiträge: 861
Registriert: Mi 21. Apr 2010, 10:44
Wohnort: Hamburg Horn

Re: Textmode 80x25 und 80x50

Beitragvon oDOSseus » Sa 14. Aug 2010, 13:37

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.
Benutzeravatar
oDOSseus
LAN Manager
 
Beiträge: 241
Registriert: Di 10. Aug 2010, 14:21

Re: Textmode 80x25 und 80x50

Beitragvon freecrac » Sa 14. Aug 2010, 13:40

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
freecrac
DOS-Guru
 
Beiträge: 861
Registriert: Mi 21. Apr 2010, 10:44
Wohnort: Hamburg Horn

Re: Textmode 80x25 und 80x50

Beitragvon oDOSseus » Sa 14. Aug 2010, 14:01

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
Benutzeravatar
oDOSseus
LAN Manager
 
Beiträge: 241
Registriert: Di 10. Aug 2010, 14:21

Re: Textmode 80x25 und 80x50

Beitragvon freecrac » Sa 14. Aug 2010, 14:09

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
freecrac
DOS-Guru
 
Beiträge: 861
Registriert: Mi 21. Apr 2010, 10:44
Wohnort: Hamburg Horn

Re: Textmode 80x25 und 80x50

Beitragvon oDOSseus » Sa 14. Aug 2010, 14:17

Sicher, dass du den interrupt meinst?
http://www.ctyme.com/intr/rb-0088.htm
Benutzeravatar
oDOSseus
LAN Manager
 
Beiträge: 241
Registriert: Di 10. Aug 2010, 14:21

Re: Textmode 80x25 und 80x50

Beitragvon freecrac » Sa 14. Aug 2010, 15:32

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
freecrac
DOS-Guru
 
Beiträge: 861
Registriert: Mi 21. Apr 2010, 10:44
Wohnort: Hamburg Horn

Re: Textmode 80x25 und 80x50

Beitragvon oDOSseus » Sa 14. Aug 2010, 16:00

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.
Benutzeravatar
oDOSseus
LAN Manager
 
Beiträge: 241
Registriert: Di 10. Aug 2010, 14:21

Re: Textmode 80x25 und 80x50

Beitragvon freecrac » Sa 14. Aug 2010, 16:01

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
freecrac
DOS-Guru
 
Beiträge: 861
Registriert: Mi 21. Apr 2010, 10:44
Wohnort: Hamburg Horn

Re: Textmode 80x25 und 80x50

Beitragvon DOSferatu » Sa 14. Aug 2010, 18:21

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).
DOSferatu
DOS-Übermensch
 
Beiträge: 1095
Registriert: Di 25. Sep 2007, 11:05

Re: Textmode 80x25 und 80x50

Beitragvon freecrac » Sa 14. Aug 2010, 18:49

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
freecrac
DOS-Guru
 
Beiträge: 861
Registriert: Mi 21. Apr 2010, 10:44
Wohnort: Hamburg Horn

Nächste

Zurück zu Programmierung

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste