Posts by 2ee

    So, jetzt muss ich mich dann doch mal wieder melden, wenn sich sogar schon Norbert sorgen macht, weil man von mir nichts mehr zu hören bekommt.

    Bei mir gibt es gerade ziemlich viel auf diversen anderen Baustellen zu tun, deshalb ist jetzt der Junior von mir kurzfristig etwas stiefmütterlich behandelt worden.


    Trotzdem mal eine kleine Zwischenbilanz:


    Für die PS/2 Tastatur nutze ich jetzt die Arduino Code Library "PS2Keyboard" von Christian Weichel. Alle anderen Bibliotheken waren viel zu Umständlich und haben bei mir zum Teil auch nicht richtig funktioniert. Allerdings kann besagte Library von Haus aus keine Control Codes und CAPSLOCK wird auch nicht unterstützt. Ich habe deshalb den Code entsprechend geändert, um wenigstens auf dem Stand meiner normalen ASCII Tastatur zu sein. Ein zweites Manko ist, dass nur eine unidirektionale Verbindung zur Tastatur aufgebaut wird. Deshalb können die LEDs nicht angesprochen werden. Das habe ich jetzt noch nicht gefixed, da man dazu die Interrupt Routine des gegebenen Codes auch überarbeiten müsste. Ich werde das wohl zu einem späteren Zeitpunkt mal anpassen, aber zunächst reicht mir der jetztige Status Quo.

    Wann ich nun dazu komme, die PS/2 Tastatur im Junior vollständig zu unterstützen, kann ich noch nicht sagen, aber ich werde versuchen die nächsten Tage immer mal wieder ein wenig daran zu arbeiten.


    Mittlerweile sind die 64 pol. High Density DIL Sockel eingetroffen. Wie von mir schon befürchtet, passen die unter dem Sockel angeordneten Widerstände leider nicht ohne eine der beiden Streben im Sockel weg zu knippsen.



    Für die nächste Platine werden die Widerstände in die Mitte wandern, wo sie schon zu Beginn hingehört hätten. Andere Lösungen für die bestehende Platine wären, hier 0,4W Widerstände mit einer Länge von 3,4mm und einem Durchmesser von 1,9mm zu nehmen, oder die Widerstände einfach auf die Lötseite zu packen.

    Die 21,x MHz Quarze sind auch endlich aus China bei mir angekommen. die muss ich bloss noch vorher auf Funktion testen, bevor ich da einen einlöte. Better save than sorry...


    Parallel hatte ich jetzt immer mal wieder ein paar Bauteile auf die neue IO Platine gelötet. Eventuell bekomme ich die über das Wochenende fertig bestückt und kann dann mal schauen, ob sie funktioniert. Wenn ja, könnte ich wenigstens schon mal diese Platine an alle versenden, die da schon länger drauf warten. Tut mir leid.


    Beim DOS hatte ich schon vor ein paar Wochen den Befehlsinterpreter eingebaut und ein paar kleine Befehle wie ECHO und CLS implementiert.



    DIR muss noch ein wenig warten, siehe oben...


    So weit erst mal die letzten Updates. Ich melde mich bald möglichst wieder.

    Hallo Jörg... Wau !! haste ich garnicht mitbekommen... und du hast selbst die "Frontplatte" selbst bedruckt ??


    und dein VideoTeil auch selbst gemacht ? oder von David. ??

    auf dem kleinen BUS-Board.. was hängt da am "Flachbandkabel"... ? auch schon Floppy-Controller ?

    Die Frontplatten hab ich in KiCAD erstellt und bei JLCPCB als Platinen machen lassen. Schwarzer Lötstopplack und unten das Altair 8800 Badge einfach ohne LST und verzinnt. Das Logo hatte ich mit Illustrator so gut wie möglich selber erstellt. Das schlimmste waren die gruseligen X.tel Inch Bemaßungen für die Bohrungen...

    Bei den Bedienpanel Platinen hatte ich damals noch alles mit Transistoren gemacht, da würde ich heute auch eher Treiber-ICs nehmen um den Lötaufwand zu reduzieren.

    Der Videoadapter auf dem Bild, ist das ASCII Video Terminal von Geoff Graham, der auch den Maximite Basic Computer gemacht hat und auf der Backplane hängt tatsächlich David Hansels Altair Floppy Controller. Seriell- und Parallel-Karten hab ich auch noch.

    Apropos "Mini"..


    hat sonst noch jemand mit dem Altair 8800 "Clone" und Diskettenlaufwerk angefangen... ?

    Hallo Micha, ich hatte vor ein paar Jahren eigene Platinen samt Frontpanel dafür designed. Hab ich auch schon mal hier gepostet. Da hab ich auch noch welche übrig. Damals gab es noch keinen "professionellen" Kit-Anbieter für David Hansels Altair 8800 Clone auf Arduino Basis. Deshalb hatte ich das dann einfach selber gemacht, um keine frei fliegende Verdrahtung und eine Pappfront zu haben. Der Rechner ist einfach ein toller Simulator und CP/M damit von Diskette zu laden macht einfach Spass. Und David entwickelt auch immer noch neue Steckkarten.


     


     

    Hallo Sebastian,


    zu deinen Fragen:


    a.) Der 8255 Port B als Input wird von außen auf 5V gelegt und wenn der von 5V auf 0V runtergeht am IC, weil am Joystick was gedrückt wird, wird das interne Bit "1" und signalisiert dann, daß was passiert ist. Korrekt ?

    Ich hab in meiner Beschreibung von oben - absichtlich - unterschlagen, dass ich von invertierter Logik ausgegangen bin. Das macht sonst alles nur noch komplizierter. Also, wenn z.B. ein Joystick Button gedrückt wird, liegt ein Low Signal am Eingangspin des 8255 und es wird an dieser Stelle des Ports intern eine "0" gelesen. Nicht gedrückt heißt also, eine "1" wird gelesen. Ansonsten ist ist alles so, wie von dir angenommen.


    b.) Damit dann kein Kurzschluß zwischen 5V und GND entsteht (bei PressOnJoy), werden diese Widerstandsketten dazwischengeschaltet. Diese haben 4,7 kOhm (vermutlich für jeden Widerstand bzw. jede Leitung). Warum genau dieser Wert ? Würden es 330Ohm auch tun oder 10kOhm ?

    Die Widerstände liegen nicht in der Leitung, sondern sind Pullup Widerstände. Da bei nicht gedrückten schaltern die Eingänge ja offen in der Luft hängen, hat man keinen festgelegten Signalpegel LOW oder HIGH. Die Pullups legen die offenen Eingänge also auf High. Das ist eine Vorsichtsmaßnahme, da ich tatsächlich nicht weiß, ob der 8255 Eingänge intern nicht bereits auf High legt. Bei TTLs ist es im Normalfall so, das ein offener Eingang einen High-Pegel liefert. Beim ATMega328 kann man einen IO-Pin, der als Eingang geschaltet wurde, den Wert HIGH geben, womit ein interner Pullup Widerstand geschaltet wird. Wird der Eingang auf LOW gelegt, ist er ein offener Ausgang ohne Widerstand. Evtl. kann man die Widerstandsarrays am 8255 auch weglassen. Das muss ich noch prüfen.

    4K7 Ohm Widerstände sind ein guter Mittelwert. Ob er der Beste ist, kommt auf den Baustein an, an dem er hängt. Manchmal gibt es in den Datenblättern bereits optimierte Vorgaben, wie z.B. am Floppy Controller. Da hängen an den Open-Collector Ausgängen 150 Ohm Widerstände, die im Datenblatt so angegeben sind. Da fließt aber natürlich ein konstant hoher Strom drüber, was für diesen speziellen Fall auch so sein muss. Für einen normalen Pullup sind 1K bis 10K eine übliche Wahl. Bei 330Ohm fließt einfach zu viel Ruhestrom. Bitte nagle mich aber nicht darauf fest, was der Beste Wert wäre. Eventuell haben da die Vollprofientwickler ganz andere Erfahrungen. Mein Tätigkeitsgebiet liegt hautpstächlich in der Software Entwicklung, Hardwaredesign ist nur mein ziemlich bescheidenes Hobby.


    c.) Der Joystick wird bestimmt immer mal an-/abgestöpselt. Wäre es evtl sinnvoll da noch Dioden in jede Leitung direkt vor dem IC einzubauen (oder braucht man das gar nicht, weil der 8255 sowas schon "intern" hat ? (man will den Chip ja evtl auch nicht gleich zerstören, wenn man mal den Joysitck einsteckt)

    Wenn der Joystick in Null-Stellung ist und auch keine Schalter gedrückt sind, fließt ja nirgendwo Strom und man muss sich da keine Gedanken machen. Der Joystick ist ansich ja ein vollständig passives Gerät (aktiv wird es erst durch den Bediener 8o ). Ansonsten sollte selbst bei einem gedrückten Schalter beim Ein-Ausstecken nicht viel passieren, da dann ja einfach Masse angelegt wird und keine Kondensatoren oder Spulen ins Spiel kommen.


    d.) Wäre es (eher Vorschlag als Frage) nicht evtl sogar sinnvoll, den Pin PB7 zumindest bis zum Joysickport zu ziehen und genauso wie die anderen (PB0 bis PB6) zu beschalten. Dann könnte man z.B. mit einem Jumper festlegen, ob an Pin 7 (5V für Joystick) ein weiteres Bit für Input da ist oder eben die 5V (wenn eine Joystick dran hängt) rausgehen. Das wäre dann quasi ein weiterer halbwegs vollwertiger 8Bit Eingangskanal, der "generischer" und auch für ganz andere Sachen (Blumentopfwasserstand, 8bit ASCII Keyboard o.ä.) benutzt werden könnte.

    PB7 kann in dem von mir genutzten Modus 1 nicht als IO Pin eingesetzt werden. Er ist in diesem Modus für Port A als Interrupt Ausgang für ein Handshake vorgesehen und kann auch nicht anders genutzt werden. Ich brauche aber von den drei Handshake Leitungen STROBE (Eingang), IBF = Input Buffer Full (Ausgang) und INT (Ausgang) nur die beiden ersten. Damit wird die Komunikation zwischen 8255 und ATMega gesteuert. Sonst weiß der ATMega ja nicht, wann er aufhören soll Tastaturdaten zu senden. INT liegt also einfach ungenutzt und unbrauchbar rum.

    Die Aufteilung des Port C bei den verschiedenen Modis des 8255 sind zum Teil etwas verwirrend, wenn man das zum ersten mal sieht, aber doch recht flexibel. Tatsache ist, es steht kein freier Pin für irgendwelche weiteren Funktionen am 8255 mehr zur Verfügung. Ich hätte da auch noch den einen oder anderen gerne gehabt.


    Hier mal das Datenblatt des PIO Bausteins, für die genaue Erörterung. Auf Seite 3-110 (Seite 10 im PDF) ist die Beschaltung des Port C im Modus 1 beschrieben. Da Kombinationen möglich sind, ist ein vollständiges Lesen des Datenblattes aber sinnvoll.

    Ich werde die Ascii-Tastatur bauen, damit ich den Elekterminal complett machen kann.


    Übrigens bei der Tastatur fällt mir gerade ein, dass ich vor ein paar Tagen einen Fehler im Code gefunden habe. Bei eingeschaltetem CAPS LOCK wird mit SHIFT - 1 kein @ ausgegeben sondern ein ' .

    Der Fehler befindet sich in der Routine


    uint8_t GetASCII(uint8_t code)


    Hier muss in der Zeile


    if (capsLock == 1 && asciiCode >= 64 && asciiCode <= 90) asciiCode += 32;


    der Wert 64 gegen 65 getauscht werden.


    Ich hab gerade mal eine neue Firmware für die Keyboard Layouts DE und US compiliert. In der ZIP liegt auch das Bild "JC2 Keyboard Fuse Settings.PNG". Stellt einfach auf der Config Seite eurer Brenner Software die Fuses so ein wie auf dem Bild.

    Auch die älteren Rev. 1 Platinen laufen damit. Der externe 12MHz Quarz wird damit obsolet, es wird der interne 8MHz Oszillator verwendet.


    Wenn ich mal viiiiiiiiel Zeit haben sollte, baue ich die Firmware noch so um, dass über die beiden Jumper P0/P1 das Tastaturlayout umgestellt werden kann, dann braucht man nicht für jedes Layout eine eigene Firmware.

    ... ich hatte den Thread schon gelesen, als es ihn noch gar nicht gab.

    Stimmt, ohne klaly gäbe es diesen Thread nämlich garnicht. Er war der jenige, der an der Zündschnur der Stange Dynamid rumgezündelt hat :D


    Ich möchte die ASCII-Tastatur mit dem ursprünglichen (originalen) Elekterminal verwenden. Ist das möglich oder muss da etwas angepasst werden?

    Hallo audiokit_nl , die ASCII Tastatur kannst du als 7 Bit (D0...D6) Tastatur überall anschließen, wo eine Standard 7 Bit ASCII Tastatur funktioniert. D7 am Anschluss nutzt der Junior ][ speziell, sollte am Elekterminal also nicht angeschlossen werden, stattdessen müsste am Terminal ein evtl. achtes Bit D7 auf LOW gelegt werden. Die Pinbelegung ist die selbe, wie für den Apple 1. Hier musst du also einen Adapter basteln.


    Die Tastenkombination SHIFT-CTRL-DEL löst die /RESET Leitung aus. Die HOME Taste wiederum CLEAR_SCREEN.


    ----------------------


    Nochmals zu ThoralfAsmussen Idee:

    Man nehme ein EPROM. Jede Adresse wird mit dem zu ihrem Bitwert gehörigen BCD Muster beschrieben und fertig ist der Wandler.

    Genau das ist der 74LS185 auch, ein speziell gebranntes 74LS88 PROM. Problem: Beide Bausteine sind leider schon ewig nicht mehr erhältlich.


    Zu BCD: Bit einem Binär zu BCD Decoder kann ich natürlich die Daten nicht komprimieren. Im Gegenteil, du bläst die Anzahl der Bits ja auf. Wie der Name ja schon sagt ist BCD = Binary Coded Decimal. D.h. bis dez. 9 - also B00001001 - sind Binary und BCD Zahlen identisch, brauchen also max. vier Bit. Ab dez. 10 - B00001010 - braucht BCD aber bereits 5 Bit, da dann als B0001 0000 codiert (ich hab extra mal die Leerstelle eingefügt, um die BCD Stellen nochmals zu verdeutlichen. Bei den am Joystickport benutzten 7 Leitungen (Up, Down, Left, Right, Button 0, Button 1, Button 2) würden BCD Codiert schon 3 Dezimalstellen, also 12 Bit anfallen, statt der 7 jetzt genutzten Bits (also B0001 0010 0111 statt B01111111).


    Die 7 Leitungen sind auch nicht redundant. Man könnte ja auf die Idee kommen, Up/Down und Left/Right jeweils zu einer Leitung zusammenzufassen und dann Left = 0 und Right = 1 als Signal zu übermitteln. Dann gibt es aber keine Nullstellung mehr. Ich brauche also genau diese 7 Signalleitungen, sonst nimmt die Entropie der Datenübermittlung zu, sprich es gibt unbestimmte Werte.


    Natürlich gibt es Kombinationen, die nicht vorkommen können. Wie du ja richtig gesagt hast schließen sich gleichzeitig Left und Right, sowie Up und Down aus. Aber: Das sind dann für die Jostick Positionen drei ungültige Werte (Up = Down, Left <> Right), (Up <> Down, Left = Right) und (Up = Down, Left = Right). Mit den möglichen 8 Button Kombinationen (drei Buttons = 2^3 = 8 ) ergibt das also 3*8 = 24 ungültige Signalkombinationen. Bei 7 Bit wären das also immer noch 2^7 - 24 = 104 GÜLTIGE kombinatorische Stellungen. Dazu brauchst du ZWINGEND also immernoch 7 Bit, da 2^6 ja nur noch 64 Möglichkeiten zulassen würde. Eine neue Codierung mit den nur gültigen Werten ist zwar möglich, aber nicht Sinnvoll, weil der Rechner das dann ja erst wieder decodieren muss. So wie es jetzt ist kann ich einfach ein gesetztes Bit 0 (PB0 = 1) als "Joystick Position Hoch" interpretieren, da jedes gesetzte Bit eine Signalleitung repräsentiert. Bei einer Kodierung müsste ich aber eventuell zwei oder mehr Bits dafür untersuchen.


    Die einzige Möglichkeit, das Signal PARALLEL einzudampfen und nicht die kombinatorische Logik zu verletzen ist die von mir weiter oben beschriebene Abfrage der Signale über einen 8 zu 3 Encoder (oder auch 1 aus 8 Selektor). Hier werden die einzelnen Signale NACHEINANDER abgefragt, also jedes Signal über die drei Adressleitungen (2^3 = 8 ) selektiert und an Q, bzw. /Q der aktuelle Wert (0 oder 1, also 2^1 = 2 mögliche Werte ) abgefragt. Damit habe ich wieder 2^(2^3) = 2^8 = 256 Kombinationen.

    Die zweite Alternative wäre, die 7 Signalleitungen parallel in ein Schieberegister zu laden und dann SERIELL einzutakten. Dann brauche ich nur noch zwei Leitungen, nämlich LOAD und CLK. Letztlich sogar die bessere Lösung, da das Einlesen genauso schnell wie mit dem 8 zu 3 Encoder funktioniert und auch nicht mehr Programmieraufwand beschert.


    Ich hoffe, ich konnte das einigermaßen verständlich erklären, warum das mit deiner BCD Idee nicht funktioniert. Hat mich aber dennoch zum Nachdenken über Alternativen zur bisherigen Schaltung animiert. :):thumbup:

    Hallo ThoralfAsmussen ,

    unten der aktuelle Plan als PDF. Ich hab jetzt noch am ATMega den Port Pin PD0 als Interrupt Request auf das Lese Register (U2 Pin 4) gelegt. Nach Auslösen des Watch Dog Interrupts geht dan IREQ auf High, so dass die Interrupt Routine die Quelle der Unterbrechung erfragen kann.


    Mir war noch was zum Joystick eingefallen. Da müßte man aber gucken, ob das überhaupt geht. Die Idee ging so in die Richtung, daß man da ja noch genug Anschlüsse frei hat (dort an dem IC wo der Joystick anlandet), um einen zweiten Port bereitzustellen. Man müßte dafür aber die Joystickleitung BCD codieren - also von 6 Einzelleitungen auf 3 "eindampfen" (2^3 =8), bevor sie in den IO Chip gehen. Der Software dürfte es ja relativ egal sein, ob sie da jetzt Zahlen oder Einzelbits abfragt.

    Ursprünglich wollte ich tatsächlich zwei Joystick Ports drauf machen. Ich hatte dann aber leider keinen Portanschluss für die Umschaltung mehr frei (der nicht angeschlossene Pin PC3 des 8255 ist im Modus 1 als IntA Ausgang geschaltet). Sonst hätte man zwei 74LS157 2 zu 1 Selektoren nehmen können.


    Nach deiner Idee müsste ich zwei 8 zu 1 Datenselektor (z.B. den 74LS251) nehmen, an dem ich die 6 Eingangssignal nacheinander über die Selektor Adressleitungen abfrage. Dann könnte man mit insgesamt 5 Anschlüssen die beiden Joystick Ports abfragen (A0,A1,A2 für die Auswahl einer der 6 Joystick Leitung und jeweils Q (1,2) als Biteingang der gerade aktuerll abgefragten Joystickleitungen. Eigentlich eine gute Idee, aber leider lässt sich der 8255 nicht so nutzen, dass ich frei wählbare Ein- und Ausgänge habe. Das ginge an einer 6522. Der 8255 kann immer nur ganze 8 Bit, bzw. 4 Bit Ports als Ein- oder Ausgänge schalten. Alles Umstellen, würde heißen, das die jetzigen Platinen mit den neuen nicht mehr kompatibel wären. Deshalb lass ich das lieber mal.

    Eine andere Möglichkeit einen zweiten Joystickanschluss zu erhalten, wäre, die User IO Leitungen der 6522 VIA auf der IO Platine zu nutzen.


    Der nächste Rechner hat dann auf alle Fälle zwei Anschlüsse drauf. Da müsst ihr euch aber noch ein wenig gedulden. :)


    Edit: Hmmm, man könnte natürlich auch die Select Leitung an U21 doppelt nutzen...

    So, jetzt musste ich doch noch ein paar Änderungen auf der Platine vornehmen, die sich aber mit wenigen Handgriffen patchen lassen.


    Zuerst hab ich natürlich vergessen am Joystick Port Pullup Widerstände anzubringen. Die kann man aber als Widerstandsarray leicht nachrüsten und das Problem ist dann auch auf der Rev. 1a Platine behoben.


    Der Zweite Punkt war die Auslösung des Motor On/Off Watchdog Timers. Das ganze bisher von mir erdachte Prozedere war mir dann doch zu Umständlich.


    Jetzt läuft es so: Die beiden Ausgänge des FDC /MO1 und /MO2, welche die Motoren der Laufwerke schalten, haben jetzt einfach direkt Verbindungen mit den /MOTOR1 und /MOTOR2 Ausgängen des ATMega328.



    Diese waren vorher nur dazu da, den aktuellen Motorstatus (1 Motor an / 0 Motor aus) über den IC U2 anzuzeigen. Jetzt ist das ganze invertiert, spiegelt also den echten Status der Leitungen wieder und die ATMega Ausgänge /MOTOR1 und /MOTOR2 hängen direkt am Floppyanschluss und können nun die Laufwerksmotoren direkt ein- und ausschalten. Das geht, weil am FDC /MO1 und /MO2 Open Collector Ausgänge sind.


    Der ATMega328 hat eigentlich keine O.C. Ausgänge. Ich hab das hier genauso gemacht, wie am I2C Port der IO-Platine. /MOTOR1 und /MOTOR2 sind als Eingänge geschaltet und somit hochohmig. Wenn ein Motor geschaltet werden soll, wird dann der entsprechende Pin auf LOW und als Ausgang gesetzt.

    Dieser bleibt dann für 3 Sekunden auf LOW.


    Gestartet wird das durch einfaches Lesen oder Schreiben der Adressen BASIS+4 ... BASIS+11, was dem Microcontroller über die Eingänge DA0, DA1 und DA2, sowie DSTRB ein Steuerwort übergibt. Also z.B. LDA $804 setzt DA0...DA2 auf 000, LDA $805 auf 001 usw.Das Steuerwort wird im GAL gelatcht, weshalb ich Pin 1 (CLK) noch mit dem Register Select Pin 2 verbinden musste. Das geht natürlich auf der Platine einfach.


    Man kann dem Microcontroller also 8 Funktionen übergeben. 000 und 001 stehen für MOTOR1 und MOTOR2 für 3 Sekunden anschalten. D.h. am FDC muss das Motor Register nun nicht mehr entsprechend gesetzt werden, man könnte aber darüber die Motoren auch dauerhaft einschalten.


    Die restlichen der möglichen 8 Steuerwort Funktionen werde ich wohl nutzen, um der PS/2 Keyboard Routine zu sagen, welches Tastaturlayout sie nutzen soll. Die von mir genutzte Code Library kann US, UK, FR, SP, IT und DE, was also genau passen würde. Wer etwas anderes braucht muss sich da einfach nur den Code ändern. Eventuell streicht man auch eine der Layouttabellen und gibt bei Funktion 7 dann die direkten Scan Codes der Tastatur aus. Dann könnte man über ein Betriebssystem auch beliebige Layouttabellen bereitstellen.


    Wärend der 3 Sekunden LOW Phase von /MOTOR1 oder /MOTOR2 kann die jeweilige Leitung jederzeit nachgetriggert werden, so dass der Motor so lange läuft, wie eben auf die Floppy-Laufwerke zugegriffen wird.


    Sind beide Motor Timer abgelaufen, wird zum Abschluss ein IRQ ausgelöst, womit eine in einer Pollingschleife hängende Lese- oder Schreibroutine wieder befreit werden kann. Das ist dann z.B. sinnvoll, wenn im Laufwerk keine Diskette eingelegt ist. Ohne einen zusätzlichen Schleifenzähler würde die CPU dort ewig hängen. Das kostet aber wieder Zeit, welche ich wegen des engen Timings nicht wirklich habe. Der Interrupt vereinfacht das wesentlich.


    So weit erst mal die letzten Fortschritte.

    Hallo Dietrich,


    ja die Disketten bekommen FAT12 in meinem DOS. Aber letztlich kann man natürlich auch jedes andere Format mit seinem eigenen Bootloader unterstützen.

    Hallo Klaus,


    welchen 4050 Chip nimmst du da ?
    Gibt es da welche die mit 3,3V arbeiten können ?

    der CD4050BC lässt sich an VDD zwischen 3V und 15V betreiben (eigentlich sogar -0,5V - 18V) und verträgt an den Eingängen die gleichen Spannungen. Der Eingangs High Pegel liegt bei typ. 2,75V, womit er wunderbar im 3,3V als auch 5V TTL Bereich liegt.



    Vorhin hab ich mal die ersten Bausteinchen auf den Floppy Controller bestückt, mit dem Ergebnis, dass sich garnichts tat 8| . Den ersten (peinlichen) Fehler konnte ich dann recht schnell identifizieren: Der FDC Baustein hatte keinen Takt am CLK1 Eingang. Ich hatte im Schaltplan den Oszilator per zwei mal Drehen ausgerichtet, statt das Bauteil zu spiegeln. Somit war GND des Oszillators oben und VCC unten und GND an +5V und VCC an Masse angeschlossen :fp: .

    Den Oszillator wieder von der Platine zu bekommen hat sich als das schwierigste rausgestellt. Spoiler: ging nicht zerstörungsfrei.

    Als fix lässt sich der Osillator einfach um 180 Grad gedreht einbauen und Pin 8 (Clk Out) wird auf der Platine mit einem Patchkäbelchen mit Pin 1 (N.C.) verbunden.

    Neuere Platinen werden den Fehler dann natürlich nicht mehr haben.


    Leider lief der Controller nach dem Fix aber immer noch nicht. :ball:


    Als ich dann schon zum Logic Analyzer greifen wollte, hab ich dann einfach als letzten Versuch mal die Reset Leitung am FDC gemessen. Und siehe da, die war hochohmig!!!

    Die Invertierung des /RES Signals vom Junior in des RST Signal des GM82C765 ist in den zweiten GAL U4 ausgelagert. Die Funktion des ersten GAL U3 hatte ich gleich zu Beginn vollständig getestet, die des zweiten aber nicht. Als ich den GAL dann nochmal programmieren wollte, brachte der Programmer eine Kurzschlussabschalt Meldung, was er beim ersten Programmiervorgang nicht angezeigt hatte. Der GAL war also vollständig tot.


    Mit einem neuen GAL funktioniert jetzt alles zu mindest so weit, wie es die Breadboard Schaltung zuvor auch schon getan hatte. :tanz:

    Morgen setzte ich mich mal an die ATMega Programmierung für das PS/2 Keyboard Interface.

    Heute sind die Platinen eingetrudelt.

    Den Floppy-/Grafik-Controller hab ich mal so weit wie möglich schon bestückt. Den 64 pol. Sockel mit 1,77mm Pinabstand muss ich noch bestellen. Der wird dann aber in der einfachen Ausführung sein, der gedrehte Sockel kostet beim einzigen Anbieter den ich gefunden habe 12,50€ - Wucher !!! Die Billigausführung liegt dann bei 2,50€. Ich würde dann einfach für alle, die eine Controller Platine haben wollten, gleich einen Sockel mitbestellen.

    Die Quarze sind leider auch noch nicht aus CN eingetroffen. Dafür hat mir gestern Hobi eine Stange 8255er mitgebracht, so dass da wenigstens keine mehr bestellt werden müssen. Nächste Woche werde ich mal versuchen, den Floppy Controller von der Platine aus in Gang zu bringen.



    Die neuen IO-Platinen sind natürlich auch da. Ich hab als erstes mal den SD-Karten Sockel aufgelötet, den ich bei Pollin bestellt hatte, um zu schauen, ob der Footprint den ich in KiCAD dafür neu erstellen musste auch passt. Tut er!



    Die Pegelanpassung für die SD-Karte hab ich nun über einen 4050 gestaltet, das war das einfachste. Beim SMD 3,3V Regler hab ich leider vergessen, den Wert mit aufrucken zu lassen (NCP1117-3,3), da steht jetzt erst mal nur U20. Das ist aber auch schon in KiCAD geändert. Die Motoransteuerung für die Datasette hab ich nun über einen TIP125 - seines Zeichens einfach nur ein Darlington Transistor - bewerkstelligt. Ansonsten haben sich hier nur Kleinigkeiten geändert.

    Den geänderte Schaltplan hab ich unten angehängt.


    Zwischenzeitlich konnte ich ja am DOS weiter arbeiten. Da gibt es dann nächste Woche mal die ersten Ergebnisse.


    Wünsch euch ein schönes Wochenende

    Ich hab jetzt am Sonntagabend je 5x neue IO-Platinen, Backplanes und Floppy-/Grafik-Controller Platinen bestellt.

    Die Floppy Karte wollte ich jetzt noch nicht in größerer Stückzahl bestellen, da ich ja noch nicht weiß, ob sich im Layout noch irgendwo der Fehlerteufel versteckt. Ich würde da dann erst nach erfolgreichen Tests nochmal welche bestellen, so dass jeder der sich jetzt gemeldet hatte eine bekommen kann.


    Die Bauteilbestellung mache ich auch erst, wenn klar ist, dass alles funktioniert. for(;;) hatte mir eine Anzahl CXA2075 und 21,47727 MHz Quarze aus seinem Bestand zugeschickt, die aber leider bisher nicht angekommen sind und wohl auch auf dem Postweg verschollen bleiben. Leider hat er von den Encodern nun auch keine mehr übrig, so dass ein zweiter Versuch mir welche zu schicken nicht mehr möglich ist. Ich bin aber zufälligerweise bei mir noch auf einen CXA2075 gestoßen, den ich erfolgreich von einer Platine löten konnte. Ich werde es mal mit diesem Bausteinchen dann ausprobieren. Von den Quarzen hatte ich ja bereits auch schon 10 Stück bestellt, fragt sich nur, wann die bei mir eintreffen. Die 4,4336 MHz Quarze gibt es zum Glück bei Reichelt, so dass eine lange Lieferzeit hier nicht besteht.


    Solange ich jetzt zum Warten verdammt bin, werde ich mir wohl mal wieder den DOS Code ansehen und dort ein wenig weiter programmieren.


    Apropos Betriebssystem. Dietrich ist mittlerweile ziemlich weit mit der CPM-65 Portierung gekommen. Ich konnte jedenfalls schon erfolgreich einige seiner Tools und auch fig-Forth ausprobieren





    Ich hoffe ich greife ihm da jetzt nicht zu weit voraus, zumal er gerade im Urlaub ist. Aber ich fand jetzt einfach mal, dass seine Arbeit mal wieder Erwähnung finden sollte :anbet: . Haupttester war übrigens nicht ich, sondern NorbertJ , dem da neben Dietrich das Hauptlob gebührt :):thumbup::thumbup: .


    Übrigens, weiß jemand, ob es bei fig-Forth normal ist, dass bei der Variablendeklaration so seltsame Messages geworfen werden, statt mit OK zu antworten?

    Dann wäre also ein 5er Satz IO-Boards schon mal weg. Ich bestelle dann auch gleich nochmal Backplanes, dann hat Marco alles zusammen.

    Ich werde Hobi mal fragen, ob er 5x 8255er für uns übrig hat, dann muss man die nicht aus China bestellen.


    Da ich ja nicht so firm bin mit all diesen benötigten Komponenten fand ich das KIT für den Junior ideal. Gibts so etwas auch für die IO Platine? Oder „nur“ eine Stückliste? Ich will damit sagen: Ich nehme alles was dazugehört ☺️

    NorbertJ hatte mich auch schon gefragt, ob ich für den Floppy-/Grafik-Controller wie bei der Tastatur ein Kit zusammenstelle. Das Kit für das Junior ][ Mainboard kam ja von mesch , der damals so lieb war und sich diesbezüglich angeboten hatte.

    Ich hoffe ihr seid mir nicht böse, wenn ich selber keine vollständigen Kits zur Verfügung stelle. Die Zusammenstellung der Tastaturbauteile hatte mich damals schon ziemlich gestresst, weil es ja doch auch familiär und beruflich noch genügend Anderes zu tun gibt. Bei der Bestellung der heiklen Bauteile bin ich aber jederzeit gerne bereit die dann auch im größeren Stil zu tätigen.

    Wenn an dem Teil mit der Datasette nochmal was geändert werden soll, wäre es evtl auch eine Idee, da eine DIN Buchse für Kassettenrecorder mit vorzusehen. Dafür gibt es in einer 64'er einen ganz einfachen Umbauvorschlag, der aus dem normalen Kassettenton was macht, womit der Rechner klarkommen sollte beim Einlesen.

    Auf der IO-Platine gibt es neben dem Datasetten Platinenstecker noch die Möglichkeit über J14 die gleichen Signale abzugreifen um dort dann noch eine wie auch immer geartete Schaltung zur Signalumsetzung von Standardkassettenrekordern anzuschließen. Diese kann dann auch auf dem Lochrasterfeld der IO-Platine aufgebaut werden. Ich glaube, das ist die individuellste Lösung.


    Ansonsten wollte ich noch was anregen: ist mal wieder so eine Idee, die nicht umgesetzt werden muß (vielleicht auch gar nicht geht, wer weiß), aber über die der Herr Platinendesigner zumindest vielleicht mal kurz nachdenken könnte.


    Folgendes: der VideoChip sitzt da ja so einzeln extra und bedient sein Videoram komplett unabhängig von der CPU. Damit macht man sich aber gerade im Homecomputerbereich schon ein paar Optionen kaputt, die evtl doch hilreich sein könnten - nämlich wenn die CPU da auch hineinschreiben dürfte ins RAM. Die Idee ist jetzt gar nichtmal, daß das sofort eingebaut wird, aber daß die Option vielleicht offen bleibt, indem die Daten und Adressleitungen für das VideoRAM nach unten verlängert werden und dort dann optional für weitere Basteleien vorhanden sind. So könnte man da evtl. später eine Platine aufsetzen auf die auch die CPU dann Zugriff hat.

    Das Problem dabei ist, dass der V9938 mit seinem eigenen Speicher-Controller auf die DRAMs zugreift und natürlich auch einen entsprechenden Refresh durchführt. Die Unterscheidung, wann der Controller die Refresh-Zyklen macht, wann er auf das VRAM zugreift um die Daten auf dem Bildschirm auszugeben, und wann ein "gefahrloser" CPU-Zugriff durchführbar wäre, mag evtl. möglich sein. Aber vermutlich ginge das Ganze mit einer Menge Aufwand einher, schon allein deshalb, weil es eben DRAMs sind. Ein direkter Zugriff auf die Adress- und Datenleitungen verbietet sich daher im Wesentlichen.


    Eine Möglichkeit, trotzdem direkt auf das VRAM zuzugreifen, besteht aber dennoch über Block Move/Copy Befehle der V9938. Damit könnte man evtl. das Extra RAM (64KB) mit eigenen Daten beschreiben. Bei kleineren Auflösungen sind von den insgesamt 192KB VRAM natürlich noch mehr ungenutze Bereiche verfügbar.

    kann ich die Platine direkt mit dem Junior verbinden oder brauche ich noch die IO Platine?

    Hallo Marco, direkt kannst du die Karten nicht am Junior anschließen. Du benötigst da dann die Backplane. Man könnte auch Quetschstecker für Flachbandkabel nehmen. Das ist dann aber wesentlich teurer.

    Ich würde sowieso jedem dann raten, den an der Backplane dafür vorgesehenen Spannungsversorgungsanschluss zu nutzen und dort ein Netzteil mit +5V und +12V für ein Floppy Laufwerk anzuschließen. Ich selber würde ein Pico PSU vorziehen, dass dann einfach hinten an die Backplane geschraubt wird. Das Pico PSU benötigt dann ein 12V Notebook oder Steckernetzteil, das dann natürlich entsprechend dimensioniert sein sollte.


    Wenn noch Bedarf für Backplane Platinen besteht meldet euch, dann lasse ich nochmal welche machen.


    Ich möchte auch noch rechtzeitig vor der Platinenbestellung versuchen, die ROM-/IO-Platine so umzubauen, dass ein normal großer SD-Karten Slot direkt auf die Platine gelötet werden kann. Ausserdem wollte ich ja nun doch bei der Motoransteuerung der Datasette einen Transistor statt des Reed Relais nehmen.

    Ich werde mir dann auf alle Fälle ein neues IO Board aufbauen, weil meines jetzt doch schon ziemlich verbastelt ist. Falls da also auch noch jemand eines haben möchte, kann er schon mal die Hand heben.

    Hobi hat mir angeboten 8255er für 1,50€ das Stk. abzugeben. Wer von euch hätte da Bedarf, weil er keine mehr in irgendeiner einer Kiste rumfahren hat. Ich würde dann von ihm eine entsprechende Anzahl (wenn so viel vorhanden) abnehmen.

    Also, die von UTSource benötigten Bauteile sind:


    1x V9938C

    1x WD37C65B

    1x 8255A

    6x UPD41464C-10

    1x CXA2075M


    bei Einzelbestellung bekommt man einige Bauteile erst ab Abnahme von 2, deshalb ist das dann auch etwas verzerrt. Aber hier mal die Aufstellung, was ein einzelnes Kit bei verschiedenen Bestellmengen kostet, wobei ich noch die anfallende Mehrwertsteuer auf die Bauteile gerechnet habe:


    Einfachbestellung : Bauteile 33,93€ +MwSt. Fracht 26,94€. Gesamt 67,32€

    5fach Bestellung : Bauteile 151,09 +MwSt. Fracht 26,94€. Gesamt 209,74€. Einzelnes Kit 41,95€

    10fach Bestellung: Bauteile 290,48 +MwSt. Fracht 3,22€. Gesamt 348,89€. Einzelnes Kit 34,98€


    Ich weiß jetzt nicht, ob bei den größeren Bestellmengen noch Einfuhrzoll oben drauf kommt, vielleicht hat da jemand ja bereits Erfahrung gesammelt.

    Kann bitte jemand für mich bei utsource mitbestellen? Es gelingt mir nicht, nach der Registrierung bei utsource die korrekte Handynummer und die Bankverbindung einzugeben. Wird immer als falsch zurückgewiesen.

    Ich kann ja mal eine Sammelbestellung mit den benötigten Bauteilen machen. Die Platine ist jetzt fertig geroutet. Jetzt kommt noch die Nachbearbeitung und ein weiterer Check.



    Eventuell bestelle ich nächste Woche mal einen Schub Platinen und werde dann erst mal schauen, ob alles so läuft wie ich mir das vorgestellt hatte. Ich weiss jetzt nicht, ob es vorher schon Sinn macht eine Bestellung der Bauteile zu organisieren und der Controller funktioniert dann nicht richtig.

    Ich werde abere auf alle Fälle mal alle Bauteile bei UTSource zusammenstellen und schauen, was das ganze dann als 1x, 5x oder 10x Bestellung pro Kit kosten würde.


    in der CPC-Gemeinde ist ein ähnliches Projekt wegen Nichtverfügbarkeit des V9990 nicht zustande gekommen.

    Der V9990 oder auch der V9958 sind sehr schwer oder garnicht mehr erhältlich. Der V9958 ist innerhalb eines Jahres von unbezahlbar auf nicht mehr erhältlich gesprungen. Deshalb hatte ich mich auch für den V9938 entschieden, den es noch recht gut erhältlich und einigermaßen günstig gibt.

    wo bekommt man den V9938 Chip her ?
    Bei ebay kommt da überhaupt nichts.

    Wo, und wie teuer.

    Hallo klaly den V9938 habe ich wie die meisten anderen Bausteinchen von UTSource aus China. Preis "neu" bei Abnahme von 1 Stk. €19,22. Ab 5 wird es pro Stück 1€ günstiger. Eventuell kann man auch die gebrauchten nehmen - sind dann halt vermutlich aus MSX Rechner von den Sockeln geplündert.

    Ich hoffe natürlich, dass die Teile weiterhin so gut bei UTSource bestellbar bleiben, wie ich sie noch bekommen habe. Aber klar ist natürlich, die alten Bausteinchen werden rar. Das macht aber natürlich auch etwas den Reiz aus :) .

    Hier erst mal die (vorerst) letzte Inkarnation der Floppy-/Grafikkarte.


    Die aus Monoflops und FlipFlops bestehenden Watchdog Timer für die Motorabschaltung sind jetzt in den Microcontroller gewandert. Da ich sowieso bereits den uP für die PS/2 Schnittstelle nehme, kann der ja auch noch die Timer liefern. Das spart zwei ICs und noch einiges drum herum.


    Einen der beiden 8fach Adressbuffer, sowie die NOR Gatter sind jetzt durch einen 4fach Buffer mit Freigabe ersetzt, da eh nur zehn Adressleitungen benötigt werden. Spart nochmals ein Bausteinchen.


    Das ROM kann jetzt als 16x1K Seiten eingeblendet werden, womit ich dann mehr als genug Platz für den Code und (eventuell) verschiedene Zeichensätze für den Grafik-Controller habe.


    Die etwas krude zusammengewürfelten Anschlussbelegungen des 8255, sowie des ATMega328 rühren von den Pinbelegungen der unterschiedlichen Betriebsmodi. Der 8255 wird von mir für Port A im Mode 1 betrieben, was dazu führt, dass PC-3 bis PC-5 als Handshake Leitungen und PC-6 und PC-7 als freie Portleitungen genutzt werden.

    Den ATMega möchte ich einfach wie einen Arduino UNO betreiben, um die Code Library für die PS/2 Tastatur zu nutzen. Dann muss ich da nicht auch noch viel Aufwand betreiben. Das führt aber dazu, dass viele Port-Leitungen schon eine bestimmte Belegung haben. Letztlich ist das für die Funktion aber natürlich völlig egal, nur der Schaltplan wirkt an manchen Stellen dadurch etwas verschwurbelt.

    Die Abfrage der DIP-Switches benötigt dadurch aber einen 2 zu 1 Encoder, welcher nun durch setzen/löschen von PC-6 zwischen den unteren Datenport Leitungen des ATMega und den DIP-Switches wählt.


    Den Y-Trap Trimmer habe ich nach Hinweis von NorbertJ , dass doch 2,61K Widerstände in der E96 Reihe existieren, gegen einen solchen ausgetauscht.

    Ich denke, man braucht da tatsächlich auch keine Möglichkeit für eine Feinjustage.


    Ausserdem sind jetzt doch einige Fehler bereinigt (Quarzoszillator am FDC an CLK1 statt CLK2, Datenbus am V9938 war verkehrt herum bezeichnet, etc.), die mir so üblicherweise in den ersten Entwurf flutschen.


    Es fehlt jetzt nur noch die Spannungsversorgung für das (Onboard) Floppy-Laufwerk und einem letzten Fehler Check, dann kann ich die Bauteile auf der Platine richtig platzieren. Mal schauen, ob ich diese Woche noch dazu komme.

    Hallo Jörg, betrifft den neuen Schaltplan beim CXA2075M : was bedeutet dieses RV1 bzw. Ref 2,61K?

    Hallo Norbert. RV1 ist ein Spindeltrimmer. Für den Trap Widerstand muss ein 2,61 KOhm mit 1% eingesetzt werden um Farbverschiebungen zu vermeiden. Mit dem Trimmer kannst du das dann ziemlich genau einstellen.

    Jetzt hab ich mal soweit alle Änderungen mit eingetragen.


    - CXA2075 mit S-Video, RGB und Color-Composite.

    - Alternativer S/W Composite Ausgang, wenn CX2075 nicht bestückt werden soll.

    - Takterzeugung 4,43MHz für PAL Trägersignal.

    - Per Löt Jumper umschaltbar von PAL auf NTSC.

    - ATMega328P als PS/2 Keyboard Support Chip.


    Der Schaltplan ist immer noch nicht geprüft, daher ist das also jetzt auch nur mal eine Vorabversion. Weil der Plan jetzt doch ziemlich vollgestopft ist, werde ich ihn wohl im nächsten Schritt in zwei Teile zerlegen.

    in Berlin VCFB hatte ich die Steckschwein Leute getroffen.
    Die haben auch eine neue Platine mit diesem Grafikchip entworfen.
    Da ist aktuell noch irgendein Zugriffsproblem offen, sie nanten es Glitch.
    Die wollten das irgendwie mit Waitstates lösen.

    Frag doch da mal an welche Probleme sie haben oder hatten, damit du da nicht auch Probleme bekommst.

    Hallo Klaus, die Jungs nutzen den V9958. Ich weiß nicht, wie sehr der sich von den Specs des V9938 unterscheidet. Er kann glaube ich auf alle Fälle mehr Farben bei 512x192. Dafür ist der aber mittlerweile fast unbezahlbar geworden. Die Probleme beim Steckschwein werden da wohl erst bei der neuen Platine aufgetreten sein. Beim alten Design funktionierte glaube ich alles soweit.

    Die CXA2075 wären allerdings SOP-24, was löttechnisch aber kein Problem darstellen sollte. In DIP finde ich die leider nicht.

    Ja, die gibt es leider nur als SOP-24. Das ist aber noch gut lötbar.


    Ich hab jetzt lange rumüberlegt, was ich machen soll. Der CXA2075 mischt ja nicht nur die Signale, sondern enthält ja auch alle Ausgangstreiberstufen für R, G, B, CSync, Chroma, Luminanz und Composite, womit man sich natürlich das Transistor Grab zum Teil spart (es sind immer noch eine Menge Kondensatoren und Widerstände nötig). Ausserdem kann auch zwischen PAL und NTSC wählen. Somit erhält man alle relevanten Signaltypen. Der CX2075 benötigt noch ein 3,58MHz Taktsignal, das der V9938 bereits aus seinem Takteingang erzeugen kann (21,47727MHz/6). Das ist wohl auch der Grund, warum die MSX Rechner meist (?) mit genau den 3,58MHz getaktet waren.

    Kurz und gut, ich werde jetzt wohl doch den Encoder Baustein einsetzen und die bisherigen Treiberstufen fallen weg.


    Ich hatte gestern noch 10x 21,47727MHz Quarze bei AliExpress bestellt. Die sollen am 17. Dezember kommen. Ich hoffe, das dauert nicht wirklich so lange, aber ich hab jedenfalls noch genügend Zeit bis dahin die Platinen fertig zu machen.


    Übrigens Reinhard : Beim CX2075 sind in der Referenzschaltung die RGB Ausgangssignale ebenfalls mit 220uF gekoppelt.

    Hallo Jörg, geschieht der Wegfall aus Platzgründen?

    Um aus dem RGB Signal, welches vom V9938 geliefert wird ein S-Video Signal zu mischen benötigt man noch einen Baustein wie zum Beispiel den CXA2075 von Sony, welcher aus den CSync und RGB Signalen ein Composite und die Y/C (also das was man so üblicherweise S-Video nennt) Signale Codieren kann.

    Auch die gibt es recht günstig bei UTSource. Allerdings liefert der V9938 im Gegensatz zum V9958 bereits ein Composite Signal und das war mir erst mal wichtiger als Y/C. Ich dachte, noch einen CXA2075 zu haben, was sich aber als falsch rausgestellt hat, deshalb der Wegfall.

    Platz genug hab ich auf der Platine aber auch noch, ich kann das also auch schon eventuell mit planen, so dass man sich den Sony Encoder dann selbst nachträglich draufsetzen kann.


    Hallo Jörg, hier mal ein "blöde" Idee, wie wäre es mit einem Parallel Port, Pin kompatibel zum PC.
    Dann könnte man so Sachen wie ein Zip Laufwerk, oder ähnlich Zeug anschließen, dass es früher für den PC Parallelport gab.

    Einen Parallel Port gibt es schon auf der IO Platine. Da sind bis auf /ACKNLG und /AUTO_FEED alle notwendigen Signal drauf. Treiber kann man natürlich dafür schreiben. Ich hab im Junior ][ sowieso ein mehr oder minder flexibles Treiberkonzept eingesetzt.

    Hallo Norbert. Nein RGB Video ist leider kein VGA. Aber SCART können ja auch noch einige alte Fernseher. Ich bin aber auch gespannt, welche meiner Monitore da dann was anzeigen können.


    Edit: Es gibt aber glaube ich auch SCART zu VGA Wandler.

    RGB per Kondensator gekoppelt :grübel:

    Ist das echt so vorgeschlagen?

    In den Original Datenblättern wird nur ein NPN mit Emitter Widerstand angegeben. Die Schaltungen für R,G,B,CSync hab ich so 1:1 aus dem Schaltplan eines MSX Rechners übernommen. Ich werde das jetzt mal in der ersten Revision so ausprobieren. Testen kann ich es im Vorfeld leider schlecht, weil der V9938 einen 1,78mm Pin-Pitch hat, sprich auf kein Breadboard o.ä. passt.