Robotrontechnik-Forum

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

Robotrontechnik-Forum » Technische Diskussionen » SCSI Interface für P8000 » Themenansicht

Autor Thread - Seiten: -1-
000
05.08.2009, 18:38 Uhr
holm

Avatar von holm

Ok. mal hier weiter im Text:

Ja Enrico, IO ist Zugriff auf die Hardware und das ist bei Unixoiden Systemen
dem Systemkern vorbehalten. Du kannst aber im Nicht segmentierten Betrieb
mit dem Monitor da drin herumstacheln und testen. Das Laden von Programmen
sollte ja wie ich gezeigt hatte auch über die Serielle Schnittstelle passieren können.

Großer Nachteil: man braucht zumindest noch eine 16Bit Platine.
Gut ich habe zur Zeit 3 funktionierende hier.

Diese DTC kenne ich nicht mal vom Höhrensagen, denke mir aber, das die das wohl über eine U858 gemacht hatten. Man müßte ggf. erst mal mit einer Universalleiterplatte testen ob das funktioniert und wie. /BUSREQ und /BUSACK existieren zumindest auf den Steckverbindern und ich kann mich auch trübe erinnern mal was mit P8000 und DMA gelesen zu haben, oder einen Verweis auf die RFE gelesen zu haben oder sowas ...

Ich weiß, trivial ist was Anderes.

Es muß aber nicht unbedingt DMA sein, im Z53C80 Manual steht ein Psudo DMA Betrieb beschrieben, d.h. der Chip tut so als wenn er DMA machen würde, irgend eine Mimik muß bei DRQ einen Interrupt auslösen und die CPU kümmert sich, die Logik erzeugt dann DACK für den Z53C80. Das währe eine Sache die mir noch gefallen würde, es geht aber auch Programmed IO wobei das nach langsam und Sackgang aussieht, augenscheinlich macht es dieser MAC Treiber aber so, denn der hat weder Interrupt noch DMA, die pflanzen das Ding wohl auf eine ROM Fassung wenn ich das richtig gelöffelt habe, bin noch gar nicht zum tieferen Lesen gekommen...

Es währe also erst mal zu erforschen, ob und wie die RETI und die M1 Mimik für Steckkarten zu gebrauchen sind, (EAW schreibt von bedingt verwendbar[Hardwarehandbuch]):


Quellcode:
Tabelle 3.6-9   UA880-Peripherie-System-Signale:
            Zugriff                  ! IORQ- RD- M1-
      ------------------------------!----------------
      Lesen                          !   0     0   1
      Schreiben                      !   0     1   1
      Interrupt-Quittier-Zyklus      !   0     1   0
      Return-from-Int. (RETI)        !   1     0   0
Die in Tabelle 3.6-9 aufgefuehrten Signale sind auch auf die
Busstecker gefuehrt (vgl. Tabelle 3.-7). Sie sind dort mit
der Vorsilbe BUS versehen. Die Nutzung dieser Signale fuer
I/O-Erweiterungskarten ist nur bedingt moeglich!

... na sowas, bedingt...

Wenn das zum Betrieb eines Interruptfähigen CTC ausreicht, wird dieser mein Interruptcontroller, der bekommt auf einem Zähleingang simpel den INT Pin des Z53C80 verpaßt und liefert dann bitteschön nach dem einen Impuls den Interrupt samt Vektor zur CPU. Alternativ geht natürlich auch eine PIO, Wenn DMA, dann diese evtl. auch mit dem 2. Kanal, mal gucken was man da umbiegen kann.

Die DMA währe ggf. mit Adreßbits nach oben zu erweitern, dafür würde ich gerne ein beschreibbares Register nehmen wollen, das die Adresse setzt. Wie der ganze Kokolores dann noch mit den MMUs vergriesgnaddelt werden muß um den Bezug von virtuellem Adreßraum auf den physischen zu erzeugen, steht auch noch zur Diskussion. Der Kram würde aber bei CPU und nur Interruptbetrieb entfallen, weil man unter C den allozierten Datenbuffer adressieren kann und die CPU die Daten nur aus dem IO Adreßraum holt.

just my 2Cent.., ich kenne die Z8000 Architektur nicht wirklich.

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 05.08.2009 um 18:40 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
05.08.2009, 18:50 Uhr
Enrico
Default Group and Edit


Hört sich schon mal einfacher als meine Idee.
Aber ich kenne mich mit dem Z8000 auch nicht aus. Aber dafür habe ich nen Buch da, ähh 2. Falsch sind mehrere.
--
MFG
Enrico

Dieser Beitrag wurde am 05.08.2009 um 18:50 Uhr von Enrico editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
05.08.2009, 18:56 Uhr
holm

Avatar von holm

Steht in Deinen schlauen Büchern was zum Einsatz eine Z80 DMA oder Z80 Peripherie allgemein am Z8000 Bus?

So wie es in dem Magnetbandtreiber für das CM5301 aus sieht, haben die nur den CPU CTC1 Kanal 1 als Zeitgeber geschaltet und pollen dann. Allerdings reden die halt auch von DMA. Diese würde natürlich die CPU entlasten und die ganzen Kontextwechsel würden wegfallen, andererseits glaube ich nicht wirklich, das wir den Streamer zum durchlaufen kriegen, der will Datendurchsatz sehen und den mußt Du aus dem Filesystem erst mal durch den WDC in den Hauptspeicher gefädelt bekommen....

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
05.08.2009, 19:02 Uhr
Enrico
Default Group and Edit


Muss ich mal gucken.

Ich dachte SCSI direkt auf den Bus?
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
05.08.2009, 19:28 Uhr
holm

Avatar von holm

Na ja doch, nur erst mal schaffen wir die Daten wohin und nicht woher.
Die Daten die zum Streamer gehen kommen erst mal von einer MFM Platte..
SCSI Platte ist dann mal das nächste. Der Durchsatz wird aber nicht höher werden als
wie bei einer 4Mhz 8Bit CPU, das SCSI Interface ist ja auch nur 8 Bit breit.

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
05.08.2009, 19:44 Uhr
Enrico
Default Group and Edit



Zitat:
holm schrieb
Steht in Deinen schlauen Büchern was zum Einsatz eine Z80 DMA oder Z80 Peripherie allgemein am Z8000 Bus?

IN der Zilog Schwarte nix, Beim U8001 Blockschaltplan "Busanpassung", also nix+0,5.
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
05.08.2009, 19:44 Uhr
Tom Nachdenk



Hm, und warum knüpperste kein IDE an den P8000 Bus? Mal abgesehen davon das IDE IH bäh und pfui ist sollte damit so vorhanden sogar passende Streamer bedienen können und von der Geschwindigkeit her mehr als ausreichen. Denke mal das programmierter 16 Bit-IO schneller ist als 8 BitDMA der die CPU praktisch lahmlegt oder gar per Interrupt jedes Byte einzeln abzuholen. Schneller dürfte DMA erst werden wenn der RAM als Dual-Port Speicher ausgelegt wird und DMA 'von der anderen Seite' schreibt.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
05.08.2009, 19:46 Uhr
Enrico
Default Group and Edit



Zitat:
holm schrieb
Na ja doch, nur erst mal schaffen wir die Daten wohin und nicht woher.
Die Daten die zum Streamer gehen kommen erst mal von einer MFM Platte..
SCSI Platte ist dann mal das nächste. Der Durchsatz wird aber nicht höher werden als
wie bei einer 4Mhz 8Bit CPU, das SCSI Interface ist ja auch nur 8 Bit breit.

Gruß,

Holm

Deswegen kanns doch trtzdem an den 16Bit Bus.
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
05.08.2009, 20:08 Uhr
Olli

Avatar von Olli

bzgl. DMA - hier hat sich irgendein EAW Entwickler mal grundsaetzliche Gedanken zur Erweiterung der P8000 um DMA gemacht:
http://pofo.de/P8000/notes/P8000_02.pdf
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
05.08.2009, 20:15 Uhr
Olli

Avatar von Olli


Zitat:
holm schrieb
Steht in Deinen schlauen Büchern was zum Einsatz eine Z80 DMA oder Z80 Peripherie allgemein am Z8000 Bus?

Viel ist es nicht, aber in meinem schlauen U8000 Buch steht n bissel:

http://pofo.de/P8000/notes/u880_01.jpg
http://pofo.de/P8000/notes/u880_02.jpg
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
05.08.2009, 20:49 Uhr
holm

Avatar von holm

@Olli:
Was ist denn das für eine Schwarte? Bis auf den Claßen/Oeffler habe ich nur das Z8000 Manual...

Liest sich interessant.
Die grundlegenden Gedanken des Entwicklers reißen mich allerdings nicht vom Sessel, manchmal male ich auch sowas beim telefonieren...

@Enrico:
Logisch, wir reden aneinander vorbei.
Vom Hauptspeicher zum SCSI Interface geht es evtl. 16bittig, wobei das SCSI Interface auch nur 8 Bit breit ist, ist ja kein Wide SCSI.

Aber wie kommen die Daten in den Hauptspeicher?
Über eine PIO von der WDC, 8 Bit breit und schnarchlangsam..

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 05.08.2009 um 20:53 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
05.08.2009, 20:51 Uhr
Olli

Avatar von Olli

"Programmierung des 16-Bit-Mikroprozessorsystems U8000" von Brennenstuhl - auch so ein EAWler
Ist zu 90% aber eine Beschreibung des Assemblers (abgeschrieben aus dem Original Z8000 ASM Manual nur uebersetzt - sogar die gleichen Grafiken)
Hinten dann n bissel zu MMU Programmierung, U880, UDOS, WEGA, PLZ/ASM...
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000

Dieser Beitrag wurde am 05.08.2009 um 20:52 Uhr von Olli editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
012
05.08.2009, 20:54 Uhr
holm

Avatar von holm

Hmm, muß ma gucken, irnkwie kommt mir der Titel bekannt vor...

Gruß,

Holm

Edit: Hmm, habs nicht gefunden, was nicht heißt, das ich es nicht doch irgendwo besitze.
Ich habe einfach viel zu viel toten Baum...

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 05.08.2009 um 21:14 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
013
05.08.2009, 21:24 Uhr
Enrico
Default Group and Edit


Das Buch habe ich auch da. Ist aber dazu nicht wirklihc viel zu drin.

Holm, kann sein mit dem aneinander vorbeireden.
Ich hab das so verstanden, dass Du den SCSI Chip erst in den WDC einbauen willst.

Was ich vergass; der DTC ist der Z8000-DMA
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
014
05.08.2009, 21:37 Uhr
holm

Avatar von holm

Ja, das mit dem DTC habe ich mir schon gedacht, denke aber das geht auch so mit der U858, logischerweise ahbe ich nur wieder 2 Stück 2,5Mhz. Habe gerade bei Kessler 2 4Mhz bestellt, will die aber eigentlich nicht einbauen :-)
bei 3,5 Euro geht es auch noch so...


Das Mit dem WDC und dem SCSI hatenn wir diskutiert. Eventuell machen wir später mal so ein Ding wenn wir was wissen :-)
Eine Steckkarte war aber auch mein Vorschlag gewesen und ist irgendwie universeller.
Ich bin auf den WDC nur wegen der zu erwartenden Transferraten zurück gekommen.

Das Buch müßte ich eigentlich haben, ich kann es nur nicht finden. Allerdings kann es sein, das ich das auch mit "Wissensspeicher Mikrorechner- Programmierung" von Claßen/Oeffler verwechsele. Da ist der ganze PLZ/Sys Kram auch drin, der Maschinenbefehlssatz zum Z8000 sowie SCC und CIO...

Der erste Schritt könnte also mal sein, daß ich eine Universalplatine mal mit einem CTC bestücke und versuche das Ding interrupten zu lassen (Wecker oder sowas).
Wenn das geht, kann man ja mal versuchen eine DMA dran zu bauen und die mittels CTC alle Nase lang Bytes aus China in den Hauptspeicher schaffen zu lassen bzw. andersherum.
Ich denke mal bis dahin ist es schon ein Stück Weg...
Ich muß mich aber neben anderen Dingen erstmal noch um den A5105 von Günter und um Rüdigers Testprogramm für Speicher kümmern, das kann also noch ein Bisschen dauern. Des Weiteren ärgert mich immernoch der eine WDC (der von Olli) mit sporadischen Abbrüchen:

fputs.c:
lcc -O -c fputs.c
fread.c:
lcc -O -c fread.c
fseek.c:
lcc -O -c fseek.c
ftell.c:
lcc -O -c ftell.c
Fatal error in /z/LCC/lib/lcopt
*** Error code -55

Stop.
*** Error code 1

Stop.
*** Error code 1

Stop.

Das ist mit Deinem WDC nicht vorgekommen (selbe Platte) und das macht der schon eine Weile. Mir fällt langsam nichts Besseres ein, als mal den RAM auf dem Ding gegen Fassungen zu ersetzten (12 ICs!) und die mal prohylaktisch zu tauschen
(jedenfalls so weit ich mit den Dingern komme, ich habe mehrere U214D30 da, aber nur die wenigen D20 von Ambrosius.)
Zwischen diesen sporadischen Fehlern liegen aber Stunden...
Wenn ich wüßte woher der Error -55 kommt, währe ich weiter.

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
015
05.08.2009, 21:47 Uhr
Enrico
Default Group and Edit


OK, SCSI rennt ja nicht weg. Ich habe verher auch noch jede Menge fertig zu kriegen.

Im HW-HB der P8000 las ich was vorhin von Fehlercodes, welche der WDC meldet.
Ev bringt das ja was ?
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
016
05.08.2009, 22:14 Uhr
holm

Avatar von holm

Das habe ich doch schon durchgegrast...

Quellcode:
Code ! Fehlererlaeuterung
-----!------------------------------------------------------
00 ! kein Fehler, Durchfuehrung der Aktion ok.
01 ! unerlaubter Kommandocode
02 ! Head-Nummer im Kommando zu gross
03 ! Drive-Nummer im Kommando zu gross
04 ! unerlaubte Zylindernummer
05 ! Lesefehler beim Einlesen der Defektspurtabelle
06 ! Plausibilitaetsfehler in der eingelesenen Defektspur-
     ! tabelle
07 ! nach RESET nicht Track0 erreicht (kein Track0-Signal)
08 ! kein Laufwerk "ready"
09 ! Sektor nicht gefunden nach Distanzwiederholung
0A ! kein "FB" als Datenfeldkennzeichen
0B ! keine Marke erkannt (Zeitueberwachung)
0C ! kein Kennfeld gefunden, Fehler im Kennfeld
0D ! CRC-Fehler im Kennfeld (noch kein exaktes Kennfeld
     ! gefunden)
0E ! CRC-Fehler im Kennfeld (exaktes Kennfeld gefunden)
0F ! CRC-Fehler im Datenfeld
11 ! Track0-Signal bei gefordertem Zylinder 0 nicht aktiv
12 ! Sektornummer des zu schreibenden Sektors falsch
13 ! "Fault Write"-Signal aktiv
14 ! Schreibfehler bei "Read after Write"
15 ! Blocknummer im Kommando zu gross
20 ! EPROM-Pruefsummenfehler

und dann gibts in der README auf der Startdisk nochwas:

Quellcode:
Als  Zusatz  zum  WEGA-Systemhandbuch  folgt   eine   Uebersicht   der
Fehlernachrichten des WDC (ab Version 4.1)

Fehlernachrichten nach RESET
----------------------------------------------------------------------
|   Code (Bit)    | Code(hex)|   Erlaeuterung                        |
----------------------------------------------------------------------
| 0 0 1 0 0 0 0 0 | 20h      | EPROM-Pruefsummenfehler               |
| 0 0 1 0 0 1 1 1 | 27h      | kein Laufwerk bereit                  |
| 0 0 1 0 1 x x x | 28h + LW | Cylinder 0 nicht erreicht (mit LW)    |
| 0 0 1 1 0 x x x | 30h + LW | Cyl0/Head0/Sec1 nicht lesbar (mit LW) |
| 0 0 1 1 1 x x x | 38h + LW | logische Fehler in PAR&BTT (mit LW)   |
----------------------------------------------------------------------
Bei den Fehlercodes 28h, 30h und 38h wird das Laufwerk durch Setzen
von Einzelbits (LW0: Bit 0 gesetzt, LW1: Bit 1 gesetzt,
LW2: Bit 2 gesetzt) angezeigt.

Treten in der Anlaufphase des WDC nach RESET Fehler auf, werden  diese
unmittelbar  nach Uebernahme des ersten Kommandos vom WDC durch Status
7 dem Host-Rechner bekanntgemacht.


Fehlernachrichten waehrend normaler Zugriffe
----------------------------------------------------------------------
| Code  |        Erlaeuterung                                        |
----------------------------------------------------------------------
|  01h  | nicht erlaubtes Kommando                                   |
|  02h  | 'Head' im Kommando zu gross                                |
|  03h  | 'Drive' im Kommando nicht bereit                           |
|  04h  | 'Cylinder' im Kommando zu gross                            |
|  05h  | 'Block' im Kommando zu gross                               |
|  06h  | angefordertes Laufwerk nicht positioniert                  |
|  0Ah  | geforderter Sektor nicht gefunden                          |
|  0Bh  | keine Marke erkannt (Zeitueberwachung)                     |
|  0Ch  | Fehler beim Lesen des Datenfeldes                          |
|  10h  | "Fault Write"-Signal aktiv                                 |
|  11h  | Schreibfehler bei "Read after Write"                       |
|  12h  | Sektornummer des zu schreibenden Sektors falsch            |
|  15h  | Fehler waehrend der Zeitkonstantenauswahl beim Formatieren |
|  16h  | BTT des angesprochenen Laufwerks ist voll                  |
|  17h  | Fehler in der PAR-Tabelle                                  |
|       | (beim Schreiben auf das Laufwerk)                          |
|  18h  | Fehler in der BTT                                          |
|       | (beim Lesen aus dem WDC-RAM in den Host-RAM)               |
----------------------------------------------------------------------


Ich weiß nur nicht, ob ich ein Phantom jage.
Olli klagte auch über einen solchen Abbruch und 2 mal der selbe sporadisch auftretende Fehlr währe schon komisch..

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
017
05.08.2009, 22:17 Uhr
Olli

Avatar von Olli

Meine Meinung dazu - auch wenn wir nun im SCSI Thread sind - diese Errorcodes haetten die sich beim WDC auch schenken koennen. Die welche dokumentiert sind habe ich noch nie auf nem Schirm gesehen (sind sicherlich nur interne) - und die welche auf dem Schirm kommen sind nirgends dokumentiert... das totale EAW-Chaos.
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
018
05.08.2009, 22:38 Uhr
holm

Avatar von holm

Na übertreibe nicht, die hier zumindest müstest Du kennen:


Quellcode:
> err on dev 0/4
> bn=41 er=FF18,C
> Das wird wohl an der Platte liegen, hast Du schon mal untersucht, ob bn=41
> on dev0/4 wirklich der Byteoffset 512*41 nach Beginn der Partition /z ist?
> Dann könnte man ja den Badtrack mal nachtragen...
  
Das habe ich noch nicht, aber genau so wird es sein.
  
/*---------------------------------------------------------------------------*/
/*
* deverror
* Gibt eine Diagnose eines fehlerhaft angesteuerten Device-Treibers aus
* "err on dev x/y
*  bn=d er=o1,o2"
* Wobei d die dezimale Blocknummer (long) des Devices
* und o1 und o2 die hexadezimalen Werte zweier
* Fehlerstatus-Register sind.
*/
/*---------------------------------------------------------------------------*/
deverror(bp, o1, o2)
struct buf *bp;
{

        prdev("\007err", bp->b_dev);
        printf("bn=%D er=%x,%x\n", bp->b_blkno, o1, o2);
}

Das ist 0x0c, Fehler beim Lesen des Datenfeldes...

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 05.08.2009 um 22:39 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
019
06.08.2009, 13:10 Uhr
Enrico
Default Group and Edit


Kann man auf den WDC eigentlich per DMA draufgehen, oder muss man für jedes Byte Handshake machen?

Z80 DMA auf den Bus drauf und Transfer SCSI-WDC wäre dann schon möglich, SCSI-RAM halte ich aber für sehr gefährlich, da die MMUs den RAM logisch/ physisch irgendwie verquirlen können, wovon die CPU ja nix mitkriegt.
--
MFG
Enrico

Dieser Beitrag wurde am 06.08.2009 um 13:10 Uhr von Enrico editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
020
06.08.2009, 13:15 Uhr
holm

Avatar von holm

Nein der WDC hängt aus sicht der 16Bit Platine nur an einer PIO, das ist programmed IO mit Handshake. Es wird mit Hardwarehandshake ein Job File aus ein paar Bytes übertragen das den WDC beschäftigt und die Ergebnisse auf die selbe Art und Weise zurück. Da ist keine DMA möglich.

Um den WDC zu ersetzten muß man einen zusätzlichen Controller verwenden..

GLS sollte Deinen WDC mittlerweile zu Dir schaffen, wenn Du Schwein hast, hast Du ihn morgen.

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
021
06.08.2009, 13:46 Uhr
paulotto



diesmal bruchsicher zwischen ein paar Eichenbohlen verpackt???

duck & weg...

Gruß,

Klaus
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
022
06.08.2009, 13:49 Uhr
Enrico
Default Group and Edit


Mit der PIO ist schon klar, es hätte ja aber sein können, dass man erstmal nur 512 Bytes hinschickt, und dem WDC sagt " nun mach mal".

Na, wenn das mal mit GLS gut geht...

Was kriegst Du denn dafür?
--
MFG
Enrico

Dieser Beitrag wurde am 06.08.2009 um 13:49 Uhr von Enrico editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
023
06.08.2009, 14:04 Uhr
holm

Avatar von holm

.. warum soll das nicht gut gehen? Ich habe einen Vertrag mit denen, dann müßte ich denen mal den Arsch aufreißen..

..einen schönen Dank, davon habe ich zwar schon den ganzen Keller voll (ich 'abe aber gar keinen Keller) aber laß gut sein. Ziel ist, das Du Dich wieder mit der vergriesgnaddelten RAM Platine beschäftigen kannst...
Du hast ja auch was her geschickt.

:-)

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 06.08.2009 um 14:04 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
024
06.08.2009, 14:19 Uhr
Olli

Avatar von Olli

Also ich denke auch erstmal den WDC WDC sein lassen und eine SCSI Karte fuer Streamer bauen... und dann mal sehen was man daraus gelernt hat.

Gibt es eigentlich Ideen was fuer n Streamer (Technik) es sein wird? Ich habe im Hinterkopf irgendwas "einfaches" also QIC? Welches....?
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
025
06.08.2009, 14:26 Uhr
holm

Avatar von holm

Na ich habe hier noch einen Archive Viper 150 und einen 5GB Tandberg für QIC 02 Cardridges.

Irgendwas moderneres sollte eigentlich auch gehen, so deutlich unterscheiden die sich nicht. Dir Dinger bekommen wir sowieso nicht satt.

Evtl. kann ich Euch Beide mit sowas sponsorn, ich glaube es sind noch 2 dieser Tandbergs irgendwo da...

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
026
06.08.2009, 14:31 Uhr
Olli

Avatar von Olli

Naja, ich meine halt das wir uns nich auf Streamer festlegen sollten (wenn moeglich) die kein Mensch mehr bekommt - ausser Ihr 2 weil Ihr sie im Bastelkeller noch rumliegen haben
Was waere denn mit DAT? Ich weis ich weiss - Sch**** Technologie, ja ich weiss - write many read none medium usw.... aber davon habe ich z.B. noch 3 Leichen im Keller
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
027
06.08.2009, 14:35 Uhr
holm

Avatar von holm

Laß die mal da..

Die Dinger sind wirklich wie der Signetics 25120.
Ich war lange genug bei einem ISP Sysop um das zu wissen.

Für die paar Leutchen die hier mit einer P8000 herummachen müßten die Dinger auftreibbar sein und SCSI Streamer sind realtiv gut standardisiert.

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
028
06.08.2009, 14:41 Uhr
Enrico
Default Group and Edit



Zitat:
holm schrieb
..einen schönen Dank, davon habe ich zwar schon den ganzen Keller voll (ich 'abe aber gar keinen Keller) aber laß gut sein. Ziel ist, das Du Dich wieder mit der vergriesgnaddelten RAM Platine beschäftigen kannst...
Du hast ja auch was her geschickt.

Dann meinen Herzlichen Dank.
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
029
06.08.2009, 14:44 Uhr
holm

Avatar von holm

Dank angenommen.

Wenn ich Dir eine Rechnung hätte schreiben wollen währest Du mir sowieso nach hinten umgekippt :-)

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 06.08.2009 um 14:45 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
030
06.08.2009, 14:46 Uhr
Enrico
Default Group and Edit


Welcher Streamer ist vollkommen egal. Bei SCSI ist der Befehlssatz standardisiert. Bei IDE / ATAPI wäre das u.U. so eine Sache.

Ob wir da nun QIC, Travan, Reel to Reel, LTO, was auch immer nehmen ist letztendlich egal. Hauptsache kein DAT. Das ist eigentlich wirklich Schrott.

Es wäre aber sinnvoll sich auf ein Typ wg der Austauschbarkeit zu einigen, ansonsten ist das egal.
Wg. der Grösse wäre mir QIC80 lieber.

Sowas hatte ich mal im PC. Da der Kopf bei jedem EInschalten losjault war der dann bald kaputt.

Davon mal abgesehn ist SCSI wesentlich universeller. Darüber wären auch so nette Sachen wie Prozessor bzw Rechnerkopplung möglich.
--
MFG
Enrico

Dieser Beitrag wurde am 06.08.2009 um 14:50 Uhr von Enrico editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
031
06.08.2009, 14:47 Uhr
Enrico
Default Group and Edit



Zitat:
holm schrieb
Dank angenommen.

Wenn ich Dir eine Rechnung hätte schreiben wollen währest Du mir sowieso nach hinten umgekippt :-)

Gruß,
Holm

privat wohl schon, von Firma her haut mich nix mehr um
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
032
06.08.2009, 14:48 Uhr
Olli

Avatar von Olli

iSCSI?
Ok... ich habe ansonsten noch so n 8mm Streamer im Keller aus ner alten 59H - aber keine Medien mehr
Naja - welcher Streamer ist ja etwas was man ziemlich am Ende klaeren kann...
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
033
06.08.2009, 14:51 Uhr
Enrico
Default Group and Edit


Ich kenn erstmal nur noch SAS.
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
034
06.08.2009, 15:03 Uhr
holm

Avatar von holm

Diese U8000 Schwarte habe ich nun endlich gefunden :-)

Leider erst heute, nachdem ich gestern noch eine für 7,70 + 3,50 Versand bestellt habe,
mal sehen ob die mit dem Storno einverstandnen sind. Kein Wunder das ich die nicht gefunden habe, die hat mein Weib zwischen Versicherungspapieren verramscht und ich
habe gerade mal in welche reingucken müssen (wegen Sohnemann und Auto).

Heute morgen habe ich von meinem spinnenden WDC 6 RAMS runtergelötet und gegen Fassungen ersetzt. Ein RAM ist gestorben, den hat es mir beim Ausbau zerbröselt.
Auf den Fassungen stecken jetzt U241D30, eigentlich gehöhren ja D20 drauf, aber das Ding arbeitet noch störungsfrei. Hoffentlich bleibt das so, der LC ist noch nicht ganz durch. (ftw.c in der libc). Es sieht aber so aus als ob ich Glück gehabt hätte und den defekten mit erwischt habe, RAM war ja nur eine Vermutung..
Die D30 habe ich draufgesteckt, weil die Eproms ja auch 350ns haben..

Die WDC Firmware guckt zwar kompliziert ob die EPROMS i.O. sind, aber um die RAMS kümmert die sich überhaupt nicht. Ich hatte jetzt auch keinen Bock den Logikanalyzer wieder anzuprömpeln und das RAM Test Programm zu modifizieren
um evtl. einen Fehler zu finden, also habe ich es einfach ausprobiert...

Ich hasse diese U214!

Drückt mir mal die Daumen!

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
035
06.08.2009, 16:39 Uhr
Rüdiger
Administrator
Avatar von Rüdiger

Ist das wirklich sinnvoll, einen Bandstreamer dort anzuschließen?
Laufwerke und Medien zu bekommen, wird da sicher in Zukunft schwierig.

Ronny hatte mal eine Schaltung entworfen, um Banddaten auf Kamera-Speicherkarten abzulegen.
Das hätte den Charme, dass man die Daten einfach auf PCs überspielen könnte...

Ein anderer Ansatz wäre vielleicht die LAN-Karte von Enrico & Dirk.
Dann gänge die Sicherung direkt auf einem PC...
--
Kernel panic: Out of swap space.

Dieser Beitrag wurde am 06.08.2009 um 16:43 Uhr von Rüdiger editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
036
06.08.2009, 17:03 Uhr
holm

Avatar von holm

Ich möchte da ein SCSI Interface dran haben und einen BAND Streamer, ja.
Medien habe ich bis zum umfallen. Flaschcards sind mir zu unzuverlässig und es ist bei mir einfach ein Band auf den PC zu überspielen.
Was später noch an die Schnittstelle ran kommt, ist eine Frage der Zeit, der Lust und der Laune.

LAN Karte ist eine ganz andere Baustelle, frage mal Olli warum.
Die Hardware ist dabei das kleinste Problem.

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
037
06.08.2009, 18:17 Uhr
Olli

Avatar von Olli

Um nicht das Rad (die Tools) unter UNIX neu zu erfinden, brauchen wir einen BSD kompatiblen TCP/IP Stack unter WEGA um die existierenden Tools wiederverwenden zu koennen. Diesen Stack aber nach WEGA zu portieren dauert... ein Mannjahr? Die Hardware ist da denke ich das kleinere Problem. Treiber gibts auch genug Vorlagen fuer so simple Dinge wie NE2000. Aber UNIX muss erstmal TCP/IP verstehen. Und selbst wenn man sowas wie KCNET umsetzt, musst du auch dafuer erstmal ein Kernel Interface schreiben - kein I/O Im Userspace von WEGA - und dann faengst du an auch wie bloed Software zu schreiben - ist ja proprietaer....
Also das ist nochmal ne ganz andere Huerde meiner Meinung nach.... soviel zu dem Thema - back to SCSI
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
038
06.08.2009, 18:20 Uhr
Enrico
Default Group and Edit


Wie schnell ist denn so ein QIC-LW, sagen wir mal was älteres mit ca. 100 MB?
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
039
06.08.2009, 18:29 Uhr
holm

Avatar von holm

Der Viper 150 (100 gibts nicht) approx 100kbyte/sec.
http://www.freebsd.org/doc/en/articles/storage-devices/x528.html

Der TDC4222 (dieses 2,5GB/5GB compressed) wird dort mit 600kByte/sec angegeben.

Gruß,

Holm

Edit: nur mal als Anmerkung, weil das nicht nach viel klingt:
Stell Dir vor Du könntest die FLoppy in 7 Sekunden lesen oder die Platte mit Ihren 40Mbyte in 400 Sekunden, ca 6 Minuten...

Die Platte kannst Du in dieser Zeit nicht mal formatieren, geschweige noch
verify...

Das ist auch der Grund warum die Streamer immer im start/stopp Betrieb werkeln, das liegt nicht an den Geräten oder an QIC.

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 06.08.2009 um 18:41 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
040
06.08.2009, 18:35 Uhr
Enrico
Default Group and Edit


das hört sich erstmal langsam genug an.

Wenns doch nicht machbar ist, wäre die Alternative z.B. ZIP-Diskette
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
041
06.08.2009, 18:42 Uhr
holm

Avatar von holm

Ich habs geahnt :-)

Zip Disks habe ich allerdings schon mehr kaputte als ganze erlebt.

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
042
06.08.2009, 19:07 Uhr
Enrico
Default Group and Edit


Damit hatte ich keine Probleme. Aber schon lange nicht mehr genommen.
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
043
06.08.2009, 23:43 Uhr
Enrico
Default Group and Edit


Ich denke, ich kann das mit meinem noch unterbieten:

TDC 3660
SCSI, SCSI-2
250 MBytes (1,000 ft. tape)
64 KBytes with parity
1.4 MBytes/sec burst
90 KBytes/sec. sustained

Nur für den Fall der Fälle, dass es überhaupt was wird, müsste man sich auf sowas in dem Dreh einpendeln.

Wie es aussieht habe ich aber die falsche Kassette weswegen es nicht tut.

Dass da mit den ganz grossen Eisen, wie LTO o.ä. nix zu wollen ist, versteht sich von selbst.
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
044
07.08.2009, 07:30 Uhr
MichaRa



Ich hab hier noch ein paar TDC3820 rumliegen falls sowas jemand braucht. Ansonsten sicher ich hier @Work viel mit DAT (von DDS1 - 72) und hatte im Vergleich zu den Exabyte 8mm keine Probleme. Die Laufwerke wollen aber gepflegt werden.

Micha
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
045
07.08.2009, 08:22 Uhr
Olli

Avatar von Olli

Ich hatte nur Aerger mit meinen DATs zu hause... Meine Backup-Scripte waren dann am Ende so, das sie n Snapshot des zu sichernden Datenbestandes gezogen haben, diesen aufs DAT getart haben, nebenbei wurden Checksummen jeder Datei des Datenbestands generiert. Dann wurde wieder alles runter vom DAT getart, Checksummen von dem was da runterkam berechnet, und dann jede Checksumme Soll und Ist verglichen... Und dann hast du immer nur gehoft "hoffentlich geht keins der Laufwerke kaputt" - ich war mir nie sicher das das eine Laufwerk auch die Baender das anderen liest Ich habe den Dingern am Ende 0 getraut - nun sichere ich auf USB-Festplatten daheim... auch nicht perfekt, aber reicht mir.
Auf Arbeit hatten die alten S80 die wir bis vor 6 Jahren noch so hatten auch DAT als rootvg-Sicherungsband (dich wichtigen Daten wurden eh mittels Robotter gesichert ) - wie oft da die DAT Baender gerissen sind......

DAT - write many - read none
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000

Dieser Beitrag wurde am 07.08.2009 um 08:23 Uhr von Olli editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
046
07.08.2009, 08:51 Uhr
MichaRa



So sind eben die Erfahrungen. Die alten SUN-Server laufen 10 Jahre und sichern täglich auf DAT. Die Laufwerke wurden 1x getauscht und sind jetzt DDS4. Sind auch schön schnell. Und ja ich habe durch Plattenausfall auch schon mehrere Mal ein Filesystem von Band zurückgeschrieben. Besonders häufig bei den Workstations da hier die User direkt davorsitzen und meinen die Kisten einfach mal auszuschalten wenn etwas nicht mehr so läuft wie sie meinen...

Die neuen Kisten sichern auf DLT aber da war noch kein Recovery nötig obwohl die aktuellen Platten sterben wie die Fliegen. Dafür gibts aber nen RAID.

Micha
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
047
07.08.2009, 09:28 Uhr
Enrico
Default Group and Edit


Bei den Servern bleiben die DAT-Lw ja mit Sicherheit auch ständig unter Strom, was bei dem LW zu Hause (wie es auch bei mir war) nicht der Fall ist.
Und da bei jedem Einschalten der rotierende Kopf erstmal kurz losjault, wars das dann als das ich nächste mal ein Backup machen wollte .
LTO sieht da doch sehr viel solider aus, und der Kopf ist feststehend.
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
048
07.08.2009, 09:55 Uhr
holm

Avatar von holm

Ja DLT und LTO spielen in einer anderen Klasse, das ist definitiv so.
Aber auch die QUI Tapes, (ich habe da immernoch ein 8GB Tandberg im Rechner aber lange nicht genutzt) gingen richtig gut, speziell die Tandbergs weil die vorne zu sind
wenn sie nicht gebraucht werden oder geladen sind und nicht wie Wangtek etc. ständig
mit dem staubsaugen beschäftigt sind

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
049
07.08.2009, 10:04 Uhr
Enrico
Default Group and Edit


MIcha, die LW wirst Du wohl kaum wwegeschmeissen wollen?
So schnell ward das ja nix. Doklu konnte ich dazu leider nicht finden.
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
050
09.08.2009, 13:51 Uhr
holm

Avatar von holm

Um mal an der Sache weiter zu kommen, hatte ich doch schon angesprochen, das ich einen CTC als Interrupt Controller misbrauchen will und mache mir deshalb Gedanken, so ein Teil auf einer Uniplatine mal interrupten zu lassen.
Ich habe mir dazu mal den Kopf zerbrochen was so notwendig währe:

http://www.tiffe.de/Robotron/P8K/p8kio.pdf

Der U4 ist dazu da, die Adressen die ja nur gemultiplext anliegen mittels /AS fest zu halten und latcht gleich das Ergebnis von IO Adressdecoder mit, das spart ein 2. Latch, da sonst Niemanden auf der Platine die höheren Adressbits interessieren.
Das GAL muß mit /IORQ und /M1 und /RD nachgucken wie es um die Interruptprioritätskette bestellt ist und ggf. U6 umschalten damit der CTC den Vector auf den Bus legen kann, ansonsten natürlich mit /IORQ und /RD. Dann will ich noch /IOW /IOR und ein /CS Signal für den 5380 mit generieren, der hier nicht auf dem Blatt zu finden ist. Genauso müßte ich mir noch Gedanken machen wie genau dieser Psudo DMA Modus zu implementieren währe, d.h. der 5380 löst /DRQ aus was am CTC einen Interrupt auslöst worauf hin die CPU die Daten abholt/hinschafft und dabei DAK generiert....
Deswegen gibts noch ein paar freie Drähte :-)
Nicht eingezeichnet habe ich einen 7403 o.ä. mit vorhergehendem Negator vom CTC zu /VI auf dem Bus...

Hab ich was überehen/flasch gemacht?

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
051
09.08.2009, 14:14 Uhr
Enrico
Default Group and Edit



Zitat:
holm schrieb
Hab ich was überehen/flasch gemacht?

Scherzkeks!
Das soll ich nun wissen.


Der Bus auf den Steckplätzen ist durch die P8000 selber schon auseinandergedröselt.
Also nicht mehr gemuxt. Adressen und Daten extra, mit AS und DS muss wohl aber trotzdem irgendiwe sicher stellen, dass man die nicht zum falschen Zeitpunkt was drauf legt. Vermute ich mal.

Gedanken hatte ich mir auch schon mal in einer Sitzungspause zu gemacht. Speziell zum 5380, aber nix zu geschrieben.

Die Anbindung von Z80-ICs sieht man wohl am besten aus der Rechnerschaltung selber. K.A., wie das mit der Interruptannahme gelöst wird.

Beim SCSI-Chip sieht es etwas einfacher aus. Adresse vollständig dekodieren, IOW und IOR muss da wirklich mit RD WR und IORQ dek. werden, weil die in Verbindung mit DAK gebraucht werden. DAK kann man wohl lt-Datenblatt wie 2. /CS aber für DMA Zugriff betrachten.
Der unterstützt von Hause aus richitges DMA- und CPU-DMA

DRQ und DAK sind ja für DMA rausgeführte Signale. DRQ kann man aber auch aus den Registern des ICs auslesen. Für Pseudo-DMA wohl von Vorteil das ständig pollen zu können.

/INT der CTC muss wohl auf /VI vom Rechner. der INT des SCSI geht dann sicherlich auf den CTC, wohin auch immer. DRQ wohl auch.
Ist nur die Frage, wie man das per Software dann macht.

So ein Streamer hat ja auch einen gewissen Puffer. Jedes Byte einzeln per INterrupt, per DMA kopieren düfte wohl länger dauern als ein DMA-BlockTransfer, sprich ständiges pollen von DRQ durch CPU. Aber wie weis man, wann der Puffer leer / voll ist?

Was mir auch nicht klar ist, ist EOP am SCSI-IC, wann der beim DMA-Zyklus kommen muss. Bei jedem Transfer, oder zum Ende wenn man alle gewünschten Bytes übertagen hat?
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
052
09.08.2009, 16:50 Uhr
holm

Avatar von holm

Du hast natürlich Recht was die Adressen betrifft, die stehen demultiplext zur Verfügung, habe also mal entrümpelt und den obigen Link aktualisiert.
Di eInterruptquittierung funktioniert IMHO, indem man auf den RETI Port
ED und 4D ausgibt, das aktiviert dann IORQ und M1...

Ob und wie das funktioniert, wil ich ja mit dieser CTC Schaltung herausbekommen,
ich will erst mal im Monitor den CTC auf interrupt initialisieren und klappern lassen.
Dazu muß ich noch die Programstatusarea im Monitor finden und dort die Adresse der ISR eingeben. Ich werde das mit dem verbruzelten 16Bit Board ausprobieren und bei der Gelegenheit mla diese Load und save Geschichte im Monitor testen. Dann müßte ich ja auf der P8000 assemblieren können und das da rüberladen...

Das int zu VI noch fehlte stand übrigens oben drüber :-)

Wenn ich Dich wieder treffe schlage ich Dich mit einer Scherzkeksprinzenrolle!

:-)

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
053
11.08.2009, 12:04 Uhr
holm

Avatar von holm

So, das hier funktioniert erst mal soweit, das ich den CTC programmieren und rücklesen kann, ich habe die Kanäle mit PW EF01 - EF07 initialisiert und kann das Counter Register rücklesen.:
http://www.tiffe.de/Robotron/P8K/p8kio.pdf

und das GAL:



Quellcode:
title    P8000 IO Decoder
pattern  IODEC
revision A
author   Tiffe
date     10.08.2009

CHIP IODEC GAL20V8


;pin 1     2      3     4     5    6    7    8    9     10    11     12
     RD  IORQ    M1   IIEI  IIEO  IA4  A5   A6   A7   CARDCS  I0     GND
;pin 13   14     15    16    17   18   19  20    21     22    23      24
     I1   I2     CCS  SCS   IIOW IIOR  O0  O1   DIEN   B_IEO   I3     VCC




EQUATIONS

                /CCS    =  /IA4 * /A5 * /A6 * /A7  * /IORQ * /CARDCS
                /SCS    =  IA4 * /A5 * /A6 * /A7  * /IORQ * /CARDCS
                /O0     =  /IA4 * A5 * /A6 * /A7  * /IORQ * /CARDCS
                /O1     =  IA4 * A5 * /A6 * /A7  * /IORQ * /CARDCS
                /IIOW   = /IORQ *  RD
                /IIOR   = /IORQ * /RD
                /DIEN   = IIEI* /IIEO * /IORQ * /M1 */RD
                         + /IA4 * /A5 * /A6 * /A7  * /IORQ * /CARDCS * /RD
                         + IA4 * /A5 * /A6 * /A7  * /IORQ * /CARDCS * /RD
                         + /IA4 * A5 * /A6 * /A7  * /IORQ * /CARDCS * /RD
                         + IA4 * A5 * /A6 * /A7  * /IORQ * /CARDCS * /RD
                B_IEO   =       IIEO


; end of IODEC

(http://www.tiffe.de/Robotron/P8K/p8kio.eqn)

Im Prinzip könnte man den 74LS38 noch in das GAL verlegen, aber ich weiß nicht,
was ich für den 53C80 noch gebrauchen kann..
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 11.08.2009 um 12:05 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
054
23.08.2009, 13:21 Uhr
holm

Avatar von holm

Ich habe mal an der "CTC-Karte" weiter experimentiert und versucht den CTC interrupten zu lassen. Es funktioniert nicht.

Weil das nicht funktionierte, habe ich mit dem selben Programm den Kanal 1 des CTC1 auf der Hauptplatine programmiert, das funzt einwandfrei.

Bei meinem eigenen Aufbau wird die ISR das erste mal abgearbeitet, der CTC nimmt /INT wieder weg aber IEO geht nicht wieder auf High, das heißt also, das er kein RETI bekommen hat. Ich habe also den Logikanalyzer angeklemmt und mit 3D24 Anschluß 11 (diese offene RETINT Anschluß) getriggert. Das Ding wird Low, wenn die CPU auf RETI_P (0xFFE1) etwas ausgibt, der Draht an und für sich wird aber nicht benötigt.

Die Ursache dafür das mein CTC den Interrupt nicht beendet liegt daran, das in diesem Interruptquittierungszyklus (0xED, 0x4D) augenscheinlich die Datenbustreiber der Hauptplatine nicht aktiv sind und das 0xED und 0x4D nicht auf dem Speicherbus mitzulesen sind! Der Logikanalyzer zeigt mir in dem Moment wo RETINT von 3D24 aktiv ist nur 0xFF auf dem BUS an. Das ist ein Designfehler von EAW, warscheinlich die Stelle an der die von "eingeschränkter Verwendbarkeit" reden.

Der Einzige Peipheriebaustein der Z80 Serie der so zu benutzen währe ist die SIO,
da man deren Interruptstatus durch setzten eines Registerbits zurücksetzen kann,
also nicht auf RETI angewiesen ist.
Nicht Z80 Bausteine können das zwar auch, liefern aber unfreundlicherweise nicht den erforderlichen Vektor wenn /IORQ und /M1 aktiv sind. Man müßte also ein Latch oder sowas für den Vektor extra implementieren :-(

Die Ursache des Fehlers dafür liegt augenscheinlich in der Mimik um 1D11 begründet, der dieses NON_BD Signal erzeugt. Dieses Signal müßte bei RETINT auch aktiv werden, damit sich dieses ED 4D auf dem Bus lesen läßt.
Die einfachste Möglichkeit währe jetzt wohl die Logik des 16Bit Boards entsprechend zu verändern, aber wer will das schon..

Hat Jemand Lust da mal mit drüber zu gucken?

BTW: Ich habe diese LOAD Mimik im Monitor ausprobiert und experimentiere hier mit einem einzelnen 16BIT Board herum, das über eine serielle Schnittstelle mit einem Terminal verbunden ist (Consolen Port) und über die obere Schnittstelle (SIO0/0)
mit einem beliebigen Port meiner P8000. Wenn man im Monitor QUIT eingibt, schaltet der Monitor das Terminal zur P8000 durch, man kann sich dann einloggen und beliebig den Pfad wechseln. Nachdem man das getan hat, kommt man zurück in den Monitor, in dem man am 16Bit Board einen NMI auslöst (X3 B5, aber ein Reset tut es auch).
Danach kann man mit "LOAD Dateiname" ein a.out File von Wega in den Speicher des 16 Bit Boards holen :

U8000-Softwaremonitor Version 3.1 - Press NMI
LOAD it
....
ENTRY POINT 8000
*G 8000
und starten. Der Lader lehnt programme ab, die auf Adressen unterhalb 0x8000 gebunden sind, ab 0x8000 fängt im Segment <80> bzw <00> der DRAM an.
(/bin/ld -b 0x8000 -o it it.o)


Damit kann man also auf der P8000 Programme in Assembler, C oder weis der Teufel was erstellen und auf ein einzelnes 16Bit board laden und testen.

Die 16Bit Boards gibts ja wie Sand am Meer... :-)

Hier mal noch mein aktuelles Programm, wie schon geschrieben es funktioniert wenn ich CTC auf SCTC1 setze:

Quellcode:
plzasm    1.6
LOC    OBJ CODE    STMT SOURCE STATEMENT

                      1 !******************************************************************************
                      2 CTC Interrupt Test auf Speicherbus
                      3 CTC @ 0xef01
                      4 ******************************************************************************!
                      5
                      6 ctctest module
                      7
                      8
                      9         CONSTANT
                     10 SC_SEGV                 := %01
                     11 SC_NSEGV                := %02
                     12 RETI_P                  := %FFE1        !RETI-Port fuer Schaltkreise des U880-Systems!
                     13 MYCTC                   := %EF01        !CTC auf Buskarte!
                     14 SCTC1                   := %FFB1        !CTC 1 auf Hauptplatine!
                     15 CTC                     := MYCTC
                     16 PSAREA                  := %4400                !Program Status Area!
                     17 VI_TAB_REST             := %447c                !first free Entry in VI Tab!
                     18 MZ                      := %9000        !Merkzelle!
                     19
                     20 $SECTION RAM
                     21
                     22 GLOBAL
0000                 23     CTC_T procedure
                     24         entry
0000 7F02            25         sc      #SC_NSEGV
0002 4D05  447E      26         ld      VI_TAB_REST+2, #CTCT_ISR
0006 0038'
0008 4D05  4482      27         ld      VI_TAB_REST+6, #CTCT_ISR
000C 0038'
000E 4D05  4486      28         ld      VI_TAB_REST+10, #CTCT_ISR
0012 0038'
0014 4D05  448A      29         ld      VI_TAB_REST+14, #CTCT_ISR
0018 0038'
001A 4D05  9000      30         ld      MZ, #%FFFF              !Merkzelle loeschen!
001E FFFF
0020 C820            31         ldb     rl0, #%20
0022 3A86  EF01      32         outb    CTC, rl0
0026 C887            33         ldb     rl0, #%87
0028 3A86  EF03      34         outb    CTC+2, rl0
002C C83F            35         ldb     rl0, #%3f
002E 3A86  EF03      36         outb    CTC+2, rl0
0032 7F01            37         sc      #SC_SEGV
0034 7C05            38         ei      vi
0036 E8FF            39 loop:   jr      loop
0038                 40     end CTC_T
                     41
                     42
                     43
                     44
                     45 GLOBAL
0038                 46     CTCT_ISR procedure
                     47         entry
0038 7C01            48         di      vi
003A 93F0            49         push    @r15, r0
003C 2100  ED4D      50         ld      r0, #%ED4D      !U880-RETI ausgeben!
0040 3A06  FFE1      51         outb    RETI_P, rh0
0044 3A86  FFE1      52         outb    RETI_P, rl0
0048 97F0            53         pop     r0, @r15
004A 4D05  9000      54         ld      MZ, #%55AA      !Kennzeichen f. Interrupt!
004E 55AA
0050 7C05            55         ei      vi
0052 7F01            56         sc      #SC_SEGV
0054 8D07            57         nop
0056 7B00            58         iret
0058                 59     end CTCT_ISR
                     60 end ctctest

   0 errors
Assembly complete


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 23.08.2009 um 13:25 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
055
23.08.2009, 13:29 Uhr
Enrico
Default Group and Edit


Die Interupt-Kette auf den RAM-Karten zu brücken, haben die auch vergessen.

Einfach ED4D auf einen Poprt ausgeben wird ja nicht gehen?
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
056
23.08.2009, 14:10 Uhr
holm

Avatar von holm

Im Prinzip geben die das "einfach" auf einen Port aus, aber die Interface Logik simuliert bei Ausgabe auf diesen Port einen Z80 Befehlsholezyklus. Die Z80 Interfaceschaltkreise decodieren den Befehl RETI, d.h. /M1 und /MREQ muß aktiv sein, IEI High und IEO Low damit die sich angesprochen fühlen. Dazu haben die ja die ganze notwendige Logik schon implementiert mit diesem RETI_P (RERI Port, bei dem Olli sich wunderte das das zwar aus dem Decoder kommt, aber nirgendwo angeschlossen ist. Dasliegt daran, das die Daten die auf diesen Port gehen eh "bekannt sind" nämlich nacheinander ED und 4D, also niemand wissen und latchen will was da kommt).
Die haqben nur die Decodierung für 4D26 nicht sauber gemacht, wenn das NON_BD Signal das auf 2D11/13 geht L wird, wird das Enable des Treibers weggenommen, demzufolge liegt HIgh auf den Daten am Speicherbus. DIR ist in dem Moment High,
d.h. beim 8286 würde die Richtung schon stimmen, wenn er nur enabled währe.
Ich habe schon drüber nachgedacht noch einen 8286 drüber zu löten (bis auf Enable) und das Enable mit dem 3D24/11 zu verbinden...

Wenn man das jetzt extern decodieren wollte, müßte man die ganze Mimik um M1 noch mal erfinden..

Edit: Doch es müßte gehen, wenn ich M1 und RD durch das GAL leiere kann ich das evtl. simulieren, muß mal drüber nachdenken..

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 23.08.2009 um 14:19 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
057
23.08.2009, 14:23 Uhr
Olli

Avatar von Olli

Hm - die Dekodierung der Zilog S8000 an der Stelle ist ein klein wenig anders - aber NON_BD geht auch auf den '20er (Auch Seite 13 - U31):
http://pofo.de/S8000/misc/diagrams/S8000_CPU_board/S8000_CPU.pdf
ENA BYTE SWAP- geht auch ran, Die anderen beiden Pins werden aber anders beschaltet.

Ist es denn viel Logik die auf dem CTC-Board nachzubilden waere? Ne CPLD?
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000

Dieser Beitrag wurde am 23.08.2009 um 14:24 Uhr von Olli editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
058
23.08.2009, 14:47 Uhr
holm

Avatar von holm

Naja, das Prooblem ist, das man aus einer Portausgabe an die Karte intern einen Befehlsholezyklus basteln muß.

D.h. aus /IORQ + RD muß intern ein IORQ , /RD und /M1 werden. Man muß also den ganzen Quatsch durch das GAL fädeln und die Logik auf dem Kopf stellen.
Ich muß reichlich umverdrahten um das testen zu können.

Betreffs S8000, die Frage ist halt, ob sie für die RETI geschichte bei NON_BD eine Ausnahme gemacht haben, denn das Ding systemweit zu benutzen ist sinnvoll.

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
059
23.08.2009, 14:53 Uhr
Olli

Avatar von Olli

Die NON BD Generierung schaut im S8000 Plan erstmal genauso aus wie bei der P8000....
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
060
23.08.2009, 14:58 Uhr
Enrico
Default Group and Edit


Dann haben die das bei den SIOs auf dem Board so nicht genutzt?
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
061
23.08.2009, 15:32 Uhr
holm

Avatar von holm

Genau, die SIOs werden per Register Schreiboperation Bedient, die PIOs und die CTCs benutzen aber die RETI Mimik.

@Olli: dann hat EAW den Designfehler mit abgemalt...

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
062
23.08.2009, 18:45 Uhr
holm

Avatar von holm

Ich habe jetzt was gebaut, was augenscheinlich funktioniert. Dabei habe ich alle Ausgänge das GALs verbraten müssen die noch frei waren. Für irgendeine Pseudo-
DMA Logik wird dann wohl ein weiteres herhalten müssen, aber zumindest funktioniert
die Interrupterei nun ordentlich.

Ich hänge später mal den Plan und das GAL hier rein..

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
063
23.08.2009, 21:11 Uhr
holm

Avatar von holm

So den Schaltplan habe ich aktualisiert:
http://www.tiffe.de/Robotron/P8K/p8kio.pdf

und hier noch den aktuellen GAL Inhalt:

Quellcode:
title    P8000 IO Decoder
pattern  IODEC
revision C
author   Tiffe
date     23.08.2009

CHIP IODEC GAL20V8


;pin  1    2     3     4     5     6     7     8     9     10    11    12
     RD  IORQ   M1    IEI   IEO   A4    A5    A6    A7   CARDCS  I0   GND
;
;pin 13   14    15    16    17    18    19    20    21     22    23    24
     I1   I2   CCS   SCS   IIOW  IIOR  P_M1  P_RD P_IORQ  DIEN   I3   VCC



EQUATIONS

                /CCS    =  /A4 * /A5 * /A6 * /A7  * /IORQ * /CARDCS
                /SCS    =   A4 * /A5 * /A6 * /A7  * /IORQ * /CARDCS

                /IIOW   = /IORQ *  RD
                /IIOR   = /IORQ * /RD

                /DIEN   =  IEI * /IEO * /IORQ * /M1
                                + /A4 * /A5 * /A6 * /A7  * /IORQ * /CARDCS * /RD
                                +  A4 * /A5 * /A6 * /A7  * /IORQ * /CARDCS * /RD

                /P_IORQ = /IORQ * /M1
                                + /A4 * /A5 * /A6 * /A7 * /IORQ * /CARDCS
                                +  A4 * /A5 * /A6 * /A7 * /IORQ * /CARDCS

                /P_M1   = /M1 +  A4 * A5 * /A6 * /A7 * RD * /IORQ * /CARDCS

                /P_RD   = /RD + A4 * A5 * /A6 * /A7 * /CARDCS * /IORQ * RD


; end of IODEC


Schaut mal drüber Jungs ob ich was übersehen habe, aber am LA sieht es gut aus
und funktionieren tut es auch.

Hier noch das Testprogram das im 1000Hz Rhytmus ints auslöst:


Quellcode:
!******************************************************************************
CTC Interrupt Test auf Speicherbus
CTC @ 0xef01
******************************************************************************!

ctctest module


        CONSTANT
SC_SEGV                 := %01
SC_NSEGV                := %02
RETI_P                  := %EF31        !RETI Port Erweiterungskarte!
!RETI_P                 := %FFE1!       !RETI Port System Platine!
MYCTC                   := %EF01       !CTC auf Erweiterungskarte!
SCTC1                   := %FFB1        !CTC 1 auf Hauptplatine!
CTC                     := MYCTC
PSAREA                  := %4400                !Program Status Area!
VI_TAB_REST             := %447c            !Erster freier Eintrag in der VI Tab!
MZ                               := %9000            !Merkzelle!

$SECTION RAM

GLOBAL
    CTC_T procedure
        entry
        sc      #SC_NSEGV
        ld      VI_TAB_REST+2, #CTCT_ISR
        ld      VI_TAB_REST+6, #CTCT_ISR
        ld      VI_TAB_REST+10, #CTCT_ISR
        ld      VI_TAB_REST+14, #CTCT_ISR
        ld      MZ, #%FFFF           !Merkzelle loeschen!
        ldb     rl0, #%20
        outb    CTC, rl0
        ldb     rl0, #%87
        outb    CTC+2, rl0
        ldb     rl0, #250
        outb    CTC+2, rl0
        sc      #SC_SEGV
        ei      vi
loop:   jr      loop
    end CTC_T




GLOBAL
    CTCT_ISR procedure
        entry
        di      vi
        push    @r15, r0
        ld      r0, #%ED4D      !U880-RETI ausgeben!
        outb    RETI_P, rh0
        outb    RETI_P, rl0
        pop     r0, @r15
        ld      MZ, #%55AA      !Kennzeichen f. Interrupt!
        ei      vi
        sc      #SC_SEGV
        nop
        iret
    end CTCT_ISR
end ctctest


--
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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
064
24.08.2009, 14:06 Uhr
Olli

Avatar von Olli

So ganz verstehe ich nicht was du da mit den Adressleitungen in dem GAL machst. /CCS wird low wenn deine A4-A7 low sind, iorq low ist und dein externe Adressdekodierung low ist...
Aber was machst du mit /SCS? Das wird im Plan nirgends verwendet?

/DIEN und /P_IORQ - kann man da den 2. und 3, Oder-Teil nicht abkuerzen in dem man einfach /A4 raus nimmt?

Quellcode:
.
                /DIEN   =  IEI * /IEO * /IORQ * /M1
                                + /A5 * /A6 * /A7  * /IORQ * /CARDCS * /RD

                /P_IORQ = /IORQ * /M1
                                + /A5 * /A6 * /A7 * /IORQ * /CARDCS

Wiso ist bei /P_M1 und /P_RD "A5" auf einmal high?

Fragen/Hinweise nur damit ich den GAL Inhalt verstehe
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
065
24.08.2009, 14:20 Uhr
Tom Nachdenk



Mich deucht
CCS = CTC Chip Select
SCS = SCSI Chips select

Vermutlich dachte Holm nachdem die prizipielle Arbeitsweise geklärt ist wird der Rest dem Leser als Fingerübung überlassen
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
066
24.08.2009, 15:24 Uhr
holm

Avatar von holm

Genau so.

Und wenn A5 High ist, ist ein 2. RETI "Port" aktiv (Adresse EF31-EF3F, deswegen A5 High) , der nur der CTC einen Befehlsholezyklus mit ED und 4D als Daten vorspiegelt. D.h. Aus einem IO Write wird für den CTC ein MEM Read mit aktivem M1 damit die CTC Logik RETI zum Rücksetzten der INT-Prioritätskette decodieren kann.

Ich sagte doch, das ist nicht ganz trivial...

Den SCSI Chip habe ich vorhin erst aufgelötet, d.h. seine Fassung.
Nun werde ich weiter experimentieren und der Schaltplan wird wachsen.

Sowas in der Art hatte ich doch oben beschrieben. Ich wollte erst mal wissen
wie ich Ints auslösen kann, weil ich das Interface nicht im Polling Betrieb abfragen wollte. Deshalb auch der CTC, das ist nur ein Interruptcontroller mit 4 Eingängen :-))


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 24.08.2009 um 15:31 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
067
24.08.2009, 17:09 Uhr
Olli

Avatar von Olli

OK - ich wollte den GAL Inhalt auch nur mal verstehen.... So ganz habe ich das grundsaetzlich zwar noch nich verstanden mit diesem ganzen Interrupt und Return vom Interrupt.... warum den SCSI Chip nicht direkt an den BUS? Irgendwann kommt bestimmt die Erleuchtung
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
068
24.08.2009, 18:18 Uhr
holm

Avatar von holm

..weil die Ausgänge eines solchen Chips keine Buslasten treiben können.
Das geht zwar meistens, aber das tut man nicht (Tm).

Wenn Du Dir mal genauer durchliest, was bei der Int Annahme bei Z80 Systemen passiert verstehst Du das was ich da mache vielleicht auch.
Im Interruptmode 2 der Z80 liefert der Peripherieschaltkreis den Interruptvektor (den ich hier auch brauche). Nachdem der IC Int ausgelöst hat, läudt also ein Zyklus mit M1 und IORQ aktiv, dann legt der IC seinen Vektor auf den Bus, wenn er der höchstpriorisiserte Schaltkreis ist (IEI=H, IEO=L). Ven die CPU den Vektor gelesen hat, geht INT wieder auf H, aber IEO bleibt solange L, bis der IC am Systembus einen Befehlsholezyklus mit dem ersten Byte ED und dem 2. 4D mitgelesen hat. Deshalb muß ich hier mit einem Ausgabeport (genauso wie bei S8000 und P8000) diesen Maschinenzyklus simulieren, damit der Schaltkreis die Prioritätskette wieder frei schaltet (IEO=H).

Gruß,

Holm
Edit:

Ich habe jetzt erst geschnallt das Du die Int Leitung des SCSI Chips meinst.

Der würde einen Int auslösen, aber keinen Vektor liefern, damit würde die CPU
Irgendwas vom Bus lesen, das Irgendwas mit 2 multiplizieren und das als Offset in der Programm Status Area verwenden, von da eine Ansprungadresse lesen und ins Nirvana springen....

Es sei denn, man benutzt NVI, das vom Monitor oder vom P8000 überhaupt nicht supported ist, oder NMI, was auch nicht das Gelbe von Ei währe ...

Deshalb der CTC. Der hat vier Zähleingänge und wenn man den Zähler auf 1 programmiert, löst der nach der ersten fallenden Flanke einen Interrupt aus
und liefert der CPU den Kanalspezifischen Vektor. Ich kann also aus 4 Gründen Ints auslösen und entsprechende Handler anspringen, oder aber irgendwas zählen
oder zeitgeben...

NMI und NVI haben festgelegte Offsets in der PSA.
Die VI's sind wie der Name schon sagt Vectored Interrupts...

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 24.08.2009 um 18:41 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
069
24.08.2009, 18:41 Uhr
Enrico
Default Group and Edit


Mir fällt auch erstmal nichts weiter auf.

Nur den Plan ist ein wenig verwirrend.
Der U5 kann später dann sicherlich entfallen?
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
070
24.08.2009, 18:43 Uhr
holm

Avatar von holm

U5 ist nichts weiter als ein Steuersignaltreiber. Im Prinzip kann man den durch Drahtbrücken ersetzen, aber der regeneriert halt mit seinen Schmittriggern die Signalflanken.. Was hast Du denn für ein verwirrtes Problem?
Der Plan ist nicht fertig, es gibt keinen Steckverbinder usw. Ich habe mich erst mal auf das Wesentliche konzentriert und keine Zeit damit verbraten erst mal ein Modell
für den Z80 Bus Stecker und den SCSI Chip zu basteln..steht mir aber jetzt bevor,
zumindest letzteres.

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 24.08.2009 um 18:45 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
071
24.08.2009, 18:50 Uhr
Enrico
Default Group and Edit


Dachte ich mir schon, dass das alles noch kommt.
Z.B. dass Du IEO IEI durch den Bustreiber schickst.
Ist aber kein Problem.
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
072
24.08.2009, 19:22 Uhr
holm

Avatar von holm

Das ist eh der letzte Schütze Arsch im Glied, zumindest vorläufig.
Die Slots haben ja die niedrigste Priorität im P8000.
Normalerweise gehört da diese Beschleunigungs-Umweg-Schaltung dran...

Das GAL habe ich indessen auch auf ein 16V8 geschrumpft, das ist jetzt vollständig belegt.

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 24.08.2009 um 19:24 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
073
24.08.2009, 20:18 Uhr
Olli

Avatar von Olli

Naja - macht Ihr ma - irgendwann muss ich mir mal diesen ganzen Interruptkram durchlesen.
Den WDC-Plan habe ich gestern soweit bis Seite 5 abgekritzelt... Seite 6 schreckt mich heute erstmal zu sehr ab... ich fummel gerade die W(EGA-)DOS Sourcen so zurueck, das man die Originaldistributionsfloppy erstellen kann - wieder schoen mit disassemblieren dier Originalobjekte und der die ich hier mit meinen Sourcen erzeuge... da fummel ich erstmal lieber mit sowas rum
Danach nehme ich mir mal wieder n paar userland-tools vor.... irgendwann haben wir WEGA schon komplett als Source vorliegen hehehe....
Vielleicht kritzel ich dann morgen am WDC weiter... Seite 8 des Plans stimmt jedenfalls soweit ich das erkennen kann nicht so ganz mit der Wirklichkeit ueberein. die duenn eingezeichneten Sachen oben links sind wohl das Zeug von der Huckepackplatine.... die sind aber etwas anders verschaltet wenn ich das richtig sehe.... So genug Thread ge-hijackt
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
074
24.08.2009, 20:34 Uhr
holm

Avatar von holm

Du meinst wohl das Du hier die Leser antriffst die Du ansprechen willst? :-)


Ich habe indessen festgestellt das ich das Initiator Command Register der Z53C80 lesen und schreiben kann und das die korrespondierenden Ausgänge wackeln.
Mache mir Gedanken, ob ich heute noch die Terminatorwiderstände dranlöte, wohl aber eher nicht. Ich habe noch keine 50 polige Pfostenleiste, muß erst mal irgendwo eine räubern...

Leider Olli fürchte ich für Dich, das es bis zu den Interrupts nicht mehr sehr lange dauern wird. Ich vermute Du hast das Zeuch das ich eigentlich wegen Dir hier schon 3 mal ausklamüsert habe nur überflogen...:-(

Hausaufgabe für Dich: Z80 Interrupt Mode 2 durchlesen, das ist nicht so kompliziert
man muß sich nur 5 Minuten konzentrieren. Dann hast Du gelöffelt was abgeht.

Wenn Du dann noch Lust hast, kannst Du die VI Geschichte zum Z8000 durchgraben,
und das Stück zum Anschluß der Z80 Schaltkreise in dem Brennenstuhl Buch zum Z8000, dan weißt Du eigentlich Alles :-)


Wir müssen uns dann mal irgendwann Gedanken machen, wie wir das Interface
überhaupt strukturiert ansprechen. Einerseits ist sowas wie ein CAM Layer sehr nützlich, andererseits bläst das den erforderlichen Code deutlich auf.
Wir bräcuhten ja einen generischen SCSI Treiber und darauf aufsetztend dann evtl. Band/Platte/CDRom....
Mir ist noch nicht klar, wie man Sowas implementiert. Ich werde erst mal zusehen, ob ich den physischen Transfer von und zu einem Streamer in einem standalone Programm hinkriege und dazu aus dieser MAC Quelle so viel wie möglich abschreiben. Kernel kommt sicher viel später.

Dazu wollte ich den im 53C80 PDF erwähnten Psudo DMA Transfer benutzen, also bei DMA Request des SCSI Chips einen Int auslösen, die CPU zum Transfer benutzen und entsprechend wieder DACK setzen. Ich weiß nur nicht, wie hoch bei einzelnen Bytes die Interruptlast wird.

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 24.08.2009 um 20:36 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
075
24.08.2009, 20:40 Uhr
Olli

Avatar von Olli

@holm - ich habe es mir schon mehrmals durchgelesen - keine Bange - ueberfliegen tue ich in der Regel nur mit nem Flugzeug (ha ha ha ). Aber fuer mich is das aktuell noch zu hoch. Ich muesste wohl erstmal damit anfangen was so ein Interrupt ueberhaupt bewirkt um zu begreifen wozu man das alles braucht....
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
076
24.08.2009, 22:01 Uhr
Tom Nachdenk



Interrupts funktionieren so ähnlich wie Signale im Unix-Userland, der Prozess(or) findet sich plötzlich 'ganz woanders' wieder. Nur das die Ursache eben in der Regel ein Hardwareereignis ist, auf das man reagieren muss/möchte.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
077
24.08.2009, 22:18 Uhr
holm

Avatar von holm

Was bewirkt ien Interrupt?

Ein Interrupt bewirkt erst einmal die Unterbrechung der Abarbeitung des Hauptprogramms und nach Erledigung der notwendigen Aufgabe die Fortsetzung des Selben. Damit kann ein Computer auf asynchron eintreffende Ereignisse reagieren, z.B. wenn Olli sich nach Jahrmilliarden (für die CPU) dazu bequemt hat den Bildschirminhalt zu verarbeiten und als Reaktion seinerseits eineTaste gehebelt hat. Das gute FreeBSD schickt nun das Zeichen über die Strippe und die läuft auf dem P8000 in die Sio ein.
Die Sio merkt das und zieht sicherheitsahlber and der Interrupt Leine. Die CPU höhrt auf den C-Compiler zu quälen, schafft alle Registerinahlte auf den Stack und brüllt in den Keller: "wer hat hier an der Strippe gezogen?" Kleinlaut gib die Sio von sich "12.." und läßt erschrocken die Leine wieder los...
Die CPU denkt ok, schaunmermal. 12*2 isr 24, das muß ich also im Programm Status Area zur Adresse 443c dazu addieren und mal gucken was da steht. Kaum gedacht, hat sie das schon getan, lädt die Adresse und das Segment in die betreffenden Register und setzt die Programmabarbeitung dort fort. Im Programm steht, ds das Zeichen von der Sio abzuholen währe und in einen Eingabepuffer abzulegen ist, danach ist der Bufferpointer zu inkrementieren. Wenn das erledigt ist, sagt die CPU der SIO Bescheid das sich die Angelegenheit jetzt erledigt hat, und sie die Prioritätskette wieder freigeben kann. (RETI, Return from Interrupt, hier muß die Z8000 den Z80 mimikrieren). Das di SIO ausreichend Spundus vor der CPU hat (die hat 8 Beine mehr!!!) tut sie das dann auch, während die CPU die Register aus dem Stack rücklädt und sich denkt: "wie war das jetzt nochmal mit dem Compiler?"...

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
078
24.08.2009, 22:46 Uhr
Olli

Avatar von Olli

So,

ich habe jetzt mal folgende Literatur zu Rate gezogen und diese bzgl. Interrupt durchforstet.
- Wissensspeicher Mikrorechnerprogrammierung
- Programmierung des 16-Bit-Mikroprozessorsystems U8000
- Programmierung von Mikrorechnern

Nun schreibe ich mal mit eigenen Worten auf was ich meine verstanden zu haben. Waere schoen wenn Ihr euren Bautzner mittelscharf dazugeben koenntet.

1. Interrupts nutzt man um die CPU dazu zu bringen die aktuelle Programmabarbeitung zu unterbrechen und ein bestimmtes Programm auszufuehren. Nach der Abarbeitung des bestimmten Programmes wird zum urspruenglichen Programm zurueckgekehrt.

2. Welches Programm bei Eintreffen eines Interrupt ausgeloest wird, setzt sich zusammen aus zwei mal 8 Adressbits. Die 8 High-Adressbits stehen im I-Register des Prozessors. die 8 Low-Adressbits kommen vom Peripherieschaltkreis - in dem Fall dem CTC. Ich gehe mal davon aus, das dazu die Datenleitungen des CTC genutzt werden. Das trifft fuer den Mode-2 zu.

3. Das die Interruptserviceroutine abgearbeitet wurde wird dem Peripheriebaustein mittels RETI mitgeteilt.

Mit dem CTC kannst du nun fuer jeden der 4 Zaehler einen Interrupt an der CPU ausloesen um dann dort Programme abarbeiten zu lassen. Ich gehe mal davon aus, das der CTC bis zum RETI eintreffen mit seiner Zaehlerei abwartet? Daher ist das RETI wichtig.

Bzgl deinem Programm laedst du in die VI-Tabelle 4 mal die auszufuehrende Interruptserviceroutine (den High-Adressteil). Danach wird der CTC programmiert
20 ->
D0=0 (Vektorsteuerung)
D5=1 (Vektor 5)
87 ->
D0=1 (Steuerwort)
D1=1 (CTC anhalten)
D2=1 (Das naechste Datenwort ist die Zeitkonstante zum zaehlen)
D7=1 (Interrupt ein)

Nun wartet der CTC ja auf die Zeitkonstante - die schickst du dann als 250.
Ich wuerde nun erwarten, das der CTC im Zaehlermodus laeuft - das wuerde Sinn machen. Die externen Zaehleingaenge sind ja nicht angeschlossen, der Vorteiler wird nicht gesetzt - und du brauchst scheinbar ja eh nur INT. Das wuerde alles zum Zaehlermodus passen. Aber dazu haettest du D6=1 an den CTC schicken muessen, oder? D6=0 ist doch der Zeitgebermodus?

Warum schreibst du die 0x87 und die 250 an CTC+2?

Nehmen wir mal an, der CTC laeuft im Zaehlermodus. Dann loest dieser nun alle 250 Systemtaktzyklen einen Interrupt bei der CPU aus. Dann laeuft die CPU los und versucht herauszufinder wer ihr nun den Interrupt gemeldet hat. Es meldet sich der CTC. Ueber die Datenleitung gibt der CTC dann an welche Interruptserviceroutine genau anzuspringen ist. In deinem Fall ist es ja fuer alle 4 Zaehler die gleiche. Laufen die 4 Zaehler eigentlich alle gleich schnell? Also bekommst du dann immer 4 Interrupts auf einen Schlag?

Nun kannst du also alle - sagen wir mal 250ms (Weiss jetzt nicht was da fuer n Takt anliegt) ein Interrupt ausloesen. Was soll dann spaeter mal passieren? Loest der CTC den Interrupt aus oder der SCSI-Controller mit Hilfe des CTC? Soll damit der U8001 dann signalisiert werden "hier, ich habe Daten auf dem SCSI Bus - los abarbeiten!"?

So - nun habe ich nochmal 68 gelesen. Du programmierst also spaeter den Zaehler auf 1. Und laesst dann den NCR an dem Zaehlereingang seinen Interrupt ausloesen - die anderen loesen nix aus weil da nix anliegt - der CTC laeuft dann also im Zeitgebermodus. Die CTC kann dann den low-Teil der Ansprungadresse fuer die Serviceroutine liefern - was der SCSI Chip nicht kann.
Coole Idee das...

So - ich denke so halbwegs hab ichs.... kannst ja mal ueber meine Fragen drueber gehen - so alles ist mir ja noch nicht klar. Ich wander jetzt erstmal in die Koje. Die RETI-Sondergeschichte am U8001 lese ich mir morgen dann mal durch....

edit: @holm - wie ich sehe hast du auch schon was geschrieben - und ich lese und schreibe hier ne halbe Stunde an meinem Text
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000

Dieser Beitrag wurde am 24.08.2009 um 22:48 Uhr von Olli editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
079
24.08.2009, 23:15 Uhr
holm

Avatar von holm

:-)

Ja, im Großen und Ganzen hast Du es jetzt.

Es gibt Unterschiede zwischen der Abarbeitung beim Z80 und beim Z8000,
das ist aber erst mal irrelevant.

Ein CTC hat 4 voneinander unabhängige Kanäle, von denen jeder ein Zähleingang und Alle bis auf den Kanal 3 auch einen Ausgang haben, für den letzten haben die Pins nicht gereicht. Diese Kanäle kann man auch unabhängig voneinander als Zähler oder Zeitgeber programmieren.

Das Testprogramm von mir initialisiert in der Programmstatusarea 4 Vektoren, aber nur ein CTC Kanal wird programmiert. Ich habe einfach nur die 4 Kanäle durchgetestet, aber immer die selbe Service Routine benutzt, deswegen die 4 identischen Einträge, den Programmierten Kanal habe ich einfach im Assemblerprogramm geändert.
Dazu habe ich den jeweiligen CTC Kanal im Zeitgeber Mode betrieben, 4Mhz Takt, Vorteiler 16, Zeitkonstante 250, rechne selber aus welche Interruptfrequenz das ergibt :-)
Im Zeitgebermodus hat der CTC immer einen Vorteiler, entweder 16 oder 256. Als Zeitreferenz wird der Systemtakt benutzt, hier 4Mhz.

Das ist aber nicht die von mir vorgesehene Betriebsart für den SCSI Chip, sondern wie Du eigentlich richtig erkannt aber falsch bezeichnet hast brauche ich den Zähler Modus. Der CTC wird mit 1 vorgeladen und zählt RÜCKWÄRTS. Bei Nulldurchgang wird ein Interrupt ausgelöst. Das hatte ich vor.

Natürlich hat man dann noch 3 weitere Kanäle für andere Schweinereien frei, Timeouts oder ähnliche Geschichten.

Allen CTC Kanälen gemeinsam ist der Eintrag des Interruptvektors in den Kanal 0,
der CTC blendet die Kanalnummer selbst in den Vektor ein (Bits D1 und D2), so dass
der Kanal 1 einen Vektor von 0x22 liefert wenn ich in den Kanal 0 eine 0x20 schreibe. Das paßte relativ gut (erstaunlich was?) zum Z80, der ja 2 Byte Adressen hat und demzufolge auch 2 Byte weise in der Vektortabelle ablegt. Der Z8000 hat da aber 4 Byte (Segmentnummer und etwas Käse, wird verworfen) und multipliziert deshalb den von der Peripherie gelieferten Vektor selbständig mit 2 (ergo 44).

Dazu addiert er einen festen Offset in der PSA (im P8000 Monitor ist dieser feste Offset 443c, die PSA beginnt ab 4400) so daß im konkreten Falle mit der Vektor
20 die Adresse 4480 richtig wäre, dort steht aber die 8000 mit der Segmentnummer 80 und Müll, gefolgt von dem was wir eigentlich wollen, den ISR Adreß Bytes auf 4482 und 4483, d.h. die ISR Adresse des Kanals 1.
(CTC+2=EF03, da CTC Kanal 0=EF01, CTC Kanal 1= EF03, Kanal 2=EF05 und Kanal 3=EF07). Merke: Adressbit A0 ist unbenutzt..., SCSI EF11-EF1F, EF21-EF2F unbenutzt, EF31-EF3F RETI_PORT.

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
080
24.08.2009, 23:34 Uhr
Enrico
Default Group and Edit



Zitat:
holm schrieb

....
sehr nützlich, andererseits bläst das den erforderlichen Code deutlich auf.
Wir bräcuhten ja einen generischen SCSI Treiber und darauf aufsetztend dann evtl. Band/Platte/CDRom....
...

Auf unterste Ebene wären das z.B. einzelne Unterprogramme entspr. der
einzelnen SCSI-Busphasen, welche sich gegenseitig aufrüfen können.
Fehlerbehandlung ist ja dabei auch wichtig.
Der Rechner - Initiator stösst das ganze ja immer nur an, das Gerät /Target übernimmt den Bus, nach dem man sich richten muss.
Schön bei SCSI ist, dass man sich so viel Zeit lassen kann, wie man will.

Zitat:
Dazu wollte ich den im 53C80 PDF erwähnten Psudo DMA Transfer benutzen, also bei DMA Request des SCSI Chips einen Int auslösen, die CPU zum Transfer benutzen und entsprechend wieder DACK setzen. Ich weiß nur nicht, wie hoch bei einzelnen Bytes die Interruptlast wird.

Gruß,

Holm

Jedes Byte einzeln per Interrupt / Pseudo-DMA zu übertragen dürfte doch recht viel Zeit brauchen.
So ein Streamer hat doch auch noch einen relativ grossen Puffer. Den müssten müsste man voll machen, und wenn der Streamer nach Nachschub schreit, per Interrupt wider auffüllen.

Interessante Bücher über SCSI:

SCSI-Bus und IDE-Schnittstelle, Friedhelm Schmidt,
Addison-Wesley Verlag, ISBN 3-89319-849-0

SCSI Probleme lösen, Ulrich Weber,
Elektor Verlag, ISBN gibts nicht
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
081
25.08.2009, 06:41 Uhr
Olli

Avatar von Olli

Ah - 20 ist also die "Identifikation" des CTC. und +2 dann fuer jeden CTC Kanal.

Bzgl. CTC Modi.

in meinem Buch steht:
Zeitgebermode - Rückwaertszaehlen des CTC-Kanals durch den von einem Vorteiler untersetzten Systemtakt. Vorteiler kann auf 16 oder 256 eingestellt werden. Die Zeit zw. 2 Nulldurchgaengen ist ZeitkonstantexVorteilerxSystemtakt in ns. Bei Nulldurchgaeng wird ein INT gemeldet.

Zaehlermode - Hier wird der Rueckwaertszaehler des CTC-Kanals durech ein extern anliegendes Taktsignal an CLK abgearbeitet. Der Vorteiler hat keine Wirkung und bei jedem Taktzyklus wird die Zeitkonstante dekrementiert. Nulldurchlaeufe werden per INT gemeldet.

In dem Buch steht nun auf Seite 42 eine Tabelle aus der ersichtlich wird, das MODE auf D6 mit 1 den Zaehlermode schaltet und mit 0 den Zeitgebermode.

Ich habe mich wohl durch die CLK Angabe beim Zaehlermodus irritieren lassen. Damit ist wohl der Clock-Eingang eines jeden Kanals gemeint, und nicht der Systemtakteingang CLK des CTCs.

http://files.pofo.de/Seite_41.jpg
http://files.pofo.de/Seite_42.jpg
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000

Dieser Beitrag wurde am 25.08.2009 um 06:47 Uhr von Olli editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
082
29.08.2009, 22:28 Uhr
Olli

Avatar von Olli

Hier uebrigens den Entwicklungshandbuch fuer ein anderes - Z8001 basiertes - UNIX System.. ab Seite ca. 70 sind auch die Schaltplaene bei falls es interessiert. Das bietet mehr als die S8000/P8000 Sogar ne RTC on-board und 2 PIC usw... aber auch n Z80-CTC und -PIO...

http://bitsavers.org/pdf/plexus/5018-1A_P25_EngineeringManual_Jun82.pdf

Habe uebrigens die Sourcen von Plexus...
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
083
30.08.2009, 08:16 Uhr
holm

Avatar von holm

Ich habe mal drin herumgeblättert. Ganz niedlich.

Die sammeln die Interrupts der DMA Controller auf diesem Z8002 Subsystem übrignes in CTCs :-)

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
084
27.09.2009, 13:01 Uhr
Enrico
Default Group and Edit


Im Kieser /Meder zum U880 habe zur Interruptemulation gerade was gefunden.




--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
085
27.09.2009, 20:24 Uhr
holm

Avatar von holm

Naja, so ähnlich habe ich das doch auch mit dem CTC gemacht, halt nur in einem GAL.
Die Idee, einen CTC als Interrupt Controller zu benutzen ist doch auch nicht auf meinem Mist gewachsen, man kann auch eine PIO oder eine SIO einen Int auslösen lassen um einen Vektor generiert zu bekommen. Irgendwo habe ich das mal so gelesen, ist aber sicher mehr als 10 Jahre her.

Ich bin mir gar nicht sicher ob die Auflagen vom Kieser/Meder die ich hier habe das von Dir gefundene enthalten, da war der Z8000 noch nicht aktuell...

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
086
18.10.2009, 09:29 Uhr
Olli

Avatar von Olli

Gibts eigentlich was neues von der SCSI Front?
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
087
19.10.2009, 12:54 Uhr
holm

Avatar von holm

Ich habe den SCSI Chip mit auf die Platine geseetzt und angeschlossen.
Ich kann seine Ports lesen und Schreiben, ein 50 poliger Pfostensteecker ist auch dran
und nun habe ich keine Zeit weiter zu machen. Ich habe 4 Projekte und 2 Steuererklärungen an der Backe...

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;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
088
19.10.2009, 13:08 Uhr
Olli

Avatar von Olli

Oh je - dann mein herzliches Beileid
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
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