W65C02S-Einplatinencomputer

Es gibt 295 Antworten in diesem Thema, welches 49.576 mal aufgerufen wurde. Der letzte Beitrag (25. Dezember 2012 um 19:58) ist von norbi40.

  • Ist bei AVR nicht anders, n paar Widerstände, nen Parallelportstecker, fertig ist der Programmer. Wie ist das bei CPLD?

  • Ist bei AVR nicht anders, n paar Widerstände, nen Parallelportstecker, fertig ist der Programmer. Wie ist das bei CPLD?


    In der einfachsten Variante für Xilinx (direkt in der Entwicklungsumgebung IIRC bis Version 10.1 unterstützt) 'n paar Widerstände, nen Parallelportstecker, fertig ist der Bitte melde dich an, um diesen Link zu sehen.

    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.

  • [...]
    Eine ziemliche Materialschlacht und ob es tatsächlich irgendwann verwendet wird ?

    Vielleicht bleibt es doch bei einem CPLD/GAL/PAL/EPROM/whatever hängen...
    Es gibt schon welche ab 3€, aber die Programmieradapter scheinen recht teuer zu sein.

    Der Ansatz mit den 16KB Abschnitten ist gut, bleibt nur offen, wie viele einzelne Abschnitte wir haben wollen.
    Ich bin immernoch für 64KB RAM (4 Abschnitte), 128KB Flash (evtl nicht alles davon benutzt), ein kleines Stückchen Extra-RAM für Zeropage (Zeropage ist sehr wichtig!), 16KB für Chips (ein Abschnitt; viel zu viel, aber passt gut), 64KB für Erweiterungen (4 Abschnitte; Erweiterungen mit Chips im Chip Bereich, Erweiterungsbereich groß genug für Speicherbereich).

    Die Programmierung vom AVR will ich einfach halten, allerdings schon einen Bootloader einbauen, damit wir die Platine schon mit einem minimalen Programm ausliefern können.

    Für den CPLD kann man sicherlich auch eine einfache Programmierlösung finden. (Zur Not auch einfach den Parallelportadapter.)

    Natas: Den LPC-Flash werde ich mir mal ansehen.

    CrazyIcecap: Ein FTP Server ist natürlich eine Lösung, allerdings muss man dann abwägen zwischen einem FTP-Programm oder einem GMail Account.

    Unseen: Ich habe einen ISP-Programmieradapter für AVRs. USBasp nennt er sich.

    Ich hoffe, ich habe alle Fragen beantwortet :)

    MfG.
    crasbe

  • FTP-Programm bringt Windows z.B. mit, nennt sich "Explorer" :)
    Einfach in der Adresszeile von einem Explorer-Fenster (nicht Internet-Exploerer! ) die Daten in dieser Form eingeben:

    Code
    ftp://Username:Passwort@ftpserver.de

    und Enter drücken. Schon wird man eingelogt und der FTP-Server ist wie ein Dateiordner....:)
    Filezilla ist kostenlos und mehr als ausreichend, und notfalls kann man auch alles über nen halbwegs aktuelle Browser machen.

  • Der Ansatz mit den 16KB Abschnitten ist gut, bleibt nur offen, wie viele einzelne Abschnitte wir haben wollen.
    Ich bin immernoch für 64KB RAM (4 Abschnitte),

    Meine Idee erlaubt 32KB am Stück, nur das erste KB ($0000-$03FF) ist in jeder Bank dasselbe. Der Aufwand ist klein, 2 oder 3 TTLs und ein I/O-Port zur Bankauswahl. Braucht kein CPLD oder GAL.

    Zitat

    ein kleines Stückchen Extra-RAM für Zeropage (Zeropage ist sehr wichtig!),

    Der Stack ist noch wichtiger. Sonst war der nächste RTS oder IRQ dein letzter.

  • Eben... Meine Erfahrung ist in so einem Falle 'nein'. Daher mein Vorschlag mit 32K SRAM (1 Chip) und 16 KB ROM/Flash/EEPROM (1 Chip), Mehrere I/O-Fenster im Rest. Die Dekodierung dafür geht fast nicht einfacher.

    Man könnte für das RAM einen 32pol-Sockel vorsehen, damit ist Platz für ein 512KB SRAM (3,65 bei Reichelt) und etwas freien Platz für simple Banking Logik (Umschaltung über Routinen im ROM).

    Es wäre kein so grosses Problem eine Logik aufzubauen die sicherstellt, dass beim Zugriff auf das untere KB (wo Zeropage und Stack zu finden sind) immer dasselbe Stück Speicher angesprochen wird. Gerade mal grob im Kopf überschlagen müsste das mit einem 74F521 oder 74LS688 plus einem 74LS08 zu machen sein (Ein 6fach ODER ginge auch, kenne ich nur keines). Ergibt 4 Bänke a 32 KB. Die Portbits für die Umschaltung der Bänke stellt einer der VIAs bereit.

    Also ich wollte schon mindestens 64k SRAM haben. 16K Flash-EEPROM sind okay.
    74Fxxx wollte ich nicht benutzen, weil die nicht mehr hergestellt werden. Das heißt, in 20 Jahren wird es so gut wie unmöglich sein, die Dinger noch zu bekommen, wenn es heute schon schwer ist.

    74xx688 ist ein 8-fach Komparator, d.h. er vergleicht 2 8-bit Inputs. Wenn diese gleich sind, geht das Ausgangssignal auf "high".
    Was macht das 4x2-fach AND (74xx08) dabei? Wie wirkt das zusammen? Ich sehe es im Moment noch garnicht...

    Die einzige Möglichkeit, die ich darin gerade sehe ist, dass der 74xx688 das Highbyte vom Adressbus mit 0b00000000 vergleicht, und die ANDs das Lowbyte prüfen.
    Wenn beides High ergibt, wird der Zeropage und Stack RAM angesprochen. Ist das so richtig?

  • 74Fxxx wollte ich nicht benutzen, weil die nicht mehr hergestellt werden. Das heißt, in 20 Jahren wird es so gut wie unmöglich sein, die Dinger noch zu bekommen, wenn es heute schon schwer ist.


    Sowohl TI als auch NXP (bei weiteren habe ich nicht nachgeschaut) behaupten, dass sie noch 74F521 (rausgegriffen weil der erwähnt wurde) und andere Chips in der 74F-Logikfamilie produzieren würden. Man könnte aber natürlich auch die gleiche Funktion in einer anderen Logikfamilie nehmen, z.B. ABT oder ALVT.

    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.

  • Wieso nicht (A)HCT?

    TTL und CMOS/TTL geben sich fast nichts von den Spannungen (Bitte melde dich an, um diesen Link zu sehen.), und auch von den Zeiten sind bei AHCT fast identisch (Bitte melde dich an, um diesen Link zu sehen.).

    HCT ist, je nach Anwendung, auch nicht viel langsamer, und HCT wird es auch noch in vielen Jahren von vielen Herstellern geben.

    Edit: Ich habe grad in das Datenblatt von einem NXP 74HC(T)165 gesehen: Die maximale Schaltfrequenz liegt bei 56MHz, also dürften die Chips sich bei Frequenzen von 14MHz mehr als langweilen. Das Sortiment von HCT Chips ist bei reichelt recht klein, aber bei mouser und csd-electronics ist es größer.

  • Wieso nicht (A)HCT?


    Nachdem jemand 74F vorgelegt hat habe ich mich in der Auswahl auf die Familien beschränkt, die mindestens gleich schnell sind. Wie schnell es am Ende tatsächlich sein muss sollte man sinnvollerweise anhand des fertigen Schaltungsentwurfs ausrechnen und dann eine dazu passende Logikfamilie wählen (oder die Schaltung anpassen).

    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.


  • Nachdem jemand 74F vorgelegt hat habe ich mich in der Auswahl auf die Familien beschränkt, die mindestens gleich schnell sind. Wie schnell es am Ende tatsächlich sein muss sollte man sinnvollerweise anhand des fertigen Schaltungsentwurfs ausrechnen und dann eine dazu passende Logikfamilie wählen (oder die Schaltung anpassen).


    74HCT sollte definitv reichen, wenn man sich die Schaltfrequenzen ansieht. Ich denke nicht, das irgendein TTL-Chip mit bis zu 56 MHz (praktisch eher weniger, aber trotzdem viel) fertig wird.

  • 74xx688 ist ein 8-fach Komparator, d.h. er vergleicht 2 8-bit Inputs. Wenn diese gleich sind, geht das Ausgangssignal auf "high".

    Nein, laut Datenblatt von TI geht der Ausgang des 688 auf LOW wenn beide Eingaben gleich sind. Sonst ist er HIGH.

    Zitat


    Was macht das 4x2-fach AND (74xx08) dabei? Wie wirkt das zusammen? Ich sehe es im Moment noch garnicht...

    Die Idee ist einfach... Du brauchst auch nur 5 Bit des 688. A0-A9 hängen direkt am RAM (ergibt 1 KB). A10 - A14 hängen am RAM und an 5 Bit eines der 8Bit-Eingänge des 688. Alle anderen Eingänge des 688 liegen fest auf GND. Der Ausgang des 688 geht also auf LOW wenn du auf das erste KB des RAMs zugreifst, sonst ist er HIGH. _CS für das RAM ist A15 von der CPU.

    Die hohen Adressleitungen (A15-) des RAMs werden von einem VIA-Port (oder sonstigem I/O-Port) gemanaged. Sie hängen nicht direkt am RAM sondern werden durch jeweils ein AND geroutet (Hier könnte man auch einen 74LS257 nehmen). Der andere Eingang des AND ist jeweils mit dem Ausgang des 688 verbunden. Funktion: Sobald ein Zugriff auf das untere KB vom 688 erkannt wird, wird automatisch Bank 0 ausgewählt. Du hast also Zeropage und Stack immer im Zugriff und noch 512Bytes RAM für Daten oder Bankingroutinen. Nachteil: Du verlierst pro Bank 1 KB. Wenn das nicht reicht kann man das Fenster trivial auf 2 KB erweitern.

    Diese Schaltung besteht aus nur 2 ICs und vermeidet Spezial-Chips wie CPLD oder GAL die nicht jeder programmieren kann.

  • Die Idee ist einfach...

    Ja, das hat was. Ich würde den I/O-Bereich mit zwei 138ern dekodieren. Dann hat man acht Adressen für I/O und sieben größere Bereiche für externe Erweiterungen. Dann könnte man einen 74*273 für die oberen RAM-Leitungen verwenden.
    Ich würde gesamt einen VIA einplanen und ausreichend Erweiterungs-Slots. Dann kann immer noch eine I/O-Karte angesteckt werden, wenn jemand mehr braucht.

    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, das hat was. Ich würde den I/O-Bereich mit zwei 138ern dekodieren. Dann hat man acht Adressen für I/O und sieben größere Bereiche für externe Erweiterungen.

    Was auch noch gebraucht wird ist ein 74LS00 um R/_W und PHI2 zum _WE für das RAM zu verknüpfen. Die 138er sind eine gute Idee, ergibt 16 I/O-Blöcke a 1 Kb Grösse. Das sollte wirklich alles interessante erschlagen. Der erste fühlt sich angesprochen wenn (A15 + _A14 + _A13) und der zweite wenn (A15 + _A14 + A13). Braucht noch einen Inverter, dann ist I/O fertig. ROM wird über ein einzelnes NAND selektiert (A15 + A14).

    Bisher ist die TTL-Wüste trotz Banking noch sehr übersichtlich.

    Vom Kaskadieren der 74LS138 würde ich allerdings abraten, das geht bei dem gemütlichen MHz im C64 noch, aber wenn dieses System deutlich schneller laufen soll dürften sich die summierten Verzögerungen negativ bemerkbar machen.

  • Vom Kaskadieren der 74LS138 würde ich allerdings abraten, das geht bei dem gemütlichen MHz im C64 noch, aber wenn dieses System deutlich schneller laufen soll dürften sich die summierten Verzögerungen negativ bemerkbar machen.

    Da bin ich im Moment unsicher. Mit "höheren" Mhz-Werten habe ich noch nichts gemacht. Der 74hc138 braucht laut Datenblatt 14ns , zwei wären dann 28ns.
    Mit den 16 I/Os aus zwei parallel beschalteten Dekodern müsste man auch gut hinkommen. Man müsste den ganzen Kram nun mal zusammenfassen und in einen Schaltplan bringen. Anyone ? - Ich kann nicht so gut mit KiCad. Zu sehr verwöhnt von Eagle. ;)

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

  • Da bin ich im Moment unsicher. Mit "höheren" Mhz-Werten habe ich noch nichts gemacht. Der 74hc138 braucht laut Datenblatt 14ns , zwei wären dann 28ns.

    Ja, und 10 MHz sind nur noch 100ns. Das wird beim ROM/EPROM/Flash schon interessant, vor allem weil der 6502 eben den Bus nur die Hälfte der Zeit benutzt. Unter 100ns wirds schnell dünn und/oder teuer. RAM hingegen ist kein Problem 512K x 8 SRAM mit 55ns kosten nicht mehr als mit 70ns.

    Nicht vergessen, der 6502 kann keine Waitstates da RDY bei Schreibzugriffen eben nicht sofort wirkt. Also muss die gesamte Schaltung das Timing aushalten.

    Ich würde als Designziel in die Richtung von max 4-5MHz denken wenn Bauteile und Logik bezahlbar bleiben sollen. Einen Prototyp erstmal mit 2 MHz testen. Optimieren kann man später immer noch.

    BTW: Den 74F521 hatte ich als Vergleicher vorgeschlagen weil der damals auf den ganzen Zorro-II-Karten im Amiga fürs Autoconfig benutzt wurde. Dafür war der 74LS688 u.U. nicht schnell genug.

  • Das klingt doch alles gut bisher. Ich habe schon Selbstbau-Computer mit günstigen Standard-Teilen gebaut, da waren 5 MHz immer drin. Dadrüber wird es aber zumindest von den Spezifikationen instabil, daher habe ich das mit "normalen" ROMs etc. noch nicht ausprobiert. Aber hey, das ist 5 Mal schneller getaktet als ein Cevi, das ist für einen 6502 echt ordentlich, damit wäre ich mehr als zufrieden! :D

    Zum Schaltplan... ich würde es machen, aber da in 2 Wochen an der Uni die Klausuren losgehen, ist die Vorbereitung da erst einmal wichtiger, und ich würde frühestens am Wochenende mit dem Plan anfangen. Falls jemand also vorlegen möchte, kann er das gerne tun, dann gehts schneller voran!

  • Das klingt doch alles gut bisher. Ich habe schon Selbstbau-Computer mit günstigen Standard-Teilen gebaut, da waren 5 MHz immer drin.

    Auf 6502-Basis oder eine andere CPU wie 68000 oder Z80? Letztere sind beim Timing deutlich entspannter und 5 MHz kein wirkliches Problem. Der 6502 mit seinem Buszugriff in jedem Zyklus und dann noch nur die Hälfte dieses Zyklus benutzend stellt schon bei moderaten Frequenzen ziemliche Anforderungen.

    Beim C64 kein Problem, ein halber Zyklus sind immer noch um 500ns. Damit kann man Logik problemlos kaskadieren, langsame PLAs einsetzen und DRAMs mit 200ns verbauen. Bei 4 MHz sind es auf einmal nur noch 125ns für alles incl. Laufzeit der Logik.

  • Jep, der Z80 nimmt das gelassener, das stimmt, da hat man mindestens doppelt so viel Zeit wie beim 6502. 5 MHz bedeutet dann 100 ns pro Flanke... ist sehr knapp, das stimmt. Bei meinen 6502-Experimenten hat das noch funktioniert, aber wenn ich das nach deiner Beispielrechnung genauer betrachte, ist das schon haarscharf an der Kante. Ich habe ein 70ns EPROM benutzt und eine einfache Logik, deshalb ging es wahrscheinlich. Aber trotzdem, wenn mal ein Bauteil ein wenig länger brauchen sollte, ist Sense.

    Dann schraube ich lieber zurück, bei 3 bis 4 MHz und gut durchgeplanter Logik kann man dann auch mal ein 90ns Flash benutzen. Mit diesen Frequenzen wäre der Rechner immer noch schneller als andere 6502-Architekturen.

    Edit: Hab eben nochmal nachgeschaut, weil mich die ganze Rechnung jetzt doch stutzig gemacht hat. Mein 6502-Platinchen läuft doch nur mit 4 MHz, sorry! Hatte das mit dem Z80-Eigenbau verwechselt :whistling: ... Also 4 MHz 6502 und 70ns EPROM geht aber definitiv, wenn die Logik nicht zu aufwändig ist.

  • Dann schraube ich lieber zurück, bei 3 bis 4 MHz und gut durchgeplanter Logik kann man dann auch mal ein 90ns Flash benutzen.


    Flash finde ich gerade nicht in 5V-kompatibel und flott, aber Ram wäre kein Problem: Bitte melde dich an, um diesen Link zu sehen. ;)

    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.