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

ASSEMBLER.LOGO

FILE INFORMATION

FILENAME(S): ASSEMBLER.LOGO

FILE TYPE(S): PRG

FILE SIZE: 3.2K

FIRST SEEN: 2025-11-02 16:24:03

APPEARS ON: 1 disk(s)

FILE HASH

e3fe9d5f6254d4544c93a26ab8bbb7c70f6e2ca9ad48beb07aaf63687958638f

FOUND ON DISKS (1 DISKS)

DISK TITLE FILENAME FILE TYPE COLLECTION TRACK SECTOR ACTIONS
RBEITSDISK ASSEMBLER.LOGO PRG Treasure Chest - Max 11 10 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 41 4D 4F 44 45 53  0D 20 52 45 41 44 20 22  | "AMODES. READ "|
00000030: 4F 50 43 4F 44 45 53 0D  20 4D 41 4B 45 20 22 4F  |OPCODES. MAKE "O|
00000040: 52 47 20 24 20 22 43 34  30 0D 20 45 52 20 53 45  |RG $ "C40. ER SE|
00000050: 54 55 50 0D 45 4E 44 0D  0D 54 4F 20 24 20 3A 57  |TUP.END..TO $ :W|
00000060: 4F 52 44 0D 20 4F 50 20  24 31 20 3A 57 4F 52 44  |ORD. OP $1 :WORD|
00000070: 20 30 0D 45 4E 44 0D 0D  54 4F 20 24 31 20 3A 57  | 0.END..TO $1 :W|
00000080: 4F 52 44 20 3A 56 41 4C  0D 20 49 46 20 3A 57 4F  |ORD :VAL. IF :WO|
00000090: 52 44 20 3D 20 22 20 4F  50 20 3A 56 41 4C 0D 20  |RD = " OP :VAL. |
000000A0: 49 46 20 4E 55 4D 42 45  52 3F 20 46 49 52 53 54  |IF NUMBER? FIRST|
000000B0: 20 3A 57 4F 52 44 20 4F  50 20 24 31 20 42 46 20  | :WORD OP $1 BF |
000000C0: 3A 57 4F 52 44 20 3A 56  41 4C 20 2A 20 3A 24 42  |:WORD :VAL * :$B|
000000D0: 41 53 45 20 2B 20 46 49  52 53 54 20 3A 57 4F 52  |ASE + FIRST :WOR|
000000E0: 44 0D 20 4C 4F 43 41 4C  20 22 44 49 47 49 54 0D  |D. LOCAL "DIGIT.|
000000F0: 20 4D 41 4B 45 20 22 44  49 47 49 54 20 28 20 41  | MAKE "DIGIT ( A|
00000100: 53 43 49 49 20 46 49 52  53 54 20 3A 57 4F 52 44  |SCII FIRST :WORD|
00000110: 20 29 20 2D 20 35 35 0D  20 49 46 20 41 4E 59 4F  | ) - 55. IF ANYO|
00000120: 46 20 3A 44 49 47 49 54  20 3C 20 30 20 3A 44 49  |F :DIGIT < 0 :DI|
00000130: 47 49 54 20 2D 20 31 20  3E 20 3A 24 42 41 53 45  |GIT - 1 > :$BASE|
00000140: 20 45 52 52 4F 52 20 46  49 52 53 54 20 3A 57 4F  | ERROR FIRST :WO|
00000150: 52 44 20 5B 4E 4F 54 20  41 20 44 49 47 49 54 5D  |RD [NOT A DIGIT]|
00000160: 0D 20 4F 50 20 24 31 20  42 46 20 3A 57 4F 52 44  |. OP $1 BF :WORD|
00000170: 20 3A 56 41 4C 20 2A 20  3A 24 42 41 53 45 20 2B  | :VAL * :$BASE +|
00000180: 20 3A 44 49 47 49 54 0D  45 4E 44 0D 0D 54 4F 20  | :DIGIT.END..TO |
00000190: 4F 50 2E 4C 4F 43 20 3A  4D 4F 44 45 0D 20 4F 50  |OP.LOC :MODE. OP|
000001A0: 20 46 49 52 53 54 20 42  46 20 54 48 49 4E 47 20  | FIRST BF THING |
000001B0: 3A 4D 4F 44 45 0D 45 4E  44 0D 0D 54 4F 20 52 45  |:MODE.END..TO RE|
000001C0: 4C 4F 50 45 52 0D 20 4D  41 4B 45 20 22 41 52 47  |LOPER. MAKE "ARG|
000001D0: 53 20 28 20 4F 50 45 52  41 4E 44 20 22 41 42 53  |S ( OPERAND "ABS|
000001E0: 20 3A 41 52 47 53 20 29  20 2D 20 3A 44 4F 54 20  | :ARGS ) - :DOT |
000001F0: 2D 20 32 0D 20 49 46 20  3A 41 52 47 53 20 3C 20  |- 2. IF :ARGS < |
00000200: 30 20 4F 50 20 32 35 36  20 2B 20 3A 41 52 47 53  |0 OP 256 + :ARGS|
00000210: 20 45 4C 53 45 20 4F 50  20 3A 41 52 47 53 0D 45  | ELSE OP :ARGS.E|
00000220: 4E 44 0D 0D 54 4F 20 53  54 4F 52 45 31 20 3A 4C  |ND..TO STORE1 :L|
00000230: 49 4E 45 20 3A 54 4F 4B  45 4E 0D 20 50 52 49 4E  |INE :TOKEN. PRIN|
00000240: 54 31 20 3A 4C 49 4E 45  0D 20 49 46 20 4C 49 53  |T1 :LINE. IF LIS|
00000250: 54 3F 20 3A 54 4F 4B 45  4E 20 50 52 49 4E 54 20  |T? :TOKEN PRINT |
00000260: 5B 5D 20 53 54 4F 52 45  20 42 46 20 3A 43 4F 44  |[] STORE BF :COD|
00000270: 45 20 3A 44 4F 54 20 53  54 4F 50 0D 20 49 46 20  |E :DOT STOP. IF |
00000280: 4C 41 42 45 4C 3F 20 3A  54 4F 4B 45 4E 20 4D 41  |LABEL? :TOKEN MA|
00000290: 4B 45 20 22 4C 49 4E 45  20 42 46 20 3A 4C 49 4E  |KE "LINE BF :LIN|
000002A0: 45 20 4D 41 4B 45 20 22  54 4F 4B 45 4E 20 46 49  |E MAKE "TOKEN FI|
000002B0: 52 53 54 20 3A 4C 49 4E  45 0D 20 49 46 20 4E 55  |RST :LINE. IF NU|
000002C0: 4D 42 45 52 3F 20 3A 54  4F 4B 45 4E 20 45 4D 49  |MBER? :TOKEN EMI|
000002D0: 54 20 3A 44 4F 54 20 3A  54 4F 4B 45 4E 20 53 54  |T :DOT :TOKEN ST|
000002E0: 4F 52 45 20 42 46 20 3A  43 4F 44 45 20 3A 44 4F  |ORE BF :CODE :DO|
000002F0: 54 20 2B 20 31 20 53 54  4F 50 0D 20 53 54 4F 52  |T + 1 STOP. STOR|
00000300: 45 20 42 46 20 3A 43 4F  44 45 20 3A 44 4F 54 20  |E BF :CODE :DOT |
00000310: 2B 20 28 20 53 54 4F 52  45 32 20 3A 4C 49 4E 45  |+ ( STORE2 :LINE|
00000320: 20 28 20 41 4D 4F 44 45  20 3A 54 4F 4B 45 4E 20  | ( AMODE :TOKEN |
00000330: 42 46 20 3A 4C 49 4E 45  20 29 20 29 0D 45 4E 44  |BF :LINE ) ).END|
00000340: 0D 0D 54 4F 20 4F 50 45  52 41 4E 44 20 3A 4D 4F  |..TO OPERAND :MO|
00000350: 44 45 20 3A 41 52 47 53  0D 20 49 46 20 3A 4D 4F  |DE :ARGS. IF :MO|
00000360: 44 45 20 3D 20 22 52 45  4C 20 4F 50 20 52 45 4C  |DE = "REL OP REL|
00000370: 4F 50 45 52 0D 20 4D 41  4B 45 20 22 41 52 47 53  |OPER. MAKE "ARGS|
00000380: 20 49 54 45 4D 20 28 20  4F 50 2E 4C 4F 43 20 3A  | ITEM ( OP.LOC :|
00000390: 4D 4F 44 45 20 29 20 3A  41 52 47 53 0D 20 49 46  |MODE ) :ARGS. IF|
000003A0: 20 4C 49 53 54 3F 20 3A  41 52 47 53 20 4F 50 20  | LIST? :ARGS OP |
000003B0: 52 55 4E 20 3A 41 52 47  53 0D 20 49 46 20 4E 55  |RUN :ARGS. IF NU|
000003C0: 4D 42 45 52 3F 20 3A 41  52 47 53 20 4F 50 20 3A  |MBER? :ARGS OP :|
000003D0: 41 52 47 53 0D 20 49 46  20 46 49 52 53 54 20 3A  |ARGS. IF FIRST :|
000003E0: 41 52 47 53 20 3D 20 22  22 20 4F 50 20 41 53 43  |ARGS = "" OP ASC|
000003F0: 49 49 20 42 46 20 3A 41  52 47 53 0D 20 49 46 20  |II BF :ARGS. IF |
00000400: 54 48 49 4E 47 3F 20 3A  41 52 47 53 20 4F 50 20  |THING? :ARGS OP |
00000410: 54 48 49 4E 47 20 3A 41  52 47 53 0D 20 45 52 52  |THING :ARGS. ERR|
00000420: 4F 52 20 3A 41 52 47 53  20 5B 4E 4F 54 20 41 20  |OR :ARGS [NOT A |
00000430: 4C 41 42 45 4C 5D 0D 45  4E 44 0D 0D 54 4F 20 45  |LABEL].END..TO E|
00000440: 4D 49 54 20 3A 44 4F 54  20 3A 42 59 54 45 0D 20  |MIT :DOT :BYTE. |
00000450: 43 55 52 53 4F 52 20 32  39 20 28 20 4C 41 53 54  |CURSOR 29 ( LAST|
00000460: 20 43 55 52 53 4F 52 50  4F 53 20 29 0D 20 28 20  | CURSORPOS ). ( |
00000470: 50 52 49 4E 54 31 20 3A  44 4F 54 20 22 3D 20 3A  |PRINT1 :DOT "= :|
00000480: 42 59 54 45 20 29 0D 20  50 52 49 4E 54 20 5B 5D  |BYTE ). PRINT []|
00000490: 0D 20 2E 44 45 50 4F 53  49 54 20 3A 44 4F 54 20  |. .DEPOSIT :DOT |
000004A0: 3A 42 59 54 45 0D 45 4E  44 0D 0D 54 4F 20 53 54  |:BYTE.END..TO ST|
000004B0: 4F 52 45 32 20 3A 4C 49  4E 45 20 3A 4D 4F 44 45  |ORE2 :LINE :MODE|
000004C0: 0D 20 4C 4F 43 41 4C 20  22 42 59 54 45 20 4C 4F  |. LOCAL "BYTE LO|
000004D0: 43 41 4C 20 22 4C 45 4E  0D 20 4D 41 4B 45 20 22  |CAL "LEN. MAKE "|
000004E0: 42 59 54 45 20 4F 50 43  4F 44 45 20 46 49 52 53  |BYTE OPCODE FIRS|
000004F0: 54 20 3A 4C 49 4E 45 20  3A 4D 4F 44 45 0D 20 4D  |T :LINE :MODE. M|
00000500: 41 4B 45 20 22 4C 45 4E  20 49 4E 53 4C 45 4E 20  |AKE "LEN INSLEN |
00000510: 3A 4D 4F 44 45 0D 20 45  4D 49 54 20 3A 44 4F 54  |:MODE. EMIT :DOT|
00000520: 20 3A 42 59 54 45 0D 20  49 46 20 3A 4C 45 4E 20  | :BYTE. IF :LEN |
00000530: 3D 20 31 20 50 52 49 4E  54 20 5B 5D 20 4F 50 20  |= 1 PRINT [] OP |
00000540: 3A 4C 45 4E 0D 20 4D 41  4B 45 20 22 42 59 54 45  |:LEN. MAKE "BYTE|
00000550: 20 4F 50 45 52 41 4E 44  20 3A 4D 4F 44 45 20 42  | OPERAND :MODE B|
00000560: 46 20 3A 4C 49 4E 45 0D  20 49 46 20 3A 4C 45 4E  |F :LINE. IF :LEN|
00000570: 20 3D 20 32 20 45 4D 49  54 20 3A 44 4F 54 20 2B  | = 2 EMIT :DOT +|
00000580: 20 31 20 3A 42 59 54 45  20 4F 50 20 3A 4C 45 4E  | 1 :BYTE OP :LEN|
00000590: 0D 20 45 4D 49 54 20 3A  44 4F 54 20 2B 20 31 20  |. EMIT :DOT + 1 |
000005A0: 4C 4F 38 20 3A 42 59 54  45 0D 20 45 4D 49 54 20  |LO8 :BYTE. EMIT |
000005B0: 3A 44 4F 54 20 2B 20 32  20 48 49 38 20 3A 42 59  |:DOT + 2 HI8 :BY|
000005C0: 54 45 0D 20 4F 50 20 3A  4C 45 4E 0D 45 4E 44 0D  |TE. OP :LEN.END.|
000005D0: 0D 54 4F 20 4F 50 43 4F  44 45 20 3A 49 4E 53 20  |.TO OPCODE :INS |
000005E0: 3A 4D 4F 44 45 0D 20 4F  50 20 4C 4F 4F 4B 55 50  |:MODE. OP LOOKUP|
000005F0: 20 3A 4D 4F 44 45 20 54  48 49 4E 47 20 3A 49 4E  | :MODE THING :IN|
00000600: 53 0D 45 4E 44 0D 0D 54  4F 20 4C 4F 38 20 3A 4E  |S.END..TO LO8 :N|
00000610: 0D 20 4F 50 20 52 45 4D  41 49 4E 44 45 52 20 3A  |. OP REMAINDER :|
00000620: 4E 20 32 35 36 0D 45 4E  44 0D 0D 54 4F 20 48 49  |N 256.END..TO HI|
00000630: 38 20 3A 4E 0D 20 4F 50  20 51 55 4F 54 49 45 4E  |8 :N. OP QUOTIEN|
00000640: 54 20 3A 4E 20 32 35 36  0D 45 4E 44 0D 0D 54 4F  |T :N 256.END..TO|
00000650: 20 4C 4F 4F 4B 55 50 20  3A 54 48 49 4E 47 20 3A  | LOOKUP :THING :|
00000660: 50 4C 41 43 45 0D 20 49  46 20 3A 50 4C 41 43 45  |PLACE. IF :PLACE|
00000670: 20 3D 20 5B 5D 20 45 52  52 4F 52 20 3A 54 48 49  | = [] ERROR :THI|
00000680: 4E 47 20 5B 42 41 44 20  4D 4F 44 45 5D 0D 20 49  |NG [BAD MODE]. I|
00000690: 46 20 3A 54 48 49 4E 47  20 3D 20 46 49 52 53 54  |F :THING = FIRST|
000006A0: 20 3A 50 4C 41 43 45 20  4F 50 20 46 49 52 53 54  | :PLACE OP FIRST|
000006B0: 20 42 46 20 3A 50 4C 41  43 45 0D 20 4F 50 20 4C  | BF :PLACE. OP L|
000006C0: 4F 4F 4B 55 50 20 3A 54  48 49 4E 47 20 42 46 20  |OOKUP :THING BF |
000006D0: 42 46 20 3A 50 4C 41 43  45 0D 45 4E 44 0D 0D 54  |BF :PLACE.END..T|
000006E0: 4F 20 41 4D 4F 44 45 31  20 3A 46 50 41 52 54 20  |O AMODE1 :FPART |
000006F0: 3A 4C 50 41 52 54 0D 20  49 46 20 3A 46 50 41 52  |:LPART. IF :FPAR|
00000700: 54 20 3D 20 22 23 20 4F  50 20 4C 4F 4F 4B 55 50  |T = "# OP LOOKUP|
00000710: 20 42 46 20 3A 4C 50 41  52 54 20 3A 49 4D 4D 53  | BF :LPART :IMMS|
00000720: 0D 20 49 46 20 3A 46 50  41 52 54 20 3D 20 22 21  |. IF :FPART = "!|
00000730: 20 4F 50 20 4C 4F 4F 4B  55 50 20 42 46 20 3A 4C  | OP LOOKUP BF :L|
00000740: 50 41 52 54 20 3A 5A 50  53 0D 20 49 46 20 3A 46  |PART :ZPS. IF :F|
00000750: 50 41 52 54 20 3D 20 22  28 20 4F 50 20 4C 4F 4F  |PART = "( OP LOO|
00000760: 4B 55 50 20 42 46 20 3A  4C 50 41 52 54 20 3A 49  |KUP BF :LPART :I|
00000770: 4E 44 49 52 53 0D 20 4F  50 20 4C 4F 4F 4B 55 50  |NDIRS. OP LOOKUP|
00000780: 20 3A 4C 50 41 52 54 20  3A 49 4E 44 45 58 45 53  | :LPART :INDEXES|
00000790: 0D 45 4E 44 0D 0D 54 4F  20 49 4D 50 49 4E 53 3F  |.END..TO IMPINS?|
000007A0: 20 3A 54 4F 4B 45 4E 0D  20 49 46 20 49 4E 53 3F  | :TOKEN. IF INS?|
000007B0: 20 3A 54 4F 4B 45 4E 20  4F 50 20 22 49 4D 50 20  | :TOKEN OP "IMP |
000007C0: 3D 20 46 49 52 53 54 20  54 48 49 4E 47 20 3A 54  |= FIRST THING :T|
000007D0: 4F 4B 45 4E 0D 20 4F 50  20 22 46 41 4C 53 45 0D  |OKEN. OP "FALSE.|
000007E0: 45 4E 44 0D 0D 54 4F 20  52 45 4C 49 4E 53 3F 20  |END..TO RELINS? |
000007F0: 3A 54 4F 4B 45 4E 0D 20  49 46 20 49 4E 53 3F 20  |:TOKEN. IF INS? |
00000800: 3A 54 4F 4B 45 4E 20 4F  50 20 22 52 45 4C 20 3D  |:TOKEN OP "REL =|
00000810: 20 46 49 52 53 54 20 54  48 49 4E 47 20 3A 54 4F  | FIRST THING :TO|
00000820: 4B 45 4E 0D 20 4F 50 20  22 46 41 4C 53 45 0D 45  |KEN. OP "FALSE.E|
00000830: 4E 44 0D 0D 54 4F 20 45  52 52 4F 52 20 3A 41 20  |ND..TO ERROR :A |
00000840: 3A 42 0D 20 28 20 50 52  49 4E 54 20 3A 41 20 3A  |:B. ( PRINT :A :|
00000850: 42 20 29 0D 20 54 4F 50  4C 45 56 45 4C 0D 45 4E  |B ). TOPLEVEL.EN|
00000860: 44 0D 0D 54 4F 20 41 53  53 49 47 4E 20 3A 4C 41  |D..TO ASSIGN :LA|
00000870: 42 45 4C 20 3A 54 48 49  4E 47 0D 20 4D 41 4B 45  |BEL :THING. MAKE|
00000880: 20 22 4C 41 42 45 4C 20  42 4C 20 3A 4C 41 42 45  | "LABEL BL :LABE|
00000890: 4C 0D 20 49 46 20 54 48  49 4E 47 3F 20 3A 4C 41  |L. IF THING? :LA|
000008A0: 42 45 4C 20 45 52 52 4F  52 20 3A 4C 41 42 45 4C  |BEL ERROR :LABEL|
000008B0: 20 5B 41 4C 52 45 41 44  59 20 55 53 45 44 5D 0D  | [ALREADY USED].|
000008C0: 20 4D 41 4B 45 20 3A 4C  41 42 45 4C 20 3A 44 4F  | MAKE :LABEL :DO|
000008D0: 54 0D 20 4D 41 4B 45 20  22 4C 41 42 45 4C 53 20  |T. MAKE "LABELS |
000008E0: 46 50 55 54 20 3A 4C 41  42 45 4C 20 3A 4C 41 42  |FPUT :LABEL :LAB|
000008F0: 45 4C 53 0D 45 4E 44 0D  0D 54 4F 20 4C 41 42 45  |ELS.END..TO LABE|
00000900: 4C 3F 20 3A 54 4F 4B 45  4E 0D 20 4F 50 20 22 3A  |L? :TOKEN. OP ":|
00000910: 20 3D 20 4C 41 53 54 20  3A 54 4F 4B 45 4E 0D 45  | = LAST :TOKEN.E|
00000920: 4E 44 0D 0D 54 4F 20 41  4D 4F 44 45 20 3A 54 4F  |ND..TO AMODE :TO|
00000930: 4B 45 4E 20 3A 41 52 47  53 0D 20 49 46 20 52 45  |KEN :ARGS. IF RE|
00000940: 4C 49 4E 53 3F 20 3A 54  4F 4B 45 4E 20 4F 50 20  |LINS? :TOKEN OP |
00000950: 22 52 45 4C 0D 20 49 46  20 49 4D 50 49 4E 53 3F  |"REL. IF IMPINS?|
00000960: 20 3A 54 4F 4B 45 4E 20  4F 50 20 22 49 4D 50 0D  | :TOKEN OP "IMP.|
00000970: 20 49 46 20 3A 41 52 47  53 20 3D 20 5B 5D 20 4F  | IF :ARGS = [] O|
00000980: 50 20 22 49 4D 50 0D 20  49 46 20 3A 41 52 47 53  |P "IMP. IF :ARGS|
00000990: 20 3D 20 5B 41 5D 20 4F  50 20 22 41 43 43 0D 20  | = [A] OP "ACC. |
000009A0: 49 46 20 42 46 20 3A 41  52 47 53 20 3D 20 5B 5D  |IF BF :ARGS = []|
000009B0: 20 4F 50 20 22 41 42 53  0D 20 4F 50 20 41 4D 4F  | OP "ABS. OP AMO|
000009C0: 44 45 31 20 46 49 52 53  54 20 3A 41 52 47 53 20  |DE1 FIRST :ARGS |
000009D0: 42 46 20 3A 41 52 47 53  0D 45 4E 44 0D 0D 54 4F  |BF :ARGS.END..TO|
000009E0: 20 49 4E 53 4C 45 4E 20  3A 4D 4F 44 45 0D 20 4F  | INSLEN :MODE. O|
000009F0: 50 20 46 49 52 53 54 20  54 48 49 4E 47 20 3A 4D  |P FIRST THING :M|
00000A00: 4F 44 45 0D 45 4E 44 0D  0D 54 4F 20 49 4E 53 3F  |ODE.END..TO INS?|
00000A10: 20 3A 54 4F 4B 45 4E 0D  20 49 46 20 54 48 49 4E  | :TOKEN. IF THIN|
00000A20: 47 3F 20 3A 54 4F 4B 45  4E 20 4F 50 20 4C 49 53  |G? :TOKEN OP LIS|
00000A30: 54 3F 20 54 48 49 4E 47  20 3A 54 4F 4B 45 4E 0D  |T? THING :TOKEN.|
00000A40: 20 4F 50 20 22 46 41 4C  53 45 0D 45 4E 44 0D 0D  | OP "FALSE.END..|
00000A50: 54 4F 20 53 59 4D 53 2E  4C 20 3A 4C 49 4E 45 20  |TO SYMS.L :LINE |
00000A60: 3A 54 4F 4B 45 4E 0D 20  49 46 20 49 4E 53 3F 20  |:TOKEN. IF INS? |
00000A70: 3A 54 4F 4B 45 4E 20 4F  50 20 49 4E 53 4C 45 4E  |:TOKEN OP INSLEN|
00000A80: 20 41 4D 4F 44 45 20 3A  54 4F 4B 45 4E 20 42 46  | AMODE :TOKEN BF|
00000A90: 20 3A 4C 49 4E 45 0D 20  49 46 20 4C 41 42 45 4C  | :LINE. IF LABEL|
00000AA0: 3F 20 3A 54 4F 4B 45 4E  20 41 53 53 49 47 4E 20  |? :TOKEN ASSIGN |
00000AB0: 3A 54 4F 4B 45 4E 20 3A  44 4F 54 20 4F 50 20 53  |:TOKEN :DOT OP S|
00000AC0: 59 4D 53 2E 4C 20 42 46  20 3A 4C 49 4E 45 20 46  |YMS.L BF :LINE F|
00000AD0: 49 52 53 54 20 42 46 20  3A 4C 49 4E 45 0D 20 49  |IRST BF :LINE. I|
00000AE0: 46 20 4C 49 53 54 3F 20  3A 54 4F 4B 45 4E 20 52  |F LIST? :TOKEN R|
00000AF0: 55 4E 20 3A 54 4F 4B 45  4E 20 4F 50 20 30 0D 20  |UN :TOKEN OP 0. |
00000B00: 49 46 20 4E 55 4D 42 45  52 3F 20 3A 54 4F 4B 45  |IF NUMBER? :TOKE|
00000B10: 4E 20 4F 50 20 31 0D 20  45 52 52 4F 52 20 3A 54  |N OP 1. ERROR :T|
00000B20: 4F 4B 45 4E 20 5B 4E 4F  54 20 41 4E 20 49 4E 53  |OKEN [NOT AN INS|
00000B30: 54 52 55 43 54 49 4F 4E  5D 0D 45 4E 44 0D 0D 54  |TRUCTION].END..T|
00000B40: 4F 20 53 54 4F 52 45 20  3A 43 4F 44 45 20 3A 44  |O STORE :CODE :D|
00000B50: 4F 54 0D 20 49 46 20 3A  43 4F 44 45 20 3D 20 5B  |OT. IF :CODE = [|
00000B60: 5D 20 53 54 4F 50 0D 20  53 54 4F 52 45 31 20 46  |] STOP. STORE1 F|
00000B70: 49 52 53 54 20 3A 43 4F  44 45 20 46 49 52 53 54  |IRST :CODE FIRST|
00000B80: 20 46 49 52 53 54 20 3A  43 4F 44 45 0D 45 4E 44  | FIRST :CODE.END|
00000B90: 0D 0D 54 4F 20 53 59 4D  42 4F 4C 53 20 3A 43 4F  |..TO SYMBOLS :CO|
00000BA0: 44 45 20 3A 44 4F 54 0D  20 49 46 20 3A 43 4F 44  |DE :DOT. IF :COD|
00000BB0: 45 20 3D 20 5B 5D 20 53  54 4F 50 0D 20 53 59 4D  |E = [] STOP. SYM|
00000BC0: 42 4F 4C 53 20 42 46 20  3A 43 4F 44 45 20 3A 44  |BOLS BF :CODE :D|
00000BD0: 4F 54 20 2B 20 28 20 53  59 4D 53 2E 4C 20 46 49  |OT + ( SYMS.L FI|
00000BE0: 52 53 54 20 3A 43 4F 44  45 20 46 49 52 53 54 20  |RST :CODE FIRST |
00000BF0: 46 49 52 53 54 20 3A 43  4F 44 45 20 29 0D 45 4E  |FIRST :CODE ).EN|
00000C00: 44 0D 0D 54 4F 20 45 52  4E 53 20 3A 4E 41 4D 45  |D..TO ERNS :NAME|
00000C10: 53 0D 20 49 46 20 3A 4E  41 4D 45 53 20 3D 20 5B  |S. IF :NAMES = [|
00000C20: 5D 20 53 54 4F 50 0D 20  45 52 4E 41 4D 45 20 46  |] STOP. ERNAME F|
00000C30: 49 52 53 54 20 3A 4E 41  4D 45 53 0D 20 45 52 4E  |IRST :NAMES. ERN|
00000C40: 53 20 42 46 20 3A 4E 41  4D 45 53 0D 45 4E 44 0D  |S BF :NAMES.END.|
00000C50: 0D 54 4F 20 41 53 53 45  4D 42 4C 45 20 3A 43 4F  |.TO ASSEMBLE :CO|
00000C60: 44 45 0D 20 49 46 20 54  48 49 4E 47 3F 20 22 4C  |DE. IF THING? "L|
00000C70: 41 42 45 4C 53 20 45 52  4E 53 20 3A 4C 41 42 45  |ABELS ERNS :LABE|
00000C80: 4C 53 0D 20 4D 41 4B 45  20 22 4C 41 42 45 4C 53  |LS. MAKE "LABELS|
00000C90: 20 5B 5D 0D 20 4E 44 20  50 52 20 3A 43 4F 44 45  | []. ND PR :CODE|
00000CA0: 0D 20 4D 41 4B 45 20 22  43 4F 44 45 20 42 46 20  |. MAKE "CODE BF |
00000CB0: 54 45 58 54 20 3A 43 4F  44 45 0D 20 53 59 4D 42  |TEXT :CODE. SYMB|
00000CC0: 4F 4C 53 20 3A 43 4F 44  45 20 3A 4F 52 47 0D 20  |OLS :CODE :ORG. |
00000CD0: 53 54 4F 52 45 20 3A 43  4F 44 45 20 3A 4F 52 47  |STORE :CODE :ORG|
00000CE0: 0D 45 4E 44 0D 0D 4D 41  4B 45 20 22 53 54 41 52  |.END..MAKE "STAR|
00000CF0: 54 55 50 20 5B 53 45 54  55 50 5D 0D 50 00        |TUP [SETUP].P.  |
. TO SETUP. MAKE "$BASE 16. READ "AMODES
. READ "OPCODES. MAKE "ORG $ "C40. ER SE
TUP.END..TO $ :WORD. OP $1 :WORD 0.END..
TO $1 :WORD :VAL. IF :WORD = " OP :VAL. 
IF NUMBER? FIRST :WORD OP $1 BF :WORD :V
AL * :$BASE + FIRST :WORD. LOCAL "DIGIT.
 MAKE "DIGIT ( ASCII FIRST :WORD ) - 55.
 IF ANYOF :DIGIT < 0 :DIGIT - 1 > :$BASE
 ERROR FIRST :WORD [NOT A DIGIT]. OP $1 
