Hello, Guest the thread was called119 times and contains 1 replay

last post from markusC64 at the

Bug im VIC-II-Data Sequencer im U64?

  • Hallo,


    ich habe mich mal am Wochenende verstärkt mit einem Fehler im U64 in der Demo "Shards Of Fancy" von Lft beschäftigt.


    Im angehängten Bild sieht man rechts oben Pixel-Geflimmer (über dem S von GREETS), die nur auf dem U64 und nicht auf realen C64-Maschinen oder Emulatoren zu sehen sind.


    Im Demo sind diese Pixel in Zeile 51 (wobei dies hier eine idle-Zeile ist, da der Screen im Demo eine Zeile nach unten gezogen wurde und erst bei Zeile 52 beginnt).


    U64Stream-20190921131331-1-768.png


    Ich habe mir den Code der Demo im Detail angesehen und mit dem Wissen mir mein eigenes kleines Programm zusammengeschustert. (Ordentlicher Code sieht anders aus, ich habe hier auf Optimierungen vollkommen verzichtet...)


    c64.png


    Das obige Bild zeigt den Output des Programms im angehängten zip-Archiv. Dabei ist auch hier die rechte obere Ecke von Bedeutung. Bei realen Maschinen und auch in Emulatoren ist diese Stelle stets schwarz, beim U64 wird sie mit hellen, verschiedenen Pixel aufgefüllt.


    Dabei scheint das Verhalten des U64 völlig in Ordnung zu sein: Zeile 51 ist im Idle-State, da $d011 zu Beginn der Zeile 51 den Wert $3c enthält (also der VIC-II die Bitmap erst ab Zeile 52 darstellen möchte, da wo auf der linken Seite das kleine Viereck ist...). An besagter rechter Stelle in Zeile 51 wird mittels $3b -> ($d011) der Daten-Sequencer vom Idle-State in den Display-State gezwungen. Und zwar unverzüglich, so wie es im VIC-II-Dokument von Christian Bauer steht (Kapitel 3.7.1).


    Insofern bin ich jetzt ein klein wenig verwirrt, als das sich der U64 konform zum VIC-II-Dokument verhält, aber dennoch offensichtlich ein Unterschied zu der restlichen Welt existiert...


    Ich habe das Programm und dessen Quelltext (für ACME) mal drangehängt. Die hellblauen Balken sind übrigens gestreckte Sprites, die sind hier aber nur nebensächlich. Ich bin sicher, dass das Schreiben nach $d011 und das Erzeugen einer "Bad Line"-Condition zu dieser Zeit der Auslöser sein muss.



    Könnt ihr diesen Fehler bei Euch nachstellen?


    Eure (technischen) Kommentare hierzu würden mich sehr interessieren...


    Gruß

    Thomas


    PS: Der dunkelgraue kleine Balken auf der linken Seite in Zeile 50 beginnt auf den realen Maschinen ganz leicht versetzt (2 Pixel?) zum linken Rand. Der C64-Debugger rendert es genauso wie die echten Maschinen, während der VICE-Emulator an dieser Stelle patzt und den dunkelgrauen Balken an der gleichen X-Position wie die darunter liegende schwarze Zeile beginnen lässt... (Aber das ist aktuell ja nicht relevant...)


    PPS: Und ja, Gideon wird darüber auch informiert... :-)

  • Darf ich fragen, welche Firmware?


    Edit: Du hast Recht, bei der aktuellen Alpha tritt das Problem ebenfalls auf. Und am C128 ist die Ecke schwarz.