Junior Computer ][

  • So, für alle die sich gefragt haben, ob ich noch am Junior ][ weiter arbeite, hier mal ein kleines Update.

    Die Tage nach der CC2022 - die übrigens einfach nur genial war, und zu netten Bekanntschaften geführt hat - musste ich erst mal aus privaten Gründen alle Aktivitäten am Projekt zurückfahren.


    Seit gestern geht es jetzt aber in kleinen Schritten weiter. Die ersten vielversprechenden Versuche mit der Datasettenaufzeichnung sind bereits erfolgt. Dazu beigetragen hat vor allem der Computer Grabbeltisch auf der CC. Dort lagen nämlich unter anderem ein paar Computer Kassetten, mit denen ich jetzt die Tests machen konnte. Vielen Dank noch an den unbekannten Spender.


    Die Datasette gibt die aufgezeichneten Signale mit 1A TTL Pegeln ohne allzu große messbare Schwankungen wieder. Natürlich wäre es interessant, wie stark meine Aufzeichnung auf einem anderen Laufwerk abweicht. Eventuell muss ich mir also noch ein zweites Datasetten-Laufwerk in der Bucht besorgen.



    Morgen werde ich wohl mal versuchen, die Daten wieder zurückzulesen, was allerdings naturgemäß etwas aufwändiger als der Schreibvorgang ist. Ich werde euch berichten.


    Bei alledem ist mir übrigens aufgefallen, dass die bisherige DELAY Routine im ROM nicht wirklich fehlerfrei funktioniert hatte. Das ist jetzt aber behoben, ohne notwendige Verschiebung des restlichen System ROM Codes.


    Die angekündigte (und von mir leider noch schuldig gebliebene) Liste alle Systemroutinen mit Einsprungadressen sollte mir hoffentlich auch noch diese Woche gelingen.


    Bis dahin Sláinte


    Jörg

  • ... und ich hab mir gestern mal genug IC-Fassungen nach bestellt, dass ich die beiden Boards auch endlich mal aufbauen kann.

  • Heute mal ein kleines Feedback mit allen dazu gehörigen Pannen.


    Zunächst sahen die Leseversuche von der Kassette recht vielversprechend aus. Ich hatte dazu 20000 Einsen und genauso viele Nullen auf das Band geschrieben, welche ich zuerst Problemlos wieder lesen konnte. Das ganze Muster hatte ich dann abwechselnd auf die volle Länge des 20 Minuten Bandes geschrieben und wieder eingelesen. Dabei traten dann nach zwei bis drei Minuten beim Lesen der Nullen immer wieder vereinzelte High Bits auf. Ergo die Laufruhe der Datasette lässt dann wohl nach ein paar Metern Band etwas nach und die von mir geschriebenen Null Pulse mit 2x120 uS sind offensichtlich zu kurz um die Schwankungen zu unterscheiden zu können, der Timer hat dann bereits runtergezählt, bevor ein Flankenwechsel kommt. Ich werde also morgen mal die High Pulse von 2x240us auf 2x360uS und die Null Pulse auf 2x180uS setzen, um den Unterschied zwischen High und Low Pulsen zu vergrößern.


    Bei einem meiner letzten Versuche bemerkte ich dann zu allem Überfluss noch, dass sich der Motor der Datasette nicht mehr ausschaltete. Das gleiche Problem das Norbert auch hatte! :wand:

    Der Kontakt des Reed Relais klebt nun einfach dauerhaft zusammen. Offensichtlich reicht das Relais mit seiner 1A Schaltleistung dann doch nicht aus, um die Induktive Motorlast schadfrei zu schalten. Eventuell muss man da auf ein 2A Relais oder höher ausweichen. Ich werde aber wohl eine Ersatzschaltung mit Leistungstransistor bei mir einsetzen und das auf der neuen Revision des IO Boards auch so abändern. Allen anderen rate ich zu einer ähnlichen Lösung oder zu einem anderen Relais. Aufbauen kann man das ja auf dem Lochrasterfeld.


    Zu allem Überfluss zeigte mein Junior dann heute morgen nach dem Einschalten das folgende Bild



    Sporadisch wurden immer wieder auf dem Terminal Müllzeichen angezeigt. Nach ein paar Minuten war der Spuck dann vorbei. Das ganze ist jetzt gerade eben auch wieder passiert. Offensichtlich hat die ACIA oder der MAX232 ein Kälteproblem, was ja schon irgendwie seltsam ist, da man das ja eher umgekehrt kennt.

    Ich werde jetzt nach dem Einschalten immer erst mal zwei Minuten warten, bis die Röhren Betriebstemeratur erreicht haben :P .


    Wie auch immer. Morgen werde ich zunächst mal für einen Relais Ersatz sorgen und dann weiter mit meinen Read/Write Experimenten wurschteln.

  • PS: und nur noch einmal gezeigt.. weil er so schön ist :)


    ich hatte den JUNIOR II 4 Tage auf der DORECO "im Einsatz"...

    keinerlei Dauerspannung-Probleme.. (auch nicht bei den 7Segment-Widerständen)..


    Gleichzeitig durfte ich auch den JUNIOR II Macher einmal persönlich kennen lernen...!

    Danke für deinen Besuch und ich wünsche deinem privatem Umfeld alles Gute !


    Mein DORECO Aufbau sah so aus :D

    Meine Sammlung: CBM4032,CBM610,VIC20, C16, Cplus, C64, SX64,C128D, LT286-C, Amiga 1000, C= PC1+10+20+40

  • Bei einem meiner letzten Versuche bemerkte ich dann zu allem Überfluss noch, dass sich der Motor der Datasette nicht mehr ausschaltete. Das gleiche Problem das Norbert auch hatte! :wand:

    ich habe selbst nicht nachgeschaut... gibt es eine "Freilauf-Diode" für die Induktive Last ?


    Sporadisch wurden immer wieder auf dem Terminal Müllzeichen angezeigt. Nach ein paar Minuten war der Spuck dann vorbei. Das ganze ist jetzt gerade eben auch wieder passiert. Offensichtlich hat die ACIA oder der MAX232 ein Kälteproblem, was ja schon irgendwie seltsam ist, da man das ja eher umgekehrt kennt.

    hatte ich auch mal... mit reinen 9600 gab es aber nie (super selten) Probleme

    Meine Sammlung: CBM4032,CBM610,VIC20, C16, Cplus, C64, SX64,C128D, LT286-C, Amiga 1000, C= PC1+10+20+40

  • ich habe selbst nicht nachgeschaut... gibt es eine "Freilauf-Diode" für die Induktive Last ?

    Ich hatte da tatsächlich gedacht, das in der Datasette ein Schutz verbaut ist. Ich hab mir das aber auch leider nicht genauer angesehen, sondern bin stillschweigend davon ausgegangen. Auf dem IO Board hatte ich deshalb nichts verbaut. Bei Norberts Problem hätte ich aber eigentlich auch gleich nachdenklich werden können. Er hatte ja mit seinem ersten Testprogramm den Motor sehr schnell Ein und Aus geschaltet, was dann natürlich zu massiver Belastung des Schaltkontakts geführt hat. Und Reed Relais sind da dann doch etwas empfindlicher. Mea Culpa. Ein 100nF Kondensator und eine Diode (K natürlich an +6,1V) parallel zum Kontakt könnte eventuell schon reichen. Aber 2A Schaltleistung sind wohl zusätzlich dennoch auch eine gute Idee, auch wenn der Motor bi mir nur etwa 600-700mA zieht.


    hatte ich auch mal... mit reinen 9600 gab es aber nie (super selten) Probleme

    Bei mir lief alles mit 19,2KBaud bisher völlig Problemlos. Ich werde das aber mal mit 9600 Baud testen. Leider hab ich gerade kein Kältespray mehr da, sonst könnte ich damit schauen, ob es der ACIA ist. Jedenfalls ist nach ein paar Minuten Aufwärmphase alles wieder in Ordnung. Das Bausteinchen ist halt nur die schöne kalifornische Wärme gewöhnt.

  • Bei einer C64 Revision sah die Ansteuerung so aus



    Der 100nF Kondensator C84 ist hier dann offensichtlich als Schutz für Q1 da. Im Datasetten Schaltplan ist tatsächlich der Motor direkt ohne weitere Bauteile auf den Datasetten Anschluss geführt.

    Ich werde nachher mal das Relais aus- und einen Sockel einlöten. Dann mach ich mir auf einer kleinen Lochrasterplatine ein Solid State Relais mit einem Transistor, das man bei Bedarf auch wieder abstöpseln kann.

  • Es gibt solche Schaltungen zum Thema "Tapes" (was da meist einfach Kassettenrecorder meint) auch immer mal in den GANZ GANZ alten Computerzeitschriften. Also z.B. für MITS und IMSAI Computer. Einfach mal bei archive wühlen gehen. Vielleicht findet sich da ja sogar noch die ein oder andere Anregung.

  • Zum ACIA kalt machen nim doch einfach einen Eiswürfel wenn du kein Kältespray hast.

  • Es gibt solche Schaltungen zum Thema "Tapes" (was da meist einfach Kassettenrecorder meint) auch immer mal in den GANZ GANZ alten Computerzeitschriften. Also z.B. für MITS und IMSAI Computer. Einfach mal bei archive wühlen gehen. Vielleicht findet sich da ja sogar noch die ein oder andere Anregung.

    Vorsicht, bitte nicht verwechseln!

    Ein Cassettenrecoder wird mit analogen Audio-Signalen betrieben.

    Die Datassette arbeitet mit digitalen Signalen mit TTL-Pegel.

    Bezüglich Motoransteuerung ist das ebenfalls anders.

    Bei einem Kassettenrecoder stellt der Rechner einen Schaltkontakt für den Motor zur Verfügung, der nicht unbedingt benutzt werden muß.

    Bei der Datassette gibt es einen Sense-Eingang für 'Taste gedrückt' und die geschaltete Versorgungsspannung für den Motor.

  • Nach einer (unfreiwillig) fast Hobby freien Woche konnte ich mich heute mal wieder dem Datasetten Problem widmen. Ich hab jetzt mal einfach an die Read Leitung mit dem Signalgenerator ein 4167 Hz Signal gelegt, was bei meinem Aufzeichnungsschema gerade eine Null darstellen soll (also 120 uS High + 120 uS Low).

    Ein Eins Signal hat mit der doppelten Periodendauer also eine Frequenz von 2083 Hz.

    Sowohl die Nullen, als auch die Einsen wurden fehlerfrei gelesen. Bei einer Verringerung der Periodendauer fing die Ausgabe dann bei etwa 96 uS Low Phase an zu spinnen.



    Da der Signalgenerator natürlich keine Schwankungen hat, ist klar, dass meine Read Routine ab einem gewissen Punkt zu lange zwischen der Abfrage "Timer Abgelaufen" und "Flankenwechsel" herumbummelt. Da von der Datasette nach ca 2 Minuten lesen die Fehler auftraten, gehe ich davon aus, dass durch das bereits abgespulte Band der Motor immer ein bischen schneller läuft, bis statt 240 uS, der kritische Punkt von 192 uS Periodendauer der gelesenen Signale erreicht ist.


    Da das natürlich auch bei er Aufzeichnung passiert, sollte sich das ja eigentlich ausgleichen :nixwiss: . Ich nehme aber an, dass das Band ein wenig "klebt", der Antriebsriemen ein wenig schlupft und der Motor an sich Gleichlaufschwankungen besitzt. Wie auch immer, ich werde/muss wohl die Aufzeichnung doch langsamer machen, um der Lese Routine ein etwas verbessertes Timing vorzugeben.


    Als Ersatz für mein durch Funkenbrand zusammengeklebtes Relais hab ich jetzt ein Solidstate Relais mit einem MOSFET gebastelt. Da ich leider nur einen BUZ 21 (N-Kanal MOSFET) zu Hand hatte, wurde das jetzt eine etwas eigenwillige Schaltung, die aber erst mal funktioniert.


     


    Auf dem neuen Board werde ich das dann natürlich mit einem P-Kanal MOSFET machen (falls ich mich nicht doch weiter für das Relais entscheide). Alle die das IO Board jetzt gerade mit Reed Relais betreiben wollen (so auch ich wieder), sollten auf alle Fälle eine Schwungrad-, bzw. Freilaufdiode zwischen Relais Pin 1 (Dioden Kathode) und Pin 7 löten.


    Das serielle Übertragungsproblem meines Juniors hat sich übrigens von selbst wieder in Luft aufgelöst. Jedenfalls funktionierte die Übertragung - wie von 286Micha vorgeschlagen - mit 9600 Baud immer stabil. Jetzt läuft er aber wieder mit 19,2KBaud. Die Eiswürfelmethode von klaly konnte (mangels Eiswürfel) und wollte ich (wegen Tauwasser gefahr) nicht anwenden ;) . Trotzdem Danke für den kreativen Tipp.


    So und heute Nacht wird gecoded... ::matrix::

  • Die Eiswürfelmethode von klaly, ...
    Eiswürfel gehört ja auch in einenen Drink rein und nicht auf einenen Computer.
    Natürlich sollte der Eiswürfel nicht als solcher, sondern mit einen Tüchen aufgelegt werden :)

    Heute hatte ich endlich mal Zeit gefunden mein Board Junior ][, Rev. 3.1b /2022 zu löten.
    Mein alter Rev. 2 2021 durfte als Organspender her halten.
    Mal schaun ob der "neue" heute noch fertig wird.
    Man brauch ja Zeit & Lust was beides gleichzeit da sein muss.


    mfG. Klaus Loy

  • Hallo Norbert,


    im Normalfall würde der Motor bei einer N-Kanal MOSFET Schaltung zwischen der +6,1V Versorgungsspannung und dem Source Anschluss des MOSFETs liegen und der Transistor dann gegen Masse schalten, was aber nicht geht, da der Datasettenmotor intern mit einem Anschluss fest auf Masse gelegt ist. Da ich sowohl nur noch ein paar N-Kanal MOSFETs und auch weder passenden Transistoren noch 5V Relais mehr da habe, war somit natürlich Krückenbasteln angesagt. Bei mir geht gerade irgendwie alles an Bauteilen aus, aber die Bestellung läuft gerade, inkl Kältespray :) . Zur Nachahmung ist die Schaltung nicht empfohlen und ich erspare euch deshalb die Details. Der FET wird mit der Schaltung auch nicht ganz ausgesteuert, da das Gate nicht über den Steuertransistor mit 6,1V, sondern nur mit 5V versorgt wird. Deshalb läuft der Motor auch gerade nur mit etwa 5V. Für mich reicht es aber als Übergang, um meine Schreib-/Leseversuche weiter zu machen, was sich nun eher als tricky herausgestellt hat.

    Mit den vergrößerten Pulslängen waren jetzt zwar Dauerfolgen von nur Einsen und nur Nullen sauber wieder lesbar, bei Mustern wie 1010... oder 11001100... gingen aber immer wieder Nullen verloren. Ganz verstehen will ich es gerade noch nicht, da eigentlich alle Timings nun unkritisch sein sollten. Eventuell hab ich da aber auch nur einen Knoten im Hirn und irgendwo Mist programmiert. Ich setzte mich heute abend wieder dran und hoffe dann, mal einen Fortschritt zu erzielen.


    Edit: Übrigens Danke an Toast_r . Ich wusste zwar mal, wofür die kleine Welle am Tonkopf gut ist, aber da liegt halt nun der Nebel der Zeit drüber. Ausserdem war mir der Name des kleinen Helferleins völlig unbekannt. Somit hab ich schon wieder was dazu gelernt. :):thumbup:

  • Hallo Jörg,

    kann es mit dieser Modifikation vielleicht besser laufen? Im pdf 'Service Manual Datasette Model C2N-1530-1531 Preliminary' steht am Ende folgender Verbesserungsvorschlag, wenn Noise Interferences bei neueren Modellen fehlerhaftes Laden verursachen.

  • Ich werde mal schauen, wie mein Datasetten Clone aufgebaut ist und ob dieser Patch möglich ist. Ich glaube aber, dass es nicht an irgendwelchen Störsignalen liegt, da auf dem Oszi ein sehr klarer Signalverlauf, ohne Glitches zu sehen ist. Allerdings sind halt doch die High/Low Phasen mal hier, mal dort ein paar Mikrosekunden länger oder kürzer. Ich muss also vermutlich dort den Fehler suchen.


    Mir ist übrigens aufgefallen, dass nach mehrmaligen hin und her spulen der Kassette die Schankungen nicht mehr so stark sind, also hat eventuell doch das Band ein wenig geklebt. Nichts desto trotz verliere ich immer noch Nullen. :cry2:

    Ich mach jetzt erst mal bis heute Abend nichts mehr und versuche mal den Kopf frei zu bekommen. Soll ja manchmal helfen... :nixwiss:

  • Es ist bei magnetischer Aufzeichnung ganz normal, dass sich Flanken annähern oder entfernen, je nach dem Abstand der Flanken davor und dahinter.

    Dies mal grundsätzlich.

    Der Effekt wird logischerweise umso schlimmer, je höher die Schreibdichte wird.

    Man gleicht dies überlicherweise beim Schreiben aus: "Write Precompensation"

  • Wieviel Baud fährst du denn, spezifiziert sind 300 Baud

    Mit den jetzigen Aufzeichnungsdichte wären es durchschnittlich etwa 2400 Bit/s also 300 Byte/s.

    Beim Commodore Aufzeichnungsverfahren war Sicherheit vor Schnelligkeit gegeben. Da wurden dann eben auch alle Daten doppelt geschrieben, um eine Fehlerkorrektur vornehmen zu können. Ausserdem bestand ein aufgezeichnetes Bit jeweils aus einem kurzen und einem langen Impuls (0 K-L, 1 L-K). Deshalb war auch die Aufzeichnungsdichte nicht sehr hoch. Pro Bit 864 uS, was dann etwa 144 Byte/s wären. Letzlich kam man effektiv wohl auf weniger als die Hälfte. Das können aber die Commodore Profis hier sicherlich besser beantworten.


    Übrigens: Wie war das beim C64 eigentlich, wenn man vor oder zurück spulen wollte? Da muss ja der Motor auch erstmal vom Rechner eingeschaltet werden. Oder lief da dann doch der Motor dauernd? Ich stehe ja gerade vor dem selben Problem.

  • Ab Seite 52,53 und 59 im Data-Becker "Cassettenbuch zu Commodore 64 und VC-20" stehen die genauen Timings beim Speichern bzw. dass der Motor automatisch gestartet/gestoppt wird (so wie ich es verstehe).


    Edit: jetzt das komplette Dokument

  • Übrigens: Wie war das beim C64 eigentlich, wenn man vor oder zurück spulen wollte? Da muss ja der Motor auch erstmal vom Rechner eingeschaltet werden. Oder lief da dann doch der Motor dauernd? Ich stehe ja gerade vor dem selben Problem.

    nein,.. man konnte immer jede Zeit spulen...

    es gab aber "Spiele" die beim "Auto-Load" den Motor nicht abgeschaltet hatten.. dann lief der "ausgekuppelte" Motor

    ständig weiter, daher hatte ich mir 1985 einen "Schalter" extra ein gebaut...

    Meine Sammlung: CBM4032,CBM610,VIC20, C16, Cplus, C64, SX64,C128D, LT286-C, Amiga 1000, C= PC1+10+20+40

  • Mal kurzer "Zwischenruf".
    Meine Junior ][ Hauptplatine konnte heute erfolgreich zum Laufen gebracht werden.
    Hex Anzeige und Tastatur funktioniert.

    Gibt es eine Quick Anleitung, wie ich den PC mit Terminalemulation (Hyperterminal) am Junior zum Laufen bekomme.
    1. wie muss das Nullmodem Kabel verdrahtet sein 25pol <--> 9pol
    2. best geeignete Baudrate z.B. 9600,8,n,1 <-- wäre das so geeignet, oder schneller, wo ist die Grenze für XModem.
    3. Jumper / Schalter Stellung am Junior.

    Sorry, ich bin leider im Moment etwas zu faul, um den ganzen Thread durch zu gehen.

    mfG. Klaus Loy

  • Hallo Klaus,

    - auf dem Mäuseklavier sollte erst mal nur $80 auf ON stehen.

    - Expansion zur Backplane hin jumpern.

    - SPK-ENBL jumpern,

    - Speaker natürlich nicht jumpern sonst verursachst du einen Kurzschluss. Das mag der Transistor nicht.

    - der serielle Port sollte auf 19200 Baud, Data 8 Bit, Parity None,Stop Bits 1, Flow Control None stehen. 9600 Baud laufen aber auch.

    - Hyperterm läuft bei mir nicht mehr unter Windows 10. Oder ich müßte die jetzt kostenpflichtige Nachfolgeversion kaufen. Daher habe ich TeraTerm laufen. Bei mir in der Version 4.105. Hier muß nach der Installation in der .ini-Datei eine Änderung vorgenommen werden.

    Unter der Sparte XMODEM option (checksum/crc/1k) muß XmodemOpt=crc eingestellt werden.

    - du brauchst ein serielles Kabel mit gekreuztem TxD und RxD.

    25pol - 9-pol

    PIN 2 - PIN 3

    PIN 3 - PIN 2

    PIN 7 - PIN 5

    - der Step-Schalter sollte so stehen, dass die LED aus ist.

    - der Display Schalter auf on.

    Das müßte alles wichtige sein.


    Gruß,

    Norbert

    __________________________________

    Bitte Diskette 4 von 9 einlegen!

    Edited once, last by NorbertJ: Ergänzung ().

  • Hallo NorbertJ,
    danke für die gute uznd kompackte Zusammenfassung.
    Das werde ich heute gleich mal probieren.

    Das gute alte Hypterterminal, hat mich durch Win7 bis zu Win190 begleitet.
    Ich nutze es noch immer, wenn auch selten.
    Für einen ersten test werde ich es wohl her nehmen.
    Ansonsten halt z.B. HTerm, oder Putty.


    mfG. Klaus Loy

  • So, jetzt bin ich nach 24 Stunden Totalausfall des Vodafone Anschlusses wieder online. Danke an Norbert, das du die Fragen von Klaus beantwortet hast. Ich hatte gestern schon alles fertig geschrieben und auf Antworten geklickt, da ging dann aber schon nichts mehr. 15 Minuten vorher hatte ich noch den sehr interessanten Elektor Artikel von Klaus heruntergeladen, in dem es um einen Floppy Controller für den Junior Computer geht.


    Übrigens kann man, solange man kein IO-Board angeschlossen hat, alle "EXT_RAM_SEL" DIP-Switches($80, $A0, $C0) auf ON stellen um das ganze zusätzliche RAM adressieren zu können. Mit IO

    -Board stimmt Norberts Aussage natürlich.


    nein,.. man konnte immer jede Zeit spulen...

    Das ist jetzt ja mal interessant. Dann muss ja bei den Commodore Computern dauerhaft die Sense Leitung abgefragt werden, die den Zustand der Datasetten-Tasten (gedrückt/nicht gedrückt) wiedergibt. Ansonsten müsste der Motor ja dauerhaft laufen. Ich werd mich mal genauer mit dem Thema geschäftigen...



    Bei der Datasetten Lesethematik bin ich, nachdem ich mal Taktzyklen gezählt habe, darauf gekommen, dass einfach mein Testprogramm zu viel Gedöhns zwischendrin macht, und deshalb im schlechtesten Fall mal einfach einen Flankenübergang nicht mitbekommt.

    Ich werde das ganze jetzt mal - statt per Polling - mit einer Interrupt Routine machen. Das wollte ich eigentlich vermeiden, da man ja mit einem Druck auf die ST (NMI) Taste jederzeit alle Programmeroutinen unterbrechen kann und ich dann in der NMI Routine Aufwand betreiben muss, um eventuelle Aufräumarbeiten (IRQ Routine wieder ausklinken u.ä) auszuführen. Wie auch immer, ich denke, dass ich damit das Problem der verschluckten Nullen löse.

  • Er spricht mit mir, ...


    Also, ja es geht.
    Junior hängt am Hypterterminal dran.
    Zunächst mit einem USB Wandler mit Prolific Chip, da klappte die Baurate überhaupt nicht.
    Jetzt hab ich einen anderen Adapter da funktioniert es.

    Ich verstehe leider noch nicht ganz wie die Baudratenerkennung funktioniert, ...
    Scheinbar muss man ein paarmal Reset drück, bis die Monitor Meldung richtig kommt.
    Und dann passt es.

    Und dann beim nächsten reset geht das wieder los, ...
    Ich kenne das so, Reset, dann drückt man am Terminal ein bestimmte Taste, und die Baudrate wird erkannt.
    So geht das aber ja mit einerm UART oder ACIA nicht.

    Bitte bei Gelegenheit um Erklärung.

    mfG. Klaus Loy