Tastertur Technik:
Die C64 und VC20 Tastertur sind sehr ähnlich, die C16 Tastertur ist bei Vielen Tasten anders belegt und die Signalleitungen sind am Stecker vertauscht.
C64:
66 Tasten
1 Restore Taste die direkt auf die IRQ Logic einwirkt
Shiftlock zusammengeschaltet mit Shift Links
64 Tasten die in einer 8x8 Matrix angeortnet sind und über zwei 8 Bit Ports der CIA Abgefragt werden.
Die 0/5 Volt Logic ist für heutige verhältnisse etwas gewöhnungsdürftig.
Die Ein/Ausgänge haben alle einen Pull Up Wiederstand auf 5 Volt, und können nur auf Masse Geschaltet werden durch einen Chip internen Transistor, nach High= 5Volt geht es nur durch den Pull Up wiederstand.
Wenn Zwei Leitungen zu sammen kommen, die eine High 5V die andere Low =0V ist der gemeinsame zustand zerstörungsfrei 0V
Low = Dominant
High = Rezessiv
Wenn man aber einen "Moderenen" PIC Ausgang anschließt der Gnadenlos 20-25 mA nach Masse oder 5Volt Treibt, gibt das kleine Masse Transistörchen in der CIA Tödlich beleidigt auf.
Es darf also niemals ein PIC einen Ausgang auf High 5V geben und mit einem LOW Pin von der CIA zusammentreffen, die Erkenntnis musste ich mit dem Verlust von 4-5 CIA´s Bezahlen.
Die Abfrage der Original C64 Tastertur mit dem PIC ist kein Problem, das Senden auf dem CAN war auch schnell umgesetzt, unter CANoe noch schnell ne DBC Geschrieben und schon war klar "Teil 1 Läuft".
Botschaft 1 = 8 Byte Nutzlast =64 Tasten Passt Perfekt!
Botschaft 2 = 3 Byte Nutzlast = Restore +Sondersignale für Rechner umschaltung und sonstige über Tasterur bedeinbare Sonderfunktionen
Ok, weiter gings an der C64 Seite, auf einen Port wird alles auf Eingang geschaltet= High über Pull UP, am anderen Port wird auf Ausgang geschaltet und eine 0 durch die Bits geschoben.
Die Routine im Empfangspic war zuerst schnell geschrieben, Wellche Spalte ist am C64 Port Low?
Beispiel Spalte 2
Ziehe Byte 2 aus dem CAN Empfangspuffer (Gleiches Layout wie die C64 Tastertur)
und Schiebe es in das Spalten register
Das PORT Ausgangs Register ist immer auf 0x00, über das TRIS I/O Register wird dann
0= Ausgang LOW oder1=Eingang=High über die CIA Pull Up zerstörungsfrei ausgegeben.
Sobald der CIA Pin wieder auf High ist, schreibe wieder alles auf eingang in das Tris Register und Scanne nach der nächsten Low Leitung an
der CIA.
Über die Doppelbetätigung Commodore Taste + F1/F3/F5 sollte der Empfangs Pic ausgewählt werden können ausgewertet von dem Tastertur und Audio/Video umschalter PIC (in der 3 Byte Botschaft übertragen) und auf der eigendlichen 8 Byte Botschaft wurde die Betätigung unterdrückt.
Die Besonderheiten der C16 Tastertur konnten damit auch umgemappt werden, zum beispiel die Pfeil Tasten.
Meine Freude war aber dann schnell vorbei wie ich anfing Spiele oder Demos zu laden.
Zuerst implementierte ich noch eine 3. CAN Botschaft wo der Zeileninhalt übertragen wurde, da einige abfragen Port A und B an der CIA vertauscht abfragten.
Und noch immer probleme, mist einige Programme ziehen mehr wie eine Leitung auf Low, zum Teil auf beiden Ports.
Leider reichte die Rechenleistung nicht aus um aus den 8 Byte der CAN Botschaft die beiden Ziel Portwerte umzurechnen, und dabei wurden
die Joysticks noch gar nicht Abgefragt und mit eingerechnet. Die Taktfrequenz war schon bei 40MHz und konnte wegen dem CAN Bus nicht
weiter gesteigert werden (Der PIC Core macht locker 60Mhz mit, der CAN und EEPROM Teil steigen bei knapp über 40MHz aus).
Leider war da erstmal bei Plan A ein Toter Punkt...
Im nächsten Teil 4066 ich brauche mehr mehr 4066er.