Seite 7 von 11
Re:
Verfasst: Fr 21. Mai 2010, 08:29
von freecrac
bttr hat geschrieben:Nicht unbedingt. Die Frage ist ja, wie lange das Bank-Switching im Vergleich zum Schreiben von 64k Pixeln dauert.
Portzugriife sind relativ langsam.
(Über den "vbeFarPtr" ginge es am Int 10h vorbei, aber natürlich auch über's Video-BIOS.)
Mit dem linearen Framebuffer verzichtet man bestenfalls auf die Verwendung der Video-BIOS-Pixelsetztroutine um den Bildschirm zu befüllen.
Dirk
Re:
Verfasst: Fr 21. Mai 2010, 09:06
von freecrac
Dosenware hat geschrieben:(man koennt ich kotzen, dass das in Pascal integrierte Assembler offenbar keine ordentlichen Offset und Segmentadressen zurueckliefert...)
kennst du eine funktion mit der ich Zahlen (nach moeglichkeit von byte bis comp) in Strings umwandeln kann?
DWORD im EAX-Register in hexadezimale ASCIIs wandeln und ausgeben:
(Zur Ausgabe von lediglich 16-Bit-Werten(etwa für Segment-Adresse:Offset-Adresse) kann die Routine auf 4 Zeichen und dem AX-Register begrenzt werden.)
Code: Alles auswählen
ASCII DB "00000000", "$" ; Platz für 8 Hexadezimale ASCIIs
;-------------------------------------
mov ax, DATA
mov ds, ax
mov eax, 6789ABCDh ; Beispielwert
call HEX
mov dx, OFFSET ASCII
mov ah, 9
int 21h
;-------------------------------------
; Subroutine
;-------------------------------------
HEX: mov di, OFFSET ASCII ; Doppel-Word nach Hex-Zeichen wandeln
mov cl, 8 ; 8 Zeichen
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 (nach ds:di)
inc di ; Zeiger erhöhen
dec cl ; Ziffer-Anzahl verringern
jnz A
ret
DWORD im EAX-Register als Dezimalwert ausgeben:
Code: Alles auswählen
WERT32 DB 20h, 20h, 20h, 20h, 20h, 20h, 20h, 20h, 20h, 20h
DB 0Dh, 0Ah, "$"
;-------------------------------------
mov ax, DATA
mov ds, ax
mov eax, 0FFFFFFFFh ; Werte von 0 bis 4.294.967.295
call DEZOUT32
mov dx, OFFSET WERT32
mov ah, 9
int 21h
;-------------------------------------
; Subroutine
;-------------------------------------------
DEZOUT32: mov ebx, 1000000000
mov cl, 0Ah ; maximal Zehn Ziffern
xor si, si
mov di, OFFSET WERT32
ASC32: xor edx, edx
div ebx
mov ebp, edx ; Rest retten
add al, 30h ; nach ASCII wandeln
and si, si ; schon ein Ascii eingetragen?
jnz short STORE32
cmp al, "0" ; Ascii = "0"?
jz short NULL32
STORE32: mov [di], al ; Ascii-Ziffer eintragen (nach ds:di)
inc si ; Ascii-Zähler erhöhen
NULL32: inc di ; Zeiger erhöhen
mov eax, ebx ; Teiler holen
mov ebx, 0Ah
xor edx, edx
div ebx ; durch Zehn
mov ebx, eax ; Wert retten
mov eax, ebp ; Rest holen
dec cl
jnz ASC32
ret
Dirk
Re: Re:
Verfasst: Fr 21. Mai 2010, 12:16
von elianda
freecrac hat geschrieben:
AGP-Karten werden unter DOS wohl nur auf PCI-Geschwindigkeit laufen. Für eine AGP-Übertragungsgeschwindigkeit muss man wohl diesen speziellen AGP-Transfermode erst einstellen bevor es schenller gehen kann.
Wie man das macht weiss ich allerdings nicht.
Im Prinzip kommt das hin, nur läuft AGP 1x auf 66 MHz, so dass man annehmen kann, dass der AGP die doppelte Transferrate eines normalen PCI 32 Bit 33 MHz Steckplatzes erreicht. Wieviel davon softwareseitig ankommt ist eine andere Frage.
Für mich sieht es jedoch oft so aus, dass halbwegs moderne Local-Bus Karten (also PCI, VLB usw.) für DOS-Spiele ausreichend flott sind. Der Geschwindigkeitsunterschied ist bei den ISA-Karten noch viel relevanter.
Ich finde, dass andere Größen auch wichtig werden. Beispielsweise die BIOS-ROM Größe. Man hört häufiger, dass sich Leute modernere Karten in Retro Rechner verbauen und sich dann wundern, dass keine UMBs mehr zum hochladen zur Verfügung stehen.
Oder wie der Unterschied zwischen LFB und Banked Betrieb ist. Gerade die frühen Super-VGA Spiele nutzen trotz der höheren Auflösungen Banked Mode. Es stellt sich zwangsläufig die Frage ob die Bankumschaltung über das BIOS eine Geschwindigkeitsbremse ist. Wenn dies lange dauert, kann die Fillrate der Karte noch so gut sein und man merkt nichts davon.
Re: Re:
Verfasst: Sa 22. Mai 2010, 09:45
von freecrac
elianda hat geschrieben:freecrac hat geschrieben:
AGP-Karten werden unter DOS wohl nur auf PCI-Geschwindigkeit laufen. Für eine AGP-Übertragungsgeschwindigkeit muss man wohl diesen speziellen AGP-Transfermode erst einstellen bevor es schenller gehen kann.
Wie man das macht weiss ich allerdings nicht.
Im Prinzip kommt das hin, nur läuft AGP 1x auf 66 MHz, so dass man annehmen kann, dass der AGP die doppelte Transferrate eines normalen PCI 32 Bit 33 MHz Steckplatzes erreicht.
Wohl nur wenn dieser AGP-Transfer-Mode auch eingeschaltet wurde. Ich vermute sonst verhält sich eine AGP-Karte wie eine PCI-Karte und die volle Geschwindigkeit bleibt einfach ungenutzt.
Vergleichsweise wie "UDMA" auf Socket 7-Mainboards wo man aber mit einem Treiber nachhelfen kann. In jüngeren Bios auf modernen Mainboards ist UDMA schon integriert.
Wieviel davon softwareseitig ankommt ist eine andere Frage.
Zwischen dem zyklischen Befüllen des Bildspeichers wird das darzustellende Bild berechnet und aufbereitet. Das nimmt auch eine gewisse Zeit in Anspruch. Wenn beides länger dauert als der Zyklus den der Rasterstrahl unten abgeschaltet und ober wieder eingeschaltet wird haben wir ein erstes Zeitproblem einen fliessenden Ablauf zu gewährleisten.
Für mich sieht es jedoch oft so aus, dass halbwegs moderne Local-Bus Karten (also PCI, VLB usw.) für DOS-Spiele ausreichend flott sind.
Ausreichend flott steht in diesem Zusammenhang damit wie (wenig) aufwendig die Spiele gestaltet sind.
Der Geschwindigkeitsunterschied ist bei den ISA-Karten noch viel relevanter.
Das denke ich auch.
Ich finde, dass andere Größen auch wichtig werden. Beispielsweise die BIOS-ROM Größe. Man hört häufiger, dass sich Leute modernere Karten in Retro Rechner verbauen und sich dann wundern, dass keine UMBs mehr zum hochladen zur Verfügung stehen.
Von den bei mir eingesteckten 4GB Ram bleiben nur noch ca. 2.8 GB nutzbar, der Rest ist belegt. Wie groß die UMBs sind habe ich jetzt nicht geschaut.
Oder wie der Unterschied zwischen LFB und Banked Betrieb ist.
Gemessen habe ich es noch nicht. Ich benutze heute selber nur noch Vesamodi mit LFB, weil mir die Bankumschltung zu umständlich ist.
Gerade die frühen Super-VGA Spiele nutzen trotz der höheren Auflösungen Banked Mode.
Vermutlich weil es früher nur wenige Karten gab die LFB schon unterstützten und man kompatibel zu den älteren Karten bleiben wollte.
Es stellt sich zwangsläufig die Frage ob die Bankumschaltung über das BIOS eine Geschwindigkeitsbremse ist.
Jede Bankumschaltung (die ja letztendlich auch vom Bios über die entsprechende(n) Port(s) vorgenommen werden) dauert eben eine gewisse Zeit. Ich denke das diese Portzugriffe um einiges mehr an Zeit verschlingen, als der Biosaufruf mit allen darin abgearbeiteten Befehle zusammengerechnet ohne die eigentlichen Portzugriff(e) für die Bankumschaltung, so das es nur ein marginaler Unterschied ist ob man die Umschaltung über die Ports selber vornimmt, oder das Bios dieses erledigen läßt. Bei meiner ET4000 habe ich im BIOS die Ports für die Bankumschaltung gefunden und habe meine Anwendung entsprechend geändert in dem ich den Biosaufruf herausnahm und dort durch Portzugriffe ersetzte.
Wenn dies lange dauert, kann die Fillrate der Karte noch so gut sein und man merkt nichts davon.
Ich denke schon das die Zeit für die Bankumschaltung besonders in höheren Video-Modi relevant ist wenn bildschirmfüllende Veränderungen vorgenommen werden sollen.
Dirk
Re: Re:
Verfasst: Sa 22. Mai 2010, 14:41
von Dosenware
freecrac hat geschrieben:
Wohl nur wenn dieser AGP-Transfer-Mode auch eingeschaltet wurde. Ich vermute sonst verhält sich eine AGP-Karte wie eine PCI-Karte und die volle Geschwindigkeit bleibt einfach ungenutzt.
66Mhz*32Bit ist bereits der langsamste Modus, da brauchst du nichts mehr einzuschalten.
Von den bei mir eingesteckten 4GB Ram bleiben nur noch ca. 2.8 GB nutzbar, der Rest ist belegt.
hat aber nichts mit dem Bios der Geräte zu tun (eher mit dem Bios des Mainboards), das sind IO-Adressen.
Es stellt sich zwangsläufig die Frage ob die Bankumschaltung über das BIOS eine Geschwindigkeitsbremse ist.
kommt darauf an, die Matroxkarten laufen bei mir nur mit Firmwareversion 1.2, weil in der Version 1.8 einige Vesamodi zwar LFB unterstuetzen, dafuer aber langsamer sind, siehe:
http://www.dosforum.de/viewtopic.php?p=5595#p5595
Re: Re:
Verfasst: Sa 22. Mai 2010, 21:21
von freecrac
Dosenware hat geschrieben:freecrac hat geschrieben:
Wohl nur wenn dieser AGP-Transfer-Mode auch eingeschaltet wurde. Ich vermute sonst verhält sich eine AGP-Karte wie eine PCI-Karte und die volle Geschwindigkeit bleibt einfach ungenutzt.
66Mhz*32Bit ist bereits der langsamste Modus, da brauchst du nichts mehr einzuschalten.
Wieso eigentlich 66 Mhz, ich denke PCI(ohne X oder e) läuft mit 33 Mhz, so das jede AGP-Schnittstelle genau mit dieser Geschwindigkeit läuft, solange bis der schnellere AGP-Transfer-Mode eingeschaltet wird.
Mir sind keine DOS-AGP-Treiber bekannt die so etwas für uns erledigen können.
Von den bei mir eingesteckten 4GB Ram bleiben nur noch ca. 2.8 GB nutzbar, der Rest ist belegt.
hat aber nichts mit dem Bios der Geräte zu tun (eher mit dem Bios des Mainboards), das sind IO-Adressen.
Doch auch, denn die Geräte blenden ihr Geräte-Bios und auch ihre Portadressen verwaltet vom Mainboardbios in unser Ram mit ein. Die Grafikkarte belegt dabei ebenfalls einen großen Adressbereich für Rom, IO und zwei Framebuffer.
Es stellt sich zwangsläufig die Frage ob die Bankumschaltung über das BIOS eine Geschwindigkeitsbremse ist.
kommt darauf an, die Matroxkarten laufen bei mir nur mit Firmwareversion 1.2, weil in der Version 1.8 einige Vesamodi zwar LFB unterstuetzen, dafuer aber langsamer sind, siehe:
http://www.dosforum.de/viewtopic.php?p=5595#p5595
Das finde ich schon merkwürdig wenn Anwendungen mit LFB-Modi langsamer laufen als mit Banked-Modi, da bei LFB-Modi ja keinerlei Unterstützung vom Bios mehr benötigt wird für die Bankumschaltung wenn der betreffende Mode erst einmal eingeschaltet wurde.
Dirk
Re: Benchmark
Verfasst: So 23. Mai 2010, 00:59
von elianda
Für AGP siehe z.B. hier
http://books.google.de/books?id=u6RE2pc ... &q&f=false
Eine Frage beim schreiben in den Grafikkartenspeicher ist ja oft die Umsetzung. Die einfachste Annahme ist, dass die Bytes des Framebuffers den RAM der Grafikkarte abbilden und deren DAC die Daten im gleichen Format ausliest zur Darstellung. Das muss aber nicht zwangsläufig der Fall sein. Es kann auch sein, dass die Speicherlayouts sich unterscheiden und der Grafikchip Speicherzugriffe mit längerer Latenz benötigt. Wenn z.B. aus einem Word Write auf den Framebuffer zwei Bytezugriffe auf verschiedene Speicherseiten des Grafikspeichers folgen.
Re: Benchmark
Verfasst: So 23. Mai 2010, 07:33
von freecrac
Super, dort werde ich gleich mal hinein schnuppern.
...
Wie ich schon vermutet habe ist die Konfiguration eines AGP-Adapters immer im Zusammenhang mit dem verwendeten Chipsatzes des Mainboards zu sehen, so das wir ggf. am Anfang erstmal herausfinden müssen mit was für einen Chipsatz wir es zu tun haben, bevor wir uns den AGP-Command-Registern zu wenden und damit den Adapter konfigurieren können.
Eine Frage beim schreiben in den Grafikkartenspeicher ist ja oft die Umsetzung. Die einfachste Annahme ist, dass die Bytes des Framebuffers den RAM der Grafikkarte abbilden und deren DAC die Daten im gleichen Format ausliest zur Darstellung. Das muss aber nicht zwangsläufig der Fall sein. Es kann auch sein, dass die Speicherlayouts sich unterscheiden und der Grafikchip Speicherzugriffe mit längerer Latenz benötigt.
Ist das ein Hinweis darauf das Schreibzugriffe nach A000:0 möglicherweise schneller vollzogen werden können als in den LFB?
Wenn z.B. aus einem Word Write auf den Framebuffer zwei Bytezugriffe auf verschiedene Speicherseiten des Grafikspeichers folgen.
Ja das kenne ich auch vom Ramspeicher, hierbei kann man bei Schreib- und Lese-Zugriffen Rücksicht auf den Cache nehmen und auch für ein Daten- und Code-Alignment sorgen. Falls darauf keine Rücksicht genommen wird, können wir mit einer Verzögerung rechnen.
Dirk
Re: Re:
Verfasst: So 23. Mai 2010, 07:39
von Dosenware
freecrac hat geschrieben:Wieso eigentlich 66 Mhz, ich denke PCI(ohne X oder e) läuft mit 33 Mhz
PCI gibts in den Varianten 33/66MHz 32/64Bit EDIT: Afair auch noch 3,3/5V, wobei bei normalen Nutzern fast ausschließlich die 33MHz/32bit Variante zum einsatz kam/kommt.
stell dir AGP in der langsamsten Variante also einfach als 66MHz/32bit PCI vor - PCI X/E sind schon wieder ganz andere Geschichten.
Doch auch, denn die Geräte blenden ihr Geräte-Bios und auch ihre Portadressen verwaltet vom Mainboardbios in unser Ram mit ein.
Die Biosroutinen sind irgendwo zwischen C000 und FFFF eingeblendet - also den Ort fuer die UMBs.
Bei den Portadressen spielt die Größe keine wirkliche Rolle, da reserviert das Mainboardbios ueblicherweise ~500MB fuer diesen Zweck. Wichtiger ist der Ort (naja, in einem Dosforum eigentlich nicht - welches Dosprogramm braucht schon Gigabyteweise Speicher?), denn den Speicher der dahinter noch frei ist koennen die wenigsten Systeme verwalten, mit deinen 2,8 Gb hattest du also nur das Pech, dass die Portadressen an einer recht niedrigen Speicheradresse eingeblendet wurden, bei mir geht das erst ab 3,25GB los.
Daran aendert auch andere Hardware nichts, solange das Mainboard(bios) dasselbe bleibt - nur zwischen C000-FFFF kann sich dann einiges veraendern.
siehe auch:
http://www.dosforum.de/viewtopic.php?p=2688#p2688
http://www.dosforum.de/viewtopic.php?p=5709#p5709 (scrollen)
EDIT: auch nett, "Zeitgleich" geschrieben...
Re: Re:
Verfasst: So 23. Mai 2010, 12:43
von freecrac
Dosenware hat geschrieben:freecrac hat geschrieben:Wieso eigentlich 66 Mhz, ich denke PCI(ohne X oder e) läuft mit 33 Mhz
PCI gibts in den Varianten 33/66MHz 32/64Bit EDIT: Afair auch noch 3,3/5V, wobei bei normalen Nutzern fast ausschließlich die 33MHz/32bit Variante zum einsatz kam/kommt.
stell dir AGP in der langsamsten Variante also einfach als 66MHz/32bit PCI vor
Aha, du hast recht ich habe mal hier geschaut:
http://www.ece.mtu.edu/faculty/btdavis/ ... PCI_22.pdf
- PCI X/E sind schon wieder ganz andere Geschichten.
Ok.
Doch auch, denn die Geräte blenden ihr Geräte-Bios und auch ihre Portadressen verwaltet vom Mainboardbios in unser Ram mit ein.
Die Biosroutinen sind irgendwo zwischen C000 und FFFF eingeblendet - also den Ort fuer die UMBs.
Genau.
Bei den Portadressen spielt die Größe keine wirkliche Rolle, da reserviert das Mainboardbios ueblicherweise ~500MB fuer diesen Zweck.
Wobei dieser Bereich wohl für Memory Mapped I/O gemeint ist?
Damit habe ich selber noch keine Erfahrung gesammelt, ich habe bisher nur Port-Mapped I/O benutzt.
Wichtiger ist der Ort (naja, in einem Dosforum eigentlich nicht - welches Dosprogramm braucht schon Gigabyteweise Speicher?),
denn den Speicher der dahinter noch frei ist koennen die wenigsten Systeme verwalten,
Ohne Memmorymanager ala emm386.exe kann jede DOS-Anwendung doch selber in den PM schalten und den gesamten 4GB-Adressraum nach belieben und Möglichkeit auch selber verwalten.
Ich verwende dafür den Unrealmode/Big-Realmode um auch weiterhin DOS- und BIOS-Aufrufe machen zu können und um den gesamten 4GB-Adressbereich adressieren zu können, bzw. den freien Speicher als Datenspeicher zu nutzen.
Siehe dazu auch meinen Beitrag über den
Unrealmode:
http://www.dosforum.de/viewtopic.php?f=15&t=2921 (scrollen)
mit deinen 2,8 Gb hattest du also nur das Pech, dass die Portadressen an einer recht niedrigen Speicheradresse eingeblendet wurden, bei mir geht das erst ab 3,25GB los.
Daran aendert auch andere Hardware nichts, solange das Mainboard(bios) dasselbe bleibt - nur zwischen C000-FFFF kann sich dann einiges veraendern.
Ich hatte schon vor dem Kauf des Asus Striker 2 vermutet das so kommen wird, von Pech kann also nicht wirklich die Rede sein.
Dirk
Re: Benchmark
Verfasst: Mo 7. Jun 2010, 17:53
von ManAtWork
der download klappt leider nicht
Re: Benchmark
Verfasst: Mi 13. Apr 2011, 19:31
von drzeissler
Hallo,
nehmen wir mal an ich habe einen Schneider Tower AT (286er mit 10 Mhz) und derzeit eine ET4000 ISA Grafikkarte mit 1MB installiert.
Ist das die beste Wahl für Dos und Windows 3.0, oder gibt es für ISA-16Bit noch eine performantere Karte ?
Derzeit habe ich eine SB 2.0 8Bit in der Kiste. Würde es Sinn machen eine GUS-ACE dazu zu stecken, oder ist das bei den 10Mhz eh sinnlos.
Beste Grüße
Doc
Re: Benchmark
Verfasst: Mi 11. Mai 2011, 21:46
von drzeissler
Bidde:
http://www.mediafire.com/?gbmxcuvl5m3ho0j
Mich würden VGA-Benchmarks mit AT's (286er) interessieren.
Doc
Re: Benchmark
Verfasst: So 26. Jun 2011, 19:10
von GKar_6128
[quote=Wer hat Lust, an einem Geschwindigkeits-Vergleich unserer DOS-Kisten teilzunehmen?/quote]
Ich immer
28.2 FPS ( Non Linear: 31.1 FPS )
Pentium II 333 ( 66 ) Mhz, 64MB, ATI Mach64
Re: Benchmark
Verfasst: So 26. Jun 2011, 19:37
von Mystery
Mein Pentium1 Tillamook schafft ohne L2 Cache knapp über 40 FPS. (dezent auf geschmeidige 440MHz übertaktet)
28,5FPS bekomme ich mit meinem 250MHz Desktop P1 hin.
Braucht der PCPBench für einen PentiumII ebenfalls fastvid für volle Perfomance? Denn die FPS sind für 333MHz relativ niedrig.