LG-ASSEMBLER
FILE INFORMATION
FILENAME(S): LG-ASSEMBLER
FILE TYPE(S): PRG
FILE SIZE: 3.4K
FIRST SEEN: 2025-11-30 21:14:31
APPEARS ON: 1 disk(s)
FILE HASH
990d1a1920d51de904f76ee8f9825991a4cb7326c816de00c248e60ecdb3ebab
FOUND ON DISKS (1 DISKS)
| DISK TITLE | FILENAME | FILE TYPE | COLLECTION | TRACK | SECTOR | ACTIONS |
|---|---|---|---|---|---|---|
| LOGO FILES | LG-ASSEMBLER | PRG | DuncanTwain | 13 | 4 | DOWNLOAD FILE |
FILE CONTENT & ANALYSIS
00000000: 00 20 54 4F 20 53 45 54 55 50 0D 20 4D 41 4B 45 |. TO SETUP. MAKE| 00000010: 20 22 24 42 41 53 45 20 31 36 0D 20 52 45 41 44 | "$BASE 16. READ| 00000020: 20 22 4C 47 2D 41 4D 4F 44 45 53 0D 20 52 45 41 | "LG-AMODES. REA| 00000030: 44 20 22 4C 47 2D 4F 50 43 4F 44 45 53 0D 20 4D |D "LG-OPCODES. M| 00000040: 41 4B 45 20 22 4F 52 47 20 24 20 22 43 34 30 0D |AKE "ORG $ "C40.| 00000050: 20 45 52 4E 41 4D 45 20 22 53 54 41 52 54 55 50 | ERNAME "STARTUP| 00000060: 0D 20 45 52 20 53 45 54 55 50 0D 45 4E 44 0D 0D |. ER SETUP.END..| 00000070: 54 4F 20 24 20 3A 57 4F 52 44 0D 20 4F 50 20 24 |TO $ :WORD. OP $| 00000080: 31 20 3A 57 4F 52 44 20 30 0D 45 4E 44 0D 0D 54 |1 :WORD 0.END..T| 00000090: 4F 20 24 31 20 3A 57 4F 52 44 20 3A 56 41 4C 0D |O $1 :WORD :VAL.| 000000A0: 20 49 46 20 3A 57 4F 52 44 20 3D 20 22 20 4F 50 | IF :WORD = " OP| 000000B0: 20 3A 56 41 4C 0D 20 49 46 20 4E 55 4D 42 45 52 | :VAL. IF NUMBER| 000000C0: 3F 20 46 49 52 53 54 20 3A 57 4F 52 44 20 4F 50 |? FIRST :WORD OP| 000000D0: 20 24 31 20 42 46 20 3A 57 4F 52 44 20 3A 56 41 | $1 BF :WORD :VA| 000000E0: 4C 20 2A 20 3A 24 42 41 53 45 20 2B 20 46 49 52 |L * :$BASE + FIR| 000000F0: 53 54 20 3A 57 4F 52 44 0D 20 4C 4F 43 41 4C 20 |ST :WORD. LOCAL | 00000100: 22 44 49 47 49 54 0D 20 4D 41 4B 45 20 22 44 49 |"DIGIT. MAKE "DI| 00000110: 47 49 54 20 28 20 41 53 43 49 49 20 46 49 52 53 |GIT ( ASCII FIRS| 00000120: 54 20 3A 57 4F 52 44 20 29 20 2D 20 35 35 0D 20 |T :WORD ) - 55. | 00000130: 49 46 20 41 4E 59 4F 46 20 3A 44 49 47 49 54 20 |IF ANYOF :DIGIT | 00000140: 3C 20 30 20 3A 44 49 47 49 54 20 2D 20 31 20 3E |< 0 :DIGIT - 1 >| 00000150: 20 3A 24 42 41 53 45 20 45 52 52 4F 52 20 46 49 | :$BASE ERROR FI| 00000160: 52 53 54 20 3A 57 4F 52 44 20 5B 4E 4F 54 20 41 |RST :WORD [NOT A| 00000170: 20 44 49 47 49 54 5D 0D 20 4F 50 20 24 31 20 42 | DIGIT]. OP $1 B| 00000180: 46 20 3A 57 4F 52 44 20 3A 56 41 4C 20 2A 20 3A |F :WORD :VAL * :| 00000190: 24 42 41 53 45 20 2B 20 3A 44 49 47 49 54 0D 45 |$BASE + :DIGIT.E| 000001A0: 4E 44 0D 0D 54 4F 20 4F 50 2E 4C 4F 43 20 3A 4D |ND..TO OP.LOC :M| 000001B0: 4F 44 45 0D 20 4F 50 20 46 49 52 53 54 20 42 46 |ODE. OP FIRST BF| 000001C0: 20 54 48 49 4E 47 20 3A 4D 4F 44 45 0D 45 4E 44 | THING :MODE.END| 000001D0: 0D 0D 54 4F 20 52 45 4C 4F 50 45 52 0D 20 4D 41 |..TO RELOPER. MA| 000001E0: 4B 45 20 22 41 52 47 53 20 28 20 4F 50 45 52 41 |KE "ARGS ( OPERA| 000001F0: 4E 44 20 22 41 42 53 20 3A 41 52 47 53 20 29 20 |ND "ABS :ARGS ) | 00000200: 2D 20 3A 44 4F 54 20 2D 20 32 0D 20 49 46 20 3A |- :DOT - 2. IF :| 00000210: 41 52 47 53 20 3C 20 30 20 4F 50 20 32 35 36 20 |ARGS < 0 OP 256 | 00000220: 2B 20 3A 41 52 47 53 20 45 4C 53 45 20 4F 50 20 |+ :ARGS ELSE OP | 00000230: 3A 41 52 47 53 0D 45 4E 44 0D 0D 54 4F 20 53 54 |:ARGS.END..TO ST| 00000240: 4F 52 45 31 20 3A 4C 49 4E 45 20 3A 54 4F 4B 45 |ORE1 :LINE :TOKE| 00000250: 4E 0D 20 50 52 49 4E 54 31 20 3A 4C 49 4E 45 0D |N. PRINT1 :LINE.| 00000260: 20 49 46 20 4C 49 53 54 3F 20 3A 54 4F 4B 45 4E | IF LIST? :TOKEN| 00000270: 20 50 52 49 4E 54 20 5B 5D 20 53 54 4F 52 45 20 | PRINT [] STORE | 00000280: 42 46 20 3A 43 4F 44 45 20 3A 44 4F 54 20 53 54 |BF :CODE :DOT ST| 00000290: 4F 50 0D 20 49 46 20 4C 41 42 45 4C 3F 20 3A 54 |OP. IF LABEL? :T| 000002A0: 4F 4B 45 4E 20 4D 41 4B 45 20 22 4C 49 4E 45 20 |OKEN MAKE "LINE | 000002B0: 42 46 20 3A 4C 49 4E 45 20 4D 41 4B 45 20 22 54 |BF :LINE MAKE "T| 000002C0: 4F 4B 45 4E 20 46 49 52 53 54 20 3A 4C 49 4E 45 |OKEN FIRST :LINE| 000002D0: 0D 20 49 46 20 4E 55 4D 42 45 52 3F 20 3A 54 4F |. IF NUMBER? :TO| 000002E0: 4B 45 4E 20 45 4D 49 54 20 3A 44 4F 54 20 3A 54 |KEN EMIT :DOT :T| 000002F0: 4F 4B 45 4E 20 53 54 4F 52 45 20 42 46 20 3A 43 |OKEN STORE BF :C| 00000300: 4F 44 45 20 3A 44 4F 54 20 2B 20 31 20 53 54 4F |ODE :DOT + 1 STO| 00000310: 50 0D 20 53 54 4F 52 45 20 42 46 20 3A 43 4F 44 |P. STORE BF :COD| 00000320: 45 20 3A 44 4F 54 20 2B 20 28 20 53 54 4F 52 45 |E :DOT + ( STORE| 00000330: 32 20 3A 4C 49 4E 45 20 28 20 41 4D 4F 44 45 20 |2 :LINE ( AMODE | 00000340: 3A 54 4F 4B 45 4E 20 42 46 20 3A 4C 49 4E 45 20 |:TOKEN BF :LINE | 00000350: 29 20 29 0D 45 4E 44 0D 0D 54 4F 20 4F 50 45 52 |) ).END..TO OPER| 00000360: 41 4E 44 20 3A 4D 4F 44 45 20 3A 41 52 47 53 0D |AND :MODE :ARGS.| 00000370: 20 49 46 20 3A 4D 4F 44 45 20 3D 20 22 52 45 4C | IF :MODE = "REL| 00000380: 20 4F 50 20 52 45 4C 4F 50 45 52 0D 20 4D 41 4B | OP RELOPER. MAK| 00000390: 45 20 22 41 52 47 53 20 49 54 45 4D 20 28 20 4F |E "ARGS ITEM ( O| 000003A0: 50 2E 4C 4F 43 20 3A 4D 4F 44 45 20 29 20 3A 41 |P.LOC :MODE ) :A| 000003B0: 52 47 53 0D 20 49 46 20 4C 49 53 54 3F 20 3A 41 |RGS. IF LIST? :A| 000003C0: 52 47 53 20 4F 50 20 52 55 4E 20 3A 41 52 47 53 |RGS OP RUN :ARGS| 000003D0: 0D 20 49 46 20 4E 55 4D 42 45 52 3F 20 3A 41 52 |. IF NUMBER? :AR| 000003E0: 47 53 20 4F 50 20 3A 41 52 47 53 0D 20 49 46 20 |GS OP :ARGS. IF | 000003F0: 46 49 52 53 54 20 3A 41 52 47 53 20 3D 20 22 22 |FIRST :ARGS = ""| 00000400: 20 4F 50 20 41 53 43 49 49 20 42 46 20 3A 41 52 | OP ASCII BF :AR| 00000410: 47 53 0D 20 49 46 20 54 48 49 4E 47 3F 20 3A 41 |GS. IF THING? :A| 00000420: 52 47 53 20 4F 50 20 54 48 49 4E 47 20 3A 41 52 |RGS OP THING :AR| 00000430: 47 53 0D 20 45 52 52 4F 52 20 3A 41 52 47 53 20 |GS. ERROR :ARGS | 00000440: 5B 4E 4F 54 20 41 20 4C 41 42 45 4C 5D 0D 45 4E |[NOT A LABEL].EN| 00000450: 44 0D 0D 54 4F 20 45 4D 49 54 20 3A 44 4F 54 20 |D..TO EMIT :DOT | 00000460: 3A 42 59 54 45 0D 20 49 4E 44 45 4E 54 20 32 39 |:BYTE. INDENT 29| 00000470: 20 2D 20 46 49 52 53 54 20 43 55 52 53 4F 52 50 | - FIRST CURSORP| 00000480: 4F 53 0D 20 28 20 50 52 49 4E 54 31 20 3A 44 4F |OS. ( PRINT1 :DO| 00000490: 54 20 22 3D 20 3A 42 59 54 45 20 29 0D 20 50 52 |T "= :BYTE ). PR| 000004A0: 49 4E 54 20 5B 5D 0D 20 2E 44 45 50 4F 53 49 54 |INT []. .DEPOSIT| 000004B0: 20 3A 44 4F 54 20 3A 42 59 54 45 0D 45 4E 44 0D | :DOT :BYTE.END.| 000004C0: 0D 54 4F 20 53 54 4F 52 45 32 20 3A 4C 49 4E 45 |.TO STORE2 :LINE| 000004D0: 20 3A 4D 4F 44 45 0D 20 4C 4F 43 41 4C 20 22 42 | :MODE. LOCAL "B| 000004E0: 59 54 45 20 4C 4F 43 41 4C 20 22 4C 45 4E 0D 20 |YTE LOCAL "LEN. | 000004F0: 4D 41 4B 45 20 22 42 59 54 45 20 4F 50 43 4F 44 |MAKE "BYTE OPCOD| 00000500: 45 20 46 49 52 53 54 20 3A 4C 49 4E 45 20 3A 4D |E FIRST :LINE :M| 00000510: 4F 44 45 0D 20 4D 41 4B 45 20 22 4C 45 4E 20 49 |ODE. MAKE "LEN I| 00000520: 4E 53 4C 45 4E 20 3A 4D 4F 44 45 0D 20 45 4D 49 |NSLEN :MODE. EMI| 00000530: 54 20 3A 44 4F 54 20 3A 42 59 54 45 0D 20 49 46 |T :DOT :BYTE. IF| 00000540: 20 3A 4C 45 4E 20 3D 20 31 20 4F 50 20 3A 4C 45 | :LEN = 1 OP :LE| 00000550: 4E 0D 20 4D 41 4B 45 20 22 42 59 54 45 20 4F 50 |N. MAKE "BYTE OP| 00000560: 45 52 41 4E 44 20 3A 4D 4F 44 45 20 42 46 20 3A |ERAND :MODE BF :| 00000570: 4C 49 4E 45 0D 20 49 46 20 3A 4C 45 4E 20 3D 20 |LINE. IF :LEN = | 00000580: 32 20 45 4D 49 54 20 3A 44 4F 54 20 2B 20 31 20 |2 EMIT :DOT + 1 | 00000590: 3A 42 59 54 45 20 4F 50 20 3A 4C 45 4E 0D 20 45 |:BYTE OP :LEN. E| 000005A0: 4D 49 54 20 3A 44 4F 54 20 2B 20 31 20 4C 4F 38 |MIT :DOT + 1 LO8| 000005B0: 20 3A 42 59 54 45 0D 20 45 4D 49 54 20 3A 44 4F | :BYTE. EMIT :DO| 000005C0: 54 20 2B 20 32 20 48 49 38 20 3A 42 59 54 45 0D |T + 2 HI8 :BYTE.| 000005D0: 20 4F 50 20 3A 4C 45 4E 0D 45 4E 44 0D 0D 54 4F | OP :LEN.END..TO| 000005E0: 20 49 4E 44 45 4E 54 20 3A 53 50 41 43 45 53 0D | INDENT :SPACES.| 000005F0: 20 49 46 20 3A 53 50 41 43 45 53 20 3C 20 30 20 | IF :SPACES < 0 | 00000600: 50 52 49 4E 54 31 20 22 27 20 27 20 53 54 4F 50 |PRINT1 "' ' STOP| 00000610: 0D 20 52 45 50 45 41 54 20 3A 53 50 41 43 45 53 |. REPEAT :SPACES| 00000620: 20 5B 50 52 49 4E 54 31 20 22 27 20 27 5D 0D 45 | [PRINT1 "' '].E| 00000630: 4E 44 0D 0D 54 4F 20 4F 50 43 4F 44 45 20 3A 49 |ND..TO OPCODE :I| 00000640: 4E 53 20 3A 4D 4F 44 45 0D 20 4F 50 20 4C 4F 4F |NS :MODE. OP LOO| 00000650: 4B 55 50 20 3A 4D 4F 44 45 20 54 48 49 4E 47 20 |KUP :MODE THING | 00000660: 3A 49 4E 53 0D 45 4E 44 0D 0D 54 4F 20 4C 4F 38 |:INS.END..TO LO8| 00000670: 20 3A 4E 0D 20 4F 50 20 42 49 54 41 4E 44 20 3A | :N. OP BITAND :| 00000680: 4E 20 32 35 35 0D 45 4E 44 0D 0D 54 4F 20 48 49 |N 255.END..TO HI| 00000690: 38 20 3A 4E 0D 20 4F 50 20 51 55 4F 54 49 45 4E |8 :N. OP QUOTIEN| 000006A0: 54 20 3A 4E 20 32 35 36 0D 45 4E 44 0D 0D 54 4F |T :N 256.END..TO| 000006B0: 20 4C 4F 4F 4B 55 50 20 3A 54 48 49 4E 47 20 3A | LOOKUP :THING :| 000006C0: 50 4C 41 43 45 0D 20 49 46 20 3A 50 4C 41 43 45 |PLACE. IF :PLACE| 000006D0: 20 3D 20 5B 5D 20 45 52 52 4F 52 20 3A 54 48 49 | = [] ERROR :THI| 000006E0: 4E 47 20 5B 42 41 44 20 4D 4F 44 45 5D 0D 20 49 |NG [BAD MODE]. I| 000006F0: 46 20 3A 54 48 49 4E 47 20 3D 20 46 49 52 53 54 |F :THING = FIRST| 00000700: 20 3A 50 4C 41 43 45 20 4F 50 20 46 49 52 53 54 | :PLACE OP FIRST| 00000710: 20 42 46 20 3A 50 4C 41 43 45 0D 20 4F 50 20 4C | BF :PLACE. OP L| 00000720: 4F 4F 4B 55 50 20 3A 54 48 49 4E 47 20 42 46 20 |OOKUP :THING BF | 00000730: 42 46 20 3A 50 4C 41 43 45 0D 45 4E 44 0D 0D 54 |BF :PLACE.END..T| 00000740: 4F 20 41 4D 4F 44 45 31 20 3A 46 50 41 52 54 20 |O AMODE1 :FPART | 00000750: 3A 4C 50 41 52 54 0D 20 49 46 20 3A 46 50 41 52 |:LPART. IF :FPAR| 00000760: 54 20 3D 20 22 23 20 4F 50 20 4C 4F 4F 4B 55 50 |T = "# OP LOOKUP| 00000770: 20 42 46 20 3A 4C 50 41 52 54 20 3A 49 4D 4D 53 | BF :LPART :IMMS| 00000780: 0D 20 49 46 20 3A 46 50 41 52 54 20 3D 20 22 21 |. IF :FPART = "!| 00000790: 20 4F 50 20 4C 4F 4F 4B 55 50 20 42 46 20 3A 4C | OP LOOKUP BF :L| 000007A0: 50 41 52 54 20 3A 5A 50 53 0D 20 49 46 20 3A 46 |PART :ZPS. IF :F| 000007B0: 50 41 52 54 20 3D 20 22 28 20 4F 50 20 4C 4F 4F |PART = "( OP LOO| 000007C0: 4B 55 50 20 42 46 20 3A 4C 50 41 52 54 20 3A 49 |KUP BF :LPART :I| 000007D0: 4E 44 49 52 53 0D 20 4F 50 20 4C 4F 4F 4B 55 50 |NDIRS. OP LOOKUP| 000007E0: 20 3A 4C 50 41 52 54 20 3A 49 4E 44 45 58 45 53 | :LPART :INDEXES| 000007F0: 0D 45 4E 44 0D 0D 54 4F 20 49 4D 50 49 4E 53 3F |.END..TO IMPINS?| 00000800: 20 3A 54 4F 4B 45 4E 0D 20 49 46 20 49 4E 53 3F | :TOKEN. IF INS?| 00000810: 20 3A 54 4F 4B 45 4E 20 4F 50 20 22 49 4D 50 20 | :TOKEN OP "IMP | 00000820: 3D 20 46 49 52 53 54 20 54 48 49 4E 47 20 3A 54 |= FIRST THING :T| 00000830: 4F 4B 45 4E 0D 20 4F 50 20 22 46 41 4C 53 45 0D |OKEN. OP "FALSE.| 00000840: 45 4E 44 0D 0D 54 4F 20 52 45 4C 49 4E 53 3F 20 |END..TO RELINS? | 00000850: 3A 54 4F 4B 45 4E 0D 20 49 46 20 49 4E 53 3F 20 |:TOKEN. IF INS? | 00000860: 3A 54 4F 4B 45 4E 20 4F 50 20 22 52 45 4C 20 3D |:TOKEN OP "REL =| 00000870: 20 46 49 52 53 54 20 54 48 49 4E 47 20 3A 54 4F | FIRST THING :TO| 00000880: 4B 45 4E 0D 20 4F 50 20 22 46 41 4C 53 45 0D 45 |KEN. OP "FALSE.E| 00000890: 4E 44 0D 0D 54 4F 20 45 52 52 4F 52 20 3A 41 20 |ND..TO ERROR :A | 000008A0: 3A 42 0D 20 28 20 50 52 49 4E 54 20 5B 49 4E 20 |:B. ( PRINT [IN | 000008B0: 4C 49 4E 45 5D 20 3A 4C 49 4E 45 20 29 0D 20 28 |LINE] :LINE ). (| 000008C0: 20 50 52 49 4E 54 20 3A 41 20 3A 42 20 29 0D 20 | PRINT :A :B ). | 000008D0: 54 4F 50 4C 45 56 45 4C 0D 45 4E 44 0D 0D 54 4F |TOPLEVEL.END..TO| 000008E0: 20 41 53 53 49 47 4E 20 3A 4C 41 42 45 4C 20 3A | ASSIGN :LABEL :| 000008F0: 54 48 49 4E 47 0D 20 4D 41 4B 45 20 22 4C 41 42 |THING. MAKE "LAB| 00000900: 45 4C 20 42 4C 20 3A 4C 41 42 45 4C 0D 20 49 46 |EL BL :LABEL. IF| 00000910: 20 54 48 49 4E 47 3F 20 3A 4C 41 42 45 4C 20 45 | THING? :LABEL E| 00000920: 52 52 4F 52 20 3A 4C 41 42 45 4C 20 5B 41 4C 52 |RROR :LABEL [ALR| 00000930: 45 41 44 59 20 55 53 45 44 5D 0D 20 4D 41 4B 45 |EADY USED]. MAKE| 00000940: 20 3A 4C 41 42 45 4C 20 3A 44 4F 54 0D 20 4D 41 | :LABEL :DOT. MA| 00000950: 4B 45 20 22 4C 41 42 45 4C 53 20 46 50 55 54 20 |KE "LABELS FPUT | 00000960: 3A 4C 41 42 45 4C 20 3A 4C 41 42 45 4C 53 0D 45 |:LABEL :LABELS.E| 00000970: 4E 44 0D 0D 54 4F 20 4C 41 42 45 4C 3F 20 3A 54 |ND..TO LABEL? :T| 00000980: 4F 4B 45 4E 0D 20 4F 50 20 22 3A 20 3D 20 4C 41 |OKEN. OP ": = LA| 00000990: 53 54 20 3A 54 4F 4B 45 4E 0D 45 4E 44 0D 0D 54 |ST :TOKEN.END..T| 000009A0: 4F 20 41 4D 4F 44 45 20 3A 54 4F 4B 45 4E 20 3A |O AMODE :TOKEN :| 000009B0: 41 52 47 53 0D 20 49 46 20 52 45 4C 49 4E 53 3F |ARGS. IF RELINS?| 000009C0: 20 3A 54 4F 4B 45 4E 20 4F 50 20 22 52 45 4C 0D | :TOKEN OP "REL.| 000009D0: 20 49 46 20 49 4D 50 49 4E 53 3F 20 3A 54 4F 4B | IF IMPINS? :TOK| 000009E0: 45 4E 20 4F 50 20 22 49 4D 50 0D 20 49 46 20 3A |EN OP "IMP. IF :| 000009F0: 41 52 47 53 20 3D 20 5B 5D 20 4F 50 20 22 49 4D |ARGS = [] OP "IM| 00000A00: 50 0D 20 49 46 20 3A 41 52 47 53 20 3D 20 5B 41 |P. IF :ARGS = [A| 00000A10: 5D 20 4F 50 20 22 41 43 43 0D 20 49 46 20 42 46 |] OP "ACC. IF BF| 00000A20: 20 3A 41 52 47 53 20 3D 20 5B 5D 20 4F 50 20 22 | :ARGS = [] OP "| 00000A30: 41 42 53 0D 20 4F 50 20 41 4D 4F 44 45 31 20 46 |ABS. OP AMODE1 F| 00000A40: 49 52 53 54 20 3A 41 52 47 53 20 42 46 20 3A 41 |IRST :ARGS BF :A| 00000A50: 52 47 53 0D 45 4E 44 0D 0D 54 4F 20 49 4E 53 4C |RGS.END..TO INSL| 00000A60: 45 4E 20 3A 4D 4F 44 45 0D 20 4F 50 20 46 49 52 |EN :MODE. OP FIR| 00000A70: 53 54 20 54 48 49 4E 47 20 3A 4D 4F 44 45 0D 45 |ST THING :MODE.E| 00000A80: 4E 44 0D 0D 54 4F 20 49 4E 53 3F 20 3A 54 4F 4B |ND..TO INS? :TOK| 00000A90: 45 4E 0D 20 49 46 20 54 48 49 4E 47 3F 20 3A 54 |EN. IF THING? :T| 00000AA0: 4F 4B 45 4E 20 4F 50 20 4C 49 53 54 3F 20 54 48 |OKEN OP LIST? TH| 00000AB0: 49 4E 47 20 3A 54 4F 4B 45 4E 0D 20 4F 50 20 22 |ING :TOKEN. OP "| 00000AC0: 46 41 4C 53 45 0D 45 4E 44 0D 0D 54 4F 20 53 59 |FALSE.END..TO SY| 00000AD0: 4D 53 2E 4C 20 3A 4C 49 4E 45 20 3A 54 4F 4B 45 |MS.L :LINE :TOKE| 00000AE0: 4E 0D 20 49 46 20 49 4E 53 3F 20 3A 54 4F 4B 45 |N. IF INS? :TOKE| 00000AF0: 4E 20 4F 50 20 49 4E 53 4C 45 4E 20 41 4D 4F 44 |N OP INSLEN AMOD| 00000B00: 45 20 3A 54 4F 4B 45 4E 20 42 46 20 3A 4C 49 4E |E :TOKEN BF :LIN| 00000B10: 45 0D 20 49 46 20 4C 41 42 45 4C 3F 20 3A 54 4F |E. IF LABEL? :TO| 00000B20: 4B 45 4E 20 41 53 53 49 47 4E 20 3A 54 4F 4B 45 |KEN ASSIGN :TOKE| 00000B30: 4E 20 3A 44 4F 54 20 4F 50 20 53 59 4D 53 2E 4C |N :DOT OP SYMS.L| 00000B40: 20 42 46 20 3A 4C 49 4E 45 20 46 49 52 53 54 20 | BF :LINE FIRST | 00000B50: 42 46 20 3A 4C 49 4E 45 0D 20 49 46 20 4C 49 53 |BF :LINE. IF LIS| 00000B60: 54 3F 20 3A 54 4F 4B 45 4E 20 52 55 4E 20 3A 54 |T? :TOKEN RUN :T| 00000B70: 4F 4B 45 4E 20 4F 50 20 30 0D 20 49 46 20 4E 55 |OKEN OP 0. IF NU| 00000B80: 4D 42 45 52 3F 20 3A 54 4F 4B 45 4E 20 4F 50 20 |MBER? :TOKEN OP | 00000B90: 31 0D 20 45 52 52 4F 52 20 3A 54 4F 4B 45 4E 20 |1. ERROR :TOKEN | 00000BA0: 5B 4E 4F 54 20 41 4E 20 49 4E 53 54 52 55 43 54 |[NOT AN INSTRUCT| 00000BB0: 49 4F 4E 5D 0D 45 4E 44 0D 0D 54 4F 20 53 54 4F |ION].END..TO STO| 00000BC0: 52 45 20 3A 43 4F 44 45 20 3A 44 4F 54 0D 20 49 |RE :CODE :DOT. I| 00000BD0: 46 20 3A 43 4F 44 45 20 3D 20 5B 5D 20 53 54 4F |F :CODE = [] STO| 00000BE0: 50 0D 20 53 54 4F 52 45 31 20 46 49 52 53 54 20 |P. STORE1 FIRST | 00000BF0: 3A 43 4F 44 45 20 46 49 52 53 54 20 46 49 52 53 |:CODE FIRST FIRS| 00000C00: 54 20 3A 43 4F 44 45 0D 45 4E 44 0D 0D 54 4F 20 |T :CODE.END..TO | 00000C10: 53 59 4D 42 4F 4C 53 20 3A 43 4F 44 45 20 3A 44 |SYMBOLS :CODE :D| 00000C20: 4F 54 0D 20 49 46 20 3A 43 4F 44 45 20 3D 20 5B |OT. IF :CODE = [| 00000C30: 5D 20 4D 41 4B 45 20 22 45 4E 44 20 3A 44 4F 54 |] MAKE "END :DOT| 00000C40: 20 2D 20 31 20 53 54 4F 50 0D 20 53 59 4D 42 4F | - 1 STOP. SYMBO| 00000C50: 4C 53 20 42 46 20 3A 43 4F 44 45 20 3A 44 4F 54 |LS BF :CODE :DOT| 00000C60: 20 2B 20 28 20 53 59 4D 53 2E 4C 20 46 49 52 53 | + ( SYMS.L FIRS| 00000C70: 54 20 3A 43 4F 44 45 20 46 49 52 53 54 20 46 49 |T :CODE FIRST FI| 00000C80: 52 53 54 20 3A 43 4F 44 45 20 29 0D 45 4E 44 0D |RST :CODE ).END.| 00000C90: 0D 54 4F 20 45 52 4E 53 20 3A 4E 41 4D 45 53 0D |.TO ERNS :NAMES.| 00000CA0: 20 49 46 20 3A 4E 41 4D 45 53 20 3D 20 5B 5D 20 | IF :NAMES = [] | 00000CB0: 53 54 4F 50 0D 20 45 52 4E 41 4D 45 20 46 49 52 |STOP. ERNAME FIR| 00000CC0: 53 54 20 3A 4E 41 4D 45 53 0D 20 45 52 4E 53 20 |ST :NAMES. ERNS | 00000CD0: 42 46 20 3A 4E 41 4D 45 53 0D 45 4E 44 0D 0D 54 |BF :NAMES.END..T| 00000CE0: 4F 20 41 53 53 45 4D 42 4C 45 20 3A 43 4F 44 45 |O ASSEMBLE :CODE| 00000CF0: 0D 20 49 46 20 54 48 49 4E 47 3F 20 22 4C 41 42 |. IF THING? "LAB| 00000D00: 45 4C 53 20 45 52 4E 53 20 3A 4C 41 42 45 4C 53 |ELS ERNS :LABELS| 00000D10: 0D 20 4D 41 4B 45 20 22 4C 41 42 45 4C 53 20 5B |. MAKE "LABELS [| 00000D20: 5D 0D 20 4E 44 20 50 52 20 3A 43 4F 44 45 0D 20 |]. ND PR :CODE. | 00000D30: 4D 41 4B 45 20 22 43 4F 44 45 20 42 46 20 54 45 |MAKE "CODE BF TE| 00000D40: 58 54 20 3A 43 4F 44 45 0D 20 53 59 4D 42 4F 4C |XT :CODE. SYMBOL| 00000D50: 53 20 3A 43 4F 44 45 20 3A 4F 52 47 0D 20 53 54 |S :CODE :ORG. ST| 00000D60: 4F 52 45 20 3A 43 4F 44 45 20 3A 4F 52 47 0D 45 |ORE :CODE :ORG.E| 00000D70: 4E 44 0D 0D 4D 41 4B 45 20 22 24 42 41 53 45 20 |ND..MAKE "$BASE | 00000D80: 28 31 36 29 0D 4D 41 4B 45 20 22 53 54 41 52 54 |(16).MAKE "START| 00000D90: 55 50 20 5B 53 45 54 55 50 5D 0D |UP [SETUP]. |
. TO SETUP. MAKE "$BASE 16. READ "LG-AMO DES. READ "LG-OPCODES. MAKE "ORG $ "C40. ERNAME "STARTUP. ER SETUP.END..TO $ :WO RD. OP $1 :WORD 0.END..TO $1 :WORD :VAL. IF :WORD = " OP :VAL. IF NUMBER? FIRST :WORD OP $1 BF :WORD :VAL * :$BASE + FIR ST :WORD. LOCAL "DIGIT. MAKE "DIGIT ( AS CII FIRST :WORD ) - 55. IF ANYOF :DIGIT < 0 :DIGIT - 1 > :$BASE ERROR FIRST :WOR D [NOT A DIGIT]. OP $1 BF :WORD :VAL * : $BASE + :DIGIT.END..TO OP.LOC :MODE. OP FIRST BF THING :MODE.END..TO RELOPER. MA KE "ARGS ( OPERAND "ABS :ARGS ) - :DOT - 2. IF :ARGS < 0 OP 256 + :ARGS ELSE OP :ARGS.END..TO STORE1 :LINE :TOKEN. PRINT 1 :LINE. IF LIST? :TOKEN PRINT [] STORE BF :CODE :DOT STOP. IF LABEL? :TOKEN MAK E "LINE BF :LINE MAKE "TOKEN FIRST :LINE . IF NUMBER? :TOKEN EMIT :DOT :TOKEN STO RE BF :CODE :DOT + 1 STOP. STORE BF :COD E :DOT + ( STORE2 :LINE ( AMODE :TOKEN B F :LINE ) ).END..TO OPERAND :MODE :ARGS. IF :MODE = "REL OP RELOPER. MAKE "ARGS ITEM ( OP.LOC :MODE ) :ARGS. IF LIST? :A RGS OP RUN :ARGS. IF NUMBER? :ARGS OP :A RGS. IF FIRST :ARGS = "" OP ASCII BF :AR GS. IF THING? :ARGS OP THING :ARGS. ERRO R :ARGS [NOT A LABEL].END..TO EMIT :DOT :BYTE. INDENT 29 - FIRST CURSORPOS. ( PR INT1 :DOT "= :BYTE ). PRINT []. .DEPOSIT :DOT :BYTE.END..TO STORE2 :LINE :MODE. LOCAL "BYTE LOCAL "LEN. MAKE "BYTE OPCOD E FIRST :LINE :MODE. MAKE "LEN INSLEN :M ODE. EMIT :DOT :BYTE. IF :LEN = 1 OP :LE N. MAKE "BYTE OPERAND :MODE BF :LINE. IF :LEN = 2 EMIT :DOT + 1 :BYTE OP :LEN. E MIT :DOT + 1 LO8 :BYTE. EMIT :DOT + 2 HI 8 :BYTE. OP :LEN.END..TO INDENT :SPACES. IF :SPACES < 0 PRINT1 "' ' STOP. REPEAT :SPACES [PRINT1 "' '].END..TO OPCODE :I NS :MODE. OP LOOKUP :MODE THING :INS.END ..TO LO8 :N. OP BITAND :N 255.END..TO HI 8 :N. OP QUOTIENT :N 256.END..TO LOOKUP :THING :PLACE. IF :PLACE = [] ERROR :THI NG [BAD MODE]. IF :THING = FIRST :PLACE OP FIRST BF :PLACE. OP LOOKUP :THING BF BF :PLACE.END..TO AMODE1 :FPART :LPART. IF :FPART = "# OP LOOKUP BF :LPART :IMMS . IF :FPART = "! OP LOOKUP BF :LPART :ZP S. IF :FPART = "( OP LOOKUP BF :LPART :I NDIRS. OP LOOKUP :LPART :INDEXES.END..TO IMPINS? :TOKEN. IF INS? :TOKEN OP "IMP = FIRST THING :TOKEN. OP "FALSE.END..TO RELINS? :TOKEN. IF INS? :TOKEN OP "REL = FIRST THING :TOKEN. OP "FALSE.END..TO E RROR :A :B. ( PRINT [IN LINE] :LINE ). ( PRINT :A :B ). TOPLEVEL.END..TO ASSIGN :LABEL :THING. MAKE "LABEL BL :LABEL. IF THING? :LABEL ERROR :LABEL [ALREADY USE D]. MAKE :LABEL :DOT. MAKE "LABELS FPUT :LABEL :LABELS.END..TO LABEL? :TOKEN. OP ": = LAST :TOKEN.END..TO AMODE :TOKEN : ARGS. IF RELINS? :TOKEN OP "REL. IF IMPI NS? :TOKEN OP "IMP. IF :ARGS = [] OP "IM P. IF :ARGS = [A] OP "ACC. IF BF :ARGS = [] OP "ABS. OP AMODE1 FIRST :ARGS BF :A RGS.END..TO INSLEN :MODE. OP FIRST THING :MODE.END..TO INS? :TOKEN. IF THING? :T OKEN OP LIST? THING :TOKEN. OP "FALSE.EN D..TO SYMS.L :LINE :TOKEN. IF INS? :TOKE N OP INSLEN AMODE :TOKEN BF :LINE. IF LA BEL? :TOKEN ASSIGN :TOKEN :DOT OP SYMS.L BF :LINE FIRST BF :LINE. IF LIST? :TOKE N RUN :TOKEN OP 0. IF NUMBER? :TOKEN OP 1. ERROR :TOKEN [NOT AN INSTRUCTION].END ..TO STORE :CODE :DOT. IF :CODE = [] STO P. STORE1 FIRST :CODE FIRST FIRST :CODE. END..TO SYMBOLS :CODE :DOT. IF :CODE = [ ] MAKE "END :DOT - 1 STOP. SYMBOLS BF :C ODE :DOT + ( SYMS.L FIRST :CODE FIRST FI RST :CODE ).END..TO ERNS :NAMES. IF :NAM ES = [] STOP. ERNAME FIRST :NAMES. ERNS BF :NAMES.END..TO ASSEMBLE :CODE. IF THI NG? "LABELS ERNS :LABELS. MAKE "LABELS [ ]. ND PR :CODE. MAKE "CODE BF TEXT :CODE . SYMBOLS :CODE :ORG. STORE :CODE :ORG.E ND..MAKE "$BASE (16).MAKE "STARTUP [SETU P].
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL