📄 picasm.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 + -