16 Bit ISA IDE Controller

  • Hallo, da mein Projekt nun ein wirkliches Projekt wird, habe ich entschlossen das Thema, was ich hier angefangen habe (RE: Fragen zu IDE-Ports in Verbindung mit dem ISA-Bus), hier weiter zu führen, weil es inzwischen hier passender ist. Ich poste hier das vorläufige design des Prototyps. Ich hab erstmal einen Autorouter drüberlaufen lassen. Ist nichts das beste Ergebnis, aber ich erwarte sowieso Fehler da drinnen und möchte lieber die Zeit in denn Nachfolger stecken, wo ich eventuelle Fehler nicht haben werde (Und die Form nicht die eines Fladens ist). Das Nachfolgedesign wird auch warscheinlich weitestgehen in SMD sein. Danach will ich eventuell das Board um weitere Sachen erweitern. Aber mein Ziel ist es, nur Chips zu verwenden, die noch immer in Produktion sind und man dadurch ganz einfach bei Digikey, Mouser, LCSC und Co bestellen kann. Kein New Old Stock und Co. Wenn das jetzige Design funktioniert, werde ich überlegen z.B. Serielle Schnittstelle, Floppy und Co hinuzufügen. Wobei ich werde auch mal gucken, modernere Sachen hinzuzufügen wie z.B. PS/2 Maus (Falls sich was Ergibt eventuell auch für eine USB Maus) oder ein CH375 für USB-Sticks. Aber das steht noch in den Sternen. Ich hab den Aktuellen Stand (Kicad 6 Dateien) von allem mal als Zip angehängt und den Schaltplan als PDF.

  • Wären die Platinen für den ersten Prototypen gemacht werden, habe ich schon mal begonnen, die hoffentlich Finale Variante zu designen. Diese wird weitestgehend mit SMD-Chips sein (EEPROM ist aber klassisch gesockelt). Hier sind zwei Bilder als Teaser, wie die SMD-Version aussehen wird. Ich hab es wieder erstmal mit dem Autorouter gemacht, werde aber die Leiterbahnen manuell verändern.


  • Kleines "Update": Da ich ja noch immer auf die Platinen warte, habe ich nach paar Chips für zusätzliche Funktionen geguckt. Dabei bin ich auf paar nette Chips gestoßen. LPC47M107S und LPC47M182 wären ganz schön, leider haben die ein LPC-Interface und da bräuchte man schon einen CPLD. Die haben einen integrierten Floppy, Serial, Gameport und Keyboard Controller, der LPC47M182 unterstützt auch MPU-401 Midi. Interessant wären diese beiden aber für ein FPGA-System z.B. . Welchen ich aber warscheinlich nehmen werde ist der FDC37C669. Floppy, Serial und Parralel sind drinnen. Es gebe noch denn FDC37C78, der ist aber nur ein Floppy Controller. Von den zwei Serial Ports werde ich warscheinlich aber an einen Microcontroller weiterleiten, damit man eine PS2 Maus (vielleicht auch eine USB Maus) dranhängen kann, wobei ich diesen warscheinlich auf ein extra Modul packe zum draufstecken. Das wichtigste an diesen Chips ist, das die nicht EOL und nur als NOS zu bekommen sind. Mit dem CH375 muss ich mal gucken. Ich habe im Datenblatt gesehen, das der als Host für USB Maus und Tastatur dienen kann, was interesant ist. Die Frage ist, ob der Output direkt an den seriellen Port (bei Maus) oder denn Bus (bei Tastatur) oder ob ein Microcontroller jeweils dazwischen muss. Wobei die Frage ist bei Tastatur: Würde das Probleme geben mit dem Tastaturcontroller, der schon auf dem Mainboard ist?

  • Erstmal: schönes Projekt. Käme mir für einen 286 gelegen.

    Falls Deine Fragen aus dem Ursprungsthread noch relevant sein sollten:

    Zitat

    1. Bits 0,1 und 2 vom ISA-Bus vom Adressbus sind für die Register und gehen zu BA0, BA1 und BA2. Bit 3 ist immer 0, Bit 4,5 und 6 sind immer 1. Bit 8 ist auch immer 1. Habe ich richtig verstanden das Bit 7 vom ISA-Bus Chip Select 0 und 1 Ansteuert (und damit warscheinlich Master/Slave auswählt?)?

    Im von Dir zitierten Schaltplan siehst Du, dass ISA-A0..A3 lediglich durch einen LS244 geschoben werden und dann als BA[0..3] beim IDE aufschlagen. Die Antwort ist somit: ja.

    Die /CSx wählen m.E. einen Registersatz im IDE-Controller der HDD aus. Da gibt es dann ein Master/Slave Bit.


    Zitat

    2. Oft hat man ja zwei IDE Anschlüsse. Ich habe mir folgenden Schaltplan etwas angeguckt (http://www.alexandrugroza.ro/m…o-interface-schematic.png) und so weit ich gesehen habe, ist für diese Sache so wie es scheint Bit 9 wichtig. Liege ich da richtig?

    Hmmm...

    $170 = 0b0001 0111 0000

    $1F0 = 0b0001 1111 0000


    Sieht für mich nach Bit 7 aus.

    Ich habe das Thema IDE kurz im "PC Hardwarebuch" von H.P.Messmer nachgeschlagen. Er erwähnt nur den 1.Kanal.


    So sehe ich es:

    IDE Channel #1 wird mit den Basisadressen $1F0 und $3F0 eingeblendet. /CS1 wählt den Registersatz bei $1Fx, /CS3 den bei $3Fx. Daher wohl auch die Ziffern nach /CS.

    Ergo sind $170 und $370 dann die Basisadressen für den 2. IDE Kanal.


    Zitat

    3.IOCS16 am ISA-Bus ist ja dafür da um zu signalisieren, das was da angesprochen wird 16 Bit fähig ist. Das geht einfach an den IOCS16 Pin vom IDE-Anschluss (wenn es in einem 16 Bit ISA-Slot ist natürlich)?

    Penibel gesagt: das I/O Target kann 16bit Zugriffe verarbeiten. Für Memory Zugriffe gibt es daher /MEMCS16.

    Ist in dem von Dir bezeichneten Stromlaufplan so gemacht. Und da es ein Signal VON der Platte ist, bringt es somit auch wenig es nochmal durch einen LS244 zu schieben - was in dem Schaltplan auch nicht gemacht wird.


    BTW: mit dem CH375 hast Du mich auf eine Idee gebracht. Werde mal das Datenblatt studieren.

    Einmal editiert, zuletzt von Bernd () aus folgendem Grund: Dreckfuhler

  • Zitat

    Die Frage ist, ob der Output direkt an den seriellen Port (bei Maus)

    Du meinst das UART Interface des CH340 über Pegelwandler an COM1/2 anflanschen?


    Zitat

    oder ob ein Microcontroller jeweils dazwischen muss.

    Ich drösel das mal so auf, wie ich Deine Frage verstehe:

    - CH375 als USB-Tastaturcontroller zum PC-Mainboard

    - wann wird die Tastatur erstmalig gebraucht? Wenn Du BIOS Settings ändern willst!

    - somit hast Du keine Chance, dass ein SW Treiber alles "gerade" biegt, da die CH375 Registern sicher nichts mit dem zu tun haben, was der PC erwartet

    - somit muss die HW das gerade biegen, ergo -> Microcontroller

    Nimmst Du aber einen Microcontroller, so kennt dieser sicher das ISA-Interface/Protokoll nicht, Du musst also alles per Bitbanging auf GPIOs machen. Vergiss also AVR. Ich habe mich schonmal mit sowas gedanklich beschäftigt und bin bei µC >= STM32F4 angelangt. Eher F7/H7.

    Ein ISA Device darf den Bus m.W. so etwa 15µs für sich belegen, aber das willst Du sicher nicht, denn jeder Bustakt, den der (langsame) µC braucht, um ein Byte von der Tastatur zu übertragen, geht für andere Dinge drauf. Wenn Doom nur noch mit 10fps auf einem 386DX40 läuft, weil Dein USB Tastaturinterface den Bus so lange belegt, stehen die User mit Mistgabeln und Fackeln vor Deiner Haustür. ;(

    Möglichkeit #2: das UART Protokoll des CH340 auf das DATA/CLK Protokoll des Tastaturcontrollers anpassen. Dann musst Du aber entscheiden, ob das was aus dem UART des CH340 kam nun ein Maus- oder Tastaturdatenpaket ist, um es an COMx oder Tastaturcontroller weiterzuleiten.

    BTW: das benötigt dann ext. Verkabelung aus der Steckkarte raus in COMx bzw. die 5pol DIN Buchse rein.


    Zitat

    Wobei die Frage ist bei Tastatur: Würde das Probleme geben mit dem Tastaturcontroller, der schon auf dem Mainboard ist?

    Naiv betrachtet: ich denke nicht, aber sicher bin ich mir auch nicht, da ich nicht weiß, was der Tastaturcontroller sonst noch so macht.

    Zumindest bei Mainboards aus diesem Jahrtausend macht es ja keinen Unterschied, ob Maus/Tastatur an PS/2 oder USB hängen. Aber das sollte erstmal nicht der Maßstab sein.


    Hier noch ein paar Links:


    An Introduction To Programming With ATA And ATAPI

    Primary IDE controller: 1F0h to 1F7h and 3F6h to 3F7h

    Secondary IDE controller: 170h to 177h and 376h to 377h

    Somit liege ich mit der Behauptung "Basisadresse $3F0" etwas daneben. Es ist nur $3F6 & $3F7.


    http://www.controllersandpcs.de/ataio/code_snippets.pdf


    Ab Kap.9 wird es erst interessant:

    http://www.controllersandpcs.de/lehrarchiv/pdfs/tdp/tlh4_09.pdf

  • Nachtrag:

    der Tastaturcontroller löst IRQ1 aus. Der liegt auf dem ISA aber nicht an. Somit scheidet die Option USB<->CH375<->µC<->ISA wohl aus. Bleibt wohl nur ein Kabel aus der Steckkarte heraus in die 5pol DIN Buchse zu führen.

  • Der Microcontroller des Mainboards ist auch in den Boot bzw Resetvorgang eingebunden. Ich denke das könnte "Durcheinander" geben. Es gab ja auch nie Tastatur PS/2 ISA Karten. Das andere ist ja quasie ein "eingebauter externer Adapter" das geht natürlich.

    So ganz ist mir der Hintergedanke für dieses Projekt nicht klar geht es ums Selbermachen bzw. Lernen? ISA Controller Karten sind ja noch gut zu bekommen...

    386SX- 20 Mhz "Erster eigener Rechner!2" NoName Komponenten

    486DX -30 "Industrie PC" auf Steckkarte

    Super Sockel 7 Gigabyte GA-5AA 3Dfx Voodoo 3500 TV

    AMD "Geode" ebenfalls Steckkarte für Backplane

    3x IBM Netvista 8364 "ThinRetroSystem" 1-2 von denen würde ich tauschen...


    "und noch so einiges mehr... "

  • Mein Gedanke für das USB-Tastaturenproblem wäre ehr, den Tastaturencontroller, der auf dem Mainboard meist gesockelt ist und oft der von Intel ist (es können auch andere geben), das man den von Mainboard rausnimmt und dann auf die neue Controllerkarte steckt, dann ein Kabel von dem Controller auf dem Sockel und dann auf dem Controller halt das ganze USB (und optional PS/2) macht. Theoretisch könnte man auch den originalen Tastaturencontroller weglassen und was eigenes machen (wäre Interesant für die, wo der originale Tastaturencontroller defekt ist). Meistens ist der Tastaturencontroller ein Microcontroller, ein Intel 8048. Hab sogar noch paar Romlose Versionen von dennen.

  • Wäre nicht umgekehrt naheliegender? Ein 8048 Replacement mit Anschluss für einen USB Header? Mit heutiger SMD Technik sollte der Platz für einen entsprechenden Controller gegeben sein...

    386SX- 20 Mhz "Erster eigener Rechner!2" NoName Komponenten

    486DX -30 "Industrie PC" auf Steckkarte

    Super Sockel 7 Gigabyte GA-5AA 3Dfx Voodoo 3500 TV

    AMD "Geode" ebenfalls Steckkarte für Backplane

    3x IBM Netvista 8364 "ThinRetroSystem" 1-2 von denen würde ich tauschen...


    "und noch so einiges mehr... "

  • Wäre nicht umgekehrt naheliegender? Ein 8048 Replacement mit Anschluss für einen USB Header? Mit heutiger SMD Technik sollte der Platz für einen entsprechenden Controller gegeben sein...


    Wäre auch möglich

    Hm oder einfach nen Protokolkonverter unter den AT Controller packen.


    BTW: mit dem CH375 hast Du mich auf eine Idee gebracht. Werde mal das Datenblatt studieren.

    Hab eine ISA USB Karte damit, bootet mit XTIDE Bios von USB Stick.

    Einmal editiert, zuletzt von matze79 () aus folgendem Grund: Ein Beitrag von matze79 mit diesem Beitrag zusammengefügt.

  • Wie es gibt ISA USB? Ich dachte immer das sind IPC karten die nur in neueren Rechnern laufen...

    386SX- 20 Mhz "Erster eigener Rechner!2" NoName Komponenten

    486DX -30 "Industrie PC" auf Steckkarte

    Super Sockel 7 Gigabyte GA-5AA 3Dfx Voodoo 3500 TV

    AMD "Geode" ebenfalls Steckkarte für Backplane

    3x IBM Netvista 8364 "ThinRetroSystem" 1-2 von denen würde ich tauschen...


    "und noch so einiges mehr... "

  • Wie es gibt ISA USB? Ich dachte immer das sind IPC karten die nur in neueren Rechnern laufen...

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Auf einem 386DX40 kommt er auf ~400KB/s. Finde ich OK. Auf einem 8088 hingegen waren es nur ~6KB/s. Da sind Lochkarten schneller.

  • Zur Zeit werden neue Treiber und ein neues BIOS für die ISA USB Karte geschrieben: https://forum.vcfed.org/index.…eads/isa-usb-board.76978/

    Müsst ihr mal ab ca. der Mitte des threads suchen.


    Für das BIOS hat Hak Foo auch ein gitlab respository:

    hakfoo / v40-bios · GitLab
    GitLab.com
    gitlab.com


    Letzter DOS Treiber von FreddyV:

    ISA USB board
    The reason for the "DANGER" warning is that this tries to specify consistent geometry in the INT 41 table. Since this is just fixed data in ROM, it's hard…
    forum.vcfed.org

  • Hab mal in Deinen Schaltplan geschaut:

    • warum vier 74HC245? M.E. genügt es, wenn Du zwischen ISA und beide IDE Kanäle zwei 245 auf die Datenleitungen setzt. Die Eingänge des unbenutzten Kanals sind eh hochohmig. Vereinfacht auch das Layout. Zumindest mache ich es so...
    • Schau mal in die Datenblätter (Timing) der EEPROMs/Flash/EPROM. Wenn Du /CS auf GND legst und nur /OE bzw. /WE nutzt, kostst das zwar etwas an Strom, aber der Baustein ist dann wesentlich schneller, als die aufgedruckte Zugriffszeit. Mache ich bei 29040/29F800/29F1610 Flashes und es funktioniert.


    Das Datenblatt zum CH375 ist schon gruselig. :fies:

    Habe mich gestern ein wenig zur CH37x Familie "aufgeschlaut".

    Bei Aliexpress und LoTech Adapter ist der /INT des CH37x nicht and eine IRQ Kontaktzunge am 8bit ISA herausgeführt! Im Schaltplan des LoTech Adapters ist das auch zu erkennen. Ich gehe davon aus, daß der SYS Treiber sich in einen Timerinterrupt einhängt und dann den 64Byte Puffer des CH37x im Polling füllt/leert. Ob ein neues Paket angekommen ist muss er dann wohl auch im Polling ermitteln ?( Suboptimal sage ich mal! Aber dazu sollte sich jemand äußern, der sich mit 80x86 Systemprogrammierung auskennt. Ich kann es nicht.

    Der 68000 weigert sich bekanntlich Speicher 8bittig Byte-an-Byte anzusprechen, d.h. mit einem "Leerbyte" dazwischen geht es. Für ein 8bit EPROM habe ich mal eine Schaltung gebaut, die ihm ein 16bit EPROM vorgaukelt. Der CH37x hat auch nur einen 8bit Datenport und da er wohl laut Datenblatt(!) recht fix ist, ließe sich da u.U. noch Geschwindigkeit rauskitzeln, falls ein 16bit Zugriff (mit evtl. 1WS) schneller ist als zwei 8bit Zugriffe und man etwas mehr Bauteilaufwand treibt wie in diesem Blockschaltbild:

    Der 74x646 ist ein bidirektionales, transparents Latch. 245 sollte klar sein.

    Ob jetzt Hi- oder LoByte durch den 646 gehen, lasse ich mal offen. Muß man im Detail drüber nachdenken

    Bei 16bit Schreibzugriffen wird D0..7 im 646 gelatcht und D8..15 durch den 245 zum CH37x durchgeschoben. Ist dieses Byte im Puffer, wird das im 646 gelatchte in den CH37x geschrieben.

    Bei 16bit Lesezugriffen muss das erste Byte vom CH37x im 646 gelatcht werden. Das zweite Byte wird durch den 245 geschoben und zeitgleich wird das im 646 gelatchte Byte auch auf den ISA Bus gelegt, damit die CPU 16 Bit sieht.

    Kann ein ISA-Kenner hierzu was sagen?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!