3.4.0 Release: NES Support (and New Book!)

We’ve added yet another platform to the 8bitworkshop IDE, the legendary Nintendo Entertainment System (NES)!

You can program in both C and 6502 assembler, and there are a ton of examples to get you started.

The IDE lets you write C using the cc65 compiler toolchain. While it has lower performance and greater code size than a well-written assembly program, you can still write a pretty good game in C. We use a fork of Shriu’s NESLib library to interface with NES hardware features, and Famitone to play music and sound.

The IDE also contains a handful of 6502 examples. They demonstrate how to initialize and warm up the PPU, basic display, scrolling, and controller management, and advanced tricks like scanline cycle counting and X/Y split screen.

And yes, that’s a Famicom (the original console released in Japan) pictured up there :)

New NES Book!

We’ve also got a new book, “Making Games for the NES”! (Kindle Edition) (Print Edition)

You’ll learn all about programming the NES – hardware, PPU video, sound and music, scrolling, color palettes, split-screen effects, and more. Follow along with the IDE, which has lots of examples in C using the NESLib library.

There’s also a few chapters about 6502 assembly programming on the NES. We’ll cover the basics of nametables, sprites, and controllers, and some advanced topics like timing the PPU line-by-line.

Chapter List

The NES * The 8bitworkshop IDE * Quickstart * Binary Numbers * Memory Maps * The PPU * The Build Pipeline * Nametables * Attribute Table * Scrolling * Sprites * Metasprites * Controllers * VRAM Buffer * Split Status Bar * Random Numbers * Reading VRAM * PPU Mask Register * Virtual Bright * The APU * Simple Music * Binary-Coded Decimals * RLE Encoding and Title Screens * Famitone Music * Offscreen Scrolling * Main Loop vs. NMI Handler * Climber: Platform Game * Advanced Mappers * CHR RAM * Sprite Starfield * The 6502 CPU * Hello NES Assembly * Drawing Text in Assembly * Scrolling in Assembly * Sprites/OAM in Assembly * Controller Reading in Assembly * Bank Switching * IRQs * Split Screen X/Y Scrolling * Line-by-line Scrolling * NES Dev Tools

3.4.0 Release

The new 8bitworkshop IDE 3.4.0 release has lots of other new features:

GitHub Integration

You can now publish your project to GitHub! The IDE creates a separate workspace where you can work on multiple files in isolation. When publishing, we’ll put a link in the README that lets others open your project in 8bitworkshop with a single click. There are some limitations, though. You have to put all your source files at the root level. There’s also no way to resolve conflicts or merge – so be careful when you pull new files, as it will replace all your local files with the remote versions.

Asset Editor

You can edit palettes and bitmaps right in the IDE! Changes are propgated back to your source code. This requires special comment tags be added.

Memory Map

See a helpful overview of the memory space for your platform. Click on a memory segment to open it in the Memory Viewer.


Open the Profiler view to see a scanline-by-scanline account of what code is executing.

Gamepad Support

Most platforms support one or two gamepads, just plug them in and start playing. We haven’t tested with very many besides these, so your mileage may vary. We’ll also show keyboard controls when the emulator is running.

HTTPS Support

We’ve moved to HTTPS as the default for new users. We can’t make it the default for existing users, as your local files edited under HTTP would no longer be available. You’ve got an option in the File menu to move to HTTPS if you’ve saved all your local files elsewhere.

Verilog Updates

Support $readmemb and $readmemh. Icons for Scope view. Ctrl-click the simulated CRT to pause on a scanline. New “Verilog VGA” platform which simulates a VGA monitor (it’s kind of slow because it runs at 25 MHz vs. ~5 Mhz.)

Minor Features

New Bootstrap-y dialog boxes. We show cycle counts when editing Z80 assembler. More debug info. Nicer break expression dialog. New focus ring for the emulator.

Fixed bugs

No more disappearing first line of the editor. Fixed debugging in listing view. No more segment names in Memory Viewer. Better DASM listing/error parser. Fixed some debugger issues.

No more local/ paths

We used to prepend local/ to new files, but we don’t anymore. This is why you now see local/xxx on all of your files. If you don’t like it, you can rename them and remove the local/ prefix. Or publish your project to GitHub and it’ll be moved to its own separate area.

Okay, that’s it for now. Go write some NES games!