⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 picasm.h

📁 MicroChip的12BIt和14Bit的PIC系列单片机的汇编器
💻 H
字号:
/* * picasm.h * * Copyright 1995-1998 Timo Rossi, <trossi@iki.fi> * See the file picasm.doc for more information *  * http://www.iki.fi/trossi/pic/ *  *//* * Version history: * * 1998-05-04   1.06   - fixed missing assembled code listing on lines *                       with labels *                     - added dollar-prefixed hex numbers *                     - allows invalid tokens in code skipped with if..endif *                     - shows macro line number in error messages *                     - better error handling *                     - reorganized device type/config handling *                     - lots of new device types added *                     - fixed ORG mode bug *                     - allows TRIS PORTC *                     - only warns about TRIS/OPTION with warnlevel 2 *                     - added ERROR directive *                     - HEX_EOL #define * * 1996-09-08   1.05   added PIC16F84 (same as PIC16C84A) * 1996-07-01          now defines __<pic_type> symbol *                     symbol table listing option * 1996-06-25   1.04   small changes, makefile for Watcom C * 1996-06-06   1.03   many device table additions, *                     better handling of CONFIG-directive * 1996-05-17   1.02   local labels, device table additions * 1996-03-26   1.0 * ... */#define VERSION "v1.06"#if defined(__SASC) || defined(__TURBOC__) || defined(__WATCOMC__) || defined(_MSC_VER)#define strcasecmp stricmp#define strncasecmp strnicmp#endif/* hex output end-of-line. if you need CRLFs in hex files * when running on a system which does not normally generate * them (such as Unix), change this to "\r\n" */#define HEX_EOL "\n"/* maximum number of errors before aborting assembly */#define MAX_ERRORS 20/* output formats */enum {  IHX8M,  IHX16};/* org mode */typedef enum {  O_NONE,  O_PROGRAM,  O_REGFILE,  O_EDATA} org_mode_t ;typedef unsigned short pic_instr_t;#define INVALID_INSTR  0xffff#define INVALID_DATA   0xffff#define INVALID_CONFIG 0xffff#define INVALID_ID     0xffff/* list flags */#define LIST_LOC     1#define LIST_PROG    2#define LIST_EDATA   4#define LIST_FORWARD 8#define LIST_VAL     0x10#define LIST_PTR     0x20/* inc_file types */typedef enum {  INC_FILE,  INC_MACRO} inctype_t;/* * structure for include files/macros */struct inc_file {  struct inc_file *next;  union {    struct {      FILE *fp;      char *fname;    } f; /* file */    struct {      struct symbol *sym;      struct macro_line *ml;      struct macro_arg *args;      int uniq_id;    } m; /* macro */  } v;  inctype_t type;  int linenum;  int cond_nest_count;};/* * structure to hold one macro line */struct macro_line {  struct macro_line *next;  char text[1];};/* Macro argument */struct macro_arg {  struct macro_arg *next;  char text[1];};/* * structure for patching forward jumps */typedef enum {  PATCH11, /* 14-bit instr. set PICs */  PATCH9,  /* 12-bit, goto */  PATCH8   /* 12-bit, call */} patchtype_t;struct patch {  struct patch *next;  struct symbol *label;  int location;  patchtype_t type;};#define PROGMEM_MAX 4096#define EEPROM_MAX 64/* * Definitions for different types of PIC processors */#define INSTRSET_MASK 0xFtypedef enum {  PIC12BIT=1,  PIC14BIT} instrset_t;typedef enum {  FUSE_16C5X=1,  /* most 12-bit PICs  */  FUSE_12C5XX,   /* 12-bit 8-pin PICs 12C508, 12C509 */  FUSE_12C6XX,   /* 14-bit 8-pin PICs 12C671, 12C672 */  FUSE_16CXX1,   /* 16C61, 16C71, 16C84 */  FUSE_16CXX2,   /* 16C62/64/65/73/74 */  FUSE_16C6XA,   /* 16C62A/63/64A/65A/66/67/72/73A/74A */  FUSE_16C55X,   /* 16C554/556/558 */  FUSE_16F8X,    /* 16C83/16F84 */  FUSE_16C71X,   /* 16C710/711 */  FUSE_16C715,   /* 16C715 */  FUSE_16C62X,   /* 16C620/621/622 */  FUSE_14000} fusetype_t;struct pic_type {  char *name;  int progmem_size;  short regfile_limit; /* without banking */  short eeprom_size;  int id_addr;  int fuse_addr;  fusetype_t fusetype;  instrset_t instr_set;};#define TOKSIZE 256struct symbol {  struct symbol *next;  union {    long value;    struct macro_line *text;  } v;  char type;  char name[1];};/* symbol types */enum {  SYM_MACRO,  SYM_FORWARD,  SYM_SET,  SYM_DEFINED};#define SYMTAB_GLOBAL 0#define SYMTAB_LOCAL  1/* * token codes *//**/enum {  TOK_INVALID,  TOK_EOF,  TOK_NEWLINE,  TOK_COLON,  TOK_PERIOD,  TOK_DOLLAR,  TOK_COMMA,  TOK_LEFTPAR,  TOK_RIGHTPAR,  TOK_LEFTBRAK,  TOK_RIGHTBRAK,  TOK_EQUAL,  TOK_EQ,  TOK_NOT_EQ,  TOK_LESS,  TOK_LESS_EQ,  TOK_GREATER,  TOK_GT_EQ,  TOK_PLUS,  TOK_MINUS,  TOK_ASTERISK,  TOK_SLASH,  TOK_PERCENT,  TOK_BITAND,  TOK_BITOR,  TOK_BITXOR,  TOK_BITNOT,  TOK_LSHIFT,  TOK_RSHIFT,  TOK_BACKSLASH,  TOK_IDENTIFIER,  TOK_LOCAL_ID,  TOK_INTCONST,  TOK_STRCONST, /* used as file name with include, and in EDATA */  KW_INCLUDE,  KW_MACRO,  KW_ENDM,  KW_EXITM,  KW_IF,  KW_ELSE,  KW_ENDIF,  KW_EQU,  KW_SET,  KW_END,  KW_ORG,  KW_DS,  KW_EDATA,  KW_CONFIG,  KW_PICID,  KW_DEVICE,  KW_DEFINED,  KW_STREQ,  KW_ISSTR,  KW_CHRVAL,  KW_OPT,  KW_LOCAL,  KW_ENDLOCAL,  KW_ERROR,  KW_ADDLW,  KW_ADDWF,  KW_ANDLW,  KW_ANDWF,  KW_BCF,  KW_BSF,  KW_BTFSC,  KW_BTFSS,  KW_CALL,  KW_CLRF,  KW_CLRW,  KW_CLRWDT,  KW_COMF,  KW_DECF,  KW_DECFSZ,  KW_GOTO,  KW_INCF,  KW_INCFSZ,  KW_IORLW,  KW_IORWF,  KW_MOVLW,  KW_MOVF,  KW_MOVWF,  KW_NOP,  KW_OPTION,  KW_RETFIE,  KW_RETLW,  KW_RETURN,  KW_RLF,  KW_RRF,  KW_SLEEP,    KW_SUBLW,  KW_SUBWF,  KW_SWAPF,  KW_TRIS,  KW_XORLW,  KW_XORWF,  KW_END_POS /* end marker */};#define FIRST_KW KW_INCLUDE#define NUM_KEYWORDS (KW_END_POS-FIRST_KW)/* * truth values for boolean functions */#define EXPR_FALSE (0)#define EXPR_TRUE (~0)/* number of bits in an expression value */#define EXPR_NBITS 32/* * Success/failure return codes for functions */#define OK   (0)#define FAIL (-1)/* * variable declarations *//* picasm.c */extern struct inc_file *current_file;extern char *line_buf_ptr;extern char line_buffer[256];extern int unique_id_count;extern int cond_nest_count;extern org_mode_t O_Mode;extern int prog_location, reg_location, edata_location, org_val;extern int warnlevel;extern struct patch **local_patch_list_ptr;extern int prog_mem_size;extern unsigned short list_flags;extern struct pic_type *pic_type;extern pic_instr_t config_fuses;extern int local_level;/* token.c */extern int token_type, line_buf_off;extern char token_string[TOKSIZE];extern long token_int_val;extern int tok_char;extern int ifskip_mode;/* expr.c */extern int expr_error;/* * function prototypes *//* picasm.c */void *mem_alloc(int size);#define mem_free(p) free(p)void fatal_error(char *, ...), error(int, char *, ...), warning(char *, ...);void write_listing_line(int cond_flag);void gen_code(int val);void add_patch(int tab, struct symbol *sym, patchtype_t type);int gen_byte_c(int instr_code);/* config.c */void parse_config(void);/* token.c */void get_token(void), skip_eol(void);void expand_macro(struct symbol *sym);void begin_include(char *fname), end_include(void);void read_src_char(void);/* symtab.c */void init_symtab(void);void add_local_symtab(void);void remove_local_symtab(void);struct symbol *add_symbol(char *name, int tab);struct symbol *lookup_symbol(char *name, int tab);void dump_symtab(FILE *);/* expr.c */long get_expression(void);/* pic12bit.c */int assemble_12bit_mnemonic(int op);/* pic14bit.c */int assemble_14bit_mnemonic(int op);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -