NIV seems to have expected clock() to return a value corresponding to 1/10ths of seconds. For instance, it expected less than 9 clock() units to pass between mouse presses in a double click. In windows (and ordinarily in general) you have to use the CLK_TCK constant to convert from clock ticks to seconds. DMC uses esi in switch statements, which was causing one function in NICE to crash in windows (Stick), since it set esi before the switch and then used it inside the case statements. (Ordinary NIV uses si instead of esi, but I don't know what BC 3.1 used for the switch var. Now, this was the only place in the code where a register was set before a switch statement and then the register was used afterwards without re-setting it) ebp is used for referring to local variables and function parameters, so it has to be preserved if you refer to a local variable or parameter with an index in asm (ex: someLocalVar[esi]), DMC assumes you will be specifying (as part of the index) how to access the variable yourself - in other words, someLocalVar[0] would become (for instance) ebp-0x5 whereas someLocalVar[eax] would become -5+esi. So you have to specify ebp yourself: someLocalVar[ebp+esi]. BC 3.1 doesn't do that. In NICE I fixed this by #define'ing LOCALVAR to ebp+ in windows and nothing in DOS, so I could write someLocalVar[LOCALVAR esi]. (Technically BC 3.1's inline assembler doesn't recognize the 32-bit register names (like esi), but that's a different issue entirely)