00000000: 3B 0D 3B 09 53 49 44 20 4D 4F 55 53 45 20 42 41 |;.;.SID MOUSE BA|
00000010: 53 43 49 20 43 4F 4D 50 41 54 49 42 4C 45 20 44 |SCI COMPATIBLE D|
00000020: 52 49 56 45 52 0D 3B 0D 49 49 52 51 09 3D 20 24 |RIVER.;.IIRQ.= $|
00000030: 30 33 31 34 0D 56 49 43 09 3D 20 24 44 30 30 30 |0314.VIC.= $D000|
00000040: 0D 53 49 44 09 3D 20 24 44 34 30 30 0D 50 4F 54 |.SID.= $D400.POT|
00000050: 58 09 3D 20 53 49 44 2B 24 31 39 0D 50 4F 54 59 |X.= SID+$19.POTY|
00000060: 09 3D 20 53 49 44 2B 24 31 41 0D 3B 0D 41 43 54 |.= SID+$1A.;.ACT|
00000070: 49 56 45 09 3D 20 24 31 31 37 45 09 09 3B 20 49 |IVE.= $117E..; I|
00000080: 46 20 5A 45 52 4F 2C 20 54 48 45 4E 20 4D 4F 56 |F ZERO, THEN MOV|
00000090: 45 20 53 50 52 49 54 45 0D 3B 0D 56 49 43 44 41 |E SPRITE.;.VICDA|
000000A0: 54 41 09 3D 20 24 31 31 44 36 09 09 3B 20 42 41 |TA.= $11D6..; BA|
000000B0: 53 49 43 53 20 43 4F 50 59 20 4F 46 20 56 49 43 |SICS COPY OF VIC|
000000C0: 20 52 45 47 49 53 54 45 52 20 49 4D 41 47 45 0D | REGISTER IMAGE.|
000000D0: 58 50 4F 53 09 3D 20 56 49 43 44 41 54 41 2B 24 |XPOS.= VICDATA+$|
000000E0: 30 30 09 3B 20 4C 4F 57 20 4F 52 44 45 52 20 58 |00.; LOW ORDER X|
000000F0: 50 4F 53 49 54 49 4F 4E 0D 59 50 4F 53 09 3D 20 |POSITION.YPOS.= |
00000100: 56 49 43 44 41 54 41 2B 24 30 31 09 3B 20 59 20 |VICDATA+$01.; Y |
00000110: 50 4F 53 49 54 49 4F 4E 0D 58 50 4F 53 4D 53 42 |POSITION.XPOSMSB|
00000120: 09 3D 20 56 49 43 44 41 54 41 2B 24 31 30 09 3B |.= VICDATA+$10.;|
00000130: 20 42 49 54 20 30 20 49 53 20 48 49 47 48 20 4F | BIT 0 IS HIGH O|
00000140: 52 44 45 52 20 58 20 50 4F 53 49 54 49 4F 4E 0D |RDER X POSITION.|
00000150: 3B 0D 09 2A 3D 24 31 38 46 30 0D 49 49 52 51 32 |;..*=$18F0.IIRQ2|
00000160: 09 2A 3D 2A 2B 32 0D 4F 50 4F 54 58 09 2A 3D 2A |.*=*+2.OPOTX.*=*|
00000170: 2B 31 0D 4F 50 4F 54 59 09 2A 3D 2A 2B 31 0D 4E |+1.OPOTY.*=*+1.N|
00000180: 45 57 56 41 4C 55 45 09 2A 3D 2A 2B 31 0D 4F 4C |EWVALUE.*=*+1.OL|
00000190: 44 56 41 4C 55 45 09 2A 3D 2A 2B 31 0D 3B 0D 09 |DVALUE.*=*+1.;..|
000001A0: 2A 20 3D 20 24 31 38 30 30 0D 3B 0D 49 4E 53 54 |* = $1800.;.INST|
000001B0: 41 4C 4C 09 4C 44 41 20 49 49 52 51 2B 31 0D 09 |ALL.LDA IIRQ+1..|
000001C0: 43 4D 50 20 23 3E 4D 49 52 51 0D 09 42 45 51 20 |CMP #>MIRQ..BEQ |
000001D0: 39 30 24 0D 09 50 48 50 0D 09 53 45 49 0D 09 4C |90$..PHP..SEI..L|
000001E0: 44 41 20 49 49 52 51 0D 09 53 54 41 20 49 49 52 |DA IIRQ..STA IIR|
000001F0: 51 32 0D 09 4C 44 41 20 49 49 52 51 2B 31 0D 09 |Q2..LDA IIRQ+1..|
00000200: 53 54 41 20 49 49 52 51 32 2B 31 0D 0D 09 4C 44 |STA IIRQ2+1...LD|
00000210: 41 20 23 3C 4D 49 52 51 0D 09 53 54 41 20 49 49 |A #<MIRQ..STA II|
00000220: 52 51 0D 09 4C 44 41 20 23 3E 4D 49 52 51 0D 09 |RQ..LDA #>MIRQ..|
00000230: 53 54 41 20 49 49 52 51 2B 31 0D 3B 0D 09 50 4C |STA IIRQ+1.;..PL|
00000240: 50 0D 39 30 24 09 52 54 53 0D 3B 0D 4D 49 52 51 |P.90$.RTS.;.MIRQ|
00000250: 09 43 4C 44 09 09 3B 20 4A 55 53 54 20 49 4E 20 |.CLD..; JUST IN |
00000260: 43 41 53 45 2E 2E 2E 2E 2E 0D 09 4C 44 41 20 41 |CASE.......LDA A|
00000270: 43 54 49 56 45 09 3B 20 49 46 09 42 41 53 49 43 |CTIVE.; IF.BASIC|
00000280: 20 49 53 20 4D 4F 56 45 49 4E 47 20 53 50 52 49 | IS MOVEING SPRI|
00000290: 54 45 0D 09 42 4E 45 20 39 30 24 09 09 3B 09 4C |TE..BNE 90$..;.L|
000002A0: 45 54 20 42 41 53 49 43 20 48 41 56 45 20 49 54 |ET BASIC HAVE IT|
000002B0: 20 28 A0 57 48 59 20 4E 4F 54 20 3F 20 29 0D 09 | (.WHY NOT ? )..|
000002C0: 4C 44 41 20 50 4F 54 58 09 3B 20 47 45 54 20 44 |LDA POTX.; GET D|
000002D0: 45 4C 54 41 20 56 41 4C 55 45 53 20 46 4F 52 20 |ELTA VALUES FOR |
000002E0: 58 0D 09 4C 44 59 20 4F 50 4F 54 58 0D 09 4A 53 |X..LDY OPOTX..JS|
000002F0: 52 20 4D 4F 56 43 48 4B 0D 09 53 54 59 20 4F 50 |R MOVCHK..STY OP|
00000300: 4F 54 58 0D 3B 0D 09 43 4C 43 09 09 3B 20 4D 4F |OTX.;..CLC..; MO|
00000310: 44 49 46 59 20 4C 4F 57 20 4F 52 44 45 52 20 58 |DIFY LOW ORDER X|
00000320: 50 4F 53 49 54 49 4F 4E 0D 09 41 44 43 20 58 50 |POSITION..ADC XP|
00000330: 4F 53 0D 09 53 54 41 20 58 50 4F 53 0D 09 54 58 |OS..STA XPOS..TX|
00000340: 41 0D 09 41 44 43 20 23 24 30 30 0D 09 41 4E 44 |A..ADC #$00..AND|
00000350: 20 23 25 30 30 30 30 30 30 30 31 0D 09 45 4F 52 | #%00000001..EOR|
00000360: 20 58 50 4F 53 4D 53 42 0D 09 53 54 41 20 58 50 | XPOSMSB..STA XP|
00000370: 4F 53 4D 53 42 0D 3B 0D 09 4C 44 41 20 50 4F 54 |OSMSB.;..LDA POT|
00000380: 59 09 3B 20 47 45 54 20 44 45 4C 54 41 20 56 41 |Y.; GET DELTA VA|
00000390: 4C 55 45 20 46 4F 52 20 59 0D 09 4C 44 59 20 4F |LUE FOR Y..LDY O|
000003A0: 50 4F 54 59 0D 09 4A 53 52 20 4D 4F 56 43 48 4B |POTY..JSR MOVCHK|
000003B0: 0D 09 53 54 59 20 4F 50 4F 54 59 0D 3B 0D 09 53 |..STY OPOTY.;..S|
000003C0: 45 43 09 09 3B 20 4D 4F 44 49 46 59 20 59 20 50 |EC..; MODIFY Y P|
000003D0: 4F 53 49 54 49 4F 4E 20 28 20 44 45 43 52 45 41 |OSITION ( DECREA|
000003E0: 53 45 20 59 20 46 4F 52 20 49 4E 43 52 45 53 45 |SE Y FOR INCRESE|
000003F0: 20 49 4E 20 50 4F 54 20 29 0D 09 45 4F 52 20 23 | IN POT )..EOR #|
00000400: 24 46 46 0D 09 41 44 43 20 59 50 4F 53 0D 09 53 |$FF..ADC YPOS..S|
00000410: 54 41 20 59 50 4F 53 0D 3B 0D 39 30 24 09 4A 4D |TA YPOS.;.90$.JM|
00000420: 50 20 28 49 49 52 51 32 29 09 3B 20 43 4F 4E 54 |P (IIRQ2).; CONT|
00000430: 49 4E 55 45 20 57 2F 20 49 52 51 20 4F 50 45 52 |INUE W/ IRQ OPER|
00000440: 41 54 49 4F 4E 0D 3B 0D 3B 20 4D 4F 56 43 48 4B |ATION.;.; MOVCHK|
00000450: 0D 3B 09 45 4E 54 52 59 09 59 20 3D 20 4F 4C 44 |.;.ENTRY.Y = OLD|
00000460: 20 56 41 4C 55 45 20 4F 46 20 50 4F 54 20 52 45 | VALUE OF POT RE|
00000470: 47 49 53 54 45 52 0D 3B 09 09 41 20 3D 20 43 55 |GISTER.;..A = CU|
00000480: 52 52 52 45 4E 54 20 56 41 4C 55 45 20 4F 46 20 |RRRENT VALUE OF |
00000490: 50 4F 54 20 52 45 47 49 53 54 45 52 0D 3B 09 45 |POT REGISTER.;.E|
000004A0: 58 49 54 09 59 20 3D 20 56 41 4C 55 45 20 54 4F |XIT.Y = VALUE TO|
000004B0: 20 55 53 45 20 46 4F 52 20 4F 4C 44 20 56 41 4C | USE FOR OLD VAL|
000004C0: 55 45 0D 3B 09 09 58 2C 41 20 3D 20 44 45 4C 54 |UE.;..X,A = DELT|
000004D0: 41 20 56 41 4C 55 45 20 46 4F 52 20 50 4F 53 49 |A VALUE FOR POSI|
000004E0: 54 49 4F 4E 0D 3B 0D 4D 4F 56 43 48 4B 09 53 54 |TION.;.MOVCHK.ST|
000004F0: 59 20 4F 4C 44 56 41 4C 55 45 09 53 41 56 45 20 |Y OLDVALUE.SAVE |
00000500: 4F 4C 44 20 26 20 20 4E 45 57 20 56 41 4C 55 45 |OLD & NEW VALUE|
00000510: 53 0D 09 53 54 41 20 4E 45 57 56 41 4C 55 45 0D |S..STA NEWVALUE.|
00000520: 09 4C 44 58 20 23 30 09 09 50 52 45 4C 4F 41 44 |.LDX #0..PRELOAD|
00000530: 20 58 20 57 2F 20 30 0D 3B 0D 09 53 45 43 09 09 | X W/ 0.;..SEC..|
00000540: 41 20 3C 3D 20 20 4D 4F 44 36 34 28 20 4E 45 57 |A <= MOD64( NEW|
00000550: 2D 4F 4C 44 20 29 0D 09 53 42 43 20 4F 4C 44 56 |-OLD )..SBC OLDV|
00000560: 41 4C 55 45 0D 09 41 4E 44 20 23 25 30 31 31 31 |ALUE..AND #%0111|
00000570: 31 31 31 31 09 0D 09 43 4D 50 20 23 25 30 31 30 |1111...CMP #%010|
00000580: 30 30 30 30 30 09 49 46 09 3E 20 30 0D 09 42 43 |00000.IF.> 0..BC|
00000590: 53 20 35 30 24 0D 09 4C 53 52 20 41 09 09 09 41 |S 50$..LSR A...A|
000005A0: 20 3C 3D 20 41 2F 32 0D 09 42 45 51 20 38 30 24 | <= A/2..BEQ 80$|
000005B0: 09 09 09 49 46 09 3C 3E 20 30 0D 09 4C 44 59 20 |...IF.<> 0..LDY |
000005C0: 4E 45 57 56 41 4C 55 45 09 09 09 59 20 3C 3D 20 |NEWVALUE...Y <= |
000005D0: 4E 45 57 56 41 4C 55 45 0D 09 52 54 53 09 09 09 |NEWVALUE..RTS...|
000005E0: 09 52 45 54 55 52 4E 0D 3B 0D 35 30 24 09 4F 52 |.RETURN.;.50$.OR|
000005F0: 41 20 23 25 31 31 30 30 30 30 30 30 09 45 4C 53 |A #%11000000.ELS|
00000600: 45 09 4F 52 20 49 4E 20 48 49 47 48 20 4F 52 44 |E.OR IN HIGH ORD|
00000610: 45 52 20 42 49 54 53 0D 09 43 4D 50 20 23 24 46 |ER BITS..CMP #$F|
00000620: 46 09 09 49 46 09 3C 3E 20 2D 31 0D 09 42 45 51 |F..IF.<> -1..BEQ|
00000630: 20 38 30 24 0D 09 53 45 43 09 09 09 09 41 20 3C | 80$..SEC....A <|
00000640: 3D 20 41 2F 32 0D 09 52 4F 52 20 41 0D 09 4C 44 |= A/2..ROR A..LD|
00000650: 58 20 23 24 46 46 09 09 09 58 20 3C 3D 20 2D 31 |X #$FF...X <= -1|
00000660: 0D 09 4C 44 59 20 4E 45 57 56 41 4C 55 45 09 09 |..LDY NEWVALUE..|
00000670: 09 59 20 3C 3D 20 4E 45 57 56 41 4C 55 45 0D 09 |.Y <= NEWVALUE..|
00000680: 52 54 53 09 09 09 09 52 45 54 55 52 4E 0D 3B 0D |RTS....RETURN.;.|
00000690: 38 30 24 09 4C 44 41 20 23 30 09 09 41 20 3C 3D |80$.LDA #0..A <=|
000006A0: 20 30 0D 09 52 54 53 09 09 52 45 54 55 52 4E 20 | 0..RTS..RETURN |
000006B0: 57 2F 20 59 20 3D 20 4F 4C 44 20 56 41 4C 55 45 |W/ Y = OLD VALUE|
000006C0: 0D 3B 0D 09 2E 45 4E 44 0D 45 |.;...END.E |
;.;.SID MOUSE BASCI COMPATIBLE DRIVER.;.
IIRQ.= $0314.VIC.= $D000.SID.= $D400.POT
X.= SID+$19.POTY.= SID+$1A.;.ACTIVE.= $1
17E..; IF ZERO, THEN MOVE SPRITE.;.VICDA
TA.= $11D6..; BASICS COPY OF VIC REGISTE
R IMAGE.XPOS.= VICDATA+$00.; LOW ORDER X
POSITION.YPOS.= VICDATA+$01.; Y POSITION
.XPOSMSB.= VICDATA+$10.; BIT 0 IS HIGH O
RDER X POSITION.;..*=$18F0.IIRQ2.*=*+2.O
POTX.*=*+1.OPOTY.*=*+1.NEWVALUE.*=*+1.OL
DVALUE.*=*+1.;..* = $1800.;.INSTALL.LDA
IIRQ+1..CMP #>MIRQ..BEQ 90$..PHP..SEI..L
DA IIRQ..STA IIRQ2..LDA IIRQ+1..STA IIRQ
2+1...LDA #<MIRQ..STA IIRQ..LDA #>MIRQ..
STA IIRQ+1.;..PLP.90$.RTS.;.MIRQ.CLD..;
JUST IN CASE.......LDA ACTIVE.; IF.BASIC
IS MOVEING SPRITE..BNE 90$..;.LET BASIC
HAVE IT ( WHY NOT ? )..LDA POTX.; GET D
ELTA VALUES FOR X..LDY OPOTX..JSR MOVCHK
..STY OPOTX.;..CLC..; MODIFY LOW ORDER X
POSITION..ADC XPOS..STA XPOS..TXA..ADC #
$00..AND #%00000001..EOR XPOSMSB..STA XP
OSMSB.;..LDA POTY.; GET DELTA VALUE FOR
Y..LDY OPOTY..JSR MOVCHK..STY OPOTY.;..S
EC..; MODIFY Y POSITION ( DECREASE Y FOR
INCRESE IN POT )..EOR #$FF..ADC YPOS..S
TA YPOS.;.90$.JMP (IIRQ2).; CONTINUE W/
IRQ OPERATION.;.; MOVCHK.;.ENTRY.Y = OLD
VALUE OF POT REGISTER.;..A = CURRRENT V
ALUE OF POT REGISTER.;.EXIT.Y = VALUE TO
USE FOR OLD VALUE.;..X,A = DELTA VALUE
FOR POSITION.;.MOVCHK.STY OLDVALUE.SAVE
OLD & NEW VALUES..STA NEWVALUE..LDX #0.
.PRELOAD X W/ 0.;..SEC..A <= MOD64( NEW
-OLD )..SBC OLDVALUE..AND #%01111111...C
MP #%01000000.IF.> 0..BCS 50$..LSR A...A
<= A/2..BEQ 80$...IF.<> 0..LDY NEWVALUE
...Y <= NEWVALUE..RTS....RETURN.;.50$.OR
A #%11000000.ELSE.OR IN HIGH ORDER BITS.
.CMP #$FF..IF.<> -1..BEQ 80$..SEC....A <
= A/2..ROR A..LDX #$FF...X <= -1..LDY NE
WVALUE...Y <= NEWVALUE..RTS....RETURN.;.
80$.LDA #0..A <= 0..RTS..RETURN W/ Y = O
LD VALUE.;...END.E
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL