petercooperon Hacker News • Recommends
On “Let’s Create a Speech Synthesizer in C++17 [video]”
147K subscribers • 9 videos on Hallway
Advanced. Deep dive for people who know the field.
389K views14 years ago3 recommendations
Systems programmingHistory and cultureRetro computingC++
Bisqwit demonstrates how to build an accurate NES emulator in C++ using compile-time template metaprogramming for instruction decoding.
In this tool-assisted education video I create a NES emulator with C++0x. ENABLE CAPTIONS! The emulator is very accurate, and sort-of portable; it compiles on any architecture that support libSDL, but it outputs audio through an external program and reads joypad input from a file. This video is part 1/2. -- Part 1 ( youtu.be/y71lli8MS8s ): Creating the emulator. -- Part 2 ( youtu.be/XZWw745wPXY ): Compiling and running. Twitter: twitter.com/RealBisqwit Patreon: patreon.com/Bisqwit (alternatives at iki.fi/bisqwit/donate.html) Twitch: twitch.tv/RealBisqwit Homepage: iki.fi/bisqwit/ The source code is about 940 lines in total. Download & FAQ & resources: bisqwit.iki.fi/jutut/kuvat/programming_examples/nesemu1/ Approximate count of lines of code per topic, in the source code: - 20 lines, CPU: Declarations (registers, flags and internal memory) - 100 lines, CPU: Interpreting and executing CPU opcodes & signals - 100 lines, CPU&GamePak: Memory mapping (iNES mappers 0,1,2,3,7 are supported) - 40 lines, PPU: Declarations (registers and emulator-specific status variables) - 50 lines, PPU: Memory mapping and I/O - 180 lines, PPU: Rendering and timing control - 30 lines, PPU & IO: Joypad updating (PPU provides the timing for input-file access) - 40 lines, PPU & IO: Color NTSC emulation (converting NES colors into RGB through NTSC modem) - 15 lines, IO: libSDL initialization and rendering - 35 lines, main&IO: ROM loading from file, initialization and emulation loop - 200 lines, APU: Sound emulation (of which 40 lines are because of DMC/DPCM support) - 130 lines, (other, such as comments, and inaccuracies in the above numbers) Check out MaiZure’s excellent walkthrough of the source code of the emulator from this video! maizure.org/projects/decoded-bisqwit-nes-emulator/ Background music: Jinguuji detective series. It was difficult to choose. I wanted good NES music, but I did not want it to too recognizable. I intended to convert something, but I had already spent months on this video... It was getting late. Because of the 15 minute limit that YouTube was imposing on my account when I made this video, I had to develop many techniques to shorten the code dramatically. I also had to type it very quickly… And I had to split the actual demonstration into a second video. I use C++11 exclusive techniques extensively in the code. I am particularly proud of the CPU emulator. It is cycle and memory access accurate, and feature-complete. It is not very slow, either. It is only 100 lines long, thanks to a number of clever ideas. I thank byuu for a particular idea that helped make it horizontally shorter. Each if() in ins() is completely parsed and evaluated at compile-time. Effectively the compiler synthesizes 259 distinct ins() functions, each performing only the particular opcode's worth of work. I architected all the components in as close conformance as I could to whatever documentatiWhat people say. Widely recommended as a masterclass in clever C++ programming, template metaprogramming, and emulator design.
petercooperon Hacker News • Recommends
On “Let’s Create a Speech Synthesizer in C++17 [video]”
petercooperon Hacker News • Recommends
On “Ask HN: Your favorite YouTube channels?”
atestion Hacker News • Recommends
On “Nes emulator written in go”
petercooperon Hacker News • Recommends
On “Ask HN: What is your favorite YouTube channel for developers?”
molticrystalon Hacker News • Recommends
On “Smolnes: A NES emulator in less than 5000 significant bytes of C++”
GhotiFishon Hacker News • Mentions
On “A quick look at the Redis source code”
grapeshoton Hacker News • Mentions
On “Show HN: I made an easy-to-understand 6502 emulator in pure C”
iofjon Hacker News • Mentions
On “The Strange Appeal of Watching Coders Code”
0xcde4c3dbon Hacker News • Mentions
On “Goboy: Multi-Platform Nintendo Game Boy Color Emulator Written in Go”
u/Smellypuce2in r/C_Programming • Mentions
On “I'm going to start to write a NES emulator in plain C. So...”
u/serendibin r/C_Programming • Mentions
On “Writing an emulator”
u/ooqqin r/C_Programming • Mentions
On “How would one write an emulator in C?”