Sei sulla pagina 1di 7

R o c k N E S

A NES 8-bit videogame emulator


<<======================================================================>>
(c)1998-2007 Fx3, version 5.00B3, January 3rd 2007
Freeware, for absolutely non-commercial use
hotmail.com @fx3rnes (swap to fix)
http://www.geoshock.com/rocknesBB/
<<======================================================================>>
LICENSE AGREEMENT:
- This is free software for home use, meaning no commercial ways and no
warranties, so you use it at your own risk. You cannot package commercial
ROM images, never, as a sign of your mental sanity. Please, don't bother
me if you messed up the things.
- If you disagree with these terms, DELETE THIS SOFTWARE NOW.
HARDWARE REQUIREMENTS:
- RockNES features cycle precision timing emulation.
- There's no test for a minimal hardware to get RockNES running at 60FPS,
but a +1Ghz CPU might do the task. Notice it's not target to run on older
machines - that's the price for its accuracy.
----------------------------------------------------------------------------------------------------------------------------------------------** NOTICE ** This is a beta version, might be unstable.
What's new for version 5.00 BETA 3 (01/03/2007)
----------------------------------------------- Timer tweaked a bit, it's better.
- Fixed display messages and flickering.
- Some internal changes and minor fixes.
[==========================================================================]
Notes: * Read 'oldnews.txt' for complete history of updates.
* Report any problems in a descriptive way at
http://www.geoshock.com/rocknesBB
[==========================================================================]
1.
2.
3.
4.
5.
6.

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

[==========================================================================]
1. Description
-------------> This software emulates the Nintendo Entertainment System videogame (NES).
> RockNES is fully coded in C. It uses the great Allegro library.
* Emulated hardware *
- 2A03 CPU emulation (Motorola 6502 variant) using cycle precision.
- 2C02 PPU emulation using a 'pixel-by-pixel' engine.
- Joypads 1 & 2.

- Full pAPU emulation, including squares, triangle, noise and DMC/RAW channel
s.
- Konami VRC6 sound emulation, used in 'Akumajou Densetsu' and 'Madara'.
- Famicom DiskSystem and VS-Unisystem are partially emulated, still buggy.
- Backed battery save to disk.
- 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.
NOTES: 1. Famicom DiskSystem emulation (as mapper #20) requires the BIOS file
named 'disksys.rom'
2. RockNES uses a custom RGB palette taken from Rockman Complete Works,
and a few 'holes' indexed with Chris Covell's palette.
3. I have no interest to emulate mapper #5 (MMC5, CastleVania 3).
> Other features available:
--------------------------- PPU color emphasis and monochrome masking.
- Accurate sprite #0 triggering and 8-sprites limitation.
- Joypad data logging (replay).
- Save states (emulation freezing).
- NESticle savestates are supported (.STA files).
- GUI and config file.
- Game Genie codes (still buggy).
- Exclusive ROM data patching.
- Sound logging (WAVE file).
- Built-in PRG-ROM data disassembler.
- Optional fake-stereo sound output.
- PPU image filtering on 640x480 as Pixelated, Scanlines or Stretched.
* Unemulated hardware *
-

All illegal CPU opcodes.


European NES console (PAL 50Hz) and japanese Famicom.
Input devices such as LightGun (Zapper), microphone, PowerPad and others.
Joypads 3 and 4.
VS-Dualsystem.
Playchoice-10 upper monitor (z80 emulation).
Extension sound chips other than VRC6.

> NOTES:
********
- RockNES has ZIP file loading.
- You can record your gameplay. The joypad states are saved to disk, so the ga
meplay
can be exactly reproduced.
- Game Genie codes are supported.
- When first run, RockNES creates a config file named 'rocknes.ini'. There's a
lot of options, so open the file using an editor, like MS Notepad, and have fun
.
- NES memory dumping is supported, as listed below.
Legend: T = text file, B = binary file.
# Menu -> CPU -> Dump... -> "RAM",
"Work-RAM"
"CPU $8000-$FFFF"
"CPU registers"
"PRG ROM data"

"CHR ROM data"


"Palette RAM"
"Pattern table"
"Nametables"
"Sprite RAM"
+---------------------+------------------+---------------+------+
| context
| CPU memory range | filename
| type |
+---------------------+------------------+---------------+------+
| System RAM
| 0000h-1FFFh
| nes_ram.bin | B |
| PRG ROM data
| built-in
| gamename.prg | B |
| PRG RAM data
| 8000h-FFFFh
| gamename.p8f | B |
| Work-RAM
| 6000h-7FFFh
| nes_wram.bin | B |
+---------------------+------------------+---------------+------+
+---------------------+------------------+---------------+------+
| context
| PPU memory range | filename
| type |
+---------------------+------------------+---------------+------+
| CHR RAM data *
| 0000h-1FFFh
| gamename.gfx | B |
| Nametables
| 2000h-3EFFh
| gamename.nam | B |
| Palette RAM
| 3F00h-3FFFh
| pal_ram.bin | B |
| Sprite RAM
| built-in
| sprites.ram | B |
| CHR ROM data
| built-in
| gamename.chr | B |
+---------------------+------------------+---------------+------+
* As known as Pattern table.
# Menu -> File -> Game Information
# Menu -> CPU -> Dump... -> CPU registers
+---------------------+------------------+---------------+------+
| context
| Information
| filename
| type |
+---------------------+------------------+---------------+------+
| iNES header info
| 16 bytes header | gamename.txt | T |
| CPU registers
| Actual CPU state | cpu6502.txt | T |
+---------------------+------------------+---------------+------+
[==========================================================================]
* KNOWN EMULATION ISSUES (version 5.00):
- Better PPU support is required to run mapper 4 games, plus to get perfect
timing to fix some picky games (Battletoads), but I'd need to rewrite/tweak my
PPU core in order to work like the NES PPU does the tile fetching thing... -_- Famicom Disksystem driver is junked, as I don't plan a fix or update for now.
- No mapper 4 games will work, as Super Mario Bros 3, due to mapper IRQs.
- MMC2/MMC4 games are 1 tile glitched usually in the right side.
- Mapper #90 Mortal Kombat Special uses a slightly different hardware, so
expect a few issues.
- Some mappers might be still broken due to lack of proper testing.
- Garbaged scanline(s) with games that require a perfect IRQ timing.
- Battletoads might hang during stage 2 (Impact Crater). You could get that
megawarp at the beginning, rushing directly to Turbo Tunnel... ^_^;;
[==========================================================================]
2. Configuration and default setup
---------------------------------> 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] UP
= 'U'
DOWN = 'J'
LEFT = 'H'
RIGHT = 'K'
A
= 'S'
B
= 'A'
SELECT = 'Q'
START = 'W'

no device assigned (KEYBOARD)


key.
key.
key.
key.
key.
key.
key.
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> - Switch to GUI / back to gameplay.
<F1>
<F2>
<F3>
<F4>

toggles Frames-Per-Second display on/off.


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

<F5>
<F6>
<F7>
<F8>

NES soft reset (RAMs are not cleaned)


FDS disk side flip (A->B->C->D->A...)
FDS disk insert/eject
to insert coins (VS Unisystem)

<F9>
<F10>
<F11>
<F12>

gameplay logging
gameplay player
unused?
take screenshot

<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 for updating them, heh)
[Main]
- Load ROM...........:
- Game information...:
- Screenshot.........:
- WAVE logging.......:
- Quit...............:
[CPU]

Lists files of extension .NES/.NEZ/.FDS/.BAK/.ZIP


Displays iNES header information + CRCs.
Takes a screenshot (BMP).
Record WAV files.
Close the emulator.

Reset..............:
Save state.........:
Load state.........:
Load NESticle state:
Dump...............:

[Misc]
- Video resolution...:
- Movies.............:
- Palettes...........:
- ROM cheat..........:
- Game Genie.........:
- ROM Corruptor!.....:

Emulation reset.
To save your progress.
To load your progress.
Ability to load a NESticle progress.
NES memory dumping (lots of options).
You can change the video card/resolution.
Record, play, stop and status of a NES movie.
Set the current palette (for VS Unisystem games).
You can patch the loaded ROM data.
You can enter Game Genie codes (up to 10).
Corrupts a certain memory range.

[Help]
- System.............: 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 years ago. Here's the description:
+--------+------+------------------------------------------+
| Offset | Size | Content(s)
|
+--------+------+------------------------------------------+
| 0
| 3 | 'NES'
|
| 3
| 1 | 1Ah
|
| 4
| 1 | 16K PRG-ROM page count (size=x*0x4000) |
| 5
| 1 | 8K CHR-ROM page count (size=y*0x2000) |
| 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:
========
a) PRG-ROM stands for PRoGram ROM, or actual 6502 CPU instructions.
b) 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 such as 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)
**************************
* Special thanks
reach its current
* Thanks to Brad
* Thanks to _Bnu

to Shay Green for his test ROMs, or else RockNES wouldn't


state.
Taylor for his superb NES documents;
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 - website hosting
http://www.parodius.com
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 -- IO for uncompress .zip files using zlib
Version 1.00, September 10th, 2003
Copyright (C) 1998-2003 Gilles Vollant
Blargg's Home
http://www.slack.net/~ant/
[=========================================================================]
[=========================================================================]
//eof