It is currently Thu Dec 13, 2018 7:45 pm

All times are UTC - 7 hours





Post new topic Reply to topic  [ 3 posts ] 
Author Message
 Post subject: Telling LYs? (test ROM)
PostPosted: Sun Nov 11, 2018 6:46 pm 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 20870
Location: NE Indiana, USA (NTSC)
This program tests a Game Boy emulator's input entropy.

The Game Boy has an interrupt that can fire when a button changes from not pressed to pressed. This interrupt can fire at any time in the frame: top, middle, bottom, or in the vertical blanking between frames. A program can see exactly when the interrupt fired by inspecting a hardware register called LY, which presumably stands for LCD Y Position. For instance, it could wait for a press at the title screen and then seed a random number generator from LY.

But simple emulators always fire the joypad interrupt at the same time each frame, such as the start or end of vertical blanking. The lack of variance in LY is telling about whether an emulator was used; hence the name.

How to use

Starting at the title screen, press all four directions on the Control Pad and all four buttons (A, B, Select, and Start), one after another in any order. The arrow at the right side tells exactly when, relative to the LCD frame, your button changed from not pressed to pressed.
Attachment:
File comment: After having pressed six buttons
tellinglys.png
tellinglys.png [ 1.07 KiB | Viewed 1390 times ]

Once you have pressed all eight keys, a screen for passing or failing appears.

Test results

  • Game Boy (DMG), Game Boy Color (CGB): Pass
  • Game Boy Player (DOL-017): Pass
  • BGB 1.5.7: Pass
  • mGBA 0.8-5388-f92059be: Fail (though replies to issue #1232 dispute whether it's a bug at all)


Attachments:
tellinglys-0.01.zip [34.59 KiB]
Downloaded 61 times
Top
 Profile  
 
PostPosted: Sun Nov 18, 2018 8:21 am 
Offline

Joined: Wed Jun 15, 2016 11:49 am
Posts: 82
Ha! That's clever. I like trickery like this.


Top
 Profile  
 
PostPosted: Mon Nov 26, 2018 8:56 pm 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 20870
Location: NE Indiana, USA (NTSC)
I've noticed Super Game Boy behaves oddly. Press one button repeatedly, and the arrow moves down about once a second. It's as if SGB is polling the controller once per Super NES vblank (60.10 Hz, once every 1364*262-2 = 357366 vblanks) and immediately relaying it to the ICD2 chip sitting between the SGB CPU and the Game Pak connector.

Super NES vblank rate: once every 4*341*262-2 = 357366 master clocks, or 60.10 Hz
SGB vblank rate: once every 5*456*154 = 351120 master clocks, or 61.17 Hz

I was told in gbdev Discord that Game Boy Player Startup Disc polls the GameCube controller at 1000 Hz, and the GBA CPU produces video at 2^24/(4*308*228) = 59.73 Hz. This provides about log[2](1000 / 59.73) = 4.07 bits of entropy in the sub-frame timing of a button press as a lower bound for any GBA game or GBC-only game. DMG/GBC dual compatible games would have to find some other entropy source to seed the RNG on SGB, as a player who doesn't completely suck at rhythm games can time the initial Start press at the title screen to within a 66 ms (4 frame) window.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 3 posts ] 

All times are UTC - 7 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group