Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » EC1834 16-Bit Zugriffe, VGA Programmierung » Themenansicht

Autor Thread - Seiten: -1-
000
23.12.2018, 07:39 Uhr
Hobi



Ich habe eine Weile debuggt, da ich mich gewundert hatte, dass meine VGA Karte im EC1834 funktioniert, aber ich keine Software habe, die im Grafikmode funktioniert.
Bei der Entwicklung EC1834 wurde sehr viel auf Kompatibilität geachtet. Leider gibt es noch einen großen Unterschied im Vergleich mit dem IBM-PC der aus der 8088 Ecke kommt.

Der EC1834 benutzt generell 16-Bit IO-Zyklen, während IBM-AT per Default 16-Bit IO-Zyklen in zwei 8-Bit Zyklen aufgeteilt werden. Beim Schneider PC1512/1640 oder anderen 8086 Rechnern bin ich mir nicht sicher, welche der beiden Implementierungen verwendet werden. Ich habe keine Referenz.

Der 8088 braucht also für 16-Bit I/O Zugriffe bauartbedingt 2 Buszyklen. Befehle der Art:

MOV DX,3C4
OUT DX,AX

verlaufen so, dass zuerst die Adresse 3C4 mit AL auf den Bus gelegt wird und anschliessend 3C5 und AH. Soweit ist das erst einmal einfach zu nachzuvollziehen.

Beim EC1834 dagegen, bedingt durch die 8086 Herkunft, wird der OUT DX,AX Befehl in nur einem Buszyklus ausgeführt mit dem 16 Bit Register AX auf den Datenleitungen. Als Nebeneffekt braucht ein 16-Bit IO auf ungerade Adressen dann aber doch 2 Zyklen.

Das klingt auf den ersten Blick auch erst einmal ganz normal. Wo ist nun das Problem?

Nun ist es leider so, dass genau diese 16-Bit Zugriffe auf 8-Bit Karten zu Problemen führen. Beim IBM-AT hat man das Problem konstruktiv gelöst, mittels dem /IOCS16 Signal, so dass per-Default die Karten als 8 Bit angesprochen werden, ähnlich dem /MEMCS16 Signal.

Die VGA Karte wurde so entwickelt, dass die Portzugriffe ausschliesslich über 8-Bit IO erfolgen. Deswegen ist es auch möglich viele der Karten auch in einem 8-Bit Slot zu betreiben. Beim Speicherzugriff erfolgt eine automatische Erkennung, d.h. die 16-Bit Schreibbefehle werden in 2 Buszyklen durchgeführt.
Generell stellt die Inkombatibilität kaum ein Problem dar, da die Portzugriffe old-school nacheinander ausgeführt werden. Insbesondere solange man nur das Video BIOS benutzt, ist man relativ sicher.

Hier ein Beispiel für die Verwendung von 8-Bit IO Zugriffen, also wie es in den 80ern häufig gemacht wurde. Seltsamerweise hat man statt der Taktzyklenoptimierung lieber auf Kompatibilität geachtet, bzw. 16-Bit IO vermieden.

MOV DX,3C4
OUT DX,AL
INC DX
OUT DX,AH

Nur Leider hat sich in den 90er eine Optimierung eingeschlichen. Michael Abrash hat eine umfangreiche Abhandlung über VGA Programmierung geschrieben:
https://www.phatcode.net/res/224/files/html/ch25/25-02.html

Und genau diese Beispiele funktionieren eben nicht. Leider verwenden viele Programme hin- und wieder diese Codesequenzen.

Ich glaub hier im Forum gab es einen Link zu einer russischen Webseite, die eine Umbauanleitung für das Motherboard zeigte. Das ganze war nicht trivial und es ist wahrscheinlich auch wenig hilfreich jetzt alle noch verbliebenen Rechner nachzurüsten.

Option b) wäre wahrscheinlich das Programm DOSBOX so zu modifizieren, dass es solche "inkompatiblen" Zugriffe anzeigt und man so wenigstens weiss, das das Programm nicht auf dem EC1834 läuft. Vielleicht könnte man zusätzlich einen Grafiktest schreiben um einzelne Funktionen durchzutesten.

Zusammenfassend kann man sagen, dass aus Kompatibilitätsgründen 8-Bit Karten auch nur mit 8-Bit Befehlen angesteuert werden sollen. Andere Karten könnten ähnliche Probleme haben.
--
-------------------------------------------
Corontäne
-------------------------------------------

Dieser Beitrag wurde am 23.12.2018 um 08:00 Uhr von Hobi editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
23.12.2018, 09:32 Uhr
Klaus



Hallo Hobi,

danke für Deine Nachforschungen.
Ich habe in meinem 1834 auch eine ET3000 Karte stecken und verschiedene alte DOS-Programme/Spiele (z.B. aus der Keen Serie) laufen da nicht. Da könnte ja das von Dir erwähnte Problem u.U. ein Grund sein.

Die Änderungen (Umbauanleitung) ist vermutlich das hier, unter 008?
http://www.robotrontechnik.de/html/forum/thwb/showtopic.php?threadid=15913

Wäre interessant, ob das funktioniert, aber ich möchte meinen EC1834 nicht so "zerbasteln".
Ich bin mir auch nicht sicher, ob die Anleitung komplett ist und für alle Board-Varianten gilt.
Ich hatte den Tronix vor langer Zeit mal angeschrieben, aber außer, dass er momentan keine Zeit, kam dann nichts mehr.
Naja ... so wirklich wichtig war es mir auch nicht.

Es wird ja immer mal von einer XT-IDE Karte geschrieben.
Sind für diese, die erwähnten Hardwareänderungen im EC1834 auch notwendig?
Hat schon mal einer so eine Karte im EC1834 probiert? (sofern ISA-Steckplätze drauf sind)

Viele Grüße,
Klaus

Dieser Beitrag wurde am 23.12.2018 um 09:32 Uhr von Klaus editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
23.12.2018, 10:09 Uhr
jm2000



Hobi, danke für Deine interessanten Nachforschungen.
Wenn man die betroffenen Programme patcht, also den 16bit Zugriff im Code aufsplittet, hauen die Timings der meisten Routinen vermutlich nicht mehr hin, oder?

Gruß, Jan
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
23.12.2018, 10:42 Uhr
Hobi



Das Timing sollte im allgemeinen unkritisch sein, da die Programme auf vielen Rechnern von 4.77 MHz bis 20MHz laufen sollten. Aber es dürfte nicht so einfach ein Programm umzupatchen.

Es wäre Interessant mal zu schauen ob der Keen angepasst werden kann.

Beim XT-IDE BIOS nimmt die Software einen 16-Bit Zugriff per Default an. Es sollte also ersteinmal funktionieren. Probleme können immer noch auftreten, aber ich nehme an, das dies schon im Kode berücksichtigt wurde.

Und wenn man anfängt nachzudenken, findet man auch was im Netz. Ich habe dosbox-x installiert. Das Logfile zeigt reichlich 16-Bit Zugriffe (Die Leider nicht funktionieren).

LOG: 62195510 DEBUG MISC:IO write slow path port=3ce data=5 iolen=2: device matches=0
xxx: OUT DX= 3ce,AX= 5
xxx: OUT DX= 3ce,AX= 4
LOG: 62195520 DEBUG MISC:IO write slow path port=3c4 data=102 iolen=2: device matches=0
xxx: OUT DX= 3c4,AX= 102
xxx: OUT DX= 3ce,AX= 5
xxx: OUT DX= 3ce,AX= 104
xxx: OUT DX= 3c4,AX= 202
xxx: OUT DX= 3ce,AX= 5
xxx: OUT DX= 3ce,AX= 204
xxx: OUT DX= 3c4,AX= 402
xxx: OUT DX= 3ce,AX= 5
xxx: OUT DX= 3ce,AX= 304
xxx: OUT DX= 3c4,AX= 802
xxx: OUT DX= 3ce,AX= 5
xxx: OUT DX= 3c4,AX= 102

Civ1 und Colonization sollten dagegen besser funktionieren.
--
-------------------------------------------
Corontäne
-------------------------------------------

Dieser Beitrag wurde am 23.12.2018 um 12:42 Uhr von Hobi editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek