W65C02S-Einplatinencomputer

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

  • Hier : Bitte melde dich an, um diesen Link zu sehen. ist ein schönes Beispiel. Bitte auch den Multiplexer für die "CPU-Übernahme" berücksichtigen.

    Ich bin sehr gespannt, wie und ob das letztlich alles passt.

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

  • Hier : Bitte melde dich an, um diesen Link zu sehen. ist ein schönes Beispiel. Bitte auch den Multiplexer für die "CPU-Übernahme" berücksichtigen.

    Ich bin sehr gespannt, wie und ob das letztlich alles passt.

    Wobei die Schaltung deutlich einfacher ausfallen sollte. Für das RAM haben wir schon getrennte _RD und _WR Signale und _CS gibts auch schon fertig. Also fehlt nur jeweils ein Inverter für IRQ und RESET. Das kann man mit einem 76LS06 und einem Widerstand (für RESET) als Pullup erschlagen.

  • Bin auf diesenBitte melde dich an, um diesen Link zu sehen. gestossen.

    Der Preis für die Platine soll nur 10 Euro sein (Artikel Bitte melde dich an, um diesen Link zu sehen.) und das ist größer als eine Eurokarte. Wäre interessant wo der die Platinen für diesen Preis bekommt.

  • Vermutlich bei PCBCart in China, die produzieren !a Qualität zu einem sehr guten Preis. Perter Sieg und ich haben die USB-HxC-Platinen dort fertigen lassen und waren sehr zufrieden mit Preis/Leistung.

  • Vermutlich bei PCBCart in China, die produzieren !a Qualität zu einem sehr guten Preis. Perter Sieg und ich haben die USB-HxC-Platinen dort fertigen lassen und waren sehr zufrieden mit Preis/Leistung.

    Demzufolge sollte die Platinengröße bei unserem Projekt eher sekundär sein solange alles wichtige drauf passt.

  • Hab hier mal eine Beispielorder berechnet, für ne Europlatine. Preise sind in US-Dollar.
    Dazu kommen noch einmalig die Einrichtungskosten, die betragen $ 69,30
    Die entfallen dann für spätere Nachbestellungen.
    Versandkosten liegen bei etwa 45 Dollar.

  • Gerrit: Hast du grad noch eine Patentlösung für die VIAs?
    Die haben jeweils 4 Leitungen für die Auswahl der Register. Man kann die bestimmt mit Adressleitungen Aw, Ax, Ay, Az mit den 3 Registerleitungen RS0-RS3 verbinden.

    Welche Leitung muss ich für ROM_OE benutzen? Ich habe das jetzt mit RAM_OE verbunden, aber das passt so bestimmt nicht...

    Ich bin gleich soweit fertig mit dem Schaltplan. :)

    MfG.
    crasbe

    Edit: Ich habe grad nochmal ins Datenblatt gesehen, und da ist mir aufgefallen, dass die VIAs 2 ChipSelect Leitungen haben:

    Zitat

    3.3 Chip Select (CS1, CS2B)
    Normally, CS1 and CS2B are connected to the microprocessor address lines. This connection may be
    direct or through decoding. To access a selected W65C22 register, CS1 must be logic 1 and CS2B must
    be logic 0. These pins have a bus holding devices on the W65C22S.

    Eigentlich müsste es doch reichen, CS2B auf GND zu legen, und CS1 mit I/O $8000 zu verbinden.

  • Gerrit: Hast du grad noch eine Patentlösung für die VIAs?
    Die haben jeweils 4 Leitungen für die Auswahl der Register. Man kann die bestimmt mit Adressleitungen Aw, Ax, Ay, Az mit den 3 Registerleitungen RS0-RS3 verbinden.

    Patentlösung? Naja, man hängt RS0-RS3 eben an A0-A3. Dann liegen die 16 Register nacheinander im Speicher. _CS der VIAs gibts von einem der 74LS138 und den zweiten CS (high active) legt man fest auf +5V.

    Zitat


    Welche Leitung muss ich für ROM_OE benutzen? Ich habe das jetzt mit RAM_OE verbunden, aber das passt so bestimmt nicht...

    Bei einem reinen (EP)ROM würde ich einfach _CS und _OE zusammenlegen. Bei einem Flash in das auch geschrieben wird denke ich liegst du mit RAM_OE gar nicht so falsch. Das wird LOW wenn R/_W high ist, also gelesen wird.

    Zitat


    Eigentlich müsste es doch reichen, CS2B auf GND zu legen, und CS1 mit I/O $8000 zu verbinden.

    Umgekehrt. Der Ausgang der 74LS138 ist low active. Soll heissen, wenn die Bedingung zutrifft wird das Signal LOW (GND), ansonsten ist es HIGH. Also CS1 fest an +5V und _CS2 an einen der Ausgänge des 74LS138.

    Poste den Schaltplan wenn fertig, reicht auch als PNG oder GIF hier, egal wie sorgfältig man arbeitet, ohne Debuggen wirds nicht gehen. :)

  • Soooo Bienchen war fleißig!
    Ich hab nun Revision 0.6 fertig, wo soweit alles drin sein sollte.
    Die SVGs und SCHs lade ich in einer Zip-Dateien hoch, die JPGs lad ich direkt hoch.

    Bitte einmal ansehen, und auf Fehler prüfen!

    MfG.
    crasbe

  • Soooo Bienchen war fleißig!
    Ich hab nun Revision 0.6 fertig, wo soweit alles drin sein sollte.

    Naja. den 16550, Selektierung, RAM und ROM vermisse ich doch irgendwie. :)

    Ansonsten hast du einen der VIAs und das Banking-Register beide auf $8000. Leg den VIA auf $8800 und es passt.

    Ausserdem bitte Pullup-Widerstände für IRQ, NMI und BE vorsehen.

    Mehr fällt mir im Moment nicht auf, aber das könnte an der Uhrzeit liegen, ich schau morgen nochmal drüber.

  • Hier sind noch die SVGs, die Bibiliotheken, die Projektdatei und die Footprints zu den Bibiliotheken.

    Ich hoffe, ihr könnt was mit den Dateien anfangen!

    MfG.
    crasbe

    Edit:

    Naja. den 16550, Selektierung, RAM und ROM vermisse ich doch irgendwie. :)

    Ansonsten hast du einen der VIAs und das Banking-Register beide auf $8000. Leg den VIA auf $8800 und es passt.

    Ausserdem bitte Pullup-Widerstände für IRQ, NMI und BE vorsehen.

    Mehr fällt mir im Moment nicht auf, aber das könnte an der Uhrzeit liegen, ich schau morgen nochmal drüber.


    Den 16550 habe ich noch nicht eingeplant; habe ich total vergessen.
    Die Memoryseite und die Selektierung habe ich schon hochgeladen. s.o.

    VIA1 liegt nun auf $8400 und VIA2 auf $8800.

    Die Pullupwiderstände habe ich nun auf die Coreseite eingefügt ;)

    Das ist okay, ich bin auch müde.

    Edit2: Könnte ein Mod den Titel auf "[Projekt] W65C02S-Einplatinencomputer" ändern und das Thema in eine geeignete Kategorie verschieben? Danke!

  • Guten Morgen,

    es sieht so aus, als ob die Interrupt-Ausgänge der VIAs einfach miteinander verbunden sind. Das geht bei den aktuellen W65C22S von WDC aber nicht! Siehe Datenblatt Kapitel 2.14 erster Absatz:

    "IRQB is a full output driver that allows both Logic 1 and Logic 0 levels. The older NMOS and CMOS IRQB output was open drain pull down only. The IRQB output cannot be wired ORed with other devices. "

    Oliver

  • "IRQB is a full output driver that allows both Logic 1 and Logic 0 levels. The older NMOS and CMOS IRQB output was open drain pull down only. The IRQB output cannot be wired ORed with other devices. "

    *Grmpf* Wer macht denn sowas? Naja, für den 16550 brauchen wir sowieso einen 74*06 plus Pullups, also können wir auch gleich mit dem Rest die IRQ-Ausgänge der 6522 passend machen:

    Jeweiliger IRQ-Ausgang der 6522 mit je einem 74*06-Gatter verbinden. Die Ausgänge aller dieser Gatter zusammenschalten plus einen Pullup-Widerstand. Dieses Ergebnis nochmal durch ein 74*06-Gatter ergibt ein _IRQ-Signal wie man es erwartet (die IRQ-Leitung des 6502 braucht auch einen Pullup). Kostet für 2 x 6522 insgesamt 3 Gatter des 74*06. Der 16550 braucht für IRQ und RESET 2 weitere, bleibt noch eines übrig. Sieht so aus wie angehängt. Ich hab nur leider auf die Schnelle keinen 74*06 in der Library gefunden und deshalb einen 74LS05 benutzt. Kommt in diesem Falle auf dasselbe raus, sind beides Open Collector Ausgänge nur der 74*06 verträgt bis 30V am Ausgang.

    Größe des Pullups.... Hm... reichen 4.7KOhm?

  • Aber so wird doch ein VIA-Interrupt nur ausgelöst, wenn beide VIA-Lines aktiv sind. Ist das gewünscht?

    Abhilfe schafft hier ein NAND-Gate (falls übrig) vor dem OC-Inverter oder 2 Dioden in Sperrrichtung samt Pullup vor einem Inverter (quasi Dioden-NAND ;)). 4,7k-Pullups sind in Ordnung, 10k würden es auch tun.

    Man könnte auch die VIA-Ausgänge per Dioden-AND direkt an den IRQ-Eingang der CPU hängen und die Inverterkette nach den VIAs sparen, aber ich weiß nicht, ob die CPU damit stabil klarkommt, daher lieber 2 OC-Inverter behalten (der 7406 wird sowieso gebraucht). Vor TTL-Eingängen ist das jedenfalls kein Problem mit den Dioden.

  • Aber so wird doch ein VIA-Interrupt nur ausgelöst, wenn beide VIA-Lines aktiv sind. Ist das gewünscht?

    Hrm... Mist... Stimmt. Aber lösbar mit dem einen freien Inverter der noch da ist. Dann sind jetzt wieder alle Gatter belegt.

    Wie immer stimmt der alte Satz... Zu jedem Problem gibt es eine Lösung, die einfach, elegant und falsch ist.

  • Was machen wir nun mit SYNC, NMI, BE und IRQ von den Erweiterungsports?
    Wir könnten die dreckige Methode nehmen, und die Schnittstelle dafür als OpenCollector definieren, was aber auch Bauteiltechnisch schon recht aufwändig wäre, und die Erweiterungen teurer machen würde.
    Als andere Methode könnten wir einen 10kOhm Widerstand zwischen NMI, SYNC, BE und IRQ schalten, damit dann nicht die Chips gegrillt werden, wenn kein Interrupt anliegt.
    Das Problem liegt daran, dass es dann im Prinzip in beiden Zuständen auf keinem definierten Potential liegt.
    Die dritte Methode wäre, dass wir einen BS170-MOSFET nehmen und OpenCollector "nachrüsten".
    Die vierte Methode wären wieder drei 74HCT05.

    Me dar igual, aber Methode 3 und 4 sind die Besten IMHO.

    MfG.
    crasbe

  • Was machen wir nun mit SYNC, NMI, BE und IRQ von den Erweiterungsports?

    SYNC ist ein Ausgang der CPU. NMI und IRQ sind Eingänge und die Treiber dazu haben wir als Open-Kollektor definiert.
    BE ist ein Eingang der auf dem Board selbst nicht benutzt wird (braucht Pullup), ist also auch kein Problem. Ich nehme an, statt SYNC meinst du RDY... Definiere einfach, dass es nur einem weiteren Busmaster geben darf, ansonsten kommt noch Arbitrierungslogik dazu und das wollte ich vermeiden.

    Zitat


    Wir könnten die dreckige Methode nehmen, und die Schnittstelle dafür als OpenCollector definieren, was aber auch Bauteiltechnisch schon recht aufwändig wäre, und die Erweiterungen teurer machen würde.

    Wieso? Notfalls braucht man für einen Open-Kollektor-Treiber einen Transistor (Ich hab das schon mit einem BC547 gemacht) und einen Widerstand und die meisten 65xx-Chips die diese Signale produzieren liefern schon passende Signale. Wenn man 8xxx-Chips benutzen will dann haben die meist umgekehrte Logik (siehe IRQ beim 16550) und dann reicht ein Open-Kollektor-Treiber.

    Zitat


    Als andere Methode könnten wir einen 10kOhm Widerstand zwischen NMI, SYNC, BE und IRQ schalten, damit dann nicht die Chips gegrillt werden, wenn kein Interrupt anliegt.

    Schau dir an wie es im C64 gelöst ist... Alle IRQ-Leitungen hart zusammengeschaltet und ein Pullup nach +5V der die Leitung auf HIGH hält wenn kein IRQ anliegt. Gleiches für NMI. Das gleiche kannst du mit BE und RDY machen. In meiner Schaltung für die IRQs ist der Pullup schon drin (R2).

  • Ich habe mal Revision 0.6a fertig gebastelt. Da ist der IRQ-Fix drin, die Pullups für BE, IRQ und NMI sowie der UART.

    Als erstes kommen die Zip-Dateien mit Bibiliotheken, Projektdateien, Schaltplänen und SVGs...