home *** CD-ROM | disk | FTP | other *** search
- .IN 10
- .RM 75
- .HE /├-┴╙╙═/6502 ┴SSEMBLER FOR ├-╨OWER/╓ 2.0/
- .FO //-#-//
-
- ─ISCLAIMER:
- .SP 1
- .TI +5
- ╘HIS PROGRAM IS HEREBY GIVEN INTO THE HANDS OF THE PUBLIC,
- AND IS CONSIDERED TO BE PUBLIC DOMAIN. ┘OU MAY USE IT FOR
- ANY NON-PROFIT PURPOSE. ╞EEL FREE TO ALTER IT AS YOU SEE
- FIT. ╔F YOU MODIFY AND REDISTRIBUTE THIS PROGRAM, PLEASE GIVE
- CREDIT TO THE PRIOR AUTHORS (ORIGINAL: ╩.╚. ╓AN ╧RNUM, ╟EORGE ╓. ╫ILDER;
- ├-╨OWER VERSION: ═ARK ╥. ╥INFRET, REVISION 2.0: ╥. ╠. ┌ARLING) AS WELL AS TAKING THE BLAME/GLORY FOR
- ANY CHANGES THAT YOU SHOULD MAKE. ╨LEASE REPORT ANY ENHANCEMENTS TO:
- .NF
- .SP 1
- .IN +5
- ═ARK ╥. ╥INFRET AND ╥AYMOND ╠. ┌ARLING
- 348 ╔NDIAN ┴VE. 245 ╫ILEY ├T.
- ╨ORTSMOUTH, ╥╔ 02871 ╘URLOCK, ├┴ 95380
- (401)-846-7639 (209)-634-4106
- .IN -5
- .FI
- .SP
- ╬O WARRANTIES ARE MADE WITH REGARD TO THE USE OF THIS PROGRAM,
- NOR IS ANY SUPPORT PLEDGED (BUT YOU MIGHT ASK).
- ╒SE IT/ABUSE IT AT YOUR OWN RISK.
- .SP 2
- ╔NTRODUCTION
- .SP 1
- .TI +5
- ├-┴╙╙═ IS A 6502 ASSEMBLER SPECIFICALLY
- TARGETED TO THE ├OMMODORE 64 COMPUTER
- RUNNING ╨RO-╠INE'S ├-POWER (TM) ├ LANGUAGE
- DEVELOPMENT SYSTEM. ├-┴╙╙═ IS DERIVED
- FROM A GENERIC 6502 ASSEMBLER WHICH WAS
- CONTRIBUTED TO ╒╙┼╬┼╘ BY ╩. ╚. VAN ╧RNUM
- OF ┴╘&╘ ┬ELL ╠ABORATORIES. ╫ITHOUT THAT
- HEAD START, THIS PROGRAM WOULD STILL BE
- IN THE DESIGN STAGES.
- .SP 2
- .TI +5
- ┴NYONE FAMILIAR WITH THE ORIGINAL SOURCE WILL, HOWEVER,
- OBSERVE THAT MAJOR CHANGES WERE MADE TO
- TAILOR THE SOURCE TO FIT THE CONSTRAINTS
- OF THE ├-╨OWER COMPILER, SUCH AS CHANGING
- INTS TO UNSIGNED'S WHERE POSSIBLE. ╘HE
- OPCODE TABLES WERE SPLIT APART INTO TWO
- SEPARATE PIECES. ┴LSO, AN #╔╬├╠╒─┼ FACILITY
- HAS BEEN ADDED AS A CONVENIENCE.
- ╧THER MINOR ENHANCEMENTS LIKE ADDITIONAL
- EXPRESSION HANDLING CAPABILITIES AND
- CONDITIONAL ASSEMBLY WILL ALSO BE
- APPARENT. ╘HIS
- ASSEMBLER WILL GENERATE ├-╨OWER COMPATIBLE
- OBJECT FILES WHICH CAN BE LINKED TO ├
- LANGUAGE PROGRAMS, IF THE PROPER PARAMETER
- PASSING CONVENTIONS ARE OBSERVED, OR THE
- OBJECTS CAN BE LINKED INTO A STAND-ALONE
- ASSEMBLY LANGUAGE PROGRAM, WHILE USING THE
- EXCELLENT ENVIRONMENT OF THE ├-╨OWER SHELL
- , EDITOR AND LINKER.
- .TI +5
- ┴LTHOUGH IT IS TAILORED FOR THE ├-╨OWER
- ENVIRONMENT, THE CODE IS HIGHLY STANDARD,
- PORTABLE ├. ╘HIS IS DEMONSTRATED BY THE
- MINIMAL NUMBER OF CHANGES THAT NEED TO
- BE MADE TO PORT THE CODE TO ╒NIX (#IFDEF ╒╬╔╪).
- .TI +5
- ╘HIS DOCUMENT IS ABOUT AS TERSE AS THEY COME.
- ╔F YOU'RE LOOKING FOR A TUTORIAL ON ASSEMBLY
- LANGUAGE, IT AIN'T HERE. ╘HE ACCOMPANYING
- TEST PROGRAMS SHOULD BE SUFFICIENT TO ILLUSTRATE
- THE VARIOUS SYNTAX ELEMENTS FOR A MODERATELY
- EXPERIENCED PROGRAMMER.
-
- .BP
- ╙╧╒╥├┼ ╠╔╬┼ ╞╧╥═┴╘
- .SP 1
- <LABEL> <OPERATION> <OPERAND> <COMMENT>
- .SP 1
- ┼ACH FIELD IS TERMINATED BY ONE OR MORE SPACES, A TAB OR A ';' (WHICH
- BEGINS THE COMMENT FIELD IMMEDIATELY).
- .SP
- ╠┴┬┼╠ ╞╔┼╠─:
- .SP 1
- ╔F FIRST CHARACTER IS ';', ENTIRE LINE IS A COMMENT.
- .SP 1
- ╔F THE FIRST CHARACTER IS '#', THE ASSEMBLER WILL
- EXPECT AN #INCLUDE STATEMENT IDENTICAL IN SYNTAX TO
- A ├ PREPROCESSOR INCLUDE STATEMENT. ╘HE FILENAME
- COMPONENT MAY BE ENCLOSED IN BRACKETS (<FILENAME>)
- OR DOUBLE QUOTES ("FILENAME").
- .SP 1
- ╔F THE FIRST CHARACTER IS A SPACE,
- THE LABEL FIELD IS NULL.
- ╠ABELS ARE ALPHANUMERIC STRINGS BEGINNING
- WITH 'A' THROUGH 'Z', '┴' THROUGH '┌',
- UNDERSCORE OR PERIOD FOLLOWED BY ANY OF THE ABOVE
- CHARACTERS, '$', OR '0' THROUGH '9'. ╠ABELS ARE
- CASE-SENSITIVE ('A' IS NOT THE SAME AS '┴') AND
- MAY BE UP TO 12 CHARACTERS LONG.
- ┴, ╪, ┘, A, X AND Y ARE RESERVED LABELS.
- (╘HESE RULES ARE DESIGNED TO BE COMPATIBLE
- WITH THE RULES FOR EXTERNAL LABELS IN
- ├-╨OWER.)
- .SP 2
- ╧╨┼╥┴╘╔╧╬ ╞╔┼╠─
- .SP 1
- ╒PPER AND LOWER CASE LETTERS ARE EQUIVALENT.
- ═ACHINE OPERATION MNEMONICS ARE:
- .NF
- .IN +5
- .SP 1
- ┴─├ ┬═╔ ├╠─ ─┼╪ ╩╙╥ ╨╚┴ ╥╘╙ ╙╘┘
- ┴╬─ ┬╬┼ ├╠╔ ─┼┘ ╠─┴ ╨╚╨ ╙┬├ ╘┴╪
- ┴╙╠ ┬╨╠ ├╠╓ ┼╧╥ ╠─╪ ╨╠┴ ╙┼├ ╘┴┘
- ┬├├ ┬╥╦ ├═╨ ╔╬├ ╠─┘ ╨╠╨ ╙┼─ ╘╙╪
- ┬├╙ ┬╓├ ├╨╪ ╔╬╪ ╠╙╥ ╥╧╠ ╙┼╔ ╘╪┴
- ┬┼╤ ┬╓╙ ├╨┘ ╔╬┘ ╬╧╨ ╥╧╥ ╙╘┴ ╘╪╙
- ┬╔╘ ├╠├ ─┼├ ╩═╨ ╧╥┴ ╥╘╔ ╙╘╪ ╘┘┴
- .FI
- .IN -5
- .SP 1
- ╨SEUDO OPERATION MNEMONICS ARE:
- .IN +4
- .SP 1
- = EQUATE LABEL NAME TO OPERAND FIELD VALUE
- (SPACE IS NOT NEEDED TO TERMINATE THIS OPERATION).
- .SP
- .╫╧╥─ ASSIGN 16 BIT VALUE OF OPERAND FIELD TO NEXT
- TWO LOCATIONS; LOW BYTE OF VALUE FIRST, THEN HIGH BYTE.
- .SP
- .─┬┘╘ ASSIGN 16 BIT VALUE OF OPERAND FIELD TO NEXT
- TWO LOCATIONS; HIGH BYTE OF VALUE FIRST, THEN LOW BYTE.
- .SP
- .┬┘╘┼ ASSIGN 8 BIT VALUE OF OPERAND FIELD TO NEXT
- LOCATION.
- .SP
- .─┼╞ <LABEL>,...,<LABEL> ╘HE <LABEL>S, WHICH MUST
- APPEAR LATER IN THE SOURCE, WILL BE EXTERNALLY DEFINED
- SO THAT THEY MAY BE REFERENCED (VIA .╥┼╞) IN A
- SEPARATE SOURCE.
- .SP
- .╥┼╞ <LABEL>,...,<LABEL> ╘HE <LABEL>S ARE DEFINED TO
- BE EXTERNAL TO THIS PACKAGE, THEREBY ALLOWING REFERENCES
- WITHOUT CAUSING "╒NDEFINED SYMBOL" ERRORS. ┴NY ATTEMPT
- TO LINK THIS MODULE WITHOUT INCLUDING THE MODULE WHICH
- EXTERNALLY DEFINES THESE <LABEL>S WILL RESULT IN AN
- "UNSATISFIED EXTERNAL REFERENCE" ERROR IN THE LINKER.
- .SP
- .╬╠╙╘ TURN LISTING MODE OFF (THIS SOURCE
- LINE IS NOT LISTED).
- .SP
- .╠╔╙╘ TURN LISTING MODE ON (NORMAL MODE) (THIS
- SOURCE LINE IS NOT LISTED).
- .SP
- .┬╙╙ N ╥ESERVE N BYTES OF STORAGE AT THE
- CURRENT LOCATION (N MUST BE AN ABSOLUTE
- EXPRESSION). ╘HESE BYTES ARE INITIALIZED
- TO ALL ZEROS.
- .SP
- .─╙┼╟ N ┴LLOCATE A SEPARATELY RELOCATABLE
- DATA SEGMENT OF N BYTES. ╘HIS STATEMENT MUST HAVE
- A LABEL, AND THE LABEL IS THE NAME OF THE
- DATA SEGMENT. ╘HIS DATA SEGMENT WILL BE
- EXTERNAL, AND THUS CAN BE REFENCED
- FROM OTHER MODULES WHICH DECLARE IT IN A
- .╥┼╞ STATEMENT. ╘HE .─╙┼╟ STATEMENT WILL
- NOT RESERVE ANY IN-LINE STORAGE.
- .SP
- .╔╞┼╤, .╔╞╬┼, .╔╞╟╘, .╔╞╟┼, .╔╞╠╘, .╔╞╠┼,
- ALL REQUIRE TWO OPERANDS, SEPARATED BY
- A COMMA. ┴LL TERMS IN THE OPERANDS MUST
- BE DEFINED EARLIER IN THE SOURCE CODE.
- ╘HE FOLLOWING CODE WILL BE ASSEMBLED ONLY
- IF THE STATED CONDITION IS TRUE. ╧PERAND
- VALUES ARE INTERPRETTED AS UNSIGNED VALUES,
- AND ANY RELOCATION ATTRIBUTE IS IGNORED.
- .SP
- .┼╠╙┼ MAY OPTIONALLY BE USED AFTER A .╔╞XX
- OPERATOR. ╘HE FOLLOWING CODE WILL BE
- ASSEMBLED IF THE MOST RECENT .╔╞XX THAT
- HAS NOT BEEN MATCHED BY A .┼╠╙┼ OR .╞╔
- WAS FALSE, AND NO
- PREVIOUS .╔╞XX IS INHIBITING ASSEMBLY.
- .SP
- .╞╔ ENDS THE .╔╞XX CONSTRUCT. ╘HE
- FOLLOWING CODE IS ASSEMBLED IF AND ONLY
- IF ASSEMBLY WAS IN PROGRESS PRIOR TO THE
- ORIGINAL .╔╞XX.
- .IN -4
- .SP 2
- ╧╨┼╥┴╬─ ╞╔┼╠─
- .SP 1
- ╧PERAND FIELD EXPRESSIONS USE INFIX NOTATION AND ARE EVALUATED
- FROM LEFT TO RIGHT. ╨RECEDENCE CAN BE MINIMALLY CONTROLLED
- THROUGH THE USE OF PARENTHETICAL EXPRESSIONS WHICH ARE BRACKETED
- BY THE LEFT AND RIGHT BRACKET CHARACTERS (E.G. [<EXPRESSION>] )
- RATHER THAN THE USUAL PARENTHESES. ╘HIS CHOICE WAS MOST LIKELY
- MADE TO AVOID CONFLICT WITH THE INDIRECT ADDRESSING MODES WHICH
- USE PARENTHESES AS IN ╠─┴ (ADDR),┘. ╬O IMBEDDED SPACES ARE
- PERMITTED.
- .SP1
- ╙INCE THIS IS A RELOCATING ASSEMBLER, OPERANDS
- MUST EVALUATE TO A VALUE WHICH IS EITHER
- "RELOCATABLE", "ABSOLUTE", OR "EXTERNAL".
- ┴ RELOCATABLE EXPRESSION IS ONE WHOSE VALUE
- MUST BE ADJUSTED BY ADDING THE LOAD ADDRESS
- OF THE MODULE WHEN IT IS LINKED. ╘HE VALUE OF ABSOLUTE
- EXPRESSIONS DO NOT CHANGE WITH RELOCATION.
- ╘HE VALUES OF EXTERNAL EXPRESSIONS DEPEND
- PRIMARILY UPON A SINGLE EXTERNAL SYMBOL NAME,
- WHOSE VALUE WILL BE DETERMINED WHEN THE MODULE
- IS LINKED WITH ANOTHER WHICH DEFINES THE
- SYMBOL. ╔N THIS ASSEMBLER, EXTERNAL SYMBOLS
- MAY BE MODIFIED BY ADDING OR SUBRACTING AN
- ABSOLUTE QUANTITY LESS THAN 0X2000 (E.G.
- LDA XREF+2). ╔N THAT CASE, THE EXTERNAL
- SYMBOL NAME MUST COME FIRST, FOLLOWED BY +
- OR - ABSOLUTE EXPRESSION.
- .SP 1
- ╧PERAND FIELD TERMS INCLUDE LABELS AND NUMBERS.
- ┴STERISK (*) IS THE LABEL FOR THE LOCATION COUNTER VALUE.
- ╬UMBERS ARE BINARY, OCTAL, DECIMAL, HEXADECIMAL OR ┴╙├╔╔.
- ╬UMBER TYPE IS INDICATED BY THE FIRST CHARACTER OF THE NUMBER STRING AS FOLLOWS:
- .NF
- .IN +5
- .SP 1
- % BINARY PREFIX
- @ OR 0 OCTAL PREFIX
- 1 - 9 DECIMAL BY DEFAULT (PREFIX IS PART OF NUMBER)
- $ HEXADECIMAL PREFIX
- ' ├┬═-┴╙├╔╔ CHARACTER PREFIX
- " ├┬═-┴╙├╔╔ CHARACTER STRING PREFIX AND SUFFIX;
- \N IS A NEW LINE; \L IS A FORM FEED.
-
- .FI
- .IN -5
- .SP 1
- ╧PERAND FIELD OPERATIONS AND THE CORRESPONDING SYMBOLS ARE:
- .NF
- .IN +5
- .SP 1
- + ADDITION
- - SUBTRACTION (OR UNARY NEGATION)
- / DIVISION
- * MULTIPLICATION
- % MODULO (REMAINDER AFTER INTEGER DIVISION)
- ^ (UP-ARROW) LOGICAL EXCLUSIVE ╧╥
- & LOGICAL ┴╬─
- ▀ LOGICAL ╧╥
-
- .IN -5
- .SP 1
- .FI
- ╘HE FOLLOWING MAY APPEAR ONLY AT THE
- BEGINNING OF AN EXPRESSION:
- .NF
- .IN +5
- .SP 1
- ! USE TWO BYTE ADDRESSING, EVEN IF OPERAND<256
- < LOW BYTE
- > HIGH BYTE
- .FI
- .IN -5
- .SP 2
- ┼╥╥╧╥ ═┼╙╙┴╟┼╙
- .NF
- .SP 1
- ╒╬╦╬╧╫╬ ┼╥╥╧╥!!! (SOMEBODY GOOFED)
- ╔NTERNAL ERROR (OOPS)
- ╔NVALID OPERATION CODE
- ┴,╪,┘ ARE RESERVED SYMBOLS
- ╙YMBOL TABLE OVERFLOW (SAME AS "╧UT OF MEMORY")
- ─UPLICATE DEFINITION
- ╙YNC ERROR (╨ASS 1/╨ASS 2 SYMBOL VALUE DIFFERS)
- ┬RANCH OUT OF RANGE
- ═ISSING OPERAND
- ╔NVALID ADDRESSING MODE
- ═ISSING STRING TERMINATOR (NO SECOND ")
- ╓ALUE ERROR (OPERAND VALUE TOO LARGE OR SMALL)
- ╒NDEFINED SYMBOL
- ╙YMBOL REQUIRED
- ═ULTIPLY DEFINED
- ╥ELOCATION ERROR (ILLOGICAL EXPRESSION INVOLVING
- A SYMBOL )
- ├OND ASSBLY NESTED TOO DEEPLY (NO MORE THAN 6 NESTED .╔╞XX'S ALLOWED)
- ╒NBALANCED PARENTHESES (MISSING ])
- ─IVIDE BY ZERO
- ╚I/╠O OPERATOR MUST BE FIRST (< OR > OUT OF SEQUENCE)
- ╔NVALID OPERAND FIELD
- ╧UT OF MEMORY (TOO MANY SYMBOLS OR REFERENCES)
- ".╞╔" WITHOUT ".╔╞"
- ╠ABEL REQUIRED
- ╠ABEL NOT ALLOWED
-
- .FI
- .SP 1
- ╔╬╓╧╦╔╬╟ ├-┴╙╙═:
- .SP 1
-
- ASSM █-CDFILOS▌ <FILE...FILE>
- .SP 1
- ╧PTIONS:
- .NF
- .IN +5
- .SP 1
- -C DO NOT LIST CODE EXCLUDED BY .╔╞XX
- -D PRINT DEBUGGING INFORMATION
- -F DO NOT REFORMAT SOURCE LINES FOR LISTING
- -I IGNORE ANY .NLST PSEUDO OPERATIONS
- -L LIST ERRORS ONLY
- -O SUPPRESS OBJECT FILE CREATION
- -S GET SYMBOL TABLE PRINTOUT
-
- .FI
- .IN -5
-
- ╙OURCE <FILE> NAMES MUST END WITH A '.A' SUFFIX.
- ╫HEN AN OBJECT FILE IS CREATED, A '.O' SUFFIX IS
- APPENDED TO THE ROOT OF THE SOURCE NAME. ╞OR
- EXAMPLE, TEST.O WILL BE CREATED WHEN TEST.A IS
- ASSEMBLED. ╔F MORE THAN ONE FILE NAME IS GIVEN,
- SEPARATE ASSEMBLIES ARE PERFORMED ON EACH ONE IN
- TURN.
-
- .SP 2
- ─┼╞╔├╔┼╬├╔┼╙:
-
- ╘HE ASSEMBLER IS QUITE LARGE. ╘HIS IS DUE IN PART
- TO THE CODE GENERATION CHARACTERISTICS OF THE ├-╨OWER
- COMPILER. ╘HE SOURCE COULD PROBABLY BE
- FURTHER OPTIMIZED TO FINE TUNE THE GENERATED CODE OR
- IMPROVED ALGORITHMS.
- .SP
- ╔T WOULD BE NICE TO HAVE A WILDCARD FACILITY
- WITH THE SOURCE FILENAMES. ╞OR INSTANCE,
- ASSM -F ATEST*.A WOULD ASSEMBLE ALL .A FILES
- ON THE CURRENT DISK WHICH BEGIN "ATEST".
- ╔ FEAR THAT THIS WOULD MAKE THE ASSEMBLER
- PROHIBITIVELY BIG, HOWEVER.
- .SP
- ╬O MACRO FACILITY CURRENTLY EXISTS. ╔ WOULD LIKE TO SEE
- A SYNTAX OF THE FORM:
- .BR
- .NF
- #DEFMAC <MACRONAME>[(PARAM,...,PARAM)
- <STATEMENT>
- .
- .
- .
- <STATEMENT>
- #ENDMAC
- .FI
-