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. |