<offtopic>
Ich möchte an dieser Stelle mal eben bewusst offtopic werden um ein Thema anzureissen das zwar nur indirekt zu diesem Thread gehört aber für die Leserschaft hier möglicherweise interessant ist. Falls es Reaktionen darauf gibt mag ein Admin das freilich sehr gerne in einen eigenen Thread auslagern.
Hintergrund: Ich patche hin und wieder mal Spiele/Tools, u.a. auch damit sie von externer Hardware (Speichererweiterung, Maus, Massenspeicher etc.) profitieren können. Und dabei ärgere ich mich jedesmal darüber das es auf den C64 keinerlei Standarts gibt. Die Tage habe ich mir z.B. ein RPG vorgenommen und ihm eine RAMdisk verliehen*. Nun, an Speichererweiterung gibt es ja jede Menge: REU, GeoRam, SuperRam, Pagefox, VDC etc. pp., und sie alle werden grundlegend unterschiedlich angesteuert. Bei Massenspeichern, Turbokarten, Maus-Adaptern usw. ist es genauso. Es gibt auch wenigstens ein halbes Dutzend verschiedene 4-Spieler-Adapter, und sie alle sind inkompatibel zueinander (obgleich sie sich teilweise lediglich in der Pinbelegung unterscheiden). Es gibt auf dem C64 ja leider nichteinmal vernünftige Methoden um evtl. vorhandene Zusatzhardware zu erkennen... Und das finde ich persönlich sehr ärgerlich. Zumal man bisweilen sehr lange googeln muss um mal Informationsbruchstücke zur Ansteuerung der jeweiligen Hardware aufzufinden. Ganz abgesehen davon das man viele Hardwareerweiterungen nicht gleichzeitig nutzen kann weil sie den gleichen Port beanspruchen.
Idee: Mir kam daher die Idee (und bisher ist es nur eine vage Idee, ohne jegliche Ausarbeitung) einen einheitlichen Bus für den C64 zu gestalten. Nennen wir ihn mal den Universal Commodore Bus (UCB). Mir schwebt dafür ein Gerät für irgendeinen Port des C64 vor (z.B. den Tape-Port, der ist glaube ich noch nicht so strapaziert). Also ein Gerät, das man in den Tape-Port einstöpseln kann, und das dann eine Anzahl x von UCB-Schnittstellen zur Verfügung stellt**. An die einzelnen UCB-Schnittstellen liessen sich dann - ggf. mit jeweils einem individuellen Adapter - alle möglichen Geräte anschließen, z.B. Mäuse, Joysticks, Joypads, Tastaturen, Massenspeicher, Speichererweiterungen und was weiss ich nicht alles.
Das UCB-Protokoll (seriell?), über welches man mit dem Gerät (und weiter mit den jeweiligen angeschlossenen Devices) kommuniziert, müsste zunächst mal einen Transport-Layer definieren, also eine einheitliche Kommunikationsmöglichkeit schaffen. Das Application-Layer müsste dann ermöglichen die angeschlossenen Devices abzufragen und anzusteuern. Die Devices werden in Klassen mit jeweils einem definiertem Interface eingeteilt, z.B. InputDevice/Digitaljoystick, InputDevice/Analogjoypad, InputDevice/Maus, InputDevice/Tastatur, IO/Massenspeicher, IO/Ramdisk, usw.
Die jeweiligen (intelligenten) UCB-Devices/UCB-Adapter für eine konkrete Hardware müssten dann halt dafür sorgen das sie das UCB-Protokoll verstehen, also sich bei einem Bus-Query dementsprechend melden können und das jeweiliges Interface inplementieren. Da Microcontroller - etwa für die Adaption Maus->UCB - heutzutage nur ca. 2 Euro kosten und sich leicht auf Lochraster löten lassen wäre das - in dieser Hinsicht - durchaus eine realisierbare Sache.
Für die Nutzung müsste ein Programm dann freilich einen (einzigen) UCB-Treiber beinhalten. Mir schwebt da für die Ansteuerung sowas vor wie (Pseudocode):
query_ucb();
if( ! InputDevice/Mouse found ) {
print("this game is best played with a mouse");
} else if ( ! (InputDevice/DigialJoystick | InputDevice/AnalogJoypad found) ) {
print("you need at least some input device");
exit(0);
}
...
(int x, int y) = UCBdriver_InputDevice__getCurrentMouseCursorCoordinates();
int b = UCBdriver_InputDevice__getNumberOfButtonPressed();
...
Alles anzeigen
wobei digitale Joysticks/-pads ein Maus-Interface freilich auch erfüllen können (das müsste der jeweilige Adapter dann halt implementieren). Wäre dann halt ggf. umständlicher in der Nutzung, aber immerhin geht's. Ist zumindest besser als all die schöne Zusatzhardware überhaupt nicht zu unterstützen (was ja z.Z. leider der Normalfall ist). 
Zusammengefasst: Für einen Programmierer kann es in einen enormen Kraftakt ausarten möglichst viele Hardwareerweiterungen zu unterstützen, nicht zuletzt weil deren Dokumentation bisweilen sehr spärlich ist. Mit einem einheitlichen Bus/Treiber (welchen es noch zu entwerfen gilt) könnte das anders aussehen. Zumindest ich selbst würde so etwas jedenfalls begrüßen.
Was meint ihr - macht es irgendeinen Sinn diese Idee weiter zu verfolgen und zu realisieren? Der Status Quo ist ja das nur ca. jedes tausendste Programm irgendeine Zusatzhardware unterstützt, wobei jedoch grob geschätzt 5% aller Programme von Zusatzhardware profitieren könnten (was aber niemand implementiert, u.a. möglicherweise weil es sehr aufwendig werden kann die verschiedensten Hardwarealternativen anzusteuern bzw. weil die Zielgruppe für die Verwendung einer konkreten Hardware zu klein ist als das sich jemand darum bemüht). Ein UCB könnte zumindest dieses Problem beheben.
* mag jemand beta-testen?
** als physikalische Schnittstelle des UCB könnte man DIN-Stecker nutzen oder (virtuelle) Userports oder was auch immer
</offtopic>