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ß.
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.
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