home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / CASSM.SFX / assm0.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-11-27  |  5.4 KB  |  175 lines

  1. /*
  2.  * 6502 ┴SSEMBLER - ├ODE ╙EGMENT 0
  3.  * ╞ILENAME: ASSM0.C
  4.  *
  5.  */
  6.  
  7. #INCLUDE "STDIO.H"
  8. #INCLUDE "ASSM.D1"
  9.  
  10. #IFDEF ╒╬╔╪
  11. ╞╔╠┼ *IPTR, *OPTR;
  12. #ELSE
  13. ╞╔╠┼ IPTR, OPTR;
  14. #ENDIF
  15.  
  16. CHAR      FILENAME[20];    /* CURRENT FILENAME */
  17. INT       CH;              /* CURRENT INPUT CHARACTER */
  18. CHAR      CPOS;            /* CURRENT CHARACTER POSITION */
  19. CHAR      DFLAG;           /* DEBUG FLAG */
  20. CHAR      LISTED;          /* LISTING LINE HAS BEEN PRINTED */
  21. UNSIGNED  ERRCNT;          /* ERROR COUNTER */
  22. UNSIGNED  EXPRMC;          /* EXPRESSION MODIFICATION CODE */
  23. STRUCT SYMTYPE *EXPRSYM;   /* EXPRESSION EXTERNAL REFERENCE SYMBOL */
  24. CHAR      EXPRTYP;         /* EXPRESSION TYPE */
  25. CHAR      HEX[5];          /* HEXADECIMAL CHARACTER BUFFER */
  26. CHAR      IFLAG;           /* IGNORE .NLST FLAG */
  27. INT       LFLAG;           /* DISABLE LISTING FLAG */
  28. CHAR      CFLAG;           /* LIST EXCLUDED CONDITIONAL ASSMBLY */
  29. UNSIGNED  LOCCNT;          /* LOCATION COUNTER     */
  30. CHAR      FFLAG;           /* FORMATTED LISTING SWITCH */
  31. CHAR      OFLAG;           /* OBJECT OUTPUT FLAG */
  32. UNSIGNED  OPFLG;           /* OPERATION CODE FLAGS */
  33. CHAR      OPVAL;           /* OPERATION CODE VALUE */
  34. CHAR      PASS;            /* PASS COUNTER         */
  35. CHAR      PRLNBUF[╠┴╙╘ñ├╚ñ╨╧╙+1]; /* PRINT LINE BUFFER    */
  36. CHAR      SFLAG;           /* SYMBOL TABLE OUTPUT FLAG */
  37. UNSIGNED  SLNUM;           /* SOURCE LINE NUMBER COUNTER */
  38. CHAR      SYMBOL[╙┬╧╠╙┌+1];/* TEMPORARY SYMBOL STORAGE     */
  39. UNSIGNED  VALUE;           /* OPERAND FIELD VALUE */
  40. UNSIGNED  FULLVALUE;       /* OPERAND VALUE BEFORE 0-PG TRUNCATION */
  41. CHAR      ZPREF;           /* ZERO PAGE REFERENCE FLAG     */
  42. CHAR      UNDEF;           /* EXPRESSION CONTAINS UNDEF SYMBOL */
  43. CHAR      CASMFLG;         /* 0 TO INHIBIT ASSEMBLY*/
  44.  
  45. STRUCT SYMTYPE *LABLPTR;   /* LABEL POINTER INTO SYMBOL TABLE */
  46. STRUCT SYMTYPE *HASHñTBL[╚╘╙╔┌┼];/* POINTERS TO STARTING SYMBOLS */
  47.  
  48. /* ╘HE OPCODE MNEMONICS ARE STORED AS AN ARRAY OF FIXED LENGTH STRINGS */
  49.  
  50. CHAR *OPMNEM[╬╒═╧╨╙] =
  51.         ".BSS ",
  52.         ".BYTE", /* '.' IS 46 DECIMAL */
  53.         ".DBYT",
  54.         ".DEF ",
  55.         ".DSEG",
  56.         ".ELSE",
  57.         ".FI  ",
  58.         ".IFEQ",
  59.         ".IFGE",
  60.         ".IFGT",
  61.         ".IFLE",
  62.         ".IFLT",
  63.         ".IFNE",
  64.         ".LIST",
  65.         ".NLST",
  66.         ".REF ",
  67.         ".WORD", 
  68.         "=    ", /* '=' IS 61 DECIMAL */
  69.         "ADC  ","AND  ","ASL  ",
  70.         "BCC  ","BCS  ","BEQ  ",
  71.         "BIT  ","BMI  ","BNE  ",
  72.         "BPL  ","BRK  ","BVC  ",
  73.         "BVS  ","CLC  ","CLD  ",
  74.         "CLI  ","CLV  ","CMP  ",
  75.         "CPX  ","CPY  ","DEC  ",
  76.         "DEX  ","DEY  ","EOR  ",
  77.         "INC  ","INX  ","INY  ",
  78.         "JMP  ","JSR  ","LDA  ",
  79.         "LDX  ","LDY  ","LSR  ",
  80.         "NOP  ","ORA  ","PHA  ",
  81.         "PHP  ","PLA  ","PLP  ",
  82.         "ROL  ","ROR  ","RTI  ",
  83.         "RTS  ","SBC  ","SEC  ",
  84.         "SED  ","SEI  ","STA  ",
  85.         "STX  ","STY  ","TAX  ",
  86.         "TAY  ","TSX  ","TXA  ",
  87.         "TXS  ","TYA  "
  88. ▌;
  89.  
  90. /* ╘HE OPCODE DEFINITIONS CONSIST OF 2 WORD PAIRS:
  91.    ╘HE FIRST WORD IS THE INSTRUCTION CLASS OR LEGAL MODE FLAG WORD.
  92.    ╘HE SECOND WORD IS THE BASE VALUE OF THE OPCODE. 
  93.  */
  94.  
  95. UNSIGNED OPTAB[2*╬╒═╧╨╙] =               /* NMEMONIC  OPERATION CODE TABLE       */
  96.  
  97. /* .BSS  */  ╨╙┼╒─╧,7,
  98. /* .BYTE */  ╨╙┼╒─╧,0,
  99. /* .DBYT */  ╨╙┼╒─╧,6,
  100. /* .DEF  */  ╨╙┼╒─╧,8,
  101. /* .DSEG */  ╨╙┼╒─╧,3,
  102. /* .ELSE */  ├┴╙╙═,1,
  103. /* .FI   */  ├┴╙╙═,0,
  104. /* .IFEQ */  ├┴╙╙═,4,
  105. /* .IFGE */  ├┴╙╙═,5,
  106. /* .IFGT */  ├┴╙╙═,3,
  107. /* .IFLE */  ├┴╙╙═,6,
  108. /* .IFLT */  ├┴╙╙═,2,
  109. /* .IFNE */  ├┴╙╙═,7,
  110. /* .LIST */  ╨╙┼╒─╧,4,
  111. /* .NLST */  ╨╙┼╒─╧,5,
  112. /* .REF  */  ╨╙┼╒─╧,9,
  113. /* .WORD */  ╨╙┼╒─╧,2,
  114.  
  115. /* =     */  ╨╙┼╒─╧,1,
  116. /* ADC   */  ╔══2▀┴┬╙▀┌┼╥▀╔╬─╪▀╔╬─┘▀┌┼╥╪▀┴┬╙╪▀┴┬╙┘,0X61,
  117. /* AND   */  ╔══2▀┴┬╙▀┌┼╥▀╔╬─╪▀╔╬─┘▀┌┼╥╪▀┴┬╙╪▀┴┬╙┘,0X21,
  118. /* ASL   */  ┴┬╙▀┌┼╥▀┌┼╥╪▀┴┬╙╪▀┴├├,0X02,
  119. /* BCC   */  ├╠┴╙╙2,0X90,
  120. /* BCS   */  ├╠┴╙╙2,0XB0,
  121. /* BEQ   */  ├╠┴╙╙2,0XF0,
  122. /* BIT   */  ┴┬╙▀┌┼╥,0X20,
  123. /* BMI   */  ├╠┴╙╙2,0X30,
  124. /* BNE   */  ├╠┴╙╙2,0XD0,
  125. /* BPL   */  ├╠┴╙╙2,0X10,
  126. /* BRK   */  ├╠┴╙╙1,0X00,
  127. /* BVC   */  ├╠┴╙╙2,0X50,
  128. /* BVS   */  ├╠┴╙╙2,0X70,
  129. /* CLC   */  ├╠┴╙╙1,0X18,
  130. /* CLD   */  ├╠┴╙╙1,0XD8,
  131. /* CLI   */  ├╠┴╙╙1,0X58,
  132. /* CLV   */  ├╠┴╙╙1,0XB8,
  133. /* CMP   */  ╔══2▀┴┬╙▀┌┼╥▀╔╬─╪▀╔╬─┘▀┌┼╥╪▀┴┬╙╪▀┴┬╙┘,0XC1,
  134. /* CPX   */  ╔══1▀┴┬╙▀┌┼╥,0XE0,
  135. /* CPY   */  ╔══1▀┴┬╙▀┌┼╥,0XC0,
  136. /* DEC   */  ┴┬╙▀┌┼╥▀┌┼╥╪▀┴┬╙╪,0XC2,
  137. /* DEX   */  ├╠┴╙╙1,0XCA,
  138. /* DEY   */  ├╠┴╙╙1,0X88,
  139. /* EOR   */  ╔══2▀┴┬╙▀┌┼╥▀╔╬─╪▀╔╬─┘▀┌┼╥╪▀┴┬╙╪▀┴┬╙┘,0X41,
  140. /* INC   */  ┴┬╙▀┌┼╥▀┌┼╥╪▀┴┬╙╪,0XE2,
  141. /* INX   */  ├╠┴╙╙1,0XE8,
  142. /* INY   */  ├╠┴╙╙1,0XC8,
  143. /* JMP   */  ┴┬╙▀╔╬─,0X40,
  144. /* JSR   */  ┴┬╙,0X14,
  145. /* LDA   */  ╔══2▀┴┬╙▀┌┼╥▀╔╬─╪▀╔╬─┘▀┌┼╥╪▀┴┬╙╪▀┴┬╙┘,0XA1,
  146. /* LDX   */  ╔══1▀┴┬╙▀┌┼╥▀┴┬╙┘2▀┌┼╥┘,0XA2,
  147. /* LDY   */  ╔══1▀┴┬╙▀┌┼╥▀┴┬╙╪▀┌┼╥╪,0XA0,
  148. /* LSR   */  ┴┬╙▀┌┼╥▀┌┼╥╪▀┴┬╙╪▀┴├├,0X42,
  149. /* NOP   */  ├╠┴╙╙1,0XEA,
  150. /* ORA   */  ╔══2▀┴┬╙▀┌┼╥▀╔╬─╪▀╔╬─┘▀┌┼╥╪▀┴┬╙╪▀┴┬╙┘,0X01,
  151. /* PHA   */  ├╠┴╙╙1,0X48,
  152. /* PHP   */  ├╠┴╙╙1,0X08,
  153. /* PLA   */  ├╠┴╙╙1,0X68,
  154. /* PLP   */  ├╠┴╙╙1,0X28,
  155. /* ROL   */  ┴┬╙▀┌┼╥▀┌┼╥╪▀┴┬╙╪▀┴├├,0X22,
  156. /* ROR   */  ┴┬╙▀┌┼╥▀┌┼╥╪▀┴┬╙╪▀┴├├,0X62,
  157. /* RTI   */  ├╠┴╙╙1,0X40,
  158. /* RTS   */  ├╠┴╙╙1,0X60,
  159. /* SBC   */  ╔══2▀┴┬╙▀┌┼╥▀╔╬─╪▀╔╬─┘▀┌┼╥╪▀┴┬╙╪▀┴┬╙┘,0XE1,
  160. /* SEC   */  ├╠┴╙╙1,0X38,
  161. /* SED   */  ├╠┴╙╙1,0XF8,
  162. /* SEI   */  ├╠┴╙╙1,0X78,
  163. /* STA   */  ┴┬╙▀┌┼╥▀╔╬─╪▀╔╬─┘▀┌┼╥╪▀┴┬╙╪▀┴┬╙┘,0X81,
  164. /* STX   */  ┴┬╙▀┌┼╥▀┌┼╥┘,0X82,
  165. /* STY   */  ┴┬╙▀┌┼╥▀┌┼╥╪,0X80,
  166. /* TAX   */  ├╠┴╙╙1,0XAA,
  167. /* TAY   */  ├╠┴╙╙1,0XA8,
  168. /* TSX   */  ├╠┴╙╙1,0XBA,
  169. /* TXA   */  ├╠┴╙╙1,0X8A,
  170. /* TXS   */  ├╠┴╙╙1,0X9A,
  171. /* TYA   */  ├╠┴╙╙1,0X98
  172. ▌;
  173.