_  __   _  _         _ _     _      _           _           
  __| |/ /_ | || |     __| (_)___| | __ (_)_ __   __| | _____  __
 / _` | '_ \| || |_   / _` | / __| |/ / | | '_ \ / _` |/ _ \ \/ /
| (_| | (_) |__   _| | (_| | \__ \   <  | | | | | (_| |  __/>  < 
 \__,_|\___/   |_|    \__,_|_|___/_|\_\ |_|_| |_|\__,_|\___/_/\_\
                                                                 
            

M1351.64.SRC

FILE INFORMATION

FILENAME(S): M1351.64.SRC

FILE TYPE(S): SEQ

FILE SIZE: 2.5K

FIRST SEEN: 2025-10-20 14:30:19

APPEARS ON: 7 disk(s)

FILE HASH

dd62492775b940ac13d624fcd23cdf558c627ea530bbcca55e0ef50a1f7ed1e4

FOUND ON DISKS (7 DISKS)

DISK TITLE FILENAME FILE TYPE COLLECTION TRACK SECTOR ACTIONS
1351 MOUSE DEMOS M1351.64.SRC SEQ DuncanTwain, Sailor, Pbv, Treasure Chest - Klaus Der Suhler 19 6 DOWNLOAD FILE
MAUSTREIBER M1351.64.SRC SEQ Treasure Chest - Klaus Der Suhler 17 8 DOWNLOAD FILE
DISK 50 SEITE A M1351.64.SRC SEQ Treasure Chest - Klaus Der Suhler 19 6 DOWNLOAD FILE
1351 MOUSE DEMOS M1351.64.SRC SEQ BrainSkull, Thomas Marosits 19 6 DOWNLOAD FILE
1351 MOUSE DEMO M1351.64.SRC SEQ Sailor, Pbv 17 11 DOWNLOAD FILE
1351 MOUSE DEMOS M1351.64.SRC SEQ DuncanTwain 19 6 DOWNLOAD FILE
1351 MOUSE DEMOS M1351.64.SRC SEQ DuncanTwain 19 6 DOWNLOAD FILE

FILE CONTENT & ANALYSIS

00000000: 3B 09 31 33 35 31 20 50  52 4F 50 4F 52 54 49 4F  |;.1351 PROPORTIO|
00000010: 4E 41 4C 20 4D 4F 55 53  45 20 44 52 49 56 45 52  |NAL MOUSE DRIVER|
00000020: 20 46 4F 52 20 54 48 45  20 43 36 34 0D 3B 0D 3B  | FOR THE C64.;.;|
00000030: 09 43 4F 4D 4D 4F 44 4F  52 45 20 42 55 53 49 4E  |.COMMODORE BUSIN|
00000040: 45 53 53 20 4D 41 43 48  49 4E 45 53 2C 20 49 4E  |ESS MACHINES, IN|
00000050: 43 2E 20 20 20 32 37 4F  43 54 38 36 0D 3B 09 09  |C.   27OCT86.;..|
00000060: 42 59 20 48 45 44 4C 45  59 20 44 41 56 49 53 20  |BY HEDLEY DAVIS |
00000070: 41 4E 44 20 46 52 45 44  20 42 4F 57 45 4E 0D 0D  |AND FRED BOWEN..|
00000080: 49 49 52 51 09 3D 20 24  30 33 31 34 0D 56 49 43  |IIRQ.= $0314.VIC|
00000090: 09 3D 20 24 44 30 30 30  0D 53 49 44 09 3D 20 24  |.= $D000.SID.= $|
000000A0: 44 34 30 30 0D 43 49 41  09 3D 20 24 44 43 30 30  |D400.CIA.= $DC00|
000000B0: 0D 43 49 41 2E 44 44 52  09 3D 20 24 44 43 30 32  |.CIA.DDR.= $DC02|
000000C0: 0D 50 4F 54 58 09 3D 20  53 49 44 2B 24 31 39 0D  |.POTX.= SID+$19.|
000000D0: 50 4F 54 59 09 3D 20 53  49 44 2B 24 31 41 0D 0D  |POTY.= SID+$1A..|
000000E0: 58 50 4F 53 09 3D 20 56  49 43 2B 24 30 30 09 3B  |XPOS.= VIC+$00.;|
000000F0: 58 20 50 4F 53 49 54 49  4F 4E 20 28 4C 53 42 29  |X POSITION (LSB)|
00000100: 0D 59 50 4F 53 09 3D 20  56 49 43 2B 24 30 31 09  |.YPOS.= VIC+$01.|
00000110: 3B 59 20 50 4F 53 49 54  49 4F 4E 0D 58 50 4F 53  |;Y POSITION.XPOS|
00000120: 4D 53 42 09 3D 20 56 49  43 2B 24 31 30 09 3B 58  |MSB.= VIC+$10.;X|
00000130: 20 50 4F 53 49 54 49 4F  4E 20 28 4D 53 42 29 0D  | POSITION (MSB).|
00000140: 0D 09 2A 3D 24 43 30 46  30 0D 0D 49 49 52 51 32  |..*=$C0F0..IIRQ2|
00000150: 09 09 2A 3D 2A 2B 32 0D  4F 50 4F 54 58 09 09 2A  |..*=*+2.OPOTX..*|
00000160: 3D 2A 2B 31 0D 4F 50 4F  54 59 09 09 2A 3D 2A 2B  |=*+1.OPOTY..*=*+|
00000170: 31 0D 4E 45 57 56 41 4C  55 45 09 2A 3D 2A 2B 31  |1.NEWVALUE.*=*+1|
00000180: 0D 4F 4C 44 56 41 4C 55  45 09 2A 3D 2A 2B 31 0D  |.OLDVALUE.*=*+1.|
00000190: 43 49 41 53 41 56 45 09  09 2A 3D 2A 2B 31 0D 0D  |CIASAVE..*=*+1..|
000001A0: 0D 09 2A 20 3D 20 24 43  30 30 30 0D 0D 09 4A 4D  |..* = $C000...JM|
000001B0: 50 20 49 4E 53 54 41 4C  4C 2E 31 09 3B 49 4E 53  |P INSTALL.1.;INS|
000001C0: 54 41 4C 4C 20 4D 4F 55  53 45 20 49 4E 20 50 4F  |TALL MOUSE IN PO|
000001D0: 52 54 20 31 0D 09 4A 4D  50 20 49 4E 53 54 41 4C  |RT 1..JMP INSTAL|
000001E0: 4C 2E 32 09 3B 49 4E 53  54 41 4C 4C 20 4D 4F 55  |L.2.;INSTALL MOU|
000001F0: 53 45 20 49 4E 20 50 4F  52 54 20 32 0D 09 4A 4D  |SE IN PORT 2..JM|
00000200: 50 20 52 45 4D 4F 56 45  09 3B 52 45 4D 4F 56 45  |P REMOVE.;REMOVE|
00000210: 20 4D 4F 55 53 45 20 57  45 44 47 45 0D 0D 0D 49  | MOUSE WEDGE...I|
00000220: 4E 53 54 41 4C 4C 2E 31  09 4C 44 58 20 23 30 09  |NSTALL.1.LDX #0.|
00000230: 09 3B 50 4F 52 54 20 31  20 4D 4F 55 53 45 0D 09  |.;PORT 1 MOUSE..|
00000240: 09 2E 42 59 54 45 20 24  32 43 0D 0D 49 4E 53 54  |..BYTE $2C..INST|
00000250: 41 4C 4C 2E 32 09 4C 44  58 20 23 32 09 09 3B 50  |ALL.2.LDX #2..;P|
00000260: 4F 52 54 20 32 20 4D 4F  55 53 45 0D 0D 09 4C 44  |ORT 2 MOUSE...LD|
00000270: 41 20 49 49 52 51 2B 31  09 3B 49 4E 53 54 41 4C  |A IIRQ+1.;INSTAL|
00000280: 4C 20 49 52 51 20 57 45  44 47 45 0D 09 43 4D 50  |L IRQ WEDGE..CMP|
00000290: 20 23 3E 4D 49 52 51 2E  31 0D 09 42 45 51 20 39  | #>MIRQ.1..BEQ 9|
000002A0: 30 24 09 09 3B 2E 2E 2E  42 52 41 4E 43 48 20 49  |0$..;...BRANCH I|
000002B0: 46 20 41 4C 52 45 41 44  59 20 49 4E 53 54 41 4C  |F ALREADY INSTAL|
000002C0: 4C 45 44 21 0D 09 50 48  50 0D 09 53 45 49 0D 0D  |LED!..PHP..SEI..|
000002D0: 09 4C 44 41 20 49 49 52  51 09 3B 53 41 56 45 20  |.LDA IIRQ.;SAVE |
000002E0: 43 55 52 52 45 4E 54 20  49 52 51 20 49 4E 44 49  |CURRENT IRQ INDI|
000002F0: 52 45 43 54 20 46 4F 52  20 4F 55 52 20 45 58 49  |RECT FOR OUR EXI|
00000300: 54 0D 09 53 54 41 20 49  49 52 51 32 0D 09 4C 44  |T..STA IIRQ2..LD|
00000310: 41 20 49 49 52 51 2B 31  0D 09 53 54 41 20 49 49  |A IIRQ+1..STA II|
00000320: 52 51 32 2B 31 0D 0D 09  4C 44 41 20 50 4F 52 54  |RQ2+1...LDA PORT|
00000330: 2C 58 09 3B 50 4F 49 4E  54 20 49 52 51 20 49 4E  |,X.;POINT IRQ IN|
00000340: 44 49 52 45 43 54 20 54  4F 20 4D 4F 55 53 45 20  |DIRECT TO MOUSE |
00000350: 44 52 49 56 45 52 0D 09  53 54 41 20 49 49 52 51  |DRIVER..STA IIRQ|
00000360: 0D 09 4C 44 41 20 50 4F  52 54 2B 31 2C 58 0D 09  |..LDA PORT+1,X..|
00000370: 53 54 41 20 49 49 52 51  2B 31 0D 09 50 4C 50 0D  |STA IIRQ+1..PLP.|
00000380: 39 30 24 09 52 54 53 0D  0D 50 4F 52 54 09 2E 57  |90$.RTS..PORT..W|
00000390: 4F 52 44 20 4D 49 52 51  2E 31 0D 09 2E 57 4F 52  |ORD MIRQ.1...WOR|
000003A0: 44 20 4D 49 52 51 2E 32  0D 0D 0D 52 45 4D 4F 56  |D MIRQ.2...REMOV|
000003B0: 45 09 4C 44 41 20 49 49  52 51 2B 31 09 3B 52 45  |E.LDA IIRQ+1.;RE|
000003C0: 4D 4F 56 45 20 49 52 51  20 57 45 44 47 45 0D 09  |MOVE IRQ WEDGE..|
000003D0: 43 4D 50 20 23 3E 4D 49  52 51 2E 31 0D 09 42 4E  |CMP #>MIRQ.1..BN|
000003E0: 45 20 39 30 24 09 09 3B  2E 2E 2E 42 52 41 4E 43  |E 90$..;...BRANC|
000003F0: 48 20 49 46 20 41 4C 52  45 41 44 59 20 52 45 4D  |H IF ALREADY REM|
00000400: 4F 56 45 44 21 0D 09 50  48 50 0D 09 53 45 49 0D  |OVED!..PHP..SEI.|
00000410: 09 4C 44 41 20 49 49 52  51 32 09 3B 52 45 53 54  |.LDA IIRQ2.;REST|
00000420: 4F 52 45 20 53 41 56 45  44 20 49 4E 44 49 52 45  |ORE SAVED INDIRE|
00000430: 43 54 0D 09 53 54 41 20  49 49 52 51 0D 09 4C 44  |CT..STA IIRQ..LD|
00000440: 41 20 49 49 52 51 32 2B  31 0D 09 53 54 41 20 49  |A IIRQ2+1..STA I|
00000450: 49 52 51 2B 31 0D 09 50  4C 50 0D 39 30 24 09 52  |IRQ+1..PLP.90$.R|
00000460: 54 53 0D 0D 0D 0D 4D 49  52 51 2E 32 09 4C 44 41  |TS....MIRQ.2.LDA|
00000470: 20 23 24 38 30 09 3B 50  4F 52 54 32 20 4D 4F 55  | #$80.;PORT2 MOU|
00000480: 53 45 20 53 43 41 4E 0D  09 2E 42 59 54 45 20 24  |SE SCAN...BYTE $|
00000490: 32 43 0D 0D 4D 49 52 51  2E 31 09 4C 44 41 20 23  |2C..MIRQ.1.LDA #|
000004A0: 24 34 30 09 3B 50 4F 52  54 31 20 4D 4F 55 53 45  |$40.;PORT1 MOUSE|
000004B0: 20 53 43 41 4E 0D 0D 09  4A 53 52 20 53 45 54 50  | SCAN...JSR SETP|
000004C0: 4F 54 09 3B 43 4F 4E 46  49 47 55 52 45 20 43 49  |OT.;CONFIGURE CI|
000004D0: 41 20 50 45 52 20 2E 41  0D 0D 09 4C 44 41 20 50  |A PER .A...LDA P|
000004E0: 4F 54 58 09 3B 47 45 54  20 44 45 4C 54 41 20 56  |OTX.;GET DELTA V|
000004F0: 41 4C 55 45 53 20 46 4F  52 20 58 0D 09 4C 44 59  |ALUES FOR X..LDY|
00000500: 20 4F 50 4F 54 58 0D 09  4A 53 52 20 4D 4F 56 43  | OPOTX..JSR MOVC|
00000510: 48 4B 0D 09 53 54 59 20  4F 50 4F 54 58 0D 0D 09  |HK..STY OPOTX...|
00000520: 43 4C 43 09 09 3B 4D 4F  44 49 46 59 20 4C 4F 57  |CLC..;MODIFY LOW|
00000530: 20 4F 52 44 45 52 20 58  20 50 4F 53 49 54 49 4F  | ORDER X POSITIO|
00000540: 4E 0D 09 41 44 43 20 58  50 4F 53 0D 09 53 54 41  |N..ADC XPOS..STA|
00000550: 20 58 50 4F 53 0D 09 54  58 41 0D 09 41 44 43 20  | XPOS..TXA..ADC |
00000560: 23 24 30 30 0D 09 41 4E  44 20 23 25 30 30 30 30  |#$00..AND #%0000|
00000570: 30 30 30 31 0D 09 45 4F  52 20 58 50 4F 53 4D 53  |0001..EOR XPOSMS|
00000580: 42 0D 09 53 54 41 20 58  50 4F 53 4D 53 42 0D 0D  |B..STA XPOSMSB..|
00000590: 09 4C 44 41 20 50 4F 54  59 09 3B 47 45 54 20 44  |.LDA POTY.;GET D|
000005A0: 45 4C 54 41 20 56 41 4C  55 45 20 46 4F 52 20 59  |ELTA VALUE FOR Y|
000005B0: 0D 09 4C 44 59 20 4F 50  4F 54 59 0D 09 4A 53 52  |..LDY OPOTY..JSR|
000005C0: 20 4D 4F 56 43 48 4B 0D  09 53 54 59 20 4F 50 4F  | MOVCHK..STY OPO|
000005D0: 54 59 0D 0D 09 53 45 43  09 09 3B 4D 4F 44 49 46  |TY...SEC..;MODIF|
000005E0: 59 20 59 20 50 4F 53 49  54 49 4F 4E 20 28 44 45  |Y Y POSITION (DE|
000005F0: 43 52 45 41 53 45 20 59  20 46 4F 52 20 49 4E 43  |CREASE Y FOR INC|
00000600: 52 45 41 53 45 20 49 4E  20 50 4F 54 29 0D 09 45  |REASE IN POT)..E|
00000610: 4F 52 20 23 24 46 46 0D  09 41 44 43 20 59 50 4F  |OR #$FF..ADC YPO|
00000620: 53 0D 09 53 54 41 20 59  50 4F 53 0D 0D 09 4C 44  |S..STA YPOS...LD|
00000630: 58 20 43 49 41 53 41 56  45 09 3B 52 45 53 54 4F  |X CIASAVE.;RESTO|
00000640: 52 45 20 4B 45 59 42 4F  41 52 44 0D 09 53 54 41  |RE KEYBOARD..STA|
00000650: 20 43 49 41 0D 0D 39 30  24 09 4A 4D 50 20 28 49  | CIA..90$.JMP (I|
00000660: 49 52 51 32 29 09 3B 43  4F 4E 54 49 4E 55 45 20  |IRQ2).;CONTINUE |
00000670: 57 2F 20 49 52 51 20 4F  50 45 52 41 54 49 4F 4E  |W/ IRQ OPERATION|
00000680: 0D 0D 0D 0D 3B 20 4D 4F  56 43 48 4B 0D 3B 09 45  |....; MOVCHK.;.E|
00000690: 4E 54 52 59 09 59 20 3D  20 4F 4C 44 20 56 41 4C  |NTRY.Y = OLD VAL|
000006A0: 55 45 20 4F 46 20 50 4F  54 20 52 45 47 49 53 54  |UE OF POT REGIST|
000006B0: 45 52 0D 3B 09 09 41 20  3D 20 43 55 52 52 52 45  |ER.;..A = CURRRE|
000006C0: 4E 54 20 56 41 4C 55 45  20 4F 46 20 50 4F 54 20  |NT VALUE OF POT |
000006D0: 52 45 47 49 53 54 45 52  0D 3B 09 45 58 49 54 09  |REGISTER.;.EXIT.|
000006E0: 59 20 3D 20 56 41 4C 55  45 20 54 4F 20 55 53 45  |Y = VALUE TO USE|
000006F0: 20 46 4F 52 20 4F 4C 44  20 56 41 4C 55 45 0D 3B  | FOR OLD VALUE.;|
00000700: 09 09 58 2C 41 20 3D 20  44 45 4C 54 41 20 56 41  |..X,A = DELTA VA|
00000710: 4C 55 45 20 46 4F 52 20  50 4F 53 49 54 49 4F 4E  |LUE FOR POSITION|
00000720: 0D 3B 0D 0D 4D 4F 56 43  48 4B 09 53 54 59 20 4F  |.;..MOVCHK.STY O|
00000730: 4C 44 56 41 4C 55 45 09  3B 53 41 56 45 20 4F 4C  |LDVALUE.;SAVE OL|
00000740: 44 20 26 20 4E 45 57 20  56 41 4C 55 45 53 0D 09  |D & NEW VALUES..|
00000750: 53 54 41 20 4E 45 57 56  41 4C 55 45 0D 09 4C 44  |STA NEWVALUE..LD|
00000760: 58 20 23 30 09 09 3B 50  52 45 4C 4F 41 44 20 58  |X #0..;PRELOAD X|
00000770: 20 57 2F 20 30 0D 0D 09  53 45 43 09 09 3B 41 20  | W/ 0...SEC..;A |
00000780: 3D 20 4D 4F 44 36 34 28  4E 45 57 2D 4F 4C 44 29  |= MOD64(NEW-OLD)|
00000790: 0D 09 53 42 43 20 4F 4C  44 56 41 4C 55 45 0D 09  |..SBC OLDVALUE..|
000007A0: 41 4E 44 20 23 25 30 31  31 31 31 31 31 31 09 0D  |AND #%01111111..|
000007B0: 09 43 4D 50 20 23 25 30  31 30 30 30 30 30 30 09  |.CMP #%01000000.|
000007C0: 3B 49 46 20 41 20 3E 20  30 0D 09 42 43 53 20 35  |;IF A > 0..BCS 5|
000007D0: 30 24 0D 09 4C 53 52 20  41 09 09 3B 20 20 20 54  |0$..LSR A..;   T|
000007E0: 48 45 4E 20 41 20 3D 20  41 2F 32 0D 09 42 45 51  |HEN A = A/2..BEQ|
000007F0: 20 38 30 24 09 09 3B 20  20 20 20 20 20 49 46 20  | 80$..;      IF |
00000800: 41 20 3C 3E 20 30 0D 09  4C 44 59 20 4E 45 57 56  |A <> 0..LDY NEWV|
00000810: 41 4C 55 45 09 3B 20 20  20 20 20 20 20 20 20 54  |ALUE.;         T|
00000820: 48 45 4E 20 59 20 3D 20  4E 45 57 56 41 4C 55 45  |HEN Y = NEWVALUE|
00000830: 0D 09 52 54 53 09 09 3B  20 20 20 20 20 20 20 20  |..RTS..;        |
00000840: 20 20 20 20 20 20 52 45  54 55 52 4E 0D 0D 35 30  |      RETURN..50|
00000850: 24 09 4F 52 41 20 23 25  31 31 30 30 30 30 30 30  |$.ORA #%11000000|
00000860: 09 3B 20 20 20 45 4C 53  45 20 4F 52 2D 49 4E 20  |.;   ELSE OR-IN |
00000870: 48 49 47 48 20 4F 52 44  45 52 20 42 49 54 53 0D  |HIGH ORDER BITS.|
00000880: 09 43 4D 50 20 23 24 46  46 09 3B 20 20 20 20 20  |.CMP #$FF.;     |
00000890: 20 49 46 20 41 20 3C 3E  20 2D 31 0D 09 42 45 51  | IF A <> -1..BEQ|
000008A0: 20 38 30 24 0D 09 53 45  43 09 09 3B 20 20 20 20  | 80$..SEC..;    |
000008B0: 20 20 20 20 20 54 48 45  4E 20 41 20 3D 20 41 2F  |     THEN A = A/|
000008C0: 32 0D 09 52 4F 52 20 41  0D 09 4C 44 58 20 23 24  |2..ROR A..LDX #$|
000008D0: 46 46 09 3B 20 20 20 20  20 20 20 20 20 20 20 20  |FF.;            |
000008E0: 20 20 58 20 3D 20 2D 31  0D 09 4C 44 59 20 4E 45  |  X = -1..LDY NE|
000008F0: 57 56 41 4C 55 45 09 3B  20 20 20 20 20 20 20 20  |WVALUE.;        |
00000900: 20 20 20 20 20 20 59 20  3D 20 4E 45 57 56 41 4C  |      Y = NEWVAL|
00000910: 55 45 0D 09 52 54 53 09  09 3B 20 20 20 20 20 20  |UE..RTS..;      |
00000920: 20 20 20 20 20 20 20 20  52 45 54 55 52 4E 0D 0D  |        RETURN..|
00000930: 38 30 24 09 4C 44 41 20  23 30 09 09 3B 41 20 3D  |80$.LDA #0..;A =|
00000940: 20 30 0D 09 52 54 53 09  09 3B 52 45 54 55 52 4E  | 0..RTS..;RETURN|
00000950: 20 57 2F 20 59 20 3D 20  4F 4C 44 20 56 41 4C 55  | W/ Y = OLD VALU|
00000960: 45 0D 0D 0D 0D 53 45 54  50 4F 54 09 4C 44 58 20  |E....SETPOT.LDX |
00000970: 43 49 41 09 09 3B 53 41  56 45 20 4B 45 59 42 4F  |CIA..;SAVE KEYBO|
00000980: 41 52 44 20 4C 49 4E 45  53 0D 09 53 54 58 20 43  |ARD LINES..STX C|
00000990: 49 41 53 41 56 45 0D 0D  09 53 54 41 20 43 49 41  |IASAVE...STA CIA|
000009A0: 09 09 3B 43 4F 4E 4E 45  43 54 20 41 50 50 52 4F  |..;CONNECT APPRO|
000009B0: 50 52 49 41 54 45 20 50  4F 52 54 20 54 4F 20 53  |PRIATE PORT TO S|
000009C0: 49 44 0D 0D 09 4C 44 58  20 23 34 0D 09 4C 44 59  |ID...LDX #4..LDY|
000009D0: 20 23 24 43 37 09 3B 44  45 4C 41 59 20 34 4D 53  | #$C7.;DELAY 4MS|
000009E0: 20 54 4F 20 4C 45 54 20  4C 49 4E 45 53 20 53 45  | TO LET LINES SE|
000009F0: 54 54 4C 45 20 26 20 47  45 54 20 53 59 4E 43 2D  |TTLE & GET SYNC-|
00000A00: 45 44 0D 31 30 24 09 44  45 59 20 0D 09 42 4E 45  |ED.10$.DEY ..BNE|
00000A10: 20 31 30 24 0D 09 44 45  58 0D 09 42 4E 45 20 31  | 10$..DEX..BNE 1|
00000A20: 30 24 0D 09 52 54 53 0D  0D 09 2E 45 4E 44 0D     |0$..RTS....END. |
;.1351 PROPORTIONAL MOUSE DRIVER FOR THE
 C64.;.;.COMMODORE BUSINESS MACHINES, IN
C.   27OCT86.;..BY HEDLEY DAVIS AND FRED
 BOWEN..IIRQ.= $0314.VIC.= $D000.SID.= $
D400.CIA.= $DC00.CIA.DDR.= $DC02.POTX.= 
SID+$19.POTY.= SID+$1A..XPOS.= VIC+$00.;
X POSITION (LSB).YPOS.= VIC+$01.;Y POSIT
ION.XPOSMSB.= VIC+$10.;X POSITION (MSB).
..*=$C0F0..IIRQ2..*=*+2.OPOTX..*=*+1.OPO
TY..*=*+1.NEWVALUE.*=*+1.OLDVALUE.*=*+1.
CIASAVE..*=*+1....* = $C000...JMP INSTAL
L.1.;INSTALL MOUSE IN PORT 1..JMP INSTAL
L.2.;INSTALL MOUSE IN PORT 2..JMP REMOVE
.;REMOVE MOUSE WEDGE...INSTALL.1.LDX #0.
.;PORT 1 MOUSE....BYTE $2C..INSTALL.2.LD
X #2..;PORT 2 MOUSE...LDA IIRQ+1.;INSTAL
L IRQ WEDGE..CMP #>MIRQ.1..BEQ 90$..;...
BRANCH IF ALREADY INSTALLED!..PHP..SEI..
.LDA IIRQ.;SAVE CURRENT IRQ INDIRECT FOR
 OUR EXIT..STA IIRQ2..LDA IIRQ+1..STA II
RQ2+1...LDA PORT,X.;POINT IRQ INDIRECT T
O MOUSE DRIVER..STA IIRQ..LDA PORT+1,X..
STA IIRQ+1..PLP.90$.RTS..PORT..WORD MIRQ
.1...WORD MIRQ.2...REMOVE.LDA IIRQ+1.;RE
MOVE IRQ WEDGE..CMP #>MIRQ.1..BNE 90$..;
...BRANCH IF ALREADY REMOVED!..PHP..SEI.
.LDA IIRQ2.;RESTORE SAVED INDIRECT..STA 
IIRQ..LDA IIRQ2+1..STA IIRQ+1..PLP.90$.R
TS....MIRQ.2.LDA #$80.;PORT2 MOUSE SCAN.
..BYTE $2C..MIRQ.1.LDA #$40.;PORT1 MOUSE
 SCAN...JSR SETPOT.;CONFIGURE CIA PER .A
...LDA POTX.;GET DELTA VALUES FOR X..LDY
 OPOTX..JSR MOVCHK..STY OPOTX...CLC..;MO
DIFY LOW ORDER X POSITION..ADC XPOS..STA
 XPOS..TXA..ADC #$00..AND #%00000001..EO
R XPOSMSB..STA XPOSMSB...LDA POTY.;GET D
ELTA VALUE FOR Y..LDY OPOTY..JSR MOVCHK.
.STY OPOTY...SEC..;MODIFY Y POSITION (DE
CREASE Y FOR INCREASE IN POT)..EOR #$FF.
.ADC YPOS..STA YPOS...LDX CIASAVE.;RESTO
RE KEYBOARD..STA CIA..90$.JMP (IIRQ2).;C
ONTINUE W/ IRQ OPERATION....; MOVCHK.;.E
NTRY.Y = OLD VALUE OF POT REGISTER.;..A 
= CURRRENT VALUE OF POT REGISTER.;.EXIT.
Y = VALUE TO USE FOR OLD VALUE.;..X,A = 
DELTA VALUE FOR POSITION.;..MOVCHK.STY O
LDVALUE.;SAVE OLD & NEW VALUES..STA NEWV
ALUE..LDX #0..;PRELOAD X W/ 0...SEC..;A 
= MOD64(NEW-OLD)..SBC OLDVALUE..AND #%01
111111...CMP #%01000000.;IF A > 0..BCS 5
0$..LSR A..;   THEN A = A/2..BEQ 80$..; 
     IF A <> 0..LDY NEWVALUE.;         T
HEN Y = NEWVALUE..RTS..;              RE
TURN..50$.ORA #%11000000.;   ELSE OR-IN 
HIGH ORDER BITS..CMP #$FF.;      IF A <>
 -1..BEQ 80$..SEC..;         THEN A = A/
2..ROR A..LDX #$FF.;              X = -1
..LDY NEWVALUE.;              Y = NEWVAL
UE..RTS..;              RETURN..80$.LDA 
#0..;A = 0..RTS..;RETURN W/ Y = OLD VALU
E....SETPOT.LDX CIA..;SAVE KEYBOARD LINE
S..STX CIASAVE...STA CIA..;CONNECT APPRO
PRIATE PORT TO SID...LDX #4..LDY #$C7.;D
ELAY 4MS TO LET LINES SETTLE & GET SYNC-
ED.10$.DEY ..BNE 10$..DEX..BNE 10$..RTS.
...END.
C64 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL