ASSEMBLER.LOGO
FILE INFORMATION
FILENAME(S): ASSEMBLER.LOGO
FILE TYPE(S): PRG
FILE SIZE: 3.2K
FIRST SEEN: 2025-11-30 21:09:48
APPEARS ON: 1 disk(s)
FILE HASH
2ebcf4d37f5bb01461bad9b71ff03325f07df1585eaca72d3159281eced79afd
FOUND ON DISKS (1 DISKS)
| DISK TITLE | FILENAME | FILE TYPE | COLLECTION | TRACK | SECTOR | ACTIONS |
|---|---|---|---|---|---|---|
| SIMONS BASIC PRO | ASSEMBLER.LOGO | PRG | DuncanTwain | 34 | 6 | 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 B9 |TUP [SETUP].. |
. 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]..
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL