The built-in debugger in MAME makes it an excellent tool when hacking video games. I use it all the time on code changes for the Williams games. It's easier to debug code under MAME before burning EPROMs for the real game.
One issue is that the latest version of MAME will not allow you to run a patched ROM image - you get an error message that a file is missing. You can fix this by compiling MAME yourself and patching the hashes for the files you edit. The file src\mame\drivers\williams.c has a line for each ROM file for each game:
ROM_LOAD( "robotron.sba", 0x0d000, 0x1000, CRC(13797024) SHA1(d426a50e75dabe936de643c83a548da5e399331c) )
This tells the file name to load, where to put it in memory, how big it is, and what the CRC and SHA1 hashes of the file are. It is these hashes that are used to verify the ROM images. If they are incorrect, the game won't run, so you have to patch the hashes after modifying the ROM images.
This page gives the CRC and SHA1 for any file.
For instance, for the Robotron shot-in-the-corner bug fix, you need to patch 2 files and modify the code to the following:
If you don't want to do the work to compile MAME (it's not that hard), you can hex-edit the executable file mame.exe, search for the lines, and modify them.
If you are hacking and changing ROM contents a lot, it's a pain to keep updating the hashes. Instead of specifying the CRC() and SHA1(), you can use NO_DUMP:
When you start MAME, it will give a warning, but if you type OK, you can proceed.