]> git.sur5r.net Git - cc65/blobdiff - libsrc/apple2/mcbdefault.s
Fixed gcc compiler warning (#867)
[cc65] / libsrc / apple2 / mcbdefault.s
index f270f9d70e9ee92fc5601caf94ecefe0e632dbf3..c24c5df565fa48ae2cbea76f7f29267549264d06 100644 (file)
 ;
-; Default mouse        callbacks for the Apple II
+; Default mouse callbacks for the Apple II
 ;
 ; Oliver Schmidt, 22.09.2005
 ;
-; All functions        in this module should be interrupt safe, because they may
+; All functions in this module should be interrupt safe, because they may
 ; be called from an interrupt handler
 ;
 
-       .ifdef  __APPLE2ENH__
-       .constructor    initmcb
-       .endif
-       .export         _mouse_def_callbacks
-       
-       .include        "apple2.inc"
+        .export         _mouse_def_callbacks
+        
+        .include        "apple2.inc"
 
 ; ------------------------------------------------------------------------
 
-       .bss
-       
-backup:        .res    1
+        .bss
+        
+backup: .res    1
+visible:.res    1
 
 ; ------------------------------------------------------------------------
 
-       .rodata
+        .rodata
 
-       ; Callback structure
+        ; Callback structure
 _mouse_def_callbacks:
-       .addr   hide
-       .addr   show
-       .addr   movex
-       .addr   movey
+        .addr   hide
+        .addr   show
+        .addr   prep
+        .addr   draw
+        .addr   movex
+        .addr   movey
 
 ; ------------------------------------------------------------------------
 
-       .segment        "INIT"
+        .data
 
-       .ifdef  __APPLE2ENH__
-initmcb:
-       lda     ALTCHARSET      ; Alternate charset switched in?
-       bpl     :+              ; No, normal charset
-       lda     #'B'            ; MouseText character
-       sta     cmpcur+1
-       sta     getcur+1
-:      rts
-       .endif
-
-; ------------------------------------------------------------------------
-
-       .data
+        .ifdef  __APPLE2ENH__
+cursor = $42                    ; Pointer MouseText character
+        .else
+cursor = '+' | $40              ; Flashing crosshair
+        .endif
 
 getcursor:
         .ifdef  __APPLE2ENH__
         bit     RD80VID         ; In 80 column mode?
-        bpl     column         ; No, skip bank switching
-switch:        bit     LOWSCR          ; Patched at runtime
+        bpl     column          ; No, skip bank switching
+switch: bit     LOWSCR          ; Patched at runtime
         .endif
-column:        ldx     #$00            ; Patched at runtime
-getscr:        lda     $0400,x         ; Patched at runtime
-cmpcur:        cmp     #'+' | $40      ; Possibly patched by initialization
-       rts
+column: ldx     #$00            ; Patched at runtime
+getscr: lda     $0400,x         ; Patched at runtime
+        cmp     #cursor
+        rts
 
 setcursor:
-getcur:        lda     #'+' | $40      ; Possibly patched by initialization
-setscr:        sta     $0400,x         ; Patched at runtime
-       .ifdef  __APPLE2ENH__
-        bit    LOWSCR          ; Doesn't hurt in 40 column mode
+        lda     #cursor
+setscr: sta     $0400,x         ; Patched at runtime
+        .ifdef  __APPLE2ENH__
+        bit     LOWSCR          ; Doesn't hurt in 40 column mode
         .endif
-       rts
+        rts
 
 ; ------------------------------------------------------------------------
 
-       .code
+        .code
 
 done:
-       .ifdef  __APPLE2ENH__
-        bit    LOWSCR          ; Doesn't hurt in 40 column mode
+        .ifdef  __APPLE2ENH__
+        bit     LOWSCR          ; Doesn't hurt in 40 column mode
         .endif
-       rts
+return: rts
 
 ; Hide the mouse cursor.
 hide:
-       jsr     getcursor       ; Cursor visible at current position?
-       bne     done            ; No, we're done
-       lda     backup          ; Get character at cursor position
-       jmp     setscr          ; Draw character
+        dec     visible
+        ; Fall through
+
+; Prepare to move the mouse cursor.
+prep:
+        jsr     getcursor       ; Cursor visible at current position?
+        bne     done            ; No, we're done
+        lda     backup          ; Get character at cursor position
+        jmp     setscr          ; Draw character
 
 ; Show the mouse cursor.
 show:
-       jsr     getcursor       ; Cursor visible at current position?
-       beq     done            ; Yes, we're done
-       sta     backup          ; Save character at cursor position
-       jmp     setcursor       ; Draw cursor
+        inc     visible
+        ; Fall through
+
+; Draw the mouse cursor.
+draw:
+        lda     visible
+        beq     return
+        jsr     getcursor       ; Cursor visible at current position?
+        beq     done            ; Yes, we're done
+        sta     backup          ; Save character at cursor position
+        jmp     setcursor       ; Draw cursor
 
 ; Move the mouse cursor x position to the value in A/X.
 movex:
-       dex                     ; Is position [256..279]?
-       bmi     :+              ; No, start with column 0
-       clc
-       adc     #$0100 .MOD 7   ; Bias position
-       ldx     #$0100 / 7 - 1  ; Bias column
-:      sec
-:      sbc     #7              ; 280 positions / 40 columns
-       inx
-       bcs     :-
-       stx     column+1
+        dex                     ; Is position [256..279]?
+        bmi     :+              ; No, start with column 0
+        clc
+        adc     #$0100 .MOD 7   ; Bias position
+        ldx     #$0100 / 7 - 1  ; Bias column
+:       sec
+:       sbc     #7              ; 280 positions / 40 columns
+        inx
+        bcs     :-
+        stx     column+1
         .ifdef  __APPLE2ENH__
-       adc     #7 / 2          ; Left or right half of 40-col column?
-       ldx     #<LOWSCR        ; Columns 1,3,5..79
-       bcs     :+
-       .assert LOWSCR + 1 = HISCR, error
-       inx                     ; Columns 0,2,4..78
-:      stx     switch+1
+        adc     #7 / 2          ; Left or right half of 40-col column?
+        ldx     #<LOWSCR        ; Columns 1,3,5..79
+        bcs     :+
+        .assert LOWSCR + 1 = HISCR, error
+        inx                     ; Columns 0,2,4..78
+:       stx     switch+1
         .endif
-       rts
+        rts
 
 ; Move the mouse cursor y position to the value in A/X.
 movey:
-       tax                     ; ABCDExxx
-       lsr                     ; 0ABCDExx
-       lsr                     ; 00ABCDEx
-       lsr                     ; 000ABCDE
-       sta     getscr+1
-       lsr                     ; 0000ABCD
-       and     #%00000011      ; 000000CD
-       ora     #>$0400         ; 000001CD
-       sta     getscr+2
-       sta     setscr+2
-       txa                     ; ABCDExxx
-       ror                     ; EABCDExx
-       and     #%11100000      ; EAB00000
-       ora     getscr+1        ; EABABCDE
-       and     #%11111000      ; EABAB000
-       sta     getscr+1
-       sta     setscr+1
-       rts
+        tax                     ; ABCDExxx
+        lsr                     ; 0ABCDExx
+        lsr                     ; 00ABCDEx
+        lsr                     ; 000ABCDE
+        sta     getscr+1
+        lsr                     ; 0000ABCD
+        and     #%00000011      ; 000000CD
+        ora     #>$0400         ; 000001CD
+        sta     getscr+2
+        sta     setscr+2
+        txa                     ; ABCDExxx
+        ror                     ; EABCDExx
+        and     #%11100000      ; EAB00000
+        ora     getscr+1        ; EABABCDE
+        and     #%11111000      ; EABAB000
+        sta     getscr+1
+        sta     setscr+1
+        rts