Technically the ScummVM shouldn't have been using BadVAddr and ExpectPC as variables. Didn't even realize they were writable. I'll give you the TRAP ops though ;*) The front end runs like crap in emulators (when you patch things up) on account for heavily looping float conversions and division. I'm not sure if a lot of you know this, but there were two code interpretters built into the GS. There's the 'active code list' feature attached to the trainer, used for codes created from searches and uploaded via PC at runtime. This accepted a list of actual GS codes written in binary and used an interpretter to execute them. The 'normal' codelist is entirely different. The GS generates ASM based on a formula for each type of code you entered. Annoyingly, the 50- type codes create a series of 8x style commands instead of looping. You could only use a 'GS button' type code in this list, and it tested a register to see if the GS button is pressed. Anyway, the point being that although the ASM is fairly long (and they made no attempt to reduce the size in any way) it does execute very fast. The biggest issue is that the trainer (especially the codegen trainer) wasn't exactly thread-safe. It only stored current registers as words, not doublewords, so register corruption was a problem with some titles and could be fatal!