Monatsarchiv: April 2019

Parallele Datenübertragung

…über den Joystick Port des guten, alten Atari 800XL.

Hardware zur Datenübertragung zwischen den alten Atari 8Bit- Computern und aktueller Hardware gibt es schon zu genüge. Ich selbst nenne zum Beispiel das SIO2USB des ABBUC mein eigen. Aber, ich bin nun einmal ein kleiner Kontroll- Freak und möchte was eigenes machen. Hier erst einmal ein paar Gedanken zu Beginn meines kleinen Projektes:

Die Idee: Die Joystick- Ports des Atari können neben der Dateneingabe (über den namensgebenden Joystick- Port) auch auf Ausgabe geschaltet werden. Je Port können so 4 Datenleitungen, insgesamt also 8 Stück zur Ausgabe genutzt werden.

Scematic_Paralell_Interface

Blockschaltbild. 4 Daten- und 3 Kontrollleitungen der fertigen Schaltung.

Ich möchte die 4 Datenleitungen des Port A (die 4 Richtung- „Pins“ des Joysticks) zur Datenübertragung nutzen. Der Trigger (Feuerknopf)- Eingang ist eine Kontrollleitung über die der Empfänger signalisiert „Ich habe 4 Bits empfangen, sende mir die nächsten…“. Von Port B brauche ich zwei weitere Kontrollleitungen als Ausgabe. Leitung 1 signalisiert dem Empfänger, dass Daten anliegen: „bitte hole die ab“. Leitung 2 signalisiert dem Empfänger schließlich das die Datenübertragung beendet ist.

Scematic_1_Bit_Sender

Schaltplan: 1- Bit senden. Einfache Machbarkeits- Studie zum Bockschaltbild.

Daten und Kontrollleitungen werden mit einem Teenys 2.0 (Arduino) verbunden. Über den USB- Anschluss des Teensy  wird eine Serielle Verbindung aufgebaut der die mein Atari mit meine Mac kommuniziert.

 

Screen Shot 2019-04-13 at 1.09.16 AM

6502- Assembler Source Code (Atari Assembler Editor). Schaltet die LED in der Schaltung wechselnd an oder ab indem der Digital- In des Teenys 2.0 auf Low (=0=LED an) und High (=1=LED aus) gezogen wird. Die Software im Teenys gibt den Ein-/ Ausschaltbefehl an die LED.

 

 

 


int const LED_PIN=PIN_B0;
int const IN_PIN=PIN_B1;

void setup() {
pinMode(LED_PIN,OUTPUT);
digitalWrite(LED_PIN,LOW);
pinMode(IN_PIN,INPUT_PULLUP);
}

void loop() {

int pinState;
pinState=digitalRead(IN_PIN);
if (pinState==LOW)
digitalWrite(LED_PIN,HIGH);
else
digitalWrite(LED_PIN,LOW);

digitalWrite(LED_PIN,LOW);
Serial.println(pinState);
}

C- Source- Code in Arduino Studio. Wichtig: Wenn „Low“ gelesen wurde, dann heist das, dass der Atari eine ‚1‘ gesendet hat, die Leitung also auf High liegt.

Werbeanzeigen