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

M1351.128.SRC

FILE INFORMATION

FILENAME(S): M1351.128.SRC

FILE TYPE(S): SEQ

FILE SIZE: 2.8K

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

APPEARS ON: 6 disk(s)

FILE HASH

52250e7961bd3d622e91d5fa8298497bfb2866ae3a86df1dc6f0132a9a9df5e9

FOUND ON DISKS (6 DISKS)

DISK TITLE FILENAME FILE TYPE COLLECTION TRACK SECTOR ACTIONS
1351 MOUSE DEMOS M1351.128.SRC SEQ DuncanTwain, Sailor, Pbv, Treasure Chest - Klaus Der Suhler 20 5 DOWNLOAD FILE
DISK 50 SEITE A M1351.128.SRC SEQ Treasure Chest - Klaus Der Suhler 20 5 DOWNLOAD FILE
1351 MOUSE DEMOS M1351.128.SRC SEQ BrainSkull, Thomas Marosits 20 5 DOWNLOAD FILE
1351 MOUSE DEMO M1351.128.SRC SEQ Sailor, Pbv 16 4 DOWNLOAD FILE
1351 MOUSE DEMOS M1351.128.SRC SEQ DuncanTwain 20 5 DOWNLOAD FILE
1351 MOUSE DEMOS M1351.128.SRC SEQ DuncanTwain 20 5 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 31 32 38 0D 3B 0D  | FOR THE C128.;.|
00000030: 3B 09 43 4F 4D 4D 4F 44  4F 52 45 20 42 55 53 49  |;.COMMODORE BUSI|
00000040: 4E 45 53 53 20 4D 41 43  48 49 4E 45 53 2C 20 49  |NESS MACHINES, I|
00000050: 4E 43 2E 20 20 20 32 37  4F 43 54 38 36 0D 3B 09  |NC.   27OCT86.;.|
00000060: 09 42 59 20 48 45 44 4C  45 59 20 44 41 56 49 53  |.BY HEDLEY DAVIS|
00000070: 20 41 4E 44 20 46 52 45  44 20 42 4F 57 45 4E 0D  | AND FRED BOWEN.|
00000080: 0D 49 49 52 51 09 3D 20  24 30 33 31 34 0D 56 49  |.IIRQ.= $0314.VI|
00000090: 43 09 3D 20 24 44 30 30  30 0D 53 49 44 09 3D 20  |C.= $D000.SID.= |
000000A0: 24 44 34 30 30 0D 43 49  41 09 3D 20 24 44 43 30  |$D400.CIA.= $DC0|
000000B0: 30 0D 43 49 41 2E 44 44  52 09 3D 20 24 44 43 30  |0.CIA.DDR.= $DC0|
000000C0: 32 0D 50 4F 54 58 09 3D  20 53 49 44 2B 24 31 39  |2.POTX.= SID+$19|
000000D0: 0D 50 4F 54 59 09 3D 20  53 49 44 2B 24 31 41 0D  |.POTY.= SID+$1A.|
000000E0: 0D 41 43 54 49 56 45 09  3D 20 24 31 31 37 45 09  |.ACTIVE.= $117E.|
000000F0: 09 3B 42 41 53 49 43 37  2E 30 20 41 43 54 49 56  |.;BASIC7.0 ACTIV|
00000100: 45 20 53 50 52 49 54 45  20 46 4C 41 47 20 28 30  |E SPRITE FLAG (0|
00000110: 3D 49 4E 41 43 54 49 56  45 29 0D 0D 56 49 43 44  |=INACTIVE)..VICD|
00000120: 41 54 41 09 3D 20 24 31  31 44 36 09 09 3B 42 41  |ATA.= $11D6..;BA|
00000130: 53 49 43 37 2E 30 20 43  4F 50 59 20 4F 46 20 56  |SIC7.0 COPY OF V|
00000140: 49 43 20 52 45 47 49 53  54 45 52 20 49 4D 41 47  |IC REGISTER IMAG|
00000150: 45 0D 58 50 4F 53 09 3D  20 56 49 43 44 41 54 41  |E.XPOS.= VICDATA|
00000160: 2B 24 30 30 09 3B 58 20  50 4F 53 49 54 49 4F 4E  |+$00.;X POSITION|
00000170: 20 28 4C 53 42 29 0D 59  50 4F 53 09 3D 20 56 49  | (LSB).YPOS.= VI|
00000180: 43 44 41 54 41 2B 24 30  31 09 3B 59 20 50 4F 53  |CDATA+$01.;Y POS|
00000190: 49 54 49 4F 4E 0D 58 50  4F 53 4D 53 42 09 3D 20  |ITION.XPOSMSB.= |
000001A0: 56 49 43 44 41 54 41 2B  24 31 30 09 3B 58 20 50  |VICDATA+$10.;X P|
000001B0: 4F 53 49 54 49 4F 4E 20  28 4D 53 42 29 0D 0D 09  |OSITION (MSB)...|
000001C0: 2A 3D 24 31 38 46 30 0D  0D 49 49 52 51 32 09 09  |*=$18F0..IIRQ2..|
000001D0: 2A 3D 2A 2B 32 0D 4F 50  4F 54 58 09 09 2A 3D 2A  |*=*+2.OPOTX..*=*|
000001E0: 2B 31 0D 4F 50 4F 54 59  09 09 2A 3D 2A 2B 31 0D  |+1.OPOTY..*=*+1.|
000001F0: 4E 45 57 56 41 4C 55 45  09 2A 3D 2A 2B 31 0D 4F  |NEWVALUE.*=*+1.O|
00000200: 4C 44 56 41 4C 55 45 09  2A 3D 2A 2B 31 0D 43 49  |LDVALUE.*=*+1.CI|
00000210: 41 53 41 56 45 09 09 2A  3D 2A 2B 31 0D 0D 0D 09  |ASAVE..*=*+1....|
00000220: 2A 20 3D 20 24 31 38 30  30 0D 0D 09 4A 4D 50 20  |* = $1800...JMP |
00000230: 49 4E 53 54 41 4C 4C 2E  31 09 3B 49 4E 53 54 41  |INSTALL.1.;INSTA|
00000240: 4C 4C 20 4D 4F 55 53 45  20 49 4E 20 50 4F 52 54  |LL MOUSE IN PORT|
00000250: 20 31 0D 09 4A 4D 50 20  49 4E 53 54 41 4C 4C 2E  | 1..JMP INSTALL.|
00000260: 32 09 3B 49 4E 53 54 41  4C 4C 20 4D 4F 55 53 45  |2.;INSTALL MOUSE|
00000270: 20 49 4E 20 50 4F 52 54  20 32 0D 09 4A 4D 50 20  | IN PORT 2..JMP |
00000280: 52 45 4D 4F 56 45 09 3B  52 45 4D 4F 56 45 20 4D  |REMOVE.;REMOVE M|
00000290: 4F 55 53 45 20 57 45 44  47 45 0D 0D 0D 49 4E 53  |OUSE WEDGE...INS|
000002A0: 54 41 4C 4C 2E 31 09 4C  44 58 20 23 30 09 09 3B  |TALL.1.LDX #0..;|
000002B0: 50 4F 52 54 20 31 20 4D  4F 55 53 45 0D 09 09 2E  |PORT 1 MOUSE....|
000002C0: 42 59 54 45 20 24 32 43  0D 0D 49 4E 53 54 41 4C  |BYTE $2C..INSTAL|
000002D0: 4C 2E 32 09 4C 44 58 20  23 32 09 09 3B 50 4F 52  |L.2.LDX #2..;POR|
000002E0: 54 20 32 20 4D 4F 55 53  45 0D 0D 09 4C 44 41 20  |T 2 MOUSE...LDA |
000002F0: 49 49 52 51 2B 31 09 3B  49 4E 53 54 41 4C 4C 20  |IIRQ+1.;INSTALL |
00000300: 49 52 51 20 57 45 44 47  45 0D 09 43 4D 50 20 23  |IRQ WEDGE..CMP #|
00000310: 3E 4D 49 52 51 2E 31 0D  09 42 45 51 20 39 30 24  |>MIRQ.1..BEQ 90$|
00000320: 09 09 3B 2E 2E 2E 42 52  41 4E 43 48 20 49 46 20  |..;...BRANCH IF |
00000330: 41 4C 52 45 41 44 59 20  49 4E 53 54 41 4C 4C 45  |ALREADY INSTALLE|
00000340: 44 21 0D 09 50 48 50 0D  09 53 45 49 0D 0D 09 4C  |D!..PHP..SEI...L|
00000350: 44 41 20 49 49 52 51 09  3B 53 41 56 45 20 43 55  |DA IIRQ.;SAVE CU|
00000360: 52 52 45 4E 54 20 49 52  51 20 49 4E 44 49 52 45  |RRENT IRQ INDIRE|
00000370: 43 54 20 46 4F 52 20 4F  55 52 20 45 58 49 54 0D  |CT FOR OUR EXIT.|
00000380: 09 53 54 41 20 49 49 52  51 32 0D 09 4C 44 41 20  |.STA IIRQ2..LDA |
00000390: 49 49 52 51 2B 31 0D 09  53 54 41 20 49 49 52 51  |IIRQ+1..STA IIRQ|
000003A0: 32 2B 31 0D 0D 09 4C 44  41 20 50 4F 52 54 2C 58  |2+1...LDA PORT,X|
000003B0: 09 3B 50 4F 49 4E 54 20  49 52 51 20 49 4E 44 49  |.;POINT IRQ INDI|
000003C0: 52 45 43 54 20 54 4F 20  4D 4F 55 53 45 20 44 52  |RECT TO MOUSE DR|
000003D0: 49 56 45 52 0D 09 53 54  41 20 49 49 52 51 0D 09  |IVER..STA IIRQ..|
000003E0: 4C 44 41 20 50 4F 52 54  2B 31 2C 58 0D 09 53 54  |LDA PORT+1,X..ST|
000003F0: 41 20 49 49 52 51 2B 31  0D 09 50 4C 50 0D 39 30  |A IIRQ+1..PLP.90|
00000400: 24 09 52 54 53 0D 0D 50  4F 52 54 09 2E 57 4F 52  |$.RTS..PORT..WOR|
00000410: 44 20 4D 49 52 51 2E 31  0D 09 2E 57 4F 52 44 20  |D MIRQ.1...WORD |
00000420: 4D 49 52 51 2E 32 0D 0D  0D 52 45 4D 4F 56 45 09  |MIRQ.2...REMOVE.|
00000430: 4C 44 41 20 49 49 52 51  2B 31 09 3B 52 45 4D 4F  |LDA IIRQ+1.;REMO|
00000440: 56 45 20 49 52 51 20 57  45 44 47 45 0D 09 43 4D  |VE IRQ WEDGE..CM|
00000450: 50 20 23 3E 4D 49 52 51  2E 31 0D 09 42 4E 45 20  |P #>MIRQ.1..BNE |
00000460: 39 30 24 09 09 3B 2E 2E  2E 42 52 41 4E 43 48 20  |90$..;...BRANCH |
00000470: 49 46 20 41 4C 52 45 41  44 59 20 52 45 4D 4F 56  |IF ALREADY REMOV|
00000480: 45 44 21 0D 09 50 48 50  0D 09 53 45 49 0D 09 4C  |ED!..PHP..SEI..L|
00000490: 44 41 20 49 49 52 51 32  09 3B 52 45 53 54 4F 52  |DA IIRQ2.;RESTOR|
000004A0: 45 20 53 41 56 45 44 20  49 4E 44 49 52 45 43 54  |E SAVED INDIRECT|
000004B0: 0D 09 53 54 41 20 49 49  52 51 0D 09 4C 44 41 20  |..STA IIRQ..LDA |
000004C0: 49 49 52 51 32 2B 31 0D  09 53 54 41 20 49 49 52  |IIRQ2+1..STA IIR|
000004D0: 51 2B 31 0D 09 50 4C 50  0D 39 30 24 09 52 54 53  |Q+1..PLP.90$.RTS|
000004E0: 0D 0D 0D 0D 4D 49 52 51  2E 32 09 4C 44 41 20 23  |....MIRQ.2.LDA #|
000004F0: 24 38 30 09 3B 50 4F 52  54 32 20 4D 4F 55 53 45  |$80.;PORT2 MOUSE|
00000500: 20 53 43 41 4E 0D 09 2E  42 59 54 45 20 24 32 43  | SCAN...BYTE $2C|
00000510: 0D 0D 4D 49 52 51 2E 31  09 4C 44 41 20 23 24 34  |..MIRQ.1.LDA #$4|
00000520: 30 09 3B 50 4F 52 54 31  20 4D 4F 55 53 45 20 53  |0.;PORT1 MOUSE S|
00000530: 43 41 4E 0D 0D 09 4A 53  52 20 53 45 54 50 4F 54  |CAN...JSR SETPOT|
00000540: 09 3B 43 4F 4E 46 49 47  55 52 45 20 43 49 41 20  |.;CONFIGURE CIA |
00000550: 50 45 52 20 2E 41 0D 09  42 4E 45 20 39 30 24 09  |PER .A..BNE 90$.|
00000560: 09 3B 2E 2E 2E 4F 4F 50  53 2D 20 42 41 53 49 43  |.;...OOPS- BASIC|
00000570: 20 49 4E 20 43 4F 4E 54  52 4F 4C 0D 0D 09 4C 44  | IN CONTROL...LD|
00000580: 41 20 50 4F 54 58 09 3B  47 45 54 20 44 45 4C 54  |A POTX.;GET DELT|
00000590: 41 20 56 41 4C 55 45 53  20 46 4F 52 20 58 0D 09  |A VALUES FOR X..|
000005A0: 4C 44 59 20 4F 50 4F 54  58 0D 09 4A 53 52 20 4D  |LDY OPOTX..JSR M|
000005B0: 4F 56 43 48 4B 0D 09 53  54 59 20 4F 50 4F 54 58  |OVCHK..STY OPOTX|
000005C0: 0D 0D 09 43 4C 43 09 09  3B 4D 4F 44 49 46 59 20  |...CLC..;MODIFY |
000005D0: 4C 4F 57 20 4F 52 44 45  52 20 58 50 4F 53 49 54  |LOW ORDER XPOSIT|
000005E0: 49 4F 4E 0D 09 41 44 43  20 58 50 4F 53 0D 09 53  |ION..ADC XPOS..S|
000005F0: 54 41 20 58 50 4F 53 0D  09 54 58 41 0D 09 41 44  |TA XPOS..TXA..AD|
00000600: 43 20 23 24 30 30 0D 09  41 4E 44 20 23 25 30 30  |C #$00..AND #%00|
00000610: 30 30 30 30 30 31 0D 09  45 4F 52 20 58 50 4F 53  |000001..EOR XPOS|
00000620: 4D 53 42 0D 09 53 54 41  20 58 50 4F 53 4D 53 42  |MSB..STA XPOSMSB|
00000630: 0D 0D 09 4C 44 41 20 50  4F 54 59 09 3B 47 45 54  |...LDA POTY.;GET|
00000640: 20 44 45 4C 54 41 20 56  41 4C 55 45 20 46 4F 52  | DELTA VALUE FOR|
00000650: 20 59 0D 09 4C 44 59 20  4F 50 4F 54 59 0D 09 4A  | Y..LDY OPOTY..J|
00000660: 53 52 20 4D 4F 56 43 48  4B 0D 09 53 54 59 20 4F  |SR MOVCHK..STY O|
00000670: 50 4F 54 59 0D 0D 09 53  45 43 09 09 3B 4D 4F 44  |POTY...SEC..;MOD|
00000680: 49 46 59 20 59 20 50 4F  53 49 54 49 4F 4E 20 28  |IFY Y POSITION (|
00000690: 44 45 43 52 45 41 53 45  20 59 20 46 4F 52 20 49  |DECREASE Y FOR I|
000006A0: 4E 43 52 45 41 53 45 20  49 4E 20 50 4F 54 29 0D  |NCREASE IN POT).|
000006B0: 09 45 4F 52 20 23 24 46  46 0D 09 41 44 43 20 59  |.EOR #$FF..ADC Y|
000006C0: 50 4F 53 0D 09 53 54 41  20 59 50 4F 53 0D 0D 09  |POS..STA YPOS...|
000006D0: 4C 44 58 20 43 49 41 53  41 56 45 09 3B 52 45 53  |LDX CIASAVE.;RES|
000006E0: 54 4F 52 45 20 4B 45 59  42 4F 41 52 44 0D 09 53  |TORE KEYBOARD..S|
000006F0: 54 41 20 43 49 41 0D 0D  39 30 24 09 4A 4D 50 20  |TA CIA..90$.JMP |
00000700: 28 49 49 52 51 32 29 09  3B 43 4F 4E 54 49 4E 55  |(IIRQ2).;CONTINU|
00000710: 45 20 57 2F 20 49 52 51  20 4F 50 45 52 41 54 49  |E W/ IRQ OPERATI|
00000720: 4F 4E 0D 0D 0D 0D 3B 20  4D 4F 56 43 48 4B 0D 3B  |ON....; MOVCHK.;|
00000730: 09 45 4E 54 52 59 09 59  20 3D 20 4F 4C 44 20 56  |.ENTRY.Y = OLD V|
00000740: 41 4C 55 45 20 4F 46 20  50 4F 54 20 52 45 47 49  |ALUE OF POT REGI|
00000750: 53 54 45 52 0D 3B 09 09  41 20 3D 20 43 55 52 52  |STER.;..A = CURR|
00000760: 52 45 4E 54 20 56 41 4C  55 45 20 4F 46 20 50 4F  |RENT VALUE OF PO|
00000770: 54 20 52 45 47 49 53 54  45 52 0D 3B 09 45 58 49  |T REGISTER.;.EXI|
00000780: 54 09 59 20 3D 20 56 41  4C 55 45 20 54 4F 20 55  |T.Y = VALUE TO U|
00000790: 53 45 20 46 4F 52 20 4F  4C 44 20 56 41 4C 55 45  |SE FOR OLD VALUE|
000007A0: 0D 3B 09 09 58 2C 41 20  3D 20 44 45 4C 54 41 20  |.;..X,A = DELTA |
000007B0: 56 41 4C 55 45 20 46 4F  52 20 50 4F 53 49 54 49  |VALUE FOR POSITI|
000007C0: 4F 4E 0D 3B 0D 0D 4D 4F  56 43 48 4B 09 53 54 59  |ON.;..MOVCHK.STY|
000007D0: 20 4F 4C 44 56 41 4C 55  45 09 3B 53 41 56 45 20  | OLDVALUE.;SAVE |
000007E0: 4F 4C 44 20 26 20 4E 45  57 20 56 41 4C 55 45 53  |OLD & NEW VALUES|
000007F0: 0D 09 53 54 41 20 4E 45  57 56 41 4C 55 45 0D 09  |..STA NEWVALUE..|
00000800: 4C 44 58 20 23 30 09 09  3B 50 52 45 4C 4F 41 44  |LDX #0..;PRELOAD|
00000810: 20 58 20 57 2F 20 30 0D  0D 09 53 45 43 09 09 3B  | X W/ 0...SEC..;|
00000820: 41 20 3D 20 4D 4F 44 36  34 28 4E 45 57 2D 4F 4C  |A = MOD64(NEW-OL|
00000830: 44 29 0D 09 53 42 43 20  4F 4C 44 56 41 4C 55 45  |D)..SBC OLDVALUE|
00000840: 0D 09 41 4E 44 20 23 25  30 31 31 31 31 31 31 31  |..AND #%01111111|
00000850: 09 0D 09 43 4D 50 20 23  25 30 31 30 30 30 30 30  |...CMP #%0100000|
00000860: 30 09 3B 49 46 20 41 20  3E 20 30 0D 09 42 43 53  |0.;IF A > 0..BCS|
00000870: 20 35 30 24 0D 09 4C 53  52 20 41 09 09 3B 20 20  | 50$..LSR A..;  |
00000880: 20 54 48 45 4E 20 41 20  3D 20 41 2F 32 0D 09 42  | THEN A = A/2..B|
00000890: 45 51 20 38 30 24 09 09  3B 20 20 20 20 20 20 49  |EQ 80$..;      I|
000008A0: 46 20 41 20 3C 3E 20 30  0D 09 4C 44 59 20 4E 45  |F A <> 0..LDY NE|
000008B0: 57 56 41 4C 55 45 09 3B  20 20 20 20 20 20 20 20  |WVALUE.;        |
000008C0: 20 54 48 45 4E 20 59 20  3D 20 4E 45 57 56 41 4C  | THEN Y = NEWVAL|
000008D0: 55 45 0D 09 52 54 53 09  09 3B 20 20 20 20 20 20  |UE..RTS..;      |
000008E0: 20 20 20 20 20 20 20 20  52 45 54 55 52 4E 0D 0D  |        RETURN..|
000008F0: 35 30 24 09 4F 52 41 20  23 25 31 31 30 30 30 30  |50$.ORA #%110000|
00000900: 30 30 09 3B 20 20 20 45  4C 53 45 20 4F 52 2D 49  |00.;   ELSE OR-I|
00000910: 4E 20 48 49 47 48 20 4F  52 44 45 52 20 42 49 54  |N HIGH ORDER BIT|
00000920: 53 0D 09 43 4D 50 20 23  24 46 46 09 3B 20 20 20  |S..CMP #$FF.;   |
00000930: 20 20 20 49 46 20 41 20  3C 3E 20 2D 31 0D 09 42  |   IF A <> -1..B|
00000940: 45 51 20 38 30 24 0D 09  53 45 43 09 09 3B 20 20  |EQ 80$..SEC..;  |
00000950: 20 20 20 20 20 20 20 54  48 45 4E 20 41 20 3D 20  |       THEN A = |
00000960: 41 2F 32 0D 09 52 4F 52  20 41 0D 09 4C 44 58 20  |A/2..ROR A..LDX |
00000970: 23 24 46 46 09 3B 20 20  20 20 20 20 20 20 20 20  |#$FF.;          |
00000980: 20 20 20 20 58 20 3D 20  2D 31 0D 09 4C 44 59 20  |    X = -1..LDY |
00000990: 4E 45 57 56 41 4C 55 45  09 3B 20 20 20 20 20 20  |NEWVALUE.;      |
000009A0: 20 20 20 20 20 20 20 20  59 20 3D 20 4E 45 57 56  |        Y = NEWV|
000009B0: 41 4C 55 45 0D 09 52 54  53 09 09 3B 20 20 20 20  |ALUE..RTS..;    |
000009C0: 20 20 20 20 20 20 20 20  20 20 52 45 54 55 52 4E  |          RETURN|
000009D0: 0D 0D 38 30 24 09 4C 44  41 20 23 30 09 09 3B 41  |..80$.LDA #0..;A|
000009E0: 20 3D 20 30 0D 09 52 54  53 09 09 3B 52 45 54 55  | = 0..RTS..;RETU|
000009F0: 52 4E 20 57 2F 20 59 20  3D 20 4F 4C 44 20 56 41  |RN W/ Y = OLD VA|
00000A00: 4C 55 45 0D 0D 0D 0D 53  45 54 50 4F 54 09 4C 44  |LUE....SETPOT.LD|
00000A10: 58 20 41 43 54 49 56 45  09 3B 49 53 20 42 41 53  |X ACTIVE.;IS BAS|
00000A20: 49 43 20 4D 4F 56 49 4E  47 20 53 50 52 49 54 45  |IC MOVING SPRITE|
00000A30: 20 31 3F 0D 09 42 4E 45  20 32 30 24 09 09 3B 2E  | 1?..BNE 20$..;.|
00000A40: 2E 2E 59 45 53 2C 20 57  45 27 4C 4C 20 4C 45 41  |..YES, WE'LL LEA|
00000A50: 56 45 20 49 54 20 41 4C  4F 4E 45 20 28 57 48 59  |VE IT ALONE (WHY|
00000A60: 20 4E 4F 54 3F 29 0D 0D  09 4C 44 58 20 43 49 41  | NOT?)...LDX CIA|
00000A70: 09 09 3B 53 41 56 45 20  4B 45 59 42 4F 41 52 44  |..;SAVE KEYBOARD|
00000A80: 20 4C 49 4E 45 53 0D 09  53 54 58 20 43 49 41 53  | LINES..STX CIAS|
00000A90: 41 56 45 0D 0D 09 53 54  41 20 43 49 41 09 09 3B  |AVE...STA CIA..;|
00000AA0: 43 4F 4E 4E 45 43 54 20  41 50 50 52 4F 50 52 49  |CONNECT APPROPRI|
00000AB0: 41 54 45 20 50 4F 52 54  20 54 4F 20 53 49 44 0D  |ATE PORT TO SID.|
00000AC0: 0D 09 4C 44 58 20 23 34  0D 09 4C 44 59 20 23 24  |..LDX #4..LDY #$|
00000AD0: 43 37 09 3B 44 45 4C 41  59 20 34 4D 53 20 54 4F  |C7.;DELAY 4MS TO|
00000AE0: 20 4C 45 54 20 4C 49 4E  45 53 20 53 45 54 54 4C  | LET LINES SETTL|
00000AF0: 45 20 26 20 47 45 54 20  53 59 4E 43 2D 45 44 0D  |E & GET SYNC-ED.|
00000B00: 31 30 24 09 44 45 59 20  0D 09 42 4E 45 20 31 30  |10$.DEY ..BNE 10|
00000B10: 24 0D 09 44 45 58 0D 09  42 4E 45 20 31 30 24 0D  |$..DEX..BNE 10$.|
00000B20: 32 30 24 09 52 54 53 0D  0D 09 2E 45 4E 44 0D     |20$.RTS....END. |
;.1351 PROPORTIONAL MOUSE DRIVER FOR THE
 C128.;.;.COMMODORE BUSINESS MACHINES, I
