Hallo! :-) Ich würde gerne mit einem oder zwei (würde selbst ein schnelles, effizientes Protokoll für Kommunikation entwickeln) der modernen, benutzerfreundlichen Microcontroller (z.B. Pi Pico oder Teensy 4.1) die für PC-Betrieb relevanten Pins (hab das schon analysiert) eines 8086-CPU-Sockels ansteuern. Alle 40 Pins sind es ja nicht, 8 (VCC, MN/MX, TEST, QS0, QS1, RQ/GT0, RQ/GT1, 1x GND) kann man sich ja sparen. Hintergrund ist folgender: Mein Ziel ist es, in einem alten Amstrad PC1640 als Experiment die CPU (8086 mit 8 MHz) sowie eine 8087 (würde ich in die CPU-Emulation direkt integrieren, deshalb kann ich mir auch 5 Pins sparen) emulieren. Emulator schreibe ich selbst (ALU ist bei der alten 8086 keine große Hexerei). Meine zwei Fragen an Euch wären: 1. Ist einer der modernen Microcontroller schnell genug um die Pins I/O mit 8 MHz anzusteuern und vor allem auch mit jedem Clock-Tick einen Interrupt auszulösen? 2. Wie bekomme ich die 3.3V und 5V-Welten bei 8 MHz miteinander "verheiratet"? Für jeden Pin einen Hochfrequenzverstärker oder Spannungsteiler zu verbauen klingt mir doch eher SEHR aufwändig
Nuvoton hat ein paar Cortex-M4 µC im Angebot, die sowohl 5V Betriebsspannung vertragen als auch ein externes Bus Interface haben. Ob letzteres 8086-kompatibel ist, habe ich aber so schnell nicht nachlesen können. Ohne Bus Interface dürfte man die meiste Zeit mit der I/O Ansteuerung verplempern (anstatt die CPU zu emulieren). Für Teensy4.1 bräuchte man bidirektionale Pegelwandler, aber da ist IIRC das externe Speicher Interface nicht vollständig ausgeführt an die Pins. Pi Pico ist auch nur für 3,3V Ansteuerung. Wünsche viel Glück, das braucht man bei so einem Projekt.
Chris K. schrieb: > 2. Wie bekomme ich die 3.3V und 5V-Welten bei 8 MHz miteinander > "verheiratet"? Für jeden Pin einen Hochfrequenzverstärker oder > Spannungsteiler zu verbauen klingt mir doch eher SEHR aufwändig Hochfrequenzverstärker sind Analogbauteile und haben in der Digitaltechnik nichts zu suchen. Um ein digitales 3.3V-Signal auf 5V anzuheben, eignen sich Gatter aus der 74HCT-Serie, z.B. 74HCT04 mit 6 Invertern pro IC [V_IH typ 2.0V (max 1.6V), V_IL typ. 1.2V (max 0.8V)] oder 74HCT125 mit 4 Treibern pro IC. Timing ist im Datenblatt angegeben.
zu 2. Das ist der einfachere Teil: 74LVC1T45 (1 Bit) 74LVC2T45 (2 Bit) 74LVC8T245 (8 Bit) https://www.ti.com/lit/ds/symlink/sn74lvc8t245.pdf zu 1. Du willst ein EBI (External Bus Interface) haben. Ansonsten wird das ganze eher langsam. Wenn der Prozessor in der Originalschaltung im Maximum-Modus läuft, wirst Du noch einiges an digitaler Logik brauchen, um die nötigen Steuersignale bereitzustellen. Dafür bietet sich ein CPLD oder FPGA an. Als Basis würde ich jetzt einen STM32H743 oder sowas in der Richtung nehmen. 480 MHz, genug RAM, ein FMC (Flexible Memory Controller) für den externen Adress/Datenbus. https://www.st.com/en/microcontrollers-microprocessors/stm32h743-753.html Die üblichen Demoboards haben leider nur die 100-Pin Version, was etwas knapp werden könnte, um alle benötigten Funktionen auf die Pins zu bekommen. Das Problem ist eben, dass Du nicht jede Funktion auf jeden beliebigen Pin bekommst, sondern nur bestimmte Kombinationen funktionieren. Bei fertigen Demoboards kann es sein, dass diese Pins bereits durch Onboard-Peripherie verwendet werden. Es ist daher wahrscheinlich, dass Du Dir eine eigene Platine von Null auf designen musst. Das ist kein prinzipielles Problem, ich mache das tagtäglich in meinem Job, aber man muss eben das Know-How und die Ausrüstung haben. fchk
:
Bearbeitet durch User
Jim M. schrieb: > Nuvoton hat ein paar Cortex-M4 µC im Angebot, die sowohl 5V > Betriebsspannung vertragen als auch ein externes Bus Interface haben. Ob > letzteres 8086-kompatibel ist, habe ich aber so schnell nicht nachlesen > können. > > Ohne Bus Interface dürfte man die meiste Zeit mit der I/O Ansteuerung > verplempern (anstatt die CPU zu emulieren). > > Für Teensy4.1 bräuchte man bidirektionale Pegelwandler, aber da ist IIRC > das externe Speicher Interface nicht vollständig ausgeführt an die Pins. > Pi Pico ist auch nur für 3,3V Ansteuerung. > > Wünsche viel Glück, das braucht man bei so einem Projekt. Hi, danke! Bidirektionale Pegelwandler klingt gut, ich denke, ich werde es damit versuchen. In der Tat werde ich das Bus-Interface (die "BIU") komplett via Bitbanging emulieren müssen, wobei ich inzwischen schon ziemlich viel an Voranalysen gemacht habe. Die 8086-CPU hat, pro I/O, 4 Zustände am Bus (ein Zugriff dauert 4 Taktzyklen), die sind im "BIU-Microcontroller" pro Zugriffsbefehl bzw. pro Interrupt von außen eigentlich in C/C++ ganz gut abbildbar. Bedeutet für mich aber auch, daß ich ca. 2 Millionen x 4 Byte pro Sekunde vom ALU-Controller an den BIU-Controller (und zurück) schicken muß, das muß ich noch erforschen, das wird evtl. auf ein eigenes Protokoll mit, wieder einmal, Bitbanging hinauslaufen (SPI ist dafür wohl viel zu langsam). Von der Vorstellung, nur einen einzigen Controller zu verwenden, habe ich mich bereits getrennt, das geht sich von den Pins her nicht aus. Also die Idee wäre in etwa so: ALU-Controller (z.B. Teensie, weil der hat ordentlich Rechenleistung) <- eigenes Protokoll -> BIU-Controller (z.B. Pi Pico) <- Pegelwandler -> 8086-Sockel Ausnahmen: * RESET und CLK gehen an ALU UND BIU * Die 2x GND direkt an Masse * INTR, NMI und LOCK gehen an ALU * TEST, RQ/GT0 und RQ/GT1 "gnadenhalber" an High (FPU) - ist aber nur erste Vermutung * QS0, QS1 floating (FPU) - ebenfalls nur Vermutung derzeit Alles andere ist nur mit dem BIU-Controller verbunden (möglicherweise brauche ich zwei davon, aber die sind zum Glück spottbillig), der banged da die Bits rein und raus und kümmert sich um das gesamte Busprotokoll, bekommt dazu kompakt codierte Kommandos vom ALU-Controller, z.B. so: 4 Bit Instruction Code + 4 Bit Segment Access + 4 Bit sonstiger Status + 20 Bit Adresse + 16 Bit Daten (bei Writes, Reads kommen ohne die Datenbits, 8 Bit I/O entsprechend nur 8 Bit) Sind dann 48 Bit pro Befehl im Maximalfall, das halt 2 Millionen Mal pro Sekunde. Bislang mein größtes privates Projekt, und mein erstes echtes Hardwareprojekt. Zum Glück bin ich Softwareentwickler von Beruf.
Frank K. schrieb: >... > fchk Wow, danke! :-) Ja, läuft im Maximum-Modus... wobei ich mich da aber jetzt frage, ob nicht Bitbanging ausreicht um den Bus zu emulieren? Der 8086-Bus ist zwar, auch wegen des Multiplexings, recht komplex, aber doch gut dokumentiert.
Chris K. schrieb: > 1. Ist einer der modernen Microcontroller schnell genug um die Pins I/O > mit 8 MHz anzusteuern und vor allem auch mit jedem Clock-Tick einen > Interrupt auszulösen? Wieso bei jedem Clock-Tick? Eigentlich reicht doch ein Interrupt bei jedem Buszyklus (natürlich an einer Stelle, an der man schon entscheiden kann, was passieren muss). Für das nötige Businterface sind die PIOs des RasPi Pico wie geschaffen und auch locker schnell genug. Ob allerdings die Antwortzeit des (eines der) MCU-Kerne (jederzeit) ausreichend wäre, kann man nicht so einfach feststellen. Das hängt auf jeden Fall vom Gesamtprogramm auf dem Pico ab. > 2. Wie bekomme ich die 3.3V und 5V-Welten bei 8 MHz miteinander > "verheiratet"? Für jeden Pin einen Hochfrequenzverstärker oder > Spannungsteiler zu verbauen klingt mir doch eher SEHR aufwändig Level-Shifter, ggf. bidirectional, wäre die sichere Lösung. Wurde im Thread ja bereits genannt.
Chris K. schrieb: > Hi, danke! Bidirektionale Pegelwandler klingt gut, ich denke, ich werde > es damit versuchen. Vorsicht! Ja, du brauchst auch bidirektionale Pegelwandler. Da gibts aber welche mit manueller Umschaltung über einen DIR-Pin, wie die 74LVC-T Serie, die ich Dir genannt habe, und es gibt welche mit automatischer Richtungsumschaltung wie z.B. TXB0108 oder so. Die letzteren solltest Du tunlichst dann und nur dann nehmen, wenn es gar keine andere Möglichkeit gibt, denn die automatische Richtungsumschaltung lässt sich sehr leicht durcheinander bringen. Ein falscher Pullup reicht. Außerdem ist bei vielen die Treiberleistung vor allen gegen VCC recht gering. Die Wandler mit manueller Richtungsumschaltung hingegen sind idiotensicher, solange Du das Richtungssignal korrekt bedienst. fchk
Nochmal so als Inspiration: https://github.com/captain-amygdala/pistorm https://www.hackster.io/news/hands-on-with-the-pistorm-the-ultimate-raspberry-pi-powered-accelerator-for-your-commodore-amiga-449ef0634f3e Das geht in die gleiche Richtung, in die Du gehen willst, ist aber für 68k und Amiga. Der Trick, warum das Projekt so funktioniert, ist das CPLD, das die Prozessorsignale synthetisiert. Der Pi alleine könnte das Timing so nicht hinbekommen. In eine ähnliche Richtung wirst Du auch gehen müssen, ob mit Pi oder einem STM32H743 oder gar einem STM32H747, der noch einen zweiten Prozessor und Grafik eingebaut hat. Kannst Dir ja mal anschauen. fchk
:
Bearbeitet durch User
Frank K. schrieb: > Das geht in die gleiche Richtung, in die Du gehen willst, ist aber für > 68k und Amiga. Der Trick, warum das Projekt so funktioniert, ist das > CPLD, das die Prozessorsignale synthetisiert. Der Pi alleine könnte das > Timing so nicht hinbekommen. Der Pi Pico könnte das dank PIO sehr wohl. Die langweilt sich dabei sogar deutlich. Diese "Problem" kann man aber natürlich leicht dadurch lösen, dass man die PIO halt so langsam laufen lässt, dass sie den Job gerade noch leisten kann. Ich denke: Du musst langsam mal wieder ein bissel was Neues lernen...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.