Dit artikel beschrijft een port van Super Mario 64 (sm64ex) naar de Zune HD. Het spel draait grotendeels op volledige snelheid en ondersteunt geluid, save-functies en aanraakbediening.
De belangrijkste technische details zijn:
- Vereisten: Voor de installatie is een Zune HD (firmware 4.5), een legale Super Mario 64 ROM en een x86-64 Linux-computer met Docker en git nodig.
- Build-proces: Het bouwen gebeurt via Docker-containers. De broncode wordt gecompileerd met de Microsoft 2008 ARM-compiler onder Wine, waarbij shaders vooraf zijn gecompileerd met NVIDIA Tegra-tools.
- Installatie: De implementatie vindt plaats via een
deploy-commando dat het pakket via USB op het apparaat zet, gebruikmakend van een XNA-launcher van OpenZDK om native code te starten.
- Configuratie: Gebruikers kunnen via build-flags instellingen aanpassen, zoals de transparantie van de touch-knoppen en frame-skipping opties.
- Onderhoud: Het artikel bevat uitgebreide instructies voor probleemoplossing en het versturen van crash-logs via Wi-Fi naar de computer.
Het project is uitgebracht onder de MIT-licentie en is niet officieel ondersteund door Nintendo of Microsoft.
Super Mario 64 voor de Zune HD
Let op: Deze repository bevat geen enkel onderdeel van het spel en er wordt nergens een kant-en-klaar spel aangeboden. Je dient zelf de ROM te leveren tijdens het build-proces.
Vereisten
Om dit project te gebruiken, heb je het volgende nodig:
- Hardware: Een Zune HD en de bijbehorende USB-kabel. Tot nu toe is alleen firmware 4.5 getest.
- Software (ROM): Een Super Mario 64 (USA) ROM, gedumpt van je eigen cartridge. De checksum moet
9bef1128717f958171a4afac3ed78ee2bb4e86ce zijn; het build-proces controleert dit.
- Systeem: Een x86-64 Linux-computer met Docker en git, 6 GB vrije schijfruimte en een internetverbinding voor de eerste build.
Het bouwen en implementeren gebeurt via Docker; er is momenteel geen workflow beschikbaar voor installatie direct op het systeem (bare-metal).
Bouwen en installeren
Voer de volgende commando's uit:
git clone https://github.com/rsheldiii/sm64-zune
cd sm64-zune
./sm64zune build pad/naar/jouw-rom.z64
./sm64zune deploy
De eerste run duurt vijf tot tien minuten. Tijdens dit proces wordt het build-containerimage aangemaakt en wordt er gevraagd om toestemming voor het downloaden van de compilers.
Het commando deploy maakt gebruik van een aparte container die het voltooide pakket installeert op de Zune die via USB is aangesloten. Sluit eerst alle actieve applicaties op de Zune af.
Spelen
Houd drie vingers gedurende twee seconden op het scherm om het spel af te sluiten.
Build-flags
De flags worden gekozen op het moment dat het spel wordt gebouwd.
| Flag | Waarden | Standaard | Beschrijving |
ZUNEFRAMESKIP | never, sustained, always | sustained | Wat te doen als de Zune het tempo niet kan bijhouden: vertragen zoals de N64 (never) of bepaalde frames overslaan. |
ZUNETOUCHBUTTONS | hidden, outline, filled | filled | Hoe de aanraakbediening wordt getekend. Ze werken in elke stijl hetzelfde. |
ZUNETOUCHOPACITY | 10 tot 100 | 80 | De sterkte van de weergave van de bedieningselementen, in procenten. |
ZUNE_LOG | off, on | off | Houd een logboek bij en stuur dit naar je computer; zie "Logs verkrijgen". |
ZUNELOGHOST | een IPv4-adres | deze computer | Waar het logboek naartoe wordt gestuurd. |
ZUNE_PROFILE | off, on | off | Een profiler, bedoeld voor het werken aan de port. |
Flags instellen
Je kunt flags meegeven tijdens het bouwen: ./sm64zune build rom.z64 --define ZUNETOUCHBUTTONS=outline --define ZUNETOUCHOPACITY=50
Gebruik ./sm64zune settings om de huidige build-flags en de waarden voor de volgende build te bekijken.
Om een flag permanent vast te leggen voor elke build, voeg je regels in het formaat NAAM=WAARDE toe aan een bestand genaamd settings.local in dezelfde map als sm64zune.
Probleemoplossing
deploy meldt "not installed" Sluit alle actieve programma's op de Zune, koppel het apparaat los, sluit het opnieuw aan, wacht tot het "connected"-scherm verschijnt en voer ./sm64zune deploy opnieuw uit. Details zijn te vinden in build/logs/deploy.log. Docker moet in staat zijn om een USB-apparaat aan een container door te geven (standaard 'rootful' Docker kan dit).
Het spel sluit direct na het opstarten Waarschijnlijk is het kopiëren voortijdig afgebroken. Voer de deploy-stap opnieuw uit.
Het spel stopt met een foutmelding De melding bevat de naam van de build en twee adressen. Op de computer waarop het spel is gebouwd, kun je met python3 tools/symbolize.py ADRES ADRES deze adressen omzetten in functienamen. Open een 'issue' op GitHub met de foutmelding en deze functienamen.
Logs verkrijgen
Omdat er via USB geen bestanden van een Zune kunnen worden gelezen, stuurt het spel het logboek via Wi-Fi zodra je het spel afsluit:
./sm64zune build rom.z64 --define ZUNE_LOG=on
./sm64zune deploy
./sm64zune logs (laat dit commando draaien; het wacht op het logboek)
Koppel de Zune los (Wi-Fi is uitgeschakeld tijdens USB-verbinding), speel het spel en sluit het af met het drievinger-gebaar. Het logboek komt terecht in build/logs/zune/, waarbij crashes worden weergegeven met functienamen. De Zune moet zich in hetzelfde netwerk bevinden als de computer, die luistert op poort 8767 terwijl ./sm64zune logs actief is. Als het logboek niet kan worden verzonden, blijft het op de Zune staan en wordt het bij de volgende sessie verzonden.
Let op: Logs worden alleen geüpload bij het afsluiten met het drievinger-gebaar. Een crash (inclusief tijdens het opstarten) kan het eigen logboek niet uploaden; een volgende succesvolle run moet dit doen. Het crash-berichtvenster op de hardware vereist nog steeds een bevestiging.
Opnieuw beginnen
./sm64zune clean: verwijdert alles wat is gebouwd vanuit jouw ROM.
./sm64zune clean --all: verwijdert daarnaast ook de gedownloade compilers.
Hoe het werkt
De build van sm64ex extraheert de assets uit je ROM en genereert de broncode. Deze broncode, samen met compatibiliteits- en prestatiepatches en de Zune-laag in platform/, wordt gecompileerd met de Microsoft 2008 ARM-compiler onder Wine.
Omdat de grafische driver van de Zune geen shaders kan compileren, worden de shaders van het spel vooraf gecompileerd met de NVIDIA Tegra-tools en in het spel ingebouwd.
De Zune start alleen XNA-programma's. Daarom bevat het pakket de kleine XNA-launcher van OpenZDK (launcher/), die vervolgens het native spel start. zune-deploy installeert dit pakket via USB.
Voor meer informatie zie docs/porting.md.
Downloads tijdens het build-proces
Het commando ./sm64zune build toont een lijst met benodigdheden en vraagt om toestemming voordat deze naar build/toolchain worden gedownload. Elke download wordt gecontroleerd via een SHA-256 hash in tools/fetch.py.
| Onderdeel | Bron | Grootte |
| Microsoft Visual C++ 2008 ARM compiler (12 bestanden) | Microsoft Visual Studio 2008 trial ISO (alleen benodigde cabinets) | 24 MB |
| OpenZDK 4.5 headers en libraries | openZDK-quick-start-kit | 6 MB |
| NVIDIA cgc en shaderfix | NVIDIA Tegra 250 Windows CE 6 platform pack | 36 MB |
| Khronos EGL en OpenGL ES 2 headers | Khronos registries | 0.4 MB |
De container-images bevatten Debian met Wine en build-tools, en zune-deploy met de bijbehorende Zune-runtimebestanden. sm64ex is een git-submodule die tijdens het bouwen wordt opgehaald.
Licenties en disclaimers
De eigen code van dit project valt onder de MIT-licentie. De renderer-backend is afgeleid van Fast3D, waarvan de licentie het distribueren van een gebouwd spel met assets waarover je geen distributierechten hebt, verbiedt. De volledige voorwaarden staan in het LICENSE-bestand.
sm64-zune is niet gelieerd aan, onderschreven door of gesponsord door Nintendo of Microsoft. Super Mario 64 is eigendom van Nintendo; Zune is eigendom van Microsoft. Vraag hier niet om een ROM of een kant-en-klaar spel.
Het spel draait als native code op je Zune via OpenZDK, wat nooit officieel door Microsoft is ondersteund. Er wordt niets gewijzigd in de firmware van de Zune, maar je gebruikt dit op eigen risico.
Credits
- De Super Mario 64 decompilation, en de bijdragers van sm64-port en sm64ex.
- Emill en MaikelChan voor de Fast3D renderer.
- itsnotabigtruck en het OpenZDK-team voor native code op de Zune HD, en ZuneRedux voor het beschikbaar houden van de kit.
- gigalasr voor zune-deploy.
Super Mario 64 voor de Zune HD
Let op: Deze repository bevat geen enkel onderdeel van het spel en er wordt nergens een kant-en-klaar spel aangeboden. Je dient zelf de ROM te leveren tijdens het build-proces.
Vereisten
Om dit project te gebruiken, heb je het volgende nodig:
- Hardware: Een Zune HD en de bijbehorende USB-kabel. Tot nu toe is alleen firmware 4.5 getest.
- Software (ROM): Een Super Mario 64 (USA) ROM, gedumpt van je eigen cartridge. De checksum moet
9bef1128717f958171a4afac3ed78ee2bb4e86ce zijn; het build-proces controleert dit.
- Systeem: Een x86-64 Linux-computer met Docker en git, 6 GB vrije schijfruimte en een internetverbinding voor de eerste build.
Het bouwen en implementeren gebeurt via Docker; er is momenteel geen workflow beschikbaar voor installatie direct op het systeem (bare-metal).
Bouwen en installeren
Voer de volgende commando's uit:
git clone https://github.com/rsheldiii/sm64-zune
cd sm64-zune
./sm64zune build pad/naar/jouw-rom.z64
./sm64zune deploy
De eerste run duurt vijf tot tien minuten. Tijdens dit proces wordt het build-containerimage aangemaakt en wordt er gevraagd om toestemming voor het downloaden van de compilers.
Het commando deploy maakt gebruik van een aparte container die het voltooide pakket installeert op de Zune die via USB is aangesloten. Sluit eerst alle actieve applicaties op de Zune af.
Spelen
Houd drie vingers gedurende twee seconden op het scherm om het spel af te sluiten.
Build-flags
De flags worden gekozen op het moment dat het spel wordt gebouwd.
| Flag | Waarden | Standaard | Beschrijving |
ZUNEFRAMESKIP | never, sustained, always | sustained | Wat te doen als de Zune het tempo niet kan bijhouden: vertragen zoals de N64 (never) of bepaalde frames overslaan. |
ZUNETOUCHBUTTONS | hidden, outline, filled | filled | Hoe de aanraakbediening wordt getekend. Ze werken in elke stijl hetzelfde. |
ZUNETOUCHOPACITY | 10 tot 100 | 80 | De sterkte van de weergave van de bedieningselementen, in procenten. |
ZUNE_LOG | off, on | off | Houd een logboek bij en stuur dit naar je computer; zie "Logs verkrijgen". |
ZUNELOGHOST | een IPv4-adres | deze computer | Waar het logboek naartoe wordt gestuurd. |
ZUNE_PROFILE | off, on | off | Een profiler, bedoeld voor het werken aan de port. |
Flags instellen
Je kunt flags meegeven tijdens het bouwen: ./sm64zune build rom.z64 --define ZUNETOUCHBUTTONS=outline --define ZUNETOUCHOPACITY=50
Gebruik ./sm64zune settings om de huidige build-flags en de waarden voor de volgende build te bekijken.
Om een flag permanent vast te leggen voor elke build, voeg je regels in het formaat NAAM=WAARDE toe aan een bestand genaamd settings.local in dezelfde map als sm64zune.
Probleemoplossing
deploy meldt "not installed" Sluit alle actieve programma's op de Zune, koppel het apparaat los, sluit het opnieuw aan, wacht tot het "connected"-scherm verschijnt en voer ./sm64zune deploy opnieuw uit. Details zijn te vinden in build/logs/deploy.log. Docker moet in staat zijn om een USB-apparaat aan een container door te geven (standaard 'rootful' Docker kan dit).
Het spel sluit direct na het opstarten Waarschijnlijk is het kopiëren voortijdig afgebroken. Voer de deploy-stap opnieuw uit.
Het spel stopt met een foutmelding De melding bevat de naam van de build en twee adressen. Op de computer waarop het spel is gebouwd, kun je met python3 tools/symbolize.py ADRES ADRES deze adressen omzetten in functienamen. Open een 'issue' op GitHub met de foutmelding en deze functienamen.
Logs verkrijgen
Omdat er via USB geen bestanden van een Zune kunnen worden gelezen, stuurt het spel het logboek via Wi-Fi zodra je het spel afsluit:
./sm64zune build rom.z64 --define ZUNE_LOG=on
./sm64zune deploy
./sm64zune logs (laat dit commando draaien; het wacht op het logboek)
Koppel de Zune los (Wi-Fi is uitgeschakeld tijdens USB-verbinding), speel het spel en sluit het af met het drievinger-gebaar. Het logboek komt terecht in build/logs/zune/, waarbij crashes worden weergegeven met functienamen. De Zune moet zich in hetzelfde netwerk bevinden als de computer, die luistert op poort 8767 terwijl ./sm64zune logs actief is. Als het logboek niet kan worden verzonden, blijft het op de Zune staan en wordt het bij de volgende sessie verzonden.
Let op: Logs worden alleen geüpload bij het afsluiten met het drievinger-gebaar. Een crash (inclusief tijdens het opstarten) kan het eigen logboek niet uploaden; een volgende succesvolle run moet dit doen. Het crash-berichtvenster op de hardware vereist nog steeds een bevestiging.
Opnieuw beginnen
./sm64zune clean: verwijdert alles wat is gebouwd vanuit jouw ROM.
./sm64zune clean --all: verwijdert daarnaast ook de gedownloade compilers.
Hoe het werkt
De build van sm64ex extraheert de assets uit je ROM en genereert de broncode. Deze broncode, samen met compatibiliteits- en prestatiepatches en de Zune-laag in platform/, wordt gecompileerd met de Microsoft 2008 ARM-compiler onder Wine.
Omdat de grafische driver van de Zune geen shaders kan compileren, worden de shaders van het spel vooraf gecompileerd met de NVIDIA Tegra-tools en in het spel ingebouwd.
De Zune start alleen XNA-programma's. Daarom bevat het pakket de kleine XNA-launcher van OpenZDK (launcher/), die vervolgens het native spel start. zune-deploy installeert dit pakket via USB.
Voor meer informatie zie docs/porting.md.
Downloads tijdens het build-proces
Het commando ./sm64zune build toont een lijst met benodigdheden en vraagt om toestemming voordat deze naar build/toolchain worden gedownload. Elke download wordt gecontroleerd via een SHA-256 hash in tools/fetch.py.
| Onderdeel | Bron | Grootte |
| Microsoft Visual C++ 2008 ARM compiler (12 bestanden) | Microsoft Visual Studio 2008 trial ISO (alleen benodigde cabinets) | 24 MB |
| OpenZDK 4.5 headers en libraries | openZDK-quick-start-kit | 6 MB |
| NVIDIA cgc en shaderfix | NVIDIA Tegra 250 Windows CE 6 platform pack | 36 MB |
| Khronos EGL en OpenGL ES 2 headers | Khronos registries | 0.4 MB |
De container-images bevatten Debian met Wine en build-tools, en zune-deploy met de bijbehorende Zune-runtimebestanden. sm64ex is een git-submodule die tijdens het bouwen wordt opgehaald.
Licenties en disclaimers
De eigen code van dit project valt onder de MIT-licentie. De renderer-backend is afgeleid van Fast3D, waarvan de licentie het distribueren van een gebouwd spel met assets waarover je geen distributierechten hebt, verbiedt. De volledige voorwaarden staan in het LICENSE-bestand.
sm64-zune is niet gelieerd aan, onderschreven door of gesponsord door Nintendo of Microsoft. Super Mario 64 is eigendom van Nintendo; Zune is eigendom van Microsoft. Vraag hier niet om een ROM of een kant-en-klaar spel.
Het spel draait als native code op je Zune via OpenZDK, wat nooit officieel door Microsoft is ondersteund. Er wordt niets gewijzigd in de firmware van de Zune, maar je gebruikt dit op eigen risico.
Credits
- De Super Mario 64 decompilation, en de bijdragers van sm64-port en sm64ex.
- Emill en MaikelChan voor de Fast3D renderer.
- itsnotabigtruck en het OpenZDK-team voor native code op de Zune HD, en ZuneRedux voor het beschikbaar houden van de kit.
- gigalasr voor zune-deploy.