Archiv verlassen und diese Seite im Standarddesign anzeigen : Kennt sich noch jemand mit nem C64 aus? Expansionport...
Steinigtmich
29.11.2007, 21:25
Nabend!
Ich will meinen alten C64 mal wieder aus dem Schrank kramen und brauche in Hard- und Softwarefragen einige Expertenmeinungen.
Ich möchte für den Extension-Port eine Karte mit einem AVR drauf basteln, welcher
a) Ein LCD-Display drauf hat
b) Beim Starten ein Programm ins RAM vom C64 schiebt
c) Das Programm dann ausführt
Das Display ist soweit nebensächlich, da hab ich kein Problem mit.
Auch die Hardware ist denke ich soweit RELATIV problemfrei zu realisieren, es gibt ja genug Doku für die Schnittstelle am C64.
Jetzt der Soll-Zustand etwas detaillierter:
Ich möchte wie schon geschrieben ein Programm vom Atmel auf den C64 schieben. Also in etwa so, als ob ich von Datasette (JA, ich hab sowas! =D> ) mittels LOAD-Befehl ein Programm lade und es dann mittels RUN ausführe.
Nur soll genau dieses die Expansion-Karte übernehmen, halt das Programm direkt ins Ram und dann ausführen.
Wie lässt sich sowas realisieren? Hat jemand soetwas ähnliches schonmal gemacht, und entsinnt sich noch, wie es "damals" so funktionierte?
Da ich lieber zu viele Infos bringe als zu wenige hier nochmal was ich eigentlich vorhabe:
Ich möchte mir gerne eine Art Synthesizer bauen. Ansteuerbar per MIDI-Schnittstelle. Und weil ich keinerlei Gelüste verspüre den alten Brotkasten auseinanderzunehmen und den SID rauszulöten, möchte ich die gesamte Kiste einbinden. Nur möchte ich sie auch gerne mal mitnehmen, und dann nicht jedes Mal einen Mörderaufwand treiben mit Programm von Datasette laden, den Krust an den Fernseher anschliessen etc.
Das Display am Expansion-Modul soll mir die nötigsten Statusinfos rausgeben, das wird dann durch das Basic-Programm im Rechner angesteuert, aber das ist erstmal Nebensache.
Hauptsache ist, ich kann das Biest anschalten, der Rest bis inkl. Programmstart soll selbsttätig von Statten gehen.
MfG Steinigtmich
Besserwessi
29.11.2007, 22:15
Es gibt da verschiedene Möglichkeiten:
1) Ein EPROM oder ggf. auch EEPROM am Expansionsport anschließen. Startet als ROM modul sofort nach dem Einschalten und ist einfach, da kein Comtroller.
2) Das DMA Protokoll oder als Externe CPU am Expansionsport: ist kompliziert, aber dann könnte eventuell alles auf dem AVR laufen und nur der SID vom C64 genutzt werden.
3) Das Program von der UART Laden.
Am USER Port ist eine UART schnittstelle verfügbar von der man das Program laden kann und auch gut Text ausgeben kann. Den Ladebefehl am C64 müsste man dann aber blind eingeben.
Ein externes LCD Dispaly würde ich sowieso an der UART anschließen, ist einfach und wird vom C64 Basic unterstützt. Das Kassetten interface ist eher ungeeignet, da schon besser der IEC Bus.
Steinigtmich
29.11.2007, 22:24
Ok, so komm ich der Sache wohl schon etwas näher.
Mit dem UART ists so ne Sache, da müsste ich das Programm ja doch von Hand herholen, und dann halt auch manuell ausführen?
Ich möchts automatisch...
Das mit dem ROM-Modul, genau sowas hatte ich mir vorgestellt. Ich wollte halt den AVR ein EPROM emulieren lassen.
Wie sähe das Softwaremässig aus, in dem Fall? Wird da nicht noch jede Menge Initialisationsarbeit in der Bootsequenz nach dem Ansprechen vom Expansion-Modul gemacht? Übernimmt das Expansion-Modul dann die gesamte weitere Steuerung, oder lassen sich da irgendwelche "Vektoren verbiegen", so dass mir das Modul das Programm ins Ram schmeisst, und dann danach der Ablauf wie gewohnt ist?
Quasi als ob ich das Dingens anmache, und sofort steht mir per LIST der Quelltext zur Verfügung (überspitzt formuliert, kann sonst auch, aber nicht gerne, etwas assembliertes werden)
linux_80
29.11.2007, 23:08
Hallo,
mal sehen was ich ohne nachschlagen noch zusammenbekomme...
ohne Assemblerprogrammierung im C64 wirds nicht gehen, denke ich mal.
Es gibt an diesem Port die Leitungen /Game und /ExRom, wenn die Low sind startet der C64 von dort, und nicht das interne ROM.
Man muss sich also nur einen kleinen Bootloader bauen, der vom externen ROM her die ganz normalen C64-Reset-Routinen durchläuft, und am Schluss das Basic-Prog an die richtige Stelle kopiert.
Ich weiss jetz aber nicht ob das interne ROM zur Verfügung steht, wenn man eines dieser beiden Signale auf Low zieht :-k
Zum LCD, das kann man auch einfach an den Bus am Port dranklemmen, man braucht nur einen Adressdekoder, der auf die beiden Adressen die ein LCD braucht lauscht, und das Enable bzw. CS des LCD aktiviert, A0 vom C64 geht dann auch an A0 vom LCD.
Man kann dann einfach per Poke und der ausgesuchten Speicheradrese das LCD ansprechen, und kann dann sogar das Busy-Flag abfragen.
Bis jetzt haben wir noch keinen AVR dafür gebraucht :-)
trotzdem ohne Gewähr ;-)
Nachtrag zum LCD am Bus:
Am Ext-Port gibts die Signale /IO1 und /IO2 die den Adressbereich im IO-Bereich ($D000) anzeigen, wenn man eine der beiden mit dem Adressdekoder verknüpft, bzw. nur diese verwendet, kann man leichter eine Adresse festlegen die auch noch im C64 typ. IO-Bereich liegt ($DE00 bzw. $DF00). Also einfach /IO1 an CS des LCD, und man sollte per Poke an $DE00 (56832) das erste Register des LCD erreichen, $DE01 ist dann das Cmd-Register.
Besserwessi
30.11.2007, 13:14
Einen AVR zum EPROm emulieren zu nehmen wird so einfach nicht gehen, denn man hat nur etwa 200 ns um nach anliegen der Addresse die daten bereitzustellen. Das Programmieren ist zwar etwas umständlicher aber so ein 8 KB oder 16 kB EPROM ist wirklich einfach und günstig, und wesentlich mehr braucht man nicht. Soweit ich mich noch erinnern kann, bleibt der obere Teil des ROMs immer verfügbar, das Basic ROM kann gegen ein Externes Ausgetauscht werden, und zusätliches ROM kann Teile des RAMs ersetzen (8 kB wenn ich mich richtig erinnere). Man hat dann also weniger RAM zur Verfügung.
Das LCD Modul direkt an den Bus anzuschließen, könnte mit dem Timing recht knapp werden, hängt aber vom LCD Modul ab. Die IO Bereiche währen dazu sehr gut geeignet. Die UART Schnittstelle könnte eventuell mit dem MIDI interface belegt sein, wobei ich nicht weiss ob der C64 die 34 kBaud für Midi kann. Theoretisch müsste sogar noch eine 2 te UART vorhanden sein, ich weiss aber nicht mehr ob die überhaupt rausgeführt ist, von Basic aus wird sie jedenfalls nicht unterstützt.
Auch wenn ein anderes Forum ist, aber es gibt tatsächlich noch immer ein Forum speziell zum C64:
http://www.forum64.de
Steinigtmich
30.11.2007, 17:58
Danke schonmal soweit für die Antworten, das bringt mich ein ganzes Stück weiter.
Mit den EPROMS klingt ja schonmal ganz gut (kann ich die eigentlich mit meiner Platinen-Belichtungs-Lampe mit hohem UV-Anteil, die eigentlich für Terrarien zum Belichten von Wüstenviechern gedacht war, löschen?) aber mir wäre es doch lieber, wenn ich zum Experimentieren etwas anderes nehmen könnte,
Würde das nicht auch gehen, wenn ich statt nem EPROM einen SRAM als Puffer nehmen würde, den ich dann per AVR beschreibe?
Zur Programmierung, ich hab da nen C-Compiler für den C64 gefunden (www.cc65.org), den will ich mir heute Abend mal anschauen. Wäre mir wesentlich lieber als Assembler.
Also, was ich soweit rausgefunden habe, bitte um korrektur falls ich mich irre, der C64 kann von bei angeschlossenem Modul am Expansion Port, sowie z.B. der /EXROM-Pin auf low liegt, sowie im angeschlossenen EPROM eine bestimmte Byte-Sequenz liegt (ich meine u.a. "CBM80" war das), vom Modul "booten". Will sagen, dann startet garnicht erst das Basic, sondern das Programm auf dem Modul wird ausgeführt.
Heisst das für mich das ich mir mein Programm zurechtklabüster, dass dann compilierterweise inkl. der Bytesequenz und den Einsprungadressen einfach auf den EPROM (oder halt SRAM, falls möglich) packe, die /EXROM-Leitung auf GND lege, den C64 starte und fertig?
Was ist mit den ganzen Initialisierungen, die die Kiste vornimmt, wenn er normal, ohne Modul drin, gestartet wird? Muss ich die in meinem Programm machen, übernimmt das der C64 doch noch für mich, oder sind die garnicht mehr nötig, weil im Normalbetrieb nurnoch das Basic gestartet wird?
Besserwessi
30.11.2007, 18:44
Man kann auch ein SRAM (6264 oder so ähnlich) mit Batteriepuffer nehmen, als Puffer sollte selbst eine kleine Lithiumzelle (oder 2xAAA) schon 1-2 Jahre halten. Die Daten wären dann aber einfacher vom C64 aus zu schreiben. Ich habe noch so eine Platine bei der man per Schalter umstellen kann ob sie beschrieben werden kann oder nicht. Der eigentliche Witz dabei ist, dass man damit auch ein EPROM in anderen Schaltungen emulieren kann.
Das Startem vom ROM aus sollte so wie beschrieben funtionieren. Ein Teil der Initialisierung sollte dann schon erfolgt sein (bevor auf CBM80) geprüft wird. Man wird aber zumindestens für den Ersten Teil kaum um Assembler herumkommen, es sein denn der C-Compilter hat speziell diesen Fall schon vorgesehen. Man kann dann wahrscheinlich die Original initalisierung weiterlaufenlassen.
linux_80
01.12.2007, 03:11
Hallo,
auf einigen älteren Grafikkarten und Mainboards auch, sind nicht nur EProms, sondern auch EEProms für das BIOS, die haben zwar dann meist 2MBit (256kB), aber man kann die nicht benutzten Adressleitungen fest auf Gnd legen. Nur zum Programmieren muss man alle Adressen erreichen, um in den lösch- / schreibmodus zu kommen. Wenn man einen (E)Eprombrenner hat, noch besser.
Kommt nur drauf an, ob Du die Daten vom C64 aus ändern willst oder nicht, dann ist entweder die Version mit gepufferten SRam oder ein EEprom besser.
Da ich keinen EEpromer habe, hatte ich mir mal einen selber gebaut für das RN-Control:
http://roboter.net-con.net/rn/FlashAdapter_Unterseite.JPG
Mit /GAME wird der Bereich ab $8000 für das Modul reserviert, wird eine Adresse in diesem Bereich angesprochen, wird das Signal /ROML auf low gezogen.
Zum CBM80, dieses wird nach einem Reset als erstes überprüft, und falls gefunden gleich an Zeiger in $8000 gesprungen. Es wird vorher nur der Stackpointer gesetzt.
Man muss also die Resetroutine selber nachbauen, wenn man das ROM an diese stelle setzt.
Ansonsten könnte man das CBM80 weglassen, dann bootet der ganz normal, und per SYS 32768 ein Programm selber starten, das an $8000 liegt :-k
Jetzt kommts drauf an was der 64er selber machen soll, oder ob er von aussen gesteuert wird (DMA)
Mit den knapp 1MHz schafft der die MIDI Geschwindigkeit nicht selber, hier soll wohl der AVR zum Einsatz kommen, der dann den SID im 64er ansprechen soll :-k
Da gibts aber bestimmt auch schon was :-k
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.