[go: up one dir, main page]

File: iNES.html

package info (click to toggle)
ines 1.0
  • links: PTS
  • area: non-free
  • in suites: potato
  • size: 356 kB
  • ctags: 85
  • sloc: makefile: 32
file content (796 lines) | stat: -rwxr-xr-x 31,920 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
<HTML>
<HEAD>
<TITLE>iNES Documentation</TITLE>
</HEAD>

<BODY BGCOLOR=#FFFFFF LINK=#006000 VLINK=#006000>

<CENTER>
<H1><FONT COLOR=#FF0000>
iNES<BR>version 1.0
</FONT></H1>
<H3>by <A HREF="http://www.komkon.org/fms/">Marat Fayzullin</A></H3>
</CENTER>
<P>

<H1>Contents</H1>
<UL>
<LI><A HREF="#LABA">Disclaimers</A>
<LI><A HREF="#LABB">New in This Version</A>
<LI><A HREF="#LABK">History</A>
<LI><A HREF="#LABC">Introduction</A>
<LI><A HREF="#LABD">iNES Ports</A>
<LI><A HREF="#LABE">Registered Users</A>
<LI><A HREF="#LABF">What is Included</A>
<LI><A HREF="#LABG">What is not Included</A>
<LI><A HREF="#LABH">Buttons</A>
<LI><A HREF="#LABI">Command Line Options</A>
<LI><A HREF="#LABJ">Frequently Asked Questions</A>
</UL>
<HR>

<A NAME="LABA">
<H1>Disclaimers</H1>
</A>
<UL>
<LI><I>Nintendo Entertainment System (NES), Famicom, Famicom Disk System
       and Dandy</I> are all registered trademarks of Nintendo.
<LI><I>GameGenie</I> is a registered trademark of Galoob.
<LI>The author is in no way affiliated with Nintendo.
<LI>The author is in no way affiliated with any pirate group out there.
<LI>The author <U>cannot</U> and <U>will not</U> provide you with
    any NES or Famicom games.
<LI>The author cannot be held responsible for anything this program
    will do to your computer, brains, free time, housemates, pets, or
    family members.
</UL>
<HR>

<A NAME="LABB">
<H1>New in This Version</H1>
</A>
<UL>
<LI>Rewritten and extended documentation. READ IT!
<LI>Famicom DiskSystem emulation. 
<LI>VS System emulation. 
<LI>Majorly bugfixed PPU emulation. 
<LI>Completely rewritten mapper code.
<LI>NES 6502 does not support decimal math. 
<LI>Direct saving of soundtrack to MIDI files. 
<LI>Default palette can be loaded from a file.
<LI>Speed control in iNES-Windows. 
<LI>Window size/position snapshots in iNES-Windows.
<LI>Keyboard assignments added to iNES-Windows.
<LI>Added speed control to VGB-Unix.
<LI>Removed description of the .SND format.
<LI>Moved .NES format description to the hardware document.
<LI>Many other small fixes and improvements.
</UL>
<HR>

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

<A NAME="LABC">
<H1>Introduction</H1>
</A>
  iNES is a portable emulator of the Nintendo Entertainment System (aka
Famicom in Korea and Japan, Dandy in Russia), written in C. The original
idea belongs to Alex Krasivsky from Moscow, who also wrote the original
code. I added missing CPU commands, wrote screen drivers, then rewrote the
code, then did thorough hacking to make it as compatible with the real
hardware as possible, and suddenly wound up with a completely different
emulator of my own.
<P>
  You can always get latest iNES binaries and support files from
<P>
<CENTER>
<A HREF="http://www.komkon.org/fms/iNES/">
http://www.komkon.org/fms/iNES/
</A>
</CENTER>
<P>
  At the present time, iNES successfully runs most NES/Famicom games
