AtariXLBox Atari 800/5200/130/320/XL/XE Emulator port for XBox v1

http://xport.xbox-scene.com

More big thanks to J-RED for the excellent skin!


Features :

 - Emulates Atari 800/5200/130/320/XL/XE 

 - Excellent compatibility - ported from Atari800

 - Loads cartridges, disk images, executables

 - USB Keyboard support 

 - USB Mouse support 

 - ZIP support

 - Cheat system - Search/Create your own cheat codes (see notes)
 
 - Favorites list

 - Netplay

 - Resizable game screen

 - 480p, 720p, 1080i support

 - Skin-able :
    - Backgrounds
    - Sounds
    - Background Music
    - Sprites
    - Text position (right/left/center, top/bottom/center)
    - Text color, select bar color
    - Font
    - Fading speed
    - Screenshot position
    - Can specify 2 sprites to surround the selected menu option
    - Option to have a transparent select-bar color (from select-color menu)
    - Can flip sprites horizontally/vertically
    - Can set motion_x and motion_y variables for sprites
    - Sprites can loop continuously or just once
    - If you want to change the way something looks in this new UI,
      chances are that you can change it via the Configuration menu.

 - Save Game management - delete save game files

 - Samba/NetBIOS sharing support (read roms from your PC)

 - Relax Network Sharing (read roms from your PC)

 - Play MP3 or M3U playlists in the background
   (Can also read MP3/M3U from across Samba/Relax shares.)

 - User definable save directory.  If you don't like the default of
   E:\SAVES\ATARIXLBOX you can change it via the ATARIXLBOX.INI file

 - Take in-game screenshots and display them on the game selection list

 - New UI feature - auto-screenshot capture mode.  When enabled, the emu
   will start taking screenshots at a user-defined interval.  Useful for
   ripping sprites/animation.

 - Hardware filtering options : Point, Bilinear, Trilinear, Anisotropic 

 - Graphics filters :
     + 2xSai
     + Super 2xSai
     + Eagle
     + Super Eagle
     + SuperScale
     + AdvanceMame 2x
     + Simple 2x
     + 2xSai Scanline
     + Super 2xSai Scanline
     + Eagle Scanline
     + Super Eagle Scanline
     + SuperScale Scanline

 - Record/Playback feature - record your gameplay in the emu and then
   play it back again.  Record up to 10 minutes of gameplay.

 - Every single in-game command is fully customizable on any of the
   four joypad controllers.

 - Map any emulator or UI command to a single button or a combination of
   two buttons.  (e.g. RTrigger+LTrigger = Save State)

 - Autofire capabilities for any emulator button on any controller

 - One-button combos (define a series of emulator commands to be played
   back when you press a user-definable XBox controller combination.)
   (E.g. Press RTrigger+LTrigger to execute the command string
   A,B,A,B,Up,Down,Left,Right)

 - Traverse any directory on any drive ( Continue selecting the parent
   directory entry on the file selection list to get the drive selection
   list.  Selectable drives are C, D, E, F, R, X, Y, Z, and SMB. 
   R is the CDROM drive.  SMB is the samba share you have defined in your
   ATARIXLBOX.ini file.)  Press Y from any file-listing screen to go up one
   directory level.

 - All UI commands (save state, load state, screenshot, etc) can be
   invoked from the Options/Pause menu as well as in-game via your
   customized joypad mappings.

 - Can be invoked from a command-line to directly run a game from a front-end
   or dashboard and bypass the user-selection screens. (Only if the frontend
   or dashboard supports this feature.)

 - Can return to the launching program *if* the launching program supports this
   feature.  For example, if the custom-launch routines are incorporated into 
   a new frontend, that frontend could launch ATARIXLBOX and when you exit 
   ATARIXLBOX, that frontend can be automatically reloaded.  



Default ROM dir is D:\ATARIDISKS


====================================
Important Tips on Usage - README!!!!
====================================


There are many different file extensions for 8-bit Atari disk images but ATR and DCM
seem to be among the most common.  These disk images can be zipped or unzipped, but
if they are zipped and the emulator will not be able to write data back to it.

If the file you have selected is a cartridge image (e.g. Atari 5200 cartridge image)
then you need to select the "Cartridge" media type from the configuration menu.
You will also need to select the cartridge type because the emulator cannot autodetect
the correct type.  This is done simply through trial and error.  When you are presented
with the list of cartridge types from which to select, you should notice that some
lines are surrounded by "-> <-" text.  You should try all of those first before trying
any others.

If the file you have selected is an executable (e.g. an EXE, COm, XEX, etc file) then
you need to select the "Executable" media type from the configuration menu.

Some compilation disk images (e.g. Jellystone compilation ATR disks) require a loader.
There is an included disk image ATR file in the D:\ATARIDISKS directory called MENU.ATR.
Load up that file and wait until you are presented with the main menu text.  At that time,
press RTHUMB to bring up the emulator options menu and select "Load New Disk Image Into Drive B"
The disk image must be placed in drive B.  Once you have selected the file, return to the
emulation and the menu program should spring to life and show the contents of the disk.
It's now a simple matter to select the game you wish to play.

You can also use the included DOS_2_0_S.ATR disk image to browse your disks.  Load it up,
then select a new disk image for drive A, then go back to the emulator and press the 
keyboard A key and press enter when it asks you for a file spec.  It should list the
contents of the disk you inserted.  Then you can press L to load one of the binary files
from the directory listing.  It will prompt you for the name.  Enter the whole name
including the period that is missing from the display.  

With the DOS_2_0_S.ATR file still loaded, press A again and when it asks you for 
the specification, enter "H:" (without the double quotes) and press enter.  It should
list the contents of your XBox D:\ATARIHD directory which should contain the 
BANKBANG.XEX file.  Press L and when it asks you to enter the filename, enter
"H:BANKBANG.XEX" (without the double-quotes) and it should load up the game.

There are two different sound modes : old and new pokey.  Some games sound better with 
the new pokey and others requires the old pokey to play correct sound.  A good example
of this is the Ataro 5200 game Berzerk.  You must select old pokey when playing Berzerk
in order to hear the digitized voices.  New pokey generally seems to sound better, however.

If you are playing a game and the controller seems way too sensitive (e.g. Centipede)
then you should try playing it with a mouse mode.  Select "Joystick Using Mouse" as the
mouse type from the configuration menu.  You can now simulate mouse input via a real
USB mouse or via the Left Analog stick on the XBox controller.  You can adjust the 
mouse sensitivity by changing the "Mouse Speed" setting on the configuration menu.

If a game does not load the first time, you need to try it on all the different machine
types and you also need to verify what kind of media you are trying to play.  (Disk,
Cartridge, Executable File, Cassette).  You may also need to adjust some of the other
options on the configuration menu.  



========================
Playing with Disk Images
========================

The ideal way to play disk images is unzipped and on your XBox hard drive.  If you are
playing a disk-based game and it needs to write data back to the disk, then it will
not being able to do so if the disk image is zipped or if the disk image resides on 
non-writable media (e.g. CDRW/DVD-R ).  Furthermore, it also cannot write back to
disk images that are loaded from across a network share.  

============================
Save States With Disk Images
============================

Whenever you save a state, that state can only be re-loaded if the same disk image is
loaded.  For example, let's say you start playing Mindshadow.  First you select Mindshadow
disk #1 from the game-select menu.  After it has loaded, it will tell you to insert disk #2.
After you have done so, you can actually play the game.  At this point, you decide to 
save the state.  The next time you want to play from that save state, you have to
select disk #2 from the game-select menu instead of disk #1 and then load the state.


=====================
Relax Network Sharing
=====================

The relax sharing setting goes in the [GENERAL] section as follows:

rlxshare=c:\ATARIDISKS@192.168.123.77:1400

Replace 192.168.123.77 with your computer IP address and replace 8989 with the
port where you have Relax running.


============================
Note on Samba/NetBIOS Shares
============================

There are two INI file settings relating to Samba/NetBIOS sharing and they both
reside in the [GENERAL] section of ATARIXLBOX.INI:

smbshare=smb://username:password@workgroup:ip_address/computername/sharename
smb_nameserver=192.168.0.1


The smbshare parameter accepts many different formats.  Here are the most 
common:

smbshare=smb://username:password@workgroup/computername/sharename
smbshare=smb://username:password@workgroup:ip_address/computername/sharename
smbshare=smb://username:password@computername/sharename
smbshare=smb://username:password@computername:ip_address/sharename
smbshare=smb://workgroup/computername/sharename
smbshare=smb://workgroup:ip_address/computername/sharename
smbshare=smb://computername/sharename
smbshare=smb://computername:ip_address/sharename

Please try all of the above combinations before deciding it does not work.
Also be aware that some people have to select their SMB drive in ATARIXLBOX a few
times before any files appear.

If it's still not working, then set the nameserver equal to the IP address of
the computer you are trying to reach or set it equal to your NetBIOS name server.
(If you don't know what a NetBIOS name server is, then just set it to the 
IP address of the computer you are trying to reach.)


Also remember that when you make changes to ATARIXLBOX.INI, you have to do a 
"Force Reload of D:\*.INI" from the Configuration Menu or else the changes
you made to ATARIXLBOX.INI will not be loaded.  




=============
Configuration
=============

Almost everything can be changed from the configuration menu.  Here are the
things that require manual modifications to the ATARIXLBOX.INI file included in
the package:

Samba share name - goes in the [GENERAL] section.  Example:

smbshare=SMB://USERNAME:PASSWORD@COMPUTERNAME/SHARENAME


Screenshot directory - default is E:\SCREENSHOTS - goes in [GENERAL] section
Example:

screenshot_dir=E:\SCREENSHOTS


Skin directory - where skins can be found.  Default is D:\EMUSKINS - goes in
[GENERAL] section.  Example:

skin_dir=D:\EMUSKINS


Save directory - this is where you want all your saved games to be stored.
Default is E:\SAVES\ATARIXLBOX.  Goes in [GENERAL] section.  Example:

save_dir=E:\SAVES\ATARIXLBOX


The default ROM directory INI setting goes in the [GENERAL] section as follows:

rom_dir=d:\ATARIDISKS


If you change any of the above items, then you must upload the new ATARIXLBOX.INI
file to your XBox, load up ATARIXLBOX, then select "Force Reload D:\\*.ini 
Settings" from the Configuration menu.  Please note that this will overwrite
any of the setting changes you might have made after you first loaded
ATARIXLBOX.


===============
Menu Navigation
===============

Select menu options with the DPAD or with R/LTrigger.  The speed of 
R/LTrigger movements can be controlled by :

Configuration -> Menu Scroll Speed

There are some places where you can enter or change values.  This 
can usually be done in a variety of ways include DPAD Left/Right, 
R/L Trigger, and L/R Thumb.  Try all of them if the values are changing
too slowly.

"A" selects the highlighted choice.  "B" cancels/returns.
"Y" from a file-select list will go up one directory.


=======
Netplay
=======

In order to netplay with someone, follow these steps:

 - Go to the Configuration menu
 - Select Netplay options
 - Turn netplay on
 - Add a server if you are going to connect to someone else
 - Select the game to play
 - If netplay is on, it will ask you if you want to be the client
   or the server.  One person is the client, and the other is the server.
   If you are the server, the game will wait until the client has
   joined.  If you are the client, make sure the server is ready to accept
   your connection before continuing.  
 - When server starts netplay, you can select a netplay skip value.
   This number specifies how often it should skip checking for network data.
   The higher the number, the less often it checks for network data, but the
   result will be a less responsive controller.
 - Once a connection has been made, it should work fine.

NOTE : You both MUST be using the *EXACT* same game.  
I would be *extremely* surprised if the PAL version of a game
worked via netplay with an NTSC version of the same game.  


The server player is always player 1.  The client player is always player 2.

I don't know how well netplay will work across real networks.  Two xbox's 
on the same intranet work very well, though.

If your connection is lost during gameplay, just wait 30 seconds and
you can return to the game select menu.  (Or you can always reboot...)


=====
SKINS
=====


Instructions for making a new skin:

 - Create a new directory off of your SKINS directory (default skins directory
   is D:\EMUSKINS
 - Place your sound/font/graphic media files in this new directory 
 - Load ATARIXLBOX
 - "Select Skin" from the main menu and select your new directory.
 - Select Configuration
 - select Configure Skin
 - Use the menus to select your new media files and change your settings
 - When you are satisfied with what you have, go back to the main menu.
 - Select "Configuration"
 - Select "Overwrite D:\*.ini and D:\emuskins\\<skin>\\settings.ini"
   This will write the skin settings in your skin directory (if your skin
   directory is on the hard drive.)
 - You're done!  You can package up the directory and share it with your friends.


If you wish to use sprites in your new skin, then read the following:

 - Create a subdirectory off of your new skin directory called SPRITES
   e.g. D:\EMUSKINS\NEWSKIN\SPRITES
 - In this new SPRITES directory create a 0-based numeric directory for
   each sprite you wish to make.  This means that if you have 4 sprites
   you wish to load, the directory names *must* be called 0, 1, 2, and 3.

   Do not call them 1, 2, 3, and 4.  
   Do not call them 0, 3, 5, 6.  
   Do not call them SPRITE1, SPRITE2, SPRITE3, SPRITE4.  

 - Inside each of these new directories, you must place the sprite frames.
   Each frame is represented by a BMP, PNG, or JPG file.  The order of the
   frames is given by the filenames.  These filenames must also be named
   with 0-based numbers.  For example, 0.png, 1.png, 2.png.  Look at the
   sprites directory of the included default skin to see how it works.

 - Do not skip numbers when naming sprite directories or sprite frame 
   filenames.  A list of directories called 0,1,2,5,7 is *INVALID*.
   Similarly, a list of files called 0.png, 1.png, 4.png, 5.png is also
   *INVALID*.

Also be aware of memory constraints.  Let's say you have a frame of a sprite
called 0.png.  This picture file is 90 pixels wide and 130 pixels high.
This will get rounded up to a 256x256 pixel 32bit picture.  This means
that it will consume 256x256x4 bytes (256KB) of memory.  If your sprite has
10 frames of animation, that's around 2.5MB of memory.  Keep this in mind
before you make ultra-smooth moving sprites with hundreds of frames of
animation.

You can check your available memory by going to Configuration -> Configure Skin
-> Show Available Memory

If you make/configure a skin and ATARIXLBOX does not load the next time you
play it, then you need to delete the E:\SAVES\ATARIXLBOX\ATARIXLBOX.INI and
E:\SAVES\ATARIXLBOX\SKIN_SETTINGS.INI files.  ATARIXLBOX should work fine again,
but you'll have to reconfigure your skin.  The problem was probably
that one of your resources (like a WAV or background file) was specified
incorrectly or was never changed from the old skin.  Carefully look at the 
E:\SAVES\ATARIXLBOX\SKIN_SETTINGS.INI file to make sure that all filenames exist 
in your skin directory.



====================
Controller Remapping
====================

Configuration -> Configure Controllers

There are 32 general/all-purpose emulator "buttons" or actions.  Each of these
buttons can be assigned a specific emulator action.  For example, Emu Button 1
can be A, or B, or DPad Down, etc.  These "emu buttons" can then be assigned 
XBox triggers.  For example, Emu Button 1 (which you have mapped to, for 
example, A) can be triggered by  XBox controller button B.  The default button 
mappings should provide enough information on how the system works and 
how it can be used.  

==========
Autofiring
==========

Configuration -> Configure Controllers -> Controller # -> Change Autofire

Each "Emu Button" can be set up for autofiring.  Simply set the autofire
variable to a non-zero value.  This value indicates how long the emulator
should wait before releasing and re-pressing the button.  A value of 1
might be too fast to register on some games.  I suggest setting it to a
number like 5 first and them fine-tuning it.


======
Combos
======

Setting up a combo can be kind of tricky because you need to know exactly
what the game expects to have happen on the joypads to execute the special
move.  For example, let's say that we want to map a standard move that is
described like this : 

D, DR, R, A

D = Down, DR = Down+Right, R = Right, A = A button

First, set the delay to a number like 2 or 3.  Then set up the moves.  In
this case, any (or none) of the following might work:

Down
Down+Right
Right
Right+A
Right

OR

Down
Down+Right
Right+A

OR

Down
Down+Right
Right
Right+A
Right+A
Right+A


You will probably need to fine-tune each combo move before it works, but
you'll soon get the hang of it.



================
MP3/M3U Playback
================

Simply select the MP3 or M3U file from the game-selection screen.

The M3U file can also just be a regular file with one songfile per line.
For example:

d:\songs\song1.mp3
e:\moresongs\song2.mp3
smb:\mp3s\song3.mp3

If you are making a playlist of songs on your SMB share, then please note
the format:

smb:\mp3s\song3.mp3

The smb:\ tells ATARIXLBOX to read from your SMB shared directory.  Do not
put the SMB share definition in the filename.

----------SMB shared filenames are case sensitive!!!---------

==============
No Save States
==============

The state-saving functionality is currently not implemented in Z26.


==================================================
Cheating System - How To Make Your Own Cheat Codes
==================================================

Special Note for Z26 - In many Atari 2600 games, certain important values (like
the number of lives you have, etc) are stored as a nibble value.  A nibble is
half of a byte.  For example, in Asteroids your number of lives and the current
direction you are pointing are stored in the same byte.  (High nibble is the
number of lives and the low nibble is the direction.)  When searching for cheat codes,
I would advise using *only* the "equal to" or "not equal to" options.

Just about every single port I've released has this feature, and I 
occasionally hear people asking "how does it work?" This is easiest to 
explain by example:

 1) Start playing a game. 

 2) Go to Options Menu and select "Start Search for Cheat Code"

 3) Go back to game and lose a life

 4) Go to Options Menu and select "Continue Search For Cheat Code"

 5) Select "Search For Values Less Than Before" because when you
    first selected "Start Search For Cheat Codes" you had one more
    life than you do now.  You will see the number of matches go down.

 6) If the number of matches is greater than 10, then perform actions
    3, 4 and 5 continually until the number of matches is less than 10.
    If you run out of lives, then just start playing the game again.
    (Do not exit the emulator and select the game again - just start another
    game from within the emulator.)  Now you will have a full stock of lives,
    which is *more* than the last time you checked your values.  So when you
    continue searching, you'll want to select "Search For Values Greater Than
    Before."  Then go through steps 3-5 over and over until you have less than
    10 matches.

 7) Now that you have less than 10 matches, you can add the codes to your
    list.  If the search narrowed the list down to 1 possible match, it
    will automatically add it to your list.  Now you can "List Cheat Codes"
    and selectively turn on/off the cheat codes to try them out and see
    which on is the right one.

