Junior Computer ][

  • Ich hatte gerade schon eine Fehler Check Liste geschrieben :) . Das freut mich, dass jetzt doch noch Leben in der alten Damen steckt! 8o

    Herzlichen Glückwunsch!


    Der STEP Schalter sollte übrigens auf OFF stehen, aber vermutlich hast du den noch garnicht angeschlossen, sonst würde wohl die LED im GO Taster leuchten.



  • Das sieht doch schon richtig gut aus. Insbesondere, wenn das so gedacht ist, daß es als Extra wirklich "plug&play" funktionieren soll und die kleine neue Platine dann direkt auf dem I/O Board aufgesteckt wird (oder eben wahlweise mit AdapterChip wie hier).


    Das Video ist für sowas doch auch OK geworden. Mein einziger "Kritikpunkt" wäre, daß man, wenn man eine Videobearbeitung nutzt oder wenigstens was Überlagern kann, evtl. noch ein großer grüner Pfeil auf den Wechsel von F5 auf 4C im Display hinweisen könnte, indem er von z.B. min 4:00 bis 4:10 auf das DATA Display zeigt. (Das ist sowas, was nur jemand sieht, der erwartet und weiß, wo er jetzt eine Veränderung sehen müßte. Viele andere Leute werden da gar keine Veränderung sehen, weil sie rechts im Bild schauen. Das angesprochenes Publikum sollte aber eigentlich wissen, was gemeint ist. Es ist halt nur, wenn Du z.B. willst, daß Zufallsgucker nicht sofort abgeschreckt werden.)


    Das Tempo ist sicherlich ein wichtiger Punkt - 10 kByte/Sekunde (min 9:20) ist natürlich erschreckend nach heutigen Maßstäben. ;)

    Vielleicht geht da ja noch was. 6 Sekunden für einen Volltransfer ist für reines Laden sicher OK, für andere Sachen aber vielleicht noch optimierbar (s.u.).



    Beim "jump" Befehl könnte amn evtl. über die Namensgebung nachdenken. "run" oder "go" z.B.


    Bei "peek" und "poke" werden die Adressen direkt hinter dem Befehl angenommen, was schön so ist (wie man es allgemein erwarten würde (müßte ja nicht so sein)). Allerdings ist es dann ein wenig inkonsequent / inkonsistent, daß man bei "load" die Adresse explizit mit "-a" einleiten muß. Vielleicht wäre es hier auch schöner, wenn da die Adresse einfach als zweiter Parameter erwartet wird. Alle anderen Sachen, etwa load Befehle mit fixer Ladeadresse, lassen sich dann daraus einfach ableiten, prinzipiell sogar als Shell Kommando, aber natürlich auch Programmintern, indem der Fixpunkt dann mit dazu gesetzt wird - etwa als "loadfix" = "load 0x4000")


    Generell könnte man darüber sinnieren, ob es evtl. Sinn machen könnte, die Adressen generell als Hexadressen zu erwarten. Da müßte man evtl. mal eine Umfrage starten, was wahrscheinlich erst mit echten Usern brauchbare Ergebnisse bringt. "poke 4000 23" macht sich besser als "poke 0x4000 0x23" zu tippen - auch wenn es aus Programmierersicht wahrscheinlich sehr gut und definiert aussieht. Evtl. ist auch besser, daß so wie hier zu lassen, also dezimal als Standard und 0x für Hex, dafür aber noch "heek" und "hoke" für Hex als Extrakommandos einzuführen.


    Weiteres interessantes Extrakommando wäre evtl. "poke+" und "peek+", was einen Counter beginnend vom letzten "poke" / "peek" Befehl benutzt und diesen jeweils um einen Wert hochzählt. Analog dazu "poke-" und "peek-".


    Was ich als sehr interessant erachten würde, wäre sowas wie ein "Block-poke", z.B. als "poke256". Analog dazu ein "peek256". Die sollten genauso wie die normalen poke/peek funktionieren, aber gleich an einem Stück 256 Byte auf einmal holen/schicken.

    Ich weiß nicht, ob jemand dann sowas nutzt, aber es würde sehr einfach die Möglichkeit eröffnen den RAM "seitenweise" ein/auszulesen. Damit ließen sich so Sachen machen, wie Stacks auslagern etc. - das ist dann aber schon der Punkt, wo der Speed auch bißchen höher sein muß.



    Na, war viel "Fantasy" dabei. Ich will Dir da nicht reinreden, aber nimms evtl. als Anregung.

  • Hallo allerseits,


    ich habe mir jetzt auch einen Junior Computer ][ (Rev. 3b/2022) zusammengelötet, aber das einzige was bei dem Rechner leuchtet, ist die rote LED in der GO-Taste, wenn STEP=ON. Sollten die 7-Segment-Anzeigen nicht etwas anzeigen, wenn man RS drückt ? Bei mir bleiben sie leider dunkel (Display-Schalter natürlich ON). Hier mein Aufbau:



    Ich habe bereits mehrere 6502, 6532 und HM628128 Rams getauscht, leider ohne Erfolg. Der 1 MHz Takt liegt an der CPU an. Der Expansion - Jumper ist oben (nicht Ext.). Spannungsversorgung 5V/2.4 Amp. sollte ja reichen. Wo könnte der Fehler liegen, was könnte ich testen ?

  • ich habe mir jetzt auch einen Junior Computer ][ (Rev. 3b/2022) zusammengelötet, aber das einzige was bei dem Rechner leuchtet, ist die rote LED in der GO-Taste, wenn STEP=ON. Sollten die 7-Segment-Anzeigen nicht etwas anzeigen, wenn man RS drückt ? Bei mir bleiben sie leider dunkel (Display-Schalter natürlich ON). Hier mein Aufbau:

    Die LED in der GO-Taste ist einfach über einen Widerstand und den STEP-Schalter an die Spannungsversorgung angeschlossen. Das ist keine große Kunst die leuchten zu lassen... :)


    Und ja, nach Drücken von RS sollten die 7-Segment-Anzeigen ein paar Ziffern darstellen.


    Für mich sieht der Aufbau erst einmal okay aus. Deshalb kann ich da nur durch ein paar Fragen weiterhelfen:


    A) Die Reset-Leitung prüfen (Pin 40 der CPU). Beim Drücken der RS-Taste soll der Pin auf Low gehen, nach Loslassen der Taste auf High wechseln...


    B) Das EProm. Man kann leider den Typ nicht erkennen, aber falls du hier ein 27C512 verwendest, dann sollte (da bei dir der Lötjumper JP3 gebrückt ist) das Kernal-Image in der oberen Hälfte liegen.


    Gruß

    Thomas

  • ThoralfAsmussen Erst einmal vielen Dank für die konstruktive Kritik! :)

    Das Video ist für sowas doch auch OK geworden. Mein einziger "Kritikpunkt" wäre, daß man, wenn man eine Videobearbeitung nutzt oder wenigstens was Überlagern kann, evtl. noch ein großer grüner Pfeil auf den Wechsel von F5 auf 4C im Display hinweisen könnte, indem er von z.B. min 4:00 bis 4:10 auf das DATA Display zeigt. (Das ist sowas, was nur jemand sieht, der erwartet und weiß, wo er jetzt eine Veränderung sehen müßte. Viele andere Leute werden da gar keine Veränderung sehen, weil sie rechts im Bild schauen. Das angesprochenes Publikum sollte aber eigentlich wissen, was gemeint ist. Es ist halt nur, wenn Du z.B. willst, daß Zufallsgucker nicht sofort abgeschreckt werden.)

    Ja, das ist mir später auch aufgefallen. Allerdings eher auf der rechten Seite, bei den Rückmeldungen, die das Client-Programm ausgibt (z.B. bei PEEK). Da wäre ein kleiner grüner/gelber/roter Kreis/Pfeil bestimmt hilfreich gewesen. Aber dann nochmal neu hochladen wollte ich das Video dann auch nicht.


    "Viele andere Leute" wie du schreibst schauen sich das ja gar nicht erst an. Es ist halt etwas zu speziell für eine breite Masse... ;) Und dann kam dazu, dass ich es an diesem Wochenende auch "unbedingt" abgearbeitet haben wollte, weil ich es schon ein paar Wochen vor mir hergeschoben hatte.


    Falls aber wieder was von mir in dieser Richtung kommt (was ich nicht ausschließen möchte), dann werde ich auf Änderungen optisch hinweisen...


    Das Tempo ist sicherlich ein wichtiger Punkt - 10 kByte/Sekunde (min 9:20) ist natürlich erschreckend nach heutigen Maßstäben. ;)

    Vielleicht geht da ja noch was. 6 Sekunden für einen Volltransfer ist für reines Laden sicher OK, für andere Sachen aber vielleicht noch optimierbar (s.u.).


    Kurzer technischer Exkurs: Die Datenübertragung über USB passiert in den Control-Transfers. Von denen gibt es 1000 Stück pro Sekunde (jede Millisekunde ein Transfer). Und in jedem Transfer werden 64 Bytes übertragen. Also "eigentlich" sollten 64KByte innerhalb einer Sekunde drüben sein...


    Warum das nicht so ist? Das weiß ich nicht genau. Ich schiebe die Langsamkeit auf die USB-Library, die Henning damals bei der Entwicklung verwendet hat...



    In deinem Kommentar sind ein paar interessante Ideen drin. Bei der Eingabe von Adressen oder Werten stimme ich allerdings nicht mit dir überein, immer Hexwerte zu verwenden. Ich persönlich vermisse beispielsweise ein $-Zeichen für Hexwerte, Binärwerte wären neben Dezimalwerten auch ganz nett.


    Aber da kommen wir schon zum Hauptproblem:


    Ich bin ein Hardware-Mensch. Und Assemblerprogrammierung kenne ich auch. Wenn es allerdings darum geht, den Quelltext des Konsolen-Programms zu erweitern oder anzupassen, dann muss ich leider passen. Das können andere bestimmt wesentlich besser als ich. Da kenne ich meine Grenzen...


    Es gäbe beim Konsolen-Programm nämlich weitaus mehr anzupassen: Das ganze Projekt war ursprünglich nur für den C64 und C128 von Commodore gedacht und das Konsolen-Programm (und der zugehörige 6502-Kernal) können auch nur zwischen diesen beiden Rechnern unterscheiden (Es gibt auch nur ein Bit, welches den Rechner-Typ überträgt). Ich habe XLink aber inzwischen auch auf einem VC20 laufen und jetzt kommt der Junior Computer II dazu. Eine Byte-Variable wäre da durchaus hilfreicher. Auch gibt es noch eine Reihe weiterer Befehle, die ich im Video gar nicht erwähnt habe: Z.B einen Benchmark-Befehl. Dieser holt sich aus der "Rechner-Typ"-Variablen die Info, welchen Bereich vom Ziel-System es für den Benchmark-Test beschreiben darf. So direkt ist dieser Befehl also nach jetzigem Stand gar nicht lauffähig. Oder der Identify-Befehl, der den Typ des Ziel-Systems ausgibt. Bis jetzt steht dort nur immer C64 oder C128...


    Mit der Erweiterung des Konsolen-Programms könnte man sich also gut beschäftigen und das Projekt etwas nach vorne bringen. Henning selbst ist hierfür wohl nicht mehr zu gewinnen. Drüben im Forum64 war er schon fast ein Jahr nicht mehr online... Aber die Quellen sind ja alle verfügbar...


    Ich lebe also mit dem Konsolen-Programm, so wie es ist. Und ich versuche trotzdem, die Hardware anzupassen. Auch wenn ich schon im Vorwege weiß, dass man auf der Software-Seite noch einiges mehr machen könnte und es nicht perfekt wird. Aber es ist nutzbar und es hilft beim Cross-Development...


    Gruß

    Thomas

  • Danke für die Hinweise. Der Reset funktioniert wie beschrieben. Als Eprom habe ich ein 27C256. Eigentlich kann ja nur noch beim Brennen irgendetwas schief gegangen sein. Ich werde das Eprom mal auslesen.

  • Hallo ralf02 ,

    ich habe jetzt auf den ersten Blick auch keine Auffälligkeiten gesehen. Hast du an allen Bausteinen mal die Versorgungsspannung gemessen? Falls du ein Oszilloskop besitzt, schau dir bitte mal die Taktsignale an Pin 37 (Phi0 In), Pin 3 (Phi1 Out) und Pin 39 (Phi2 Out) an. Eventuell geht da ja einer der TTL Bausteine nicht (in dem Fall der 74LS04 auf Pos. U5).

    Für die Grundfunktion brauchst du erst mal den 6551 (U12) und den Max232 (U13) nicht. Die würde ich also erst mal zur Fehlersuche draussen lassen.

    Mit dem Oszilloskop oder einem einfachen Logic-Tester kannst du auch mal Aktivität an den Adress Signalen der 6502 (Pins 9 bis 25) beobachten. Falls dein ROM nicht richtig gebrannt ist, wird sich dort nicht viel tun. Nimm bitte auch mal das angehängte ROM Image.


    Edit: Hier auch wirklich mit Anhang


    Edit: Ja, die 7-Segmentanzeigen sollten passen.

  • Schließ auch bitte mal einen Lautsprecher am Speaker Anschluss an. Falls ein Piep Ton beim Einschalten, bzw. drücken der Reset Taste ertönt, ist eventuell auch der Transistor Treiber ULN2003 für das Display nicht in Ordnung.

  • Ich habe einen Lautsprecher angeschlossen (und den Jumper SPK_ENBL geschlossen) - es gibt keinen Piepton beim Reset. Der Takt ist an Pin 37, Pin 3 und Pin 39 vorhanden. Die 5 Volt liegen bei allen ICs an. Das oben angehängte ROM-Image ist mit meinem Eprom-Inhalt identisch. An Pins 9-25 der 6502 haben die Signale nur ca. 100mV - mit "Spikes" ca. 200mV. Ist das normal ?

  • An Pins 9-25 der 6502 haben die Signale nur ca. 100mV - mit "Spikes" ca. 200mV. Ist das normal ?

    Nein. Das sind die Adressleitungen, die sollten fleißig vor sich hinflackern. Mindestens die mit den kleinen Pin-Nummern (in Richtung A0).


    Vielleicht klappt die Adressdekodierung mit den TTL-Bausteinen nicht und die CPU stürzt unmittelbar nach Lesen des Reset-Vektors ab, da durch falsche Adress-Dekodierung nichts Sinnvolles gelesen wird.

  • Statt des 74LS01 habe ich nur einen 7401. Könnte der Probleme machen ?

    Ein 7401 ohne LS wird wohl schon einige Jahre auf dem Buckel haben. Da das ein Open Collector NAND ist, könnte es eventuell sein, dass das Gatter die Leitungen nicht mehr sauber auf Low ziehen kann. Im Retro Tester oder dem MiniPro kann es aber trotzdem sein, dass der Baustein als funktionstüchtig angezeigt wird. Bei höheren Taktraten kann dann aber das oben genannte Problem auftauchen.

    Schau auch bitte mal ob an der CPU IRQ (Pin4) und NMI (Pin 6) auf High liegen. Das die Adressleitungen nur 100mV haben deutet auf alle Fälle auf ein Problem hin. Vor allem A0/A1 sollten rege Aktivität zeigen.


    Edit: Schau dir auch bitte die Lötstellen nochmal an, nicht das du da irgendwo eine kleine Lötbrücke zwischen zwei Pins hast. Du kannst ja auch mal ein Bild der Unterseite posten.

  • Ein 7401 ohne LS wird wohl schon einige Jahre auf dem Buckel haben. Da das ein Open Collector NAND ist, könnte es eventuell sein, dass das Gatter die Leitungen nicht mehr sauber auf Low ziehen kann. Im Retro Tester oder dem MiniPro kann es aber trotzdem sein, dass der Baustein als funktionstüchtig angezeigt wird. Bei höheren Taktraten kann dann aber das oben genannte Problem auftauchen.

    Schau auch bitte mal ob an der CPU IRQ (Pin4) und NMI (Pin 6) auf High liegen. Das die Adressleitungen nur 100mV haben deutet auf alle Fälle auf ein Problem hin. Vor allem A0/A1 sollten rege Aktivität zeigen.


    Edit: Schau dir auch bitte die Lötstellen nochmal an, nicht das du da irgendwo eine kleine Lötbrücke zwischen zwei Pins hast. Du kannst ja auch mal ein Bild der Unterseite posten.

    Pins 4 und 6 des 6502 sind high. Hier ein Foto der Unterseite:



    Jedenfalls werde ich erstmal den 74LS01 bestellen.

  • Falls Du ein digitales Zweikanal-Scope verwendest, kannst Du ja mal folgendes ausprobieren:


    Kanal 1 wird mit der Reset-Leitung verbunden,

    Kanal 2 wird mit der A0-Adressleitung verbunden.


    Getriggert wird auf eine High-Flanke von Kanal 1, also wenn Reset wieder High wird. Und zwar dann im Single-Shot-Mode.


    Dann sollten eigentlich auf der Adressleitung ein paar Pulse zu sehen sein. Nämlich wenn der 6502 sich den Reset-Vektor holt und wenn er dann ab der Reset-Adresse mit dem Lesen der Op-Codes beginnt...


    Gruß

    Thomas

  • Hi, schau Dir mal die Lötstelle beim BC516 an. Ist sehr eng. Ich hatte hier bei mir versehentlich eine Lötbrücke. Evtl. Ist Dir das gleiche passiert?


    Beste Grüße

    Marco

  • Die TTLs sind alle okay. Ich habe auch nochmal eine SY6502A und 2 andere 6532 eingesetzt - keine Änderung. Vielleicht liegt es am RAM ? Ich habe 8 Stück HM628128LP-7 (3 oder 4 hatte ich schon probiert).

    1.) Alle Widerstände auf korrekten Wert überprüft und auch am richtigen Platz eingelötet? Bei den 5-Ringen der Metallfilmwiderstände vertut man sich leicht.


    2.) Beim Blick auf deine Bauteile geht bei mir die Warnlampe an. Wo kommen denn die Rockwell-CPU 6502, besonders auch der RIOT 6532, aber auch die ACIA 6551 her?

    Auf deinem ersten Draufsichtfoto ist die CPU nach meiner Meinung abgeschliffen und neu bedruckt worden, die beiden anderen Bausteine ebenfalls. Möglicherweise hast du was auf der Platine stecken, was nicht das ist was es sein soll. Gilt auch für deine Austauschbauteile.


    BG mesch

  • Noch eine Verständnisfrage: Die mit 1uF 16v beschriebenen, ich habe bei den fertigen Geräten mal den Zylinder und mal die Gelben (Siehe rechts) dort verbaut gesehen. Sind beide dafür ausgelegt?


    Die 100nF Kondensatoren lagen bei deinem Bausatz zusätzlich mit dabei, weil es eigentlich unüblich ist, jedes IC einer Platine mit einem Elko zu puffern. Ich habe (bei meiner Platine) nur jedem 5 IC einen Elko spendiert, die anderen bekamen 100nF Keramikkondensatoren.

    Die Elkowerte habe ich auf 2,2 uF erhöht. Das hat den Hintergrund, dass der RS-232 Treiber von Maxim zwar nur 1uF Kondensatoren gemäß Datenblatt verlangt, aber da Elko's bekanntlich Toleranzen von +/- 20-30% aufweisen, wäre ein 1uF Elko unterdimensioniert. Die meisten Elko-Hersteller heute nutzen die Toleranz nach unten hin aus. Daher 2.2uF and we are safe :prost: .


    BG mesch

  • Die 6532 sind in einer Atari Konsole geprüft. Die Herkunft der 6502, 6532 und 6551 weiß ich gar nicht mehr genau, ich habe sie jedenfalls nicht aus China gekauft ... Die Widerstände muss ich alle nochmal durchprüfen. Ansonsten sind die 74LS01 jetzt bestellt, mal sehen ob sich dann was tut.

  • OK, der 6532 war verdächtig, aber offensichtlich geprüft/teilgeprüft. In der Zwischenzeit gibt es aber noch was zu tun.

    Ich sehe auf der Rückseite deiner Platine viele gute Lötstellen, aber auch etliche nicht so schöne Lötungen, falls das Foto uns nicht heftig täuscht.


         


    2ee hatte auf die Lötstellenproblematik weiter oben schon hingewiesen. Daher sollten diese kontrolliert (Lupe) und notfalls nachgelötet werden. Eventuell kann bei der einen oder anderen Lötstelle auch etwas Zinn entfernt werden.


    BG mesch

  • Da ist glaube ich die Fotoqualität meiner Kamera nicht so gut - tatsächlich sind diese beiden Lötstellen okay. Ich hatte die Lötstellen schon mit Platinenreiniger gesäubert und anschliessend nochmal durchgeschaut - aber nochmal prüfen kann jedenfalls nicht schaden ...

  • Mit der neuen ROM Version (0.9) werden jetzt alle, die eine IO/Language Card eingesetzt haben, mit Datum und Uhrzeit begrüßt. Bei noch nicht initialisierter Uhr müssen dann am Start Screen zuerst Datum und Uhrzeit eingegeben werden. Z.Zt gibt es noch keine Eingabemaske für den Wochentag (DOW), weshalb ich den Tag auch noch nicht mit anzeige. Als Marker für eine gesetzte Uhr schreibe ich in das Uhren RAM an den Adressen $08/$09 eine Magic Number (wieder mal $65 $02). Ab $0A bis $3F ist das RAM dann frei via I2C beschreibbar.


    Die I2C Routinen sind bereits fertig. Das ganze ist jetzt soweit optimiert, das ich auf etwa 25-28KHz Read/Write komme. Leider nur ein viertel der 100KHz die Low Speed I2C beherrscht, aber für die meisten Dinge ausreichend.

    Bei der Uhr gibt es noch einiges zu optimieren, daher sind die Adressen alle noch nicht fix.


    Sound Routinen sind noch nicht drin, da werde ich aber auch nicht zu viele machen, deshalb sollten die bald verfügbar sein.


    Das Assembler Listing ist im ZIP mit dabei, aber es sind einige Teile noch nicht kommentiert. Der Assemblierte Text ist mit dabei (PrintMonitor.txt), da könnt ihr die derzeitigen Einsprungadressen auch einsehen. Mit einem JSR auf $E9F6 (WRITETIME) könnt ihr mit HOUR = ACCU, MINUTE = X REGISTER, SECOND = Y REGISTER (jeweils den Wert in BCD also $19) zum Beispiel die Uhrzeit neu in die RTC schreiben. Da ist auch schon alles Kommentiert.


    Ich muss jetzt noch ein paar kleinere Änderungen im unteren Teil (kleinere Adressen) des Codes vornehmen. Das will ich in den nächsten zwei Wochen machen. Danach sollten sich die Adressen nicht mehr verschieben und ich kann dann mal eine Liste der Routinen mit Aufrufparametern rausgeben.

    Neue Funktionen werden dann nur noch oben angefügt.


    ralf02 probiere doch mal bitte das 0.9er ROM aus, ob sich da mehr bei deiner Platine tut. Vielleicht ist da ja doch ein Fehler im 0.6er Code (wobei ich das nicht glaube, aber shit happens) .


    Alle die keine Language Card angeschlossen haben landen jetzt sofort nach dem Einschalten im Monitor, das ist dann glaube ich nicht mehr so verwirrend wie bisher. Da war der Welcome Screen eher ein "proof of concept".


    Basic Befehle für Datum und Uhrzeit, sowie I2C In/Out dauern leider noch ein wenig, da ich als nächstes erst mal die Datasette zum Laufen bringen möchte.