Hallo, auch wenn ich mich vielleicht ein wenig dabei blamiere: http://youtu.be/dqwhHOaIPgw Mein Versuch, einen Mega32 mit 17.734 MHz im C64 zum laufen zu bewegen. Faktisch ist das Teil noch weit davon entfernt, perfekt zu laufen. Ich habe das Teil quasi "blind" von null auf programmiert, keinen Analyzer, Oszi, bis auf die Testsuite (nach Monaten gefunden) nichts zum Testen gehabt, dementsprechend verwurstelt sieht die Platine aus. Die Testsuite liefert brauchbare, wenn teilweise auch fragwürdige Ergebnisse. Der AVR dürfte mittlerweile auch schon an seiner "Grenze der Flashbarkeit" nach tausenden male des Wiederbeschreibens angekommen sein. Die Platine hat Nico Mentis erdacht und entworfen (von hier aus ein großes Danke!); ich musste sie aber aufgrund eigener programmiertechnische Anpassungen und Erkenntnisse für den AVR an einigen Pins umändern. Die Erkenntnisse müssen dann halt irgendwann mal in eine neue Platine umgesetzt werden. Prinzipiell "rennt" das Ding in einem 250469er-C64, also wohl einer "Aldi"-Kiste. Ich muß erst ein mal andere Modelle zusammenkratzen um zu sehen, wie er sich woanders verhält. Ich habe zeitweise Hänger beim Einschalten und für einiges ist die Sache einiges zu langsam (wenn es denn läuft). Illegale Op´s etc sind so weit implementiert und von der Testsuite so weit als "funktionierend" angenommen; wobei das auch ein Kampf für sich war, wenn Webseite X das eine behauptet und Seite Y was anderes. Dezimalmodus kann man natürlich getrost vergessen. Alleine schon das Schreiben/Lesen aufs RAM und Lesen vom ROM, berücksichtigen von RDY /phi bzw anfahren von Adresse $01 und umwursteln der Bits auf AVR-kompatible Pinouts kostet einige Zyklen. Mir herumkalkulieren kommt man hier nicht weit, da jede Ausnahme eine Kalkulation obsolet macht. Adresse $0 kann ich im Moment nicht auch noch verarbeiten, d.h. steht immer auf Ausgang. Fürs Tape sind keine Pins übrig. Wie gesagt, von den paar MHz kann man nichts erwarten. ich kann aufgrund eines fehlenden Analyzers auch nichts zu Zyklenverbräuchen etc sagen. ich will versuchen, dem AVR noch ein wenig Dampf zu machen, aber allzuviel kann man wohl nicht mehr herausholen, zumal man auch aufs ROM/RAM etwas Rücksicht im Bezug auf die Zugriffsgeschwindigkeiten geben muß, d.h. u.U. muß man mit nops "nachhelfen" und somit kanns sein, das man gewonnene Takte wieder anderweitig verbrennen muß. Grundsätzlich muß ich erst mal eine neue Platine machen lassen, sofern jemals Geld dafür da ist ("pleiterer" als ich geht gar nicht, zeitweise weiß ich gar nicht, was ich wovon essen soll, das nur mal am Rande) und schauen, wie sich das ganze dann verhält. Mag sein, das es irgendwann zu 100% läuft, vielleicht auch nie. Nach sicherlich tausenden von Stunden lässt sich in jedem Falle sagen, egal, was von irgendwem behauptet wird - so ein Teil in einem einzigen AVR bei der Geschwindigkeit, und dann noch "blind" zum laufen zu bekommen, ist die Hölle. Beste Grüsse Stefan
.. und was ist jetzt der Trick ? ...war der c64 kaputt und es gab keinen Ersatzprozessor? .... oder war es die Herausforderung ? ..... oder, um was geht es eigentlich ? gruss klaus
Och, such Dir was aus ;-) ´s war eine Challenge, das mit Sicherheit. "So eben" bekommt man das 100%ig nicht hin, da kann man mir an den Kopp schmeißen, was man will.
ICh verstehs immer noch nicht. Ist das jetzt ein Mega32 der 6502 (oder 6510) 'spielt' und in der Originalplatine sitzt, oder ist das eine komplett neue Platine, in der ein Mega32 einen 6502 emuliert?
gut spaetestens bei fastloadern wird mit sicherheit ende sein ;) ich hab mal die gegenseite (floppy emulation aufm pic32 gemacht) und das war ziemlich frickelig... oder irgendwelche hardware tricks...da ist timing alles... aber... nette idee...
Manch ein Fastloader geht "mal so, mal so". Die Angelegenheit ist zur Zeit noch wackelig. Es gibt halt einige Dinge, die ich nur "erahnen" kann, sehen wäre besser. Ohne meßtechnisches Equipment außenherum derzeit keine Chance. Prinzipiell ist das ein Mega32 der 6510 "spielt", der mit ein paar Komponenten außenherum auf einer eigenen Platine sitzt und die Platine sitzt per Stiftleiste dort, wo ehemals der originale 6510 saß.
Junge, Junge - du verplemperst mit dem Retrokram nur deine Zeit. Das ist doch alles sinnlos"
Die Sache ist eher dass er es noch nichtmal (auch nicht auf Nachfrage) hinbekommen hat ordentlich darzulegen was er eigentlich gemacht hat. Und warum. Also das Projekt überhaupt mal umreissen. Irgendwas hinwurschteln und irgendwas filmen. C64 und Mega32 kommt darin vor. Mehr weiß man nicht. gruß cyblord
Da stimme ich Dir vollkommen und unbefangen zu; ich wüsste aber nicht, was ich in dem Bereich sonst tun sollte, da ein konkreter andersartiger Anwendungsfall fehlt - ich mache das ja nicht beruflich. Klar, der alte AVR reicht zwar für einiges, ist aber längst obsolet, sehe ich ein. Man könnte auch nun langsam zig Stufen höher steigen, schneller, besser, (unter Umständen) einfacher, aber nochmal: Es fehlt -mir- die konkrete Aufgabenstellung. So habe ich gesagt, ok, ich hab die Emu irgendwann mal angefangen, verbissen bis zu dem Punkt gebracht, wo sie gerade ist, und unter Umständen ist es nun gut. In jedem Falle war es besser, als es anzufangen und liegenzulassen. Wie weiters unten beschrieben habe ich einen ATMEGA32 genommen, eine 6502/10-Emulation programmiert, dementsprechend auch den Speicherzugriff IRQ NMI implementiert, den Mega32 mit ein paar zusätzlichen Komponenten auf eine Platine gesetzt und diese arbeitet in einem C64. Sinn und Zweck dahinter war es, eventuell tatsächlich einen 6510-Ersatz zu programmieren. Momentan bin ich an dem Punkt angelangt, das ich eingestehen muß, das es mit den vorhandenen Mitteln nicht weitergeht und ob es überhaupt weitergeht, da ich nicht schlüssig bin, ob sich die noch vorhandenen Probleme je zu 100% eliminieren lassen. Somit belasse ich es für jetzt dabei, das ich zumindest zeige, das der AVR wenigstens in Ansätzen dazu in der Lage ist, in reeller Hardware einen 6510 zu emulieren. Das hat nichts mit profilieren zu tun, sondern einfach nur um zu zeigen, was möglich wäre.
Stefan schrieb: > Wie weiters unten beschrieben habe ich einen ATMEGA32 genommen, eine > 6502/10-Emulation programmiert, dementsprechend auch den Speicherzugriff > IRQ NMI implementiert, den Mega32 mit ein paar zusätzlichen > Komponenten auf eine Platine gesetzt und diese arbeitet in einem C64. > Sinn und Zweck dahinter war es, eventuell tatsächlich einen 6510-Ersatz > zu programmieren. Momentan bin ich an dem Punkt angelangt, das ich > eingestehen muß, das es mit den vorhandenen Mitteln nicht weitergeht und > ob es überhaupt weitergeht, da ich nicht schlüssig bin, ob sich die noch > vorhandenen Probleme je zu 100% eliminieren lassen. Somit belasse ich es > für jetzt dabei, das ich zumindest zeige, das der AVR wenigstens in > Ansätzen dazu in der Lage ist, in reeller Hardware einen 6510 zu > emulieren. Das hat nichts mit profilieren zu tun, sondern einfach nur um > zu zeigen, was möglich wäre. Wow, großartige Leistung. Ich kenne den 6510 mit seinen 3 regulären Registern noch aus Zeiten in denen er aktuell war. :-) Alle seine Verrenkungen und Tücken zu emulieren, war sicher nicht einfach. Grade die Interrupt-Geschichte. Was hast du verwendet? PinChangeInterrupt?
Ja, für den NMI den Pinchangeinterrupt (hi>lo) und für IRQ gezwungenermaßen eine direkte Abfrage des Pins, wobei ich beim NMI keinen Vektor anspringe, sondern das Global Interrupt Flag Register beim Laden des Opcodes auslese und entsprechend springe, weil es ja heißt, das der 6510 erst den laufenden Befehl abarbeitet und dann NMI/IRQ abarbeitet. Beim Sprung in die NMI-ISR qird als erstes das Flag wieder "gelöscht". Auch nur so habe ich die Priorisierung NMI/IRQ hinbekommen. Ein Vektor hätte auch insofern nicht viel gebracht, da selbst das Anspringen der ISR über einen Vektor fast genausoviele Zyklen wegnimmt wie das manuelle abarbeiten und wäre nicht unbedingt "steuerbar" gewesen.
Wobei da auch zu beachten ist, das ein IRQ/NMI auch nur erkannt werden, wenn RDY high ist. Also greift quasi ohnehein eins ins andere, wenn ich das direkt bei dem Laden des Opcodes tue, denn dazu muß RDY ohnehin high sein.
blöde frage, läuft den der c64 mit deiner bastelei auch mit der 17fachen geschwindigkeit wegen der 17mhz oder brauchst du 17mhz takt um ein 1mhz chip zu emulieren ;) ?
So ist es. Ich bräuchte mir Sicherheit sogar mehr als die angegebenen 17 MHz. Wie gesagt, ohne Analyzer kann ich nicht sagen, was wo wieviele Takte verbraucht. Die Testsuite meint, das überwiegend pro Befehl ein oder zwei 6510-Takt(e) mehr verbraucht werden als "zulässig" d.h. bei 7 Takten auch mal 8 oder 9. Das wird wohl in erster Linie von der Mehrfachabfrage von phi zusammenhängen. phi kann selbst beim prüfen auf seinen Zustand, neben RDY, seinen Zustand schlagartig ändern. D.h. um eine Mehrfachabfrage komme ich nicht herum. Das, was ich auf der einen Seite verliere, kann ich beim abarbeiten des eigentlichen Opcodes teilweise wieder reinholen, sofern nicht allzuviele Speicherzugriffe dazwischen hängen. Wie gesagt, Analyzer wäre toll. Aber hab ich nicht.
Also ich brauche "jetzt" 17 MHz, um quasi "1 MHz" zu emulieren. ich brauche mehr MHz, kann aber sein ,das ich einige gewonnene Takte weder verbrauche müsste, um dem Speicher/ROMs Zeit zu geben, Daten anzulegen / zu schreiben.
Tolles Projekt! Ich kann gut nachvollziehen wieviel Arbeit da drin steckt und welches Durchhaltevermögen. Vielleicht motiviert es dich ja weiter zu machen, das hier ist auch mit Fast-Null-Budget und ohne Oszi etc. entstanden: Beitrag "Projektvorstellung: µMk64 - 2-MHz Heimcomputer aus 5 AVRs" Stefan schrieb: > Momentan bin ich an dem Punkt angelangt, das ich > eingestehen muß, das es mit den vorhandenen Mitteln nicht weitergeht und > ob es überhaupt weitergeht, da ich nicht schlüssig bin, ob sich die noch > vorhandenen Probleme je zu 100% eliminieren lassen. An so einem Punkt war ich auch mehrfach. Manchmal muss man einen Teil von Grund auf anders machen um Fehlerquellen von vornherein auszuschließen. Meld dich, falls du Interesse an einem Austausch hast, ich könnte mir gut vorstellen, dass ich hier Ideen und Code liegen habe, die dich an einem Knackpunkt vielleicht weiter bringen könnten. Für den Dezimalmodus kann man die AppNote AVR204 von Atmel verwenden, der Code ist schön schnell. Grüße Mark
Coole Sache, gratuliere! Ich bin an einer ähnlichen Sache gescheitert. Ich wollte nur den 6502 in der 1541 Floppy emulieren (nicht nur CPU, ganze Floppy). Und ich bin an der Geschwindigkeit gescheitert. Im Moment mache ich das mit einem STM32F4 mit 168 MHz, und diesesmal sieht es schon sehr sehr gut aus ... http://t-winkler.net/dokuwiki/doku.php?id=1541-emul:implementation
Hi Stef, Du hier ;-) Dachte es mir schon das so Kommentare wie "weshalb" "unnötig" und "meine CPU läuft auch ohne so etwas" von diversen Personen erscheinen, die die Philosophie des Entwickelns und des Erschaffens nicht verstehen und andere nur kritisieren, weil sie selbst nichts hin bekommen. Lass sie blubbern. Blamieren tust Du Dich auch nicht, weil sie reichen Dir nicht einmal 1% im technischen Verständnis und Wissen das Wasser. Kann nicht verstehen, weshalb Du Dich blamieren solltest, wenn Du hier etwas hin bekommen hast, an dem tausende seit Jahren gescheitert sind. Die so etwas auch als "Unlösbar und Unmöglich" beschreiben. Der beste Beweis ist das Raspberry PI, eigentlich hat es so gut wie keinen Nutzen, wurde jedoch mittlerweile 1 Million mal verkauft. Elektronik Basteln und Entwerfen ist eine Begeisterung, wenn man den Sinn und den Nutzen sucht, dann lässt man es lieber. Es gibt schon alles auf dem Markt. Verstehe auch nicht, was diese Leute die Kritik üben, überhaupt hier zu suchen haben. Thomas Winkler scheint der einzige hier zu sein, der ein Profi ist. Wollte nur zur 1541 noch etwas anmerken. Es gibt Lösungen die eine 1541 Floppy emulieren, dies sogar mit einem AVRs. AVR Based: http://pontoppidan.info/lars/index.php?proj=mmc2iec In diesem Projekt kann ein simpler uralter DOS Rechner herhalten: http://www.kotinet.com/1541/ Vielleicht kann die eine oder andere Lösung hier gefunden werden, da es Open Source ist.
Nico schrieb: > Wollte nur zur 1541 noch etwas anmerken. > > Es gibt Lösungen die eine 1541 Floppy emulieren, dies sogar mit einem > AVRs. > > > AVR Based: > http://pontoppidan.info/lars/index.php?proj=mmc2iec Das ist keine 1541-Emulation sondern nur ein via AVR (ziemlich mies) implementiertes C64-kompatibles Diskettenlaufwerk. Den Unterschied merkt man beim ersten Fastloader, der 6502-Code auf dem Laufwerk ausführen will.
> > Das ist keine 1541-Emulation sondern nur ein via AVR (ziemlich mies) > implementiertes C64-kompatibles Diskettenlaufwerk. Den Unterschied merkt > man beim ersten Fastloader, der 6502-Code auf dem Laufwerk ausführen > will. Was ist ein 1541 Laufwerk, eine High Speed Festplatte ? Auch vielleicht mal den Text gelesen, das keine Speeder supportet werden ? Er hat einen AVR mit SD als 1541 Emulation entwickelt und es geht. Ob er es mies oder nicht gemacht hat, dann mach es besser. Es allerdings heute Mode über die anderen Kritik auszuüben , aber selbst nicht selbst auf die Reihe zu bringen. Überasche uns wenn du es besser kannst.
Hi Stefan, Hut ab vor Deiner Arbeit. Melde Dich mal an, das ich Dir eine PM schicken kann. Ju PS.: Oder schick mir eine PM mit Deiner e-mail adresse.
Nico schrieb: > Was ist ein 1541 Laufwerk, eine High Speed Festplatte ? Ein komplettes 6502-System mit 1,0 MHz Takt, 2KByte RAM und 16KByte ROM. > Auch vielleicht mal den Text gelesen, das keine Speeder supportet werden > ? Das alleine ist bereits ein ausreichendes Anzeichen dafür, dass es sich eben nicht um eine 1541-Emulation sondern lediglich ein C64-kompatibles Diskettenlaufwerk handelt. Eine 1581, CMD HD oder MSD SD-2 sind ja auch keine "1541-Emulation". Im Gegensatz zu MMC2IEC haben die immerhin keine Probleme mit grundlegenden Funktionen wie z.B. byteweisem Lesen einer Datei oder dem Betrieb mehrerer Laufwerke am Bus. > Ob er es mies oder nicht gemacht hat, dann mach es besser. Been there, done that - sd2iec ist entstanden, weil mir MMC2IEC zu inkompatibel war. Ich bezeichne es allerdings nicht als "1541-Emulation", gerade weil es keine ist und auch keine sein will. -ik
tsaG schrieb: > Nico schrieb: > >> Was ist ein 1541 Laufwerk, eine High Speed Festplatte ? > > Ein komplettes 6502-System mit 1,0 MHz Takt, 2KByte RAM und 16KByte ROM. Jaaa! Zu C64-Zeiten hab ich auf dem Floppy-Gerät eigene Programme laufen lassen. Nicht sonderlich komfortabel dieses "Betriebssystem", war aber trotzdem ganz lustig. :-)
...1541: Besonders "lustig" war IMHO, dass ein geschriebenes physikalisches Byte vom R/W-Controller durch direktes setzen des V-Flags der CPU signalisiert wurde :-) Von der GCR-Kodierung etc. ganz zu schweigen... Aber es war erstaunlich, wie schnell sich der Steppermotor mit eigenen Programmen bewegen lies, bis hin zur Tonausgabe :-) Was die Emulation eines 6510 mit AVR angeht: Mit einer 16MHz CPU eine zyklengenaue Emulation des 6510 hinzubekommen dürfte schon nicht so einfach (wenn überhaupt möglich) sein. Man hat pro 6510 Zyklus max. 16 Takte. Das ist verdammt knapp. Die Emulation eines ganzen C64 wäre wohl weit aufwändiger :-) Insbesondere SID+VIC... Grüße Markus
Markus Weber schrieb: > tsaG schrieb: >> Nico schrieb: >> >>> Was ist ein 1541 Laufwerk, eine High Speed Festplatte ? >> >> Ein komplettes 6502-System mit 1,0 MHz Takt, 2KByte RAM und 16KByte ROM. > > Jaaa! Zu C64-Zeiten hab ich auf dem Floppy-Gerät eigene Programme laufen > lassen. Nicht sonderlich komfortabel dieses "Betriebssystem", war aber > trotzdem ganz lustig. :-) Markus, es reicht vollkommen aus mit einem AVR und einer SD auf die Programme zugreifen zu können und diese einfach zu laden oder zu speichern. Zwecks dem Speed könnte ich die Kritik noch verstehen, denn Speeder benötigen tatsächlich diese Funktion, um das OriROM mit der eigenen Routine umgehen bzw. um Speeder Routinen implementieren zu können. Floppy (Turbo) Nibbler nutzten diese Möglichkeit auch. Das ein AVR 32 nicht eine komplette 1541 mitsamt RAM , Rom und sonstiges emulieren kann, dürfte wohl jedem klar sein. Dazu müsste der AVR zusätzlich die 6502 CPU komplett emulieren , wie es Steffan bereits oben mit der 6510 bereits beschrieben und größtenteils umgesetzt hat und sämtliche andere Aufgaben wie IEC Bus und SD Card Bus ansteuern. Das ist definitiv nicht mit einem einzelnen ATMega möglich. In den 70ern wurden die Konstrukteure von solchen Dingen als Pioniere und Genies vergöttert, heute bekommen Menschen die eine komplette CPU per Bit und Byte und Assembler, ein müdes "wozu ?" oder schlicht Kritik zu hören. Leute, Stefan hat einen kompletten 6510 Prozessor also Register, Opcodes etc. auf einem anderen 8 Bitter portiert. Schon mal das Datenblatt des 6510 gesehen, was da alles beachtet und implementiert werden muss ? Mitsubishi und einige weitere Firmen nutzen übrigens heute noch einen 6502 Compatible Core, allerdings mit einem erweiterten Befehlssatz. Auch bekommt man den 6502 noch heute zu kaufen, nur eben den 6510 nicht mehr. (Außer natürlich gebrauchte 30 Jahre alte Stücke bei eBay und sonst wo. Klar) Die Intention dahinter ist, einen fast kompletten C64 mit 8 Bit AVR Controllern zu realisieren, ohne 32 Bit ARM CPUs und sonstiges dafür einzusetzen. Denn dann , lädt man sich einfach aufs Smartphone eine APP runter und spielt damit. Hier geht es um den FUN an der Sache, so wie eben Leute mit Arduino und anderen MC Tools Projekte realisieren. Auch sitzt so mancher der 64K Szene ca. 1 Jahr lang dran und programmiert eine Demo, um danach diese in einer Assembly Veranstaltung zu präsentieren. Wenn man sich nach dem Nutzen von allem fragt, dann beginnt diese Frage eigentlich schon bei der eigenen Existenz. :-) Andererseits reicht es auch vollkommen aus, sich einen VICE Emu oder sonstiges runter zu laden und damit zu spielen. Spielen. < Wenn jemand spielt, dann ist die Frage des Sinns berechtigt. Wir spielen aber nicht, wir entwickeln. Aber ums Spielen geht es hier nicht, sondern um die Möglichkeiten, die Grenzen des machbaren zu erreichen und wenn es geht, diese sogar zu durchbrechen. *** Da hat sich jemand entschlossen und auf einem ATMega eine ARM32 Emulation zu programmieren und somit Linux darauf laufen zu lassen. Das Booten hat mehrere Stunden benötigt. Natürlich macht es keinen Sinn. Aber der Junge ist mittlerweile weltweit bekannt, das er so etwas hin bekommen hat. Das ist für so manchen einfach der Spaß an der Sache. Das muss man nicht hinterfragen aber auch nicht rechtfertigen. *** Wer von Euch wäre in der Lage, eine VIC Emulation als Chip hin zu bekommen. (Wetten Stef, wir werden jetzt wieder über den Sinn aufgeklärt, aber auch das es nicht geht und sonstiges ? :-) Danke.
Nico schrieb: > In den 70ern wurden die Konstrukteure von solchen Dingen als Pioniere > und Genies vergöttert, heute bekommen Menschen die eine komplette CPU > per Bit und Byte und Assembler, ein müdes "wozu ?" oder schlicht Kritik > zu hören. Naja, das musst Du aber ein bisschen differenzierter sehen. Ich meine mit einem µC bekommst Du schon ein (selbst für heutige Verhältnisse) mächtiges Werkzeug in die Hand. In Software einen 65xx inkl. illegaler Opcodes etc. zu implementieren ist sicher mal nicht so an einem Wochenende gemacht. Aber die Ingenieure damals mussten bei vielen Sachen erstmal bei "null" anfangen. Ich denke der Weg ist hier das Ziel :-) Warum lassen anderen Leute Modellflugzeuge fliegen? Warum laufen Leute stundenlang stumpf durch die Gegend? ich denke es macht ihnen einfach Spaß... > Wer von Euch wäre in der Lage, eine VIC Emulation als Chip hin zu > bekommen. Hehe.. spätestens bei den Sprites wird es kniffelig, wenn auch die ganzen Tricks der Demos noch funktionieren sollen, mit Rasterzeileninterrupts und Sprites in den Rahmen platzieren etc... Dafür benötigt man wohl wirklich einen ARM oder FPGA... Grüße Markus
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.