Hört sich gut an, leider kenne ich mich damit nicht aus.elianda hat geschrieben:Da gibt es keinen Handshake, das ist wie 3 wire serial, also send and forget. Der Empfänger muss entsprechend die Zeitbedingung in jedem Fall erfüllen, oder eben der Sender die Zeitvoraussetzungen des Empfaengers kennen.freecrac hat geschrieben:Ich vermute mal weil in kürzeren Zeitabständen die gesendeten Daten noch nicht in Empfang genommen werden können.
War das denn nicht bekannt, oder bewegt sich die Karte ausserhalb jeder Spezifikation, wird in einerm Statusregister ein Empfangsbereit signalisiert obwohl das noch gar nicht der Fall ist, oder warum redet man hierbei von einem Bug in der Firmware?
Dirk
Ist dies nicht der Fall, gehen die Daten einfach verloren. Genauso, wie wenn Du einen FIFO des 16550 befüllst mit mehr als 16 Bytes, ohne diese abzuholen.
Normalerweise zeigt das MT-32 aber einen Overflow auf dem Display an. Darauf sollte man achten, wenn man das erste mal ein Spiel startet. Wenn dies der Fall ist, muss man sich etwas einfallen lassen, damit das Programm die Daten langsamer sendet.
Entweder per BUS und/oder CPU-Bremse. Also sowas wie ISA Teiler hochsetzen, 8 Bit I/O Recovery Time hochsetzen, BusClk erniedrigen, CPU Cache deaktivieren etc.
Wenn man es perfekt machen will, baut man sich eine Box dazwischen mit einem grossen FIFO, der die Daten zeitgerecht weitersendet. Also sowas wie einen Hardware Zwischenpuffer.
Oder man baut sich eine Softwareloesung, die nochmals zwischenpuffert.
Ich weiss nicht wie gut Du Dich da auskennst, aber so eine Lösung, wie der MegaEM Emulator der GUS wuerde sich da anbieten.
Über die V8086 Features von EMM386,QEMM386 usw. verbietet man den Zugriff auf 0x330h+ per I/O Permission Bitmap und faengt die Exception mit seinem eigenen Programm ab. Dann kann man in seinem Programm in Software einen weiteren FIFO einfügen und in der privilegierten Umgebung auf den echten Hardwareport zeitlich korrekt portioniert senden.
Dirk