λ

Clones - An NES Emulator

Table of Contents

[in package CLONES.DOCS]

λ

1 Links

Here are links to the current website and git repo.

λ

2 Overview

Clones is an early-stage NES emulator written in Common Lisp.

It is inspired by long standing beliefs about the power of computers for experiential learning. See: Research Goals.

Why another emulator?

Reading things teaches people how to write. Analogous, if we are to place programming at the same fundamental level, using a program should teach how it works. But we don't see this.

Many NES emulators already exist on the web, the desktop, and elsewhere. Clones is intended to be a readable, tested, and compact code base sufficient for mostly accurate emulation of many but not all popular Nintendo titles.

However, my goal is not to be able to relive childhood nostalgia since that need is thoroughly solved. Clones exists to support curious programmers learning about how the system and its titles worked rather than being a vehicle for reliving the past. Running the games is just a prerequisite.

The codebase strives to be accessible for learning about emulation, sacrificing total accuracy and performance for clarity and ease of modification. Once some key games (Super Mario Bros, Mega Man 2) are playable, focus will shift towards building out debugging and reverse engineering tools.

In addition to the usual tools to disassemble memory or view VRAM, we hope to support building a directed graph of blocks and jumps as games are played. Afterwards, we'll provide tools for users to visualize and annotate the graph with notes about the code. This will move us towards our overall goal of making the high-level structure of programs "discoverable" through using them, calling back to the Tony Garnock-Jones quote above.

Current Status

Work has just begun so nothing is playable yet. Hang in there.

λ

3 ROM Parsing

[in package CLONES.ROM]

λ

4 Mapper Interface

[in package CLONES.MAPPERS]

λ

5 Memory Interface

[in package CLONES.MEMORY]

λ

6 Opcode Data

[in package CLONES.OPCODES]

λ

7 Disassembler

[in package CLONES.DISASSEMBLER]

λ

8 CPU Core

[in package CLONES.CPU]

λ

9 Picture Processing Unit

[in package CLONES.PPU]

λ

10 The Rendering Logic

[in package CLONES.RENDERER]

λ

11 Input Handling

[in package CLONES.INPUT]

λ

12 Debugging Utilities

[in package CLONES.DEBUG]