Hallo Besucher, der Thread wurde 1,5k mal aufgerufen und enthält 11 Antworten

letzter Beitrag von Jotta am

MOS 6510 Speicherstelle $00 und $01

  • Hallo,


    Hat der 6510 eigentlich die Speicherstellen $00 und $01 als eigene Speicherregister im Bauch oder nutzt er dazu das RAM?


    Hintergrund der Frage:
    Kann man einen 6510 nur mit ROM betreiben (also auch ohne Stack), wenn man auf ein paar Befehle verzichtet und trotzdem die I/O Ports nutzen??


    Hugofisch

  • was machste da ?
    Schaut interessant aus :)


    Ich hatte mir in den Kopf gesetzt, einen 6510 auf nem Steckbrett zu bauen.
    Es gab viele Anleitungen im Netz, aber die hier für nen 6502 war die beste.
    http://www.grappendorf.net/projects/6502-home-computer/


    Ich bin Step bei Step vorgegangen.
    Erst der Quaz, dann die Resetschaltung mit nem NE555 für die 500ms Verzögerung und nem 74LS04 zum invertieren.


    Dann kam die CPU mit nem klassischen NOP Test.


    Und jetzt ein EEPROM mit ein bisschen Code .


    Dank der DIS 1417 Bausteine kann man nun über den IO-Port des 6510 Zahlen ausgeben.


    Als nächstes kommt RAM und eine Chip Steuerung mit nem 74LS137. Dann habe ich auch RAM :-)


    Später noch nen 6526 und dann ggf. mehr.


    Mal sehen wohin mich das treibt.


    Als Hilfe hattw ich zuerst nur ein Multimeter.
    Blödsinn :-)


    In der Bucht für 15€ einen 8-kanal Analyzer mit 24MHz besorgt und dann an den Leitungen gehorcht.


    Super faszinierend :-)


  • Dazu auch innteressant: RAM beneath 00 and 01


    Interessant ist, dass der 6510 scheinbar schon darauf zugreift aber verwirft.
    Ich hatte den Datenbus mit gehorcht.


    Die Befehlsfolge war wie folgt:


    LDA #$FF
    STA $00
    LDA #$3F
    STA $01
    ....


    Auf dem Datenbus hatte ich erwartet:
    A9 FF 85 00 A9 3F 85 01


    Ich bekam jedoch
    A9 FF 85 00 EA A9 3F 85 01 EA


    Woher kommen die EAs??
    Meine Vermutung ist, dass der 6510 den geschriebenen Speicher zurück liest.
    Im EEPROM unter 00 und 01
    liegen tatsächlich EA EA


    Kann das jemand bestätigen/erklären?

  • Woher kommen die EAs??

    Zunächst einmal ist das der ganz normale Schreibzyklus eines STA-Befehls, egal ob der im chip-internen Register landet oder im externen Speicher. Allerdings werden bei Zugriffen auf $0 und $1 der Datenbus und das r/-w-Signal nicht aktiviert. Von außen sieht das dann tatsächlich wie ein Lesezyklus aus, aber die Daten gelangen nicht in die CPU hinein. Gleiches geschieht bei Leszugriffen auf den Prozessorport.


    Ich bin mir übrigens nicht ganz sicher, ob die Adressleitungen tatsächlich unter allen Umständen die 'richtigen' Werte $0000 bzw. $0001 annehmen.

  • Den Link schau ich mir mal an in Ruhe an. Hätte ich früher gebrauchen können - da wollte ich immer was mit 6526, oder auch 6522 ansteuern.
    Heute mach ich das mit Atmel Mikrocontroller :thumbsup: Auch Zahlen ausgeben....


    Hucky

  • (ok, viel zu langsam...)



    Aus deinem Speicher. Es gibt beim 6502-Bus keine Möglichkeit zu signalisieren, dass im aktuellen Takt kein Speicherzugriff gemacht werden soll, also muss in jedem Taktzyklus irgendwas gelesen oder geschrieben werden - auch wenn der zu lesende Wert gar nicht benötigt wird oder der zu schreibende Wert kurze Zeit später mit dem richtigen Wert überschrieben wird.


    Mir ist allerdings nicht ganz klar, wieso du für das STA $00 nur "85 00" auf dem Datenbus erwartet hast statt "85 00 FF" - im dritten Taktzyklus des Befehls muss ja der Wert geschrieben werden. An der Stelle wirkt sich eine Besonderheit des internen I/O-Ports des 6510 aus: Bei Schreibzugriffen darauf wird auf dem externen Bus der CPU ein Lesezyklus statt eines Schreibzyklus sichtbar - keine Ahnung wieso, möglicherweise wollte man dem Systementwickler die Möglichkeit lassen, die zwei überdeckten Byte an einer anderen Adresse (bei gespiegelten Adressbereichen) doch noch zu nutzen. Das EA stammt also wie von dir bereits erkannt aus deinem externen Speicher, der einen Lesezugriff statt des tatsächlich stattfindenden Schreibzugriffs sieht.


    Ich bin mir übrigens nicht ganz sicher, ob die Adressleitungen tatsächlich unter allen Umständen die 'richtigen' Werte $0000 bzw. $0001 annehmen.


    Ich würde davon ausgehen, dass da keine anderen Adressen als $0000/$0001 sichtbar sein können. Aus Sicht eines Systemdesigners wäre alles andere katastrophal, da das zu ungeplanten Lesezugriffen auf I/O-Register führen könnte und da gabs ja in der 65xx-Reihe genug Chips, die schon bei einem Lesezugriff irgendwelche Seiteneffekte auslösen.


    (Drecksforum, warum ist mein frisch getippter Text nach Klick auf "Erweiterte Bearbeitung" am Ende abgeschnitten?)

  • Hat der 6510 eigentlich die Speicherstellen $00 und $01 als eigene Speicherregister im Bauch oder nutzt er dazu das RAM?

    Beides bzgl. Schreiben und nur Intern bzg. Lesen. Extern kann also nicht gelesen
    werden (kann aber z.B. per VIC-II gelesen werden, indem einfach der Textspeicher
    auf $0000 statt $0400 gelegt wird).


    Kann man einen 6510 nur mit ROM betreiben (also auch ohne Stack), wenn man auf ein paar Befehle verzichtet und trotzdem die I/O Ports nutzen??

    Klar geht das. Du musst nur das RW-Signal korrekt behandeln: ein Schreiben MUSS
    den Datenbus deines ROM deaktivieren (z.B. #CS auf HIGH), sonst gibt's einen
    Buskonflikt!!! => CPU oder ROM können beschädigt werden!!!
    Eine Einschränkung auf Befehle und IRQ/NMI gibt's nicht, es werden aber einige
    Befehle und IRQ/NMI nicht korrekt behandelt!




    ....


    Auf dem Datenbus hatte ich erwartet:
    A9 FF 85 00 A9 3F 85 01


    Ich bekam jedoch
    A9 FF 85 00 EA A9 3F 85 01 EA

    Das dürfte Dir ja mittlerweile klar sein, dass beim Schreiben auch das
    zu schreibende Datenbyte irgendwo auftauchen muss.
    Dass Du EA statt FF bzw. 3F bekommst, liegt an Deinem ROM (Du
    schreibst ja, dass dort EA steht). Desweiteren deutet genau das
    darauf hin, dass hier ein Buskonflikt vorliegt. Also bitte CPU-RW mit
    ROM-#CS logisch verknüpfen!!!




    In der Bucht für 15€ einen 8-kanal Analyzer mit 24MHz besorgt und dann an den Leitungen gehorcht.

    Wird wahrscheinlich ein 8Bitter sein, 16 Bits wären besser.


    Du hast bei Deinen Messungen nicht geschrieben, wann gesampelt wird.
    Mach doch mal Folgendes: Sample z.B. nur die unteren 4 Bits des
    Datenbus (oder alternativ AddrBus) und die restlichen 4 Bits werden für
    PHI-In, PHI-Out, RW und AES verwendet.
    Und dann noch mit 20 MHz samplen, d.h. per PHI-Phase hast Du 10
    Samples. Denn Du musst ja berücksichtigen, dass einige Signale erst
    nach einiger Zeit gültig sind. Dann wird Dir sicherlich einiges besser
    klar, insbesondere bei der Fehlersuche.


    Btw.: per Visual6502 kannst Du den 6502 relativ genau beobachten
    (analoge Aspekte und Timing fehlt leider, ausserdem gibt's nur zwei
    Phasen je Takt). Ob allerdings das RW-Signal=0 der 6502 beim 6510
    bei Addr=$0000/$0001 rausgegeben wird musst Du per Messung
    nachmessen.