Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » S8000 WDC Emulator » Themenansicht

Autor Thread - Seiten: -1-
000
29.06.2012, 11:46 Uhr
Olli

Avatar von Olli

Ja... S8000, nicht P8000

Ich habe ja immer noch das "Original" der P8000 im Keller stehen jedoch ohne Tape-Drive und ohne SA1100-Festplatte.

Ich ueberlege nun, ob man nicht auch einen WDC-Emulator für die Kiste braten kann. Ich denke, mit etwas Mühe bekommt man dann auch WEGA drauf zu laufen (bis ich irgendwann mal ZEUS bekommen kann....).

Ich habe
a) Leiterplatte des Original-WDC
b) Firmware des Original-WDC nur in disassemblierter Form (sehr bescheiden zu lesen)
c) "Theory of Operation" in Seite 109 ff

Wenn ich die Beschreibung richtig verstehe, wird auch mit Command-Codes gearbeitet, die werden aber an definierten Adressen abgelegt - also nicht über eine PIO geschleust.

Wie gehe ich nun am besten vor? Irgendwelche Vorschläge?

Erstmal Schaltplan der Karte abzeichnen? Erstmal Firmware verstehen?

Mir schwebt ja erstmal abzeichnen des Schaltplan vor, ATMEGA entsprechend am Bus anschliessen und dann einfach mal Trial&Error schauen ob man was hinbekommt
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000

Dieser Beitrag wurde am 29.06.2012 um 11:49 Uhr von Olli editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
29.06.2012, 12:26 Uhr
holm

Avatar von holm

So wie Du das jetzt schreibst liest sich das, als wäre das Übergabefenster hier Meomory-Mapped, d.h. ein Fenster im Speicher über das Kommandos, Parameter und Daten geschoben werden. Derartiges ist nicht unbedingt unüblich, und die Datenübergabe ist sicherlich etwas schneller. Du wirst dem Atmega aber kaum erklären können das der das ausreichend schnell hinbekommt, Du wirst ggf. einen DualportRAM samt Mailbox für das Handshake brauchen.

Beim Z8000 kommt an der Stelle natürlich das MMU Mapping mit ins Spiel, der Speicherbereich sollte ja wohl nicht verschieblich sein und irgendwie protected...

An Deiner Stelle würde ich versuchen den Treibersourcen auf den Zahn zu fühlen (Speicherbereich, Handshake, Bufferbereich) und dann mal auf die Controllerplatine gucken was sich da so herumtreibt.

Ok, gerade gelesen, I/O Bereich, 16 aufeinanderfolgende 8 Bit Register und ein 8Bit C/S Register. Also ein kleiner RAM im IO Bereich (für jede Platte getrennt)und irgend ein Latch...
Außerdem scheint das Ding DMA zu machen und die Daten direkt aus dem Huptspeicher auf die Platte bzw. zurück zu schreiben. Das ist ein Stück Arbeit wenn Du kompatibel sein willst.

Gruß,

Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}

Dieser Beitrag wurde am 29.06.2012 um 12:35 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
29.06.2012, 12:53 Uhr
Olli

Avatar von Olli

Die Adresse des Registers (Bit 8-15) ist auf der WDC-Leiterplatte einstellbar. Ich vermute mal, die CPU schreibt direkt in den RAM des WDC an die eingestellte Adresse das Kommando. Oder woher weiss die CPU sonst wohin sie schreiben muss? oder AA00-AAc0 ist fest verdrahtet als 1. WDC-Karte.

Ich übersetze mal aus dem Handbuch


Zitat:
4.5.2.1 CPU Interface:
Die CPU kommuniziert mit dem Controller durch sechzehn 8-Bit Kommando-Register und einem 8-Bit Kommando-Status (C/S) Register (Abbildung 4-4). Jedes Register hat eine bestimmte Bedeutung und eine bestimmte Adresse. Die CPU schreibt die Kommandos in die Register xx00 bis xx0F. Der Controller liest diese Register und verarbeitet die angegebenen Kommandos. Der Controller schreibt das Ergebniss oder Status des spezifizierten Kommandos in das C/S Register welches die CPU liest. Tabelle 4-14 zeigt die Kommando. und C/S-Register.

Das Kommando- und C/S Register liegt in dem E/A-Bereich der CPU auf irgendeiner 256-Wort-Adresse (on any 256-word boundary). In diesem 256-Wort Block liegen die Kommando-Register auf einer relativen Adresse xx00 bis xx0f hexadezimal. Das C/S Register liegt auf Adresse xx10. Die 2 HEX-Werte mit der höchsten Wertigkeit der Aresse xx können mittels Jumper auf dem Controller eingestellt werden. Tabelle 4-15 zeigt die Jumper und die Bits (15 bis ) welche die Jumper steuern. Dieses Schema erlaubt mehr als einen Controller im selben E/A Bereich.

Als Register gibt es folgende:
xx00 Kommando Register
Die CPU sendet spezifische Kommandos zu dem Controller durch dieses Register. Dieses Register ist das letzte was die CPU schreibt. Es wird ausserdem das Status Byte geleert um die Verarbeitung des Kommandos durch den WDC anzustoßen.

xx01 Laufwerks Register
Spezifizierung des Laufwerks 0 bis 3

xx02 Kopf Register
Angabe des Schreib-Lese-Kopfes für die aktuelle Operation

xx03 Zylinder Low Register
xx04 Zylinder High Register

Die Zylinder Angabe

xx05 Sektor Register
Angabe des Sektors

xx06 Reserved
xx07 Reserved

xx08 Transfer Word Count, Bits 7-0
xx09 Transfer Word Count, Bits 15-8

