Autor Thema: MultiIO am ACSI  (Gelesen 2736 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline ToPeG

  • Benutzer
  • Beiträge: 406
MultiIO am ACSI
« am: Mo 17.10.2011, 04:00:10 »
Ich wollte dieses Projekt jetzt schon vor einer Weile veröffentlichen. Leider gab es ein paar unvorhergesehene Verzögerungen.

Es geht um einen IO-Adapter für den ACSI-Port der auch mit anderen Geräten klar kommt. Das bedeutet, dass er zumindest zum Teil die DMA-Komunikation beherrschen muss. So wie ich ihn aufgebaut hatte, nutzt er nur die Commad-Phasen Kommunikation.

Ich habe die Karte mit 48 Eingabe- und 48 Ausgabeleitungen (TTL) aufgebaut. Wenn man nach Plan F die letzte freie Leitung beschaltet, kann man noch einmal 16 zusätzliche Ports haben. Mit einer etwas anderen Schaltung (4to16 Decoder) wären 256 möglich!

Die Begrenzungen ergaben sich aus den ICs, ich zur Verfügung hatte. Die hatte ich von alten ISA Karten und Mainboards herunter gelötet. Insgesamt hatte mich die Karte 3,50 Euro für eine Lochrasterplatine Platine und Lötzinn gekostet. Der Rest war vom nahen Verwertungshof.  ;) Zugegebener maßen hätte die Karte mit gekauften IC's auch nur 10 Euro gekostet, aber wo bleibt da die Herausforderung. :)

Ich mag einfache Hardwarebasteleien, die man ohne spezielle Hardware machen kann. Aus dem Grund ist die ganze Schalung aus TTL Logik zusammen gesetzt. Jeder mit einem Lötkolben und etwas Erfahrung könnte sie nachbauen.

Möglicherweise finde ich nochmal die Zeit, die Schaltung dahingehend zu erweitern das sie alle Phasen handhaben kann. (DMA Transfer der Daten) Mein Ziel wäre es auch das in TTL-Logik zu implementieren.

Ich habe sie zusammen mit einer Megafile30 genutzt und es funktioniert problemlos, wenn man nicht beide Geräte auf ID0 hat. (leidliche Erfahrung meinerseits) ;-/
Auch zusammen mit einer (sehr simplen) SCSI-Bridge hatte ich keine Probleme. Aber ich übernehme keine Garantien.

Ich habe das Archiv in drei Formen hoch geladen.
http://www.topeg.de/atari/ACSIIO.lzh
http://www.topeg.de/atari/ACSIIO.zoo
http://www.topeg.de/atari/ACSIIO.zip
enthalten sind:
Zwei Pläne im Gschem sch-Format (Teil von gEDA)
dazu Bilder in png und gif
Einen Readme im ATARI, Unicode und Windows Format
und zwei JPEG-Bilder vom Prototypen (Vorder- und Rückseite).

Ich hoffe das alle interessierten damit etwas Anfangen können.

Ein Platinenlayout habe ich nicht beigelegt, da es nicht vorhanden ist (keine Ahnung wo es hin ist).

Offline Arthur

  • Benutzer
  • Beiträge: 10.302
  • Mein Atari erinnert mich an die gute alte Zeit..
Re: MultiIO am ACSI
« Antwort #1 am: Mo 17.10.2011, 19:33:22 »
Hallo ToPeG,

ich habe mir dein Archiv gerade mal angesehen und die Schaltung gefällt mir. Was mir noch besser gefällt ist das sie ohne GAL's auskommt, da nicht jeder ein Programmiergerät hat. Die Schaltung inkl. der Readmedatei erklärt sehr gut wie man mit dem DMA-Port die Ports ansteuern kann. Keine Ahnung ob ich das mal nachbauen werde doch es ist schön zu wissen das schon jemand die ganze Vorarbeit geleistet hat. Für den Anfang tun es ja die LED's zum forschen und später könnte man einen DA-Wandler implementieren und Stereosound ausgeben, Evtl. ließe der sich passiv über ein Wiederstandnetzwerk statt eines Wandler von der Stange aufbauen. Mal sehen was hier noch für Vorschläge kommen. Ich glaube skul wollte auch mal so etwas machen, allerdings über den Romport, wenn ich mich recht entsinne.

Offline ToPeG

  • Benutzer
  • Beiträge: 406
Re: MultiIO am ACSI
« Antwort #2 am: Mo 17.10.2011, 21:44:26 »
Ich hatte das mal mit einem Oszilloskop gemessen, wenn ich alle Ports nacheinander ansprach bekam ich eine Abtastrate von ~800Hz. Nur einen Port (8bit) in maximaler Geschwindigkeit waren es ~10KHz. Angesteuert hatte ich es mit GFA-Basic. Das war für meine Zwecke völlig ausreichend. Ich schätze mit Assembler oder C könnte man das 3-8fache erreichen. so um die 70KHz. Das reicht für eine Audioausgabe.
Bei Audio wäre ein DMA Transfer nützlich, der aber noch fehlt.

Offline ToPeG

  • Benutzer
  • Beiträge: 406
Re: MultiIO am ACSI
« Antwort #3 am: Fr 21.10.2011, 23:39:08 »
Ich habe gerade versucht einen DMA-Transfer in TTL Logik zusammen zu setzen. Als ich bei 35 ICs war, habe ich aufgehört. Das ist für mich kaum noch zu überschauen. Es ist zwar möglich, aber der die Komplexität ist enorm.
Viel einfacher ist es einen PIC dafür zu nutzen. 16IO-Ports reichen, mit ein wenig TTL-Logik, dafür aus, denke ich.

guest2696

  • Gast
Re: MultiIO am ACSI
« Antwort #4 am: So 06.11.2011, 16:26:53 »
Hallo ToPeg,

ich habe gerade dein Projekt Multi-IO am ACSI 'entdeckt' und mir gefällt daran, dass Drucker-Schnittstelle und Romport für andere Hardware frei bleiben. -
Außerdem wäre das mal eine prima Gelegenheit ein paar TTLs aus meinem Bastel-Sortiment nutzbringend wieder zu verwenden.  ;D

Hast du für mich mal ein GfA-Basic-Beispiel um zu zeigen, welchen Aufwand es darstellt, ein Bit oder Byte auszugeben oder einzulesen?

Gruß soldermaSTer

Offline ToPeG

  • Benutzer
  • Beiträge: 406
Re: MultiIO am ACSI
« Antwort #5 am: Mo 07.11.2011, 17:14:03 »
hier ein Beispiel eines Lauflichts auf 8bit eines Ports (Hight
- oder Lowbyte). in GFA Basic 3.x

'
'                         ACSIIO-Adapter Progrmmierung
'                            Beispiel einer Ausgabe
'                              !!  Lauflicht !!
' ---------------------------------------------------------------------------- '
' ----------------------------- Register Adressen ---------------------------- '
'
a5=&HFF8604                 ! Adresse Datenregister
a6=&HFF8606                 ! Adresse Mode Controll Register
'
' ---------------------------------------------------------------------------- '
' --------------------------- Konfiguration ---------------------------------- '
'
' Device ID
id|=4    ! 0 - 7
'
' Port
port|=1  ! 1 - 3
'
' Hight/LowByte
hight!=0 ! 1/0
'
' ---------------------------------------------------------------------------- '
' ------------------------------- PROGRAMM ----------------------------------- '
' DMA sperren
SPOKE &H43E,1               ! Variable flock auf 1 setzen
'
'
PRINT AT(25,12);"*  Programmende mit  Esc  *"
'
'
t|=id|
t|=SHL(t|,5)               ! oberen 3 bit = id
t|=BSET(t|,port|)          ! Port select
IF hight!
  t|=BSET(t|,0)            ! Highbyte adressieren
ENDIF
t|=BSET(t|,4)              ! LED an (unbelegtes Bit 4)
'
'
SDPOKE a6,&H188            ! Geraet adressieren
SDPOKE a5,t|               ! ID & Kommando senden
'
SDPOKE a6,&H18E            ! auf Bus schreiben
'
' Schleife fuer das Lauflicht
dbyte|=1
DO
  dbyte|=ROL|(dbyte|,1)
  SDPOKE a5,dbyte|         ! Byte senden
  PAUSE 2                  ! warten
  '
  KEYTEST tz|
  EXIT IF tz|=27           ! ENDE mit Esc
LOOP
'
' Port reset
t|=BCLR(t|,4)              ! LED aus
SDPOKE a6,&H188            ! Geraet adressieren
SDPOKE a5,t|               ! ID & Kommando Senden
SDPOKE a6,&H18E            ! auf Bus schreiben
SDPOKE a5,0                ! alles aus
'
' DMA freigeben
SPOKE &H43E,0              ! Variable flock auf 0 setzen
EDIT

Ich denke man sieht, die Programmierung ist nicht so kompliziert.

Offline ToPeG

  • Benutzer
  • Beiträge: 406
Re: MultiIO am ACSI
« Antwort #6 am: Do 10.11.2011, 03:53:51 »
Ich denke ich habe eine einfache Möglichkeit gefunden den DMA-Modus zu ergänzen. Ich werde es mir noch mal genau anschauen müssen. Das ist nur ein schneller Wurf. Wenn jemandem etwas auffällt... :-)

Der DMA Modus wird über Bit4 (bisher unbelegt) während der Adressierung aktiviert. Erst eine erneute Selektion beendet ihn. Der über die anderen Bits eingestellte Port wird Während des DMA-transfers genutzt. Hight/Lowbyte werden automatisch gewechselt.