clicky: Een emulator voor de iPod met clickwheel (WIP)

Dit project bevindt zich nog in een vroeg stadium en is momenteel niet klaar voor algemeen gebruik; er is nog weinig gedaan om het gebruiksvriendelijk te maken.

Oproep voor bijdragers

Tot nu toe was clicky een hobbyproject van één persoon. Vanwege tijdgebrek is er nu behoefte aan mensen die geïnteresseerd zijn in het verder uitbouwen van dit project.

Het project is zo schoon en georganiseerd mogelijk gehouden, met veel inline-commentaren en documentatie. In de docs-map is gedetailleerde documentatie voor ontwikkelaars opgenomen. Daarnaast is er een uitgebreide collectie iPod-documentatie en testsoftware verzameld in de resources-map.

Gezocht: Experts in Reverse Engineering

Er is specifiek behoefte aan mensen met sterke ervaring in reverse engineering om te helpen bij het preserveren van dit icoon uit de popcultuur van het begin van de jaren 2000.

Hoewel de verwachting is dat Rockbox en iPodLinux werkend kunnen worden gekregen, kan het implementeren van de RetailOS van Apple lastiger zijn. Hoewel er rond 2007 al veel reverse-engineering is gedaan door de iPodLinux- en Rockbox-projecten, zijn er nog steeds veel registers en geheugenblokken waarvan het doel onbekend is. clicky kan al booten in RetailOS, maar er zijn veel toegangspogingen tot ongedocumenteerde delen van de PP5020-geheugenruimte.

Dankzij moderne tools zoals Ghidra en de emulatiesoftware van clicky zelf, zou het nu makkelijker moeten zijn om de status van RetailOS-binaries te inspecteren tijdens uitvoering en inzicht te krijgen in de werking van de hardware.

Roadmap

Fase 1: Basisfunctionaliteit

Het uitvoeren van zeer eenvoudige software, zoals ipodloader. Dit is een goed startpunt omdat de software simpel genoeg is om volledig te doorlopen en te begrijpen. Het raakt diverse iPod-specifieke hardware aan, zoals timers, knoppen en het LCD-scherm.

Doelen:

  • Grip krijgen op de ARM7TDMI CPU en de ongebruikelijke dual-processor architectuur van de iPod.
  • Meer bekend raken met de ARM7TDMI-assembler en de compiler-toolchain.
  • Opzetten van de projectbasis:
  • Framework voor geheugeninterconnectie.
  • LCD-output en knop-input.
  • Basis CLI.
  • Opzetten van de basis-systeemarchitectuur (CPU-stapverwerking, systeemgeheugenkaart, interactie met apparaten).

Vervolgens wordt er gewerkt aan de complexere ipodloader2. Deze raakt meer hardware aan (zoals ATA-2) en voert een diepere systeeminitialisatie uit (onder andere interrupt-afhandeling en geheugenmapping).

Doelen:

  • Uitbreiden van de systeemarchitectuur en de geïmplementeerde apparaten.

Fase 2: Open-source alternatieve firmware

Het draaien van populaire open-source alternatieven zoals Rockbox en iPodLinux. Omdat deze projecten open source zijn, is het mogelijk om de code te volgen, wat het implementeren van apparaten en het debuggen vergemakkelijkt.

Doelen voor Rockbox:

  • Een daadwerkelijk OS op de iPod booten (een enorme taak die veel diverse hardware-implementaties vereist).

Doelen voor iPodLinux:

  • Een tweede OS op de iPod booten (waarschijnlijk complexer om te debuggen dan Rockbox).
  • De gaten opvullen tussen de hardware die door Rockbox wordt gebruikt en die door iPodLinux wordt gebruikt.

Fase 3: Gesloten Apple-software

Het draaien van propriëtaire software van Apple, in het bijzonder de originele iPod RetailOS.

Stap 1: Apple Diagnostics Door Select+Prev ingedrukt te houden tijdens het booten, wordt een diagnoseprogramma uitgevoerd dat direct in de Flash ROM is ingebouwd. Dit is waarschijnlijk de eerste closed-source software die de emulator zal draaien. Het dient als een ideale testomgeving voor hardwarefuncties zonder dat een OS-scheduler in de weg zit.

Doelen:

  • Closed-source software draaien.
  • Booten in diagnostics (testen van o.a. 5 IN 1, RESET KEY, CHGR CURR, REMOTE, HP STATUS, SLEEP, BATT A2D, A2D STAT, FIREWIRE, HDD R/W, SMRT DAT, HDD SCAN, READ SN, DISKMODE, WHEEL, CONTRAST, AUDIO, STATUS, DRV TEMP, IRAM TEST).

Stap 2: RetailOS Het uiteindelijke hoofddoel. De hoop is dat na het succesvol draaien van twee andere OS'en, RetailOS "gewoon" zal werken, hoewel het waarschijnlijk is dat specifieke Apple-implementaties voor problemen zullen zorgen.

Doelen:

  • Een volledig werkende geëmuleerde iPod realiseren.
  • Het originele Brick Breaker kunnen spelen.

Onzekerheden en uitdagingen

Potentiële complicaties

  • Cache-effecten: Het implementeren van correcte caching is complex. De hoop is dat het geen problemen veroorzaakt als beide CPU's gelijktijdig geheugenschrijfacties zien.
  • Ongedocumenteerde hardware: Er is hardware aanwezig die nog niet is teruggeleverd via reverse engineering; dit zal waarschijnlijk pas aan het licht komen bij het werken met RetailOS.

Functionaliteiten voor later

  • USB: Dit is een zeer complex onderdeel dat niet kritiek is voor de kernfuncties van de iPod. Dit zal voorlopig met 'stubs' worden afgehandeld.
  • Audio: Hoewel de iPod een audiospeler is, is audio-emulatie technisch lastig en nauwkeurig werk. Dit is gepland voor een veel later stadium.

Waarom de iPod emuleren?

Het is een interessante technische uitdaging. In vergelijking met eerdere projecten (zoals ANESE, een NES-emulator) biedt de iPod een geheel andere set uitdagingen:

  1. Moderne architectuur: De iPod gebruikt veel standaard commerciële hardware en technologieën in plaats van esoterische custom-chips. Dit is een uitstekende manier om meer te leren over ARM-architectuur, I2S, I2C, USB en IDE-harde schijven.
  2. Gebrekkige documentatie: Hoewel er informatie beschikbaar is via de iPodLinux- en Rockbox-projecten, is er geen complete referentie beschikbaar. Dit biedt de kans om eigen onderzoek te doen en informatie te consolideren.
  3. Uniek project: De iPod is nog nooit eerder geëmuleerd. Er is geen bestaande code om naar te kijken bij problemen, wat betekent dat elke uitdaging zelfstandig opgelost moet worden.
  4. Preservatie van games: De iPod kende een reeks games (rond 2006), waaronder Brick Breaker. Deze games zijn geen meesterwerken, maar zijn wel cultureel interessant en verdienen het om gepreserveerd te worden.

Dankwoord en erkenningen

Dit project zou niet mogelijk zijn zonder de volgende personen en projecten:

  • The iPod Linux Project: Voor het onschatbare werk op het gebied van reverse engineering.
  • Rockbox: Voor aanvullende reverse engineering en het bewaren van jaren aan IRC-logs.
  • freemyipod: Voor het behouden van eerdere inspanningen op S5L iPods (Linux4Nano tijdperk) en het succesvol draaien van Linux op een clickwheel iPod.
  • QEMU: Voor inzichten in de structuur van de codebase en de werking van bepaalde apparaten.
  • Sean Purcell: Voor het schrijven van het grootste deel van armv4t_emu.