Hallo Besucher, der Thread wurde 104k mal aufgerufen und enthält 651 Antworten

letzter Beitrag von Saskia am

MockA65xx - Universeller MOS 65xx/85xx CPU Ersatz

  • #1 Was macht der 6502 (und derivate) genau beim 'Power On'? Macht er erst ein Selbsttest, oder 'Jumpt' er eine Init-Routine im ROM an, und wo genau erwartet er sein 1en Befehl?

    Er liest nach ein paar Takten interner Initialisierung die Adressen $FFFC/$FFFD, welche den Reset-Vektor liefern müssen, z. B. aus einem ROM. Dieses Verhalten ist hartcodiert. Beim C64 steht an dieser Adresse im Kernal-ROM "E2 FC", was die Adresse der Reset-Routine des Kernals ergibt ($FCE2). Bei anderen Rechnern stehen da halt andere Werte, aber der Wert für den Reset-Vektor ist in der CPU hartcodiert.

    #2 'Custom-Chips'. Also Sound, Video, CIA/VIA und ähnliche. Haben die vordefinierte Adressen, oder sind die Variabel. Also z.B. kann man ein Soundchip z.B. an Adresse &0200 einblenden, oder sind diese Adressen 'Fest' im Chip?

    Das hat nichts mit der CPU zu tun. Die CPU hat einen 64 kB-Adressraum ($0000-$FFFF). Was in diesem Adressraum "zu sehen" ist entscheidet das Rechnersystem, das um die CPU herumgebaut wurde. Im Falle des C64 generiert das PLA (mit ein paar nachgeschalteten TTLs) die Chip-Selects für die ICs (SID, etc.). Die ICs selbst haben nur einen Adressraum von ein paar Byte - so viele, wie sie halt Register haben. Sie fühlen sich erst angesprochen, wenn das Chip-Select aktiv ist.


    Du kannst also das IC beinahe "beliebig" im Adressraum der CPU einblenden. Weniger gute Ideen sind Page 0 ("Zeropage", $0000-$00FF) und Page 1 (Stack, $0100-$01FF), weil die für was anderes gedacht sind, aber selbst das ist möglich und wurde gemacht (Atari 2600 glaube ich).

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


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

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Danke für die Antwort kinzi & tulan

    Jetzt verstehe ich auch das meine 'tolle' Idee' so nicht funktionieren kann.

    Das die Zeropage und der Stack für den 6502 wichtig sind, war mit bekannt. Nur diesen Sprung nach $FFFC/$FFFD zerschmettert meine Idee.

    Ich kapierte nämlich nicht warum the 8bit-guy sein Erweiterungsspeicher quasi 'sinnlos' mitten im Adressbereich einblendete, jetzt weis ich warum.

    Meine Idee war 48k 'normaler' Speicher, und in die oberen 16k jeweils ein Block aus Erweiterungsspeicher einzublenden.

    Um das ganze ohne 'Bankswitching' hinzukriegen dachte ich das Byte @ $0200 als Zeiger auf den einzubindenden Block zu nutzen.

    Da ein Byte ja 256 Werte darstellen kann, ergäbe das ein Speicher von 4MB.

    Halt zu einfach gedacht meinerseits :-\

  • Meine Idee war 48k 'normaler' Speicher, und in die oberen 16k jeweils ein Block aus Erweiterungsspeicher einzublenden.

    Das funktioniert schon, Block "0" muss dann halt das ROM sein, das zum Startzeitpunkt eingeblendet wird, damit die CPU den Reset-Vektor findet.

    Um das ganze ohne 'Bankswitching' hinzukriegen dachte ich das Byte @ $0200 als Zeiger auf den einzubindenden Block zu nutzen.

    Da ein Byte ja 256 Werte darstellen kann, ergäbe das ein Speicher von 4MB.

    Das ist dann ja genau "Bankswitching". Nochmals: Bank 0 nicht als RAM, sondern als "Startup-ROM" einblenden = habe fertig!

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


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

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Er liest nach ein paar Takten interner Initialisierung die Adressen $FFFC/$FFFD, welche den Reset-Vektor liefern müssen, z. B. aus einem ROM. Dieses Verhalten ist hartcodiert.

    Jupp... nach bis zu 6 Takten hat sich die interne Statemachine "gefangen" und der 6502 fängt an zu laufen:


    6502_reset_seq.png


    "Sich fangen" deshalb, weil die Reset-Logik IMHO recht abenteuerlich implementiert ist und

    das ganze dann ein paar Takte braucht, bis es tatsächlich loslegt.

    Das "RESET" Signal wird an mehreren Stellen in die Schaltung eingebracht und
    damit ein Interrupt simuliert... das ganze sieht Schaltungs-technisch mehr

    nachträglich reingebastelt aus - aber funktioniert. :thumbsup:

  • Hallo Freddy,


    du kannst dir dieses Video mal anschauen

    das Startverhalten wird sehr ausführlich erklärt und auch real gezeigt. Im zweiten Teil wird auch gezeigt, wie man dem ROM/RAM bestimmte Adressen zuweist.

    Sehr interessant.

    Habe mir die Videos geladen (und Teil 1 angeschaut).


    Ich muß noch eins klarstellen: Ich bin (noch) nicht dabei einen 'Neo-8-Bitter' am bauen, sondern nach der Hype mit MEGA65/C256 Phoenix/Commander X16, mache ich mir Gedanken wie man so einen modernen 6502 Homecomputer heute machen könnte. Daher war auch meine Frage, ob die Custom Chips (Video/Sound/etc.) festgelegte Adressen haben.

    Es ist also vor allem sammeln von Info's, und dann kombinieren um ein absolut KISS-System zu 'Designen' (auf dem Papier).

    Die Hauptidee in mein Konzept ist die Speicherverwaltung so einfach (und 'Am Stück') zu machen wie nur möglich.

    Deswegen die Sache mit $0200 (nenne ich mal EMB External Memory Byte), darauf folgen 32 Bytes (von $0201 bis $021F) was ich 'BAT' nenne (Block Allocate Table)

    Die Idee ist: OS + Programmcode in den 'unteren' 48kB laufen zu lassen, und die zu verarbeitenden Daten in die 16kB Ext_Mem.

    Jedes Programm kann Blöcke anfordern, und verwaltet selbst seine Blöcke (Ähnlich die Verkettung auf CBM-Disks: erstes Byte jeder Block zeigt ob es der Einzige ($00) ist, der Letzte ($FF) in der Kette, das 2e Byte ist entweder leer ($00) wenn kein Folgeblock gibt, oder halt die 'Nummer' des Folgeblocks ($01 - $FF).


    Der Rest von Page 3 (von $021F - $02FF) wäre dann der Ort zum einbinden von Custom-Chips und/oder Slots (Also Slots wie beim Apple II). Also quasi den I/O-Bereich

    Ab $0300 wäre dann das OS und darüber dann der TPA (cp/m-Begriff) bis zur Grenze bei 48k wo dann der Erweiterungsspeicher eingeblendet wird.


    Jaja, ich weis, ist viel Blabla, aber hey, es hält meine Grauen Zellen im Gange (Gutes Mittel gegen Verkalkung) :alt:

  • Heute morgen habe ich die Zeit gefunden einen der Protypen neu zu löten; d.h. einen neuen FPGA drauf zu dampfen,

    nachdem das Teil nicht mehr richtig lief. Glücklicherweise hat es AUF ANHIEB funktioniert:


    X-Mas_MockA65xx.jpg


    D.h. ich habe nun zumindest wieder einen funktionierenden Prototyp und ich kann endlich weiter machen! :thumbsup:


    PS: Die vier Prototypen wurden vom Bestücker mit Heissluft gelötet - und dabei wurden offensichtlich zwei

    FPGAs zerstört und einer zumindest "angeknackst"; d.h. der funktionierte nur solange er nicht warm wurde!

    Danach zeigten 2 Pins Ausfallerscheinungen.


    TLDR; Ich hatte nur einen Protoyp, der überhaupt ging! Und der versagte vor ein paar Tagen dann auch...



    PPS: Auf den Prototypen waren bisher "kleine" MAX10M02 verbaut. Da es auch eine größere Bestückvariante geben soll,

    haben wir das Layout/Pinning so gewählt, das auch 10M08er bestückt werden können.

    Bei der Reparatur habe ich dies dann auch mal getan! Beide Varianten sind also lauffähig.

  • Ich habe jetzt den ganzen Nachmittag am 2. Weihnachtsfeiertag genutzt und diesen Thread komplett gelesen.

    War so etwas wie Russisch lernen alleine mit einer Prawda oder so...


    Aber es ist der Hammer, was hier gerade entsteht. Vielen Dank dafür!


    Kurze Frage über den Telllerrand...

    Wie sieht es denn z.B, mit der Atari 6502C (Sally) aus? Ich weiß nicht, ob es davon noch soo viele gibt, dass man die nicht per FPGA ersetzen muss, aber wenn hier schon der ultimative 6502 Ersatz entsteht?


    Vielen Dank für das Projekt und lg,

    Oliver

  • Atari 6502C

    Nicht, dass ich mich besonders auskennen würde, aber der 6502C (im Gegensatz zum 65C02!) ist ein "normaler" 6502, der halt mit bis zu 4 MHz getaktet werden kann. Von daher sollte das kein Problem sein.


    6502 = 1 MHz

    6502A = 2 MHz

    6502B = 3 MHz

    6502C = 4 MHz


    Was ich noch nicht gelesen habe (oder, was wahrscheinlicher ist; Woran ich mich nicht mehr erinnern kann :bgdev ) ... androSID Kann der FPGA auch 65C02 und ggf. weitere Nachfolger (65C816, usw.), oder ist das kein Projektziel?

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


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

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Nicht, dass ich mich besonders auskennen würde, aber der 6502C (im Gegensatz zum 65C02!) ist ein "normaler" 6520, der halt mit bis zu 4 MHz getaktet werden kann.

    'Sally' ist allerdings wieder eine spezielle Version, da wurde Pin 35 mit einem HALT-Signal neu belegt und Pin 36 wurde ein zweites R/W. Basis war ein 6502B, also 3 MHz.


    Ich nehme an, das HALT hält die CPU immer an, im Gegensatz zu RDY welches nur funktioniert wenn die CPU gerade einen Lesezyklus durchführt.

  • 'Sally' ist allerdings wieder eine spezielle Version, da wurde Pin 35 mit einem HALT-Signal neu belegt und Pin 36 wurde ein zweites R/W. Basis war ein 6502B, also 3 MHz.Ich nehme an, das HALT hält die CPU immer an, im Gegensatz zu RDY welches nur funktioniert wenn die CPU gerade einen Lesezyklus durchführt.

    Genau, Sally ist ein 6502C (nicht 65C02) mit den zusätzlichen Signalen.

    Die Ataris liefen mit ca. 1,79MHz.

  • Ah ja, danke, wieder was gelernt. ^^ (Ich schrieb ja .... :rolleyes: )

    Lustig, dass die den dann gleich genannt haben. Oder ist der "C" immer eine "Sally"? Das ist dann ja sonst kaum auseinanderzuhalten ...

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


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

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Hah, Verwirrung perfekt, anscheinend gibt es beide Varianten unter gleichem Namen:

    The 6502A was a 1.5 MHz chip featured in Asteroids Deluxe.The 6502B was a version of the 6502 capable of running at a maximum speed of 2 MHz instead of 1. The B was used in the Apple III, BBC Micro and, clocked at 1.79 MHz, early Atari 8-bit computersThe “official” 6502C was a version of the original 6502 able to run at up to 4 MHz.The Sally, also referred to the 6502C, was a customized 6502 chip used in later Atari 8-bit computers. It has a HALT signal on pin 35 and a second R/W on pin 36 (these pin are not connected (N/C) on a standard 6502s). Pulling HALT low latches the clock, pausing the processor. This was used to sync the CPU with the video circuitry.

    All versions of the microprocessors are available in 1 MHz, 2 MHz (“A" suffix on product numbers), 3 MHz ("B” suffix on product numbers), and 4 MHz (“C” suffix on product numbers) maximum operating frequencies

    Ich liebe es. :rolleyes:

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


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

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Was ich noch nicht gelesen habe (oder, was wahrscheinlicher ist; Woran ich mich nicht mehr erinnern kann :bgdev ) ... androSID Kann der FPGA auch 65C02 und ggf. weitere Nachfolger (65C816, usw.), oder ist das kein Projektziel?

    Ist keines meiner Projektziele... aber es gibt bereits freie Cores - und die anzupassen sollte einfach sein.

  • Hah, Verwirrung perfekt, anscheinend gibt es beide Varianten unter gleichem Namen:

    Man dürfte sie trotzdem auseinanderhalten können wenn man den Hersteller mit betrachtet. Auch hat Adari meist auf ihre Chips ihre Teilenummer (Cxxxxx...) mit draufgedruckt.


    Einen normalen 6502C habe ich bisher nur einen, in einer 1541 mit defektem R/W-Kopf. Hersteller ist MOS, verpackt von GI.

  • Einen normalen 6502C habe ich bisher nur einen, in einer 1541 mit defektem R/W-Kopf. Hersteller ist MOS, verpackt von GI.

    Den 6502C findet man öfters mal in der 1541. Ich habe vor kurzem eine 1541 gereinigt, in der auch ein 6502C eingebaut war (siehe Foto).

  • Ich hab da bis jetzt nur "B" gefunden ... :(

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


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

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Hah, Verwirrung perfekt, anscheinend gibt es beide Varianten unter gleichem Namen:

    Man dürfte sie trotzdem auseinanderhalten können wenn man den Hersteller mit betrachtet. Auch hat Adari meist auf ihre Chips ihre Teilenummer (Cxxxxx...) mit draufgedruckt.


    Einen normalen 6502C habe ich bisher nur einen, in einer 1541 mit defektem R/W-Kopf. Hersteller ist MOS, verpackt von GI.


    Das stimmt, habe gerade einmal geschaut und auf meiner CPU steht nur C014806. Wenn ich nicht wüsste, dass die CPU genau da drinsteckt, könnte man das für einen ganz anderen Chip halten...

  • Meine Merkregel war immer:

    Sally = 6502C

    6502 @ 4MHz = 6502 C


    Sally kann zudem ihre Busse hochohmig schalten- die ersten Atari 800 hatten dazu rund um den Prozessor noch eine Batterie Bustreiber auf der CPU-Karte. Keine Ahnung, wie kompatibel das Signal zum AEC des 6510 ist...


    Gibt es eigentlich die shots oder Analysen zum Aufbau des R65C02? Stichwort echter Microcode vs erweiterte/vollständig decodierte PLA.









    0

  • Also ist Sally ein heißes Mädchen. C kannte ich Bis Jetzt auch nicht.

    „Vielen Dank für diese Geschichte...Ich habe sie in meinem Dorf weiter erzählt...Die Frauen wurden fruchtbarer,das Getreide verdoppelte sich und aus dem Dorfbrunnen floss Wein statt Wasser.Mein Dorf ist ihnen auf ewige Zeit dankbar .