MULTIPLE-BUTTON. DAISY-CHAINED JOYPAD FOR PERSONAL COMPUTERS
Field of the Invention
This invention relates to a method and apparatus for remote control of computers through a multiple-button joypad that can be daisy-chained to other joypads. In particular, this invention provides a joypad that can be attached to an IBM-compatible personal computer through the computer's game port.
Background of the Invention
Personal computers can be controlled by controllers, such as joysticks, that enable a user to play games or control other computer programs running on the computer. For IBM-compatible personal computers, a game card which has a game port has become an industry standard. This industry standard allows personal computer manufacturers to offer standardized computers that work with standardized software that has been developed by game and other software developers. When an industry standard, such as the game port design, becomes popular, compatibility with that standard becomes necessary to compete effectively in the market.
Unfortunately, industry standards also have disadvantages. The standard IBM-compatible game port has eight inputs and no outputs. Of the eight inputs, four are analog (for the X and Y positions of two joysticks) and four are digital switches (for two buttons on two joysticks). This has limited users to using no more than two joysticks with no more than two buttons each, or one joystick with no more than four buttons.
The implementation that IBM chose for its game port also has another problem: reading analog input requires a comparatively long time. This is
because reading the game port's analog input requires software polling and counts, which are time-consuming. This problem makes implementing many types of games, especially fighting games, very difficult using the IBM-compatible game port. To get around these limitations, game developers have devised several approaches. For example, commands can be implemented by programming function keys on the personal computer's keyboard to control a game, rather than using a joystick through the game port. This approach is taken in U.S. Patent No. 4,852,031 issued to Brasington. Another approach is to reconfigure game controllers to interact with a particular game, thus giving more flexibility to the game developer in designing the game. This approach, which requires changes to the IBM-compatible standard, is taken in U.S. Patent No. 5,396,267 issued to Boultin. None of the current approaches, however, provide a design for a standard joystick or other controller that allows multiple controllers (at least two) with multiple digital buttons (at least three each) which interface through a standard IBM-compatible game port. In addition, current approaches generally use the slower analog signal inputs of a game port, rather than relying solely on higher speed digital switch inputs. If the data reading speed could be improved, while at the same time allowing the use of several buttons and several controllers using only the IBM-compatible game port, the performance of fighting games and other high¬ speed applications would be enhanced. Moreover, highly sophisticated software such as 3-D games could be designed using such a digital joypad with extra buttons for multi-direction navigation. Therefore, a design that provides a multiple-button, daisy-chained joystick with these advantages would be a significant improvement over current approaches.
Summary of the Invention
This invention provides a new controller and data receiving method that can be used, with games and other software, to control computers through an input port. In one embodiment, the invention provides a controller system made up of a computer, with an input port that has digital input switches, and multiple controllers each having several digital buttons. The controller system may use an IBM-compatible game port as the input port and an IBM-compatible personal computer as the computer.
Another embodiment of the invention provides a method of receiving data where two digital switch inputs are used. In this method, the current state of the two inputs is saved, the two inputs are then read until a change in one of them is detected, and a "1 " is received if the change occurred in the first input and a "0" is received if the change occurred in the second input. These steps are then repeated until all data has been received.
Brief Description of the Drawings
The objects, features and advantages of the present invention will be apparent to one skilled in the art in light of the following detailed description in which: Figure 1 shows an implementation of a 14-button joypad of the present invention.
Figure 2 shows two 14-button joypads of an implementation of the present invention connected in a daisy chain to a personal computer.
Figure 3 shows a block diagram of an implementation of two 14-button joypads of the present invention connected in a daisy chain.
Figure 4 shows a state diagram of an implementation of a standalone, 14-button joypad of the present invention.
Figure 5 shows a schematic of an implementation of a standalone, 14-button joypad of the present invention.
Figure 6 shows a time diagram showing the digital switch inputs in an implementation of a joypad of the present invention.
Detailed Description of the Invention Before the present methods and apparatuses are described, it is to be understood that this invention is not limited to the particular apparatuses or methods described as such, which those of skill in the art can, of course, vary. It is also to be understood that the terminology used herein is for the purpose of describing particular embodiments only, and is not intended to be limiting as to the scope of the present invention, which will be limited only by the appended claims.
It should be noted that, as used in this specification and the appended claims, the singular forms "a", "an" and "the" include the plural referents unless the context clearly dictates otherwise. Unless defined otherwise, all technical and scientific terms used herein have the same meaning as commonly understood by one of ordinary skill in the art to which this invention belongs. Although any methods and materials similar or equivalent to those described herein can be useful in the practice or testing of the present invention, preferred methods and materials are described below. All publications and patents mentioned herein are incoφorated herein by reference.
The present invention provides a method and apparatus for remote control of computers through a multiple-button joypad that can be daisy- chained to other joypads. In particular, this invention provides a joypad that can be attached to an IBM-compatible personal computer through the computer's game port.
The joypad of the present invention implements a serial data protocol on the two digital switch inputs of the standard IBM-compatible game port, thereby allowing virtually any number of buttons. It also does not use the
analog inputs, instead relying solely on the digital switch inputs, so the read time is short and independent of the buttons being used.
Since the standard IBM-compatible game port does not allow for output, the joypad of the present invention repeats its data continuously, with an identifiable synchronization, or "synch," pattern leading the data. The game or other software that is receiving data through the game port reads the port continuously until the synch pattern is found, and then can read the data showing the current position of the joypad buttons.
Since each joypad in the present invention requires only two digital switch inputs to send data to the personal computer through the game port, two joypads can be connected to the game port at one time. The present invention also allows for multiple joypads to be daisy-chained onto the two joypads that are connected to the game port, allowing for multiple players to participate in the same game. Four player sports games on the Genesis and SNES systems are quite popular, so this feature of the present invention is a significant advantage.
Since the analog inputs of the standard IBM-compatible game port are not used by the present invention, those skilled in the art will realize that an analog joystick with multiple buttons could also be implemented using standard X,Y analog technology for the joystick input and the present invention for the button input.
As mentioned above, a joypad of the present invention passes data to the standard IBM-compatible game port serially, using a set of bit frames. Figure 1 shows one implementation of a joypad 30 of the present invention which has 14 digital buttons 32 and 36a-j. These are: Up, Down, Right, Left, LS (left switch), RS (right switch), Select, Start, X, Y, Z, A, B and C. (The other switch 34 shown on the joypad 30 of Figure 1, "Slow/Norm," regulates the clock speed and is not used as a button for controlling computer operation.)
In Figure 1, the button 32 controlling up, down, left and right is actually a four-way button. This button 32 pivots on its center so that any one
direction, or any two adjacent directions, such as up and right, can be set at any one time.
For the puφoses of this application, the term "button" is used broadly. It can mean a digital button, such as those buttons 36a-j shown on Figure 1 , or a four-way button, such as the four-way button 32 shown on Figure 1.
It can also mean a switch, such as the switch 34 shown on Figure 1 (even though that switch 34 is not used as a button for controlling the computer in this implementation), a touchscreen, a digital joystick, or any other device that can generate a one or zero at a user's request. In this implementation, each frame is six bits long. Each frame consists of a " 1 ", followed by five data bits, except for the first frame, known as the synch frame, which is six zeros.
One frame format that can be used for this implementation, where the joypad has 14 buttons, has bits set as follows:
where the Ext bit equals "0", LF is "Left," RT is "Right," Slct is "Select," SX, SY and SZ are X, Y and Z, and SA, SB and SC are A, B and C.
A joypad using this frame format does not support daisy- chaining, as is indicated by the Ext bit being set to "0". However, this joypad can be the last joypad (i.e., the farthest from the computer) on a daisy chain. Note that, since each data frame starts with a " 1 ", the only time six consecutive zeros are seen at the game port's digital switch inputs is when the synch frame is sent. This is what allows the synch frame to be recognized.
A frame format for a joypad that does allow for daisy-chaining is as follows:
where the Ext bit equals "1" and Data is an additional data location.
In this frame format, the "Pn" bit indicates whether a particular joypad is in daisy chain mode. Pn=l indicates that the joypad is in daisy chain mode and is the device nearest the personal computer. Pn=0 indicates that the joypad is operating in stand-alone mode.
It should be noted that this frame format allows for additional data frames to be added if additional buttons are desired. The IDO, ID1 and ID2 bits can be used to designate the type of joypad which is sending data to software running on the computer, so that the software can correctly inteφret the frame format being used. That allows variously configured joypads, with different numbers of buttons, to be recognized as long as they use the same basic design of the present invention.
As long as one joypad is of the type shown in this latter implementation, a daisy chain of up to two joypads can be made. Two such daisy chains can be attached to the IBM-compatible game port, so that a total of four joypads with 14 buttons each can be used at one time.
As will be evident to those skilled in the art, longer chains can be implemented at the cost of some complications to the hardware and software, and thus added cost. Moreover, the serial signal to send the required data from a greater number of joypads will be longer, which may reduce response time.
However, the basic principles of the present invention enable those skilled in the art to easily alter the implementation described here to allow for longer daisy chains.
Combining the two data frame formats described above allows one joypad, that farthest from the computer, to operate in standalone mode, while another joypad, that closest to the computer, operates in daisy-chained mode. In that case, the serial data stream received on the digital switch inputs of the computer's game port will be as follows:
Synch F2a F2b F2c F2d Synch Fla Fib Flc where Fix are the three data frames for the standalone joypad with the Ext bit equal to "0" and F2x are the status frame and the three data frames for the daisy- chained joypad with the Ext bit and Pn bit both set to " 1 ". In the present invention, an "implied" clock governs bit transfers, and no clock signal need be sent as input to the game port. Rather than have a clock on one digital switch input of the game port and data on the other, as is commonly done in other approaches, in the present invention all "0"s in the data are sent on one digital switch input and all " 1 "s on the other. This eliminates the need for close synchronization between the two inputs, and any problems from edge effects.
Designing the input protocol as in the present invention also simplifies the software needed to read the data received at the game port input considerably, and reduces input errors as well. As mentioned above, this protocol is also very tolerant in changes to the clock rate, so an inexpensive R/C clock circuit can be used to time the joypad circuitry.
In the input protocol of the present invention, all transitions (high to low and low to high) are considered to be data bits. The method for receiving data through the game port, then, is to save the current state of the input signal lines, read the input signal lines until a change in one of them is detected, receive a "1 " if the change occurred in the first input signal line and a "0" if the change occurred in the second input signal line, and repeat the above steps until all data has been received. This process for sample data is shown in Figure 6. As shown in Figure 2, the joypads 10a and 10b are joined to each other by one cable 12 and to a personal computer 16 by another cable 14. In
one implementation of daisy-chained joypads, a joypad has a five-pin plug on the end of a cable, and a five-pin expansion jack on its body. A special adapter matches the plug to the personal computer's DB15 connector, with inputs for two joypads. The five wires are for: VCC
Ground OUTO OUT1 SENSE In this implementation, a joypad can exist in three possible places: connected to the personal computer; in the middle of a daisy chain; or on the end of a daisy chain. Note that if the daisy chain length is merely one, then the first and last conditions apply to one joypad. A joypad knows if it is plugged into a personal computer by reading its SENSE pin on the plug. A joypad knows if it has another joypad plugged into it by sensing backwards out of the expansion jack.
If desired, the joypad at the end of the daisy chain (farthest from the personal computer) can provide the system clock for all joypads. The clock can then propagate down the daisy chain. Each joypad decodes and saves the bit stream from the up-chain joypads. It then uses this information to create its own output bitstream. Thus, each joypad in the chain outputs a longer bitstream than the one before it.
Figure 3 shows a block diagram of an implementation of two 14-button joypads of the present invention connected in a daisy chain. Joypad A of Figure 3 is a stand-alone joypad with the simpler, shorter frame format described above. Joypad B, by contrast, must be a joypad with the more complex frame format described above for daisy-chainable joypads.
The digital switch outputs OutO and Outl of Joypad A and Joypad B in Figure 3 operate according to the input protocol described above, with transitions on OutO representing "0"s and transitions on Outl representing
" 1 "s. Joypad B's OutO and Outl are then attached to two of the digital switch inputs of the game port of an IBM-compatible personal computer.
Figures 4 and 5 show, respectively, the state diagram and schematic for an implementation of a joypad of the current invention. The joypad shown in Figures 4 and 5 does not contain the logic necessary to receive and reformat data received from another joypad or joypads. Accordingly, this type of joypad must be either a stand-alone joypad or the last (farthest from the computer) joypad in a daisy-chain. For example, the joypad shown in Figures 4 and 5 could be used as Joypad A as shown in Figure 3. However, a joypad which can reformat data received from other joypads can be implemented simply by adding additional states to the implementation shown in Figures 4 and 5, as will be evident to those skilled in the art. Because the logic becomes more complex as more states are added, an ASIC chip may be the best implementation of the necessary state machine for a joypad that can be daisy-chained, if the volume of joypad production justifies the cost of designing and manufacturing an ASIC for this piupose.
In the implementation shown in Figure 5, however, standard chips are used, since they are less expensive and more readily obtained than an ASIC chip. In Figure 5, an implementation using both a PAL chip, shown as UI , and a multiplexor, shown as U3, is used. This is because this design allows a cheaper, more readily available PAL chip to be used even for a 14-button joypad. However, a larger PAL could be used instead, which would allow the design to be implemented without using a multiplexor.
The PAL equations for implementing the state chart of Figure 4 are as follows:
START UP := POWER.UP -> STATE.O
STATE.O := VCC •> STATE.1 JERST ZERO FOR SYNC HUME
+ GND -> STATE_18 STATE.0.OUTF = DOUT
STATE.1 := VCC -> STATE.2
+ GND -> STATE_18 STATE.l.OUTF = /DOUT
STATE.2 := VCC -> STATE.3
+ GND -> STATE.18 STATE_2.0UTF = /DOUT
STATE.3 :s VCC -> STATE.4
+ GND -> STATE_18 STATE.3.0UTF = /DOUT
STATE.4 := VCC -> STATE.5
+ GND -> STATE.18 STATE.4.0UTF = /DOUT
STATE.5 := VCC -> STATE.6 ;LAST ZERO FOR SYNC FRAME
+ GND -> STATE.18 STATE.5.0UTF = /DOUT
17965
STATE.6 := VCC -> STATE.OB .START BIT FOR FIRST DATA FRAME
+ GND -> STATE.18 .Last 3 bit of state bit control
STATE.6.0UTF = DOUT .The ext. multiplexer
STATE.OB := VCC -> STATE.7 ;Extende Bit
+ GND -> STATE.18 .0 => Basic Joypad
STATE_0B.OUTF = DOUT
STATE.7 := VCC -> STATE.8 ;UP
+ GND -> STATE_18 STATE.7.0UTF = /MUX -> DOUT + MUX -> /DOUT
STATE.8 := VCC -> STATE.9 ;DOWN
+ GND -> STATE_18
STATE_8.0UTF = DN -> DOUT
+ DN -> /DOUT
STATE.9 := VCC -> STATE.OA iLEFT
+ GND -> STATE.18 STATE.9.0UTF = /MUX -> DOUT + MUX -> /DOUT
STATE.OA := VCC -> STATE.OC ;RIGHT
+ GND -> STATE_18 STATE_0A.OUTF = /RT -> DOUT + RT -> DOUT
STATE.OC := VCC -> STATE.OD ;START BIT FOR SEC. DATA FRAME
+ GND -> STATE.18 STATE.OC.OUTF = DOUT
STATE.OD := VCC -> STATE.OE .PLAY
+ GND -> STATE_18 STATE.OD.OUTF = /MUX -> DOUT + MUX -> /DOUT
STATE.OE := VCC -> ST A TE.OF ;SELECT
+ GND -> STATE_18 STATE.0E.OUTF = MUX -> DOUT + MUX -> /DOUT
STATE.OF := VCC -> STATE.10
+ GND -> STATE_18 STATE.OF.OUTF = /MUX -> DOUT + MUX -> /DOUT
STATE.10 := VCC -> STATE.11 ;Q
+ GND -> ST ATE.18 STATE_10.OUTF = /MUX -> DOUT + MUX -> /DOUT
STATE.11 := VCC -> STATE.12
+ GND -> STATE.18 STATE_11.0UTF = /SX -> DOUT + SX -> DOUT
STATE.12 := VCC -> STATE.13 .START BIT FOR THIRD DATA FRAME + "GND -> STATE.18
STATE.12.0UTF = DOUT
STATE.13 := VCC -> STATE.14 . Y
+ ^GND -> STATE.18 STATE_13.0UTF = MUX -> DOUT + MUX -> /DOUT
STATE.14 :s VCC -> STATE.15 Z
+ GND -> STATE.18 STATE_14.0UTF = /MUX -> DOUT + MUX -> /DOUT
STATE.15 := VCC -> STATE.16 ;A
+ GND -> STATE.18 STATE_15.0UTF = /SA -> DOUT + SA -> /DOUT
STATE.16 := VCC -> STATE.17 ;B
+ GND -> STATE.18 STATE_16.0UTF = /SB -> DOUT + SB -> /DOUT
STATE.17 := VCC -> STATE.O ;C
+ GND -> STATE.18 STATE_17.0UTF = /SC -> DOUT + SC -> /DOUT
STATE.18 := VCC -> STATE.O
+ GND -> STATE_18 STATE.18.0UTF = /DOUT
STATE.19 := VCC -> STATE.O
+ GND -> STATE_I8 STATE.19.0UTF = /DOUT
STATE.1 A := VCC -> STATE.O ;This states should never be
+ GND -> STATE.18 ;reach. but Dout helps to STATE_lA.OUTF = DOUT ;keep OR term to minimum
STATE. IB := VCC -> STATE.O
+ GND -> STATE.18 STATE.1B.OUTF = DOUT
STATE.IC := VCC -> STATE.O
+ GND -> STATE_18 STATE.IC.OUTF = /DOUT
STATE. ID := VCC -> STATE.O
+ GND -> STATE.18 STATE. lD.OUTF = /DOUT
STATE.1E := VCC -> STATE.O
+ GND -> STATE_18 STATE.1E.OUTF = /DOUT
STATE. IF := VCC -> STATE.O
+ GND -> STATE.18 STATE.1F.OUTF = /DOUT
.(state 18 and above not used)
STATE.O = /STCNT5 * /STCNT4 • /STCNT3 • /STCNT2 • /STCNTl STATE.1 = /STCNT5 * /STCNT4 • STCNT3 • /STCNT2 « STCNTl STATE.2 = /STCNT5 • /STCNT4 • /STCNT3 * STCNT2 • /STCNTl STATE.3 = /STCNT5 * /STCNT4 * STCNT3 • STCNT2 • STCNTl STATE.4 = STCNT5 • /STCNT4 * STCNT3 * /STCNT2 * /STCNTl STATE.5 = STCNT5 * /STCNT4 * STCNT3 • /STCNT2 • STCNTl STATE.OB « /STCNT5 * /STCNT4 • STCNT3 • STCNT2 • /STCNTl STATE.18 = /STCNT5 * /STCNT4 • STCNT3 • STCNTl • STCNTl
STATE.OD > /STCNT5 • STCNT4 • /STCNT3 • /STCNT2 • /STCNTl ;Mux Data STATE.10 = /STCNT5 • STCNT4 • /STCNT3 • /STCNT2 • STCNTl STATE.14 = /STCNT5 • STCNT4 * /STCNT3 • STCNT2 * /STCNTl STATE.7 = /STCNT5 • STCNT4 * /STCNT3 • STCNT2 • STCNTl STATE.9 = /STCNT5 * STCNT4 • STCNT3 • STCNT2 • /STCNTl STATE.13 = /STCNT5 • STCNT4 • STCNT3 • /STCNT2 • STCNTl STATE.OE = /STCNT5 • STCNT4 * STCNT3 • STCNT2 • /STCNTl STATE.OF = /STCNT5 * STCNT4 • STCNT3 • STCNT2 • STCNTl
STATE.8 = STCNT5 * /STCNT4 * /STCNT3 • /STCNT2 • /STCNTl STATE.OA = STCNT5 • /STCNT4 • /STCNT3 • /STCNT2 • STCNTl STATE.11 = STCNT5 • /STCNT4 * /STCNT3 • STCNT2 • /STCNTl STATE.15 = STCNT5 • /STCNT4 • /STCNT3 • STCNT2 • STCNTl STATE.16 = STCNT5 * /STCNT4 * STCNT3 • /STCNT2 • /STCNTl STATE.17 = STCNT5 • /STCNT4 • STCNT3 • /STCNT2 • STCNTl
STATE.19 = STCNT5 * /STCNT4 • STCNT3 • STCNT2 • /STCNTl STATE.1B = STCNT5 * /STCNT4 • STCNT3 • STCNT2 • STCNTl
STATE.6 = STCNT5 • STCNT4 • /STCNT3 • /STCNT2 • /STCNTl STATE.OC = STCNT5 * STCNT4 * STCNT3 • /STCNT2 * STCNTl STATE.12 = STCNT5 * STCNT4 • /STCNT3 * STCNT2 • /STCNTl STATE.1A = STCNT5 • STCNT4 • /STCNT3 • STCNT2 * STCNTl
STATE.IC = STCNT5 • STCNT4 • STCNT3 • /STCNT2 * /STCNTl STATE.1D = STCNT5 * STCNT4 • STCNT3 • /STCNT2 • STCNTl STATE.1E = STCNT5 • STCNT4 • STCNT3 • STCNT2 • /STCNTl STATE_1F = STCNT5 • STCNT4 * STCNT3 • STCNT2 • STCNTl
- Simulation Segment •
SIMULATION