!!!ST Mouse Driver for Basic This is driver for an Atari ST mouse for Atari Basic and Turbo Basic General Information Author: Carsten Strotmann \\ Assembler: Bibo Assembler \\ Published: 04/22/91 \\ Atari Basic or even TurboBasic is way too slow to process the low level data send by an Atari ST Mouse to move a mouse pointer in a usable way. The ML routine below will read the information from the Atari ST mouse, will paint a mouse cursor until one of the mouse buttons are pressed (with an unmodified Atari ST mouse you can only read one mouse button from an A8, but it is possible to modify an Atari ST mouse in a way that the A8 can read both mouse buttons and the mouse is still usable on an Atari ST). ! Usage: you load the ML routine MOUSE.COM (from DOS as Autorun.sys or from TurboBasic with BLOAD "D:MOUSE.COM") then, in your Basic Programm you call the routine at $400 {{{ 100 ... 110 x = USR($400) : REM Turbo Basic 120 ... }}} {{{ 100 ... 110 x = usr(1024) : REM Atari Basic 120 ... }}} while in the Mouse Routine, your BASIC Programm is stopped. Line 120 will executed when one mouse button has been pressed. STRIG(0) -- first mouse button and STRIG(1) -- 2nd mouse button you can get the information which mouse button has been pressed. Peek($03FD) will give you the x position of the mouse pointer, Peek($03FE) will give you the y position of the mouse pointer It should be straigghtforward to assemble the Assembler code in any Assembler (Mac/65, ATASm, x-asm ...). With BiboAssembler (also in the Wiki as ATR download) you can just type in the source. Mirko Sobe from BOSS X has asked me to write a VBI driven Mouse Driver for his BOSS X System. I have that on my to-do list. Such a mouse driver would run an the same time as the basic program. {{{ 00010 .LI OFF 00020 ****************************** 00030 * * 00040 * PROGRAMM:MOUSE ROUTINE * 00050 * AUTOR :CARSTEN STROTMANN * 00060 * DATUM :22.04.91 * 00070 * VERSION :04.00 * 00080 * FUER :ALLGEMEIN * 00090 * * 00100 ****************************** 00110 ; 00120 ; SYSTEM REGISTER 00130 ; 00140 XM = $03FD 00150 YM = $03FE 00160 SETVBV = $E45C 00170 SYSVBV = $E45F 00180 XITVBV = $E462 00190 SDMCTL = $022F 00200 PMBASE = $D407 00210 VCOUNT = $D40B 00220 GRACTL = $D01D 00230 PORTA = $D300 00240 STICK0 = $0278 00250 STRIG0 = $0284 00260 STRIG1 = $0285 00270 HPOS0 = $D000 00280 PCOL0 = $02C0 00290 GPRIOR = $026F 00300 ; 00310 ; 00320 .OR $0400 00330 .OF "D:MOUSE.COM" 00340 ; 00350 ; 00360 BS 00370 PLA BASIC ! 00380 PLA 00390 PLA 00400 STA PCOL0 00410 X LDA #$78 00420 STA PMBASE 00430 LDA #$3A 00440 STA SDMCTL 00450 LDA #2 00460 STA GRACTL 00470 STA GPRIOR 00480 LDX /PLAYVBI 00490 LDY #PLAYVBI 00500 LDA #7 00510 JSR SETVBV 00520 LOOP JMP RUN 00530 ------------------------------ 00540 PLAYVBI 00550 LDA XM 00560 CLC 00570 ADC #49 00580 STA HPOS0 00590 LDX #0 00600 TXA 00610 .1 STA $7C00,X 00620 INX 00630 BNE .1 00640 LDX YM 00650 LDY #0 00660 .2 LDA PLAYTAB,Y 00670 STA $7C20,X 00680 INX 00690 INY 00700 CPY #11 00710 BNE .2 00720 JMP XITVBV 00730 ------------------------------ 00740 END 00750 RTS 00760 ------------------------------ 00770 PLAYTAB 00780 .HX 0080C0E0F0E0E0B0 00790 .HX 101000 00800 XT .HX 0020301000 00810 YT .HX 80C0400080 00820 REG .HX 00 00830 REG2 .HX 00 00840 XX .HX 00 00850 YY .HX 00 00860 ------------------------------ 00870 STICK 00880 LDA STICK0 00890 TAY 00900 CMP #15 00910 BEQ .5 00920 TYA 00930 AND #2 00940 BEQ .1 00950 LDA YM 00960 BEQ .1 00970 DEC YM 00980 .1 00990 TYA 01000 AND #1 01010 BEQ .2 01020 LDA YM 01030 CMP #191 01040 BEQ .2 01050 INC YM 01060 .2 01070 TYA 01080 AND #8 01090 BEQ .3 01100 LDA XM 01110 BEQ .3 01120 DEC XM 01130 .3 01140 TYA 01150 AND #4 01160 BEQ .4 01170 LDA XM 01180 CMP #159 01190 BEQ .4 01200 INC XM 01210 .4 01220 LDA VCOUNT 01230 BNE .4 01240 .5 01250 RTS 01260 ------------------------------ 01270 .OR $0600 01280 RUN 01290 JSR STRIG 01300 LDA PORTA 01310 AND #$30 01320 STA REG 01330 JSR XFRAG 01340 JSR XALG 01350 LDA PORTA 01360 AND #$C0 01370 STA REG2 01380 JSR YFRAG 01390 JSR YALG 01400 JMP RUN 01410 XALG 01420 JSR STICK 01430 JSR STRIG 01440 LDA PORTA 01450 AND #$30 01460 CMP REG 01470 BEQ YALG 01480 LDX XX 01490 INX 01500 CMP XT,X 01510 BNE .1 01520 LDA XM 01530 CMP #159 01540 BEQ .2 01550 INC XM 01560 JMP .2 01570 .1 LDX XX 01580 DEX 01590 CMP XT,X 01600 BNE .2 01610 LDA XM 01620 BEQ .2 01630 DEC XM 01640 .2 RTS 01650 YALG 01660 JSR STICK 01670 JSR STRIG 01680 LDA PORTA 01690 AND #$C0 01700 CMP REG2 01710 BEQ XALG 01720 LDX YY 01730 INX 01740 CMP YT,X 01750 BNE .1 01760 LDA YM 01770 CMP #191 01780 BEQ .2 01790 INC YM 01800 JMP .2 01810 .1 LDX YY 01820 DEX 01830 CMP YT,X 01840 BNE .2 01850 LDA YM 01860 BEQ .2 01870 DEC YM 01880 .2 RTS 01890 ------------------------------ 01900 XFRAG 01910 LDX #4 01920 .1 LDA XT,X 01930 CMP REG 01940 BEQ .2 01950 DEX 01960 BNE .1 01970 .2 STX XX 01980 RTS 01990 ------------------------------ 02000 YFRAG 02010 LDX #4 02020 .1 LDA YT,X 02030 CMP REG2 02040 BEQ .2 02050 DEX 02060 BNE .1 02070 .2 STX YY 02080 RTS 02090 ------------------------------ 02100 STRIG 02110 LDA STRIG0 02120 BNE .1 02130 PLA 02140 PLA 02150 JMP END 02160 .1 LDA STRIG1 02170 BNE .2 02180 PLA 02190 PLA 02200 JMP END 02210 .2 RTS 02220 ------------------------------ }}}