What would you recommend as the things they would need to learn (as well as equipment to have) to do so? And please don't say "a six-year degree from MIT".
Let's say a favorite nephew came up to you (who know how to do this) and said, "I want to learn how to do this myself". What steps would you give them to accomplish this task?
I'd show them an example of one I'd already done, but explain to them that there are often deviations from the "happy path" that make some more difficult than others.
The basic formula is something like this:
Look at MAME source for game for helpful info (input ports, RAM locations, player start buttons)
Using Mame, run game with trace log on.
Do it again, this time coin up the game.
Compare logs to see where code deviates.
Set breakpoints nearby and this time monitor RAM, so after crediting, note which memory locations are being incremented.
Look for code referencing the inportant information retained from MAME source.
Run MAME, tracing after coin 1 input
Run again, this time tracing after pressing player 1. Compare deviations. What gets modified in that fork should be credit data (set breakpoints to verify, watching the RAM again).
So, at this point, you're familiar with where the coinup happens, the code necessary to start the game, and the necessary memory locations to update.
Then stuff forks from here...
1) Does the game have demo mode that you want to show free play during? That's extra work
2) Does the game have battery? Need to take reseting credit count into consideration.
3) Does the game have an intermediary prompt screen ones credits are added? More stuff to deal with.
Eventually it comes down to using jumps in the code to jump over stuff you don't want to happen, jumping to custom code to handle player 1/player 2 button automatically starting the game (it's added to the main demo mode loop), finding room for that custom code, removing code that resets crediting information, maybe figuring out the text writing algorithm to put "free play" on the screen, finding logic to determine when the game is in demo mode vs game mode (you don't want your code to be executing during game mode).
Then after all that, you need to find and understand the checksum logic most games have, find a free byte to set the checksum value correctly. All of this may happen over several ROMs, each needing their checksums tweaked.
I ask because I'd like to learn myself, and it seems nobody else wants to make any for the "crappy" games I want them for (without money).
I assume you'd need a ROM burner (got one). You'd need to know how to use some type(s) of programming code. You'd need to know how to read the code in a way to determine where to alter or add the Free Play option. You'd probably need some type of code software or compiler. Maybe some knowledge of modifying the hardware?
Can anyone give specifics? I have no problem getting books or whatever to teach myself....
You'll need MAME, the source for MAME, HexEdit, CompareIt!, a Disassembler for the processor the system uses, learn all the tricks of MAME debugging, the Disassembler, etc. And learn the main commands of the processor language so you can follow along in the code while debugging, then beyond reading, being able to write small samples of the assembler to do exactly what you want, all without disturbing any variables or memory locations the game might need to run properly. Not to mention all the code studying needed above. Above all that, you might find (as I have for some games), that there's just no easy way to implement it.
It's a huge investment in time to learn to do all this. Heck, people pay $50+ for freeplay kits, it's basically the same thing, so if you have a potential monetary solution to your problem, consider taking it. If you have lots of free time on the other hand, start studying your game of choice, find some tutorials for the processor language online, download mame source and some other applications and jump in; we could use some more free play modders around here.