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 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL