home *** CD-ROM | disk | FTP | other *** search
- ;
- ; *** IRQMOUSE.A ***
- ;
- ;
- ; ╘HIS IS ADAPTED FROM THE ROUTINE ON THE ├OMMODORE 1351 ═OUSE ╒TILITY ─ISK,
- ;BY ╚OWARD ╟IBSON, TO BE COMPILED WITH ├┴╙╙═. ╘HIS ROUTINE GETS THE X AND Y
- ;CO-ORDINATES FROM THE MOUSE, AND STORES THEM IN XCRD, AND YCRD, WHICH CAN BE
- ;BE DEFINED AS EXTERN UNSIGNED INT TYPE OBJECTS IN ╨OWER ├.
- ;
- ; ╘O USE IT, CALL MOUSEON() FROM ├. ╘HE ROUTINE IS NOW PART OF THE ╔╥╤
- ;INTERRUPT ROUTINE, AND XCRD AND YCRD WILL CONTAIN THE X, Y CO-ORDINATES IN
- ;320 * 200 FORMAT. ╘O TURN OFF THIS ROUTINE, CALL MOUSEOFF(). ╘HIS WILL SET
- ;THE ╔╥╤ VECTOR TO WHATEVER IT WAS PRIOR TO MOUSEON().
- ;
- ;
- ;
- IIRQ = $0314 ; ╔╥╤ ╥EGISTER
- VIC = $D000 ; ╙TART OF ╓╔├ CHIP
- SID = $D400 ; ╙TART OF ╙╔─ CHIP
- POTX = SID+$19 ; ╪ POTENTIOMETER INPUT
- POTY = SID+$1A ; ┘ POTENTIOMETER INPUT
- ;
- ;
- ;
- ; ├O-ORDINATES TO BE ACCESSED BY ╨OWER ├
-
- .DEF XCRD, YCRD
-
- XCRD .BSS 2
- YCRD .BSS 2
- ;
- ;
- ;
- IIRQ2 .BSS 2 ; JUMP VECTOR FOR RETURNING TO ╔╥╤ ROUTINES.
- OPOTX .BSS 1
- OPOTY .BSS 1
- NEWVALUE .BSS 1
- OLDVALUE .BSS 1
- ;
- ;
- ;
- .DEF MOUSEON, MOUSEOFF
-
- MOUSEON LDA IIRQ+1 ; CHECK HI ╔╥╤ VECTOR.
- CMP #>MIRQ ; ALREADY SET?
- BEQ INSTEXT ; IF ┘┼╙...
-
- PHP ; STORE LO VECTOR ON STACK. [╫╚┘???]
- SEI ; STOP THE ╔╥╤ INTERRUPT.
- LDA IIRQ ; STORE 'OLD' ╔╥╤ IN JUMP VECTOR.
- STA IIRQ2
- LDA IIRQ+1
- STA IIRQ2+1
- LDA #<MIRQ ; RESET ╔╥╤ VECTOR TO START OF POT-READ ROUTINE.
- STA IIRQ
- LDA #>MIRQ
- STA IIRQ+1
- PLP
-
- INSTEXT RTS ; ╫HY HASN'T ╔╥╤ INTERRUPT BEEN RESET?
- ;
- ;
- ;
- MIRQ CLD ; JUST IN CASE...
- LDA POTX ; GET DELTA VALUES FOR X.
- LDY OPOTX
- JSR MOVCHK CHECK FOR MOVEMENT.
- STY OPOTX
- CLC ; MODIFY LOW ORDER X POSITION.
- ADC XCRD
- STA XCRD
- TXA
- ADC #$00
- AND #%00000001
- EOR XCRD+1
- STA XCRD+1
- LDA POTY ; GET DELTA VALUE FOR Y.
- LDY OPOTY
- JSR MOVCHK ; CHECK FOR MOVEMENT.
- STY OPOTY
- SEC ; MODIFY Y POSITION (DECREASE Y FOR INCREASE IN POT)
- EOR #$FF
- ADC YCRD
- STA YCRD
- JMP (IIRQ2) CONTINUE WITH ╔╥╤ OPERATION.
- ;
- ;
- ;
- MOVCHK STY OLDVALUE ; SAVE OLD & NEW VALUES.
- STA NEWVALUE
- LDX #0 ; PRELOAD X WITH ZERO.
- SEC; ┴ <== MOD64 (NEW-OLD)
- SBC OLDVALUE
- AND #%01111111 CLEAR ═╙┬.
- CMP #%01000000
- BCS HICH IF ┴ => $40 (ACTUAL VALUE > 0)
-
- LSR A ; ┴/2
- BEQ NOMOV ; IF NOW ZERO, THERE IS NO MOVEMENT.
-
- LDY NEWVALUE ; ELSE...
- RTS
-
- HICH ORA #%11000000 ; ELSE OR IN HIGH ORDER BITS
- CMP #$FF ; IF ┴<>$3F (VALUE <> -1)
- BEQ NOMOV
- SEC ┴/2
- ROR A
- LDX #$FF ╪ <== -1
- LDY NEWVALUE
- RTS
-
- NOMOV LDA #0
- RTS
-
- ;
- ;
- ;
- MOUSEOFF SEI ; TURN OFF ╔╥╤ INTERRUPT DRIVEN MOUSE ROUTINE.
- LDA IIRQ2
- STA IIRQ
- LDA IIRQ2+1
- STA IIRQ+1
- CLI
- RTS
- ;
-
-