File: README.TXT

package info (click to toggle)
snes9x 1.26-1
  • links: PTS
  • area: non-free
  • in suites: potato
  • size: 2,712 kB
  • ctags: 9,605
  • sloc: cpp: 40,776; asm: 27,081; ansic: 6,572; makefile: 314
file content (714 lines) | stat: -rw-r--r-- 32,838 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
Snes9x: The Portable Super Nintendo Entertainment System Emulator
=================================================================
v1.26 23-SEP-1999
=================

Home page: www.snes9x.com

Contents
========
Changes Since Last Release
Introduction
What's Emulated
What's Not
What You Will Need
Getting Started/Command Line Options
Keyboard Controls
Joystick Support
Netplay Support
Super FX
SA-1
3Dfx Support
Problems With ROMs
Sound Problems
Converting ROM Images
Speeding up the Emulation
Credits

Changes Since Last Release
==========================

Check the CHANGES file for a complete history of Snes9x changes between
versions.

Introduction
============

Snes9x is a portable, freeware Super Nintendo Entertainment System (SNES)
emulator. It basically allows you to play most games designed for the SNES
and Super Famicom Nintendo game systems on your PC or Workstation; which
includes some real gems that were only ever released in Japan.

Snes9x is the result of well over two years worth of part-time hacking,
coding, recoding, debugging, divorce, etc. (just kidding about the divorce
bit). Snes9x is coded in C++, with three assembler CPU emulation cores on the
i386 Linux, DOS and Windows ports.

Snes9x is better than a real SNES:
o Freeze a game at any position, then restore the game to that exact spot at
  a later date - ideal for saving a game just before a difficult bit.
o Built-in cheat cartridge.
o Built-in peripheral emulation. The SNES mouse, Multi-player 5 and SuperScope
  external add-ons are all emulated, they cost extra money with a real SNES.
o Stereo sound - yes I know the SNES produced stereo sound, but who actually
  paid the inflated price for the special lead just so you could hear it?
o No more cartridge contact cleaning!
o Some SNES hardware features that be turned on and off during game play,
  games might be using one of these features to deliberately make a section
  of the game more difficult. Easy, just turn the feature off.
o Networked game play.
o Alter the speed of SNES games.

Snes9x is worse than a real SNES:
o Unless your computer is very fast (Pentium II+), some games just can't
  hit every frame being rendered and the emulator starts to skip the drawing
  of some frames to keep the emulator running at a constant speed - to you
  it appears as if the graphics aren't moving as smoothly as they should.
o Not all games work; bugs and missing features cause some games to fail to
  work or renders them un-playable.
o You have to wait for your computer to boot before you can play games,
  no waiting on the real SNES!
o The SNES has an analog low-pass sound filter that give a nice bass to
  all the sounds and music - Snes9x doesn't emulate this. If you have
  a posh sound card, you could try fiddling with it mixer controls to produce
  a similar effect. Turning on interpolated sound helps a lot.

What's Emulated
===============
- The 65c816 main CPU.
- The Sony SPC700 sound CPU.
- SNES variable length cycles.
- 8 channel DMA and H-DMA (raster effects).
- All background modes, 0 to 7.
- Sound DSP, with eight 16-bit stereo channels, compressed samples, hardware
  attack-decay-sustain-release volume processing, echo, pitch modulation
  and digital FIR sound filter.
- 8x8, 16x8 and 16x16 tile sizes, flipped in either direction.
- 32x32, 32x64, 64x32 and 64x64 screen tile sizes.
- H-IRQ, V-IRQ and NMI.
- Mode 7 screen rotation, scaling and screen flipping.
- Vertical offset-per-tile in modes 2, and 4.
- 256x224, 256x239, 512x224, 512x239, 512x448 and 512x478 SNES screen
  resolutions.
- Sub-screen and fixed colour transparency effects.
- Mosaic effect.
- Single and dual graphic clip windows, with all four logic combination modes.
- Colour effects only inside a window.
- 128 8x8, 16x16, 32x32 or 64x64 sprites, flipped in either direction.
- SNES palette changes during frame (15/16-bit internal rendering only).
- Direct colour mode - uses tile and palette-group data directly as RGB value.
- Super FX, a 21/10MHz RISC CPU found in the cartridge of several games.
- SNES mouse.
- SuperScope (light gun) emulated using computer mouse.
- Multi-player 5 - allowing up to five people to play games simultaneously on
  games that support that many players.
- Game-Genie, Action Replay and Gold Finger cheat codes.
- Multiple ROM image formats, with or without a 512 byte copier header.
- Single or split images, compressed using gzip, and interleaved in one of two
  ways.
- Auto S-RAM (battery backed RAM) loading and saving.
- Freeze-game support, now portable between different Snes9x ports.
- Interpolated sound.

What's Not
==========
- Only partial DSP1 support, enough to play Mario Kart but no more. The DSP1
  is a math co-processor chip that was inside the cartridge of some games,
  notably Mario Kart and Pilot Wings.
- Any other odd chips that manufactures sometimes placed inside the
  cartridge to enhance games and as a nice side-effect, also act as an 
  anti-piracy measure, e.g. S-DD1, C4, etc.
- Pseudo hi-res. mode - SNES hardware uses interpolation to give apparent
  increase in horizontal resolution, use the TV or 3D/FX modes to get the 
  same effect.
- Mosaic effect on mode 7.
- A couple of SPC700 instructions that I can't work exactly out what they 
  should do.
- Fixed colour and mosaic effects in SNES hi-res. (512x448) modes.
- Offset-per-tile in mode 6. Luckily I haven't found a game that uses it, yet.

What You Will Need
==================

CPU
---
Faster the better, but 486DX4 100 minimum when using 8-bit graphics and
minimal or no sound, Pentium 166 or higher for transparency effects and
Pentium 200 or higher for Super FX and SA-1 games.

Memory
------
16Mb or more for Linux. Sun workstations shouldn't have a problem.

Screen
------
X Window System ports needs an 8, 15, 16, 24 or 32 bit X server running;
transparency effects are available at all depths, but don't look good with
only an 8-bit display. For maximum emulation speed, have the X server switched
to 8-bit and don't enable transparency effects, or 15 or 16-bit with
transparency effects enabled.

The Linux SVGA port is very limited at the moment due to no 16-bit screen
modes being supported on my main development machine. However, the Linux X
Window System version now has a full-screen mode, so there's hopefully no need
to use the SVGA version.

If you want to use the new stage 1 3dfx bi-linear and scaling features of
Snes9x, you will need a Voodoo 1, 2 or 3 graphics card and the glide library
installing; glide comes with SuSE 6.0 Linux or you can download it from
http://glide.xxedgexx.com/3DfxRPMS.html

Disk Space
----------
1Mb for the emulator.

Software
--------
Access to SNES ROM images in *.smc, *.sfc, *.fig or *.1, *.2, or sf32xxxa,
sf32xxxb, etc., format otherwise you will have nothing to run!

Some home-brewed ROM images can be downloaded from http://www.snes9x.com. To
find commerical games, you could try a web search engine and some imagnative
use of search strings, alternatively, I've heard http://www.cherryroms.com is
good place to try. Please note, it is illegal in most countries to have
commercial ROM images without also owning the actual SNES ROM cartridge.

Getting Started
===============

From a shell just type:
snes9x <ROM filename>

to start the X Window System port or

gsnes9x <ROM filename>

to start the X Windows System/Voodoo port.

ROM images are normally loaded from the directory ./roms. This can be
changed by specifying a pathname with the image name or setting the
environment variable SNES96_ROM_DIR to point to a different directory.

Freeze game files and S-RAM save files are normally read from and written to
the directory $HOME/.snes96_snapshots.  This can be changed by setting the
environment variable SNES96_SNAPSHOT_DIR to point to a different directory.

To enable full-screen mode on the Linux X Window System and SVGA ports, or to
use the Voodoo 3D card without the 3dfx Linux kernel driver installed, Snes9x
needs special system access permissions to allow it to write directly to video
RAM and alter video chipset register values. In the directory where Snes9x is
located, typing:

su root
chown root snes9x gsnes9x
chmod 4755 snes9x gsnes9x

will give the binaries the required access.

As an alternative for the voodoo port, rather than making the binary set-uid
root, download and install the 3dfx kernel driver, again available with SuSE
Linux 6.0 or download from http://glide.xxedgexx.com/3DfxRPMS.html 

Lots of command line flags are available:

Graphics options:
-tr or transparency (default: off)
   Enable transparency effects, also enables 16-bit screen mode selection.
   Transparency effects are automatically enabled if the depth of your X 
   server is 15 or greater. 
-16 or -sixteen (default: off)
   Enable 16-bit internal screen rendering, allows palette changes but no
   transparency effects.
-hires or -hi (default: lo-res.)
   Enable support for SNES hi-res. and interlace modes. USE ONLY IF GAME
   REQUIRES IT (FEW DO) BECAUSE IT REALLY SLOWS DOWN THE EMULATOR.
-y or -interpolate (default: off)
   Enables 'TV mode', hires support, 16-bit internal rendering and
   transparency effects. TV mode scales the SNES image by x2 by inserting an
   extra blended pixel between each SNES pixel and 80% brightness 'scan-lines'
   between each horizontal line. The result looks very nice but needs a fast
   machine. Use with the full-screen X mode and a 15 or 16 depth X server,
   or the SVGA port for fastest operation.
-nms or -nomodeswitch (default: switch modes)
   The Linux X Windows System port can change the screen resolution when
   switching to full-screen mode so the SNES display fills the whole screen.
   Specify this option to stop it if causes you problems.
-fullscreen or -fs
   Start the emulator in full screen mode, rather than a window on the X11
   port if supported by your X server, a suitable screen mode is defined in
   your XF86Config file and the snes9x binary has root permissions (see above).
-scale or -sc (default: off)
   Stretch the SNES display to fit the whole of the computer display.
   Linux X Window System full-screen mode or SVGA port only. Use only if you
   have a very fast machine.
-displayframerate or -dfr
   Display a frame rate counter superimposed over the bottom, left-hand corner
   of the SNES display. The value before the slash (/) indicates how many
   frames per second are being rendered compared to a real SNES, the value of
   which is displayed after the slash.

Sound options:
-ns or -nosound
   Disable sound CPU emulation and sound output, useful for the few ROMs
   where sound emulation causes them to lock up due to timing errors.
-sk 0-3 or -soundskip 0-3 (default: 0)
   ONLY USED IF SOUND IS DISABLED. The algorithm to use when trying to fool
   a ROM into thinking that the SPC700 sound CPU is there when actual emulation
   of it is turned off (for speed reasons).
-stereo or -st (default: stereo)
   Enable stereo sound output.
-mono (default: stereo)
   Enable mono sound output. Faster, but doesn't sound as nice.
-r 0-7 or -soundquality or -sq 0-7 (default: 4)
   Sound playback rate/quality:
       0 - disable sound, 1 - 8192, 2 - 11025, 3 - 16500, 4 - 22050 (default),
       5 - 29300, 6 - 36600, 7 - 44000.
-envx or -ex (default: off)
   Enable volume envelope height reading by the sound CPU. Can cure sound
   repeat problems with some games (e.g. Mortal Kombat series), while causing
   others to lock if enabled (eg. Bomberman series). Use with -sy option below
   to fix the problems this option can otherwise create.
-ts or -threadsound
   Starts to feed data to the sound card using a separate thread rather than
   using timers, signals and polling. Use to work around a bug in the Sound
   Blaster Live Linux driver that keeps telling Snes9x that the sound card
   can accept more sound data, when it actually cannot and Snes9x slows down
   or locks up, or if use have a multi-CPU system so sound processing can
   take place on the other CPU for speed.
-sy or -soundsync
   Turns on sound-sync code where sound data is generated in sync with the
   emulation of the SNES sound CPU instructions. Slighty slower emulation speed
   but helps reduce note and sound effects timing problems and one or two 
   games actually require this mode, notably Williams Arcade Classics.
   Also turns on interpolated sound and envelope height reading.
   Pressing the ']' key during gameplay toggles sound-sync only on and off.
   Not very effective/useless when thread sound is enabled due to mutex data
   locking timing problems.
-is or -interpolatedsound (default: off)
   Turns on interpolated sound. Any samples played at a lower frequency than
   the current playback rate (-r option) have additional sample points
   computed and played where previously the same sample data was played
   repeatedly. Lower frequency sounds have improved bass and sound much less
   harsh - I suspect the real SNES does this.
   Pressing '[' during gameplay toggles the feature on and off.
-b size or -buffersize size or -bs size (default: auto-select)
   Sound playback buffer size in bytes 128-4096.
-nosamplecaching or -nsc or -nc (default: on)
   Disable decompressed sound sample caching. Decompressing samples takes time,
   slowing down the emulator. Normally the decompressed samples are saved
   just in case they need to be played again, but the way samples are stored
   and played on the SNES, it can result in a click sound or distortion when
   caching samples with loops in them.
-noecho or -ne (default: on)
   Turn off sound echo and FIR filter effects. Processing these effects can
   really slow down a non-MMX Pentium machine due to the number of calculations
   required to implement these features.
-ratio 1+ or -ra 1+ (default: 2) (OBSOLETE)
   Ratio of 65c816 to SPC700 instructions. The value is no longer used
   because SPC700 cycle counting is now implemented giving much more acturate 
   timing.
-nomastervolume or -nmv (default: on)
   Disable emulation of the sound DSP master volume control. Some ROMs set
   the volume level very low requiring you to turn up the volume level of
   your speakers introducing more background noise. Use this option to
   always have the master volume set on full and to by-pass a bug which
   prevents the music and sound effects being heard on Turrican.

Cheat options:
-gg <code> or -gamegenie <code>
   Supply a Game Genie code for the current ROM. Up to 10 codes can be in
   affect at once. Game Genie codes for many SNES games are available from:
   http://game-genie.nvc.cc.ca.us
-ar <code> or -actionreplay <code>
   Supply a Pro-Action Reply code for the current ROM. Up to 10 codes can be in
   affect at once. At the moment, codes which alter RAM do not work.
-gf <code> or -goldfinger <code>
   Supply a Gold Finger code for the current ROM. Up to 10 codes can be active
   at once.

Speed up/slow down options: (See "Speeding Up The Emulation")
-f <frame skip count> or -frameskip <frame skip count> (default: auto-adjust)
   Set this value to deliberately fix the frame skip rate and disable auto-
   speed regulation. Use a larger value faster emulation but more jerky
   movement and a smaller value for smooth but slower screen updates.
   Use '+' and '-' keys to modify the value during a game.
   Ideal for some Super FX games that confuse the auto-adjust code or
   for games that deliberately flash the screen every alternate frame.
-frametime <time in milliseconds> or -ft <time in milliseconds>
   (default: 16.6ms NTSC games and 20ms for PAL games)
   If auto-adjust frame skip option is in effect, then the emulator will try
   to maintain a constant game and music speed locked to this value by skipping
   the rendering of some frames or waiting until the required time is reached.
   Increase the value to slow down games, decrease it to speed up games.
   During a game the value can be adjusted in millisecond steps by pressing
   Shift '-' or Shift '+'.
-h <0-200> or -cycles <0-200>(default: 100)
   Percentage of CPU cycles to execute per scan line, decrease value to
   increase emulation frame rate. Most ROMs work with a value of 85 or above.
