Hello, Guest the thread was viewed4.2k times and contains 40 replies

last post from rvanzo1971 at the

MeGALoROM -- Kernel Umschalter für C64 passend zum MeGALoDOS

  • Es ist ja wunderbar, wenn man eine 1541 besitzt die 14 verschiedene DOS kann, auf Knopfdruck ... (siehe neues Projekt: MeGALoDOS)


    Allerdings braucht man dann 14 Stück C64 ...

    Oder einen C64 mit 14 passende Kernel.



    Das Problem löst sich ganz einfach mit einem neuen Multi Kernal Board von Tommi_nrw:D


     


    Dieses neue Board, ich habe es mal frech MeGALoROM benannt, passt perfekt zum MeGALoDOS Board:

    • auf dem Board sind zwei 27C512 (2 x 64K) und ein GAL
    • es bietet 14 Stück C64 Kernal, passend zu dem 14 DOS in der MeGALoDOS Floppy
    • das Board passt in jeden C64, egal ob ein ROM mit 24 Pins (alte Boards) oder 28 Pins (neue Boards)
    • optional (spätere Erweiterung) kann das Board auch mehrere BASIC enthalten
    • optional (spätere Erweiterung) kann das Board auch mehrere CHAR ROM enthalten
    • es kann automatisch geschaltet werden vom MeGALoDOS Board (ein Wechsel des DOS löst einen Wechsel des C64 Kernal aus)
    • man kann das Kernal optional auch manuell auswählen (4 Pin --> 16 Zustände --> binärer Drehschalter)
    • oder man schaltet das aktive Kernal mit Hilfe eines Arduino um ...



    =================



    Kernal Auswahl per Arduino:



    Vor einigen Jahren habe ich mal ein kleines Projekt gemacht, wo ich bereits eine Kernal Auswahl per Drehencoder und OLED Display realisiert habe:


    https://oe7twj.at/index.php?title=C64-Controller




    Dieses Projekt habe ich nun angepasst auf das MeGALoROM Board von Tommi_nrw


    • man kann einen der 14 Kernels auswählen
    • am C64 kann manuell ein Reset ausgelöst werden
    • optional kann man zwischen BASIC Varianten wählen
    • optional kann ein CHAR-Set gewählt werden
    • optional kann man ein internes SD2IEC steuern


           






    Anbei der Arduino Sketch und auch zusätzlich das HEX File ...


    So kann sich jeder das Menü anpassen und nach belieben verändern. :)

  • Super. Damit wird MegaloDos die passende Ergänzung für meinen SX.

    Klasse Tommi_nrw und auch dir für den Sketch.

  • Super. Damit wird MegaloDos die passende Ergänzung für meinen SX.

    Klasse Tommi_nrw und auch dir für den Sketch.

    Nur um das klar zu stellen ...


    Für den SX64 brauchst du weder Sketch noch Arduino Nano.

    Du verbindest einfach das MeGALoDOS und das MeGALoROM mit 4 Drähte.

    Das MeGALoROM folgt dem MeGALoDOS automatisch, ferngesteuert.


    Tommi_nrw hat das fein gemacht. :)

  • Okay, ähm, Bug ...


    Es kommen beim umschalten der Kernal nicht die, die ich erwartet habe.


    Die Logik des MeGALoROM Board ist offenbar umgekehrt, Kernal 0 (Standard C64) kommt, wenn der Arduino 15 ausgibt (1-1-1-1).

    Nun, ich habe es angepasst.


    Schaltbild für die Verdrahtung OLED - Drehencoder - Arduino - MeGALoROM kommt auch gleich noch.

  • Die Logik des MeGALoROM Board ist offenbar umgekehrt, Kernal 0 (Standard C64) kommt, wenn der Arduino 15 ausgibt (1-1-1-1).

    Ja, sorry. Hätte ich vielleicht erwähnen sollen...
    Das hat einen einfachen Grund:


    Der DOS Selector Anschluss hat zwei Reihen um Steckjumper benutzen zu können. Die zweite Reihe ist Masse.

    "0000" ist, wenn kein Jumper gesteckt ist und 1111 wenn alle jumper gesteckt sind.


    Ist quasi ein Relikt aus der Zeit vor dem ATMega auf dem Board. Damit kann das Board aber auch ohne ATMega,

    nur mit Jumpern oder einem Wahlschalter betrieben werden.

  • Ist quasi ein Relikt aus der Zeit vor dem ATMega auf dem Board. Damit kann das Board aber auch ohne ATMega,

    nur mit Jumpern oder einem Wahlschalter betrieben werden.


    Und das ROM Board profitiert auch davon.


    Völlig unbeschaltet fährt so das normale C64 Kernal hoch. :)

  • Nochmals Firmware Update ...


    Die Drehencoder Abfrage ist jetzt optimiert.

    Es läuft jetzt per Interrupt und vergisst keine Inkremente mehr bei schnellem drehen ...




    Und ja, der Anschlussplan:


  • Neuer Arduino Sketch ...


    Wieder Drehencoder Probleme.

    Es gibt verschiedene Typen, auch wenn sie beim Ali alle gleich heißen ...


    Sie geben unterschiedlich viele Pulse pro Rastpunkt.

    Anscheinend gibt es Typen die 1, 2 oder 4 Pulse geben.


    Wenn es falsch eingestellt ist, dann muss man zwei Rasten drehen um einen Menüpunkt weiter zu kommen.

    Oder umgekehrt, ein Rastpunkt setzt den Cursor gleich zwei Zeilen weiter ...



    Ich habe es im Arduino Sketch wählbar gemacht:

    Code
    1. #define encoder_Steps 4 // encoder type -- 1,2,4



    Nun läuft alles tadellos in meinem C64-G.


    Anbei ein paar Fotos vom Aufbau:


      


  • Mal aus Neugier eine ganz dumme Frage, oder zwei...

    Könnte man das MaGALoROM auch ins 64er Kernal vom C128 quetschen?

    Und gäbe es ein Äquivalent auch fürs 128er Kernal?

    Und könnte man beides über den gleichen Drehgeber plus OLED steuern, abhängig davon, ob 128 oder 64er Modus?

    Bekomme evtl. im Winter einen C128 (und C116 und plus/4 und was bis dahin noch alles auftaucht) und würde den C128 dann gerne gleich auch mit so geilen Kram versorgen...

  • Und könnte man beides über den gleichen Drehgeber plus OLED steuern, abhängig davon, ob 128 oder 64er Modus?

    ja, klar, das geht schon.


    Mal davon abgesehen sind genug Pin frei am Arduino.

    Man kann das also auch getrennt steuern.

    Und einen weiteren Menü Punkt machen für 128.


    Die anderen Punkte weiß ich nicht, muss Tommi_nrw beantworten.

  • Und könnte man beides über den gleichen Drehgeber plus OLED steuern, abhängig davon, ob 128 oder 64er Modus?

    Sollte gehen. Muss ich mir mal genauer anschauen, aber im Moment habe ich genug damit zu tun erst mal MeGALoDOS Platine zu produzieren

    und die Bausätze hier zusammen zu stellen. Ich beneide Bobbel echt nicht was das Zusammenstellen von Bausätzen angeht.

    Ist ne sch... Fummelarbeit ...

  • Das ist echt die Wucht in Dosen, was ihr (und andere) so produziert. Absoluter HAMMER!!! Freue mich schon aufs Weihnachts/Sylvester Basteln.

    Megalodos, plus megalorom64 und megalorom128 und dann noch alles verbinden, das wäre absoluter Hammer....

    Im Parallelkabel sind zwar nicht mehr genug Adern frei für die 4 Steuersignale, aber es gibt ja diese tollen TRRS 3.5mm Klinkenstecker+Buchsen, wie sie für Headsets genommen werden ;) so n mini Loch kann man ja für ne Buchse noch unterbringen :)

  • Damit das ganze auf einem Arduino Pro Mini läuft, muß man da noch etwas anpassen?

    Das Auswahlmenü verhält sich etwas zickig.

    Beim drehen springt es manchmal ins Hauptmenü zurück.

    Und beim schnelldrehen gibts auch eine Verzögerung beim scrollen.

  • Damit das ganze auf einem Arduino Pro Mini läuft, muß man da noch etwas anpassen?

    Oh, sorry, hab ich erst heute zufällig gesehen ...


    Ähm, keine Ahnung, natürlich sollte es auch auf einem Mini laufen.

    Mit dem Mini hatte ich noch nie zu tun.


    Aber vermutlich hat der die Interrupt Eingänge auf andere Pin??

    Das müsste man halt anpassen, dann klappt es auch mit dem Drehencoder.

  • Hi, sorry for the noob questions.


    I'm considering having a MegaloROM paired with MegaloROM, so before proceeding I'd like to consolidate the idea and better understand how the two of them "communicate". This thread (combined with the MeGALoDOS wiki/site) is surely a great source of information but overall is a little confusing to me: I probably miss some basic info.


    I see here your work to control the C64 kernel switching via a dedicated Arduino and a Selector driving a LED panel. However, in this specific post that I quote, and also in MegaloDOS wiki, you also say that using a 4-wire connection the MeGALoDOS can be used to let it select the Kernel ROMs. So, I suppose the Arduino MegaloROM selector is used when no MegaloDOS is used, or if you want to have two different selectors (Kernal and DOS) for some reason.


    If I use a standard "kernal switcher" attaching the bank/kernal selection pads to the MegaloDOS 26 header, emulating the inverted logic through the inverted order of the kernals, would it work? Or perhaps MagaloDOS pins outputs are only "impulses" and not "bank selection states", so something more sophisticated has to be put in place?


    The MeGALoROM GAL gives you the power to have also alternative basic and char ROMs in the same EPROMs, but has it also something to do with the MegaloROM being a possible MegaloDOS Slave?

  • If I use a standard "kernal switcher" attaching the bank/kernal selection pads to the MegaloDOS 26 header, emulating the inverted logic through the inverted order of the kernals, would it work? Or perhaps MagaloDOS pins outputs are only "impulses" and not "bank selection states", so something more sophisticated has to be put in place?

    This would work also.


    The MeGALoROM does assign always the nessecary Kernal to the C64.

    If there is the same C64 Kernel for many different 1541 DOS, so it need only ONE Kernal.

    But a simple kernal switcher with all Kernals in the right order would do.



    The MeGALoROM GAL gives you the power to have also alternative basic and char ROMs in the same EPROMs, but has it also something to do with the MegaloROM being a possible MegaloDOS Slave?

    Yes, you can have different BASIC.


    Old C64 have separated ROM for BASIC and Kernal.

    New one have on big 16K ROM for both, Kernal and BASIC.


    Since MeGALoROM works fine for old and new C64 it have to do address managment for this.


    Since none of the old Hardware Speeder had a different CHARSET nor a different BASIC, MeGALoROM normally use only one BASIC.

    But if there come a new Hardware Speeder which has different Kernal and BASIC, MeGALoROM could do this by changing GAL Logic.

  • Hi, sorry for the noob questions.

    There are no noob questions but maybe noob answers ...


    you also say that using a 4-wire connection the MeGALoDOS can be used to let it select the Kernel ROMs.

    Yes, it is really simple, 4 wires --> 16 kernals. But the switch is not done by changing the 4 wire signals alone. MeGALoROM stores the 'current selected Kernal' internally. I'm not sure but I believe a RESET stores new Kernal Number into GAL register.


    Normally you have a 10 wire parallel cable to 1541. For MeGALoROM simply use a 14 wire cable ...



    So, I suppose the Arduino MegaloROM selector is used when no MegaloDOS is used, or if you want to have two different selectors (Kernal and DOS) for some reason.

    Yes.


    You can use MeGALoROM and switch it manually.

    Manually using switches, code swichtes or for example an Aarduino.

    I did this, I'm using a MeGALoROM and connected the 4 wires with an Arduino Nano in my C64.

    So I have to switch Floppy drive and C64 seperatly ...

  • But a simple kernal switcher with all Kernals in the right order would do.

    Perfect, I want to give it a try, even if MegaloROM is quite obviously more flexible and dynamic, considering that all the Speeders have the same Basic and Charset for now :).


    Very clear thanks!


    Just another tech clarification for noobs: when you install the MegaloROM inside the C64 (let's consider the old ones with separated 8K ROMS) and you want to use the basic/charset programmed in the MegaloROM EPROMS, do you need to remove the original Basic/Charset ROMs from their socket, so that there is no conflict when accessing the corresponding basic/charset address/chips? Otherwise, how can it work?