Go Down

Topic: Commodore 64 Maus mit Arduino emulieren, aber wie? (Read 933 times) previous topic - next topic

MontySylver

Ich beschäftige mich ja jetzt seit einiger Zeit mit Arduino und bisher sind dabei meist nur kleine Spielereien herausgekommen wie z.B. eine ATtiny-gesteuerte Lautsprecherbeleuchtung für die Boombox von einem Kumpel. Jetzt habe ich mir gedacht dass es mal Zeit für etwas sinnvolleres wird. Und da ich ein großer C64-Fan bin erscheint mir ein Maus-Emulator als guter Anfang. Für die Cursorsteuerung schwebt mir ein einfacher Analogstick a'la Playstation vor. Die Funktionen der originalen 1351-Maus sind hier auch gut beschrieben: http://www.c64-wiki.de/index.php/Mouse_1351 Allerdings bin ich hier schon ins Stocken geraten: Die aktuelle Position wird modulo 64 alle 512 Mikrosekunden an die SID-Register POTX (für die x-Position) und POTY (für die y-Position) übertragen, ohne dass eine Software dazu nötig ist. Leider habe ich nur eine 1350-Maus die genau diesen Modus nicht besitzt, also alles durchzumessen fällt leider flach. Falls jemand eine leicht verständliche Erklärung dafür hat wäre ich sehr, sehr dankbar!
Witty text goes here, I guess.

uwefed

#1
Mar 10, 2013, 08:15 pm Last Edit: Mar 10, 2013, 08:28 pm by uwefed Reason: 1
Der Joystick sind hardwaremäßig einfach 5 Tasten, 4 für die Richtung oben, unten, rechts und links und dem Feuerknopf. Der Controlport hat außerdem Masse und 5V herausgeführt und 2 Analoge Eingänge. Diese werden von der Maus verwendet.

Die analogen Eingänge funktionieren folgendermaßen: Ein Meßkondensator wird für gewisse Zeit entladen und dann über den variablen Widerstand im Paddel geladen. Ein Eingang des SID vergleicht die Spannung am Kondensator mit einer Referenz und stoppt einen Zähler. Das ergibt einen nicht ganz linearen Zusammenhang Widerstand- Meßergebnis, wobei nur 6 Bit gültig sind. Bit 0 und 7 werden nicht verwendet. genaueres bei Beschreibung der Paddels.  

Die Maus im Proportionalmodus funktioniert ähnlich wenn auch digital: der Kontroller in der Maus kontrolliert über den Potx pin die Spannung am Kondensator. Die Messung des SID beginn mit Entladung des Kondensators für 256Taktzyklen. Nach 320 Zyklen ab Start des Meßzyklus fängt die eigentliche Messung an. Der Mauskontroller schaltet nach einer gewissen Zeit (0 bis 128 Taktzyklen bei 1MHz) den Ausgang potx bzw poty auf HIGH. Der SID überträgt den erreichten Zählerstand in das entsperchende Register. Die Zeit der Verzögerung des H-Schaltens des Potx-Poty Leitung hängt vom zu übertragenden "Zählerwert"("analogwert") ab. Der Ausgang potx bzw poty bleiben bis zum erreichen von 480 Takten ab Start Messung High und werden dann auf Eingang geschaltet. Die Messung startet wieder nach 512 Takten des C64.

Die Messung ist nicht sehr genau weil der C64 und die Maus leicht verschiedene Taktfrequenzen haben da der Takt vom C64 von der Videofrequenz abgeleitet ist (985 kHz bei PAL-Version bzw 1022 kHz bei NTSC-Version).


genaueres in : http://www.zimmers.net/anonftp/pub/cbm/documents/projects/interfaces/mouse/Mouse.html#1351 über die Messumg im C64 und http://www.zimmers.net/anonftp/pub/cbm/documents/projects/interfaces/mouse/Mouse.html#inners über die Schaltung in der Maus.

http://www.c64-wiki.de/index.php/Controlport // Beschreibung Anschluß Mouse
und http://www.c64-wiki.de/index.php/Joystick Tastenverkabelung des Joystick.
http://www.c64-wiki.de/index.php/SID // Sound interface Divice
http://archive.6502.org/datasheets/mos_6581_sid.pdf //Datenblatt des SID
http://www.c64-wiki.de/index.php/Paddles um die Funktion der analogen Eingänge zu verstehen.

Mal wieder was über den C64 dazugelernt.
Grüße Uwe

MontySylver

Wow, das ist ja doch um einiges komplizierter als ich erwartet hatte! Aber super erklärt. Ich werde mich dann mal langsam da rantasten.
Quote
Mal wieder was über den C64 dazugelernt.

Man kann nie genug über 8Bit-Geräte lernen  ;)
Witty text goes here, I guess.

Go Up