-j or -nojoy
   Turn off joystick, SideWinder and GrIP detection (joystick polling on the
   PC slows the emulator down).

ROM image format options:
-i or -interleaved (default: auto-detect)
   Force interleaved ROM image format.
-i2 or -interleaved (default: can't be auto-detected)
   Force alternate interleaved format (i.e. most Super FX games).
-hirom or -fh or -hr (default: auto-detect)
   Force Hi-ROM memory map for ROMs where the Hi-ROM header test fails.
-lorom or -fl or -lr (default: auto-detect)
   Force Lo-ROM memory map for ROMs where the Hi-ROM header test fails)
-header or -hd (default: auto-detect)
   Force the detection of a ROM image header. Some ROM images have been 
   hand-edited to remove unused space from the end of the file; if the
   resultant image size is not a multiple of 32k then Snes9x can't 
   auto-detect the presense of a 512 byte ROM image header.
-noheader or -nhd (default: auto-detect)
   Force Snes9x into thinking no ROM image header is present. See -header
   above.
-p or -pal (default: auto-detect)
   Fool ROM into thinking this is a PAL SNES system and adjust frame time
   to 20ms (50 frames per second)
-n or -ntsc (default: auto-detect)
   Fool ROM into thinking this is a NTSC SNES system and adjust frame time
   to 16.7ms (60 frames per second)
-l or -layering (default: off)
   Swap background layer priorities from background involved in sub-screen
   addition/subtraction. Can improve some games play-ability - no need to
   constantly toggle background layers on and off to read text/see maps, etc.
   Toggle feature on and off during game by pressing '8'.
   Not used if transparency effects are enabled.
-l <freeze game file name> or -loadsnapshot <freeze game file name>
   Load snapshot file and restart game from saved position.
-nh or -nohdma (default: H-DMA enabled)
   Turn off the H-DMA emulation. Pressing '0' during a game toggles H-DMA on
   and off.
-n or -nospeedhacks (default: speed hacks)
   Turn off a couple of speed hacks. The hacks boost the speed of many ROMs
   but cause problems a few ROMs.
-nw or -nowindows (default: graphics windows emulated)
   Disable graphics windows emulation. Use 'backspace' key during a game to
   toggle the emulation on and off.

Joystick options:
-joymap[1|2|3|4] followed by 8 numbers
   Specify the SNES joypad buttons to Linux joystick driver buttons mapping for
   each of the four supported joypads.
   Specify the Linux joystick button number for the corresponding SNES button
   in the following order: A, B, X, Y, TL, TR, Start and Select
   The default map is: 1 0 4 3 6 7 8 9 
   which is suitable for Sidewinder gamepads.
-s or -swap
   Swap emulated joy-pad 1 and 2 around, pressing '6' during a game does the
   same thing.
-j or -nojoy
   Turn off joystick, SideWinder and GrIP detection (joystick polling on the
   PC slows the emulator down).

For example, to start a game called "mario", with sound, and transparency
effects, type:

snes9x -tr mario.smc

Keyboard Controls
=================

While the emulator is running:
'Escape'                 Quit the emulator
'Pause' or 'Scroll Lock' Pause the emulator
Alt+'f' or PrtSc	 Toggle the Linux X11 port full-screen mode on and off.

Joy-pad 1:
'up' or 'u'             Up direction
'down', 'j' or 'n'      Down direction
'left' or 'h'           Left direction
'right' or 'k'          Right direction
'a', 'v' or 'q'         TL button
'z', 'b' or 'w'         TR button
's', 'm' or 'e'         X button
'x', ',' or 'r'         Y button
'd', '.' or 't'         A button
'c', '/' or 'y'         B button
'return'                Start button
'space'                 Select button

'Mouse left'            Mouse left button or SuperScope fire button.
'Mouse right'           Mouse right button or SuperScope cursor button.

'tab'                   SuperScope turbo toggle switch.
'`'                     SuperScope pause button.