Anzahl der zu übertragenden Wörter


xx0a Transfer Address, Bits 7-0
xx0b Transfer Address, Bits 15-8
xx0c Transfer Address, Bits 32-16

Das ist etwas schwerer zu schnallen "This register contains the 3 byte transfer address. The transfer address is the location of the first word of a block of memory allocated for the transfer. Data can be leaving memory or coming to it." Liesst sich fuer mich so, das ob mir da die CPU sagt von welcher Adresse ich die Daten zu lesen habe die auf die Platte sollen, bzw. wohin ich die Daten zu schreiben habe welche ich von der Platte lese. Und die register davor sagen mir wieviel Wörter ich schreiben soll (1 Wort = ??? Bytes?!)
xx0d Reserved
xx0e Reserved
xx0f Reserved
xx10 Control Status C/S Register

Mögliche Bereiche der Adressen sind AA10 - AA00, BB10 - BB00, CC10 - CC00
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000

Dieser Beitrag wurde am 29.06.2012 um 13:02 Uhr von Olli editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
29.06.2012, 13:16 Uhr
Olli

Avatar von Olli

Deswegen ist da unten bestimmt auch ein DMA-Controller auf dem Board

http://pics.pofo.de/gallery3/var/albums/S8000/S8000_boards/wdc_front.jpg

es sind auch 2 am29705 (16-word By 4-bit 2-port Ram) drauf.
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000

Dieser Beitrag wurde am 29.06.2012 um 14:22 Uhr von Olli editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
29.06.2012, 15:19 Uhr
holm

Avatar von holm

...und Dualport RAM ist auch drauf in Inkarnation des Am29705, für mich ein alter Bekannter, das ist ein zusätzliches Registerfile für AM2901 Bitslices :-)
(Guckstdu http://www.datasheetarchive.com/)

In wie fern die Z80 DMA auf den S8000 Bus schaufelt, kann ich aber nicht beurteilen, zumindest werden wortweise Übertragungen damit etwas schwierig. (1Wort=16Bits=2 Bytes).

Gruß,

Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}

Dieser Beitrag wurde am 29.06.2012 um 15:21 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
29.06.2012, 17:34 Uhr
Olli

Avatar von Olli

Nun... also doch wohl erstmal Schaltplan zeichnen - das wird dann erstmal etwas dauern
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
30.06.2012, 14:54 Uhr
Olli

Avatar von Olli

So ich nehme jetzt den Schaltplan auf - wenns erlaubt ist, stelle ich hier meine doofen Fragen

Ich hab immer Probleme sinnvolle Signalnamen zu bestimmen wenns darum geht, signale von Schaltplanseite 1 auf Seite 2 weiter zu verwenden.

Frage 1

Ich habe 2 Oder-Gatter. Eingang: /IOREQ und /RD des Z80 sowie /IOREQ und /WR des Z80. Die Ausgänge werden wieder an drölftausend anderen Logik-Gattern ('08+'32) verwendet.... wie benenne ich am besten die Signale aus den zwei Oder-Gattern? Wäre es AND hätte ich ja sowas wie IORD und IORW gewählt, aber bei ODER? Wird mir auch noch nicht klar wozu diese Verknüpfung Sinn macht.

Ein Ausgang des /IOREQ + /WR Oder-Gatters geht z.B. auf einen Eingang eines Oder-Gatters. Der Andere Eingang kommt von einem '154-Ausgang. Der Oder-Ausgang geht dann an den an den CLK-Eingang eines 74LS374.

Heisst also, CLK des '374 wird angesprochen wenn entweder der '154-Adressdecoder H ausgibt an einem Ausgang, oder /IOREQ H ist, oder /WR H ist.
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
30.06.2012, 16:19 Uhr
Enrico
Default Group and Edit



Zitat:
Olli schrieb


Ich habe 2 Oder-Gatter. Eingang: /IOREQ und /RD des Z80 sowie /IOREQ und /WR des Z80. Die Ausgänge werden wieder an drölftausend anderen Logik-Gattern ('08+'32) verwendet.... wie benenne ich am besten die Signale aus den zwei Oder-Gattern? Wäre es AND hätte ich ja sowas wie IORD und IORW gewählt, aber bei ODER? Wird mir auch noch nicht klar wozu diese Verknüpfung Sinn macht.


Ds macht ja ein UND. Aber eben für die L-aktiven Signalen. Alle Eingänge sind L, dann ist der Ausgang auch L.
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
30.06.2012, 17:16 Uhr
Olli

Avatar von Olli

Du hast natürlich sowas von Recht
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
30.06.2012, 23:29 Uhr
Olli

Avatar von Olli

So... langsam nährt sich das Eichhörnchen... doch recht komplex die Karte.... das wird noch Wochen dauern bis ich fertig bin

Eine Frage mal...

http://pofo.de/tmp/S8000_WDC-S8000_WDC_02.pdf

unten im Plan - so mittig sind zwei '373 (U41, U42) - warum verschaltet man die Latches so? Zum "puffern" von 2 Bytes? Über U26, U27 weiter oben links sind sie mit dem Datenbus des Z80 verbunden - genauso wie die ganzen SRAMs.
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000

Dieser Beitrag wurde am 01.07.2012 um 00:30 Uhr von Olli editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
01.07.2012, 00:18 Uhr
Enrico
Default Group and Edit


Das wirst Du wohl nur rausfinden können, wenn Du auch noch die Software auseinandernimmst.
Denkbar wäre es, ich würde eher aber was für die Konfiguration vermuten, oder Register für die Anzahl der zu übertragenden Bytes, etc...
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek