I’ve been asked a few times if there are any good resources for learning about writing emulators, so I pulled some books off my shelf that I consider solid buys. Non-book resources are almost always code from real emulators, mainly recent projects for older systems (like JSNES).
Computer Architecture: A Quantitative Approach, John Hennessy and David Patterson
The classic computer architecture textbook. Having this on your bookshelf instantly makes you 10x cooler.
The Elements of Computing Systems, Noam Nisan and Shimon Schocken
A quick tour of an entire system, from gate logic through running user code. A bit brief, but it’s well written and has a very nice flow.
Virtual Machines, James Smith and Ravi Nair
One of the few books specifically about virtual machines, this book touches on just about every type from the JVM to system level VM’s like Xen. The balance of breadth and depth here is perfect – it’s essentially a survey of the field with enough detail about common techniques and gotchas to really help in the research process.
Reversing: Secrets of Reverse Engineering, Eldad Eilam
The book on reverse engineering. Everything one needs to learn to reverse modern, complex applications, operating systems, and file formats. Can’t recommend this book enough!
The IDA Pro Book, Chris Eagle
If you sink the money into a copy of IDA Pro, an extra bit of change for this book is well worth it to help get the most out of the tool. Covers some similar topics to Reversing, but with much more of a practical slant.
Hacker’s Delight, Henry S. Warren, Jr.
The bible of perverse math hacks. When it comes to implementing some of the more bizarre instructions in a system (bit counting/swapping, numerical conversion, rounding, etc) a lot of the tricks covered in this book can help get the extra speed required.
On a related note, here’s a book not to buy: Xbox 360 Forensics by Steven Bolt. It’s horrible. Really bad. Avoid.