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 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL