W65C02S-Einplatinencomputer

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

  • Warum schmeisst Du das nicht auf den FTP? Zum Download braucht man keine Logindaten.

  • Okay ich habe es mal auf den FTP geworfen. Wie kann man da nun drauf zugreifen von außen (Browser)?

    MfG.
    crasbe

    Edit: Wir müssen noch über eine geeignete Lizenz nachdenken. Wie wäre es mit CC-BY-NC-SA 3.0? (Creative Commons Attribution Non-Comercial Share Alike 3.0)

  • Auf die Verzeichnisstruktur kann man nur per FTP-Login zugreifen; wenn Du das als einzelnes Archiv im Hauptverzeichnis ablegst, dann gelingt der Zugriff im Browser mit f64.crazy-icecap.com/dateiname.

  • Okay hier ist der Link zu der Zip-Datei: Bitte melde dich an, um diesen Link zu sehen.

    Danke für den FTP-Zugang btw!

  • ... dann noch ein Zip mit SVGs und Bilder ...

    Das mit dem UART funktioniert so nicht... PHI2 muss an CS1, RAM_OE an _RD, RAM_WE an _WR. RD, WR und CS0 kommen an +5V. BAUDOUT muss mit RCLK verbunden werden. An XIN und XOUT kommt der Quarz (1.8432MHz). ADS kommt fest auf GND.

  • Hast du noch mehr Fehler gefunden?
    Dann lohnt sich auch eine Revision 0.6b.
    Bitte schau nochmal auf die RX und TX Verbindungen. (Von Core zu Interfaces)
    Ich würde wetten, dass da noch ein Fehler ist.

    Edit: Bei dem Bereich war wirklich alles falsch; ich habs gefixt.

  • Hast du noch mehr Fehler gefunden?
    Dann lohnt sich auch eine Revision 0.6b.
    Bitte schau nochmal auf die RX und TX Verbindungen. (Von Core zu Interfaces)
    Ich würde wetten, dass da noch ein Fehler ist.

    Ich komm da heute nicht mehr zu... Schau mal drüber und poste die letzten Versionen, dann sehe ich mir das an wenn ich (hoffentlich) morgen Zeit habe.

  • Ich hab mal Revision 0.6b gepinselt.
    Bitte melde dich an, um diesen Link zu sehen.
    dazu immernoch die passenden Bibiliotheken:
    Bitte melde dich an, um diesen Link zu sehen.

    MfG.
    crasbe

  • Also, ich hab nochmal alles angesehen, hier meine Anmerkungen:

    1) Der Quarz wie er im Moment am 16550 hängt kann so funktionieren, aber im Datenblatt zum 16550 von NS sieht die Schaltung etwas anders aus. Ich hab das Datenblatt im Moment nicht in Griffweite, es ist aber im Netz zu finden.

    2) Beim Flash hast du _CS einfach mit A15 verbunden. Das klappt nur fürs RAM. den _CS fürs ROM hast du aber schon im Teil mit der Banking-Logik definiert (Ausgang von U605A), ist also wohl eine reine Labelfrage.

    3) ROM_WE sollte einen Pullup bekommen, falls man das Interface mit dem Atmega nicht immer angeschlossen hat. Sonst hängt der Pin in der Luft und das ist schlecht. Das gleiche gilt für RDY and der CPU.

    4) Die freien Adressleitungen des Flash schaltest du an Vcc über Schalter mit Pulldowns nach GND. Das besser umdrehen, also Pullups nach Vcc und Schalter nach GND. 'ON' steht dann für ein Nullbit.

    5) Über U602 hängt ein Vcc-Anschluss in der Luft. Absicht?

    6) SYNC ist ein Ausgang des 6502, im Moment hängt er an einem Ausgang der Interfaceplatine. Er ist auch nur sinnvoll für Singlestepping zu benutzen und das geht nur per Hardware (siehe KIM-1 Schaltplan), der Atmega wird dafür ind Software nicht schnell genug sein. Falls Singlestep benutzt werden soll muss ich mir das beim KIM-1 nochmal ansehen und eine Schaltung entwerfen die das unter Kontrolle des Atmega erlaubt.

    7) Der WDC-6502 hat an Pin 1 an dem der NMOS-6502 GND erwartet ein Signal (VPB). Damit beide verwendbar sind, sollte hier ein Jumper vorgesehen werden.

    8 ) Damit NMOS-6522 verbaut werden können, braucht die IRQ-Leitung am VIA noch einen Pullup, bei Verwendung der VIAs von WDC kann man den einfach weglassen.

    9) Es fehlt noch der Multiplexer für die Busübernahme. Geschaltet werden muss auf jeden Fall PHI2. Allerdings muss das ohne Glitches passieren. Für sowas gibt es eine Schaltung, die sicherstellt, dass die Periode nicht kürzer werden kann. Muss ich mich mal schlau machen.

    Das ist im Moment alles was mir auffällt

  • 9) Es fehlt noch der Multiplexer für die Busübernahme. Geschaltet werden muss auf jeden Fall PHI2. Allerdings muss das ohne Glitches passieren.

    Was würde passieren wenn man die harte Tour versucht: Reset der CPU (=0) während des Programmierens festlegen ? - Geht die CPU dann nicht auch vom Bus ? - Dann müsste man allerdings R/W und PHI2 selbst generieren.

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

  • Was würde passieren wenn man die harte Tour versucht: Reset der CPU (=0) während des Programmierens festlegen ? - Geht die CPU dann nicht auch vom Bus ? - Dann müsste man allerdings R/W und PHI2 selbst generieren.

    R/_W schaltest du, laut Datenblatt, schon mit 'BE' inaktiv und die CPU hält man besser mit RDY an. PHI2 wird aber immer produziert solange ein Takt anliegt, also müssen wir das irgendwie halbwegs glitchfrei gaten.

  • 1) In dem Datenblatt von TI sind 2 Widerstände vorgesehen, aber sonst stimmt es mit meiner Zeichnung überein. Widerstandswerte sind nicht eingezeichnet.
    2) Gefixt. Ich habe noch ein paar andere Labels korregiert.
    3) ROM_WE und RDY habe ich mit einem Pullup versehen.
    4) Ich habe das nach deinen Vorgaben angepasst.
    5) Das mit dem VCC Anschluss ist so vorgesehen, weil dort der VCC-Anschluss des Chips sitzt.
    6) Wie viel Logik brauchst du für Single Stepping? Das wäre schon gut für Debugging und so. Es ist ja als Programmierplattform für 6502-Assembler vorgesehen.
    7) Ich habe einen Jumper für VPB eingezeichnet.
    8) Den Pullup kann man auch bei WDC-Chips eingebaut lassen. Das macht es mit den Teilesätzen bei einer Sammelbestellung deutlich einfacher, und 2 Widerstände kosten auch nicht die Welt.
    9) Ich werde mir die Datenblätter von den Chips noch einmal ansehen. Wieso willst du einen Multiplexer benutzen? Es müsste reichen, ein Gatter zu benutzen und dann mit PHI2 /BE auf low ziehen.

    Mir ist es ja direkt schon peinlich, dass ich so viele Fehler eingebaut habe, und so wenig zu der Logik beitragen kann :(
    Ich werde bald die Datenblätter und Timingdiagramme studieren und eine technische Dokumentation schreiben. Dann kann $freiwilliger anfangen, ein Monitorprogramm zu schreiben und $anderer_freiwilliger das AVR-Programm. (Ich schließe mich selbst davon nicht aus, aber ich habe wenig Erfahrung.)

    Ich werde bald eine Revision 0.6c veröffentlichen.

    MfG.
    crasbe


  • 1) In dem Datenblatt von TI sind 2 Widerstände vorgesehen, aber sonst stimmt es mit meiner Zeichnung überein.
    Widerstandswerte sind nicht eingezeichnet.

    Im Datenblatt zum 16550A von NS ist eine Tabelle mit Widerständen und Kondensatoren drin. 1MOhm parallel zum Quarz und 1.5KOhm zwischen Xout und dem Quarz. Die Kondensatoren passen so, bei den Widerständen ist die Frage ob wir die brauchen. Hat hier jemand einen 16550 dschonmal direkt mit Quarz beschaltet?

    Zitat


    6) Wie viel Logik brauchst du für Single Stepping? Das wäre schon gut für Debugging und so. Es ist ja als Programmierplattform für 6502-Assembler vorgesehen.

    Im Schaltplan des KIM-1 ist das ein Schalter (Zum Aktivieren der Funktion), ein Taster (fürs Stepping), ein NAND und ein 555 (bzw. eine Hälfte eines 556). Wäre recht einfach zu machen, allerdings nur wenn ich das ROM vom Single-Step komplett ausnehme. Die Funktion ist einfach, jedesmal wenn der 6502 über SYNC meldet, dass er einen neuen Befehl anfängt gibts einen NMI der ins ROM springt und dort im Monitor die üblichen Funktionen bietet.

    Wie das von der Softwareseite her aussieht müsste man im ROM des KIM-1 nachlesen. Das sollte im Netz zu finden sein.

    Der Schaltplan ist Bitte melde dich an, um diesen Link zu sehen., der interessante Teil ist auf Seite 26


    Zitat


    9) Ich werde mir die Datenblätter von den Chips noch einmal ansehen. Wieso willst du einen Multiplexer benutzen? Es müsste reichen, ein Gatter zu benutzen und dann mit PHI2 /BE auf low ziehen.

    Geht natürlich, aber nur wenn dein Interface vom Atmel aus schnell genug ist, oder du machst eben mehrere Schreibzyklen ins RAM... Beim Flash könnte das interessanter werden. Das AM29F040 hat übrigens eine Sektorgröße von 64KByte. Obwohl also immer nur 16KB sichtbar sind werden beim Erase immer 64KB vernichtet. Mit diesen Chips habe ich keine Erfahrung, kann also nicht sagen inwiefern sich Probleme ergeben könnten. U.U. ist das mit den DIP-Switches so nicht machbar sondern braucht Portbits.

    Da fällt mir ein, wenn BE low ist, ist der Bus komplett tristate. Wenn dann nichts vom Atmel kommt hängen diverse Eingänge in der Luft. Das mag CMOS nicht so gerne. Sollten wir besser hochohmige Pullups (10KOhm oder mehr) für die oberen Bits des Adressbusses und R/_W vorsehen damit die Select-Logik keinen Mist baut? Ein Widerstandsnetzwerk mit 8 Stück sollte reichen. Dann fühlt sich bei BE auf LOW und nichts vom Atmel zwar das ROM lesend angesprochen, aber das stört nicht.

    Zitat


    Mir ist es ja direkt schon peinlich, dass ich so viele Fehler eingebaut habe, und so wenig zu der Logik beitragen kann :(

    Macht nix, man lernt was bei.

    Zitat


    Ich werde bald die Datenblätter und Timingdiagramme studieren und eine technische Dokumentation schreiben.

    Im Moment finde ich keinen offensichtlichen Fehler mehr, was nicht heisst, dass sich nicht noch Fehler in der Schaltung verstecken.

  • Kleiner Nachtrag zum Single-Step... Denkfehler meinerseits. An Hardware braucht man nur den Schalter und das bisschen Logik zur NMI-Erzeugung per SYNC plus Ausmaskierung des ROMs. Das ist ein NAND-Gatter mit Open Collector Ausgang (74*01), ein Eingang an SYNC, ein Eingang an _CS-ROM und der Ausgang an _NMI.

    Der Rest läuft beim KIM-1 per Software. Der NMI sichert erst die ganzen Register (im RAM, nicht auf dem Stack!) und springt dann in den Monitor. Den nächsten Step startet man wenn man einfach das Programm per 'GO'-Button wieder startet (was die Register erst wiederherstellt, Stackpointer aus dem RAM lädt, Statusregister und die aktuelle Adresse auf den Stack schreibt und dann RTI ausführt.)

  • Mir ist es ja direkt schon peinlich, dass ich so viele Fehler eingebaut habe, und so wenig zu der Logik beitragen kann :(

    Ich hatte eher den gegenteiligen Eindruck. Für Dein Alter ist das bisher eine ganz ordentliche Leistung.

    Gerrit: Wir haben noch ein viel größeres Problem. Der AVR wird da wahrscheinlich nicht mithalten können. Der wird wohl per INT bei 1Mhz einige Signale fetchen können, ansonsten wird das meiste an dem vorbei galoppieren. Mir kam das beim Thema "CBM2 und Swinsid" wieder in den Sinn. Der ist schon heftig übertaktet und schafft es noch so eben bei 1Mhz.
    Man kann sich die Option der flexiblen Schnittstelle offen halten, beim AVR wird man aber kaum mehr als einen Programmier-Adapter zustande bringen. Und da wäre es sehr gut, wenn die CPU während dieses Vorgangs irgendwie isoliert wird. Egal wie, der Stein muss dann vom Bus. :) Der AVR muss dann alle Signale für den Zugriff übernehmen können, damit es in ROM und RAM ankommen kann.

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


  • Gerrit: Wir haben noch ein viel größeres Problem. Der AVR wird da wahrscheinlich nicht mithalten können. Der wird wohl per INT bei 1Mhz einige Signale fetchen können, ansonsten wird das meiste an dem vorbei galoppieren. Mir kam das beim Thema "CBM2 und Swinsid" wieder in den Sinn. Der ist schon heftig übertaktet und schafft es noch so eben bei 1Mhz.
    Man kann sich die Option der flexiblen Schnittstelle offen halten, beim AVR wird man aber kaum mehr als einen Programmier-Adapter zustande bringen. Und da wäre es sehr gut, wenn die CPU während dieses Vorgangs irgendwie isoliert wird. Egal wie, der Stein muss dann vom Bus. :) Der AVR muss dann alle Signale für den Zugriff übernehmen können, damit es in ROM und RAM ankommen kann.

    Mit BE und RDY auf LOW ist der 6502 vom Bus, das einzige was dann noch passiert ist PHI2. Das sollte man dort lassen können, beim Schreiben gibts dann eben mehr als einen Zyklus mit Daten in dieselbe Zelle, beim Lesen ist es egal. Man muss nur sicherstellen, das beim Lesen verifiziert wird, dass PHI2 high war als die Daten übernommen wurden und beim Schreiben, dass die Daten gut sind wenn PHI2 high wird. Das müsste sich per Software im AVR lösen lassen.

    Falls PHI2 doch weg muss kommt einem der 74*125 in den Sinn. Freigabe an die Leitung die auch BE behandelt und dann PHI2 durch den Puffer routen. Mit den 3 übrigen Puffern kann man sicher noch was brauchbares anfangen. Ist dann zwar nicht glitch-frei, aber nach Übernahme durch den AVR erwarte ich sowieso einen Reset. Auch hier brauchen wir dann einen Pullup.

    Achja... Im Moment kann nur der 555 den Reset auslösen. Soll ich das ändern so daß der AVR das auch kann? Das Gatter nach dem 555 zu einem mit Open-Kollektor ändern geht ohne zusätzliche ICs einfach durch Umschichten.

  • Ich hab mir das mit dem ROM nochmal überlegt. Die jetzige Lösung macht garantiert Ärger mit dem Flash. Wir haben folgende Optionen:

    1) Einen weiteren 74*273 als Banking-Register für das ROM, diesmal write-only.

    2) Benutzung eines VIA-Ports als Banking-Register fürs ROM

    3) Verwendung eines EPROMs mit festem Monitorprogramm, eigene Programme landen im RAM.

    4) Verwendung eines EEPROMs (28C64 oder 28C256)

  • Ich nehme Tor 3 und 4. ;) Das dürften die beiden kompatiblen ICs sein. Bei dem E²Prom braucht man dann Signal an WE, dass am Eprom auf "1" festgelegt werden muss (Jumper ?). Die E²Proms sollten unproblematisch sein.

    Wenn die CPU sich mit BE und RDY vom Bus nehmen lässt, wäre das ein Anfang. CPU-Phi2 müsste dann auch "ausgeschaltet" werden und ein Reset per AVR wäre prima. Dann könnte man ROM oder RAM beschreiben und danach reseten.

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

  • Vielleicht sollte man noch darüber nachdenken, PHI2 mit einem Transistor schaltbar zu machen?
    Einmal von dem Quarzoszillator und einmal von dem AVR für Singlestepping. Man kann einfach eine beliebige Frequenz nehmen, da die W65C02S ein statisches Design hat.

    Davon ab werde ich wohl nochmal die Labels mit "/" ausstatten, wenn sie Low-aktiv sind. Ich frag mich grad, warum ich das nicht schon von Anfang an gemacht habe...

    Wegen dem ROM-Banking: Ich bin für einen weiteren 74xx273. Der eine haut es jetzt auch nicht mehr raus ;)
    EPROMs kann auch nicht jeder brennen und EEPROMs sind wegen neu beschreiben auch nicht besser. Man kann sie nur komplett löschen und beschreiben.
    Das Flashrom könnte man dann auch über den AVR steuern, wenn man es programmieren will.

    Gibt es noch irgendwelche Änderungen für Revision 0.7?