Hackintosh 10.13.6 – Video playback issue

[🇩🇪: Diesmal eine kurze Notiz auf englisch, da ich mehrere Stunden nach einer Lösung für mein Problem gesucht habe, das Internet aber nichts ausspucken wollte]

On saturday I had upgraded my Hackintosh with a new graphics card:
AMD Radeon RX 590 (precise: XFX Radeon RX 590 Fatboy CORE Edition 8GB OC+)

Replacing the physical card was easy and macOS was booting without any issues. Everything seems to be working as intended but then I played a video file (h264/mp4) and noticed a massiv lag of the whole system.

The video file was loading extremly slow, the first few video frames where displayed after ~15-30 seconds, but pausing again every few seconds.

Console.app of macOS showed the following kernel error message, repeating over-and-over again until I quit the video player:

kernel: virtual IOReturn IOAccelEventMachine2::waitForStamp(int32_t, stamp_t, stamp_t *): timeout waiting for AMDRadeonAccelerator stamp 5 (gpu_stamp=4)
kernel: virtual void IOAccelEventMachineFast2::checkGPUProgress() - Signaling hardware error on channel 7..
kernel: void IOAccelEventMachine2::signalHardwareError(eRestartRequest, int32_t): GPURestartSignaled stampIdx=7 type=2 prevType=0 numStamps=20
kernel: void IOAccelEventMachine2::signalHardwareError(eRestartRequest, int32_t): GPURestartEnqueued stampIdx=7 type=2
kernel: void IOAccelEventMachine2::hardwareErrorEvent(): setting restart type to 2 (channel 7)
kernel: void IOAccelEventMachine2::hardwareErrorEvent(): GPURestartDeferred stampIdx=7 type=2
kernel: void IOAccelEventMachine2::hardwareErrorEvent(): GPURestartDeferred stampIdx=7 type=2
kernel: virtual IOReturn IOAccelEventMachine2::waitForStamp(int32_t, stamp_t, stamp_t *): a graphics error occurred, exitting..
kernel: void IOAccelEventMachine2::handleFinishChannelRestart(IOReturn, int32_t, uint32_t): GPURestartDequeued stampIdx=7 type=2 fromWhere=2 waitingOnIdx=7
kernel: virtual sIOAccelEvent *IOAccelFIFOChannel2::getFirstPendingEvent(): All are finished
[…]
kernel: virtual sIOAccelEvent *IOAccelFIFOChannel2::getFirstPendingEvent(): All are finished
kernel: void IOAccelEventMachine2::restart_channel(): GPURestartSkipped stampIdx=7 type=2
kernel: void IOAccelEventMachine2::restart_channel(): no channel associated with stamp_idx 7 (type 2)

The error occured with my default video player IINA, but also with VLC and QuickTime Player (X) – all with the same behavior.
(For some strange/unknown reason, playing the same video file through QuickLook worked flawless. 🤔)

I tried to search all over the internet for other people with the same issue. I though the most promising search terms should be „AMDRadeonAccelerator“ or „IOAccelEventMachine2“ – but I could not find anything.

After trying for ~4 hours with different Clover settings, new/updated/disabled kernel extensions and UEFI settings („CSM“, „Vt-d“) and finally got a tipp from a friend:
„Is the onboard (Intel) GPU deactivated?“

Surely enough the internal graphics was set to „Auto“ (my understanding: enable if needed). Changing it to „on“ fixed my issue!

It seems like my Hackintosh can’t request the enabling of the internal GPU from the system and this effected the native H264 decoding of my CPU. (I have not tested H265 playback yet, but I expect it to be working, too.)
Now everything is running smooth again! 🤩

Additional information (SEO)

  • Mainboard: GIGABYTE Z370 AORUS Gaming 3
  • CPU: Intel i7-8700k
  • Old GPU: EVGA GeForce GTX 1060 6GB
  • New GPU: XFX Radeon RX 590 Fatboy CORE Edition 8GB OC+

GameBoy Emulator auf iOS (Stand 12/2019)

Game Boy, SNES und Co. – wie so viele technikaffine Menschen schwärme ich bis heute von Pokémon, Mario, Zelda und Co.
Leider gibt es in Apples Appstore zwar über 250.000 mobile Games, doch keinen einzigen Emulator für Game Boy (Color)-Spiele.
Also habe ich mich selbst auf die Suche gemacht und möchte euch über den aktuellen Stand zum Thema „Gameboy auf einem iPhone/iOS Gerät“ informieren.

Während es auf einem Android Gerät reicht, sich einfach einen Emulator aus dem PlayStore zu installieren, ein paar seiner eigenen/Homebrew ROMs herüber zu kopieren und loszulegen, sieht die Sitation in Apples Ökosystem anders, nämlich deutlich restriktiver aus.

Apple erlaubt es Entwicklern nicht, Emulatoren im AppStore zu veröffentlichen. Dies gilt auch für andere Umgebungen, die fremden Code ausführen könnten.
Zwar versuchten hier und dort bereits Entwickler, Emulatoren in anderen Apps versteckt in den AppStore zu schmuggeln – diese Apps wurden aber innerhalb kürzester Zeit von Apple wieder entfernt.

Es gibt aber auch Wege am AppStore vorbei. Ich zeige euch zwei sichere Möglichkeiten in diesem Blogpost, so dass niemand sich mit windigen Entwicker-Zertifikaten oder einem Jailbreak herumärgern muss. Diese beiden Möglichkeiten sind:

  • WebApps (PWA)
  • Selbstsignierte Apps

PWA (Progressive Web Apps)

Erinnern wir uns an das Jahr 2006. Damals, unter iPhoneOS 1 – bevor es überhaupt den AppStore gab – war es die „Sweet solution„: WebApps
HTML, CSS und JavaScript sollten damals die Lösung sein, um dieses junge Betriebssystem mit Funktionen zu erweitern.

