
                               R o c k N E S
                       A NES 8-bit videogame emulator
  <<======================================================================>>
          Copyright (c)1998-2003 Fx3, version 2.61 - Sun, Jan 26th
            LICENSE: Freeware, for absolutely non-commercial use
  <<======================================================================>>

   LICENSE AGREEMENT:
 - I am not affiliated with any company, people or whatever.
 - I am against piracy of games and ROMs distribution, indeed.
 - You cannot package any kind of ROM/BIOS images with this emulator, never.
 - This software is distributed *as is*, meaning so you use it at your own 
 risk. The author is no way responsible for any loss or damage resulting from
 the use or misuse.
 - If you disagree of these terms and conditions, delete this software now.
 - You didn't like it for some reason!? OKay, but NO FLAMES... be nice.

      *******************************************************************
       If you want to contact me, please, use the RockNES forum. Thanks!
              My website is located at http://rocknes.kinox.org
      *******************************************************************

 What's new for version 2.61
 ---------------------------
 - Changed WRAM dummy data to $FFs instead of $00s (Low G Man works, thanks
 to FluBBa for the information);
 - Sound changed to 16-bit output, plus volume decay;
 - Small fix in the pulse channels frequency;
 - Small fix in the triangle/noise channels volume;
 - Small improvement to Konami's VRC6 sound driver emulation;
 - Fixed a bug on RIFF wave header saving, now 16-bit signed;
 - Fixed filename for dumping $8000-$FFFF data;
 - Fixed emulator shutdown (whoooops!);
 - NMI/RESET/IRQ vectors (values) are now dumped correctly;
 - More cleanups.

   Note: feel free to edit 'oldnews.txt' for history of updates.

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

 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 an EAGLE filter in ASM x86, and the
 great Allegro library.

  NOTICE: RockNES *works* fine under WindowsXP, including full sound support
  (downloading VDMSound from http://ntvdm.cjb.net). Despite the DOS label!

 * What's emulated *

   - CPU 2A03 (custom 6502), core by Matthew Conte;
   - PPU 2C02 using a line-based render (~113.66 cycles/line);
   - Full i/o, except the expansion port capabilities;
   - Full sound (5 channels: 2 pulses, triangle, noise and DMC);
   - Konami VRC6 sound output;
   - PPU color emphasis and monochrome mode ($2001 reg);
   - Famicom DiskSystem and VS Unisystem devices (both partially);
   - Backed battery save/load;
   - Sprite #0 hits;
   - Supported iNES mappers 0,1,2,3,4,5,6,7,8,9,10,11,13,15,16,17,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 (mapper #20), you need the BIOS file
 disksys.rom in the same directory.

   > Other features available:
   ---------------------------
    - Ability to record your gameplay (*.RMx files, x=0..9);
    - Ability to save your progress (*.RSx files, x=0..9);
    - Support for loading NESticle saved states (*.STA, *.STx files);
    - GUI and config file (rocknes.ini);
    - Game Genie codes;
    - Real-time ROM data patching;
    - Video filters: EAGLE, Super2xSAI, SuperEagle, Pixelated (TV looking)
    and Scanlines (all displayed on 640x480).

 * Unemulated hardware *

 - NES PAL (50Hz) and Famicom hardwares;
 - Pixel-based render for CPU/PPU (+accuracy);
 - Accurate `sprite limit` PPU flag;
 - Expansion port (devices as PowerPad and Zapper);
 - VS Dualsystem;
 - Playchoice-10 upper monitor (within game instructions, z80 emulation);
 - Famicom DiskSystem sound emulation.

 > NOTES:
 ********

 1. There's no test for a minimal hardware to run RockNES, but a 200Mhz CPU
 might be enough to get 60FPS.
 2. ZIPped files can be loaded for ROMs, saved states or movies! Be sure to
 place just 1 file/ZIP.
 3. You can record your gameplay (the well known as "movies"). It's just a
 full log of the joypads states every emulated frame, hence your gameplay
 can be exactly reproduced.
 4. GAME GENIE CODES are supported.
 5. ROM data patching is supported, do not think this is Game Genie. You can
 input an address to fetch/write a certain value from/to ROM data loaded.
 6. NESticle saved states are partially supported.
 7. RockNES has a configuration file called ROCKNES.INI which is placed in
 the same directory. Use any text editor to setup a lot of things, such as
 inputs, directories 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).

 [==========================================================================]
 KNOWN PROBLEMS:

 - There's an unknown problem with 6-chars GameGenie codes;
 - Super2xSaI, SuperEagle and stretch blitters are *very* slow;
 - 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;
 - Partial FDS support, so a lot of games may not work (Metroid hangs);
 - Sound output quality is ~limited~ due to Allegro's audio stream context;
 - A few japanese mapper #2 games have scrolling problems, no clue why;
 - Allegro DOS under WinXP can cause problems with some video modes *IF*
 you try to change the video mode using the GUI.
 [==========================================================================]

 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

 <F1>  - increase bright (hold Shift to decrease it)
 <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

 <TILDE> - Fast forward
 <KEY_Q> - Quit to OS

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

 3. Using the GUI + Game Genie
 -----------------------------

 [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.
  - Hard reset.........: Emulation reset, RAM data is cleared.
  - 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.
  - Credits............: CPU core credits.

 [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.............: Current video/sound devices
  - 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, and you must reset the
 emulation to take effect for 6 chars codes only.

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

 4. iNES header format
 ---------------------

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

    +--------+------+------------------------------------------+
    | Offset | Size | Content(s)                               |
    +--------+------+------------------------------------------+
    |   0    |  3   | 'NES'                                    |
    |   3    |  1   | $1A                                      |
    |   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                      |
    |        |      |   %llllvTsM                              |
    |        |      |    |  ||||+- 0=Horizontal Mirroring      |
    |        |      |    |  ||||   1=Vertical Mirroring        |
    |        |      |    |  |||+-- 1=Backed battery            |
    |        |      |    |  ||+--- 1=Trainer data (512 bytes)  |
    |        |      |    |  |+---- 1=Four-screen mirroring     |
    |        |      |    |  |      ($2000,$2400,$2800,$2C00)   |
    |        |      |    +--+----- Mapper # (lower 4-bits)     |
    |   7    |  1   | ROM Control Byte #2                      |
    |        |      |   %hhhh00PU                              |
    |        |      |    |  |  |+- 1=VS Unisystem arcade       |
    |        |      |    |  |  +-- 1=Playchoice-10 arcade      |
    |        |      |    +--+----- Mapper # (upper 4-bits)     |
    |  8-15  |  8   | $00                                      |
    +--------+------+------------------------------------------+

 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 $0000-$1FFF space.

 3. By default, if 4-screen mirroring flag is set, then it's *hardwired*
 and cannot be changed.

 NOTICE:
 =======
 > Mappers 0-255 are valid numbers. However, some pirated ROMs can bring
 mappers greater than 255 - they use the low 4 bits of offset 7, which
 conflicts with the arcade hardware detection flags. RockNES does not support
 these ones.
 > The header brings the game data size. If the real file size does not match
 the size specified in the header, so 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 in no special order -

 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

 Matthew Conte - 6502 emulator core
 http://www.baisoku.org

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

 Parodius Networking & Kinox - website host
 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/                              

 Richard Bannister - MacOS port
 http://bannister.org

 * NES and Nintendo are trademarks of Nintendo CO.

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