1964 0.85
Self Modifying code is rom game code or other binary data that is changed at an address for one reason or another, when it was once something else. You can't emulate the old instructions since the memory has changed, so you need to detect when this occurs. Protect Memory is the fastest method for detection. Of course, No_Check should be fastest, but only some games like Mario and MarioKart will work with No Check, because they don't have self-modifying code.
Check Block+DMA is the slowest, because it checks every DWORD in the block of code for a change. It also checks for modifications in the DMA. So, Protect Memory is the way to go, but if a game isn't working with it, try one of the slower methods. The other methods (like "Check DWORD") just check the first few bits (DWORD) in the block for a change.
1964 1.1
From time to time, a ROM will want to transfer new code to a location in memory which overwrites old code that was there previously. For the sake of simplicity, we refer to these situations as self-modifying code. Self-modifying code has the consequence of rendering invalid the code that we compiled for that location, since the virtual machine instructions at those addresses have been altered. One fast solution to this problem is memory protection. With memory protection, we can detect when these writes occur, and then invalidate blocks of compiled code. There are rare situations in which the protected memory detection method is not sufficient. For this reason, other slower options are available. Protect Memory is the default setting. Using No Check should be fastest, but is only feasible for some demos and is not recommended.
The other slower options are:
Self-Modifying Code Detection Method In a block of Code, check for a change in: Check DMA Only The entire code within DMA transfers Check DWORD The first 32bits Check QWORD The first 64bits Check QWORD and DMA The first 64bits and the entire code within DMA transfers Check Block The entire block Check Block and DMA The entire block and the entire code within DMA transfers For these methods, the more checking that is done, the more complete the testing is. Of course, the consequence is speed. Fortunately, most games can use Protect Memory which is fast. A few Turok: Dinosaur Hunter is a known exception. Check QWORD should suffice for it.