TASVideos

Tool-assisted game movies
When human skills are just not enough

Submission #5518: Sonikkustar & Alyosha's SMS Psycho Fox in 02:02.17

Console: Sega MasterSystem
Game name: Psycho Fox
Game version: USA/Europe
ROM filename: Psycho Fox (USA, Europe).sms
Branch:
Emulator: BizHawk 1.12.2
Movie length: 02:02.17
FrameCount: 7321
Re-record count: 137
Author's real name: David M
Author's nickname: Sonikkustar & Alyosha
Submitter: Alyosha
Submitted at: 2017-05-22 00:38:05
Text last edited at: 2017-06-09 09:46:31
Text last edited by: fsvgm777
Download: Download (2974 bytes)
Status: published
Click to view the actual publication
Submission instructions
Discuss this submission (also rating / voting)
List all submissions by this submitter
List pages on this site that refer to this submission
View submission text history
Back to the submission list
Author's comments and explanations:
Psycho Fox is a simple platformer for the Sega Master System. This run is a real time improvement over the currently published run thanks to some devious abuse of the SMS architecture.

Game objectives

  • Emulator used: BizHawk 1.12.2
  • Beats the game as fast as possible
  • Abuses programming errors

Comments

This one might be a bit controvertial but I figured it's an interesting enough circumstance that is was worth trying to put on the workbench. This trick was originally pointed out by MESHUGGAH here as a possible emulator bug. But as it turns out, this is a valid trick that just so happens to be possible due to a simple programming oversight.

The improvement in this run is entirely due to reducing loading times by abusing non-maskable interrupts (NMIs) that are generated in the SMS when the 'pause' button is hit. It might seem counter-intuitive that pressing the pause button would make a game go faster, but it does turn out to be the case if pressed at the right time.

Here is what the game is doing during typical loading screen frame:

  Halt, wait for interrupt (~50000 cycles)
  Vblank, Execute necessary code for the frame (~7000 cycles)
  Repeat
What happens when you press pause, is that an NMI occurs in those ~50000 cycles where nothing is happening. The NMI itslef doesn't do anything important except for Return to where the code would be executing after a normal interrupt, so basically it's doing two frames in one. EX:

  Halt, wait for interrupt (zero cycles in this case since pause is pressed immediately)
  NMI
  Execute frame code
  Halt again
  VBlank, frame code again
The basic idea is that the return from interrupt returns to the same place regardless of which interrupt is triggered. There is plenty of time in a frame to add another interrupt without effecting anything else.

And that's all there is to it!

So is it legit? Personally I think so, it's valid input that is doable real time (since on average you'd hit an NMI during HALT about 75% of the time.) And, why would you not want loading screens to go faster?


feos: At the first glance it looked like a rejection to me, because not a single frame of gameplay was improved through optimization. But I double-checked, and there's no rule demanding that for every obsoletion, only for switching game regions. So yeah, as long as something can be sped up with player input alone, it is considered an optimization technique. Accepting as an improvement to [1996] SMS Psycho Fox (USA/Europe) by Sonikkustar in 02:10.27.

fsvgm777: Processing.


Similar submissions (by title and categories where applicable):