; ; Text mode character mouse callbacks for the Ataris ; ; Christian Groessler, 03.01.2014 ; ; derived from Apple2 version by ; Oliver Schmidt, 22.09.2005 ; ; All functions in this module should be interrupt safe, because they may ; be called from an interrupt handler ; .export _mouse_txt_callbacks .importzp tmp4 .import _mul40 .importzp mouse_txt_char ; screen code of mouse cursor .include "atari.inc" ; ------------------------------------------------------------------------ .bss backup: .res 1 visible:.res 1 ; ------------------------------------------------------------------------ .segment "EXTZP" : zeropage scrptr: .res 2 ; ------------------------------------------------------------------------ .rodata ; Callback structure _mouse_txt_callbacks: .addr hide .addr show .addr prep .addr draw .addr movex .addr movey ; ------------------------------------------------------------------------ .data ; setcursor getcursor: column: ldy #$00 ; Patched at runtime lda (scrptr),y rts setcursor: column2:ldy #$00 ; Patched at runtime sta (scrptr),y rts ; ------------------------------------------------------------------------ .code done: rts ; Hide the mouse cursor. hide: dec visible prep: jsr getcursor ; Get character at cursor position cmp #mouse_txt_char ; "mouse" character bne overwr ; no, probably program has overwritten it lda backup ; jmp setcursor ; Draw character overwr: sta backup rts ; Show the mouse cursor. show: inc visible draw: lda visible beq done jsr getcursor ; Cursor visible at current position? sta backup ; Save character at cursor position lda #mouse_txt_char jmp setcursor ; Draw cursor ; Move the mouse cursor x position to the value in A/X. movex: cpx #1 ror a lsr a ; convert to character position lsr a sta column+1 sta column2+1 rts ; Move the mouse cursor y position to the value in A/X. movey: ldy tmp4 ; mul40 uses tmp4, save in Y lsr a ; convert y position to character line lsr a lsr a jsr _mul40 ; carry is cleared by _mul40 adc SAVMSC sta scrptr txa adc SAVMSC+1 sta scrptr+1 sty tmp4 ; restore tmp4 rts