W65C02S-Einplatinencomputer

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

  • Wegen dem ROM-Banking: Ich bin für einen weiteren 74xx273. Der eine haut es jetzt auch nicht mehr raus ;)

    Da ich dafür ein weiteres NOR brauche muss ich einen 74*04 einplanen damit ich im Moment als Inverter benutzte Gatter freimachen kann. Komme ich aber erst am Wochenende zu.

    Zitat


    EPROMs kann auch nicht jeder brennen und EEPROMs sind wegen neu beschreiben auch nicht besser. Man kann sie nur komplett löschen und beschreiben.

    Ich lese das Datenblatt zum EEPROM so, dass man es eben byteweise beschreiben kann. Also wie ein RAM, nur deutlich langsamer beim Schreiben. Das mit 'alles auf einmal löschen' ist Flash.

  • Nicht wirklich, die meisten Flash-Bausteine muss man nicht komplett löschen, aber blockweise, wobei die Blockgrösse jeweils vom Flashbaustein abhängt.

  • Nicht wirklich, die meisten Flash-Bausteine muss man nicht komplett löschen, aber blockweise, wobei die Blockgrösse jeweils vom Flashbaustein abhängt.

    Beim 29F040 sind das 64KB. Wobei dieser Rechner nur ein ROM-Fenster von 16KB hat, also man immer 4 ROM-Bänke auf einmal löschen muss. Das läuft für mich unter 'alles auf einmal'. :)

    Für unsere Anwendung wäre deshalb eher das 29F010 besser, da ist die Sektorgröße 16 KB, das passt besser und 8 davon sollten mehr als ausreichen.

  • Ich glaube, die 29F010 gibt es nur als 100ns Version. Das heißt, dass man Zusatzlogik braucht, weil der 2 Zyklen braucht, um die Daten bereitstellt.
    Der Flash ist sowieso nur vom AVR beschreibbar.

  • Ich glaube, die 29F010 gibt es nur als 100ns Version. Das heißt, dass man Zusatzlogik braucht, weil der 2 Zyklen braucht, um die Daten bereitstellt.

    Reichelt listet einen 29F010-55 in PLCC32 für 1,90 Euro. PLCC mag ich allerdings nicht so gerne weil DIP kompatibel zu einem EPROM wäre, man also die Wahl hätte.


    Zitat

    Der Flash ist sowieso nur vom AVR beschreibbar.

    Müsste doch auch vom 6502 selbst machbar sein, oder braucht das extrem viel Extralogik?


  • Reichelt listet einen 29F010-55 in PLCC32 für 1,90 Euro. PLCC mag ich allerdings nicht so gerne weil DIP kompatibel zu einem EPROM wäre, man also die Wahl hätte.


    Naja gut, PLCC hin oder her, aber wer möchte heute noch EPROMs brennen, löschen und dann doch die Daten verlieren, wenn zu viel Licht rankommt?
    Den Flash-Speicher kann man direkt vom AVR aus beschreiben. Diesen Komfort hat man bei EPROMs nicht.

    AFAIR hat reichelt auch nur recht langsame EEPROMs. Ich weiß nicht genau, wie schnell die sind, und wie viel sie dann kosten.
    Der AM29F040 wäre btw auch PLCC.

    Davonab ist der Preis pro Megabyte bei dem AM29F010 geradezu unverschämt hoch; 4,40€ pro Megabyte bei dem 29F040 gegen 15,20€ pro Megabyte bei dem 29F010.
    Ich wüsste nicht, warum wir den ganzen RAM-Speicher über den Haufen werfen sollten...

    Zitat von Gerrit


    Müsste doch auch vom 6502 selbst machbar sein, oder braucht das extrem viel Extralogik?

    Nun, es kommt drauf an, wie man das auslegen möchte. Wenn man einfach den Flash mit R/W beschreibbar macht, und man dann durch einen Programmfehler (oder Absicht?) versehentlich auf den Flash schreibt, ist er, wenn man immer schreibt, nach ein paar Sekunden tot.
    Je sicherer man das dann machen will, desto mehr Logik braucht man dafür.
    Ich halte es schon für sinnvoll, dass man den Flashspeicher nur vom AVR beschreiben kann. Vor allem auch, weil wir sehr viel RAM zur freien Verfügung haben. Wenn man das Monitorprogramm anpassen will, läd man es ins RAM, und dann kann man es so viel bearbeiten, wie man will. Wenn man es dann brennen will, kann man es auf den Computer ziehen und brennen.

    Sinnvoll wäre es, wenn man in dem AVR eine Option vorsieht, dass man den Flash schreibbar machen kann. Transistor evtl?

    MfG.
    crasbe


  • Naja gut, PLCC hin oder her, aber wer möchte heute noch EPROMs brennen, löschen und dann doch die Daten verlieren, wenn zu viel Licht rankommt?

    Ich hab keine Probleme mit EPROMs, Kleber drüber und passt für deutlich mehr als 10 Jahre.

    Zitat


    Den Flash-Speicher kann man direkt vom AVR aus beschreiben. Diesen Komfort hat man bei EPROMs nicht.

    Naja, der Normalfall wird ziemlich sicher sein, daß du einen Monitor in das Flash/EPROM schreibst und ab da diesen benutzt um Programme auf den Rechner zu laden. Dafür braucht der AVR nicht angeschlossen zu sein, es reicht die Platine mit einem MAX232 und eine RS232 am Rechner (Wer Retrocomputing betreibt hat sowas)


    Zitat


    Davonab ist der Preis pro Megabyte bei dem AM29F010 geradezu unverschämt hoch; 4,40€ pro Megabyte bei dem 29F040 gegen 15,20€ pro Megabyte bei dem 29F010.
    Ich wüsste nicht, warum wir den ganzen RAM-Speicher über den Haufen werfen sollten...

    Der Preis pro MB ist hier irrelevant. Interessanter ist ob ich den Platz brauche und benutzen kann. Das 29F010 kostet weniger als das 29F040, bietet 8 Pages a 16 KB (also 8 x KERNAL + BASIC eines C64!) und die Pagegröße passt genau zum ROM-Window von 16 KB. Beim 29F040 hingegen ist eine Page 64 KB gross, du musst also, auch wenn du nur eine Page anpassen willst immer gleich 4 ROM-Bänke löschen und wieder beschreiben.

    BTW: Ein brauchbarer Monitor mit Kommunikation über RS232, Binary Up/Download und Disassembler passt in 2 KB.


    Zitat

    Nun, es kommt drauf an, wie man das auslegen möchte. Wenn man einfach den Flash mit R/W beschreibbar macht, und man dann durch einen Programmfehler (oder Absicht?) versehentlich auf den Flash schreibt, ist er, wenn man immer schreibt, nach ein paar Sekunden tot.

    Simpel: Jumper für _WE. Garantiert nicht von Software zu umgehen. Muss sowieso drauf damit der AVR keinen Mist bauen kann.

  • Hallo,

    ich habe meinen Logikentwurf mal noch etwas erweitert. Kostet leider zwei zusätzliche ICs (74*04 und 74*125). Neue Features:

    1) Der AVR kann jetzt den 6502 in den Reset schicken

    2) Bei Busübernahme mit BE wird PHI2 vom 6502 vom System getrennt, der AVR muss es dann liefern.

    3) Es gibt ein weiteres Banking-Register für die Flash-Bänke. Diesmal write-only.

    4) Um die open-Collector-Treiber für den RESET-Teil freizubekommen wurde auch die IRQ-Schaltung etwas umgebaut.

    Im Moment sind noch 4 Gatter unbenutzt, 1x NAND, 1x NOR und 2 Puffer des 74*125.

    Was fehlt jetzt noch an Logik?

  • Wir haben beide eine andere Lösung erarbeitet :D
    Ich habe gestern nochmal den Teil mit dem AVR, dem Takt und dem Reset überarbeitet.

    Ich habe 74HCT165 und 74HCT595 Schieberegister eingesetzt, was zwar bedeutet, dass man 2 Chips mehr hat, aber dafür kann man das SPI-Modul des AVR benutzen. Das verspricht weniger Auslastung des AVRs bei höherer Geschwindigkeit.

    Den Reset kann man nun mit einem Transistor triggern, und der Takt wird ebenso mit einem Transistor unterbrochen.
    Das sind dann 2 Chips weniger.

    Wieso hast du auf der select.sch-Seite die Inverter aus den NANDs und NORs durch einen Inverterchip ersetzt? Das kostet ein Bauteil mehr.
    Ich mach mal eben die Revision 0.7 fertig.

    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.

    Die Version mit den anderen Schieberegistern ist in der Interface-Exp. Datei.

    MfG.
    crasbe

  • Wieso hast du auf der select.sch-Seite die Inverter aus den NANDs und NORs durch einen Inverterchip ersetzt? Das kostet ein Bauteil mehr.

    Weil ich ein weiteres NOR für das zweite Banking-Register brauchte. Also entweder ein 74*04 oder einen weiteren 74*02. Die Verwendung eines 74*04 machte es flexibler.


  • Den Reset kann man nun mit einem Transistor triggern, und der Takt wird ebenso mit einem Transistor unterbrochen.
    Das sind dann 2 Chips weniger.

    Du unterbrichst hier aber PHI0, also den Takt _zur_ CPU. Was wir brauchen ist eine Freischaltung von PHI2, also dem Takt mit dem die CPU den Rest des Systems steuert. Selbst wenn du PHI0 abschaltest, PHI2 hat dann einen festen Pegel, das ergibt mit dem AVR einen Kurzschluss. Daher meine Schaltung mit dem 74*125, die erledigt das sauber mit dem BE-Signal als Eingabe.

    Auch bitte bei 'Missbrauch' eines NAND oder NOR als Inverter nicht einfach beide Eingänge zusammenschalten, jeder Eingang stellt eine gewisse Last auf das Signal dar, besser ist es den unbenutzten Eingang auf einen festen Pegel zu legen (+5V bei NAND, GND bei NOR).

    Bei deiner Banking-Schaltung hast die die beiden 74*273 komplett parallel geschaltet, damit wäre einer der beiden sinnlos. Hier habe ich das zweite NOR gebraucht damit ich den zweiten 74*273 unter einer anderen Adresse ansprechen kann.

    Beim ROM liegt _CE immer noch auf A15, hier bitte den Ausgang von U605A verwenden (_ROM_CS). Beim RAM hingegen muss A15 mit _CS verbunden werden

  • Du unterbrichst hier aber PHI0, also den Takt _zur_ CPU. Was wir brauchen ist eine Freischaltung von PHI2, also dem Takt mit dem die CPU den Rest des Systems steuert. Selbst wenn du PHI0 abschaltest, PHI2 hat dann einen festen Pegel, das ergibt mit dem AVR einen Kurzschluss. Daher meine Schaltung mit dem 74*125, die erledigt das sauber mit dem BE-Signal als Eingabe.


    Der Takt, mit dem die CPU den Rest des Systems ansteuert, ist aber nicht PHI2 sondern PHI2O, wobei PHI2O = PHI2.
    Die W65C02 hat keinen PHI0 Pin.

    Dazu noch ein Zitat aus dem Datenblatt:

    Zitat von Page 26


    Timing Notes:
    1.
    Timing measurement points are 50% VDD.
    2. PHI1O and PHI2O clock delay from PHI2 is no longer specified or tested and WDC recommends using an oscillator for system time base and PHI2 processor input clock.

    Zitat

    Auch bitte bei 'Missbrauch' eines NAND oder NOR als Inverter nicht einfach beide Eingänge zusammenschalten, jeder Eingang stellt eine gewisse Last auf das Signal dar, besser ist es den unbenutzten Eingang auf einen festen Pegel zu legen (+5V bei NAND, GND bei NOR).

    Bei deiner Banking-Schaltung hast die die beiden 74*273 komplett parallel geschaltet, damit wäre einer der beiden sinnlos. Hier habe ich das zweite NOR gebraucht damit ich den zweiten 74*273 unter einer anderen Adresse ansprechen kann.


    Gefixt.

    Zitat

    Beim ROM liegt _CE immer noch auf A15, hier bitte den Ausgang von U605A verwenden (_ROM_CS). Beim RAM hingegen muss A15 mit _CS verbunden werden


    RAM_CS ist gleich A15. Siehe Select.


  • Der Takt, mit dem die CPU den Rest des Systems ansteuert, ist aber nicht PHI2 sondern PHI2O, wobei PHI2O = PHI2.
    Die W65C02 hat keinen PHI0 Pin.

    Tut nichts zur Sache, wenn die Platine zum NMOS-6502 kompatibel bleiben soll, dann liegt der Takt vom Oszillator an Pin 37 an und das Systemtiming wird mit dem Takt der aus Pin 39 rauskommt gesteuert. Da ist auch beim W65C02 garantiert ein Treiber dazwischen, also musst du diesen Taktausgang irgendwie abschalten. Die CPU selbst darf weiterhin ihren Takt bekommen.

    Die Verwendung von diskreten Transistoren in Logikschaltungen versuche ich zu vermeiden. Da ist zuviel analoges involviert (normalerweise braucht man bei NPN z.B. einen Widerstand zwischen Basis und GND damit er auch wirklich sperrt), fertige Logikgatter schaltest du hingegen korrekt zusammen und schon passt alles.

    Wie gesagt, den 74*04 brauchen wir auf jeden Fall sonst fehlt das NOR für das Register für das ROM-Banking und mit dem 74*125 wird auch PHI2 bei BE = LOW sauber entkoppelt.

    Bei der CPU fehlt noch der Jumper für Pin 1, der NMOS-6502 erwartet hier GND, der W65C02 benutzt das als Ausgang. Ebenso fehlen noch die Pullups für _IRQ, _NMI, RDY und BE.

  • Zitat von Gerrit

    Tut nichts zur Sache, wenn die Platine zum NMOS-6502 kompatibel bleiben soll, dann liegt der Takt vom Oszillator an Pin 37 an und das Systemtiming wird mit dem Takt der aus Pin 39 rauskommt gesteuert. Da ist auch beim W65C02 garantiert ein Treiber dazwischen, also musst du diesen Taktausgang irgendwie abschalten. Die CPU selbst darf weiterhin ihren Takt bekommen.


    Es ist die Frage, ob wir NMOS-kompatibel bleiben wollen. Die NMOS Chips kann man, optimistisch gesehen, bis zu einer Taktfrequenz von 2MHz betreiben. Danach ist Schluss.
    Mir fällt kein sinnvoller Grund ein, warum wir NMOS-kompatibel bleiben wollten...
    Wenn man es dann doch will, kann man immernoch W65C02N-Chips benutzen, bzw eine Adapterplatine mit OC-Treibern.


    Zitat

    Die Verwendung von diskreten Transistoren in Logikschaltungen versuche ich zu vermeiden. Da ist zuviel analoges involviert (normalerweise braucht man bei NPN z.B. einen Widerstand zwischen Basis und GND damit er auch wirklich sperrt), fertige Logikgatter schaltest du hingegen korrekt zusammen und schon passt alles.

    Wie gesagt, den 74*04 brauchen wir auf jeden Fall sonst fehlt das NOR für das Register für das ROM-Banking und mit dem 74*125 wird auch PHI2 bei BE = LOW sauber entkoppelt.


    Gut, auf den einen Chip kommt es nun auch nicht mehr an...

    Zitat

    Bei der CPU fehlt noch der Jumper für Pin 1, der NMOS-6502 erwartet hier GND, der W65C02 benutzt das als Ausgang. Ebenso fehlen noch die Pullups für _IRQ, _NMI, RDY und BE.

    Die Pullups für _IRQ, _NMI, _BE und _RDY sind auf der Core-Seite.

    MfG.
    crasbe


  • Es ist die Frage, ob wir NMOS-kompatibel bleiben wollen. Die NMOS Chips kann man, optimistisch gesehen, bis zu einer Taktfrequenz von 2MHz betreiben. Danach ist Schluss.

    3MHz, der 6502B. Ausserdem gibts noch die alten 65C02 von Rockwell, die kommen bis 4MHz. Ja, gibts nicht mehr neu, aber so könnte man Bauteile die man schon hat verwenden, nicht jeder braucht 4 und mehr MHz.


    Zitat


    Mir fällt kein sinnvoller Grund ein, warum wir NMOS-kompatibel bleiben wollten...

    Recycling alter Bauteile... Z.B. eine nicht mehr reparable 1541/-II (S/L-Kopf oder Read-Amp defekt) bringt dir die CPU und 2 VIAs. Je universeller die Platine verwendbar ist, desto größer der Kreis der potentiellen Interessenten.


    Zitat

    Bei der CPU fehlt noch der Jumper für Pin 1, der NMOS-6502 erwartet hier GND, der W65C02 benutzt das als Ausgang. Ebenso fehlen noch die Pullups für _IRQ, _NMI, RDY und BE.

    Die Pullups für _IRQ, _NMI, _BE und _RDY sind auf der Core-Seite.
    [/quote]

    Ah, da... Den für RDY finde ich allerdings nicht. BTW: BE und RDY sind high-active, haben also kein '_' vor dem Namen. Wenn die Signale hingegen '_BD' (Bus disable) und '_HALT' heissen würden, dann bräuchten sie das '_'.

  • Ich habe mal einen IRC-Channel auf irc.euirc.net erstellt. #w65c02s

  • Bitte melde dich an, um diesen Link zu sehen. ist zwar ähm eine Nummer größer, aber vielleicht auch interessant.

  • Bitte melde dich an, um diesen Link zu sehen. ist zwar ähm eine Nummer größer, aber vielleicht auch interessant.


    Danke für den Link. Das ist durchaus ein sehr interessantes Projekt, allerdings sprengt das Wohl den Rahmen etwas.
    Ich hoffe schon, dass unser Projekt einigermaßen bezahlbar bleibt, damit es auch ein paar Leute nachbauen werden.
    In der zweiten Version wurden schon CPLDs benutzt. Wir haben uns dagegen entschieden, da es zu viel Aufwand gewesen wäre, wenn man AVRs, Flashs UND GALs, PALs oder CPLDs programmieren müsste.

    Wenn wir fertig sind, wird das wohl im Rahmen einer Sammelbestellung "an den Mann" gebracht und da nicht jeder einen AVR programmieren kann oder will (?), werde ich das wohl übernehmen. Dazu gehört dann auch ein kurzer Funktionstest, das Laden der Firmware und des Monitorprogramms in jeweils den AVR und den Flash.
    Wenn man dann noch einen CPLD flashen müsste, würde sich der Aufwand noch weiter steigern. So kann man direkt die Logikchips einstecken und drauf los arbeiten.

    MfG.
    crasbe

  • Ich habe mal ein paar Änderungen gemacht, und in den aktuellen Schaltplan eingepflegt.
    Unter anderem habe ich die Änderung mit dem Flash eingefügt und 7 Widerstände durch ein Netzwerk entdeckt.
    Außerdem habe ich noch ein paar Pullups und Pulldowns eingefügt, um nicht willkürliche Schreibzugriffe zu produzieren.

    Wie gewohnt kann man den Schaltplan hier abrufen: Bitte melde dich an, um diesen Link zu sehen. und die Libs: Bitte melde dich an, um diesen Link zu sehen.

    Ich hoffe, es sind nicht so viele Fehler drin.

    MfG.
    crasbe

    Edit: Das mit dem IRC-Channel meinte ich btw. ernst...

  • Ich habe mal ein paar Änderungen gemacht, und in den aktuellen Schaltplan eingepflegt.
    Unter anderem habe ich die Änderung mit dem Flash eingefügt und 7 Widerstände durch ein Netzwerk entdeckt.
    Außerdem habe ich noch ein paar Pullups und Pulldowns eingefügt, um nicht willkürliche Schreibzugriffe zu produzieren.

    Pulldowns sind nicht ganz so einfach wie Pullups. Mal sehen.

    Zitat


    Wie gewohnt kann man den Schaltplan hier abrufen: Bitte melde dich an, um diesen Link zu sehen. und die Libs: Bitte melde dich an, um diesen Link zu sehen.

    Kann ich mir erst am Wochenende ansehen.

    Zitat


    Edit: Das mit dem IRC-Channel meinte ich btw. ernst..

    Schon klar... Nur ist das eine Zeitfrage. Ich kann immer mal die Zeit finden an einem Schaltplan zu arbeiten bzw. zu debuggen, aber Chats sind leider echte Zeitfresser.