Welcome to mirror list, hosted at ThFree Co, Russian Federation.

defs.h « source - github.com/ClusterM/nesasm.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: b55d9b0ce6cd1ba830d77621a06fd96f4f594e31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233

/* path separator */
#if defined(DJGPP) || defined(MSDOS) || defined(WIN32)
#define PATH_SEPARATOR '\\'
#define PATH_SEPARATOR_STRING "\\"
#else
#define PATH_SEPARATOR '/'
#define PATH_SEPARATOR_STRING "/"
#endif

/* machine */
#define MACHINE_PCE	0
#define MACHINE_NES	1

/* reserved bank index */
#define RESERVED_BANK	0xF0
#define PROC_BANK		0xF1
#define GROUP_BANK		0xF2

/* tile format for encoder */
#define CHUNKY_TILE		1
#define PACKED_TILE		2

/* line buffer length */
#define LAST_CH_POS	158
#define SFIELD	26
#define SBOLSZ	128

/* macro argument types */
#define NO_ARG			0
#define ARG_REG			1
#define ARG_IMM			2
#define ARG_ABS			3
#define ARG_INDIRECT	4
#define ARG_STRING		5
#define ARG_LABEL		6

/* section types */
#define S_ZP	0
#define S_BSS	1
#define S_CODE	2
#define S_DATA	3

/* assembler options */
#define OPT_LIST	 0
#define OPT_MACRO	 1
#define OPT_WARNING	 2
#define OPT_OPTIMIZE 3

/* assembler directives */
#define P_DB		 0	// .db
#define P_DW		 1	// .dw
#define P_DS		 2	// .ds
#define P_EQU		 3	// .equ
#define P_ORG		 4	// .org
#define P_PAGE		 5	// .page
#define P_BANK		 6	// .bank
#define P_INCBIN	 7	// .incbin
#define P_INCLUDE	 8	// .include
#define P_INCCHR	 9	// .incchr
#define P_INCSPR	10	// .incspr
#define P_INCPAL	11	// .incpal
#define P_INCBAT	12	// .incbat
#define P_MACRO		13	// .macro
#define P_ENDM		14	// .endm
#define P_LIST		15	// .list
#define P_MLIST		16	// .mlist
#define P_NOLIST	17	// .nolist
#define P_NOMLIST	18	// .nomlist
#define P_RSSET		19	// .rsset
#define P_RS		20	// .rs
#define P_IF		21	// .if
#define P_ELSE		22	// .else
#define P_ENDIF		23	// .endif
#define P_FAIL		24	// .fail
#define P_ZP		25	// .zp
#define P_BSS		26	// .bss
#define P_CODE		27	// .code
#define P_DATA		28	// .data
#define P_DEFCHR	29	// .defchr
#define P_FUNC		30	// .func
#define P_IFDEF		31	// .ifdef
#define P_IFNDEF	32	// .ifndef
#define P_VRAM		33	// .vram
#define P_PAL		34	// .pal
#define P_DEFPAL	35	// .defpal
#define P_DEFSPR	36	// .defspr
#define P_INESPRG	37	// .inesprg
#define P_INESCHR	38	// .ineschr
#define P_INESMAP	39	// .inesmap
#define P_INESMIR	40	// .inesmir
#define P_OPT		41	// .opt
#define P_INCTILE	42	// .inctile
#define P_INCMAP	43	// .incmap
#define P_MML		44	// .mml
#define P_PROC		45	// .proc
#define P_ENDP		46	// .endp
#define P_PGROUP	47	// .procgroup
#define P_ENDPG		48	// .endprocgroup
#define P_CALL		49	// .call

/* symbol flags */
#define MDEF	3	/* multiply defined */
#define UNDEF	1	/* undefined - may be zero page */
#define IFUNDEF	2	/* declared in a .if expression */
#define DEFABS	4	/* defined - two byte address */
#define MACRO	5	/* used for a macro name */
#define FUNC	6	/* used for a function */

/* operation code flags */
#define PSEUDO		0x0008000
#define CLASS1		0x0010000
#define CLASS2		0x0020000
#define CLASS3		0x0040000
#define CLASS5		0x0080000
#define CLASS6		0x0100000
#define CLASS7		0x0200000
#define CLASS8		0x0400000
#define CLASS9		0x0800000
#define CLASS10		0x1000000
#define ACC			0x0000001
#define IMM			0x0000002
#define ZP			0x0000004
#define ZP_X		0x0000008
#define ZP_Y		0x0000010
#define ZP_IND		0x0000020
#define ZP_IND_X	0x0000040
#define ZP_IND_Y	0x0000080
#define ABS			0x0000100
#define ABS_X		0x0000200
#define ABS_Y		0x0000400
#define ABS_IND		0x0000800
#define ABS_IND_X	0x0001000

/* pass flags */
#define FIRST_PASS	0
#define LAST_PASS	1

/* structs */
typedef struct t_opcode {
	struct t_opcode *next;
	char  *name;
	void (*proc)(int *);
	int    flag;
	int    value;
	int    type_idx;
} t_opcode;

typedef struct t_input_info {
	FILE *fp;
	int   lnum;
	int   if_level;
	char  name[116];
} t_input_info;

typedef struct t_proc {
	struct t_proc *next;
	struct t_proc *link;
	struct t_proc *group;
	int  old_bank;
	int  bank;
	int  org;
	int  base;
	int  size;
	int  call;
	int  type;
	int  refcnt;
	char name[SBOLSZ];
} t_proc;

typedef struct t_symbol {
	struct t_symbol *next;
	struct t_symbol *local;
	struct t_proc   *proc;
	int  type;
	int  value;
	int  bank;
	int  page;
	int  nb;
	int  size;
	int  vram;
	int  pal;
	int  refcnt;
	int  reserved;
	int  equ;
	int  data_type;
	int  data_size;
	char name[SBOLSZ];
} t_symbol;

typedef struct t_line {
	struct t_line *next;
	char *data;
} t_line;

typedef struct t_macro {
	struct t_macro *next;
	struct t_line *line;
	char name[SBOLSZ];
} t_macro;

typedef struct t_func {
	struct t_func *next;
	char line[128];
	char name[SBOLSZ];
} t_func;

typedef struct t_tile {
	struct t_tile *next;
	unsigned char *data;
	unsigned int   crc;
	int index;
} t_tile;

typedef struct t_machine {
	int type;
	char *asm_name;
	char *asm_title;
	char *rom_ext;
	char *include_env;
	unsigned int zp_limit;
	unsigned int ram_limit;
	unsigned int ram_base;
	unsigned int ram_page;
	unsigned int ram_bank;
	struct t_opcode *inst;
	struct t_opcode *pseudo_inst;
    int  (*pack_8x8_tile)(unsigned char *, void *, int, int);
    int  (*pack_16x16_tile)(unsigned char *, void *, int,  int);
    int  (*pack_16x16_sprite)(unsigned char *, void *, int,  int);
    void (*write_header)(FILE *, int);
} MACHINE;