Alternately, you can use the "Search For An Exact Value" option if you
already know the number you wish to change.  Example:

Let's say you are playing Dragon Warrior and your character currently has
25 Hit Points.  Follow these instructions:

 1) Go to Options Menu and select "Start Search for Cheat Code"

 2) Select "Continue Search For Cheat Code"

 3) Select "Search For an Exact Value" and enter 25 as the number.
    The number of matches should decrease very quickly.  

 4) Go back to the game and do something to change your Hit Points amount.
    For example, let's say you drink a potion and your Hit Points are now 35.

 5) Go to options menu and select "Continue Search For Cheat Code"

 6) Select "Search For an Exact Value" and enter 35 as the number.
    Chances are very good that the number of matches will be down to 
    one or two.  Just try out the codes to see which one gives you infinite 
    Hit Points!

Advanced Cheat Code Usage:

Cheat codes have the following format:

TT AAAAAA VVVV

TT     = Type
AAAAAA = Address
VVVV   = Value

You can hand-edit the cheat codes you've created.  Go to the Cheat Code list,
select a code, and select Edit.  Let's say you've already created a cheat code
that keeps your hit points at 25.  The last four hex digits of your code will be
0019 (which is hexidecimal for 25.)  You can change the last two digits to, for 
example, FF which will give you 255 hit points instead of 25.  More sophisticated
codes can be made by altering the Type:

