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

Es gibt 488 Antworten in diesem Thema, welches 89.548 mal aufgerufen wurde. Der letzte Beitrag (14. Februar 2025 um 19:37) ist von _Joey_.

  • Prince of Persia kann ich wohl nicht mit dem Cartridge ausliefern. Mr. SID hatte es erlaubt, aber dann war ich so unvorsichtig und habe auch mal den Originalautor angefragt, Jordan Mechner, und er meinte, ich sollte Ubisoft fragen, da die die Rechte an Prince of Persia haben. Das habe ich dann gemacht und heute kam die Antwort, daß ich es nicht mit draufpacken darf. Wobei man eigentlich kein Spiel an sich schützen kann, aber gibt bestimmt Probleme mit dem Namen, wenn ich es doch draufpacken sollte, und wenn Ubisoft beschließen sollte mich zu verklagen, wäre ich wegen den Prozesskosten wohl schon Pleite, bevor irgendwas entschieden ist. Kann natürlich jeder selbst von CSDb auf das Cartridge installieren, aber ist schon schade. Werde dann wohl für den EasyFlash-Teil was produktgerechtes draufpacken, wie eine SID-Collection o.ä.

  • Fände ich auch besser wenn mehr mit MIDI thematisch zusammen hängende Sachen mit dabei wären.
    Gibt es auch einige Demos wie man MIDI in eigenen Programmen ansteuern kann? Evtl. als BASIC oder Assembler Routine? Denn einen eigenen einfachen Synthie zu programmieren den man über MIDI steuern kann, wäre schon interessant!

  • oder zumindest eine halbwegsige doku wie man die schnittstelle abfragt und verwendet in asm. von basic aus wirds sicher wie immer schwierig, ausser jemand proggt die erweiterung "midi basic", aber so richtig nutzen kann man das eigentlich nicht.

  • Doku werde ich noch schreiben. Ich habe aber eben mal mein altes Assembler Synthesizer Demo nach CC65 portiert, um mal zu sehen wie einfach das ist damit einen Synthesizer zu programmieren und war in zwei Stunden fertig. Ich habe dazu meine Assembler MIDI-Library verwendet, für den störungsfreien Empfang von MIDI-Daten, egal wie langsam das Programm ist was es verwendet (bis der 256 Bytes große Interrupt Ringpuffer überläuft). Damit ginge das auch in Basic, wenn man die MIDI-Library Aufrufe in SYS und USR umwandelt, wer sich das wirklich antun will :) Das hier ist die C-Version:

    Bitte melde dich an, um diesen Link zu sehen.

    So übersichtlich geht das mit C64 Basic nicht und man kann den C-Code leicht erweitern, was man von den meisten Basicprogrammen nicht sagen kann.

    Und so sieht das dann in Betrieb aus:

    Bitte melde dich an, um dieses Medienelement zu sehen.

    Man sieht auch das neue Menü und wie schnell man eine Datei vom PC übertragen kann. Wird natürlich noch schöner, ist erstmal alles nur um die Funktion zu testen, und die Tests kommen dann in ein Untermenü.

    Bis auf den Kernal Hiram Hack läuft es übrigens jetzt auch auf meinem C128. Muß mal schauen, warum der Hiram Hack da nicht geht (auch im C64 Modus nicht). Wäre schade, da man sonst auf einem C128 im C64 Modus dann nicht die Floppy-Emulation hätte. Zumindest nicht die vollständige mit ansprechbaren RAM unter dem Kernal, denn der Kernal-Replacement ohne den Hiram Hack funktioniert. Ist allerdings nicht mehr viel Platz im CPLD, zu 97% voll aktuell. Wenn ich da noch viel Logik für zusätzlich programmieren müsste, um es auch auf dem C128 lauffähig zu machen, dann ginge das wohl nicht.

    Ich kann auch vom C64 aus den C128 per Programm starten, indem ich vom CPLD aus einen Reset auslöse. Dabei werden die internen Register nicht gelöscht (anders als bei einem externen Reset, ähnlich wie es EasyFlash 3 vorsieht), sodaß ich vorher den neuen Modus "externes RAM als Cartridge ROM verwenden" einschalten kann. Der Test damit funktioniert: der C128 erkennt das Modul im C128 Modus und springt dorthin. Damit wird man dann auch C128 Programme vom Cartridge oder vom PC übertragen und starten können, und das macht auch den letzten noch verbliebenen Jumper überflüssig, den ich für die Unterscheidung C64/C128 Autostart angedacht hatte. Lasse ich aber mal drin, denn der kann immer noch den Cartridge Autostart abschalten, falls man sich mal das Menü kaputt geflasht hat und der C64 sonst nicht mehr booten wollte, da man sonst in diesem Fall keine Möglichkeit hätte, es neu zu flashen.

  • Ein C128 Modus wäre genial, wenn auch nur Teilfunktionen, dann wäre es eins der wenigen Module, die das könnten.
    Ein bisschen Träumen darf man ja wohl noch... ^^

    ___________________________________________________________
    Meine Kreationen: Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen.
    | Bitte melde dich an, um diesen Link zu sehen.
    Avatar: Copyright 2017 by Saiki

  • Die Cartridge-Funktion geht generell im C128-Modus, sogar die gesamten 32 kB die beim C128 möglich sind, von $8000 bis $feff (ab $ff00 sind die MMU-Register fest eingeblendet).

    Wegen dem HIRAM-Hack habe ich eben in der Schaltung nachgesehen und das kann leider prinzipiell beim C128 nicht gehen: Die Adressleitung A14 geht in die MMU und dort kommt die Leitung TA14 raus, die dann zum Expansionsport geht. Leider geht in die PLA die Leitung A14, also hat es keine Wirkung wenn man TA14 auf low zieht, da die PLA davon nichts mitbekommt und somit auch nicht an ROMH den HIRAM-Status signalisieren kann. Wenn keiner noch eine geniale Idee hat, wie man beim C128 an den HIRAM-Status kommen könnte, wird es dafür das Feature also nicht geben, sodaß die Floppy-Emulation auf einem C128 im C64 Modus nicht laufen wird, wenn ein Programm auch das RAM unter $e000-$ffff braucht.

  • Wenn keiner noch eine geniale Idee hat, wie man beim C128 an den HIRAM-Status kommen könnte, wird es dafür das Feature also nicht geben, sodaß die Floppy-Emulation auf einem C128 im C64 Modus nicht laufen wird, wenn ein Programm auch das RAM unter $e000-$ffff braucht.


    Es gibt da noch die unsaubere Methode nach Art der CMD RAMLink: 100-Ohm-Widerstände in die Datenleitungen, mitten im Zyklus auf Ultimax umschalten, die R/W-Leitung auf Masse ziehen und auf die Datenleitungen den ROM-Wert geben. IIRC klappt das nur im C128, RAM-Zugriffe werden da trotz des Eingriffs normal beendet (und die RAMs sind stärker als die externen Daten plus 100 Ohm) während die ROMs durch das gezogene R/W ihre Ausgänge abschalten und die externen Daten gewinnen.

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

    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Das ist wirklich trickreich und klingt so als könnte es funktionieren. 100 Ohm Widerstände habe ich schon drin in den Datenleitungen, wegen dem neuen EMI-Filter. Hängt dann aber davon ab, ob die RAMs immer stärker sind, und bei NMOS möchte ich lieber nicht einen Ausgang nach High ziehen, den ein anderes IC nach Low zieht. NMOS hat ja am Ausgang einen Lastwiderstand von der Versorgungsspannung (Bitte melde dich an, um diesen Link zu sehen.). Ist also unkritisch, wenn ich die A14-Leitung aktiv nach Low ziehe, da die internen ICs das sowieso machen und ist auch nur für eine sehr kurze Zeit. Mit dem Datenleitungstrick müsste ich aber mit dem CPLD über den Level-Translator ggf. nach High ziehen und das interne IC könnte nach Low ziehen, und dann ist da wirklich nur noch der 100 Ohm Widerstand dazwischen, also 50 mA * 8 = 400 mA im Worst-Case. Sollte man dann lieber gut kühlen :) lasse ich also lieber. Mal davon abgesehen, daß die Spannungen für die Datensignale mit dem Trick wohl auch grenzwertig werden.

  • Ich hatte letztens mal Prince of Persia auf einem C128 getestet und interessanterweise stürzte das Programm beim Start ab, anders als z.B. die SID Collection, die überall prima läuft, oder wenn ich es auf einem C64 gestartet hatte. Der Grund dafür ist der 2 MHz Modus, den Prince of Persia beim Start kurz einschaltet, wohl um schneller Dateien zu kopieren oder zu berechnen. Also geht es jetzt wieder an die Planung für die CPLD-Programmierung (Hardware ändert sich nicht), sodaß das auch stabil funktioniert. Habe dazu einen Logic Analyzer gebastelt, mit dem ich mir alle Leitungen am Expansionsport parallel ansehen kann:

    Bitte melde dich an, um diesen Link zu sehen.

    Damit werde ich dann jetzt mal ein paar Messungen für verschiedene Speicherzugriffe auf verschiedenen C64 und C128 machen, das dann mit den Setup und Hold-Zeiten der Datenblätter abgleichen, und dann entsprechend das VHDL Programm anpassen, sodaß es überall und in allen Modis stabil läuft, falls möglich.

    Der Platinenbestücker hat sich übrigens auch gemeldet, wie ich auch letztens im Startnext-Blog geschrieben habe. Die Platinen werden wohl Ende August, Anfang September geliefert.

  • so ein aufwand wegen einem spiel... ich hab das nie gespielt, wie ist das, checkt die c64 version ab ob es ein 128er ist und schaltet optional um oder gibt es eine eigene c128 version? es gibt ja auch demos die nicht am c128 im 64er modus laufen, das löse ich dann so das ich sie am c64 ansehe.

  • welche audioanlage meinst du jetzt? und gesehen das da ein wort in kursivschrift steht, was die betonung darauf legt das es nur ein (1) spiel ist, und nicht, wie angenommen, "nur ein spiel"?

    imho gibt es sicher andere, wichtigere sachen, die auch zeit fressen wenn man sie fixt, nur hat das bis jetzt noch keiner gefunden weil noch niemand das modul auf herz und nieren getestet hat, und zwar als das was es auch ist: als midi interface.

  • welche audioanlage meinst du jetzt? und gesehen das da ein wort in kursivschrift steht, was die betonung darauf legt das es nur ein (1) spiel ist, und nicht, wie angenommen, "nur ein spiel"?


    Ist mir wumpe welche Anlage weil für mich alle die von 50Hz-20Khz wiedergeben können eh alle gleich sind.
    Und bei dem einen Spiel: das wäre dir doch Wurst gewesen welches das jetzt ist.

  • wie ist das, checkt die c64 version ab ob es ein 128er ist und schaltet optional um oder gibt es eine eigene c128 version?

    Da muss gar nicht unbedingt was abgecheckt werden, man beschreibt einfach $d030 und gut: Bei einem C64 passiert nichts, bei einem C128 wählt man den Takt.
    Spätestens mit einem TC64 wäre ein Test auf einen 128er auch kontraproduktiv...

    Yes, I'm the guy responsible for the Bitte melde dich an, um diesen Link zu sehen. cross assembler. And some Bitte melde dich an, um diesen Link zu sehen..

  • jo, ich hab das game schon am pc nicht gemocht weil mir die animationen und steuerung zu teigig war.

    nachgelesen, schlau gemacht - die c128 version nutzt natürlich ressourcen für smoothe animation (ein stottern das aber eher selten am c64 auftritt konnte reduziert werden), somit muss die c128 version wohl um längen besser sein, ich hatte ja danach gefragt was der unterschied ist oder ob es nur ums schnelle laden geht.

    somit wird es wohl sinn machen die hardware dezidiert auf das game anzupassen, wer weiss wem es sonst noch nützt.

  • Nein, geht nicht um ein Spiel, geht generell um den 2 MHz Modus beim C128. Der sollte schon mit dem Cartridge laufen. Und ich möchte auch generell sicher sein, daß das Timing stimmt, auch auf verschiedenen C64 Modellen, daher der Aufwand.

  • Der 2 MHz Mode geht jetzt, Prince of Persia (und andere Programme die das verwenden sollten) ist daher kein Problem mehr auf dem C128. War etwas aufwendiger als gedacht. Trickreich war, daß die Daten nach einem Flankenwechsel von der CPU normalerweise 70 ns später gültig sind (hatte ich zumindest gemessen), aber im 2 MHz Modus kann das für phi2=0 bis zu 330 ns dauern, was ich aber leicht durch Verschiebung des Zeitpunkts wann ich den Datenbus sample korrigieren konnte, nachdem ich es erstmal gefunden hatte. Im Zuge der Implementierung habe ich übrigens an mehreren Computern Timing Messungen durchgeführt, um unabhängig von den in den Datenblättern angegebenen Zeiten mal typische Zeiten zu haben, für verschiedene Speicherzugriffe und Modi. Falls mal einer sowas brauchen sollte: Bitte melde dich an, um diesen Link zu sehen.. Die verschiedenen Timings mit Setup und Hold Zeiten usw. im Zusammenhang mit dem Cartridge kommen noch in die Entwicklerdoku. Damit sollte die CPLD-Programmierung jetzt tatsächlich abgeschlossen sein und ich kann den Rest der Software fertig programmieren. Das sollte jetzt schnell gehen :)

    Werde noch zwei Prototypen zusammenlöten, einen für einen Beta-Tester der das dann endlich zugeschickt bekommen kann, und einen für die Gamescom nächste Woche, wo man auf einem Bitte melde dich an, um diesen Link zu sehen. das Cartridge ausprobieren kann (ich denke am besten auf einem C128, da kann man dann auch mit dem C128 Basic spielen, wenn man möchte). Ich werde voraussichtlich Mittwoch ein wenig auf dem Stand da sein. Der Cynthcart Entwickler meint, er würde bis dahin auch eine erste Version der MIDI-Version von Cynthcart fertig haben.

  • Ich habe eine erste Version von Cynthcart bekommen und läuft prima. Wird also mit auf der Gamescom Messe zu sehen sein. So wird das spezielle Gamescom-Menü aussehen:
    Bitte melde dich an, um diesen Anhang zu sehen.
    Ich hatte erst versucht die komplette Grafik für den C64 umzusetzen, aber das sah schlimm aus, da ich kein Grafiker bin. Aber zumindest den Schriftzug habe ich einigermaßen hinbekommen, denke ich.

  • So sieht übrigens das fertige Gehäuse jetzt aus, mit LEDs und der neuen Beschriftung:

    Bitte melde dich an, um diesen Anhang zu sehen.

    Werde noch Aufkleber dafür machen lassen, ist momentan auf Papier gedruckt und aufgeklebt. Mit den Löchern für die MIDI-Stecker ist auch nicht so einfach, da meine Bohrmaschine ziemlich eiert, daher sind die was ausgefranst. Habe aber schon ein neues Präzisionsbohrfutter bestellt, der Händler nimmt mein altes sogar in Zahlung.

    Morgen geht es dann an den Stand aufbauen auf der Gamescom. Danach komme ich dann dazu, die beiden anderen Prototypen zusammenzulöten, und einen an den Beta-Tester zu verschicken.

  • Hey, sieht doch schon super aus! So große Löcher in dünnes Plastik zu bohren ist aber auch manchmal knifflig. Ich hab da gute Erfahrung mit einem Stufenbohrer gemacht.

    AC/64 - C64 Umbau auf 9V Wechselspannung: Bitte melde dich an, um diesen Link zu sehen.
    Jocopod - Joystick to Controlport Dongle: Bitte melde dich an, um diesen Link zu sehen.