comparison dis.c @ 632:80e111b48d4b

Add -r option to indicate VOS program module contains a 68K reset vector
author Michael Pavone <pavone@retrodev.com>
date Sat, 11 Oct 2014 21:20:02 -0700
parents de6f00204fa2
children a759f4e38488
comparison
equal deleted inserted replaced
631:de6f00204fa2 632:80e111b48d4b
106 char disbuf[1024]; 106 char disbuf[1024];
107 m68kinst instbuf; 107 m68kinst instbuf;
108 unsigned short * cur; 108 unsigned short * cur;
109 deferred *def = NULL, *tmpd; 109 deferred *def = NULL, *tmpd;
110 110
111 uint8_t labels = 0, addr = 0, only = 0, vos = 0; 111 uint8_t labels = 0, addr = 0, only = 0, vos = 0, reset = 0;
112 112
113 for(uint8_t opt = 2; opt < argc; ++opt) { 113 for(uint8_t opt = 2; opt < argc; ++opt) {
114 if (argv[opt][0] == '-') { 114 if (argv[opt][0] == '-') {
115 FILE * address_log; 115 FILE * address_log;
116 switch (argv[opt][1]) 116 switch (argv[opt][1])
124 case 'o': 124 case 'o':
125 only = 1; 125 only = 1;
126 break; 126 break;
127 case 'v': 127 case 'v':
128 vos = 1; 128 vos = 1;
129 break;
130 case 'r':
131 reset = 1;
129 break; 132 break;
130 case 'f': 133 case 'f':
131 opt++; 134 opt++;
132 if (opt >= argc) { 135 if (opt >= argc) {
133 fputs("-f must be followed by a filename\n", stderr); 136 fputs("-f must be followed by a filename\n", stderr);
172 address_end = address_off + filesize - 0x1000; 175 address_end = address_off + filesize - 0x1000;
173 def = defer(header.main_entry_link.code_address, def); 176 def = defer(header.main_entry_link.code_address, def);
174 named_labels = add_label(named_labels, "main_entry_link", header.main_entry_link.code_address); 177 named_labels = add_label(named_labels, "main_entry_link", header.main_entry_link.code_address);
175 for (int i = 0; i < header.n_modules; i++) 178 for (int i = 0; i < header.n_modules; i++)
176 { 179 {
177 def = defer(header.module_map_entries[i].code_address, def); 180 if (!reset || header.module_map_entries[i].code_address != header.user_boundary)
181 {
182 def = defer(header.module_map_entries[i].code_address, def);
183 }
178 named_labels = add_label(named_labels, header.module_map_entries[i].name.str, header.module_map_entries[i].code_address); 184 named_labels = add_label(named_labels, header.module_map_entries[i].name.str, header.module_map_entries[i].code_address);
179 } 185 }
180 fseek(f, 0x1000, SEEK_SET); 186 fseek(f, 0x1000, SEEK_SET);
181 filebuf = malloc(filesize - 0x1000); 187 filebuf = malloc(filesize - 0x1000);
182 if (fread(filebuf, 2, (filesize - 0x1000)/2, f) != (filesize - 0x1000)/2) 188 if (fread(filebuf, 2, (filesize - 0x1000)/2, f) != (filesize - 0x1000)/2)
185 } 191 }
186 fclose(f); 192 fclose(f);
187 for(cur = filebuf; cur - filebuf < ((filesize - 0x1000)/2); ++cur) 193 for(cur = filebuf; cur - filebuf < ((filesize - 0x1000)/2); ++cur)
188 { 194 {
189 *cur = (*cur >> 8) | (*cur << 8); 195 *cur = (*cur >> 8) | (*cur << 8);
196 }
197 if (reset)
198 {
199 def = defer(filebuf[2] << 16 | filebuf[3], def);
200 named_labels = add_label(named_labels, "reset", filebuf[2] << 16 | filebuf[3]);
190 } 201 }
191 } else { 202 } else {
192 address_off = 0; 203 address_off = 0;
193 address_end = filesize; 204 address_end = filesize;
194 filebuf = malloc(filesize); 205 filebuf = malloc(filesize);