Raspberry Pi als 1541 Emulator

  • Raspberry Pi als 1541 Emulator

    Hallo zusammen,
    im Raspberry Pi Thread wurde ja schon folgendes Projekt erwähnt:
    insentricity.com/a.cl/207
    Ich würde gerne den 1541 Emulator aus Frodo missbrauchen um den Raspberry zu einem "vollständigen" 1541 Ersatz zu machen. Der Entwickler nutzt das Ding auch um USB Joypads am C64 zu verwenden.
    So wie ich das sehe ist in den Sourcen das ganze soweit abgedeckt was benötigt wird um mit dem IEC zu sprechen. Das ganze liegt hier auf github:
    github.com/FozzTexx/ninepin/blob/master/README
    Leider kapier ich zuwenig von der Elektronik um den IEC mit dem GPIO zu verbinden. Der Entwickler sagt nur "steht alles in der Readme".
    Vielleicht hat jemand von euch Lust sich an dem Projekt zu beteiligen :thumbsup: oder ihr zieht mir den Zahn :abgelehnt und sagt totaler Unsinn meine Idee :).
    Hätte doch Scharm, wäre sogar günstiger als manche fertige SD2IEC oder 1541 Ultimate (ich weiß das da noch viel Arbeit für fehlt um das gleich zu setzen).
    Für den Amiga gibt es da ja schon was fertiges:
    amigadrive.blogspot.de/
    Gruß
    DerGali
  • Quellcode

    1. Currently the disk drive only handles simple IO of reading and writing
    2. .PRG files. There's no way to get a directory listing, no way to load
    3. or save other file types, and no support for dealing with disk images
    4. like .d64. There is also no emulation of a real 1541 so fastloaders
    5. will not work.

    nimm lieber ein sd2iec :)
  • Ich seh aber ReadMe folgendes:
    The disk drive emulation works with directories and .d64 images. Files
    in regular directories are automatically mapped to C64 file
    types. Directories can be changed from the C64 side. It is also
    possible mount and unmount .d64 images from the C64. There is no
    emulation of a real 1541 so fastloaders will not work.

  • manne_sahne schrieb:

    Ich seh aber ReadMe folgendes:
    The disk drive emulation works with directories and .d64 images. Files
    in regular directories are automatically mapped to C64 file
    types. Directories can be changed from the C64 side. It is also
    possible mount and unmount .d64 images from the C64. There is no
    emulation of a real 1541 so fastloaders will not work.


    Danke für den Hinweis, da das erst vor 13 Tagen ergänzt wurde, hat sauhund die neue ReadME wohl nur um wenige Stunden verpasst (hier alle Änderungen).
  • Somit hat das Ding schon mal die wichtigsten Eigenschaften eines SD2IEC. Okay, es fehlt die Speeder-Unterstützung. Ansonsten fehlt mir persönlich, zumindest nach dem was zu lesen ist, nichts mehr. Bin mal gespannt was da noch kommt. Vielleicht wird daraus doch irgendwann mal eine richtige 1541 Emulation.
  • Nein, es steht NICHT immer Linux dahinter.
    Ob es diesem Fall so ist weiß ich nicht.
    Sollte der Entwickler jedoch wirklich irgendwann die 1541 zyklengenau, komplett mit allem drum und dran emulieren wollen, geht es MIT Linux schon mal gar nicht.
  • In diesem Fall wird mit Linux gearbeitet. Warum sollte der Raspberry Pi das nicht hinbekommen? Ein normaler C64 Emulator mit der 1541 Floppy Emulation funktioniert doch auch. Mir ist klar das es nicht 100 prozentig gehen wird aber bestimmt geht da mehr als beim SD2IEC.
    Und die große Frage steht ja immer noch im Raum wie verkabelt man das denn? Den Schaltplan den mir der Entwickler genannt hat gibt es hier:
    github.com/FozzTexx/ninepin/co…da24d4d21d93e38bec81551cb
    In der ReadMe steht dazu folgendes drin:
    The driver supports both a 3 wire and a 5 wire interface, depending on
    what kind of level shifters you have available (and how brave you
    are). Switching between 3 wire and 5 wire currently requires
    recompiling the module, it should probably be an option when doing the
    insmod.

    If you are using the 3 pin mode, then the CLK and DATA pins are used
    for both input and output. You can either use a bidirection 3.3V to 5V
    level shifter, or do what I did and use some resistors to make a
    voltage divider (see VoltageDivider.png). The voltage divider works
    fine for me, but I only have the C64 and the Raspberry Pi on the
    bus. Adding other devices could cause the voltage levels to increase
    to more than the Raspberry Pi GPIO pins can tolerate. For each pin I'm
    using a 1k and 1.5k resistor.

    In 5 pin mode, 3 pins are used to read the signals, and 2 others are
    used to send output. This allows the use of unidirectional level
    shifters such as a 74HCT245 and CD4050.

    Der Entwickler hat mir dazu nur geschrieben, dass es schon mehrere Leute ohne Probleme nachgebaut hätten.
  • decoderone schrieb:

    Ein normaler C64 Emulator mit der 1541 Floppy Emulation funktioniert doch auch.


    Wenn es mehr sein soll als ein SD2IEC dann müssen die 6502 und das Interface Zyklengenau emuliert werden und das ist mit einem Multitasking Betriebssystem so ohne weiteres nicht möglich.
    Wie das im Vice gemacht wird weiß ich nicht. Da muss ein C64 Emulator mit einem 1541 Emulator kommunizieren und nicht ein Hardware C64 mit einem Emulator.
  • manne_sahne schrieb:

    Wenn es mehr sein soll als ein SD2IEC dann müssen die 6502 und das Interface Zyklengenau emuliert werden und das ist mit einem Multitasking Betriebssystem so ohne weiteres nicht möglich.

    Doch, zyklengenaue Emulation ist unabhängig vom Betriebssystem darunter gar kein Problem - wenn alle Schnittstellen zur Aussenwelt "langsam" genug sind, d.h. im Falle von VICE müssen nur die Eingaben des Benutzers und die Ausgaben auf dem Bildschirm rechtzeitig da sein. Letzteres muss nur schnell genug sein, um 50 Bilder pro Sekunde zu berechnen und wenn das etwas zu schnell erfolgt ist kann man die Restzeit problemlos mit Warten verbringen (und wenn es einmal kurz zu langsam war sieht man auch nur ein kurzes Ruckeln). Die Kommunikation zwischen dem emulierten C64 und dem emulierten Laufwerk ist da auch kein Problem, der Emulator muss eh mitrechnen, welchen Zeitpunkt er gerade emuliert und kann darüber die Kommunikation zwischen den beiden Komponenten im Gleichschritt laufen lassen.

    Das ganze wird dagegen deutlich schwieriger, wenn eine emulierte Floppy mit einem echten C64 reden soll (oder umgekehrt): Jetzt muss der Abgleich mit der "Realzeit" nicht die 50 mal pro Sekunde erfolgen die für die Bildschirmausgabe wichtig waren sondern (in erster Näherung, aber deutlich besser wird es auch nicht) es muss jeder Prozessortakt synchron zur Realität umgesetzt werden - 1 Million Synchronisationszeitpunkte pro Sekunde. Wenn man einen davon verpasst ist das deutlich schlimmer als nur ein kurzer Ruckler, denn das echte Gerät läuft trotzdem weiter und die Kommunikation wurde möglicherweise gestört.

    Quellcode

    1. 10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    2. 20 forj=1to5:printchr$(rnd(1)*16+70);:next
    3. 30 printint(rnd(1)*328)-217

    sd2iec Homepage
  • Es gibt relativ gute Ansätze das Linux auf dem Raspberry Pi zu einem guten RTOS umzubasteln, aber allgemein wird es nicht soo ohne weiteres möglich sein, z.B extern Daten auf den Raspi zu kopieren, weil dafür immer der USB Controller in Software "realtime" interagieren muss. Das dürfte also relativ haarig werden, aber defintiv interessant, ob der Entwickler es hinbekommt Linux genug zu verbasteln :)
  • Hallo!

    Bin dabei das mal mit einem PI nachzubauen. Hab mir mal die notwendigen Teile besorgt (Levelshifter, Buchsen usw).
    Das kritische Timing wird via "Interrupt Disable" im Kernel Modul realisiert.
    Als OS wird glaube ich ein "normales" Pi Linux (z.B. Raspbian) verwendet.
    Ich hab jedenfalls alles kompilieren können und das Kernel Modul wird geladen.

    Das Kernel Modul kann auf 2 Arten kompiliert werden:
    1. mit der Spannungsteiler Schaltung (würde ich aber persönlich davon abraten)
    2. mit er Levelshifter Schaltung (da sind die GPIOs vom PI besser geschützt)

    Wie der Levelshifter verdrahtet wird, muss ich mir noch ausmalen, weil es leider kaum bis gar nicht dokumentiert ist.
    Wenn ich weitere Infos habe, werde ich euch informieren. 8)

    LG,
    Tulan
  • Hallo nochmal!

    Also ich habe gestern mal die Schaltung aufgebaut (Levelshifter) und mit dem C64 verbunden. Am PI das Kernel Modul kompiliert und das "ninepin" Programm gestartet.
    Ein paar erste Testläufe haben nicht funktioniert. Beim Pi kommt zwar ein Kommando an, leider nicht das richtige.
    Ich vermute, dass es sich doch noch um eine Timing Sache handelt.

    Am Pi kommt z.B. folgendes an wenn ich am C64 LOAD "$",8 aufrufe:
    Command: 28 f0 01 00 01 04
    oder
    Command: 28 00 00 00 00 02
    oder
    Command: 28 00 02 00 01 00
    oder
    Command: 28 e0 00 00 00 01

    usw.
    Ich bin mir nicht sicher was genau ankommen sollte, aber im Video kommt das Kommando:
    Command: 28 f0 01 00 01 01 4b an (das letzte Byte scheint eine Checksumme zu sein)

    Ich werde euch weiter berichten, sobald ich neue Ergebnisse habe.

    LG,
    Tulan