home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / IRQMOUSE.ARC / IRQMOUSE.A
Encoding:
Text File  |  2019-04-13  |  3.3 KB  |  128 lines

  1. ;
  2. ;                        *** IRQMOUSE.A ***
  3. ;
  4. ;
  5. ;   ╘HIS IS ADAPTED FROM THE ROUTINE ON THE ├OMMODORE 1351 ═OUSE ╒TILITY ─ISK,
  6. ;BY ╚OWARD ╟IBSON, TO BE COMPILED WITH ├┴╙╙═. ╘HIS ROUTINE GETS THE X AND Y
  7. ;CO-ORDINATES FROM THE MOUSE, AND STORES THEM IN XCRD, AND YCRD, WHICH CAN BE
  8. ;BE DEFINED AS EXTERN UNSIGNED INT TYPE OBJECTS IN ╨OWER ├.
  9. ;
  10. ;   ╘O USE IT, CALL MOUSEON() FROM ├. ╘HE ROUTINE IS NOW PART OF THE ╔╥╤
  11. ;INTERRUPT ROUTINE, AND XCRD AND YCRD WILL CONTAIN THE X, Y CO-ORDINATES IN
  12. ;320 * 200 FORMAT. ╘O TURN OFF THIS ROUTINE, CALL MOUSEOFF(). ╘HIS WILL SET
  13. ;THE ╔╥╤ VECTOR TO WHATEVER IT WAS PRIOR TO MOUSEON().
  14. ;
  15. ;
  16. ;
  17. IIRQ     =  $0314 ;       ╔╥╤ ╥EGISTER
  18. VIC      =  $D000 ;       ╙TART OF ╓╔├ CHIP
  19. SID      =  $D400 ;       ╙TART OF ╙╔─ CHIP
  20. POTX     =  SID+$19 ;     ╪ POTENTIOMETER INPUT
  21. POTY     =  SID+$1A ;     ┘ POTENTIOMETER INPUT
  22. ;
  23. ;
  24. ;
  25. ;   ├O-ORDINATES TO BE ACCESSED BY ╨OWER ├
  26.  
  27.          .DEF XCRD, YCRD
  28.  
  29. XCRD     .BSS 2
  30. YCRD     .BSS 2
  31. ;
  32. ;
  33. ;
  34. IIRQ2    .BSS 2 ;         JUMP VECTOR FOR RETURNING TO ╔╥╤ ROUTINES.
  35. OPOTX    .BSS 1
  36. OPOTY    .BSS 1
  37. NEWVALUE .BSS 1
  38. OLDVALUE .BSS 1
  39. ;
  40. ;
  41. ;
  42.          .DEF MOUSEON, MOUSEOFF
  43.  
  44. MOUSEON  LDA IIRQ+1 ;     CHECK HI ╔╥╤ VECTOR.
  45.          CMP #>MIRQ ;     ALREADY SET?
  46.          BEQ INSTEXT ;    IF ┘┼╙...
  47.  
  48.          PHP ;            STORE LO VECTOR ON STACK.  [╫╚┘???]
  49.          SEI ;            STOP THE ╔╥╤ INTERRUPT.
  50.          LDA IIRQ ;       STORE 'OLD' ╔╥╤ IN JUMP VECTOR.
  51.          STA IIRQ2
  52.          LDA IIRQ+1
  53.          STA IIRQ2+1
  54.          LDA #<MIRQ ;     RESET ╔╥╤ VECTOR TO START OF POT-READ ROUTINE.
  55.          STA IIRQ
  56.          LDA #>MIRQ
  57.          STA IIRQ+1
  58.          PLP
  59.  
  60. INSTEXT  RTS ;            ╫HY HASN'T ╔╥╤ INTERRUPT BEEN RESET?
  61. ;
  62. ;
  63. ;
  64. MIRQ     CLD ;            JUST IN CASE...
  65.          LDA POTX ;       GET DELTA VALUES FOR X.
  66.          LDY OPOTX
  67.          JSR MOVCHK       CHECK FOR MOVEMENT.
  68.          STY OPOTX
  69.          CLC ;            MODIFY LOW ORDER X POSITION.
  70.          ADC XCRD
  71.          STA XCRD
  72.          TXA
  73.          ADC #$00
  74.          AND #%00000001
  75.          EOR XCRD+1
  76.          STA XCRD+1
  77.          LDA POTY ;       GET DELTA VALUE FOR Y.
  78.          LDY OPOTY
  79.          JSR MOVCHK ;     CHECK FOR MOVEMENT.
  80.          STY OPOTY
  81.          SEC ;            MODIFY Y POSITION (DECREASE Y FOR INCREASE IN POT)
  82.          EOR #$FF
  83.          ADC YCRD
  84.          STA YCRD
  85.          JMP (IIRQ2)      CONTINUE WITH ╔╥╤ OPERATION.
  86. ;
  87. ;
  88. ;
  89. MOVCHK   STY OLDVALUE ;   SAVE OLD & NEW VALUES.
  90.          STA NEWVALUE
  91.          LDX #0 ;         PRELOAD X WITH ZERO.
  92.          SEC;             ┴ <== MOD64 (NEW-OLD)
  93.          SBC OLDVALUE
  94.          AND #%01111111   CLEAR ═╙┬.
  95.          CMP #%01000000 
  96.          BCS HICH         IF ┴ => $40  (ACTUAL VALUE > 0)
  97.  
  98.          LSR A ;                 ┴/2
  99.          BEQ NOMOV ;             IF NOW ZERO, THERE IS NO MOVEMENT.
  100.  
  101.          LDY NEWVALUE ;          ELSE...
  102.          RTS
  103.  
  104. HICH     ORA #%11000000 ; ELSE   OR IN HIGH ORDER BITS
  105.          CMP #$FF ;              IF ┴<>$3F (VALUE <> -1)
  106.          BEQ NOMOV
  107.          SEC                          ┴/2
  108.          ROR A
  109.          LDX #$FF                     ╪ <== -1
  110.          LDY NEWVALUE
  111.          RTS
  112.  
  113. NOMOV    LDA #0
  114.          RTS
  115.  
  116. ;
  117. ;
  118. ;
  119. MOUSEOFF SEI ;       TURN OFF ╔╥╤ INTERRUPT DRIVEN MOUSE ROUTINE.
  120.          LDA IIRQ2
  121.          STA IIRQ
  122.          LDA IIRQ2+1
  123.          STA IIRQ+1
  124.          CLI
  125.          RTS
  126. ;
  127.  
  128.