Junior Computer ][

  • Jedenfalls vielen Dank NorbertJ für diesen grandiosen Hinweis :thumbup: :thumbup: :thumbup: . Da wäre ich mein Lebtag nicht von selber drauf gekommen!

    Freut mich, dass ich etwas zur Lösung beitragen konnte. *ST2*

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Hier noch einige Infos zu dem Chip. U.a. dieser ein Hinweis

    "NB: Texas Instruments at one time decided to name the most significant bit as bit zero, and increment into the less significant bits. Thus, a byte would be labelled as D0 to D7, instead of D7 to D0 like everyone else. This chip and its data sheet are from that time but this on-line document uses the standard convention to avoid confusion. The figures have been edited too."

    Was ist das denn für eine Webseite?

    Bringt den Hinweis an und verdreht selber alle Indizes. Schlimmer geht immer.


    Ich verlass mich da lieber auf die Original-Doku. Die ist auch nicht immer fehlerfrei. Aber falsch abschreiben macht's nur schlimmer.


    Wieso kommt TI auf diese dämliche Idee Datenleitungen anders zu bezeichnen als der Rest der Welt? :nixwiss::capone:

    Gibt's auch bei anderen.

    Ich meine der PowerPC hatte das auch. Das ist ein 32bit Microprocessor mit BigEndian.

    Wenn man die Byteanordnung mit MSB bei 0 beginnt, kann man das auch bei den Datenbits machen.

    Aber richtig sinnhaft ist es m.E. nicht.

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • wow....gestern einen prall gefüllten Umschlag vom Jörg bekommen ::post::


    Die I/O Platine ist allererste Sahne und ich bin jetzt total angefixt den Junior aufzubauen.
    Danke an Jörg und allen Beteiligten für die topp Arbeit die Ihr da leistet.

    Klasse!


    2ee

    Jörg, wo genau finde ich denn den Schaltplan von der I/O?
    Ich war im Downloadbereich, bin dort aber nicht fündig geworden :grübel:

  • Jörg, wo genau finde ich denn den Schaltplan von der I/O?
    Ich war im Downloadbereich, bin dort aber nicht fündig geworden :grübel:

    Ja, das tut mir leid. Ich hatte nicht damit gerechnet, dass die Post so schnell ist, ich musste gestern geschäftlich nach Karlsruhe und bin erst spät wieder nach Hause gekommen.

    Ich hab den Schaltplan inkl. BOM jetzt gerade zum Download freigegeben. Die neue Platine (Gerber Files) ist da noch nicht dabei, weil ich noch eine kleine Änderung einpflegen muss. Das ROM Image mit dem für den Junior gepatchten EhBasic versuche ich bis Samstag zum Download freizugeben.

  • Hallo Jörg,


    auch bei mir ist alles angekommen, klasse Qualität, wie auch schon bei der Grundplatine. :):thumbup:


    Viele Dank und lieber Gruß,

    Norbert

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Hallo Jörg,

    falls du die Junior-Platinen noch nicht beauftragt hast, hier ein minimaler Vorschlag zur Verbesserung: der Uhrenquarz hängt lose in der Luft herum. Einfach eine kleine Lötinsel am Ende des Quarzkörpers würde dem ganzen mehr Stabilität geben. Muß ja nicht durchkontaktiert sein. Ich weiß, das ist jetzt jammern auf hohem Niveau....


    Liebe Grüße,

    Norbert

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Klasse, dankeschön!

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Hallo Jörg,

    Ich habe die Interface/Platine soweit mit allen wichtigen Teilen bestückt.

    Sobald ich das Parallelport Interconnect-Kabel anschließe, bleibt das Junior Display dunkel. Macht aber den Reset-Tüüt. Ist das normal?

    Wo liegt die Adresse des zweiten 6522? Ich würde gerne die Datassette testen, sie macht bisher keinen Mucks.

    Bei $0800 scheint der erste VIA zu liegen, stimmt das?


    Viele Grüße

    Norbert


    Korrektur: Das Interconnect-Kabel-Verhalten bleibt bestehen. Der 2. Via hat $C000, korrekt?

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

    Einmal editiert, zuletzt von NorbertJ ()

  • Hallo Norbert,

    bloss ganz kurz, da ich gleich weg muss.


    Die Adressen sind folgendermaßen belegt:


    Basisadresse: K2 = $0800, K3 = $0C00, K4 = $1000


    VIA1 = Basisadresse + $00 bis $0F

    VIA2 = Basisadresse + $10 bis $1F

    RAM-Switch = Basisadresse + $20 bis $2F

    ROM-Switch = Basisadresse + $30 bis $3F


    Also bei K2

    VIA1 = $0800 - $080F

    VIA2 = $0810 - $081F

    RAM = $0820 - $082F

    ROM = $0830 - $083F


    Das Problem mit gesteckten Parallel Port Inteconnect Kabel ist mir bereits bekannt. Das liegt daran, dass das Original Junior ROM bei der Initialisierung die Leitung, mit der ich zwischen Read (ASCII Tastatur) und Write (Drucker) umschalte auf Read schaltet und somit die Daten für das Display Platt gemacht werden.


    Wenn du auch bereits das ROM einstecken möchtest, musst du bitte am Junior die DIP Switches noch richtig einstellen, damit sich RAM und ROM nicht in die Quere kommen.


    DIP Switch:

    $80 auf ON

    $A0 auf OFF

    $C0 auf OFF

  • So, bin wieder zurück.


    Also nochmal zum nicht funktionierenden 7-Segment Display bei eingesteckten Link-Kabel: Ich muss dazu tatsächlich die Initialisierungsroutine im Original ROM leicht ändern, oder den Einsprungspunkt anpassen, da hier wohl der Port Pin PB5 auf High gezogen wird (oder als Eingang belegt ist, was dann letztlich die gleiche Problematik erzeugt). Wie auch immer, ich hab das auf dem Schirm und werde versuchen, den Fehler sehr zeitnah zu beheben.


    Ich hab jetzt erst mal eine kleine Erkennungsroutine für die Erweiterungsplatine geschrieben, die ich nächste Woche wohl ins System ROM einpflege. Das Basic ROM hat dazu einfach von mir eine Magic Number bekommen: Hex $65 $02 $CA $FE - was wohl auch sonst :kafeee: .

    Wenn die Karte und somit ein Basic ROM erkannt wurde, wird dann in Zukunft auf dem Bildschirm die Auswahl "(M)onitor (B)asic" angezeigt, ansonsten springe ich dann direkt in den Monitor.


    Danach kommt erst mal die I2C Schnittstelle dran. Das Protokoll habe ich schon seit einiger Zeit fertig. Bleibt bloß noch, den RTC Baustein zu beschreiben und zu lesen. Das klappt leider irgendwie noch nicht so richtig, da ich immer $00 zurück lese. Leider hab ich keinen PCF8574 I2C Port Expander mehr, um die Schnittstelle damit allgemein zu testen. Ich werde also als nächstes mal den Logic Analyzer anschließen und mal sehen, was da über die Leitung läuft.


    Als nächstes werde ich mich dann dem Thema Datasette widmen. Bisher kann man bei angeschlossenen Laufwerk mal an der VIA2 den Port-Pin PB6 als Ausgang schalten um den Motor zu testen. PB6 = Low = Motor an.

    Ich möchte ja - wie bereits früher erwähnt - das Format des Sharp MZ80K nutzen . Beim Lesen der Daten kann ich per CA1 Pin bei steigender oder fallender Flanke (je nach Einstellung) einen Interrupt auslösen, aber leider nicht irgendwann den tatsächlich anliegenden Pegel auslesen. Wenn ich es so machen möchte wie Sharp, dann lese ich ja nach einer steigenden Flanke beim Zeitpunkt RP je nach Länge des Pulses entweder einen High oder Low Pegel. Das würde bei mir nur mit einem zusätzlichen, an CA1 gekoppelten Port-Pin funktionieren. Ich hab daher auf der neuen Revision der IO Platine einfach eine Diode nach PB0 eingeplant, die dann die - hoffentlich zu diesem Zeitpunkt unbenutze - I2C Clock Leitung bei Low nach unten zieht. Ob das geht muss ich erst schauen, da evtl. die Datasette auf der Read-Leitung auch bei Nichtbenutzung irgend einen Pegel anliegen hat und mir dadurch wiederum I2C unmglich machen würde. Ansonsten muss ich das Lesen über Umschalten der CA1 Flankenauslösung und einem Timer steuern.


    Wenn das dann alles läuft kommt zum Schluss die SD-Karten Thematik dran. Da ich da ja nicht nur einen kleinen Boot-Manager schreiben muss, sondern auch das FAT32 Dateisystem unterstützen sollte, wird das wohl leider noch etwas dauern. Ich bin jeden falls noch eine gute Weile mit dem Junior beschäftigt, denn letztlich muss irgendwann ja noch eine Grafikkarte her, sonst wird das mit pac man wohl nichts... ?(

  • Hallo Jörg,

    vielen Dank für die Infos!


    Wenn ich richtig bin, sollte doch ein Testprogrämmchen etwa so aussehen:


    Eingabe ab $0300:

    A9 40

    8D 12 08 'DDRB: PB6 Ausgang

    A9 00 'ORB: PB6 low

    8D 10 08 '-> Datassette inaktiv

    4C 00 03 (z.B.) Datassette aktiv


    Oder:

    A9 40

    8D 12 08 DDRB: PB6 Ausgang'

    A9 40 'ORB: PB6 high

    8D 10 08 ' -> Datassette inaktiv

    4C 00 03 (z.B.) Datassette inaktiv


    Ich kann das manchmal abwechselnd reproduzieren, meisten bleibt beim high-Setzen des PB6 die Datassette trotzdem aktiv.


    Gruß Norbert


    Ergänzung: Datassette läuft weiter, auch wenn die LED aus ist.

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

    2 Mal editiert, zuletzt von NorbertJ ()

  • Hallo Norbert,


    deine Programme sollten eigentlich richtig sein, aber am einfachsten testest du den Motor aber, wenn du im Monitor die Eingaben direkt machst, also:


    Monitor


    *812:40 <-- DDRB der VIA2 PB6 = Ausgang

    *810:00 <-- PortB PB6 = L, Motor AN

    *810:40 <-- PortB PB6 = H, Motor AUS


    Das geht dann etwas interaktiver.


    Ändere mal deine Programme im Monitor folgendermaßen:


    300: A9 40 8D 12 08 A9 00 8D 10 08 60

    und

    310: A9 40 8D 12 08 A9 40 8D 10 08 60


    durch das RTS am Ende kannst du auch im Monitor beide Programme wie Unterroutinen aufrufen, also:


    300G Schaltet den Motor an

    310G Schaltet den Motor aus


    Wenn deine Routinen in Schleife laufen scheint wohl beim setzen des DDRB Registers das ORB Register auf $00 zurückgesetzt zu werden und durch die Schleife toggelt es wohl dann immer schnell zwischen L und H. Das ist beim einmaligen Aufruf der Unterroutinen dann nicht mehr der Fall.

  • Hallo Jörg.

    der Motor läßt sich so nicht (bei mir) ausschalten. Läuft einfach weiter. Die LED schon...

    Muß das Massekabel der Datassette angeschlossen werden? Vielleicht ist das noch der Fehler...

    Viele Grüße,

    Norbert


    Anm: Vielleicht ein Relais-Problem?

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Das ist dann allerdings seltsam. Wenn sich die LED schalten lässt, muss auch das REED Relais und somit der Motor schalten. Messe doch bitte mal zwischen Kassettenanschluss 1 (GND) links neben der DSUB Buchse und Pin 3 (CASS_MOT) auf der Platine, ob da die 6V sauber geschaltet werden.

    Meine Datasette hat kein extra Massekabel, ich gehe aber davon aus, dass es sich da nur um die Kabelschirmung handelt, um das FCC Siegel zu bekommen.

    Ich hoffe natürlich, das Laufwerk ist bei dir nicht irgendwie kaputt.

  • Das Massekabel ist es auch nicht.

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Anm: Vielleicht ein Relais-Problem?

    Bleibt vielleicht das Reed-Relais im eingeschaltetem Zustand kleben, vielleicht durch einen zu hohen Strom vom Motor?


    Ich würde mal die Spannung am Motor-Pin mit angesteckter Datasette messen und danach mal ohne angestecktem Gerät. Beides Mal sollten ja (wenn die LED aus ist) die 6V wieder weg sein...


    Gruß

    Thomas

  • Schau bitte auch, ob nicht eventuell die LED verkehrt herum eingebaut ist, oder der Transistor sauber Ein-/Ausschaltet.

    LED überprüft, ebenso das Schalten des Transistors. Kein Problem festgstellt. Die Spannung 6V stimmt, wird aber bei Motor aus meist nicht abgeschaltet, LED tut was sie soll.


    Bleibt vielleicht das Reed-Relais im eingeschaltetem Zustand kleben, vielleicht durch einen zu hohen Strom vom Motor?

    Es ist wohl in der Tat ein Problem mit dem Relais. Sobald ich das Gehäuse des Relais leicht (!) erschüttere, öffnet sich der Reedkontakt.



    Ich werde das ganze morgen weiterverfolgen, bin heute Abend zu müde und unkonzentriert. :)

    Gruß Norbert

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Wäre Hex $65 $02 $C0 $FF $EE nicht passender?

    Das wären dann aber schon 5 Byte die geprüft werden müßten und ausserdem soll es ja auch eine Anspielung an die Magic Number in Java sein: CA FE BA BE. :) Noch dazu kann ich mir gut vorstellen, in einem Café Names "6502" zu sitzen, bei einem aus gerösteten 6502 Chips gebrühten Kaffee bekomme ich aber schon beim daran denken Magenschmerzen :tüdeldü: .

  • Achtung: die Read Leitung bei (meiner) Datasette ist je nach Richtung des letzten Flusswechsels High oder Low. Das ist auch aus beiden vorliegenden Schaltplänen so ersichtlich.

  • Achtung: die Read Leitung bei (meiner) Datasette ist je nach Richtung des letzten Flusswechsels High oder Low. Das ist auch aus beiden vorliegenden Schaltplänen so ersichtlich.

    Ah, dachte ich es mir doch. Dann geht es auf keinen Fall, dass ich die SCL Leitung als READ missbrauche. Und einen anderen Port Pin habe ich nicht mehr frei. Also dann doch die Zeit zwischen steigender und fallender Flanke messen. Geht ja auch mit nur wenig mehr Aufwand bei der Programmierung.

  • Ich habe gute Neuigkeiten: Reedrelais gegen 'normales' Relais aus meinem Funduino-Fundus getauscht - natürlich auch die Schutzdiode nicht vergessen - und alles funktioniert so wie es soll.

    Bilder

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Achtung: die Read Leitung bei (meiner) Datasette ist je nach Richtung des letzten Flusswechsels High oder Low. Das ist auch aus beiden vorliegenden Schaltplänen so ersichtlich.

    Ah, dachte ich es mir doch. Dann geht es auf keinen Fall, dass ich die SCL Leitung als READ missbrauche. Und einen anderen Port Pin habe ich nicht mehr frei. Also dann doch die Zeit zwischen steigender und fallender Flanke messen. Geht ja auch mit nur wenig mehr Aufwand bei der Programmierung.

    Mit meiner Datasette kam auch eine eingelegte Kassette mit, mit irgendwelchen Daten drauf.


    Interessant ist bei Wiedergabe, dass die langen Gaps zwischen den Dateien(?) mit READ=LOW sind, die kurzen Gaps zwischen Blöcken(?) einer Datei (?) mit READ=HIGH sind.


    Ob das Dateien und Blöcke sind, kann ich nur vermuten; aber es gibt diese Struktur.


    Ansonsten scheint der Header(?) einer Datei(?) mit geringerer Datenrate zu sein, als die anschliessenden Daten(?)


    Das Format scheint MFM zu sein, entweder 400µS für eine Periode oder 550µS.


    Ich schliesse die Datasette gerade an einen ESP32 an, damit ich auch mal bequem mit exotischen Formaten experimentieren kann.

  • Ansonsten scheint der Header(?) einer Datei(?) mit geringerer Datenrate zu sein, als die anschliessenden Daten(?)

    Ich bin jetzt auch nicht der C64 Datasetten Insider, aber das Aufzeichnungsformat des C64 wurde mit drei verschiedenen Frequenzen realisiert, eventuell kommt es dadurch dann beim Header zu den geringeren Datenraten?


    Ich habe gute Neuigkeiten: Reedrelais gegen 'normales' Relais aus meinem Funduino-Fundus getauscht - natürlich auch die Schutzdiode nicht vergessen - und alles funktioniert so wie es soll.

    Hallo Norber, das beruhigt mich jetzt. Ich hatte jetzt schon überlegt, ob ich nicht doch die Motorschaltung mit einem MOSFET umsetzten soll. Ist das Reed Relais das du benutzt hast, ein DIP 7212? Ich hab bei mir nie Motoranlaufströme > 800mA an der Datasette gehabt, da war dieses Relais mit 1A Schaltstrom völlig ausreichend. Vielleicht zieht deine Datasette da dann doch mehr?

    Eventuell hat dir das Relais auch die Programmschleife übel genommen. Bei mir ging jedenfalls der Motor auch nicht mehr aus, als ich dein zweites Programm kurz laufen ließ. Eventuell kommt es beim neu setzen des DDRB Registers wirklich zu kurzen Pulsen am Ausgang und somit zum Relaisflackern. Das wäre mit einer induktiven Last für die Kontakte auf Dauer nicht wirklich verträglich, weil dann doch recht hohe Ströme fließen, die die Kontakte zusammenschweißen können.

  • Hallo Jörg,

    ja es handelt sich um ein DIP 7212. Die Programmschleife hatte ich anfangs nie genutzt, und da funktionierte das ganze aber auch nicht richtig.

    Ich werde das jetzige Relais wohl auf dem Lochrasterfeld aufbauen und verkabeln. Mit eingebauter greößerer Zeitschleife hört es sich jetzt an wie beim alten VW-Käfer, wenn man den Blinker setzte. Tick-tack-tick-tack. :) . Retro eben!


    Gruß Norbert

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)