Wie testet ihr selbst programmierte Änderungen am Kernal?

  • Freak schrieb:

    Geplant ist auch, dass man sich beim Einschalten eins von acht ROMs auswählen kann, welches die CPU dann ins RAM kopiert.
    wo kommen dann die Daten her ? aus einem FlashROM/EEPROM ??

    Freak schrieb:

    Ich bilde mir im Moment auch noch ein, dass man alles in etwa auf die Größe eines Adaptersockels verkleinern könnte. Dann ist die Platine aber auch sechslagig und dass wird alles zu teuer...
    DAS nenne ich sportlich ! Aber IHMO wäre ein DualLayer-Board, was ein bisschen auf Kosten der Größe geht, besser und flexibler geeignet.

    vielleicht will hier der Eine oder der Andere das Ganze ja auch noch nachbauen .... ;)
  • Freak schrieb:

    Die Kernal-Files sollen mit ins Flash der AVR-CPU. Einmal das Original-Kernal und dann ein paar Diff-Files für andere Kernals...
    Hast Du daran gedacht, dass der AVR beim Einschalten das Kernal schneller ins SRAM transferieren muss, als der C64 darauf zugreifen kann ? - Ansonsten geht es dann natürlich nach dem ersten Reset.
    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
  • cbmhardware schrieb:

    Hast Du daran gedacht, dass der AVR beim Einschalten das Kernal schneller ins SRAM transferieren muss, als der C64 darauf zugreifen kann ? - Ansonsten geht es dann natürlich nach dem ersten Reset.
    Freak schrieb doch in Posting #17 schon, dass er die C64-Reset-Leitung mit dem AVR solange auf LOW hält, bis der Kernal-.transfer abgeschlossen ist.
    Einfach, aber genial :)
  • GI-Joe schrieb:

    Freak schrieb doch in Posting #17 schon, dass er die C64-Reset-Leitung mit dem AVR solange auf LOW hält, bis der Kernal-.transfer abgeschlossen ist.
    Einfach, aber genial
    Ja, richtig. das steht da.

    Habe meinen kleinen Ansatz auch fertig: cbmhardware.de/temp/flashkernal4.png . Habe es mal auf meinem Webspace hochgeladen, da es hier doch zu stark skaliert wurde. Muss es demnächst mal testen, ob die Idee so aufgeht.
    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von cbmhardware ()

  • Die Idee ist gut, ich hatte da mit Henning schon auf der DoReCo drüber gesprochen nen besseren "Reprom" oder so was in der Art zu Bauen.

    Allerdings ist der Hardware-Ansatz mit SRAM und Atmega und so eher ein Bauteile-Grab - viel zu Kostenintensiv und auch total Umständlich. Ein Keks von STM macht das alles im Alleingang - und RetroJeck hat dafür schon eine sehr gute Bus-Emulation am Start die nur darauf wartet mal auf den C64 los gelassen zu werden. Größentechnisch wäre das auf der Layout-Größe des alten "Reprom" machbar, nur dann mit USB Anschluss & Co. - Kann vom PC und vom C64 mit Kernals geladen werden und wäre absolut frei Konfigurierbar.
    10 SIN
    20 GOTO HELL

    www.SX-64.de
  • KiWi schrieb:

    STM32FXXX Serie

    Wir werden morgen mal was "basteln".
    Bis zu 256kB Flash. Ja, da passen ein paar Kernals rein 8o
    RTC und vieles mehr. Das ist zwar wie mit Kanonen auf Spatzen schiessen aber, Hey ! Das hört sich mal genial an !!!
    Und bei einem Stückpreis von unter 3€. GENIAL !!!
    Und wenn der per USB oder vom C64 aus, direkt beschreibbar wäre...Oh man, ich fange das Schwärmen an....
    Meine einzige Bitte wäre: Keyman64 Anbindung !
  • KiWi schrieb:

    STM32FXXX Serie

    Wir werden morgen mal was "basteln".

    Schon etwas zum Vorzeigen "gebastelt"?

    Das sind nette kleine Chips mit Potenzial, allerdings denke ich, dass die Geschwindigkeit nicht ausreichen wird. Zum Daten auf den Bus legen mag es noch ausreichen, aber man muss die Datenleitungen auch schnell wieder hochohmig machen!

    Und wenn man dann noch eine serielle Anbindung hat (egal wie), dann ist es sowieso Essig und der C64 kann nicht mehr auf die Emulatordaten zugreifen. Denn sobald der Chip die Schnittstelle bedient, fehlt die Zeit um Adressen zu lesen und entsprechend Daten auszugeben...

    Nur meine laienhafte Meinung... :)



    Bei mir sind inzwischen meine Platinen eingetrudelt, hat dieses Mal von China zu mir über drei Wochen gedauert. Ich schiebe es mal auf die Weihnachtszeit.

    Ich habe auch mal eine neue Farbe getestet (die Platinen sollen gelb sein), aber soooo toll sehen sie meiner Meinung nach nicht aus. <X Ok, "gelb" wird dann nicht wieder bestellt.

    Heute habe ich eine Platine bestückt und der Programmer erkennt auch schon den AVR. Damit ist die Basis für die Softwareerstellung geschaffen. Den DIL-Adapter lasse ich lieber erstmal noch weg, den löte ich an, sobald ich sicher bin, dass der Emulator im C64 keinen Mist machen wird...





    Gruß,
    Thomas
  • Wenn man vom Teufel spricht ... Das BusTiming ist aktuell noch wackelig, an dem Code hat RetroJeck locker ne Woche dran geflucht - ist alles sein Know-How.





    An Bauteilen bleibt später nur der STM32, nen Quarz, nen Spannungswandler und ein paar SMD Kleinteile übrig. Das Ding wird warscheinlich nicht viel größer als der original Kernal Rom selbst.
    10 SIN
    20 GOTO HELL

    www.SX-64.de
  • Freak schrieb:

    Das sind nette kleine Chips mit Potenzial, allerdings denke ich, dass die Geschwindigkeit nicht ausreichen wird. Zum Daten auf den Bus legen mag es noch ausreichen, aber man muss die Datenleitungen auch schnell wieder hochohmig machen!

    Und wenn man dann noch eine serielle Anbindung hat (egal wie), dann ist es sowieso Essig und der C64 kann nicht mehr auf die Emulatordaten zugreifen. Denn sobald der Chip die Schnittstelle bedient, fehlt die Zeit um Adressen zu lesen und entsprechend Daten auszugeben...

    Nur meine laienhafte Meinung...
    Das ist doch mal wirklich nicht laienhaft sondern mitgedacht :)

    Also erstmal: die Geschwindigkeit reicht, um die Sachen auf den Bus zum richtigen Zeitpunkt zu legen und wieder wegzunehmen, es ist
    aber wirklich, wirklich knapp bei diesem Testaufbau (ein schnellerer ist auf dem Weg), das liegt auch daran, das mein PLA manchmal
    kurz /CE auf low zieht für wenige ns und mich fälschlicherweise triggert (beim VIC/6510 Wechsel).

    In den Chip direkt kann ich sicherlich beinah sinnlos viele kernals sichern, wenn ich gepackt nur Differenzen von einem Standardkernal speichere.
    Interrupts über USB oder serielle gehen aber nicht mehr während die busemulation läuft - .vielleicht. geht es stabil mit einem schnellerem Chip aber
    was auf jeden Fall immer gehen wird ist in einem 'Auswahlkernal' eine Option zu haben, das man direkt einen neuen hochladen/benutzen kann,
    ohne ihn flashen zu müssen, vlt. per serielle, usb (kleine Ramdisk) oder (was KiWi vermutlich ausprobieren möchte) per WLAN.
  • KiWi schrieb:

    An Bauteilen bleibt später nur der STM32, nen Quarz, nen Spannungswandler und ein paar SMD Kleinteile übrig. Das Ding wird warscheinlich nicht viel größer als der original Kernal Rom selbst.

    Och, es gibt auch die Bauteile, die ich verwende in "sauklein", so dass ich auch bei meinem Entwurf eine Größe von ca. DIP28 für möglich halte. Aber das werde ich mir wohl trotzdem nicht antuen, soviel freie Zeit habe ich im Moment dann doch nicht...



    So wie ich es rauslese, geht ihr also ähnlich vor, wie beim Harmony Cartridge für die Atari 2600-Console. Ihr nutzt Interrupts vom /CE-Signal, um dann die Datenpins zu beschicken, bzw. (mit IRQ getriggert auf eine positive Flanke?) um die Pins wieder hochohmig zu schalten?

    Ich bevorzuge da schnöde konservative nichtgetaktete Hardware... :) Daher halte ich an meinem Entwurf fest... :D


    RetroJeck schrieb:

    In den Chip direkt kann ich sicherlich beinah sinnlos viele kernals sichern, wenn ich gepackt nur Differenzen von einem Standardkernal speichere.

    Ich will auch nur die Differenzen zum Standardkernal speichern. Habe zwar nur insgesamt 32KByte Platz im Flash, das sollte aber für ein paar weitere Kernals reichen. (16KByte Basic+Kernal für C64II, ca. 4KByte für meine Firmware, macht 12KByte frei für weitere Kernals. Ich habe drei Pins für maximal acht Kernals reusgeführt. Wobei das ja eigentlich nicht die wirkliche Aufgabe der Platine sein soll...)


    RetroJeck schrieb:

    das liegt auch daran, das mein PLA manchmal
    kurz /CE auf low zieht für wenige ns und mich fälschlicherweise triggert (beim VIC/6510 Wechsel).

    Vielleicht solltest Du Deiner Hardware dann noch einen LVX245 spendieren, den Du in die Datenleitungen mit einschleifst.

    Der /CS fürs Kernal wird dann mit dem /OE vom LVX245 verbunden. Dies bietet Dir dann ein völlig automatisches "Tri-Staten" wenn /CS high ist. Und Du bräuchtest dann nur noch auf die negative Flanke von /CE triggern und die Daten rausgeben.

    Würde die Effektivität meiner Meinung nach anheben...

    Viel Erfolg!
    Thomas
  • So, bin schon wieder etwas weitergekommen:

    Inzwischen habe ich die Platine in meinen Test-C64 eingebaut und übers Wochenende ein wenig AVR-Assembler geschrieben. Gibt jetzt gute und schlechte Nachrichten.

    Die vielen guten Nachrichten:
    * Die Platine lädt einen eingestellten Kernal (im Moment noch nicht von außen einstellbar, sondern in der Firmware fest eingestellt),
    * Ich kann über das XLink-PC-Programm mit "xlink load -a 0x8000 mein_kernal.bin" Kernals vom PC zur Platine übertragen,
    * Ich kann über das XLink-PC-Programm mit "xlink save -a 0x8000-0xA000 save_kernal.bin" Kernals von der Platine auslesen und im PC speichern (<-- braucht man diese Funktion überhaupt?).

    Die einzige schlechte Nachricht:
    * Die Platine ist (im Moment) noch instabil. Der C64 läuft ein paar Minuten (mal länger, mal kürzer) und bleibt dann einfach stehen. Ich habe zwar schon eine Idee, wo ich suchen muss, aber in der Woche ist meine Zeit begrenzt...


    Die Idee, durch Speichern der Differenzen zum Originalkernal Platz zu sparen, ist ganz gut. Ich habe jetzt 13KByte von 32KByte Flashspeicher verbraucht und habe schon drei Kernals im Flash gespeichert. Jeder neue Kernal braucht so ein bis zwei KByte, so dass ich meine 8 unterschiedlichen Kernals durchaus unterbringen kann...

    So sieht die Platine jetzt aus:




    Ich werde die Platine diese Woche nochmal waschen und sie dann mit zur "Interface 13" nehmen...

    Bezüglich der Instabilität: Ich habe den Ausgangstreiber im Verdacht, für den Datenbus des C64 mit seinen vielen IC-Eingängen nicht kräftig genug zu sein. Da will ich aber keine Schnellschüsse wagen, sondern ich werde mir demnächst mal die Pegel aufm Scope anschauen, bewerten und dann mal gucken, was man machen kann...

    Es ist aber schon ganz lustig, mittels Xlink in ca. 0,2 Sekunden einen neuen Kernal zu laden und zu starten...

    Gruß,
    Thomas
  • Congrats!

    Die Musik im Video klingt wie aus einem Apple-Werbespot?! :)

    Jetzt fehlt ja nur noch die Möglichkeit, Kernals vom PC zu übertragen...

    Und wo habt ihr die Menge an Kernals her? Ich finde hier gerade mal ein Viertel... Gibts da einen Downloadlink zu?

    Gruß,
    Thomas
  • iMovie auf dem iPhone verwendet die gleiche Musik wie aus den Werbespots :)

    Die PC Flasherei soll per WLAN über die Bühne gehen, weil keinen Bock drauf den Rechner aufzuschrauben und dann da mit'm USB Kabel dran zu gehen oder so .. besser über ein Webinterface !

    Kernals schick ich Dir gleich per PN - in der Forums Wolke liegen aber auch ein Paar.
    10 SIN
    20 GOTO HELL

    www.SX-64.de
  • Freak schrieb:

    Die einzige schlechte Nachricht:
    * Die Platine ist (im Moment) noch instabil. Der C64 läuft ein paar Minuten (mal länger, mal kürzer) und bleibt dann einfach stehen. Ich habe zwar schon eine Idee, wo ich suchen muss, aber in der Woche ist meine Zeit begrenzt...
    Inzwischen läuft mein Emulator schön stabil, 24 Stunden Dauertest mit Basic-Programm "Variable hochzählen und ausgeben" lief 24 Stunden ohne Probleme durch.

    Aber erklären kann ich mir die Instabilität noch nicht wirklich: Mit einem schnellen RAM (45ns) ist die Kiste instabil, mit einem langsamen RAM (70ns) läuft es anstandslos... :/

    Ich habe inzwischen mein Layout nochmal überarbeitet und alles etwas kleiner gemacht. Auf die Größe eines Sockels bin ich zwar nicht gekommen, aber 5x5 cm² sind für mich völlig akzeptabel. An der rechten Seite sind Anschlüsse um einen Basis-Kernal auszuwählen und um die Platine mit dem C64-Reset zu verbinden.



    Die Platine kann später auch in den C64C eingebaut werden (wenn ich denn mal die Firmware anpassen würde...), dann werden nur ein paar Lötbrücken umgelegt und ein 28-poliger Adaptersockel eingelötet.

    Das vierlagige Layout ging vorhin an meinen China-Fertiger. Jetzt bloß nicht mehr auf die Platine gucken, damit ich keine Fehler mehr finde... :)
    Vielleicht sind sie ja rechtzeitig da, so das ich eine bestückte Platine mit zur nächsten LuheCon mitnehmen kann...


    Wenn die Platinen dann da sind werde ich mir eine Platine auch nochmal mit einem schnellen RAM bestücken, damit ich mir mal die Zugriffe genau anschauen kann. Vielleicht kriege ich dann so raus, wo das Problem ist, wenn das RAM die Daten zu schnell bereitstellt...

    Gruß,
    Thomas