W65C02S-Einplatinencomputer

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


  • SOFTWARE: es waere dann aber nicht das duemmste die aktuelle belegung in ein ZP register zu speichern. so kann dann ein interrupt "ZP-banking laden ; zp/stack umschalten; wert auf stack legen ; irq beackern ; wert von stack nehmen ; banking zuerueck schalten ; rti" - also die aktuelle belegung immer NACH dem umschalten [egal ob zp/oberes ram] dorthin speichern

    Ich habs nochmal durchdacht... ein NOR brauch ich sowieso schon und mit den 3 anderen NOR im 74*02 kann ich ein 74*245 passend ansteuern und das Banking-Register so wieder auslesen. Ist also effektiv nur der 74*245 als Zusatzaufwand und man kann vom Programm aus den aktuellen Zustand rausfinden.

  • Stimmt, der ginge. Die Pinbelegung ist aber *zensiert*, zumindest für den, der das Platinenlayout machen muss.[...]

    Mach dir mal keine Sorgen um den Platinenlayouter.
    Es wird eh eine zweiseitige Platine; anders bekomm ich das ja auch kaum hin.

    Es ist wichtig, dass wir eine gute Lösung hinbekommen, und deine IST gut :thumbup:

    MfG.
    crasbe

    Edit: Man kann statt dem 74xx574, der ja keinen Reset hat, einen 74xx575 benutzen. Der hat einen Reset und ist von der Pinbelegung her besser als der 74xx273.

  • Wenn der Schaltplan steht, kann ich ja versuchen, alternativ einen Lochrasteraufbau draus zu stricken, für die Puristen :)

  • Ist also effektiv nur der 74*245 als Zusatzaufwand und man kann vom Programm aus den aktuellen Zustand rausfinden.

    Eigentlich müsste ein 74*244 reichen um die Flipflops auszulesen. Einen 245er könnte man in eine Richtung festlegen oder bidirektional hinter den Registern einschleifen. Das wird imo aber eigentlich nicht notwendig sein. R/W wird doch sowieso für das SRAM geteilt ? - Dann könnte man "read" für den "lauschenden Treiber" und "write" für den Register-Eingang mit der Banking-Register-Adresse verknoten. Oder erzeugt dieser Weg doch mehr Aufwand ?

    Hier: Bitte melde dich an, um diesen Link zu sehen. wurde das für vier Bit mit einem 74LS125 realisiert.

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

  • Eigentlich müsste ein 74*244 reichen um die Flipflops auszulesen.

    Natürlich reicht auch ein 74*244, aber mir gefällt die Pinbelegung des 245 besser. Ich gebe zu, dass ich hierbei an Lochrasteraufbau denke... Ich versuch mal den 74*244 einzubauen. Hab gestern mal KiCad installiert, Übung kann ich brauchen. Billiger ist der 74*244 auch noch.

    Zitat

    Das wird imo aber eigentlich nicht notwendig sein. R/W wird doch sowieso für das SRAM geteilt ?

    Naja... sind ein Inverter und ein NAND für die Aufbereitung von R/_W zusammen mit PHI2.

    Zitat


    - Dann könnte man "read" für den "lauschenden Treiber" und "write" für den Register-Eingang mit der Banking-Register-Adresse verknoten. Oder erzeugt dieser Weg doch mehr Aufwand ?

    Die Logik steht soweit, ich muss nur noch ein paar Denkfehler entfernen und das ganze in einem Schaltplan transformieren der von anderen lesbar ist. Auch sind mir noch ein paar Optimierungen eingefallen mit denen ich das eine oder andere Gatter sparen kann.

  • Natürlich reicht auch ein 74*244, aber mir gefällt die Pinbelegung des 245 besser. Ich gebe zu, dass ich hierbei an Lochrasteraufbau denke... Ich versuch mal den 74*244 einzubauen. Hab gestern mal KiCad installiert, Übung kann ich brauchen. Billiger ist der 74*244 auch noch.


    Es sind nicht unbedingt die Centbeträge, die entscheiden. (Bei VIA <-> diskreter Logik waren es ein paar Euro.)

    Zitat

    Naja... sind ein Inverter und ein NAND für die Aufbereitung von R/_W zusammen mit PHI2.


    Man kann auch das NAND zum Invertieren benutzen. Einfach (A NAND A). Das spart einen Baustein.

    Zitat

    Die Logik steht soweit, ich muss nur noch ein paar Denkfehler entfernen und das ganze in einem Schaltplan transformieren der von anderen lesbar ist. Auch sind mir noch ein paar Optimierungen eingefallen mit denen ich das eine oder andere Gatter sparen kann.


    :thumbup:

  • Man kann auch das NAND zum Invertieren benutzen. Einfach (A NAND A). Das spart einen Baustein.

    Den Trick kenne ich. Wobei ich lieber den unbenutzten Eingang auf ein festes Potential lege (Bei NAND auf +5V, bei NOR auf GND) als ihn an ein Bussignal zu hängen. Man hat immer nur ein begrenztes Fanout, vor allem bei VLSI-Chips, da spar ich lieber an den Eingägen die an einem Ausgang hängen.

  • Das die Logik nun in der Mache ist, habe ich mal einen Blick auf das PC-Interface geworfen.

    Bitte melde dich an, um diesen Link zu sehen.

    Das kann so nicht funktionieren. Die Shift-Register lassen sich nicht in Hi-Z schalten und legen bei Rechnerbetrieb die Adressleitungen fest. Ich würde vier 74hc299, ein 74573er und evtl. ein 74hc139 verwenden. Man könnte auch drei Shift-Register kaskadieren und eines für die Datenleitungen verwenden. Wenn man die Adress-Shifter nicht kaskadieren möchte, könnte man die jeweilige Clock mit einem 139er (und zwei Portbits) selektieren.
    Für Steuerleitungen (z.B. BE, RDY und mehr ...?) wäre noch ein 74573-Latch fällig. Und natürlich entsprechende Portbits vom AVR.

    Ist mit AVR schon eine Menge Bauteil für viele Leitungen. So hat man aber immerhin vollen Zugriff auf ein 512kb SRAM und könnte problemlos ein E²PROM immer wieder neu beschreiben. Ich würde so ein Interface in einem Steckplatz (CPU-Port) unterbringen. Wenn es tatsächlich irgendwann eine Weiterentwicklung geben sollte, kann man es dann kurz austauschen.

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

  • So, ich hab mal etwas mit KiCad gespielt und die Logik zusammengestellt. RAM, ROM, CPU und VIAs sind nicht mit drin, ist die reine Ansteuerlogik für Banking und dem Rest, incl. Reset und Takterzeugung. Wobei ich kein Symbol für einen Oszillator finden konnte.

    Dies ist ein erster Entwurf und könnte noch Fehler enthalten. Bisher ging es mit den Gattern genau auf, nichts übrig. :)

    Ich habe KiCad erst gestern installiert und das erste Mal benutzt, also bitte nachsehen falls die Schaltung sich nicht an die Konventionen hält und mir einfach Hinweise geben wie es richtig gemacht wird.

  • Sieht super aus ! Die Taktteilung dürfte keine Wünsche offen lassen.

    Ich habe auch etwas mit KiCad am (PC-)Interface geübt. Für Adress- und Datenleitungen ist ein AVR-Port fällig. Ein weiterer könnte die "spezielleren" Leitungen per 74573 beschalten (+2 Bit von Port C).
    Port C könnte ISP, LED und solcher Kram werden. PortD (txd,rxd) wird dann für das eigentliche Interface verwendet. Ich würde die Platine so auslegen, dass man RS232 oder USB verwenden kann. USB ist nicht so portabel und schnell realisiert wie RS232. Daher würde ich das sogar bevorzugen. Eine kleine Kommandozeilen-Software für RS232 würde ich mir mit gnu-c (Linux) zutrauen. Dann könnte man sogar den C64 oder Amiga als ROM oder Programmquelle nutzen.

    Ist nur ein erster Ansatz: Bitte melde dich an, um diesen Link zu sehen.

    Eidt: Ops, ich habe das Banking nicht berücksichtigt. Ein Shifter ist damit zuviel. Man braucht nur 16 Adressleitungen. Werde das kurz ändern.

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

  • Sieht super aus ! Die Taktteilung dürfte keine Wünsche offen lassen.

    Eine Idee hatte ich noch zur Taktteilung. Wenn man als Inpurt einen Oszi mit 7.372MHz nimmt, produziert eine der Teiler-Stages die 1.8432MHz die man für einen UART/ACIA braucht. Sind dann für die CPU aber nicht mehr so schön runde Zahlen. Die 16MHz die da jetzt stehen stammen aus der Idee, daß jeder, der eine defekte und nicht mehr reparierbare 1541 besitzt einen solchen Oszi schon hat.

    Zitat


    Ich habe auch etwas mit KiCad am (PC-)Interface geübt. Für Adress- und Datenleitungen ist ein AVR-Port fällig. Ein weiterer könnte die "spezielleren" Leitungen per 74573 beschalten (+2 Bit von Port C).

    Ein Haufen Holz, mehr als die Logik für den 6502 selbst... :)

    Ein paar Details wären noch zu klären: Welche Leitungen schaltet 'BE' an der CPU in tristate? Da man für einen RAM-Zugriff über AVR auch R/_W und PHI2 bedienen muss, könnte es sein, dass diese Leitungen noch über einen 74*126 entkoppelt werden müssen wenn BE das nicht macht (was mich nicht wundern würde)

  • Zitat


    Eine Idee hatte ich noch zur Taktteilung. Wenn man als Inpurt einen Oszi mit 7.372MHz nimmt, produziert eine der Teiler-Stages die 1.8432MHz die man für einen UART/ACIA braucht.

    Das wäre vielleicht auch nicht schlecht. Wenn man das RAM programmieren möchte, startet man die Empfangs-Routine im ROM. Andersherum dann RAM:Programm -> ROM wird programmiert. Dann geht es mit einer kleineren Schnittstelle.


    Ein Haufen Holz, mehr als die Logik für den 6502 selbst... :)

    Ein paar Details wären noch zu klären: Welche Leitungen schaltet 'BE' an der CPU in tristate? Da man für einen RAM-Zugriff über AVR auch R/_W und PHI2 bedienen muss, könnte es sein, dass diese Leitungen noch über einen 74*126 entkoppelt werden müssen wenn BE das nicht macht (was mich nicht wundern würde)

    Ja, das wird eine Menge Stein. Wenn man die CPU übernehmen möchte, wird man letztendlich auch alle Leitungen mitbringen müssen. An R/W und Phi2 hatte ich noch gar nicht gedacht. Da bleibt dann nur die Möglichkeit den 74*125/126 auf der Haupt-Platine mit einzuplanen und die entsprechenden Leitungen passend an das Interface zu führen.
    Ich hatte sowieso 24 Adressleitungen angesteuert. Mit Banking braucht man natürlich nur 16. Muss da nochmal ran. Ich habe den Schaltplan erstmal wieder gelöscht.

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


  • . An R/W und Phi2 hatte ich noch gar nicht gedacht. Da bleibt dann nur die Möglichkeit den 74*125/126 auf der Haupt-Platine mit einzuplanen und die entsprechenden Leitungen passend an das Interface zu führen.

    Gerade noch eine bessere Idee bekommen... Zur Entkopplung von PHI2, R/_W und vielleicht noch 2 anderen Signalen nehmen wir einen weiteren 74*257. Dessen Select-Eingang wird mit der Logik die BE liefert verbunden. Bei Normalbetrieb reicht der *257 die Signale von der CPU durch und wenn du übernimmst schaltet er auf die anderen Eingänge um und du stellst die Signale bereit. Ich überleg das noch mal im Detail, sieht aber im Moment halbwegs sauber aus.

  • Ja, das klingt gut. Man müsste sich auch auf ein Pinout für den Erweiterungs-Slot einigen. Ich finde die 40poligen Pfosten (wie bei IDE) dafür passend.

    Das wäre mal ein erster Ansatz:

    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 klingt gut. Man müsste sich auch auf ein Pinout für den Erweiterungs-Slot einigen. Ich finde die 40poligen Pfosten (wie bei IDE) dafür passend.

    Da fehlt noch was... _IRQ, _NMI, R/_W und _RES auf jeden Fall. Vielleicht noch PHI0 und pro Slot mindestens eine der Select-Leitungen die ich mit den 2 74LS138 erzeugt habe. Jetzt wirds mit 40pol leider schon etwas knapp.

  • Ich habe mal eine 50polige Version erstellt:

    So müsste der aber gut bewaffnet sein ? - Ich hatte keine Signal-Leitungen für irgendwelchen Single-Step Vooodo eingeplant. Kann man natürlich auch machen.

    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 habe mal eine 50polige Version erstellt:

    So müsste der aber gut bewaffnet sein ? - Ich hatte keine Signal-Leitungen für irgendwelchen Single-Step Vooodo eingeplant. Kann man natürlich auch machen.

    Sieht besser aus... Für Single-Step brauchst du, wenn ich den Schaltplan des KIM-1 richtig verstehe, nur noch die SYNC-Leitung vom Prozessor. Der Rest läuft über NMI.

  • Ich habe Pin 42 (weiter oben) auf SYNC geändert.

    Bitte melde dich an, um diesen Anhang zu sehen.

    So, ich habe den ersten Schaltplan-Entwurf nachgebessert. Nun sind Adress-, Daten- und acht Signal-Leitungen dran. Ich werde den Schaltplan zu Ende bringen und dann hier hochladen.

    Wir aber noch ein bisschen dauern. Ich kämpfe noch mit der einen und anderen Programm-Funktion. :/

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