iPhone- C64 endlich im AppStore – Hier der Emulator-Hack

Aktuelle News über Mobiles Kommentar eingeben

Nach all dem Hickhack ist der C64 (Emulator) nun endlich im AppStore erhältlich. Zu einem Preis von 3,99 Euro bietet er allerdings nur fünf – eher langweilige – Spiele. Das muss aber nicht sein, dem jailbreak und ein paar Tricks sei Dank. Aber nun erst einmal zurück zum eigentlichen – unveränderten – Programm.

IMG 0008 iPhone  C64 endlich im AppStore   Hier der Emulator Hack IMG 0009 iPhone  C64 endlich im AppStore   Hier der Emulator Hack

IMG 0011 iPhone  C64 endlich im AppStore   Hier der Emulator Hack IMG 0012 iPhone  C64 endlich im AppStore   Hier der Emulator Hack

Auf Drängen von Apple – schließlich soll es im AppStore offiziell keinen echten Emulator geben – wurde das Basic des C64 “abgeschaltet”. Tatsächlich handelt es sich bei dieser Modifikation aber nur um einen optischen Trick. Der Programmierer überblendet das echte Basic im Hintergrund nur mit einer Grafik, auf der zu lesen ist, dass das Basic momentan nicht verfügbar ist.

nobasicoverlay iPhone  C64 endlich im AppStore   Hier der Emulator Hack

In Wahrheit werkelt im Hintergrund der ganz normale C64 Prompt. Löscht man die beiden Dateien “nobasicoverlay.png” und “nobasicoverlay_landscape.png” aus dem C64.app Verzeichnis (/var/mobile/Applications/INDIVIDUELLE_ID-NUMMER_DER_ANWENDUNG/C64.app/) auf dem iPhone (das kann man bequem auf dem iPhone mit Cydia-Anwendung iFile erledigen), dann startet der C64 auch mit dem passenden Basic.

Files iPhone  C64 endlich im AppStore   Hier der Emulator Hack

Für alle diejenigen unter euch, die nur mal so mit dem Basic rumspielen wollen: einfach die Option “Always show full keyboard” aktivieren, ein Spiel starten, zum EXTRA-Keyboard wechseln und einen RESET auslösen. Et voila, C64 Basic!

Leider kommen nur Nutzer eines iPhone mit jailbreak und aktiver SSH-Verbindung bzw über die Nutzung des iPhone Explorers (und Datenkabel) in den Genuss des vollen Funktionsumfangs dieser C64 Anwendung.

IMG 0005 iPhone  C64 endlich im AppStore   Hier der Emulator Hack

Man kann nämlich auch seine eigenen Spiele einbinden. Dazu muss man nur im Games-Verzeichnis (/var/mobile/Applications/INDIVIDUELLE_ID-NUMMER_DER_ANWENDUNG/C64.app/Games) der Anwendung weitere Unterverzeichnisse erstellen, in die man dann seine C64-Programme und Spiele (entweder im Disk (D64) oder Tape (T64) Format) kopiert.

IMG 0015 iPhone  C64 endlich im AppStore   Hier der Emulator HackIMG 0016 iPhone  C64 endlich im AppStore   Hier der Emulator Hack

So kann man auch Donkey Kong, Sword of Fargoal und Co spielen. Allerdings ist vorher noch eine Anpassung der entsprechenden gameInfo.plist des Spiels notwendig.

Programme iPhone  C64 endlich im AppStore   Hier der Emulator Hack

Hier mal ein Beispiel:

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=”1.0″>
<array>
<dict>
<key>gameTitle</key>
<string>Donkey Kong TMD</string>

<key>version</key>
<integer>1</integer>
<key>game-images</key>
<array>
<string>Donkey_Kong_TMD.d64</string>
</array>

<key>coverArtPath</key>
<string>DonkeyKongCoverArt.png</string>

<key>initialState</key>
<string></string>
<key>gameid</key>
<string>Donkey Kong TMD</string>

<key>application-type</key>
<string>game</string>
<key>info1Title</key>
<string>Published</string>
<key>info1</key>
<string>1983</string>
<key>info2Title</key>
<string>Distributor</string>
<key>info2</key>
<string>Ocean</string>
<key>info3Title</key>
<string>Written by</string>
<key>info3</key>
<string>Jeff McCord</string>

<key>config</key>
<dict>
<key>SkipFrames</key>
<integer>3</integer>
<key>BordersOn</key>
<false/>
<key>JoystickSwap</key>
<true/>

<key>Emul1541Proc</key>
<false/>

</dict>
<key>keyboard</key>
<dict>
<key>layout-name</key>
<string>noControlsLayout</string>
<key>background</key>
<string>nocontrols_bg.png</string>
</dict>
</dict>
</array>
</plist>

Die rot markierten Stellen variieren je nach installiertem Spiel. Der Eintrag <key>gameTitle</key> beinhaltet den Namen des Spiels. Der Wert <key>game-images</key> zeigt auf das entsprechende Disk (C64) oder Tape (T64) Image im Verzeichnis. Der Eintrag <key>coverArtPath</key> zeigt dann auf das passende CovertArt im Verzeichnis, eine Grafik (PNG) mit der Grösse von 113 x 140 Pixel. <key>gameid</key> ist der interne Name des Spiels und scheint keine weitere Bedeutung zu haben.

Die Einträge <key>info1Title</key> <key>info1</key> <key>info2Title</key> <key>info2</key> <key>info3Title</key> und <key>info3</key> haben rein statistischen Wert und weisen auf das Jahr der Veröffentlichung sowie den Hersteller und Programmierern hin.

Interessanter ist da wieder der Wert <key>JoystickSwap</key>, der sich um den passenden Joystick-Port kümmert. Hier muss man ggf. experimentieren und zwischen <true/> und <false/> wechseln. <key>Emul1541Proc</key> regelt die Disk-Emulation. Setzt man das Flag auf <true/> wird eine vollständige Disk-Emulation aktiviert. Der Ladevorgang dauert dann länger, dafür kommt der Emulator auch mit einigen kopier geschützten Spielen zurecht.

Folgende weitere Keys (<true/> oder <false/>) stehen zur Verfügung:

<key>Joystick1On</key>
<key>Joystick2On</key>
<key>JoystickSwap</key>
<key>LimitSpeed</key>
<key>FastReset</key>
<key>CIAIRQHack</key>
<key>SIDFilters</key>
<key>SingleCycleEmulation</key>
<key>IDOn</key>
<key>SIDFilters</key>
<key>ShowSpeed</key>
<key>AutoBoot</key>

Andere Spiele nutzen einen sogenannten “SaveState”, also ein Speicherabbild des Spiels beim Start. Bei dieser Datei handelt es sich um ein komplettes Abbild des C64-Speichers. Diese Datei liegt im Binary-PLIST Format vor, ist 73 KB groß und nicht mit der entsprechenden Frodo-Variante (.fss) kompatibel. Der Programmierer legt das Speicherabbild Base64-kodiert in der entsprechende .state-Datei ab. Nach dem Beenden eines Spiels findet man dieses Speicherabbild unter:

/var/mobile/Applications/INDIVIDUELLE_ID-NUMMER_DER_ANWENDUNG/C64.app/Documents

So erkennt man auch nicht, dass der C64 eine Menge zunächst gecrackter Spiele nutzt. Die entsprechenden Cracker-Intros werden durch dieses SaveState nämlich einfach übersprungen :D Allerdings kann man dies Funktion auch dazu nutzen in Spielen “abzuspeichern”, so dass man nicht immer wieder von vorne anfangen muss. Spiele, die mehrere Disketten-Images benötigen (wie z. B. The Bard’s Tale oder Ultima), funktionieren leider nicht.

Fazit: C64 und jailbreak = 100% Emulator :D

  • Share/Bookmark
google.load("language", "1"); var curstate = 0; var hasloaded = 0; function bnc_show_translated() { if (hasloaded == 0) { bnc_lang_callback(); hasloaded = 1; } for (i = 0; i < 0; i++) { var elem = $("bnc_original_" + i); if (elem) { if (curstate) { elem.show(); } else { elem.hide(); } } } for (i = 0; i < 0; i++) { var elem = $("bnc_trans_" + i); if (elem) { if (curstate) { elem.hide(); } else { elem.show(); } } } if (curstate) { $("bnc_trans_state1").show(); $("bnc_trans_state2").hide(); curstate = 0; } else { $("bnc_trans_state1").hide(); $("bnc_trans_state2").show(); curstate = 1; } } function bnc_detect_div(div_id) { var text = document.getElementById(div_id); if (text) { text = text.innerHTML; if (text.length > 0) { google.language.detect(text, function(result) { if (!result.error) { if (result.language != "en") { if (result.confidence > 0.25) { $("bnc_translating").show(); bnc_xlate_div(result.language, div_id, "en"); } } } } ); } } } function bnc_xlate_div(src_lang,div_id,o_lang) { var text = document.getElementById(div_id); if (text) { text = text.innerHTML; google.language.translate(text, src_lang, o_lang, function(result) { var translated = document.getElementById(div_id); if (result.translation) { translated.innerHTML = result.translation; } }); } } function bnc_lang_callback() { } function bnc_startup() { bnc_xlate_div("en", "bnc_translate_info", "en"); bnc_xlate_div("en", "bnc_translate_info2", "en"); } google.setOnLoadCallback(bnc_startup);