Und auch heute ist es ein Weg vorbei an Apples Zugangskontrolle.
Safari hat seit damals eine Funktion eingebaut, um Webseiten als Pseudo-Apps zum Homescreen hinzuzufügen und diese im Vollbild laufen zu lassen.

GamePlayColor

Webseite: https://gameplaycolor.com/
Unterstützt: GameBoy & GameBoy Color

Vorteile

  • Open Source (GitHub)
  • Mehrere Abspiel-Geschwindigkeiten
  • Verschiedene GameBoy Skins

Nachteile

  • Hoher Stromverbrauch (bedingt durch seine Bauweise als PWA)
  • Kein Export von Savegames
  • Kein Feedback/Vibration beim drücken der Knöpfe (PWA bedingt)
  • Benötigt Google Konto (Google Drive)

Hinweis: iOS 13 hat einige Funktionen des Browsers überarbeitet, welche u.a. die Emulator nutzen. Dieses Projekt wird aktuell von ein paar Entwicklern aufgefrischt und ist noch wieder ganz einsatzbereit.
Es gibt aber eine funktionierende Version unter folgendem Link:
https://brandosha.github.io/gameplay/index.html

Eclipse

Webseite: http://eclipseemu.me/
Unterstützt: GameBoy, GameBoy Color, GameBoy Advance, NES, SNES*

Vorteile

  • Unterstützt viele Plattformen
  • Verschiedene Controller Skins
  • Mobil und am Desktop nutzbar
  • Konfigurierbare Tastaturbelegung (z.B. iCade Bluetooth Controller)
  • Eingebauter Homebrew Repos

Nachteile

  • Hoher Stromverbrauch (bedingt durch seine Bauweise als PWA): Je jünger die Plattform ist, desto mehr Rechenpower wird benötigt
  • Closed Source, kann nicht selbst gehostet werden
  • Kein Feedback/Vibration beim Knöpfe drücken (PWA bedingt)
  • (Aktuell) Savegames/Settings können am iPhone nicht exportiert werden (offener Issue)
  • (Aktuell) Start/Select Knöpfe sind an aktuellen iPhones schwer zu treffen (offener Issue)

Hinweis: In meinem Test konnte ich mobil keine SNES Spiele starten, am Desktop funktionierte es.

Selbstsignierte Apps

Seit ein paar Wochen gibt es das Open Source Projekt AltStore von Riley Testut und Caroline Moore, welches die andere offizielle Möglichkeit, am AppStore vorbei Apps zu installieren, einfach möglich macht: Selbstsignierte Apps

Von Apple gibt es kostenlose Werkzeuge, um selbst Apps zu progammieren (einen Mac vorausgesetzt). Diese Apps könnt ihr dann auf euer iOS Gerät überspielen und nutzen. Leider gibt es hier eine Einschränkung: Diese Apps sind immer nur für 7 Tage gültig und können danach nicht mehr gestartet werden.

Hier setzt sich der AltStore dazwischen. Ihr installiert ein kleines Programm auf dem Windows PC/Mac und installiert mit Hilfe dieses Tool den AltStore auf eurem mobilen Gerät.
Aus dem Store heraus könnt ihr dann Delta installieren (siehe weiter unten).
Wenn die oben erwähnten 7 Tage nun dem Ende zu gehen, könnt ihr das Programm direkt von iOS aus dem AltStore (und Delta) frisch drüberbügeln. Vorraussetzung ist, dass der PC/Mac, auf dem ihr das Helferprogramm für den AltStore installiert habt, angeschaltet/im selben WLAN wie das mobile Gerät sein muss.

Das Projekt ist noch recht jung und es gibt aktuell nur eine App kostenlos zum Download. In Zukunft soll es aber noch viele andere geben – es sei denn, Apple legt den Machern größere Steine in den Weg.
In den letzten Wochen gab es von Apple bereits zwei Mal Anpassungen, welche den AltStore behindert haben. Diese Änderungen konnten vom Entwickler jedoch wieder ausgeglichen werden.
Man darf gespannt bleiben, wie lange das Projekt bestehen bleibt.

Delta

Webseite: https://deltaemulator.com/ bzw. https://altstore.io/
Unterstützt: GameBoy, GameBoy Color, GameBoy Advance, NES, SNES, Nintendo 64 (zukünftig auch Nintendo DS)

Vorteile

  • Unterstützt sehr viele Plattformen
  • Geringer Stromverbrauch
  • Verschiedene Skins
  • iOS Controller Support
  • MultiPlayer Support
  • Haptisches Feedback beim Knöpfe drücken
  • Cloud-Savegame Sync (Dropbox oder Google Drive)
  • Open Source

Nachteile

  • Größter Aufwand bei Installation und laufendem Betrieb
  • Ungewisse Zukunft

Schlusswort / Ausblick

Auch 13 Jahre nach Vorstellung des iPhones sind Emulation auf dem Apple Smartphone (oder Tablet) ein schwieriges Feld. Immerhin sind die Geräte mittlerweile so schnell, dass eine Emulation über den Browser durchaus eine Alternative zu richtigen Apps ist.

Leider ist der Stromverbrauch der WebApps recht hoch und so empfiehlt es sich immer eine (mobile) Stromquelle in der Nähe zu haben.

Vermutlich haben Delta und der AltStore „dank“ Apples Entwicklerteam ein stetiges Katz-und-Maus-Spiel vor sich. Wenn wir Glück haben, wird es aber nicht komplett nuklear eskalieren, zumindest so lange Apple einer potientieller Wettbewerbsklage keine Munition reichen möchte.