Mein Micro‑Expander Model 1

(Die Seite ist noch im Aufbau und wird gerne erweitert.)
(English translation by Google)



2020-04-18

Das Micropolis Doppellaufwerk und der Floppy-Controller

Micropolis FloppyDrives and
    Floppycontroller

Im Januar habe ich diese schönen Stücke bekommen. Der Micropolis S-100 FloppyController wird vom Micro-Expander Monitor unterstützt. Naja, unterstützt, d.h. es gibt einen Sprungbefehl zum Boot-ROM des FloppyControllers.

Nach der Analyse der Boot-PROMs kam wieder die Frage des Betriebssytems auf. Klar sollte es CP/M sein. Also wieder suchen.

Die Firma Vector Graphic hatte den Micropolis Floppycontroller in den eigenen Computern verbaut und vertrieben. Und Vector Graphic hatte auch ein CP/M System, ein weiteres gab es von Lifeboat. Ausreichend Auswahl gibt es auf Mikes Webseite deramp.com.

Ich hatte mir 4 Diskettenimages angeschaut. 3 davon haben das gleiche System, deshalb habe ich mich für ein Image von Mike entschieden. I.a. sind hier alle wichtigen Programme schon vorhanden.

Jetzt hatte ich wieder mein Problem: Wie kommt das Image auf Diskette oder wie kann der Computer booten?

Es blieb wieder nur der Weg über meinen selbstgestrickten Floppy-Emulator. Der musste erstmal an die Disketten (16 Sektoren statt bisher 10) und das komische Micropolis Format mit 275 Bytes/Sektor (256 Bytes Nutzdaten, Rest ist Synchronisation, Track- und Sektornummer, Checksum und ein paar Dummy-Daten) angepasst werden.

Um das BIOS ändern zu können, habe ich erstmal ein kleines Programm geschrieben, was mir die reinen Nutzdaten in ein separates Image schreibt. Bei der Analyse des Bootloaders war schnell der verwendete Skew von 3 auf der Diskette erkennbar. Kein Problem, macht das Programm mit. Jetzt hatte ich schon mal die Systemtracks extrahiert. Bei der Ansicht der Datentracks war aber das Directory sehr zerpflückt. Im Original-Image habe ich dann den Skew von 5 gefunden. 2 unterschiedliche Skew, sehr ungewöhnlich. Im BIOS war dies aber nachvollziehbar. Ok, Software nochmal anpassen.

Testaufbau mit Micropolis 
    FloppyDrives

(Fortsetzung folgt)



2020-01-25

Der Memory-Test

Eigentlich wollte ich mich mit dem neuen Micropolis Floppy-Controller beschäftigen. Aber der Micro-Expander startete mal wieder nicht.

Nach ein bischen nachmessen und nachlöeten gings wieder, aber bei kurzen Eingaben ins Memory kam i.a. nur Blödsinn zurück. Jetzt muss ein Memorytest her!

Allerdings ist der Monitor voll, also die unnötigen Cassetten-Routinen können raus. Aber erstmal ein assemblierbares Source haben. Mit Disassembler und vorhandenem Monitor-Source war die Aufgabe beherschbar.

Die ersten Memorytests mit einfachen Pattern mit 0x55 und 0xAA brachten schon sehr seltsame Ergebnisse. Kaum ein Testdurchlauf bestätigte das Ergebnis des Vorläufers. Alles nur Huddel! Also wieder Messen!

Und schon die 3. Adressleitung kam nicht am S-100 Bus an. Mal wieder eine dieser alten, kaputten Durchkontaktierungen. An der gleichen Leitung hatte ich schon mal repariert.

Danach liefen die Tests alle gut. Allerdings ist "gut" bei 0x55 und 0xAA nicht wirklich aussagekräftig.

Deshalb wollte ich jetzt den RAMBUG in den Monitor einbauen. Das hat dann ein wenig länger gedauert. Auch die Test dauern etwas länger, aber jetzt habe ich ein gutes Gefühl: Alle Tests positiv! Zum Test habe ich mal ein ICs rausgezogen, hier das Ergebnis:

RAMBUG Ausgabe

Jetzt konnte ich mich über den Micropolis Floppycontroller hermachen.



2018-03-10

Es ist viel passiert, und es hat lange gedauert.

Nachdem das CP/M bootet, habe ich gedacht, klappt auch das Schreiben auf Disketten. Aber dem war gar nicht so.

Alle Versuche, die emulierte NorthStar-Diskette auf eine richtige Diskette zu kopieren, funktionieren nicht anständig. Manchmal läßt sich das Directory der Diskette noch lesen, beim nächsten Mal geht's schief. Alles ist instabil, aber ich sehe nicht warum.

Ich entscheide mich noch die Lifeboat CP/M zu probieren. Also wieder Image analysieren, Binärfile diassemblieren, usw. Zu meiner Überraschung ist das Lifeboat Image deutlich einfacher aufgebaut. Aber das sagt über die Funktion auch nichts aus.

Und wie es kommen musste, Lifeboat bootet ohne nennenswerte Änderungen (Erfahrung zahlt sich aus! :-) ). Aber Tests beim Schreiben gehen genauso gut (sagt der Optimist) oder schlecht (sagt der Pessimist) aus.

Ich habe von Christian die Original-Laufwerke geholt, die damals bei dem Controller dabei waren. Aber auch mit denen funxt es nicht.

Mir fällt auf, das die Laufwerke gar nicht mehr die Track0 Position anfahren. Das erklärt einige Fehler. Auf den NorthStar-Disketten ist keine Kennung auf welchen Track der Lesekopf ist. Die Software kann nur mit dem Track0-Signal und zählen der Step-Impuse die richtige Spur anwählen. Aber anscheinend geht hierbei etwas schief.

Das ist der richtige Zeitpunkt den geplanten Floppy-Tester aufzubauen.

Der Floppy-Tester

Die Idee zu einem Floppy-Tester gab es schon länger. Der Floppy-Emulator ist aus dem Projekt entstanden. Ich habe die Schaltung so erweitert, das ich jede Leitung auf dem Shugart-Bus einlesen und ansteuern kann. So kann ich alles testen, und der Floppy-Emulator bleibt auch möglich.

Dann hab ich Schaltung und Software entwickelt, um die Floppy zu aktivieren, das Sektor/Index-Signal auswertet und die Signale für das Tracking erzeugt. Mit dem letzten habe ich erstmal die Floppy-Laufwerke getestet, was mit dem Track0 los ist.

Step-Impulse für Anfänger

Ich habe das Direction- und das Step-Signal nach Datenbuch eingestellt und wie erhofft und zu erwarten war, rennt der Schreib-/Lesekopf nach aussen und nach innen und wieder raus. Genau die Anzahl der Tracks, die ich einstelle. Auch die Step-Frequenz kann ich einstellen und teste diese auch an den unterschiedlichen Laufwerken. Hier ist alles ok, also muss der Fehler woanders liegen.

Stepping unter CP/M

Also mal sehen wie das CP/M steppt. LA wieder raus, ja, ein Oszilloskop reicht zum messen des Step-Signals. Aber ich will auch wissen wo in der Software das Stepping erzeugt wird um dann das Delay für die Steprate finden. Mit dem LA kann ich sehen welcher Befehl das Step setzt. Ok, die Steps kommen ca. alle 5ms, das ist ganz klar viel zu schnell für die alten 40-Track Laufwerke.

Die Step-Delay Routine ist zügig gefunden. Es wird ein Wert aus einer Speicherstelle gelesen und entsprechend oft eine Verzögerung durchlaufen. Aber wo kommt dieser Wert her? Auch das Schreiben auf die Speicherstelle ist mit dem LA schnell gefunden. Nach ein bischen Softwareanalyse ist klar, die Funktion misst die Zeit für einen Sektor und legt dies als Delay fest. Warum aber das Steprate-Delay nur einem Viertel der Sektorzeit entspricht, ist mir vollkommen unklar.

Wie dem auch sei, irgendwie muss ich das Steprate-Delay hochdrehen. Eine Idee war, statt der Sektorzeit die Indexzeit, also eine gesamte Diskettenumdrehung, zu nehmen. Zum Glück sind mir zwischendurch ein paar PDFs über das Liveboat CP/M aufgefallen. Und da stosse ich auf das Konfigurationsbyte CONFG, in dem für 4 Laufwerke ein Double-Side Flag und ein Fast-Step Flag gesetzt werden kann. Beides war für Laufwerke A und B gesetzt. Auch eine genauere Okularinspektion der Delay-Routine bestätigt das Fast-Step Flag. Also, Versuch macht klug!

