Hallo Besucher, der Thread wurde 23k mal aufgerufen und enthält 107 Antworten

letzter Beitrag von katarakt am

VIC oder CIA Nachbauen?

  • Die Frage ist ob man unbedingt einen FPGA benötict, eigentlich müßte man den auch mit einem 32 Bit uController emulieren können.


    Interessanter finde ich eigentlich die Frage ob man nicht einen CIA emulieren könnte.


    Mittlerweile gibt es 32Bit Controller mit 80MHz für ca. 5 Euro. Also preislich attraktiv. Als das 2012 in dem verlinkten Forum diskutiert wurde, sprachen die von einem ARM mit 20MHz der dann 10 Zyklen Zeit hätte um auf CS zu reagieren, bei einem solchen mit 80MHz wären das schon 40 Zyklen und da kann man eine Menge machen.

  • Die Frage ist ob man unbedingt einen FPGA benötict, eigentlich müßte man den auch mit einem 32 Bit uController emulieren können.

    Wie schnell willst Du das Ding denn takten, um rein in Software die beiden Ausgangssignale Luma und Chroma mit einem Pixeltakt von über 8 MHz erzeugen zu können, zusätzlich zur ganzen anderen inneren Verarbeitungslogik?
    Dass diese beiden Ausgänge quasi analog sind, ist auch irgendwie egal?

    Interessanter finde ich eigentlich die Frage ob man nicht einen CIA emulieren könnte.[...]
    10 Zyklen Zeit hätte um auf CS zu reagieren, bei einem solchen mit 80MHz wären das schon 40 Zyklen und da kann man eine Menge machen.

    Gut, dass so ein CIA-Chip intern rein gar nichts tut, außer auf das ChipSelect-Signal zu warten. :drunk:

  • Wie schnell willst Du das Ding denn takten, um rein in Software die beiden Ausgangssignale Luma und Chroma mit einem Pixeltakt von über 8 MHz erzeugen zu können, zusätzlich zur ganzen anderen inneren Verarbeitungslogik?Dass diese beiden Ausgänge quasi analog sind, ist auch irgendwie egal?

    Gut, dass so ein CIA-Chip intern rein gar nichts tut, außer auf das ChipSelect-Signal zu warten. :drunk:

    ein sehr konstruktiver Beitrag........


    was macht denn der CIA genau, er hat eine RealTime Clock ein Schieberegister ein paar Timer ansonsten nur Ein und Ausgänge. Warum sollte das ein 80Mhz Controller nicht hinbekommen. Das kritische ist doch dass er das Timing einhalten muss wenn er einen CS bekommt. Das heißt es wird intern ein Interrupt ausgelöst und er muss in dieser Zeit die Adress und Datenleitungen interpretieren und entsprechend reagieren.

  • was macht denn der CIA genau, er hat eine RealTime Clock ein Schieberegister ein paar Timer ansonsten nur Ein und Ausgänge. Warum sollte das ein 80Mhz Controller nicht hinbekommen. Das kritische ist doch dass er das Timing einhalten muss wenn er einen CS bekommt.

    Er muss auch das restliche Timing des CIA genau einhalten, also Timer-Verhalten und IRQ-Verhalten. Achja... Ausserdem muss er NMOS-Ausgangstreiber oder vergleichbares haben weil sonst diverse Tricks mit der Tastatur nicht mehr funktionieren.

  • Ich hatte mir auch schon vor einiger Zeit mal gedanken gemacht wie man einen VIC mit einen STM32 (mit ca. 180MHz) emulieren könnte. Wobei ich persönlich keinen Sinn in Luma/Chroma sehe bei so einen Projekt und lieber gleich ein RGB Signal erzeugen würde. Bei einen Pixelclock von 7,88MHz (PAL) bzw. 8,18MHz (NTSC) stehen gerade mal ca. 22 Takte zur Verfügung um einen Pixel abzuarbeiten. Wenn man dann 8 Sprites übereinander liegen hat und zusätlich die Grafik berechnen muss, wird das schon verdammt knapp. Also wird man am Bus Zugriffe syncron zum Takt abarbeiten müssen, jedoch das Rendern des Bildes muss dann asyncron statffinden, so dass das Bild mit einen gewissen Delay ausgegeben werden kann. Aber mit den vielen Timern und DMAs bei einen STM32 sollte es schon machbar sein.

  • Er muss auch das restliche Timing des CIA genau einhalten, also Timer-Verhalten und IRQ-Verhalten. Achja... Ausserdem muss er NMOS-Ausgangstreiber oder vergleichbares haben weil sonst diverse Tricks mit der Tastatur nicht mehr funktionieren.

    Das Timer verhalten kann man bestimmt mit den integrierten Timern eines uC hinbekommen.
    Kannst Du diese Tricks mit der Tastatur näher erläutern.

  • Das Timer verhalten kann man bestimmt mit den integrierten Timern eines uC hinbekommen.

    Dann go for it. Bau einen funktionsfähigen (Drop-In-) CIA-Ersatz auf µC-Basis und ich bin mir sicher Du wirst Abnehmer dafür finden.

  • Dann go for it. Bau einen funktionsfähigen (Drop-In-) CIA-Ersatz auf µC-Basis und ich bin mir sicher Du wirst Abnehmer dafür finden.

    Dafür bräuchte ich Zeit und Unterstützung von jemanden der den CIA genau kennt. Ist also eher was für den Winter. Aber warum nicht.


    Eine Chip Emulation auf einem uC habe ich noch nicht geschrieben, ist aber mit sicherheit sehr interessant.

  • Im Polling Verfahren die Eingänge abfragen und dann dementsprechend die Ausgänge reagieren lassen. Das wird eine herrliche Tüftelei!
    Erstmal die einfachen Sachen realisieren. Dann das ganze komplexer machen. Am Ende, wenn er anständig läuft, kann man alles weitere Mögliche noch dazu verwirklichen.

  • Redest Du vom VIC oder CIA.

    Für die VIC bräuchte man nen sehr hoch getakteten mP.
    So was geht höchstens für die CIA.
    Wenn man nen Pin mit nem Interrupt versehen mit dem Takt verbindet hat man bei 16 MHZ nur ca 4-6 behefle befor das entsprechende ergebniss aliegen muss. Dannach nochmal so viele für restarbeiten, wie Zähler weiter zählen und so. Das wird echt knapp, selbst für den CIA. Für den VIC würde es nicht reichen. Das Problem ist aber leider, dass man schnellere Systeme dann nicht mehr auf 5V bekommt. Und levelshifter helfen da auch nicht, weil man bidirektionale braucht, die dann die 1MHz nicht mitmachen...

  • Es hat schon vor 15 Jahren 'Peripheriechips' auf Basis der SX52-Microcontroller gegeben, das waren ultra-schnelle PIC-Derivate, in dem Fall glaube ich mit den maximal möglichen 80 MHz getaktet (da kommt der Wert wohl auch in obigem Thread her), aber erstens gibts die nicht mehr, und zweitens war das auch auf dem System ein ziemliches Gefummel, bis es lief- obwohl das Timing wesentlich entspannter war als beim C64. Die 1 MHz sind ja nur der Systemtakt- es finden aber pro Takt zwei Speicherzugriffe statt, und an der 'Übergabestelle' sind Reaktionszeiten im Bereich von 10 Nano-Sekunden nötig, also umgerechnet 100 MHz. Selbst wenn moderne ARM-Prozessoren nur einen Takt pro Befehl brauchen, müssen die Port-Leitungen ja auch noch reagieren... und die sind mitunter *ziemlich* lahm.


    Aus dem Grund kann das SwinSID übrigens auch keine lesbaren Register nachbilden.

  • Für die VIC bräuchte man nen sehr hoch getakteten mP.So was geht höchstens für die CIA.
    Wenn man nen Pin mit nem Interrupt versehen mit dem Takt verbindet hat man bei 16 MHZ nur ca 4-6 behefle befor das entsprechende ergebniss aliegen muss. Dannach nochmal so viele für restarbeiten, wie Zähler weiter zählen und so. Das wird echt knapp, selbst für den CIA. Für den VIC würde es nicht reichen. Das Problem ist aber leider, dass man schnellere Systeme dann nicht mehr auf 5V bekommt. Und levelshifter helfen da auch nicht, weil man bidirektionale braucht, die dann die 1MHz nicht mitmachen...

    16MHz ist doch schon lange keine Taktfrequenz mehr. PIC Controller gibt es bis 300MHz.


    Mich würde mal interessieren warum ich in wenigen Nanosekunden reagieren muss. Ich muss doch erstmal nur das Timing an CS und Adress und Datenleitung einhalten. Ich kann mir nicht vorstellen, dass der CIA die Ausgänge in wenigen nS setzt.

  • Also wenn ich das Datenblatt richtig interpretiere muss ich beim Schreiben den Datenbus 50ns nach CS auslesen und habe dann 150ns Zeit diesen zu auszuwerten. Ich muss allerdings innerhalb 200ns nach CS intern alles interpretiert und die Ausgänge gesetzt haben.


    Stimmt Ihr mir da so zu?

  • Also wenn ich das Datenblatt richtig interpretiere muss ich beim Schreiben den Datenbus 50ns nach CS auslesen und habe dann 150ns Zeit diesen zu auszuwerten. Ich muss allerdings innerhalb 200ns nach CS intern alles interpretiert und die Ausgänge gesetzt haben.


    Stimmt Ihr mir da so zu?

    Ja, das stimmt, bei nem 16Mhz Arduino sins das dann ne Hand voll befehle die man da hat. Dein 300Mhz Killer IC arbeitet vermutlich nicht mit 5V und liegt wohl auch Preißlich wo anders. Aber gib mal den Link her. Ich bin immer auf der suche nach HW, die mir das leben leichter macht.

  • Ja, das stimmt, bei nem 16Mhz Arduino sins das dann ne Hand voll befehle die man da hat. Dein 300Mhz Killer IC arbeitet vermutlich nicht mit 5V und liegt wohl auch Preißlich wo anders. Aber gib mal den Link her. Ich bin immer auf der suche nach HW, die mir das leben leichter macht.

    Ich dachte eigentlich an einen 100MHz Pic. aus der 32 MX Reihe die gibt es für ca. 5,-Euro (Einzelpreis).
    Ja und die arbeiten mit 3,3V, man müßte noch mit den Ein und Ausgängen tricksen um die auf 5V zu bekommen. (Level Shifter)


    Schau mal hier: http://www.microchip.com/Param…h/chart.aspx?branchID=211
    da gibt es eine Übersicht.