Micro Expander (angeblich TRS-80 kompatibel)

  • Ich habe mir einen Micro Expander Model 1 gekauft. Da kein Netzteil vorhanden war, habe ich ein wenig recherchiert und festgestellt, dass das Gerät wohl S100-Bus typische Spannungen benötigt. Diese sind 8V, 16V und -16V. Die +/-16V werden im Gerät selbst erzeugt, weshalb 2x 18V AC eigespeist werden sollten. Die 8V DC werden Extern erzeugt. Um das Gerät im Vorfeld zu testen, habe ich einfach 8V und 16V direkt an die entsprechenden Anschlüsse (nach dem Gleichrichten usw.) angeschlossen. Das Gerät gibt mir nun einen Bildschirm voller Textzeichen. Leider war es das dann auch. Weiter komme ich derzeit nicht.


    Die Frequenz des Z80 (NEC D780C-1) liegt bei ca. 3,57 mhz. Das Displayformat liegt bei 80x24 Zeichen. In dem Gerät selbst sind nur 2 EPROMs: das Char-Rom und das Monitor Rom (txt in bin umbenennen).


    -- Wer kennt sich mit Z80-maschinen aus, so dass ich das Gerät wieder zum laufen bringen kann?


    -Jonas

  • Schoene Maschine hast du da!


    Messtechnik hast du ja anscheinend. Also hast du bestimmt schon Takt, Reset usw. getestet.
    Die 3A auf den 8V find ich viel. Auch weil 15W ( 3A * (8V-5V) ) Verlustleistung in Waerme umgesetzt werden wollen.
    Was sagt den die Spannung an den ICs?


    Viel Erfolg

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

  • Das sind meine telepatischen Faehigkeiten. :-)


    Oder schau dir die Bilder auf flickr an, da steht's auch.

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

  • ich habe jetzt etwas mehr infos:


    Das Rom liegt wohl an Addresse F000 bis FFFF und der Video RAM von E800 bis EFFF oder im Rombereich. Der Takt liegt an der CPU an, Reset erzeugt keinen low-puls und auch ein manuelles low an der Resetleitung des Z80 ändert nichts am Systemverhalten. Sobald ich meine restlichen Sachen hier habe (8V und +/-16V Netzteile), werde ich weiter testen. Solange lasse ich es erstmal liegen.


    Ich könnte von einem amerikanischen Nutzer das Handbuch, Romlisting und Netzteil bekommen. Mal sehen... derzeit ist es Ihm zu kalt um in seinen Schuppen zu gehen um das Netzteil zu suchen :-P


    -Jonas

  • Aber der Z80 startet doch immer bei $0000, oder?


    Definitiv! Das wundert mich auch etwas.
    Oder es gibt eine Umschalt-Logik, die mindestens beim ersten Opcode das ROM bei $0000 einblendet. Der erste Jump geht dann ja nach $Fxxx.
    Vielleicht ist die ja defekt.

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

  • Ein Z80 startet tatsächlich immer bei $0000.
    Andererseits ist es durchaus plausibel, dass bei einem Rechner dieses Alters und in dieser professionellen Ausstattung (S100-Bus, 80 Zeichen Bildschirm) CP/M als Betriebssystem vorgesehen ist - dann wiederum muss ab $0000 RAM liegen, und das ROM mit der Boot-Routine liegt in der Regel weit hinten.
    Beim Start wird dann nur durch z.B. vorübergehendes Einblenden des Roms dafür gesorgt, dass an der Adresse 0 ein Sprungbefehl in die Boot-Routine gefunden wird.


    Woher stammt denn die Info mit den Adressen?


    Ein Blick auf den Monitorinhalt könnte helfen; dafür fehlt mir hier aber gerade das Werkzeug :S

  • Fritz,


    der Ansatz ist richtig, aber statt die DZ80-Version zu posten, die mir gerade auch nichts nützt, wäre das generierte Assemblerlisting interessanter gewesen. :tüdeldü:


    Auf dem Bild kann man immerhin schon einiges erkennen:
    Die Sprungleiste am Anfang des ROMs ist durchaus üblich; es sind alles absolute Sprünge, d.h. das funktioniert unabhängig davon, wo dieses ROM in den Adressraum eingeblendet wird, insbesondere an Adresse 0000.
    Auffällig ist, dass der Stackpointer auf $ffc0 gesetzt wird - dort sollte also eigentlich RAM liegen. Das passt wieder nicht zum ROM von $f000 bis $ffff. Außer das ist wieder irgend ein übler Trick, z.B. um von der aufgerufenen Routine bei $f2de einen "Rücksprung" an eine im ROM definierte Stelle zu machen ...


    Ansonsten würde ich mir als erstes den Code bei $f09d ansehen, ob das irgendwie wie eine Initialisierungsroutine aussieht (Interrupts deaktivieren, Stackpointer setzen, evtl. irgendwelche Portzugriffe, um das ROM wieder aus dem Adressbereich $0000 auszublenden etc.)


    Sobald ich an einen Rechner komme, werde ich mir das mal genauer ansehen ...


    Georg

  • der Ansatz ist richtig, aber statt die DZ80-Version zu posten, die mir gerade auch nichts nützt, wäre das generierte Assemblerlisting interessanter gewesen. :tüdeldü:


    Achje.... ?(


    lade die Datei mal runter.....


    Anbei noch ein Hexausschnitt und den anderen Kram damit keine Beschwerden kommen..

  • Hier mal das disassembled Rom von einem user aus GooleGroups


  • Mea culpa ... :fp:

    lade die Datei mal runter.....


    Du weißt schon, Bäume und Wald ...


    @ stynx :
    Das kommentierte Listing ist ja klasse. Der ROM-Anfang springt also wie erwartet zur Kaltstartroutine. Gibt's da auch mehr von? Das angehängte Monitorlisting ist identisch, aber ohne Kommentare, oder habe ich da schon wieder was übersehen?


    Jetzt bewegen mich zwei Fragen:
    1. Wie schaffen die es, das ROM beim Start an Adresse 0 einzublenden und später wieder auszublenden?
    2. Wie sieht es mit RAM bei der Kiste aus? Laut Specs hat die Maschine kein eigenex RAM, sondern benötigt dazu eine S100-RAM-Karte - sowas scheinst Du aber verbaut zu haben, wenn ich Deine Bilder richtig interpretiere.


    Schaltplan gibt es keinen?
    Ich muss mal sehen, ob ich an meine Cromemco-Unterlagen komme, um zu sehen, wie die das mit dem ROM gemacht haben. Das war recht gut beschrieben afair, und ist evtl. übertragbar.


    Mir fällt gerade auf, dass immer mal wieder Adressen aus dem Bereich $fxxx zum Zwischenspeichern von Registern genutzt werden - evtl. wird das ROM nach dem Start sogar ins RAM kopiert und dann ausgeblendet? :grübel:

  • So, habe gerade mal recherchiert, wie das woanders läuft ;)


    Die ZPU-Karte von Cromemco hat eine Kaltstartoption, die einen von 16 verschiedenen Sprungbefehlen (JP 0000, JP 1000, JP 2000, etc.) ausführt; die Adresse lässt sich per DIP-Switch einstellen. Dazu wird offenbar gar nicht das ROM eingeblendet, sondern tatsächlich nacheinander der Sprung-Opcode ($C3), das Low-Byte der Adresse (immer 0) und dann das ausgewählte High-Byte dem Prozessor beim Opcode-Fetch auf den Datenbus gelegt. Der Sprung nach $F000 kommt also nicht aus dem ROM, sondern aus der Hardware.


    Evtl. ist es hier ähnlich. Das lässt sich aber wohl nur mit dem Schaltplan oder dem Logikanalysator feststellen.

  • Die Kommentare habe ich aus der ersten Seite des originalen Romlistings abgeschrieben. Derzeit warte ich noch auf die Antwort des aktuellen Besitzers. Mehr habe ich auch nicht :-/


    Das Handbuch könnte auch den Schaltplan enthalten, da es sehr umfangreich sein soll. Ich werde alle Dokumente digitalisieren und online stellen, sobald ich diese habe.


    -Jonas

  • Die Kommentare habe ich aus der ersten Seite des originalen Romlistings abgeschrieben. Derzeit warte ich noch auf die Antwort des aktuellen Besitzers. Mehr habe ich auch nicht :-/


    Das hatte ich als eine mögliche Erklärung gesehen, aber als unwahrscheinlich verworfen, weil es nach zuviel Arbeit aussah :D


    Das Handbuch könnte auch den Schaltplan enthalten, da es sehr umfangreich sein soll. Ich werde alle Dokumente digitalisieren und online stellen, sobald ich diese habe.


    Dann würde ich gerne mit weiteren Überlegungen auf diese Sachen warten - die Kommentare dürften vieles vereinfachen.


    Georg

  • Dann würde ich gerne mit weiteren Überlegungen auf diese Sachen warten - die Kommentare dürften vieles vereinfachen.


    Georg


    Genau :-)


    Ich habe heute nochmal die Spannungen durchgemessen und festgestellt, dass auch -16V auf dem Expander Mainboard verwendet wird. Da das Gerät einen Seriellen Port hat, würde ich darauf tippen, dass es dort verwendet wird. Eventuell ist da aber auch mehr im Spiel. Ich habe heute auch versucht das Board direkt mit +5V und +12V zu speisen um die Spannungswandler zu umgehen... ging nicht. Ich bin ein wenig ratlos und muss definitiv erstmal die korrekten Spannungen über die vorgesehenen Versorgungsleitungen einspeisen. Ich hoffe die Netzteile kommen morgen, dann kann ich das WE komplett nutzen ;-)


    -Jonas

  • Da die S100-Karten ihre eigenen Spannungsregler enthalten, müssen die natürlich mit "Überspannung" versorgt werden.
    Soweit ich das sehe betrifft das bei Dir nur die RAM-Karte; jetzt ist die Frage, welche Rolle die derzeit bei Deinem System spielt.
    Und was heißt "ging nicht" - schlechter als vorher oder 'nicht besser'?
    Wenn Du die RAM-Karte nicht mit 8V (und ggfs. 16V) versorgst, spielt die definitiv nicht mit - ist die Frage, ob der Rechner aktuell überhaupt in der Lage ist, das RAM zu nutzen, oder ob er schon vorher hängen bleibt.


    Georg

  • Jetzt habe ich mir mal das Handbuch durchgelesen (überflogen), und zumindest ein paar unserer Fragen werden dort beantwortet:


    - Das ROM liegt tatsächlich von F000 bis F7FF (2K). Da es doppelt so groß ist, werden die zweiten 2K per Bankswitching angesprochen.
    - Von F800 bis FFFF liegen das Video-RAM sowie Systembereiche (Stack etc.)
    - Beim Reset wird das ROM für 4 Maschinenzyklen ab Adresse 0 eingeblendet. Das war ja eine der vermuteten Varianten - wobei diese Umschaltlogik in Hardware realisiert wird.


    Und das ist natürlich schon mal ein Kandidat für eine mögliche Fehlfunktion. Ich würde mal versuchen, per Logiktester/Oszilloskop/schlimmstenfalls Messgerät an den Adressleitungen zu prüfen, ob der Prozessor sich im Adressbereich Fxxx bewegt. Soweit ich das sehe sollten im Monitor alle Lese-/Schreibzugriffe in diesem Bereich bleiben (mit Ausnahme irgendwelcher Portzugriffe, die das erschweren können).
    Wenn das so ist, kann man vermutlich erwarten, dass diese Startlogik funktioniert (und umgekehrt).


    Hast Du inzwischen auch das Netzteil bzw. eine andere stabile Stromversorgung?

  • Ich hoffe er wird hier mal ein paar Infos rein stellen, was er so gemacht hat ;-)


    Klar.
    Mal in Kurzform vorne weg, es war eine Messorgie seines gleichen. Ich hab ziemlich schnell gesehen, das es ohne Logic Analyzer nichts bringt. Und das zeigte, das der Prozessor nach dem ersten Sprungbefehl das EPROM gar nicht mehr gelesen hat. Und dann bei der ersten Analyse des Datenpfades waren 3 Buffer hintereinander vom EPROM zum Prozessor. Das ganze Design ist so verzwickt, das ich erstmal einen Schaltplan gemacht habe, wenigstens so weit, das ich weiss wo ich was messe.
    Also erstmal mal tagelang das Piepsen des Multmeters ertragen. Dafuer ist mein Tinitus jetzt erstmal weg. :)
    Und wieder messen und messen. Und heute nachmittag habe ich den (nicht letzten) Fehler gefunden: Die Loetstelle des GND Pins eines 7404 (6fach Inverter) auf der S100-Backplane war defekt. Nachgeloetet und gut ist. Aber an dem IC wackelt's noch oefters. Auch eine weitere defekte Loetstelle an den S100-Verbindern ist mir untergekommen.


    Ich werd das ganze mal ausfuehrlich auf meiner Micro-Expander Seite beschreiben.


    Hoffentlich den Reset-Taster repariert ... ;)


    Ja, der hat mich auch noch beschaeftigt. Das Board lief im alleine ja schon sehr gut, hatte sich aber in einer Endlosschleife aufgehangen. Dabei hab ich aber eine Software-Anomalie im Monitor gefunden. Aber nichts schlimmes.



    Jetzt erstmal gemuetlich ein Bierchen trinken.
    Bis die Tage
    Florian

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