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

INPUTDRVSRC.TXT

FILE INFORMATION

FILENAME(S): INPUTDRVSRC.TXT

FILE TYPE(S): SEQ

FILE SIZE: 13.9K

FIRST SEEN: 2025-11-30 18:24:05

APPEARS ON: 1 disk(s)

FILE HASH

b92e82967eb5ca34dcfb0bfb16e935e34678112ebab60f4ca1d4697a193005bb

FOUND ON DISKS (1 DISKS)

DISK TITLE FILENAME FILE TYPE COLLECTION TRACK SECTOR ACTIONS
GO64 08 99 INPUTDRVSRC.TXT SEQ Sailor, Pbv 29 2 DOWNLOAD FILE

FILE CONTENT & ANALYSIS

00000000: 3B C1 C3 CD C5 20 30 2E  30 37 0D 0D 0D 3B 20 2D  |;.... 0.07...; -|
00000010: 2D 2D 20 C3 4F 4E 46 49  47 55 52 41 42 4C 45 20  |-- .ONFIGURABLE |
00000020: 56 41 4C 55 45 53 0D 0D  3B 20 D3 54 41 52 54 20  |VALUES..; .TART |
00000030: 41 44 44 52 45 53 53 0D  2A 3D 24 43 30 30 30 3B  |ADDRESS.*=$C000;|
00000040: 20 C3 36 34 20 56 41 4C  55 45 0D 3B 2A 3D 24 30  | .64 VALUE.;*=$0|
00000050: 43 30 30 3B 20 C3 31 32  38 20 56 41 4C 55 45 0D  |C00; .128 VALUE.|
00000060: 0D 3B 20 CF 55 54 50 55  54 20 46 49 4C 45 20 4E  |.; .UTPUT FILE N|
00000070: 41 4D 45 0D 21 54 4F 20  22 49 4E 50 55 54 44 52  |AME.!TO "INPUTDR|
00000080: 56 36 34 2E 42 49 4E 22  3B 20 C3 36 34 20 46 49  |V64.BIN"; .64 FI|
00000090: 4C 45 20 4E 41 4D 45 0D  3B 21 54 4F 20 22 49 4E  |LE NAME.;!TO "IN|
000000A0: 50 55 54 44 52 56 31 32  38 2E 42 49 4E 22 3B 20  |PUTDRV128.BIN"; |
000000B0: C3 31 32 38 20 46 49 4C  45 20 4E 41 4D 45 0D 0D  |.128 FILE NAME..|
000000C0: 3B 20 D0 4F 49 4E 54 45  52 27 53 20 4D 41 58 49  |; .OINTER'S MAXI|
000000D0: 4D 55 4D 20 43 4F 4F 52  44 49 4E 41 54 45 53 0D  |MUM COORDINATES.|
000000E0: CD 41 58 49 4D 55 4D C3  4F 4F 52 44 49 4E 41 54  |.AXIMUM.OORDINAT|
000000F0: 45 D8 20 3D 20 33 31 39  3B 20 D6 C9 C3 20 56 41  |E. = 319; ... VA|
00000100: 4C 55 45 0D 3B CD 41 58  49 4D 55 4D C3 4F 4F 52  |LUE.;.AXIMUM.OOR|
00000110: 44 49 4E 41 54 45 D8 20  3D 20 36 33 39 3B 20 D6  |DINATE. = 639; .|
00000120: C4 C3 20 56 41 4C 55 45  0D CD 41 58 49 4D 55 4D  |.. VALUE..AXIMUM|
00000130: C3 4F 4F 52 44 49 4E 41  54 45 D9 20 3D 20 31 39  |.OORDINATE. = 19|
00000140: 39 0D 0D 3B 20 CD 41 58  49 4D 55 4D 20 53 54 45  |9..; .AXIMUM STE|
00000150: 50 20 53 49 5A 45 20 28  22 53 50 45 45 44 22 29  |P SIZE ("SPEED")|
00000160: 20 46 4F 52 0D 3B 20 4A  4F 59 53 54 49 43 4B 20  | FOR.; JOYSTICK |
00000170: 41 43 43 45 4C 45 52 41  54 49 4F 4E 20 52 4F 55  |ACCELERATION ROU|
00000180: 54 49 4E 45 2C 20 49 4E  0D 3B 20 50 49 58 45 4C  |TINE, IN.; PIXEL|
00000190: 53 2E 0D CD 41 58 D3 54  45 50 20 3D 20 24 31 30  |S...AX.TEP = $10|
000001A0: 3B 20 28 4D 41 58 2E 20  24 37 46 29 0D 0D 3B 20  |; (MAX. $7F)..; |
000001B0: C4 49 53 54 41 4E 43 45  20 42 45 46 4F 52 45 20  |.ISTANCE BEFORE |
000001C0: 41 43 43 45 4C 45 52 41  54 49 4F 4E 20 53 54 41  |ACCELERATION STA|
000001D0: 52 54 53 2C 0D 3B 20 49  4E 20 50 49 58 45 4C 53  |RTS,.; IN PIXELS|
000001E0: 2E 0D CD 41 58 D4 49 4D  45 20 3D 20 24 30 34 3B  |...AX.IME = $04;|
000001F0: 20 28 4D 41 58 2E 20 24  37 46 29 0D 0D 3B 20 D3  | (MAX. $7F)..; .|
00000200: 50 52 49 54 45 53 20 54  4F 20 55 53 45 20 46 4F  |PRITES TO USE FO|
00000210: 52 20 4F 56 45 52 4C 41  59 20 50 4F 49 4E 54 45  |R OVERLAY POINTE|
00000220: 52 0D D3 50 52 49 54 45  5F C1 20 3D 20 30 0D D3  |R..PRITE_. = 0..|
00000230: 50 52 49 54 45 5F C2 20  3D 20 31 0D 0D 3B 20 C3  |PRITE_. = 1..; .|
00000240: 4F 4F 52 44 49 4E 41 54  45 53 20 4F 46 20 22 50  |OORDINATES OF "P|
00000250: 4F 49 4E 54 45 52 20 50  49 58 45 4C 22 20 57 49  |OINTER PIXEL" WI|
00000260: 54 48 49 4E 0D 3B 20 50  4F 49 4E 54 45 52 20 53  |THIN.; POINTER S|
00000270: 50 52 49 54 45 53 3B 20  41 44 4A 55 53 54 20 54  |PRITES; ADJUST T|
00000280: 48 45 53 45 20 49 46 20  59 4F 55 0D 3B 20 55 53  |HESE IF YOU.; US|
00000290: 45 20 44 49 46 46 45 52  45 4E 54 20 53 50 52 49  |E DIFFERENT SPRI|
000002A0: 54 45 53 2E 0D 3B 20 28  30 2C 30 29 20 49 53 20  |TES..; (0,0) IS |
000002B0: 53 50 52 49 54 45 27 53  20 55 50 50 45 52 20 4C  |SPRITE'S UPPER L|
000002C0: 45 46 54 20 50 49 58 45  4C 2E 0D D3 50 52 49 54  |EFT PIXEL...PRIT|
000002D0: 45 5F C8 4F 54 53 50 4F  54 D8 20 3D 20 31 0D D3  |E_.OTSPOT. = 1..|
000002E0: 50 52 49 54 45 5F C8 4F  54 53 50 4F 54 D9 20 3D  |PRITE_.OTSPOT. =|
000002F0: 20 31 0D 0D 3B 20 C2 41  53 45 20 4F 46 20 D6 C9  | 1..; .ASE OF ..|
00000300: C3 20 52 45 47 49 53 54  45 52 53 20 54 4F 20 57  |. REGISTERS TO W|
00000310: 52 49 54 45 20 54 4F 2E  0D D6 C9 C3 5F C2 41 53  |RITE TO....._.AS|
00000320: 45 20 3D 20 24 44 30 30  30 3B 20 C3 36 34 20 56  |E = $D000; .64 V|
00000330: 41 4C 55 45 0D 3B D6 C9  C3 5F C2 41 53 45 20 3D  |ALUE.;..._.ASE =|
00000340: 20 24 31 31 44 36 3B 20  C3 31 32 38 20 56 41 4C  | $11D6; .128 VAL|
00000350: 55 45 2C 20 4C 4F 43 41  54 49 4F 4E 0D 3B 20 4F  |UE, LOCATION.; O|
00000360: 46 20 4D 49 52 52 4F 52  20 52 45 47 49 53 54 45  |F MIRROR REGISTE|
00000370: 52 53 2E 0D 0D 3B 20 CC  4F 43 41 54 49 4F 4E 53  |RS...; .OCATIONS|
00000380: 20 54 4F 20 53 54 4F 52  45 20 42 55 54 54 4F 4E  | TO STORE BUTTON|
00000390: 20 53 54 41 54 45 53 2C  0D 3B 20 24 46 46 20 3D  | STATES,.; $FF =|
000003A0: 20 50 52 45 53 53 45 44  2C 20 24 30 30 20 3D 20  | PRESSED, $00 = |
000003B0: 4E 4F 54 20 50 52 45 53  53 45 44 2E 0D 3B 20 CD  |NOT PRESSED..; .|
000003C0: 4F 55 53 45 20 55 53 45  53 20 42 4F 54 48 20 42  |OUSE USES BOTH B|
000003D0: 55 54 54 4F 4E 53 2C 20  4A 4F 59 53 54 49 43 4B  |UTTONS, JOYSTICK|
000003E0: 0D 3B 20 4F 4E 4C 59 20  55 53 45 53 20 22 CC 45  |.; ONLY USES ".E|
000003F0: 46 54 C2 55 54 54 4F 4E  22 2E 0D CC 45 46 54 C2  |FT.UTTON"...EFT.|
00000400: 55 54 54 4F 4E 20 20 3D  20 24 41 34 3B 20 C3 36  |UTTON  = $A4; .6|
00000410: 34 20 56 41 4C 55 45 0D  D2 49 47 48 54 C2 55 54  |4 VALUE..IGHT.UT|
00000420: 54 4F 4E 20 3D 20 24 41  35 3B 20 C3 36 34 20 56  |TON = $A5; .64 V|
00000430: 41 4C 55 45 0D 3B CC 45  46 54 C2 55 54 54 4F 4E  |ALUE.;.EFT.UTTON|
00000440: 20 20 3D 20 24 46 41 3B  20 C3 31 32 38 20 56 41  |  = $FA; .128 VA|
00000450: 4C 55 45 0D 3B D2 49 47  48 54 C2 55 54 54 4F 4E  |LUE.;.IGHT.UTTON|
00000460: 20 3D 20 24 46 46 3B 20  C3 31 32 38 20 56 41 4C  | = $FF; .128 VAL|
00000470: 55 45 0D 0D 3B 20 CC 4F  43 41 54 49 4F 4E 20 54  |UE..; .OCATION T|
00000480: 4F 20 53 54 4F 52 45 20  50 4F 49 4E 54 45 52 27  |O STORE POINTER'|
00000490: 53 20 43 55 52 52 45 4E  54 0D 3B 20 50 49 58 45  |S CURRENT.; PIXE|
000004A0: 4C 20 43 4F 4F 52 44 49  4E 41 54 45 53 2E 20 D4  |L COORDINATES. .|
000004B0: 48 45 20 44 52 49 56 45  52 20 43 4F 44 45 0D 3B  |HE DRIVER CODE.;|
000004C0: 20 52 45 4C 49 45 53 20  4F 4E 20 48 41 56 49 4E  | RELIES ON HAVIN|
000004D0: 47 20 2A 46 4F 55 52 20  43 4F 4E 53 45 43 55 54  |G *FOUR CONSECUT|
000004E0: 49 56 45 2A 0D 3B 20 42  59 54 45 53 3A 0D 3B 20  |IVE*.; BYTES:.; |
000004F0: 58 20 4C 4F 57 2C 20 58  20 48 49 47 48 2C 20 59  |X LOW, X HIGH, Y|
00000500: 20 4C 4F 57 2C 20 59 20  48 49 47 48 2E 0D C3 4F  | LOW, Y HIGH...O|
00000510: 4F 52 44 49 4E 41 54 45  53 20 3D 20 24 46 42 3B  |ORDINATES = $FB;|
00000520: 20 24 46 42 2D 24 46 45  0D 0D 3B 20 CC 4F 43 41  | $FB-$FE..; .OCA|
00000530: 54 49 4F 4E 20 54 4F 20  53 54 4F 52 45 20 50 4F  |TION TO STORE PO|
00000540: 49 4E 54 45 52 27 53 20  43 55 52 52 45 4E 54 0D  |INTER'S CURRENT.|
00000550: 3B 20 43 48 41 52 41 43  54 45 52 20 43 4F 4F 52  |; CHARACTER COOR|
00000560: 44 49 4E 41 54 45 53 2E  0D C3 48 41 52 D8 20 3D  |DINATES...HAR. =|
00000570: 20 24 42 33 3B 20 C3 36  34 20 56 41 4C 55 45 0D  | $B3; .64 VALUE.|
00000580: C3 48 41 52 D9 20 3D 20  24 42 34 3B 20 C3 36 34  |.HAR. = $B4; .64|
00000590: 20 56 41 4C 55 45 0D 3B  C3 48 41 52 D8 20 3D 20  | VALUE.;.HAR. = |
000005A0: 24 39 42 3B 20 C3 31 32  38 20 56 41 4C 55 45 0D  |$9B; .128 VALUE.|
000005B0: 3B C3 48 41 52 D9 20 3D  20 24 39 43 3B 20 C3 31  |;.HAR. = $9C; .1|
000005C0: 32 38 20 56 41 4C 55 45  0D 0D 0D 3B 20 2D 2D 2D  |28 VALUE...; ---|
000005D0: 20 D3 59 53 54 45 4D 20  43 4F 4E 53 54 41 4E 54  | .YSTEM CONSTANT|
000005E0: 53 0D 0D 3B 20 C9 4E 54  45 52 52 55 50 54 20 56  |S..; .NTERRUPT V|
000005F0: 45 43 54 4F 52 0D 53 59  53 5F 49 49 52 51 20 3D  |ECTOR.SYS_IIRQ =|
00000600: 20 24 30 33 31 34 0D 0D  3B 20 C9 2F CF 20 52 45  | $0314..; ./. RE|
00000610: 47 49 53 54 45 52 53 0D  53 49 44 5F 50 4F 54 20  |GISTERS.SID_POT |
00000620: 20 20 3D 20 24 44 34 31  39 0D 43 49 41 31 5F 50  |  = $D419.CIA1_P|
00000630: 52 41 20 20 3D 20 24 44  43 30 30 0D 43 49 41 31  |RA  = $DC00.CIA1|
00000640: 5F 50 52 42 20 20 3D 20  24 44 43 30 31 0D 43 49  |_PRB  = $DC01.CI|
00000650: 41 31 5F 44 44 52 42 20  3D 20 24 44 43 30 33 0D  |A1_DDRB = $DC03.|
00000660: 3B 4D 4D 55 5F 43 52 20  20 20 20 3D 20 24 46 46  |;MMU_CR    = $FF|
00000670: 30 30 3B 20 C3 31 32 38  20 4F 4E 4C 59 0D 0D 0D  |00; .128 ONLY...|
00000680: 3B 20 2D 2D 2D 20 CC 41  42 45 4C 20 44 45 46 49  |; --- .ABEL DEFI|
00000690: 4E 49 54 49 4F 4E 53 0D  0D 3B 20 CE 45 57 20 4E  |NITIONS..; .EW N|
000006A0: 41 4D 45 53 20 46 4F 52  20 53 4F 4D 45 20 50 52  |AMES FOR SOME PR|
000006B0: 45 43 41 4C 43 55 4C 41  54 45 44 0D 3B 20 56 41  |ECALCULATED.; VA|
000006C0: 4C 55 45 53 2C 20 4F 4E  4C 59 20 54 4F 20 49 4D  |LUES, ONLY TO IM|
000006D0: 50 52 4F 56 45 20 52 45  41 44 41 42 49 4C 49 54  |PROVE READABILIT|
000006E0: 59 2E 0D 3B 20 C4 4F 4E  27 54 20 43 48 41 4E 47  |Y..; .ON'T CHANG|
000006F0: 45 20 54 48 45 53 45 2E  0D D0 4F 49 4E 54 45 52  |E THESE...OINTER|
00000700: D8 4E 4F 57 20 3D 20 C3  4F 4F 52 44 49 4E 41 54  |.NOW = .OORDINAT|
00000710: 45 53 0D D0 4F 49 4E 54  45 52 D9 4E 4F 57 20 3D  |ES..OINTER.NOW =|
00000720: 20 C3 4F 4F 52 44 49 4E  41 54 45 53 2B 32 0D D3  | .OORDINATES+2..|
00000730: 50 52 49 54 45 C1 5F D8  20 3D 20 D6 C9 C3 5F C2  |PRITE._. = ..._.|
00000740: 41 53 45 2B 32 2A D3 50  52 49 54 45 5F C1 0D D3  |ASE+2*.PRITE_...|
00000750: 50 52 49 54 45 C1 5F D9  20 3D 20 D6 C9 C3 5F C2  |PRITE._. = ..._.|
00000760: 41 53 45 2B 32 2A D3 50  52 49 54 45 5F C1 2B 31  |ASE+2*.PRITE_.+1|
00000770: 0D D3 50 52 49 54 45 C2  5F D8 20 3D 20 D6 C9 C3  |..PRITE._. = ...|
00000780: 5F C2 41 53 45 2B 32 2A  D3 50 52 49 54 45 5F C2  |_.ASE+2*.PRITE_.|
00000790: 0D D3 50 52 49 54 45 C2  5F D9 20 3D 20 D6 C9 C3  |..PRITE._. = ...|
000007A0: 5F C2 41 53 45 2B 32 2A  D3 50 52 49 54 45 5F C2  |_.ASE+2*.PRITE_.|
000007B0: 2B 31 0D D3 50 52 49 54  45 53 5F CF C6 20 3D 20  |+1..PRITES_.. = |
000007C0: D6 C9 C3 5F C2 41 53 45  2B 31 36 3B 20 D8 20 CF  |..._.ASE+16; . .|
000007D0: 56 45 52 46 4C 4F 57 0D  3B 20 D4 48 45 20 43 48  |VERFLOW.; .HE CH|
000007E0: 41 52 41 43 54 45 52 20  22 5E 22 20 49 4E 20 54  |ARACTER "^" IN T|
000007F0: 48 45 20 46 4F 4C 4C 4F  57 49 4E 47 0D 3B 20 43  |HE FOLLOWING.; C|
00000800: 41 4C 43 55 4C 41 54 49  4F 4E 20 4D 45 41 4E 53  |ALCULATION MEANS|
00000810: 20 22 54 4F 20 54 48 45  20 50 4F 57 45 52 20 4F  | "TO THE POWER O|
00000820: 46 22 2E 0D 3B 20 C9 54  20 49 53 20 C1 C3 CD C5  |F"..; .T IS ....|
00000830: 20 53 59 4E 54 41 58 20  2D 20 49 46 20 59 4F 55  | SYNTAX - IF YOU|
00000840: 52 20 41 53 53 45 4D 42  4C 45 52 0D 3B 20 43 41  |R ASSEMBLER.; CA|
00000850: 4E 4E 4F 54 20 44 4F 20  54 48 49 53 2C 20 59 4F  |NNOT DO THIS, YO|
00000860: 55 20 4D 41 59 20 57 41  4E 54 20 54 4F 20 55 53  |U MAY WANT TO US|
00000870: 45 0D 3B 20 48 41 52 44  43 4F 44 45 44 20 56 41  |E.; HARDCODED VA|
00000880: 4C 55 45 53 20 48 45 52  45 20 49 4E 53 54 45 41  |LUES HERE INSTEA|
00000890: 44 20 4F 46 0D 3B 20 43  41 4C 43 55 4C 41 54 49  |D OF.; CALCULATI|
000008A0: 4F 4E 53 2E 0D D3 50 52  49 54 45 53 5F C2 49 54  |ONS...PRITES_.IT|
000008B0: 4D 41 53 4B 20 3D 20 32  5E D3 50 52 49 54 45 5F  |MASK = 2^.PRITE_|
000008C0: C1 2B 32 5E D3 50 52 49  54 45 5F C2 0D D3 50 52  |.+2^.PRITE_...PR|
000008D0: 49 54 45 CF 46 46 53 45  54 5F D8 20 3D 20 24 31  |ITE.FFSET_. = $1|
000008E0: 38 2D D3 50 52 49 54 45  5F C8 4F 54 53 50 4F 54  |8-.PRITE_.OTSPOT|
000008F0: D8 0D D3 50 52 49 54 45  CF 46 46 53 45 54 5F D9  |...PRITE.FFSET_.|
00000900: 20 3D 20 24 33 32 2D D3  50 52 49 54 45 5F C8 4F  | = $32-.PRITE_.O|
00000910: 54 53 50 4F 54 D9 0D 3B  20 C9 4E 20 54 48 45 20  |TSPOT..; .N THE |
00000920: 53 50 52 49 54 45 20 43  4F 4F 52 44 49 4E 41 54  |SPRITE COORDINAT|
00000930: 45 20 53 59 53 54 45 4D  2C 20 54 48 45 0D 3B 20  |E SYSTEM, THE.; |
00000940: 47 52 41 50 48 49 43 53  20 50 49 58 45 4C 20 28  |GRAPHICS PIXEL (|
00000950: 30 2C 30 29 20 48 41 53  20 54 48 45 0D 3B 20 43  |0,0) HAS THE.; C|
00000960: 4F 4F 52 44 49 4E 41 54  45 53 20 28 24 31 38 2C  |OORDINATES ($18,|
00000970: 24 33 32 29 2C 20 53 4F  20 54 48 45 53 45 20 41  |$32), SO THESE A|
00000980: 52 45 0D 3B 20 4E 45 45  44 45 44 20 46 4F 52 20  |RE.; NEEDED FOR |
00000990: 43 4F 4E 56 45 52 54 49  4E 47 2E 20 C2 4C 41 4D  |CONVERTING. .LAM|
000009A0: 45 20 54 48 45 20 D6 C9  C3 2E 0D 0D 0D 3B 20 2D  |E THE .......; -|
000009B0: 2D 2D 20 C5 4E 54 52 59  20 50 4F 49 4E 54 0D 0D  |-- .NTRY POINT..|
000009C0: 3B 20 C2 45 43 41 55 53  45 20 54 48 49 53 20 52  |; .ECAUSE THIS R|
000009D0: 4F 55 54 49 4E 45 20 49  53 20 54 48 45 20 46 49  |OUTINE IS THE FI|
000009E0: 52 53 54 2C 0D 3B 20 54  48 45 20 46 49 4C 45 20  |RST,.; THE FILE |
000009F0: 43 41 4E 20 42 45 20 C2  CF CF D4 45 44 20 4F 4E  |CAN BE ....ED ON|
00000A00: 20 41 20 C3 31 32 38 2E  0D C9 4E 49 54 0D 3B 20  | A .128...NIT.; |
00000A10: C9 4E 49 54 49 41 4C 49  53 41 54 49 4F 4E 20 43  |.NITIALISATION C|
00000A20: 4F 44 45 2C 20 49 4E 53  54 41 4C 4C 53 20 44 52  |ODE, INSTALLS DR|
00000A30: 49 56 45 52 0D 3B 20 4F  4E 20 C9 D2 D1 20 56 45  |IVER.; ON ... VE|
00000A40: 43 54 4F 52 2E 0D 3B 20  C6 45 54 43 48 20 C9 D2  |CTOR..; .ETCH ..|
00000A50: D1 20 56 45 43 54 4F 52  20 41 4E 44 20 57 52 49  |. VECTOR AND WRI|
00000A60: 54 45 20 54 4F 20 45 4E  44 0D 20 20 20 20 20 20  |TE TO END.      |
00000A70: 20 20 4C 44 41 20 53 59  53 5F 49 49 52 51 0D 20  |  LDA SYS_IIRQ. |
00000A80: 20 20 20 20 20 20 20 4C  44 58 20 53 59 53 5F 49  |       LDX SYS_I|
00000A90: 49 52 51 2B 31 0D 20 20  20 20 20 20 20 20 53 54  |IRQ+1.        ST|
00000AA0: 41 20 4D 4F 44 31 36 2B  31 0D 20 20 20 20 20 20  |A MOD16+1.      |
00000AB0: 20 20 53 54 58 20 4D 4F  44 31 36 2B 32 0D 3B 20  |  STX MOD16+2.; |
00000AC0: CC 45 54 20 C9 D2 D1 20  56 45 43 54 4F 52 20 50  |.ET ... VECTOR P|
00000AD0: 4F 49 4E 54 20 54 4F 20  44 52 49 56 45 52 20 43  |OINT TO DRIVER C|
00000AE0: 4F 44 45 0D 20 20 20 20  20 20 20 20 4C 44 41 20  |ODE.        LDA |
00000AF0: 23 3C C5 4E 54 52 59 0D  20 20 20 20 20 20 20 20  |#<.NTRY.        |
00000B00: 4C 44 58 20 23 3E C5 4E  54 52 59 0D 20 20 20 20  |LDX #>.NTRY.    |
00000B10: 20 20 20 20 50 48 50 0D  20 20 20 20 20 20 20 20  |    PHP.        |
00000B20: 53 45 49 0D 20 20 20 20  20 20 20 20 53 54 41 20  |SEI.        STA |
00000B30: 53 59 53 5F 49 49 52 51  0D 20 20 20 20 20 20 20  |SYS_IIRQ.       |
00000B40: 20 53 54 58 20 53 59 53  5F 49 49 52 51 2B 31 0D  | STX SYS_IIRQ+1.|
00000B50: 20 20 20 20 20 20 20 20  50 4C 50 0D 3B 20 D4 48  |        PLP.; .H|
00000B60: 45 20 46 4F 4C 4C 4F 57  49 4E 47 20 46 49 56 45  |E FOLLOWING FIVE|
00000B70: 20 43 4F 4D 4D 41 4E 44  53 20 41 52 45 20 4F 4E  | COMMANDS ARE ON|
00000B80: 4C 59 0D 3B 20 4E 45 45  44 45 44 20 4F 4E 20 54  |LY.; NEEDED ON T|
00000B90: 48 45 20 C3 31 32 38 2E  0D 3B 20 20 20 20 20 20  |HE .128..;      |
00000BA0: 20 4C 44 41 20 4D 4D 55  5F 43 52 0D 3B 20 20 20  | LDA MMU_CR.;   |
00000BB0: 20 20 20 20 54 41 59 0D  3B 20 20 20 20 20 20 20  |    TAY.;       |
00000BC0: 41 4E 44 20 23 24 46 45  3B 20 41 43 54 49 56 41  |AND #$FE; ACTIVA|
00000BD0: 54 45 20 C9 2F CF 20 43  48 49 50 53 0D 3B 20 20  |TE ./. CHIPS.;  |
00000BE0: 20 20 20 20 20 53 54 41  20 4D 4D 55 5F 43 52 0D  |     STA MMU_CR.|
00000BF0: 3B 20 C9 4E 49 54 20 4D  4F 55 53 45 20 42 55 54  |; .NIT MOUSE BUT|
00000C00: 54 4F 4E 53 0D 20 20 20  20 20 20 20 20 4C 44 41  |TONS.        LDA|
00000C10: 20 23 24 31 31 0D 20 20  20 20 20 20 20 20 53 54  | #$11.        ST|
00000C20: 41 20 43 49 41 31 5F 50  52 42 0D 3B 20 20 20 20  |A CIA1_PRB.;    |
00000C30: 20 20 20 53 54 59 20 4D  4D 55 5F 43 52 3B 20 C3  |   STY MMU_CR; .|
00000C40: 31 32 38 20 4F 4E 4C 59  0D 0D 3B 20 D4 48 45 20  |128 ONLY..; .HE |
00000C50: 46 4F 4C 4C 4F 57 49 4E  47 20 54 48 52 45 45 20  |FOLLOWING THREE |
00000C60: 4D 49 4E 49 2D 52 4F 55  54 49 4E 45 53 20 41 52  |MINI-ROUTINES AR|
00000C70: 45 0D 3B 20 4F 4E 4C 59  20 4E 45 45 44 45 44 20  |E.; ONLY NEEDED |
00000C80: 4F 4E 20 54 48 45 20 C3  36 34 2E 0D 0D 3B 20 C3  |ON THE .64...; .|
00000C90: 4F 50 59 20 53 50 52 49  54 45 53 20 54 4F 20 54  |OPY SPRITES TO T|
00000CA0: 41 50 45 20 42 55 46 46  45 52 0D 20 20 20 20 20  |APE BUFFER.     |
00000CB0: 20 20 20 4C 44 58 20 23  31 32 37 0D C3 50 CC 50  |   LDX #127..P.P|
00000CC0: 20 20 20 20 4C 44 41 20  D3 50 52 49 54 45 53 2C  |    LDA .PRITES,|
00000CD0: 58 0D 20 20 20 20 20 20  20 20 53 54 41 20 24 30  |X.        STA $0|
00000CE0: 33 34 30 2C 58 0D 20 20  20 20 20 20 20 20 44 45  |340,X.        DE|
00000CF0: 58 0D 20 20 20 20 20 20  20 20 42 50 4C 20 C3 50  |X.        BPL .P|
00000D00: CC 50 0D 20 20 20 20 20  20 20 20 4C 44 41 20 23  |.P.        LDA #|
00000D10: D3 50 52 49 54 45 53 5F  C2 49 54 4D 41 53 4B 0D  |.PRITES_.ITMASK.|
00000D20: 3B 20 D3 45 54 20 53 50  52 49 54 45 20 42 4C 4F  |; .ET SPRITE BLO|
00000D30: 43 4B 20 50 4F 49 4E 54  45 52 53 0D 20 20 20 20  |CK POINTERS.    |
00000D40: 20 20 20 20 4C 44 58 20  23 24 30 44 0D 20 20 20  |    LDX #$0D.   |
00000D50: 20 20 20 20 20 53 54 58  20 32 30 34 30 2B D3 50  |     STX 2040+.P|
00000D60: 52 49 54 45 5F C1 0D 20  20 20 20 20 20 20 20 49  |RITE_..        I|
00000D70: 4E 58 0D 20 20 20 20 20  20 20 20 53 54 58 20 32  |NX.        STX 2|
00000D80: 30 34 30 2B D3 50 52 49  54 45 5F C2 0D 3B 20 C1  |040+.PRITE_..; .|
00000D90: 43 54 49 56 41 54 45 20  50 4F 49 4E 54 45 52 20  |CTIVATE POINTER |
00000DA0: 53 50 52 49 54 45 53 0D  20 20 20 20 20 20 20 20  |SPRITES.        |
00000DB0: 4F 52 41 20 D6 C9 C3 5F  C2 41 53 45 2B 32 31 0D  |ORA ..._.ASE+21.|
00000DC0: 20 20 20 20 20 20 20 20  53 54 41 20 D6 C9 C3 5F  |        STA ..._|
00000DD0: C2 41 53 45 2B 32 31 0D  0D 3B 20 C6 52 4F 4D 20  |.ASE+21..; .ROM |
00000DE0: 48 45 52 45 20 4F 4E 2C  20 42 4F 54 48 20 C3 36  |HERE ON, BOTH .6|
00000DF0: 34 2B C3 31 32 38 20 41  47 41 49 4E 2E 20 3A 29  |4+.128 AGAIN. :)|
00000E00: 0D 20 20 20 20 20 20 20  20 52 54 53 0D 0D 0D 3B  |.        RTS...;|
00000E10: 20 2D 2D 2D 20 D6 41 52  49 41 42 4C 45 53 0D 0D  | --- .ARIABLES..|
00000E20: 3B 20 D0 49 58 45 4C 20  43 4F 55 4E 54 45 52 20  |; .IXEL COUNTER |
00000E30: 42 45 46 4F 52 45 20 41  43 43 45 4C 45 52 41 54  |BEFORE ACCELERAT|
00000E40: 49 4E 47 0D CA 4F 59 D7  41 49 54 54 49 4D 45 20  |ING..OY.AITTIME |
00000E50: 21 42 59 54 45 20 30 0D  0D 0D 3B 20 2D 2D 2D 20  |!BYTE 0...; --- |
00000E60: CD 41 49 4E 20 43 4F 44  45 0D 0D C5 4E 54 52 59  |.AIN CODE...NTRY|
00000E70: 0D 3B 20 D4 48 45 20 44  52 49 56 45 52 20 43 4F  |.; .HE DRIVER CO|
00000E80: 4E 53 49 53 54 53 20 4F  46 20 53 45 56 45 52 41  |NSISTS OF SEVERA|
00000E90: 4C 0D 3B 20 44 49 53 54  49 4E 43 54 20 50 41 52  |L.; DISTINCT PAR|
00000EA0: 54 53 2E 20 D4 4F 20 4D  49 4E 49 4D 49 53 45 0D  |TS. .O MINIMISE.|
00000EB0: 3B 20 50 45 52 46 4F 52  4D 41 4E 43 45 20 57 41  |; PERFORMANCE WA|
00000EC0: 53 54 41 47 45 2C 20 59  4F 55 20 53 48 4F 55 4C  |STAGE, YOU SHOUL|
00000ED0: 44 0D 3B 20 52 45 4D 4F  56 45 20 41 4C 4C 20 50  |D.; REMOVE ALL P|
00000EE0: 41 52 54 53 20 59 4F 55  20 44 4F 4E 27 54 20 4E  |ARTS YOU DON'T N|
00000EF0: 45 45 44 20 46 4F 52 0D  3B 20 54 48 45 20 53 50  |EED FOR.; THE SP|
00000F00: 45 43 49 46 49 43 20 41  50 50 4C 49 43 41 54 49  |ECIFIC APPLICATI|
00000F10: 4F 4E 2E 0D 0D 0D 3B 20  2D 2D 2D 20 D0 41 52 54  |ON....; --- .ART|
00000F20: 20 30 2C 20 49 4E 49 54  49 41 4C 49 53 41 54 49  | 0, INITIALISATI|
00000F30: 4F 4E 53 0D 0D 3B 20 CD  41 4B 45 20 53 55 52 45  |ONS..; .AKE SURE|
00000F40: 20 44 45 43 49 4D 41 4C  20 4D 4F 44 45 20 49 53  | DECIMAL MODE IS|
00000F50: 20 4F 46 46 0D 20 20 20  20 20 20 20 20 43 4C 44  | OFF.        CLD|
00000F60: 0D 3B 20 D3 45 54 20 42  55 54 54 4F 4E 20 53 54  |.; .ET BUTTON ST|
00000F70: 41 54 45 53 20 54 4F 20  22 4E 4F 54 20 50 52 45  |ATES TO "NOT PRE|
00000F80: 53 53 45 44 22 2C 0D 3B  20 53 4F 20 54 48 45 20  |SSED",.; SO THE |
00000F90: 4F 54 48 45 52 20 50 41  52 54 53 20 4F 4E 4C 59  |OTHER PARTS ONLY|
00000FA0: 20 48 41 56 45 20 54 4F  20 44 45 41 4C 0D 3B 20  | HAVE TO DEAL.; |
00000FB0: 57 49 54 48 20 53 45 54  54 49 4E 47 20 54 48 45  |WITH SETTING THE|
00000FC0: 4D 20 54 4F 20 22 50 52  45 53 53 45 44 22 2E 0D  |M TO "PRESSED"..|
00000FD0: 20 20 20 20 20 20 20 20  4C 44 41 20 23 24 30 30  |        LDA #$00|
00000FE0: 0D 20 20 20 20 20 20 20  20 53 54 41 20 CC 45 46  |.        STA .EF|
00000FF0: 54 C2 55 54 54 4F 4E 0D  20 20 20 20 20 20 20 20  |T.UTTON.        |
00001000: 53 54 41 20 D2 49 47 48  54 C2 55 54 54 4F 4E 0D  |STA .IGHT.UTTON.|
00001010: 0D 0D 3B 20 2D 2D 2D 20  D0 41 52 54 20 31 2C 20  |..; --- .ART 1, |
00001020: 48 41 4E 44 4C 49 4E 47  20 4D 4F 55 53 45 20 4D  |HANDLING MOUSE M|
00001030: 4F 56 45 4D 45 4E 54 53  0D 0D 3B 20 4D 4F 55 53  |OVEMENTS..; MOUS|
00001040: 45 20 58 0D 20 20 20 20  20 20 20 20 4C 44 58 20  |E X.        LDX |
00001050: 23 24 30 30 3B 20 30 20  4D 45 41 4E 53 20 22 58  |#$00; 0 MEANS "X|
00001060: 20 53 54 55 46 46 22 0D  20 20 20 20 20 20 20 20  | STUFF".        |
00001070: 4A 53 52 20 D0 4F 54 C4  45 4C 54 41 0D 3B 20 CE  |JSR .OT.ELTA.; .|
00001080: 4F 57 20 53 49 47 4E 45  44 20 58 20 4D 4F 56 45  |OW SIGNED X MOVE|
00001090: 4D 45 4E 54 20 49 53 20  49 4E 20 C1 2F D9 2E 0D  |MENT IS IN ./...|
000010A0: 3B 20 C1 44 44 20 54 4F  20 43 55 52 52 45 4E 54  |; .DD TO CURRENT|
000010B0: 20 58 20 56 41 4C 55 45  2E 0D 20 20 20 20 20 20  | X VALUE..      |
000010C0: 20 20 43 4C 43 0D 20 20  20 20 20 20 20 20 41 44  |  CLC.        AD|
000010D0: 43 20 D0 4F 49 4E 54 45  52 D8 4E 4F 57 0D 20 20  |C .OINTER.NOW.  |
000010E0: 20 20 20 20 20 20 53 54  41 20 D0 4F 49 4E 54 45  |      STA .OINTE|
000010F0: 52 D8 4E 4F 57 0D 20 20  20 20 20 20 20 20 54 59  |R.NOW.        TY|
00001100: 41 0D 20 20 20 20 20 20  20 20 41 44 43 20 D0 4F  |A.        ADC .O|
00001110: 49 4E 54 45 52 D8 4E 4F  57 2B 31 0D 20 20 20 20  |INTER.NOW+1.    |
00001120: 20 20 20 20 53 54 41 20  D0 4F 49 4E 54 45 52 D8  |    STA .OINTER.|
00001130: 4E 4F 57 2B 31 0D 3B 20  4D 4F 55 53 45 20 59 0D  |NOW+1.; MOUSE Y.|
00001140: 20 20 20 20 20 20 20 20  4C 44 58 20 23 24 30 31  |        LDX #$01|
00001150: 3B 20 31 20 4D 45 41 4E  53 20 22 59 20 53 54 55  |; 1 MEANS "Y STU|
00001160: 46 46 22 0D 20 20 20 20  20 20 20 20 4A 53 52 20  |FF".        JSR |
00001170: D0 4F 54 C4 45 4C 54 41  0D 3B 20 CE 4F 57 20 53  |.OT.ELTA.; .OW S|
00001180: 49 47 4E 45 44 20 59 20  4D 4F 56 45 4D 45 4E 54  |IGNED Y MOVEMENT|
00001190: 20 49 53 20 49 4E 20 C1  2F D9 2E 0D 3B 20 CD 4F  | IS IN ./...; .O|
000011A0: 55 53 45 20 41 4E 44 20  43 4F 4D 50 55 54 45 52  |USE AND COMPUTER|
000011B0: 20 55 53 45 20 44 49 46  46 45 52 45 4E 54 20 59  | USE DIFFERENT Y|
000011C0: 0D 3B 20 44 49 52 45 43  54 49 4F 4E 53 2C 20 53  |.; DIRECTIONS, S|
000011D0: 4F 20 44 4F 4E 27 54 20  41 44 44 20 54 4F 2C 20  |O DON'T ADD TO, |
000011E0: 42 55 54 0D 3B 20 53 55  42 54 52 41 43 54 20 46  |BUT.; SUBTRACT F|
000011F0: 52 4F 4D 20 43 55 52 52  45 4E 54 20 59 20 56 41  |ROM CURRENT Y VA|
00001200: 4C 55 45 2E 0D 3B 20 D4  48 49 53 20 49 53 20 41  |LUE..; .HIS IS A|
00001210: 20 52 45 56 45 52 53 45  20 53 55 42 54 52 41 43  | REVERSE SUBTRAC|
00001220: 54 49 4F 4E 20 2D 20 49  54 0D 3B 20 4D 49 47 48  |TION - IT.; MIGH|
00001230: 54 20 42 45 20 48 41 52  44 45 52 20 54 4F 20 55  |T BE HARDER TO U|
00001240: 4E 44 45 52 53 54 41 4E  44 2C 20 42 55 54 20 49  |NDERSTAND, BUT I|
00001250: 54 0D 3B 20 49 53 20 46  41 53 54 45 52 20 41 4E  |T.; IS FASTER AN|
00001260: 44 20 53 4D 41 4C 4C 45  52 20 54 48 41 4E 20 54  |D SMALLER THAN T|
00001270: 48 45 20 55 53 55 41 4C  0D 3B 20 57 41 59 2E 0D  |HE USUAL.; WAY..|
00001280: 20 20 20 20 20 20 20 20  43 4C 43 0D 20 20 20 20  |        CLC.    |
00001290: 20 20 20 20 53 42 43 20  D0 4F 49 4E 54 45 52 D9  |    SBC .OINTER.|
000012A0: 4E 4F 57 0D 20 20 20 20  20 20 20 20 45 4F 52 20  |NOW.        EOR |
000012B0: 23 24 46 46 0D 20 20 20  20 20 20 20 20 53 54 41  |#$FF.        STA|
000012C0: 20 D0 4F 49 4E 54 45 52  D9 4E 4F 57 0D 20 20 20  | .OINTER.NOW.   |
000012D0: 20 20 20 20 20 54 59 41  0D 20 20 20 20 20 20 20  |     TYA.       |
000012E0: 20 53 42 43 20 D0 4F 49  4E 54 45 52 D9 4E 4F 57  | SBC .OINTER.NOW|
000012F0: 2B 31 0D 20 20 20 20 20  20 20 20 45 4F 52 20 23  |+1.        EOR #|
00001300: 24 46 46 0D 20 20 20 20  20 20 20 20 53 54 41 20  |$FF.        STA |
00001310: D0 4F 49 4E 54 45 52 D9  4E 4F 57 2B 31 0D 0D 0D  |.OINTER.NOW+1...|
00001320: 3B 20 2D 2D 2D 20 D0 41  52 54 20 32 2C 20 48 41  |; --- .ART 2, HA|
00001330: 4E 44 4C 49 4E 47 20 4D  4F 55 53 45 20 42 55 54  |NDLING MOUSE BUT|
00001340: 54 4F 4E 53 0D 0D 3B 20  D0 52 45 50 41 52 45 20  |TONS..; .REPARE |
00001350: C3 C9 C1 20 42 59 20 53  45 54 54 49 4E 47 20 42  |... BY SETTING B|
00001360: 49 54 53 20 54 4F 20 49  4E 50 55 54 0D 20 20 20  |ITS TO INPUT.   |
00001370: 20 20 20 20 20 4C 44 59  20 23 24 31 31 0D 20 20  |     LDY #$11.  |
00001380: 20 20 20 20 20 20 53 54  59 20 43 49 41 31 5F 44  |      STY CIA1_D|
00001390: 44 52 42 0D 20 20 20 20  20 20 20 20 4C 44 58 20  |DRB.        LDX |
000013A0: 23 24 46 46 3B 20 24 46  46 20 4D 45 41 4E 53 20  |#$FF; $FF MEANS |
000013B0: 22 50 52 45 53 53 45 44  22 0D 20 20 20 20 20 20  |"PRESSED".      |
000013C0: 20 20 4C 44 41 20 23 24  31 30 3B 20 43 48 45 43  |  LDA #$10; CHEC|
000013D0: 4B 20 4C 45 46 54 20 42  55 54 54 4F 4E 0D 20 20  |K LEFT BUTTON.  |
000013E0: 20 20 20 20 20 20 42 49  54 20 43 49 41 31 5F 50  |      BIT CIA1_P|
000013F0: 52 42 0D 20 20 20 20 20  20 20 20 42 4E 45 20 CE  |RB.        BNE .|
00001400: 4F 54 CC C2 0D 20 20 20  20 20 20 20 20 53 54 58  |OT...        STX|
00001410: 20 CC 45 46 54 C2 55 54  54 4F 4E 3B 20 53 54 4F  | .EFT.UTTON; STO|
00001420: 52 45 20 53 54 41 54 45  0D CE 4F 54 CC C2 20 20  |RE STATE..OT..  |
00001430: 20 4C 44 41 20 23 24 30  31 3B 20 43 48 45 43 4B  | LDA #$01; CHECK|
00001440: 20 52 49 47 48 54 20 42  55 54 54 4F 4E 0D 20 20  | RIGHT BUTTON.  |
00001450: 20 20 20 20 20 20 42 49  54 20 43 49 41 31 5F 50  |      BIT CIA1_P|
00001460: 52 42 0D 20 20 20 20 20  20 20 20 42 4E 45 20 CE  |RB.        BNE .|
00001470: 4F 54 D2 C2 0D 20 20 20  20 20 20 20 20 53 54 58  |OT...        STX|
00001480: 20 D2 49 47 48 54 C2 55  54 54 4F 4E 3B 20 53 54  | .IGHT.UTTON; ST|
00001490: 4F 52 45 20 53 54 41 54  45 0D 3B 20 D2 45 53 45  |ORE STATE.; .ESE|
000014A0: 54 20 C3 C9 C1 20 54 4F  20 4E 4F 52 4D 41 4C 20  |T ... TO NORMAL |
000014B0: 53 54 41 54 45 0D CE 4F  54 D2 C2 20 20 20 4C 44  |STATE..OT..   LD|
000014C0: 59 20 23 24 30 30 0D 20  20 20 20 20 20 20 20 53  |Y #$00.        S|
000014D0: 54 59 20 43 49 41 31 5F  44 44 52 42 0D 0D 0D 3B  |TY CIA1_DDRB...;|
000014E0: 20 2D 2D 2D 20 D0 41 52  54 20 33 2C 20 48 41 4E  | --- .ART 3, HAN|
000014F0: 44 4C 49 4E 47 20 54 48  45 20 4A 4F 59 53 54 49  |DLING THE JOYSTI|
00001500: 43 4B 0D 0D 3B 20 C6 45  54 43 48 20 42 59 54 45  |CK..; .ETCH BYTE|
00001510: 20 48 4F 4C 44 49 4E 47  20 44 49 52 45 43 54 49  | HOLDING DIRECTI|
00001520: 4F 4E 20 46 4C 41 47 53  0D 20 20 20 20 20 20 20  |ON FLAGS.       |
00001530: 20 4C 44 41 20 43 49 41  31 5F 50 52 41 0D 20 20  | LDA CIA1_PRA.  |
00001540: 20 20 20 20 20 20 54 41  58 3B 20 2E 2E 2E 41 4E  |      TAX; ...AN|
00001550: 44 20 52 45 4D 45 4D 42  45 52 20 49 54 0D 0D 3B  |D REMEMBER IT..;|
00001560: 20 C3 48 45 43 4B 20 27  55 50 27 20 44 49 52 45  | .HECK 'UP' DIRE|
00001570: 43 54 49 4F 4E 0D 20 20  20 20 20 20 20 20 52 4F  |CTION.        RO|
00001580: 52 0D 20 20 20 20 20 20  20 20 42 43 53 20 44 4F  |R.        BCS DO|
00001590: 57 4E 0D 3B 20 D3 55 42  54 52 41 43 54 20 43 55  |WN.; .UBTRACT CU|
000015A0: 52 52 45 4E 54 20 53 54  45 50 20 53 49 5A 45 20  |RRENT STEP SIZE |
000015B0: 46 52 4F 4D 20 59 0D 3B  20 56 41 4C 55 45 20 49  |FROM Y.; VALUE I|
000015C0: 46 20 4E 45 45 44 45 44  2E 0D 20 20 20 20 20 20  |F NEEDED..      |
000015D0: 20 20 54 41 59 0D 20 20  20 20 20 20 20 20 53 45  |  TAY.        SE|
000015E0: 43 0D 20 20 20 20 20 20  20 20 4C 44 41 20 D0 4F  |C.        LDA .O|
000015F0: 49 4E 54 45 52 D9 4E 4F  57 0D 20 20 20 20 20 20  |INTER.NOW.      |
00001600: 20 20 53 42 43 20 CA 4F  59 D3 54 45 50 53 49 5A  |  SBC .OY.TEPSIZ|
00001610: 45 0D 20 20 20 20 20 20  20 20 53 54 41 20 D0 4F  |E.        STA .O|
00001620: 49 4E 54 45 52 D9 4E 4F  57 0D 20 20 20 20 20 20  |INTER.NOW.      |
00001630: 20 20 42 43 53 20 46 49  58 C8 49 D5 50 0D 20 20  |  BCS FIX.I.P.  |
00001640: 20 20 20 20 20 20 44 45  43 20 D0 4F 49 4E 54 45  |      DEC .OINTE|
00001650: 52 D9 4E 4F 57 2B 31 0D  46 49 58 C8 49 D5 50 20  |R.NOW+1.FIX.I.P |
00001660: 54 59 41 0D 0D 3B 20 C3  48 45 43 4B 20 27 44 4F  |TYA..; .HECK 'DO|
00001670: 57 4E 27 20 44 49 52 45  43 54 49 4F 4E 0D 44 4F  |WN' DIRECTION.DO|
00001680: 57 4E 20 20 20 20 52 4F  52 0D 20 20 20 20 20 20  |WN    ROR.      |
00001690: 20 20 42 43 53 20 4C 45  46 54 0D 3B 20 C1 44 44  |  BCS LEFT.; .DD|
000016A0: 20 43 55 52 52 45 4E 54  20 53 54 45 50 20 53 49  | CURRENT STEP SI|
000016B0: 5A 45 20 54 4F 20 59 20  56 41 4C 55 45 20 49 46  |ZE TO Y VALUE IF|
000016C0: 0D 3B 20 4E 45 45 44 45  44 2E 0D 20 20 20 20 20  |.; NEEDED..     |
000016D0: 20 20 20 54 41 59 0D 20  20 20 20 20 20 20 20 3B  |   TAY.        ;|
000016E0: 43 4C 43 3B 20 C3 20 49  53 20 41 4C 57 41 59 53  |CLC; . IS ALWAYS|
000016F0: 20 43 4C 45 41 52 20 48  45 52 45 0D 20 20 20 20  | CLEAR HERE.    |
00001700: 20 20 20 20 4C 44 41 20  D0 4F 49 4E 54 45 52 D9  |    LDA .OINTER.|
00001710: 4E 4F 57 0D 20 20 20 20  20 20 20 20 41 44 43 20  |NOW.        ADC |
00001720: CA 4F 59 D3 54 45 50 53  49 5A 45 0D 20 20 20 20  |.OY.TEPSIZE.    |
00001730: 20 20 20 20 53 54 41 20  D0 4F 49 4E 54 45 52 D9  |    STA .OINTER.|
00001740: 4E 4F 57 0D 20 20 20 20  20 20 20 20 42 43 43 20  |NOW.        BCC |
00001750: 46 49 58 C8 49 C4 4F 57  4E 0D 20 20 20 20 20 20  |FIX.I.OWN.      |
00001760: 20 20 49 4E 43 20 D0 4F  49 4E 54 45 52 D9 4E 4F  |  INC .OINTER.NO|
00001770: 57 2B 31 0D 46 49 58 C8  49 C4 4F 57 4E 20 20 20  |W+1.FIX.I.OWN   |
00001780: 20 20 20 20 54 59 41 0D  0D 3B 20 C3 48 45 43 4B  |    TYA..; .HECK|
00001790: 20 27 4C 45 46 54 27 20  44 49 52 45 43 54 49 4F  | 'LEFT' DIRECTIO|
000017A0: 4E 0D 4C 45 46 54 20 20  20 20 52 4F 52 0D 20 20  |N.LEFT    ROR.  |
000017B0: 20 20 20 20 20 20 42 43  53 20 52 49 47 48 54 0D  |      BCS RIGHT.|
000017C0: 3B 20 D3 55 42 54 52 41  43 54 20 43 55 52 52 45  |; .UBTRACT CURRE|
000017D0: 4E 54 20 53 54 45 50 20  53 49 5A 45 20 46 52 4F  |NT STEP SIZE FRO|
000017E0: 4D 20 58 0D 3B 20 56 41  4C 55 45 20 49 46 20 4E  |M X.; VALUE IF N|
000017F0: 45 45 44 45 44 2E 0D 20  20 20 20 20 20 20 20 54  |EEDED..        T|
00001800: 41 59 0D 20 20 20 20 20  20 20 20 53 45 43 0D 20  |AY.        SEC. |
00001810: 20 20 20 20 20 20 20 4C  44 41 20 D0 4F 49 4E 54  |       LDA .OINT|
00001820: 45 52 D8 4E 4F 57 0D 20  20 20 20 20 20 20 20 53  |ER.NOW.        S|
00001830: 42 43 20 CA 4F 59 D3 54  45 50 53 49 5A 45 0D 20  |BC .OY.TEPSIZE. |
00001840: 20 20 20 20 20 20 20 53  54 41 20 D0 4F 49 4E 54  |       STA .OINT|
00001850: 45 52 D8 4E 4F 57 0D 20  20 20 20 20 20 20 20 42  |ER.NOW.        B|
00001860: 43 53 20 46 49 58 C8 49  CC 45 46 54 0D 20 20 20  |CS FIX.I.EFT.   |
00001870: 20 20 20 20 20 44 45 43  20 D0 4F 49 4E 54 45 52  |     DEC .OINTER|
00001880: D8 4E 4F 57 2B 31 0D 46  49 58 C8 49 CC 45 46 54  |.NOW+1.FIX.I.EFT|
00001890: 20 20 20 20 20 20 20 54  59 41 0D 0D 3B 20 C3 48  |       TYA..; .H|
000018A0: 45 43 4B 20 27 52 49 47  48 54 27 20 44 49 52 45  |ECK 'RIGHT' DIRE|
000018B0: 43 54 49 4F 4E 0D 52 49  47 48 54 20 20 20 52 4F  |CTION.RIGHT   RO|
000018C0: 52 0D 20 20 20 20 20 20  20 20 42 43 53 20 D0 41  |R.        BCS .A|
000018D0: 52 54 33 C5 4E 44 0D 3B  20 C1 44 44 20 43 55 52  |RT3.ND.; .DD CUR|
000018E0: 52 45 4E 54 20 53 54 45  50 20 53 49 5A 45 20 54  |RENT STEP SIZE T|
000018F0: 4F 20 58 20 56 41 4C 55  45 20 49 46 0D 3B 20 4E  |O X VALUE IF.; N|
00001900: 45 45 44 45 44 2E 0D 20  20 20 20 20 20 20 20 54  |EEDED..        T|
00001910: 41 59 0D 20 20 20 20 20  20 20 20 3B 43 4C 43 3B  |AY.        ;CLC;|
00001920: 20 C3 20 49 53 20 41 4C  57 41 59 53 20 43 4C 45  | . IS ALWAYS CLE|
00001930: 41 52 20 48 45 52 45 0D  20 20 20 20 20 20 20 20  |AR HERE.        |
00001940: 4C 44 41 20 D0 4F 49 4E  54 45 52 D8 4E 4F 57 0D  |LDA .OINTER.NOW.|
00001950: 20 20 20 20 20 20 20 20  41 44 43 20 CA 4F 59 D3  |        ADC .OY.|
00001960: 54 45 50 53 49 5A 45 0D  20 20 20 20 20 20 20 20  |TEPSIZE.        |
00001970: 53 54 41 20 D0 4F 49 4E  54 45 52 D8 4E 4F 57 0D  |STA .OINTER.NOW.|
00001980: 20 20 20 20 20 20 20 20  42 43 43 20 46 49 58 C8  |        BCC FIX.|
00001990: 49 D2 49 47 48 54 0D 20  20 20 20 20 20 20 20 49  |I.IGHT.        I|
000019A0: 4E 43 20 D0 4F 49 4E 54  45 52 D8 4E 4F 57 2B 31  |NC .OINTER.NOW+1|
000019B0: 0D 46 49 58 C8 49 D2 49  47 48 54 20 20 20 20 20  |.FIX.I.IGHT     |
000019C0: 20 54 59 41 0D D0 41 52  54 33 C5 4E 44 0D 0D 0D  | TYA..ART3.ND...|
000019D0: 3B 20 2D 2D 2D 20 D0 41  52 54 20 34 2C 20 48 41  |; --- .ART 4, HA|
000019E0: 4E 44 4C 49 4E 47 20 4A  4F 59 53 54 49 43 4B 20  |NDLING JOYSTICK |
000019F0: 42 55 54 54 4F 4E 0D 0D  20 20 20 20 20 20 20 20  |BUTTON..        |
00001A00: 52 4F 52 0D 20 20 20 20  20 20 20 20 42 43 53 20  |ROR.        BCS |
00001A10: D0 41 52 54 34 C5 4E 44  0D 20 20 20 20 20 20 20  |.ART4.ND.       |
00001A20: 20 4C 44 41 20 23 24 46  46 3B 20 24 46 46 20 4D  | LDA #$FF; $FF M|
00001A30: 45 41 4E 53 20 22 50 52  45 53 53 45 44 22 0D 20  |EANS "PRESSED". |
00001A40: 20 20 20 20 20 20 20 53  54 41 20 CC 45 46 54 C2  |       STA .EFT.|
00001A50: 55 54 54 4F 4E 0D D0 41  52 54 34 C5 4E 44 0D 0D  |UTTON..ART4.ND..|
00001A60: 0D 3B 20 2D 2D 2D 20 D0  41 52 54 20 35 2C 20 4A  |.; --- .ART 5, J|
00001A70: 4F 59 53 54 49 43 4B 20  41 43 43 45 4C 45 52 41  |OYSTICK ACCELERA|
00001A80: 54 49 4F 4E 0D 0D 3B 20  D2 45 53 54 4F 52 45 20  |TION..; .ESTORE |
00001A90: 4A 4F 59 53 54 49 43 4B  20 44 49 52 45 43 54 49  |JOYSTICK DIRECTI|
00001AA0: 4F 4E 20 42 49 54 53 20  41 4E 44 0D 3B 20 43 48  |ON BITS AND.; CH|
00001AB0: 45 43 4B 20 57 48 45 54  48 45 52 20 54 4F 20 53  |ECK WHETHER TO S|
00001AC0: 45 54 20 53 50 45 45 44  20 54 4F 20 5A 45 52 4F  |ET SPEED TO ZERO|
00001AD0: 2E 0D 20 20 20 20 20 20  20 20 54 58 41 0D 20 20  |..        TXA.  |
00001AE0: 20 20 20 20 20 20 41 4E  44 20 23 24 30 46 3B 20  |      AND #$0F; |
00001AF0: C3 4C 45 41 52 20 55 4E  4E 45 45 44 45 44 20 42  |.LEAR UNNEEDED B|
00001B00: 49 54 53 0D 20 20 20 20  20 20 20 20 43 4D 50 20  |ITS.        CMP |
00001B10: 23 24 30 46 3B 20 C1 4E  59 20 44 49 52 45 43 54  |#$0F; .NY DIRECT|
00001B20: 49 4F 4E 20 42 49 54 20  3F 0D 20 20 20 20 20 20  |ION BIT ?.      |
00001B30: 20 20 42 4E 45 20 49 4E  43 54 45 4D 50 4F 0D 3B  |  BNE INCTEMPO.;|
00001B40: 20 CE 4F 20 44 49 52 45  43 54 49 4F 4E 20 57 41  | .O DIRECTION WA|
00001B50: 53 20 55 53 45 44 2C 20  53 4F 20 52 45 53 45 54  |S USED, SO RESET|
00001B60: 20 53 50 45 45 44 0D 3B  20 41 4E 44 20 57 41 49  | SPEED.; AND WAI|
00001B70: 54 20 43 4F 55 4E 54 45  52 20 54 4F 20 4E 4F 52  |T COUNTER TO NOR|
00001B80: 4D 41 4C 2E 0D 20 20 20  20 20 20 20 20 4C 44 41  |MAL..        LDA|
00001B90: 20 23 24 30 31 0D 20 20  20 20 20 20 20 20 53 54  | #$01.        ST|
00001BA0: 41 20 CA 4F 59 D3 54 45  50 53 49 5A 45 0D 20 20  |A .OY.TEPSIZE.  |
00001BB0: 20 20 20 20 20 20 4C 44  41 20 23 CD 41 58 D4 49  |      LDA #.AX.I|
00001BC0: 4D 45 0D 20 20 20 20 20  20 20 20 53 54 41 20 CA  |ME.        STA .|
00001BD0: 4F 59 D7 41 49 54 54 49  4D 45 0D 20 20 20 20 20  |OY.AITTIME.     |
00001BE0: 20 20 20 4A 4D 50 20 D0  41 52 54 35 C5 4E 44 0D  |   JMP .ART5.ND.|
00001BF0: 49 4E 43 54 45 4D 50 4F  0D 3B 20 C1 20 44 49 52  |INCTEMPO.; . DIR|
00001C00: 45 43 54 49 4F 4E 20 42  49 54 20 57 41 53 20 55  |ECTION BIT WAS U|
00001C10: 53 45 44 2C 20 53 4F 20  43 48 45 43 4B 0D 3B 20  |SED, SO CHECK.; |
00001C20: 57 48 45 54 48 45 52 20  54 4F 20 41 43 43 45 4C  |WHETHER TO ACCEL|
00001C30: 45 52 41 54 45 3A 20 C9  46 20 53 50 45 45 44 20  |ERATE: .F SPEED |
00001C40: 49 53 0D 3B 20 41 4C 52  45 41 44 59 20 4D 41 58  |IS.; ALREADY MAX|
00001C50: 49 4D 55 4D 20 53 50 45  45 44 2C 20 44 4F 4E 27  |IMUM SPEED, DON'|
00001C60: 54 0D 3B 20 41 43 43 45  4C 45 52 41 54 45 2E 0D  |T.; ACCELERATE..|
00001C70: CA 4F 59 D3 54 45 50 53  49 5A 45 3D 2A 2B 31 0D  |.OY.TEPSIZE=*+1.|
00001C80: 20 20 20 20 20 20 20 20  4C 44 41 20 23 24 30 30  |        LDA #$00|
00001C90: 3B 20 28 53 45 4C 46 2D  4D 4F 44 49 46 59 49 4E  |; (SELF-MODIFYIN|
00001CA0: 47 29 0D 3B 20 C9 46 20  54 48 45 20 56 41 52 49  |G).; .F THE VARI|
00001CB0: 41 42 4C 45 20 22 CA 4F  59 D3 54 45 50 53 49 5A  |ABLE ".OY.TEPSIZ|
00001CC0: 45 22 20 57 4F 55 4C 44  0D 3B 20 48 41 56 45 20  |E" WOULD.; HAVE |
00001CD0: 42 45 45 4E 20 44 45 46  49 4E 45 44 20 41 53 20  |BEEN DEFINED AS |
00001CE0: 41 20 53 45 50 41 52 41  54 45 0D 3B 20 4C 4F 43  |A SEPARATE.; LOC|
00001CF0: 41 54 49 4F 4E 20 28 55  53 49 4E 47 20 22 21 42  |ATION (USING "!B|
00001D00: 59 54 45 22 29 2C 20 49  54 20 57 4F 55 4C 44 0D  |YTE"), IT WOULD.|
00001D10: 3B 20 48 41 56 45 20 54  41 4B 45 4E 20 41 20 42  |; HAVE TAKEN A B|
00001D20: 59 54 45 20 4F 46 20 4D  45 4D 4F 52 59 2E 20 C2  |YTE OF MEMORY. .|
00001D30: 59 0D 3B 20 53 54 4F 52  49 4E 47 20 54 48 45 20  |Y.; STORING THE |
00001D40: 56 41 4C 55 45 20 49 4E  53 49 44 45 20 41 4E 20  |VALUE INSIDE AN |
00001D50: CC C4 C1 0D 3B 20 43 4F  4D 4D 41 4E 44 27 53 20  |....; COMMAND'S |
00001D60: 41 52 47 55 4D 45 4E 54  2C 20 57 45 20 53 41 56  |ARGUMENT, WE SAV|
00001D70: 45 20 54 48 41 54 20 4F  4E 45 0D 3B 20 42 59 54  |E THAT ONE.; BYT|
00001D80: 45 2E 20 C9 54 20 4D 49  47 48 54 20 4D 41 4B 45  |E. .T MIGHT MAKE|
00001D90: 20 41 20 44 49 46 46 45  52 45 4E 43 45 2E 20 3A  | A DIFFERENCE. :|
00001DA0: 29 0D 20 20 20 20 20 20  20 20 43 4D 50 20 23 CD  |).        CMP #.|
00001DB0: 41 58 D3 54 45 50 3B 20  C9 46 20 53 50 45 45 44  |AX.TEP; .F SPEED|
00001DC0: 20 49 53 20 4D 41 58 2E  2C 0D 20 20 20 20 20 20  | IS MAX.,.      |
00001DD0: 20 20 42 43 53 20 D0 41  52 54 35 C5 4E 44 3B 20  |  BCS .ART5.ND; |
00001DE0: 44 4F 4E 27 54 20 41 43  43 45 4C 45 52 41 54 45  |DON'T ACCELERATE|
00001DF0: 2E 0D 3B 20 D3 50 45 45  44 20 49 53 4E 27 54 20  |..; .PEED ISN'T |
00001E00: 4D 41 58 49 4D 55 4D 20  59 45 54 2E 20 C3 48 45  |MAXIMUM YET. .HE|
00001E10: 43 4B 0D 3B 20 57 48 45  54 48 45 52 20 57 45 20  |CK.; WHETHER WE |
00001E20: 48 41 56 45 20 54 4F 20  57 41 49 54 20 42 45 46  |HAVE TO WAIT BEF|
00001E30: 4F 52 45 0D 3B 20 41 43  43 45 4C 45 52 41 54 49  |ORE.; ACCELERATI|
00001E40: 4E 47 2E 0D 20 20 20 20  20 20 20 20 44 45 43 20  |NG..        DEC |
00001E50: CA 4F 59 D7 41 49 54 54  49 4D 45 0D 20 20 20 20  |.OY.AITTIME.    |
00001E60: 20 20 20 20 42 50 4C 20  D0 41 52 54 35 C5 4E 44  |    BPL .ART5.ND|
00001E70: 0D 3B 20 C3 4F 55 4E 54  45 52 20 48 41 53 20 55  |.; .OUNTER HAS U|
00001E80: 4E 44 45 52 52 55 4E 2C  20 53 4F 20 41 43 43 45  |NDERRUN, SO ACCE|
00001E90: 4C 45 52 41 54 45 2E 0D  20 20 20 20 20 20 20 20  |LERATE..        |
00001EA0: 49 4E 43 20 CA 4F 59 D7  41 49 54 54 49 4D 45 3B  |INC .OY.AITTIME;|
00001EB0: 20 52 45 53 45 54 20 43  4F 55 4E 54 45 52 0D 20  | RESET COUNTER. |
00001EC0: 20 20 20 20 20 20 20 49  4E 43 20 CA 4F 59 D3 54  |       INC .OY.T|
00001ED0: 45 50 53 49 5A 45 3B 20  49 4E 43 52 45 41 53 45  |EPSIZE; INCREASE|
00001EE0: 20 53 50 45 45 44 0D D0  41 52 54 35 C5 4E 44 0D  | SPEED..ART5.ND.|
00001EF0: 0D 0D 3B 20 2D 2D 2D 20  D0 41 52 54 20 36 2C 20  |..; --- .ART 6, |
00001F00: 52 45 53 54 52 49 43 54  20 43 4F 4F 52 44 49 4E  |RESTRICT COORDIN|
00001F10: 41 54 45 20 52 41 4E 47  45 0D 0D 3B 20 52 45 53  |ATE RANGE..; RES|
00001F20: 54 52 49 43 54 20 58 20  56 41 4C 55 45 0D 20 20  |TRICT X VALUE.  |
00001F30: 20 20 20 20 20 20 4C 44  58 20 23 24 30 30 3B 20  |      LDX #$00; |
00001F40: 30 20 4D 45 41 4E 53 20  22 58 20 53 54 55 46 46  |0 MEANS "X STUFF|
00001F50: 22 0D 20 20 20 20 20 20  20 20 4A 53 52 20 D2 45  |".        JSR .E|
00001F60: 53 54 52 49 43 54 0D 3B  20 52 45 53 54 52 49 43  |STRICT.; RESTRIC|
00001F70: 54 20 59 20 56 41 4C 55  45 0D 20 20 20 20 20 20  |T Y VALUE.      |
00001F80: 20 20 4C 44 58 20 23 24  30 32 3B 20 32 20 4D 45  |  LDX #$02; 2 ME|
00001F90: 41 4E 53 20 22 59 20 53  54 55 46 46 22 0D 20 20  |ANS "Y STUFF".  |
00001FA0: 20 20 20 20 20 20 4A 53  52 20 D2 45 53 54 52 49  |      JSR .ESTRI|
00001FB0: 43 54 0D 0D 0D 3B 20 2D  2D 2D 20 D0 41 52 54 20  |CT...; --- .ART |
00001FC0: 37 2C 20 50 4F 53 49 54  49 4F 4E 49 4E 47 20 53  |7, POSITIONING S|
00001FD0: 50 52 49 54 45 53 0D 0D  3B 20 D3 45 54 20 53 50  |PRITES..; .ET SP|
00001FE0: 52 49 54 45 53 27 20 58  20 50 4F 53 49 54 49 4F  |RITES' X POSITIO|
00001FF0: 4E 53 0D 20 20 20 20 20  20 20 20 4C 44 41 20 D0  |NS.        LDA .|
00002000: 4F 49 4E 54 45 52 D8 4E  4F 57 0D 20 20 20 20 20  |OINTER.NOW.     |
00002010: 20 20 20 43 4C 43 0D 20  20 20 20 20 20 20 20 41  |   CLC.        A|
00002020: 44 43 20 23 D3 50 52 49  54 45 CF 46 46 53 45 54  |DC #.PRITE.FFSET|
00002030: 5F D8 0D 20 20 20 20 20  20 20 20 53 54 41 20 D3  |_..        STA .|
00002040: 50 52 49 54 45 C1 5F D8  3B 20 53 45 54 20 42 4F  |PRITE._.; SET BO|
00002050: 54 48 20 53 50 52 49 54  45 53 0D 20 20 20 20 20  |TH SPRITES.     |
00002060: 20 20 20 53 54 41 20 D3  50 52 49 54 45 C2 5F D8  |   STA .PRITE._.|
00002070: 0D 20 20 20 20 20 20 20  20 4C 44 41 20 D3 50 52  |.        LDA .PR|
00002080: 49 54 45 53 5F CF C6 3B  20 47 45 54 20 58 20 4F  |ITES_..; GET X O|
00002090: 56 45 52 46 4C 4F 57 0D  20 20 20 20 20 20 20 20  |VERFLOW.        |
000020A0: 42 43 53 20 D3 45 54 CF  C6 0D 20 20 20 20 20 20  |BCS .ET...      |
000020B0: 20 20 4C 44 58 20 D0 4F  49 4E 54 45 52 D8 4E 4F  |  LDX .OINTER.NO|
000020C0: 57 2B 31 0D 20 20 20 20  20 20 20 20 42 4E 45 20  |W+1.        BNE |
000020D0: D3 45 54 CF C6 0D 20 20  20 20 20 20 20 20 41 4E  |.ET...        AN|
000020E0: 44 20 23 D3 50 52 49 54  45 53 5F C2 49 54 4D 41  |D #.PRITES_.ITMA|
000020F0: 53 4B 20 C5 CF D2 20 24  46 46 0D 20 20 20 20 20  |SK ... $FF.     |
00002100: 20 20 20 42 43 43 20 D3  54 4F 52 45 CF C6 3B 20  |   BCC .TORE..; |
00002110: C3 20 49 53 20 43 4C 45  41 52 20 48 45 52 45 0D  |. IS CLEAR HERE.|
00002120: 0D D3 45 54 CF C6 20 20  20 4F 52 41 20 23 D3 50  |..ET..   ORA #.P|
00002130: 52 49 54 45 53 5F C2 49  54 4D 41 53 4B 0D D3 54  |RITES_.ITMASK..T|
00002140: 4F 52 45 CF C6 20 53 54  41 20 D3 50 52 49 54 45  |ORE.. STA .PRITE|
00002150: 53 5F CF C6 3B 20 53 45  54 20 58 20 4F 56 45 52  |S_..; SET X OVER|
00002160: 46 4C 4F 57 0D 0D 3B 20  D3 45 54 20 53 50 52 49  |FLOW..; .ET SPRI|
00002170: 54 45 53 27 20 59 20 50  4F 53 49 54 49 4F 4E 53  |TES' Y POSITIONS|
00002180: 0D 20 20 20 20 20 20 20  20 4C 44 41 20 D0 4F 49  |.        LDA .OI|
00002190: 4E 54 45 52 D9 4E 4F 57  0D 20 20 20 20 20 20 20  |NTER.NOW.       |
000021A0: 20 43 4C 43 0D 20 20 20  20 20 20 20 20 41 44 43  | CLC.        ADC|
000021B0: 20 23 D3 50 52 49 54 45  CF 46 46 53 45 54 5F D9  | #.PRITE.FFSET_.|
000021C0: 0D 20 20 20 20 20 20 20  20 53 54 41 20 D3 50 52  |.        STA .PR|
000021D0: 49 54 45 C1 5F D9 0D 20  20 20 20 20 20 20 20 53  |ITE._..        S|
000021E0: 54 41 20 D3 50 52 49 54  45 C2 5F D9 0D 3B 20 D4  |TA .PRITE._..; .|
000021F0: 48 45 20 59 20 56 41 4C  55 45 27 53 20 48 49 47  |HE Y VALUE'S HIG|
00002200: 48 20 42 59 54 45 20 49  53 20 55 53 45 4C 45 53  |H BYTE IS USELES|
00002210: 53 20 49 4E 0D 3B 20 54  48 49 53 20 43 41 53 45  |S IN.; THIS CASE|
00002220: 2E 0D 0D 0D 3B 20 2D 2D  2D 20 D0 41 52 54 20 38  |....; --- .ART 8|
00002230: 2C 20 4D 41 4B 49 4E 47  20 43 48 41 52 20 43 4F  |, MAKING CHAR CO|
00002240: 4F 52 44 49 4E 41 54 45  53 0D 0D 3B 20 C3 4F 4E  |ORDINATES..; .ON|
00002250: 56 45 52 54 20 58 20 43  4F 4F 52 44 49 4E 41 54  |VERT X COORDINAT|
00002260: 45 2E 20 D4 48 45 52 45  20 41 52 45 0D 3B 20 44  |E. .HERE ARE.; D|
00002270: 49 46 46 45 52 45 4E 54  20 22 42 45 53 54 22 20  |IFFERENT "BEST" |
00002280: 52 4F 55 54 49 4E 45 53  20 46 4F 52 0D 3B 20 44  |ROUTINES FOR.; D|
00002290: 49 46 46 45 52 45 4E 54  20 52 45 53 4F 4C 55 54  |IFFERENT RESOLUT|
000022A0: 49 4F 4E 53 2C 20 53 4F  20 C9 27 56 45 20 47 49  |IONS, SO .'VE GI|
000022B0: 56 45 4E 0D 3B 20 54 48  45 20 D6 C9 C3 20 41 4E  |VEN.; THE ... AN|
000022C0: 44 20 D6 C4 C3 20 52 4F  55 54 49 4E 45 53 2E 0D  |D ... ROUTINES..|
000022D0: 20 20 20 20 20 20 20 20  4C 44 41 20 D0 4F 49 4E  |        LDA .OIN|
000022E0: 54 45 52 D8 4E 4F 57 0D  20 20 20 20 20 20 20 20  |TER.NOW.        |
000022F0: 4C 53 52 0D 20 20 20 20  20 20 20 20 4C 53 52 0D  |LSR.        LSR.|
00002300: 20 20 20 20 20 20 20 20  4C 53 52 0D 20 20 20 20  |        LSR.    |
00002310: 20 20 20 20 4C 44 58 20  D0 4F 49 4E 54 45 52 D8  |    LDX .OINTER.|
00002320: 4E 4F 57 2B 31 0D 20 20  20 20 20 20 20 20 42 45  |NOW+1.        BE|
00002330: 51 20 D3 45 54 C3 D8 3B  20 D6 C9 C3 20 4F 4E 4C  |Q .ET..; ... ONL|
00002340: 59 0D 20 20 20 20 20 20  20 20 4F 52 41 20 23 24  |Y.        ORA #$|
00002350: 32 30 3B 20 D6 C9 C3 20  4F 4E 4C 59 0D 3B 20 20  |20; ... ONLY.;  |
00002360: 20 20 20 20 20 4F 52 41  20 CF 52 D4 41 42 4C 45  |     ORA .R.ABLE|
00002370: 2C 58 3B 20 D6 C4 C3 20  4F 4E 4C 59 0D D3 45 54  |,X; ... ONLY..ET|
00002380: C3 D8 20 20 20 53 54 41  20 C3 48 41 52 D8 0D 0D  |..   STA .HAR...|
00002390: 3B 20 C3 4F 4E 56 45 52  54 20 59 20 43 4F 4F 52  |; .ONVERT Y COOR|
000023A0: 44 49 4E 41 54 45 2E 0D  20 20 20 20 20 20 20 20  |DINATE..        |
000023B0: 4C 44 41 20 D0 4F 49 4E  54 45 52 D9 4E 4F 57 0D  |LDA .OINTER.NOW.|
000023C0: 20 20 20 20 20 20 20 20  4C 53 52 0D 20 20 20 20  |        LSR.    |
000023D0: 20 20 20 20 4C 53 52 0D  20 20 20 20 20 20 20 20  |    LSR.        |
000023E0: 4C 53 52 0D 20 20 20 20  20 20 20 20 53 54 41 20  |LSR.        STA |
000023F0: C3 48 41 52 D9 0D 0D 0D  3B 20 2D 2D 2D 20 C1 44  |.HAR....; --- .D|
00002400: 44 20 46 55 52 54 48 45  52 20 50 41 52 54 53 20  |D FURTHER PARTS |
00002410: 48 45 52 45 0D 0D 3B 20  C8 45 52 45 20 59 4F 55  |HERE..; .ERE YOU|
00002420: 20 43 41 4E 20 41 44 44  20 46 55 52 54 48 45 52  | CAN ADD FURTHER|
00002430: 20 52 4F 55 54 49 4E 45  53 2C 0D 3B 20 46 4F 52  | ROUTINES,.; FOR|
00002440: 20 45 58 41 4D 50 4C 45  20 54 4F 20 55 53 45 20  | EXAMPLE TO USE |
00002450: 54 48 45 20 42 55 54 54  4F 4E 20 53 54 41 54 45  |THE BUTTON STATE|
00002460: 53 0D 3B 20 54 4F 20 46  41 4B 45 20 4B 45 59 50  |S.; TO FAKE KEYP|
00002470: 52 45 53 53 45 53 20 45  54 43 2E 0D 0D 0D 3B 20  |RESSES ETC....; |
00002480: 2D 2D 2D 20 D4 48 45 20  45 4E 44 0D 0D 3B 20 D4  |--- .HE END..; .|
00002490: 48 45 20 49 4E 49 54 49  41 4C 49 53 41 54 49 4F  |HE INITIALISATIO|
000024A0: 4E 20 52 4F 55 54 49 4E  45 20 53 45 54 53 20 54  |N ROUTINE SETS T|
000024B0: 48 45 0D 3B 20 41 52 47  55 4D 45 4E 54 20 54 4F  |HE.; ARGUMENT TO|
000024C0: 20 54 48 45 20 41 44 44  52 45 53 53 20 4F 46 20  | THE ADDRESS OF |
000024D0: 54 48 45 0D 3B 20 50 52  45 56 49 4F 55 53 20 C9  |THE.; PREVIOUS .|
000024E0: D2 D1 20 52 4F 55 54 49  4E 45 2E 0D 4D 4F 44 31  |.. ROUTINE..MOD1|
000024F0: 36 20 20 20 4A 4D 50 20  24 46 46 46 46 3B 20 28  |6   JMP $FFFF; (|
00002500: 53 45 4C 46 2D 4D 4F 44  49 46 59 49 4E 47 29 0D  |SELF-MODIFYING).|
00002510: 0D 3B 20 D4 48 49 53 20  54 41 42 4C 45 20 49 53  |.; .HIS TABLE IS|
00002520: 20 46 4F 52 20 50 41 52  54 20 38 2E 0D 3B CF 52  | FOR PART 8..;.R|
00002530: D4 41 42 4C 45 20 21 42  59 54 45 20 30 2C 33 32  |.ABLE !BYTE 0,32|
00002540: 2C 36 34 3B 20 D6 C4 C3  20 4F 4E 4C 59 0D 0D 0D  |,64; ... ONLY...|
00002550: 3B 20 2D 2D 2D 20 22 D2  45 53 54 52 49 43 54 22  |; --- ".ESTRICT"|
00002560: 20 53 55 42 52 4F 55 54  49 4E 45 0D 0D D0 4F 49  | SUBROUTINE...OI|
00002570: 4E 54 45 52 D8 4D 41 58  20 21 57 4F 52 44 20 CD  |NTER.MAX !WORD .|
00002580: 41 58 49 4D 55 4D C3 4F  4F 52 44 49 4E 41 54 45  |AXIMUM.OORDINATE|
00002590: D8 0D D0 4F 49 4E 54 45  52 D9 4D 41 58 20 21 57  |...OINTER.MAX !W|
000025A0: 4F 52 44 20 CD 41 58 49  4D 55 4D C3 4F 4F 52 44  |ORD .AXIMUM.OORD|
000025B0: 49 4E 41 54 45 D9 0D 3B  20 22 59 22 20 57 4F 52  |INATE..; "Y" WOR|
000025C0: 44 20 4D 55 53 54 20 46  4F 4C 4C 4F 57 20 44 49  |D MUST FOLLOW DI|
000025D0: 52 45 43 54 4C 59 20 41  46 54 45 52 0D 3B 20 22  |RECTLY AFTER.; "|
000025E0: 58 22 20 57 4F 52 44 20  49 4E 20 4D 45 4D 4F 52  |X" WORD IN MEMOR|
000025F0: 59 2E 0D 0D D2 45 53 54  52 49 43 54 0D 3B 20 D2  |Y....ESTRICT.; .|
00002600: 45 53 54 52 49 43 54 20  49 4E 54 45 52 4E 41 4C  |ESTRICT INTERNAL|
00002610: 20 43 4F 4F 52 44 49 4E  41 54 45 53 20 54 4F 0D  | COORDINATES TO.|
00002620: 3B 20 43 4F 4E 46 49 47  55 52 45 44 20 52 41 4E  |; CONFIGURED RAN|
00002630: 47 45 2E 20 C5 4E 54 52  59 20 43 4F 4E 44 49 54  |GE. .NTRY CONDIT|
00002640: 49 4F 4E 53 3A 0D 3B 20  D8 20 49 53 20 44 49 52  |IONS:.; . IS DIR|
00002650: 45 43 54 49 4F 4E 20 48  41 4E 44 4C 45 20 28 30  |ECTION HANDLE (0|
00002660: 20 3D 20 58 2C 20 32 20  3D 20 59 29 0D 20 20 20  | = X, 2 = Y).   |
00002670: 20 20 20 20 20 4C 44 41  20 D0 4F 49 4E 54 45 52  |     LDA .OINTER|
00002680: D8 4E 4F 57 2B 31 2C 58  0D 20 20 20 20 20 20 20  |.NOW+1,X.       |
00002690: 20 42 4D 49 20 D3 45 54  D4 4F 30 0D 20 20 20 20  | BMI .ET.O0.    |
000026A0: 20 20 20 20 43 4D 50 20  D0 4F 49 4E 54 45 52 D8  |    CMP .OINTER.|
000026B0: 4D 41 58 2B 31 2C 58 0D  20 20 20 20 20 20 20 20  |MAX+1,X.        |
000026C0: 42 43 43 20 C5 4F 53 52  0D 20 20 20 20 20 20 20  |BCC .OSR.       |
000026D0: 20 42 4E 45 20 D2 45 53  45 54 C3 4F 0D 20 20 20  | BNE .ESET.O.   |
000026E0: 20 20 20 20 20 4C 44 41  20 D0 4F 49 4E 54 45 52  |     LDA .OINTER|
000026F0: D8 4D 41 58 2C 58 0D 20  20 20 20 20 20 20 20 43  |.MAX,X.        C|
00002700: 4D 50 20 D0 4F 49 4E 54  45 52 D8 4E 4F 57 2C 58  |MP .OINTER.NOW,X|
00002710: 0D 20 20 20 20 20 20 20  20 42 43 53 20 C5 4F 53  |.        BCS .OS|
00002720: 52 0D D2 45 53 45 54 C3  4F 20 4C 44 41 20 D0 4F  |R..ESET.O LDA .O|
00002730: 49 4E 54 45 52 D8 4D 41  58 2C 58 0D 20 20 20 20  |INTER.MAX,X.    |
00002740: 20 20 20 20 4C 44 59 20  D0 4F 49 4E 54 45 52 D8  |    LDY .OINTER.|
00002750: 4D 41 58 2B 31 2C 58 0D  20 20 20 20 20 20 20 20  |MAX+1,X.        |
00002760: 4A 4D 50 20 C4 45 46 C3  4F 0D 0D D3 45 54 D4 4F  |JMP .EF.O...ET.O|
00002770: 30 20 20 4C 44 41 20 23  30 0D 20 20 20 20 20 20  |0  LDA #0.      |
00002780: 20 20 54 41 59 0D C4 45  46 C3 4F 20 20 20 53 54  |  TAY..EF.O   ST|
00002790: 41 20 D0 4F 49 4E 54 45  52 D8 4E 4F 57 2C 58 0D  |A .OINTER.NOW,X.|
000027A0: 20 20 20 20 20 20 20 20  53 54 59 20 D0 4F 49 4E  |        STY .OIN|
000027B0: 54 45 52 D8 4E 4F 57 2B  31 2C 58 0D C5 4F 53 52  |TER.NOW+1,X..OSR|
000027C0: 20 20 20 20 52 54 53 0D  0D 0D 3B 20 2D 2D 2D 20  |    RTS...; --- |
000027D0: 22 D0 4F 54 22 20 53 55  42 52 4F 55 54 49 4E 45  |".OT" SUBROUTINE|
000027E0: 0D 0D 3B 20 D4 48 49 53  20 52 4F 55 54 49 4E 45  |..; .HIS ROUTINE|
000027F0: 20 43 4F 4D 50 55 54 45  53 20 54 48 45 20 4D 4F  | COMPUTES THE MO|
00002800: 55 53 45 0D 3B 20 4D 4F  56 45 4D 45 4E 54 53 20  |USE.; MOVEMENTS |
00002810: 41 4E 44 20 54 48 45 52  45 46 4F 52 45 20 43 4F  |AND THEREFORE CO|
00002820: 4E 54 41 49 4E 53 20 54  48 45 0D 3B 20 53 45 4C  |NTAINS THE.; SEL|
00002830: 46 2D 43 41 4C 49 42 52  41 54 49 4F 4E 20 53 54  |F-CALIBRATION ST|
00002840: 55 46 46 20 41 4E 44 20  54 48 45 20 4F 54 48 45  |UFF AND THE OTHE|
00002850: 52 0D 3B 20 49 4D 50 52  4F 56 45 4D 45 4E 54 53  |R.; IMPROVEMENTS|
00002860: 20 4F 56 45 52 20 54 48  45 20 53 54 41 4E 44 41  | OVER THE STANDA|
00002870: 52 44 20 31 33 35 31 0D  3B 20 44 52 49 56 45 52  |RD 1351.; DRIVER|
00002880: 2E 0D D0 4F 54 CD 41 58  20 21 57 4F 52 44 20 30  |...OT.AX !WORD 0|
00002890: 3B 20 4D 41 58 2E 20 D0  CF D4 53 20 59 45 54 20  |; MAX. ...S YET |
000028A0: 50 4C 55 53 20 31 20 21  0D D0 4F 54 CD 49 4E 20  |PLUS 1 !..OT.IN |
000028B0: 21 57 4F 52 44 20 24 46  46 46 46 3B 20 4C 4F 57  |!WORD $FFFF; LOW|
000028C0: 45 53 54 20 D0 CF D4 53  20 59 45 54 0D D0 4F 54  |EST ...S YET..OT|
000028D0: CF 4C 44 20 21 57 4F 52  44 20 30 3B 20 4F 4C 44  |.LD !WORD 0; OLD|
000028E0: 20 56 41 4C 55 45 53 0D  D0 4F 54 D7 49 44 54 48  | VALUES..OT.IDTH|
000028F0: 20 21 57 4F 52 44 20 30  3B 20 49 4E 54 45 52 56  | !WORD 0; INTERV|
00002900: 41 4C 20 57 49 44 54 48  0D C8 41 4C 46 D0 4F 54  |AL WIDTH..ALF.OT|
00002910: D7 49 44 54 48 20 21 57  4F 52 44 20 30 3B 20 48  |.IDTH !WORD 0; H|
00002920: 41 4C 46 20 57 49 44 54  48 0D 3B 20 28 42 55 46  |ALF WIDTH.; (BUF|
00002930: 46 45 52 45 44 20 46 4F  52 20 53 50 45 45 44 20  |FERED FOR SPEED |
00002940: 49 4E 43 52 45 41 53 45  29 0D 3B 20 D4 48 45 20  |INCREASE).; .HE |
00002950: 41 42 4F 56 45 20 56 41  52 49 41 42 4C 45 53 20  |ABOVE VARIABLES |
00002960: 41 52 45 20 4E 4F 54 20  52 45 41 4C 4C 59 0D 3B  |ARE NOT REALLY.;|
00002970: 20 57 4F 52 44 53 3A 20  D4 48 45 20 46 49 52 53  | WORDS: .HE FIRS|
00002980: 54 20 42 59 54 45 20 49  53 20 54 48 45 20 58 20  |T BYTE IS THE X |
00002990: 56 41 4C 55 45 2C 0D 3B  20 54 48 45 20 53 45 43  |VALUE,.; THE SEC|
000029A0: 4F 4E 44 20 42 59 54 45  20 49 53 20 54 48 45 20  |OND BYTE IS THE |
000029B0: 59 20 56 41 4C 55 45 0D  3B 20 52 45 53 50 45 43  |Y VALUE.; RESPEC|
000029C0: 54 49 56 45 4C 59 2E 0D  0D D0 4F 54 C4 45 4C 54  |TIVELY....OT.ELT|
000029D0: 41 0D 3B 20 C3 4F 4D 50  55 54 45 20 54 48 45 20  |A.; .OMPUTE THE |
000029E0: 53 49 47 4E 45 44 20 44  49 53 54 41 4E 43 45 20  |SIGNED DISTANCE |
000029F0: 4F 46 20 4D 4F 55 53 45  0D 3B 20 4D 4F 56 45 4D  |OF MOUSE.; MOVEM|
00002A00: 45 4E 54 2E 20 C5 4E 54  52 59 20 43 4F 4E 44 49  |ENT. .NTRY CONDI|
00002A10: 54 49 4F 4E 53 3A 0D 3B  20 D8 20 49 53 20 44 49  |TIONS:.; . IS DI|
00002A20: 52 45 43 54 49 4F 4E 20  48 41 4E 44 4C 45 20 28  |RECTION HANDLE (|
00002A30: 30 20 3D 20 58 2C 20 31  20 3D 20 59 29 0D 3B 20  |0 = X, 1 = Y).; |
00002A40: C5 58 49 54 20 43 4F 4E  44 49 54 49 4F 4E 53 3A  |.XIT CONDITIONS:|
00002A50: 0D 3B 20 C1 2F D9 20 41  52 45 20 53 49 47 4E 45  |.; ./. ARE SIGNE|
00002A60: 44 20 44 49 53 54 41 4E  43 45 20 28 4C 4F 57 2F  |D DISTANCE (LOW/|
00002A70: 48 49 47 48 29 0D 0D 3B  20 C6 49 52 53 54 2C 20  |HIGH)..; .IRST, |
00002A80: 47 45 54 20 4E 45 57 20  56 41 4C 55 45 20 41 4E  |GET NEW VALUE AN|
00002A90: 44 20 43 4C 45 41 52 0D  3B 20 22 52 45 43 41 4C  |D CLEAR.; "RECAL|
00002AA0: 43 55 4C 41 54 45 20 53  49 47 4E 41 4C 20 57 49  |CULATE SIGNAL WI|
00002AB0: 44 54 48 22 20 46 4C 41  47 2E 0D 20 20 20 20 20  |DTH" FLAG..     |
00002AC0: 20 20 20 4C 44 41 20 53  49 44 5F 50 4F 54 2C 58  |   LDA SID_POT,X|
00002AD0: 0D 20 20 20 20 20 20 20  20 4C 44 59 20 23 24 30  |.        LDY #$0|
00002AE0: 30 0D 3B 20 C3 48 45 43  4B 20 57 48 45 54 48 45  |0.; .HECK WHETHE|
00002AF0: 52 20 4E 45 57 20 56 41  4C 55 45 20 49 53 20 4C  |R NEW VALUE IS L|
00002B00: 4F 57 45 52 20 54 48 41  4E 0D 3B 20 4C 4F 57 45  |OWER THAN.; LOWE|
00002B10: 53 54 20 4B 4E 4F 57 4E  2E 0D 20 20 20 20 20 20  |ST KNOWN..      |
00002B20: 20 20 43 4D 50 20 D0 4F  54 CD 49 4E 2C 58 0D 20  |  CMP .OT.IN,X. |
00002B30: 20 20 20 20 20 20 20 42  43 53 20 4D 30 0D 3B 20  |       BCS M0.; |
00002B40: D3 54 4F 52 45 20 4E 45  57 20 22 4C 4F 57 45 53  |.TORE NEW "LOWES|
00002B50: 54 22 20 55 4E 44 20 53  45 54 0D 3B 20 22 52 45  |T" UND SET.; "RE|
00002B60: 43 41 4C 43 55 4C 41 54  45 20 53 49 47 4E 41 4C  |CALCULATE SIGNAL|
00002B70: 20 57 49 44 54 48 22 20  46 4C 41 47 2E 0D 20 20  | WIDTH" FLAG..  |
00002B80: 20 20 20 20 20 20 53 54  41 20 D0 4F 54 CD 49 4E  |      STA .OT.IN|
00002B90: 2C 58 0D 20 20 20 20 20  20 20 20 4C 44 59 20 23  |,X.        LDY #|
00002BA0: 24 46 46 0D 0D 3B 20 C3  48 45 43 4B 20 57 48 45  |$FF..; .HECK WHE|
00002BB0: 54 48 45 52 20 4E 45 57  20 56 41 4C 55 45 20 49  |THER NEW VALUE I|
00002BC0: 53 20 48 49 47 48 45 52  0D 3B 20 54 48 41 4E 20  |S HIGHER.; THAN |
00002BD0: 48 49 47 48 45 53 54 20  4B 4E 4F 57 4E 2E 0D 4D  |HIGHEST KNOWN..M|
00002BE0: 30 20 20 20 20 20 20 43  4D 50 20 D0 4F 54 CD 41  |0      CMP .OT.A|
00002BF0: 58 2C 58 0D 20 20 20 20  20 20 20 20 42 43 43 20  |X,X.        BCC |
00002C00: 4D 31 0D 3B 20 D3 45 54  20 22 52 45 43 41 4C 43  |M1.; .ET "RECALC|
00002C10: 55 4C 41 54 45 20 53 49  47 4E 41 4C 20 57 49 44  |ULATE SIGNAL WID|
00002C20: 54 48 22 20 46 4C 41 47  0D 3B 20 41 4E 44 20 53  |TH" FLAG.; AND S|
00002C30: 54 4F 52 45 20 4E 45 57  20 22 48 49 47 48 45 53  |TORE NEW "HIGHES|
00002C40: 54 22 2E 0D 20 20 20 20  20 20 20 20 4C 44 59 20  |T"..        LDY |
00002C50: 23 24 46 46 0D 20 20 20  20 20 20 20 20 50 48 41  |#$FF.        PHA|
00002C60: 3B 20 D2 45 4D 45 4D 42  45 52 20 43 55 52 52 45  |; .EMEMBER CURRE|
00002C70: 4E 54 20 56 41 4C 55 45  0D 20 20 20 20 20 20 20  |NT VALUE.       |
00002C80: 20 41 44 43 20 23 24 30  30 3B 20 C1 44 44 20 4F  | ADC #$00; .DD O|
00002C90: 4E 45 20 28 C3 20 49 53  20 53 45 54 29 0D 20 20  |NE (. IS SET).  |
00002CA0: 20 20 20 20 20 20 53 54  41 20 D0 4F 54 CD 41 58  |      STA .OT.AX|
00002CB0: 2C 58 0D 3B 20 D6 41 4C  55 45 20 24 46 46 20 28  |,X.; .ALUE $FF (|
00002CC0: 30 20 41 46 54 45 52 20  41 44 44 49 4E 47 29 20  |0 AFTER ADDING) |
00002CD0: 4D 45 41 4E 53 20 54 48  41 54 0D 3B 20 54 48 45  |MEANS THAT.; THE|
00002CE0: 52 45 20 49 53 20 4E 4F  20 4D 4F 55 53 45 20 43  |RE IS NO MOUSE C|
00002CF0: 4F 4E 4E 45 43 54 45 44  2C 20 53 4F 20 52 45 53  |ONNECTED, SO RES|
00002D00: 45 54 0D 3B 20 4D 49 4E  2F 4D 41 58 20 49 4E 20  |ET.; MIN/MAX IN |
00002D10: 54 48 41 54 20 43 41 53  45 2E 0D 20 20 20 20 20  |THAT CASE..     |
00002D20: 20 20 20 42 45 51 20 D2  45 53 45 54 CD CD 3B 20  |   BEQ .ESET..; |
00002D30: D3 54 41 43 4B 20 49 53  20 55 4E 54 49 44 59 2E  |.TACK IS UNTIDY.|
00002D40: 2E 2E 0D 20 20 20 20 20  20 20 20 50 4C 41 3B 20  |...        PLA; |
00002D50: D2 45 53 54 4F 52 45 20  43 55 52 52 45 4E 54 20  |.ESTORE CURRENT |
00002D60: 56 41 4C 55 45 0D 0D 3B  20 C9 46 20 46 4C 41 47  |VALUE..; .F FLAG|
00002D70: 20 49 53 20 53 45 54 2C  20 52 45 43 41 4C 43 55  | IS SET, RECALCU|
00002D80: 4C 41 54 45 20 53 49 47  4E 41 4C 0D 3B 20 57 49  |LATE SIGNAL.; WI|
00002D90: 44 54 48 2E 0D 4D 31 0D  20 20 20 20 20 20 20 20  |DTH..M1.        |
00002DA0: 49 4E 59 3B 20 C3 48 45  43 4B 20 46 4C 41 47 0D  |INY; .HECK FLAG.|
00002DB0: 20 20 20 20 20 20 20 20  42 4E 45 20 4D 33 0D 20  |        BNE M3. |
00002DC0: 20 20 20 20 20 20 20 54  41 59 3B 20 C2 55 46 46  |       TAY; .UFF|
00002DD0: 45 52 20 43 55 52 52 45  4E 54 20 56 41 4C 55 45  |ER CURRENT VALUE|
00002DE0: 2E 0D 20 20 20 20 20 20  20 20 4C 44 41 20 D0 4F  |..        LDA .O|
00002DF0: 54 CD 41 58 2C 58 3B 20  C7 45 54 20 48 49 47 48  |T.AX,X; .ET HIGH|
00002E00: 45 53 54 2B 31 0D 20 20  20 20 20 20 20 20 53 45  |EST+1.        SE|
00002E10: 43 3B 20 D3 55 42 54 52  41 43 54 20 4C 4F 57 45  |C; .UBTRACT LOWE|
00002E20: 53 54 0D 20 20 20 20 20  20 20 20 53 42 43 20 D0  |ST.        SBC .|
00002E30: 4F 54 CD 49 4E 2C 58 0D  20 20 20 20 20 20 20 20  |OT.IN,X.        |
00002E40: 42 43 43 20 4D 32 0D 20  20 20 20 20 20 20 20 53  |BCC M2.        S|
00002E50: 54 41 20 D0 4F 54 D7 49  44 54 48 2C 58 3B 20 D3  |TA .OT.IDTH,X; .|
00002E60: 54 4F 52 45 20 53 49 47  4E 41 4C 0D 20 20 20 20  |TORE SIGNAL.    |
00002E70: 20 20 20 20 4C 53 52 3B  20 57 49 44 54 48 20 41  |    LSR; WIDTH A|
00002E80: 4E 44 20 48 41 4C 46 20  53 49 47 4E 41 4C 0D 20  |ND HALF SIGNAL. |
00002E90: 20 20 20 20 20 20 20 53  54 41 20 C8 41 4C 46 D0  |       STA .ALF.|
00002EA0: 4F 54 D7 49 44 54 48 2C  58 3B 20 57 49 44 54 48  |OT.IDTH,X; WIDTH|
00002EB0: 0D 4D 32 20 20 20 20 20  20 54 59 41 3B 20 D2 45  |.M2      TYA; .E|
00002EC0: 53 54 4F 52 45 20 43 55  52 52 45 4E 54 20 56 41  |STORE CURRENT VA|
00002ED0: 4C 55 45 2E 0D 0D 3B 20  C3 41 4C 43 55 4C 41 54  |LUE...; .ALCULAT|
00002EE0: 45 20 44 49 53 54 41 4E  43 45 0D 4D 33 20 20 20  |E DISTANCE.M3   |
00002EF0: 20 20 20 54 41 59 3B 20  C2 55 46 46 45 52 20 43  |   TAY; .UFFER C|
00002F00: 55 52 52 45 4E 54 20 56  41 4C 55 45 2E 0D 20 20  |URRENT VALUE..  |
00002F10: 20 20 20 20 20 20 53 45  43 0D 20 20 20 20 20 20  |      SEC.      |
00002F20: 20 20 53 42 43 20 D0 4F  54 CF 4C 44 2C 58 0D 20  |  SBC .OT.LD,X. |
00002F30: 20 20 20 20 20 20 20 50  48 41 0D 20 20 20 20 20  |       PHA.     |
00002F40: 20 20 20 54 59 41 0D 20  20 20 20 20 20 20 20 53  |   TYA.        S|
00002F50: 54 41 20 D0 4F 54 CF 4C  44 2C 58 0D 20 20 20 20  |TA .OT.LD,X.    |
00002F60: 20 20 20 20 50 4C 41 0D  20 20 20 20 20 20 20 20  |    PLA.        |
00002F70: 42 45 51 20 5A 45 52 4F  3B 20 C9 46 20 4E 4F 54  |BEQ ZERO; .F NOT|
00002F80: 20 4D 4F 56 45 44 2C 20  45 58 49 54 2E 0D 20 20  | MOVED, EXIT..  |
00002F90: 20 20 20 20 20 20 42 43  43 20 4D 49 4E 55 53 3B  |      BCC MINUS;|
00002FA0: 20 CE 45 47 41 54 49 56  45 20 44 49 46 46 45 52  | .EGATIVE DIFFER|
00002FB0: 45 4E 43 45 0D 0D 3B 20  D0 4F 53 49 54 49 56 45  |ENCE..; .OSITIVE|
00002FC0: 20 44 49 46 46 45 52 45  4E 43 45 3A 0D 3B 20 C3  | DIFFERENCE:.; .|
00002FD0: 48 45 43 4B 20 57 48 45  54 48 45 52 20 4D 4F 56  |HECK WHETHER MOV|
00002FE0: 45 4D 45 4E 54 20 43 41  55 53 45 44 20 41 20 56  |EMENT CAUSED A V|
00002FF0: 41 4C 55 45 0D 3B 20 57  52 41 50 2D 41 52 4F 55  |ALUE.; WRAP-AROU|
00003000: 4E 44 2E 0D 20 20 20 20  20 20 20 20 43 4D 50 20  |ND..        CMP |
00003010: C8 41 4C 46 D0 4F 54 D7  49 44 54 48 2C 58 0D 20  |.ALF.OT.IDTH,X. |
00003020: 20 20 20 20 20 20 20 42  43 43 20 C4 45 43 52 45  |       BCC .ECRE|
00003030: 41 53 45 0D 20 20 20 20  20 20 20 20 42 45 51 20  |ASE.        BEQ |
00003040: C4 45 43 52 45 41 53 45  0D 3B 20 C9 54 20 44 49  |.ECREASE.; .T DI|
00003050: 44 2C 20 53 4F 20 43 41  4C 43 55 4C 41 54 45 20  |D, SO CALCULATE |
00003060: 22 52 45 41 4C 22 20 44  49 53 54 41 4E 43 45 0D  |"REAL" DISTANCE.|
00003070: 3B 20 41 4E 44 20 4A 55  4D 50 20 54 4F 20 45 58  |; AND JUMP TO EX|
00003080: 49 54 0D 20 20 20 20 20  20 20 20 3B 53 45 43 3B  |IT.        ;SEC;|
00003090: 20 C3 20 49 53 20 41 4C  57 41 59 53 20 53 45 54  | . IS ALWAYS SET|
000030A0: 20 48 45 52 45 0D 20 20  20 20 20 20 20 20 53 42  | HERE.        SB|
000030B0: 43 20 D0 4F 54 D7 49 44  54 48 2C 58 3B 20 C6 49  |C .OT.IDTH,X; .I|
000030C0: 58 20 44 49 53 54 41 4E  43 45 0D 0D 3B 20 D7 45  |X DISTANCE..; .E|
000030D0: 20 4E 4F 57 20 4B 4E 4F  57 20 54 48 41 54 20 54  | NOW KNOW THAT T|
000030E0: 48 45 20 28 46 49 58 45  44 29 20 44 49 53 54 41  |HE (FIXED) DISTA|
000030F0: 4E 43 45 0D 3B 20 49 53  20 52 45 41 4C 4C 59 20  |NCE.; IS REALLY |
00003100: 4E 45 47 41 54 49 56 45  2C 20 53 4F 20 57 45 20  |NEGATIVE, SO WE |
00003110: 46 49 4E 41 4C 4C 59 0D  3B 20 57 49 50 45 20 4F  |FINALLY.; WIPE O|
00003120: 55 54 20 54 48 41 54 20  41 4E 4E 4F 59 49 4E 47  |UT THAT ANNOYING|
00003130: 20 42 49 54 20 30 20 4E  4F 49 53 45 20 42 59 0D  | BIT 0 NOISE BY.|
00003140: 3B 20 49 4E 43 52 45 4D  45 4E 54 49 4E 47 20 54  |; INCREMENTING T|
00003150: 48 45 20 56 41 4C 55 45  2E 0D C9 4E 43 52 45 41  |HE VALUE...NCREA|
00003160: 53 45 0D 20 20 20 20 20  20 20 20 3B 43 4C 43 3B  |SE.        ;CLC;|
00003170: 20 C3 20 49 53 20 41 4C  57 41 59 53 20 43 4C 45  | . IS ALWAYS CLE|
00003180: 41 52 20 48 45 52 45 0D  20 20 20 20 20 20 20 20  |AR HERE.        |
00003190: 41 44 43 20 23 24 30 31  0D 20 20 20 20 20 20 20  |ADC #$01.       |
000031A0: 20 42 45 51 20 5A 45 52  4F 3B 20 C9 46 20 49 4E  | BEQ ZERO; .F IN|
000031B0: 43 52 45 41 53 49 4E 47  0D 3B 20 44 45 4C 49 56  |CREASING.; DELIV|
000031C0: 45 52 53 20 5A 45 52 4F  2C 20 4A 55 4D 50 20 54  |ERS ZERO, JUMP T|
000031D0: 4F 20 5A 45 52 4F 20 48  41 4E 44 4C 45 52 2E 0D  |O ZERO HANDLER..|
000031E0: 20 20 20 20 20 20 20 20  4C 44 59 20 23 24 46 46  |        LDY #$FF|
000031F0: 3B 20 D3 45 54 20 55 50  20 48 49 47 48 20 42 59  |; .ET UP HIGH BY|
00003200: 54 45 20 46 4F 52 0D 3B  20 4E 45 47 41 54 49 56  |TE FOR.; NEGATIV|
00003210: 45 20 56 41 4C 55 45 53  2E 0D 20 20 20 20 20 20  |E VALUES..      |
00003220: 20 20 52 54 53 0D 0D 3B  20 CE 45 47 41 54 49 56  |  RTS..; .EGATIV|
00003230: 45 20 44 49 46 46 45 52  45 4E 43 45 3A 0D 3B 20  |E DIFFERENCE:.; |
00003240: C3 48 45 43 4B 20 57 48  45 54 48 45 52 20 4D 4F  |.HECK WHETHER MO|
00003250: 56 45 4D 45 4E 54 20 43  41 55 53 45 44 20 41 20  |VEMENT CAUSED A |
00003260: 56 41 4C 55 45 0D 3B 20  57 52 41 50 2D 41 52 4F  |VALUE.; WRAP-ARO|
00003270: 55 4E 44 2E 0D 4D 49 4E  55 53 20 20 20 45 4F 52  |UND..MINUS   EOR|
00003280: 20 23 24 46 46 3B 20 C3  4F 4D 50 4C 45 4D 45 4E  | #$FF; .OMPLEMEN|
00003290: 54 0D 3B 20 C9 46 20 57  45 20 57 4F 55 4C 44 20  |T.; .F WE WOULD |
000032A0: 44 4F 20 41 20 52 45 41  4C 20 4E 45 47 41 54 49  |DO A REAL NEGATI|
000032B0: 4F 4E 20 28 42 59 0D 3B  20 41 44 44 49 4E 47 20  |ON (BY.; ADDING |
000032C0: 22 31 22 29 2C 20 54 48  45 4E 20 57 45 20 57 4F  |"1"), THEN WE WO|
000032D0: 55 4C 44 20 4E 45 45 44  20 54 4F 0D 3B 20 42 52  |ULD NEED TO.; BR|
000032E0: 41 4E 43 48 20 55 53 49  4E 47 20 C2 C3 C3 20 2A  |ANCH USING ... *|
000032F0: 41 4E 44 2A 20 C2 C5 D1  2E 20 D3 4F 20 54 48 45  |AND* .... .O THE|
00003300: 0D 3B 20 41 42 4F 56 45  20 57 41 59 20 4D 49 47  |.; ABOVE WAY MIG|
00003310: 48 54 20 42 45 20 48 41  52 44 45 52 20 54 4F 0D  |HT BE HARDER TO.|
00003320: 3B 20 55 4E 44 45 52 53  54 41 4E 44 2C 20 42 55  |; UNDERSTAND, BU|
00003330: 54 20 49 54 20 49 53 20  42 4F 54 48 20 53 48 4F  |T IT IS BOTH SHO|
00003340: 52 54 45 52 0D 3B 20 2A  41 4E 44 2A 20 46 41 53  |RTER.; *AND* FAS|
00003350: 54 45 52 20 2D 20 57 48  49 43 48 20 C9 20 4C 49  |TER - WHICH . LI|
00003360: 4B 45 2E 20 3A 29 0D 20  20 20 20 20 20 20 20 43  |KE. :).        C|
00003370: 4D 50 20 C8 41 4C 46 D0  4F 54 D7 49 44 54 48 2C  |MP .ALF.OT.IDTH,|
00003380: 58 0D 20 20 20 20 20 20  20 20 45 4F 52 20 23 24  |X.        EOR #$|
00003390: 46 46 3B 20 D2 45 53 54  4F 52 45 20 56 41 4C 55  |FF; .ESTORE VALU|
000033A0: 45 0D 20 20 20 20 20 20  20 20 42 43 43 20 C9 4E  |E.        BCC .N|
000033B0: 43 52 45 41 53 45 0D 3B  20 CD 4F 56 45 4D 45 4E  |CREASE.; .OVEMEN|
000033C0: 54 20 43 41 55 53 45 44  20 41 20 56 41 4C 55 45  |T CAUSED A VALUE|
000033D0: 20 57 52 41 50 2D 41 52  4F 55 4E 44 2C 0D 3B 20  | WRAP-AROUND,.; |
000033E0: 53 4F 20 43 41 4C 43 55  4C 41 54 45 20 22 52 45  |SO CALCULATE "RE|
000033F0: 41 4C 22 20 44 49 53 54  41 4E 43 45 20 41 4E 44  |AL" DISTANCE AND|
00003400: 0D 3B 20 45 58 49 54 2E  0D 20 20 20 20 20 20 20  |.; EXIT..       |
00003410: 20 43 4C 43 0D 20 20 20  20 20 20 20 20 41 44 43  | CLC.        ADC|
00003420: 20 D0 4F 54 D7 49 44 54  48 2C 58 3B 20 C6 49 58  | .OT.IDTH,X; .IX|
00003430: 20 44 49 53 54 41 4E 43  45 0D 0D 3B 20 D7 45 20  | DISTANCE..; .E |
00003440: 4E 4F 57 20 4B 4E 4F 57  20 54 48 41 54 20 54 48  |NOW KNOW THAT TH|
00003450: 45 20 28 46 49 58 45 44  29 20 44 49 53 54 41 4E  |E (FIXED) DISTAN|
00003460: 43 45 0D 3B 20 49 53 20  52 45 41 4C 4C 59 20 50  |CE.; IS REALLY P|
00003470: 4F 53 49 54 49 56 45 2C  20 53 4F 20 57 45 20 46  |OSITIVE, SO WE F|
00003480: 49 4E 41 4C 4C 59 0D 3B  20 57 49 50 45 20 4F 55  |INALLY.; WIPE OU|
00003490: 54 20 54 48 41 54 20 41  4E 4E 4F 59 49 4E 47 20  |T THAT ANNOYING |
000034A0: 42 49 54 20 30 20 4E 4F  49 53 45 20 42 59 0D 3B  |BIT 0 NOISE BY.;|
000034B0: 20 44 45 43 52 45 4D 45  4E 54 49 4E 47 20 54 48  | DECREMENTING TH|
000034C0: 45 20 56 41 4C 55 45 2E  0D C4 45 43 52 45 41 53  |E VALUE...ECREAS|
000034D0: 45 0D 20 20 20 20 20 20  20 20 53 45 43 0D 20 20  |E.        SEC.  |
000034E0: 20 20 20 20 20 20 53 42  43 20 23 24 30 31 0D 0D  |      SBC #$01..|
000034F0: 3B 20 CE 4F 20 44 49 46  46 45 52 45 4E 43 45 20  |; .O DIFFERENCE |
00003500: 4F 52 20 50 4F 53 49 54  49 56 45 20 44 49 46 46  |OR POSITIVE DIFF|
00003510: 45 52 45 4E 43 45 3B 0D  3B 20 42 4F 54 48 20 4E  |ERENCE;.; BOTH N|
00003520: 45 45 44 20 5A 45 52 4F  20 41 53 20 54 48 45 20  |EED ZERO AS THE |
00003530: 48 49 47 48 20 42 59 54  45 2E 0D 5A 45 52 4F 20  |HIGH BYTE..ZERO |
00003540: 20 20 20 4C 44 59 20 23  30 0D 20 20 20 20 20 20  |   LDY #0.      |
00003550: 20 20 52 54 53 0D 0D 3B  20 C9 46 20 54 48 45 52  |  RTS..; .F THER|
00003560: 45 20 49 53 20 4E 4F 20  4D 4F 55 53 45 2C 20 52  |E IS NO MOUSE, R|
00003570: 45 53 45 54 20 22 4C 4F  57 45 53 54 22 0D 3B 20  |ESET "LOWEST".; |
00003580: 28 22 48 49 47 48 45 53  54 22 20 57 49 4C 4C 20  |("HIGHEST" WILL |
00003590: 48 41 56 45 20 42 45 45  4E 20 52 45 53 45 54 0D  |HAVE BEEN RESET.|
000035A0: 3B 20 41 4C 52 45 41 44  59 29 20 41 4E 44 20 52  |; ALREADY) AND R|
000035B0: 45 54 55 52 4E 20 5A 45  52 4F 2E 0D D2 45 53 45  |ETURN ZERO...ESE|
000035C0: 54 CD CD 20 54 41 59 3B  20 D3 45 54 20 D9 20 54  |T.. TAY; .ET . T|
000035D0: 4F 20 5A 45 52 4F 2E 0D  20 20 20 20 20 20 20 20  |O ZERO..        |
000035E0: 50 4C 41 3B 20 D4 49 44  59 20 53 54 41 43 4B 0D  |PLA; .IDY STACK.|
000035F0: 20 20 20 20 20 20 20 20  4C 44 41 20 23 24 46 46  |        LDA #$FF|
00003600: 3B 20 D2 45 53 45 54 20  22 4C 4F 57 45 53 54 22  |; .ESET "LOWEST"|
00003610: 0D 20 20 20 20 20 20 20  20 53 54 41 20 D0 4F 54  |.        STA .OT|
00003620: CD 49 4E 2C 58 0D 20 20  20 20 20 20 20 20 54 59  |.IN,X.        TY|
00003630: 41 3B 20 D2 45 54 55 52  4E 20 57 49 54 48 20 C1  |A; .ETURN WITH .|
00003640: 2F D9 20 3D 20 30 0D 20  20 20 20 20 20 20 20 52  |/. = 0.        R|
00003650: 54 53 0D 0D 0D 3B 20 2D  2D 2D 20 C9 4E 43 4C 55  |TS...; --- .NCLU|
00003660: 44 45 20 53 50 52 49 54  45 53 0D 0D 3B 20 C2 45  |DE SPRITES..; .E|
00003670: 43 41 55 53 45 20 54 48  45 20 C3 36 34 20 56 45  |CAUSE THE .64 VE|
00003680: 52 53 49 4F 4E 20 43 4F  50 49 45 53 20 54 48 45  |RSION COPIES THE|
00003690: 0D 3B 20 53 50 52 49 54  45 20 44 41 54 41 20 49  |.; SPRITE DATA I|
000036A0: 4E 54 4F 20 54 48 45 20  54 41 50 45 20 42 55 46  |NTO THE TAPE BUF|
000036B0: 46 45 52 20 4F 4E 0D 3B  20 49 4E 49 54 49 41 4C  |FER ON.; INITIAL|
000036C0: 49 53 41 54 49 4F 4E 2C  20 54 48 45 20 44 41 54  |ISATION, THE DAT|
000036D0: 41 20 49 53 20 49 4E 43  4C 55 44 45 44 0D 3B 20  |A IS INCLUDED.; |
000036E0: 52 49 47 48 54 20 48 45  52 45 2E 0D 3B 20 C9 4E  |RIGHT HERE..; .N|
000036F0: 20 54 48 45 20 C3 31 32  38 20 56 45 52 53 49 4F  | THE .128 VERSIO|
00003700: 4E 2C 20 57 45 20 53 4B  49 50 20 4D 45 4D 4F 52  |N, WE SKIP MEMOR|
00003710: 59 0D 3B 20 55 4E 54 49  4C 20 57 45 20 52 45 41  |Y.; UNTIL WE REA|
00003720: 43 48 20 24 30 45 30 30  20 2D 20 54 48 49 53 20  |CH $0E00 - THIS |
00003730: 49 53 20 57 48 45 52 45  0D 3B 20 54 48 45 20 53  |IS WHERE.; THE S|
00003740: 50 52 49 54 45 53 20 41  52 45 20 53 54 4F 52 45  |PRITES ARE STORE|
00003750: 44 20 42 59 20 44 45 46  41 55 4C 54 2E 0D 3B 20  |D BY DEFAULT..; |
00003760: 20 20 20 20 20 20 21 41  4C 49 47 4E 20 24 46 46  |      !ALIGN $FF|
00003770: 46 46 2C 24 45 30 30 2C  24 30 3B C3 31 32 38 20  |FF,$E00,$0;.128 |
00003780: 4F 4E 4C 59 0D D3 50 52  49 54 45 53 20 21 42 49  |ONLY..PRITES !BI|
00003790: 4E 41 52 59 20 22 50 4F  49 4E 54 45 52 53 50 52  |NARY "POINTERSPR|
000037A0: 49 54 45 53 22 2C 2C 20  32 0D                    |ITES",, 2.      |
;ACME 0.07...; --- CONFIGURABLE VALUES..
; START ADDRESS.*=$C000; C64 VALUE.;*=$0
C00; C128 VALUE..; OUTPUT FILE NAME.!TO 
"INPUTDRV64.BIN"; C64 FILE NAME.;!TO "IN
PUTDRV128.BIN"; C128 FILE NAME..; POINTE
R'S MAXIMUM COORDINATES.MAXIMUMCOORDINAT
EX = 319; VIC VALUE.;MAXIMUMCOORDINATEX 
= 639; VDC VALUE.MAXIMUMCOORDINATEY = 19
9..; MAXIMUM STEP SIZE ("SPEED") FOR.; J
OYSTICK ACCELERATION ROUTINE, IN.; PIXEL
S..MAXSTEP = $10; (MAX. $7F)..; DISTANCE
 BEFORE ACCELERATION STARTS,.; IN PIXELS
