Pinball 2000 XINA Operating System
by cfh@provide.net, 01/05/07.

Much of this information was borrowed from other sources (mainly Jim Hicks).


    XINA Background.
    Pinball 2000 is controlled by a personal computer located in the head of the game. The Operating System controlling the PC is called XINA (which stands for It's Not APPLE, {Applied Pinball Programming Language Environment} where APPLE was the operating system used for WPC). XINA is unique in it's command structure (ordinary UNIX / DOS commands do not work). A total of 99 XINA commands are available to view, alter, and execute the parameters surrounding the game.

    XINA is actually an application layer on top of PC-XINU, a multithreaded operating system originally created by Douglas Comer and documented in a very well known two volume set of books. (XINU information: public.ise.canberra.edu.au/~chrisc/xinu.html) PC-XINU won over other operating systems for a few reasons. For example, making Linux into a real-time system with thread support would involve modifying the kernel, which then obligated Williams into releasing the kernel modifications to the public under the GPL. WMS Legal didn't care much for that. Comer's XINU license was much more friendly to the lawyers; namely, we could do anything we wanted to it with no obligations.

    XINU also turned out to be quite easy to turn into a real-time system, and in the end proved to be as easy as Linux or BSD to work with in an embedded application, if not easier.

    It is much easier to interface to the game PC via a keyboard, rather than using the front-door panel (which only has 4 buttons). To hook up a keyboard, unlock and remove the backglass panel on the head. On the PC cage plug in a standard IBM PC/AT keyboard into the keyboard port (note that this PC has an old-fashion 5-pin DIN plug rather than the newer 6-pin mini-DIN plug). In most cases, the PC will detect the connection of the keyboard and place the machine into the SHELL mode. Also note that you can capture all printouts / command responses by connecting a PC to the serial port (9600 baud, 8, N, 1) and by having the PC run a terminal program (HyperTerminal). Typing HELP or ? will display the list of commands shown below.

    Most XINA commands are common between RFM and SW:E1 games, though the XINA level in RFM 1.5 includes communication options and code that are not available in released levels of SW:E1 (it appears that much of the XINA code used on the SW:E1 during the tournament at Pinball Expo 99 was incorporated in XINA 1.17 in RFM 1.3/1.4). In addition there are some game-specific commands in RFM (there were apparently some cool game-specific commands for SW:E1 that were removed for production code build).

    Many of the XINA commands available in RFM 1.5 are useful for advanced diagnostics or debugging of gameplay only and are of limited general use. During the development of a Pinball 2000 game, many such commands were added by the developers. Not all remain in the release level of code.

    There are three commands that may be of general interest: fb, attack_mars, and scenemgr. Many others are interesting (e.g. pinevents), but these three are likely to be the most commonly used by the average RFM home owner.

    Warning: DO NOT issue commands or alter settings using the XINA command set unless you know what you are doing and understand the implications. Damage can occur by using these commands recklessly.

    XINA Function Key Commands.

    • F1 - Help
    • F2 - Flip Screen
    • F3 - Shell (toggle)
    • F4 - Start (same as Start button on Front-door)
    • F5 - Escape (same as Escape button on Front-door)
    • F6 - Down (same as Down button on Front-door)
    • F7 - Up (same as Up button on Front-door)
    • F8 - Enter (same as Enter button on Front-door)

    XINA v1.18 Command List.
    ? 
    Attack_Mars       
    Audio             
    Bitmap            
    Bootdata          
    BPool             
    BS                
    Clear             
    CMOS_Buffer       
    CMOS              
    CONF              
    Continue          
    Credit            
    DCS               
    DeffMGR           
    DEVS              
    DGStat            
    DipSW             
    DispMGR           
    Diverter          
    Down              
    Drive             
    DropTGT           
    Dump              
    Echo              
    Enter             
    Errors            
    Escape            
    Ether             
    EventLOG          
    Exit              
    Fatal             
    FB                
    
    Flags                 
    FlapGate              
    FlipRamp              
    Flip                  
    FUpdate               
    Game                  
    GX                    
    Help                  
    History               
    HSTD                  
    HTTPD                 
    IFStat                
    IGMP                  
    Info                  
    KEvents              
    Kill                  
    LampMGR               
    Lamp                  
    LeffMGR               
    LockPost              
    Loops                 
    Martians              
    MEM                   
    Midas                 
    MON                   
    Multi                 
    NetStat               
    Net                   
    NonFatal              
    NSLookup              
    PAL                   
    PDB                   
    PinEvents             
    
    Ping 
    Pool 
    Price_Current 
    Price_Dyn 
    Price_Table 
    PrintOut 
    PS 
    PTY 
    Pub 
    Queue 
    Ramps 
    RASYS 
    Reboot 
    Replay 
    Reslist 
    Resources 
    Routes 
    Route 
    RTC 
    SceneMGR 
    SEM 
    Sleep 
    Stack 
    Start 
    Switch 
    Term 
    TimeRQ 
    Time 
    UpdtMGR 
    Up 
    VDAI 
    ZC 
    Zombie 
    

    XINA Command List Usage.
    (thanks to Jim Hicks for his contributions to this section)

    Typing the command (with no other text) will display the proper usage of the command, parameters, acceptable values, etc. Some exceptions to this are obvious, such as commands like HELP, REBOOT, etc. Commands/arguments should be typed in all lowercase. (They are displayed here in upper/lower case for easier reading). If a command's function is not obvious in what it performs, the listing below will say "(function unknown)" to indicate that I do not know what the command does.

    Syntax: A <parameter> is manditory, <param1 | param2> means one of param1 or param2 is mandatory. A [parameter] is optional, [param1 | param2] means either of param1 or param2 is optional. A 'N' means a numeric value, 0 to ?, based on the command.

    XINA v1.18 Command List Usage.
    ? Produces a listing of commands, same as "HELP" 

    Usage:

    ?
       
    Attack_Mars Starts / stops the Attack_Mars mode.  Can be used to start Attack Mars mode for practice.

    Usage:

    attack_mars < Start | Stop | FlagRamps | FlagMS | FlagModes >
       

    Audio

    Adjusts audio properties

    Usage:

    AUDIO INIT
    AUDIO INFO
    AUDIO Quiet {0-5}
    AUDIO Volmin
    AUDIO Voldef
    AUDIO Volmax
    AUDIO Vol++
    AUDIO Vol--
       
    Bitmap Displays bitmap memory allocations

    Usage:

    bitmap < Info | Main | Waste >
       
    BOOTDATA Change / view which boot image is booted

    Usage:

    bootdata < Current | ROM | Flash > [Verify]
       
    BPOOL (function unknown)

    Usage:

    bpool
       
    BS (function unknown)

    Usage:

    bs < debugon | debugoff | off | on >
       
    CLEAR (function unknown)

    Usage:

    clear < cmos >
       
    CMOS_Buffer Displays flash CMOS memory utilization

    Usage:

    cmos_buffer < view | headers | reset | off >
       
    CMOS Displays ROM CMOS memory utilization

    Usage:

    cmos < view | headers | flash | prologue | reset | off >
       
    CONF Provides XINA status / table information

    Usage:

    conf
       
    Continue Used internally for continuing programming scripts

    Usage:

    continue
       
    Credit Manages current credits

    Usage:

    credit < init | info | dec >
       
    DCS Manages the digital sound system

    Usage:

    dcs N [track [pan]]
    dcs < + | - >
    dcs raw <N>
    dcs quiet [track]
    dcs trkvol <trk vol>
    dcs trkpan <trk pan>
    dcs signals [clear]
    dcs version
    dcs [warm] reset
       
    DEFFMGR (function unknown)

    Usage:

    deffmgr < list[_N] | debug<on|off> | log<on|off> | entry<addr> | names[_N] | unreq<addr> >

             
    DEVS Displays a listing of device names

    Usage:

    devs
    DGSTAT (function unknown)

    Usage:

    dgstat
       
    DIPSW Shows the dip switch value

    Usage:

    dipsw
       
    DISPMGR (function unknown)

    Usage:

    dispmgr < list[_N]debug<on|off> | entry<addr> | frames | fclear | locks[_N] | log<on|off> | on | off >
       
    Diverter Shows info regarding the diverter (ramp)

    Usage:

    diverter < debugon | debugoff | info >
       
    DOWN Same as the Down button on the Front-door

    Usage:

    down
       
    DRIVE (function unknown)

    Usage:

    drive < 0-47 | list | off | highon | highoff >
       
    DROPTGT Status of right ramp drop target

    Usage:

    droptgt < debugon | debugoff | info >
       
    DUMP Provides a memory dump

    Usage:

    dump <address> [count]
       
    ECHO Allows a command to be echoed to the window / log

    Usage:

    echo
       
    ENTER Same as the Enter button on the Front-door

    Usage:

    enter
       
    ERRORS Displays a summary of known errors

    Usage:

    errors
       
    ESCAPE Same as the Escape button on the Front-door

    Usage:

    escape
       
    ETHER Displays Ethernet network statistics

    Usage:

    ether < info >
       
    EventLOG Manages the event log buffers

    Usage: 

    eventlog < dump[depth[count]] | flush | stats | types >
       
    EXIT Exit a running script

    Usage:

    exit
       
    FATAL Displays a listing of the fatal error log

    Usage:

    fatal
       
    FB Monitor adjustments, i.e. flips display.  Useful for flipping the monitor when the playfield glass is removed.

    Usage:

    fb < clear | bars | border | pillars | vsyncs | flip | sync V(0:1) H(0:1) >
       
    FLAGS Displays flag values / state

    Usage: 

    flags < local | global | static >
       
    FlapGate Monitor status of left / right flap gates

    Usage:

    flapgate < debugon | debugoff | info >
       
    FlipRamp Monitor status of up / down ramp

    Usage:

    flipramp < debugon | debugoff | info >
       
    FLIP Toggle state of flippers

    Usage:

    flip disable [all|0-3] | enable[all|0-3] | player<all|0-3> | computer<all|0-3> | on<all | 0-3> | off <all | 0-3>| debug >
       
    FUpdate  Firmware Update

    Usage:

    fupdate < load<com1 | com2> <baudrate> [sf | sfonly] >
    fupdate enable
    fupdate disable
       
    GAME Change / view game parameters.

    Usage:

    game < info | tilt | over | name | collect >
       
    GX Displays various GX processor configuration registers

    Usage:

    gx < crs | ccrs | bcrs | mcrs | dcrs | id | cx5520 >
       
    HELP Produces listing of available commands, same as "?"

    Usage:

    help
       
    HISTORY Shows last commands entered from the keyboard

    Usage:

    history
       
    HSTD Displays High Score To-Date Tables

    Usage:

    hstd
       
    HTTPD Displays Internet hyperlink values

    Usage:

    httpd < list | stats >
       
    IFSTAT Switches between interface 0 or 1

    Usage:

    ifstat < intf >
       
    IGMP Connect / disconnect via network to other machines

    Usage:

    igmp < join | leave> <group>
       
    INFO (function unknown)

    Usage:

    info
       
    KEVENTS Toggle values of key event settings

    Usage:

    kevents resource pid <on | off>
    kevents proc_create <on | off>
    kevents proc_suicide <on | off>
    kevents proc_kill <on | off>
    kevents proc_reap <on | off>
    kevents sem_create <on | off>
    kevents sem_delete <on | off>
    kevents hook_exec <on | off>
       
    KILL Terminate a process

    Usage:

    kill < process-id >
       
    LAMPMGR Monitor the lamp matrix

    Usage:

    lampmgt < list[_n] | matrixes[_n] | debug<on|off> | log<on|off> | on | off >
              
    LAMP Perform lamp tests, change lamp settings

    Usage:

    lamp test
    lamp lamp <all | N> <duty>
    lamp blink <all | N> <duty>
    lamp blink rate <time>
    lamp effect <all | N> <duty>
    lamp mask <all | N> <duty>
    lamp dump <lamp | blink | effect | mask>
    lamp saver <on | off | on_time N | off_time N>
       
    LEFFMGR (function unknown)

    Usage:

    leffmgr < list[_n] | debug<on|off> | log<on|off> | unreq <addr> | names[_n] >
             
    LockPost Monitor the jet bumper exit post

    Usage:

    lockpost < debugon | debugoff | info >
       
    LOOPS (function unknown)

    Usage:

    loops < debugon | debugoff | info >
       
    Martians Displays parameters about the two bouncing Martians

    Usage:

    martians < debugon | debugoff | info >
       
    MEM  Displays current memory utilization

    Usage:

    mem < stat | free | usage <PID> | allocs [entries] | allocs_d [ entries [size]] >
       

    MIDAS

    (function unknown)

    Usage:

    midas <info | enable | disable>
    midas monitor [on | off]
    midas debug_level [N]
    midas send <ack | nack | rvi | eot>
    midas send cash door <open | close>
    midas send cash <5p | 10p | 20p | 50p>
    midas send cash <L1 | L2 | L5 | L10>
    midas send token <5p | 10p | 20p | 50p>
    midas send token <L1 | L2 | L5 | L10>
    midas send hstd <N>
       
    MON Reboots the machine with an extensive log displayed

    Usage:

    mon
       
    MULTI Provides current status of various flags

    Usage:

    multi < list [N] >
       
    NetStat Displays the current network status

    Usage:

    netstat
       
    NET Control / monitor the Ethernet network capability

    Usage:

    net < start | monitor [mac] <on | off> | nif <N> >

    Example:

    net monitor 0x00 0xe0 0x29 0x0f 0xeb 0xf6 on
       
    NonFatal Displays the non-fatal error log

    Usage:

    nonfatal
       
    NSLookup Network Service Name Lookup

    Usage:

    nslookup
       
    PAL (function unknown)

    Usage:

    pal < on | off >
       
    PDB Displays current status of the Power Driver Board

    Usage:

    pdb
       
    PinEvents Triggers a multitude of events

    Usage:

    pinevents game <on | off> all
    pinevents game <on | off> game_init
    pinevents game <on | off> add_player
    pinevents game <on | off> cycle_players
    pinevents game <on | off> game_start
    pinevents game <on | off> game_restart_game
    pinevents game <on | off> game_restart_ball
    pinevents game <on | off> ball_start
    pinevents game <on | off> first_ball
    pinevents game <on | off> ball_serve
    pinevents game <on | off> ball_serve_state
    pinevents game <on | off> outhole_made
    pinevents game <on | off> valid_playfield
    pinevents game <on | off> score
    pinevents game <on | off> endball_begin
    pinevents game <on | off> endball_kill
    pinevents game <on | off> game_over
    pinevents game <on | off> bonus
    pinevents game <on | off> match
    pinevents multi <on | off> all
    pinevents multi <on | off> audit_complete
    pinevents btime <on | off> all
    pinevents btime <on | off> ball_search
    pinevents btime <on | off> status_report
    pinevents btime <on | off> chase_ball
    pinevents tilt <on | off> plumb
    pinevents tilt <on | off> ball_roll
    pinevents tilt <on | off> game
    pinevents tilt <on | off> slam
    pinevents update <on | off> request
    pinevents update <on | off> update
    pinevents update <on | off> group
    pinevents update <on | off> object
    pinevents update <on | off> delay_pid
       
    PING Determine if a link / host is available

    Usage:

    ping host [size]
       
    POOL (function unknown)

    Usage:

    pool < stat >
       
    Price_Current Displays the current value of coins

    Usage:

    price_current
       
    Price_Dyn      Displays status of dynamic (multiple coins) pricing

    Usage:

    price_dyn
       
    Price_Table Displays the price / coin table

    Usage:

    price_table
       
    PrintOut       Displays via shell various printouts / audit logs

    Usage:

    printout < audits | adjustments | hstd | hourly | daily | pricing | fatal | nonfatal | everything >
       
    PS Displays CPU processes in memory

    Usage:

    ps
       
    PTY Check status of COM / Printer port

    Usage:

    pty < stat [N] >
       
    PUB (function unknown)

    Usage:

    pub < game | sound1 | sound8> dump <address> [<count>] >
       
    QUEUE  (function unknown)

    Usage:

    queue < sleep | ready >
       
    RAMPS (function unknown)

    Usage: 

    ramps < debugon | debugoff | info >
       
    RASYS (function unknown)

    Usage:

    rasys < debugon | debugoff >
       
    REBOOT Reboots (re-starts) the machine, smaller log entries

    Usage:

    reboot
       
    Replay Display / change replay values

    Usage: 

    replay <info | buckets | check | reset>
    replay add N [random | low | middle | high] [debug]
    replay boost <ah | ar | coin | gs | go | rf>
       
    Reslist  Displays a lengthy resource manager / system list

    Usage: 

    reslist
       
    RESOURCES  Displays a list of resources in use

    Usage:

    resources
       
    ROUTES Displays current network routing information

    Usage:

    routes
       
    ROUTE Configure network routing information

    Usage:

    route add <dest> <mask> <gateway> <metric> <ttl>
    route delete <dest> <mask>
       
    RTC Access various RTC chip registers

    Usage:

    rtc < dump >
       
    SCENEMGR Manage the 12+ scenes (modes) (including bonus waves) 

    Usage:

    scenemgr < awardshot<id> | awardswitch<id> | debugoff | debugon | info | reset<id> | resetall |  select<id>| start<id> | stopall >
      Notes: the scenemgr command can be used to manage which scene is active in the game and/or display information on the status of an active scene.  The command can be used be used at the beginning of the game to select the starting scene, including selecting scenes in the middle group that are not normally selectable by the action buttons.  For example, use "scenemgr select 8" to select "Drive-In Demolition" as your first scene.  All other gameplay continues options/rules continue normally.

    During gameplay scenemgr can be used to start another scene at anytime using the format:

    scenemgr resetall stopall start N            where N = 

     0 - "Fuel Bonus Wave"
     1 - "Saucers Bonus Wave"
     2 - "Weapons Bonus Wave"
     3 - "Alien Abduction"
     4 - "Martian Happy Hour"
     5 - "Secret Weapon"
     6 - "Tower Struggle"
     7 - "Question Mark"
     8 - "Drive-In Demolition"
     9 - "Paris In Peril"
    10 - "Big-O-Beam"
    11 - "Mars Kneads Women"
       
    SEM Shows status of semaphores

    Usage:

    sem
       
    SLEEP Pause execution of program by delay factor

    Usage:

    sleep < delay >
       
    STACK (function unknown)

    Usage:

    stack < history >
       
    START Same as the Start button on the Front-door

    Usage:

    start
       
    SWITCH Perform switch diagnostics

    Usage:

    switch < debug | callbacks | timers | counters >
    switch test < on | off >
    switch trace < on | off >
    switch break number
       
    TERM  Manage the serial (terminal) port

    Usage:

    term < on | off | capslock | control | swap >
       
    TIMERQ (function unknown)

    Usage:

    timerq
       
    TIME Displays the current date and time

    Usage:

    time
       
    UPDTMGR Manages scenes, backgrounds, sounds, music

    Usage:

    updtmgr < list | update >
       
    UP Same as the Up button on the Front-door

    Usage:

    up
       
    VDAI (function unknown)

    Usage:

    vdai info
       
    ZC (function unknown)

    Usage:

    zc
       
    ZOMBIE (function unknown)

    Usage:

    zombie process-id

    Networking P2k Games: Adding an Ethernet Card.

      Why add an Ethernet card to your pinball 2000 game? Good question! Maybe because you saw the SW:E1 machines network-linked together at Pinball Expo '99. Maybe because with an Ethernet card installed you can access your RFM's internal commands via the Internet (to check earnings, diagnostics, etc). Or perhaps you own more than one PB2K machine and you're going to have your own tournament. To tell the truth I have not installed an Ethernet card in my machine, but I wanted to document the procedure as I know it. Again, perform this kind of operation at your own risk.

      Ethernet Card Specifications
      I've been told that RFM only supports one brand of Ethernet Card, an SMC (brand) ETHEREZ 16BIT ISA 10MBPS RJ-45 network card (mfg part# SMC8416T, typically goes for $31 USD at places like www.buy.com, but this card is becoming increasing difficult to find). This network card needs to be installed into the extra ISA slot in the RFM (v1.4 or better) pinball machine motherboard. After the settings are configured for the network adjustments, you can connect to the XINA command shell via telnet or alternately you can connect to the machine using a web browser (a simple httpd server is built in!).

      Ethernet Configuration Instructions.
      Note that depending on the motherboard in the RFM machine, you may have to adjust the BIOS setup setting prior to getting the network card working in order to avoid an IRQ conflict. This can be determined if there is a problem by configuring the network adjustments, setting an IP address/mask, and then using the keyboard (or serial port) to access a command prompt and run 'ping'.  If the 'ping' works (the lights on the card blink or device on the network responds to the ping, etc.), then you don't need to change the BIOS. If you get some kind of "ez" error message, then you will have to do the following:

        Remove the PRISM board, plug in a keyboard and power up the box. If you are lucky and the monitor "syncs up" to the BIOS screen, then you can see what you are doing. If not, you may want to temporarily plug in a PC monitor instead of the Pin2000 monitor.

        Disable the 'Built in OnBoard Audio' in the 'Integrated Peripherals' menu. On some RFM motherboards, the onboard audio uses the IRQ that the default setting of the EtherEZ network card uses.

        Here are the key strokes that should effect the change:

        1. Remove the PRISM board/plug in PC monitor and keyboard
        2. Power up (you will see the normal PC BIOS startup because the PRISM card is out).
        3. Press DEL to enter setup (the BIOS setup should appear).
        4. Press the RIGHT ARROW key (move to the INTEGRATED PERIPHERALS menu).
        5. Press the ENTER key (enter the INTEGRATED PERIPHERALS menu).
        6. Press the RIGHT ARROW key (move to the right hand column of menu items).
        7. Press the DOWN ARROW key (move to the BUILT IN ONBOARD AUDIO menu).
        8. Press the PAGE UP key (change the adjustment from ENABLE to DISABLE).
        9. Press the ESC key (leave the INTEGRATED PERIPHERALS menu).
        10. Press the DOWN ARROW key (move to the SAVE AND EXIT menu).
        11. Press the DOWN ARROW key.
        12. Press the DOWN ARROW key.
        13. Press the ENTER key (SAVE AND EXIT).
        14. Press the Y key (confirm).
        15. Press the ENTER key (do it).
        16. Replace the PRISM board.

      The default username / password are set to "Pin2000" and "Manager" (respectively, case sensitive), which you may want to change since all RFM machines are initially set to the same values (but who would want to hack into a pinball machine?)

    Wireless Access to your Pinball 2000 Game.
    Matt Osborn came up with this info. If your basement arcade is anything like mine, you don't have outlets all wired up to the home network, and snaking CAT5 isn't going to be much fun. There's a simpler and easier way to get connected. But before we get to that, you're going to need to get the right network card for your Pinball 2000 game. Apparently, Williams only had time to add support for one specific ethernet card, the SMC8416T. You'll have to hunt around to find one.

    What you need is a wireless bridge. Logitech used to make one called the "Play Link", which was marketed for network capable consoles link PS2 and XBox. Like just about everything good for Pin2000, it's no longer made. I was fortunate enough to pick one up when they were on clearance at geeks.com for $9.99 (wish I'd bought more than one!) You see used ones pop up on eBay fairly often. There are probably other bridges out there, but the Play Link is inexpensive, simple, and works great. All you have to do is run the provided network cable from your P2K network card to one of the Play Link cubes, and connect the other cube to your router. The two cubes automatically make an RF connection. There's no configuration to do. It's essentially a "wireless cable" from your pinball to the router. I run the network cable down the back of the machine (along with the other cables, like the parallel cable that goes to the driver board) and put the cube down in the bottom of the cabinet. The cube has a little wall-wart power supply that you can plug into the utility power outlet with the help of the adapter cord that comes with the machine.

The Logitech PlayLink installed in the bottom of a RFM machine. Picture by Matt Osborn.

    In the P2K setup you'll need to assign an IP address to your machine. In a home networking environment that'll be something like 192.168.1.X (assuming your router's IP is 192.168.1.1), where "X" can be any number from 2 to 255. Don't pick too low of a number, as those addresses are probably already used by other computers on your net (likely automatically assigned by DHCP). To test it out, the first thing to try is the machine's webserver, which is http://192.168.1.X web address. If everything is set up right you'll get a webpage that looks something like this:

The web page at http://192.168.1.X ('X' is the number you assigned),
showing high scores.

    Then you can try logging into your P2K machine via telnet. That's where you're going to need the XINA commands shown above in this document.



End of Pinball 2000 XINA Operating System document.

* Go to Pin2000 Repair document Part One
* Go to the Pin Fix-It Index at http://marvin3m.com/fix.htm
* Go to Marvin's Marvelous Mechanical Museum at http://marvin3m.com