NC.   27OCT86.;..BY HEDLEY DAVIS AND FRE
D BOWEN..IIRQ.= $0314.VIC.= $D000.SID.= 
$D400.CIA.= $DC00.CIA.DDR.= $DC02.POTX.=
 SID+$19.POTY.= SID+$1A..ACTIVE.= $117E.
.;BASIC7.0 ACTIVE SPRITE FLAG (0=INACTIV
E)..VICDATA.= $11D6..;BASIC7.0 COPY OF V
IC REGISTER IMAGE.XPOS.= VICDATA+$00.;X 
POSITION (LSB).YPOS.= VICDATA+$01.;Y POS
ITION.XPOSMSB.= VICDATA+$10.;X POSITION 
(MSB)...*=$18F0..IIRQ2..*=*+2.OPOTX..*=*
+1.OPOTY..*=*+1.NEWVALUE.*=*+1.OLDVALUE.
*=*+1.CIASAVE..*=*+1....* = $1800...JMP 
INSTALL.1.;INSTALL MOUSE IN PORT 1..JMP 
INSTALL.2.;INSTALL MOUSE IN PORT 2..JMP 
REMOVE.;REMOVE MOUSE WEDGE...INSTALL.1.L
DX #0..;PORT 1 MOUSE....BYTE $2C..INSTAL
L.2.LDX #2..;PORT 2 MOUSE...LDA IIRQ+1.;
INSTALL IRQ WEDGE..CMP #>MIRQ.1..BEQ 90$
..;...BRANCH IF ALREADY INSTALLED!..PHP.
.SEI...LDA IIRQ.;SAVE CURRENT IRQ INDIRE
CT FOR OUR EXIT..STA IIRQ2..LDA IIRQ+1..
STA IIRQ2+1...LDA PORT,X.;POINT IRQ INDI
RECT TO MOUSE DRIVER..STA IIRQ..LDA PORT
+1,X..STA IIRQ+1..PLP.90$.RTS..PORT..WOR
D MIRQ.1...WORD MIRQ.2...REMOVE.LDA IIRQ
+1.;REMOVE 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$.RTS....MIRQ.2.LDA #$80.;PORT2 MOUSE
 SCAN...BYTE $2C..MIRQ.1.LDA #$40.;PORT1
 MOUSE SCAN...JSR SETPOT.;CONFIGURE CIA 
PER .A..BNE 90$..;...OOPS- BASIC IN CONT
ROL...LDA POTX.;GET DELTA VALUES FOR X..
LDY OPOTX..JSR MOVCHK..STY OPOTX...CLC..
;MODIFY LOW ORDER XPOSITION..ADC XPOS..S
TA XPOS..TXA..ADC #$00..AND #%00000001..
EOR XPOSMSB..STA XPOSMSB...LDA POTY.;GET
 DELTA VALUE FOR Y..LDY OPOTY..JSR MOVCH
K..STY OPOTY...SEC..;MODIFY Y POSITION (
DECREASE Y FOR INCREASE IN POT)..EOR #$F
F..ADC YPOS..STA YPOS...LDX CIASAVE.;RES
TORE KEYBOARD..STA CIA..90$.JMP (IIRQ2).
;CONTINUE W/ IRQ OPERATION....; MOVCHK.;
.ENTRY.Y = OLD VALUE OF POT REGISTER.;..
A = CURRRENT VALUE OF POT REGISTER.;.EXI
T.Y = VALUE TO USE FOR OLD VALUE.;..X,A 
= DELTA VALUE FOR POSITION.;..MOVCHK.STY
 OLDVALUE.;SAVE OLD & NEW VALUES..STA NE
WVALUE..LDX #0..;PRELOAD X W/ 0...SEC..;
A = MOD64(NEW-OLD)..SBC OLDVALUE..AND #%
01111111...CMP #%01000000.;IF A > 0..BCS
 50$..LSR A..;   THEN A = A/2..BEQ 80$..
;      IF A <> 0..LDY NEWVALUE.;        
 THEN Y = NEWVALUE..RTS..;              
RETURN..50$.ORA #%11000000.;   ELSE OR-I
N HIGH ORDER BITS..CMP #$FF.;      IF A 
<> -1..BEQ 80$..SEC..;         THEN A = 
A/2..ROR A..LDX #$FF.;              X = 
-1..LDY NEWVALUE.;              Y = NEWV
ALUE..RTS..;              RETURN..80$.LD
A #0..;A = 0..RTS..;RETURN W/ Y = OLD VA
LUE....SETPOT.LDX ACTIVE.;IS BASIC MOVIN
G SPRITE 1?..BNE 20$..;...YES, WE'LL LEA
VE IT ALONE (WHY NOT?)...LDX CIA..;SAVE 
KEYBOARD LINES..STX CIASAVE...STA CIA..;
CONNECT APPROPRIATE PORT TO SID...LDX #4
..LDY #$C7.;DELAY 4MS TO LET LINES SETTL
E & GET SYNC-ED.10$.DEY ..BNE 10$..DEX..
BNE 10$.20$.RTS....END.
C64 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL