iNES Documentation

# iNES
version 3.6

### by Marat Fayzullin

# Contents

- Disclaimers
- New in This Version
- Introduction
- iNES Ports
- Registered Users
- What is Included
- What is not Included
- Buttons
- Command Line Options
- Frequently Asked Questions
- History

# Disclaimers

- Nintendo Entertainment System (NES), Famicom, Famicom Disk System and Dandy are all registered trademarks of Nintendo.
- GameGenie is a registered trademark of Galoob.
- The author is in no way affiliated with Nintendo.
- The author is in no way affiliated with any pirate group out there.
- The author cannot and will not provide you with any NES or Famicom games.
- The author cannot be held responsible for anything this program will do to your computer, brains, free time, housemates, pets, or family members.

# New in This Version

- Ported iNES to Unix using the new EMULib framework. I will try to compile the new iNES-Unix for as many Unix flavors as possible. At the moment, only Ubuntu Linux binaries are available.
- Ported iNES to Maemo OS2008 used in N800 and N810 internet tablets from Nokia. iNES-Maemo is specifically optimized for internet tablets using assembler modules from iNES-Symbian.
- Optimized 6502 emulation by collapsing infinite empty loops.
- Introduced more accurate per-scanline cycle counting.
- Once again, extended time before VBlank flag going up by 2 scanlines. This fixes F1 Race, Elite, etc.
- Moved mapper initialization after default initialization. This should fix MMC5 screen corruption that occurred in iNES 3.1.
- Fixed MMC3 scanline counter to remove garbage scanlines in Crystalis, GIJoe 2, Cartoon Workshop, etc.
- Finally fixed light gun ("zapper") emulation!
- Fixed FamiBASIC keyboard support on all platforms.
- Fixed FIRE-A autofire option in built-in menu.
- Fixed command line options for enabling/disabling sound.
- Added support, editing, and display for VS System DIP switches. Also see `-dip` command line option.
- Added `-soft/-nosoft` command line option and made softening, scanline simulation, and synchronization options work on all relevant platforms (Unix, Maemo, MSDOS).
- Removed `-vperiod` and `-hperiod` command line options, as these values are now computed automatically and do not need adjustment.
- Removed last occurances of #define SOUND. Sound support is always compiled in anyway.
- Made `[F8]` toggle scanline simulation, while `[SHIFT]+[F8]` toggles softening.
- Added standard VS System palette files to the package.
- Now drawing light gun aim and DIP switches using NES palette to avoid problems at different screen depths.
- Removed `-novsync` and `-200` options from iNES-MSDOS, and added a new `-480` option for 640x480 VESA screen mode.
- Fixed iNES-MSDOS light gun aim in 640x480 screen mode.
- The UIQ version of iNES-Symbian now uses 6502 emulation optimized in ARM assembler (this option has been left out in the last release).
- iNES-Symbian display routines rewritten in ARM assembler for speed. This should mainly affect UIQ3 users but S60 users will also benefit.
- Split iNES-Symbian configuration menu into four tabs, making "Video" and "Audio" settings separate.
- Added "Audio Latency", "Skip Frames", and "Sync Updates" settings to iNES-Symbian.

# Introduction

iNES is a portable emulator of the Nintendo Entertainment System (aka Famicom in Korea and Japan, Dandy in Russia). It runs most NES/Famicom games and supports such esoteric devices as GameGenie, Family BASIC keyboard, Famicom Disk System, and VS-System coin-op arcade. The original idea of iNES belongs to Alex Krasivsky, who found the first pieces of information about NES hardware and wrote the initial code, although nothing remains of that code today. You can always get latest iNES news, binaries, and support files from

http://fms.komkon.org/iNES/

Following is a list of features iNES supports:

- General NES Hardware
  - CPU (6502 without decimal math)
  - 8kB Internal RAM
  - Up to 32kB External RAM
  - Two Joysticks
- Video Processor (aka PPU)
  - Up to 16kB of VRAM
  - Screen Mirroring
  - Scrolling via $2005
  - Screen Splits via $2006
  - Several Choices of Palette
  - Sprites with Priorities
  - Sprite Hit Flag
- Sound Generator
  - Three Channels of Melodic Sound
  - White Noise Channel
  - PCM Wave Channel
  - DiskSystem Melodic Channel
- NES/Famicom Add-Ons
  - Galoob GameGenie
  - Famicom DiskSystem
  - Nintendo VS-System
  - FamilyBASIC 2 Keyboard
  - FamilyBASIC 3 Keyboard
  - Zapper Light Gun (Duck Hunt, etc.)
  - Paddle (Arkanoid)
  - PowerPad (Athletic World, etc.)
- Cartridges
  - Battery Backed RAM
  - CNROM Cartridges (#2)
  - UNROM Cartridges (#3)
  - GNROM Cartridges (#66)
  - AOROM Cartridges (#7)
  - CPROM Cartridges (#13)
  - Specialized 32kB ROM Switch (#34)
  - Nintendo MMC1 Chip (#1)
  - Nintendo MMC2 Chip (#9)
  - Nintendo MMC3 Chip (#4)
  - Nintendo MMC4 Chip (#10)
  - Nintendo MMC5 Chip (#5)
  - Konami VRC4a Chip (#21)
  - Konami VRC4b Chip (#25)
  - Konami VRC2a Chip (#22)
  - Konami VRC2b Chip (#23)
  - Konami VRC6 Chip (#24, not quite done)
  - FrontFarEast Copier F4xxx Games (#6)
  - FrontFarEast Copier F3xxx Games (#8)
  - FrontFarEast Copier F6xxx Games (#12, not quite done)
  - FrontFarEast Copier F8xxx Games (#17)
  - ColorDreams Cartridges (#11)
  - AVE Nina-3 Cartridges (#79)
  - AVE Nina-6 Cartridges (#81)
  - Bandai Cartridges (#16)
  - Jaleco SS8806 Chip (#18)
  - Namco 106 Chip (#19)
  - Irem G-101 Chip (#32)
  - Irem H-3001 Chip (#65)
  - Irem 74HC161/32-based Cartridges (#78)
  - Taito TC0190/TC0350 Chips (#33)
  - Tengen RAMBO-1 Chip (#64)
  - SunSoft3 Chip (#67)
  - SunSoft4 Chip (#68)
  - SunSoft5 Chip aka FME-7 (#69)
  - Camerica Chip (#71)
  - Pirate HK-SF3 Chip (#91)
  - 100-in-1 Cartridge (#15)
- Other
  - Saving and loading emulation state
  - Automatic handling of GZIPped ROMs
  - Recording soundtrack into MIDI files
  - Built-in debugger
  - Built-in configuration menu
  - Loadable color palettes
  - Simulated TV scanlines (Windows, MSDOS, Symbian ports)
  - Video image interpolation (Windows, MSDOS, Symbian ports)
  - Network multiplayer mode (Windows and Symbian ports)
  - Resizable window (Windows and Unix ports)
  - Full screen mode (Windows, MSDOS, Symbian ports)
  - Screen snapshots (MSDOS port only)
  - Configurable screen orientation (Symbian port only)
  - Configurable backlight control (Symbian port only)

# iNES Ports

Because iNES is a very portable program, it can run on many different platforms: Unix, MacOS, MSDOS, Windows, Symbian, PocketPC, etc. The complete up-to-date list of iNES ports is available at the iNES distribution site. Following are the major ports:

## iNES-Windows

  The iNES-Windows is available from the web site for $19.99US. This fee ensures that you get the latest full supported versions of both iNES-Windows and iNES-MSDOS with free updates via email as long as I work on these products. For more information, take a look at

  http://fms.komkon.org/EmuWindows/

## iNES-MSDOS

  The iNES-MSDOS is included with the Windows version. By buying the iNES-Windows you effectively buy the iNES-MSDOS as well. iNES-MSDOS is compiled with OpenWatcom C and runs in full screen mode under the DOS4GW 32bit DOS extender.

## iNES-Symbian

  The iNES-Symbian works on smartphones running the 3rd Edition of the Nokia S60 software or UIQ3 software from Sony Ericsson. It is available for $14.99US with free email updates. You can find trial versions of iNES-Symbian and my other Symbian products at

  http://fms.komkon.org/EmuSymbian/

## iNES-PocketPC

  The iNES-PocketPC has long been developed by Aaron Oneal. You can get the PocketPC versions of iNES and my other emulators from

  http://fms.komkon.org/MorphGear/

## iNES-Unix

  iNES-Unix is available freely in binary form for various flavors of Unix from the iNES distribution site. I am always trying to compile it on as many different Unices as I have handy at the moment.

## iNES-Linux

  Currently, iNES-Linux (ELF, GLIBC, X11) is compiled from the same source as all other Unix versions. You can get it for free from the iNES distribution site.

## iNES-Maemo

  iNES-Maemo works on Nokia internet tablets running Maemo OS2008. It is specifically optimized for Maemo platform and available for free from the iNES distribution site. You can also install it from the Maemo Extras software repository maintained by Nokia.

# Registered Users

If you've registered iNES-Windows, please do not give your copy to anybody. And I do mean anybody. There were cases when registered users gave iNES away to their friends, relatives, or just some shady characters on the Net, and then I found it pirated, put onto the Web, and even posted to USENET newsgroups. If I find your personalized copy of iNES being spread around, your registration gets automatically cancelled which means no support and no more updates.

I understand that the previous paragraph may sound threatening to some people, but this kind of piracy really hurts my profits and feelings. I've put a lot of effort into iNES, and can only continue working on it if people do not try to cheat on me.

It may also be a good idea to buy a real cartridge for each NES ROM image you use with the emulator. NES software is copyrighted, but as long as you own the real cartridge, you should be protected by the law allowing customers to backup bought software.

# What is Included

Following files are included into the distribution:

      ines           - iNES executable file (Unix, ines -help for options)
      ines32         - iNES executable file (Unix, 32bpp X11 display)
      ines16         - iNES executable file (Unix, 16bpp X11 display)
      ines.exe       - iNES executable file (Windows)
      ines-dos.exe   - iNES executable file (MSDOS, ines.exe -help for options)
      iNES.html      - This documentation
      CART.NES       - Sample ROM image
      Old-iNES.pal   - Palette file with standard (old) iNES colors.
      Covell.pal     - Palette file with NES colors as measured by Chris Covell.
      FCEU.pal       - Palette file used by the FCE Ultra emulator.
      RP2C04-001.pal - VS System palette used in the RP2C04-001 chips.
      RP2C04-002.pal - VS System palette used in the RP2C04-002 chips.
      RP2C04-003.pal - VS System palette used in the RP2C04-003 chips.
      RP2C05-004.pal - VS System palette used in the RP2C05-004 chips.

# What is not Included

Absolutely no ROM images of NES games are included. NES games are still copyrighted by the companies who produced them, and therefore, I can not distribute any of them. I'm also unable to tell you where to find these games, so do not send me email asking for them. You will have to look for them on your own.

# Buttons

When using FamilyBASIC keyboard, press [CONTROL]+[KEY] to access a special function of a [KEY] if it also performs a keyboard function.

      [SPACE]        - FIRE-A button (also: [LALT],A,S,D,F,G,H,J,K,L)
      [CONTROL]      - FIRE-B button (also: Z,X,C,V,B,N,M)
      [TAB]          - SELECT button
      [ENTER]        - START button
      [BACKSPC]      - Insert VS System coin
                       Flip DiskSystem floppy
      [PGUP]         - Fast-forward emulation (also: [F9])
      [ESC]          - Quit emulation (also: [F12])
      [F2]           - Toggle soundtrack log on/off
      [F3]           - Toggle FIRE-A autofire on/off
      [F4]           - Toggle FIRE-B autofire on/off
      [F5]           - Invoke builtin menu
      [F6]           - Load emulation state
      [F7]           - Save emulation state
      [F8]           - Toggle scanlines on/off
      [SHIFT]+[F8]   - Toggle screen softening on/off
      [F9]           - Fast-forward emulation (also: [PGUP])
      [F11]          - Reset NES
      [F12]          - Quit emulation (also: [ESC])
      [SHIFT] and [CAPSLOCK]    - Switch between joypads
      [Q,W,E,R,A,S,D,F,Z,X,C,V] - PowerPad buttons (upside)
      [U,I,O,P,H,J,K,L,B,N,M,,] - PowerPad buttons (downside)
      [ALT]+[PGUP]   - Increase audio volume
      [ALT]+[PGDOWN] - Decrease audio volume

      When compiled with #define DEBUG:
      [F1]           - Go into built-in debugger

      When compiled with #define WINDOWS:
      [ALT]+[ENTER]  - Switch between full screen and windowed modes.

      When compiled with #define GIFLIB:
      [F10]          - Make a screen snapshot (SNAPxxxx.GIF)

# Command Line Options

      -verbose <level>    - Select debugging messages [5]
                             0 - Silent             1 - Startup messages
                             2 - Illegal accesses   4 - Illegal CPU ops
                             8 - Bank switching    16 - DiskSystem
                            32 - PPU accesses
      -skip <percent>     - Percentage of frames to skip [25]
      -help               - Print this help page
      -cheat <GG code>    - Activate a GameGenie cheat
      -autoa/-noautoa     - Autofire/No autofire for button A [-noautoa]
      -autob/-noautob     - Autofire/No autofire for button B [-noautob]
      -pal/-ntsc          - Show 240 or 224 lines [automatic]
      -rkbd/-jkbd/-nokbd  - FBASIC3R, FBASIC2J, or no keyboard [-nokbd]
      -gun/-paddle/-ppad  - Emulate light gun, paddle, or PowerPad [off]
      -allspr             - Show all sprites, ignore hardware limit [off]
      -dip <hexbyte>      - Set VS System DIP switches [$00]
      -palette <filename> - Load default palette from a file [automatic]
      -logsnd <filename>  - Write soundtrack to a MIDI file [LOG.MID]
      -cheat <GG code>    - Activate a GameGenie cheat
      -sync <frequency>   - Sync screen updates to <frequency> [-sync 60]
      -nosync             - Do not sync screen updates
      -soft/-nosoft       - Scale display, with softening [-nosoft]
      -tv/-notv           - Simulate scanlines [-notv]
      -sound [<quality>]  - Sound emulation quality (Hz) [22050]
      -nosound            - Disable sound emulation

      When compiled with #define DEBUG:
      -trap <address>     - Trap execution when PC reaches address [FFFFh]
                            When a keyword 'now' is used in place of the
                            <address>, execution will trap immediately.

      When compiled with #define UNIX or #define MAEMO:
      -shm/-noshm         - Use/don't use MIT SHM extensions for X [-shm]
      -saver/-nosaver     - Save/don't save CPU when inactive [-saver]
      -scale <factor>     - Scale window by <factor> [1]

      When compiled with #define MSDOS:
      -vsync              - Sync screen updates to VGA VBlanks [-vsync]
      -480/-200           - Use 640x480/320x200 VGA screen mode [-200]

# Frequently Asked Questions

1. I WANNA PLAY GAMES!!!! WHERE DO I GET GAMES???????

   I do not know. I can't give you any due to both legal and moral reasons. Please, do not mail me asking for games. I will delete your mail right away, and you won't get an answer.

2. How do I copy games from cartridges to a computer?

   You can use a special device called cartridge copier.

3. What is NES? How its hardware works?

   Nintendo Entertainment System (NES), known as Famicom in Asia, is an old videogame console produced by Nintendo that was very popular in the eighties and nineties. It is built around a 6502 CPU. You can find details on the NES architecture at

   http://fms.komkon.org/EMUL8/

4. There is no version of iNES for my Unix!

   I am trying to compile Unix binaries for as many flavors of Unix as possible, but as I do not have access to many machines, do not expect immediate support for every Unix flavor out there. Don't mail me asking for the source either: iNES source code is not publicly distrbutable, as much as I regret to say this.

5. My favorite game doesn't work on iNES. What do I do?

   There may be several reasons why a game has problems running on iNES or does not run at all.

   - Your ROM image file may have an incorrect header or other problems. Some of them can be detected by running it through the NESLIST utility (included into EMUTools package).
   - It is considered "cool" by many pirates to put their "signatures" into unused bytes of .NES headers. Such image files are not guaranteed to work, even if they worked on some older version of iNES. Do not use pirated ROM images.
   - You may be running a game written for European (PAL) NES in the NTSC mode. iNES will try to determine the correct video mode from the .NES file header, but many old .NES files default to NTSC mode. To force iNES into PAL mode, use `-pal` command line option or corresponding menu options.
   - The game does not run with the FamilyBASIC keyboard. The keyboard support is off by default, but if you have it on, turn it off. On the other hand, some cartridges may require the keyboard. Use the `-rkbd/-jkbd` command line options or corresponding menu options to turn on the keyboard support.
   - The game may require some exotic piece of equipment, such as a light gun. Not all NES hardware addons are supported by iNES.
   - iNES might not currently run this game. Not all games are supported at this moment. Don't expect 100% compatibility with the real hardware.
6. What are .NES files? Do you have the format description?

   .NES files are used to store ROM images of NES cartridges. As NES carts may contain separate ROM, VROM, and other circuitry, it has been necessary to make a special file format for them. The complete description of the .NES file format can be obtained from the NES Hardware Architecture document at

   http://fms.komkon.org/EMUL8/

7. What are .FDS files? Do you have the format description?

   .FDS files are used to store Famicom DiskSystem disk images. Each disk has two sides and each side stores 65000 bytes of data. An .FDS file contains concatenated images of these sides, first for side A, then for side B. It may contain images of multiple disks, stored one after another. There are no headers or other information, just 65000-byte chunks of data.

8. How do I use DiskSystem emulation in iNES?

   First of all, you need to have a file called DISKSYS.ROM in your current directory. This file should contain the DiskSystem BIOS of 8192 bytes in size.

   To run a program from an .FDS file, open it as you would open any normal .NES file. iNES will start with the disk "removed" from the "drive". To insert the disk, press [BACKSPACE] and release it. The boot-up sequence will start. Every time the program asks you to change the disk side or put a next disk, press and release [BACKSPACE]: this will simulate disk removal/insertion and also switch iNES to the next chunk of data from the .FDS file. To skip to a certain disk (or side), press [BACKSPACE] multiple times.

9. What is NESLIST?

   NESLIST is a small utility which will list, verify, and possibly fix NES ROM images for you. It is highly recommended to all iNES users and has been a part of the iNES distribution for a long time. It is now distributed as a part of the EMUTools package.

10. What is EMUTools package and where can I get it?

    EMUTools is a set of utilities which may be useful for both emulator authors and users. They allow to list and verify diferent ROM images, convert music files, disassemble and compare ROMs. EMUTools can be obtained from

    http://fms.komkon.org/EMUL8/

11. Do I need to unpack GZIPped ROM images to run them on iNES?

    No, unless your copy of iNES has been compiled without ZLib library. Most iNES ports are compiled with this library. ZLib allows iNES to recognize and automatically unpack GZIPped and singular PKZIPped files. To find out whether your copy of iNES supports this feature, run it with the `-help` option and see if its says anything about GZIP support.

12. When starting iNES-Unix, ld says that libz library isn't found.

    Most iNES-Unix binaries are compiled with ZLib library to make them recognize and unpack GZIPped files. This option requires ZLib library which can be obtained from

    http://www.zlib.net/

13. When starting iNES-Unix, ld says that some library isn't found.

    This may happen if the versions of your shared libraries are older than the ones for which iNES has been compiled. A decent way to deal with this is to upgrade your Unix. A quick and dirty way is to make a symbolic link from the existing library to a name required by iNES.

14. When starting iNES-Unix, I get X_ShmAttach error.

    You are probably trying to run iNES-Unix on a remote Xterminal while it attempts to use shared memory for interfacing with X. Use the `-noshm` option to tell it not to use shared memory.

15. When starting iNES-Unix, I get X_PutImage error.

    iNES-Unix version currently needs 8bit, 16bit, or 32bit X. Neither 2-color nor 16-color Xterminals will work. 24bit Xterminals may work, but don't count on it.

16. When starting iNES-Unix, the window stays black.

    Some other X application took over all available colors so that the emulation could not allocate any for itself. Check if you run XV, Netscape, or something similar.

17. The sound is distorted in the iNES-Windows. How do I fix it?

    The wave-synthetized sound in iNES may become distorted on slow or highly loaded machines (no graphics acceleration, for example). There are several ways you can improve sound:

    - Decrease the sampling frequency (in Audio menu). The sound may become tinkier, but less distorted.
    - Increase the latency (Audio menu). This may cause sound to fall behind the screen action, but the sound quality will become better.
    - Use MIDI sound instead. It has both advantages and disadvantages though.
    - Make iNES skip more frames (in Video menu). The screen action will become less smooth, but the CPU load will decrease.
    - Make iNES window smaller to decrease the load on the CPU. 1:1 is the optimal size.
18. How do I save and load emulation state during the game?

    The emulation state can be saved by pressing [F7] button. The resulting data file will have the same name as your .NES file, but its extension is going to be .STA. This state file will be loaded automatically next time you start iNES. The same state file is not guaranteed to work for versions of iNES running on a different hardware.

19. What are those weird Fxxx and SMxxx files?

    Those are most likely files produced by the Front Far East copier. Each such file has a 512-byte header (which you need to get rid of), an optional 512-byte trainer (which you probably want to retain), a ROM, and an optional VROM, all stuck together into a single file. Simply cut off the FFE header, add a .NES header, and modify it to reflect the correct number of pages, mapper type, etc.

    It is necessary to note that even those FFE ROM images which do not have a trainer were very often modified to work with the FFE copier. Although iNES has support for several types of FFE images, it is strongly recommended that you only use clean, unhacked ROM images backed directly from the cartridges you own, instead of FFE images.

20. What are the interleaved NES ROM images?

    Interleaved NES ROM image is a file which contains the ROM data in each even byte, and the VROM data in each odd byte. You will have to write a program to separate such file into ROM and VROM, and then glue them together with a .NES header to produce the .NES file.

21. What is that "Mirroring" flag?

    In the real NES/Famicom cartridges, either A10 or A11 line of the address bus can be connected to VRAM. Depending on it, video memory may either contain two screens at addresses $2000/$2400 mirrored at $2800/$2C00 (Vertical Mirroring), or two screens at $2000/$2800 mirrored at $2400/$2C00 (Horizontal Mirroring).

    The games which only use one screen do not care about the mirroring. The games using two screens require an appropriate mirroring though. Be aware that many bank switches allow to switch mirroring from the program. Other cartridges contain additional VRAM and have both A10 and A11 lines connected. Mirroring has no meaning for such cartridges.

22. What is the "512-byte Trainer"?

    The 512-byte trainer mentioned before is something implemented in the Front Far East copier for the NES. When this trainer is present (its code precedes the ROM contents in the .NES file), it is loaded into $7000-$71FF, and then control is passed to it at some points of the program execution.

# History

## New in iNES 3.5

- Added network play option to iNES-Windows and iNES-Symbian!
- Upgraded EMULib audio rendering API.
- Now clearing all memory in ResetNES() to keep both NetPlay sides consistent.
- Added new, much better, scanline simulation and video softening effects to iNES-Windows.
- iNES-Windows full-screen mode now runs in 640x480 resolution.
- Fixed input device selection in iNES-Windows and built-in menus.
- Fixed problem with gameplay being too fast in iNES-Symbian.
- Fixed premature termination of the emulation thread when exiting iNES-Symbian, soundtrack recording and config saving work again.

## New in iNES 3.4

- Added proper light gun emulation via mouse (`-gun`).
- Added Arkanoid paddle emulation via mouse (`-paddle`).
- Added PowerPad emulation (`-ppad`).
- Rehashed built-in menu to make space for more options.
- Added menu options to choose and write-enable DiskSystem floppies, use light gun, paddle, and PowerPad.
- Added built-in menu options to log soundtrack and toggle MIDI drums.
- Finally fixed opendir() problem in iNES-Symbian. All built-in menu file dialogs work now!
- Added FamiBASIC keyboard support to iNES-Symbian.
- Added display orientation settings to iNES-Symbian ("Landscape", "Portrait", and "Auto").
- Added backlight settings to iNES-Symbian ("Always On" and "Default").
- Added virtual on-screen keyboard to iNES-Symbian, invoked by pressing `[EDIT]` or left `[SHIFT]` key.
- Further extended and optimized Symbian screen rendering routines.
- Fixed and optimized TV scanline simulation in iNES-Symbian, made scanline effect stronger.
- Fixed system warnings in when flipping Nokia E70 open/closed.
- Fixed possible crash when selecting an initial file in iNES-Symbian.
- Improved "About" box in iNES-Symbian.
- Moved iNES-Symbian file selection root to `E:\`.

## New in iNES 3.3

- Added error messages to iNES-Windows and iNES-Symbian.
- Added button and key remapping configuration to iNES-Symbian.
- iNES-Symbian application menu is now split into three pages.
- iNES-Symbian 6502 CPU emulation rewritten in ARM assembler for speed.

## New in iNES 3.2

- Extended built-in configuration menu.
- Added option to draw all sprites (-allspr) rather than obey hardware sprites-per-scanline limit.
- Fixed time counter in the sound chip emulation.
- Sound chip emulation now uses microsecond precision.
- Removed buffer size limit in CONFile().
- Fixed menu behaviour when selecting PAL/NTSC options.
- Automatic PAL/NTSC selection by header is now default.
- Fixed audio volume resetting after exiting config menu in iNES-Windows.
- Fixed automatic menu and window size changes in iNES-Windows.
- Reduced audio latency and jitter in iNES-Symbian.
- iNES-Symbian now saves settings on exit.
- Extended and corrected the documentation.

## New in iNES 3.1

- Switched both iNES-Windows and iNES-MSDOS to the new EMULib framework.
- Added built-in configuration menu ([F5]) available on all platforms.
- Added new screen buffer based 6502 debugger ([F1]) available on all platforms.
- Made display updates in iNES-Windows much faster.
- Fixed external joystick support in iNES-Windows.
- Improved audio quality in iNES-Windows.
- iNES-MSDOS now uses 15BPP display mode.

## New in iNES 3.0

- Extended .NES file specification with a flag for PAL cartridges. See my NES Architecture Document for details. iNES now allows to force PAL (`-pal`), NTSC (`-ntsc`), or select the mode automatically by the cartridge header.
- When you buy iNES-Windows, you now also get iNES-MSDOS.
- Added DirectDraw-based full screen mode to iNES-Windows. Press [ALT]+[ENTER] to switch in and out of the full screen mode. Use it with caution, as DirectDraw is notoriously unstable.
- Added support for mapper 13 (CPROM).
- Added support for mappers 79 (Nina-3) and 81 (Nina-6).
- Fixed mapper 25 (VRC4B) to allow writing to cartridge RAM.
- Fixed a minor bug (typo) in the screen driver, thanks to Aaron Oneal.
- Added fast-forwarding option ([F9], also [PGUP] in Windows and Unix).
- Fixed incorrect label on the "Sync to..." slider in iNES-Windows.
- Raised the maximal "Sync to..." frequency to 80Hz.
- Window size and position are now saved on exit in iNES-Windows.

## New in iNES 2.3

- Switched to the latest version of the OpenWatcom C/C++ compiler.
- The infamous Windows problem with spaces in directory names seems to be fixed by using a newer compiler.
- Joystick problems in iNES-Windows are fixed.
- Added joystick configuration to iNES-Windows setup panel.
- Added HSV palette configuration to iNES-Windows setup panel (not functional yet).
- Fixed a Unix sound driver problem with non-atomic write, thanks to Colin Howell.

## New in iNES 2.3

- Added RAM page selection to MMC1.
- All screen refresh is now directed by the VRAM address register.
- Two lower bits of PPUCONT1 register immediately propagate to VRAM address bits (Super Mario Borthers, Zelda).
- Fixed frequency sweep for sound channel 0 when increasing frequency (Othello-Bit).
- Fixed vertical scroll rollover.
- Automatic HPeriod/VPeriod computation is now default.
- Now taking into account cycles taken by the sprite DMA.
- Now not generating NMI if VBlank flag was reset in the PPU status register (Ikari Warriors 3, BWings).
- Reduced delay between VBlank and NMI to several cycles (Overlord, Dragon Strike).
- Removed cycle counter roundups.
- Now saving raster effect option as global (not cartridge specific).
- Now cleanly removing the debugger console in iNES-Windows.
- Added keyboard support for FamilyBASIC and other programs using the keyboard.
- Fixed Windows sound driver to avoid crashes in Windows 2000.

## New in iNES 2.1

- New iNES-Windows demo is now available.
- Now setting B-flag to 1 when popping SR off the stack.
- Added wrap-around emulation to 6502's JMP ($xxxx) instruction.
- Added -DNO_DECIMAL to iNES-Windows and iNES-Unix makefiles (NES 6502 has no decimal mode).
- Added VRAM mirroring between $2000-$2F00 and $3000-$3F00.
- Switched to a single latch for $2005 and $2006.
- Now setting EightSprites flag correctly.
- Now starting sprite DMA from the address set via $2003.
- Now not updating scroll and VAddr until both bytes transferred.
- Fixed a bug in the MMC4 implementation.
- Fixed a bug in the debugger when printing out sprite table.
- Added console debugger to iNES-Windows (press F1).
- Added TV raster effect to iNES-Windows.
- Removed MIDI volume control from the Windows sound driver.

## New in iNES 2.0

- Number of 8kB RAM pages added to the .NES header!
- State file format has changed.
- Major overhaul of the screen update driver to get rid of memcpy() calls in mapper handlers.
- Replaced the original iNES color palette with the one Chris Covell obtained from the real NES. The original palette is still available in the Old-iNES.pal file.
- Added support for loading/saving multiple (up to 4x8kB right now) battery-backed RAM pages from a .SAV file.
- Fully implemented mappers 9 (MMC2 used in Punchout) and 10 (MMC4).
- Limited IRQ counter updates in MMC3 to situations when screen refresh is on and ChrGen/SprGen use different tables.
- Added mapper 24 (Konami VRC6) but interrupts are still wrong.
- Added mapper 25 (Konami VRC4B).
- Added mappers 64 (Tengen RAMBO-1), 65 (Irem H-3001), 66 (GNROM), 67 (SunSoft3), 68 (SunSoft4), 69 (SunSoft5 FME-7), 71 (Camerica), 78 (Irem 74HC161/32), 91 (HK-SF3).
- Implemented a lot of special features of mapper 5 (MMC5) such as extended graphics and sound.
- Fixed mapper 11 (Color Dreams games).
- Fixed mapper 19 (Namcot 106).
- Fixed mapper 16 (Bandai) although some timing problems still persist.
- Fixes to mappers 1 (MMC1), 21 (VRC4A), 22 (VRC2A), and 23 (VRC2B).
- Now generating VBlank NMI at line 244 (Galaxian, Toki, Goonies 2, etc.).
- Now retaining mirroring bits when MMC1 is reset (Jekyll And Hyde).
- Added "PPU interface mode" (Elite).
- Fixed vertical offset calculation inside sprites.
- Fixed horizontal scroll calculation from VRAM address.
- Changed HitFlag computation again.
- Changed sound length setting for the sound channel 2.
- Fixed frequency sweep for sound channels 0,1.
- Some general fixes to the sound chip emulation.
- Some improvements to the built-in debugger.
- Documentation has a new section describing iNES-Windows menus and setup.
- Set background color in iNES-Windows to black.
- Added F6 and F7 to quickly load and save emulation state in iNES-Windows.
- Added "JoyA", "JoyB", "JoySELECT", and "JoySTART" parameters to the [iNES] section of the iNES.INI file to configure joystick button assignments (no GUI yet).
- Obsoleted headers.tgz and headers.zip files.

## New in iNES 1.3

- Save state (.STA) file format has changed.
- Added new modular sound chip emulation.
- Added PCM sound channel.
- Improved MIDI logging.
- Implemented correct sprite overlap (SuperMarioBrothers3). Thanks to John Stiles who pointed out this problem.
- Fixed a bug in FDS sound emulation (Castlevania2, DokiDokiPanic), also thanks to John Stiles.
- Major rewrite of the sound drivers and sound logging system.
- Fixed several problems with Windows waveOut sound drivers.
- iNES-Windows now runs in 16BPP HiColor mode.
- Added debugger to iNES-MSDOS (F1).

## New in iNES 1.2

- Added capability to save and restore emulation state (.STA files).
- Keyboard assignments changed slightly to be consistent with VGB and MG.
- Now storing ROM and VROM in flat chunks of memory.
- Implemented DiskSystem timer.
- Implemented DiskSystem melodic sound (not finished).
- Fixed HitFlag bug.
- Fixed bug with sprites not updated when background is off.
- Made PCM sound start when the channel is switched on.
- Fixed mapper #16 (Dragon Ball Z series and other Bandai games).
- Fixed joystick support in iNES-Windows.
- Fixed current directory name in iNES-Windows.
- iNES-Unix runs in a resizable window now.
- iNES-Unix now has a proper application icon in WMaker.
- Fixed IPC key allocation bug in iNES-Unix.
- iNES-Windows now uses multimedia timer to sync screen refresh.

## New in iNES 1.0

- Rewritten and extended documentation.
- Famicom DiskSystem emulation.
- VS System emulation.
- Majorly bugfixed PPU emulation.
- Completely rewritten mapper code.
- NES 6502 does not support decimal math.
- Direct saving of soundtrack to MIDI files.
- Default palette can be loaded from a file.
- Speed control in iNES-Windows.
- Window size/position snapshots in iNES-Windows.
- Keyboard assignments added to iNES-Windows.
- Added speed control to iNES-Unix.
- Removed description of the .SND format.
- Moved .NES format description to the hardware document.
- Many other small fixes and improvements.

## New in iNES 0.7

- iNES-Windows can now be registered by phone or via WWW! Pay with a credit card!
- Extended .NES cartridge format!
- Description of .SND file format!
- Split screens and scrolling are now much more stable.
- Added GameGenie support, thanks to Alex Krasivsky.
- Multiple exotic memory mappers added, thanks to Yang Fanwen.
- Multiple fixes to mapper #4 (MMC3) and mapper #1 (MMC1).
- Sound support completely rewritten, thanks to Kawase Tomohiro.
- Added keyboard setting for Japanese version of FamilyBASIC.
- Added two palette choices from NESticle 0.2 and 0.21.
- Started adding Nintendo DiskSystem support (not finished yet).
- Windows version got built-in support for GZIPped files.
- GUI rewritten and extended in the Windows version.
- MIDI sound implemented in the Windows version.
- Increased number of Windows wave synthesis buffers.
- Added sound logging to the Windows version.
- WinG no longer required for the Windows version.

© Copyright by Marat Fayzullin (marat [at] komkon /dot/ org)