00100 *MOUSE/ASM   VERSION 2.0        LAST DATE 04/10/86
00200 
00300 * THIS IS THE SOURCE CODE FOR MOUSE SOFTWARE ON A COLOR COMPUTER
00400 * COPYRIGHT 1986 BY SRB SOFTWARE, ALL RIGHTS RESERVED
00500 * THIS PROGRAM IS PLACED IN THE PUBLIC DOMAIN BY STEVE BJORK
00600 * FOR THE PRIVATE USE ONLY!
00700 * THIS CODE (ALL/PART) MAY NOT BE USED IN ANY MARKETED PRODUCT
00800 * WITHOUT WRITTEN CONSENT FROM SRB SOFTWARE.
00900 *
01000 * THIS PROGRAM WILL PLACE A CURSOR ON THE SCREEN AND MOVE IT EVERY
01100 * 1/60 OF SEC.
01200 * IS ALSO HAS A HI-RES SCREEN TEXT DRIVE.
01300 
01400 SSTART  EQU     $BA     16 BIT POINTER TO START OF GRAPHIC SCREEN
01500 SEND    EQU     $B7     16 BIT POINTER TO END OF GRAPHIC SCREEN
01600 
01700 
01800         ORG     0       START OF PROGRAM
01900 
02000 BEGPRO  LBRA    USR     VECTOR FOR USR FUNCTION
02100 CURDAT  RMB     16*3*2*4+2      SPACE FOR CURSOR DATA
02200 
02300 * THIS TABLE IS USED TO SELECT WHAT FUNCTION TO DO
02400 COMTAB  FDB     TURNOF-COMTAB           0  CURSOR OFF
02500         FDB     TURNON-COMTAB           1  CURSOR ON
02600         FDB     GETX-COMTAB             2  GET X POSITION
02700         FDB     GETY-COMTAB             3  GET Y POSITION
02800         FDB     GETBUT-COMTAB           4  GET BUTTON PRESS
02900         FDB     GETDWN-COMTAB           5  GET BUTTON STATUS
03000         FDB     DSABLE-COMTAB           6  DISABLE IRQ FROM SYSTEM
03100         FDB     PING-COMTAB             7  BELL
03200         FDB     CLICK-COMTAB            8  CLICK SOUND
03300         FDB     SELJOY-COMTAB           9  SELECT RIGHT JOYSTICK
03400         FDB     SELJOY-COMTAB           10 SELECT LEFT JOYSTICK
03500         FDB     SELJOY-COMTAB           11 SELECT COCO MAX
03600         FDB     SELJOY-COMTAB           12 SELECT X-PAD
03700         FDB     SELJOY-COMTAB           13 SELECT HI-RES JOYSTICK
03800 LASTCM  EQU     (.-COMTAB)/2            NUMBER OF COMMANDS
03900 
04000 * NEXT IS THE ALL THE VARIABLES NEEDED BY THE MOUSE SOFTWARE
04100 * VARIABLES ARE INDEXED OFF THE U REG FOR SPEED AND SMALLER SIZE
04200 DATA    EQU     .+16            -16 TO +15 ARE THE FASTEST!
04300 COUNT   EQU     .-DATA          MAKE ALL LABLES AS OFFSET TO U
04400         FCB     0               COUNT IS A COUNTER REG
04500 CSTAT   EQU     .-DATA          STATUS FLAG FOR CURSOR
04600         FCB     0
04700 YJOY    EQU     .-DATA          CURSOR Y POSITION
04800         FCB     0
04900 XJOY    EQU     .-DATA          CURSOR X POSITION
05000         FCB     0
05100 BUTDWN  EQU     .-DATA          BUTTON UP/DOWN
05200         FCB     0
05300 BUTTON  EQU     .-DATA          BUTTON BEEN PRESSED
05400         FCB     0
05500 BUTCNT  EQU     .-DATA          COUNTER FOR TEST BUTTON
05600         FCB     0
05700 STRIP   EQU     .-DATA          STRIP COUNT FOR DRAW CURSOR
05800         FCB     0
05900 MEMPOS  EQU     .-DATA          SCREEN POSITION OF CURSOR
06000         FDB     0
06100 FAST    EQU     .-DATA          FAST FLAG FOR DRAWING CURSOR
06200         FCB     0
06300 YCPOS   EQU     .-DATA          Y POSITION FOR PRINTING ON SCREEN
06400         FCB     0
06500 XCPOS   EQU     .-DATA          XPOSITION FOR PRINTING ON SCREEN
06600         FCB     0
06700 PMODE   EQU     .-DATA          WHAT PRINT MODE IS PROGRAM IN
06800         FCB     0
06900 INVERT  EQU     .-DATA          FLAG FOR INVERTED TEXT
07000         FCB     0
07100 JOYTYP  EQU     .-DATA          TYPE OF JOYSTICK INPUT (0-4)
07200         FCB     0
07300 HOLD    EQU     .-DATA          USE TO HOLD DRAWING CURSOR
07400         FCB     0
07500 OLDIRQ  EQU     .-DATA          PLACE TO PUT OLD IRQ VECTOR
07600         FDB     $FFFF
07700 OLDIO   EQU     .-DATA          PLACE TO PUT OLD OUTPUT VECTOR
07800         FDB     0
07900 NEWJOY  EQU     .-DATA          NEW X & Y FOR NEXT CURSOR POSITION
08000         FDB     0
08100 OLDCOM  EQU     .-DATA
08200         FDB     0
08300 OLDPRT  EQU     .-DATA
08400         FDB     0
08500 WDYPOS  EQU     .-DATA          SCROLL WINDOW Y POSITION
08600         FCB     0
08700 WDXPOS  EQU     .-DATA          SCROLL WINDOW X POSITION
08800         FCB     0
08900 WDYLEN  EQU     .-DATA          SCROLL WINDOW Y SIZE
09000         FCB     24
09100 WDXLEN  EQU     .-DATA          SCROLL WINDOW X SIZE
09200         FCB     32
09300 FLIP    EQU     .-DATA          FLAG FOR HI-RES JOYSTICK
09400         FCB     0
09500 
09600 CURBUF  RMB     16*3+2          BUFFER FOR DATA UNDER CURSOR
09700 
09800 COMBUF  RMB     $35*2           TABLE USED FOR HOOKING PRINT @
09900 
10000 USR     PSHS    X               SAVE VARIABLE POINTER
10100         LEAX    >IRQ,PCR        GET MOUSE'S IRQ VECTOR
10200         CMPX    $10D            IS SYSTEM VECTOR THE SAME?
10300         PULS    X               RESTORE VARIABLE POINTER
10400         BEQ     USR1            SKIP VECTOR ARE THE SAME
10500 
10600         PSHS    X,Y,U,D         ELSE SAVE ALL REGS
10700         LDD     $10D            GET OLD IRQ VERTOR
10800         LEAU    DATA,PCR        POINT TO VARIABLE BLOCK
10900         STD     OLDIRQ,U        AND SAVE IT
11000         LBSR    JOYSTK          GET CURSOR X & Y POSITION
11100         STD     YJOY,U          SAVE SET IT
11200         LEAX    IRQ,PCR         GET NEW IRQ VECTOR
11300         STX     $10D            AND SET SYSTEM VECTOR WITH IT
11400         LDD     $168            GET OUT VECTOR
11500         STD     OLDIO,U         AND SAVE IT
11600         LEAX    SPRINT,PCR      GET NEW OUT VECTOR
11700         STX     $168            AND SET SYSTEM WITH IT
11800         CLR     PMODE,U         CLEAR (RESET) PRINTING MODE
11900         LDX     $123            GET ADDRESS OF COMMAND TABLE
12000         LDB     $120            GET # OF COMMANDS
12100         CMPB    #$35            IS IT 53 COMMANDS?
12200         BNE     COMERR          SKIP ADDING @ IF NOT
12300 
12400         LEAY    COMBUF,PCR      GET SPACE FOR HOLDING TABLE
12500         LSLB                    2 BYTES PER COMMANDS (FOR COPY)
12600         STX     OLDCOM,U        SAVE OLD POINTER ADDRESS
12700         STY     $123            POINTER TO MOUSE COMMANDS BUF
12800 SLOOP   LDA     ,X+
12900         STA     ,Y+
13000         DECB
13100         BNE     SLOOP
13200 
13300         LDD     COMBUF+7*2,PCR  GET ADDRESS OF OLD PRINT COMMAND
13400         STD     OLDPRT,U        SAVE FOR PATCH SUBR.
13500         LEAX    NPRINT,PCR      GET ADDRESS OF THE PATCH FOR PRINT
13600         STX     COMBUF+7*2,PCR  UPDATE JUMP TABLE FOR NEW PRINT
13700 COMERR  PULS    X,Y,U,D         THEN RESTORE THE REGS
13800 
13900 USR1    TSTA                    IS THE VARIABLE A STRING OR NUMBER
14000 
14100         BNE     USR9            EXIT IF STRING
14200         JSR     $B3ED           PUT FUNCTION NUMBER IN THE D REG
14300         CMPD    #LASTCM         IS IT TOO BIG?
14400         BHI     USR9            EXIT IF SO
14500         PSHS    X,Y,U,B         SAVE SOME REGS
14600         LEAU    DATA,PCR        SET U REG TO VARIABLE BLOCK
14700         LEAY    COMTAB,PCR      GET FUNCATION (COMMANDS) TABLE
14800         LSLB                    MUL FUNCTION BY 2 (16 BIT)
14900         LDD     B,Y             GET OFFSET FROM TABLE
15000         LEAY    D,Y             ADD IT TO Y FOR ADDRESS OF IT
15100         PULS    B               RESTORE FUNCTION NUMBER IN B REG
15200         JSR     ,Y              AND CALL THE FUNCTION
15300         PULS    X,U,Y           RESTORE OTHER REGS
15400         CLRA            CLR TOP HALF OF 16 BIT RETURN
15500         JMP     $B4F4   CONVERT D REG TO NUMBER & EXIT
15600 
15700 
15800 * GET X POSITION FUCTION (#2)
15900 GETX    LDB     XJOY,U          GET CURSOR X POSITION
16000 USR9    RTS                     AND RETURN IT
16100 
16200 * GET Y POSITION FUCTION (#3)
16300 GETY    LDB     YJOY,U          GET CURSOR Y POSITION
16400         RTS                     AND RETURN WITH IT
16500 
16600 GETBUT  LDB     BUTTON,U        GET JUST PRESS BUTTON FLAG
16700         CLR     BUTTON,U        AND RESET THAT FLAG
16800         RTS                     THEN EXIT
16900 
17000 GETDWN  LDB     BUTDWN,U        GET BUTTON UP/DOWN STATUS
17100 CEXIT   RTS                     AND EXIT
40000 
40100 * MY ASSEMBLER USES "+GET" TO INCLUDE A FILE WHEN THE SOURCE CODE
40200 * IS TOO BIG FOR ONE FILE
40300 * THE +GET IS LIKE "USE" IN THE OS-9 ASSEMBLER
40400 
40402         +GET    MOUSE2          GET CURSOR DRAW CODE
40500         +GET    MOUSE3          GET JOYSTICK DRIVERS
40600         +GET    MOUSE4          GET SOUND & SCREEN DRIVERS
40602         +GET    MOUSE5          GET SOUND & SCREEN (PART 2)
40700         +GET    MOUSE6          GET CHR DATA FILE
40800 
40900         FCC     'MOUSE VERSION 2.0 '
41000         FCC     'COPYRIGHT 1986 BY SRB SOFTWARE '
41100         FCC     'ALL RIGHTS RESERVED '
41300         FCC     'PUBLIC DOMAIN BY STEVE BJORK '
41500 
41600 ENDPRG  EQU     .               END OF PROGRAM POINTER
41700 
41800         END
