CBMSTARTUP* LU=PEEK(186):RUNU(U),"STARTUP*  ``0 V Comm. Compat. V C.Itoh 8510  V  Epson FX-80  V Epson JX-80  V Epson MX-80 VGemini 10x  V 5IBM 5152+ V+0 bE%l%:6 0` Input Drvr V1.1David Durran `CsD`Input driver for the Commodore 1351 proportional mouse.<8 8: ; `8r4LLL ;:<`$00LPH5HHH܍ܭ)͉ 9 9ܩ@ܢfԬ a H)@he::e;;Ԭ aH)JJJ h8Ie<<JJJJQhhhh`8)@J` 8jKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK d230:420:61443xBA("0A04"): BA,1(BA)M 1,1,2: 1,100,100q1,1: 1,8,1,"1351 MOUSE PAINT":A$:A$" "1,1: 1,8,1,"1351 MOUSE PAINT" (1)0 180X(1,0)25:Y(1,1)51:XX(X0):YY(Y0) X,Y &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: I18: X,Y,C,E,S$(I): I,X,Y: I,1,C,,E,E: T0:  S$(I): 3,T0: ,6,6,"0 1 2 3 4 5 6 7 8 9"O6: S((1)10): PS48@: ,4,21,"POINT & CLICK ON THE NUMBER "S$(S)(27)"@"J: :A$: (1)128T: X1024((1,0)24)8: Y(((1,1)50)8)40^: (XY) :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,C????$8|???????$8|???KF0,18,8C,F5,18%h8D,F4,18,A2,00,38,ED,F5Br18,29,7F,C,40,B0,07,4A_|F0,12,AC,F4,18,60,0,C0|C,FF,F0,08,38,6A,A2,FFAC,F4,18,60,A9,00,60,00-----------------------X063:A$:("0E00")X,(A$):X:F8,00,00,90,00,00,B8K: C1(2): C,X,YF:X(1,0)25:Y(1,1)51:XX(X0):YY(Y0)d C X,Y: (1)0 : ------------------------------X0135:A$:6144X,(A$):X:AD,15,03,C9,18,F0,19,0878,AD,14,03,8D,F0,18,AD15,03,8D,F1,18,AS((1)72): P(2(S1)1)X: ,5,21,"WHICH OF THESE IS A "S$(S)"?"(27)"@": :A$: X(1): (1)128 X0: XP 390: X(1): 240: 410: TT1: T15:0,1: I28: I,0: "I09: P 390: 330: 410*h: TT1: T15fr170:  WITH TEST1 AGAINl|:,17,23,"WRONG!": 1,500,50: 1: (27)"D":1,18000,50,2,32000,10I031:5,(I15)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,10I031:5,(I15)1:,17,23,"RIGHT!":K$????????????? ????????D8||8 888888??888888KK,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,003T18,38,49,FF,6D,D7,11,8D^D7,11,6C,K9,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,8D6D6,11,8A,69,00,29,01,4D@E6,11,8D,E6,11,AD,1A,D4JAC,F3,18,20,5D,18,8C,F3T18,38,49,FF,6D,D7,11,8D^D7,11,6C, % "PLEASE WAIT, READING DATA..."3d140:330knV134096:V21,1:V39,1:V0,100:V1,100:V16,0x2040,56:124096256X0129:A$:430:49408X,Y:X:AD,15,03,C9,C1,F0,19,0878,AD,14,03,8D,00,C0,AD15,03,8D,01,C % A 1351 MOUSE DEMO FOR THE C64? 10/16/86 FRED BOWENa Z0 Z1:"SPRITES.0E*",8,1 Z1 Z2:"MOUSE64.BIN",8,1"":V134096:V21,255#V29,254:V23,254:V16,0(I07: SI2: 2040I,56I)X,Y,C,S$(I) *VS,X: 46,I15:"RIGHT!";::TT1:70V x"WRONG!";:I0400::" ";:90\ :t T0:I09:S$(I): V21,1:" 0 1 2 3 4 5 6 7 8 9" S((0)10):T15: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@ DSAVE"@MOUSE128.BAS";@ "MOUSE.POINTER": 8,"."]@ "MOUSE128.BIN": ("1800"){@BA("0A04"): BA,1(BA)@( 1,1,2: 1,100,100@21,1: 1,8,1,"BASIC CHEAPO PAINT (TM)"@d:A$:A$" "1,1: 1,8,1,"BASIC CHEAPO PAINT (TM)"Ax!(`ح~3Ԭ ]mi)MԬ ]8Iml8)@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$h00,00,02,00,00,00,00,00Ar00,00,00,00,00,00,00,00^|00,00,00,00,00,00,00,00{00,00,00,00,00,00,00,0000,00,00,00,00,00,00,0000,00,00,00,00,00,00,00------------------------Y1:Y10 (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,A,21,8D%14,03,A,C1,8D,15,03,28B60,D8,AD,1,D4,AC,02,C0_20,58,C1,8C,02,C0,18,6D|00,D0,8D,00,D0,8A,6,0029,01,4D,10,D0,8D,10,D0AD,1A,D4,AC,03,C0,20,58C1,8C,03,C0,38,49,FF,6D01,D0,8D,01,D0,6C,00,C0 8C,05,VS1,Y:V3I,C +& 2124096256. <T0J FS((1)71):T15200 P" WHICH OF THESE IS A ";S$(S);"?" U""; Z((V122561)17)17X(V30):90 d((V30)(2S1))120 nI06:6NUMBER ";S$(S)$ "";C ((V122561)17)17260{ X(((V)((V16)1)25624)8):Y(((V1)50)8) (1024Y40X)48S300 "I096:646,I15:"RIGHT!";::TT1:220 ,"WRONG!";:I0400::" X,SEVEN,EIGHT,NINE"";C ((V122561)17)17260{ X(((V)((V16)1)25624)8):Y(((V1)50)8) (1024Y40X)48S300 "I096:646,I15:"RIGHT!";::TT1:220 ,"WRONG!";:I0400::" (1)0 1000AKAX(1,0)25:Y(1,1)51:XX(X0):YY(Y0)gA X,Y: C1(2): C,X,YA:X(1,0)25:Y(1,1)51:XX(X0):YY(Y0)A C X,Y: (1)0 : M1351.64.BINM1351.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)YY1:440' Y1(Y1)16:Y1Z (A$,1)("0123456789ABCDEF",Y,1)YY1:460i YY1Y1:FF,AC,04,C0,60,A9600,60@-----------------------JX063:A$:430:3584X,Y:X:TF8,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,2,7F,C9,40GB0,07,4A,F0,12,AC,04,C0d"60,09,C0,C,FF,F0,08,38,6A,A2,FF,AC,04,C0,60,A9600,60@-----------------------JX063:A$:430:3584X,Y:X:TF8,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 "": : M5: Q$(34): N0F((65533)255) : F % A 1351 MOUSE DEMO FOR THE C64? 10/16/86 FRED BOWENa Z0 Z1:"SPRITES.0E*",8,1 Z1 Z2:"MOUSE64.BIN",8,1"":V134096:V21,255#V29,254:V23,254:V16,0(I07: SI2: 2040I,56I)X,Y,C,S$(I) *VS,X: 46,I15:"RIGHT!";::TT1:70V x"WRONG!";:I0400::" ";:90\ :t T0:I09:S$(I): V21,1:" 0 1 2 3 4 5 6 7 8 9" S((0)10):T15: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: I18: X,Y,C,E,S$(I): I,X,Y: I,1,C,,E,E: T0: S$(I): 3,T0: ,6,6,"0 1 2 3 4 5 6 7 8 9"O6: S((1)10): PS48@: ,4,21,"POINT & CLICK ON THE NUMBER "S$(S)(27)"@"J: :A$: (1)128T: X1024((1,0)24)8: Y(((1,1)50)8)40^: (XY):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,E$B$E$C$E$D$ :(#"";-2#"S<#" FILECOPY UTILITY - V111286 |F#"":P#1): 15,A$: 15,A$<: UDC: 8000: DS 3150P "NOW COPYING ";F$Z RN1R: BA: .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)@ Z0 ZZ1: "MOUSE.POINTER",8,1O@ Z1 ZZ1: "MOUSE64.BIN",8,1@V134096:V21,1:V39,1:V0,100:V1,100:V16,0@(2040,56:124096256#,A$: 15,A$<: UDC: 8000: DS 3150P "NOW COPYING ";F$Z RN1R: BA: =0 IF C64, F=1 IF C128L F 2000 : SELECT C64/128 DATA TABLENN1: T(N),N$(N),D$(N): N;D$(N): T(N)2 160 "  SELECT OPERATION > ";: 500: S(A$): S:  S0 SN  S0 SN  F0 200: (NVS1,Y:V39I,C +& 2124096256. <T0J FS((1)71):T15200 P" WHICH OF THESE IS A ";S$(S);"?" U""; Z((V122561)17)17X(V30):90 d((V30)(2S1))120 nI096:6NUMBER ";S$(S)$ "";C ((V122561)17)17260{ X(((V)((V16)1)25624)8):Y(((V1)50)8) (1024Y40X)48S300 "I096:646,I15:"RIGHT!";::TT1:220 ,"WRONG!";:I0400::" X,SEVEN,EIGHT,NINE"";C ((V122561)17)17260{ X(((V)((V16)1)25624)8):Y(((V1)50)8) (1024Y40X)48S300 "I096:646,I15:"RIGHT!";::TT1:220 ,"WRONG!";:I0400::" S((1)72): P(2(S1)1)X: ,5,21,"WHICH OF THESE IS A "S$(S)"?"(27)"@": :A$: X(1): (1)128 X0: XP 390: X(1): 240: 410: TT1: T15:0,1: I28: I,0: "I09: P 390: 330: 410*h: TT1: T15fr170:  WITH TEST1 AGAINl|:,17,23,"WRONG!": 1,500,50: 1: (27)"D":1,18000,50,2,32000,10I031:5,(I15)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,10I031:5,(I15)1:,17,23,"RIGHT!":x!(`حԬ XmЍЊi)MЍЭԬ X8ImЍl8)@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,M1351EARTUP.102486CRAP  MOUSE64.BASMOUSE64.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,M1351A z 8l1351 MOUSE DEMOS//2AGEOS format V1.0STARTUP.102486COMM 1351 V / MOUSE64.BASMOUSE64.BINMOUSE64.SRCM1351.64.BASM1351.64.BINM1351.64.SRC KKDATA64DEMO64MOUSE128.BASMOUSE128.BINMOUSE128.SRCM1351.128.BASM1351.128.BINM1351.128.SRC KKDATA128DEMO128MOUSE.POINTERSPRITES.0E00KKKKKKKKKKK ; ; 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 Z0 Z1: "MOUSE.POINTER",8,1 Z1 Z2: "M1351.64.BIN",8,1("MOUSE PORT (1/2)";P$: P(P$)12 P0 P1 40<V134096:V21,1:V39,1: SPRITE#1 ON, COLOR+FL L L5,x12(`OLx(`,@ Ԭ mЍЊi)MЍЭԬ 8ImЍЮl8)@J` 8j``܎ܢLj`; 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 BEQV0,100:V1,100:V16,0: SPRITE POSITIONdP2040,56: SPRITE DATA @$E00Z124096P3: INSTALL MOUSE DRIVER51.64.BASTARTUP.102486CRAP  MOUSE64.BASMOUSE64.BINMOUSE64.SRCM1351.64.BASM1351.64.BINB) 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:P0P1:P1("FE"),P: SAVE PORT CHOISE( "MOUSE.POINTER": LOAD SPRITE DATA2 "M1351.128.BIN":  (P)128130:Ջ(P)U801x1,((1)15)1:4,(1):X(U,.)XF,(U,U)YF:C((2))1:C(U,.)XF,(U,U)YF:(P)::ER14: IGNORE NEGATIVE COORDS("1806"): REMOVE MOUSE IRQ WE L L L5,x12(`OLx(`,@ 9Ԭ mi)MԬ 8Iml8)@J` 8j``~܎ܢLj` 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 #1F ("1800")P3: INSTALL MOUSE IRQ DRIVERPXF25:YF51:U1:P(("FE"))1: 900Z1,1:,8,1,"BASIC CHEAPO PAINT (TM)"dn:A$:(P)A$" ":ADGE/:A$:A$"": EMPTY KEY BUFFER7: SPRITE #1F ("1800")P3: INSTALL MOUSE IRQ DRIVERPXF25:YF51:U1:P(("FE"))1: 900Z1,1:,8,1,"BASIC CHEAPO PAINT (TM)"dn:A$:(P)A$" ":TARTUP.102486CRAP  MOUSE64.BASMOUSE64.BINMOUSE64.SRCM1351.64.BASM1351.64.BINM1351.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 VALUESKKKKRETURN 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 LINESKKKKKKKKKF 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 ;KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK