Emulator Examination by Stargaze, presented at #revision2026 for the Nintendo DSi

Emulator broken in 4 different, independent ways. New hardware bugs discovered. Writeup will come "soon".

Download: https://stargaze.group/releases/sgz_rvn26_ee.zip

Demozoo: https://demozoo.org/productions/389916/

Pouët: https://www.pouet.net/prod.php?which=105928

see if you can find the hidden part!

Now with "source code" (public source dump, 0 documentation, like a real scene prod):

https://codeberg.org/PoroCYon/emulator-examination

emulator-examination

Source code of https://www.pouet.net/prod.php?which=105928

Codeberg.org

Rejoice, as I've written a writeup on how exactly Emulator Examination breaks your emulators: https://codeberg.org/PoroCYon/emulator-examination/wiki/Home

I feel like a diagram might be needed to explain the "eye test" effect better? But also it's past 3 AM here so if people want it, I'll do it tomorrow.

Home

Source code of https://www.pouet.net/prod.php?which=105928

Codeberg.org

Final version of "Emulator Examination", with compatibility fix for DWM-W015 Wifi modules, is available now!

https://www.pouet.net/prod.php?which=105928#c1044813 / https://demozoo.org/productions/389916/

Source code diff is also available: https://codeberg.org/PoroCYon/emulator-examination/commit/fcafbd3a6986e56afe41e59cce0d4813ae120a80

Emulator Examination by Stargaze

demo for Nintendo DS, 9th at Revision 2026

pouët.net
@pcy lol jesus. Specifics are hard but I guess the gist is if you swap background mode mid scanline the PPU in some cases uses wrong tile data due to a prefetch… happening? not happening? and the exact behavior is very timing dependent and also slightly weird?

@halcy it's because of a regular fetch not having already happened, and tile/map index/data latches being reset to 0 as a consequence

it also upsets the horizontal-pixel-inside-a-tile counter, but in a way I don't fully understand. the T/Y graphic is declared as this in the demo: https://codeberg.org/PoroCYon/emulator-examination/src/branch/main/arm9/source/main_ntr.c#L37-L46 , but it gets displayed correctly 'somehow'. it's not just by rotating the columns around, some get duplicated and others don't get shown at all

emulator-examination/arm9/source/main_ntr.c at main

emulator-examination - Source code of https://www.pouet.net/prod.php?which=105928

Codeberg.org
@halcy another fun bonus detail is that it's possible to disable an affine background for one bus cycle when its internal UV coord gets updated, and then reenable it the next cycle. if you time it correctly (I haven't figured out the exact timing yet), it's possible to always keep the background layer as visible, but have it repeat the previous pixel due to the UV getting stuck. there's also one cycle during hblank where it updates the Y-axis UV instead, making it repeat whole scanlines instead of pixels
@halcy but yeah this is really getting into VIC-II -style hax territory but for the GBA/DS PPU
@pcy finally, vertical rasters for the DS but in the most roundabout way possible
@pcy woww i can't believe i wasn't credited for my hard work of remembering where i put my 3ds and then opening obs
Emulator Examination by Stargaze :: nfo :: pouët.net

pouët.net - your online demoscene resource

pouët.net
@pcy i tried checking the nfo on demozoo but it wanted me to sign in