..MAXTIME = $04; (MAX. $7F)..; SPRITES T
O USE FOR OVERLAY POINTER.SPRITE_A = 0.S
PRITE_B = 1..; COORDINATES OF "POINTER P
IXEL" WITHIN.; POINTER SPRITES; ADJUST T
HESE IF YOU.; USE DIFFERENT SPRITES..; (
0,0) IS SPRITE'S UPPER LEFT PIXEL..SPRIT
E_HOTSPOTX = 1.SPRITE_HOTSPOTY = 1..; BA
SE OF VIC REGISTERS TO WRITE TO..VIC_BAS
E = $D000; C64 VALUE.;VIC_BASE = $11D6; 
C128 VALUE, LOCATION.; OF MIRROR REGISTE
RS...; LOCATIONS TO STORE BUTTON STATES,
.; $FF = PRESSED, $00 = NOT PRESSED..; M
OUSE USES BOTH BUTTONS, JOYSTICK.; ONLY 
USES "LEFTBUTTON"..LEFTBUTTON  = $A4; C6
4 VALUE.RIGHTBUTTON = $A5; C64 VALUE.;LE
FTBUTTON  = $FA; C128 VALUE.;RIGHTBUTTON
 = $FF; C128 VALUE..; LOCATION TO STORE 
POINTER'S CURRENT.; PIXEL COORDINATES. T
HE DRIVER CODE.; RELIES ON HAVING *FOUR 
CONSECUTIVE*.; BYTES:.; X LOW, X HIGH, Y
 LOW, Y HIGH..COORDINATES = $FB; $FB-$FE
..; LOCATION TO STORE POINTER'S CURRENT.
; CHARACTER COORDINATES..CHARX = $B3; C6
4 VALUE.CHARY = $B4; C64 VALUE.;CHARX = 
$9B; C128 VALUE.;CHARY = $9C; C128 VALUE
...; --- SYSTEM CONSTANTS..; INTERRUPT V
ECTOR.SYS_IIRQ = $0314..; I/O REGISTERS.
SID_POT   = $D419.CIA1_PRA  = $DC00.CIA1
_PRB  = $DC01.CIA1_DDRB = $DC03.;MMU_CR 
   = $FF00; C128 ONLY...; --- LABEL DEFI
NITIONS..; NEW NAMES FOR SOME PRECALCULA
TED.; VALUES, ONLY TO IMPROVE READABILIT
Y..; DON'T CHANGE THESE..POINTERXNOW = C
OORDINATES.POINTERYNOW = COORDINATES+2.S
PRITEA_X = VIC_BASE+2*SPRITE_A.SPRITEA_Y
 = VIC_BASE+2*SPRITE_A+1.SPRITEB_X = VIC
_BASE+2*SPRITE_B.SPRITEB_Y = VIC_BASE+2*
SPRITE_B+1.SPRITES_OF = VIC_BASE+16; X O
VERFLOW.; THE CHARACTER "^" IN THE FOLLO
WING.; CALCULATION MEANS "TO THE POWER O
F"..; IT IS ACME SYNTAX - IF YOUR ASSEMB
LER.; CANNOT DO THIS, YOU MAY WANT TO US
E.; HARDCODED VALUES HERE INSTEAD OF.; C
ALCULATIONS..SPRITES_BITMASK = 2^SPRITE_
A+2^SPRITE_B.SPRITEOFFSET_X = $18-SPRITE
_HOTSPOTX.SPRITEOFFSET_Y = $32-SPRITE_HO
TSPOTY.; IN THE SPRITE COORDINATE SYSTEM
, THE.; GRAPHICS PIXEL (0,0) HAS THE.; C
OORDINATES ($18,$32), SO THESE ARE.; NEE
DED FOR CONVERTING. BLAME THE VIC....; -
-- ENTRY POINT..; BECAUSE THIS ROUTINE I
S THE FIRST,.; THE FILE CAN BE BOOTED ON
 A C128..INIT.; INITIALISATION CODE, INS
TALLS DRIVER.; ON IRQ VECTOR..; FETCH IR
Q VECTOR AND WRITE TO END.        LDA SY
S_IIRQ.        LDX SYS_IIRQ+1.        ST
A MOD16+1.        STX MOD16+2.; LET IRQ 
VECTOR POINT TO DRIVER CODE.        LDA 
#<ENTRY.        LDX #>ENTRY.        PHP.
        SEI.        STA SYS_IIRQ.       
 STX SYS_IIRQ+1.        PLP.; THE FOLLOW
ING FIVE COMMANDS ARE ONLY.; NEEDED ON T
HE C128..;       LDA MMU_CR.;       TAY.
;       AND #$FE; ACTIVATE I/O CHIPS.;  
     STA MMU_CR.; INIT MOUSE BUTTONS.   
     LDA #$11.        STA CIA1_PRB.;    
   STY MMU_CR; C128 ONLY..; THE FOLLOWIN
G THREE MINI-ROUTINES ARE.; ONLY NEEDED 
ON THE C64...; COPY SPRITES TO TAPE BUFF
ER.        LDX #127.CPLP    LDA SPRITES,
X.        STA $0340,X.        DEX.      
  BPL CPLP.        LDA #SPRITES_BITMASK.
; SET SPRITE BLOCK POINTERS.        LDX 
#$0D.        STX 2040+SPRITE_A.        I
NX.        STX 2040+SPRITE_B.; ACTIVATE 
POINTER SPRITES.        ORA VIC_BASE+21.
        STA VIC_BASE+21..; FROM HERE ON,
 BOTH C64+C128 AGAIN. :).        RTS...;
 --- VARIABLES..; PIXEL COUNTER BEFORE A
CCELERATING.JOYWAITTIME !BYTE 0...; --- 
MAIN CODE..ENTRY.; THE DRIVER CONSISTS O
F SEVERAL.; DISTINCT PARTS. TO MINIMISE.
; PERFORMANCE WASTAGE, YOU SHOULD.; REMO
VE ALL PARTS YOU DON'T NEED FOR.; THE SP
ECIFIC APPLICATION....; --- PART 0, INIT
IALISATIONS..; MAKE SURE DECIMAL MODE IS
 OFF.        CLD.; SET BUTTON STATES TO 
"NOT PRESSED",.; SO THE OTHER PARTS ONLY
 HAVE TO DEAL.; WITH SETTING THEM TO "PR
ESSED"..        LDA #$00.        STA LEF
TBUTTON.        STA RIGHTBUTTON...; --- 
PART 1, HANDLING MOUSE MOVEMENTS..; MOUS
E X.        LDX #$00; 0 MEANS "X STUFF".
        JSR POTDELTA.; NOW SIGNED X MOVE
MENT IS IN A/Y..; ADD TO CURRENT X VALUE
..        CLC.        ADC POINTERXNOW.  
      STA POINTERXNOW.        TYA.      
  ADC POINTERXNOW+1.        STA POINTERX
NOW+1.; MOUSE Y.        LDX #$01; 1 MEAN
S "Y STUFF".        JSR POTDELTA.; NOW S
IGNED Y MOVEMENT IS IN A/Y..; MOUSE AND 
COMPUTER USE DIFFERENT Y.; DIRECTIONS, S
O DON'T ADD TO, BUT.; SUBTRACT FROM CURR
ENT Y VALUE..; THIS IS A REVERSE SUBTRAC
TION - IT.; MIGHT BE HARDER TO UNDERSTAN
D, BUT IT.; IS FASTER AND SMALLER THAN T
HE USUAL.; WAY..        CLC.        SBC 
POINTERYNOW.        EOR #$FF.        STA
 POINTERYNOW.        TYA.        SBC POI
NTERYNOW+1.        EOR #$FF.        STA 
POINTERYNOW+1...; --- PART 2, HANDLING M
OUSE BUTTONS..; PREPARE CIA BY SETTING B
ITS TO INPUT.        LDY #$11.        ST
Y CIA1_DDRB.        LDX #$FF; $FF MEANS 
"PRESSED".        LDA #$10; CHECK LEFT B
UTTON.        BIT CIA1_PRB.        BNE N
OTLB.        STX LEFTBUTTON; STORE STATE
.NOTLB   LDA #$01; CHECK RIGHT BUTTON.  
      BIT CIA1_PRB.        BNE NOTRB.   
     STX RIGHTBUTTON; STORE STATE.; RESE
T CIA TO NORMAL STATE.NOTRB   LDY #$00. 
       STY CIA1_DDRB...; --- PART 3, HAN
DLING THE JOYSTICK..; FETCH BYTE HOLDING
 DIRECTION FLAGS.        LDA CIA1_PRA.  
      TAX; ...AND REMEMBER IT..; CHECK '
UP' DIRECTION.        ROR.        BCS DO
WN.; SUBTRACT CURRENT STEP SIZE FROM Y.;
 VALUE IF NEEDED..        TAY.        SE
C.        LDA POINTERYNOW.        SBC JO
YSTEPSIZE.        STA POINTERYNOW.      
  BCS FIXHIUP.        DEC POINTERYNOW+1.
FIXHIUP TYA..; CHECK 'DOWN' DIRECTION.DO
WN    ROR.        BCS LEFT.; ADD CURRENT
 STEP SIZE TO Y VALUE IF.; NEEDED..     
   TAY.        ;CLC; C IS ALWAYS CLEAR H
ERE.        LDA POINTERYNOW.        ADC 
JOYSTEPSIZE.        STA POINTERYNOW.    
    BCC FIXHIDOWN.        INC POINTERYNO
W+1.FIXHIDOWN       TYA..; CHECK 'LEFT' 
DIRECTION.LEFT    ROR.        BCS RIGHT.
; SUBTRACT CURRENT STEP SIZE FROM X.; VA
LUE IF NEEDED..        TAY.        SEC. 
       LDA POINTERXNOW.        SBC JOYST
EPSIZE.        STA POINTERXNOW.        B
CS FIXHILEFT.        DEC POINTERXNOW+1.F
IXHILEFT       TYA..; CHECK 'RIGHT' DIRE
CTION.RIGHT   ROR.        BCS PART3END.;
 ADD CURRENT STEP SIZE TO X VALUE IF.; N
EEDED..        TAY.        ;CLC; C IS AL
WAYS CLEAR HERE.        LDA POINTERXNOW.
        ADC JOYSTEPSIZE.        STA POIN
TERXNOW.        BCC FIXHIRIGHT.        I
NC POINTERXNOW+1.FIXHIRIGHT      TYA.PAR
T3END...; --- PART 4, HANDLING JOYSTICK 
BUTTON..        ROR.        BCS PART4END
.        LDA #$FF; $FF MEANS "PRESSED". 
       STA LEFTBUTTON.PART4END...; --- P
ART 5, JOYSTICK ACCELERATION..; RESTORE 
JOYSTICK DIRECTION BITS AND.; CHECK WHET
HER TO SET SPEED TO ZERO..        TXA.  
      AND #$0F; CLEAR UNNEEDED BITS.    
    CMP #$0F; ANY DIRECTION BIT ?.      
  BNE INCTEMPO.; NO DIRECTION WAS USED, 
SO RESET SPEED.; AND WAIT COUNTER TO NOR
MAL..        LDA #$01.        STA JOYSTE
PSIZE.        LDA #MAXTIME.        STA J
OYWAITTIME.        JMP PART5END.INCTEMPO
.; A DIRECTION BIT WAS USED, SO CHECK.; 
WHETHER TO ACCELERATE: IF SPEED IS.; ALR
EADY MAXIMUM SPEED, DON'T.; ACCELERATE..
JOYSTEPSIZE=*+1.        LDA #$00; (SELF-
MODIFYING).; IF THE VARIABLE "JOYSTEPSIZ
E" WOULD.; HAVE BEEN DEFINED AS A SEPARA
TE.; LOCATION (USING "!BYTE"), IT WOULD.
; HAVE TAKEN A BYTE OF MEMORY. BY.; STOR
ING THE VALUE INSIDE AN LDA.; COMMAND'S 
ARGUMENT, WE SAVE THAT ONE.; BYTE. IT MI
GHT MAKE A DIFFERENCE. :).        CMP #M
AXSTEP; IF SPEED IS MAX.,.        BCS PA
RT5END; DON'T ACCELERATE..; SPEED ISN'T 
MAXIMUM YET. CHECK.; WHETHER WE HAVE TO 
WAIT BEFORE.; ACCELERATING..        DEC 
JOYWAITTIME.        BPL PART5END.; COUNT
ER HAS UNDERRUN, SO ACCELERATE..        
INC JOYWAITTIME; RESET COUNTER.        I
NC JOYSTEPSIZE; INCREASE SPEED.PART5END.
..; --- PART 6, RESTRICT COORDINATE RANG
E..; RESTRICT X VALUE.        LDX #$00; 
0 MEANS "X STUFF".        JSR RESTRICT.;
 RESTRICT Y VALUE.        LDX #$02; 2 ME
ANS "Y STUFF".        JSR RESTRICT...; -
-- PART 7, POSITIONING SPRITES..; SET SP
RITES' X POSITIONS.        LDA POINTERXN
OW.        CLC.        ADC #SPRITEOFFSET
_X.        STA SPRITEA_X; SET BOTH SPRIT
ES.        STA SPRITEB_X.        LDA SPR
ITES_OF; GET X OVERFLOW.        BCS SETO
F.        LDX POINTERXNOW+1.        BNE 
SETOF.        AND #SPRITES_BITMASK EOR $
FF.        BCC STOREOF; C IS CLEAR HERE.
.SETOF   ORA #SPRITES_BITMASK.STOREOF ST
A SPRITES_OF; SET X OVERFLOW..; SET SPRI
TES' Y POSITIONS.        LDA POINTERYNOW
.        CLC.        ADC #SPRITEOFFSET_Y
.        STA SPRITEA_Y.        STA SPRIT
EB_Y.; THE Y VALUE'S HIGH BYTE IS USELES
S IN.; THIS CASE....; --- PART 8, MAKING
 CHAR COORDINATES..; CONVERT X COORDINAT
E. THERE ARE.; DIFFERENT "BEST" ROUTINES
 FOR.; DIFFERENT RESOLUTIONS, SO I'VE GI
VEN.; THE VIC AND VDC ROUTINES..        
LDA POINTERXNOW.        LSR.        LSR.
        LSR.        LDX POINTERXNOW+1.  
      BEQ SETCX; VIC ONLY.        ORA #$
20; VIC ONLY.;       ORA ORTABLE,X; VDC 
ONLY.SETCX   STA CHARX..; CONVERT Y COOR
DINATE..        LDA POINTERYNOW.        
LSR.        LSR.        LSR.        STA 
CHARY...; --- ADD FURTHER PARTS HERE..; 
HERE YOU CAN ADD FURTHER ROUTINES,.; FOR
 EXAMPLE TO USE THE BUTTON STATES.; TO F
AKE KEYPRESSES ETC....; --- THE END..; T
HE INITIALISATION ROUTINE SETS THE.; ARG
UMENT TO THE ADDRESS OF THE.; PREVIOUS I
RQ ROUTINE..MOD16   JMP $FFFF; (SELF-MOD
IFYING)..; THIS TABLE IS FOR PART 8..;OR
TABLE !BYTE 0,32,64; VDC ONLY...; --- "R
ESTRICT" SUBROUTINE..POINTERXMAX !WORD M
AXIMUMCOORDINATEX.POINTERYMAX !WORD MAXI
MUMCOORDINATEY.; "Y" WORD MUST FOLLOW DI
RECTLY AFTER.; "X" WORD IN MEMORY...REST
RICT.; RESTRICT INTERNAL COORDINATES TO.
; CONFIGURED RANGE. ENTRY CONDITIONS:.; 
X IS DIRECTION HANDLE (0 = X, 2 = Y).   
     LDA POINTERXNOW+1,X.        BMI SET
TO0.        CMP POINTERXMAX+1,X.        
BCC EOSR.        BNE RESETCO.        LDA
 POINTERXMAX,X.        CMP POINTERXNOW,X
.        BCS EOSR.RESETCO LDA POINTERXMA
X,X.        LDY POINTERXMAX+1,X.        
JMP DEFCO..SETTO0  LDA #0.        TAY.DE
FCO   STA POINTERXNOW,X.        STY POIN
TERXNOW+1,X.EOSR    RTS...; --- "POT" SU
BROUTINE..; THIS ROUTINE COMPUTES THE MO
USE.; MOVEMENTS AND THEREFORE CONTAINS T
HE.; SELF-CALIBRATION STUFF AND THE OTHE
R.; IMPROVEMENTS OVER THE STANDARD 1351.
; DRIVER..POTMAX !WORD 0; MAX. POTS YET 
PLUS 1 !.POTMIN !WORD $FFFF; LOWEST POTS
 YET.POTOLD !WORD 0; OLD VALUES.POTWIDTH
 !WORD 0; INTERVAL WIDTH.HALFPOTWIDTH !W
ORD 0; HALF WIDTH.; (BUFFERED FOR SPEED 
INCREASE).; THE ABOVE VARIABLES ARE NOT 
REALLY.; WORDS: THE FIRST BYTE IS THE X 
VALUE,.; THE SECOND BYTE IS THE Y VALUE.
; RESPECTIVELY...POTDELTA.; COMPUTE THE 
SIGNED DISTANCE OF MOUSE.; MOVEMENT. ENT
RY CONDITIONS:.; X IS DIRECTION HANDLE (
0 = X, 1 = Y).; EXIT CONDITIONS:.; A/Y A
RE SIGNED DISTANCE (LOW/HIGH)..; FIRST, 
GET NEW VALUE AND CLEAR.; "RECALCULATE S
IGNAL WIDTH" FLAG..        LDA SID_POT,X
.        LDY #$00.; CHECK WHETHER NEW VA
LUE IS LOWER THAN.; LOWEST KNOWN..      
  CMP POTMIN,X.        BCS M0.; STORE NE
W "LOWEST" UND SET.; "RECALCULATE SIGNAL
 WIDTH" FLAG..        STA POTMIN,X.     
   LDY #$FF..; CHECK WHETHER NEW VALUE I
S HIGHER.; THAN HIGHEST KNOWN..M0      C
MP POTMAX,X.        BCC M1.; SET "RECALC
ULATE SIGNAL WIDTH" FLAG.; AND STORE NEW
 "HIGHEST"..        LDY #$FF.        PHA
; REMEMBER CURRENT VALUE.        ADC #$0
0; ADD ONE (C IS SET).        STA POTMAX
,X.; VALUE $FF (0 AFTER ADDING) MEANS TH
AT.; THERE IS NO MOUSE CONNECTED, SO RES
ET.; MIN/MAX IN THAT CASE..        BEQ R
ESETMM; STACK IS UNTIDY....        PLA; 
RESTORE CURRENT VALUE..; IF FLAG IS SET,
 RECALCULATE SIGNAL.; WIDTH..M1.        
INY; CHECK FLAG.        BNE M3.        T
AY; BUFFER CURRENT VALUE..        LDA PO
TMAX,X; GET HIGHEST+1.        SEC; SUBTR
ACT LOWEST.        SBC POTMIN,X.        
BCC M2.        STA POTWIDTH,X; STORE SIG
NAL.        LSR; WIDTH AND HALF SIGNAL. 
       STA HALFPOTWIDTH,X; WIDTH.M2     
 TYA; RESTORE CURRENT VALUE...; CALCULAT
E DISTANCE.M3      TAY; BUFFER CURRENT V
ALUE..        SEC.        SBC POTOLD,X. 
       PHA.        TYA.        STA POTOL
D,X.        PLA.        BEQ ZERO; IF NOT
 MOVED, EXIT..        BCC MINUS; NEGATIV
E DIFFERENCE..; POSITIVE DIFFERENCE:.; C
HECK WHETHER MOVEMENT CAUSED A VALUE.; W
RAP-AROUND..        CMP HALFPOTWIDTH,X. 
       BCC DECREASE.        BEQ DECREASE
.; IT DID, SO CALCULATE "REAL" DISTANCE.
; AND JUMP TO EXIT.        ;SEC; C IS AL
WAYS SET HERE.        SBC POTWIDTH,X; FI
X DISTANCE..; WE NOW KNOW THAT THE (FIXE
D) DISTANCE.; IS REALLY NEGATIVE, SO WE 
FINALLY.; WIPE OUT THAT ANNOYING BIT 0 N
OISE BY.; INCREMENTING THE VALUE..INCREA
SE.        ;CLC; C IS ALWAYS CLEAR HERE.
        ADC #$01.        BEQ ZERO; IF IN
CREASING.; DELIVERS ZERO, JUMP TO ZERO H
ANDLER..        LDY #$FF; SET UP HIGH BY
TE FOR.; NEGATIVE VALUES..        RTS..;
 NEGATIVE DIFFERENCE:.; CHECK WHETHER MO
VEMENT CAUSED A VALUE.; WRAP-AROUND..MIN
US   EOR #$FF; COMPLEMENT.; IF WE WOULD 
DO A REAL NEGATION (BY.; ADDING "1"), TH
EN WE WOULD NEED TO.; BRANCH USING BCC *
AND* BEQ. SO THE.; ABOVE WAY MIGHT BE HA
RDER TO.; UNDERSTAND, BUT IT IS BOTH SHO
RTER.; *AND* FASTER - WHICH I LIKE. :). 
       CMP HALFPOTWIDTH,X.        EOR #$
FF; RESTORE VALUE.        BCC INCREASE.;
 MOVEMENT CAUSED A VALUE WRAP-AROUND,.; 
SO CALCULATE "REAL" DISTANCE AND.; EXIT.
.        CLC.        ADC POTWIDTH,X; FIX
 DISTANCE..; WE NOW KNOW THAT THE (FIXED
) DISTANCE.; IS REALLY POSITIVE, SO WE F
INALLY.; WIPE OUT THAT ANNOYING BIT 0 NO
ISE BY.; DECREMENTING THE VALUE..DECREAS
E.        SEC.        SBC #$01..; NO DIF
FERENCE OR POSITIVE DIFFERENCE;.; BOTH N
EED ZERO AS THE HIGH BYTE..ZERO    LDY #
0.        RTS..; IF THERE IS NO MOUSE, R
ESET "LOWEST".; ("HIGHEST" WILL HAVE BEE
N RESET.; ALREADY) AND RETURN ZERO..RESE
TMM TAY; SET Y TO ZERO..        PLA; TID
Y STACK.        LDA #$FF; RESET "LOWEST"
.        STA POTMIN,X.        TYA; RETUR
N WITH A/Y = 0.        RTS...; --- INCLU
DE SPRITES..; BECAUSE THE C64 VERSION CO
PIES THE.; SPRITE DATA INTO THE TAPE BUF
FER ON.; INITIALISATION, THE DATA IS INC
LUDED.; RIGHT HERE..; IN THE C128 VERSIO
N, WE SKIP MEMORY.; UNTIL WE REACH $0E00
 - THIS IS WHERE.; THE SPRITES ARE STORE
D BY DEFAULT..;       !ALIGN $FFFF,$E00,
$0;C128 ONLY.SPRITES !BINARY "POINTERSPR
ITES",, 2.
C64 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL