This is a nice list of some books and articles pertaining to the creation of emulators, learning how to program, what programming langauge might be right for you, and general reverse engineering/hacking.
Computer Architecture: A Quantitative Approach by John Hennessy and David Patterson
- The classic computer architecture textbook.
The Elements of Computing Systems by 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 by 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 by 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 by 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 by 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.
Hacking the Xbox by Andrew 'bunnie' Huang
- Hacking the Xbox is a great technical book for those of you who want to understand how a console is hacked from a hardware point of view. This is a great introduction to hacking in general.
I want to be a game developer... now what? by GameFromScratch.com
- An introduction to programming languages for aspiring developers. While this article is more focused towards those interested in game development, it outlines the pros and cons of what to learn as a first language, as well as advice and recommendations on how to start learning and what books you should read.
- Post by someone who was seeing if static recompiling was viable for emulation. Has detailed info about NES ROMs and code snippets from his emulator with explanations about how it was made. Assumes you now how to code.