DOS-Programm gesucht um VESA-Modus zu erzwingen

Konfiguration, Anwendungen, Treiber und TSRs unter DOS
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

Re: DOS-Programm gesucht um VESA-Modus zu erzwingen

Beitrag von frank9652 »

Ernüchternde Antwort aus dem Eee PC Forum


Original von Frank9652
Gibt es eine Möglichkeit, das BIOS des integrierten Graphikchips auszulesen?

Antwort:
Der Graphikchip hat kein eigenes BIOS.

Original von Frank9652
Ich möchte nun das BIOS des integrierten Graphikchips auslesen, um evtl. an die verwendeten Modi für 1024 x 600 oder 1024 x 768 zu kommen.

Antwort:
1024x600 liegt ausserhalb der Spezifikationen der VESA-Graphikmodi und du wirst keine Möglichkeit haben, diese Auflösung unter DOS nutzen zu können.

1024x768 läßt unter DOS nur mit einem externen Bildschirm nutzen. Der unter Windows zur Verfügung stehende 1024x768-Modus, der die 768 Zeilen auf die 600-Bildschirmzeilen herunter skaliert, steht nur im Zusammenhang mit DirectX bzw. OpenGL zur Verfügung, welches ebenfalls unter DOS nicht nutzbar ist.

Soweit die Antwort aus dem Eee PC Forum

Gruß Frank
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

Re: DOS-Programm gesucht um VESA-Modus zu erzwingen

Beitrag von frank9652 »

Hier der Output von Dosferatus Programm VESA.RES
Habe aber Probleme den Inhalt mit ANSI-Zeichen hier ins Forum zu übernehmen.
Ich habe deshalb die deutschen Umlaute und ß transferiert, bei den restlichen ANSI-Zeichen (Linien) mußte ich aber passen.
-Genau das selbe, wie bei meinen anderen VESA-Testprogrammen. 640 x 480 + 800 x 600 ja, der Rest nicht.
Dosferatus Programm findet nur 8 MB Grafikspeicher, laut Auszug aus Windows 7 sind es aber 251 MB Grafikspeicher und 64 MB Systemvideospeicher.


*** VESA REPORT ***

* Allgemein *
VESA Version : VESA v3.0
Grafikkartenspeicher : 8 MB
Offscreen-speicher : 0 KB (0 Bytes) [ Offset: 0 ]
Bezeichnung : Intel(r)PineView Graphics Chip Accelerated VGA BIOS

* Software *
Software Version : v1.0
Hersteller : Intel Corporation
Produktbezeichnung : Intel(r)PineView Graphics Controller
Revision : Hardware Version 0.0

* Fähigkeiten *
DAC-Farbenpalette : 8-bit (16777216 mögliche Farben)
Controller : VGA
Palette während Retrace : nicht möglich
VBE/AF Erweiterung : nicht unterstützt
Linearer FrameBuffer : direkt möglich
Hardware Mauscursor : nein
Hardware Clipping : nein
Hardware Transparenz : nein

* Liste der verfügbaren VESA-Modi *
(Attribute direkt von VESA)
(VBF-E = VGA, Banked Mode, Lin. Framebuffer mögl., EnableDirectAccess nötig)
ÚÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÂÄÄBitsÄÄÂÄÄPos.ÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÂÄÂÄÂÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÄÂÄÄÄDSTIDLnnTMBOO¿
³Nr. ³ X ³ Y ³Farben ³Text³ R G B³-R -G -B³ LFB-Adresse ³VBF-E³A³B³Gran.³Größe³Aseg³Bseg³ScanL³ DTBTSFBV//IPN³
ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÅÄÅÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÅÄÄÄAEFLCBAGGCOTÄ´
³0101³ 640³ 480³ 8 Bit³ ³ 0 0 0³ 0 0 0³ D0000000 (3328 MB) ³VBF ³7³0³ 64³ 64³A000³0000³ 640³--------#--##-##³
³0103³ 800³ 600³ 8 Bit³ ³ 0 0 0³ 0 0 0³ D0000000 (3328 MB) ³VBF ³7³0³ 64³ 64³A000³0000³ 832³--------#--##-##³
³0105³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³0107³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³0111³ 640³ 480³ 16 Bit³ ³ 5 6 5³11 5 0³ D0000000 (3328 MB) ³VBF ³7³0³ 64³ 64³A000³0000³ 1280³--------#--##-##³
³0112³ 640³ 480³ 32 Bit³ ³ 8 8 8³16 8 0³ D0000000 (3328 MB) ³VBF ³7³0³ 64³ 64³A000³0000³ 2560³--------#--##-##³
³0114³ 800³ 600³ 16 Bit³ ³ 5 6 5³11 5 0³ D0000000 (3328 MB) ³VBF ³7³0³ 64³ 64³A000³0000³ 1600³--------#--##-##³
³0115³ 800³ 600³ 32 Bit³ ³ 8 8 8³16 8 0³ D0000000 (3328 MB) ³VBF ³7³0³ 64³ 64³A000³0000³ 3200³--------#--##-##³
³0117³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³0118³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³011A³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³011B³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³013A³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³013C³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³014B³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³014D³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³015A³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³015C³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³0160³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³0161³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³0162³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³0163³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³0164³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³0165³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³0166³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³0167³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³0168³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³0169³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³016A³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³016B³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³016C³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³016D³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³016E³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³016F³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³0170³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
³0171³ 0³ 0³ Monochrom³Text³ 0 0 0³ 0 0 0³ ³VB ³0³0³ 0³ 0³0000³0000³ 0³----------------³
ÀÄÄÄÄßÄÄÄÄßÄÄÄÄßÄÄÄÄÄÄÄÄÄÄßÄÄÄÄßÄÄÄÄÄÄÄÄßÄÄÄÄÄÄÄÄßÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄßÄÄÄÄÄßÄßÄßÄÄÄÄÄßÄÄÄÄÄßÄÄÄÄßÄÄÄÄßÄÄÄÄÄßÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

ONÄ ModeAvailable ³ OPT Optional Information Avail.³ BIO BIOS Supported
M/C Monochome/Color ³ T/G Textmode/Graphic ³ nVG No VGA Mode
nBA No Banked Mode ³ LFB Linear Framebuffer Avail. ³ DSC DoubleScan
ITL Interlaced Avail.³ TBF Triple Buffering Avail. ³ STE StereoScope
DDA DualDisplay ³ ³
freecrac
DOS-Guru
Beiträge: 836
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: DOS-Programm gesucht um VESA-Modus zu erzwingen

Beitrag von freecrac »

DOSferatu hat geschrieben:Ich habe so ein Programm schon vor Jahren mal geschrieben. Ich kanns ja mal auf meinen Webspace stellen (weil man hier ja leider keine Dinge anhängen kann).
Es ist dort zu finden:
http://www.imperial-games.de/z/testvesa.exe

Wenn man es startet, gibt es die ganze Liste aus. Außerdem wird das Ganze auch in eine TextDatei namens VESA.RES geschrieben.

Anmerkung: Mit testvesa.exe *
(bzw irgendeinem Parameter)
wird eine breitere Liste ausgegeben, die nicht mehr auf den 80 Zeichen screen paßt, aber noch mehr Daten über die Modes enthält - wird ebenfalls in VESA.RES gespeichert.
Prima, damit erhalte ich folgende Ausgabe:
(Anmerkung: Die Angabe vom "Grafikkartenspeicher = 14 MB" ist allerding schon merkwürdig. Die Colorful GeForce GTX 295 hat 2x 896MB GDDR3)

Code: Alles auswählen

   ***   VESA REPORT   ***

* Allgemein *
VESA Version            : VESA v3.0
Grafikkartenspeicher    : 14 MB
Offscreen-speicher      : 17 MB (17235968 Bytes)        [ Offset:   17170693 ]
Bezeichnung             : NVIDIA

* Software *
Software Version        : v98.0
Hersteller              : NVIDIA Corporation
Produktbezeichnung      : GT200 Board - 0658a050
Revision                : Chip Rev   

* Fähigkeiten *
DAC-Farbenpalette       : 8-bit (16777216 mögliche Farben)
Controller              : VGA
Palette während Retrace : nicht möglich
VBE/AF Erweiterung      : nicht unterstützt
Linearer FrameBuffer    : direkt möglich
Hardware Mauscursor     : nein
Hardware Clipping       : nein
Hardware Transparenz    : nein

* Liste der verfügbaren VESA-Modi *
   (Attribute direkt von VESA)
   (VBF-E = VGA, Banked Mode, Lin. Framebuffer mögl., EnableDirectAccess nötig)
┌────┬────┬────┬──────────┬────┬──Bits──┬──Pos.──┬────────────────────┬─────┐
│Nr. │ X  │ Y  │Farben    │Text│ R  G  B│-R -G -B│    LFB-Adresse     │VBF-E│
├────┼────┼────┼──────────┼────┼────────┼────────┼────────────────────┼─────┤
│0100│ 640│ 400│     8 Bit│    │ 0  0  0│ 0  0  0│ 01080000 ( 16 MB)  │ BF?E│
│0101│ 640│ 480│     8 Bit│    │ 0  0  0│ 0  0  0│ 01080000 ( 16 MB)  │ BF?E│
│0102│ 800│ 600│     4 Bit│    │ 0  0  0│ 0  0  0│                    │ B ?E│
│0103│ 800│ 600│     8 Bit│    │ 0  0  0│ 0  0  0│ 01080000 ( 16 MB)  │ BF?E│
│0104│1024│ 768│     4 Bit│    │ 0  0  0│ 0  0  0│                    │ B ?E│
│0105│1024│ 768│     8 Bit│    │ 0  0  0│ 0  0  0│ 01080000 ( 16 MB)  │ BF?E│
│0106│1280│1024│     4 Bit│    │ 0  0  0│ 0  0  0│                    │ B ?E│
│0107│1280│1024│     8 Bit│    │ 0  0  0│ 0  0  0│ 01080000 ( 16 MB)  │ BF?E│
│010E│ 320│ 200│    16 Bit│    │ 5  6  5│11  5  0│ 01080000 ( 16 MB)  │ BF?E│
│010F│ 320│ 200│    32 Bit│    │ 8  8  8│16  8  0│ 01080000 ( 16 MB)  │ BF?E│
│0111│ 640│ 480│    16 Bit│    │ 5  6  5│11  5  0│ 01080000 ( 16 MB)  │ BF?E│
│0112│ 640│ 480│    32 Bit│    │ 8  8  8│16  8  0│ 01080000 ( 16 MB)  │ BF?E│
│0114│ 800│ 600│    16 Bit│    │ 5  6  5│11  5  0│ 01080000 ( 16 MB)  │ BF?E│
│0115│ 800│ 600│    32 Bit│    │ 8  8  8│16  8  0│ 01080000 ( 16 MB)  │ BF?E│
│0117│1024│ 768│    16 Bit│    │ 5  6  5│11  5  0│ 01080000 ( 16 MB)  │ BF?E│
│0118│1024│ 768│    32 Bit│    │ 8  8  8│16  8  0│ 01080000 ( 16 MB)  │ BF?E│
│011A│1280│1024│    16 Bit│    │ 5  6  5│11  5  0│ 01080000 ( 16 MB)  │ BF?E│
│011B│1280│1024│    32 Bit│    │ 8  8  8│16  8  0│ 01080000 ( 16 MB)  │ BF?E│
│0130│ 320│ 200│     8 Bit│    │ 0  0  0│ 0  0  0│ 01080000 ( 16 MB)  │ BF?E│
│0131│ 320│ 400│     8 Bit│    │ 0  0  0│ 0  0  0│ 01080000 ( 16 MB)  │ BF?E│
│0132│ 320│ 400│    16 Bit│    │ 5  6  5│11  5  0│ 01080000 ( 16 MB)  │ BF?E│
│0133│ 320│ 400│    32 Bit│    │ 8  8  8│16  8  0│ 01080000 ( 16 MB)  │ BF?E│
│0134│ 320│ 240│     8 Bit│    │ 0  0  0│ 0  0  0│ 01080000 ( 16 MB)  │ BF?E│
│0135│ 320│ 240│    16 Bit│    │ 5  6  5│11  5  0│ 01080000 ( 16 MB)  │ BF?E│
│0136│ 320│ 240│    32 Bit│    │ 8  8  8│16  8  0│ 01080000 ( 16 MB)  │ BF?E│
│013D│ 640│ 400│    16 Bit│    │ 5  6  5│11  5  0│ 01080000 ( 16 MB)  │ BF?E│
│013E│ 640│ 400│    32 Bit│    │ 8  8  8│16  8  0│ 01080000 ( 16 MB)  │ BF?E│
│0145│1600│1200│     8 Bit│    │ 0  0  0│ 0  0  0│ 01080000 ( 16 MB)  │ BF?E│
│0146│1600│1200│    16 Bit│    │ 5  6  5│11  5  0│ 01080000 ( 16 MB)  │ BF?E│
│014A│1600│1200│    32 Bit│    │ 8  8  8│16  8  0│ 01080000 ( 16 MB)  │ BF?E│
│0160│1280│ 800│     8 Bit│    │ 0  0  0│ 0  0  0│ 01080000 ( 16 MB)  │ BF?E│
│0161│1280│ 800│    32 Bit│    │ 8  8  8│16  8  0│ 01080000 ( 16 MB)  │ BF?E│
│0162│ 768│ 480│     8 Bit│    │ 0  0  0│ 0  0  0│ 01080000 ( 16 MB)  │ BF?E│
│0166│1600│ 900│    16 Bit│    │ 5  6  5│11  5  0│ 01080000 ( 16 MB)  │ BF?E│
│0167│1600│ 900│    32 Bit│    │ 8  8  8│16  8  0│ 01080000 ( 16 MB)  │ BF?E│
│0170│1600│ 900│     8 Bit│    │ 0  0  0│ 0  0  0│ 01080000 ( 16 MB)  │ BF?E│
│017B│1280│ 720│    32 Bit│    │ 8  8  8│16  8  0│ 01080000 ( 16 MB)  │ BF?E│
│017C│1920│1200│     8 Bit│    │ 0  0  0│ 0  0  0│ 01080000 ( 16 MB)  │ BF?E│
│017D│1920│1200│    32 Bit│    │ 8  8  8│16  8  0│ 01080000 ( 16 MB)  │ BF?E│
└────┴────┴────┴──────────┴────┴────────┴────────┴────────────────────┴─────┘
Ich habe nun ebenfalls ein kleines Programm begonnen, das aber noch nicht so viele Details zeigt(benötigt einen 80386+ und eine GraKa mit VESA 2+ Bios):
http://www.alice-dsl.net/freecracmaps/Tool/VESAMODI.zip

Code: Alles auswählen

.MODEL SMALL                          ; Programm möglichst klein halten
.386
  CODE SEGMENT use16 'CODE'
 assume cs:CODE,ds:DATEN,ss:STAPEL
 org 100h
START: mov      ax, DATEN           ; Segmentadresse vom Datenbereich
	  mov      ds, ax              ;  in das DS-Segmentregister laden
	  mov      es, ax              ;  in das ES-Segmentregister laden
	  mov      di, OFFSET VINF     ; OFFSET für ausgewählten Datenbereich (512 Bytes)
	  mov      ax, 4F00h           ; Vesa Funktionsnummer 0 Vesa-Bios-Info
	  int 10h                      ;  holt 512 Bytes nach es:di (Datensegment:VINF)
	  cmp      ax, 4Fh             ; Wenn Rückgabewert "4F", dann war Funktion erfolgreich
	  jnz NOVESA                   ;  sonst FEHLER: Kein Vesabios vorhanden

	  mov      dl, [di+5]          ; Major version number of Vesa über ds:di+5 in das dl-Register holen
	  cmp      dl, 2               ;  kleiner als Version 2 ?
	  jb  VESA1                    ;  wenn ja FEHLER: Keine Modeliste vorhanden.

     mov      dx, OFFSET HEADER
     mov      ah, 9
     int 21h

	  lfs      si, [di+0Eh]        ; Pointer der Modeliste über ds:di+E ins fs-Segmentregister und si-Offsetregister laden

MODE: mov      cx, fs:[si]         ; Modenummern über fs:si ins cx-register holen
	  add      si, 2               ; Qell-Adresszeiger(Offset) erhöhen
	  cmp      cx, 0FFFFh          ;  Ende der Liste erreicht?
	  jz  MEND
          
     mov      ax, cx
     call HEXOUT16                ; Modenummer ausgeben

	  mov      ax, 4F01h           ; Modus spezifische Info holen
     mov      di, OFFSET MINF
	  int 10h                      ; es:di 256 byte
	  cmp      ax, 4Fh
	  jnz short NOVESA             ; FEHLER: wird nicht unterstützt

	  mov      ax, [di+12h]        ; MaxX
     call DEZOUT16

     mov      dx, OFFSET X
     mov      ah, 9
     int 21h

     mov      ax, [di+14h]        ; MaxY
     call DEZOUT16

     mov      dx, OFFSET X
     mov      ah, 9
     int 21h

     xor      ax, ax
	  mov      al, [di+19h]        ; Bit per pixel?
     call DEZOUT16

     mov      dx, OFFSET SPACE
     mov      ah, 9
     int 21h

	  and      BYTE PTR[di], 80h   ;  linear access enable ?
     jz  short NOLIN
     mov      eax, [di+28h]       ;  linearer Bild-Offset vorhanden ?
     call HEXOUT32

NOLIN:    mov      dx, OFFSET CRLF
          mov      ah, 9
          int 21h
          jmp MODE
;-------------------------------------
 org START + ((($-START)/16)*16)+16   ; Code-Ausrichtung
;-------------------------------------
NOVESA:   mov      dx, OFFSET T1
          mov      ah, 9
          int 21h
          mov      cl, 0FFh
          jmp short ERREND
;-------------------------------------
 org START + ((($-START)/16)*16)+16   ; Code-Ausrichtung
;-------------------------------------
VESA1:    mov      dx, OFFSET T2
          mov      ah, 9
          int 21h
          mov      cl, 1
          jmp short ERREND
;-------------------------------------
 org START + ((($-START)/16)*16)+16   ; Code-Ausrichtung
;-------------------------------------
MEND:     xor      cl, cl
ERREND:   mov      al, cl             ; ERRORLEVEL holen
          mov      ah, 4Ch            ; Rücksprung zu DOS, Programm-Ende
          int 21h
;----------------------------------------------------------------------------
; AX nach fünf dezimalen ASCII's wandeln und im Daten-Bereich ablegen
;----------------------------------------------------------------------------
 org START + ((($-START)/16)*16)+16   ; Code-Ausrichtung
;-------------------------------------
DEZOUT16: pusha
          mov      di, OFFSET DEZ16
          mov      cl, 5              ; fünf dezimale ASCII's
          mov      bx, 10000
WANDEL:   xor      dx, dx
          div      bx
          add      al, 30h            ; nach ASCII wandeln
          mov      si, dx             ; Rest retten
          mov      [di], al           ; Ziffer retten
          inc      di                 ; Zeiger erhöhen
          mov      ax, bx
          mov      bx, 0Ah
          xor      dx, dx
          div      bx
          mov      bx, ax
          mov      ax, si
          dec      cl
          jnz WANDEL
;-------------------------------------
          mov      si, OFFSET DEZ16 -1 ; erste(n) Null(en) überlesen
          mov      dx, si
          inc      dx
NULL:     inc      si
          cmp     BYTE PTR[si], "0"
          jz  NULL
          sub      si, 5
          cmp      si, dx
          jz  short AUSG              ; keine null vorhanden !
          add      si, 5
          mov      dx, si
AUSG:     mov      ah, 9              ; dezimale Zahl ausgeben
          int 21h
          popa
          ret
;----------------------------------------------------------------------------
; EAX nach acht hexadezimale ASCII's wandeln und im Daten-Bereich ablegen
;----------------------------------------------------------------------------
 org START + ((($-START)/16)*16)+16   ; Code-Ausrichtung
;-------------------------------------
HEXOUT32: pusha
          mov      di, OFFSET HEX32   ; Doppel-Word nach Hex-Ziffern wandeln
          mov      cl, 8              ; 8 Ziffern
A:        rol      eax, 4             ; 1 Nibble weiter
          mov      bl, al
          and      bl, 0Fh            ; nur low-Nibble
          add      bl, 30h            ; nach ASCII wandeln
          cmp      bl, 39h            ;  größer als Ziffer neun ?
          jna short B
          add      bl, 7              ; dann Buchstabe von "A" bis "F"
B:        mov      [di], bl           ; ASCII retten
          inc      di                 ; Zeiger erhöhen
          dec      cl                 ; Ziffer-Anzahl verringern
          jnz A
;-------------------------------------
          mov      dx, OFFSET HEX32
          mov      ah, 9              ; hexadezimale Zahl ausgeben
          int 21h
          popa
          ret
;----------------------------------------------------------------------------
; AX nach vier hexadezimale ASCII's wandeln und im Daten-Bereich ablegen
;----------------------------------------------------------------------------
 org START + ((($-START)/16)*16)+16   ; Code-Ausrichtung
;-------------------------------------
HEXOUT16: pusha
          mov      di, OFFSET HEX16   ; Word nach Hex-Ziffern wandeln
          mov      cl, 4              ; 4 Ziffern
C:        rol      ax, 4              ; 1 Nibble weiter
          mov      bl, al
          and      bl, 0Fh            ; nur low-Nibble
          add      bl, 30h            ; nach ASCII wandeln
          cmp      bl, 39h            ;  größer als Ziffer neun ?
          jna short D
          add      bl, 7              ; dann Buchstabe von "A" bis "F"
D:        mov      [di], bl           ; ASCII retten
          inc      di                 ; Zeiger erhöhen
          dec      cl                 ; Ziffer-Anzahl verringern
          jnz C
;-------------------------------------
          mov      dx, OFFSET HEX16
          mov      ah, 9              ; hexadezimale Zahl ausgeben
          int 21h
          popa
          ret
  CODE ends
;----------------------------------------------------------------------------
  DATEN SEGMENT use32 'DATA'
;-------------------------------------
VINF      DB 512 dup (0AAh)            ; Vesa-Info(4F00)
MINF      DB 512 dup (44h)             ; Mode-Info(4F01)
DEZ16     DB "00000","$"
HEX32     DB "00000000 ","$"
HEX16     DB "0000 ","$"
HEADER    DB "Vesamode,XRes,YRes,Bits per Pixel,Adresse des Framebuffer",0Dh,0Ah,"$"
CRLF      DB 0Dh,0Ah,"$"
X         DB "x","$"
SPACE     DB " ","$"
T1        DB "Kein Vesabios vorhanden.", 0Dh, 0Ah, "$"
T2        DB "Keine Modeliste vorhanden.", 0Dh, 0Ah, "$"
  DATEN ends
;----------------------------------------------------------------------------
  STAPEL SEGMENT use16 STACK 'STACK'
       DB 100h dup (88h)
  STAPEL ends
 end
Damit erhalte ich folgende Ausgabe von meiner Nvidia GTX 295 (Kann in eine Textdatei umgeleiter werden.):

Code: Alles auswählen

Vesamode,XRes,YRes,Bits per Pixel,Adresse des Framebuffer
0100 640x400x8 01080000 
0101 640x480x8 01080000 
0102 800x600x4 
0103 800x600x8 01080000 
0104 1024x768x4 
0105 1024x768x8 01080000 
0106 1280x1024x4 
0107 1280x1024x8 01080000 
010E 320x200x16 01080000 
010F 320x200x32 01080000 
0111 640x480x16 01080000 
0112 640x480x32 01080000 
0114 800x600x16 01080000 
0115 800x600x32 01080000 
0117 1024x768x16 01080000 
0118 1024x768x32 01080000 
011A 1280x1024x16 01080000 
011B 1280x1024x32 01080000 
0130 320x200x8 01080000 
0131 320x400x8 01080000 
0132 320x400x16 01080000 
0133 320x400x32 01080000 
0134 320x240x8 01080000 
0135 320x240x16 01080000 
0136 320x240x32 01080000 
013D 640x400x16 01080000 
013E 640x400x32 01080000 
0145 1600x1200x8 01080000 
0146 1600x1200x16 01080000 
014A 1600x1200x32 01080000 
0160 1280x800x8 01080000 
0161 1280x800x32 01080000 
0162 768x480x8 01080000 
0166 1600x900x16 01080000 
0167 1600x900x32 01080000 
0170 1600x900x8 01080000 
017B 1280x720x32 01080000 
017C 1920x1200x8 01080000 
017D 1920x1200x32 01080000 
Ausgeführt in der DOSBox 0.74 bekomme ich die Daten der Emulation:

Code: Alles auswählen

Vesamode,XRes,YRes,Bits per Pixel,Adresse des Framebuffer
0100 640x400x8 C0000000 
0101 640x480x8 C0000000 
0102 800x600x4 
0103 800x600x8 C0000000 
0104 1024x768x4 
0105 1024x768x8 C0000000 
0106 1280x1024x4 
0107 1280x1024x8 C0000000 
010D 320x200x15 C0000000 
010E 320x200x16 C0000000 
010F 320x200x32 C0000000 
0110 640x480x15 C0000000 
0111 640x480x16 C0000000 
0112 640x480x32 C0000000 
0113 800x600x15 C0000000 
0114 800x600x16 C0000000 
0115 800x600x32 C0000000 
0116 1024x768x15 C0000000 
0117 1024x768x16 C0000000 
0150 320x200x8 C0000000 
0151 320x240x8 C0000000 
0152 320x400x8 C0000000 
0153 320x480x8 C0000000 
0160 320x240x15 C0000000 
0161 320x400x15 C0000000 
0162 320x480x15 C0000000 
0165 640x400x15 C0000000 
0170 320x240x16 C0000000 
0171 320x400x16 C0000000 
0172 320x480x16 C0000000 
0175 640x400x16 C0000000 
0190 320x240x32 C0000000 
0191 320x400x32 C0000000 
0192 320x480x32 C0000000 
0207 1152x864x8 C0000000 
0209 1152x864x15 C0000000 
020A 1152x864x16 C0000000 
0213 640x400x32 C0000000 
0222 848x480x8 C0000000 
0223 848x480x15 C0000000 
0224 848x480x16 C0000000 
0225 848x480x32 C0000000 
Dirk
Zuletzt geändert von freecrac am Mi 29. Sep 2010, 18:42, insgesamt 3-mal geändert.
freecrac
DOS-Guru
Beiträge: 836
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: DOS-Programm gesucht um VESA-Modus zu erzwingen

Beitrag von freecrac »

frank9652 hat geschrieben:Ernüchternde Antwort aus dem Eee PC Forum

Original von Frank9652
Gibt es eine Möglichkeit, das BIOS des integrierten Graphikchips auszulesen?

Antwort:
Der Graphikchip hat kein eigenes BIOS.
Das ist ganz offensichtlich falsch, ganz ohne Bios geht es gar nicht. Ein Teil des GraKa-Bios beginnt in C000:0, auch dann wenn das Mainbord und die GraKa sich ein Bios gemeinsames teilen.
Original von Frank9652
Ich möchte nun das BIOS des integrierten Graphikchips auslesen, um evtl. an die verwendeten Modi für 1024 x 600 oder 1024 x 768 zu kommen.

Antwort:
1024x600 liegt ausserhalb der Spezifikationen der VESA-Graphikmodi
Es gibt gar keine Spezifikationen der VESA-Graphikmodi mehr, so das jeder Herstellen beliebige Vesa-Modi die Sinn machen selber erstellen kann.
und du wirst keine Möglichkeit haben, diese Auflösung unter DOS nutzen zu können.
Auch das bezweifel ich. In den Sourcen von Linux ist der Code enthalten um über Portadressen(des CTRC-Controllers) jede beliebige Auflösung einzustellen die innerhalb der Kapazität der GraKa liegt.
Ich habe blos noch nicht die entrechenden Stellen finden können.
1024x768 läßt unter DOS nur mit einem externen Bildschirm nutzen. Der unter Windows zur Verfügung stehende 1024x768-Modus, der die 768 Zeilen auf die 600-Bildschirmzeilen herunter skaliert, steht nur im Zusammenhang mit DirectX bzw. OpenGL zur Verfügung, welches ebenfalls unter DOS nicht nutzbar ist.
Das könnte man ja mal mit Linux testen, ob der 1024x768-Modus wirkklich nur unter Windows nutzbar ist.
Soweit die Antwort aus dem Eee PC Forum

Gruß Frank
Aber mit dem Vesa-Bios wist du damit wohl wirklich kein Glück haben.

Dirk
freecrac
DOS-Guru
Beiträge: 836
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: DOS-Programm gesucht um VESA-Modus zu erzwingen

Beitrag von freecrac »

frank9652 hat geschrieben:Hier der Output von Dosferatus Programm VESA.RES
Das Ergebniss ist niederschmetternd, mit Vesa können wir dir nicht weiterhelfen, es fehlt die gewünschten Auflösung.
Habe aber Probleme den Inhalt mit ANSI-Zeichen hier ins Forum zu übernehmen.
Ich habe deshalb die deutschen Umlaute und ß transferiert, bei den restlichen ANSI-Zeichen (Linien) mußte ich aber passen.
Komisch, bei mir geht es mit den Zeichen.
-Genau das selbe, wie bei meinen anderen VESA-Testprogrammen. 640 x 480 + 800 x 600 ja, der Rest nicht.
Das ist wirklich traurig.
Dosferatus Programm findet nur 8 MB Grafikspeicher, laut Auszug aus Windows 7 sind es aber 251 MB Grafikspeicher und 64 MB Systemvideospeicher.
Ich schaue mir jetzt noch mal meine Daten etwas genauer an, ob bei mir auch wirklich nur 14 MB angegeben werden, wenn nicht enthält das Programm von Dosferatus ein Fehler.

Ergebniss: Das Programm von Dosferatus hat kein Fehler!!!
Bei mir stehen wirklich nur 14 MB eingetragen: 00E0h mal 64 KB! Das Vesa-Bios macht hier falsche Angaben.

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

Re: DOS-Programm gesucht um VESA-Modus zu erzwingen

Beitrag von DOSferatu »

Das VESA-BIOS macht keine falschen Angaben!
Es handelt sich dabei um etwas anderes.
Der angegebene Grafikspeicher bezieht sich dabei auf den für die Grafikmodi nutzbaren Grafikpuffer, d.h. den Speicher, der auch direkt in den Grafikauflösungen auf dem Bildschirm dargestellt werden kann. Der restliche Grafikkartenspeicher ist sogenannter Off-Screen Speicher, dieser wird von 3D-Grafikkarten z.B. benutzt. um darin Texturen und ggf irgendwelche vorberechneten Dinge zu speichern. Dieser Speicher ist für die direkte Grafikausgabe nicht nutzbar.
Manchmal wird von VESA der Offscreen-Speicer zum Teil noch angezeigt, manchmal einfach nur 0.
Für die für Grafikausgabe verfügbaren Speicher spielt das keine Rolle.

Will sagen: Nehmen wir an, es GÄBE eine Auflösung 1024x1024x8Bit (die bräuchte genau 1 MB, um eine Grafikseite darzustellen).
Trotzdem ist es dann nicht so, daß, wenn eine Grafikkarte z.B. 64 MB Grafikspeicher hat, man auch 64 verschiedene Grafikseiten darstellen kann, sondern es wird eher so sein, daß dann die ersten 4 oder 8 oder 14 oder 16 MB oder so nur direkt dafür gedacht sind, da "Pixel" reinzulegen, um die als Grafik darzustellen.

Daß gemeldeter Grafikspeicher = Gesamtspeicher der Grafikkarte ist, trifft auf unsere schönen alten "DOS"-Grafikkarten zu, sowas wie die ETx000 Serie und so.
Seit die Grafikkarten so Kram machen können, wie selber ganze Bildbereiche hardwaremäßig kopieren, 3D hardwaremäßig berechnen (texturierte Polygone mit etlichen Effekten dran - Transparenz, Bumpmapping, Light-/Environment-/Phong- Shading etc.), brauchen sie zusätzlichen Speicher, in den z.B. temporär verschiedene Daten (wie eben z.B. Texturen) reingeladen werden können.
Abgesehen davon verwenden vor allem so ONBoard-Grafikchips gerne "Shared Memory", d.h. sie klauen sich einfach ein Stück vom eingebauten RAM, weil sie selber keinen haben...

Achja, zu meinem Programm TESTVESA.EXE:
Diese "Probleme" bei der Darstellung liegen daran, daß es im Original den Zeichensatz Codepage 437 verwendet - die bekannte DOS-Rähmchengrafik. In Codepage 852 (den Windows benutzt) sind diese Zeichen anderweitig belegt. Aus diesen Rähmchen wird halt die Tabelle gebaut.
Abgesehen davon ist das Ganze natürlich auf feste Zeichenbreite (also Textmode) ausgelegt, mit proportionalen Zeichensätzen sieht es dann natürlich bescheiden aus.
freecrac
DOS-Guru
Beiträge: 836
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: DOS-Programm gesucht um VESA-Modus zu erzwingen

Beitrag von freecrac »

DOSferatu hat geschrieben:Das VESA-BIOS macht keine falschen Angaben!
Es handelt sich dabei um etwas anderes.
Der angegebene Grafikspeicher bezieht sich dabei auf den für die Grafikmodi nutzbaren Grafikpuffer, d.h. den Speicher, der auch direkt in den Grafikauflösungen auf dem Bildschirm dargestellt werden kann.
Also nur der reine Bildspeicher der zur Anzeige gebracht werden kann, inclusive Speicher für triple buffering und stereoskopische Modi. Dafür dürften mir 14 MB genügen.
Der restliche Grafikkartenspeicher ist sogenannter Off-Screen Speicher, dieser wird von 3D-Grafikkarten z.B. benutzt. um darin Texturen und ggf irgendwelche vorberechneten Dinge zu speichern. Dieser Speicher ist für die direkte Grafikausgabe nicht nutzbar.
Für DOS ist dieser Speicher damit nicht nutzbar ohne DOS-DirectX-Treiber. :-(
Manchmal wird von VESA der Offscreen-Speicer zum Teil noch angezeigt, manchmal einfach nur 0.
Für die für Grafikausgabe verfügbaren Speicher spielt das keine Rolle.

Will sagen: Nehmen wir an, es GÄBE eine Auflösung 1024x1024x8Bit (die bräuchte genau 1 MB, um eine Grafikseite darzustellen).
Trotzdem ist es dann nicht so, daß, wenn eine Grafikkarte z.B. 64 MB Grafikspeicher hat, man auch 64 verschiedene Grafikseiten darstellen kann, sondern es wird eher so sein, daß dann die ersten 4 oder 8 oder 14 oder 16 MB oder so nur direkt dafür gedacht sind, da "Pixel" reinzulegen, um die als Grafik darzustellen.
Verständlich.
Daß gemeldeter Grafikspeicher = Gesamtspeicher der Grafikkarte ist, trifft auf unsere schönen alten "DOS"-Grafikkarten zu, sowas wie die ETx000 Serie und so.
Seit die Grafikkarten so Kram machen können, wie selber ganze Bildbereiche hardwaremäßig kopieren, 3D hardwaremäßig berechnen (texturierte Polygone mit etlichen Effekten dran - Transparenz, Bumpmapping, Light-/Environment-/Phong- Shading etc.), brauchen sie zusätzlichen Speicher, in den z.B. temporär verschiedene Daten (wie eben z.B. Texturen) reingeladen werden können.
Abgesehen davon verwenden vor allem so ONBoard-Grafikchips gerne "Shared Memory", d.h. sie klauen sich einfach ein Stück vom eingebauten RAM, weil sie selber keinen haben...
Bei der Verwendung von "Shared Memory" müssen sich CPU und GPU den Speicher teilen. Beide können nie gleichzeitig auf den Speicher zugreifen und behindern sich dabei gegenseitig. Der Speicher von Grafikkarten mit eigenem Ram ist viel schneller als der normale Ram-Speicher und die GPU kann ungehindert auf ihren Speicher zugreifen. Die CPU wird nun auch nicht mehr durch den Zugriff von der Grafikkarte auf den gemeinsam genutzten Speicher behindert.

Das könnte sich vielieicht ändern wenn sich mehrere GB an Speichen in die CPU/GPU integrieren läßt.
Achja, zu meinem Programm TESTVESA.EXE:
Diese "Probleme" bei der Darstellung liegen daran, daß es im Original den Zeichensatz Codepage 437 verwendet - die bekannte DOS-Rähmchengrafik. In Codepage 852 (den Windows benutzt) sind diese Zeichen anderweitig belegt. Aus diesen Rähmchen wird halt die Tabelle gebaut.
Abgesehen davon ist das Ganze natürlich auf feste Zeichenbreite (also Textmode) ausgelegt, mit proportionalen Zeichensätzen sieht es dann natürlich bescheiden aus.
Mit dem Textbetrachter vom Windows-Commander kann man die Datei "VESA.RES" öffnen und in das Antwortfenster kopieren. Mit Notepad geöffnet werden die Zeichen anders angezeigt.
Eine feste Breite bekommt man wenn man es zischen Code ??? Code (siehe Werkzeugleiste im Antwortfenster) plaziert.

Dirk
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

Re: DOS-Programm gesucht um VESA-Modus zu erzwingen

Beitrag von frank9652 »

Hallo Leute!

Vielen Dank für eure Mühen.
Ich habe nicht nur hier im Forum "ermittelt" - aber bisher scheint sich keine Lösung abzuzeichnen.
Zur Not schleppe ich dann halt zwei Netbooks mit mir rum (eines für DOS mit 7,1 Zoll und eines fürs Internet mit 10,1 Zoll).

Aber ich werde mal so frech sein, und rotzfrech bei Intel direkt anfragen, auch wenn die vielleicht aus dem Lachen nicht mehr rauskommen.
Vielleicht können die mir ja die Parameter mitteilen, wie man den Grafikchip zu 1024 x 768 / 16,7 Mio Farben oder 64000 Farben überreden kann.
Dann müßte es doch möglich sein, mit einem DOS-Programm diese Einstellungen an den Grafikchip zu schicken, und anschließend Geos starten?

Auch meine Suche die automatische Scalierung auf die volle Bildschirmbreite auszuschalten blieb bisher erfolglos. Mit 800 x 600 in den richtigen Proportionen könnte ich auch leben.

Im November auf dem Geostreffen werde ich mir dann mal Geos unter einem Emulator zeigen lassen. - Vielleicht kann ich mich dann doch dafür "erwärmen".

Nochmals vielen Dank

Gruß Frank
freecrac
DOS-Guru
Beiträge: 836
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: DOS-Programm gesucht um VESA-Modus zu erzwingen

Beitrag von freecrac »

frank9652 hat geschrieben:Hallo Leute!

Vielen Dank für eure Mühen.
Ich habe nicht nur hier im Forum "ermittelt" - aber bisher scheint sich keine Lösung abzuzeichnen.
Zur Not schleppe ich dann halt zwei Netbooks mit mir rum (eines für DOS mit 7,1 Zoll und eines fürs Internet mit 10,1 Zoll).

Aber ich werde mal so frech sein, und rotzfrech bei Intel direkt anfragen, auch wenn die vielleicht aus dem Lachen nicht mehr rauskommen.
Vielleicht können die mir ja die Parameter mitteilen, wie man den Grafikchip zu 1024 x 768 / 16,7 Mio Farben oder 64000 Farben überreden kann.
Das können sie ganz bestimmt, doch ich habe Zweifel daran ob sie das tun werden. Wenn sie aber Antworten dann sage mal bescheid.
Dann müßte es doch möglich sein, mit einem DOS-Programm diese Einstellungen an den Grafikchip zu schicken, und anschließend Geos starten?
Das Problem wird allerdings bestehen bleiben, das Anwendungen beim Starten selber einen Videomode anschalten und damit vorherige Einstellungen ignorieren und wieder rückgängig machen.
Also brauchen wir dann immer noch einen Treiber der den Versuch der Anwendungen selber einen Videomode anzuschalten abfängt und verhindert. Damit eine bestimmte Auflösung sinnvoll
verwendet werden kann muss die jeweilige Anwendung die Auflösung gerechnet in Zeilen und Spalten und der Anzahl der Bytes je Pixel berücksichtigen. Werden hierbei falsche Parameter
verwendet kommt dabei nichts Sinvolles heraus. Anwendungen die dafür Vesamodeinfo(Function 4F01) benutzen um diese Parameter zu ermitteln, die könnte man ebenfalls über einen Treiber
mit den richtigen Informationen versorgen.

So ein DOS-Treiber für den Softwareinterrupt INT 10h läßt sich relativ leicht bewerkstelligen. Man holt aus der Speicherstelle 10h * 4 den dortigen Vector vom INT 10h heraus und rettet ihn.
Dann trägt man dort einen neuen Vector ein, der auf die Adresse unseres Treibers im Speicher zeigt. Unser Treiber muss dafür resident im Speicher verbleiben. Wenn eine Anwendung nun
den INT 10h aufruft, dann wird nun unser Treiber angesprungen. Unser Treiber schaut nun nach ob zb. ein Videomode angeschaltet werden soll und verhindert das indem der Interruptaufruf
einfach beendet wird. Andernfalls wenn etwas Anderes gemacht werden soll was wir so beibehalten wollen wie bisher, dann springen wir zum urspünglichen Vector weiter den wir uns dafür
gerettet haben. So läßt sich jeder Modewechsel der über INT 10h normaler Weise erfolgen soll auf eine relativ einfache Weise verhindern.
Auch meine Suche die automatische Scalierung auf die volle Bildschirmbreite auszuschalten blieb bisher erfolglos. Mit 800 x 600 in den richtigen Proportionen könnte ich auch leben.
Die Interpolation von einem Windowstreiber kann man zwar abschalten, aber ich bin mir nicht sicher ob die Interpolation die ein Monitor selber vornimmt überhaupt abgeschaltet werden kann.
Diese Frage sollten die Monitorhersteller beantworten können.
Im November auf dem Geostreffen werde ich mir dann mal Geos unter einem Emulator zeigen lassen. - Vielleicht kann ich mich dann doch dafür "erwärmen".

Nochmals vielen Dank

Gruß Frank
Gerne geschehen.

Dirk
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

Re: DOS-Programm gesucht um VESA-Modus zu erzwingen

Beitrag von frank9652 »

Wir haben auf unserem Geostreffen eine Lösung gefunden!

Nochmal die Problembeschreibung!
Ich wollte die graphische Benutzeroberfläche Geoworks (16 Bit) auf dem Asus EeePC 1015PE benutzen.
Über eine bootfähige SD-Karte mit DOS konnte ich Geos starten, aber nur im Modus 800 x 600 weil der integrierte Graphikchip nur maximal den alten VESA-Modus 800 x 600 zur Verfügung stellt. Durch die Hardware (Monitor?) wird aber das Bild automatisch auf 1024 x 600 verzerrt wodurch z.B. runde Kreise keine runden Kreise mehr sind.
Eine Möglichkeit dieses "automatische Stretching" abzuschalten, habe ich nicht gefunden.

Die Lösung...
...sah so aus, daß wir auf einer bootbaren SD-Karte Puppy-Linux installiert haben, und darunter den DOS-Emulator DOSEMU mit Geos.
Dadurch wurde es möglich unter Geos die Auflösung 1024 x 600 zu fahren.
Auch der Zugriff auf jedes USB-Device und mein angeschlossenes DVD-Laufwerk sind unter Geos möglich.
Zum Datenaustausch kann ich von Geos her (auf dem Asus) die Dateien in das Grundverzeichnis der SD-Karte schieben, auf das ich unter DOS (von anderen Rechnern) genauso wie unter Windows 7 Zugriff habe.

Da die Lösung jetzt eigentlich in den Bereich Emulatoren gehört, poste ich dort noch einmal den Beitrag.

Gruß Frank
DOSferatu
DOS-Übermensch
Beiträge: 1145
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: DOS-Programm gesucht um VESA-Modus zu erzwingen

Beitrag von DOSferatu »

Eine kleine Anmerkung meinerseits:

Ich habe heute (mittlerweile - weil nach Mitternacht - eigentlich gestern) ein Programm geschrieben, das das besagte Problem teilweise lösen könnte. (Ich werde dazu noch eine SETUP.EXE bauen.)
Das Programm klinkt sich in den INT 10h ein und "überschreibt" die VESA-Funktionen 00h und 01h und gibt eigene Werte zurück. Ich habe das Teil NICHT als TSR gebaut, sondern als EXE, die den INT 10h "hookt", eine andere EXE aufruft und danach den INT 10h wiederherstellt.
Zu benutzen wäre das Ganze dann so (wenn PROGRAM.EXE das zu nutzende Programm ist) :
STUBVESA PROGRAM.EXE
(Danach können auch noch Kommandozeilenparameter für PROGRAM.EXE angegeben werden.)
STUBVESA braucht dabei zusätzlich (Code+Daten+Stack) ca. 5 kByte im Speicher oder so.

Ich habe damit heute z.B. ein Experiment gemacht, indem ich so getan habe, als hätte der Mode 640x480 (8bit) eine Scanline von 800 Bytes und der Mode 800x600 (8bit) eine Scanline von 1024 Bytes - und habe die EIGENTLICHEN Modi 800x600 und 1024x768 damit überschrieben. Auf dieselbe Art könnte man z.B. einen vom eigentlichen VESA verhandenen 1024x600 Mode auf 800x600 "kürzen", indem man einträgt, daß er nur 800x600 Pixel wäre. Es sieht dann eben so aus, daß der rechte Bereich (die rechten 224 Pixel) nicht benutzt werden - jedoch hätte man eine 1:1 Ratio der Pixel bei der Darstellung.

Das Programm habe ich eigentlich geschrieben, weil auf dem Rechner eines Bekannten, auf dem wir diverse Experimente machen, VESA scheinbar nur irgendwie unzulänglich unterstützt wird - und damit all meine Programme, die VESA nutzen (insbesondere eben das derzeit verwendete Tool) eventuell doch noch zum Laufen gebracht werden können.
Aber ich habe mich in diesem Zusammenhang daran erinnert, daß im DOSforum jemand ein damit verwandtes Problem hatte. Sollte also eventuell Interesse an diesem Mini-Tool bestehen - auch für andere Zwecke - dann kann ich da auch gern noch weitere Dinge tun, eben z.B. das erwähnte SETUP dazu schreiben, das die Mode-Umbelegung und -modifikation einiger Modi zuläßt.
(Anmerkung: Natürlich nicht nur für 8-Bit-Modi, sondern auch für 4/15/16/24/32-Bit.)
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

Re: DOS-Programm gesucht um VESA-Modus zu erzwingen

Beitrag von frank9652 »

Hallo Dosferatu!

Auch wenn mein Problem anderweitig gelöst wurde, hätte ich schon Interesse das mal auszuprobieren.

Nochmal zur kurzen Beschreibung meines Problems.
Der Grafikchip für den Asus EeePC 1015PE scheint in die CPU integriert worden zu sein, und bietet als VESA-Modi nur 800x600 an.
Die exakte Auflösung (auch unter Win 7) ist auf den widescreen-TFT 1024 x 600.
Starte ich von DOS Boot-SD-Karte mein Programm (PC-Geos) dann werden auch nur die 800x600 erkannt aber das Bild auf die volle TFT-Breite verzerrt.
Dadurch sind Kreise halt nicht mehr rund, sondern oval.

Die Lösung meines Problems bestand bestand nun darin, daß wir wieder eine SD-Karte bootfähig gemacht haben, und darauf Puppeee Linux installiert haben.
Darunter dann DOSEMU (ein DOS-Emulator) mit meinem PC-Geos.
Da DOSEMU (im gegensatz zu DOSBOX) auch 64.000 Farben unterstützt sowie die Auflösung 1024x600 wurde diese Auflösung an Geos durchgereicht.

Das Doing sieht folgendermaßen aus:
Ich boote von SD-Karte Puppeee Linux, und starte per Einfachklick Geos. Unsichtbar wird aber zuerst DOSEMU gestartet, und in einem Fenster dann Geos.
Um das Fenster auf volle Bildschirmgröße zu bringen, mußich dann nur noch Strg + F drücken. -Dann sieht man weder von Puppeee noch von DOSEMU irgend etwas.
-Was mich bei der ganzen Sache komplett gewundert hatte, daß der Zugriff auf die ganzen USB-Speichermedien sofort geklappt hatte. -Nur die Art, wo man dann die Dateien findet ist ein bischen Gewöhnungsbedürftig.
-Auch der direkte Ausdruck aus Geos heraus über DOSBOX, Puppeee und einen "USB auf Sub-D"-Adapter auf den Parallelportdrucker funktioniert nun (nachdem ich einen anderen Adapter gekauft hatte).

Nur Soundausgabe unter DOSEMU habe ich noch nicht hinbekommen, brauche es aber auch wirklich nicht.
Mich reizt es aber es noch hinzubekommen. - Vielleicht auf dem nächsten Treffen im November 2011.

Gruß Frank
Antworten