US 4089524 A
An electronic game in which each player controls his own moving image on a visual display to change the direction of movement of the image as it advanced on the display. As each player's image moves, changing direction on command, it forms a visual "barrier" trail on the display of the path traversed. This barrier trail cannot be crossed by the moving image of another player or a "crash" occurs. A crash of a player's moving image with a barrier trail, generated by movement of his own image or by any of the other player images, or with a fixed barrier surrounding the field of play, eliminates the player from the round. A winner of the game or round results when all but one player has been eliminated.
1. A controllable game comprising:
display means for producing a plurality of visual images on a display field;
means for moving said images at a predetermined rate;
input means for individually selecting the direction of movement of each moving visual image along any one of a plurality of different paths on said display field; and
means controlling the display means for visibly displaying on said field a visual image of the path traversed by each of the moving images, the moving images of the traversed paths creating a visible barrier trail, said means for moving said images providing continued movement along the corresponding path until the next direction is selected by the input means whereupon continued movement is commenced along the corresponding path.
2. Apparatus of claim 1 wherein said means moving the images at a predetermined rate includes means for moving the images in incremental steps in succession, and further including means for creating a different audible indication at the time of incremental movement of each moving image.
3. A plural user controllable game comprising:
plural input means, one for each different user, for selectively controlling the direction for movement of a different image along any one of a plurality of different paths on said display means;
means for simultaneously and visibly displaying on said display means, for each of said users, a player image;
means moving each of said player images continuously along its own series of connected paths creating and leaving, behind the player, along its own paths, a visual barrier trail, said means for displaying responding to each of a provided series of said directions by any one of said input means for continued movement of the player image associated with the respective input means along the same path until the next direction in such series whereupon continued movement is commenced by the player along the path corresponding to such next direction;
means for detecting when any one of said player images on the display encounters a barrier trail along its path of movement; and
means for interrupting further movement of the one of said player images encountering a barrier trail.
4. Apparatus of claim 3 wherein said means moving each of said player images advances the images in incremental steps, and further including means for creating an audible indication at the time of each incremental step of movement for each of said player images which is different for each player image.
5. An electrical game apparatus comprising:
means generating a plurality of moving visual images on a display field moving at predetermined rate, including means retaining a visual image of the paths traversed by said moving images,
control means for instantaneously changing the direction of movement of any of said moving images on the display field,
and means interrupting the movement of any one of the moving images when the moving image intercepts the retained image of any of said paths traversed by the moving images.
6. The apparatus of claim 5 in which the control means includes means for manually changing the direction of each moving image individually.
7. The apparatus of claim 6 further including means for initially positioning each of the moving images at predetermined spaced apart positions on the display field.
8. The apparatus of claim 5 wherein said means generating a plurality of moving images includes means advancing each of said images in incremental steps in any one of a plurality of predetermined directions on the display field, said control means including means for manually selecting with each incremental step any one of said predetermined directions.
9. The apparatus of claim 8 wherein said means moving each of the images in incremental steps includes means advancing each of said moving images in sequence.
10. The apparatus of claim 9 wherein each of said moving images continues to advance in the same direction on successive steps until a new direction is selected by said control means.
11. Apparatus of claim 10 wherein the number of moving images is initially greater than two.
12. Apparatus of claim 11 further including means removing any of the moving images from the display field when the image intercepts the retained images of any of said path traversed by the moving image.
13. Apparatus of claim 12 further including delay means interrupting the movement of the remaining images for a predetermined time and continuing said movement at the end of said delay time.
14. Apparatus of claim 13 further including means controlling the time interval between incremental moves of each of the images in sequence such that the time interval between incremental moves of one of said images is proportional to the number of images remaining on the display.
15. Apparatus of claim 12 further including means responsive to the interruption of a moving image with the retained image of the path traversed by another of said moving images for removing a portion of the intercepted retained image at the point of interception, whereby a hole is formed in the retained image of the traversed path.
16. Apparatus of claim 8 further including means interrupting the movement of a moving image in response to a reversal of the direction of movement of said image back along its own path by said control means.
17. An electronic game in which players control the types and locations of symbols on a visual display comprising means including a cathode ray tube and a sweep control for producing visual images in response to video signals by sweeping a plurality of horizontal lines during each vertical sweep, a random access memory, a central processor including means for reading or writing data in the memory, a second memory storing video signals corresponding to individual line segments of a plurality of different display symbols, means synchronized with the sweep control for addressing and reading out symbol identifying data from successive address locations in the random access memory to the second memory, the data from the random access memory addressing and reading out selected video signals from the second memory to the cathode ray tube for displaying the symbols identified by said identifying data, each address location in the random access memory storing in addition to the symbol identifying data, data identifying the player associated with a symbol, the player identifying data being accessible only to the central processor, means synchronized with the sweep control of the cathode ray tube for limiting access of the random access memory by the central processor to the interval between successive vertical scans, manually operated output control means for each player for generating signals identifying a change in position of a symbol on the display, the central processor including means for storing a predetermined symbol in any one of a plurality of address locations in the random access memory in response to said input control means, the central processor further including means for reading out the data stored in a selected location in the random access memory before storing a symbol in said location in response to said input control means, means generating an alarm signal when the symbol data read out of said location indicates the location is already storing a predetermined symbol, and means responsive to an alarm signal for removing all symbol data from the random access memory relating to the player whose move initiated the alarm signal.
18. An electronic game controlled by two or more players comprising:
means for visually displaying any one of a plurality of different types of symbols at a plurality of display locations arranged in a two-dimensional display matrix including memory means for storing symbol data for each location in the matrix, and means responsive to the data stored in the memory means for controlling the type of symbol displayed in the associated locations in the display matrix, means storing in the memory means symbol data for displaying a predetermined symbol for each player at a corresponding number of locations in the matrix display, player moving means for periodically storing new symbol data in the memory for each player in sequence, each new symbol data added to memory for each player being displayed in a location contiguous to the previous player symbol location on the display matrix, and means selecting the direction of the contiguous location relative to the prior location including means storing data indicating a current direction for each player, and a plurality of player-operated input controls for selectively changing the current direction data in said last-named storing means to indicate a different direction for any of the players, whereby a succession of symbols are displayed on the display matrix for each player which are periodically added to the display in contiguous locations in one direction until a new direction is signalled by the player through the input controls.
19. Apparatus of claim 18 wherein the player moving means further includes means for reading out the symbol data in the memory means associated with each newly selected contiguous location on the display matrix, and means signalling an illegal player move condition when the data read out of the memory means indicates a predetermined symbol already occupies that location on the display matrix.
20. Apparatus of claim 19 further including means responsive to the illegal move signalling means for erasing the symbol data in the memory means relating to the player attempting the illegal move.
21. Apparatus of claim 18 where the player moving means includes means responsive to said means storing data indicating direction for storing different symbol data for each player depending on the current direction data, so that each new symbol displayed for a player visually indicates current direction of the associated player is moving.
22. An electronic game controlled by two or more players comprising means for visually displaying any one of a plurality of different symbols at a plurality of display locations arranged in a two-dimensional display matrix, said display means including an addressable read-write memory for storing digitally coded data in a plurality of separately addressable storage locations, there being one storage location for each symbol display location in the matrix, and means responsive to the data stored in each of said address locations for controlling the type of symbol displayed in the corresponding location of the matrix; means initially storing player symbol data in at least two starting address locations in the storage means; player moving means for periodically storing player symbol data for each of the players in sequence at a predetermined rate in new address locations corresponding to the next adjacent locations on the display matrix; player-operated input control means for each player for selecting any one of the four directions of movement of the respective player symbols; means responsive to said input control means for changing the new address location corresponding to the next adjacent location on the display matrix in a new direction signaled by the input control means, the player moving means for reading out data stored in the selected new address location before storing the player symbol data in the new location; means interrupting the player moving means and signalling an illegal move if the data read out of the new location corresponds to a predetermined symbol; and means responsive to said interrupting means for clearing all address locations in memory storing symbol data associated with the player whose move initiated the signalling of an illegal move.
23. Apparatus of claim 22 wherein said interrupting means further includes means reactivating the player moving means after a predetermined delay for continuing the writing of new player symbols in the memory for the remaining players in the game.
24. Apparatus of claim 22 wherein the player moving means stores new player symbol data in the memory for each of the players remaining in a game in repetitive sequence, the time intervals being constant, whereby the total time interval between writing new symbol data in memory for each player is proportional to the number of players in the game.
This invention relates to player operated, digitally controlled, electronic games and, more particularly, to a multiple player game utilizing a cathode ray tube display.
Electronic games which utilize a cathode ray tube display, such as a home television receiver or the like, have become very popular. Particularly, such games simulate conventional games such as table tennis, hand ball, hockey or the like. The ball is simulated by a moving image on the CRT display. The path of the moving image is controlled by the apparent bouncing of the moving image off of visual barriers on the display which may be fixed or movable in position as controlled by the players. Games of this type are described, for example, in U.S. Pat. No. 3,659,284 and reissued U.S. Pat. No. 28,598.
This present invention is directed to an improved electronic game in which a plurality of moving visual images are generated on a display field, such as a CRT display. Each player, by means of a manually operated control, directs the movement of his image on the display. As each player image advances, a visual image of the path traversed remains on the display. The movement of a player controlled image is interrupted when the image intercepts the retained image of any of the paths traversed by the moving images on the display or intercepts a fixed barrier image surrounding the field of play.
In the preferred embodiment, each image moves in a straight line in incremental steps until the player signals that the direction should be changed. However, reversing the direction of movement by player causes his moving image to run into his own traversed path, thereby eliminating the player from further progress of the game.
Each incremental advance of a player's moving image is accompanied by a staccato sound which has a unique pitch for each direction of movement of the image. The range of pitch is different for each player. The incremental advances of multiple moving images are made in sequence and alternately and the staccato notes accompanying the incremental advances are therefore likewise in sequence. Control of the images on the cathode ray tube display is under the control of a digital microprocessor.
The game may be arranged as a game for only two players or as a game for a larger number of players, such as four players. In a two player game, a round terminates when either player has a collision. In a multiple player game, the round continues until all the players but one have had a collision. When a collision occurs with more than two players in the game, the player causing the collision is eliminated from the round but the images of the remaining players continue to move on the display. The image of the eliminated player is preferably removed from the display and no longer forms a barrier to movement of the remaining player images.
One feature of the invention involves a CRT display in which contiguous symbols can be visually displayed in a two-dimensional matrix. Data uniquely defining each symbol is stored in a read-write memory, the data address in the memory corresponding to a particular symbol location on the display matrix and the data defining the type of symbol to be displayed at that location. A data processor, by directly addressing the memory, can read out the data associated with each symbol being displayed and can update the data to a new symbol at any location in the display matrix.
For a better understanding of the invention, reference should be made to the accompanying drawings wherein:
FIG. 1 is a perspective view of a table top game installation;
FIG. 2 shows the display at the start of a game in which two players participate;
FIGS. 3-6 illustrate the display with different game situations in a two player game;
FIG. 7 shows the initial display of a four player game;
FIGS. 9, 10 and 11 show various display configurations during the progress of a game with four players;
FIG. 10 is a block diagram of the electronic control circuitry for the game;
FIGS. 11A-D show a series of waveforms used for explaining the operation of the control circuit of FIG. 10;
FIG. 12 is a detailed block diagram of the CRT display control;
FIG. 13 is a map of the video refresh memory;
FIGS. 14-19 are a series of flow diagrams of the program for a two player game;
FIGS. 19-23 are a series of flow diagrams of the program for a four player game; and
FIG. 24 is a generalized block diagram of the basic game components.
The basic concept of the invention can best be understood by reference to FIG. 24. The game consists of a visual display unit 5 which is preferably a television monitor or similar cathode ray tube device by which visual images can be created. Each player is provided with his own manual control unit 6 by which he controls movement of his own player image on the display unit 5 by means of a control circuit 7. The control circuit 7, in a manner hereinafter described in detail, causes player images (preferably in the form of arrowheads) to advance from starting positions, such as indicated at 8, along predetermined paths, leaving a visual trail on the display of the complete paths traversed by the player images from the starting position 8. Each player, by means of his own control 6, can at any time alter the direction in which his player image is advanced by the control circuit. The object of the game is to control each player image so that it does not intercept the paths traversed by any of the player images during the course of a game. If a player, by failing to effectively alter the direction in which his player image advances, allows his player image to intercept either his own trail or one of the player trails on the display, a "collision" occurs. This may be signalled by an audio alarm, for example, using a speaker 9. In two-player games, a collision terminates a round and a new round is commenced. If the game involves more than two players, the game continues, after delay, with continued movement of the images of the players remaining in the round, the colliding player being eliminated from the round and preferably, his image and trail being erased from the display.
While the physical arrangement of the player controls and display may take a variety of forms, one example of embodiment for four players is shown in FIG. 1. As shown, the game is incorporated in a pedestal table having a flat table top 10 supported by a pedestal 12 from a base 14. In the center of the table is a screen 16 of a vertically mounted cathode ray tube display. Four player positions are provided around the table, each player positioned being provided with a set of four push-button switches, indicated generally at 18, 20, 22 and 24. These push-buttons are used by each player to control images displayed on the screen 16 in a manner hereinafter described in detail. While four player positions are shown, the game can be played by two players at opposing positions, by three players, or by four players. An alternative game having only two player positions also may be provided.
Referring to FIG. 2, the image displayed on the screen 16 at the start of a two-player game is shown. Let it be assumed that Player #1 is in position to operate the set of push-buttons 24 and Player #2 is in position to operate the set of push-buttons 20. By means of the set of four push-buttons, each player is able to control the direction of movement of a player image, for example, the player image may be in the form of a symbol such as an arrow pointing in the current direction of movement on the screen. Thus Player #1 controls an arrow 26 initially positioned near the upper left corner of the screen as viewed in FIG. 2, while Player #2 controls an arrow 28 initially positioned near the lower right hand corner of the display. The field of movement is surrounded by a rectangular boundary represented by the visual border 30 displayed on the screen 16. The boundary 30 is formed from individual display symbols resembling bricks that are lined up in an end-to-end configuration both vertically and horizontally, plus separate corner symbols at each of the four corners of the boundary. The manner in which the individual symbols or characters appearing on the screen are generated is described below.
Once the game has started, the respective arrows advance alternately in incremental steps in the direction indicated by the arrows. Following each incremental step, the player can change the direction of his arrow by pressing appropriate ones of the set of buttons available to him. Thus each player's arrow can be pointed in any selected one of four mutually perpendicular directions. Each time the arrow moves an incremental space on the screen, its former position is occupied by one of the brick symbols. As the arrow of each player moves across the face of the screen, it leaves behind a visual trail in the form of a barrier image similar to the image forming the boundaries 30. Thus as the game progresses and the players change the directions in which their arrows point, a maze-like picture is produced on the screen formed by the barrier images laid down along the paths of movement of the respective arrow.
FIG. 3 shows the condition of the display on the screen 16 after a typical game has progressed through a series of moves. As shown in FIG. 3, the arrow 26 has progressed through six changes in direction and has laid down a barrier formed of alternate series of vertical bricks and horizontal brick symbols joined by corner symbols wherever the arrow has changed direction during the course of its movement. Similarly the arrow 28 as shown in FIG. 3 has progressed through seven changes in direction and has left a barrier trail formed of vertical and horizontal brick symbols joined by corner symbols which appear as a continuous image extending between the starting point and the current position of the arrow symbol. The arrows continue to advance in incremental steps, changing direction as controlled by the player through his set of push-buttons.
The game progresses until one of the two players has moved into one of the barriers established by the boundary 30 or the barrier trails behind the arrows or if the arrows attempt to occupy the same location. This condition, referred to as a crash, is signaled by a flashing symbol on the display at the point of collision accompanied by an audible explosion sound. Three possible collision conditions are illustrated in FIGS. 4, 5 and 6. In FIG. 4 arrow 28 of Player #2 has moved into a collision with the lower boundary, as indicated by the collision symbol at 32. This scores a point for Player #1 as indicated by the symbol 1 appearing adjacent the starting location of the first player. FIG. 5 illustrates a collision between the arrow 26 of the Player #1 and the barrier trail of Player #2, as indicated at 32'. FIG. 6 illustrates a collision condition where the arrow 26 of Player #1 has reversed its direction and therefore moved into collision with the player's own barrier trail, as indicated by the collision symbol at 32'.
It should be noted that a player's arrow continues to move in the direction which it points until one of the other buttons is momentarily operated, at which time the arrow takes the corresponding change in directions and continues in that direction during successive moves until another button is touched. Thus at any point in time, a player can operate one button which makes no change in the direction, can operate either of two other buttons which cause the arrow to turn to the right or to the left, or can push a fourth button which results in a reversal of direction and a crash with the player's own barrier trail. The arrows advance alternately at a fixed rate of approximately two incremental moves per second per player. A new direction can only be selected between each move, thereby testing the player's reaction time in anticipating a change in direction to avoid a collision.
To add further interest to the game, as each player's arrow makes its incremental move, a staccato note is sounded. Each direction of movement has a characteristic pitch. Thus, as each player's arrow moves, a note is generated having a characteristic pitch depending on which of the four directions the arrow has moved. Moreover, the notes produced with movement of the respective players have distinctive pitches. Thus two notes are repeatedly and alternately sounded as the two arrows move in step-wise fashion across the screen, the two notes being distinguished from each other by their pitch and also audibly indicating the direction of movement by their respective pitches.
After each crash the score of both players is displayed on the screen for a brief interval while the final pattern for the game is left on the screen. The screen is then cleared of all barrier trails and is returned to its initial playing position illustrated in FIG. 2 so that another round can be commenced.
In an alternative version of the same game, four players may participate using the four sets of push-buttons shown in FIG. 1. The initial display at the start of the game is shown in FIG. 7. Again the game is provided with an outer rectangular boundary 30 and with the image of the arrow symbol for each of the players displayed adjacent the center of the four-sided boundary, as indicated at 40, 42, 44 and 46, each of the arrows being pointed towards the center. However, the opposing arrows are offset one position from each other so that they do not lie on a collision course as they progress towards each other across the face of the screen. Again each player controls the direction in which the arrow symbol advances by manipulating the set for four buttons in the manner described above. Again, a collision takes place whenever the arrow of any player moves into one of the barriers formed by the boundary or the trails left by any of the four players.
FIG. 8 shows, for example, a collision between the arrow 40 and the barrier trail left by movement of the arrow 42, as indicated by the collision symbol at 50. After the crash, as shown in FIG. 9, the barrier trail left by the movement of arrow 40 is removed from the screen and a hole is left in the barrier trail left by the arrow 42 at the point of collision, as indicated at 52. It is possible for the arrow of one of the other players to move through this hole in the trail barrier without producing a collision. The game continues until all but one of the players has collided with one of the barriers. The score is maintained by a set of arrows positioned in the outer boundary 30 opposite the starting point of each of the players. Whenever a player experiences a collision, the number of arrows is reduced by one. A winner is declared when all but one of the players has lost all four scoring arrows. It will be noted that in comparing FIGS. 8 and 9 that the number of scoring arrows associated with the player controlled arrow symbol 40 was reduced from 2 to 1 as the result of the collision at 50.
The generation and movement of the images formed on the screen 16 in conformance with the rules of the game and under the manipulation of the players through the sets of push-buttons is under the control of an electronic circuit which is shown in schematic block form in FIG. 10. The heart of the control circuit is a central processing unit (CPU) 60, which is preferably a microprocesser such as the Intel 8080 central processing unit described in detail in the publication "8080 Microcomputer Systems Users' Manual" published September 1975 by Intel Corporation. However, any general purpose central processing unit could be used in this system. The CPU 60 is under the control of a clock generator 62 whose frequency is controlled by a crystal 64. The frequency is selected so that the clock circuit provides the basic frequencies required for both the microprocessing system and the USA standard video raster scan control of the cathode ray tube display. The CPU, in addition to the arithmetic unit with its accummulator or A-register, has six 8-bit general purpose registers arranged in pairs, referred to as B, C; C, E; and H, L which can be used as single 8-bit registers or as 16 bit register pairs. Data is transferred to or from the registers in the CPU over an 8-bit bi-directional data bus 66. Registers H and L are used for storing address information and communicate with a 16-bit address bus 68. In addition, the CPU system provides five output control signals on a control bus 70. Only four of these control arms are of interest, an I/O Read, an I/O Write, a Memory Read, and a Memory Write which control transfer among the CPU, various memories and I/O devices in the system in known manner.
The address bus transfers addresses to the read-write or random access memory (RAM) 72 to select address locations in the memory to which or from which data is transferred from or to the selected registers in the CPU over the data bus 66. The memory 72 is also used by the CPU as a first-in last-out memory or stack, to perform subroutine calls and returns. The memory 72 is also used as a temporary data storage during execution of programs. The address bus 68 also addresses a read-only memory (ROM) 74 which is used to store program instructions and program constants that are transferred to an instruction register (not shown) in the CPU over the data bus 66 in controlled sequence.
The data bus 66 communicates with one or more input ports 76 and output ports 78. The input ports receive signals in response to the operation of the respective sets of push-buttons 18, 20, 22 and 24. The output port communicates with a tone generator 80 which generates tones associated with the play of the game by means of a loud speaker 82. The system as thus far described, including the clock generator 62, CPU 60, RAM memory 72, ROM memory 74 and the input and output ports 76 and 78 comprises a conventional microcomputer system such as described in detail in the above identified 8080 Users Manual. The manner in which the microcomputer system controls the operation of the game will be described in detail after the rest of the CRT control circuit has been described.
The remaining elements of the circuit of FIG. 10 provide a video control system for a cathode ray tube monitor for converting information generated by the processing system into the desired format displayed on the cathode ray tube screen 16. The cathode ray tube is part of a conventional television monitor indicated generally at 84 which utilizes a standard 525 line raster scanning system. Sync and blanking signals for controlling the raster scan are derived from a video timing logic circuit 86. These signals are combined with a video signal derived from a video shift register 88, the video signal and sync and blanking signal being combined in a combiner circuit 90 and applied to the input to the monitor 84 to produce the desired visual display.
The visual display, as pointed out above, consists of a plurality of symbols or characters which are arranged and positioned on the face of the tube to provide various patterns such as shown in FIGS. 2 through 9. While the number of different types of symbols or characters capable of being displayed may be varied according to the specific design of the system, the preferred embodiment utilizes 32 different symbols each of which occupies the same size square area when displayed on the screen. The display area is confined to a matrix of 32 contiguous symbols in width and 28 contiguous symbols in height. In other words, any one of 32 different symbols can be displayed on the screen at any one of 896 contiguous locations arranged in a 32 × 28 matrix. Sixteen symbols or characters and their octal code are shown in the following table:
TABLE I__________________________________________________________________________OCTAL CODEG P1 P2 P3 P4 SYMBOL__________________________________________________________________________000 040 100 140 200001 041 101 141 201002 042 102 142 202003 043 103 143 203004 044 104 144 204005 045 105 145 205006 046 106 146 206 BLANK007 047 107 147 207 CRASH010 050 110 150 210 Used for all four players011 051 111 151 211 in four-player game; and to012 052 112 152 212 only one player in013 053 113 153 213 two player game014 054 114 154 214 Only used in two player015 055 115 155 215 game for second player016 056 116 156 216017 057 117 157 217020 used for alphanumeric characters..037__________________________________________________________________________
The remaining sixteen symbols may be alphanumeric characters or the like for displaying messages on the screen, if desired. By definition, each of the 32 symbols requires eight scan lines in height and eight dots per line in width. The pattern of eight dots is controlled by eight binary bits stored in a video register 88. The video timing logic 86 shifts the eight bits out of the video register 88 to the video combiner 90 at a rate synchronized with the line scan rate to generate the pattern of dots within the horizontal scan line distance on the screen allotted to one symbol. A complete line scan generates a pattern of eight dots for each of the 32 symbol positions across the width of the display for a total of 256 dots per horizontal line. Eight line scans are required to complete each row of symbols on the display screen. This requires that the video shift register 88 be loaded 8 × 32 times and shifted out serially eight bits at a time to reproduce one complete row of 32 symbols on the screen. This process is repeated twenty-eight times during one vertical scan to generate the full matrix of symbols on the screen.
Information as to which of the 32 symbols is to be displayed in each of the symbol positions of the 32 × 28 matrix on the display screen is stored in a Video Refresh memory 92, which is a random access memory (RAM) having 1024 addressable eight-bit word locations. The Video Refresh memory stores information received from the CPU over the data bus 66 and is addressed by the CPU over the address bus 68. Thus the Refresh memory 92 is treated in the system as a general addressable memory having a unique address space in the addressing range of the CPU.
Information can also be read out of the Video Refresh memory 92 for purposes of CRT display by addresses derived from the video timing logic 86. A multiplexing switch 94 is under the control of a refresh memory control circuit 96. The refresh memory control 96, as explained hereafter in more detail, permits the CPU to address the Refresh memory 92 only during the vertical retrace (or vertical blanking interval) of the cathode ray tube monitor. During the raster scan interval, the Refresh memory 92 is addressed by the video timing logic 86 so as to read out the information stored in the memory at the appropriate times to continuously load the video shift register 88 with the necessary information to generate the symbol display on the screen 16.
Each 8-bit word in the Refresh memory stores five binary bits which are coded to designate one of the 32 symbols, as per the column marked G in Table I. The remaining three bits may be used to store information regarding such things as which player, if any, is associated with a particular symbol, as included by column P1, P2, P3, and P4 of Table I. These additional three bits could also be used to provide appropriate color information if it was desired to use a color monitor. It should be noted that while the Refresh memory 92 has a capacity of 1024 words only 896 words are stored in the memory, one word for each symbol location in the 32 × 28 symbol matrix of the display.
The five bits identifying a particular symbol, when read out of the refresh memory 92 are applied to a symbol generator 98, which is a read-only memory (ROM) storing 256 eight-bit words. These words are divded into thirty-two groups of eight words per group, each group corresponding to the sixty-four bits (8 × 8) required to generate one of the thirty-two symbols. The five bits received from the Refresh memory 72 address a selected one of the thirty-two groups. The eight words in each group are individually addressed by three additional bits derived from the video timing logic 86, which bits identify which of the eight lines of a symbol is currently being scanned across the monitor display screen. The 8-bit words stored in the symbol generator 98, as they are addressed, transferred out in parallel to the video shift register 88. The eight-bits are then shifted out of the video register 88, serially to modulate the cathode ray beam to form the desired pattern of eight dots of one line of the selected symbol. Because the video signal is binary in form, each dot will be either dark or light on the screen.
The operation of the refresh memory control 96 can best be understood by reference to the timing diagrams of FIG. 11A-C. The video timing logic 86, in generating the sync and blanking signals for the monitor 84, provides a binary signal having the wave form shown in FIG. 11A which changes states between a SCAN level and a Vertical Retrace level. Whenever the CPU addresses one of the memories, it provides a sixteen bit address on bus 16. In addressing the Video Refresh memory 92 ten of those bits are used to designate a word location in the memory and the remaining six bits are applied to a decode circuit 100 which provides an output that indicates a CPU access request of the video Refresh memory 92, as shown by the wave form in FIG. 11B, this request may come at any time in relation to the video scan cycle, as indicated. Since the CPU can be given to the memory 92 only during the vertical retrace time, the refresh memory control 96, in response to the CPU access request, generates a WAIT signal, shown in FIG. 11C. The WAIT signal goes true whenever the CPU access request goes on and the monitor is doing a SCAN. When the monitor goes into vertical retrace, the WAIT signal is turned off and the Refresh Memory control 96 allows the CPU to access the memory. This signal remains on until the CPU access request goes off. The WAIT signal of FIG. 11C is applied to the CPU 60 and operates to suspend operation of the CPU until access to the Refresh memory 92 is granted. The fact that the CPU operation may be temporarily suspended until the access request can be granted utilizes a standard technique where the CPU is used with relatively slow memories, as described in more detail in the above identified 8080 Users' Manual.
The operation of the video timing logic in addressing the Video Refresh memory 92 and the symbol generator 98, and in controlling the timing of the video shift register 88 is shown in more detail in FIG. 12. The standard video monitor requires that it be supplied with a horizontal sync frequency of approximately 15,750 Hz. To provide 256 dots of information across the line scan, and to provide about 20% of the line scan period for retrace, a clock frequency of 330 clock intervals per line scan is used, resulting in a clock frequency of 5.2Mhz (330 × 15,750). This clock frequency is derived from the clock generator 62 and applied to the sync and blanking control 102. The sync and blanking circuit selects 256 clock pulses out of each 330 clock pulses defining one line scan and applies then to the input of a divider chain including a horizontal counter 104 and vertical counter 106. Each stage of the horizontal counter 104 divides the clock frequency by two. Since the clock period corresponds to one increment of resolution between dots on the cathode ray tube screen, it is convenient to refer to the clock frequency in terms of the dot pulse rate. Thus each dot of the 256 dots of information in one line scan occupies a time interval of 1H. Each stage of the horizontal counter 104 divides the clock frequency in half, producing output pulses at intervals of 2H, 4H, 8H, 16H, 32H, 64H and 128H. The vertical counter 106 in turn divides the horizontal output frequency (Horiz. SYNC), the first stage providing an output pulse after each 330 input pulses, that is, after each complete line scan. The outputs of the vertical counter 106 are designated 1V, 2V, 4V, 8V, 16V, 32V, 64V and 128V.
Since a new symbol is generated by addressing the Refresh memory 92 after each group of eight dots, and again after each group of eight horizontal lines, the five highest order outputs from the horizontal counter 104 and vertical counter 106 are used to form the 10-bit address for the Refresh memory 92. The clock pulse 8H is used to load the register 88 with an 8-bit word from the symbol generator 98. The basic clock 1H is used to shift the bits serially out of the video register 88. The three lowest order outputs 1V, 2V and 4V of the vertical counter 106 are used to provide the three line designation bits of the address going to the symbol generator 98. The sync and blanking control circuit 102 resets the horizontal counter 104 at the end of each line scan and resets the vertical counter 106 at the end of each vertical scan. The sync and blanking circuit 102, in generating the proper signals to synchronize a video monitor, utilizes conventional techniques such as described in the publication "Introduction to Solid State Television Systems" by Gerald L. Hansen (prentiss Hall, Inc. 1969).
From the above description, it will be recognized that any symbol information placed in the Video Refresh memory 92 by the CPU 60 is automatically read out and displayed on the monitor screen 16 by the video timing logic 86. To understand the operation of the CPU in loading the Video Refresh memory, it must be kept in mind that the Intel 8080 microprocessor uses the H and L registers in the CPU for temporarily storing the 16-bit addresses applied to the address bus. BEfore considering the operation of the CPU in loading the Refresh memory 92, reference should be made to FIG. 13 which "maps" the memory 92 by relating processer memory addresses to the display screen symbol locations. The higher order of eight bits in the H register are commonly referred to as the memory page and the lower eight bits are referred to as the memory address. While the address bits are coded in straight binary code, for convenience, all addresses are described in the octal format, in which the three octal digits from 000 to 377 represent the 8-bit binary addresses in the H and L registers.
Keeping this address nomenclature in mind, as shown in FIG. 13, the Video Refresh memory 92 is assigned memory pages 340 through 343. Each page of memory includes 256 words having memory addresses numbered 0 through 377 in octal notation. Thus the address of the location in the Refresh memory 92 corresponding to the upper left hand corner of the symbol matrix on the display is H340, L000. The address of the location in memory corresponding to the lower right hand corner is H343, L177. It should be noted that while the page numbers are shown as three octal digits, requiring eight binary bits, only the least significant octal digit changes for the page numbers in the Refresh memory. Thus only the least two significant binary bits in the H register plus the eight bits in the L register are required for addressing any word location in the Refresh memory 92.
For the CPU to change an address to one location to the right on the screen, an octal 1 is added to the least significant digit in the L register, but the page number in the H register is not affected. To address one location to the left, 1 is subtracted from the least significant digit in the L register. To move one location down or up, the address is changed by adding or subtracting 040 to the address number in the L register. If the L register exceeds 377, the contents of the H register are incremented by 1, by the overflow. Thus by manipulating the addresses in this manner, the CPU can select a new location for a player's arrow symbol to move, depending upon the input derived from the associated set of push-buttons.
However, it should be noted that an ambiguity exists at the margins of the symbol matrix. If a symbol is in address location H 341, L137 and it is desired to move the symbol one place to the right by incrementing the address, the number in L changes from 137 to 140. However, the address L140 is adjacent the lefthand margin, a move which is not permissible under the rules of the game. This and other problems of keeping track of the location of each player are overcome by having the CPU first read out of the word stored in the new memory location to determine if it is a legal move. This allows the CPU to check for an illegal move, such as attempting to move into a barrier, before the move is actually made. By loading barrier symbols in the memory locations corresponding to the border positions of the matrix, the CPU is alerted whenever it attempts to move a player's symbol into one of the margin locations by the presence of a barrier symbol. The CPU can only move a player's symbol into a new location which is storing a blank. In the same manner, the CPU can determine when any obstacles are in the course of advancing a player's position. These obstacles need not be fixed, but can be changing with time, as in the case of the barrier trails left behind as the players' symbols are moved across the screen.
It should also be noted that when reading a word out of the Refresh memory 92, the CPU looks at all eight bits although only five of the bits are required to identify the symbol stored in that location. The three additional bits allows every symbol to be assigned up to eight different codes. Table I shows five different codes for each symbol, namely, a general code and a code for each of the four players. This feature enables the CPU to identify whether a barrier symbol, for example, is part of a fixed barrier (general code) or part of the barrier trail of a particular one of the players in the game (player code). By reading out the word associated with the new location on the screen, the CPU can not only determine when a crash occurs but can determine which players are involved in the crash. The three highest order bits can also be used by the video control logic to provide color information to the monitor to display each player's symbols in a unique color.
Consider first the operation of the CPU in controlling a two-payer game. As noted above, the CPU contains, in addition to the arithmetic unit with its accumulator or A-register, a group of six general purpose registers. The H and L registers, as noted, store the address of the currently selected location on the display screen. The B register is used to store the current direction for a player about to move. The direction codes are defined as 000 for up; 001 for right; 002 for down; and 003 for left. The C register is used to store the code for the current player who is about to move. In a two player game, the codes are 010 for Player #1 and 014 for Player #2. The D and E registers are used for temporary storage of intermediate calculations. The memory 72, addressed as memory page 377, functions in part as an extension of the general purpose registers. Specific locations in the memory 72 are permanently assigned for storing specific information according to the following table:
TABLE II______________________________________REGISTERS IN MEMORY 72Address Contents______________________________________L000, H377 Player #1 position (address)001 Player #1 position (page)002 Player #2 position (address)003 Player #2 position (page)004 Player #1 direction005 Player #2 direction006 -- Who moves first? 0: Player #1; 1: Player #2007 Player #1 score010 -- Player #2 score016 -- Player #1 push button image017 -- Player #2 push button image______________________________________
The CPU has instructions for loading the locations in page 377 from the six registers and loading the registers from the memory locations. All of the instructions available to the CPU are described in the above-identified User's Manual for the 8080 Microcomputer System.
Referring to the flow diagram in FIG. 14, the main program flow for the two player game is shown. In the flow diagram, the circles which have dotted lines entering and leaving them indicate subroutines which are detailed in subsequent flow charts. At the beginning of the game, as the first step in the flow diagram, the cathode ray screen is cleared by writing a blank symbol at every location in the matrix displayed on the screen. The fixed boundaries are then established by storing the appropriate symbols in the border locations and the respective arrows for the two players are stored in the starting positions with the appropriate directions, all as illustrated in FIG. 2. The basic game action then proceeds as the program advances through successive operations. Thus during the second step, the program enters a subroutine 5, in which, during a predetermined delay (typically 0.5 sec.), the status of the two sets of player push buttons are monitered, an output to the tone generator activates an audible tone whose pitch is set by the current direction of one of the players, and the push button image data in address locations 016 and 017 of the memory 72 are updated. The delay sets the pace of the game and is selected to test the reaction time of players in manipulating the control buttons. After returning to the main program, Player #1 is moved one space. This is accomplished by subroutine 2 which also sets the accumulator register in the CPU to indicate whether the move was legal or whether there was a collision. After returning from subroutine 2, the main program then tests the status of the accumulator register to determine whether to proceed or branch out of the main program flow to score a crash.
Assuming no crash, the program advances to the next step and again enters subroutine 5, where after a delay, the push-buttons are again checked. Then Player #2 is moved, using subroutine 2. On returning to the main program, the status of the accumulator register is again tested to determine if the move of Player #2 was legal or whether a crash took place. Assuming the move was legal, the program loops back to the second step and repeats the operation until one of the players crashes into a barrier. If either player crashes, the main program branches to a HIT routine in which a crash symbol is displayed on the screen at the new location, a boom sound signalling a crash is generated by the audio generator, and the scores are updated. The scores are then tested to determine whether either player has reached a predetermined number of crashes, in which case the game is terminated, or if not, the program loops back to the first step to initiate a new round.
One feature of the main program not shown in the flow diagram, FIG. 14, is that alternate players move first in successive rounds. This is accomplished by having the program check the address location 006 in the memory 72, which, as shown by TABLE II, indicates by a 0 or 1 in the least significant bit which player moves first. This register is incremented every round to switch the starting player.
From the program listing in Appendix I it will be seen that the first step when play is initiated is to call up the subroutine for initializing the game (CAL INIT). The INIT subroutine clears the screen and draws the screen boundaries using the boundary (BDY) subroutine. It then places the players' symbols at their starting locations. Player #1 is placed at location L 245 page 340 with an initial down direction (002) and Player #2 is placed at L332, H342 with an initial up direction (000). The appropriate registers in the memory 72 (page 377) are set to the initial player positions, directions, and push-button images. The push-button image registers (016 and 017, page 377) are initialized to indicate down (002) for Player #1 and up (000) for Player #2. The BDY subroutine operates to first clear the screen by writing "blank" symbols into all memory locations of the Video Refresh memory 92. Next, the horizontal and vertical wall symbols are written into the memory locations which define the perimeter of the screen, and finally the corner symbols are placed at the corners.
Referring again to the main program FIG. 14, after the status of the First Move flip-flop is interrogated and re-set in memory location 006 page 377, the program calls a DELAY 1 subroutine for either Player #1 or #2 (subroutine 5 of FIG. 14). The flow diagram for the DELAY 1 subroutine is shown in FIG. 15. The first step in the DELAY 1 is to load the D and E registers with a delay constant. The next step is to calculate the tone pitch, initiate an output of the tone pitch data to the output port 78 to set the tone generator, and turn the tone on. This is accomplished by adding the contents of the B register and C register in the CPU. The B register contains the direction code for the player currently moving, while the C register contains a constant, which indicates which of the two players is currently moving (010 for Player #1 and 014 for Player #2). By adding the contents of these two registers, a unique number for each player and direction is generated which is then scaled to represent a wider range by multiplying by 8 and adding 7. The scaled number is then sent to the tone generator by the CPU over the data bus to the output pot 78 which loads the information in the tone generator 80. The tone generator generates an audible sound having a pitch that is proportional to the scaled number received at the output port.
Next the program checks the push-button status information at the input port 76. This requires entrance into a push-button check (PBCK) subroutine which reads the states of the player push-buttons. This subroutine reads the push-buttons and updates the push-button image registers 016 and 017, page 377 in memory 72.
Next, the D and E registers, functioning as a single 16 bit register, are decremented by 1. A test is then made to determine if the D register has reached 004, which is approximately half the total time delay. If so, the tone generator is turned off. A test is then made to determine if the D register has been counted down to 0. If not, the program loops back again checking the push-button status and decrementing the D and E registers by 1. When the D register is finally decremented to 0, the program converts the push-button images to direction codes, and then stores these direction codes in the direction registers (004 and 005) in memory page 377.
The check push-button subroutine entered at 6 in the flow diagram of FIG. 15 is shown by the flow diagram in FIG. 16. The first step of the PBCK subroutine is to input the push-button data from the push-button sets through the input port 76. An 8-bit word is generated at the input port in which the first four bits represent the condition of the four push-buttons of Player #1 and the other four bits represent the condition of the push-buttons of Player #2. A non-depressed button is indicated by a binary 1 and a depressed button is indicated by a binary 0 for the associated bit in the input word.
Next the four bits corresponding to Player #1 are tested to determine if any of the buttons has been activated, as indicated in the next two steps of the flow diagram in FIG. 16. If so, the push-button image register in memory 72 (address 016, page 377) is updated. If no push-buttons have been pushed, a delay is introduced and the program skips the updating routine. The delay introduces a comparable time period in the program so that the same program time is involved whether or not push-button updating is required. This is necessary to insure that the time required for the two players to advance is not affected by the push-button check subroutine. The same steps are then repeated on the four input bits from the push-buttons for Player #2, as indicated at 156. The program listed for the PBCK subroutine is shown in Appendix I in which the routines TICK 1 and TICK 2 represent the equal-time delay branches discussed above. The NOP (No Operation) instructions are necessary to insure that the two program branches occupy the same number of time states and thus insure that the two players advance at equal rates.
The other subroutine involved in the DELAY 1 subroutine is the BIN subroutine in which the push-button images are converted to direction codes as indicated at 7 in the flow diagram in FIG. 15. This is accomplished by using the D register to count the number of times the image data must be shifted right until a 0 is encountered. The routine which calls the BIN subroutine sets the four least-significant bits of the push-button word to binary ones if the conversion is to be done for Player #2. In this manner the BIN subroutine may be used for both players. If the push-button image of Player #2 is converted by the BIN subroutine, the number of right shifts required to find a 0 will be 4, 5, 6 or 7. These numbers are converted by the program respectively to 0, 1, 2, or 3 so that the correct direction data results.
For example, assume the push-button data indicates Player #1 is moving downward. The push-button image for this case reads 0000 1011. This data is shifted 3 times to the right before the 0 is detected (in the carry bit). Thus the register count in the D register is 002, which is the proper code for the down direction. Suppose the push-button data indicates Player #2 moving to the right. The push-button image data is then 1101 1111 and six rightshifts are required to detect the 0. This results in a count of 5 in the D register, which when masked to indicate only the two least-significant bits becomes 001, which is the proper code for the direction to the right.
On completion of DELAY 1 subroutine, the main program enters a subroutine for actually moving the associated player on the screen, as indicated at 2 in FIG. 14. This involves the P1MOVE and the P2MOVE subroutines. The flow diagram for these subroutines which are substantially identical, is shown in FIG. 17. The first step, as shown by the flow diagram, is to load the H and L register from the player position registers in the memory 72 (Page 377, Locations 000 and 001 for Player #1 and Locations 002 and 003 for Player #2). Next, the C register is loaded with the appropriate code for the player involved, namely 010 for Player #1 or 014 for Player #2. The B register is then loaded from the appropriate direction register in memory 72 (004 for Player #1 or 005 for Player #2). The MOVE subroutine, indicated at 3 in FIG. 17 is then called which determines the new position and direction of the player arrow symbols and the symbols to be written in the current position. Finally, the new position address which is stored in the H and L registers by the MOVE subroutine, is written back into the position registers in memory 72.
The MOVE subroutine is shown in the flow diagram of FIG. 18. The first step is to read the player symbol at the current position in the Video Refresh memory 92. From this symbol code, the program is able to determine the previous direction of the player since the two least-significant bits of the eight player symbol codes (010 through 017 in TABLE I) correspond to the direction of the arrow. (0 for up, 1 for right, 2 for down and 3 for left). Using this code information together with the new direction contained in the B register, the next step of the program as shown by flow diagram 18 is to calculate the code for the symbol to be left behind after the move is made. There are 14 possible "leave behind" characters in the game of the present invention, namely, a straight horizontal wall section, a straight vertical wall section, one of four corner wall sections, and one of four arrows for each player pointing in the four different directions, which are used when a player has turned back on himself. For example, see FIG. 6 in which player arrow 26 is the "leave behind" character or symbol. These symbol codes are stored in a sixteen word table in the ROM memory 74 and addressed by using the two old direction bits and two new direction bits as a four bit address. For example, if the two least significant bits masked from the current symbol code correspond to an old direction of down, namely, 10 (or octal 2) and the new direction bits in the B register correspond to the code for left, namely, 11 (or octal 3), the address 1011 is used to address the corresponding location in the table where the code for the lower right corner symbol (003) is stored. The following table indicates the relative addresses and the symbols stored in those addresses.
TABLE III______________________________________TABLE ADDRESSOld Direc. New Direc. TABLE DATAItem Code Code Leave Behind Symbol______________________________________1 0 0 0 0 Up-Up2 0 0 0 1 Up-Rt3 0 0 1 0 Up-Dn4 0 0 1 1 Up-Lft5 0 1 0 0 Rt-Up6 0 1 0 1 Rt-Rt7 0 1 1 0 Rt-Dn8 0 1 1 1 Rt-Lft9 1 0 0 0 Dn-Up10 1 0 0 0 Dn-Rt11 1 0 1 0 Dn-Dn12 1 0 1 1 Dn-Lft13 1 1 0 0 Lft-Up14 1 1 0 1 Lft-Rt15 1 1 1 0 Lft-Dn16 1 1 1 1 Lft-Lft______________________________________ DIRECTION CODES: 0 0 = Up; 0 1 = Right 1 0 = Down; 1 1 = Left
The "leave behind" symbol read out of the table is then stored back in the Video Refresh memory at the current location to replace the image appearing on the screen at the associated location on the display matrix.
The next step in the MOVE subroutine, as shown at 4 in FIG. 18, is to enter the DIREC subroutine in which the address for the new screen location is calculated, and the H and L registers updated to reflect the new location on the screen after the move. The next step in the MOVE subroutine requires that the current symbol in the new location be read out of the Video Refresh memory to the CPU before the new symbol is loaded into the new location. If a current symbol in the new location is a blank, the move is legal and a player arrow symbol is then stored in that location which points in the direction of the current move. The accumulator or A register is set to 0 to indicate a legal move and operation returns to the appropriate P1 MOVE or P2 MOVE subroutine. If the existing symbol stored in the new location is not a blank, the accumulator is set to 1 to indicate an illegal move and the MOVE subroutine returns to the P1 MOVE or P2 MOVE subroutines.
It will be noted that the MOVE subroutine calls in a DIREC subroutine, as indicated 4 in the flow diagram of FIG. 18, for updating the H and L registers to identify the new location of the player in the Refresh memory after the move. The flow diagram for the DIREC subroutine is shown in FIG. 19. The DIREC subroutine interrogates the B register to determine which direction to move a player's arrow symbol. This is done by modifying the address of the current position to the address of the new position in the manner shown in FIG. 13. It will be seen from the flow diagram that if the B register is 000, which is the direction code for up, the program branches to the proper routine to update the H and L registers by subtracting 040 from the current address in the H and L registers. If the contents of the B register is 001, which is the code for right, the program branches to the routine for adding 001 to the L register. If the contents of the B register is 002, which is the code for down, the program enters the routine for adding 040 to the L register. Finally, if the B register is 003 which is the code for a move to the left, the program enters the routine for subtracting 001 from the L register.
To provide a game with four players, the program for controlling the CPU is similar in many respects to the program as described above, but some of the subroutines must be modified and extended. The following table shows memory page 377 (the memory 72) assignments for the four player game.
Table IV______________________________________0-1 Player #1 position2-3 Player #2 position4-5 Player #3 position6-7 Player #4 position10 Player #1 direction11 Player #2 direction12 Player #3 direction13 Player #4 direction20 Player #1 Eradication Flag21 Player #2 Eradication Flag22 Player #3 Eradication Flag23 Player #4 Eradication Flag24 Player #1 Pushbutton image25 Player #2 Pushbutton image26 Player #3 Pushbutton image27 Player #4 Pushbutton image30 Number of players out of the round (0-4)31 Number of players out of the game (0-4)32 Player #1 Out-of-game flag33 Player #2 Out-of-game-flag34 Player #3 Out-of-game flag35 Player #4 Out-of-game flag36 Player #1 Out-of-round flag37 Player #2 Out-of-round flag40 Player #3 Out-of-round flag41 Player #4 Out-of-round flag______________________________________
From the above table it will be seen that certain additional items of information are required for a four player game. Thus the program must be able to keep track of the number of players out of a particular round, the number of players which have been eliminated from the game, which players are out of the round or out of the game and which player or players are to be removed from the playfield as the result of a crash (the Eradication flags). In the four player game, the C register in the CPU has four possible codes to indicate which player is being moved, namely, 010 for Player #1, 014 for Player #2, 020 for Player #3 and 024 for Player #4.
The program for the four player game utilizes the ability of the hardware to assign different character codes to the same image. That is, the symbol generator 98 only requires 5 bits to identify a symbol or character leaving three additional bits which can be used to store information regarding the symbol, such as which player is identified with that symbol. The code for each of the symbols for each of the different players is shown in Table I above. In the table it will be seen that there are five distinctive codes for each symbol. A distinctive code is available to the program depending upon whether the symbol is related to one of the four players or is part of the stationary boundary. By having each symbol or character code unique to a particular player, it is possible to selectively eradicate the barrier of any player during the course of a round.
Referring to FIG. 20, there is shown a flow diagram for the main program of the four player game. At the start of a new game, the program initially clears the registers 20-41 of memory page 377 (in memory 72). The next step in the program is to clear the screen, draw the screen boundaries, position the player symbols at their initial locations and initialize the position and direction registers for the four players in memory page 377. Push button image registers for the four players are also initialized to point Player #1 in a down direction, Player #2 in a left direction, Player #3 in an up direction, and Player #4 in a right direction. Next, the program tests whether each of the four players in sequence is in the game. This is done by checking the out-of-game flag in address locations 32-35 in memory page 377. If a player is not out of the game, a test is made to determine whether he is out of the round. A collision may remove a player from a round but until his score is reduced to zero, he continues to play in additional rounds until he losses enough rounds (e.g., four rounds) to be eliminated from the game or until he wins the game. If the player is out of the round, the program continues to test the next players in sequence until a player is found that is both in the game and in the round. The program then branches to a subroutine, indicated at 5' in FIG. 20, in which a time delay (e.g. 0.25 sec.) is introduced. Also the push-button images are updated in the registers 24-27 of memory page 377. This is accomplished by the DELAY1 subroutine described above (see FIG. 15) in connection with the two player game, but with a shorter delay constant loaded into the D and E registers of the CPU. The program then enters a subroutine indicated at 2', in which the player is moved to the new location on the screen. This subroutine also checks for a player hitting an obstacle and takes appropriate action if a crash is detected, including taking the player out of the game.
After the fourth player is serviced by the program, if a round is still in progress, the program re-enters at the point where the Player #1 is tested to determine if he is still in the game. If a round has been completed and a new round is to be played, the program branches back from the subroutine at 12 directly to the second step of the main program in which the screen is cleared and the players are positioned for the start of a new round.
One thing that should be observed from FIG. 20 is that as a player crashes and is removed from a game, or removed from a round, the action of the game speeds up. This is because each player has a time delay associated with his action. Thus, four time delays occur between successive moves of a given player when all four players are in the game. This is reduced by one player delay with each player removed from a round. With only two players remaining in the game, only two time delays are involved between moves of a given player. Therefore a player moves at twice the rate as when four players are still in the game.
The P1MOVE-P4MOVE subroutine indicated at 2' in FIG. 20 for moving a player is shown in the flow diagram of FIG. 21. This P1MOVE-P4MOVE subroutine differs from that described for the two player game as described above in connection with flow chart FIG. 17 in that the C register is loaded with the code for any one of four players instead of only two players and the check made in the A register to determine whether or not a player hit an obstacle is made at the end of this subroutine rather than in the main routine, as was done in the two player game. If a hit occurs, the routine branches to a HIT subroutine indicated at 13 in FIG. 21.
The MOVE subroutine at 3' in FIG. 21 is similar to the MOVE subroutine for the two player game indicated at 3 in the flow diagram of FIG. 18. The principal difference is in the addition of a subroutine WHICH P to create the proper symbol code for the player or boundaries. This subroutine is entered before writing the leave-behind character and before writing the player's symbol at the location on the screen.
The character or symbol, as computed by the MOVE subroutine has a code range of 000 to 037 (5-bit code) as in the two-player game. The WHICH P routine adds 040 to the symbol code for Player #1, adds 100 for Player #2, 140 for Player #3, and 200 for Player #4. This creates the proper symbol codes for both the trail barriers and the moving arrows associated with the individual players, as set forth in TABLE I above. Referring to the flow diagrams of FIGS. 22 and 23, the HIT subroutine steps are shown. The first step is to initiate an output to the audio generator to generate a "BOOM" sound characteristic of a crash. The C-register is then tested to determine which player was currently moving when the crash occurred. The Eradication flag of the player who crashed is set to "1". This flag is later tested by the ERAD subroutine to determine which player or players to remove from the screen. Also the out-of-round flag of the player who crashed is set to 1. This flag is tested by the main program to determine whether or not a player is allowed to move. The register at address 030 page 377, which stores the number of players out of the round is incremented by one. This register is tested later in the program to determine whether or not a round is over. Finally, the score of the player who crashed is decremented. If this player's score reaches zero, his out-of-game flag in page 377 is set to one.
Continuing with the flow chart on FIG. 22, the program next reads the old symbol code from the location in the Video Refresh memory corresponding to the collision location. This symbol is then tested to determine whether or not another player was hit. If the symbol in the collision location is the arrow of another player, the player that has been hit is also removed from the round in the same manner as the player who crashed. A display CRASH symbol is then displayed at the collision location by a FLASH subroutine for a short period of time after which the program calls in the ERAD subroutine, as indicated at 14, and any players whose eradication flags have been set to one are removed from the screen.
The program then makes several tests. It first tests to see whether three players are out of the game, as indicated by the out-of-game counter at memory page 377 address 031. If three players are out of the game, the game is terminated with a winner. If the out-of-game counter is set to four, the game is terminated with no winner. This occurs when two players, remaining in a game, are down to their last crash and they hit each other.
If more than one player is still in the game, a test is made to determine if two or three players remain active in the game. If two or three players remain active in the game, the main program is reentered at RESUME ROUND (see flow diagram of FIG. 20) and the round continues. However, if three or more players are out of the round, a new round must be initiated. First the out-of-round counter at memory page 377, address 030 is initialized by the contents of the out-of-game counter at memory page 377, address 31. It will be noted that by definition, any player out of the game is also out of the round. After a between-round delay sufficient to allow the players to get set for another round, the INIT subroutine clears the screen and puts the players remaining in the game at their starting locations. The subroutine then returns to the main program at the point indicated as NEW ROUND, as shown in the flow diagram of FIG. 20.
The HIT subroutine calls in several subroutines. One is the INHITF subroutine which operates to increment the out-of-round counter at memory page 377, address 030. The routines DCRP1-DCRP4 decrement the scores of the respective players. While virtually any scoring system can be used, groups of arrows displayed in the outer boundary at each player location are used to indicate the score, as shown in FIGS. 7-9. Each player initially may have a score of 4, for example, which is reduced by one each time the player crashes.
The ERAD subroutine checks the symbol at the collision location to determine whether it represents a trail barrier left behind by a player or represents the outer wall or boundary. A blank is inserted at the collision location with the trail barrier of another player but not at the collision location with the outer wall. The ERAD subroutine then checks the eradication flag for each of the four players. If the flag is set for a particular player, the proper subroutine ERADP1-ERADP4 is called depending on which player has crashed and the E register is set to a value which establishes the range of symbol codes to be searched for on the screen. A WIPOUT subroutine then removes all symbols having a code within the range corresponding to the player or players whose eradication flags have been set.
The following program listings show the complete programs for the operation of the CPU 60 in both the two-player game (Appendix I) and the four-player game (Appendix II). The listings shows machine code in the left-hand column, assembler language code in the right-hand column. The mnemonics are those used in the assembler for the Intel 8080 microprocessor as developed and sold by Control Logic, Natick, Mass. Descriptive headings are also provided throughout the listing to identify routines, subroutines, groups of constants, etc. Addresses and other numeric representations are in their digit octal notation. Instructions which use addresses list the address (L) first and the page (H) second. ##SPC1## ##SPC2## ##SPC3## ##SPC4## ##SPC5## ##SPC6## ##SPC7##