Posts by Nichtsnutz

    Hallo lordbubsy,


    ich wollte mir das schon immer fuer meinen C16 aufbauen,hatte mich allerdings noch nicht durch alle Threads gewuehlt.
    Auch wenn ich im Detail noch nicht alles durchgelesen habe,
    *vielen* Dank fuer diese Anleitung an einem Ort !


    Gruesse

    Ehhm !? , stimmt, oh Mann was bin ich fuer ein Depp! Das funzt wohl nur deswegen weil der TED das
    charset aus dem ROM liesst mit TED_CS1 und bei den bad_lines aus dem ram waehrend PHI0 = '1' !?
    Ich bekomme definitiv ein Bild, aber spaetenstens wenn ich das charset ins ram lege wird es knallen,


    Man,man,man,war gestern doch zu spaet geworden,
    Danke Wiesel


    EDIT: Ich habe wohl das Attribute ram disabled !? AArrrggc, muss mal alle moeglichen Buszugriffe
    von TED und CPU mit FAST/SLOW Takt messen, Hausaufgaben... Grrr

    Hallo allerseits,


    ich habe Gestern erste Versuche mit einem 32KBx8 SRAM gemacht.Habe die
    16Kx4 DRAMs und die zwei Adress Multiplexer rausgenommen und an deren
    Stelle 16K des SRAM ranverdrahtet.Alles TTL auf Steckbrett.Die Anbindung
    ist wie folgt (pseudocode):
    - Adressleitungen A[13..0] von den Multiplexern direkt an das SRAM.
    - SRAM_A14 = GND
    - Datenleitungen D[7..0] von den DRAMs direkt an das SRAM.
    - SRAM_CS = GND, immer selektiert!
    - SRAM_OE = /(PHI0 * RW * /CAS),also aus dem SRAM lesen,wenn Datenphase und
    gelesen werden soll und ein Speicherzugriff stattfindet.
    - SRAM_WE = /(PHI0 * /RW * /CAS).
    - Habe 74LS00 (NAND2) und 74LS20 (NAND4) Gatter verwendet.
    Ergebniss: Rechner startet ok,Byte Anzahl stimmt,kleines "Hallo Welt" geht,
    scheint zu gehen.


    Da das SRAM in dieser Verdrahtung 4 mal gespiegelt wird,habe ich mit
    noch einem 74LS32 (OR2) SRAM_CS = A14 * A15 gemacht,damit das SRAM nur
    dann selektiert wird wenn ein Zugriff auf $0000..$3FFF passiert und
    es geht *nicht* ! Die freien Bytes stimmen nicht,es erscheinen statt den
    Zahlen das Zeichen 7C = Kaestchen !?
    Habe mit dem LA das Timing gemessen,ich finde nichts, SRAM_CS auf GND,geht
    prima!
    Ganzen Abend verbraten,es ist wohl die Kernalrom Ram Erkennung wohl schuld
    dran! Diese ist ab $F351 und nutzt das Spiegeln des Ram aus um 16K/32K/64K
    zu unterscheiden,wenn ich das richtig verstehe.AArrrrrgggc, Arrrrrggv !%*@!
    Kann das jemand bestaetigen? Obwohl es egal ist,da man ja 512K am Ende haben will,
    und nichts mehr gespiegelt sein wird.
    Na ja,nochmal 32K mit CS=GND kurz getestet und das zeigt auch 28661 Bytes
    free.Habe leider kein SD2IEC u.s.w,und nur die BASIC Lernkassette,kann also
    nichts kritisches testen.
    Gehe mal Heute auf der Suche nach mehr SRAM.


    Ein richtiges Speichertest Programm ist natuerlich Pflicht,ich kenne keins,
    was natuerlich nichts aussagt! Falls sich Diddl wieder meldet koennte er
    vielleicht was zu sagen?


    Gruesse
    Vassilis

    Hallo blueicechip,



    Super das es noch mehr Leute gibt die interresse haben mitzuwirken.


    Ein bischen zusammen rumbasteln macht mehr Spass,habe allerdings nicht jeden Tag Zeit oder Lust! :-)


    Quote


    Ok, OK, man kann ja erst mal klein anfangen und setzt erst mal nur del cpld, sram und flash auf die platine - der rest muß eh vom cpld gemacht werden. ( Brauch ja auch alles Platz auf der Platine )


    Der C16 / Plus4 hat nunmal ein anderes Speichermapping und Timing als der VC20 oder C64 und es ist nicht so tief erforscht wie bei den anderen beiden.Deswegen würde ich mich immer nur auf eines Konzentrieren,wenn jedes Teil für sich läuft kann man ja alles zusammenpacken.
    Der folgende link auf das HW-Manual ist ein muss,falls Du Dich mit der Hardware der C16/Plus4 tiefer vertraut machen willst.
    http://www.zimmers.net/anonftp…amming/manual/manual.html
    Was das ganze CPLD Zeug angeht,das ist am Anfang ein bischen unübersichtlich,Du musst allerdings unbedingt Digitaltechnik Grundlagen beherrschen,so mit und und oder und wissen was ein Produkttern ist !? Das Web ist voll mit dem Zeug...


    Quote


    War Pin 1 nicht belegt oder für A8 (258 KB DRAM) ?


    Ich meinte die 4416 16Kx4 DRAMs die im C16 standard sind.Die 256Kx1 haben ein anderes und die 256Kx4 Speicher wieder ein anderes Pinlayout.Da muss man in das Datenblatt gucken.Allerdings ist es einfacher statisches RAM zu verwenden.


    Quote


    Man kann ja auch erst mal damit anfangen den sram in den Modulbereich einzublenden, und dann vielleicht danach mit dem Flash testen.


    Ich würde vorschlagen,dass man zuerst überlegt welches Konzept man verfolgen will,das mit dem abgeschaltetem internem RAM oder das knifflige aber bessere,weil nicht verbastelte,von Wiesel.Schnellere Ergebnisse sind mit erstem zu erwarten.Beim C16 ist das interne RAM relativ schnell deaktiviert.Beim Plus/4 müsste man irgendwo an die CAS Leitung ran, diese durchtrennen und Ramseitig auf high legen.Habe allerdings meinen Plus/4 noch nicht zum basteln freigegeben!
    Kompatibilität zu den anderen Speichererweiterungen nur auf Registerebene,aus den verlinkten Dokumenten bin ich leider nicht so schlau geworden.


    Grüsse

    Hallo allerseits,


    ich hatte die letzten Tage ein bischen weiter am C16 rumgemessen und hänge mal
    drei Bilder an auf denen man jeweils einen CPU Schreibzugriff sieht mit
    langamen und schnellem Takt sowie ein Timing mit den TED refresh Zyklen.
    Man muss beachten,dass der TED die CPU hoch und runter taktet.
    Mit der fallenden Flanke von RAS könnte man die r/w Leitung abfragen.Zusammen mit
    dem CPU Takt, AEC und BA könnte man auch TED/CPU Zugriffe unterscheiden falls nötig.
    Die Details einer realen Umsetzung werden jedenfalls kniffelig sein.Man bräuchte auch
    einen externen unabhängigen Takt um die neuen Speicherzugriffe zu machen.Zeit dürfte
    genug da sein,falls man 55ns SRam verwenden sollte.


    Ich will wirklich keinem "auf dem Schlipps treten",aber ausser Wiesel wäre zur Zeit
    keiner von uns (Diddl,blueicechip,ich) in der Lage das auf Anhieb zu machen.
    Sehr vielle Timing Details sind zu beachten damit man sicherstellt dass es doch nicht auf dem Bus
    "knallt".Ich lese hier sowieso nur des "Basteltriebes" wegen,ein FE für den C16 brauche ich jedenfalls nicht.
    Könnte aber mit speziellen timings aushelfen falls ihr, Diddl oder blueicechip, welche braucht.


    Vielleicht auch nicht gleich alles (RAM/FLASH/SID/CLOCKPORT/RRNET,SD2IEC,...,HANNES/SOLDER/...)
    auf einmal versuchen,wird nicht klappen meiner Meinung nach,zu kompliziert.


    Ich werde für mich erstmal versuchen den C16 intern mit 16 danach 64KB SRAM zum laufen zu bringen mit
    abgeschaltetem DRAM.Erst mit TTL auf Steckbrett,dann 8 bit baby,dann guck ich mal weiter ein
    Flashrom dran zu bekommen.(Bischen EasyFlashC16 Träume,ist ne klasse Hw !!!)


    DRAM abschalten geht beim C16 einfach,da Pin_1 der DRAMS ein globales enable ist.(Ich habe sowieso
    fast alles gesockelt,ich nehme die einfach raus!)


    Bitte nicht böse sein :-)
    Grüsse,
    Vassilis

    Hallo allerseits,


    ich melde mich mal auch zum Thema,da ich mich im Rahmen anderer "Forschungen" etwas mit dem Speichermapping des C16 beschaeftigt hatte.Das ganze ist aus diverser Dokumentation zusammengesucht und von mir nicht an der realen HW verifiziert,also es koennen einzelne Punkte auch falsch sein.
    Ich fange mal an:
    1) Der TED steuert das DRAM direkt an mit RAS,CAS,MUX und R/W.Schreibzugriffe landen immer ins RAM unabhaengig davon ob ROM eingeblendet wurde.Beim C16 wird das 16K RAM 4 mal im Adressraum gespiegelt.Man kann das RAM nicht extern deaktivieren.Somit wuerden RAM modul Erweiterungen mit dem internem RAM auf dem Bus konkurrieren!
    2) Die unteren 32K von $0000 .. $7FFF sind immer RAM.
    3) Bei den oberen 32K von $8000 .. $FFFF haengt es von zwei "strobe" Registern ab ob beim lesen ROM oder RAM eingeblendet wird.Schreibt man einen beliebigen Wert auf $FF3E dann wird ROM eingeblendet.Schreibt man auf $FF3F dann wird RAM eingeblendet.Das hat nur bei READ bedeutung.WRITE landet immer ins darunter liegende RAM.
    4) Das TED_CS0 Signal wird bei ROM Zugriff auf $8000 .. $BFFF aktiv.
    5) Das TED_CS1 Signal wird bei ROM Zugriff auf $C000 .. $FFFF aktiv.
    6) Die Adressen $FDxx , $FExx und $FF00 .. $FF3F sind I/O und TED Register Bereich und dort wird niemals RAM oder ROM eingeblendet.
    7) Die Adressen $FCxx des KERNAL ROM werden immer selektiert wenn ROM eingeblendet ist,da dort die Banking Funktionen des Kernal residieren die man fuer die ROM umschaltungen benoetigt.
    8) Auf den Adressen $FDDx residiert das Banking Register (74LS175) ueber das man die BASIC , KERNAL und externe ROMs ueber C1/C2 LOW/HIGH am expansion port ein und ausblenden kann.


    Ich hoffe, ich habe nichts gravierendes durcheinander gebracht!
    Gruesse

    Hallo allerseits,


    ich melde mich mal nach ein paar Monaten wieder hier zurück,da ich ein bischen am C16 Raster gemessen habe.Ich habe mit einem LM1881 und einem CPLD Board eine dekodierung des C16 CSYNC Signals gemacht,um einzelne Zeilen triggern zu können.Will man den TED nachahmen,muss man natürlich das Timing richtig machen.Ich hänge mal vier Bilder an,welche den CSYNC und die drei Arten von Zeilen zeigen die der TED produziert.
    1) CPU_SLOW : Eine Zeile besteht aus 65 CPU Takten und zwar 16x schnell und 49x langsam.
    2) CPU_FAST : Eine Zeile besteht aus 109 CPU Takten und zwar 104x schnell und 5x langsam.
    3) CPU_IDLE: Die CPU kommt garnicht dran, der TED klaut sich die gesammte Zeile.(nennt man das "Bad Line" !?)
    Es gibt zu allem Überfluss,um es noch komplizierter zu machen,noch zwei register bits welche noch eine Rolle spielen:
    a) $FF06 bit 4 screen blanking : Der Bildschirm füllt sich mit border Farbe aus $FF19 und es werden immer CPU_FAST Zugriffe gemacht.
    b) $FF13 bit 1 force single clock: Der TED gibt *immer* single clock aus,auch während der hsync Phase einer Zeile.(das muss ich nochmal messen!)
    Ich hoffe ich habe alle Fälle zusammen!
    Was genau der TED da macht an Zugriffen muss ich noch herausfinden,da mein LA so wenig Speicher hat,dass ich keine vollständige Zeile mit all den Adressen und Daten des TED aufnehmen kann.Muss also den CPLD trigger code erweitern,dass ich auch innerhalb einer Zeile bezogen auf den Zeilenanfang triggern kann...

    Grüsse.


    PS: Konkreten code der jetzt was macht habe ich nicht,aber ich plane erstmal ein Xilinx Spartan3 Board mit einem 200K chip zu verwenden.Vielleicht habe ich ja in 3 bis 4 Monaten einen $FF19 border... :bgdev

    Hallo allerseits,


    ich hatte mir ein bischen Gedanken darüber gemacht und hatte einige Signale der Atari 2600 PAL TIA gemessen.Der Vorteil bei der TIA ist,dass man den analogen Teil überspringen kann,da die TIA sowohl Luminanz als auch COLOR wie das dort heisst digital ausgeben.Ich hänge mal zwei Bilder an.Das Erste zeigt eine ganze Zeile.Man erkennt beim TIA_COLOR Signal schön die bursts der Farbe.Das zweite Bild habe ich ein bischen gezoomt.Naja,einfach nur um zu zeigen dass ich bischen was gemacht habe.Wie ich da nun die Phasenlagen ermitteln kann ist mir noch ein bischen schleierhaft :roll: .Leider habe ich das schon abgebaut und habe nun den C16 unter dem Messer um ein bischen am Raster zu messen.
    Eigentlich müsste ich meinen 600XL rauskramen,könnte sein dass die GTIA auch alles digital macht,dann kann man mit kleinen BASIC Programmen die Farben setzen und gucken was man da verändert,das A2K6 kann ich nicht programmieren!


    Ok,das wars!
    Grüsse

    Hallo allerseits,


    ich erlaube mir mal diesen Thread hier wiederzubeleben da er mir als Quelle diente.Ich beschäftige mich in meiner Freizeit ein bischen mit CPLDs und nach den ersten Lämpchen blink u.s.w wollte ich höher hinaus,also musste das obligatorische Pong als nächstes ran! Um mich ein bischen dabei zu orientieren habe ich das Atari pong als Grundlage genommen welches weiter oben vom user "Oliver_A" erwähnt wurde.Die links zu den Schaltplänen und der AtariAge Blog sind ja schon weiter oben angegeben.Ich habe ein Coolrunner-II CPLD Bord von xilinx verwendet.Das Spielchen ist zwar spielbar,hat aber noch einige Macken.Die schlimmste ist,dass die Schläger vertikal um 2-3 Zeilen "Zappeln".Ich habe den Grund dafür noch nicht gefunden,kann es sein das die externen NE555 so ungenau sind? Kann ich mir nicht vorstellen,da das original wohl kaum so gezappelt haben wird.Vielleicht liegt es an der Steckbrettchen Verdrahtung!?
    Naja,da ich gerade Heute etwas mehr Freizeit habe,stelle ich es jetzt vor,sonst wird Weinachten! Vielleicht hat ja jemand Lust da bischen zu Forschen.


    Grüsse,
    Nichtsnutz


    P.S: Wer nachbauen will,muss halt bischen Basteln.Die ICs oben sind 74HC4050 buffer die ich als Pegelwandler benutze,jeweils für 5V -> 3.3V und 3.3V -> 5V,da die Coolrunner-II CPLDs nicht 5V Tolerante Eingänge haben.Die Beschaltung der NE555 ist wie im original Schaltplan,Die Potis kabe ich aus diesem Conrad LED Pong Spiel,sie sind 10K.Das Videosignal ist eine Parallelschaltung von 1K für CSYNC und 560R für das VIDEO Signal.Sound wird einfach auf ein 10K Poti Schleifer gelegt und über einen 470uF Direkt an das TV Audio gelegt.(Brrr)

    Hallo Hoeppie,


    ich habe zwar nur 600XL/800XL Modelle,aber auf der Suche nach Informationen hatte ich mir dieses dreiteilige ATARI TECHNICAL REFERENCE NOTES gekauft.Ich habe Dir mal daraus die A800 Schaltpläne gescannt.Die Qualität bekomme ich leider nicht besser.Die Originale selber sind kaum zu entziffern! Ich habe mit einem CanoScan 200 mit 600DPI gescannt.Leider sind keine Lagepläne enthalten.


    http://rapidshare.com/files/303647248/A800.rar


    Hier bekommst Du auch Schaltpläne für sogut wie alles von Atari:
    http://mega-hz.no-ip.com/


    Die Infothek von "cas" muss man wissen http://www.strotmann.de/~cas/Infothek/
    Dort findest Du auch die gescannten Technical Reference Notes,allerdings sind die Schaltpläne daraus nicht hochaufgelösst gescannt -> unbrauchbar,deshalb habe ich sie nochmal gescannt.

    Und allgemein werden Dir die Experten vom ABBUC bei Problemen sicherlich weiterhelfen können:
    http://www.abbuc.de/phpBB3/


    Ok, das wars erstmal.Auf jeden Fall viel Spass beim Restaurieren :-)


    Grüsse

    Hallo iskra,


    beim stöbern auf atariage war ich mal auf diesen Thread gestossen,da hat man verschiedene Versionen von Tastaruten verglichen:


    600/800XL Keyboard variants


    http://www.atariage.com/forums…omsearch__1&#entry1274425


    vielleicht hilft es ein bischen weiter.
    Persönlich habe ich einen 800XL und einen 600XL mit Tastatur,die vom 800XL ist weicher,die vom 600XL etwas hölzern.Funktionieren tun sie noch beide.Die Funktionstasten sind bei mir auch krum und schief.Ich habe noch nicht gesehen dass es sie mit Flachbandkabel gibt.Würde mir auch besser gefallen.


    Grüsse

    Hallo Wiesel,


    vielen Dank für die Timings.Du bist ein Profi.Deine Messungen bestätigen das was ich auch gemessen hatte.Ich habe allerdings keinen derart leistungsfähigen L.A.Ich habe auch ein Bild von zwei Badlines angehängt.Es steht auch im TED Manual so.Dort wird es back-to-back DMA genannt: Zitat:"If last DMA was row 8 of character,then DMA for row 1 of next character is initiated.".Zusammen mit den dazwischen ligenden 6 normalen Zeilen ist das wohl eine char-box.
    Das mit dem 1/20 hatte ich auch so gemessen.Im Bild unten rechts sieht man "CLK1->Cycles A->B = 20".CLK1 ist der 17.73 Haupttakt.


    Ich "verzweifele" gerade an etwas anderem was ich angefangen habe und da ich immer nur eine Baustelle auf dem Tisch haben mag,dauert es bei mir damit noch ein bischen mit dem C16.Habe ihn aber wieder hochgeholt und aufgeschraubt!


    Ok,dann erstmal schönes Wochenende.
    Vassilis


    Hallo Diddl,


    ja das Prüft er,allerdings lautet die Kennung 'cbm'.Es gibt ein banking Register bei $FDD0 aber das führt alles zu weit...
    Ich schicke Dir mal eine PM.Falls es Dich tiefer Interresiert kannst Du da nachlesen.


    Grüsse

    Hallo Wiesel,


    erstmal vielen Dank dass Du Dir die Zeit nimmst hier zu schreiben.
    Ich kann was dieses Projekt angeht nur fuer mich schreiben.Ich kenne mich mit den internern des C64 sogut wie garnicht aus.Die FPGA64 Implementierung von Peter ist mir bekannt,ich hatte auch mal in die Quelltexte hineingeschaut und gestaunt! Das ist fuer mich noch viel zu hoch.Ebenso die Sachen die tobiflex auf dem COne macht.Ich mache es nur zum Spass,ein bischen Digitaltechnik,ein bischen hier im F64 Fachsimpeln.Eine Implementierung wie Du sie vorschlaegst kann ich nicht leisten,dass muss ich ehrlich sagen damit keine falschen Erwartungen hier entstehen.Was ich leisten kann in loser Folge waere z.B:
    Messungen an dem TED mit einem LogicPort vorzunehmen.Das hatte ich schonmal angefangen.Ich hatte ein bischen an der CPU gemessen.Da der LP nicht genug Speicher hat ein Frame zu speichern sondern vielleicht gerade eine Zeile,wollte ich mir mit einem CPLD und LM1881 einen Zeilensync separator zum Triggern bauen,damit ich auf einzelne Zeilen Triggern kann.
    Danach auf der Grundlage der vorhandenen Doku einzelne Funktionseinheiten des TED nachbilden: PAL Raster,erstmal nur stabiles Fernsehbild,danach einzelne Farbregister dazu,einfache Speicherzugriffe um Zeichen auf dem Bildschirm zu bekommen, u.s.w.
    Also doch eher wie Du schreibst auch die Radmuttern erfinden! Ich will etwas lernen und man lernt am besten indem man selber macht und natuerlich dabei auch auf die Schnauze faellt.Und als Freizeitbastler muss ich auch die Zeit fuer all das haben...
    Ich hoffe da auf wohlwollen Seitens der Experten hier.
    Und noch ein bischen zum Thema:
    Das Timing ist wohl das wichtigst um ueberhaupt anfangen zu koennen.Den 1/10 , 1/20 CPU-Takt habe ich mir aus den TED Datenblatt Angaben zusammengerechnet.Dort steht als PHI_OUT CPU Frequenz 886,7KHz was bei 17,7344MHz Haupttakt 1/20 ist.Ich hatte mir auch gedanken zu all den anderen Takten die man brauch gemacht:
    Videotakt: 7.09MHz , das passt mit 17,7344 * (2/5) und den 456Takten pro Zeile.
    CPU_FAST : 7.09 / 4 = 1.77MHz
    CPU_SLOW : 7.09 / 8 = 886KHz
    AUDIO : 7.09 / 64 = 110,8KHz
    Einfacher linedoubler fuer 50Hz VGA : 2*7.09 = 14.18MHz.
    Ich hoffe ich habe nichts vergessen.Ich wollte daher mit einem 17.73MHz Quarz erstmal * (8/5) = 28.36MHz erzeugen und fuer alles andere mit clock enables arbeiten.
    Vielleicht hat es ja Commodore tatsaechlich so gemacht,da die Teiler die sich ergeben einfache Zweierpotenzen sind,die man ohne Tricks von einem Zaehler abgreifen kann 14.18 / (2,8,16,128 ) .
    Nun, soviel von mir.Es haben ja noch ein paar andere Interesse bekundet...


    Gruesse

    Hallo boing4k,


    nun bin ich kein Experte in VHDL,aber ich wuerde es folgendermassen angehen:Mit einer der DFS Einheiten im Spartan3 wuerde ich 8 * 4.433MHz erzeugen.Alle anderen Takte wuerde ich daraus ableiten,als sogenannte "clock enable" Signale.Diese sind nur einen Haupttakt lang.Man bekommt somit einen vollsynchronen Entwurf.Intern benoetigt man nicht unbedingt Takte mit 50% Tastverhaeltniss.
    Mit VERILOG kenne ich mich leider nicht aus,ich habe mich nur mit VHDL beschaeftigt.Es folgt ein bischen *ungetestete* Praxis:



    Aus dem horizontalen Zaehler leitet man dann die Austastimpulse aus u.s.w ... :blah!



    Gruesse