comparison dis.c @ 1078:c4bfbf55d418

Added some hacky support for specifying a start offset in 68K disassembler
author Michael Pavone <pavone@retrodev.com>
date Tue, 04 Oct 2016 18:28:35 -0700
parents d29722e3359c
children 137dbd05ceab
comparison
equal deleted inserted replaced
1077:1a66d5165ea7 1078:c4bfbf55d418
151 deferred *def = NULL, *tmpd; 151 deferred *def = NULL, *tmpd;
152 152
153 uint8_t labels = 0, addr = 0, only = 0, vos = 0, reset = 0; 153 uint8_t labels = 0, addr = 0, only = 0, vos = 0, reset = 0;
154 tern_node * named_labels = NULL; 154 tern_node * named_labels = NULL;
155 155
156 uint32_t address_off = 0, address_end;
156 for(uint8_t opt = 2; opt < argc; ++opt) { 157 for(uint8_t opt = 2; opt < argc; ++opt) {
157 if (argv[opt][0] == '-') { 158 if (argv[opt][0] == '-') {
158 FILE * address_log; 159 FILE * address_log;
159 switch (argv[opt][1]) 160 switch (argv[opt][1])
160 { 161 {
170 case 'v': 171 case 'v':
171 vos = 1; 172 vos = 1;
172 break; 173 break;
173 case 'r': 174 case 'r':
174 reset = 1; 175 reset = 1;
176 break;
177 case 's':
178 opt++;
179 if (opt >= argc) {
180 fputs("-s must be followed by an offset\n", stderr);
181 exit(1);
182 }
183 address_off = strtol(argv[opt], NULL, 0);
175 break; 184 break;
176 case 'f': 185 case 'f':
177 opt++; 186 opt++;
178 if (opt >= argc) { 187 if (opt >= argc) {
179 fputs("-f must be followed by a filename\n", stderr); 188 fputs("-f must be followed by a filename\n", stderr);
206 if (*end == '=') { 215 if (*end == '=') {
207 named_labels = add_label(named_labels, end+1, address); 216 named_labels = add_label(named_labels, end+1, address);
208 } 217 }
209 } 218 }
210 } 219 }
211
212 FILE * f = fopen(argv[1], "rb"); 220 FILE * f = fopen(argv[1], "rb");
213 fseek(f, 0, SEEK_END); 221 fseek(f, 0, SEEK_END);
214 filesize = ftell(f); 222 filesize = ftell(f);
215 fseek(f, 0, SEEK_SET); 223 fseek(f, 0, SEEK_SET);
216 224
217 char int_key[MAX_INT_KEY_SIZE]; 225 char int_key[MAX_INT_KEY_SIZE];
218 uint32_t address_off, address_end;
219 if (vos) 226 if (vos)
220 { 227 {
221 vos_program_module header; 228 vos_program_module header;
222 vos_read_header(f, &header); 229 vos_read_header(f, &header);
223 vos_read_alloc_module_map(f, &header); 230 vos_read_alloc_module_map(f, &header);
248 { 255 {
249 def = defer(filebuf[2] << 16 | filebuf[3], def); 256 def = defer(filebuf[2] << 16 | filebuf[3], def);
250 named_labels = add_label(named_labels, "reset", filebuf[2] << 16 | filebuf[3]); 257 named_labels = add_label(named_labels, "reset", filebuf[2] << 16 | filebuf[3]);
251 } 258 }
252 } else { 259 } else {
253 address_off = 0; 260 address_end = address_off + filesize;
254 address_end = filesize;
255 filebuf = malloc(filesize); 261 filebuf = malloc(filesize);
256 if (fread(filebuf, 2, filesize/2, f) != filesize/2) 262 if (fread(filebuf, 2, filesize/2, f) != filesize/2)
257 { 263 {
258 fprintf(stderr, "Failure while reading file %s\n", argv[1]); 264 fprintf(stderr, "Failure while reading file %s\n", argv[1]);
259 } 265 }