Автор Тема: Библиотека для поддержки мышки  (Прочитано 653 раз)

Оффлайн BRE

  • Newbie
  • *
  • Сообщений: 16
  • Karma: +3/-0
    • Просмотр профиля
Библиотека для поддержки мышки
« : Апрель 02, 2013, 02:15:39 pm »
;---------------------------------------
TEST     LDA #6
         STA $D020

         LDA #$00      ;
         STA DX        ;
         STA DY        ;
         STA XC        ;  SET COOR MOUSE
         STA YC        ;

         LDA #5        ;  SET SIZE
         STA XS        ;  SCREEN
         LDA #10       ;
         STA YS        ;
         LDA #162      ;
         STA XF        ;
         LDA #205      ;
         STA YF        ;

         LDA #<STRUCT  ;  SET STRUCT
         STA PTROBJ    ;  FOR OBJECT
         LDA #>STRUCT
         STA PTROBJ+1

         LDA #<EXIT    ;  SET FUNC
         STA BOTTONR+1 ; RIGHT BOTTON
         LDA #>EXIT
         STA BOTTONR+2

         JMP STARTMOU  ; GO MOUSE

;---------------------------------------

EXIT     JMP $C000     ; FUNC

;---------------------------------------
STRUCT   .BYTE 0
         .BYTE 6
         .BYTE 0
         .BYTE 2
         .WORD PRG1

         .BYTE 6
         .BYTE 12
         .BYTE 0
         .BYTE 2
         .WORD PRG2

         .BYTE $FF

PRG1     LDA #$00
         STA $0500
         RTS

PRG2     LDA #$01
         STA $0500
         RTS

;=======================================
;=   MOUSE DRIVER INTERFACE  V1.0      =
;=======================================
         *= $5300

         JMP STARTMOU   ; +0
         JMP SPR_ON     ; +3
         JMP SPR_OFF    ; +6

XS       .BYTE 0        ; +9
YS       .BYTE 0        ; +A
XF       .BYTE 0        ; +B
YF       .BYTE 0        ; +C
XC       .BYTE 0        ; +D
YC       .BYTE 0        ; +E
DX       .BYTE 0        ; +F
DY       .BYTE 0        ; +10
PTROBJ   .WORD 0        ; +11
;---------------------------------------
D1       .BYTE 0
D2       .BYTE 0
;---------------------------------------
STARTMOU JSR SETSPR
LOOP     LDX DX
         LDY DY
         JSR MOUSE
         STX DX
         STY DY
         PHP
         JSR SETMARC
         LDA $DC01
         LSR A
         BCC BOTTONR
         PLP
         BCS BOTTONL
         JMP LOOP

BOTTONL  JSR DBT
         JMP LOOP

BOTTONR  JSR $FFFF
         JMP LOOP

;---------------------------------------

MOUSE    SEI
         LDA #0
L6       CLC
         ADC #$01
         BNE L6
         TXA
         SEC
         SBC XS
         STA XC
         TYA
         SEC
         SBC YS
         STA YC
         LDA #$FF
         STA $DC00
         LDA $D419
         LDY D1
         JSR PP4
         STY D1
         CLC
         ADC XC
         JSR PP5
         CLC
         ADC XS
         TAX
         CMP XF
         BCC L7
         LDX XF
L7       CMP XS
         BCS LA
         LDX XS

LA       LDA $D41A
         LDY D2
         JSR PP4
         STY D2
         SEC
         EOR #$FF
         ADC YC
         JSR PP5
         CLC
         ADC YS
         TAY
         CMP YF
         BCC L8
         LDY YF
L8       CMP YS
         BCS LB
         LDY YS
LB       LDA $DC01
         EOR #$FF
         LSR A
         LSR A
         LSR A
         LSR A
         LSR A
         CLI
         RTS

PP5      CMP #$E3
         BCS PP6
         RTS

PP4      STY $A4
         CMP #$FF
         BEQ PP6
         STA $A3
         SEC
         SBC $A4
         AND #$7F
         CMP #$40
         BCS L9
         LSR A
         BEQ PP6
         LDY $A3
         RTS

L9       ORA #$C0
         CMP #$FF
         BEQ PP6
         SEC
         ROR A
         LDY $A3
         RTS

PP6      LDA #$00
         RTS
;---------------------------------------
NEXTOBJ  = $50

DBT      LDA PTROBJ
         STA NEXTOBJ
         LDA PTROBJ+1
         STA NEXTOBJ+1

DBLOOP   LDY #0
         LDA XC
         LSR A
         LSR A
         CMP (NEXTOBJ),Y
         BMI NEXT
         INY
         CMP (NEXTOBJ),Y
         BPL NEXT
         INY
         LDA YC
         LSR A
         LSR A
         LSR A
         CMP (NEXTOBJ),Y
         BMI NEXT
         INY
         CMP (NEXTOBJ),Y
         BPL NEXT
         INY
         LDA (NEXTOBJ),Y
         STA RUNNER+1
         INY
         LDA (NEXTOBJ),Y
         STA RUNNER+2
RUNNER   JMP $FFFF

NEXT     LDA NEXTOBJ
         CLC
         ADC #6
         STA NEXTOBJ
         BCC NXT1
         INC NEXTOBJ+1
NXT1     LDY #0
         LDA (NEXTOBJ),Y
         CMP #$FF
         BNE DBLOOP
         RTS

;---------------------------------------
SETMARC  TYA
         CLC
         ADC #$28
         STA $D00F
         TXA
         CLC
         ADC #$07
         ASL A
         TAX
         DEX
         STA $D00E
         LDA $D010
         AND #$7F
         BCC LSM
         INX
         BEQ LSM
         ORA #$80
LSM      STA $D010
         RTS

SETSPR   LDA #$01
         STA $D02E
         LDA #%10000000
         STA $D015
         LDA #13
         STA 2047
         LDX #64
LSS      LDA SPRITE2,X
         STA 832,X
         DEX
         BPL LSS
         LDX $FB
         LDY $FC
         JSR SETMARC
         RTS

SPR_OFF  LDA $D015
         AND #%01111111
         STA $D015
         RTS

SPR_ON   LDA $D015
         ORA #%10000000
         STA $D015
         RTS

SPRITE1  .BYTE $3E,$00,$00,$E3,$80,$00
         .BYTE $DD,$80,$00,$DD,$80,$00
         .BYTE $DD,$80,$00,$DD,$F0,$00
         .BYTE $DC,$3F,$00,$DD,$C3,$F0
         .BYTE $DD,$DC,$38,$DD,$DD,$D8
         .BYTE $DD,$DD,$D8,$DF,$DD,$D8
         .BYTE $DF,$FD,$D8,$DF,$FF,$D8
         .BYTE $DF,$FF,$D8,$DF,$FF,$D8
         .BYTE $DF,$FF,$D8,$6F,$FF,$B0
         .BYTE $37,$FF,$60,$18,$00,$C0
         .BYTE $0F,$FF,$80,$00

SPRITE2  .BYTE $3C,$00,$00,$66,$00,$00
         .BYTE $DB,$00,$00,$DB,$00,$00
         .BYTE $DB,$80,$00,$D8,$F0,$00
         .BYTE $DB,$1E,$00,$DB,$63,$00
         .BYTE $DB,$6D,$80,$DB,$6D,$80
         .BYTE $DF,$6D,$80,$DF,$ED,$80
         .BYTE $DF,$FD,$80,$DF,$FD,$80
         .BYTE $DF,$FD,$80,$DF,$FD,$80
         .BYTE $6F,$FB,$00,$37,$F6,$00
         .BYTE $18,$0C,$00,$0F,$F8,$00
         .BYTE $00,$00,$00,$00

SPRITE3  .BYTE $00,$00,$00,$7F,$80,$00
         .BYTE $7F,$00,$00,$7E,$00,$00
         .BYTE $7E,$00,$00,$7F,$00,$00
         .BYTE $73,$80,$00,$61,$C0,$00
         .BYTE $40,$E0,$00,$00,$70,$00
         .BYTE $00,$30,$00,$00,$00,$00
         .BYTE $00,$00,$00,$00,$00,$00
         .BYTE $00,$00,$00,$00,$00,$00
         .BYTE $00,$00,$00,$00,$00,$00
         .BYTE $00,$00,$00,$00,$00,$00
         .BYTE $00,$00,$00,$00
;=======================================