This BASIC program contains a small machine language routine which will be stored in memory and executed during vertical blank. The vertical blank is the period of time between the drawing of the last line of the television screen and the movement of the electron beam to the top of the screen to begin drawing the first line. During this period, the machine language routine will be at work. Since the vertical blank occurs 60 times per second, the routine will be executed 60 times per second. The routine is executed so fast that there is no noticeable delay in computer operation.
The function of the routine is to change the joystick values into the control-arrow key codes and then store this new value in the register which the Atari uses to store keyboard data (764). Try this:
Because zero is the keyboard code (not ASCII, but an internal code) for the L character, the letter L will be displayed on the screen. The keyboard codes for the four direction keys and the corresponding joystick values follow:
Basically, here is how the program will work. Every 1/60th of a second, the routine will check the joystick port. If the joystick has been moved up, down, left, or right, then a direction code, corresponding to the position of the joystick, is stored in location 764. The Atari will then automatically display its character for that code. In addition, a counter will be used to determine when a direction should be repeated. If the joystick is held to one position for several seconds, that direction will repeat just the way it would on a keyboard. If the joystick trigger is held down as well, the direction will repeat extra fast. Thus the joystick merely replaces the control and direction keys, and is best suited for use as a programming aid.
5 REM JOYSTICK/CURSOR CONTROL 10 DATA 104,162,6,160,147,169,7,32,92,228,169,0,133,204,133,205,133,206,96,173,120,2,201,15,240,24 20 DATA 197,205,240,48,133,205,201,14,240,23,201,13,240,23,201,11,240,23,201,7,240,23,208,6,169,0 30 DATA 133,204,133,205,76,98,228,169,142,208,10,169,143,208,6,169,134,208,2,169,135,141,252,2,208,234 40 DATA 166,204,240,9,166,206,240,13,198,206,76,98,228,169,40,133,206,133,204,208,213,162,5,134,206,174 50 DATA 132,2,208,180,162,1,134,206,208,174,0,-1 60 I=0:C=0:RESTORE 10 70 READ N:C=C+N:IF N=-1 THEN 90 80 POKE 1664+I,N:I=I+1:GOTO 70 90 IF C=15702 THEN A=USR(1664):STOP 100 PRINT "THERE IS AN ERROR IN THE DATA"
Return to Table of Contents | Previous Section | Next Section