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

ASSEMBLER.LOGO

FILE INFORMATION

FILENAME(S): ASSEMBLER.LOGO

FILE TYPE(S): PRG

FILE SIZE: 3.4K

FIRST SEEN: 2025-11-02 16:30:34

APPEARS ON: 1 disk(s)

FILE HASH

416ba6e4423cdf0c42e005e86b34df120a2cf8f180e8a736b73e2fbe7e6c74c3

FOUND ON DISKS (1 DISKS)

DISK TITLE FILENAME FILE TYPE COLLECTION TRACK SECTOR ACTIONS
NG USERS 11A ASSEMBLER.LOGO PRG Treasure Chest - OzzyC64 16 8 DOWNLOAD FILE

FILE CONTENT & ANALYSIS

00000000: 00 20 54 4F 20 41 53 53  45 4D 42 4C 45 20 3A 43  |. TO ASSEMBLE :C|
00000010: 4F 44 45 0D 20 49 46 20  54 48 49 4E 47 3F 20 22  |ODE. IF THING? "|
00000020: 4C 41 42 45 4C 53 20 45  52 4E 53 20 3A 4C 41 42  |LABELS ERNS :LAB|
00000030: 45 4C 53 0D 20 4D 41 4B  45 20 22 4C 41 42 45 4C  |ELS. MAKE "LABEL|
00000040: 53 20 5B 5D 0D 20 4E 44  20 50 52 20 3A 43 4F 44  |S []. ND PR :COD|
00000050: 45 0D 20 4D 41 4B 45 20  22 43 4F 44 45 20 42 46  |E. MAKE "CODE BF|
00000060: 20 54 45 58 54 20 3A 43  4F 44 45 0D 20 53 59 4D  | TEXT :CODE. SYM|
00000070: 42 4F 4C 53 20 3A 43 4F  44 45 20 3A 4F 52 47 0D  |BOLS :CODE :ORG.|
00000080: 20 53 54 4F 52 45 20 3A  43 4F 44 45 20 3A 4F 52  | STORE :CODE :OR|
00000090: 47 0D 45 4E 44 0D 0D 54  4F 20 45 52 4E 53 20 3A  |G.END..TO ERNS :|
000000A0: 4E 41 4D 45 53 0D 20 49  46 20 3A 4E 41 4D 45 53  |NAMES. IF :NAMES|
000000B0: 20 3D 20 5B 5D 20 53 54  4F 50 0D 20 45 52 4E 41  | = [] STOP. ERNA|
000000C0: 4D 45 20 46 49 52 53 54  20 3A 4E 41 4D 45 53 0D  |ME FIRST :NAMES.|
000000D0: 20 45 52 4E 53 20 42 46  20 3A 4E 41 4D 45 53 0D  | ERNS BF :NAMES.|
000000E0: 45 4E 44 0D 0D 54 4F 20  53 59 4D 42 4F 4C 53 20  |END..TO SYMBOLS |
000000F0: 3A 43 4F 44 45 20 3A 44  4F 54 0D 20 49 46 20 3A  |:CODE :DOT. IF :|
00000100: 43 4F 44 45 20 3D 20 5B  5D 20 4D 41 4B 45 20 22  |CODE = [] MAKE "|
00000110: 45 4E 44 20 3A 44 4F 54  20 2D 20 31 20 53 54 4F  |END :DOT - 1 STO|
00000120: 50 0D 20 53 59 4D 42 4F  4C 53 20 42 46 20 3A 43  |P. SYMBOLS BF :C|
00000130: 4F 44 45 20 3A 44 4F 54  20 2B 20 28 20 53 59 4D  |ODE :DOT + ( SYM|
00000140: 53 2E 4C 20 46 49 52 53  54 20 3A 43 4F 44 45 20  |S.L FIRST :CODE |
00000150: 46 49 52 53 54 20 46 49  52 53 54 20 3A 43 4F 44  |FIRST FIRST :COD|
00000160: 45 20 29 0D 45 4E 44 0D  0D 54 4F 20 53 59 4D 53  |E ).END..TO SYMS|
00000170: 2E 4C 20 3A 4C 49 4E 45  20 3A 54 4F 4B 45 4E 0D  |.L :LINE :TOKEN.|
00000180: 20 49 46 20 49 4E 53 3F  20 3A 54 4F 4B 45 4E 20  | IF INS? :TOKEN |
00000190: 4F 50 20 49 4E 53 4C 45  4E 20 41 4D 4F 44 45 20  |OP INSLEN AMODE |
000001A0: 3A 54 4F 4B 45 4E 20 42  46 20 3A 4C 49 4E 45 0D  |:TOKEN BF :LINE.|
000001B0: 20 49 46 20 4C 41 42 45  4C 3F 20 3A 54 4F 4B 45  | IF LABEL? :TOKE|
000001C0: 4E 20 41 53 53 49 47 4E  20 3A 54 4F 4B 45 4E 20  |N ASSIGN :TOKEN |
000001D0: 3A 44 4F 54 20 4F 50 20  53 59 4D 53 2E 4C 20 42  |:DOT OP SYMS.L B|
000001E0: 46 20 3A 4C 49 4E 45 20  46 49 52 53 54 20 42 46  |F :LINE FIRST BF|
000001F0: 20 3A 4C 49 4E 45 0D 20  49 46 20 4C 49 53 54 3F  | :LINE. IF LIST?|
00000200: 20 3A 54 4F 4B 45 4E 20  52 55 4E 20 3A 54 4F 4B  | :TOKEN RUN :TOK|
00000210: 45 4E 20 4F 50 20 30 0D  20 49 46 20 4E 55 4D 42  |EN OP 0. IF NUMB|
00000220: 45 52 3F 20 3A 54 4F 4B  45 4E 20 4F 50 20 31 0D  |ER? :TOKEN OP 1.|
00000230: 20 45 52 52 4F 52 20 3A  54 4F 4B 45 4E 20 5B 4E  | ERROR :TOKEN [N|
00000240: 4F 54 20 41 4E 20 49 4E  53 54 52 55 43 54 49 4F  |OT AN INSTRUCTIO|
00000250: 4E 5D 0D 45 4E 44 0D 0D  54 4F 20 41 53 53 49 47  |N].END..TO ASSIG|
00000260: 4E 20 3A 4C 41 42 45 4C  20 3A 54 48 49 4E 47 0D  |N :LABEL :THING.|
00000270: 20 4D 41 4B 45 20 22 4C  41 42 45 4C 20 42 4C 20  | MAKE "LABEL BL |
00000280: 3A 4C 41 42 45 4C 0D 20  49 46 20 54 48 49 4E 47  |:LABEL. IF THING|
00000290: 3F 20 3A 4C 41 42 45 4C  20 45 52 52 4F 52 20 3A  |? :LABEL ERROR :|
000002A0: 4C 41 42 45 4C 20 5B 41  4C 52 45 41 44 59 20 55  |LABEL [ALREADY U|
000002B0: 53 45 44 5D 0D 20 4D 41  4B 45 20 3A 4C 41 42 45  |SED]. MAKE :LABE|
000002C0: 4C 20 3A 44 4F 54 0D 20  4D 41 4B 45 20 22 4C 41  |L :DOT. MAKE "LA|
000002D0: 42 45 4C 53 20 46 50 55  54 20 3A 4C 41 42 45 4C  |BELS FPUT :LABEL|
000002E0: 20 3A 4C 41 42 45 4C 53  0D 45 4E 44 0D 0D 54 4F  | :LABELS.END..TO|
000002F0: 20 52 45 4C 49 4E 53 3F  20 3A 54 4F 4B 45 4E 0D  | RELINS? :TOKEN.|
00000300: 20 49 46 20 49 4E 53 3F  20 3A 54 4F 4B 45 4E 20  | IF INS? :TOKEN |
00000310: 4F 50 20 22 52 45 4C 20  3D 20 46 49 52 53 54 20  |OP "REL = FIRST |
00000320: 54 48 49 4E 47 20 3A 54  4F 4B 45 4E 0D 20 4F 50  |THING :TOKEN. OP|
00000330: 20 22 46 41 4C 53 45 0D  45 4E 44 0D 0D 54 4F 20  | "FALSE.END..TO |
00000340: 49 4E 53 3F 20 3A 54 4F  4B 45 4E 0D 20 49 46 20  |INS? :TOKEN. IF |
00000350: 54 48 49 4E 47 3F 20 3A  54 4F 4B 45 4E 20 4F 50  |THING? :TOKEN OP|
00000360: 20 4C 49 53 54 3F 20 54  48 49 4E 47 20 3A 54 4F  | LIST? THING :TO|
00000370: 4B 45 4E 0D 20 4F 50 20  22 46 41 4C 53 45 0D 45  |KEN. OP "FALSE.E|
00000380: 4E 44 0D 0D 54 4F 20 49  4D 50 49 4E 53 3F 20 3A  |ND..TO IMPINS? :|
00000390: 54 4F 4B 45 4E 0D 20 49  46 20 49 4E 53 3F 20 3A  |TOKEN. IF INS? :|
000003A0: 54 4F 4B 45 4E 20 4F 50  20 22 49 4D 50 20 3D 20  |TOKEN OP "IMP = |
000003B0: 46 49 52 53 54 20 54 48  49 4E 47 20 3A 54 4F 4B  |FIRST THING :TOK|
000003C0: 45 4E 0D 20 4F 50 20 22  46 41 4C 53 45 0D 45 4E  |EN. OP "FALSE.EN|
000003D0: 44 0D 0D 54 4F 20 41 4D  4F 44 45 31 20 3A 46 50  |D..TO AMODE1 :FP|
000003E0: 41 52 54 20 3A 4C 50 41  52 54 0D 20 49 46 20 3A  |ART :LPART. IF :|
000003F0: 46 50 41 52 54 20 3D 20  22 23 20 4F 50 20 4C 4F  |FPART = "# OP LO|
00000400: 4F 4B 55 50 20 42 46 20  3A 4C 50 41 52 54 20 3A  |OKUP BF :LPART :|
00000410: 49 4D 4D 53 0D 20 49 46  20 3A 46 50 41 52 54 20  |IMMS. IF :FPART |
00000420: 3D 20 22 21 20 4F 50 20  4C 4F 4F 4B 55 50 20 42  |= "! OP LOOKUP B|
00000430: 46 20 3A 4C 50 41 52 54  20 3A 5A 50 53 0D 20 49  |F :LPART :ZPS. I|
00000440: 46 20 3A 46 50 41 52 54  20 3D 20 22 28 20 4F 50  |F :FPART = "( OP|
00000450: 20 4C 4F 4F 4B 55 50 20  42 46 20 3A 4C 50 41 52  | LOOKUP BF :LPAR|
00000460: 54 20 3A 49 4E 44 49 52  53 0D 20 4F 50 20 4C 4F  |T :INDIRS. OP LO|
00000470: 4F 4B 55 50 20 3A 4C 50  41 52 54 20 3A 49 4E 44  |OKUP :LPART :IND|
00000480: 45 58 45 53 0D 45 4E 44  0D 0D 54 4F 20 4C 4F 4F  |EXES.END..TO LOO|
00000490: 4B 55 50 20 3A 54 48 49  4E 47 20 3A 50 4C 41 43  |KUP :THING :PLAC|
000004A0: 45 0D 20 49 46 20 3A 50  4C 41 43 45 20 3D 20 5B  |E. IF :PLACE = [|
000004B0: 5D 20 45 52 52 4F 52 20  3A 54 48 49 4E 47 20 5B  |] ERROR :THING [|
000004C0: 42 41 44 20 4D 4F 44 45  5D 0D 20 49 46 20 3A 54  |BAD MODE]. IF :T|
000004D0: 48 49 4E 47 20 3D 20 46  49 52 53 54 20 3A 50 4C  |HING = FIRST :PL|
000004E0: 41 43 45 20 4F 50 20 46  49 52 53 54 20 42 46 20  |ACE OP FIRST BF |
000004F0: 3A 50 4C 41 43 45 0D 20  4F 50 20 4C 4F 4F 4B 55  |:PLACE. OP LOOKU|
00000500: 50 20 3A 54 48 49 4E 47  20 42 46 20 42 46 20 3A  |P :THING BF BF :|
00000510: 50 4C 41 43 45 0D 45 4E  44 0D 0D 54 4F 20 48 49  |PLACE.END..TO HI|
00000520: 38 20 3A 4E 0D 20 4F 50  20 51 55 4F 54 49 45 4E  |8 :N. OP QUOTIEN|
00000530: 54 20 3A 4E 20 32 35 36  0D 45 4E 44 0D 0D 54 4F  |T :N 256.END..TO|
00000540: 20 4C 4F 38 20 3A 4E 0D  20 4F 50 20 42 49 54 41  | LO8 :N. OP BITA|
00000550: 4E 44 20 3A 4E 20 32 35  35 0D 45 4E 44 0D 0D 54  |ND :N 255.END..T|
00000560: 4F 20 49 4E 53 4C 45 4E  20 3A 4D 4F 44 45 0D 20  |O INSLEN :MODE. |
00000570: 4F 50 20 46 49 52 53 54  20 54 48 49 4E 47 20 3A  |OP FIRST THING :|
00000580: 4D 4F 44 45 0D 45 4E 44  0D 0D 54 4F 20 4F 50 43  |MODE.END..TO OPC|
00000590: 4F 44 45 20 3A 49 4E 53  20 3A 4D 4F 44 45 0D 20  |ODE :INS :MODE. |
000005A0: 4F 50 20 4C 4F 4F 4B 55  50 20 3A 4D 4F 44 45 20  |OP LOOKUP :MODE |
000005B0: 54 48 49 4E 47 20 3A 49  4E 53 0D 45 4E 44 0D 0D  |THING :INS.END..|
000005C0: 54 4F 20 49 4E 44 45 4E  54 20 3A 53 50 41 43 45  |TO INDENT :SPACE|
000005D0: 53 0D 20 49 46 20 3A 53  50 41 43 45 53 20 3C 20  |S. IF :SPACES < |
000005E0: 30 20 50 52 49 4E 54 31  20 22 27 20 27 20 53 54  |0 PRINT1 "' ' ST|
000005F0: 4F 50 0D 20 52 45 50 45  41 54 20 3A 53 50 41 43  |OP. REPEAT :SPAC|
00000600: 45 53 20 5B 50 52 49 4E  54 31 20 22 27 20 27 5D  |ES [PRINT1 "' ']|
00000610: 0D 45 4E 44 0D 0D 54 4F  20 41 4D 4F 44 45 20 3A  |.END..TO AMODE :|
00000620: 54 4F 4B 45 4E 20 3A 41  52 47 53 0D 20 49 46 20  |TOKEN :ARGS. IF |
00000630: 52 45 4C 49 4E 53 3F 20  3A 54 4F 4B 45 4E 20 4F  |RELINS? :TOKEN O|
00000640: 50 20 22 52 45 4C 0D 20  49 46 20 49 4D 50 49 4E  |P "REL. IF IMPIN|
00000650: 53 3F 20 3A 54 4F 4B 45  4E 20 4F 50 20 22 49 4D  |S? :TOKEN OP "IM|
00000660: 50 0D 20 49 46 20 3A 41  52 47 53 20 3D 20 5B 5D  |P. IF :ARGS = []|
00000670: 20 4F 50 20 22 49 4D 50  0D 20 49 46 20 3A 41 52  | OP "IMP. IF :AR|
00000680: 47 53 20 3D 20 5B 41 5D  20 4F 50 20 22 41 43 43  |GS = [A] OP "ACC|
00000690: 0D 20 49 46 20 42 46 20  3A 41 52 47 53 20 3D 20  |. IF BF :ARGS = |
000006A0: 5B 5D 20 4F 50 20 22 41  42 53 0D 20 4F 50 20 41  |[] OP "ABS. OP A|
000006B0: 4D 4F 44 45 31 20 46 49  52 53 54 20 3A 41 52 47  |MODE1 FIRST :ARG|
000006C0: 53 20 42 46 20 3A 41 52  47 53 0D 45 4E 44 0D 0D  |S BF :ARGS.END..|
000006D0: 54 4F 20 53 54 4F 52 45  32 20 3A 4C 49 4E 45 20  |TO STORE2 :LINE |
000006E0: 3A 4D 4F 44 45 0D 20 4C  4F 43 41 4C 20 22 42 59  |:MODE. LOCAL "BY|
000006F0: 54 45 20 4C 4F 43 41 4C  20 22 4C 45 4E 0D 20 4D  |TE LOCAL "LEN. M|
00000700: 41 4B 45 20 22 42 59 54  45 20 4F 50 43 4F 44 45  |AKE "BYTE OPCODE|
00000710: 20 46 49 52 53 54 20 3A  4C 49 4E 45 20 3A 4D 4F  | FIRST :LINE :MO|
00000720: 44 45 0D 20 4D 41 4B 45  20 22 4C 45 4E 20 49 4E  |DE. MAKE "LEN IN|
00000730: 53 4C 45 4E 20 3A 4D 4F  44 45 0D 20 45 4D 49 54  |SLEN :MODE. EMIT|
00000740: 20 3A 44 4F 54 20 3A 42  59 54 45 0D 20 49 46 20  | :DOT :BYTE. IF |
00000750: 3A 4C 45 4E 20 3D 20 31  20 4F 50 20 3A 4C 45 4E  |:LEN = 1 OP :LEN|
00000760: 0D 20 4D 41 4B 45 20 22  42 59 54 45 20 4F 50 45  |. MAKE "BYTE OPE|
00000770: 52 41 4E 44 20 3A 4D 4F  44 45 20 42 46 20 3A 4C  |RAND :MODE BF :L|
00000780: 49 4E 45 0D 20 49 46 20  3A 4C 45 4E 20 3D 20 32  |INE. IF :LEN = 2|
00000790: 20 45 4D 49 54 20 3A 44  4F 54 20 2B 20 31 20 3A  | EMIT :DOT + 1 :|
000007A0: 42 59 54 45 20 4F 50 20  3A 4C 45 4E 0D 20 45 4D  |BYTE OP :LEN. EM|
000007B0: 49 54 20 3A 44 4F 54 20  2B 20 31 20 4C 4F 38 20  |IT :DOT + 1 LO8 |
000007C0: 3A 42 59 54 45 0D 20 45  4D 49 54 20 3A 44 4F 54  |:BYTE. EMIT :DOT|
000007D0: 20 2B 20 32 20 48 49 38  20 3A 42 59 54 45 0D 20  | + 2 HI8 :BYTE. |
000007E0: 4F 50 20 3A 4C 45 4E 0D  45 4E 44 0D 0D 54 4F 20  |OP :LEN.END..TO |
000007F0: 45 4D 49 54 20 3A 44 4F  54 20 3A 42 59 54 45 0D  |EMIT :DOT :BYTE.|
00000800: 20 49 4E 44 45 4E 54 20  32 39 20 2D 20 46 49 52  | INDENT 29 - FIR|
00000810: 53 54 20 43 55 52 53 4F  52 50 4F 53 0D 20 28 20  |ST CURSORPOS. ( |
00000820: 50 52 49 4E 54 31 20 3A  44 4F 54 20 22 3D 20 3A  |PRINT1 :DOT "= :|
00000830: 42 59 54 45 20 29 0D 20  50 52 49 4E 54 20 5B 5D  |BYTE ). PRINT []|
00000840: 0D 20 2E 44 45 50 4F 53  49 54 20 3A 44 4F 54 20  |. .DEPOSIT :DOT |
00000850: 3A 42 59 54 45 0D 45 4E  44 0D 0D 54 4F 20 4C 41  |:BYTE.END..TO LA|
00000860: 42 45 4C 3F 20 3A 54 4F  4B 45 4E 0D 20 4F 50 20  |BEL? :TOKEN. OP |
00000870: 22 3A 20 3D 20 4C 41 53  54 20 3A 54 4F 4B 45 4E  |": = LAST :TOKEN|
00000880: 0D 45 4E 44 0D 0D 54 4F  20 53 54 4F 52 45 20 3A  |.END..TO STORE :|
00000890: 43 4F 44 45 20 3A 44 4F  54 0D 20 49 46 20 3A 43  |CODE :DOT. IF :C|
000008A0: 4F 44 45 20 3D 20 5B 5D  20 53 54 4F 50 0D 20 53  |ODE = [] STOP. S|
000008B0: 54 4F 52 45 31 20 46 49  52 53 54 20 3A 43 4F 44  |TORE1 FIRST :COD|
000008C0: 45 20 46 49 52 53 54 20  46 49 52 53 54 20 3A 43  |E FIRST FIRST :C|
000008D0: 4F 44 45 0D 45 4E 44 0D  0D 54 4F 20 53 54 4F 52  |ODE.END..TO STOR|
000008E0: 45 31 20 3A 4C 49 4E 45  20 3A 54 4F 4B 45 4E 0D  |E1 :LINE :TOKEN.|
000008F0: 20 50 52 49 4E 54 31 20  3A 4C 49 4E 45 0D 20 49  | PRINT1 :LINE. I|
00000900: 46 20 4C 49 53 54 3F 20  3A 54 4F 4B 45 4E 20 50  |F LIST? :TOKEN P|
00000910: 52 49 4E 54 20 5B 5D 20  53 54 4F 52 45 20 42 46  |RINT [] STORE BF|
00000920: 20 3A 43 4F 44 45 20 3A  44 4F 54 20 53 54 4F 50  | :CODE :DOT STOP|
00000930: 0D 20 49 46 20 4C 41 42  45 4C 3F 20 3A 54 4F 4B  |. IF LABEL? :TOK|
00000940: 45 4E 20 4D 41 4B 45 20  22 4C 49 4E 45 20 42 46  |EN MAKE "LINE BF|
00000950: 20 3A 4C 49 4E 45 20 4D  41 4B 45 20 22 54 4F 4B  | :LINE MAKE "TOK|
00000960: 45 4E 20 46 49 52 53 54  20 3A 4C 49 4E 45 0D 20  |EN FIRST :LINE. |
00000970: 49 46 20 4E 55 4D 42 45  52 3F 20 3A 54 4F 4B 45  |IF NUMBER? :TOKE|
00000980: 4E 20 45 4D 49 54 20 3A  44 4F 54 20 3A 54 4F 4B  |N EMIT :DOT :TOK|
00000990: 45 4E 20 53 54 4F 52 45  20 42 46 20 3A 43 4F 44  |EN STORE BF :COD|
000009A0: 45 20 3A 44 4F 54 20 2B  20 31 20 53 54 4F 50 0D  |E :DOT + 1 STOP.|
000009B0: 20 53 54 4F 52 45 20 42  46 20 3A 43 4F 44 45 20  | STORE BF :CODE |
000009C0: 3A 44 4F 54 20 2B 20 28  20 53 54 4F 52 45 32 20  |:DOT + ( STORE2 |
000009D0: 3A 4C 49 4E 45 20 28 20  41 4D 4F 44 45 20 3A 54  |:LINE ( AMODE :T|
000009E0: 4F 4B 45 4E 20 42 46 20  3A 4C 49 4E 45 20 29 20  |OKEN BF :LINE ) |
000009F0: 29 0D 45 4E 44 0D 0D 54  4F 20 4F 50 45 52 41 4E  |).END..TO OPERAN|
00000A00: 44 20 3A 4D 4F 44 45 20  3A 41 52 47 53 0D 20 49  |D :MODE :ARGS. I|
00000A10: 46 20 3A 4D 4F 44 45 20  3D 20 22 52 45 4C 20 4F  |F :MODE = "REL O|
00000A20: 50 20 52 45 4C 4F 50 45  52 0D 20 4D 41 4B 45 20  |P RELOPER. MAKE |
00000A30: 22 41 52 47 53 20 49 54  45 4D 20 28 20 4F 50 2E  |"ARGS ITEM ( OP.|
00000A40: 4C 4F 43 20 3A 4D 4F 44  45 20 29 20 3A 41 52 47  |LOC :MODE ) :ARG|
00000A50: 53 0D 20 49 46 20 4C 49  53 54 3F 20 3A 41 52 47  |S. IF LIST? :ARG|
00000A60: 53 20 4F 50 20 52 55 4E  20 3A 41 52 47 53 0D 20  |S OP RUN :ARGS. |
00000A70: 49 46 20 4E 55 4D 42 45  52 3F 20 3A 41 52 47 53  |IF NUMBER? :ARGS|
00000A80: 20 4F 50 20 3A 41 52 47  53 0D 20 49 46 20 46 49  | OP :ARGS. IF FI|
00000A90: 52 53 54 20 3A 41 52 47  53 20 3D 20 22 22 20 4F  |RST :ARGS = "" O|
00000AA0: 50 20 41 53 43 49 49 20  42 46 20 3A 41 52 47 53  |P ASCII BF :ARGS|
00000AB0: 0D 20 49 46 20 54 48 49  4E 47 3F 20 3A 41 52 47  |. IF THING? :ARG|
00000AC0: 53 20 4F 50 20 54 48 49  4E 47 20 3A 41 52 47 53  |S OP THING :ARGS|
00000AD0: 0D 20 45 52 52 4F 52 20  3A 41 52 47 53 20 5B 4E  |. ERROR :ARGS [N|
00000AE0: 4F 54 20 41 20 4C 41 42  45 4C 5D 0D 45 4E 44 0D  |OT A LABEL].END.|
00000AF0: 0D 54 4F 20 52 45 4C 4F  50 45 52 0D 20 4D 41 4B  |.TO RELOPER. MAK|
00000B00: 45 20 22 41 52 47 53 20  28 20 4F 50 45 52 41 4E  |E "ARGS ( OPERAN|
00000B10: 44 20 22 41 42 53 20 3A  41 52 47 53 20 29 20 2D  |D "ABS :ARGS ) -|
00000B20: 20 3A 44 4F 54 20 2D 20  32 0D 20 49 46 20 3A 41  | :DOT - 2. IF :A|
00000B30: 52 47 53 20 3C 20 30 20  4F 50 20 32 35 36 20 2B  |RGS < 0 OP 256 +|
00000B40: 20 3A 41 52 47 53 20 45  4C 53 45 20 4F 50 20 3A  | :ARGS ELSE OP :|
00000B50: 41 52 47 53 0D 45 4E 44  0D 0D 54 4F 20 4F 50 2E  |ARGS.END..TO OP.|
00000B60: 4C 4F 43 20 3A 4D 4F 44  45 0D 20 4F 50 20 46 49  |LOC :MODE. OP FI|
00000B70: 52 53 54 20 42 46 20 54  48 49 4E 47 20 3A 4D 4F  |RST BF THING :MO|
00000B80: 44 45 0D 45 4E 44 0D 0D  54 4F 20 45 52 52 4F 52  |DE.END..TO ERROR|
00000B90: 20 3A 41 20 3A 42 0D 20  28 20 50 52 49 4E 54 20  | :A :B. ( PRINT |
00000BA0: 5B 49 4E 20 4C 49 4E 45  5D 20 3A 4C 49 4E 45 20  |[IN LINE] :LINE |
00000BB0: 29 0D 20 28 20 50 52 49  4E 54 20 3A 41 20 3A 42  |). ( PRINT :A :B|
00000BC0: 20 29 0D 20 54 4F 50 4C  45 56 45 4C 0D 45 4E 44  | ). TOPLEVEL.END|
00000BD0: 0D 0D 54 4F 20 24 31 20  3A 57 4F 52 44 20 3A 56  |..TO $1 :WORD :V|
00000BE0: 41 4C 0D 20 49 46 20 3A  57 4F 52 44 20 3D 20 22  |AL. IF :WORD = "|
00000BF0: 20 4F 50 20 3A 56 41 4C  0D 20 49 46 20 4E 55 4D  | OP :VAL. IF NUM|
00000C00: 42 45 52 3F 20 46 49 52  53 54 20 3A 57 4F 52 44  |BER? FIRST :WORD|
00000C10: 20 4F 50 20 24 31 20 42  46 20 3A 57 4F 52 44 20  | OP $1 BF :WORD |
00000C20: 3A 56 41 4C 20 2A 20 3A  24 42 41 53 45 20 2B 20  |:VAL * :$BASE + |
00000C30: 46 49 52 53 54 20 3A 57  4F 52 44 0D 20 4C 4F 43  |FIRST :WORD. LOC|
00000C40: 41 4C 20 22 44 49 47 49  54 0D 20 4D 41 4B 45 20  |AL "DIGIT. MAKE |
00000C50: 22 44 49 47 49 54 20 28  20 41 53 43 49 49 20 46  |"DIGIT ( ASCII F|
00000C60: 49 52 53 54 20 3A 57 4F  52 44 20 29 20 2D 20 35  |IRST :WORD ) - 5|
00000C70: 35 0D 20 49 46 20 41 4E  59 4F 46 20 3A 44 49 47  |5. IF ANYOF :DIG|
00000C80: 49 54 20 3C 20 30 20 3A  44 49 47 49 54 20 2D 20  |IT < 0 :DIGIT - |
00000C90: 31 20 3E 20 3A 24 42 41  53 45 20 45 52 52 4F 52  |1 > :$BASE ERROR|
00000CA0: 20 46 49 52 53 54 20 3A  57 4F 52 44 20 5B 4E 4F  | FIRST :WORD [NO|
00000CB0: 54 20 41 20 44 49 47 49  54 5D 0D 20 4F 50 20 24  |T A DIGIT]. OP $|
00000CC0: 31 20 42 46 20 3A 57 4F  52 44 20 3A 56 41 4C 20  |1 BF :WORD :VAL |
00000CD0: 2A 20 3A 24 42 41 53 45  20 2B 20 3A 44 49 47 49  |* :$BASE + :DIGI|
00000CE0: 54 0D 45 4E 44 0D 0D 54  4F 20 24 20 3A 57 4F 52  |T.END..TO $ :WOR|
00000CF0: 44 0D 20 4F 50 20 24 31  20 3A 57 4F 52 44 20 30  |D. OP $1 :WORD 0|
00000D00: 0D 45 4E 44 0D 0D 54 4F  20 53 45 54 55 50 0D 20  |.END..TO SETUP. |
00000D10: 4D 41 4B 45 20 22 24 42  41 53 45 20 31 36 0D 20  |MAKE "$BASE 16. |
00000D20: 52 45 41 44 20 22 41 4D  4F 44 45 53 0D 20 52 45  |READ "AMODES. RE|
00000D30: 41 44 20 22 4F 50 43 4F  44 45 53 0D 20 4D 41 4B  |AD "OPCODES. MAK|
00000D40: 45 20 22 4F 52 47 20 24  20 22 43 34 30 0D 20 45  |E "ORG $ "C40. E|
00000D50: 52 4E 41 4D 45 20 22 53  54 41 52 54 55 50 0D 20  |RNAME "STARTUP. |
00000D60: 45 52 20 53 45 54 55 50  0D 45 4E 44 0D 0D 4D 41  |ER SETUP.END..MA|
00000D70: 4B 45 20 22 53 54 41 52  54 55 50 20 5B 53 45 54  |KE "STARTUP [SET|
00000D80: 55 50 5D 0D FF F7 00                              |UP]....         |
. TO ASSEMBLE :CODE. IF THING? "LABELS E
RNS :LABELS. MAKE "LABELS []. ND PR :COD
E. MAKE "CODE BF TEXT :CODE. SYMBOLS :CO
DE :ORG. STORE :CODE :ORG.END..TO ERNS :
NAMES. IF :NAMES = [] STOP. ERNAME FIRST
 :NAMES. ERNS BF :NAMES.END..TO SYMBOLS 