CONFG Byte geändert, Assembler gestartet, Binärdatei ins Image kopiert, Floppy-Emulator programmiert, CP/M neu gestartet, Steprate gemessen und ... es sind ca. 40ms Delay. Was so ein Bit ausmacht, wenn man es kennt.

Reboot tut gut!

Ein neuer Versuch für die richtigen Floppy-Laufwerke

Ich habe also wieder ein 40-Track Laufwerk angeschlossen und mit dem Copy-Programm die Emulator-Diskette 1:1 auf eine richtige Diskette kopiert. Dann den Emulator abgebaut, das DriveSelect des Floppy-Laufwerks umgestellt und ...

GEBOOTET !

CP/M bootet endlich von einer Floppy-Disk.

Das NorthStar CP/M hat beim Stepping das gleiche Problem. Also auch hier mal schauen. Interessanterweise finden sich in dem NorthStar CP/M fast die gleichen Routinen wie im Lifeboat CP/M, sogar das CONFG ist bei NorthStar gleich. Ist die Frage, wer hier von wem abgeschaut hat.



2017-12-25

CP/M 2.2 bootet

Nach viel lesen, einigen Überlegungen und vielen Änderungen hat der Expander ein CP/M 2.2 gebootet.

CPM2.2 Bootmeldung   CPM2.2 Bootmeldung

Erweiterung des Floppy-Emulators

Bisher hatte der Floppy-Emulator alle Tracks gleich emuliert. Für eine anständige Diskette reicht das leider nicht. Also habe ich den Emulator erstmal erweitert. Da die Floppy-Imagedaten nicht ins FPGA passen, muss das SPI-Flash diese aufnmehmen. Ein Trackwechsel dauert bei einem Floppy-Laufwerk relativ lange (um die 20ms und mehr), hier ist genug Zeit die Daten aus dem SPI-Flash zu lesen und im FPGA zu speichern.

CP/M, woher nehmen?

Zeitweise hatte ich mich schon damit abgefunden das BIOS (den hardware-abhängigen Teil) selber schreiben zu müssen. Da ich zum Glück ein fauler Kerl bin (Lieber 5 Minuten nachdenken, als 15 Minuten programmieren.), ist mir aufgefallen, das der NorthStar Horizon mit dem gleichen Floppy-Controller ein funktionierendes BIOS haben muss. Also sind doch alle BIOS-Funktionen für die Disketten vorhanden. Die BIOS-Funktionen für die Console Ein- und Ausgaben sind deutlich einfacher zu entwickeln als die für Disketten.

Also habe ich ein CP/M Disketten Image von Dave Dunfield für den NorthStar genommen, die CP/M Spuren extrahiert und analysiert. Dazu gehörte das Verstehen des Bootloaders (der eine Sektor, der der ganzen Rest lädt und startet), wo ist das BIOS und das Verstehen der wichtigsten Funktionen, wo kann oder muss ich was ändern, erkennen, das noch ein Monitor-Programm geladen wird, und einiges mehr.

Natürlich klappte der erste Boot-Versuch nicht. Mit dem Logic Analyzer konnte ich die Hängenbleiber finden. Dann habe ich den disassemblierten Sourcecode geändert, übersetzt und von Hand ins Diskettenimage kopiert. Nach ein paar Versuchen bekam ich dann die erste Bootmeldung, etwas später den Prompt. Leider klappte die Zeicheneingabe noch nicht. Der Expander-Monitor macht die Tastaturverarbeitung im Interrupt. Nachdem ich für die BIOS-Funktionen CONIN und CONST die Interrupt freigegeben habe, erschienen auch die Tastatureingaben auf dem Bildschirm.

GESCHAFFT !!



2017-11-24

Ein sinnvoller Bootcode

Für den morgigen Kölner Retrotreff habe ich einen Bootcode geschrieben, der wenigstens kurz eine Meldung ausgibt und dann den Monitor wieder anspringt. So kann man wenigstens was sehen, auch ohne LA.

Floppy-Emulator



2017-11-12

Der Floppy-Controller

Wie schon gesagt, braucht der North Star Micro Disk Controller hardsektorierte Disketten. Da ich diese nicht habe, wollte ich mir einen Adapter bauen, der die Sektorimpulse aus dem Indeximpuls erzeugt. Deshalb habe ich ein Indeximpulsperiodenmessgerät gebaut, um ein Gefühl für die Schwankungen zu bekommen. Diese sind messbar, aber nicht dramatisch.

Danach habe ich mit Diskimage-Software beschäftigt, um Daten auf Disketten schreiben zu können, von denen ich dann wieder booten kann. Aber nach einigen Versuchen, Überlegungen und Gesprächen und Mails mit Gleichgesinnten ist mir klar geworden, daß das nicht klappt. Die bekannten Diskimage-Programme können nur mit softsektorierten Disketten umgehen.

Also, wie kann ich mit dem Floppy-Controller booten ohne Disketten? Da ich auch nicht weiß, ob der Floppy-Controller funktioniert, ist eine Datenquelle sinnvoll, die immer gleiche Daten sendet, um Messungen am Floppy-Controller oder Softwaredebugging durchführen zu können. Aus diesen Gründen habe ich mir einen Floppy-Emulator gebaut.


Der Floppy-Emulator

Das hört sich kompliziert an. Wenn man nur von der Floppy liest, also die Floppy nur Daten liefert, ist das aber gar nicht.

Wenn DeviceSelect (DS) und MotorEnable (MotEnb) aktiv sind, "dreht" sich die Floppy und erzeugt die Sektor- und Indeximpulse. Ist der Schreib-/Lesekopf auf der äußersten Spur, wird Track0 (Trk0) aktiviert. Über Direction (Direc) und Step überwache ich die Spurauswahl.
Bei den Lesedaten (ReadD) wird es etwas umfangreicher, aber bei den hardsektorisierten Disketten übersichtlich. Nach der Floppy-Controller Dokumentation wird nach jedem Sektorimpuls und einer kurzen Pause 32 Null-Bytes, 2 Sync-Bytes, 512 Daten-Bytes und das Checksum-Byte geschrieben (bei Double-Density). Genauso gibt der Floppy-Emulator die Daten aus. Als erstes Datenbyte wird die Sektornummer genommen, das 11. ist 0x76 (HALT-Befehl), der Rest wird mit 0xA5 gefüllt.
Jetzt kommt noch das North Star Format: Die ersten 2048 Bytes der Floppy (also 4 Sektoren DD oder 8 Sektoren SD) sind Inhaltsverzeichnis, danach kommen Daten bzw. ein Bootcode. Warum der Bootcode bei 0x0A (also das 11. Byte, s.o.) angesprungen wird, weiß ich nicht.

Floppy-Emulator
Expander mit Floppy-Emulator


Wieder zum Floppy-Controller

Jetzt sollte das Laden des Bootcodes doch klappen. Aber so schnell geht's doch wieder nicht.

Wie weit der Start-Code des Controller kommt, kann ich mit dem LA kontrollieren. Und das sieht ganz gut aus, das einzige, das Body-Flag (was auch immer das ist) wird nicht gesetzt. Also geht's doch wieder in die Hardware.

Nach einigem suchen im Schaltplan und messen wird mir die Schaltung nicht wirklich verständlich. Da der Controller anscheinend auch als Bausatz erhältlich war, gibt es im Manual ein Board Checkout, 3 Seiten Anleitung was man an welcher Stelle messen soll. Schaden kann es nicht, also fange ich mal an. Und nach 2 Seiten messen fehlt mir ein Takt, BINGO. Es ist keine Unterbrechung, der 74'123 gibt genau das vermeitliche Taktsignal so aus. Das IC gehört zu einem VCO (steht so im Schaltplan) und wird u.a. von einem Operationsverstärker angestuert. Und genau der macht nicht, ja wie, kann er auch nicht, die Versorgungsspannung fehlt. Also den Floppy-Controller wieder ausgebaut und der Fehler war ja sehr offensichlicht, beim Rückbau habe ich eine Leiterbahnunterbrechung übersehen.

Wieder den StartCode gestartet und, schwups, war der Z80 im HALT-State, genau was der Bootcode mit dem 0x76 Byte erreichen wollte. Damit war vieles erreicht, der Floppy-Controller funktioniert, der StartCode läuft und der BootCode wird ausgeführt. Jetzt muss ich nur noch was anständiges zum Booten finden...



2017-11-06

Die zickige S-100 Backplane, Teil 2

Natürlich waren die Startprobleme durch die schönen Kabel nicht beseitigt, wäre auch zu schön gewesen. Also den Logic Analyzer wieder angeklemmt und, etwas überraschend, hatten wir das gleiche Problem wie beim ersten mal. Und, schnell nachgemessen, hat das Inverter-IC U2 wieder keinen GND. Hmmm, eigentlich war das Problem doch erledigt. Die Backplane wieder ausgebaut und nochmal die beteiligten Leiterbahnen nach Unterbrechnungen abgesucht und gemessen. Ich habe nichts auffälliges gefunden, aber auf der Bestückungsseite kann ich durch den fehlenden Röntgenblich nicht unter die IC-Sockel schauen. Ist es wieder eine Durchkontaktierung oder nur die Lötstelle? Nicht lange diskutieren, der Sockel muss runter.

ausgelötetes IC

So richtig schön sieht das nicht aus. Aber der GND Pin (rechts unten) hat Kontakt nach GND und auch die Durchkontaktierung ist ok. Allerdings die Leiterbahn an Pin 12 ist etwas angefressen, hat aber Durchgang, aber zur Sicherheit hab ich etwas Lözinn auf die Leiterbahn gezogen. Ok, Sockel wieder einlöten und probieren.

Und zu meiner großen Freude hat der Expander sofort gestartet und auch alles rütteln an der Backplane und drücken und schieben an den ICs hat zu keinem Absturz geführt. Da ich die Lötstelle schon 2 mal nachgelötet hatte, möchte ich mal wissen was die damals für ein Zeug verlötet haben. Aber egal, es funktioniert, und hoffentlich möglichst lange.

Jetzt können wir uns wieder beruhigt dem Floppy-Controller zuwenden.



2017-11-04

Die zickige S-100 Backplane

Mir war schon mehrmals aufgefallen, das die Mechanik nicht so gut passt. Um das Mainboard in alle Buchsen zu bekommen, musste man immer irgendwo schieben und drücken, Schraubenlöcher passen nicht so ganz, etc. Bei genauerer Kontrolle habe ich gesehen, das die Backplane zwischen Mainboard und IO-Platine (hinten mit Netzteil und Steckern nach aussen) eingeklemmt ist. Auch drückt der Stecker der Spannungsversorgung die Backplane in eine Zwangslage. Deshalb habe ich entschlossen, den festen Stecker durch einen flexiblen zu ersetzten.

Ich habe noch einen P8/P9 Stecker, den ich aus einem alten PC Mainboard ausgelötet habe, und die Kabel dazu. Ich denke das Stecker passt gut, ist ja für hohe Ströme gemacht. Also den alten erstmal raus. Beim Entlöten bleiben die Pins manchmal an kleinsten Lötzinnresten kleben, die sich mit ein bischen wackeln mit einem leichten Knacks lösen. Hier gab es keinen Knacks, die Pins klebten aber ein wenig. Und als ich den Stecker raus hatte, wunderte mich das Gefrimmels an 2 Pins.

Stecker

Da das Gefrimmels komplett um den Pin geht, kann ich mir nur vorstellen, das dies die Durchkontaktierung im Bohrloch sein kann. Normalerweise kriegt man die aber nicht so einfach raus, sondern nur, wenn überhaupt, mit ziemlich Gewalt, bei modernen Platinen. Da diese Platine aber schon ein paar "Besonderheiten" gezeigt hat, ist dies jetzt das wahre Gesicht.

Jetzt erinnere ich mich, das bei Messungen 2 der Pins nie Kontakt hatten. Ich hatte das immer auf äusserliche Korrosion an den Lötstellen geschoben. Aber die Pins hatten gar kein Kontakt zur GND-Leitung! Die GND-Leitung ist nur auf der Bestückungsseite verbunden, auf der Lötseite sind nur einzelne Lötpads. Und die Durchkontaktierung dazwischen war früher schon kaputt und hängt jetzt an den Pins.

Stecker Bestückungsseite Stecker Lötseite
Es geht um die Pins 6 und 7 vom Platinenrand gezählt.

Ich überlege, ob es noch mehr solcher Durchkontaktierungen auf der Platine gibt. Wenn ja, Prost Mahlzeit!

Der Rest des Umbaus erfolgte dann ohne weitere Probleme. Da die Verbindung zwischen Mainboard und IO-Platine auch nicht genau passte, habe ich auch diesen festen Stecker und Buchse gegen Stiftleisten und Flachbandkabel ausgetauscht.

vorher nachher
vorher - nachher

Auch wenn es nicht original ist, ist jetzt die mechanische Spannung aus den Platinen raus. Damit habe ich wenigstens in Zukunft meine Ruhe. Hoffentlich!



2017-11-01

Erste Versuche mit einem Floppy-Controller

Von Christian habe ich einen North Star Micro Disk Controller zur Verfügung gestellt bekommen. Den musste ich erstmal zurückbauen.

FDC

Um zu entdecken, wie der Controller funktioniert, hab ich ihn an ein Floppy-Laufwerk angeschlossen und den Code im PROM gestartet.

FDC

Das hat leider nicht so gut geklappt, erstens braucht der Controller hardsektorierte Disketten und zweitens zickt die S-100 Backplane wieder rum. Es benötigte oft mehrere Versuche den Rechner zu starten, immer mit wackeln und rütteln an der Backplane. Also erstmal wieder hier weiter forschen.



2017-10-16

Endlich wieder messen

Mit einem halbwegs fundierten Schaltplan kann mich jetzt auf die richtige Fehlersuche machen. Also erstmal wieder den LA angeklemmt und, ja klar, nach dem 2. Opcode läuft der Z80 wieder ins Nirwana. Aber das war nicht anders zu erwarten.
Im Vergleich zwischen ohne und mit Backplane ist das Signal am Pin P3-21 mit der Backplane dauerhaft auf Low. Also erstmal die Backplane untersuchen und am besten auch einen Schaltplan zeichnen. Wieder das gleiches Spiel: Bauteile in Schaltplan zeichenen und wieder piepsen.
Auf der Backplane wird das Signal sINTA erzeugt, das aus einem Buffer kommt. Und der Buffer sollte über das Signal SDSBn, gestützt von einem PullUp, und einem Inverter dauerhaft aktiv sein. Das SDSBn ist ein Signal vom S-100 Bus, es kommt aber an einem Slotstecker nicht an. Ich verfolge die Leitung und am ersten Slot kommt es an, am 2. nicht! Was ist das? An Slot 4 und 3 ist das Signal verbunden, an Slot 2 auch, nur Slot 1 mag nicht. In der Not löte ich den Pin an Slot 1 nach, ... und jetzt ist die Verbindung da. So kann die Backplane zu einer schönen Baustelle werden.
Zurück zum Buffer, der wird anscheinend nicht aktiv, also messen. Und tatsächlich ist der Buffer nicht aktiv. Jetzt wird jedes Gatter einzeln gemessen, also an den Inverter. Und zu meiner grossen Verwunderung ist der Inverter am Eingang und am Ausgang auf high. So geht das nicht! Da ich kein Ersatz habe, schau ich erstmal genauer. Und tatsächlich hat der GND Pin kein Verbindung. Wie vorher auch schon, ein wenig nachlöten und ... Taräääää, der Inverter invertiert, der Buffer buffert und der Z80 dreht wieder seine Ehrenrunden in der Software. Wenigstens der Übeltäter ist gefunden.
Da die RTC auch schaltplantechnisch vermessen ist, sollte dies jetzt auch kein Problem mehr sein. Es wird auf die RTC geschrieben und gelesen, aber es liegt noch ein Reset an dem Zähler an. Bis jetzt liegt das Board mit der Backplane auf dem Tisch, also ohne Reset-Taster. Ich brücke die Pins, die eigentlich am Öffner des Tasters sind. Und schwups, RTC-Reset weg und alles ist gut.
An dem IC auf der Backplane ist noch ein Wackler drauf, aber zum ersten mal ein Bildschirm ohne Buchstabensalat. Handbuch raus und wenigstens mal ein Hexdump ausgeben. So sieht das aus.

Reset, da war doch was? Hier mal die ganze Reset-Schaltung. Die Signale mit S100_ gehen an den S-100 Bus, teilweise auch intern.
Da gibt es erstmal den PowerUpReset, der die CPU und den Bus resetet. Der Reset-Taster löst keinen Reset aus, sondern einen NMI (was im Monitor aber zum gleichen Code führt). Wird also der Taster betätigt, wird über U39b das S100_SlaveCLRn aktiviert (active low), dies setzt alle Slaves/Peripheriebausteine zurück. Gleichzeitig setzt der Schliesser S100_NMIn auf low und löst den NMI aus (S100_NMIn geht auch an die CPU). Beides erfolgt auf dem Bus und intern. Hinzu kommt, das auch die Karten auf dem S-100 Bus die Leitungen aktivieren dürfen. Deshalb geht der S100_SlaveCLRn erst auf den Bus und dann wieder intern.
Nur die Funktion der Schleife mit U39a, U58b und U19a ist mir nicht ganz klar. Ich kann mir nur vorstellen, das dadurch die Leitungen am Taster nicht prellen.

So, das war die Geschichte, die den Expander wieder ans laufen brachte.
Aber es geht bestimmt weiter, es bleibt noch einiges zu tun.


2017-10-16

Der Schaltplan

Ich habe erstmal meine Notizen in den PC eingegeben. Dabei ist mir schon aufgefallen, das es schwierig wird die Übersicht zu behalten, das man nicht ein Bauteil 2 mal zeichnet. Deshalb habe ich erstmal alle ICs auf Schaltplanseiten eingefügt und benannt. Bei den 111 ICs sind 3 große Seiten entstanden. So kann ich mit Cut&Paste jedes der 239 Gatter nur einmal verwenden.
Jetzt ging's ans Piepsen. An einigen Stellen geht's recht schnell, vor allem wenn 8 Datenleitungen ziemlich parallel verlaufen. Auch sind die Funktionsgruppen räumlich gut aufgeteilt. Aber die vielen „kleinen” Steuerleitungen sind nicht ganz ohne. Durch die Bankinglogik gibt es einige Möglichkeiten und dies braucht auch viele Gatter, die verbunden sein wollen.
Insgesamt eine sehr mühselige Arbeit, man weiss auch nie genau ob eine Leitung vielleicht an mehrere Punkte geht. Sind 2 Eingänge verbunden, muss es ja eigentlich noch einen Ausgang geben. Es könnte aber auch nur ein statisches Signal mit einem Pull-Up sein. Hier muss man die Schaltung dann jeweils im Detail betrachten.
Bei der ganzen Rumpiepserei haben die Nachbarn wahrscheinlich gedacht, ich mache einen Morsekurs. :-)
Ich pieps gerade an dem neu eingesetzten 74LS00 rum und trau meinen Ohren nicht! Dessen Ausgänge sind mit den Ausgängen des daneben liegende U11, auch ein 74LS00, verbunden. Das gehört gar nicht! Nochmal kontrolliert und die Eingänge mal verfolgt. Alle 4 NAND-Gatter des U11 bekommen Signale von der S-100 Backplane. Mir wird klar, das U10 und U11 eine Alternativbestückung ist. In der technischen Beschreibung ist ein ME-50 Bus beschrieben, anscheinend eine vereinfachte Version des S-100. Und U10 / U11 hat wahrscheinlich mit dieser Alternative zu tun. Also U10 wieder raus und später den eigentlichen Fehler weiter suchen.
Nach 4 Tagen gepiepse hatte ich keine Lust mehr. Der Schaltplan ist zwar noch nicht fertig, aber große Teile, vor allem der Dekoder und die Bankinglogik, sind erkennbar.


2017-10-14

Erster Erfolg, aber ...

Durch den ersten Erfolg habe ich der Stelle weiter gemacht.
Der Kurzschluss am IC-Ausgang kommt vom Reset-Taster, schon seltsam. Dann ist der Reset-Taster auch noch ein Wechlser, nicht wie üblich ein Schließer, wieder seltsam. Der Öffner-Kontakt geht an ein IC-Eingang, der Schließer-Kontakt an dessen Ausgang, häää. Was soll das? Aber Bilder sagen mehr als 1000 Worte.
Reset Button Schematic
Die Ausgänge sind OpenCollector (OC), durch den Taster geht also nichts kaputt. Aber an dieser Stelle war mir diese Schaltung vollkommen unverständlich. Da ich die Vorgeschichte des Expander nicht kenne, hatte ich die Befürchtung, das hier etwas verbastelt oder ein defektes Bauteil falsch ersetzt wurde. Also habe ich den Reset-Taster erstmal ausser Betrieb genommen. Die Hauptplatine wieder eingebaut und ... hmmm, wieder werden beim 2. Opcode falsche „Schrottdaten” gelesen. Das war's also nicht.
Noch ein Versuch ohne die S-100 Backplane und das sieht wieder besser aus. Da auf der Backplane nur wenige ICs sind, hielt ich die für unproblematisch. Da störte mich der unbestückte Sockel U10 weit mehr, und hier sind auch Leitungen von der Backplane angeschlossen.
Aber welches IC fehlt hier? Wenn es sich um Logikgatter handelt, können es bei einem 14-pol. IC 6 Inverter oder 4 AND/OR Gatter sein. Die Inverter kann man durch die herausgefundene Beschaltung ausschliessen, bleiben AND/OR/NAND/NOR übrig. Da 2 Gatter die Eingänge verbunden haben, macht ein AND oder OR keinen Sinn, also bleiben NAND oder NOR übrig. Da ich nur NANDs (also 74LS00) da hatte, habe ich das mal probiert, und ... haha! Immerhin arbeitet der Z80 wieder den Code im EPROM ab.
Es sieht schon vieles gut aus. Allerdings bleibt die Software in einer Schleife hängen. Zum Glück ist der Sourcecode verfügbar.
Es wird auf einen »RTC« Port geschrieben und gelesen. Da auf dem Mainboard kein Akku oder Batterie verbaut ist (Zum Glück!) gehe ich nicht von einer Real-Time-Clock aus, sondern eher von einer Hardware, die mit einem schnellen Takt (Alles ist relativ!) zählt und einen Interrupt auslöst, also einem „Real-Time-Counter”.
Ich habe dann mit dem Oszilloskop nach den Schreib- und Lesesignalen gesucht, die auf den »RTC« zugreift, aber ich habe nichts gefunden, aber auch gar nichts!
Das war's! Das ganze Design ist vollkommen undurchsichtig und ich finde die RTC nicht! Jetzt mach ich erstmal einen Schaltplan! Ich will jetzt erstmal ein wenig Klarheit. Nur wenn ich die Schaltung kenne, wenigstens teilweise, kann ich anständig messen. Also, was sein muss, muss sein.


2017-10-13

Die erste Messung

Da nach den ersten Tests und Versuchen kein einfacher Fehler erkennbar war (Jonas hatte mich ja schon vorgewarnt), habe ich direkt den Logic Analyzer angeschlossen.
Direkt die erste Messung zeigt ein massives Problem.
Der Z80 startet bei Adresse 0000h, hier wird der Sprungbefehl nach 0F006h (JP 0F006h, Datenbytes C3 06 F0, hellblau eingefärbt) richtig gelesen und ausgeführt (Adresse 0F006h, dunkelblau eingefärbt). Hier liest der Z80 aber nur den „toten” Datenbus mit 0FFh (RST 38h) und macht bei Adrese 0038h weiter. Hier befindet sich nur uninitialisiertes RAM, also „Datenmüll”. Das hier nach nichts mehr anständiges passiert, ist klar.
Deshalb habe ich das EPROM auch verkabelt. Aber das hat genau das gemacht was es sollte. Also sind die Daten bis zur CPU verloren gegangen.
Am EPROM Ausgang kommt ein Buffer (74LS367), ok, aber danach nicht die CPU. Also weiter suchen, es kommt noch ein Buffer. Und danach noch einer. Also 3 Schaltstellen vom EPROM zur CPU, nicht schlecht. Der Designer muss eine Fabrik für 74LS367 gehabt haben, auf der Platine sind 20 Stück verbaut. Bei einer weiteren Messung wurden beim 2. Opcode der 2. und 3. Buffer nicht aktiviert, also konnte das EPROM gar nichts dafuer.
Beim Piepsen fiel mit ein Ausgang auf, der fest auf GND lag. Das gehört so nicht. Von oben war nichts zu sehen, also erstmal die Platine ausbauen.
Wenn die Revision C noch so viele Drähte braucht, möchte ich die Vorgänger mal sehen.
Das ausgebaute Board hatte den Kurzschluss dann nicht mehr, also nochmal probieren. Und siehe da, es geht viel weiter.

2017-10-11

So habe ich den Expander bekommen

Auf dem Rückweg von der CC2017 habe ich bei Jonas den Expander abgeholt.

Bis auf ein paar fehlende Tastenkappen sieht der Expander sehr gut aus. Aber er läuft nicht an. Also mal sehen.
Dabei sind noch das The EXPANDER Installation Guide and Technical Description, der Source des Monitorprogramms und das Hardware Reference Manual des 64kB RAM Board.
Technische Daten:
Z80 Prozessor, 3.5 MHz
4kB ROM, 2kB RAM
Parallele und Serielle Schnittstelle
S-100 64kB RAM Board
3 freie S-100-Erweiterungsplätze



Mitglied im
Classic Computing Logo


Free counters

Kommentare / Fragen an: microexpander@funkenzupfer.de
Letzte Änderung: 2018-03-14 FSt

Impressum / Datenschutzerklärung