SourceFiles.org - Use the Source, Luke
Home | Register | News | Forums | Guide | MyLinks | Bookmark

Related Sites

Latest News
  General News
  Reviews
  Press Releases
  Software
  Hardware
  Security
  Tutorials
  Off Topic


Back to files
                               R o c k N E S
                       A NES 8-bit videogame emulator
  <<======================================================================>>
           (c)1998-2004 Fx3, version 4.00 BETA 7 - December 1st 2004
             LICENSE: Freeware, for absolutely non-commercial use

<<======================================================================>>

LICENSE AGREEMENT:

  • This is a free software, meaning no commercial ways. It has absolutely no warranties, so you use it at your own risk. Any ROM images can not be packaged or distributed with this software. I can not be responsible for your actions. However, feel free to distribute it in a computer magazine CD with misc softwares, by respecting the agreement lines you just read.
  • My website is always at http://rocknes.kinox.org, and you can even use the forums to contact me.
  • If you disagree, delete this software now.

    1. Description
    2. Configurations and default controls
    3. Using the GUI + Game Genie.
    4. iNES file format description.
    5. VS Unisystem games.
    6. "What is a NES mapper?"

[==========================================================================]

1. Description

> This software emulates the NES videogame, currently +-20 years old. > RockNES is fully coded in C. It uses the great Allegro library.

  • What's emulated *
    • CPU 2A03 emulation (Motorola 6502 variant);
    • PPU 2C02, using a pixel-by-pixel render;
    • Joypads 1 & 2;
    • pAPU sound channels: square waves, triangle, noise and DMC/RAW;
    • Konami VRCVI sound emulation in Akumajou Densetsu and Madara (j);
    • PPU color emphasis and monochrome masking;
    • Partial Famicom DiskSystem and VS Unisystem devices;
    • Backed battery save/load;
    • Accurate sprite #0 hits and 8-sprites limitation;
    • Supported iNES mappers 0,1,2,3,4,7,9,10,11,13,15,16,18,19,20,21, 22,23,24,25,26,32,33,34,40,41,42,43,44,57,64,65,66,67,68,69,70,71,72, 73,75,76,78,79,83,85,88,90,91,92,94,97,99,100,101,110,113,117,118,119, 151,160,180,184,187,189,225,226,227,228,229,230,231,232,233,234,235,240, 243,246 and 255, most of them are complete.

NOTE: for Famicom DiskSystem emulation (as mapper #20), the BIOS file

is required (filename DISKSYS.ROM).

> Other features available:

  • Joypad data logging (for replaying);
  • Save states (freezing);
  • Support for the obsolete NESticle save states (loading only);
  • GUI and configuration file;
  • Game Genie codes;
  • Exclusive Real-time ROM data patching;
  • Sound logging (WAVE file);
  • PRG-ROM data disassembler;
  • Optional pseudo-stereo sound output (channel separation);
  • Video filters on 640x480 mode: Pixelated, Scanlines and Stretched.
    • Unemulated hardware *
      • NES PAL (50Hz) and Famicom hardwares;
      • Joypads #3 and #4;
      • Devices like PowerPad and Zapper through expansion port on 4017h;
      • VS Dualsystem;
      • Playchoice-10 upper monitor (within game instructions, z80 emulation);
      • External sound hardwares like VRCVII, Famicom DiskSystem and others.

> NOTES:

  1. There's no test for a minimal hardware to get RockNES running, but a CPU +200Mhz might be enough for 60FPS.
  2. ROM images, saved states and movies can be ZIPped! Be sure to place only one file per ZIP archive.
  3. You can record your gameplay (as "movies"). It's just a full log of the joypads states, hence your gameplay can be exactly reproduced.
  4. Game Genie codes are supported.
  5. PRG-ROM data patching is supported. You can input an address and a value to get modified/analysed. No other emulator has this feature I believe.
  6. NESticle saved states might be partially supported.
  7. RockNES has a configuration file called ROCKNES.INI which's located at same directory. Use any text editor to setup a lot of things, like inputs, directories, sound, blitters and more.
  8. The fastest video mode I got is 640x480 VESA1, normal blitter.
  9. You can dump/log most of NES memory/context to a file. Using the GUI, the available options are:

    +------------------------------+ | context ****** file saved as | +------------------------------+ | RAM system.ram | | WRAM nes_wram.bin | | CPU nes6502.log | | PRG ROM * gamename.prg | | CHR ROM gamename.chr | | COLORS RAM palette.bin | | PATTERN TABLE gamename.gfx | | NAMETABLES gamename.nam | | SPRITES RAM sprites.ram | +------------------------------+ NOTICE: everything is saved on scanline 240 (end of screen drawing).

    • If you loaded `Blast-o-Matic Adventure.NES` game, so the file will be saved as `Blast-o-Matic Adventure.PRG` for example.

[==========================================================================]

  • KNOWN ISSUES (Beta 5+):
    • Save state might fail if you try to save/load in crucial game points;
    • MMC2/MMC4 support is 1 tile glitched at right of the screen;
    • The PPU timing still fails with a few games/demos;
    • Mapper #90 Mortal Kombat Special uses a slightly different hardware, so it does not work well like the others games;
    • Some mappers can still be broken due to lack of proper testing;
    • Garbaged scanline(s) with games that require a perfect NES timing; [==========================================================================]

2. Configurations and default controls

> Default keys (by default) are:

[player 1] - device is KEYBOARD
UP, DOWN, LEFT, RIGHT = keyboard arrows

    A      = 'X' key
    B      = 'Z' key

SELECT = 'Tab' key
START = 'Enter' key

[player 2] - no device assigned (KEYBOARD) UP = 'U' key.
DOWN = 'J' key.
LEFT = 'H' key.
RIGHT = 'K' key.

    A      = 'S' key.
    B      = 'A' key.

SELECT = 'Q' key.
START = 'W' key.

> Joypads:

UP,DOWN,LEFT,RIGHT = D-pad

    A      - button 1
    B      - button 2

SELECT - button 3
START - button 4
Quit Emulator - button 5
Fast Forward - button 6

> Other keys:

<ESC> - Swap to GUI/game and halt/continue the emulation

<F2> - save state from selected slot
<F3> - slot selector to save/load a state (0,1,2,3,4,5,6,7,8 or 9) <F4> - load state from selected slot

<F5> - NES soft reset (RAMs are not cleaned) <F6> - FDS disk side flip (A->B->C->D->A...) <F7> - FDS disk insert/eject
<F8> - to insert coins (VS Unisystem)

<F9> - gameplay logging
<F10> - gameplay player
<F12> - screenshot [disabled on beta versions]

<KEY_Q> - Quit to OS

[==========================================================================]

3. Using the GUI + Game Genie

(notice that some of the items might be outdated, perhaps I'm too lazy to update them, heh)

[Main]

  • Load ROM...........: List files of extension .NES/.NEZ/.FDS/.BAK/.ZIP
  • Game information...: Display iNES header information + CRCs.
  • Screenshot.........: Take a screenshot (BMP).
  • WAVE logging.......: To record WAV files.
  • Quit...............: Take a wild guess...

[CPU]

  • Reset..............: Emulation reset.
  • Save state.........: To save your progress.
  • Load state.........: To load your progress.
  • Load NESticle state: Ability to load a NESticle progress.
  • Dump...............: NES memory dumping.

[Misc]

  • Video resolution...: You can change the video card/resolution.
  • Movies.............: Record, play, stop and status of a NES movie.
  • Palettes...........: Set the current palette (for VS Unisystem games).
  • ROM cheat..........: You can patch the loaded ROM data.
  • Game Genie.........: You can enter Game Genie codes (max=10).
  • ROM Corruptor!.....: Corrupts a certain memory area.

[Help]

  • System.............: video/sound devices, currently disabled.
  • About..............: Software revision ID
        <<--------------------------------------------------------->>
                                GAME GENIE

> GameGenie codes can be either 6 or 8 digits and use the letters:

A P Z L G I T Y E O X U K S V N

// To test game genie 6 char code - SXIOPO Super Mario 1 Unlimited lives // To test game genie 8 char code - SXEZSKOZ Super Mario 3 Skywalker

> To input a GameGenie code, go to Misc->Game Genie. A small window will appear requesting a code, disregarding case (SXEZSKOZ, SxEzSKoz or szezskoz are acceptable). Any invalid letter is ignored. Click OK to finish or CLEAR to delete all inserted codes.
> No way to enable/disable a code during gameplay. For 6 chars codes only, you must reset the emulation to take effect.

Note for advanced users:

> A 6-char GG code will patch data at 8000h-FFFFh on reset only. If a game uses bankswitch, there are chances to get an useless code. The 8-char code has no problem - it keeps patching whatever appears there.

[==========================================================================]

4. iNES header format

> RockNES supports only .NES files within the iNES header created by Marat Fayzullin. Here's its description:

+--------+------+------------------------------------------+ | Offset | Size | Content(s) | +--------+------+------------------------------------------+

    |   0    |  3   | 'NES'                                    |
    |   3    |  1   | 1Ah                                      |

| 4 | 1 | 16K PRG-ROM page count (size=x0x4000) | | 5 | 1 | 8K CHR-ROM page count (size=y0x2000) |

    |   6    |  1   | ROM Control Byte #1                      |
    |        |      |   %mmmmvTsM                              |
    |        |      |    |  ||||+- 0=Horizontal Mirroring      |
    |        |      |    |  ||||   1=Vertical Mirroring        |
    |        |      |    |  |||+-- 1=Backed battery            |
    |        |      |    |  ||+--- 1=Trainer data (512 bytes)  |
    |        |      |    |  |+---- 1=Four-screen mirroring     |
    |        |      |    +--+----- Mapper # (lower 4-bits)     |
    |   7    |  1   | ROM Control Byte #2                      |
    |        |      |   %MMMM00PU                              |
    |        |      |    |  |  |+- 1=VS Unisystem arcade       |
    |        |      |    |  |  +-- 1=Playchoice-10 arcade      |
    |        |      |    +--+----- Mapper # (upper 4-bits)     |
    |  8-15  |  8   | 00h                                      |

+--------+------+------------------------------------------+

Legends

  1. PRG-ROM stands for PRoGram ROM, or actual 6502 CPU instructions.
  2. CHR-ROM stands for CHaRacter ROM, or the game graphics.
Notes

  1. Needless to say that ROM stands for Read-Only Memory. Understand that a RAM type allows writes too.
  2. Next data is PRG-ROM (in linear order) and then CHR-ROM if exists. A certain game can use VideoROM (paged gfx data) or VideoRAM at ppu I/O 0000h-1FFFh space.
  3. By default, if 4-screen mirroring flag is set, then it's hardwired and cannot be changed.
NOTICE

> Dirty headers are still present around ROM images, causing bad header parsing, usually getting the mapper number as #66. > Mappers 0-255 are valid numbers. However, some pirated/unlicensed games can bring unusual mappers being assigned over #255 - low 4 bits of byte 7 is used, sharing the byte for arcade hardware flags. RockNES has no support for these unusual mappers. > The header brings the game data size. If the real file size does not match the size specified in the header, the loading proccess is halted.

[==========================================================================]

5. VS Unisystem

> VS Unisystem are Nintendo arcade machines with titles like Pinball, Super Mario Bros. and others (insert coin$). The color signal is different, hence the NES palette won't fit, so you must select a new palette in the GUI for your specific game. RockNES uses the iNES format too.

  • DIP Switches are not supported.

[==========================================================================]

CREDITS (no special order)

  • Thanks to Brad Taylor for his superb NES documents;
  • Thanks to _Bnu for his 6502.TXT (6502 Microprocessor) document;
  • NESdev (http://nesdev.parodius.com) and everyone over there!

DJGPP package
http://www.delorie.com/djgpp/

Allegro's library by Shawn Hargreaves
http://www.talula.demon.co.uk/allegro
http://alleg.sourceforge.net

Binary compressed using UPX
The Ultimate Packer for eXecutables
Copyright (c) 1996-2001 Markus Oberhumer & Laszlo Molnar http://wildsau.idv.uni-linz.ac.at/mfx/upx.html http://upx.sourceforge.net

Alastair Bridgewater - Darcnes
http://www.dridus.com/~nyef/darcnes

Parodius Networking & Kinox - website hosting http://www.parodius.com
http://www.kinox.org

Dirk Stevens - EAGLE core
http://???

Super2xSaI and SuperEagle cores
Copyright (c) Derek Liauw Kie Fa, 1999 Modifications for Allegro 3.9+ comptibility by Robert J Ohannessian. Original web site: http://members.xoom.com/derek_liauw/

unzip.h -- IO for uncompress .zip files using zlib Version 1.00, September 10th, 2003
Copyright (C) 1998-2003 Gilles Vollant

Richard Bannister - MacOS port
http://bannister.org/software/rocknes.htm

Blargg's NES Sound Emulation
http://www.slack.net/~ant/nes-emu/

  • NES and Nintendo are trademarks of Nintendo CO.

[=========================================================================] [=========================================================================] //eof


Other Sites

Discussion Groups
  Beginners
  Distributions
  Networking / Security
  Software
  PDAs

About | FAQ | Privacy | Awards | Contact
Comments to the webmaster are welcome.
Copyright 2006 Sourcefiles.org All rights reserved.