Jackintosh hat geschrieben: Mo 31. Okt 2022, 09:46
mkarcher hat geschrieben: So 30. Okt 2022, 15:25
Unter diesem Aspekt: Bleibe bei EMS 3.2. EMS 4.0 ist interessant für Multitasking-Lösungen, insbesonder DesqView und Windows 3.0 im Real Mode, und zumindest bei Windows 3.0 vor allem dann, wenn die EMS-Karte auch einen großen Teil des konventionellen Speichers zur Verfügung stellt. Für den normalen DOS-Use-Case werden die EMS-4.0-Funktionen eh nicht genutzt.
M.E. ein weiteres Argument: die Karte ist für den 8bit Bus gedacht und 8088/86 und Windows 3.0 im Multitasking... stell ich mir "herausfordernd" für die Geduld vor.
Auf einem Turbo-XT mit 10MHz sollten notepad, reversi, der Dateimanager und cardfile schon mit erträglicher Performance laufen. Und wenn man dann ein System hat, wo aller Speicher jenseits von 256KB (also die restlichen 384KB der 640KB konventionellem Speicher plus etwa 128KB in den UMBs) bei einem Taskswitch einfach werden umgemappt werden kann, sollte das in der Tat benutzbar sein. Sobald man einen 286 hat, stellt man für Windows am besten die EMS-Karte in die Vitrine, in der coole obsolete Hardware ausgestellt wird, und lässt Windows im Standard-Modus laufen, wo es Extended Memory nutzen kann.
Auch wenn Du mit der Befürchtung, dass Windows auf der Hardware nicht gerade alles mit hoher "Schwuppdizität" (auch so ein c't-Begriff) ausführen wird, sind Turbo-XT-Computer meines Erachtens nach die einzigen, auf denen EMS 4.0 für Windows so richtig Sinn ergibt. Für DOS-Multitasking (DesqView) sind auch 286-Computer noch im Zielraster. Ab dem 386 ist die einfachste Lösung natürlich der Virtual Mode des Prozessors unter Steuerung durch QEMM oder vergleichbar.
Jackintosh hat geschrieben: Mo 31. Okt 2022, 09:46
Zudem gehen mir schlichtweg die Pins am CPLD aus. Außerdem muß noch das UMB-SRAM mit seinen Konfigurationsmöglichkeiten Platz finden.
Volle Zustimmung. Fang nicht zu groß an. Ich kann Dir noch einen Tipp geben, der die Komplexität im CPLD senken könnte: Statt eines EMS-Basis-Registers und Komparatoren für die 4 Pages, kannst Du auch wie folgt vorgehen: Die Karte muss auf bis zu 20 16K-Bereiche reagieren können (A000-EFFF), und wenn Du Platz hast, schmeißt Du das oberste Bit auf "enable" und die die 5 Bit darunter auf einen 5-zu-32-Dekoder. Die Ausgänge im 8, 9 und F-Bereich ignorierst Du, und mit dem Rest gehst Du auf eine 20-Bit-Maske, die sagt, ob dort UMB liegt, und eine zweite 20-Bit-Maske, die sagt, ob dort EMS liegt. Die Verantwortung, in die EMS-Maske nur 4 Bit zu tun, die in Folge liegen, kannst Du auf die Initialisierungssoftware abdrücken. Das Page-Register wählst Du im EMS-Fall anhand von A14 und A15 aus. Das heißt dass Du bei Page-Frame-Beginn auf C800 dann eben für C800 auf Page Register 2, für CC00 auf Page Register 3, für D000 auf Page Register 0 und für D400 auf Page Register 1 zurückgreifst. Ob das mit den 2 20-Bit-Masken praktikabel ist, oder das viel zu viele Flipflops kostet, musst Du unter Kenntnis Deines CPLD selbst feststellen.
Jackintosh hat geschrieben: Mo 31. Okt 2022, 09:46
mkarcher hat geschrieben: So 30. Okt 2022, 15:25
Der ISA-Bus braucht keine aktive Terminierung von Bus-Zyklen. Zu XT-Zeiten wurde davon ausgegangen, dass Zyklen "by default" in der Zeit terminiert werden, die der 8088 braucht (also etwa 3 Prozessortakte). Wenn eine Karte mehr Zeit braucht (z.B. weil die MDA- oder CGA-Karte gerade ihr RAM braucht, um den Bildschirminhalt auszulesen), kann sie durch das low-ziehen von IOCHRDY die automatisiche Terminierung von Zyklen unterdrücken. Dann wartet der Computer, bis IOCHRDY wieder high ist, und terminiert den Buszyklus in dem Takt.
Also läuft die Terminierung eines Buszyklusses über eine "Eieruhr" und nicht aktiv durch das angesprochene Target? Außer es meldet über /IOCHRDY mehr Zeitbedarf an.
Genau so ist es. Der 8088 hat ja einen 4-Takt-Buszyklus. Im ersten Takt gibt er die Adresse aus, spätestens am Ende des zweiten Takts die Daten (bei Schreibzugriffen). Im dritten Takt ist der Bus stabil, und zu Beginn des vierten Takts werden Daten bei Lesezugriffen übernommen. Waitstates werden dadurch erreicht, dass der "dritte Takt" mehrfach wiederholt wird. Die Eieruhr ergibt sich im Original-PC einfach aus diesem Bus-Timing des Prozessors. Neuere Computer versuchen, zumindest bei 8-Bit-Zugriffen, etwa das gleiche Timing zu erreichen.
Jackintosh hat geschrieben: Mo 31. Okt 2022, 09:46
Mittels des /0WS Signals kann hingegen ein Zyklusverkürzung vom ISA device bewirkt werden? Ist dies im 0WS Fall für die CPU verpflichtend oder darf sie wiederum 0WS ignorieren und einen Standardzyklus fahren?
Es gibt keine Pflicht für das Mainboard, sich zu beeilen. Daher ist es sinnvoll, 0WS als Angebot zu sehen. Du solltest aber wissen, dass der Pin B8 auf dem ISA-Bus erst ab dem AT (mit seinen 16-Bit-Slots) die Funktion 0WS hat. Im Original-PC ist der Pin reserved (was da wirklich drauf liegt, habe ich nicht im Kopf, jedenfalls ist er für den Busbetrieb völlig irrelevant), und im XT (damit meine ich vor allem genau den IBM 5160, nicht alle XT-kompatiblen) ist er in Slot 8 "Card Select". Wenn in allen 8 Slots ISA-Karten stecken, kann die Bus-Last auf den Datenleitungen zu hoch werden. Daher hat Slot 8 im XT einen vom Rest des ISA-Bus getrennten Datenpfad. Um das Mainboard vom Standard-ISA-Datenpfad auf den Slot-8-Datenpfad umzuschalten (ist m.W. nur für Lesezugriffe relevant), muss die Karte in Slot 8 signalisieren, dass sie zuständig ist.
In einem PC/XT braucht man auch kein 0WS-Signal, denn der Standard-ISA-Zyklus bei 4,77MHz ist bereits das schnellste, was der Computer kann.
Fazit: Wenn Du eine PC/XT-Karte, ignoriere Pin B8. Es sei denn, Du willst "Slot-8-kompatibel" sein. Dann implementiere B8 als Output, der bei Lesezugriffen auf die Karte aktiv (ich glaube low) geht. Im Zweifel kannst Du da einen Jumper reinsetzen, der nur für XT-Slot-8 gesetzt wird.
Jackintosh hat geschrieben: Mo 31. Okt 2022, 09:46
mkarcher hat geschrieben: So 30. Okt 2022, 15:25
Was beim Verständnis von ISA hilft: Vergiss den Takt!
Und genau hier bringen Du und Andreas Stiller mich durcheinander.
Er schreibt in der c't 11/1991 S.336 (c't Kartei Artikel über den AT Bus - Teil 1):
Eine wichtige Änderung hat sich im Laufe der Zeit jedoch zwischen dem 4,77-MHz-PC und den moderneren ATs ergeben. Während der XT-Bus noch mit Fug und Recht als synchron bezeichnet werden konnte (alle Signale sind in Timing und Phase starr an den Bustakt gekoppelt), weichte diese starre Kopplung allmählich auf und ergab ein Synchron/Asynchron-Kuddelmuddel.
Andreas Stiller hat recht: Die Signale sind im PC/XT taktsynchron. Aber diese Eigenschaft spielt keine Rolle, denn das Timing, wann Du Adressen und Daten auswerten darfst, wird praktisch am einfachsten über die Zyklus-Signale und IOCHRDY definiert. Du musst nichts mit dem Taktsignal synchronisieren, und deshalb macht das in der Praxis auch keiner. Das ist anders als zum Beispiel bei PCI, wo man die Steuerleitungen, die den Zyklus-Typ angeben nur in der Nähe einer Taktflanke auswerten darf, und man daher ohne Taktsynchronisierung keine funktionsfähige Karte bauen kann.
Jackintosh hat geschrieben: Mo 31. Okt 2022, 09:46
IEEE-P996 trägt dieser Tatsache Rechnung und bezeichnet ISA und E-ISA als `grundsätzlich asynchron mit wenigen synchronen Komponenten´.
Die Asynchronität ist für alle jene Karten von elementarer Bedeutung, die ihr Timing in irgendeiner Weise auf den Bustakt beziehen."
Die "wenigen synchronen Komponenten" sind hier vor allem der Betrieb bei 0WS. Bei 0WS dauert ein Zyklus minimal 2 Zyklen, und der Zeitpunkt, wann die Karte die Daten liefern muss, ist über "Beginn des nächsten Takt nach Aktivierung von 0WS" definiert. Für PC/XT-Karten spielt 0WS keine Rolle, und daher ist dort ein komplett taktfreies Design das einfachste.
Jackintosh hat geschrieben: Mo 31. Okt 2022, 09:46
Mit E-ISA bezeichnet die c't hier eine erweiterte (16bit) AT-Bus Variante. Dies ist wohl analog zu den Büchern von Ed Solari. Dieses E-ISA ist nicht gleichbedeutend mit EISA. Mit E-ISA wird lt. c't Artikel wohl der ISA Teil von EISA bezeichnet - was immer das auch bedeutet!
EISA (also der 32-Bit-Bus) ist durch das Konsortium ein von Anfang an klar spezifierter Bus gewesen, wogegen der IBM-kompatible "System Bus", der später ISA genannt wurde, als "das 5150-Mainboard macht das so - seht selbst, wie ihr damit klarkommt" designed wurde. Dadurch heißt es, dass erst durch die Normierung von EISA auch eine klare, eindeutige Spezifikation des 8- und 16-Bit-ISA-Bus stattgefunden hat. Das wird der Grund für "ISA ist Teil von EISA" sein.
Jackintosh hat geschrieben: Mo 31. Okt 2022, 09:46
mkarcher hat geschrieben: So 30. Okt 2022, 15:25
Die Adressleitungen sind stabil, solange das Zyklus-Signal aktiv ist.
Wozu dient dann /BALE?
IBM hatte einen Pin über, und hat sich gedacht, es schadet nicht, dahin das BALE-Signal vom Mainboard zu routen.

Etwas ernster: Wie Du aus den Diagrammen siehst, zeigt die fallende Flanke von BALE an, dass Du auf den SAx-Leitungen eine gültige Adresse findest. Damit kann der Adressdekoder schon ein paar Nanosekunden früher anspringen, als wenn er auf eines der Zyklus-Signale wartet. Das Board braucht BALE, da dadurch das Latch auf dem Board gesteuert wird, was A0 bis A7 während eines Zyklus hält, während der Prozessor die dafür genutzten Pins auf D0 bis D7 umfunktioniert hat.
Jackintosh hat geschrieben: Mo 31. Okt 2022, 09:46
Die Zahlen geben den zeitl.Absttand in ns an, aber es ist aus dem Text nicht erkennbar, ob es min. oder max. Zeiten sind.
Doch. Vor den Zahlen steht ein "größer-als"-Zeichen für Minimal-Zeiten oder ein "kleiner-als"-Zeichen für Maximalzeiten.
Jackintosh hat geschrieben: Mo 31. Okt 2022, 09:46
mkarcher hat geschrieben: So 30. Okt 2022, 15:25
ISA hat noch eine fiese Falle zu bieten: (...)
Ja, über /AEN bin ich auch schon gestolpert. Ich denke ich werde in VHDL MEMR/MEMW/IOR/IOW in einen 4-bit Vektor zusammenfassen und dann nur reagieren wenn exakt ein Bit=GND ist. Das sollte mich von der von Dir genannten Falle hoffentlich retten.
Sollte funktionieren. Die kanonische Lösung ist allerdings, AEN in den IO-Adress-Dekoder mit aufzunehmen, und nur bei /AEN=low matches zu generieren.
Jackintosh hat geschrieben: Mo 31. Okt 2022, 09:46
mkarcher hat geschrieben: So 30. Okt 2022, 15:25
Bei einem DMA-Schreib-Zyklus (memory-to-IO) werden also gleichzeitig MEMR und IOW getrieben.
Ich verstehe das Konzept so, daß mit "DMA" hier ausschließlich der DMA Baustein 8237A gemeint ist, obwohl ein ISA Device auch als DMA-fähiges Gerät auftreten kann. Nur, daß wir dieselbe Sprache sprechen. Sonst bitte korrigieren!
Sicher, daß Du da nicht ISA-Busmaster Zugriffe meinst, also wenn z.B. ein SCSI Controller selbst Daten ins RAM schaufelt/bzw. heraus?
Ja, ganz sicher. Bei Busmaster-Zyklen treibt der Busmaster (genau wie das Mainboard bei Prozessor-Zyklen) immer nur eine der Zyklus-Leitungen. Nur bei 8237-Zyklen kommt es zu dieser Doppel-Signalisierung. Ich vermute, die Idee ist, dass /IOW und /IOR zur Steuerung von Datenpuffer-Chips auf DMA- und I/O-fähigen Karten verwendet werden kann, und diese Logik unabhängig davon ist, ob DMA oder PIO stattfindet. Denke hier an sowas wie die Anbindung des NEC µPD765-Floppy-Controllers. Der hat seinen "Datenport", über den auch die Inhaltsdaten der Diskette transferriert werden. Bei Verzicht auf DMA kann der Datenport mit IN-Befehlen (im PC: auf Port 3F5) gelesen werden, und bei DMA durch den DMA-Controller. Für den Datenpfad sehen beide Varianten gleich aus.