Adress Decodierung....

  • Hallo.


    Also ich habe in den letzten 15 Jahren viele Rechner repariert und restauriert, aber ich habe mich bis dato nie mit der Entwicklung von eigener Hardware beschäftigt. Momentan ist es so, dass ich mir in den Kopf gesetzt habe, eine Floppycontrollerkarte für meinen RC2014 CP/M Rechner zu bauen. Wichtig ist, dass sie das IBM 3740 Format unterstützt, um zum einen die ganzen tollen DSK-Images aus dem Netz via Gotek daran lesen zu können und auch an einem 8" Floppylaufwerk dementsprechend Disketten erstellen kann.

    Als Controllerchip habe ich einen TMS2797 gewählt. Dieser hat einen internen Dataseparator und unterstützt 8" und 5.25" Floppylaufwerke, je nachdem wie man ihn jumpert und einen 1MHZ oder 2MHZ Quartz einsetzt.

    Der RC2014 läuft mit einem Z80 Prozessor mit 7.4 MHZ. Es gibt verschiedene Floppy-Controller-Projekte dazu, allerdings nicht im 3740 Format.


    Also habe ich mich heute Abend das erste Mal an die Entwicklung einer Adressierlogik gemacht. Die Steuerung erfolgt über die Registerleitungen A0 und A1 an dem Controller. CS, also Chipselect aktiviert die Kommunikation zwischen Controller und Prozessor.


    Hier der Link zu dem Controllerchip:


    https://pdf1.alldatasheet.com/…iew/29028/TI/TMS279X.html


    Die Chipselect-Leitung wird unter folgenden Umständen auf low gezogen und somit der Chip aktiviert, Signale vom Mainboard kommend:


    - IORQ auf low

    - Adressleitung 7 auf high

    - M1 auf low

    - entweder RD oder WR auf low

    - Adressleitungen 2-6 auf low


    Stimmt auch nur eine dieser Bedingungen nicht, geht CS auf high und der Chip wird deaktiviert. Der Z80 hat 256 Ports (0-255). Bei einer Portabfrage wird die IORQ-Leitung auf low gezogen und der dementsprechende Port am least significant byte vom Adressbus abgefragt. Ich habe das Bit 7 als Bedingung gewählt, in Verbindung mit A0 und A1, sollte die Controllerkarte an Port 80h-83h liegen. Also wie folgt:



    Code
                Read                Write
    80h    Status Register    Command Register
    81h     Track Register     Track Register
    82h    Sector Register    Sector Register
    83h     Data Register      Data Register


    Wie gesagt, es ist das erste Mal, das ich so etwas gemacht habe. Ich habe die Schaltung in einem Simulatorprogramm ausprobiert. Hier ein Schaltbild:




    Was haltet ihr von der Schaltung ? Wird das funktionieren ? Muß ich RD und WR wirklich als Bedingung holen ? Was haltet ihr von der Ausmaskierung der Adressleitungen

    2-6 ? Wenn ich mir das Bild so anschaue, sieht das für mich ziemlich umständlich aus. Das geht bestimmt irgendwie einfacher ?!

    Der Platz auf der Karte für den RC2014 ist begrenzt, Evtl. wäre es sinnig, mich gerade mal mit der Programmierung von einem GAL zu beschäftigen... Einen Elnec-Programmer hätte ich

    da..



    Vielen Dank !


    Gruß Jan

    Einmal editiert, zuletzt von Jan1980 ()

    • Offizieller Beitrag

    allerdings nicht im 3740 Format.

    Lass mich nicht lügen, aber können das nicht alle/die meisten WD FDCs?

    Ich hab die Datasheets gerade nicht "griffbereit", aber ich meine der 179x aus dem MFA kann das auch.

    Wenn ich mir das Datasheet des TMS anschaue, ist der 100% kompatibel zum WD, also sollten die WDs das auch können.



    - M1 auf low

    Ganz schlechte Idee:

    M1 wird nur beim Opcode-Fetch oder Interrupt-Acknowledge aktiv.

    Passt beides nicht zu deiner Beschreibung.

    Wie kommst du darauf M1 mit zu dekodieren?



    Schaltung:

    Das XOR mit WR / RD kannst du dir schenken. Verschlechtert sogar das Timing, s.u.

    Die verODERung sollte man anders aufbauen. In deinem Fall läuft A6 durch 5 ODER Gatter. Besser die Adressbits erst auf ein ODER dann die ODER weiter verketten. Verstanden? Ne? Kann ich verstehen. ;) Mal ich mal besser auf.



    Es gibt eine Timinganforderung die ist mit dem klassischen Adressdekoder nicht zu erfuellen ist.

    Seite 34:

      


    Die Zeitvorgaben tsu(A-RE) und tsu(a-WE) (>=50ns) gehen mit dem Z80 nicht. Wahrscheinlich mit anderen CPUs auch nicht.

    I.a. scheint es aber nicht zu stören, da fast alle FDCs (auch im MFA) funktionieren.

    Alternativ wird CS des FDC fest auf low gelegt und nur RE und WE geschaltet.

    Ich schau mal ob ich den Artikel finde.



    Hast du dir mal überlegt, ob du mit dem Prozessor die Daten schnell genug lesen oder schreiben kannst?


    Viel Erfolg

  • Hallo Jan1980,

    ich würde die Portselktierung mit einem 74HCT688 aufbauen, so besteht die Möglichkeit die Adresse per DIP-Schalter einzustellen.

    Wie Hobi schon erläuterte ist M1 beim IO-Zugrif auf high (ist beim Z80 nicht erforderlich), so funktioniert das auch im Prof180x (HD64180) mit 9Mhz (18Mhz Quarz) Systemtakt einwandfrei.


    Hier die CF-Karte als Beispiel:


    LG Werner

  • Vielen Dank für die Antworten !


    Das mit der M1-Abfrage habe ich auf folgendem Schaltplan abgekuckt und evtl. falsch interpretiert ?!


    http://www.smbaker.com/wordpre…/12/rc2014-floppy-sch.png


    Er hat 2 Floppykarten für den RC2014 entwickelt, die allerdings nicht in der Lage sind, das 3740 Format zu verarbeiten, wenn ich das richtig interpretiere.


    Also M1, RD und RE muß ich für die Decodierung nicht abfragen. Die Ausmaskierung der Adressleitungen 2-6 ist aber von Nöten, denke ich ?


    Den 74HCT688 kannte ich einfach nicht. Damit werde ich mich mal befassen. Port 80h war auch nur ein Beispiel, es wäre schon gut, wenn der Port umschaltbar wäre.


    Später muß ich mich auch noch damit befassen, wie zwischen den einzelnen Floppys umschalte, das unterstützt der FDC selber nicht.


    Funkenzupfer hat natürlich Recht. Der 1791 kann 3740 und der 1771 sowieso. Der 2797 ist softwarekompatibel und hat einen internen Dataseparator. In einem alten Dokument hatte ich gelesen, dass er "komfortabel" wäre, weil vieles schon drin wäre, was man anders mit zusätzlichen Schaltungen lösen müßte. Außerdem war er gerade auf ebay zu haben zu einem überschaubaren Preis...


    Bzgl. der Digitaltechnik hab ich jetzt "Blut geleckt". Wenn das hier klappt, hab ich schon andere Ideen. Aber ich bin halt noch ganz am Anfang. Gibt es eine gute Software, in der ich Schaltungen simulieren kann und die eine Datenbank mit den Chips hat, wie zB auch dem 74HCT688 ? Das kann ruhig "Bezahlsoftware" sein, sofern es in einem gewissen Rahmen liegt...



    Gruß Jan

    • Offizieller Beitrag

    Das mit der M1-Abfrage habe ich auf folgendem Schaltplan abgekuckt und evtl. falsch interpretiert ?!


    http://www.smbaker.com/wordpre…/12/rc2014-floppy-sch.png

    Wo ist in dem Schaltplan ein M1? Ich find's nicht. Kannst du das mal markieren?


    Doch gefunden, an der Backplane.

    M1 geht an den G1 Input des '138, der ist active high, also muss M1 auch high sein, damit der '138 reagiert.


    Der Dekoder aus '138 und '139 ist doch gut. Warum aenderst du den?

    • Offizieller Beitrag

    So, ich habe den Artikel zur anstaendigen FDC Ansteuerung wieder gefunden.



    PROM ist der Adressdekoder.

    Mit der 2. Schaltung (veroderung von RE / WE) bekommt man das komische FDC Timing anstaendig hin.

  • Mir gings ja auch mal darum, das alles zu verstehen. Ich wollte nicht einfach alles abzeichnen. Aber anscheinend hatte ich ja in Bezug auf M1 da etwas nicht richtig verstanden.



    Nein, entweder du nimmst Rd oder Wr zusammen mit der IO Adresse oder eben M1.

    Das verstehe ich jetzt nicht. Ich dachte M1 braucht man überhaupt nicht ?!




    Vielen Dank für die Info !


    Ich denke mal, dass der Z80 mit der Datenverarbeitung nachkommt. Immerhin läuft er mit über 7 MHZ.



    Hat niemand Erfahrungen mit Simulationssoftware ? Was nimmt man da ?


    Gruß Jan

  • So, ich habe noch ein bißchen gelesen und eure Ratschläge natürlich angenommen. CS liegt dauerhaft auf low. Ich habe die RD und WR Leitungen verwendet. Außerdem muß M1 jetzt auf high liegen und ich habe einen 74688 zum Decoding verwendet.. Könnte das so funktionieren ?!




    Vielen Dank !


    Gruß Jan

  • Später muß ich mich auch noch damit befassen, wie zwischen den einzelnen Floppys umschalte, das unterstützt der FDC selber nicht.

    Das ist doch ganz einfach, das machst du über deinen Adressdecoder, ich nehme mal aus deinem Beispiel Basisadresse 80h für die Generierung von CS:


    Code
    80h    Status Register    Command Register  mit DSEL0
    81h     Track Register     Track Register  mit DSEL0
    82h    Sector Register    Sector Register  mit DSEL0
    83h     Data Register      Data Register  mit DSEL0
    84h    Status Register    Command Register  mit DSEL1
    85h     Track Register     Track Register  mit DSEL1
    86h    Sector Register    Sector Register  mit DSEL1
    87h     Data Register      Data Register  mit DSEL1

    /CS=not(not(A15..A8) & (A7) & not (A6..A3))

    DSEL0=not(A2) & not(/CS)

    DSEL1=A2 & not(/CS)

    Adressierung der 4 Register des Controllers: A0 und A1

  • Ja, da ist was dran.... :D



    Vielen Dank !


    Gruß Jan

    • Offizieller Beitrag

    Willst du mehrere Floppy-Laufwerke oder mehrere Floppy-Controller ansteuern?

  • Zwei Floppylaufwerke mit einem Controller wären perfekt. Bis jetzt hab ich noch die billige DIP-switch Lösung drin... :)



    Gruß Jan

  • Ich sehe da noch einen Fehler in meiner Logikgleichung für die beiden DSel-Signale, das muss noch invertiert werden, denn Driveselect ist ja Low-Aktiv. Also so:


    DSEL0=A2 & not(/CS)

    DSEL1=not(A2) & not(/CS)


    /CS kannst du natürlich auch über einen 5-Bit-Komperator, z.B. den

    MC10166, plus einen 8-Bit-Komperator realisieren, oder du nimmst zwei 8-Bit-Komperator z.B. dem SN74LS688. Bei dem Komperator für die niederwertigen Adressbits legst du dann a0-a2 und b0-b2 gemeinsam auf low oder high, auf a3-a7 auf beiden Komperatoren die übrigen Adress-Signale und dann kannst du über die B-Eingänge per Jumper und Pullup/Pulldown die Basisadresse des Controllers in 8-Byte-Schritten einstellen.


    1ST1

  • Gibt das keine Timing Probleme, wenn ich das über verschiedene Ports laufen lasse ? Das ist ja dann wirklich "gefühlt", wie als würde er 2 Controller ansprechen ?! Oder nicht ?


    Und wie sieht es aus mit dem Reset ? Den kann ich doch einfach an die normale Reset-Leitung der Backplane legen ?! Die wird doch auch auf low gezogen.. Oder was haltet ihr davon ?



    Gruß Jan

  • So, ich hab den Schaltplan jetzt mal mit einem Schieberegister zur Umschaltung der Diskettenlaufwerke 0 und 1 erstellt. Den 8 Bit Comparator hab ich drin gelassen. Was meint ihr zu der Schaltung ?



    EDIT: Mist, die Umschaltung kann ja so auch nicht funktionieren. Das Latch würde ja IMMER am Adressbus hängen und ständig hin und herschalten... :fp:


    Gruß Jan

    Einmal editiert, zuletzt von Jan1980 ()

    • Offizieller Beitrag

    Was meint ihr zu der Schaltung ?

    Der Thread hat als Überschrift "Adress Decodierung....", die hast du anscheinend verstanden.

    Für einen Floppy-Controller nimm doch erstmal ein bekanntes Design, wie den aus Post #4. Warum das Rad nochmal erfinden?


    Ich bin immer dafür, wenn sich Leute weiterbilden / sich für neues interessieren. Aber bitte in angemessenen Schritten, sonst wandelt sich das in Frust.


    Viel Erfolg

  • Ja, da haste ja Recht mit den kleinen Schritten. Dennoch will ich weiterkommen und es ist für mich nicht frustierend.


    Eines der bestehenden Designs kann ich ja nicht verwenden, weil diese Controller nicht das unterstützen was ich möchte. Ich werde die Floppyumschaltung ganz anders machen. Mehr dazu in einem anderen Thread später, wegen der Übersichtlichkeit...


    Gruss Jan