mouse scaling

This commit is contained in:
Joshua Bell 2018-03-23 21:27:58 -07:00
parent 9d67360cba
commit cf0fe83d6f

View File

@ -3870,8 +3870,8 @@ mouse_x: .word 0
mouse_y: .word 0 mouse_y: .word 0
mouse_status: .byte 0 mouse_status: .byte 0
L5FFD: .byte $00 mouse_scale_x: .byte $00
L5FFE: .byte $00 mouse_scale_y: .byte $00
mouse_hooked_flag: ; High bit set if mouse is "hooked", and calls mouse_hooked_flag: ; High bit set if mouse is "hooked", and calls
.byte 0 ; bypassed; never appears to be set. .byte 0 ; bypassed; never appears to be set.
@ -4214,7 +4214,7 @@ L6293: lda mouse_x,x
jsr update_cursor jsr update_cursor
L629F: bit no_mouse_flag L629F: bit no_mouse_flag
bmi L62A7 bmi L62A7
jsr L62BA jsr read_mouse_pos
L62A7: bit no_mouse_flag L62A7: bit no_mouse_flag
bpl L62B1 bpl L62B1
lda #$00 lda #$00
@ -4224,10 +4224,14 @@ L62B1: lda kbd_mouse_state
jsr L7EF5 jsr L7EF5
rts4: rts rts4: rts
L62BA: ldy #READMOUSE ;;; ============================================================
.proc read_mouse_pos
ldy #READMOUSE
jsr call_mouse jsr call_mouse
bit mouse_hooked_flag bit mouse_hooked_flag
bmi L62D9 bmi do_scale_x
ldx mouse_firmware_hi ldx mouse_firmware_hi
lda MOUSE_X_LO,x lda MOUSE_X_LO,x
sta mouse_x sta mouse_x
@ -4235,28 +4239,37 @@ L62BA: ldy #READMOUSE
sta mouse_x+1 sta mouse_x+1
lda MOUSE_Y_LO,x lda MOUSE_Y_LO,x
sta mouse_y sta mouse_y
L62D9: ldy L5FFD
beq L62EF ;; Scale X
L62DE: lda mouse_x do_scale_x:
ldy mouse_scale_x
beq do_scale_y
: lda mouse_x
asl a asl a
sta mouse_x sta mouse_x
lda mouse_x+1 lda mouse_x+1
rol a rol a
sta mouse_x+1 sta mouse_x+1
dey dey
bne L62DE bne :-
L62EF: ldy L5FFE
beq L62FE ;; Scale Y
do_scale_y:
ldy mouse_scale_y
beq done_scaling
lda mouse_y lda mouse_y
L62F7: asl a : asl a
dey dey
bne L62F7 bne :-
sta mouse_y sta mouse_y
L62FE: bit mouse_hooked_flag
bmi L6309 done_scaling:
bit mouse_hooked_flag
bmi done
lda MOUSE_STATUS,x lda MOUSE_STATUS,x
sta mouse_status sta mouse_status
L6309: rts done: rts
.endproc
;;; ============================================================ ;;; ============================================================
;;; GetCursorAddr ;;; GetCursorAddr
@ -4359,10 +4372,16 @@ L63AC: txa
sta menu_item_y_table,y sta menu_item_y_table,y
cpy #$0E cpy #$0E
bcc L63AC bcc L63AC
copy16 #$0001, L5FFD lda #1
sta mouse_scale_x
lda #0
sta mouse_scale_y
bit L6336 bit L6336
bvs L63D1 bvs L63D1
copy16 #$0102, L5FFD lda #2
sta mouse_scale_x
lda #1
sta mouse_scale_y
L63D1: ldx L6338 L63D1: ldx L6338
jsr find_mouse jsr find_mouse
bit L6338 bit L6338
@ -7812,8 +7831,9 @@ menu_index:
menu_item_index: menu_item_index:
.byte 0 .byte 0
other_mouse_x: .word 0 saved_mouse_pos:
other_mouse_y: .byte 0 saved_mouse_x: .word 0
saved_mouse_y: .byte 0
L7D7F: .byte $00 L7D7F: .byte $00
L7D80: .byte $00 L7D80: .byte $00
@ -7879,23 +7899,26 @@ not_hooked:
;;; ============================================================ ;;; ============================================================
L7E5D: ldx other_mouse_x .proc restore_mouse_pos
ldy other_mouse_x+1 ldx saved_mouse_x
lda other_mouse_y ldy saved_mouse_x+1
lda saved_mouse_y
jmp set_mouse_pos jmp set_mouse_pos
.endproc
set_mouse_pos_from_kbd_mouse: .proc set_mouse_pos_from_kbd_mouse
ldx kbd_mouse_x ldx kbd_mouse_x
ldy kbd_mouse_x+1 ldy kbd_mouse_x+1
lda kbd_mouse_y lda kbd_mouse_y
jmp set_mouse_pos jmp set_mouse_pos
.endproc
L7E75: bcc L7E7D L7E75: bcc L7E7D
ldx L5FFD ldx mouse_scale_x
bne L7E82 bne L7E82
L7E7C: rts L7E7C: rts
L7E7D: ldx L5FFE L7E7D: ldx mouse_scale_y
beq L7E7C beq L7E7C
L7E82: pha L7E82: pha
tya tya
@ -7917,13 +7940,15 @@ L7E8E: lda kbd_mouse_x,x
L7E98: jsr L7E8C L7E98: jsr L7E8C
jmp set_mouse_pos_from_kbd_mouse jmp set_mouse_pos_from_kbd_mouse
L7E9E: jsr L62BA .proc save_mouse_pos
ldx #$02 jsr read_mouse_pos
L7EA3: lda mouse_x,x ldx #2
sta other_mouse_x,x : lda mouse_x,x
sta saved_mouse_pos,x
dex dex
bpl L7EA3 bpl :-
rts rts
.endproc
L7EAD: jsr stash_addr L7EAD: jsr stash_addr
lda L7F2E lda L7F2E
@ -7936,7 +7961,7 @@ L7EAD: jsr stash_addr
sta kbd_mouse_state sta kbd_mouse_state
lda #$40 lda #$40
sta mouse_status sta mouse_status
jmp L7E5D jmp restore_mouse_pos
L7ECD: lda #$00 L7ECD: lda #$00
sta L7D81 sta L7D81
@ -8091,7 +8116,7 @@ L7FDE: jmp L7E8C
L7FE1: php L7FE1: php
sei sei
jsr L7E9E jsr save_mouse_pos
lda #$01 lda #$01
sta kbd_mouse_state sta kbd_mouse_state
jsr L800F jsr L800F
@ -8292,7 +8317,7 @@ L816F: sta L6BD9
L817C: php L817C: php
sei sei
jsr L7E9E jsr save_mouse_pos
lda #$80 lda #$80
sta mouse_status sta mouse_status
jsr L70B7 jsr L70B7
@ -8648,12 +8673,16 @@ L840D: sec
;;; clamp is to fractions of screen (0 = full, 1 = 1/2, 2 = 1/4, 3 = 1/8) (why???) ;;; clamp is to fractions of screen (0 = full, 1 = 1/2, 2 = 1/4, 3 = 1/8) (why???)
.proc ScaleMouseImpl .proc ScaleMouseImpl
copy16 $82, L5FFD params := $82
lda params+0
sta mouse_scale_x
lda params+1
sta mouse_scale_y
L8431: bit no_mouse_flag ; called after INITMOUSE L8431: bit no_mouse_flag ; called after INITMOUSE
bmi end bmi end
lda L5FFD lda mouse_scale_x
asl a asl a
tay tay
lda #0 lda #0
@ -8681,7 +8710,7 @@ L8431: bit no_mouse_flag ; called after INITMOUSE
ldy #CLAMPMOUSE ldy #CLAMPMOUSE
jsr call_mouse jsr call_mouse
lda L5FFE lda mouse_scale_y
asl a asl a
tay tay
lda #0 lda #0