📄 ctk-mouse-1351.s
字号:
;--------------------------------------------------------------------- ;; The 1351 mouse code was taken from the CC65 libraries, ;; written by Ullrich von Bassewitz ;--------------------------------------------------------------------- .macpack generic .import _ctk_mouse_joyx, _ctk_mouse_joyy .import _ctk_mouse_firebutton .export _ctk_mouse_1351;---------------------------------------------------------------------.bssOldValue: .res 1 ; Temp for MoveCheck routineNewValue: .res 1 ; Temp for MoveCheck routineYCorr: .res 1 ; Correction for Y coordinate OldPotX: .res 1 ; Old hw counter valuesOldPotY: .res 1 SID_ADConv1 = $D419SID_ADConv2 = $D41ACIA1_PRA = $DC00 CIA1_PRB = $DC01 CIA1_DDRB = $DC03 ;---------------------------------------------------------------------.dataXMin: .word 0 ; X1 value of bounding boxYMin: .word 0 ; Y1 value of bounding boxXMax: .word 319 ; X2 value of bounding boxYMax: .word 199 ; Y2 value of bounding box ;---------------------------------------------------------------------.code;---------------------------------------------------------------------;--------------------------------------------------------------------- ;; Most of the mouse code is taken from the CC65 libraries written by ;; Ullrich von BassewitzMoveCheck: sty OldValue sta NewValue ldx #$00 sub OldValue ; a = mod64 (new - old) and #%01111111 cmp #%01000000 ; if (a > 0) bcs @L1 ; lsr a ; a /= 2; beq @L2 ; if (a != 0) ldy NewValue ; y = NewValue rts ; return @L1: ora #%11000000 ; else or in high order bits cmp #$FF ; if (a != -1) beq @L2 sec ror a ; a /= 2 dex ; high byte = -1 (X = $FF) ldy NewValue rts @L2: txa ; A = $00 rts ;--------------------------------------------------------------------- _ctk_mouse_1351: lda SID_ADConv1 ; Get mouse X movement ldy OldPotX jsr MoveCheck ; Calculate movement vector sty OldPotX ; Calculate the new X coordinate (--> a/y) add _ctk_mouse_joyx tay ; Remember low byte txa adc _ctk_mouse_joyx+1 tax ; Limit the X coordinate to the bounding box cpy XMin sbc XMin+1 bpl @L1 ldy XMin ldx XMin+1 jmp @L2@L1: txa cpy XMax sbc XMax+1 bmi @L2 ldy XMax ldx XMax+1@L2: sty _ctk_mouse_joyx stx _ctk_mouse_joyx+1; Calculate the Y movement vector lda SID_ADConv2 ; Get mouse Y movement ldy OldPotY jsr MoveCheck ; Calculate movement sty OldPotY ; Calculate the new Y coordinate (--> a/y) sta OldValue lda _ctk_mouse_joyy sub OldValue tay stx OldValue lda _ctk_mouse_joyy+1 sbc OldValue tax cpy YMin sbc YMin+1 bpl @L3 ldy YMin ldx YMin+1 jmp @L4@L3: txa cpy YMax sbc YMax+1 bmi @L4 ldy YMax ldx YMax+1@L4: sty _ctk_mouse_joyy stx _ctk_mouse_joyy+1 ;; Get mouse button lda #$7F sta CIA1_PRA lda CIA1_PRB ; Read joystick #0 ldx #0 and #$1F eor #$1F ora _ctk_mouse_firebutton sta _ctk_mouse_firebutton lda #0 sta CIA1_PRA sta CIA1_DDRB rts ;---------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -