KEYMAC.S
FILE INFORMATION
FILENAME(S): KEYMAC.S
FILE TYPE(S): PRG
FILE SIZE: 6K
FIRST SEEN: 2025-10-19 22:48:27
APPEARS ON: 3 disk(s)
FILE HASH
84cae588056e46ef7fa87bf78ebebccd5cf95e295c82e6ab451087b0339275ff
FOUND ON DISKS (3 DISKS)
| DISK TITLE | FILENAME | FILE TYPE | COLLECTION | TRACK | SECTOR | ACTIONS |
|---|---|---|---|---|---|---|
| SNAPSHOT64 | KEYMAC.S | PRG | Radd Maxx | 14 | 9 | DOWNLOAD FILE |
| MERLIN | KEYMAC.S | PRG | High Voltage Complete C64 Collection | 20 | 6 | DOWNLOAD FILE |
| MERLIN | KEYMAC.S | PRG | High Voltage Complete C64 Collection | 20 | 6 | DOWNLOAD FILE |
FILE CONTENT & ANALYSIS
00000000: 00 0A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |..**************| 00000010: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************| 00000020: 2A 2A 0D 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |**.*............| 00000030: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 00000040: A0 A0 2A 0D 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |..*.*...........| 00000050: 6B 65 79 6D 61 63 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |keymac..........| 00000060: A0 A0 A0 2A 0D 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |...*.*..........| 00000070: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 00000080: A0 A0 A0 A0 2A 0D 2A A0 65 58 41 4D 50 4C 45 53 |....*.*.eXAMPLES| 00000090: A0 4F 46 A0 55 53 45 53 A0 4F 46 A0 6D 65 72 6C |.OF.USES.OF.merl| 000000A0: 69 6E 27 53 A0 2A 0D 2A A0 41 44 44 2D 45 44 49 |in'S.*.*.ADD-EDI| 000000B0: 54 A0 4B 45 59 42 4F 41 52 44 A0 48 4F 4F 4B 53 |T.KEYBOARD.HOOKS| 000000C0: A0 41 54 A0 A0 A0 2A 0D 2A A0 24 37 65 2D 24 37 |.AT...*.*.$7e-$7| 000000D0: 66 2E A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |f...............| 000000E0: A0 A0 A0 A0 A0 A0 A0 2A 0D 2A A0 A0 A0 A0 A0 A0 |.......*.*......| 000000F0: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 00000100: A0 A0 A0 A0 A0 A0 A0 A0 2A 0D 2A A0 A0 A0 67 4C |........*.*...gL| 00000110: 45 4E A0 65 2E A0 62 52 45 44 4F 4E A0 A0 A0 32 |EN.e..bREDON...2| 00000120: 2F 32 30 2F 38 33 A0 A0 A0 2A 0D 2A 2D 2D 2D 2D |/20/83...*.*----| 00000130: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |----------------| 00000140: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2A 0D 2A A0 74 4F |----------*.*.tO| 00000150: A0 55 53 45 3A A0 72 75 6E A0 44 45 53 49 52 45 |.USE:.run.DESIRE| 00000160: 44 A0 50 52 4F 47 52 41 4D A0 A0 2A 0D 2A A0 46 |D.PROGRAM..*.*.F| 00000170: 52 4F 4D A0 65 78 65 63 A0 28 67 29 A0 54 48 45 |ROM.exec.(g).THE| 00000180: 4E A0 49 4E 56 4F 4B 45 A0 A0 A0 A0 2A 0D 2A A0 |N.INVOKE....*.*.| 00000190: 57 49 54 48 A0 75 73 65 72 A0 46 52 4F 4D A0 45 |WITH.user.FROM.E| 000001A0: 44 49 54 4F 52 2E A0 A0 A0 A0 A0 A0 A0 2A 0D 2A |DITOR........*.*| 000001B0: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************| 000001C0: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 0D |***************.| 000001D0: 0D 20 74 72 0D 20 65 78 70 20 6F 66 66 0D 0D 79 |. tr. exp off..y| 000001E0: 20 3D 20 31 0D 79 65 73 20 3D 20 31 0D 6E 20 3D | = 1.yes = 1.n =| 000001F0: 20 30 0D 6E 6F 20 3D 20 30 0D 73 61 76 6F 62 6A | 0.no = 0.savobj| 00000200: 20 6B 62 64 20 27 64 4F A0 59 4F 55 A0 57 41 4E | kbd 'dO.YOU.WAN| 00000210: 54 A0 4F 42 4A 45 43 54 A0 43 4F 44 45 A0 53 41 |T.OBJECT.CODE.SA| 00000220: 56 45 44 3F A0 28 59 2F 4E 29 27 0D 70 72 6F 67 |VED?.(Y/N)'.prog| 00000230: 6E 75 6D 20 6B 62 64 20 27 61 53 53 45 4D 42 4C |num kbd 'aSSEMBL| 00000240: 45 A0 57 48 49 43 48 A0 50 52 4F 47 52 41 4D 3F |E.WHICH.PROGRAM?| 00000250: A0 28 31 2D 33 29 27 0D 20 65 72 72 20 70 72 6F |.(1-3)'. err pro| 00000260: 67 6E 75 6D 2D 31 2F 33 0D 0D 69 6E 76 65 63 20 |gnum-1/3..invec | 00000270: 3D 20 24 37 65 20 3B 65 44 49 54 A0 4D 4F 44 45 |= $7e ;eDIT.MODE| 00000280: A0 4B 45 59 A0 49 4E 50 55 54 A0 56 45 43 54 4F |.KEY.INPUT.VECTO| 00000290: 52 0D 65 66 6C 67 20 3D 20 24 33 38 20 3B 6D 49 |R.eflg = $38 ;mI| 000002A0: 4E 55 53 A0 57 48 45 4E A0 49 4E A0 45 44 49 54 |NUS.WHEN.IN.EDIT| 000002B0: A0 4D 4F 44 45 0D 75 73 72 63 6D 64 20 3D 20 24 |.MODE.usrcmd = $| 000002C0: 33 32 65 20 3B 75 73 65 72 A0 56 45 43 54 4F 52 |32e ;user.VECTOR| 000002D0: 0D 73 74 72 69 6E 67 73 20 3D 20 24 38 36 30 20 |.strings = $860 | 000002E0: 3B 65 44 49 54 4F 52 A0 50 55 54 53 A0 53 54 52 |;eDITOR.PUTS.STR| 000002F0: 49 4E 47 A0 48 45 52 45 0D 67 65 74 69 6E 20 3D |ING.HERE.getin =| 00000300: 20 24 66 66 65 34 0D 0D 73 74 61 64 72 20 6D 61 | $ffe4..stadr ma| 00000310: 63 0D 20 6C 64 61 20 23 5D 31 0D 20 73 74 61 20 |c. lda #]1. sta | 00000320: 5D 32 0D 20 6C 64 61 20 23 3E 5D 31 0D 20 73 74 |]2. lda #>]1. st| 00000330: 61 20 5D 32 2B 31 0D 20 3C 3C 3C 0D 0D 2A 2A 2A |a ]2+1. <<<..***| 00000340: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************| 00000350: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 0D 2A 0D |*************.*.| 00000360: 2A A0 63 4F 4D 4D 4F 4E A0 43 4F 44 45 A0 54 4F |*.cOMMON.CODE.TO| 00000370: A0 41 4C 4C A0 50 41 52 54 53 3A 0D 0D 20 6F 72 |.ALL.PARTS:.. or| 00000380: 67 20 24 39 30 30 0D 0D 20 3E 3E 3E 20 73 74 61 |g $900.. >>> sta| 00000390: 64 72 2E 73 74 61 72 74 3B 75 73 72 63 6D 64 0D |dr.start;usrcmd.| 000003A0: 20 6C 64 79 20 23 24 34 30 30 2D 24 33 33 34 0D | ldy #$400-$334.| 000003B0: 6D 6F 76 65 20 6C 64 61 20 6E 6F 77 73 74 61 72 |move lda nowstar| 000003C0: 74 2D 31 2C 79 0D 20 73 74 61 20 73 74 61 72 74 |t-1,y. sta start| 000003D0: 2D 31 2C 79 0D 20 64 65 79 0D 20 62 6E 65 20 6D |-1,y. dey. bne m| 000003E0: 6F 76 65 0D 20 72 74 73 20 3B 65 4E 44 A0 4F 46 |ove. rts ;eND.OF| 000003F0: A0 43 4F 4D 4D 4F 4E A0 53 54 55 46 46 0D 0D 6E |.COMMON.STUFF..n| 00000400: 6F 77 73 74 61 72 74 20 6F 72 67 20 24 33 33 34 |owstart org $334| 00000410: 0D 0D 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |..**************| 00000420: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************| 00000430: 2A 2A 0D 2A 0D 2A A0 A0 A0 65 58 41 4D 50 4C 45 |**.*.*...eXAMPLE| 00000440: A0 31 A0 28 6B 45 59 42 4F 41 52 44 A0 4D 41 43 |.1.(kEYBOARD.MAC| 00000450: 52 4F 53 29 0D 2A 0D 2A A0 77 49 54 48 A0 22 5C |ROS).*.*.wITH."\| 00000460: 22 A0 4C 45 41 44 A0 49 4E 2C A0 50 52 49 4E 54 |".LEAD.IN,.PRINT| 00000470: 53 A0 41 A0 2A 0D 2A A0 46 4F 4C 4C 4F 57 45 44 |S.A.*.*.FOLLOWED| 00000480: A0 42 59 A0 33 31 A0 43 4F 50 49 45 53 A0 4F 46 |.BY.31.COPIES.OF| 00000490: A0 43 48 52 0D 2A A0 54 59 50 45 44 A0 41 46 54 |.CHR.*.TYPED.AFT| 000004A0: 45 52 A0 65 73 63 2E A0 A0 69 46 A0 54 48 49 53 |ER.esc...iF.THIS| 000004B0: A0 49 53 A0 41 0D 2A A0 53 50 41 43 45 A0 54 48 |.IS.A.*.SPACE.TH| 000004C0: 45 4E A0 41 4E 4F 54 48 45 52 A0 2A A0 49 53 A0 |EN.ANOTHER.*.IS.| 000004D0: 50 55 54 A0 41 54 0D 2A A0 54 48 45 A0 45 4E 44 |PUT.AT.*.THE.END| 000004E0: 2E A0 A0 74 48 45 A0 43 55 52 53 4F 52 A0 49 53 |...tHE.CURSOR.IS| 000004F0: A0 54 48 45 4E 0D 2A A0 50 4C 41 43 45 44 A0 4F |.THEN.*.PLACED.O| 00000500: 4E A0 54 48 45 A0 46 49 52 53 54 A0 43 48 41 52 |N.THE.FIRST.CHAR| 00000510: 41 43 54 45 52 2E 0D 2A 0D 2A 2A 2A 2A 2A 2A 2A |ACTER..*.*******| 00000520: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************| 00000530: 2A 2A 2A 2A 2A 2A 2A 2A 2A 0D 0D 20 64 6F 20 70 |*********.. do p| 00000540: 72 6F 67 6E 75 6D 2D 31 0D 20 65 6C 73 65 0D 0D |rognum-1. else..| 00000550: 73 74 61 72 74 20 3E 3E 3E 20 73 74 61 64 72 2E |start >>> stadr.| 00000560: 69 6E 70 75 74 3B 69 6E 76 65 63 0D 73 65 74 73 |input;invec.sets| 00000570: 74 74 20 73 65 63 0D 20 72 6F 72 20 73 74 61 74 |tt sec. ror stat| 00000580: 65 20 3B 69 4E 49 54 A0 73 74 61 74 65 0D 20 72 |e ;iNIT.state. r| 00000590: 74 73 0D 0D 69 6E 70 75 74 20 62 69 74 20 73 74 |ts..input bit st| 000005A0: 61 74 65 20 3B 6D 41 43 52 4F A0 49 4E A0 45 46 |ate ;mACRO.IN.EF| 000005B0: 46 45 43 54 3F 0D 20 62 70 6C 20 6E 78 73 74 61 |FECT?. bpl nxsta| 000005C0: 74 65 20 3B 62 52 41 4E 43 48 A0 49 46 A0 53 4F |te ;bRANCH.IF.SO| 000005D0: 0D 20 73 74 79 20 79 73 61 76 0D 66 72 73 74 6B |. sty ysav.frstk| 000005E0: 65 79 20 6A 73 72 20 67 65 74 69 6E 20 3B 6F 54 |ey jsr getin ;oT| 000005F0: 48 45 52 57 49 53 45 2C A0 47 45 54 A0 4B 45 59 |HERWISE,.GET.KEY| 00000600: 0D 20 74 61 79 0D 20 62 65 71 20 66 72 73 74 6B |. tay. beq frstk| 00000610: 65 79 0D 20 63 6D 70 20 23 27 5C 27 20 3B 6C 45 |ey. cmp #'\' ;lE| 00000620: 41 44 A0 49 4E 3F 0D 20 62 65 71 20 6E 78 6B 20 |AD.IN?. beq nxk | 00000630: 3B 62 52 41 4E 43 48 A0 49 46 A0 53 4F 0D 20 6C |;bRANCH.IF.SO. l| 00000640: 64 79 20 79 73 61 76 0D 72 65 74 20 72 74 73 20 |dy ysav.ret rts | 00000650: 20 3B 72 45 54 55 52 4E A0 57 49 54 48 A0 4B 45 | ;rETURN.WITH.KE| 00000660: 59 A0 49 46 A0 4E 4F 54 0D 0D 6E 78 6B 20 6A 73 |Y.IF.NOT..nxk js| 00000670: 72 20 67 65 74 69 6E 20 3B 67 45 54 A0 4B 45 59 |r getin ;gET.KEY| 00000680: A0 41 46 54 45 52 A0 4C 45 41 44 49 4E 0D 20 74 |.AFTER.LEADIN. t| 00000690: 61 79 0D 20 62 65 71 20 6E 78 6B 0D 20 6C 64 79 |ay. beq nxk. ldy| 000006A0: 20 79 73 61 76 0D 20 62 69 74 20 72 65 74 20 3B | ysav. bit ret ;| 000006B0: 63 4F 4E 54 52 4F 4C A0 43 48 52 3F 0D 20 62 65 |cONTROL.CHR?. be| 000006C0: 71 20 73 65 74 73 74 74 20 3B 61 42 4F 52 54 A0 |q setstt ;aBORT.| 000006D0: 49 46 A0 53 4F 0D 20 73 74 61 20 63 68 61 72 61 |IF.SO. sta chara| 000006E0: 63 20 3B 73 41 56 45 A0 4E 45 58 54 A0 43 48 52 |c ;sAVE.NEXT.CHR| 000006F0: 0D 20 6C 64 61 20 23 33 31 20 3B 69 4E 49 54 A0 |. lda #31 ;iNIT.| 00000700: 43 4F 55 4E 54 0D 20 73 74 61 20 73 74 61 74 65 |COUNT. sta state| 00000710: 0D 61 73 74 20 6C 64 61 20 23 27 2A 27 20 3B 73 |.ast lda #'*' ;s| 00000720: 45 4E 44 A0 49 4E 49 54 49 41 4C A0 2A 0D 20 72 |END.INITIAL.*. r| 00000730: 74 73 0D 6E 78 73 74 61 74 65 20 6C 64 61 20 63 |ts.nxstate lda c| 00000740: 68 61 72 61 63 20 3B 67 45 54 A0 43 48 52 0D 20 |harac ;gET.CHR. | 00000750: 64 65 63 20 73 74 61 74 65 20 3B 63 4F 55 4E 54 |dec state ;cOUNT| 00000760: 44 4F 57 4E 0D 20 62 6E 65 20 70 6C 75 73 3F 20 |DOWN. bne plus? | 00000770: 3B 6C 41 53 54 A0 43 4F 55 4E 54 A0 49 46 A0 45 |;lAST.COUNT.IF.E| 00000780: 51 55 41 4C 0D 20 63 6D 70 20 23 27 A0 27 20 3B |QUAL. cmp #'.' ;| 00000790: 77 41 53 A0 43 48 52 A0 41 A0 53 50 41 43 45 3F |wAS.CHR.A.SPACE?| 000007A0: 0D 20 62 65 71 20 61 73 74 20 3B 73 55 42 53 54 |. beq ast ;sUBST| 000007B0: 49 54 55 45 A0 2A A0 46 4F 52 A0 4C 41 53 54 A0 |ITUE.*.FOR.LAST.| 000007C0: 49 46 A0 53 4F 0D 20 72 74 73 0D 70 6C 75 73 3F |IF.SO. rts.plus?| 000007D0: 20 62 70 6C 20 62 61 63 6B 20 3B 62 52 41 4E 43 | bpl back ;bRANC| 000007E0: 48 A0 49 46 A0 4E 4F 54 A0 44 4F 4E 45 0D 20 6C |H.IF.NOT.DONE. l| 000007F0: 64 61 20 23 24 39 66 26 27 62 27 20 3B 70 55 54 |da #$9f&'b' ;pUT| 00000800: A0 43 55 52 53 4F 52 A0 4F 4E A0 31 53 54 A0 43 |.CURSOR.ON.1ST.C| 00000810: 48 52 0D 62 61 63 6B 20 72 74 73 0D 0D 79 73 61 |HR.back rts..ysa| 00000820: 76 20 62 72 6B 0D 73 74 61 74 65 20 62 72 6B 0D |v brk.state brk.| 00000830: 63 68 61 72 61 63 20 62 72 6B 0D 20 64 6F 20 73 |charac brk. do s| 00000840: 61 76 6F 62 6A 0D 20 73 61 76 65 20 22 72 65 70 |avobj. save "rep| 00000850: 65 61 74 22 0D 20 66 69 6E 0D 20 66 69 6E 0D 0D |eat". fin. fin..| 00000860: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************| 00000870: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************| 00000880: 2A 2A 2A 0D 2A 0D 2A A0 A0 A0 65 58 41 4D 50 4C |***.*.*...eXAMPL| 00000890: 45 A0 32 A0 28 6B 45 59 42 4F 41 52 44 A0 4D 41 |E.2.(kEYBOARD.MA| 000008A0: 43 52 4F 53 29 0D 2A 0D 2A A0 6B 45 59 42 4F 41 |CROS).*.*.kEYBOA| 000008B0: 52 44 A0 4D 41 43 52 4F 53 A0 44 45 46 49 4E 45 |RD.MACROS.DEFINE| 000008C0: 44 A0 46 4F 52 A0 4B 45 59 53 0D 2A A0 A0 A0 2A |D.FOR.KEYS.*...*| 000008D0: A0 3E A0 22 A0 27 A0 23 A0 2B A0 78 A0 79 A0 6C |.>.".'.#.+.x.y.l| 000008E0: A0 73 A0 2D A0 6F A0 63 A0 61 A0 65 0D 2A A0 57 |.s.-.o.c.a.e.*.W| 000008F0: 49 54 48 A0 54 48 45 A0 53 48 49 46 54 45 44 A0 |ITH.THE.SHIFTED.| 00000900: 4F 4E 45 53 A0 45 51 55 49 56 41 4C 45 4E 54 0D |ONES.EQUIVALENT.| 00000910: 2A A0 54 4F A0 54 48 45 49 52 A0 55 4E 53 48 49 |*.TO.THEIR.UNSHI| 00000920: 46 54 45 44 A0 43 4F 55 4E 54 45 52 50 41 52 54 |FTED.COUNTERPART| 00000930: 53 2E 0D 2A 0D 2A A0 6D 4F 53 54 A0 4F 46 A0 54 |S..*.*.mOST.OF.T| 00000940: 48 45 53 45 A0 41 52 45 A0 56 41 52 49 41 4E 54 |HESE.ARE.VARIANT| 00000950: 53 A0 4F 46 0D 2A A0 54 48 45 A0 49 4E 44 49 52 |S.OF.*.THE.INDIR| 00000960: 45 43 54 2C A0 49 4E 44 45 58 45 44 A0 42 59 A0 |ECT,.INDEXED.BY.| 00000970: 79 0D 2A A0 4F 50 43 4F 44 45 53 2C A0 45 58 49 |y.*.OPCODES,.EXI| 00000980: 54 49 4E 47 A0 49 4E A0 49 4E 53 45 52 54 A0 4D |TING.IN.INSERT.M| 00000990: 4F 44 45 0D 2A A0 42 45 54 57 45 45 4E A0 54 48 |ODE.*.BETWEEN.TH| 000009A0: 45 A0 50 41 52 45 4E 54 48 45 53 45 53 2E 0D 2A |E.PARENTHESES..*| 000009B0: 0D 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |.***************| 000009C0: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************| 000009D0: 2A 2A 2A 2A 0D 0D 20 64 6F 20 70 72 6F 67 6E 75 |****.. do prognu| 000009E0: 6D 2D 32 0D 20 65 6C 73 65 0D 0D 73 74 61 74 65 |m-2. else..state| 000009F0: 20 3D 20 24 34 61 20 3B 7A 45 52 4F A0 50 41 47 | = $4a ;zERO.PAG| 00000A00: 45 A0 55 53 45 44 A0 54 4F 0D 78 73 61 76 20 3D |E.USED.TO.xsav =| 00000A10: 20 24 34 62 20 3B A0 4D 41 4B 45 A0 50 52 4F 47 | $4b ;.MAKE.PROG| 00000A20: 52 41 4D A0 46 49 54 0D 79 73 61 76 20 3D 20 24 |RAM.FIT.ysav = $| 00000A30: 34 63 20 3B A0 49 4E A0 24 33 34 34 A0 53 50 41 |4c ;.IN.$344.SPA| 00000A40: 43 45 0D 69 6E 64 65 78 20 3D 20 24 34 64 20 3B |CE.index = $4d ;| 00000A50: 74 48 45 53 45 A0 41 52 45 A0 4E 4F 54 A0 55 53 |tHESE.ARE.NOT.US| 00000A60: 45 44 A0 42 59 A0 65 44 49 54 4F 52 0D 0D 73 74 |ED.BY.eDITOR..st| 00000A70: 61 72 74 20 3E 3E 3E 20 73 74 61 64 72 2E 69 6E |art >>> stadr.in| 00000A80: 70 75 74 3B 69 6E 76 65 63 0D 20 73 65 63 0D 20 |put;invec. sec. | 00000A90: 72 6F 72 20 73 74 61 74 65 20 3B 69 4E 49 54 A0 |ror state ;iNIT.| 00000AA0: 73 74 61 74 65 0D 20 72 74 73 0D 0D 69 6E 70 75 |state. rts..inpu| 00000AB0: 74 20 73 74 78 20 78 73 61 76 20 3B 6D 55 53 54 |t stx xsav ;mUST| 00000AC0: A0 50 52 45 53 45 52 56 45 A0 78 A0 28 26 A0 79 |.PRESERVE.x.(&.y| 00000AD0: 29 0D 20 62 69 74 20 73 74 61 74 65 20 3B A0 49 |). bit state ;.I| 00000AE0: 46 A0 55 53 45 44 2E 0D 20 62 70 6C 20 67 65 74 |F.USED.. bpl get| 00000AF0: 69 6E 64 65 78 20 3B 62 52 41 4E 43 48 A0 49 46 |index ;bRANCH.IF| 00000B00: A0 44 4F 49 4E 47 A0 4D 41 43 52 4F 0D 66 72 73 |.DOING.MACRO.frs| 00000B10: 74 6B 65 79 20 6A 73 72 20 67 65 74 6B 65 79 20 |tkey jsr getkey | 00000B20: 3B 6F 54 48 45 52 57 49 53 45 2C A0 47 45 54 A0 |;oTHERWISE,.GET.| 00000B30: 4B 45 59 0D 20 63 6D 70 20 23 27 5C 27 20 3B 22 |KEY. cmp #'\' ;"| 00000B40: 5C 22 A0 4C 45 41 44 A0 49 4E 3F 0D 20 62 6E 65 |\".LEAD.IN?. bne| 00000B50: 20 65 78 69 74 20 3B 65 58 49 54 A0 49 46 A0 4E | exit ;eXIT.IF.N| 00000B60: 4F 54 0D 6E 78 6B 20 6A 73 72 20 67 65 74 6B 65 |OT.nxk jsr getke| 00000B70: 79 20 3B 67 45 54 A0 4B 45 59 A0 41 46 54 45 52 |y ;gET.KEY.AFTER| 00000B80: A0 4C 45 41 44 A0 49 4E 0D 20 63 6D 70 20 23 27 |.LEAD.IN. cmp #'| 00000B90: 30 27 20 3B 73 48 49 46 54 A0 43 48 52 3F 0D 20 |0' ;sHIFT.CHR?. | 00000BA0: 62 67 65 20 6E 6F 6F 72 0D 20 6F 72 61 20 23 25 |bge noor. ora #%| 00000BB0: 30 30 30 31 30 30 30 30 20 3B 73 48 49 46 54 A0 |00010000 ;sHIFT.| 00000BC0: 44 4F 57 4E 0D 6E 6F 6F 72 20 73 74 61 20 65 6E |DOWN.noor sta en| 00000BD0: 64 74 62 6C 20 3B 73 41 56 45 A0 43 55 52 52 45 |dtbl ;sAVE.CURRE| 00000BE0: 4E 54 A0 49 4E 50 55 54 0D 20 6F 72 61 20 23 24 |NT.INPUT. ora #$| 00000BF0: 38 30 0D 20 73 74 61 20 65 6E 64 74 62 6C 2B 31 |80. sta endtbl+1| 00000C00: 20 3B A0 49 4E A0 43 41 53 45 A0 43 4D 44 A0 4E | ;.IN.CASE.CMD.N| 00000C10: 4F 54 A0 46 4F 55 4E 44 0D 20 6C 64 78 20 23 30 |OT.FOUND. ldx #0| 00000C20: 20 3B A0 54 4F A0 55 53 45 A0 46 4F 52 A0 49 54 | ;.TO.USE.FOR.IT| 00000C30: 0D 63 6D 64 3F 20 6C 64 61 20 6D 61 63 74 62 6C |.cmd? lda mactbl| 00000C40: 2C 78 20 3B 6C 4F 4F 4B A0 46 4F 52 A0 43 4F 4D |,x ;lOOK.FOR.COM| 00000C50: 4D 41 4E 44 0D 20 63 6D 70 20 65 6E 64 74 62 6C |MAND. cmp endtbl| 00000C60: 20 3B 6D 41 54 43 48 A0 49 4E 50 55 54 3F 0D 20 | ;mATCH.INPUT?. | 00000C70: 62 65 71 20 67 6F 74 6D 61 63 20 3B 62 52 41 4E |beq gotmac ;bRAN| 00000C80: 43 48 A0 49 46 A0 53 4F 0D 67 65 74 63 68 72 20 |CH.IF.SO.getchr | 00000C90: 69 6E 78 20 20 3B 6D 4F 56 45 A0 54 4F A0 4E 45 |inx ;mOVE.TO.NE| 00000CA0: 58 54 A0 4D 41 43 0D 20 6C 64 61 20 6D 61 63 74 |XT.MAC. lda mact| 00000CB0: 62 6C 2C 78 0D 20 62 70 6C 20 67 65 74 63 68 72 |bl,x. bpl getchr| 00000CC0: 20 3B 6C 4F 4F 50 A0 54 49 4C 4C A0 4D 49 4E 55 | ;lOOP.TILL.MINU| 00000CD0: 53 0D 20 69 6E 78 20 20 3B 70 4F 49 4E 54 A0 54 |S. inx ;pOINT.T| 00000CE0: 4F A0 43 4D 44 A0 42 59 54 45 0D 20 62 6E 65 20 |O.CMD.BYTE. bne | 00000CF0: 63 6D 64 3F 20 3B 61 4C 57 41 59 53 A0 54 41 4B |cmd? ;aLWAYS.TAK| 00000D00: 45 4E 0D 67 6F 74 6D 61 63 20 69 6E 78 20 20 3B |EN.gotmac inx ;| 00000D10: 70 4F 49 4E 54 A0 54 4F A0 4D 41 43 52 4F A0 53 |pOINT.TO.MACRO.S| 00000D20: 45 4C 45 43 54 45 44 0D 73 78 69 20 73 74 78 20 |ELECTED.sxi stx | 00000D30: 69 6E 64 65 78 0D 67 65 74 69 6E 64 65 78 20 6C |index.getindex l| 00000D40: 64 78 20 69 6E 64 65 78 20 3B 67 45 54 A0 49 4E |dx index ;gET.IN| 00000D50: 44 45 58 A0 54 4F A0 43 55 52 52 45 4E 54 A0 43 |DEX.TO.CURRENT.C| 00000D60: 48 52 0D 20 69 6E 63 20 69 6E 64 65 78 20 3B 70 |HR. inc index ;p| 00000D70: 4F 49 4E 54 A0 54 4F A0 4E 45 58 54 A0 43 48 52 |OINT.TO.NEXT.CHR| 00000D80: 0D 20 6C 64 61 20 6D 61 63 74 62 6C 2C 78 20 3B |. lda mactbl,x ;| 00000D90: 67 45 54 A0 43 55 52 52 45 4E 54 A0 43 48 52 A0 |gET.CURRENT.CHR.| 00000DA0: 4F 46 A0 4D 41 43 52 4F 2E 0D 20 73 74 61 20 73 |OF.MACRO.. sta s| 00000DB0: 74 61 74 65 20 3B 63 4C 45 41 52 A0 46 4C 41 47 |tate ;cLEAR.FLAG| 00000DC0: A0 4F 4E A0 4C 41 53 54 A0 43 48 52 0D 20 61 6E |.ON.LAST.CHR. an| 00000DD0: 64 20 23 24 37 66 20 3B 6D 55 53 54 A0 41 4C 57 |d #$7f ;mUST.ALW| 00000DE0: 41 59 53 A0 43 4C 52 A0 48 49 47 48 A0 42 49 54 |AYS.CLR.HIGH.BIT| 00000DF0: 0D 20 74 61 78 20 20 3B 69 4E A0 43 41 53 45 A0 |. tax ;iN.CASE.| 00000E00: 49 54 A0 49 53 A0 77 6E 64 75 70 2D 6D 61 63 74 |IT.IS.wndup-mact| 00000E10: 62 6C 0D 20 63 6D 70 20 23 77 6E 64 75 70 2D 6D |bl. cmp #wndup-m| 00000E20: 61 63 74 62 6C 20 3B 69 53 A0 49 54 A0 57 49 4E |actbl ;iS.IT.WIN| 00000E30: 44 55 50 A0 4D 41 43 3F 0D 20 62 65 71 20 73 78 |DUP.MAC?. beq sx| 00000E40: 69 20 3B 62 52 41 4E 43 48 A0 49 46 A0 53 4F 0D |i ;bRANCH.IF.SO.| 00000E50: 65 78 69 74 20 6C 64 78 20 78 73 61 76 0D 20 72 |exit ldx xsav. r| 00000E60: 74 73 0D 0D 67 65 74 6B 65 79 20 73 74 79 20 79 |ts..getkey sty y| 00000E70: 73 61 76 0D 67 6B 20 6A 73 72 20 67 65 74 69 6E |sav.gk jsr getin| 00000E80: 0D 20 74 61 79 0D 20 62 65 71 20 67 6B 0D 20 6C |. tay. beq gk. l| 00000E90: 64 79 20 79 73 61 76 0D 20 72 74 73 0D 0D 6D 61 |dy ysav. rts..ma| 00000EA0: 63 74 62 6C 0D 20 64 63 69 20 27 3E A0 3E 3E 3E |ctbl. dci '>.>>>| 00000EB0: A0 27 0D 20 74 78 74 20 27 32 A0 74 78 74 A0 22 |.'. txt '2.txt."| 00000EC0: 22 27 0D 20 64 66 62 20 24 31 31 2C 24 39 66 26 |"'. dfb $11,$9f&| 00000ED0: 22 69 22 20 3B 62 41 43 4B 53 50 41 43 45 A0 26 |"i" ;bACKSPACE.&| 00000EE0: A0 49 4E 53 45 52 54 0D 20 74 78 74 20 3A 37 A0 |.INSERT. txt :7.| 00000EF0: 74 78 74 A0 27 27 3A 0D 20 64 66 62 20 24 31 31 |txt.'':. dfb $11| 00000F00: 2C 24 39 66 26 22 69 22 0D 20 64 63 69 20 27 33 |,$9f&"i". dci '3| 00000F10: A0 6C 64 61 A0 23 27 0D 20 64 63 69 20 27 58 A0 |.lda.#'. dci 'X.| 00000F20: 6C 64 78 A0 23 27 0D 20 64 63 69 20 27 59 A0 6C |ldx.#'. dci 'Y.l| 00000F30: 64 79 A0 23 27 0D 20 74 78 74 20 27 3B A0 61 64 |dy.#'. txt ';.ad| 00000F40: 63 27 0D 20 64 66 62 20 77 6E 64 75 70 2D 6D 61 |c'. dfb wndup-ma| 00000F50: 63 74 62 6C 2E 24 38 30 0D 20 74 78 74 20 27 3D |ctbl.$80. txt '=| 00000F60: A0 73 62 63 27 0D 20 64 66 62 20 77 6E 64 75 70 |.sbc'. dfb wndup| 00000F70: 2D 6D 61 63 74 62 6C 2E 24 38 30 0D 20 74 78 74 |-mactbl.$80. txt| 00000F80: 20 27 4C A0 6C 64 61 27 0D 20 64 66 62 20 77 6E | 'L.lda'. dfb wn| 00000F90: 64 75 70 2D 6D 61 63 74 62 6C 2E 24 38 30 0D 20 |dup-mactbl.$80. | 00000FA0: 74 78 74 20 27 53 A0 73 74 61 27 0D 20 64 66 62 |txt 'S.sta'. dfb| 00000FB0: 20 77 6E 64 75 70 2D 6D 61 63 74 62 6C 2E 24 38 | wndup-mactbl.$8| 00000FC0: 30 0D 20 74 78 74 20 27 4F A0 6F 72 61 27 0D 20 |0. txt 'O.ora'. | 00000FD0: 64 66 62 20 77 6E 64 75 70 2D 6D 61 63 74 62 6C |dfb wndup-mactbl| 00000FE0: 2E 24 38 30 0D 20 74 78 74 20 27 43 A0 63 6D 70 |.$80. txt 'C.cmp| 00000FF0: 27 0D 20 64 66 62 20 77 6E 64 75 70 2D 6D 61 63 |'. dfb wndup-mac| 00001000: 74 62 6C 2E 24 38 30 0D 20 74 78 74 20 27 41 A0 |tbl.$80. txt 'A.| 00001010: 61 6E 64 27 0D 20 64 66 62 20 77 6E 64 75 70 2D |and'. dfb wndup-| 00001020: 6D 61 63 74 62 6C 2E 24 38 30 0D 20 74 78 74 20 |mactbl.$80. txt | 00001030: 27 45 A0 65 6F 72 27 0D 77 6E 64 75 70 20 74 78 |'E.eor'.wndup tx| 00001040: 74 20 27 A0 28 29 2C 79 27 0D 20 68 65 78 20 31 |t '.(),y'. hex 1| 00001050: 31 31 31 31 31 20 3B 62 41 43 4B 53 50 41 43 45 |11111 ;bACKSPACE| 00001060: A0 54 4F A0 42 45 54 57 45 45 4E A0 28 29 0D 20 |.TO.BETWEEN.(). | 00001070: 64 66 62 20 24 39 66 26 22 69 22 20 3B 65 58 49 |dfb $9f&"i" ;eXI| 00001080: 54 A0 49 4E A0 49 4E 53 45 52 54 A0 4D 4F 44 45 |T.IN.INSERT.MODE| 00001090: 0D 0D 65 6E 64 74 62 6C 20 64 61 20 30 20 3B 63 |..endtbl da 0 ;c| 000010A0: 4F 4D 4D 41 4E 44 A0 43 48 52 A0 50 55 54 A0 48 |OMMAND.CHR.PUT.H| 000010B0: 45 52 45 0D 0D 20 65 72 72 20 2A 2D 31 2F 24 34 |ERE.. err *-1/$4| 000010C0: 30 30 0D 20 64 6F 20 73 61 76 6F 62 6A 0D 20 73 |00. do savobj. s| 000010D0: 61 76 65 20 22 6B 65 79 6D 61 63 22 0D 20 66 69 |ave "keymac". fi| 000010E0: 6E 0D 20 66 69 6E 0D 0D 2A 2A 2A 2A 2A 2A 2A 2A |n. fin..********| 000010F0: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************| 00001100: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************| 00001110: 2A 0D 2A 0D 2A A0 A0 A0 65 58 41 4D 50 4C 45 A0 |*.*.*...eXAMPLE.| 00001120: 33 A0 28 61 55 54 4F 2D 45 44 49 54 29 0D 2A 0D |3.(aUTO-EDIT).*.| 00001130: 2A A0 75 73 65 72 22 53 54 52 49 4E 47 22 A0 45 |*.user"STRING".E| 00001140: 53 54 41 42 4C 49 53 48 45 53 A0 41 4E A0 41 55 |STABLISHES.AN.AU| 00001150: 54 4F 2D 45 44 49 54 0D 2A A0 53 54 52 49 4E 47 |TO-EDIT.*.STRING| 00001160: A0 57 48 49 43 48 A0 57 49 4C 4C A0 42 45 A0 45 |.WHICH.WILL.BE.E| 00001170: 58 45 43 55 54 45 44 A0 4F 4E A0 45 41 43 48 0D |XECUTED.ON.EACH.| 00001180: 2A A0 4C 49 4E 45 A0 4F 46 A0 41 A0 53 55 42 53 |*.LINE.OF.A.SUBS| 00001190: 45 51 55 45 4E 54 A0 65 44 49 54 2E A0 A0 61 4E |EQUENT.eDIT...aN| 000011A0: A0 61 44 44 2F 69 4E 53 45 52 54 0D 2A A0 57 49 |.aDD/iNSERT.*.WI| 000011B0: 4C 4C A0 44 49 53 43 4F 4E 4E 45 43 54 A0 54 48 |LL.DISCONNECT.TH| 000011C0: 45 A0 52 4F 55 54 49 4E 45 2E 0D 2A 0D 2A A0 65 |E.ROUTINE..*.*.e| 000011D0: 2E 47 2E 2C A0 49 46 A0 22 53 54 52 49 4E 47 22 |.G.,.IF."STRING"| 000011E0: A0 49 53 A0 54 48 45 A0 53 45 51 55 45 4E 43 45 |.IS.THE.SEQUENCE| 000011F0: 0D 2A A0 43 4F 4E 54 52 4F 4C A0 6F 2C A0 43 4F |.*.CONTROL.o,.CO| 00001200: 4E 54 52 4F 4C A0 6A A0 A0 54 48 45 4E 0D 2A A0 |NTROL.j..THEN.*.| 00001210: 43 4F 4E 54 52 4F 4C A0 6A A0 57 49 4C 4C A0 42 |CONTROL.j.WILL.B| 00001220: 45 A0 49 4E 53 45 52 54 45 44 A0 41 54 A0 54 48 |E.INSERTED.AT.TH| 00001230: 45 0D 2A A0 53 54 41 52 54 A0 4F 46 A0 45 41 43 |E.*.START.OF.EAC| 00001240: 48 A0 4C 49 4E 45 A0 4F 46 A0 54 48 45 A0 45 44 |H.LINE.OF.THE.ED| 00001250: 49 54 A0 52 41 4E 47 45 2E 0D 2A 0D 2A A0 63 4F |IT.RANGE..*.*.cO| 00001260: 4E 54 52 4F 4C A0 72 A0 46 4F 4C 4C 4F 57 45 44 |NTROL.r.FOLLOWED| 00001270: A0 42 59 A0 3E A0 4F 52 A0 3C A0 47 49 56 45 A0 |.BY.>.OR.<.GIVE.| 00001280: 54 48 45 0D 2A A0 45 46 46 45 43 54 A0 44 55 52 |THE.*.EFFECT.DUR| 00001290: 49 4E 47 A0 54 48 45 A0 41 55 54 4F A0 45 44 49 |ING.THE.AUTO.EDI| 000012A0: 54 A0 4F 46 A0 54 48 45 0D 2A A0 43 55 52 53 4F |T.OF.THE.*.CURSO| 000012B0: 52 A0 4B 45 59 53 A0 2D 3E A0 41 4E 44 A0 3C 2D |R.KEYS.->.AND.<-| 000012C0: 2E 0D 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |..**************| 000012D0: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************| 000012E0: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 0D 0D 20 64 6F |***********.. do| 000012F0: 20 70 72 6F 67 6E 75 6D 2D 33 0D 20 65 6C 73 65 | prognum-3. else| 00001300: 0D 0D 73 74 61 72 74 20 6C 64 79 20 23 2D 31 20 |..start ldy #-1 | 00001310: 3B 6D 4F 56 45 A0 53 54 52 49 4E 47 A0 53 50 45 |;mOVE.STRING.SPE| 00001320: 43 49 46 49 45 44 0D 6E 78 62 20 69 6E 79 20 3B |CIFIED.nxb iny ;| 00001330: A0 49 4E A0 75 73 65 72 A0 43 4F 4D 4D 41 4E 44 |.IN.user.COMMAND| 00001340: 0D 20 6C 64 61 20 73 74 72 69 6E 67 73 2C 79 0D |. lda strings,y.| 00001350: 20 73 74 61 20 61 75 74 6F 63 6D 64 2C 79 20 3B | sta autocmd,y ;| 00001360: 28 6D 41 58 A0 4C 45 4E 47 54 48 A0 3D A0 24 32 |(mAX.LENGTH.=.$2| 00001370: 30 29 0D 20 62 6E 65 20 6E 78 62 0D 20 73 74 61 |0). bne nxb. sta| 00001380: 20 69 6E 64 65 78 20 3B 69 4E 49 54 A0 49 4E 44 | index ;iNIT.IND| 00001390: 45 58 A0 54 4F A0 43 4D 44 0D 20 6C 64 61 20 69 |EX.TO.CMD. lda i| 000013A0: 6E 76 65 63 2B 31 20 3B 69 53 A0 49 54 A0 43 4F |nvec+1 ;iS.IT.CO| 000013B0: 4E 4E 45 43 54 45 44 A0 4E 4F 57 3F 0D 20 63 6D |NNECTED.NOW?. cm| 000013C0: 70 20 23 3E 61 75 74 6F 65 64 69 74 0D 20 62 65 |p #>autoedit. be| 000013D0: 71 20 73 65 74 76 65 63 20 3B 73 4B 49 50 A0 49 |q setvec ;sKIP.I| 000013E0: 46 A0 53 4F 0D 20 73 74 61 20 67 65 74 6B 65 79 |F.SO. sta getkey| 000013F0: 2B 32 20 3B 73 41 56 45 A0 4F 4C 44 A0 49 4E 56 |+2 ;sAVE.OLD.INV| 00001400: 45 43 54 4F 52 0D 20 6C 64 61 20 69 6E 76 65 63 |ECTOR. lda invec| 00001410: 0D 20 73 74 61 20 67 65 74 6B 65 79 2B 31 0D 73 |. sta getkey+1.s| 00001420: 65 74 76 65 63 20 3E 3E 3E 20 73 74 61 64 72 2E |etvec >>> stadr.| 00001430: 61 75 74 6F 65 64 69 74 3B 69 6E 76 65 63 0D 20 |autoedit;invec. | 00001440: 72 74 73 0D 0D 61 75 74 6F 65 64 69 74 20 62 69 |rts..autoedit bi| 00001450: 74 20 65 66 6C 67 20 3B 66 52 4F 4D A0 61 44 44 |t eflg ;fROM.aDD| 00001460: 2F 69 4E 53 45 52 54 A0 4F 52 A0 45 44 49 54 3F |/iNSERT.OR.EDIT?| 00001470: 0D 20 62 6D 69 20 73 61 76 79 20 3B 62 52 41 4E |. bmi savy ;bRAN| 00001480: 43 48 A0 49 46 A0 46 52 4F 4D A0 45 44 49 54 0D |CH.IF.FROM.EDIT.| 00001490: 20 6C 64 61 20 67 65 74 6B 65 79 2B 31 20 3B 64 | lda getkey+1 ;d| 000014A0: 49 53 43 4F 4E 4E 45 43 54 A0 4F 55 52 53 45 4C |ISCONNECT.OURSEL| 000014B0: 56 45 53 A0 49 46 0D 20 73 74 61 20 69 6E 76 65 |VES.IF. sta inve| 000014C0: 63 20 3B A0 46 52 4F 4D A0 41 4E A0 61 44 44 A0 |c ;.FROM.AN.aDD.| 000014D0: 4F 52 A0 69 4E 53 45 52 54 0D 20 6C 64 61 20 67 |OR.iNSERT. lda g| 000014E0: 65 74 6B 65 79 2B 32 0D 20 73 74 61 20 69 6E 76 |etkey+2. sta inv| 000014F0: 65 63 2B 31 0D 67 65 74 6B 65 79 20 6A 6D 70 20 |ec+1.getkey jmp | 00001500: 24 66 66 63 66 20 3B 61 44 44 52 45 53 53 A0 43 |$ffcf ;aDDRESS.C| 00001510: 48 41 4E 47 45 44 0D 0D 73 61 76 79 20 73 74 79 |HANGED..savy sty| 00001520: 20 79 73 61 76 20 3B 72 45 4D 45 4D 42 45 52 A0 | ysav ;rEMEMBER.| 00001530: 79 0D 20 6C 64 79 20 69 6E 64 65 78 20 3B 67 45 |y. ldy index ;gE| 00001540: 54 A0 49 4E 44 45 58 A0 54 4F A0 4E 45 58 54 A0 |T.INDEX.TO.NEXT.| 00001550: 43 4D 44 A0 43 48 52 0D 20 69 6E 63 20 69 6E 64 |CMD.CHR. inc ind| 00001560: 65 78 20 3B 70 4F 49 4E 54 A0 54 4F A0 4E 45 58 |ex ;pOINT.TO.NEX| 00001570: 54 A0 4F 4E 45 0D 20 6C 64 61 20 61 75 74 6F 63 |T.ONE. lda autoc| 00001580: 6D 64 2C 79 20 3B 67 45 54 A0 4E 45 58 54 A0 43 |md,y ;gET.NEXT.C| 00001590: 4D 44 A0 43 48 52 0D 20 62 6E 65 20 69 73 71 20 |MD.CHR. bne isq | 000015A0: 3B 62 52 41 4E 43 48 A0 49 46 A0 4E 4F 54 A0 4C |;bRANCH.IF.NOT.L| 000015B0: 41 53 54 A0 4F 4E 45 0D 20 73 74 61 20 69 6E 64 |AST.ONE. sta ind| 000015C0: 65 78 20 3B 69 4E 49 54 A0 49 4E 44 45 58 A0 46 |ex ;iNIT.INDEX.F| 000015D0: 4F 52 A0 4E 45 58 54 A0 4C 49 4E 45 0D 20 6C 64 |OR.NEXT.LINE. ld| 000015E0: 61 20 23 24 64 20 3B 65 58 49 54 A0 57 49 54 48 |a #$d ;eXIT.WITH| 000015F0: A0 63 72 0D 69 73 71 20 63 6D 70 20 23 27 61 27 |.cr.isq cmp #'a'| 00001600: 26 24 39 66 20 3B 63 4F 4E 54 52 4F 4C A0 61 3F |&$9f ;cONTROL.a?| 00001610: 0D 20 62 6E 65 20 6C 65 61 64 69 6E 0D 20 6C 64 |. bne leadin. ld| 00001620: 79 20 23 30 0D 20 73 74 79 20 69 6E 64 65 78 0D |y #0. sty index.| 00001630: 6C 65 61 64 69 6E 20 63 6D 70 20 23 27 72 27 26 |leadin cmp #'r'&| 00001640: 24 39 66 20 3B 63 4F 4E 54 52 4F 4C A0 72 A0 4C |$9f ;cONTROL.r.L| 00001650: 45 41 44 A0 49 4E 3F 0D 20 62 6E 65 20 64 6F 63 |EAD.IN?. bne doc| 00001660: 6D 64 20 3B 62 52 41 4E 43 48 A0 49 46 A0 4E 4F |md ;bRANCH.IF.NO| 00001670: 54 0D 20 69 6E 63 20 69 6E 64 65 78 20 3B 62 55 |T. inc index ;bU| 00001680: 4D 50 A0 49 4E 44 45 58 0D 20 6C 64 61 20 61 75 |MP.INDEX. lda au| 00001690: 74 6F 63 6D 64 2B 31 2C 79 0D 20 63 6D 70 20 23 |tocmd+1,y. cmp #| 000016A0: 27 3C 27 20 3B 6E 45 58 54 A0 43 48 52 A0 41 A0 |'<' ;nEXT.CHR.A.| 000016B0: 3C 0D 20 62 6E 65 20 72 61 72 0D 20 6C 64 61 20 |<. bne rar. lda | 000016C0: 23 24 31 31 20 3B 74 52 41 4E 53 4C 41 54 45 A0 |#$11 ;tRANSLATE.| 000016D0: 54 4F A0 3C 2D 0D 72 61 72 20 63 6D 70 20 23 27 |TO.<-.rar cmp #'| 000016E0: 3E 27 20 3B 4F 52 A0 3E 0D 20 62 6E 65 20 64 6F |>' ;OR.>. bne do| 000016F0: 63 6D 64 20 3B 6A 55 53 54 A0 49 47 4E 4F 52 45 |cmd ;jUST.IGNORE| 00001700: A0 43 4E 54 52 A0 72 A0 49 46 A0 4E 4F 54 0D 20 |.CNTR.r.IF.NOT. | 00001710: 6C 64 61 20 23 24 31 64 20 3B 74 52 41 4E 53 4C |lda #$1d ;tRANSL| 00001720: 41 54 45 A0 54 4F A0 2D 3E 0D 64 6F 63 6D 64 20 |ATE.TO.->.docmd | 00001730: 6C 64 79 20 79 73 61 76 20 3B 72 45 54 52 49 45 |ldy ysav ;rETRIE| 00001740: 56 45 A0 79 A0 52 45 47 0D 20 72 74 73 20 3B 67 |VE.y.REG. rts ;g| 00001750: 49 56 45 A0 45 44 49 54 4F 52 A0 54 48 45 A0 43 |IVE.EDITOR.THE.C| 00001760: 48 52 0D 0D 79 73 61 76 20 62 72 6B 0D 69 6E 64 |HR..ysav brk.ind| 00001770: 65 78 20 62 72 6B 0D 61 75 74 6F 63 6D 64 20 62 |ex brk.autocmd b| 00001780: 72 6B 0D 20 65 72 72 20 2A 2D 31 2F 24 33 65 30 |rk. err *-1/$3e0| 00001790: 20 3B 6D 55 53 54 A0 45 4E 44 A0 42 45 46 4F 52 | ;mUST.END.BEFOR| 000017A0: 45 A0 24 33 65 30 0D 20 64 6F 20 73 61 76 6F 62 |E.$3e0. do savob| 000017B0: 6A 0D 20 73 61 76 65 20 22 61 75 74 6F A0 65 64 |j. save "auto.ed| 000017C0: 69 74 22 0D 20 66 69 6E 0D 20 66 69 6E 0D 0D 20 |it". fin. fin.. | 000017D0: 6C 73 74 20 6F 66 66 0D |lst off. |
..********************************.*
*.*
KEYMAC *.*
*.* EXAMPLES OF USES OF MERL
IN'S *.* ADD-EDIT KEYBOARD HOOKS AT *.
* $7E-$7F. *.*
*.* GLEN E. BR
EDON 2/20/83 *.*--------------------
----------*.* TO USE: RUN DESIRED PROGRA
M *.* FROM EXEC (G) THEN INVOKE *.*
WITH USER FROM EDITOR. *.*********
***********************.. TR. EXP OFF..Y
= 1.YES = 1.N = 0.NO = 0.SAVOBJ KBD 'DO
YOU WANT OBJECT CODE SAVED? (Y/N)'.PROG
NUM KBD 'ASSEMBLE WHICH PROGRAM? (1-3)'.
ERR PROGNUM-1/3..INVEC = $7E ;EDIT MODE
KEY INPUT VECTOR.EFLG = $38 ;MINUS WHEN
IN EDIT MODE.USRCMD = $32E ;USER VECTOR
.STRINGS = $860 ;EDITOR PUTS STRING HERE
.GETIN = $FFE4..STADR MAC. LDA #]1. STA
]2. LDA #>]1. STA ]2+1. <<<..***********
*********************.*.* COMMON CODE TO
ALL PARTS:.. ORG $900.. >>> STADR.START
;USRCMD. LDY #$400-$334.MOVE LDA NOWSTAR
T-1,Y. STA START-1,Y. DEY. BNE MOVE. RTS
;END OF COMMON STUFF..NOWSTART ORG $334
..********************************.*.*
EXAMPLE 1 (KEYBOARD MACROS).*.* WITH "\
" LEAD IN, PRINTS A *.* FOLLOWED BY 31 C
OPIES OF CHR.* TYPED AFTER ESC. IF THIS
IS A.* SPACE THEN ANOTHER * IS PUT AT.*
THE END. THE CURSOR IS THEN.* PLACED O
N THE FIRST CHARACTER..*.***************
*****************.. DO PROGNUM-1. ELSE..
START >>> STADR.INPUT;INVEC.SETSTT SEC.
ROR STATE ;INIT STATE. RTS..INPUT BIT ST
ATE ;MACRO IN EFFECT?. BPL NXSTATE ;BRAN
CH IF SO. STY YSAV.FRSTKEY JSR GETIN ;OT
HERWISE, GET KEY. TAY. BEQ FRSTKEY. CMP
#'\' ;LEAD IN?. BEQ NXK ;BRANCH IF SO. L
DY YSAV.RET RTS ;RETURN WITH KEY IF NOT
..NXK JSR GETIN ;GET KEY AFTER LEADIN. T
AY. BEQ NXK. LDY YSAV. BIT RET ;CONTROL
CHR?. BEQ SETSTT ;ABORT IF SO. STA CHARA
C ;SAVE NEXT CHR. LDA #31 ;INIT COUNT. S
TA STATE.AST LDA #'*' ;SEND INITIAL *. R
TS.NXSTATE LDA CHARAC ;GET CHR. DEC STAT
E ;COUNTDOWN. BNE PLUS? ;LAST COUNT IF E
QUAL. CMP #' ' ;WAS CHR A SPACE?. BEQ AS
T ;SUBSTITUE * FOR LAST IF SO. RTS.PLUS?
BPL BACK ;BRANCH IF NOT DONE. LDA #$9F&
'B' ;PUT CURSOR ON 1ST CHR.BACK RTS..YSA
V BRK.STATE BRK.CHARAC BRK. DO SAVOBJ. S
AVE "REPEAT". FIN. FIN..****************
*******************.*.* EXAMPLE 2 (KEY
BOARD MACROS).*.* KEYBOARD MACROS DEFINE
D FOR KEYS.* * > " ' # + X Y L S - O C
A E.* WITH THE SHIFTED ONES EQUIVALENT.
* TO THEIR UNSHIFTED COUNTERPARTS..*.* M
OST OF THESE ARE VARIANTS OF.* THE INDIR
ECT, INDEXED BY Y.* OPCODES, EXITING IN
INSERT MODE.* BETWEEN THE PARENTHESES..*
.***********************************.. D
O PROGNUM-2. ELSE..STATE = $4A ;ZERO PAG
E USED TO.XSAV = $4B ; MAKE PROGRAM FIT.
YSAV = $4C ; IN $344 SPACE.INDEX = $4D ;
THESE ARE NOT USED BY EDITOR..START >>>
STADR.INPUT;INVEC. SEC. ROR STATE ;INIT
STATE. RTS..INPUT STX XSAV ;MUST PRESERV
E X (& Y). BIT STATE ; IF USED.. BPL GET
INDEX ;BRANCH IF DOING MACRO.FRSTKEY JSR
GETKEY ;OTHERWISE, GET KEY. CMP #'\' ;"
\" LEAD IN?. BNE EXIT ;EXIT IF NOT.NXK J
SR GETKEY ;GET KEY AFTER LEAD IN. CMP #'
0' ;SHIFT CHR?. BGE NOOR. ORA #%00010000
;SHIFT DOWN.NOOR STA ENDTBL ;SAVE CURRE
NT INPUT. ORA #$80. STA ENDTBL+1 ; IN CA
SE CMD NOT FOUND. LDX #0 ; TO USE FOR IT
.CMD? LDA MACTBL,X ;LOOK FOR COMMAND. CM
P ENDTBL ;MATCH INPUT?. BEQ GOTMAC ;BRAN
CH IF SO.GETCHR INX ;MOVE TO NEXT MAC.
LDA MACTBL,X. BPL GETCHR ;LOOP TILL MINU
S. INX ;POINT TO CMD BYTE. BNE CMD? ;AL
WAYS TAKEN.GOTMAC INX ;POINT TO MACRO S
ELECTED.SXI STX INDEX.GETINDEX LDX INDEX
;GET INDEX TO CURRENT CHR. INC INDEX ;P
OINT TO NEXT CHR. LDA MACTBL,X ;GET CURR
ENT CHR OF MACRO.. STA STATE ;CLEAR FLAG
ON LAST CHR. AND #$7F ;MUST ALWAYS CLR
HIGH BIT. TAX ;IN CASE IT IS WNDUP-MACT
BL. CMP #WNDUP-MACTBL ;IS IT WINDUP MAC?
. BEQ SXI ;BRANCH IF SO.EXIT LDX XSAV. R
TS..GETKEY STY YSAV.GK JSR GETIN. TAY. B
EQ GK. LDY YSAV. RTS..MACTBL. DCI '> >>>
'. TXT '2 TXT ""'. DFB $11,$9F&"I" ;BAC
KSPACE & INSERT. TXT :7 TXT '':. DFB $11
,$9F&"I". DCI '3 LDA #'. DCI 'X LDX #'.
DCI 'Y LDY #'. TXT '; ADC'. DFB WNDUP-MA
CTBL.$80. TXT '= SBC'. DFB WNDUP-MACTBL.
$80. TXT 'L LDA'. DFB WNDUP-MACTBL.$80.
TXT 'S STA'. DFB WNDUP-MACTBL.$80. TXT '
O ORA'. DFB WNDUP-MACTBL.$80. TXT 'C CMP
'. DFB WNDUP-MACTBL.$80. TXT 'A AND'. DF
B WNDUP-MACTBL.$80. TXT 'E EOR'.WNDUP TX
T ' (),Y'. HEX 111111 ;BACKSPACE TO BETW
EEN (). DFB $9F&"I" ;EXIT IN INSERT MODE
..ENDTBL DA 0 ;COMMAND CHR PUT HERE.. ER
R *-1/$400. DO SAVOBJ. SAVE "KEYMAC". FI
N. FIN..********************************
*********.*.* EXAMPLE 3 (AUTO-EDIT).*.
* USER"STRING" ESTABLISHES AN AUTO-EDIT.
* STRING WHICH WILL BE EXECUTED ON EACH.
* LINE OF A SUBSEQUENT EDIT. AN ADD/INS
ERT.* WILL DISCONNECT THE ROUTINE..*.* E
.G., IF "STRING" IS THE SEQUENCE.* CONTR
OL O, CONTROL J THEN.* CONTROL J WILL B
E INSERTED AT THE.* START OF EACH LINE O
F THE EDIT RANGE..*.* CONTROL R FOLLOWED
BY > OR < GIVE THE.* EFFECT DURING THE
AUTO EDIT OF THE.* CURSOR KEYS -> AND <-
..**************************************
***.. DO PROGNUM-3. ELSE..START LDY #-1
;MOVE STRING SPECIFIED.NXB INY ; IN USER
COMMAND. LDA STRINGS,Y. STA AUTOCMD,Y ;
(MAX LENGTH = $20). BNE NXB. STA INDEX ;
INIT INDEX TO CMD. LDA INVEC+1 ;IS IT CO
NNECTED NOW?. CMP #>AUTOEDIT. BEQ SETVEC
;SKIP IF SO. STA GETKEY+2 ;SAVE OLD INV
ECTOR. LDA INVEC. STA GETKEY+1.SETVEC >>
> STADR.AUTOEDIT;INVEC. RTS..AUTOEDIT BI
T EFLG ;FROM ADD/INSERT OR EDIT?. BMI SA
VY ;BRANCH IF FROM EDIT. LDA GETKEY+1 ;D
ISCONNECT OURSELVES IF. STA INVEC ; FROM
AN ADD OR INSERT. LDA GETKEY+2. STA INV
EC+1.GETKEY JMP $FFCF ;ADDRESS CHANGED..
SAVY STY YSAV ;REMEMBER Y. LDY INDEX ;GE
T INDEX TO NEXT CMD CHR. INC INDEX ;POIN
T TO NEXT ONE. LDA AUTOCMD,Y ;GET NEXT C
MD CHR. BNE ISQ ;BRANCH IF NOT LAST ONE.
STA INDEX ;INIT INDEX FOR NEXT LINE. LD
A #$D ;EXIT WITH CR.ISQ CMP #'A'&$9F ;CO
NTROL A?. BNE LEADIN. LDY #0. STY INDEX.
LEADIN CMP #'R'&$9F ;CONTROL R LEAD IN?.
BNE DOCMD ;BRANCH IF NOT. INC INDEX ;BU
MP INDEX. LDA AUTOCMD+1,Y. CMP #'<' ;NEX
T CHR A <. BNE RAR. LDA #$11 ;TRANSLATE
TO <-.RAR CMP #'>' ;OR >. BNE DOCMD ;JUS
T IGNORE CNTR R IF NOT. LDA #$1D ;TRANSL
ATE TO ->.DOCMD LDY YSAV ;RETRIEVE Y REG
. RTS ;GIVE EDITOR THE CHR..YSAV BRK.IND
EX BRK.AUTOCMD BRK. ERR *-1/$3E0 ;MUST E
ND BEFORE $3E0. DO SAVOBJ. SAVE "AUTO ED
IT". FIN. FIN.. LST OFF.
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL