80186 Selbstbau-Computer -> Fortschritt in Kiloherztakten

  • Ah ja, wusste nicht, dass der 8018x so anders ist. In der Tat hat der ja schon einiges eingebaut. Dann habt ihr euch doch ein etwas komplizierteres Projekt ausgesucht. :) Kein Wunder, dass sich der 186 in der PC Welt nicht durchgesetzt hat... Bin mal gespannt wie es weitergeht!

    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

  • Kein Wunder, dass sich der 186 in der PC Welt nicht durchgesetzt hat... Bin mal gespannt wie es weitergeht!

    Wieso alle CPUs danach hatten doch noch mehr Funktionen?

    i440bx

    Wie wäre es mit einem minimal System, das später mittels ISA Controller an den BUS angebunden wird?

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

  • Zur Erleuchtung derjenigen die immernoch glauben, das ein 8086/88 das selbe wie ein 80186/188 ist:


    Der 1 hat integriert:

    DMA, IRQ, bus Controller, Bus Arbeiter, clockgenerator, Peripherie chipsselects, memory chipsselects


    Deswegen brauche ich nur 3 Latch und 2 Treiber um 16bit Bus bereit zu stellen. Deswegen ist auf der Platine das größte bimbamborium das Zeug zum anschubsen der CPU. Alles andere ist integriert

  • Und das ist der Grund *warum* wir den genommen haben.

    Einen 86/88 kann man entweder komplett auf MemoryMappedIO betreiben (wenig Chips) oder man muss ihn mit all den SupportChips supporten, um Peripherie außerhalb des technisch möglichen Speicherbereich zu betreiben; anders gesagt: um den vollen Speicher nutzen zu können ist MemoryMappedIO nicht drin.

  • Kein Wunder, dass sich der 186 in der PC Welt nicht durchgesetzt hat... Bin mal gespannt wie es weitergeht!

    Wieso alle CPUs danach hatten doch noch mehr Funktionen?

    i440bx

    Wie wäre es mit einem minimal System, das später mittels ISA Controller an den BUS angebunden wird?

    Naja, der 286 hat ehrlich gesagt, bis auf den Protected Mode, WENIGER Funktionen. All die von i440bx genannten Features sind beim 286 NICHT integriert, sondern brauchen weiterhin die Supportbausteine, wie beim PC/XT. Also DMA und IRQ Controller, Bustreiber und so weiter.

    Und das ist der Grund *warum* wir den genommen haben.

    Einen 86/88 kann man entweder komplett auf MemoryMappedIO betreiben (wenig Chips) oder man muss ihn mit all den SupportChips supporten, um Peripherie außerhalb des technisch möglichen Speicherbereich zu betreiben; anders gesagt: um den vollen Speicher nutzen zu können ist MemoryMappedIO nicht drin.

    Kannst du das mal genauer erklären? So weit ich das verstehe hat der 8086 und seine Nachfolger vor dem 80286 einen 20 Bit Adressraum, d.h. man kann 1MiB Speicher ohne weiteres adressieren.

    IO mit Peripherie geht doch über die in/out opcodes, wofür der M/IO pin am 8086 ist. Aber das ist ja sozusagen ein eigener Adressraum, mit eigenen Instruktionen. Zusätzlich kann man aber natürlich auch Speicher über den Bus einblenden, wie es ISA ja auch macht. So sind ja die Grafikkarten irgendwo bei 0xA000 oder 0xB8000 eingeblendet und können einfach per MOV Opcodes manipuliert werden, zusätzlich zu den IN/OUT Befehlen. Das ist doch eigentlich ein orthogonales Konzept. Klar kannst du in deinem Design das eine oder andere einfach ignorieren, aber dem 8086 ist das doch erstmal schnuppe. Oder Verstehe ich dich da falsch?

    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

  • Naja, der 286 hat ehrlich gesagt, bis auf den Protected Mode, WENIGER Funktionen. All die von i440bx genannten Features sind beim 286 NICHT integriert, sondern brauchen weiterhin die Supportbausteine, wie beim PC/XT. Also DMA und IRQ Controller, Bustreiber und so weiter.

    Stimmt ich habe beim überfliegen Funktionen (der CPU) und integration von Support Chips zusammen geschmissen. Im Grunde ist der 80186 ein früher Versuch von SOC, so gesehen eine sehr gute Wahl i440bx

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

  • Stimmt ich habe beim überfliegen Funktionen (der CPU) und integration von Support Chips zusammen geschmissen. Im Grunde ist der 80186 ein früher Versuch von SOC, so gesehen eine sehr gute Wahl i440bx

    Kein System-on-a-Chip aber ein gut integrierter Prozessor um einem das Steuerungsleben einfacher zu machen. Deswegen wurde der ja auf Netzwerkarten, in Routern und in der Industrie Dekadenlang eingesetzt.


    Kannst du das mal genauer erklären? So weit ich das verstehe hat der 8086 und seine Nachfolger vor dem 80286 einen 20 Bit Adressraum, d.h. man kann 1MiB Speicher ohne weiteres adressieren.

    IO mit Peripherie geht doch über die in/out opcodes, wofür der M/IO pin am 8086 ist. Aber das ist ja sozusagen ein eigener Adressraum, mit eigenen Instruktionen. Zusätzlich kann man aber natürlich auch Speicher über den Bus einblenden, wie es ISA ja auch macht. So sind ja die Grafikkarten irgendwo bei 0xA000 oder 0xB8000 eingeblendet und können einfach per MOV Opcodes manipuliert werden, zusätzlich zu den IN/OUT Befehlen. Das ist doch eigentlich ein orthogonales Konzept. Klar kannst du in deinem Design das eine oder andere einfach ignorieren, aber dem 8086 ist das doch erstmal schnuppe. Oder Verstehe ich dich da falsch?

    Ganz easy:

    der kleinste 8086 Computer den man so bauen könnte wäre wie folgt:

    A0-A15 als Adresspins für ein Ding, A16 bis A19 mit 4 Stück 4xAND-Gattern (und noch nem 4er Inverter der Sicherheit halber) so verwurstet, dass man daraus ein Chipselect macht.

    A1 bis A19:
    xxxxxxxx xxxxxxxx 000 auf dem Adressbus adressiert das Display
    xxxxxxxx xxxxxxxx 001 auf dem Adressbus adressiert den KB Controller
    xxxxxxxx xxxxxxxx 010 auf dem Adressbus adressiert die Serielle

    xxxxxxxx xxxxxxxx 011 addressiert die beiden 8x64k EPROMS

    A0 und BHE nutz man dann je um das LOWER oder HIGHER Byte zu seletieren. Beim Display, der Seriellen und dem KBC brauchste nichtmal BHE weil die eh nur über 8Bit angesprochen werden.

    Fertig ist der Einplatinencomputer. M/!iO ignoriert, Statuslines ignoriert, NMI ignoriert, alles egal. Mit 75% der genutzten Pins an der CPU haste Memorymapped IO par excellence in ein Stück Platine gepresst.

  • Aber warum nehmen wir den 80186?


    Bitte nehmt euch die Minute und schaut euch das Datenblatt an. Dann siehste die Vorteile gegenüber dem 8086 Computer den ich ein posting drüber beschrieben habe

  • Nur eine kleine Anmerkung, könnte aber für den einen oder anderen Interessant sein. Der 80186 ist keine CPU und kein SoC, es ist ein auf 8086 basierender MCU (Mikrocontroller). Der Unterschied zwischen CPU und MCU ist, dass MCU auch Standallone arbeiten kann und die wichtigsten Komponenten (etwa ROM, RAM, Interrupt Controller etc.) schon integriert sind. So gesehen ist ein MCU = CPU + Mehr und ein SoC = MCU + Mehr.

  • Nur eine kleine Anmerkung, könnte aber für den einen oder anderen Interessant sein. Der 80186 ist keine CPU und kein SoC, es ist ein auf 8086 basierender MCU (Mikrocontroller). Der Unterschied zwischen CPU und MCU ist, dass MCU auch Standallone arbeiten kann und die wichtigsten Komponenten (etwa ROM, RAM, Interrupt Controller etc.) schon integriert sind. So gesehen ist ein MCU = CPU + Mehr und ein SoC = MCU + Mehr.

    Naja, aber ROM und RAM sind ja im 80186 gerade NICHT drin...? Die Grenzen verschwimmen natürlich auch zwischen den Kategorien. Aber ich verstehe schon den Anwendungszweck für den 80186. Ist ja auch praktisch auf vorhandene Toolchains, wie Assembler und so zurückgreifen zu können oder Code lokal direkt debuggen zu können, bevor es auf dem embedded Gerät deployed wird.

    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

  • 80186 kann man ein relativ kleines DOS System bauen, wenn du natürlich ISA komplett implentieren willst wird es komplex.

    Man könnte auch eine vereinfachte Version bauen.

    Denn CompactFlash und co gehen auch Memory Mapped, und der 80186 hat doch einen kleinen DMA Controller onboard ?


    Die Selbstbau x86 Seiten kennst du bestimmt oder ?

    совок

  • der kleinste 8086 Computer den man so bauen könnte wäre wie folgt:


    A0-A15 als Adresspins für ein Ding, A16 bis A19 mit 4 Stück 4xAND-Gattern (und noch nem 4er Inverter der Sicherheit halber) so verwurstet, dass man daraus ein Chipselect macht.

    Ok, das kann man so machen. So ähnlich machen es die Grafikkarten und Co im PC ja auch. Die Hardwareumsetzung ist halt etwas aufwändiger.


    Wie gesagt: Bin gespannt wie dein Ergebnis am Ende aussieht! Wird bestimmt cool!

    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

  • Nur eine kleine Anmerkung, könnte aber für den einen oder anderen Interessant sein. Der 80186 ist keine CPU und kein SoC, es ist ein auf 8086 basierender MCU (Mikrocontroller). Der Unterschied zwischen CPU und MCU ist, dass MCU auch Standallone arbeiten kann und die wichtigsten Komponenten (etwa ROM, RAM, Interrupt Controller etc.) schon integriert sind. So gesehen ist ein MCU = CPU + Mehr und ein SoC = MCU + Mehr.

    Naja, aber ROM und RAM sind ja im 80186 gerade NICHT drin...? Die Grenzen verschwimmen natürlich auch zwischen den Kategorien. Aber ich verstehe schon den Anwendungszweck für den 80186. Ist ja auch praktisch auf vorhandene Toolchains, wie Assembler und so zurückgreifen zu können oder Code lokal direkt debuggen zu können, bevor es auf dem embedded Gerät deployed wird.

    Ja, ich glaube, ich habe mit meiner Aussage mehr Verwirrung gestiftet, als Aufklärung :D Die Aussage mit ROM, RAM etc. war im Allgemeinen auf MCUs bezogen und nicht auf den 80186er. Ich wollte nur eigentlich nur sagen, dass ein MCU etwas mehr ist als eine CPU. Um wie viel mehr ist dann MCU abhängig. Viele MCUs haben auch ROM und etwas RAM integriert, das bekannteste Beispiel eben ATmega (Arduino).

  • Der 80186 ist ein "halber MCU"

    Der hat halt DRAM Refresh Circuit, Drei Zähler, DMA mit 2 Kanälen, Interruptcontroller usw drauf.


    80186 Systeme kenne ich eigentlich fast nur mit S100 oder VG96 Anschluss.

    Kennt wer wirklich einen mit ISA Anschluss ?

  • Beneidenswertes Vater Sohn Verhältnis!

    Ich habe leider in der gesamten Familie niemanden der mein Interesse an Technik teilt. ;(

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

  • i440bx

    Hat den Titel des Themas von „80186 Selbstbau-Computer -> Ich brauche Hilfe“ zu „80186 Selbstbau-Computer -> Back to the old Plan!“ geändert.
  • Version 5.4 ist nun zumindest geroutet.



    Der Aufbau ist wie folgt:
    Alle Daten, Adressen, sonstige Signale und Inputs kommen auf/von einen 16Bit-ISA Bus. Alle Spannungen die vom Bus kommen sind "wie ISA" damit ich ne normale Backplane benutzen kann.


    Die CPU Frequenz kann zwischen 5MHZ und 300KHZ gejumpert werden (via Zähler) -.die niedrigeren Frequenzen vor allem zum debuggen. Idee ist einen Aduino mithorchen zu lassen. Dieser ist langsam, also muss die CPU piano machen.

    Das Board selbst ist eine 4-Layer Platine, die Slotblende ist vorbereitet.


    Aufbauend auf die letzten Erfahrungen werde ich der "BIOS Platine" (wo die EEPROMs drauf sind) auch einen IRQ Controller gönnen. Dieser ist dann Slave (CPU ist Master) und stellt 8 weitere IRQ Kanäle zur Verfügung (die CPU hat nur 2 oder 4, je nach Einstellung).

  • Sooo. Da ich gerade "drin bin" hab ich direkt die nächste Karte fertig gemacht.


    BIOS Karte


    Die BIOS Karte beinhaltet 3 Funktionen:
    1 Lower Memory
    2 NMI Generator
    3 IRQ Controller


    Zu 1:

    Der 80186 (und 8086) sind Schummel-16bit-CPUs. Eigentlich ein 8 Bitter, der aber 2 getrennte 8-Bit Adress & Datenbusse hat. Einmal das Lowerbyte und das Higherbyte. Heißt: Die ALU gönnt sich erst Daten aus 0-7, wechselt dann in den "high" Modus und schiebt die nächsten 8 Bit nach. Befehle (wie z.b. NOP) die nur 8 Bit brauchen, nutzen in dem Fall das Higherbyte nicht.

    Ich hab 2x 8Bit breiten Speicher drauf. In dem Fall 2 Stück 128x8. Gesamt wären das 256KB Speicher (also 1/4 von dem maximal Adressierbaren). Ich musste ein wenig Neuronen wachsen lassen, bis ich verstanden habe, dass das 1MB was er kann eigentlich nur 512k Worte sind, die aber (da 2x 8bit breit) auf 1MB adressierbaren Raum kommen.

    Ein weiteres "spezial" ist die Art wie die CPU 1MB aus 16bit tüftelt. Adresse 0 bis A15 sind nur 64KB, durch hinzufügen von 4 weiteren Adresspins (A16 bis A20) aber kann man 2^4 Stück 64KB "Fenster" Adressieren (16 Stück á 64kb = 1024kb). Das wiederrum wird mit nem Offsetregister gemacht, in dem man definiert, auf welchem der Fenster das Programm gerade ist oder wo es hinspringen soll.

    Ziemlicher HickHack. Wird durch ne spezielle Art der "Chip Enable" Leitungen realisiert (A0 und !BHE) - wen das interessiert: Gönnt euch das PDF


    Ein noch weiteres "spezial": Der integrierte Buscontroller kann den Speicher (der eh schon in 64kb Fenstern gestückelt ist) in weitere Fenster unterteilen: LCS (lower memory chip select), MCS0-3 (mid range chip select) und UCS (upper chip select). Man kann also, neben lower und higher byte, auch noch bis zu 6 materiell verschiedene Speicherchip Päärchen je ChipSelect Leitung nutzen.

    Unfassbarer HickHack. Aber insofern geil: Man kann die Fenster überlappen lassen - wenn man also den oberen Speicherbereich von MCS2 und den unteren Speicherbereich von MCS3 überlappt (also Daten hat, die beide Programme brauchen) legt man die Grenzen so geschickt, dass kein Software-Sprung notwendig ist (die Hardware macht das von alleine, da die Bereiche vorab definiert werden).

    Im letzten Entwurf war es so, dass mein Vater mir sagte: Nimm 2 Stück 512KB Bausteine und bastel eine per Jumper wählbare ODER-Schaltung - sodass wir per verdrahtetem ODER aussuchen konnten, wann die Chips selektiert werden können. Hat den Vorteil: Der Buscontroller kann amok laufen - wir haben immer die Chips selectiert. War ein routing-monster mit Dioden & Pull-widerständen.


    Kann man machen, aber da stieß ich in der "80186 Programmers Reference" auf einen Trick.

    Zu 2:
    Ich habe die Programmers Reference und das Hardware Reference Manual je 2 Mal als original Buch (teuer!). Ein Satz bei meinem Vater, einer bei mir. Ich hab beide Bücher nicht komplett durchgelesen aber langsam überflogen.



    Dabei stieß ich auf folgende Aussage (kein vollständiges Zitat):

    Zitat

    Der Nonmaskable Interrupt kann bereits 16 Takte nach fallen des Reset erkannt werden. Die internen Routinen zum zurücksetzen des 80186(88) sind nicht abgeschlossen, aber ein NMI wird gesehen. Das ist insofern nützlich, als dass der Programmierer einen anderen Speicherbereich als Startpunkt nach dem RESET wählen kann. Vorraussetzung ist, dass die Flags und Vektoren für den NMI bereits [im ROM] geschrieben sind

    Wie läuft der Start des 80186 ab? Reset geht LOW, es dauert rund 60 Takte und dann ist intern alles auf 0. Anschließend legt die CPU und der Buscontroller die Adresse FFFF0h an. Dem geübten Beobachter fällt auf: 1MB sind FFFFFh - heißt: Die CPU erwartet die erste Anweisung so ziemlich am Ende der Fahnenstange. Bescheuert.

    Noch bescheuerter ist, dass alle externen Register (zum einstellen der Timer, IRQs, DMA, Speicherbereiche, etc) bei 0h beginnen. Man muss also per se schonmal 2x2 Speicherbausteine parat haben (ein Satz "ganz oben" und einer "ganz unten") um überhaupt "Hello World" sagen zu können. Das war auch der Grund, warum die vorherige Speicherplatine direkt mit 1MB und einem ODER-RoutingMonster bestückt war.

    Jetzt kam mir aber das obrige Zitat entgegen gesprungen. Megageil. Ein Nonmaskable Interrupt wird also noch während des Startvorgangs gesehen und als erstes ausgeführt, sobald der Startvorgang abgeschlossen ist.

    Heißt: NMI während Reset und die CPU springt nach ganz unten, um im NMI Register den Sprungvektor zu finden. Aufgabe: Generiere einen NMI der nach dem Reset für 16+x Takte aktiv ist, und danach nie wieder ausgelöst wird, außer der Reset wird gedrückt. Dazu habe ich mir Hilfe geholt: https://github.com/logisim-evolution/logisim-evolution und diese Datei erstellt: NMI_Generator.zip



    Ladet euch das Programm, ladet die Datei und probiert selbst aus. Ich habe mithilfe eines Zählers und zwei einfacher RS-FlipFlop einen "NMI Generator" gebaut, der die obrige Sache ausführt. Der Reset selbst wird von nem Spannungsüberwacher-Chip oben gehalten solange die Spannung nicht ok ist. Desweiteren hab ich dem Chip mit nem Kondensator noch 0.3sek länger "Reset" angewiesen. Heißt: Für den NMI-Generator ist der Reset Jahrhunderelang "high" und fällt dann irgendwann ab.

    Zu 3:
    Ich denke dazu brauche ich nicht mehr viel zu schreiben. Durch den kurzen Exkurs in Richtung ISA weiß ich jetzt nen IRQ-Controller ein zu setzten. Dieser fand auch platz auf dem Board und dient nun als Erweiterung. In dem Fall muss der CPU-Interne IRQ-Controller in den Master-Mode damit er vom Slave die Daten bekommt.

  • i440bx

    Hat den Titel des Themas von „80186 Selbstbau-Computer -> Back to the old Plan!“ zu „80186 Selbstbau-Computer -> Weiter with the ISA-Karten“ geändert.

Jetzt mitmachen!

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