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

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 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL