von HiassofT » So 28. Feb 2010, 18:36
Hallo Walter!
GoodByteXL hat geschrieben:Frage zu den Zahlen: bei Speedbyte 0 erreicht doch der A8 die theoretische Max.Speed von ca. 15,5KB/s auf der SIO [1773447/2/(Speedbyte+7)/8/1024=15,4632...KB/s bei PAL], falls ich da nicht falsch liege.
12.6 KB/s: 1773447/2/(Speedbyte+7)/10/1000 = 12.667
Ist natürlich brutto und theoretisch, aber wenn ihr mit 20-22KB/s Daten schieben wollt, wie verarbeitet der A8 das? Puffer zum Ausgleich?
Daran arbeitet Fatih. In seinem aktuellen Test-Code liest er einfach fix 256 Bytes, macht aber keine Fehler Checks (Framing Error, Overrun o.ä.). Das spart schon mal ein wenig Zeit im Vergleich zu meinem Highspeed Code - da checke ich pro Byte auf Break-Taste, Framing Error und Overrun, ausserdem muss der Highspeed Code mit beliebig langen Paketen umgehen können (1, 4, 12, 128, 256 Bytes etc.).
In meinem Highspeed Code berechne ich die Checksumme innerhalb der Schleife, Fatih hat den Teil ausgelagert und berechnet sie nach dem Empfangen des Pakets. Fairerweise muss man die Zeit dafür aber natürlich mit einrechnen, die Netto-Datenrate wird dadurch etwas geringer.
Zu guter letzt darf man auch nicht vergessen, daß das Abschalten des ANTIC DMAs und der NMIs einiges bringt. Besonders im Graphics 0 Modus ist der ANTIC DMA wirklich schlimm: in der ersten Bildschirmzeile jeder Graphics-0 Zeile bleiben der CPU nur 17 von 114 Taktzyklen, den Rest klaut sich der ANTIC. Wenn man nun bedenkt, daß pro Sekunde ca. 15000 Bildschirmzeilen dargestellt werden und bei Pokey Divisor 0 ca. 12500 Bytes pro Sekunde verarbeitet werden müssen ist es fast schon ein Wunder, daß sich das überhaupt ausgeht. Bei noch höheren Geschwindigkeiten, wenn pro Bildschirmzeile mehr als 1 Byte verarbeitet werden muss, geht das natürlich schief - die CPU bekommt einfach zu wenig Zeit und "verliert" Bytes.
Bei den NMIs ist's ähnlich: wenn ein NMI "feuert" ist die CPU auch gleich mal für etliche Zyklen mit dem Interrupt-Code beschäftigt - bei hohen Übertragungsraten kann da wieder schnell mal ein Byte "verloren" gehen.
Ich bin schon gespannt wie Fatih die Timeout-Behandlung (ohne NMIs) löst und welche Übertragungsraten dann wirklich machbar sind. Es bleibt also spannend :-)
so long,
Hias