X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fatari%2Fmcbpm.s;h=9e6ccc2c57a7045fb4c17d634ed74a5c5141a794;hb=9c7cccf3e5214ebbb3ac031168e349a5f27fb5ae;hp=b431ac414e59b3d14f49abd66a30436fd4740bf9;hpb=526b440b2493629a36b3499fc51ea0df8ecf4ee2;p=cc65 diff --git a/libsrc/atari/mcbpm.s b/libsrc/atari/mcbpm.s index b431ac414..9e6ccc2c5 100644 --- a/libsrc/atari/mcbpm.s +++ b/libsrc/atari/mcbpm.s @@ -10,21 +10,32 @@ .include "atari.inc" .importzp sp .export _mouse_pm_callbacks - .constructor pm_init,27 - .destructor pm_down,7 + .constructor pm_init, 27 + .destructor pm_down ; get mouse shape data - .import mouse_pm_bits - .import mouse_pm_height - .import mouse_pm_hotspot_x - .import mouse_pm_hotspot_y + .import mouse_pm_bits + .importzp mouse_pm_height + .importzp mouse_pm_hotspot_x + .importzp mouse_pm_hotspot_y -; P/M definitions. The first value can be changed to adjust the number -; of the P/M used for the mouse. All others depend on this value. +; P/M definitions. The MOUSE_PM_NUM value can be changed to adjust the +; number of the P/M used for the mouse. All others depend on this value. ; Valid P/M numbers are 0 to 4. When 4 is used, the missiles are used ; as a player. +.ifdef USE_PAGE6 MOUSE_PM_NUM = 2 ; P/M used for the mouse + ; This cannot be changed since only player #2 uses the memory at $600. +.else +MOUSE_PM_NUM = 4 ; P/M used for the mouse + ; Using player #4 (missiles) wastes the least amount of memory on the + ; atari target, since top of memory is typically at $xC20, and the + ; missiles use the space at $xB00-$xBFF. + ; On the atarixl target this configuration (not using page 6) is not + ; really satisfying since the top of memory typically lies beneath + ; the ROM and there is flickering visible while the ROM is banked in. +.endif MOUSE_PM_BASE = pm_base ; ZP location pointing to the hw area used by the selected P/M .if MOUSE_PM_NUM = 4 @@ -89,7 +100,7 @@ show: lda #1 .endif sta GRACTL - ;rts ; optimized out + jmp update_colors prep: draw: @@ -100,14 +111,14 @@ movex: cpx #1 ror a clc adc #48 - sbc #<(mouse_pm_hotspot_x - 1) + sbc #(mouse_pm_hotspot_x - 1) & $FF set_mouse_x jmp update_colors ; Move the mouse cursor y position to the value in A/X. movey: clc adc #32 - sbc #<(mouse_pm_hotspot_y - 1) + sbc #(mouse_pm_hotspot_y - 1) & $FF pha lda omy jsr clr_pm ; remove player at old position @@ -125,12 +136,12 @@ set_l: lda mouse_pm_bits,x inx iny beq set_end - cpx #