'0'                     Toggle H-DMA emulation on/off.
'1'                     Toggle background 1 on/off.
'2'                     Toggle background 2 on/off.
'3'                     Toggle background 3 on/off.
'4'                     Toggle background 4 on/off.
'5'                     Toggle sprites (sprites) on/off
'6'                     Toggle swapping of joy-pad one and two around
'7'			Rotate between Multi-player 5, mouse on port 1,
                        mouse on port 2 and SuperScope emulation.
'8'                     Toggle background layer priorities for backgrounds
                        involved in sub-screen addition/subtraction.
'9'			Toggle transparency effects on and off - only if
			16-bit screen mode selected.
'Backspace'		Toggle emulation of graphics window effects on/off.

'-'			Decrease frame redraw skip rate
'+'			Increase frame redraw skip rate
			The sequence is auto-frame rate adjust, render every
                        frame, render 1 frame in two, render 1 frame in three,
                        render 1 frame in four, etc.

Shift+'-'		Decrease frame time in 1ms steps.
Shift+'+'		Increase frame time in 1ms steps.
			The frame time value is the average length of time a
			single frame should take to emulate - works only if
			the auto-frame rate adjust is operational.
			The code will skip the rendering of some
			frames in order to try and reach the required value.
Shift+'F1-F10'          Quick save a freeze game file.
'F1-F10'                Quick load a freeze game file, restoring a game to an
                        exact position.
Alt or Ctrl+'F2' or 'F11' Load a game's saved position.
Alt or Ctrl+'F3' or 'F12' Save a game's position.

Alt or Ctrl+'F4' -> 'F11' Toggle sound channels on/off.
Alt or Ctrl+'F12'       Turn on all sound channels.

Joystick Support
================

The Linux port now makes use of the new v1.x joystick kernel drivers written
by Vojtech Pavlik (vojtech@ucw.cz) to allow the use of a wide varity of
different joystick/joypad types to control SNES games.

Older versions of the drivers are included in recent development Linux
kernels. Download the lastest driver version from 
http://atrey.karlin.mff.cuni.cz/~vojtech/joystick/

Refer to the documentation that comes with the drivers to enable support for
your type of joystick/pad in Snes9x.

Netplay Support
===============

The Linux and UNIX ports of Snes9x support networked game-play, where each
player of a multi-player SNES game can be on their own workstation.  Due to
the nature in which the emulated SNES games where written and general lack of
speed of the Internet, only local-area network game play is usually possible.

Start the s9xserver process on one machine, then start snes9x on each
workstation giving the extra command-line flag -server <hostname> where
<hostname> is the name of the machine where the s9xserver process was started.
It is also possible to specify the server name by setting the environment
variable S9XSERVER to the server hostname.

Snes9x normally uses network port 6096 by default, this can be changed by
specifying -port <port num> on the command line of the server and snes9x,
or by setting the environment variable S9XPORT.

The first snes9x session to connect to the server becomes player 1 and dicates
what ROM all other snes9x clients will have to run before connecting to the
server. The second client to connect becomes player 2, and so on. As each new
snes9x client process connects to the server, existing games in progress are
reset to the beginning to keep everyone in sync.

Some SNES games randomise game play and screen layout using data from the SNES
sound chip, notably the Bomberman series. Since Snes9x doesn't keep the sound
generation in exact synchronisation with the CPU emulation (if it did you'd
keep hearing breaks in the sound), you find such games can vary the screen
layout and baddy movement between Snes9x sessions given that all other
external input is identical, thus making it difficult to play multi-player
networked sessions with these games. To network play such games, either switch
off sound (-ns) or wait until I provide a re-sync option in a future release.

Super FX
========

The Super FX is a 10/21MHz RISC CPU developed by Argonaut Software used as a
game enhancer by several game tiles. Support is still a little buggy but most
games work very well, if a little slowly. Released SNES Super FX games included
Yoshi's Island (best single-player game on SNES, if you like platform games),
Doom, Winter Gold, Dirt Trax FX, StarFox, Stunt Race FX and Vortex. If you're
lucky, you might find a copy of the unreleased Starfox 2 image floating around.

Lots of Super FX ROM images available are in an odd interleaved format that
I haven't worked out how to auto-detect. If your ROM image isn't working try
using the -i2 command line flag.

SA-1
====

The SA-1 is a fast, custom 65c816 8/16-bit processor, the same as inside the
SNES itself, but clocked at 10MHz compared to a maximum of 3.58MHz for the CPU
inside the SNES.

The SA-1 isn't just a CPU, it also contains some extra circuits developed by
Nintendo which includes some very fast RAM, a memory mapper, DMA, several
real-time timers, and the region lock-out chip.

Snes9x includes emulation of most features of the SA-1, enough to play Mario
RPG. The chip seems to be used in several other games that Nintendo released
in 1996 and beyond, notably Kirby Superstars, Kirby Dreamland 3 and Paradius 3.

3Dfx Support
============

Included in this release of Snes9x is stage 1 Voodoo 3d graphics card support.
If you run gsnes9x and, it either has root permission or you install the 3dfx
kernel driver module, snes9x will use the 3dfx card to scale and interpolate
the SNES image to fill your whole monitor screen - the results look very nice.

Downloading textures to Voodoo cards isn't particularly fast, and snes9x has
to download each software rendered SNES image as a new texture every frame, so
using the 3dfx in this way isn't as fast as you might expect or as fast as I'd
hoped.

However, there is hope. Stage 2 support in future Snes9x versions will
dispense with the software rendering stage altogether, and get the 3dfx card
to render each frame directly, removing the need to download a large texture
each frame and speeding the whole process up; expect a large speed increase,
especially when SNES translucency effects are also being used in a game.

Problems With ROMs
==================

If the emulator just displays a black screen for over 10 seconds, then one
of the following could be true:

1) If its a Super FX game, chances are its in interleaved2 format, try the -i2
   switch.
2) Someone has edited the Nintendo ROM information area inside the ROM image
   and Snes9x can't work out what format ROM image is in. Try playing
   around with the ROM options: -i, -fl, -fh, -hd, -nhd.
3) The ROM image is corrupt. If you're loading from CD, I know it might
   sound silly, but is the CD dirty?
4) The original SNES ROM cartridge had additional hardware inside that is not
   emulated yet and might never be - e.g. Street Fighter Alpha 2 (S-DD1),
   Megaman X2 and Megaman X3 (C4).

The following ROMs are known currently not to work with any version of Snes9x:
- All DSP 1 games except Mario Kart (e.g. Pilotwings, Ballz 3d, Topgear 3000)
- Street Fighter Alpha 2 (missing S-DD1 emulation)
- Megaman X2 and X3 (missing C4 emulation)

Sound Problems
==============

No sound coming from any SNES game using Snes9x? Could be any or all of
these:

- Snes9x couldn't open the sound device (/dev/dsp) when it started (Snes9x
  should display an error message), a permissions problem, the device doesn't
  exist or some other process already has the sound device open.
- The kernel doesn't support your sound hardware (Linux barely supports the
  sound card in my new laptop, I'm stuck with 8-bit sound only at the moment).
- You haven't got the volume control on your speakers turned down, have you?

General sound problems:

- Sound samples keep repeating or don't switch off, especially ones
  that play lots of speech samples, try -envx (e.g. Mortal Kombat series) or
  -sy.
- Sound quality is poor on all games. You have a noisy sound card (usually 
  cheap cards) or one that Linux only supports at 8-bit, turning on 
  interpolated sound (-is), sound-sync (-sy) and/or increasing the playback
  rate (-r 1-7]) will help.

  Note that sound-sync does not work very well with the thread sound option
  enabled due to real-time inter-thread timing problems with mutex locking.
- Snes9x runs really slowly or locks up with sound enabled on all games. If 
  you have a Sound Blaster Live card, enable thread sound (-ts): the sound
  card's Linux driver is broken and keeps reporting it can accept more sound
  data when in actual fact it cannot. Snes9x creates another thread to feed
  data to the sound card which doesn't lock up the SNES emulation when it is
  blocked trying to write more data to the card.
- Sound in a few games sounds crackly. Try turning off sync-sound and/or 
  interpolated sound - both seem to have problems with a few games.

Converting ROM Images
=====================

If you have a ROM image in several pieces, simply rename them so their
filename extensions are numbered: e.g. game.1, game.2, etc. Then, when
loading the ROM image, just specify the name of the first part; the remaining
parts will be loaded automatically.

If they are already in the form sf32xxxa, sf32xxxb, etc., you don't even have
to rename them; just specify the name of the first part, as above.

Emulation speed
===============

Emulating an SNES is very compute intensive, with its two or three CPUs,
an 8 channel digital sound processor with real-time sound sample decompression
and stereo sound, two custom graphics processors, etc.

If you only have a 486 machine, you will need to stick to using only 8-bit
graphics and minimal or no sound:

With sound:
snes9x -ne -r 1 -mono <rom filename>

Without sound:
snes9x -ns <ROM filename>.

Disabling the joystick support will also help (-j).

For maximum speed, if you're using the X Window System port, make sure your
X server is set to depth 8 and transparency effects are not enabled, or your
X server is set to depth 15 or 16 if you want transparency effects.

If you want to use the TV mode (-y), switching to a full-screen display is
usually fastest with the X server set to depth 15 or 16.

Don't enable the scale option and don't resize the window on the X Windows
port.

Users with slower Pentium machines might want to turn off echo and digital
FIR filter effects, due to the number of multiply operations needed to
implement them. Use -ne option.

Got a big throbbing beast of a CPU under the cover of your computer? These
options will sort out the men from the boys:
snes9x -y -sc -r 7 -sy <ROM filename>

Credits
-------

- Jerremy Koot for all his hard work on current and previous versions of 
  Snes96, Snes97 and Snes9x.
- Ivar for the original Super FX C emulation, DSP1 emulation work and 
  information on both chips.
- zsKnight and _Demo_ for the Intel Super FX assembler code.
- zsKnight and _Demo_ for all the other ideas I've nicked off them; they've
  nicked lots of my ideas and information too!
- DiskDude's SNES Kart v1.6 document for the Game Genie(TM), Gold Finger and
  Pro Action Replay cheat system information.
- Lord ESNES for some nice chats and generally useful stuff.
- Lee Hyde (lee@jlp1.demon.co.uk) for his quest for sound information and 
  the Windows 95 icon.
- Shawn Hargreaves for the rather good Allegro 3.0 DOS library.
- Robert Grubbs for the SideWinder information - although I didn't use his
  actual driver in the end.
- Steve Snake for his insights into SNES sound sample decompression.
- Vojtech Pavlik for the Linux joystick driver patches.
- Maciej Babinski for the basics of Linux's DGA X server extensions.
- Alexander Larsson for the GGI Linux port code.
- Harald Fielker for some sound interpolation code (not included in this 
  release due to problems).
- Takehiro TOMINAGA for many speed up suggestions and bug fixes.

Nintendo is a trademark.
Super NES, SuperScope and Super FX are a trademarks of Nintendo. 
Sun, Solaris and Sparc are all trademarks of Sun Microsystems, Inc.  
Game Genie is a trademark of Lewis Galoob Toys, Inc.
MS-DOS and Windows 95 are trademarks of Microsoft Corp.
Intel, Pentium and MMX are all trademarks of Intel Corp.
Sony is a trademark of Sony Corp.
UNIX is a trademark of someone, I forget who, but its not AT&T, they sold it.
Glide is a trademark of 3Dfx Interactive, inc.

------------------------------------------------------------------------------
Gary Henderson
gary@snes9x.com