Type Table

80 - Means set the 16-bit value (0-65535) pointed to by the cheat code address 
     to the cheat code value.

30 - Means set the 8-bit value (0-255) pointed to by the cheat code address 
     to the cheat code value.

10 - Means increase the 16-bit value pointed to by the cheat code address
     by the cheat code value.

11 - Means decrease the 16-bit value pointed to by the cheat code address
     by the cheat code value.

20 - Means increase the 8-bit value pointed to by the cheat code address
     by the cheat code value.

21 - Means decrease the 8-bit value pointed to by the cheat code address
     by the cheat code value.

D0 - Means only execute the next code in the list if the 16-bit value pointed
     to by the cheat code address is equal to the cheat code value

D1 - Means only execute the next code in the list if the 16-bit value pointed
     to by the cheat code address is not equal to the cheat code value

D2 - Means only execute the next code in the list if the 16-bit value pointed
     to by the cheat code address is less than the cheat code value

D3 - Means only execute the next code in the list if the 16-bit value pointed
     to by the cheat code address is greater than the cheat code value

E0 - Means only execute the next code in the list if the 8-bit value pointed
     to by the cheat code address is equal to the cheat code value

E1 - Means only execute the next code in the list if the 8-bit value pointed
     to by the cheat code address is not equal to the cheat code value

E2 - Means only execute the next code in the list if the 8-bit value pointed
     to by the cheat code address is less than the cheat code value

E3 - Means only execute the next code in the list if the 8-bit value pointed
     to by the cheat code address is greater than the cheat code value

If you are familiar with cheat codes, you'll notice that these are standard
Gameshark types.  With enough experience you could make some seriously
interesting codes with this system.  

For example, I played around with Super Mario Bros (NES) and found out that
address 0007EE stores the number of coins and address 0007FA is the
one's digit in the timer.  Here are two codes:

E0 0007FA 03
20 0007EE 01

Those codes mean that while the ones timer digit is equal to three, increase the 
number of coins by one.  You won't see the coins updated on the overhead
display in the game, but if you start a game, wait until the timer one's
digit is a three and then collect a coin, you'll see that your coin value
is actually much higher than one, now.  Fun useless stuff.  :P



==================================================
Command-Line/Auto-Launching and Return to Launcher
==================================================

This section is for the developers of frontends, dashboards, etc.

ATARIXLBOX can be started with parameters to automatically launch a game
at startup.  Example code can be found in the custom_launch_params.cpp file.

There is also example code in that same file that will show you how to 
make ATARIXLBOX load your frontend/dashboard when it exits.




Stella, Gnuboy, SMSPlus, FCEUltra, HUGO, NeoPop, DGen, Bochs, HUGO-CD, FMSXBox,
Bliss, WinSTon, Gens, Z26X, StepmaniaX, PCSXBox, XBoyAdvance, DOSXBox, AtariXLBox....
what's next?


Enjoy!
