Hallo Besucher, der Thread wurde 70k mal aufgerufen und enthält 484 Antworten

letzter Beitrag von Rob64 am

[Kerberos] C64 MIDI Interface mit Flash und PC-Dateitransfermöglichkeit

  • Hier ein kleines Zwischenprojekt, bevor ich mein Crazy Cartridge fertigstelle, um mal zu testen, wie das mit dem Verkauf von Hardwareprodukten geht und für alle die nur etwas preiswertes alleine für den C64 brauchen:


    http://www.frank-buss.de/c64/midi/index.html


    Es gibt drei Funktionen des Produkts:

    • 256 kB Flash mit Bank Switching, zum Speichern von Programmen, die beim Einschalten des C64 per Menü dann ausgeführt werden können
    • MIDI-Interface mit MIDI-In, MIDI-Out und MIDI-Thru (per Jumper umschaltbar, sodaß MIDI-Out statt MIDI-In auf MIDI-Thru gelegt wird), zum Anschluss von Keyboards, Synthesizern usw.
    • Übertragungsmöglichkeit von Daten und Programmen vom PC zum C64 mit Hilfe des MIDI-Interfaces


    Der Prototyp lief fast ohne Änderungen, so wie in Eagle geplant. Nur der 1 MHz Quarz bei der Emulation des Namesoft-MIDI-Moduls funktionierte nicht. Ich hatte mich da an diese Beschreibung gehalten, aber wahrscheinlich hat das Originalmodul noch einen Teiler durch zwei drin, denn natürlich kann man mit dem MC68B50 UART keine MIDI-Baudrate mit 1 MHz einstellen. Daher habe ich den 500 kHz Takt extern zugeführt. Für die 2 MHz Versionen sollte es aber mit einem Quarzoszillator problemlos gehen.


    Welche MIDI-Interface sind allgemein üblich? Kennt einer Programme, mit denen ich mein Interface testen könnte? Wenn ich auch den 500 kHz Takt bereitstellen müsste, dann würde das schwierig alles mit DIP-Chips im Cartridge Format bereitzustellen, da ich dann noch einen extra Teiler bräuchte (z.B. D-Flipflop).


    Ebenfalls in der Schaltung enthalten ist ein Flash, was in den Bereich von $8000-$9fff eingeblendet ist und das Magic Desk Bank Switching Verfahren implementiert hat, also auch vom C64 per Software deaktiviert werden kann. Aktuell ist dort der SST39SF040A verbaut, der 512 kB Flash hat. Es kann aber auch der SST39SF020A eingebaut werden, der 256 kB Flash hat, und mit 1,43 Euro bei Digikey preiswerter ist, oder auch der SST39SF010A mit 128 kB Flash. Ich konnte den auch bereits ansprechen und lesen, sowie per Software deaktivieren. Es ist auch vorgesehen, den Flash zu beschreiben, aber das funktionierte noch nicht, vielleicht habe ich da noch die benötigte Initialisierungssequenz für den Chip falsch programmiert (der Chip braucht keine gesonderte hohe Programmierspannung).


    Das Ganze kostet auch nicht viel: Die reinen Bauteilkosten für das Komplettgerät liegen bei 15 Euro ohne Gehäuse, und passt in ein Standard iComp Cartridge Gehäuse (wenn man es hinten aufsägt für die MIDI-Stecker). Zusammen mit einem USB-MIDI Adapter (4 Euro bei eBay), hat man damit dann eine relativ preiswerte Möglichkeit, Dateien vom PC auf den C64 zu übertragen, und es ist leicht selbst aufgebaut, da keine kleinen SMD-Bauteile verwendet werden. Nur das Flash wäre sinnvoll einmal zu programmieren, damit man nicht das Filetransfer-Programm immer von Diskette laden braucht. Ich hoffe ich bekomme das noch mit dem Schreiben ins Flash vom C64 hin, dann könnte man dort auch ein Menüsystem implementieren und mehrere Programme vom PC aus darauf übertragen. Die Haltbarkeit des Flashs ist mit 100.000 Schreibzyklen und 100 Jahre angegeben, kann man also öfters mit neuen Programmen bespielen.


    Als nächstes werde ich also versuchen das Flash zu beschreiben und für die finale Version noch etwas die Bauteile verschieben, ist teilweise etwas eng bei den Jumpern und ein paar ICs.


    Als Alternative für die MIDI-Stecker hatte ich mir übrigens auch überlegt, vielleicht keine Stecker einzubauen, sondern nur eine Kabelpeitsche anzulöten. Bei den billigen eBay-USB-MIDI Adaptern habe ich beim öffnen des Gehäuses gesehen, daß die eine gute Zugentlastung am Kabel montiert haben. Weiss einer, wo man sowas kaufen kann? Habe da nichts für die relativ dünnen MIDI-Kabel finden können. Denn dann bräuchte man das Cartridge-Gehäuse (sofern man es in ein Gehäuse stecken will) nicht hinten aufsägen, sondern es würden ein paar dezente Löcher für die Kabel reichen.

  • mit diesen zusätzlichen funktionen wird das ja echt interessant. wie reibungslos funktioniert dann der transfer, kann ich auch ganze diskimages vom pc aus schreiben? wie schnell geht der transfer, midi ist ja auch keine schnelle schnittstelle? wie verhält sich das midi interface, wozu ist es standard kompatibel/einstellbar? wie krieg ich programme in den flash ram bzw. kann ich vom c64 aus, in einem programm, dorthin sachen speichern? wiegesagt sehr interessante allround lösung, vor allem für musiker.

  • Es ist auch vorgesehen, den Flash zu beschreiben, aber das funktionierte noch nicht, vielleicht habe ich da noch die benötigte Initialisierungssequenz für den Chip falsch programmiert (der Chip braucht keine gesonderte hohe Programmierspannung).


    Wenn ich mich recht entsinne kann das mit dem Design auch nicht funktionieren - du hast am Expansionsport /GAME offengelassen, blendest den Chip also nur bei $8000-$9fff im normalen C64-Modus ein. Die PLA gibt aber in der Konfiguration bei Schreibzugriffen auf diesen Bereich kein Signal an /ROML aus und daher bekommt dein Flash vom Schreibzugriff nichts mit. Das Easyflash verwendet deswegen beim Programmieren den Ultimax-Modus, da wird für alle CPU-Zugriffe /ROML aktiv.

  • Unseen: danke, du hast Recht, hatte ich nicht bedacht. Hätte ich eigentlich wissen müssen, denn hier habe ich die PLA ja selbst nachprogrammiert :platsch: und ROML definiert als

    Code
    1. roml <= not (
    2. ((loram and hiram and a15 and not a14 and not a13 and aec and rw and not exrom)
    3. or (a15 and not a14 and not a13 and aec and exrom and not game)) );


    Die Lösung ist also recht einfach: den AUX2-Anschluss an IC4 noch über einen Inverter auf den GAME-Anschluss geben. Mal sehen ob ich irgendwie noch vielleicht ein NAND des 7400s einsparen kann, um ein weiteres IC zu vermeiden. Es gibt nicht zufälligerweise einen einzelnen 74xx Baustein mit einem AND und zwei Invertern?


    oneBitman: der Transfer lief bei meinen Test immer problemlos. Geschwindigkeit war 2 kB pro Sekunde. Ein komplettes D64 Image braucht somit maximal 85 Sekunden. Könnte man vielleicht noch per RLE oder so zur Laufzeit packen, was bei Images die nicht randvoll sind (viele haben ja nur eine PRG-Datei drauf), dann die Geschwindigkeit auch verdoppeln könnte, falls ich das für die Floppy dann auch so schnell hinbekomme.


    Das MIDI Interface selbst entspricht elektrisch dem in der MIDI-Spezifikation definierten Standard. Auf dem Oszilloskop sahen die Signale sehr sauber aus, obwohl ich den Eagle-Autorouter die Platine habe machen lassen (was auch sinnvoll war, da ich die ja wegen dem /GAME doch wieder ändern muss, dann sollte auch das Speichern von Programmen vom C64 aus in den Flash gehen). Für den C64 wird man problemlos alle Software verwendet können, die ein DATEL, SIEL, JMS oder C-LAB Modul erwarten. Die Module von SEQUENTIAL CIRCUITS INC., PASSPORT & SENTECH und NAMESOFT würden wohl etwas Gebastel brauchen, da man nicht so einfach einen 500 kHz Quarz bekommt und somit noch ein D-Flipflop Chip z.B. auf einer kleinen Hilfsplatine zusammen mit einem 1 MHz Quarzoszillator oben drauf löten muss. Aber das werde ich noch mit den von -trb- genannten Programmen testen.


    Die Umstellung eines Programms von 500 kHz Betrieb auf 2 MHz Betrieb ist allerdings recht einfach, falls man sich basteln sparen will, sind nur zwei POKEs (also zwei Bytes bei Assembler) in dem jeweiligen Programm in der UART-Initialisierung zu ändern. Zwischen IRQ und NMI Signalisierung kann man bereits per Jumper umstellen, denn das wäre recht aufwändig, wenn man das in einem bestehenden Programm ändern müsste.

  • Ich meinte natürlich ein Chip mit einem OR und zwei Invertern. CE vom Flash darf nur low sein, wenn ROML und Bit 7 vom Latch low sind. Das Latch wird beim Reset auf 0 gesetzt, sodaß daß Flash dann in den Speicherbereich $8000 des C64 eingeblendet wird. Per Bit 7 kann man das dann deaktivieren. Ich könnte die typische Dioden OR Verdrahtung mit Pulldown Widerstand bauen, aber weiss nicht ob das nicht die fallende Flanke zu sehr verschleift.

  • Ob das Teil in Serie geht, hängt von ab, wieviel Nachfrage ist. Ich plane es per http://www.startnext.de anzubieten. Aber ein Selbstbau ist wirklich einfach. Und wenn die Nachfrage wirklich zu gering ist, hätte ich auch noch 9 Stück von den UARTs und dem Flash hier, sowie die Platinen, da IteadStudio immer 10 Stück schickt. Von dem finalen Design (mit der 7402 Änderung) werde ich dann neben den Eagle-Dateien auch die Gerber-Dateien veröffentlichen, die jeder Platinenhersteller annimmt.


    Was soll auf der D64 denn so drauf sein? Aktuell kann es aber sowieso nur PRG-Dateien laden, und man wird natürlich CRT-Dateien flashen können, sofern die im Magic Desk Format sind. Aber ich könnte versuchen, das disk-to-easyflash Programm für mein Cartridge anzupassen, falls der Autor nichts dagegen hat. Den Source Code hat er ja veröffentlicht. Dann gingen auch D64-Dateien, z.B. Spiele, die per LOAD Sachen nachladen.

  • Bei den billigen eBay-USB-MIDI Adaptern habe ich beim öffnen des Gehäuses gesehen, daß die eine gute Zugentlastung am Kabel montiert haben. Weiss einer, wo man sowas kaufen kann? Habe da nichts für die relativ dünnen MIDI-Kabel finden können.


    Je nach Kabel: einen Knoten reinmachen, oder ein-zwei Kabelbinder draufsetzen. Letztere nicht direkt am 'Klemmstein' abschneiden sondern etwas von dem Nylonband stehen lassen, um Verdrehen im Gehäuse zu verhindern. Bei Bedarf auch außen einen Kabelbinder ansetzen.


    Alternativen: Diverse Arten von Zugentlastungen oder Kabeltüllen bei den üblichen Elektronik-Versendern, oder auch die Zugentlastungs-Schellen die bei Sub-D-Gehäusen beiliegen. Letztere wird man aber eher nicht einzeln bekommen; ich habe sowas aber auch schon aus zwei Streifen Messingblech und zwei Maschinenschrauben nachgebaut gesehen...



    EDIT: Heftig gute Idee übrigens, masig Speicher und Kommunikationsinterface zu koppeln. SD-Karten umstecken ist ja nicht in allen Anwendungsfällen ideal. Ich würde allerdings für meinen Eigenbedarf den MIDI-Teil durch RS232-Treiber zu ersetzen (MAX232 kopfüber auf die Platine kleben, statt der Buchsen, oder ein altes 5V-Handykabel als Pegelwandler...)


    Vielleicht könnte man in der finalen Version für solche Modifikationen die nicht benutzten Pins des 6850 auf Lötpunkte legen?

  • Aber ein Selbstbau ist wirklich einfach. Und wenn die Nachfrage wirklich zu gering ist, hätte ich auch noch 9 Stück von den UARTs und dem Flash hier, sowie die Platinen


    Falls es dann nicht zu einer "Produktion " kommen wird, eine Platine mit der UART und den Flash nehme ich Dir gern ab...

  • Wird doch noch etwas Gebastel, denn der Ultimax-Mode hat ja Game=0 und Exrom=1. Ich muß daher ein wenig schummeln, da ich sonst nicht mehr alle Chips auf die Cartridge-Platine bekomme und habe noch zusätzlich ein kleines 5-pin SMD-Oder-Gatter mit auf die Rückseite draufgepackt (zumindest habe ich es irgendwie nicht mit weniger Logikfunktionen hinbekommen), was man aber noch relativ gut löten kann, auch ohne Lupe oder Mikroskop, im Gegensatz zu 16-pin TSSOP SMD-ICs o.ä. Damit sollte es dann aber gehen. Werde am Wochenende mehr Zeit haben, um das ausprobieren, mit rausgeführten Drähten von dem aktuellen Modul auf einem Breadboard.


    Parallel dazu habe ich übrigens einen kleinen Adapter für den Raspberry Pi entworfen, womit man das Flash brennen kann, falls man keine Möglichkeit hat, das Filetransfer-Programm (oder andere Programme) irgendwie initial auf den C64 zu bekommen, oder falls das mit dem Flash vom C64 aus wider Erwarten doch nicht gehen sollte. Und kann natürlich auch zum Brennen von Flashs für andere Zwecke eingesetzt werden, z.B. um einfache Module für System wie Atari 2600 oder Vectrex zu bauen. Hier das Projekt, mit Schaltung und einem schnell zusammengehacktem Programm zum Löschen, Brennen und Testen des Flashs:


    http://www.frank-buss.de/raspberrypi/programmer/index.html


    Ist noch nicht perfekt. So ist der Abstand zwischen den zwei nebeneinander liegenden 74LS273 ICs ziemlich eng, sodaß man die nicht gerade in die Platine bekommt (in Eagle passte es). Und ich denke ich sollte wohl noch die 5V Leitung des Flashs per FET schalten, da sonst Hot-Plugging das IC kaputt machen kann. Aber das sind Kleinigkeiten, die schnell korrigiert sind. Der Programmer läuft sonst prima. Und die unbstückte Platine kann man auch als Breakout-Board für andere Experimente mit dem Raspberry Pi brauchen.


    Habe eben das Filetransfer-Programm mit CBM80-Modulkennung umgeschrieben und mit cartconv ein Magic Desk CRT daraus gemacht, was im Vice lief, und dann die bin-Datei ins Flash gebrannt. Läuft auch auf meinem realen C64 mit dem MIDI-Interface, es wird jetzt direkt das Filetransfer-Programm beim Einschalten gestartet (der C64 hat sogar überlebt, daß ich das Flash erst falschrum reingesetzt hatte, der Chip wurde nur ziemlich warm :whistling: ). Die EPROM-Cartridge Funktion des MIDI-Interfaces funktioniert also auch. Somit fehlt nur noch der Test, das Flash vom C64 aus zu beschreiben, wenn ich das passend modifiziert habe und dann sollte die MIDI-Schaltung final sein.


  • Heftig gute Idee übrigens, masig Speicher und Kommunikationsinterface zu koppeln. SD-Karten umstecken ist ja nicht in allen Anwendungsfällen ideal. Ich würde allerdings für meinen Eigenbedarf den MIDI-Teil durch RS232-Treiber zu ersetzen (MAX232 kopfüber auf die Platine kleben, statt der Buchsen, oder ein altes 5V-Handykabel als Pegelwandler...)


    Vielleicht könnte man in der finalen Version für solche Modifikationen die nicht benutzten Pins des 6850 auf Lötpunkte legen?


    Du meinst RTS, CTS und DCD? Gute Idee, werde ich machen. Ich könnte vielleicht auch versuchen, einen MAX232 in SMD auf der Rückseite vorzusehen, der nicht bestückt ist. Dann bräuchte man nur noch den Quarz austauschen, den Optokoppler und die Inverter nicht zu bestücken, und hätte dann einen recht schnellen RS232-Anschluss am C64.



    Würde es auch im C128-Modus laufen?


    Was muß man dabei beachten? Ich habe mal gegoogelt und sieht so aus, als dürfte man für Cartridges im C128 Mode Game und Exrom beim Booten nicht signalisieren, sonst startet es im C64-Modus. Das wäre mit noch einem Jumper machbar. Ich habe einen C128D hier, werde ich dann mal ausprobieren, ob es auch vom Timing her funktioniert, denn der C128 läuft ja doppelt so schnell.

  • Habe schon heute etwas Zeit gehabt und die geänderte Schaltung auf einem Breadboard aufgebaut, was scheinbar kein Problem ist bei den niedrigen Frequenzen vom C64:



    Denn die ID-Entry Sequenz kann ich bereits zum Flash schreiben und kann dann auch die richtige ID als Antwort lesen (0xbf, 0xb7), nach etwas Debugging mit dem Logik-Analyzer und Korrektur von einer falschen Verbindung. Damit geht also das Schreiben im Ultimax-Modus generell und somit sollte auch das neu Flashen des Chips gehen.


    Außerdem habe ich den 2 MHz Quarzoszillator per 74LS74 auf 500 kHz heruntergeteilt. Wird dann in der endgültigen Schaltung per Jumper einstellbar sein zwischen 500 kHz und 2 MHz.


    Aber warum nur müssen meine Schaltungen immer mit so vielen Drähten enden :)

  • Ok, die neue Schaltung ist fertig und die Webseite aktualisiert. Wird so aussehen:



    Die Platine ist recht voll, aber für einen alten Tetris-Spieler wie mich kein Problem :) , daher war für Testpunkte nicht mehr viel Platz. Aber man kann recht einfach Lackdrähte an die Pins des UARTs auf der Unterseite löten und dann seitlich hochführen zu einem RS232.


    Eine eigene Platine mit MAX232 statt dem MIDI-Treiberbausteinen wäre aber auch interessant. Ich wollte sowieso noch eine Platine mit einem alten DAC und ADC machen, da werde ich das dann mit draufpacken, sozusagen als universelles C64 IO-Cartridge. Wird auch das Flash haben. Aber erstmal abwarten, ob die geänderte Platine funktioniert wie auf dem Breadboardaufbau.

  • Die neue Platine ist angekommen (das ging schnell, zwei Wochen). Habe eben alle Bauteile aufgelötet:



    und nett eingebaut:



    Die Webseite ist auch aktualisiert. Sind noch ein paar Testprogramme hinzugekommen. Ich habe jetzt auch MIDI-In, MIDI-Thru und MIDI-Out getestet, sowie nochmal das flashen. Funktioniert alles problemlos. Beim fliegenden Aufbau letztens auf dem Breadboard gab es schonmal Flash Schreibfehler, was bei der neuen Platine bisher noch nicht passiert ist (ich führe nach jedem Byte Schreiben jeweils ein Verify durch und flashe neu, wenn es schiefgegangen ist, mit Fehlerzähler, der mit der neuen Platine immer 0 war).


    Mit den Kabeln gefällt mir allerdings nicht so gut. Ist auch einiges an Arbeit die abzuisolieren, anzulöten und mit Zugentlastung einzubauen. Ich denke wäre wohl doch besser, Buchsen einzubauen. Am besten gefällt mir das hier, wo die Buchsen nach oben rausgehen:


    http://www.matrixsynth.com/201…ace-for-commodore-64.html


    Mal schauen, ob ich solche Buchsen auch bekommen kann und wie das dann in ein Gehäuse passt.


    Von der Schaltung her sollte sich sonst nichts mehr ändern, sofern keine Fehler mehr auftreten. Fehlt jetzt noch einiges an Software, z.B. daß man das Flash Schreiben auch vom Filetransfer-Programm aus machen kann, ein umfangreicheres Qt-Programm mit dem man z.B. auch aus D64-Dateien einzelne PRG-Dateien zum C64 hochladen kann, ein Menüsystem um den nicht benutzten Bereich des Flashs als Speicher für PRGs ohne PC zu verwenden usw. Aber sind ja bald Feiertage, da ist dann Zeit dafür.