.TITLE JOYSTK ; * * * JOYSTICK OPTION SOFTWARE MODULE * * * ; PROVIDES FORTRAN-COMPATIBLE SOFTWARE-ONLY ACCESS TO DATA FROM ; THE DE ANZA SYSTEMS, INC. JS-200 JOYSTICK & INTERFACE. ; THE SUBROUTINE MAY BE INVOKED WITH 1 TO 5 ARGUMENTS: ; CALL JOYSTK (IJOYST[, IAKNOB][, IBKNOB][, IX][, IY]) ; THE FIRST (MANDATORY) ARGUMENT WILL BE LOADED WITH THE CONTENTS OF ; THE JOYSTICK STATUS BYTE, THE BITS OF WHICH CORRESPOND TO SETTINGS ; OF THE JOYSTICK MODULE SWITCHES AS FOLLOWS: ; BIT 0: 0 = CURSOR #1 OFF ; 1 = CURSOR #1 ON ; BIT 1: 0 = CURSOR #2 OFF ; 1 = CURSOR #2 ON ; BIT 2: 0 = RATE MODE ; 1 = POSITION (ABSOLUTE) MODE ; BIT 3: 0 = ENTER IS QUIESCENT ; 1 = ENTER HAS BEEN DEPRESSED (READING STATUS RESETS) ; BIT 4: 0 = TRACK (AUTO ENTER) OFF ; 1 = TRACK ON ; BITS 5-7: UNUSED .PAGE ; REMAINING (OPTIONAL) ARGUMENTS ARE LOADED WITH THE ANALOG INPUTS FROM ; THE JOYSTICK MODULE: ; IAKNOB = OPTIONAL KNOB A ; IBKNOB = OPTIONAL KNOB B ; IX = JOYSTICK X DISPLACEMENT ; IY = JOYSTICK Y DISPLACEMENT ; RANGE OF ALL INPUTS IS APPROXIMATELY -120 TO +120. ; ALL NEW CODE: 24 APRIL 78 ; MODIFICATIONS TO DELETE WAITING FOR ENTER: 11 MAY 78 ; PROGRAMMER: KEN DINWIDDIE .MCALL .REGDEF .REGDEF .GLOBL JOYSTK JOYCTL = 166017 ; JOYSTICK CONTROL REGISTER DEFINITION .PAGE JOYSTK: MOV (R5)+,R4 ; ACQUIRE ARGUMENT COUNT MOV #3,R1 ; INITIALIZE FOR STATUS BYTE MOVB R1,@#JOYCTL ; SELECT STATUS BYTE MOVB @#JOYCTL,R0 ; READ STATUS BYTE FROM JOYSTICK MODULE BIC #177400,R0 ; STRIP TO LOW BYTE MOV R0,@(R5)+ ; AND PASS TO TARGET LOCATION JYSTK1: DEC R4 ; ACCOUNT FOR THIS ARGUMENT BEQ DONE ; IF LAST ARGUMENT SPECIFIED INC R1 ; ADVANCE POINTER TO NEXT JOYSTICK REGISTER, MOVB R1,@#JOYCTL ; SELECT IT, MOVB @#JOYCTL,R0 ; AND ACQUIRE DATA EXTENDING SIGN BIC #177400,R0 ; STRIP TO LOW BYTE SUB #200,R0 ; BIAS TO -128 TO +127 MAX. MOV R0,@(R5)+ ; PLACE DATA IN TARGET LOCATION BR JYSTK1 ; AND GO FOR THE NEXT ELEMENT DONE: RTS PC ; RETURN TO CALLER .END