home *** CD-ROM | disk | FTP | other *** search
/ Brotikasten / BROTCD01.iso / c128 / c117.d64 / mouse80.src < prev    next >
Text File  |  1995-08-09  |  6KB  |  171 lines

  1. ;PUT"0:MOUSE80.SRC"
  2. *=$0400
  3. MOUSELOCY = 2000
  4. MOUSELOCX = 2001
  5. MOUSEFIRE = 2002
  6. MOUSEON   = 2003
  7.               ;******************************************
  8.               ;*   CHANGE STANDARD IRQ SERVICE VECTOR   *
  9.               ;******************************************
  10. STARTMOUSE    LDA $0314        ;GET OLD VECTOR
  11.               LDX $0315
  12.               CMP #<MOUSESERVE ;MOUSE IRQ ALREADY ON?
  13.               BNE STARTMOUSE1  ; ...NO
  14.               CPX #>MOUSESERVE
  15.               BNE STARTMOUSE1  ; ...NO
  16.               RTS
  17. STARTMOUSE1   SEI              ;NO INTERRUPTS
  18.               STA EXITVECTOR   ;SAVE OLD VECTOR
  19.               STX EXITVECTOR+1
  20.               LDA #<MOUSESERVE ;ESTABLISH NEW VECTOR
  21.               STA $0314
  22.               LDA #>MOUSESERVE
  23.               STA $0315
  24.               LDA #79          ;INITIALIZE VARIABLES
  25.               STA MOUSELOCX
  26.               LDA #24
  27.               STA MOUSELOCY
  28.               LDA #16
  29.               STA MOUSEFIRE
  30.               LDY #$CF
  31.               LDX #$0F
  32.               STY LOCATION
  33.               STY OLDLOCATION
  34.               STX LOCATION+1
  35.               STX OLDLOCATION+1
  36.               LDA #2
  37.               STA DELAYCOUNT
  38.               CLI              ;INTERRUPTS OKAY
  39.               RTS
  40.               ;
  41.               ;******************************************
  42.               ;*            MOUSE IRQ SERVICE           *
  43.               ;******************************************
  44. MOUSESERVE    LDA $A2          ;READ JIFFY CLOCK LOW
  45.               AND #1           ;UPDATE EVERY OTHER TICK
  46.               BEQ CHECKSWITCHES
  47. UPDATEMOUSE   LDA MOUSEON      ;MOUSE ENABLED?
  48.               BEQ MOUSEEXIT1   ; ...NO
  49.               LDA LOCATION     ;HAS LOCATION CHANGED?
  50.               CMP OLDLOCATION
  51.               BNE LOCCHANGE    ; ...YES
  52.               LDA LOCATION+1
  53.               CMP OLDLOCATION+1
  54.               BNE LOCCHANGE    ; ...YES
  55. MOUSEEXIT1    JMP (EXITVECTOR)
  56. LOCCHANGE     SEI              ;NO INTERRUPTS DURING
  57.               LDY OLDLOCATION  ; UPDATE
  58.               LDX OLDLOCATION+1
  59.               JSR READVDCRAM   ;GET ATTRIBUTE
  60.               AND #191         ;UN-REVERSE IT
  61.               LDY OLDLOCATION
  62.               LDX OLDLOCATION+1
  63.               JSR WRITEVDCRAM  ; AND WRITE IT BACK
  64.               LDY LOCATION     ;REVERSE NEW LOCATION
  65.               LDX LOCATION+1
  66.               JSR READVDCRAM   ; READ OLD ATTRIBUTE
  67.               STA OLDATTRIBUTE ; SAVE OLD ATTRIBUTE
  68.               ORA #64          ; SET REVERSE BIT
  69.               LDY LOCATION     ;  AND PUT IT BACK
  70.               LDX LOCATION+1
  71.               JSR WRITEVDCRAM
  72.               LDA LOCATION
  73.               STA OLDLOCATION
  74.               LDA LOCATION+1
  75.               STA OLDLOCATION+1
  76.               CLI
  77. MOUSEEXIT2    JMP (EXITVECTOR)
  78. CHECKSWITCHES LDX $DC00        ;CHECK JOYSTICK #2 SW'S
  79.               TXA
  80.               AND #16          ;FIRE BUTTON FIRST
  81.               BNE CHECKUP      ; NOT PRESSED
  82.               STA MOUSEFIRE
  83. CHECKUP       TXA
  84.               AND #1
  85.               BNE CHECKDOWN    ; NOT UP
  86.               LDA MOUSELOCY    ;ALREADY AT TOP?
  87.               BEQ CHECKLEFT    ; ...YES
  88.               DEC DELAYCOUNT   ; ...NO, DELAY DONE?
  89.               BNE CHECKLEFT    ; ....NO, CHECK LEFT SW
  90.               LDA #2           ; ....YES, RE-INIT
  91.               STA DELAYCOUNT   ;      VERTICAL DELAY
  92.               DEC MOUSELOCY    ;DECREMENT MOUSE Y
  93.               LDA LOCATION     ;DECREASE MOUSE ATTRIBUTE
  94.               SEC              ; ADDRESS BY 80
  95.               SBC #80
  96.               STA LOCATION
  97.               BCS CHECKLEFT
  98.               DEC LOCATION+1
  99.               BCC CHECKLEFT
  100. CHECKDOWN     TXA
  101.               AND #2
  102.               BNE CHECKLEFT    ; NOT DOWN
  103.               LDA MOUSELOCY    ;ALREADY AT BOTTOM?
  104.               CMP #24
  105.               BEQ CHECKLEFT    ; ...YES
  106.               DEC DELAYCOUNT   ; ...NO, DELAY DONE?
  107.               BNE CHECKLEFT    ; ....NO, CHECK LEFT SW
  108.               LDA #2           ; ....YES, RE-INIT
  109.               STA DELAYCOUNT   ;      VERTICAL DELAY
  110.               INC MOUSELOCY    ;INCREMENT MOUSE Y
  111.               LDA LOCATION     ;INCREASE MOUSE ATTRIBUTE
  112.               CLC              ; ADDRESS BY 80
  113.               ADC #80
  114.               STA LOCATION
  115.               BCC CHECKLEFT
  116.               INC LOCATION+1
  117. CHECKLEFT     TXA
  118.               AND #4
  119.               BNE CHECKRIGHT   ; NOT LEFT
  120.               LDA MOUSELOCX    ;ALREADY AT LEFT EDGE?
  121.               BEQ MOUSEEXIT3   ; ...YES
  122.               DEC MOUSELOCX    ;DECREMENT MOUSE X
  123.               LDA LOCATION     ; AND MOUSE ATTRIBUTE
  124.               BNE MOVELEFTNOHI ; ADDRESS
  125.               DEC LOCATION+1
  126. MOVELEFTNOHI  DEC LOCATION
  127. MOUSEEXIT3    JMP (EXITVECTOR)
  128. CHECKRIGHT    TXA
  129.               AND #8
  130.               BNE MOUSEEXIT3   ; NOT RIGHT EITHER
  131.               LDA MOUSELOCX    ;ALREADY AT RIGHT EDGE?
  132.               CMP #79
  133.               BEQ MOUSEEXIT3   ; ...YES
  134.               INC MOUSELOCX    ;INCREMENT MOUSE X
  135.               INC LOCATION     ;INCREMENT MOUSE ATTRIBUTE
  136.               BNE MOUSEEXIT3   ; ADDRESS
  137.               INC LOCATION+1
  138.               BNE MOUSEEXIT3
  139. READVDCRAM    TXA              ;SET ADDRESS HI BYTE IN
  140.               LDX #18          ; VDC REGISTER 18
  141.               JSR WRITEVDCREG
  142.               TYA              ;SET ADDRESS LO BYTE IN
  143.               INX              ; VDC REGISTER 19
  144.               JSR WRITEVDCREG
  145. READVDCLOC    LDX #31          ;READ DATA REGISTER
  146. READVDCREG    STX $D600        ; ...WRITE REG NUMBER
  147. READVDCREG1   BIT $D600        ; ...AND WAIT FOR IT TO
  148.               BPL READVDCREG1  ; ...BE ACCEPTED
  149.               LDA $D601        ;READ DREG
  150.               RTS
  151. WRITEVDCRAM   PHA              ;HOLD BYTE TO WRITE
  152.               TXA              ;SET ADDRESS HI BYTE IN
  153.               LDX #18          ; VDC REGISTER 18
  154.               JSR WRITEVDCREG
  155.               TYA              ;SET ADDRESS LO BYTE IN
  156.               INX              ; VDC REGISTER 19
  157.               JSR WRITEVDCREG
  158.               PLA
  159. WRITEVDCLOC   LDX #31          ;WRITE DATA REGISTER
  160. WRITEVDCREG   STX $D600        ; ...WRITE REG NUMBER
  161. WRITEVDCREG1  BIT $D600        ; ...AND WAIT FOR IT TO
  162.               BPL WRITEVDCREG1 ; ...BE ACCEPTED
  163.               STA $D601
  164.               RTS
  165. EXITVECTOR    .BYT 0,0
  166. LOCATION      .BYT 0,0
  167. OLDLOCATION   .BYT 0,0
  168. OLDATTRIBUTE  .BYT 0
  169. DELAYCOUNT    .BYT 0
  170.               .END
  171.