C64: Flash-Kernel

Es gibt 20 Antworten in diesem Thema, welches 4.588 mal aufgerufen wurde. Der letzte Beitrag (15. Januar 2006 um 18:13) ist von cbmhardware.

  • Jemand (X1541) in diesem Forum hatte den Wunsch nach einer solchen Erweiterung schonmal geaeussert.
    Ich haette soetwas auch gerne und daher muss ich mal ein paar Fragen loswerden :

    Welchen Bereich sollte man beim C64 fuer eine solche Erweiterung einplanen ($D???) ?

    Ist ein Cartridge wie bei Turbo-Access oder Turbo-Trans eine akzeptable Loesung ? - Das wuerde die Eingriffe in den Rechner minimieren. Das wird imo auch technisch einfacher zu realisieren sein.


    Ein sektorenweise loeschbares Flash ist imo die beste Loesung. Dazu wird man noch eine Dekodierung (GAL, Eprom :8) ), Bustreiber und Signalbeschaltung zum Flashen brauchen.
    Schalter, Leiterplatte und Krimskrams natuerlich auch.

    Moechte das mal sehr langfristig versuchen.

    Michael

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. |

  • wäre es nicht möglich ein modul zu entwerfen welches flashbar ist und einen usb anschluß besitzt? gibts doch viele andere sachen von... zb beim atari.
    dann könnte jeder so ein modul nutzen und spieleimages auf ein modul packen oder programme....

    was sagt ihr?

  • USB Ist mir eine Nummer zu gross. Das ist technisch nicht mal eben gemacht.

    Flashbar waere das Retro-Replay und mit der Ethernet-Erweiterung hast Du da auch eine Bruecke zum PC.

    Ein beschreibbares Cartridge wuerde ich eher mit einem SRAM bauen. Soetwas gab es auch schon. Heute koennte man mit 2 512Kb-Chips schon einen ordentlichen Brocken bauen. Das wuerde aber sehr oder fast nur von Softwareunterstuetzung abhaengen.
    Duerfte seit MMC64 eher uninteressant sein.

    Mir geht es speziell um den Bereich $E000-$FFFF des C64.

    Michael

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. |

  • kannst du mal etwas konkreter beschreiben, was du da vorhast, kann mir irgendwie noch nix drunter vorstellen bzw. den Unterschied zum RetroReplay als flashbare Cartridge

  • Ich hab mir dazu natürlich auch schonmal Gedanken gemacht :)

    Von der reinen Lesefunktionalität her ist natürlich der ROM Sockel die geeignete Variante. Am Expansionport hat man immer das Problem, dass hier ein zusätzliches Kabel ins Innere nötig ist, um an die HIRAM Leitung zu kommen. Und viele andere Erweiterungen mögen auch gerne im Expansionport stecken :(

    Soweit ich mich erinnern kann, braucht praktisch jeder Flash Chip zum Beschreiben ein Fenster von 32kB, um die ganzen magischen Register beschreiben zu können. Das kann man durch ein beschreibbares externes Bankingregister natürlich auch umgehen, dann reichen auch die üblichen 8kB, die man zum Beschreiben z.B. bei $8000 einblenden kann. Im Idealfall braucht man also gar keinen Bereich im $Dxxx Bereich, was die Sache viel verträglicher macht, sondern nur einen Flashmode Schalter in Hardware, der z.B. einen 32kB Bereich von $2000-$bfff einblendet. Dazu braucht man nur mal Zugriff auf die /GAME Leitung und auf die hohen Adressleitungen. Dieser Kram liegt dann leider nicht am ROM Sockel an, genausowenig wie die nötige R/W Leitung :(

    Ob man jetzt bytebasierte (AMD 27Fxxx, Atmel 49...) oder sektorbasierte (Atmel 29Cxxx) nimmt ist fast egal. Die Bytebasierten sind etwas unpraktisch, weil man immer einen ganzen Sektor löschen muss, der recht gross sein kann. Bei den Sektorbasierten sind die Sektoren so klein dass das nicht stört. Alles etwas verwirrend und durcheinander, einfach mal Datenblätter lesen ;)

    Code: Floppy Fehlerkanal abfragen - Ausserdem kann ich bei "drive not ready" den I: und N: Befehl verwenden und notfalls den Kopf manuell zurückschieben. Und Finger weg vom Stepper!
    10 open1,8,15                   : rem 8 ist die Geräteadresse und das kann man bei Bedarf natürlich anpassen
    20 get#1,a$:?a$;:ifst<>64goto20 : rem Das CLOSE 1 am Ende kann man sich sparen, weil beim RUN automatisch ein CLOSE ALL ausgeführt wird.
    RUN
  • @hannenz: Du kennst doch diese Kernel-Umschaltungen mit mehreren Eproms ? - Soetwas nur mit einem vom C64 beschreibbaren Flash.
    In ein 128Kb-Flash wuerden z.B. 16 Kernels reinpassen : Jiffy, SpeedDos, eigene Experimente usw...
    Der C64 kann sich dann sein Betriebssystem selbst ins ROM schreiben (lassen).


    x1541: Wie waere ein Adapter auf dem CPU-Sockel ? - Da muesste man alles abzweigen koennen, haette dafuer evtl. ein kleines Platzproblem.
    I/O waere imo fuer einen Bus-Treiber notwendig, durch den man die Daten schickt. Das Banking und Signalbeschaltung duerfen natuerlich auch nicht fehlen. Das koennte man imo mit einem "Maeuseklavier" realisieren.

    Ich gehe mal von einem 29Cxx aus. Da koennte man auch jedes 8K-Image einzeln reinschreiben. Ist bei Deiner PET-Erweiterung ja auch problemlos moeglich.

    Klingt alles vieleicht sehr spartanisch. So wuerde wuerde ich es mir vorstellen, wenn es denn funktionieren kann.

    Eben noch eingefallen : Die CS-Leitung vom originalen ROM wird man auch noch brauchen. Da muesste dann sicher ebenfalls ein Adapter drunter, damit man beim (oder vor dem) Flashen das Original einschalten kann.


    Michael

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. |

  • Tach !

    Versteh ich nicht wozu das gut sein soll.
    In ein 27512 Eprom bekomme 8 verschiedene Betriebssyteme in ein C64 I ohne grösseren Probleme. Vielmehr nützliche Kernels gibts eh nicht.
    27512 Eprom gibs wie Sand am Meer und sind recht günstig.
    Eprommer für C64 kann man - wenn man keinen hat - auch einfach nachbauen, bzw. bauen lassen.
    Warum so kompliziert ?

    Wer eigene Kernels testen möchte kann das auch mit Rams am Expansionsport, die nach $E000 eingeblendet werden.

    mfG Hucky

    Bitte melde dich an, um diesen Link zu sehen.

    Arcade: Twinliner, Fashion Vision,
    "Cosmic Guerilla" cocktail table
    Pins: Scared Stiff + Getaway
    C64, C65, C66, Gammel+Mist...

  • Für dich machen wir das ja auch nicht Hucky. Dass Du allergisch gegen alles neue und vor allem gegen FlashROMs bist das wissen langsam alle :P

    Code: Floppy Fehlerkanal abfragen - Ausserdem kann ich bei "drive not ready" den I: und N: Befehl verwenden und notfalls den Kopf manuell zurückschieben. Und Finger weg vom Stepper!
    10 open1,8,15                   : rem 8 ist die Geräteadresse und das kann man bei Bedarf natürlich anpassen
    20 get#1,a$:?a$;:ifst<>64goto20 : rem Das CLOSE 1 am Ende kann man sich sparen, weil beim RUN automatisch ein CLOSE ALL ausgeführt wird.
    RUN
  • Was mir da langsam Kopfzerbrechen macht, ist die Addressbeschaltung fuer das Flash.
    Da muesste man imo einen Dekoder dazwischen schalten. Mindestens fuer die oberen 4 Leitungen ?

    Oder bei 8K = fuer A12,A13. Wennn man ab $1000 liest.

    Beim C64-2 koennte es noch ein zusaetzliches Problem geben. Der hat Kernal und Basic in einem 16K-ROM.

    Michael

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. |

  • Ja, so ganz ohne Gefummel auf den Adressleitungen geht es wohl nicht, alleine schon deswegen, weil immer 32kB eingeblendet sein müssen beim Flashen. Ich würde das ganz elegant über ein GAL machen ;) Wegen C64-2 würde ich mir keinen grossen Kopf machen. Wie der Hucky schon sagt, so arg viele (nützliche) Kernels gibt es sowieso nicht, da macht es dann auch nichts, wenn Du zu jedem Kernal auch noch das BASIC flashen musst, und immer 16kB am Stück pro "kernel" verbraten musst. Das macht mein bisheriger Adapter ja auch so. Im C64-1 hat er 16 Stück 8k Bänke, um C64-2/C128 hat er 8 Stück 16k Bänke. Und 4 Stück 32k Bänke geht natürlich auch. Mit ein wenig Gefummel und grösseren Chips kann man auch 16 Stück 32k Bänke haben, wenn es sein muss :)

    Code: Floppy Fehlerkanal abfragen - Ausserdem kann ich bei "drive not ready" den I: und N: Befehl verwenden und notfalls den Kopf manuell zurückschieben. Und Finger weg vom Stepper!
    10 open1,8,15                   : rem 8 ist die Geräteadresse und das kann man bei Bedarf natürlich anpassen
    20 get#1,a$:?a$;:ifst<>64goto20 : rem Das CLOSE 1 am Ende kann man sich sparen, weil beim RUN automatisch ein CLOSE ALL ausgeführt wird.
    RUN
  • Ja, das mit den 32Kbyte muss fuer den 29c010 aber nicht wirklich sein. Die notwendigen Register liegen bei $2aaa und $5555. Wenn man schon einen Dekoder bastelt, kann man die Adressen doch auch faken. Wohin man spaeter programmiert, duerfte doch so ziemlich egal sein, wenn der Dekoder das passende Muster ausgibt.

    Ich werde mir mal etwas Platz machen und ein paar grundlegende Dinge mit Steckboards testen. Mal sehen wie weit ich mit meinen Drahtbruecken komme.

    Ich werde mir mal ein Eprom als Dekoder umruesten, I/O 1 oder 2 erstmal als Basisadresse fuer Flash und Treiber und dann mal sehen wie es klappt.

    Michael

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. |

  • x1541

    Bähhh....


    Gals und Flashs und bla und blub. Bahhhh.... :P
    Naja, wenn der Tag 36 Std hätte würde ich mich damit vielleicht auch mal beschäftigen....

    mfG Hucky

    Bitte melde dich an, um diesen Link zu sehen.

    Arcade: Twinliner, Fashion Vision,
    "Cosmic Guerilla" cocktail table
    Pins: Scared Stiff + Getaway
    C64, C65, C66, Gammel+Mist...

  • Mir ist beim Adaptertuedeln noch etwas durch den Kopf gegangen. Wenn man da noch ein akkugepuffertes 8K-SRAM draufpackt, eine Art Kick-Kerneldisk anfertigt, koennte man je nach Anwendung ein passendes OS booten.

    Irre ich weiss. :D

    War auch nur ein fluechtiger Gedanke. ;)

    Michael

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. |

    Einmal editiert, zuletzt von cbmhardware (9. Januar 2006 um 18:22)

  • Zitat

    Original von x1541
    Ich würde das ganz elegant über ein GAL machen ;)

    Ich habe nun mal ein paar Adapter angefertig, damit ich die Signale vom C64 auf das Steckboard bekomme.
    Ich wollte schon ein Eprom verge... benutzen. ;)

    Mir ist eine vieleicht noch elegantere Loesung eingefallen. Ein Bitte melde dich an, um diesen Link zu sehen. bietet doch alle notwendigen Funktionen, kann mehrmals beschrieben werden und ist nicht zu gross.
    Wenn man eine ISP-Steckleiste einplant, kann man bei Konflikten nochmal den Dekoder umflashen. Vieleicht zeigt sich das auch noch in anderer Hinsicht als nuetzlich.

    Werde das mal testen. Wird nun aber noch laenger dauern. Muss meinen ISP-Programmer erst an den Mega8 anpassen.

    Im Moment bin ich nur mit dem Kopf dabei. Am Wochenende hoffe ich auf erste Ergebnisse.

    Michael

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. |

  • Solange jetzt keiner auf die Idee kommt und nen 128er mod baut wo das Kernal und Basic von Floppy geladen werden.....
    "Kickstart" war schon ganz passend.................. *g*

    Blog: Bitte melde dich an, um diesen Link zu sehen. - The Seventies Board: Bitte melde dich an, um diesen Link zu sehen. Bitte melde dich an, um diesen Link zu sehen.

    Ein Terminal und ein Z80 :D

  • Probleme, Probleme. Folgendes haengt nun am Ex-Port :

    Bus-Treiber fuer Datenleitungen an $de00,
    SRAM 32Kb (auf 8Kb gebanked, $de00) (A0-A12)
    A12,A13 an Dekoder Eprom (laeuft immer mit, OE->GND)

    Im Eprom ist in $0001= $00 und $0002 = $01. Demnach sollte aus $1000 = $0000 werden.
    Theoretisch sollte es klappen. Die Adressbeschaltung arbeitet aber nicht. So wie es von aussen aussieht, wird in Zelle $0000 geschrieben. Der Rest ist dann leer.

    Ich habe einfach ein SpeedDos-Kernel nach $1000 geladen und dann :

    Code
    for i= 0 to 8191: a=peek(4096+i):poke 56832,a:next

    Eingeschaltet habe ich es dann ueber Wechseln des CS (von I/O1) auf Kernel-CS. Nichts. :/

    Der Atmel (Mega8) kam ueberhaupt nicht mit den gallopierenden Signalen klar. Der bekommt einen anderen Job. :)


    Werde evtl. mal einen anderen Ansatz versuchen. Darf ich einen Port-Baustein (6522) verwenden ;) ?

    Jemand eine Idee zum genannten Problem ?

    Michael

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. |

  • Ich versteh nur eines noch nicht: Du hast ja nur 256 Byte im I/O, und da pokest Du 8kB auf einmal rein? Wie funktioniert das, so ohne Bankingregister?

    Wodurch wird denn das EPROM angesteuert? Dass sein Ausgang die oberen RAM-Adressen steuern soll ist mir schon klar. Aber das soll es ja auch nur machen, wenn Du im I/O Modus bist. Im Kernalmodus musst Du ja 8kB direkt durchschalten. Also sind nur 8 Adressleitungen A0-A7 direkt auf das RAM gelegt, der Rest muss dann durch das EPROM, und C/S muss am besten auch noch durch, und R/W wenn geht auch :) So ist dann alles vollautomatisch, wenn Du mit einem Schalter von I/O auf Kernal schaltest. Hm, aber dann werden die Leitungen knapp. Gut, das Banking von den vier möglichen Kernals kann ja wieder extern erfolgen, dann musst Du nur A8-A12 durch das EPROM schleusen, A13 und A14 sind dann wieder direkt auf Umschaltern.

    Code: Floppy Fehlerkanal abfragen - Ausserdem kann ich bei "drive not ready" den I: und N: Befehl verwenden und notfalls den Kopf manuell zurückschieben. Und Finger weg vom Stepper!
    10 open1,8,15                   : rem 8 ist die Geräteadresse und das kann man bei Bedarf natürlich anpassen
    20 get#1,a$:?a$;:ifst<>64goto20 : rem Das CLOSE 1 am Ende kann man sich sparen, weil beim RUN automatisch ein CLOSE ALL ausgeführt wird.
    RUN
  • Erm, ja, 256 Byte hatte ich vergessen und das mit den schon beeinflussten Adressleitungen. :)

    Das ist aber auch eine verbaute Kiste. Ich brauche fuer soetwas eine programmierbare Schnittstelle zum Beschalten von Adressen. Das Ding nennt sich VIA6522. ;)
    Datenleitungen durch einen Treiber und Adressbeschaltung an den Ports des 6522.

    Mit diesem Signalevermatschen wird das bei mir nie etwas.

    Michael

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. |

  • Ich würde keinen 6522 nehmen, das ist Overkill. Nimm doch einen 8bit Latch, so was wie einen 74LS373. Da kannst Du 8bit reinschreiben, von mir aus über I/O2 gesteuert, und damit dann alle Funktionen steuern. Reicht doch. Das ganze sollte dann noch abschaltbar sein, so dass es im Kernalbetrieb unsichtbar am Expansionport wird, und durchgeschleifte Erweiterungen funktionsfähig bleiben.

    Hm, mir kommt da noch so ne Idee im Zusammenhang mit dem MMC64. Das hat ja einen durchgeschleiften Port der allerhand über die MMC64 Register schon steuerbar ist. Und dem MMC64 krankt es eh an einem RAM Chip, um einen anständigen DOS Modus zu implementieren :)

    Code: Floppy Fehlerkanal abfragen - Ausserdem kann ich bei "drive not ready" den I: und N: Befehl verwenden und notfalls den Kopf manuell zurückschieben. Und Finger weg vom Stepper!
    10 open1,8,15                   : rem 8 ist die Geräteadresse und das kann man bei Bedarf natürlich anpassen
    20 get#1,a$:?a$;:ifst<>64goto20 : rem Das CLOSE 1 am Ende kann man sich sparen, weil beim RUN automatisch ein CLOSE ALL ausgeführt wird.
    RUN
  • Es kommt noch schlimmer. ;)
    Lesen vom und Schreiben ins RAM geht nun. Auf dem Labor-Steckboard haben sich ein VIA6522 (Adressleitungen und spaeter mehr), 7474 (Flipflop), SRAM und ein 74245er Bustreiber versammelt.

    Der VIA wird ueber I/O 1 angesteuert und der Rest nutzt I/O 2. Der 7474 generiert ein passendes Signal aus Phi2 und Dotclock fuer den 6522 (Phi2).
    Das steht so in Elektors Interface Schaltungen. Dachte immer, man koennte einen VIA so anklemmen. Scheinbar passt Phi2 doch wohl nicht so ganz. :/
    Das Beschalten des SRAMs durch die Ports des VIA isoliert nun die Adressleitungen vom Rest des Rechners.

    Immerhin habe ich schonmal eine Speichererweiterung. ;)

    Muss mir mal etwas mit A0-12 einfallen lassen. Dann sollte es schonmal mit RAM klappen.

    Michael

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. |