and supports such esoteric devices as GameGenie, Family BASIC keyboard,
and Famicom Disk System. Following is a list of features supported by
iNES at this moment:
<UL>
<LI><B>General NES Hardware</B>
<UL>
  <LI>CPU (6502 without decimal math)
  <LI>8kB Internal RAM
  <LI>Two Joysticks
</UL>
<LI><B>Video Processor (aka PPU)</B>
<UL>
  <LI>Up to 16kB of VRAM
  <LI>Screen Mirroring
  <LI>Scrolling via $2005
  <LI>Screen Splits via $2006
  <LI>Several Choices of Palette
  <LI>Sprites with Priorities
  <LI>Sprite Hit Flag
</UL>
<LI><B>Sound Generator</B>
<UL>
  <LI>Three Channels of Melodic Sound 
  <LI>White Noise Channel
  <LI>PCM Wave Channel (Macintosh port only)
</UL>
<LI><B>NES/Famicom Add-Ons</B>
<UL>
  <LI>Galoob GameGenie
  <LI>Famicom DiskSystem
  <LI>Nintendo VS-System
  <LI>FamilyBASIC 2 Keyboard (Unix port only)
  <LI>FamilyBASIC 3 Keyboard (Unix port only)
</UL>
<LI><B>Cartridges</B>
<UL>
  <LI>Battery Backed RAM
  <LI>CN-ROM Cartridges (#2)
  <LI>UN-ROM Cartridges (#3)
  <LI>Generic 32kB ROM Switch (#7)
  <LI>Specialized 32kB ROM Switch (#34)
  <LI>Nintendo MMC1 Chip (#1)
  <LI>Nintendo MMC2 Chip (#9)
  <LI>Nintendo MMC3 Chip (#4)
  <LI>Nintendo MMC4 Chip (#10)
  <LI>Nintendo MMC5 Chip (#5)
  <LI>Konami VRC4 Chip (#21)
  <LI>Konami VRC2a Chip (#22)
  <LI>Konami VRC2b Chip (#23)
  <LI>Konami VRC6 Chip (#24, not quite done)
  <LI>FrontFarEast Copier F4xxx Games (#6)
  <LI>FrontFarEast Copier F3xxx Games (#8)
  <LI>FrontFarEast Copier F6xxx Games (#12, not quite done)
  <LI>FrontFarEast Copier F8xxx Games (#17)
  <LI>ColorDreams Cartridges (#11, not quite done)
  <LI>Bandai Cartridges (#16)
  <LI>Jaleco SS8806 Chip (#18)
  <LI>Namco 106 Chip (#19)
  <LI>Irem G-101 Chip (#32)
  <LI>Taito TC0190/TC0350 Chips (#33)
  <LI>100-in-1 Cartridge (#15)
</UL>
<LI><B>Other</B>
<UL>
  <LI>Automatic Handling of GZIPped ROMs
  <LI>Soundtrack Logging into MIDI Files
  <LI>Built-In Debugger (Unix port only)
  <LI>Screen Snapshots (MSDOS port only)
</UL>
</UL>
<HR>

<A NAME="LABD">
<H1>iNES Ports</H1>
</A>
  Because of its portability, iNES can be compiled on a wide variety of
platforms: Unix, Amiga, Macintosh, MSDOS, Windows, etc. Unfortunately, it
looks that for each person geniunely interested in hardware hacking and
revival of the old videogame experience there is a dozen of adolescent
gremlins hungry for a quick fun of playing pirated NES games on their PCs.
Because of that, I decided not to release iNES source code and not to
produce free versions of iNES for MSDOS or Windows. I do not want to
provide free entertainment for the vermin. I do feel it necessary to
apologize for inconvinience created to all the intended users of iNES.
The complete up-to-date list of iNES ports can be obtained from the
iNES distribution site. Following are the major ports of iNES available
at the moment:
<DL>
<DT><H2>Unix</H2>
<DD>
  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.
<P>
<DT><H2>MacOS</H2>
<DD>
  The Macintosh version of iNES is being developed by John Stiles. It is
available from him as a shareware and can be found at the iNES distribution
site.
<P>
<DT><H2>Windows 95/98/NT</H2>
<DD>
  The Windows version of iNES is available from me, Marat Fayzullin, for
$35US. This fee ensures that you will get you the latest full version of
iNES-Windows with sound and joystick support, saved preferences, GameGenie
support, and free updates via email as long as iNES-Windows is being
updated. For more information about it, take a look at
<P>
<CENTER>
<A HREF="http://www.komkon.org/fms/iNES/iNESWindows.html">
http://www.komkon.org/fms/iNES/iNESWindows.html
</A>
</CENTER>
<P>
  I do not feel very good about maintaining the Windows version because
people pirate it a lot and most Windows users appear to be mentally
underdeveloped (judging from their email, anyway). If you <B>do want</B>
to see Windows version being developed, please, register it by one of the
following methods:
<P>
<DL>
<DT><B>ORDER BY MAIL</B>
<DD>
Send $35US in cash, money order, or a US bank check to:
<FONT COLOR="#000060">
<PRE>
     Marat Fayzullin
     6304 Hampton Place
     Elkridge, MD 21075
     USA
</PRE>
</FONT>
Don't forget to include your email address and mention that you want
iNES-Windows, as I'm selling several other products as well. The software
will be emailed to you as soon as I receive the money. 
<P>
<DT><B>ORDER BY PHONE</B>
<DD>
Call one of the following numbers in US:
<FONT COLOR="#000060">
<PRE>
     1-800-242-4775 (extension 15246)
     1-713-524-6394 (extension 15246)
</PRE>
</FONT>
and refer to product #15246 (iNES-Windows). This service is provided by
Public Software Library (PSL). You can pay them with a credit card. Don't
forget to give them your email address. The software will be emailed to
you as soon as I receive the notification from PSL. 
<P>
<DT><B>ORDER ON THE WEB</B>
<DD>
Tell your WWW browser to go to
<P>
<CENTER>
<A HREF="http://www.pslweb.com/cgi-win/psl_ord.exe/ITEM15246">
http://www.pslweb.com/cgi-win/psl_ord.exe/ITEM15246
</A>
</CENTER>
<P>
and use the online form to register iNES-Windows. You can pay with a credit
card. They take MasterCard, Visa, Amex, or Discover. The software will be
emailed to you as soon as I receive the notification from PSL. 
</DL>
<P>
<DT><H2>MSDOS</H2>
<DD>
  There are no publicly available MSDOS versions of iNES. Please, do not
mail me asking for it: I won't answer to you. I won't allow anyone to do
an MSDOS port of iNES either. See above for the reasons why. 
<P>
<DT><H2>Linux</H2>
<DD>
  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. Please, do not ask me for an SVGALib version though:
I do not consider SVGALib as a viable standard and will not develop for
it.
</DL>
<HR>

<A NAME="LABE">
<H1>Registered Users</H1>
</A>
  If you registered iNES-Windows, <U>please</U> do not give your copy to
anybody. And I do mean <U>anybody</U>. There was a couple of cases when
registered users gave iNES away to their friends, relatives, or just "KeWl" 
guys on the Net, and then I found it pirated, put onto WWW pages, and even
<U>posted</U> 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.
<P>
  I understand that the previous paragraph may sound threating 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. 
<P>
  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 are protected by the law allowing
customers to backup bought software.
<HR>

<A NAME="LABF">
<H1>What is Included</H1>
</A>
  Following files are included into the distribution:
<FONT COLOR="#000060">
<PRE>
  ines        - iNES executable file (Unix. ines -help for options)
  ines-debug  - iNES with debugger (Unix. ines-debug -help for options)
  ines.exe    - iNES executable file (Windows)
  iNES.html   - This documentation
  CART.NES    - Sample ROM image
  headers.tgz - .NES file headers for some games (Unix)
  headers.zip - .NES file headers for some games (Windows)
</PRE>
</FONT>
<HR>

<A NAME="LABG">
<H1>What is not Included</H1>
</A>
  Absolutely no ROM images of NES/Famicom games are included. These 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.
<P>
  The iNES WWW page contains some links to NES cartridge copier info. 
Cartridge copiers can be used to dump NES cartridges into files. I can
not provide you with any additional information about these copiers, so do
not send me email asking for this information. Use the copier-related
links at the iNES WWW page. 
<P>
  I'm no longer distributing the 6502 disassembler and NESLIST cartridge
listing utility with this emulator. These programs are now distributed
separately in the EMUTools package, also available at iNES WWW page. 
<HR>

<A NAME="LABH">
<H1>Buttons</H1>
</A>
  When using FamilyBASIC keyboard, press [CONTROL]+[KEY] to access a
special function of a [KEY] if it also performs a keyboard function.
<FONT COLOR="#000060">
<PRE>
  [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]  - Light gun trigger (not quite done)
  [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]       - Toggle GameGenie cheats on/off
  [F6]       - Insert VS System coin/Flip DiskSystem floppy
  [F7]       - Cycle through palettes
  [F11]      - Reset NES
  [SHIFT] and [CAPSLOCK] switch between joypads

  When compiled with #define SOUND:
  [1]-[5]    - Toggle sound channels on/off
  [0]        - Toggle all sound on/off
  [-]        - Decrease sound volume
  [+]        - Increase sound volume

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

  When compiled with #define MSDOS:
  [F8]       - Toggle joystick 1 on/off
  [F9]       - Toggle joystick 2 on/off
  [F10]      - Make a screen snapshot (SNAPxxxx.GIF)
  [PGUP]     - See upper part of the screen
  [PGDOWN]   - See lower part of the screen
</PRE>
</FONT>
<HR>

<A NAME="LABI">
<H1>Command Line Options</H1>
</A>
<FONT COLOR="#000060">
<PRE>
  -verbose &lt;level&gt;    - Select debugging messages [5]
                         0 - Silent             1 - Startup messages
                         2 - Illegal accesses   4 - Illegal CPU ops
                         8 - Bank switching    16 - DiskSystem
                        32 - PPU accesses
  -hperiod &lt;period&gt;   - Number of CPU cycles per HBlank [115]
  -vperiod &lt;period&gt;   - Number of CPU cycles per VBlank [30475]
  -uperiod &lt;period&gt;   - Number of VBlanks per screen update [3]
  -help               - Print this help page
  -cheat &lt;GG code&gt;    - 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 [-ntsc]
  -rkbd/-jkbd/-nokbd  - FBASIC3R, FBASIC2J, or no keyboard [-nokbd]
  -disk/-nodisk       - Emulate/Don't emulate DiskSystem [-nodisk]
  -palette &lt;filename&gt; - Load default palette from a file [DEFAULT.PAL]
  -palette &lt;number&gt;   - Choose a color palette [0]
                        0 - Default            1 - Adjusted Pasofami
                        2 - Original Pasofami  3 - NESticle 0.2
                        4 - NESticle 0.21
  -logsnd &lt;filename&gt;  - Write soundtrack to a MIDI file [LOG.MID]
  -cheat &lt;GG code&gt;    - Activate a GameGenie cheat

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

  When compiled with #define SOUND:
  -sound [&lt;quality&gt;]  - Sound emulation quality [0]
                        0 - Off                1 - Adlib (MSDOS)
                        Values &gt;8191 are treated as wave synthesis
                        frequencies. Default frequency is 22kHz.
  -nosound            - Same as '-sound 0'

  When compiled with #define UNIX:
  -shm/-noshm         - Use/don't use MIT SHM extensions for X [-shm]
  -saver/-nosaver     - Save/don't save CPU when inactive [-saver]
  -sync &lt;frequency&gt;   - Sync screen updates to &lt;frequency&gt; [0]
  -nosync             - Same as '-sync 0'

  When compiled with #define MSDOS:
  -vsync/-novsync     - Sync/Don't sync screen updates [-novsync]
  -240/-200           - Use/Don't use non-standard 320x240 mode [-200]
</PRE>
</FONT>
<HR>

<A NAME="LABJ">
<H1>Frequently Asked Questions</H1>
</A>
<OL>
<LI><B>I WANNA PLAY GAMES!!!! WHERE DO I GET GAMES???????</B><BR>
  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.
<P>
<LI><B>How do I copy games from cartridges to a computer?</B><BR>
  You can use a special device called cartridge copier. Pascal Felber has
made such a copier. Its schematics and software are available at
<P>
<CENTER>
<A HREF="http://lsewww.epfl.ch/~felber/IO-56/">
http://lsewww.epfl.ch/~felber/IO-56/
</A>
</CENTER>
<P>
  You can also buy this copier from Pascal, either in parts or as a  
pre-built kit.
<P>
<LI><B>What is NES? How its hardware works?</B><BR>
  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
<P>
<CENTER>
<A HREF="http://www.komkon.org/fms/EMUL8/">
http://www.komkon.org/fms/EMUL8/
</A>
</CENTER>
<P>
<LI><B>There is no version of iNES for my Unix!</B><BR>
  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 :(.
<P>
<LI><B>Where do I get iNES for MSDOS?</B><BR>
  This is explained in the beginning of this document.
<P>
<LI><B>How do I make .NES files out of raw ROM images?</B><BR>
  The iNES distribution includes .NES file headers for some carts, which
can be used to convert carts into .NES format. These headers are <U>not</U>
guaranteed to work though. If you have a cartridge ROM in CART.PRG file,
and a cartridge VROM in CART.CHR file, the following has to be done to
create the CART.NES file:
<FONT COLOR="#000060">
<PRE>  
  in Unix:   cat CART.HDR CART.PRG CART.CHR > CART.NES
  in MSDOS:  copy/b CART.HDR+CART.PRG+CART.CHR CART.NES
</PRE>
</FONT>
  The size of a CART.PRG file should be divisible by 16384. The size of a
CART.CHR file should be divisible by 8192. 
<P>
<LI><B>My favorite game doesn't work on iNES. What do I do?</B><BR>
  There may be several reasons why a game has problems running on
iNES or does not run at all.
<P>
<UL>
<LI>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). Others get revealed by
    comparison with the sample headers which come with iNES (see
    headers.tgz or headers.zip file).
<P>
<LI>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. 
<P>
<LI>The VBlank and HBlank periods may be wrong. Try to play with them,
    using <CODE>-vperiod/-hperiod</CODE> options in Unix, or
    corresponding sliders in the Setup Panel of a Windows version. The
    first thing would be to make VBlank period bigger and see what
    happens.
<P>
<LI>The game does not run with a FamilyBASIC keyboard. The keyboard
    support if off by default, but if you have it on, turn it off by
    not using -rkbd/-jkbd options. On the other hand, some cartridges
    may require the keyboard. Use an -rkbd/-jkbd option for them. All
    above only applies if your version of iNES supports the keyboard
    (iNES Unix does).
<P>
<LI>The game may require some exotic piece of equipment, such as a
    light gun. Not all NES hardware addons are supported by iNES.
<P>
<LI>iNES can't currently run this game. Not all games are supported at
    this moment. Don't expect 100% compatibility with real hardware.
</UL>
<P>
<LI><B>Why is iNES so slow on my machine?</B><BR> 
  Because your machine is too slow to run iNES. My experience shows that
you need at least a Pentium/90 machine with fast video to run iNES at a
reasonable speed. Following are the ways to speeds thing up:
<P>
<UL>
<LI>Increase UPeriod. The picture will get more jerky, but iNES will
    become faster.
<P>
<LI>On Unix, always use MIT Shared Memory Extension for X (MITSHM). This,
    of course, means that you have to run iNES locally.
<P>
<LI>On Windows, use 1:1 window in 256-color mode to achieve the highest
    speed.
<P>
<LI>On Windows, use MIDI sound, as wave synthesis takes quite a lot of
    CPU time.
</UL>
<P> 
<LI><B>iNES is too fast on my machine! How do I slow it down?</B><BR>
  Frankly, when I started writing iNES, I never expected that it will be
<U>too fast</U> on any machine :). But times change...
<P>
<UL>
<LI>Decrease UPeriod to 2 or even to 1. The emulation will become much
    slower, but smoother.
<P>
<LI>On Unix, ue <CODE>-sync</CODE> option to tie screen updates to
    the certain frequency (usually, 60Hz/UPeriod).
<P>
<LI>On Windows, use "Sync To..." option in the setup window to tie
    screen updates to a certain frequency (usually, 60Hz/UPeriod).
<P>
<LI>On Windows, double or triple the window size.
</UL>
<P>
<LI><B>What are .NES files? Do you have format description?</B><BR>
  .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
<P>
<CENTER>
<A HREF="http://www.komkon.org/fms/EMUL8/">
http://www.komkon.org/fms/EMUL8/
</A>
</CENTER>
<P>  
<LI><B>What are .FDS files? Do you have format description?</B><BR>
  .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.
<P>
<LI><B>How do I use DiskSystem emulation in iNES?</B><BR>
  First of all, you need to have a file called DISKSYS.ROM in your
current directory. This file should contain DiskSystem BIOS and have
length of 8192 bytes.
<P>
  To run a program from an .FDS file, use the <CODE>-disk</CODE> option
in iNES-Unix, or just open this .FDS file in iNES-Windows. iNES will
start with the disk "removed" from the "drive". To insert the disk,
press [F6] 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 [F6]: 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), click [F6] multiple times.
<P>
<LI><B>What is NESLIST?</B><BR>
  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.
<P>  
<LI><B>What is EMUTools package and where can I get it?</B><BR>
  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 the iNES WWW site.
<P>
<LI><B>Do I need to unpack GZIPped ROM images to run them on iNES?</B><BR>
  No, unless your copy of iNES has been compiled without
<CODE>#define ZLIB</CODE>. iNES-Windows and most versions of iNES-Unix
are compiled with this option. It allows iNES to recognize and
automatically unpack GZIPped and singular PKZIPped files. To find out
whether your iNES-Unix supports this feature, run it with the
<CODE>-help</CODE> option and see if there is anything said about GZIP
support.
<P>
<LI><B>When starting iNES-Unix, ld says that libz library isn't found.</B><BR>
  Some iNES-Unix binaries are compiled with <CODE>#define ZLIB</CODE>
option to make them automatically recognize and unpack GZIPped files.
This option requires ZLib library which can be obtained from
<P>
<CENTER>
<A HREF="http://www.cdrom.com/pub/infozip/zlib/zlib.html">
http://www.cdrom.com/pub/infozip/zlib/zlib.html
</A>
</CENTER>
<P>
<LI><B>I entered registration code into iNES-MacOS and now it says I pirated it!</B><BR>
  iNES-MacOS will lock up if you try to "register" it without paying for
registration and using the correct registration code. It will then refuse
to work on your computer. If you <U>think</U> that you have been mistreated
for a simple typing error, contact John Stiles for help.
<P>
<LI><B>When starting iNES-Unix, ld says that some library isn't found.</B><BR>
  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.
<P>
<LI><B>When starting iNES-Unix, I get X_ShmAttach error.</B><BR>
  You are probably trying to run iNES-Unix on a remote Xterminal while it
attempts to use shared memory for interfacing with X. Use -noshm option to
tell it not to use shared memory. 
<P>
<LI><B>When starting iNES-Unix, I get X_PutImage error.</B><BR>
  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.
<P>
<LI><B>When starting iNES-Unix, the window stays black.</B><BR>
  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.
<P>
<LI><B>The sound is distorted in the iNES-Windows. How do I fix it?</B><BR>
  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:
<P>
<UL>
<LI>Use MIDI sound instead. It has both advantages and disadvantages
    though.
<P>
<LI>Make iNES window smaller to decrease the load on the CPU. 1:1 is
    the optimal size.
<P>
<LI>Decrease the sampling frequency (in Setup Panel). The sound may
    become tinkier, but less distorted.
<P>
<LI>Increase the number of wave buffers (in Setup Panel). This may
    cause sound to fall a second or two behind the screen action, but
    the sound quality will become better.
</UL>
<P>             
<LI><B>Does iNES-Windows support joystick? My joystick doesn't work!</B><BR>
  iNES-Windows supports joystick. If your joystick does not work, go into
Windows Control Panel to see if it is configured and calibrated properly. 
Also, some new joysticks working in esoteric standards (like GRiP) are
known to have problems.
<P>
<LI><B>iNES-Windows starts, but then quits immediately!</B><BR>
  Check the pathname to wherever your iNES is located. It should not contain
spaces. For example, "C:\Program Files\iNES" is a bad place for iNES, while
"C:\iNES" will work. This bug is caused by an old version of C compiler I am
using. I hope to get rid of it when I switch to a new compiler.
<P>
<LI><B>Colors are all screwed up in iNES-Windows!</B><BR>
  When running Windows in 256-color mode, it will try to approximate
colors to existing ones, but it won't always get an exact match. I'm
working on fixing this. For now, switch Windows into 16bit graphics to
get perfect colors.
<P>
<LI><B>Black window in iNES-Windows!</B><BR>
  If you are running Windows in 256-color mode, then this is most likely
the cause of a problem. Try switching Windows into 16bit screen mode. 
<P>
<LI><B>Command line options don't work in iNES-Windows!</B><BR>
  They shouldn't. The demo version of iNES-Windows supports no command
line interface at all. The full version will only accept the .NES file
name at the command line, but no options. All configuration is done via
Setup Panel and iNES.INI file.
<P>
<LI><B>Volume control works strangely in iNES-Windows!</B><BR>
  It is a result of the volume control being shared between iNES and other
Windows applications. You can usually restore normal volume by leaving iNES
window and then activating it again.
<P>
<LI><B>Will iNES-Windows work on Windows 3.xx?</B><BR>
  It may, but I can't guarantee it. iNES-Windows has never been tested on
Windows 3.xx. Maybe it is time to upgrade.
<P>
<LI><B>I'm a registered iNES-Windows user and some games no longer run!</B><BR>
  It is quite possible that your iNES.INI file no longer works with the
new version of iNES. It is my suggestion to delete iNES.INI every time you
get a new version of iNES. You can still use some ASCII editor (Notepad or
DOS Editor) to migrate some of your old settings into new iNES.INI.
<P>
<LI><B>What are those weird Fxxx and SMxxx files?</B><BR>
  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.
<P>
  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. 
<P>
<LI><B>What are the interleaved NES ROM images?</B><BR>
  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. 
<P>
<LI><B>What is that "Mirroring" flag?</B><BR>
  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). 
<P>
  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.
<P>
<LI><B>What are those "HPeriod" and "VPeriod" options?</B><BR>
  The <CODE>-hperiod</CODE> controls how many CPU cycles it will take to
refresh a single scanline of display (including HBlank).
<P>
  The <CODE>-vperiod</CODE> controls how many CPU cycles it takes to
refresh the entire screen (including VBlank). The VPeriod/HPeriod value
should never be less than 256 to give VBlank interrupt handlers enough
CPU cycles.
<P>
<LI><B>What is the "512-byte Trainer"?</B><BR>
  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.
</OL>
<HR>

<I>
&copy; Copyright by
<A HREF="http://www.komkon.org/fms/">Marat Fayzullin</A>
(fms@cs.umd.edu)
</I>
</BODY>
</HTML>