Commodore PET demo by Genesis Project

  • Sehr beeindruckend! Hier gibt's das D64, darin enthalten ist ein 3032 Programm "NOTE", in dem etwas vom technischen Hintergrund erklärt ist, wie das überhaupt möglich ist.

  • Ist sicher der gleiche Ansatz, wie die Welle, die es beim 64er vor paar jahren gab. Blauer Hintegrund, weiche schnelle Welle - nur hier eben in vertikal. Am Ende ist es einfach ein extrem geschickt eingesetzter Zeichensatz mit allen nötigen "Schwingungselementen", aber so gut wie keinen normalen Chars mehr. Das macht die Sache dann auch sehr schnell.


    weiß nicht, ob es das erste Demo war, aber ich glaube, da habe ich den Effekt das erste Mal gesehen


    https://www.youtube.com/watch?v=5yrCgprL-rU&t=274s

    Neon by Triad
    demo for Commodore 64, 1st at Datastorm 2017
    www.pouet.net



    Ich fand ja das "HighRes" Bild sehr hübsch.

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

    3 Mal editiert, zuletzt von ThoralfAsmussen ()

  • Ich habe mir das youtube-Video angeschaut. Am Emulator hab ich die Emulator-Version angeschaut, da kommen im Vice nur Buchstaben anstatt Hires... Morgen probier ich mal am 3032...


    Er hat ja geschrieben, er würde die "Hires-Grafik" aus den horizontalen Linien verschiedener Zeichen des Char ROMs darstellen. Er würde also quasi aus den festen Zeichen neue mischen. Mich interessiert natürlich sehr, wie das funktionieren soll ?!

    Es gibt kein Register, in dem man die Rasterzeilen zählen kann. Man kann auch zB nicht, ausgehend vom vblanc, die cycles hochzählen, um die dementsprechende Stelle zu bestimmt und dann um zu schalten.


    Ich meine, dass man einen CRTC irgendwie austricksen kann, finde ich noch irgendwoooo plausibel. Oft gibts da ja irgendwelche Hintertürchen. Aber hier beim PET is ja quasi alles festverdrahtet.. Wie will man das softwaretechnisch so verbiegen ?



    Gruß Jan

  • Spontan würde ich behaupten: Damit ist doch eine Hardware-Erweiterung gemeint. In Software ist das nicht machbar, was in dem Video zu sehen ist.

    Klingt wie ein frei programmierbarer Character-Generator. Damit kann man dann Grafiken erzeugen ähnlich wie beim VC20.



    Alles andere glaube ich erst, wenn ich es selber auf meinem CBM gesehen habe. :D

    • i-Telex 7822222 dege d

    • technikum29 in Kelkheim bei Frankfurt

    • Marburger Stammtisch

    Douglas Adams: "Everything, that is invented and exists at the time of your birth, is natural. Everything that is invented until you´re 35 is interesting, exciting and you can possibly make a career in it. Everything that is invented after you´re 35 is against the law of nature. Apply this list to movies, rock music, word processors and mobile phones to work out how old you are."

  • Klingt wie ein frei programmierbarer Character-Generator. Damit kann man dann Grafiken erzeugen ähnlich wie beim VC20.

    Aber übder den ganzen Bildschirm? So viele verschiedenen Chars gibt es doch gar nicht.

    Oder wird das ge-multiplexed...?

    -------------------------------------------------------------------------------
    Suche Rechentechnik aus Deutschland, bzw. Computer Deutscher Hersteller - z.B.

    ANKER, AKKORD, CTM (CTM 70, CTM 9000, CTM 9032), DIEHL/ DDS, DIETZ, FEILER, ISE,
    HOHNER GDC, KIENZLE, KRANTZ, NIXDORF, OLYMPIA, PCS/CADMUS, RUF, SALOTA, S.E.I.,
    SIEMAG, SIEMENS, TAYLORIX, TRIUMPH ADLER - TA, WAGNER, WALTHER, WANDERER,...

    -------------------------------------------------------------------------------

  • Ich wollte es wissen und habe gerade meinen originalen Commodore 3032N aufgebaut. Die Demo läuft einwandfrei ! Genauso wie in dem youtube-Video mit dem "Hires". Unfassbar ! Der Rechner kann plötzlich was, was er gar nicht können kann... :) Zauberei !


    Wie das technisch funktionieren kann, wo doch alles quasi festverdrahtet ist, ist mir nach wie vor unklar...


    Gruß Jan

  • Das nenne ich Retro Computing - genial!

    -------------------------------------------------------------------------------
    Suche Rechentechnik aus Deutschland, bzw. Computer Deutscher Hersteller - z.B.

    ANKER, AKKORD, CTM (CTM 70, CTM 9000, CTM 9032), DIEHL/ DDS, DIETZ, FEILER, ISE,
    HOHNER GDC, KIENZLE, KRANTZ, NIXDORF, OLYMPIA, PCS/CADMUS, RUF, SALOTA, S.E.I.,
    SIEMAG, SIEMENS, TAYLORIX, TRIUMPH ADLER - TA, WAGNER, WALTHER, WANDERER,...

    -------------------------------------------------------------------------------

  • Ich wollte es wissen und habe gerade meinen originalen Commodore 3032N aufgebaut. Die Demo läuft einwandfrei ! Genauso wie in dem youtube-Video mit dem "Hires". Unfassbar ! Der Rechner kann plötzlich was, was er gar nicht können kann... :) Zauberei !


    Wie das technisch funktionieren kann, wo doch alles quasi festverdrahtet ist, ist mir nach wie vor unklar...

    Unglaublich! 8|


    Der muss irgendeine Möglichkeit gefunden haben, die Bildschirmausgabe mit der Bildschirmlogik zu synchronisieren.

    Bei den alten PET 2001 gab es ja eine Möglichkeit irgendein Bildschirmsignal abzufragen. Das musste man vor einem POKE auf den Bildschirm sogar machen, sonst gab es Schnee. Wenn das Signal beim CBM3032 noch vorhanden ist, wäre das eine Möglichkeit.


    Trotzdem sind die Grafikausgaben absolut flimmerfrei. Wie schafft der das in der Geschwindigkeit?

    • i-Telex 7822222 dege d

    • technikum29 in Kelkheim bei Frankfurt

    • Marburger Stammtisch

    Douglas Adams: "Everything, that is invented and exists at the time of your birth, is natural. Everything that is invented until you´re 35 is interesting, exciting and you can possibly make a career in it. Everything that is invented after you´re 35 is against the law of nature. Apply this list to movies, rock music, word processors and mobile phones to work out how old you are."

    Einmal editiert, zuletzt von detlef ()

  • Ich nehme mal an, die Demo ist in Maschinensprache geschrieben, richtig? Ich vermute, das der Videochip je Rasterzeile einen Interrupt auslöst. Die Interrupt-Routine ändert je Rasterzeile die Zeichen im Bildschirmspeicher. Wenn sie klein und schnell genug ist, kann das ganze in der Austastlücke vom Zeilenende bis zum Zeilenanfang bzw. dem Start der Grafik so hinbekommen, das 8 mal pro Zeichen die Zeichen im Bildschirmspeicher für die aktuelle Rasterzeile geändert wird.


    Ich habe auf dem C64 mal einen Film Nachspann programmiert. Das habe ich so gemacht, das ich nach der letzten sichtbaren Rasterzeile einen Interrupt ausgelöst habe und in der dazugehörigen Routine habe ich das Vertikal-Offset-Register von 0 bis 7 aufsteigend geändert. Bei dem Wechsel von 7 zurück auf 0 habe ich dann zusätzlich 920 Zeichen (inklusive dem Farb-RAM) um eine Zeile nach oben kopiert und unten eine neue Zeile eingefügt. Die Routine hatte dafür bis zur ersten sichtbaren Rasterzeile Zeit.Dann ging der ganze Spaß von vorne los.... :)

  • Ich vermute, das der Videochip je Rasterzeile einen Interrupt auslöst.

    Der Rechner hat keinen CRTC. Die Videologik besteht nur aus TTL-ICs, dem Zeichensatz-ROM und 1kB SRAM Videospeicher, auf den CPU und Videologik wechselseitig zugreifen.

    Die ganze Arbeit wie Pixel und Zeilen zählen, Sync- und Videosignale erzeugen wird komplett damit erledigt.


    Ich habe mir extra nochmal die Schaltpläne angesehen, aber nichts gefunden, worüber der aktuelle Status der Videologik abgefragt werden könnte.


    EDIT: Doch noch was gefunden. An CB1 des 6520 an C7 und PB5 des 6522 liegt das Signal VIDEO ON.

    Allerdings ist mir da die Signalrichtung noch nicht klar. Zum einen ist CB1 des 6520 ein Ausgang, zum anderen ist es mit einem Ausgang des 74LS08 an H10 verbunden.

    +++ ATH

  • EDIT: Doch noch was gefunden. An CB1 des an C7 und PB5 des 6522 liegt das Signal VIDEO ON.

    Allerdings ist mir da die Signalrichtung noch nicht klar. Zum einen ist CB1 des 6520 ein Ausgang, zum anderen ist es mit einem Ausgang des 74LS08 an H10 verbunden.

    Ich glaube der 74LS08/H10 ist der Ausgang, der das Signal treibt.

    CB1 am 6520/C7 ist ein (Interrupt-)EINGANG, auch wenn der Pfeil im Schaltplan nach aussen zeigt. Zumindest verstehe ich das Datenblatt der 6520 so.
    Der PB5 am 6522 wird den aktuellen Status des Signals abfragen und waere demnach auch ein Eingang.
    Das VIDEO_ON Signal wird den aktiven Teil des Bildschirms markieren (Vermutung aufgrund des Namens). Es wird also in jeder aktiven Zeile einmal ein Interrupt ausgeloest. Das genuegt um die Software aufzusynchronisieren. Den Rest muss die Software selber mitzaehlen.


    Die Bitmap kann nur dadurch generiert werden, dass in Bildschirmspeicher in jeder Zeile aufs Neue an die richtige Stelle ein Buchstabe mit passendem Bitmap-Wert fuer die entsprechende Hires-Zeile geschrieben wird. Ob jetzt alle 256 Werte fuer jede Zeile im Char-ROM vorhanden sind, wage ich zu bezweifeln. Daher koennte es da sehr "interessante" Einschraenkungen fur die Hires-Grafik geben...


    Enorme Leistung, sowas zu programmieren!

  • Es wird also in jeder aktiven Zeile einmal ein Interrupt ausgeloest.

    Der Interrupt sollte meines Wissens mit 60Hz kommen, da der auch die Timervariable TI weiterzählt.

    Da wird das VIDEO ON wohl den oberen und unteren Rand des Bildschirms steuern.


    Bei den CBMs mit CRTC wird meines Wissens der Interrupt durch VSYNC getriggert.

    Enorme Leistung, sowas zu programmieren!

    Auf jeden Fall!

    Wenn das wirklich mit dem Interrupt erledigt wird, der dann nur einmal pro komplettem Bildschirmaufbau kommt, ist das ja eine wahsinnige Zyklenzählerei.

    +++ ATH

  • Na ja, es gibt ja Timer. Die sollten doch auch auf einem PET schon einen Interrupt ermöglichen. Die muß man halt dann für jede Horizontalline neu laden und jeweils den passenden Char plotten.

    Das bedeutet dann, daß man 8 mal pro Char den Char wechselt, aber dafür ist es ja eine Demo.

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Ja, das mit den Timern stimmt schon.

    Es steht aber trotzdem nur der durch VIDEO ON erzeugte Interrupt zur Synchronisation mit dem Bildaufbau zur Verfügung.

    Alles, was dazwischen passiert, muß darauf abgestimmt werden. Da steckt verdammt viel Arbeit drin, würde ich sagen.

  • Die Timing-Orgien ist doch der geneigte Demo-Programierer vom C64 gewohnt. Jetzt wo das 'Framework' steht, kommt da noch mehr nach. Vielleicht ist es ja auch schon ein inoffizielles Programmmodul im C64-Studio, wer weiß.. Ich muss mir das Demo echt mal auf meinem irgendwann reparierten Originalgerät anschauen, das Geruckel auf Youtube ist ja unerträglich, wenn man weiß wie sauber man das mit großer Anstrengung programmieren kann. Das ist auf YT fast schon unwürdig. Ich kann mir nicht vorstellen, dass die 'Rasterbars' am Anfang so nervös zappeln. Laufschriften haken ja auch alle paar Frames.

  • Also ohne die Demo bereits gesehen zu haben, dem PET kann man durchaus 'Hires' entlocken, solange er den CRTC hat bzw man schnell genug programmiert.


    Jeder PET hat den VSYNC Interrupt um CPU und Video zu synchronisieren. Alles danach ist cycle counting (mit oder ohne timer vom VIA).


    Um mehrere Characters zu mixen gibt es zwei Möglichkeiten. 1. In genau der Rasterzeile wo der Wechsel stattfinden soll einen neuen Wert in den Character memory schreiben. Im Gegensatz zum C64 hat der PET nämlich keine Badlines in denen der Zeilenbuffer einmal pro char zeile komplett gelesen wird, sondern liest den character memory in jeder Rasterzeile. 2. Man kann wie Norbert oben geschrieben hat die Höhe eines Characters ändern und damit eine ganze Zeile "dünner" machen und damit die nächste Character row früher anfangen lassen. Ich meine ich hatte dazu schon mal einen Proof of concept. Man muss nur sehr aufpassen dass die gesamtzahl der rasterzeilen in jedem Bild konstant ist (zB durch erhöhung der Gesamtzahl an Zeilen - falls sichtbar ggf mit wrap im Bildschirmspeicher)


    ich wollte ja mein BASIC Pac-Man von damals mit solchen Effekten neu schreiben aber es sieht so aus als hätte das keinen Neuigkeitswert mehr ;)

  • Da das ein non CRTC PET ist gibt es komplett fixes Video Timing.


    Dh er kann die Grafik nur durch extrem zeitlich kontrolliertes umpoken des Videospeichers gemacht haben. Damit kannst Du einzelne Pixel pro char oder 'borders' wie bei Hires setzen, da der Commodore Font einzelne vertikale Linien wie auch diese Übergänge für alle 8 pixels eines Zeichens hat. Bei anderen Mustern muss man sich im Zeichensatz die am Besten passenden Zeichen (pro Pixelzeile) raussuchen. Da schreibt man sich wohl am Besten ein Programm für.


    Das Vorgehen erklärt auch warum nur wenige Zeichen pro Zeile betroffen sind. Man hat pro pixelrow nur ca 63 CPU Zyklen. Mit loop unrolling, dh 4 clocks LDA abs und 4 clocks STA abs bekommt man maximal 8 Zeichen umgestellt.

  • Hier kommt ne Demo, die mir ebenfalls die Synapsen rausgezwirbelt hat- TRANSACTOR!


    scene.org file archive :: transactor-final.zip


    Corona-bedingt verwese ich abwechselnd zwischen Bett + Keller, weshalb ich mal schnell den 8296-D angeworfen hab:




    Probiert sie mal aus- soll wohl auch auf nem 8032 laufen... den müsst ich erst wieder umstecken.