:CODE :DOT. IF :CODE = [] MAKE "END :DOT
 - 1 STOP. SYMBOLS BF :CODE :DOT + ( SYM
S.L FIRST :CODE FIRST FIRST :CODE ).END.
.TO SYMS.L :LINE :TOKEN. IF INS? :TOKEN 
OP INSLEN AMODE :TOKEN BF :LINE. IF LABE
L? :TOKEN ASSIGN :TOKEN :DOT OP SYMS.L B
F :LINE FIRST BF :LINE. IF LIST? :TOKEN 
RUN :TOKEN OP 0. IF NUMBER? :TOKEN OP 1.
 ERROR :TOKEN [NOT AN INSTRUCTION].END..
TO ASSIGN :LABEL :THING. MAKE "LABEL BL 
:LABEL. IF THING? :LABEL ERROR :LABEL [A
LREADY USED]. MAKE :LABEL :DOT. MAKE "LA
BELS FPUT :LABEL :LABELS.END..TO RELINS?
 :TOKEN. IF INS? :TOKEN OP "REL = FIRST 
THING :TOKEN. OP "FALSE.END..TO INS? :TO
KEN. IF THING? :TOKEN OP LIST? THING :TO
KEN. OP "FALSE.END..TO IMPINS? :TOKEN. I
F INS? :TOKEN OP "IMP = FIRST THING :TOK
EN. OP "FALSE.END..TO AMODE1 :FPART :LPA
RT. IF :FPART = "# OP LOOKUP BF :LPART :
IMMS. IF :FPART = "! OP LOOKUP BF :LPART
 :ZPS. IF :FPART = "( OP LOOKUP BF :LPAR
T :INDIRS. OP LOOKUP :LPART :INDEXES.END
..TO LOOKUP :THING :PLACE. IF :PLACE = [
] ERROR :THING [BAD MODE]. IF :THING = F
IRST :PLACE OP FIRST BF :PLACE. OP LOOKU
P :THING BF BF :PLACE.END..TO HI8 :N. OP
 QUOTIENT :N 256.END..TO LO8 :N. OP BITA
ND :N 255.END..TO INSLEN :MODE. OP FIRST
 THING :MODE.END..TO OPCODE :INS :MODE. 
OP LOOKUP :MODE THING :INS.END..TO INDEN
T :SPACES. IF :SPACES < 0 PRINT1 "' ' ST
OP. REPEAT :SPACES [PRINT1 "' '].END..TO
 AMODE :TOKEN :ARGS. IF RELINS? :TOKEN O
P "REL. IF IMPINS? :TOKEN OP "IMP. IF :A
RGS = [] OP "IMP. IF :ARGS = [A] OP "ACC
. IF BF :ARGS = [] OP "ABS. OP AMODE1 FI
RST :ARGS BF :ARGS.END..TO STORE2 :LINE 
:MODE. LOCAL "BYTE LOCAL "LEN. MAKE "BYT
E OPCODE FIRST :LINE :MODE. MAKE "LEN IN
SLEN :MODE. EMIT :DOT :BYTE. IF :LEN = 1
 OP :LEN. MAKE "BYTE OPERAND :MODE BF :L
INE. IF :LEN = 2 EMIT :DOT + 1 :BYTE OP 
:LEN. EMIT :DOT + 1 LO8 :BYTE. EMIT :DOT
 + 2 HI8 :BYTE. OP :LEN.END..TO EMIT :DO
T :BYTE. INDENT 29 - FIRST CURSORPOS. ( 
PRINT1 :DOT "= :BYTE ). PRINT []. .DEPOS
IT :DOT :BYTE.END..TO LABEL? :TOKEN. OP 
": = LAST :TOKEN.END..TO STORE :CODE :DO
T. IF :CODE = [] STOP. STORE1 FIRST :COD
E FIRST FIRST :CODE.END..TO STORE1 :LINE
 :TOKEN. PRINT1 :LINE. IF LIST? :TOKEN P
RINT [] STORE BF :CODE :DOT STOP. IF LAB
EL? :TOKEN MAKE "LINE BF :LINE MAKE "TOK
EN FIRST :LINE. IF NUMBER? :TOKEN EMIT :
DOT :TOKEN STORE BF :CODE :DOT + 1 STOP.
 STORE BF :CODE :DOT + ( STORE2 :LINE ( 
AMODE :TOKEN BF :LINE ) ).END..TO OPERAN
D :MODE :ARGS. IF :MODE = "REL OP RELOPE
R. MAKE "ARGS ITEM ( OP.LOC :MODE ) :ARG
S. IF LIST? :ARGS OP RUN :ARGS. IF NUMBE
R? :ARGS OP :ARGS. IF FIRST :ARGS = "" O
P ASCII BF :ARGS. IF THING? :ARGS OP THI
NG :ARGS. ERROR :ARGS [NOT A LABEL].END.
.TO RELOPER. MAKE "ARGS ( OPERAND "ABS :
ARGS ) - :DOT - 2. IF :ARGS < 0 OP 256 +
 :ARGS ELSE OP :ARGS.END..TO OP.LOC :MOD
E. OP FIRST BF THING :MODE.END..TO ERROR
 :A :B. ( PRINT [IN LINE] :LINE ). ( PRI
NT :A :B ). TOPLEVEL.END..TO $1 :WORD :V
AL. IF :WORD = " OP :VAL. IF NUMBER? FIR
ST :WORD OP $1 BF :WORD :VAL * :$BASE + 
FIRST :WORD. LOCAL "DIGIT. MAKE "DIGIT (
 ASCII FIRST :WORD ) - 55. IF ANYOF :DIG
IT < 0 :DIGIT - 1 > :$BASE ERROR FIRST :
WORD [NOT A DIGIT]. OP $1 BF :WORD :VAL 
* :$BASE + :DIGIT.END..TO $ :WORD. OP $1
 :WORD 0.END..TO SETUP. MAKE "$BASE 16. 
READ "AMODES. READ "OPCODES. MAKE "ORG $
 "C40. ERNAME "STARTUP. ER SETUP.END..MA
KE "STARTUP [SETUP]....
C64 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL