6502 temporär abschalten mit der SuperPET-Methode (Pin 8 von Versorgungsspannung trennen)

  • Hallo,
    an anderer Stelle
    Problem mit dem indirekten JMP Befehl
    wurde diskutiert, wie man den 6502 "abschalten" kann, so dass er mit einem zweiten Prozessor - das könnte auch ein Busmaster oder VIC Videochip oder eine RAM Expansion Unit (REU) sein - nicht ins Gehege kommt.


    Dabei kann es sowohl um eine experimentelle Quick-and-dirty-Methode gehen als auch um ein Verfahren, überflüssige und längliche "Bauteile-Orgien" bzw. -Aufwand (bis zu 3x 20 polige 74LS245) zu vermeiden. Zudem steht das ganze immer in Beziehung zu den 6510-Derivaten, die bekanntlich normalerweise nicht so leicht zu ersetzen sind eben wegen ihres abschaltbaren Adreßbus.


    In obigem Thread wurde (von mc71) angesprochen, dass so ein per Vcc abgetrennter Prozessor über seine Busleitungen versuchen könnte, seinen Strom zu bekommen, was ziemlich stören würde.


    Meiner Erfahrung nach neigen gewisse TTLs tatsächlich zu diesem Verhalten (IIRC, 74LS138 Decoder oder ähnliche), mit entsprechend komischer "Logik". Andererseits ist das iirc die typische Situation, wo in der Schaltung befindliche CMOS-Bauteile ihre Eingangs-Schutzdioden in Thyristoren verwandeln und in den Latch-Up-Zustand übergehen .... nur: der 6502 (ohne Zusatzbuchstaben) ist ja gerade kein CMOS.
    von daher ist die an einer Universität entwickelte SuperPET / MMF 9000-Schaltung gar nicht so abwegig designt sondern im Gegenteil recht clever.

    Zunächst frage ich mich allerdings:
    wie "betriebssicher" ist diese Abschaltung des Prozessors von der Softwareseite her? muß man ihn sehr wahrscheinlich resetten?
    was könnte noch klappen?


    wenn man den 6502 beim Wiederstarten eh resetten muss, kann man dann auch gleich die Reset-leitung (oder NMI oder IRQ) nutzen, den Prozessor gezielt an Adresse $FFFF zu führen und dort (z.b. per READY-Leitung) einzufrieren? so daß man bequem die - bei High- schwache NMOS-Leistung der Bustreiber mit einem externen Busmaster überfahren kann...


    Der Hintergrund dieser Gedanken ist wie öfters, bauteilemäßig einfachere (und retro-authentische) Möglichkeiten auszuloten, einen 6510 / 7501 /8502 durch einen 6502 oder 65C02 zu ersetzen. Die genaueren EInsatzbedingungen oder ob es sich lohnt, soll hier in den Hintergrund treten; es geht mehr um die "theoretischen Grundlagen".

  • Vcc abzuschalten und die Pins weiter anzusteuern würde ich auf keinen
    Fall machen. Hab selbst schon alle Chips (CPU,SID,VIC,CIA) an eigenen
    Schaltungen betrieben. Dabei habe ich beim VIC leider mal vergessen,
    Vcc anzulegen. Seit dem gibt er keinen Mucks mehr von sich.



    wie "betriebssicher" ist diese Abschaltung des Prozessors von der Softwareseite her? muß man ihn sehr wahrscheinlich resetten?


    Nach einem Abschalten sind idR alle internen Register undefiniert, war jedenfalls
    meine Beobachtung am 6510. D.h. du musst wohl resetten. Dann hast du aber
    das Problem, dass die letzte Addresse etc. nicht mehr zur Verfügung steht.

  • Bitte nicht Äpfel mit Birnen verwechseln:


    Bei der o. a. Schaltung geht es meines Erachtens doch um was ganz anderes, nämlich zwischen den CPUs bei Bedarf wechseln zu können und nicht - wie bei VIC/VIC-II notwendig - den Prozessor zeitweise in einem definierten Zustand anzuhalten, damit kurzzeitig der Busmaster wechseln kann. Dafür gibt es - auch beim 6502 - die RDY-Leitung, das funktioniert auch super. Leider hat der 6502 eben keine Logik, um dabei gleichzeitig den Adressbus hochohmig zu schalten.


    Dass die o. a. Schaltung von einer Uni entwickelt wurde, spricht meiner Meinung weder für noch gegen besondere Qualität und/oder Genialität. Es mag funktionieren, aber vom Hersteller vorgesehen ist es nicht, und es ist defitiv ein Hack und kein normaler Betrieb.


    Bestes Argument dafür:
    Wenn dieser "Hack" ein regulärer Betriebszustand wäre, hätte sich Commodore doch den Einbau der AEC-Logik beim 6510/8500/8501/8502 gespart.


    [EDIT]
    http://www.zimmers.net/anonftp…pet/SuperPET/324037-1.gif
    Es war auch gar keine Umschaltung per Software vorgesehen, siehe im Schaltplan rechts oben:



    [/EDIT]

    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten."
    (Quelle unbekannt)

    Edited once, last by kinzi ().

  • Wenn dieser "Hack" ein regulärer Betriebszustand wäre, hätte sich Commodore doch den Einbau der AEC-Logik beim 6510/8500/8501/8502 gespart.

    Das hätten sie gewiss fein für sich behalten, anstatt es publik zu machen oder gar selber einzubauen.


    Denn die Tristate-Treiber im 6510 ff. waren doch zusammen mit Port 0 / 1 der einzige "Kopierschutz" um diesen Chip von den 6502 von Drittanbietern abzugrenzen und "einzigartig" zu machen.


    Um das nachzubauen, hätte es eben zusätzlicher Käfer bedurft und allein das hätte den Nachbau unwirtschaftlich gemacht. MOS schloß nach der Einigung mit Motorola ein Patentaustauschabkommen. Vorstellbar, dass damit zusammenhängt, dass auch Drittanbieter den 6502 anbieten durften. Daran hatte C= beim 6510 sicher kein Interesse. Ich erinnere mich in 1986, da waren die 6510-ähnlichen Prozessoren als Ersatzteil im örtlichen Elektronikshop rar und teuer verglichen mit dem 6502 - gefühlt mehr als das Doppelte. Ich empfand das so, dass durch diese Preispolitik u.a. verhindert werden sollte, dass Bastler sich aus Ersatzteilen, gebrauchtteilen und selber gemachter Platine etwas C64-ähnliches zusammenstoppeln ... ;)


    Wenn nun eine platzsparende Methode daherkäme die den / die extra 74LS245 einspart und auf billige Weise den 6502 in anderen Rechnern statt dem 6510 (7501,..) verwendbar macht, ist der 6510 schon nicht mehr so "einzigartig".


    Jotta : Danke für deinen Erfahrungsbericht! Dass Registerinhalte etc. erhalten bleiben, würde ich auch mehr an einem CMOS 6502 erwarten; den müsste man regulär anhalten vorher. Aber gerade bei dem sähe ich mehr Probleme mit Latchup und dem unerwünschten Ziehen von "Fremdspannung" über die Busleitungen / clamping Dioden...


    EDIT: der von kinzi gezeigte Ausschnitt aus dem Schaltplan zeigt einen etwas eigenartigen Schalter SW2. Das Schaltsymbol entspricht nicht dem was ich von einem echten Umschalter erwarten würde. (Taster? Wischkontakt? keine Ahnung...) Der Pfeil in der Mitte endet vor dem Mittenkontakt und ähnelt mehr einem Potentiometer oder Trimmer ?(

  • Denn die Tristate-Treiber im 6510 ff. waren doch zusammen mit Port 0 / 1 der einzige "Kopierschutz" um diesen Chip von den 6502 von Drittanbietern abzugrenzen und "einzigartig" zu machen.

    Das hätten andere Chipanbieter problemlos nachrüsten können, da steckt nicht viel Aufwand drin.


    Quote

    Wenn nun eine platzsparende Methode daherkäme die den / die extra 74LS245 einspart und auf billige Weise den 6502 in anderen Rechnern statt dem 6510 (7501,..) verwendbar macht, ist der 6510 schon nicht mehr so "einzigartig".

    Die Abschaltung der Versorgungsspannung ist auf jeden Fall keine solche Methode.

  • Das hätten andere Chipanbieter problemlos nachrüsten können

    Und warum hat es dann keiner gemacht? Das hätten die anderen Chipanbieter wahrscheinlich wettbewerbsrechtlich nicht gedurft.


    Z.b., AMD hat als Second source Intel-Prozessoren nachgebaut aber nur weil sie ein gegenseitiges Austauschabkommen hatten.


    das beste Argument ist hier, es wurde nicht gemacht, weil es ein "Nachbau" gewesen wäre den C= verhindert hätte.



    Die Abschaltung der Versorgungsspannung ist auf jeden Fall keine solche Methode

    Zu sagen was nicht geht ist das eine - aber mal positiv gesehen: was ist dein Vorschlag stattdessen, und zwar ohne 3 x 74LS245?

  • Denn die Tristate-Treiber im 6510 ff. waren doch zusammen mit Port 0 / 1 der einzige "Kopierschutz" um diesen Chip von den 6502 von Drittanbietern abzugrenzen und "einzigartig" zu machen.

    Das war nicht als Kopierschutz gedacht. Commodore hatte eine eigene Halbleiterfirma zwei Türen weiter. Wo andere Zusatzlogik verbauen mussten hat man sich bei Commodore einfach einen neuen Chip gebacken. Nicht als Kopierschutz sondern weil es bei großer Auflage billiger war als Standardteile zu verwenden. Sobald die Maske stand kostete der 6510 in der Herstellung garantiert genausoviel wie der 6502, sparte aber eben eine Handvoll TTLs und deren Platz auf der Platine ein.


    Commodore hat das bis ins Extrem getrieben als gewisse TTLs nicht zu bekommen waren. Anstatt zu warten hat man von der Funktion her identische Nachbauten produziert. Die berüchtigten MOS-TTLs 77xx.

  • Und warum hat es dann keiner gemacht?

    Weil es sich für die anderen nicht lohnte? Ein paar Gatter extra auf einen 6502 zu basteln damit der zum 6510 kompatibel wird ist keine Sache für einen Halbleiterdesigner. Das Problem ist der Markt. Wer braucht den? Commodore selbst hat Millionen des 6510 hergestellt weil sie im C64 verbaut wurden. Ein Dritthersteller hätte maximal den Ersatzteilmarkt damit versorgen können und der gibt keine Stückzahlen her, wäre also zu teuer geworden.


    Die ganze AEC-Logic brauchst du nur bei einem Shared-Bus-System, in irgendwelchen Embedded-Anwendungen tut es ein normaler 6502 (siehe auch 1541).

  • danke für dein Statement... ich stecke in deren Köpfen nicht drin (man müsste mal Bil Herd fragen), aber das eine schließt das andere nicht aus.


    Bei den von dir zuletzt genannten Chips 77xx stimme ich zu, da ist das sicher nicht als Kopierschutz gedacht gewesen wenn sie schon 1:1 pinkompatibel sind.


    (Letztlich waren VIC und SID damals die Haupt-Hürden, denn selbst wenn man sich einen 6502 mit Zusatzlogik zum 6510 gebastelt hat, fehlten immer noch diese Chips.)


    Ansonsten aber steht das eine dem anderen nicht entgegen: individuelle Chips (am besten und einfachsten: noch abgeschliffene Typbezeichnungen... in Expansion-Modulen wohlbekannt) sind ein Hardware Kopierschutz - ob so gedacht oder nur so gemacht, ist zweitrangig ...


    Edit: Zu deiner Frage / Aussage "weil es sich nicht lohnte" wäre ich mir nicht so sicher ... Nachbauten hat es ja mit ganzen Rechnern gegeben, siehe die ganzen Apple-Clone, daher gut vorstellbar dass Commodore da auf Nummer sicher gehen wollte.. wie dem auch sei. Hattest du selber schonmal Überlegungen angestellt, den 6502 zum 6510 kompatibel zu machen durch Anhalten oder Bus auf hochohmig bringen?

  • Der 6510 ist genau deswegen entstanden, weil der VIC-II im C64 neben Phi2=0 auch noch Extra-DMA in den Badlines benötigte. Dann konnte man nicht einfach nur während Phi2=0 den Adreßbus hochohmig schalten - was dann an Extra-Logik benötigt wird kann man sehr schön bei dem 2 MHz-Umbau in der 64'er 2/94 sehen: auf S. 13 ist die AEC Leitung über 1/4 74HC00 invertiert an Enable von 3x 74HC245 angeschlossen, und R/W vom 6502 muß noch über ein weiteres Signal ("/STSIG1", kommt von einem anderen Teil des Umbaus) maskiert werden, bevor es die Richtung des Datenbus-245'er schaltet.


    Ansonsten schließe ich mich Unseen an: bloß weil irgendwo mal einer digitale Bauteile als Analogtechnik behandelt, muß man das nicht nachmachen. Gibt auch diejenigen, denen ein bestimmter Logik-Pegel auf einer Leitung grad nicht "gefällt" und die dann ausprobieren, den Pegel mit einem stärkeren Ausgang zu "überschreiben". Super.


    Die geschaltete Versorgung des 6502 im SuperPET ist jedenfalls nicht nachahmenswert. Das ist noch sehr nett formuliert. Den von jogi erhofften Zweck, nämlich taktzyklen-weise die Adreßleitungen des 6502 hochohmig zu schalten *kann* sie gar nicht sinnvoll erfüllen - da hat der Stützkondensator hinter dem Spannungsregler was gegen. Eher geht die CPU beim Wegschalten der Versorgung während ein paar Millisekunden in einen undefinierten Zustand und nimmt dabei durch erratisches Umschalten von Adreß- und Datenleitungen noch ein paar Bytes im RAM mit, bevor sie "stirbt".


    Also nochmal: Der 6510 *ist* ein 6502 mit 3x 74245 + Steuerlogik integriert, plus noch dem I/O-Port über Adresse 0 und 1. Nichts anderes. Die richtige Lösung für den SuperPET wäre gewesen, einen 6510 oder einen 6502 + 3x245 einzubauen. Was man da tatsächlich sieht, ist schaltungtechnisch Ober-Pfusch.

  • EDIT: der von kinzi gezeigte Ausschnitt aus dem Schaltplan zeigt einen etwas eigenartigen Schalter SW2. Das Schaltsymbol entspricht nicht dem was ich von einem echten Umschalter erwarten würde. (Taster? Wischkontakt? keine Ahnung...) Der Pfeil in der Mitte endet vor dem Mittenkontakt und ähnelt mehr einem Potentiometer oder Trimmer

    Das ist ein Schaltplan mit US-Schaltzeichen. Es dürfte sich um einen Schalter mit Mittelstellung oder um einen Drehschalter handeln. Allerdings gibt mir die dritte Stellung ("PROG") gerade ein Rätsel auf ... die Leitung kommt aus einem Latch raus, der am Datenbus hängt (Bit D0) ...

  • Was man da tatsächlich sieht, ist schaltungtechnisch Ober-Pfusch.

    Ich glaube, die Intention war dort eine andere: (Lückenlose) Umschaltung der CPU im Betrieb war nie vorgesehen. Ich bin aber mit dem Schaltplan noch nicht durch und habe es noch nichtg ganz verstanden.
    Zum Rest deines Beitrages full ack.

  • Allerdings gibt mir die dritte Stellung ("PROG") gerade ein Rätsel auf ... die Leitung kommt aus einem Latch raus, der am Datenbus hängt (Bit D0) ...

    OK, zwei Latches sind auf $EFFC bzw. $EFFE zu finden. Ich vermute mal, der Latch auf $EFFE ist eine Art Konfigregister: Bit 0 schaltet zwischen 6809 und 6502 um, Bit 1 zwischen Read-Only und Read-Write-Betrieb des RAM um, wenn ich das richtig sehe (für was auch immer).

  • Z.b., AMD hat als Second source Intel-Prozessoren nachgebaut aber nur weil sie ein gegenseitiges Austauschabkommen hatten.

    Andere Hersteller haben den 6502 auch nur nachbauen dürfen, weil sie mindestens ein Commodore/MOS-Patenz lizenziert haben - angeblich hat Commodore dann wohl auch die Chipmasken rausgerückt.


    Quote

    das beste Argument ist hier, es wurde nicht gemacht, weil es ein "Nachbau" gewesen wäre den C= verhindert hätte.

    Eine Firma hat sich daran vorbeigemogelt: Nintendo (bzw. Ricoh), beim 6502 im NES wurde der Dezimalmodus durch Entfernen von 5 Transistoren deaktiviert.


    Quote

    aber mal positiv gesehen: was ist dein Vorschlag stattdessen, und zwar ohne 3 x 74LS245?

    Ich sehe zwar keinen Sinn darin, eine als funktionierend bekannte und in mehreren Systemen verbaute technische Lösung als Antwort auszuschliessen, aber zum Glück gibts ja noch andere Chip: Man könnte sich zB an frühen Apple II orientieren und 8T97 verwenden - die sind allerdings nicht mehr erhältlich und spätere Apple II-Modelle haben dafür.... (wait for it....) 74LS245 verwendet. Oder man orientiert sich an was modernem und verbaut einen kleinen CPLD oder geht noch einen Schritt weiter und packt den ganzen 6502 in einen FPGA (dann wäre es auch ein 6502 und kein 65C02), der zusätzliche Code um ihn zu einem 6510 zu erweitern passt auf eine Bildschirmseite.

  • Oder man orientiert sich an was modernem und verbaut einen kleinen CPLD oder geht noch einen Schritt weiter und packt den ganzen 6502 in einen FPGA (dann wäre es auch ein 6502 und kein 65C02),

    Btw.: 6502/6510-HDL-Versionen gibt's schon einige, aber wirklich interesant ist
    die Umsetzung von Visual6502. Hab's selbst mal ausprobliert (sehr geringer
    Resourcenverbrauch!) und gegen div. 6502-Varianten laufen lassen.

    der zusätzliche Code um ihn zu einem 6510 zu erweitern passt auf eine Bildschirmseite.

    Wag ich mal sehr zu bezweifeln. Schau dir mal den Schaltplan an und überleg dir
    anhand der Specs, ob nicht auch ein Teil der Codierlogik angepasst werden muss.
    Selbst wenn du wie in obiger Umsetzung nicht der Schaltplan, sondern die Specs
    in HDL gegossen werden, du hast auf jeden Fall die Codierlogik anzupassen.
    Auf einer Bildschirmseite gibt das nur den typischen Hack.
    (Und: ob die Änderung von 6502 => 6510 einige IllegalOpcodes im Verhalten
    ändert muss auch getestet werden)

  • Wag ich mal sehr zu bezweifeln.


    Ich hab' da mal was vorbereitet


    Quote

    Schau dir mal den Schaltplan an und überleg diranhand der Specs, ob nicht auch ein Teil der Codierlogik angepasst werden muss.


    Der ist für den 6502, nicht für den 6510. Macht aber nichts, ist ja bis auf ein wenig Zusatzlogik für die Busabschaltung und den I/O-Port der gleiche Chip.


    Quote

    in HDL gegossen werden, du hast auf jeden Fall die Codierlogik anzupassen.


    Codierlogik?


    Quote

    (Und: ob die Änderung von 6502 => 6510 einige IllegalOpcodes im Verhalten ändert muss auch getestet werden)


    Wenn dem so wäre, wäre das schon lange im Netz dokumentiert - schliesslich hatte man ja mit der angeschlossenen 1541 einen 6502 "in Reichweite". Ich finde gerade die Ergebnisse nicht mehr, aber als ich mal vor ein paar Jahren die Lorenz-Emulator-Testsuite durch den Visual6502-Simulator geschoben habe, konnte man die wenigen scheiternden illegalen Opcodes auf externe Buseffekte (Ergebnis abhängig davon, was der VIC auf den Bus legt) oder Analogeffekte in der CPU (Opcodes, die auf echten Chips keine stabilen Ergebnisse liefern) zurückführen.

  • Ich hab' da mal was vorbereitet

    Für eine schnelle Lösung würde ich es genauso machen (bzw. habe
    ich bei meinen Umsetzungen schon so gemacht), aber bei diesem
    einfachen Ansatz fehlt die teilphasengenaue (Hi/Lo von PHI) Ein-/Ausgabe.
    Dafür müssen nicht nur die IO-Leitungen entsprechend angesteuert
    werden sondern auch noch die Daten/Richtungsregister entsprechend
    behandelt werden (wann wird welches Register gelatcht bzw. wann ist
    es bzgl. Wirkung sichtbar?).


    Dazu kommt, dass evtl. nur die Betrachtung von Hi/Lo von Phi nicht
    ausreicht. Das ist aber eine Frage, wie genau man es mit der Emulation
    treiben will. Wenn man dafür das konkrete Verhalten von PLA-Chips mit
    einbezieht, dann kann's nicht genau genug sein. Deshalb auch meine
    Behautung, das ganze lasse sich nicht auf einer DinA4-Seite
    implementieren, aber vlt. ist es ja in Wirklichkeit sehr einfach(?).
    (und btw.: deine Register sind 6 Bit breit, bin mir nicht sicher, ob die in
    Wirklichkeit 8bittig sind und nur per 6 Leitungen nach Aussen geführt
    werden).


    Für einen CIA hab ich das schon gemacht (Vermessen als auch
    Implementiert). Wenn alle Specs aus den Datenblättern implementiert
    werden sollen, dann wird's nunmal etwas umfangreicher. Für die 6510er
    PIO-Einheit werd ich's vlt. mal nächsten Winter ausprobieren.


    Der ist für den 6502, nicht für den 6510. Macht aber nichts, ist ja bis auf ein wenig Zusatzlogik für die Busabschaltung und den I/O-Port der gleiche Chip.

    Ja klar ist es der Plan vom 6502, vom 6510 gibt's glaube ich keine
    vektorisierte Version (leider!). Von daher kann ich nur glauben,
    dass bis auf IO und AES alles andere gleich ist.


    Codierlogik?

    Im 6502-Schaltplan der lange "Logik-Balken/Array" (wurde in einigen Foren
    als Kodierlogik/CodingLogic bezeichnet). Kann nur vermuten, dass es zum
    6510 hin keine Änderung gab.

  • (und btw.: deine Register sind 6 Bit breit, bin mir nicht sicher, ob die in
    Wirklichkeit 8bittig sind und nur per 6 Leitungen nach Aussen geführt
    werden).

    IIRC ist beim 6510 der I/O-Port tatsächlich nur 6 bit breit, bei den HMOS-Varianten (8500, 8501, 8502) jeweils 8 bit und nur 6 bzw. 7 Pins herausgeführt. Sieht man auf den Die-Shots glaube ich ganz schön. Gab glaube ich auch mal irgendwen, der das (vor Verfügbarkeit der Die-Shots) programmtechnisch nachgewiesen hat, die Details dazu sind mir aber entfallen.

  • (und btw.: deine Register sind 6 Bit breit, bin mir nicht sicher, ob die in
    Wirklichkeit 8bittig sind und nur per 6 Leitungen nach Aussen geführt
    werden).

    Das ist etwas komplizierter: Es sind im Prinzip alle 8 Portbits implementiert, aber die nicht nach aussen geführten sind unvollständig - wenn man dort eine 1 reinschreibt, "verfällt" der Wert und nach einiger Zeit ist wieder eine 0 im Register. Das genaue Verhalten davon ist zufällig, chipspezifisch und IIRC temperaturabhängig und wurde schonmal für Emulator-Erkennung ausgenutzt.

  • wenn man dort eine 1 reinschreibt, "verfällt" der Wert und nach einiger Zeit ist wieder eine 0 im Register

    Das hörst sich ja interessant an. Vermute mal, das hängt mit den "transparent latches"
    wie in der Umsetzung beschrieben zusammen. Daraus resultiert ja auch die min.
    Taktfrequenz von 6502 bzw. 6510. Ausprobiert habe ich das aber bis jetzt noch nicht.
    Ich hab's mir aber mal notiert, mal sehen, wann ich dazu komme, im Moment ist's zu
    warm!