KKKK d230:420:ž61443xBA²Ñ("0A04"):— BA,1°Â(BA)M‚þ 1,1,2:þ 1,100,100qŒÞ1,1:à 1,8,1,"1351 MOUSE PAINT"¤–ë:¡ùA$:‹A$²" "§Þ1,1:à 1,8,1,"1351 MOUSE PAINT"º ‹ Ï(1)³±0 § 180Àªìô´X²Î(1,0)«25:Y²Î(1,1)«51:X²«X¬(X±0):Y²«Y¬(Y±0)¾æ X,YCø¸ÜŽø¸ÜŽþÿ€ÿÀ?ÿà?ÿàÿðÿðÿð?ÿà?ÿàÿÀÿ€þ$8|þÿÿ€ÿÀÿàÿð?ÿøÿüÿÿþÿ€ÿð?ÿüÿþÿþÿþ?ÿüÿðÿ€…¸ÜŽþÿ€ÿÀ?ÿà?ÿàÿðÿðÿð?ÿà?ÿàÿÀÿ€þ$8|þÿÿ€ÿÀÿàÿð?ÿøÿüÿÿþÿ€ÿð?ÿüÿþÿþÿþ?ÿüÿðÿ€F0,18,8C,F5,18%hƒ8D,F4,18,A2,00,38,ED,F5Brƒ18,29,7F,C9,40,B0,07,4A_|ƒF0,12,AC,F4,18,60,09,C0|†ƒC9,FF,F0,08,38,6A,A2,FF™ƒAC,F4,18,60,A9,00,60,00¶š-----------------------Þ¤X²0¤63:‡A$:—Ñ("0E00")ªX,Ñ(A$):‚X:Žû®ƒF8,00,00,90,00,00,B8: C²1«Ð(2):å C,X,YFÈë:X²Î(1,0)«25:Y²Î(1,1)«51:X²«X¬(X±0):Y²«Y¬(Y±0)dÒå C ¤ X,Y:ì ý Ï(1)³±0 : ŽˆÜ------------------------------¬æX²0¤135:‡A$:—6144ªX,Ñ(A$):‚X:ŽÉðƒAD,15,03,C9,18,F0,19,08æúƒ78,AD,14,03,8D,F0,18,ADƒ15,03,8D,F1,18,A$?ÿø?ÿø?ÿø?ÿø?ÿø?ÿø?ÿø?ÿø?ÿø?ÿø?ÿø?ÿø?ÿø ?ÿü?ÿü?ÿü?ÿü?ÿü?ÿü?ÿü?ÿüD8|þÿÿ€ÿÀÿàÿðÿàÿÀÿ€ÿþ|8 888888?ÿø?ÿø888888Ó,00 ¸ƒ00,DC,00,00,8E,00,00,075 ƒ00,00,02,00,00,00,00,00R ̃00,00,00,00,00,00,00,00o Öƒ00,00,00,00,00,00,00,00Œ àƒ00,00,00,00,00,00,00,00© êƒ00,00,00,00,00,00,00,00Æ ôƒ00,00,00,00,00,00,00,003ëTƒ18,38,49,FF,6D,D7,11,8D^ƒD7,11,6C,9,21,8D ƒ14,03,A9,18,8D,15,03,28=ƒ60,D8,AD,7E,11,D0,33,ADZ"ƒ19,D4,AC,F2,18,20,5D,18w,ƒ8C,F2,18,18,6D,D6,11,8D”6ƒD6,11,8A,69,00,29,01,4D±@ƒE6,11,8D,E6,11,AD,1A,D4ÎJƒAC,F3,18,20,5D,18,8C,F3ëTƒ18,38,49,FF,6D,D7,11,8D^ƒD7,11,6C, % ™"PLEASE WAIT, READING DATA..."3d140:330knV²13¬4096:—Vª21,1:—Vª39,1:—Vª0,100:—Vª1,100:—Vª16,0…x—2040,56:ž12¬4096ª256‹‚€±ŒX²0¤129:‡A$:430:—49408ªX,Y:‚X:ŽÎ–ƒAD,15,03,C9,C1,F0,19,08ë ƒ78,AD,14,03,8D,00,C0,ADªƒ15,03,8D,01,C ) ‹ Z²0 § Z²Zª1: “"MOUSE.POINTER",8,1O‹ Z²1 § Z²Zª1: “"MOUSE64.BIN",8,1‡V²13¬4096:—Vª21,1:—Vª39,1:—Vª0,100:—Vª1,100:—Vª16,0¡(—2040,56:ž12¬4096ª256ª-™"“"¹2X²Â(53248)Ñ7‹Â(53264)²1§X²Xª255à<Y²Â(53249)òFA²µ((X«24)­8) PB²µ((Y« ) ‹ Z²0 § Z²Zª1: “"MOUSE.POINTER",8,1O‹ Z²1 § Z²Zª1: “"MOUSE64.BIN",8,1‡V²13¬4096:—Vª21,1:—Vª39,1:—Vª0,100:—Vª1,100:—Vª16,0¡(—2040,56:ž12¬4096ª256ª-™"“"¹2X²Â(53248)Ñ7‹Â(53264)²1§X²Xª255à<Y²Â(53249)òFA²µ((X«24)­8) PB²µ((Y«@ DSAVE"@MOUSE128.BAS";@þ "MOUSE.POINTER":ù 8,"."]@þ "MOUSE128.BIN":ž Ñ("1800"){@BA²Ñ("0A04"):— BA,1°Â(BA)•@(þ 1,1,2:þ 1,100,100À@2Þ1,1:à 1,8,1,"BASIC CHEAPO PAINT (TM)"ú@dë:¡ùA$:‹A$²" "§Þ1,1:à 1,8,1,"BASIC CHEAPO PAINT (TM)"A‚ä­Éðx­ð­ñ©!©(`Ø­~Ð3­Ô¬ò ]ŒòmÖÖŠi)Mææ­Ô¬ó ]Œó8Iÿm××lðŒõô¢8íõ)É@°Jð¬ô` ÀÉÿð8j¢ÿ¬ô`©`; ; SID MOUSE BASCI COMPATIBLE DRIVER ; IIRQ = $0314 VIC = $D000 SID = $D400 POTX = SID+$19 POTY = SID+$1A ; ACTIVE = $117E ; IF ZERO, THEN MOVE SPRITE ; VICDATA = $11D6 ; BASICS COPY OF VIC REGISTER IMAGE XPOS = VICDATA+$00 ; LOW ORDER XPOSITION YPOS +1 STA IIRQ2+1 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 DELTA VALUES FOR X LDY OPOTX JSR MOVCHK 0,8E,00,00,07$hƒ00,00,02,00,00,00,00,00Arƒ00,00,00,00,00,00,00,00^|ƒ00,00,00,00,00,00,00,00{†ƒ00,00,00,00,00,00,00,00˜ƒ00,00,00,00,00,00,00,00µšƒ00,00,00,00,00,00,00,00Ó¤------------------------à®Y²1:Y1²0 ¸‹È(A$,1)³±Ê("012345) EOR #$FF ADC YPOS STA YPOS ; 90$ JMP (IIRQ2) ; CONTINUE W/ IRQ OPERATION ; ; MOVCHK ; ENTRY 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 OLDV0,A9,21,8D%´ƒ14,03,A9,C1,8D,15,03,28B¾ƒ60,D8,AD,19,D4,AC,02,C0_ȃ20,58,C1,8C,02,C0,18,6D|Òƒ00,D0,8D,00,D0,8A,69,00™܃29,01,4D,10,D0,8D,10,D0¶æƒAD,1A,D4,AC,03,C0,20,58ÓðƒC1,8C,03,C0,38,49,FF,6Dðúƒ01,D0,8D,01,D0,6C,00,C0 ƒ8C,05,ã50)­8) Z‹A³0§ A²0! d‹A±39§A²39. n‹B³0§B²0= x‹B±24§B²24p ‚‹Â(56321)²239§—1024ªAªB¬40,160:—55296ªAªB¬40,0’ Œ‹Â(56321)²254§—1024ªAªB¬40,32¼ –™Â(56321);Â(53248);Â(53249);Â(53264);Ó  ™Â(53278),Â(53279)Ü ª‰ 50#¢50)­8) Z‹A³0§ A²0! d‹A±39§A²39. n‹B³0§B²0= x‹B±24§B²24p ‚‹Â(56321)²239§—1024ªAªB¬40,160:—55296ªAªB¬40,0’ Œ‹Â(56321)²254§—1024ªAªB¬40,32› –‰ 50#DEMO T.         ‹ Ï(1)³±0 § 1000AŒìKAèX²Î(1,0)«25:Y²Î(1,1)«51:X²«X¬(X±0):Y²«Y¬(Y±0)gAòæ X,Y: C²1«Ð(2):å C,X,YAüë:X²Î(1,0)«25:Y²Î(1,1)«51:X²«X¬(X±0):Y²«Y¬(Y±0)»Aå C ¤ X,Y:ì ý Ï(1)³±0 : Ž‚M1351.64.BIN    M1351.64.SRC     ×11000000 ELSE OR IN HIGH ORDER BITS CMP #$FF IF <> -1 BEQ 80$ SEC A <= A/2 ROR A LDX #$FF X <= -1 LDY NEWVALUE Y <= NEWVALUE RTS RETURN ; 80$ LDA #0 A <= 0 RTS RETURN W/ Y = OLD VALUE ; .END ELTA VALUE FOR POSITION ; MOVCHK STY OLDV= VICDATA+$01 ; Y POSITION XPOSMSB = VICDATA+$10 ; BIT 0 IS HIGH ORDER X POSITION ; *=$18F0 IIRQ2 *=*+2 OPOTX *=*+1 OPOTY *=*+1 NEWVALUE *=*+1 OLDVALUE *=*+1 ; * = $1800 ; INSTALL LDA IIRQ+1 CMP #>MIRQ BEQ 90$ PHP SEI LDA IIRQ STA IIRQ2 LDA IIRQ STY OPOTX ; CLC ; MODIFY LOW ORDER XPOSITION ADC XPOS STA XPOS TXA ADC #$00 AND #%00000001 EOR XPOSMSB STA XPOSMSB ; LDA POTY ; GET DELTA VALUE FOR Y LDY OPOTY JSR MOVCHK STY OPOTY ; SEC ; MODIFY Y POSITION ( DECREASE Y FOR INCRESE IN POT v6789ABCDEF",Y,1)§Y²Yª1:‰440' ÂY1²(Y«1)¬16:Y²1Z Ì‹É(A$,1)³±Ê("0123456789ABCDEF",Y,1)§Y²Yª1:‰460i ÖY²Y1ªY«1:ŽFF,AC,04,C0,60,A9Œ6ƒ00,60©@-----------------------ÍJX²0¤63:‡A$:430:—3584ªX,Y:‚X:ŽêTƒF8,00,00,90,00,00,B8,00^ƒ00,DC,00,0ALUE SAVE OLD & NEW VALUES STA NEWVALUE LDX #0 PRELOAD X W/ 0 ; SEC A <= MOD64( NEW-OLD ) SBC OLDVALUE AND #%01111111 CMP #%01000000 IF > 0 BCS 50$ LSR A A <= A/2 BEQ 80$ IF <> 0 LDY NEWVALUE Y <= NEWVALUE RTS RETURN ; 50$ ORA #%C0,8D,04,C0,A2,00*ƒ38,ED,05,C0,29,7F,C9,40GƒB0,07,4A,F0,12,AC,04,C0d"ƒ60,09,C0,C9,FF,F0,08,38,ƒ6A,A2,FF,AC,04,C0,60,A9Œ6ƒ00,60©@-----------------------ÍJX²0¤63:‡A$:430:—3584ªX,Y:‚X:ŽêTƒF8,00,00,90,00,00,B8,00^ƒ00,DC,00,0 ?d F$="0:STARTUP.102486":OPEN1,8,15,"S"+F$:CLOSE1:SAVEF$,8In™"“";ox™"°ÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ®•‚™"Ý 1351 MOUSE DEMOS - V102486 Ý¿Œ™"­ÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ½": ™Ù–œ: M²5: Q$²Ç(34): N²0›F²¶(Â(65533)²255) : F % A 1351 MOUSE DEMO FOR THE C64? 10/16/86 FRED BOWENa ‹ Z²0 §Z²1:“"SPRITES.0E*",8,1ƒ‹ Z²1 §Z²2:“"MOUSE64.BIN",8,1 ™"“":V²13¬4096:—Vª21,255À#—Vª29,254:—Vª23,254:—Vª16,0à(I²0¤7: S²I¬2: —2040ªI,56ªIñ)‡X,Y,C,S$(I) *—VªS,X:— 46,I¯15:™"RIGHT!";:‚:T²Tª1:‰70V x™"žWRONG!";:I²0¤400:‚:™" ";:‰90\ È:t ÒT²0:I²0¤9:‡S$(I):‚® Ü—Vª21,1:™"“ž 0 1 2 3 4 5 6 7 8 9"Ë æS²µ(»(0)¬10):‹T±15§Œ:‰30 ð™"› POINT & CLICK ON THE  ";:‰260 6:# èƒ 100,100,1 ,POINTER; éƒ 60 ,60 ,10,CIRCLEU êƒ 160,62 ,4 ,TRIANGLEm ëƒ 255,62 ,13,ELIPSE… ìƒ 160,110,7 ,SQUARE  íƒ 60 ,160,5 ,RECTANGLE¹ îƒ 160,160,3 ,DIAMONDÐ ïƒ 255,160,14,CROSS Ѓ ZERO,ONE,TWO,THREE,FOUR,FIVE,SI&d A 1351 MOUSE DEMO FOR THE C128An 10/16/86 FRED BOWENGx\‚þ"SPRITES.0E00"qŒþ"MOUSE128.BIN"˜–žÑ("1800"): TURN ON MOUSE DRIVERž :ªªÞ0,1: ŒÆ´I²1¤8: ‡ X,Y,C,E,S$(I)ä¾: þI,X,Y: þI,1,C,,E,EîÈ: ‚öÒT²0Üë: S$(I): ‚3,T²0: à,6,6,"ž0 1 2 3 4 5 6 7 8 9"O6ë: S²µ(»(1)¬10): P²Sª48@: à,4,21,"›POINT & CLICK ON THE NUMBER "ªS$(S)ªÇ(27)ª"@"«J: ë:¡A$: ì ü Ï(1)²128äT: X²1024ª(Î(1,0)«24)­8: Y²µ((Î(1,1)«50)­8)¬40^: ‹ Â(XªY)³±ý¸:9 èƒ 100,100,2 ,0,POINTER : X,Y,COLOR,EXPAND,SHAPE NAMES òƒ 60 ,60 ,11,1,CIRCLEo üƒ 160,62 ,5 ,1,TRIANGLE‰ ƒ 255,62 ,14,1,ELIPSE£ ƒ 160,110,8 ,1,SQUAREÀ ƒ 60 ,160,6 ,1,RECTANGLEÛ $ƒ 160,160,4 ,1,DIAMONDô .ƒ 255,160,15,1,CROSS,¶ <T²02Z‹(Â(Vª12¬256ª1)¯17)²17§X²Â(Vª30):‰90Od‹(Â(Vª30)³±(2®10ª1))§120|nI²0¤96:—646,I¯15:™"RIGHT!";:‚:‰70²x™"žWRONG!";:I²0¤400:‚:™" ";:‰900,3 ,DIAMONDÐ ïƒ 255,160,14,CROSS Ѓ ZERO,ONE,TWO,THREE,FOUR,FIVE,SI.64.*, " BETTER MOUSE DRIVER"Düƒ 1,DATA64, " EXAMPLE FROM MANUAL"uƒ 1,DEMO64, " EDUCATIONAL DEMO PROGRAM"’ƒ 2,"", " QUIT"ÕЃ 1,MOUSE128.*, " ORIGINAL EL CHEAPO PAINT": C128 PROGRAMS Úƒ 1,M1351.128*, " IMPROVED EL¦)@ ‹ Z²0 § Z²Zª1: “"MOUSE.POINTER",8,1O@‹ Z²1 § Z²Zª1: “"MOUSE64.BIN",8,1‡@V²13¬4096:—Vª21,1:—Vª39,1:—Vª0,100:—Vª1,100:—Vª16,0¡@(—2040,56:ž12¬4096ª256#,A$: ˜15,A$½<: U²DC: 8000: ‹ DS § 3150ÕP™ "NOW COPYING ";F$êZ RN²1¤R: žBA: ‚=0 IF C64, F=1 IF C128Lœ‹ F § Œ 2000 : SELECT C64/128 DATA TABLE„ N²Nª1: ‡T(N),N$(N),D$(N): ™ N;D$(N): ‹ T(N)³2 § 160½ª™ "  SELECT OPERATION > ’ ";: 500: S²Å(A$): ™S: ™Ñ´‹ S³0 ° S±N § Šå¾‹ S²0 ° S²N § €Ë F²0 § 200: Õ Š(NVªSª1,Y:—Vª39ªI,C +‚& 2ž12¬4096ª256. <T²0J FS²µ(»(1)¬7ª1):‹T±15§200 P™"“› WHICH OF THESE IS A ";S$(S);"?"¨ U™"";Ñ Z‹(Â(Vª12¬256ª1)¯17)²17§X²Â(Vª30):‰90í d‹(Â(Vª30)³±(2®Sª1))§120 nI²0¤96:—6NUMBER ";S$(S)$ ú™"";C ‹(Â(Vª12¬256ª1)¯17)²17§260{ X²µ((Â(V)ª(Â(Vª16)¯1)¬256«24)­8):Y²µ((Â(Vª1)«50)­8)™ ‹Â(1024ªY¬40ªX)³±48ªS§300Í "I²0¤96:—646,I¯15:™"RIGHT!";:‚:T²Tª1:‰220 ,™"žWRONG!";:I²0¤400:‚:™" X,SEVEN,EIGHT,NINE"";C ‹(Â(Vª12¬256ª1)¯17)²17§260{ X²µ((Â(V)ª(Â(Vª16)¯1)¬256«24)­8):Y²µ((Â(Vª1)«50)­8)™ ‹Â(1024ªY¬40ªX)³±48ªS§300Í "I²0¤96:—646,I¯15:™"RIGHT!";:‚:T²Tª1:‰220 ,™"žWRONG!";:I²0¤400:‚:™" S²µ(»(1)¬7ª2): P²µ(2®(S«1)ª1)Xæ: à ,5,21,"›WHICH OF THESE IS A "ªS$(S)ª"?"ªÇ(27)ª"@"ƒð: ë:¡A$: X²Î(1): ì ü Ï(1)²128 ¯ X±0³ú: ‹ X³±P § 390: X²Î(1): ‰240: Õ 410Í: T²Tª1: ì üT±15Ó:îÞ0,1: I²2¤8: þI,0: ‚"I²0¤9: ‡P § 390: ‰330: Õ 410*h: T²Tª1: ì üT±15fr‰170: þ WITH TEST1 AGAINl|:ž†à,17,23,"žWRONG!›": Ú1,500,50: þ 1: ™Ç(27)"D"¤‹Žª:ÅšÚ1,18000,50,2,32000,10ñ¤I²0¤31:ç5,(I¯15)ª1:à,17,23,"RIGHT!›":‚÷®Ž:!8ƒ ZERO,ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE: þ WITH TEST1 AGAINl|:ž†à,17,23,"žWRONG!›": Ú1,500,50: þ 1: ™Ç(27)"D"¤‹Žª:ÅšÚ1,18000,50,2,32000,10ñ¤I²0¤31:ç5,(I¯15)ª1:à,17,23,"RIGHT!›":‚÷®ŽÁ­ÉÁðx­À­À©!©Á(`Ø­Ô¬À XÁŒÀmÐЊi)MÐЭÔ¬À XÁŒÀ8IÿmÐÐlÀŒÀÀ¢8íÀ)É@°Jð¬À` ÀÉÿð8j¢ÿ¬À`©`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ CHEAPO PAINT"2 äƒ 1,DATA128, " EXAMPLE FROM MANUAL"c îƒ 1,DEMO128, " EDUCATIONAL DEMO PROGRAM"€ øƒ 2,"", " QUIT"žô¡A$: ‹ A$²"" § 500¤þŽªç:ìèƒ 1,MOUSE64.*, " SIMPLE MOUSE DRIVER": C64 PROGRAMSòƒ 1,M1351ÿûEARTUP.102486  ‚CRAP             ‚ MOUSE64.BAS     MOUSE64.BIN     $(S)) : C128 LOAD & RUNHÈ™ "LOAD";Q$;N$(S);Q$;",8" : C64 LOAD & RUN`Ò™ "RUN‘‘‘‘‘‘‘‘"{Ü—631,13:—632,13:—198,2怇ð:žô¡A$: ‹ A$²"" § 500¤þŽªç:ìèƒ 1,MOUSE64.*, " SIMPLE MOUSE DRIVER": C64 PROGRAMSòƒ 1,M1351Böþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Žz  €lÿï¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ1351 MUS DEMOS    DANNE    GEOS format V1.0‚STARTUP.102486  ƒCOMM 1351        V /‚ MOUSE64.BAS     ‚MOUSE64.BIN     MOUSE64.SRC     ‚M1351.64.BAS    ‚M1351.64.BIN    M1351.64.SRC     ‚DATA64          ‚DEMO64          ‚MOUSE128.BAS    ‚MOUSE128.BIN    MOUSE128.SRC    ‚M1351.128.BAS   ‚M1351.128.BIN   M1351.128.SRC    ÿ‚DATA128         ‚DEMO128         ‚MOUSE.POINTER   ‚SPRITES.0E00    PROV            ‚DEMO T.         ‚TEST 1           ; ; SID MOUSE C64 BASIC COMPATIBLE DRIVER ; IIRQ = $0314 VIC = $D000 SID = $D400 POTX = SID+$19 POTY = SID+$1A ; VICDATA = $D000 ; BASICS COPY OF VIC REGISTER IMAGE XPOS = VICDATA+$00 ; LOW ORDER XPOSITION YPOS = VICDATA+$01 ; Y POSITION XPOSMSB = VICDA A #>MIRQ STA IIRQ+1 ; PLP 90$ RTS ; MIRQ CLD ; JUST IN CASE..... LDA POTX ; GET DELTA VALUES FOR X LDY OPOTX JSR MOVCHK STY OPOTX ; CLC ; MODIFY LOW ORDER XPOSITION ADC XPOS STA XPOS TXA ADC #$00 AND #%00000001 EOR XPOSMSB STA XPOSMSB ;  ; A = CURRRENT VALUE 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 X<= NEWVALUE RTS RETURN ; 80$ LDA #0 A <= 0 RTS RETURN W/ Y = OLD VALUE ; .END ELTA 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 = F$="0:M1351.64.BAS":OPEN1,8,15,"S"+F$:CLOSE1:SAVEF$,8c‹ Z²0 § Z²1: “"MOUSE.POINTER",8,1ˆ‹ Z²1 § Z²2: “"M1351.64.BIN",8,1®(…"MOUSE PORT (1/2)";P$: P²Å(P$)«1Ã2‹ P³0 ° P±1 § 40ú<V²13¬4096:—Vª21,1:—Vª39,1: SPRITE#1 ON, COLOR+FÀL ÀL ÀL5À¢,¢­ÉÀðx­ðÀ­ñÀ½1À½2À(`OÀLÀ­ÉÀÐx­ðÀ­ñÀ(`©€,©@ ºÀ­Ô¬òÀ ÀŒòÀmÐЊi)MÐЭÔ¬óÀ ÀŒóÀ8IÿmÐЮöÀÜlðÀŒõÀôÀ¢8íõÀ)É@°Jð¬ôÀ` ÀÉÿð8j¢ÿ¬ôÀ`©`®ÜŽöÀÜ¢ ÇˆÐýÊÐú`; 1351 PROPORTIONAL MOUSE DRIVER FOR THE C64 ; ; COMMODORE BUSINESS MACHINES, INC. 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 (LS JMP REMOVE ;REMOVE MOUSE WEDGE INSTALL.1 LDX #0 ;PORT 1 MOUSE .BYTE $2C INSTALL.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 INDIRECT FOR OEADY 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 LDA POTX ;GET DELTA VALUES  SE Y FOR INCREASE IN POT) EOR #$FF ADC YPOS STA YPOS LDX CIASAVE ;RESTORE KEYBOARD STA CIA 90$ JMP (IIRQ2) ;CONTINUE W/ IRQ OPERATION ; MOVCHK ; ENTRY Y = OLD VALUE OF POT REGISTER ; A = CURRRENT VALUE OF POT REGISTER ; EXIT Y = VALUE TO USE FTA+$10 ; BIT 0 IS HIGH ORDER X POSITION ; *=$C000 IIRQ2 *=*+2 OPOTX *=*+1 OPOTY *=*+1 NEWVALUE *=*+1 OLDVALUE *=*+1 ; * = $C100 ; INSTALL LDA IIRQ+1 CMP #>MIRQ BEQ 90$ PHP SEI LDA IIRQ STA IIRQ2 LDA IIRQ+1 STA IIRQ2+1 LDA # 0 BCS 50$ LSR A A <= A/2 BEQ 80$ IF <> 0 LDY NEWVALUE Y <= NEWVALUE RTS RETURN ; 50$ ORA #%11000000 ELSE OR IN HIGH ORDER BITS CMP #$FF IF <> -1 BEQ 80$ SEC A <= A/2 ROR A LDX #$FF X <= -1 LDY NEWVALUE Y OR 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 CMP #%01000000 ;IF A > 0 BCS 50$ LSR A ; THEN A = A/2 BEQ§—Vª0,100:—Vª1,100:—Vª16,0: SPRITE POSITIONdP—2040,56: SPRITE DATA @$E00¡Zž12¬4096ªP¬3: INSTALL MOUSE DRIVER51.64.BAS    TARTUP.102486  ‚CRAP             ‚ MOUSE64.BAS     ‚MOUSE64.BIN     MOUSE64.SRC     ‚M1351.64.BAS    M1351.64.BIN    B) YPOS = VIC+$01 ;Y POSITION XPOSMSB = VIC+$10 ;X POSITION (MSB) *=$C0F0 IIRQ2 *=*+2 OPOTX *=*+1 OPOTY *=*+1 NEWVALUE *=*+1 OLDVALUE *=*+1 CIASAVE *=*+1 * = $C000 JMP INSTALL.1 ;INSTALL MOUSE IN PORT 1 JMP INSTALL.2 ;INSTALL MOUSE IN PORT 2UR EXIT STA IIRQ2 LDA IIRQ+1 STA IIRQ2+1 LDA PORT,X ;POINT IRQ INDIRECT TO 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 ;REMOVE IRQ WEDGE CMP #>MIRQ.1 BNE 90$ ;...BRANCH IF ALR 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 XPOSMSB LDA POTY ;GET DELTA VALUE FOR Y LDY OPOTY JSR MOVCHK STY OPOTY SEC ;MODIFY Y POSITION (DECREA 0 F$="M1351.128.BAS":SCRATCH(F$):DSAVE(F$)e™"PORT (1/2) ? ";:ë:¡P$:P²Å(P$)«1:ìüP²0°P²1:™Pª1—Ñ("FE"),P: SAVE PORT CHOISE×(þ "MOUSE.POINTER": LOAD SPRITE DATA2þ "M1351.128.BIN":  (P)²128§130:Õ‹Ï(P)²U§Š801xç1,(Í(1)¯15)ª1:ç4,Í(1):ìX‚æÎ(U,.)«XF,Î(U,U)«YF:C²¨(Ð(2))¯1€Œë:åC¤Î(U,.)«XF,Î(U,U)«YF:ìýÏ(P):솖:¿„‹ER²14§Ö: IGNORE NEGATIVE COORDSýŽžÑ("1806"): REMOVE MOUSE IRQ WE L L L5¢,¢­Éðx­ð­ñ½1½2(`OL­ÉÐx­ð­ñ(`©€,©@ ¼Ð9­Ô¬ò ’ŒòmÖÖŠi)Mææ­Ô¬ó ’Œó8Iÿm××®öÜlðŒõô¢8íõ)É@°Jð¬ô` ÀÉÿð8j¢ÿ¬ô`©`®~Ю܎öÜ¢ ÇˆÐýÊÐú` 80$ ; IF A <> 0 LDY NEWVALUE ; THEN Y = NEWVALUE RTS ; RETURN 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 DS SETTLE & GET SYNC-ED 10$ DEY BNE 10$ DEX BNE 10$ RTS .END TS ; RETURN 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 ; 1351 PROPORTIONAL MOUSE DRIVER FOR THE C128 ; ; COMMODORE BUSINESS MACHINES, INC. 27OCT86 ; BY HEDLEY DAVIS AND FRED BOWEN IIRQ = $0314 VIC = $D000 SID = $D400 CIA = $DC00 CIA.DDR = $DC02 POTX = SID+$19 POTY = SID+$1A ACTIVE = $117E ;BASIC7.0 ACT+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 LDX #0 ;PORT 1 MOUSE .BYTE $2C INSTALL.2 LDX #2 ;PORT 2 MOUSE LDA IIRQ+1 ;IN PLP 90$ RTS PORT .WORD 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 ;PPOS TXA ADC #$00 AND #%00000001 EOR XPOSMSB STA XPOSMSB LDA POTY ;GET DELTA VALUE FOR Y LDY OPOTY JSR MOVCHK STY OPOTY SEC ;MODIFY Y POSITION (DECREASE Y FOR INCREASE IN POT) EOR #$FF ADC YPOS STA YPOS LDX CIASAVE ;RESTORE KEYBOARD STA STA NEWVALUE 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 LOAD MOUSE DRIVERH<þ 1,1,2:þ1,100,100: TURN ON SPRITE #1‰Fž Ñ("1800")ªP¬3: INSTALL MOUSE IRQ DRIVER²PXF²25:YF²51:U²1:P²Â(Ñ("FE"))ª1:× 900ÛZÞ1,1:à,8,1,"BASIC CHEAPO PAINT (TM)"ádënë:¡A$:ìüÏ(P)°A$²" ":‹ÏADGE/˜ë:¡A$:ìüA$²"": EMPTY KEY BUFFER7¢×:€ SPRITE #1‰Fž Ñ("1800")ªP¬3: INSTALL MOUSE IRQ DRIVER²PXF²25:YF²51:U²1:P²Â(Ñ("FE"))ª1:× 900ÛZÞ1,1:à,8,1,"BASIC CHEAPO PAINT (TM)"ádënë:¡A$:ìüÏ(P)°A$²" ":‹ÏTARTUP.102486  ‚CRAP             ‚ MOUSE64.BAS     ‚MOUSE64.BIN     MOUSE64.SRC     ‚M1351.64.BAS    ‚M1351.64.BIN    M1351.64.SRC     NEWVALUE ; Y = NEWVALUE RTS ; RETURN 80$ LDA #0 ;A = 0 RTS ;RETURN W/ Y = OLD VALUE SETPOT LDX CIA ;SAVE KEYBOARD LINES STX CIASAVE STA CIA ;CONNECT APPROPRIATE PORT TO SID LDX #4 LDY #$C7 ;DELAY 4MS TO LET LINE 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 = NEWVALUE RTS ; RETURN 80$ LDA #0 ;A = 0 RTS ;IVE SPRITE FLAG (0=INACTIVE) VICDATA = $11D6 ;BASIC7.0 COPY OF VIC REGISTER IMAGE XPOS = VICDATA+$00 ;X POSITION (LSB) YPOS = VICDATA+$01 ;Y POSITION XPOSMSB = VICDATA+$10 ;X POSITION (MSB) *=$18F0 IIRQ2 *=*+2 OPOTX *=*+1 OPOTY *=*+1 NEWVALUE *=*STALL 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 IIRQ2+1 LDA PORT,X ;POINT IRQ INDIRECT TO MOUSE DRIVER STA IIRQ LDA PORT+1,X STA IIRQ+1ORT2 MOUSE SCAN .BYTE $2C MIRQ.1 LDA #$40 ;PORT1 MOUSE SCAN JSR SETPOT ;CONFIGURE CIA PER .A BNE 90$ ;...OOPS- BASIC IN CONTROL LDA POTX ;GET DELTA VALUES FOR X LDY OPOTX JSR MOVCHK STY OPOTX CLC ;MODIFY LOW ORDER XPOSITION ADC XPOS STA X CIA 90$ JMP (IIRQ2) ;CONTINUE W/ IRQ OPERATION ; MOVCHK ; ENTRY 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 OLDVALUE ;SAVE OLD & NEW VALUESRETURN W/ Y = OLD VALUE SETPOT LDX ACTIVE ;IS BASIC MOVING SPRITE 1? BNE 20$ ;...YES, WE'LL LEAVE 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 LINESF SETTLE & GET SYNC-ED 10$ DEY BNE 10$ DEX BNE 10$ 20$ RTS .END IF A <> -1 BEQ 80$ SEC ; THEN A = A/2 ROR A LDX #$FF ; X = -1 LDY NEWVALUE ; Y = NEWVALUE RTS ; RETURN 80$ LDA #0 ;A = 0 RTS ;ÿ