BF :WORD :VAL * :$BASE + :DIGIT.END..TO 
OP.LOC :MODE. OP FIRST BF THING :MODE.EN
D..TO RELOPER. MAKE "ARGS ( OPERAND "ABS
 :ARGS ) - :DOT - 2. IF :ARGS < 0 OP 256
 + :ARGS ELSE OP :ARGS.END..TO STORE1 :L
INE :TOKEN. PRINT1 :LINE. IF LIST? :TOKE
N PRINT [] STORE BF :CODE :DOT STOP. IF 
LABEL? :TOKEN MAKE "LINE BF :LINE MAKE "
TOKEN FIRST :LINE. IF NUMBER? :TOKEN EMI
T :DOT :TOKEN STORE BF :CODE :DOT + 1 ST
OP. STORE BF :CODE :DOT + ( STORE2 :LINE
 ( AMODE :TOKEN BF :LINE ) ).END..TO OPE
RAND :MODE :ARGS. IF :MODE = "REL OP REL
OPER. MAKE "ARGS ITEM ( OP.LOC :MODE ) :
ARGS. IF LIST? :ARGS OP RUN :ARGS. IF NU
MBER? :ARGS OP :ARGS. IF FIRST :ARGS = "
" OP ASCII BF :ARGS. IF THING? :ARGS OP 
THING :ARGS. ERROR :ARGS [NOT A LABEL].E
ND..TO EMIT :DOT :BYTE. CURSOR 29 ( LAST
 CURSORPOS ). ( PRINT1 :DOT "= :BYTE ). 
PRINT []. .DEPOSIT :DOT :BYTE.END..TO ST
ORE2 :LINE :MODE. LOCAL "BYTE LOCAL "LEN
. MAKE "BYTE OPCODE FIRST :LINE :MODE. M
AKE "LEN INSLEN :MODE. EMIT :DOT :BYTE. 
IF :LEN = 1 PRINT [] OP :LEN. MAKE "BYTE
 OPERAND :MODE BF :LINE. IF :LEN = 2 EMI
T :DOT + 1 :BYTE OP :LEN. EMIT :DOT + 1 
LO8 :BYTE. EMIT :DOT + 2 HI8 :BYTE. OP :
LEN.END..TO OPCODE :INS :MODE. OP LOOKUP
 :MODE THING :INS.END..TO LO8 :N. OP REM
AINDER :N 256.END..TO HI8 :N. OP QUOTIEN
T :N 256.END..TO LOOKUP :THING :PLACE. I
F :PLACE = [] ERROR :THING [BAD MODE]. I
F :THING = FIRST :PLACE OP FIRST BF :PLA
CE. OP LOOKUP :THING BF BF :PLACE.END..T
O AMODE1 :FPART :LPART. IF :FPART = "# O
P LOOKUP BF :LPART :IMMS. IF :FPART = "!
 OP LOOKUP BF :LPART :ZPS. IF :FPART = "
( OP LOOKUP BF :LPART :INDIRS. OP LOOKUP
 :LPART :INDEXES.END..TO IMPINS? :TOKEN.
 IF INS? :TOKEN OP "IMP = FIRST THING :T
OKEN. OP "FALSE.END..TO RELINS? :TOKEN. 
IF INS? :TOKEN OP "REL = FIRST THING :TO
KEN. OP "FALSE.END..TO ERROR :A :B. ( PR
INT :A :B ). TOPLEVEL.END..TO ASSIGN :LA
BEL :THING. MAKE "LABEL BL :LABEL. IF TH
ING? :LABEL ERROR :LABEL [ALREADY USED].
 MAKE :LABEL :DOT. MAKE "LABELS FPUT :LA
BEL :LABELS.END..TO LABEL? :TOKEN. OP ":
 = LAST :TOKEN.END..TO AMODE :TOKEN :ARG
S. IF RELINS? :TOKEN OP "REL. IF IMPINS?
 :TOKEN OP "IMP. IF :ARGS = [] OP "IMP. 
IF :ARGS = [A] OP "ACC. IF BF :ARGS = []
 OP "ABS. OP AMODE1 FIRST :ARGS BF :ARGS
.END..TO INSLEN :MODE. OP FIRST THING :M
ODE.END..TO INS? :TOKEN. IF THING? :TOKE
N OP LIST? THING :TOKEN. OP "FALSE.END..
TO SYMS.L :LINE :TOKEN. IF INS? :TOKEN O
P INSLEN AMODE :TOKEN BF :LINE. IF LABEL
? :TOKEN ASSIGN :TOKEN :DOT OP SYMS.L BF
 :LINE FIRST BF :LINE. IF LIST? :TOKEN R
UN :TOKEN OP 0. IF NUMBER? :TOKEN OP 1. 
ERROR :TOKEN [NOT AN INSTRUCTION].END..T
O STORE :CODE :DOT. IF :CODE = [] STOP. 
STORE1 FIRST :CODE FIRST FIRST :CODE.END
..TO SYMBOLS :CODE :DOT. IF :CODE = [] S
TOP. SYMBOLS BF :CODE :DOT + ( SYMS.L FI
RST :CODE FIRST FIRST :CODE ).END..TO ER
NS :NAMES. IF :NAMES = [] STOP. ERNAME F
IRST :NAMES. ERNS BF :NAMES.END..TO ASSE
MBLE :CODE. IF THING? "LABELS ERNS :LABE
LS. MAKE "LABELS []. ND PR :CODE. MAKE "
CODE BF TEXT :CODE. SYMBOLS :CODE :ORG. 
STORE :CODE :ORG.END..MAKE "STARTUP [SET
UP].P.
C64 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL