80186 Selbstbau-Computer -> Fortschritt in Kiloherztakten

  • scorp hat es los getreten...

    Die "long story short" -> Ich baue plane seit mehreren Jahren mit meinem Dad einen "Computer" auf 80186 Basis. Ich werde aber die lange Geschichte später erzählen, denn ich brauche nun erstmal Hilfe


    Er soll *nicht*:
    x86 / IBM Kompatibel sein

    Er soll:
    Freiprogrammierbar sein (also in Maschinensprache)
    Alle Möglichkeiten des 80186 ausnutzen


    Er war geplant als:
    1) Einplatinencomputer (verworfen)

    Keine Bilder, da nur auf Papier [und das warscheinlich schon weg]


    2) Sandwitchplatine (verworfen)


    3) Mainboard als 96 Pol Messerleistenkarten (verworfen)


    4) ISA Steckplatz-Computer aber mit eigenem Pinout (2 Layer)

    Kein Bild


    5) ISA Steckplatz-Computer aber mit eigenem Pinout (4 Layer)




    6) Slotcomputer mit ISA-Mechanik und ISA-Bus compatibilität (Verworfen)

    Verworfen weil das mit den ISA Signalen echt n Scheiß ist. Also nix ISA. Siehe dazu Diskussion Seite 1 & 2


    Aktueller Stand: Version 5.4
    Adress, Daten, diverse Signale auf ISA Bus, Spannungsversorgung ISA-Kompatibel, Clockout wählbar, CPU Frequenz wählbar

  • Eine kleine Geschichte. Warum mache ich das eigentlich?


    Nun, die Geschichte schreibt sich wie folgt:


    Papa ist Dipl.Inf. Die Diplomarbeit war ein selbst geschriebenes Schreibprogramm, was die Anzahl der Zeichnen auf dem Display kennt und automatisch Zeilenumbrüche beim letzten Leerzeichen einfügt. Krux: Das Programm wurde auf einem selbstgebauten Computer geschrieben. Und dieser genau ist die Ursache warum ich das mache.


    Klein i440BX (sozusagen i430LX) hat im Alter der einstelligen Ganzzahlen besagte Dipomarbeit in die Finger bekommen... und komplett zerlegt. Im meinem Kopf dümpeln noch ein paar Bilder rum; der Computer sah ungefähr wie folgt aus:

    3 oder 4 Stück 160x100 Platinen, an jedem kleinen Ende eine volle Stiftleistenreihe mit langen Stiften nach unten, sodass diese gestapelt werden konnten. Die CPU war ein 8085, das "Display" waren zwei 20x1 7-Segment Anzeigen. Es gab ein ROM und Batteriegepuffertes RAM und eine Platine voll TTL-Logic. Verdrahtet mit der WireWrap Methode.


    Laut Aussage meines Vaters war das Ding komplett MemoryMappedIO gesteuert. Wenn die CPU rechnete, ging das Display aus und Tastatureingaben wurden ignoriert. Programmiert wurde das Betriebssystem *hardcore!* mit einem selbstgebauten EPROM brenner. Also 8 Schalter für die Adresse, 8 Schalter für die Daten und den "Brenne-jetzt" knopf - das ganze natürlich in Maschinensprache.

    Das "Word" mit automatischen Zeilenumbrüchen wurde dann auf dem Rechner selbst geschrieben.


    Ich habe die CPU heute noch in meiner Sammlung (die Farbe ist fast komplett weg, aber das "P8085" erkennt man noch)


    Da ich mit den Jahren an Erfahrung und Wissen gesammelt habe, hab ich ungefähr in 2009 beschlossen den "Unvollendeten 2.0" zu bauen. Und deswegen mache ich das überhaupt...


    Funfact: Der "Unvollendete" wurde von meiner Mutter so getauft, da Vater an dem Ding Monatelang rumgewrapt, nächtelang das EPROM programmiert und final die Arbeit drauf geschrieben hat. Der war halt nie fertig bzw. musste dann doch nochmal debuggt werden.

  • Beschreibung der Platinen:


    1) CPU Karte

    Die CPU Karte ist kein Mainboard. Diese Platine dient nur dazu die gemultiplexten Beinchen der CPU zu demultiplexen. Beispiel Pin 1: AD0


    Kann Adresspin 0 oder Datenpin 0 sein. Er ist also ein Output oder ein Input/Output, sprich er hat 3 Funktionen. Damit die Funktionen dezidiert auf den Bus gelegt werden brauche ich n Sack voll Käfer.


    Es befindet sich keinerlei Speicher oder Kommunikationsinterface drauf. Es eine Demultiplexerplatine


    Folgende zusätzliche Dinge sind verbaut:

    - Clockgenerator -> Denn ohne Takt nix rechnen

    - Resetlogik


    2) BIOS Karte

    Die BIOS Karte dient als BIOS Speicher. Insofern wichtig, denn ohne Speicher kann ich keine Maschinenbefehle speichern - diese braucht aber die CPU zum rechnen :)


    Die Karte enthält:

    - keine EPROMs

    - keine EEPROMs

    - SRAM


    Warum SRAM? Zum beschreiben von EPROMs bräuchte ich mehere Spannungen und das Löschen wäre extrem umständlich mit ner Löschlampe. EEPROMs (Singlevoltage) wären besser, aber die haben meist eine Schreibschutzfunktion - ich muss also erst ne spezielle Bitfolge an eine bestimmte Adresse senden, bevor ich Daten ändern kann.


    Also nehme ich SRAMs - die sind noch schneller als EEPROMs aber bieten keinerlei Zusatzfunktionen. Nachteil ist, dass diese flüchtig sind, aber die Pufferbatterie sollte das zumindest eine Zeit lang auffangen können.


    Da ich in der Zeit zwischen der ersten Idee und dem jetztigen Zustand gelernt habe, hab ich noch einen IRQ-Controller und die sagenumwobene NMI-Logik auf diese (sehr wichtige) Platine gesteckt. Weitere Details dazu finden sich hier in dem Fred auf Seite 2 und 3.


    3) Arduino Karte 1 (Schreiberling)

    Im Nachinein die schwierigste von allen. Wofür brauche ich diese?


    Die SRAMs sind flüchtige Speicher - heißt die extern beschreiben und umstecken geht nicht. Heißt ich muss die ersten 3 Zeilen Maschinencode irgendwie in die SRAM bekommen, ohne diese Spannungsfrei zu machen.


    Also wird ein Arduino so angeschlossen und angesteuert, dass er den Bus nutzen kann. In dem Fall kann der Arduino die SRAM mit Daten beschreiben - und wenn ich die CPU einschalte/aus dem Reset hole kann diese munter anfangen zu CPU'en


    Sollten keine Daten an der Stelle stehen wo ich sie erwarte ist ein Bug (Hard- oder Software) aufgetaucht - und um diesen zu finden soll der Arduino heimlich den kompletten Bus abhorchen und die Daten irgendwie an einen PC senden (wie ein Logic-Analyzer). Dann kann ich in Ruhe nachlesen warum an Stelle X keine 1 steht.

  • Linksammlung:

    16Bit ISA Bus Links:
    Github
    IBM 286XT

    Wikipedia


    Digitaltechnik, Schaltkreisfamilien

    TTL-Schaltkreisfamilie

    stdlogik

    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.


    Slador
    Welcome to my channel devoted to digital electronics, computers and programming. I started with a series of tutorial-like videos where I build an Intel 8088…
    www.youtube.com

    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.



    Verwendete Chips:
    Intel A80186 - Bitsafers,
    Intel 8259 - Datenblatt, Wikipedia,
    Intel 8237 - Wikipedia,

  • Bei den DMA Kanälen sieht es anders aus. Den 8237 von Intel habe ich nicht verstanden. Wenn man sich das Handbuch vom IBM XT286 (hier finden) anschaut, dann hat IBM zwei dieser Controller auf dem Board. PDF Seite 104 und Kapitel Seite 1-89. Die 8237 bekommen einen gelatchen Datenbus (XD) zum Programmieren derselben. Verstanden, denn diese brauchen ja ne Info wie sie arbeiten sollen. Aber der Adressbus der 8237 wird über zwei 74x573 wieder in einen Datenbus verwandelt? ?( ?( ?(


    Also die Frage: Wie funktioniert ein 8237?

    Das Problem ist, dass der 8237 für den 8085 entwickelt worden war und für 64KiB Adressraum. Daher wurde im PC etwas getrickst, und du hast die DMA Page Registers an 0x87, 0x83, 0x82 und 0x81 bekommen. Diese Pageadressen sind 4 Bit, bzw. die obersten 4 Bit der DMA Pufferadresse. 20 Bit ergeben den 8088 Adressraum, 4 Bit werden durch diese 4 Bit Adresse genommen (linear_address >> 16), den Rest bekommt man aus den unteren 16 Bit und schreibt diese ins DMA Offset Register (linear_address & 0xffff). Ich glaube IBM hat damals einfach irgendein 4 Bit Register/Flip Flop/wasauchimmer verwendet um das umzusetzen. Es ist ein großes Gefuddel...


    Gut beschrieben ist das bei https://www.lo-tech.co.uk/wiki/8237_DMA_Controller oder aber auch im PC Intern von Data Becker, wimre.


    EDIT: In IBMs Technical Reference ist es genau beschrieben. Sie haben ein 74LS670 4x4 Register benutzt um die vier DMA Kanäle um 4 Bit Adressraum zu erweitern:



    PS: Ich würde nur einen 8237 verwenden, wie beim PC und XT. Der zweite 8237 wurde erst mit dem 286 eingeführt und nur für 16 bit Transfers eingesetzt. Vermutlich daher der Hack mit den 74x573? Ich würde mal "simpel" anfangen und keine 16 Bit DMA Transfers verwenden. :) Der eine 8237 verwendet den zweiten als Slave, und sie sind so verschaltet, dass ein DMA Controller jeweils 8 Bit behandelt. Der zweite, Master Controller kann außerdem nun bis zu 24 Bit Adressraum ansprechen. also die vollen 16 MiB des 80286. Ganz ehrlich... mach erstmal 8 Bit DMA Transfers in den unteren 20 Bit des Adressraums! :D

    root42 auf YouTube


    80486DX@33 MHz, 16 MiB RAM, Tseng ET4000 1 MiB, GUSar Lite & TNDY & SnarkBarker, PC MIDI Card + SC55 + MT-32, XT CF Lite, OSSC 1.6

    3 Mal editiert, zuletzt von root_42 ()

  • Jop, danke. Das hat mir als Input gereicht. Die 4x4 Register hab ich gefunden aber die Zuordnung nicht erkannt.


    Der Schaltungsaufwand ist vorhanden, also nix 8237


    Eine kurze Google Suche hat mir den SAB82257 ausgespuckt; das ist n 16bit DMA controller, der verschiedene Modi (286, 186, 8086) kann.


    Dieser wird eingesetzt werden

  • Eine kurze Google Suche hat mir den SAB82257 ausgespuckt; das ist n 16bit DMA controller, der verschiedene Modi (286, 186, 8086) kann.


    Dieser wird eingesetzt werden

    Ja okay, das macht natürlich alles deutlich einfacher! :D

    root42 auf YouTube


    80486DX@33 MHz, 16 MiB RAM, Tseng ET4000 1 MiB, GUSar Lite & TNDY & SnarkBarker, PC MIDI Card + SC55 + MT-32, XT CF Lite, OSSC 1.6

  • Respekt Robert!

    Kennst du den ct'86?

    Du willst zwar explizit nicht IBM kompatibel sein, trotzdem könntest du dir dort Anregungen hohlen...

    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... "

  • Ja okay, das macht natürlich alles deutlich einfacher! :D

    Korrekt. Das "Ding" zu programmieren wird eh noch n riesen Aufriss. Da brauch ich mir nicht noch ne Schaltungsvergewaltigung gönnen.


    Respekt Robert!

    Kennst du den ct'86?

    Du willst zwar explizit nicht IBM kompatibel sein, trotzdem könntest du dir dort Anregungen hohlen...

    Kenne ich nicht. Bitte einen Link!


    ---


    Wie du oben, alleine an der DMA Diskussion, erkennst ist x86 Kompatibilität eine echte Nummer.


    Klar, irgendwas kopieren geht immer, aber der Weg ist ja das Ziel.


    Deswegen ist der Einwand ISA-Pinkompatibel zu sein ganz geil. Aber den Rest brauchts dann nicht

  • Respekt Robert!

    Kennst du den ct'86?

    Du willst zwar explizit nicht IBM kompatibel sein, trotzdem könntest du dir dort Anregungen hohlen...

    Kenne ich nicht. Bitte einen Link!

    Ausgabe 1/1984. Kann man online hier nachlesen: https://www.yumpu.com/de/docum…12-0317-free-hack-library

    root42 auf YouTube


    80486DX@33 MHz, 16 MiB RAM, Tseng ET4000 1 MiB, GUSar Lite & TNDY & SnarkBarker, PC MIDI Card + SC55 + MT-32, XT CF Lite, OSSC 1.6

  • Die c't hat damals den "besseren IBM PC" gebaut. 80186 IBM kompatibel aber mit diversen Zusatzfunktionen die es sonnst nirgends gab. Mein persönliches Highlight ist der Flobby Controller auf Z80 Basis mit Cache und der Option CPM auszuführen....


    Korrektur der c't86 hattd den 8086 ( im Gegensatz zum Verbreiteten 8088) und nicht den 80186...

    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... "

    Einmal editiert, zuletzt von Stefan307 ()

  • Der Witz bei Standarte ISA ist ja auch das du mit einem SBC "gegen testen" kannst also z.b. Grafikkarte ansprechen einmal X86 SBC und dann auf den Eigenbau wechseln...

    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... "

  • So. Ein neuer Tag und ein Fortschritt... Rückschritt.


    Ich habe letzte Nacht sehr schlecht geschlafen und war 2h wach. Die Zeit habe ich mal genutzt und weiter versucht die ISA Signale zu simulieren. In dem Fall hab ich mich nicht um die DMA's gekümmert, sondern so "popelige" Signale wie BALE oder die Commandlines (Lese/Schreibe in Memory/IO).


    Dazu natürlich erstmal die Timings angeschaut:


    Dann festgestellt, dass die Signale diverse Clocks vor den Adressen/Daten geschoben werden müssen. Ok. Also n Plan gemacht: Diverse Zähler an den Taktgeber (die zum Beispiel immer bis 8 Zählen und dann wieder 0'en), ein AND-Gatter und dann müsste es ja möglich sein, ein Signal zu einem bestimmten Zeitpunkt vor zu schieben.


    Hm, das bläht die CPU-Karte extrem mit TTL Gedrisse auf.


    Ok. Also mal fluchs im Netz geschaut, wie groß eine ISA Karte sein darf und die Definition in EAGLE übertragen. Dabei festgestellt, dass meine Höhe annähernd erreicht ist, aber ich noch in die Länge bauen kann. In die Länge ist aber scheiße, weil ich dann unfassbar lange Signalwege habe, die CPU aber nicht unfassbar viele Ampere zur Verfügung stellt. Im Datenblatt steht sowas wie "Drive strengh allow max 10 TTL Gates" - sprich: Passt nicht.


    Ok. In einer der vorherigen Versionen hatte ich schonmal 2 Karten, die über ein Flachbandkabel verbunden werden sollten. Das Flachbandkabel beinhaltet den "internen" Bus, also alle CPU-Signale, die erst verwurschtet werden müssen.


    Dann festgestellt, dass die Erweiterung folgende Arbeit beinhaltet:

    - Größere Karten, diese dann mit custom-datenübertrager-header

    - CPU Karte mit TTL aufblähen für Steuer-Signale

    - Supportkarte erstellen, die IRQ- und DMA Controller (die DMA sind Busmaster) mit der selben TTL-Armee verknüpfen

    - Abbruch


    Hier Ende der Fahnenstange. ISA Mechanik ist cool, ISA-Kompatibiltät ist uncool. Ich habe 10x schneller eine 20x2 Display-Platine entwickelt, geroutet und gelötet als ich meinen 80186 mit ISA-TTL aufgebläht habe.


    Was habe ich gelernt: Ich weiß nun grob wie der ISA Bus funktioniert. Ich habe zwei Routingfehler im Desing 5 gefunden. Ich passe die Karten in den Maßen noch an, auch für kaufbare Slotblenden. Ich weiß nun warum die BoyZ damals die PALs genutzt haben - denn dieses Signale generieren ist echt ein riesen Geschisse.

    Sorry scorp , die Idee war echt gut. Vieleicht kann man das ja mit nem FPGA lösen - aber soweit bin ich noch lange nicht. In meinem Kopf geistert eine ISA-ISA Adapterpaltine im Kopf, die sowas kann. Also ein TTL-Monster oder ein FPGA-Ding was von 80186 programmiert wird (also ein eigenes Device ist) und wo man dann ne echte ISA-Karte einstecken kann.

  • Tja, deshalb gibt es vermutlich solche ICs wie den FE2010A... Der nimmt einem diese ganze Arbeit ab. Respektive deshalb sind die originalen IBM PC Mainboards auch solche TTL Gräber...

    root42 auf YouTube


    80486DX@33 MHz, 16 MiB RAM, Tseng ET4000 1 MiB, GUSar Lite & TNDY & SnarkBarker, PC MIDI Card + SC55 + MT-32, XT CF Lite, OSSC 1.6

  • Hmm, es sollte nicht ZU kompliziert sein. Eigentlich ist der ISA nur der Intel-CPU-Bus, der in eine standardisierte Form gegossen wurde. Sprich: Eigentlich erbt er das Verhalten der CPU + maximal einfache Bufferung. Denk dran, dass der PC vor allem low cost war. Falls dich die Bufferung im Timing stört, probiere F(ast)-Logik, die wurde gern eingesetzt, weil halt schnell und sehr starke Drive Capability.


    Vielleicht guckst du dir auch das Projekt https://www.retrobrewcomputers.org/doku.php an. Die haben bekanntlich den SBC-188 mit einem 80C188 auf eine Platine bekommen, als auch ein paar ISA-Karten. Und der Sergey hat einen 80C88-Rechner ohne VLSI-Technik (also ohne FE2010) auf eine lange ISA-Karte bekommen. 😎

    Edit: root_42 war schneller :D

  • Und der Sergey hat einen 80C88-Rechner ohne VLSI-Technik (also ohne FE2010) auf eine lange ISA-Karte bekommen. 😎

    :whistling:


    PS: Du kannst einen Blick auf Sergey's Xi8088 werfen. Der implementiert da das ISA Businterface in TTL Logik, und nicht über den FE2010A, wie im Micro8088 Projekt:


    http://www.malinov.com/Home/sergeys-projects/xi-8088

    root42 auf YouTube


    80486DX@33 MHz, 16 MiB RAM, Tseng ET4000 1 MiB, GUSar Lite & TNDY & SnarkBarker, PC MIDI Card + SC55 + MT-32, XT CF Lite, OSSC 1.6

  • Simulierst dh in Eagle? Kenne das nur als Layout Programm ist aber schon lange her...

    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... "

  • Ihr habt natürlich recht. Beide Projekte kenne ich auch.


    Aber 1: Da werden 8088 benutzt. Also nackte CPUs ohne integrierte Addons
    Aber 2; Da werden 8088 benutzt, also popelige 8bitter
    Aber 3: Ich habe schlichtweg keine Lust mir so ein Bein aus zu kugeln, nur im dem Ding ISA bei zu bringen

    Der soll erstmal Elektronen schubsen. Eine Faraday kann ich immernoch auf ne Karte rotzen und dahinter n echten ISA Bus anschließen

Jetzt mitmachen!

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