home *** CD-ROM | disk | FTP | other *** search
- /*
- * 6502 ┴SSEMBLER - ├ODE ╙EGMENT 0
- * ╞ILENAME: ASSM0.C
- *
- */
-
- #INCLUDE "STDIO.H"
- #INCLUDE "ASSM.D1"
-
- #IFDEF ╒╬╔╪
- ╞╔╠┼ *IPTR, *OPTR;
- #ELSE
- ╞╔╠┼ IPTR, OPTR;
- #ENDIF
-
- CHAR FILENAME[20]; /* CURRENT FILENAME */
- INT CH; /* CURRENT INPUT CHARACTER */
- CHAR CPOS; /* CURRENT CHARACTER POSITION */
- CHAR DFLAG; /* DEBUG FLAG */
- CHAR LISTED; /* LISTING LINE HAS BEEN PRINTED */
- UNSIGNED ERRCNT; /* ERROR COUNTER */
- UNSIGNED EXPRMC; /* EXPRESSION MODIFICATION CODE */
- STRUCT SYMTYPE *EXPRSYM; /* EXPRESSION EXTERNAL REFERENCE SYMBOL */
- CHAR EXPRTYP; /* EXPRESSION TYPE */
- CHAR HEX[5]; /* HEXADECIMAL CHARACTER BUFFER */
- CHAR IFLAG; /* IGNORE .NLST FLAG */
- INT LFLAG; /* DISABLE LISTING FLAG */
- CHAR CFLAG; /* LIST EXCLUDED CONDITIONAL ASSMBLY */
- UNSIGNED LOCCNT; /* LOCATION COUNTER */
- CHAR FFLAG; /* FORMATTED LISTING SWITCH */
- CHAR OFLAG; /* OBJECT OUTPUT FLAG */
- UNSIGNED OPFLG; /* OPERATION CODE FLAGS */
- CHAR OPVAL; /* OPERATION CODE VALUE */
- CHAR PASS; /* PASS COUNTER */
- CHAR PRLNBUF[╠┴╙╘ñ├╚ñ╨╧╙+1]; /* PRINT LINE BUFFER */
- CHAR SFLAG; /* SYMBOL TABLE OUTPUT FLAG */
- UNSIGNED SLNUM; /* SOURCE LINE NUMBER COUNTER */
- CHAR SYMBOL[╙┬╧╠╙┌+1];/* TEMPORARY SYMBOL STORAGE */
- UNSIGNED VALUE; /* OPERAND FIELD VALUE */
- UNSIGNED FULLVALUE; /* OPERAND VALUE BEFORE 0-PG TRUNCATION */
- CHAR ZPREF; /* ZERO PAGE REFERENCE FLAG */
- CHAR UNDEF; /* EXPRESSION CONTAINS UNDEF SYMBOL */
- CHAR CASMFLG; /* 0 TO INHIBIT ASSEMBLY*/
-
- STRUCT SYMTYPE *LABLPTR; /* LABEL POINTER INTO SYMBOL TABLE */
- STRUCT SYMTYPE *HASHñTBL[╚╘╙╔┌┼];/* POINTERS TO STARTING SYMBOLS */
-
- /* ╘HE OPCODE MNEMONICS ARE STORED AS AN ARRAY OF FIXED LENGTH STRINGS */
-
- CHAR *OPMNEM[╬╒═╧╨╙] =
- █
- ".BSS ",
- ".BYTE", /* '.' IS 46 DECIMAL */
- ".DBYT",
- ".DEF ",
- ".DSEG",
- ".ELSE",
- ".FI ",
- ".IFEQ",
- ".IFGE",
- ".IFGT",
- ".IFLE",
- ".IFLT",
- ".IFNE",
- ".LIST",
- ".NLST",
- ".REF ",
- ".WORD",
- "= ", /* '=' IS 61 DECIMAL */
- "ADC ","AND ","ASL ",
- "BCC ","BCS ","BEQ ",
- "BIT ","BMI ","BNE ",
- "BPL ","BRK ","BVC ",
- "BVS ","CLC ","CLD ",
- "CLI ","CLV ","CMP ",
- "CPX ","CPY ","DEC ",
- "DEX ","DEY ","EOR ",
- "INC ","INX ","INY ",
- "JMP ","JSR ","LDA ",
- "LDX ","LDY ","LSR ",
- "NOP ","ORA ","PHA ",
- "PHP ","PLA ","PLP ",
- "ROL ","ROR ","RTI ",
- "RTS ","SBC ","SEC ",
- "SED ","SEI ","STA ",
- "STX ","STY ","TAX ",
- "TAY ","TSX ","TXA ",
- "TXS ","TYA "
- ▌;
-
- /* ╘HE OPCODE DEFINITIONS CONSIST OF 2 WORD PAIRS:
- ╘HE FIRST WORD IS THE INSTRUCTION CLASS OR LEGAL MODE FLAG WORD.
- ╘HE SECOND WORD IS THE BASE VALUE OF THE OPCODE.
- */
-
- UNSIGNED OPTAB[2*╬╒═╧╨╙] = /* NMEMONIC OPERATION CODE TABLE */
- █
-
- /* .BSS */ ╨╙┼╒─╧,7,
- /* .BYTE */ ╨╙┼╒─╧,0,
- /* .DBYT */ ╨╙┼╒─╧,6,
- /* .DEF */ ╨╙┼╒─╧,8,
- /* .DSEG */ ╨╙┼╒─╧,3,
- /* .ELSE */ ├┴╙╙═,1,
- /* .FI */ ├┴╙╙═,0,
- /* .IFEQ */ ├┴╙╙═,4,
- /* .IFGE */ ├┴╙╙═,5,
- /* .IFGT */ ├┴╙╙═,3,
- /* .IFLE */ ├┴╙╙═,6,
- /* .IFLT */ ├┴╙╙═,2,
- /* .IFNE */ ├┴╙╙═,7,
- /* .LIST */ ╨╙┼╒─╧,4,
- /* .NLST */ ╨╙┼╒─╧,5,
- /* .REF */ ╨╙┼╒─╧,9,
- /* .WORD */ ╨╙┼╒─╧,2,
-
- /* = */ ╨╙┼╒─╧,1,
- /* ADC */ ╔══2▀┴┬╙▀┌┼╥▀╔╬─╪▀╔╬─┘▀┌┼╥╪▀┴┬╙╪▀┴┬╙┘,0X61,
- /* AND */ ╔══2▀┴┬╙▀┌┼╥▀╔╬─╪▀╔╬─┘▀┌┼╥╪▀┴┬╙╪▀┴┬╙┘,0X21,
- /* ASL */ ┴┬╙▀┌┼╥▀┌┼╥╪▀┴┬╙╪▀┴├├,0X02,
- /* BCC */ ├╠┴╙╙2,0X90,
- /* BCS */ ├╠┴╙╙2,0XB0,
- /* BEQ */ ├╠┴╙╙2,0XF0,
- /* BIT */ ┴┬╙▀┌┼╥,0X20,
- /* BMI */ ├╠┴╙╙2,0X30,
- /* BNE */ ├╠┴╙╙2,0XD0,
- /* BPL */ ├╠┴╙╙2,0X10,
- /* BRK */ ├╠┴╙╙1,0X00,
- /* BVC */ ├╠┴╙╙2,0X50,
- /* BVS */ ├╠┴╙╙2,0X70,
- /* CLC */ ├╠┴╙╙1,0X18,
- /* CLD */ ├╠┴╙╙1,0XD8,
- /* CLI */ ├╠┴╙╙1,0X58,
- /* CLV */ ├╠┴╙╙1,0XB8,
- /* CMP */ ╔══2▀┴┬╙▀┌┼╥▀╔╬─╪▀╔╬─┘▀┌┼╥╪▀┴┬╙╪▀┴┬╙┘,0XC1,
- /* CPX */ ╔══1▀┴┬╙▀┌┼╥,0XE0,
- /* CPY */ ╔══1▀┴┬╙▀┌┼╥,0XC0,
- /* DEC */ ┴┬╙▀┌┼╥▀┌┼╥╪▀┴┬╙╪,0XC2,
- /* DEX */ ├╠┴╙╙1,0XCA,
- /* DEY */ ├╠┴╙╙1,0X88,
- /* EOR */ ╔══2▀┴┬╙▀┌┼╥▀╔╬─╪▀╔╬─┘▀┌┼╥╪▀┴┬╙╪▀┴┬╙┘,0X41,
- /* INC */ ┴┬╙▀┌┼╥▀┌┼╥╪▀┴┬╙╪,0XE2,
- /* INX */ ├╠┴╙╙1,0XE8,
- /* INY */ ├╠┴╙╙1,0XC8,
- /* JMP */ ┴┬╙▀╔╬─,0X40,
- /* JSR */ ┴┬╙,0X14,
- /* LDA */ ╔══2▀┴┬╙▀┌┼╥▀╔╬─╪▀╔╬─┘▀┌┼╥╪▀┴┬╙╪▀┴┬╙┘,0XA1,
- /* LDX */ ╔══1▀┴┬╙▀┌┼╥▀┴┬╙┘2▀┌┼╥┘,0XA2,
- /* LDY */ ╔══1▀┴┬╙▀┌┼╥▀┴┬╙╪▀┌┼╥╪,0XA0,
- /* LSR */ ┴┬╙▀┌┼╥▀┌┼╥╪▀┴┬╙╪▀┴├├,0X42,
- /* NOP */ ├╠┴╙╙1,0XEA,
- /* ORA */ ╔══2▀┴┬╙▀┌┼╥▀╔╬─╪▀╔╬─┘▀┌┼╥╪▀┴┬╙╪▀┴┬╙┘,0X01,
- /* PHA */ ├╠┴╙╙1,0X48,
- /* PHP */ ├╠┴╙╙1,0X08,
- /* PLA */ ├╠┴╙╙1,0X68,
- /* PLP */ ├╠┴╙╙1,0X28,
- /* ROL */ ┴┬╙▀┌┼╥▀┌┼╥╪▀┴┬╙╪▀┴├├,0X22,
- /* ROR */ ┴┬╙▀┌┼╥▀┌┼╥╪▀┴┬╙╪▀┴├├,0X62,
- /* RTI */ ├╠┴╙╙1,0X40,
- /* RTS */ ├╠┴╙╙1,0X60,
- /* SBC */ ╔══2▀┴┬╙▀┌┼╥▀╔╬─╪▀╔╬─┘▀┌┼╥╪▀┴┬╙╪▀┴┬╙┘,0XE1,
- /* SEC */ ├╠┴╙╙1,0X38,
- /* SED */ ├╠┴╙╙1,0XF8,
- /* SEI */ ├╠┴╙╙1,0X78,
- /* STA */ ┴┬╙▀┌┼╥▀╔╬─╪▀╔╬─┘▀┌┼╥╪▀┴┬╙╪▀┴┬╙┘,0X81,
- /* STX */ ┴┬╙▀┌┼╥▀┌┼╥┘,0X82,
- /* STY */ ┴┬╙▀┌┼╥▀┌┼╥╪,0X80,
- /* TAX */ ├╠┴╙╙1,0XAA,
- /* TAY */ ├╠┴╙╙1,0XA8,
- /* TSX */ ├╠┴╙╙1,0XBA,
- /* TXA */ ├╠┴╙╙1,0X8A,
- /* TXS */ ├╠┴╙╙1,0X9A,
- /* TYA */ ├╠┴╙╙1,0X98
- ▌;
-