comparison dis.c @ 197:7c227a8ec53d

Add instruction address logging to translator and support for reading an address log to the disassembler
author Mike Pavone <pavone@retrodev.com>
date Thu, 17 Jan 2013 20:00:07 -0800
parents afbfb0ac0256
children 140af5509ce7
comparison
equal deleted inserted replaced
196:f8955d33486d 197:7c227a8ec53d
80 fread(filebuf, 2, filesize/2, f); 80 fread(filebuf, 2, filesize/2, f);
81 fclose(f); 81 fclose(f);
82 deferred *def = NULL, *tmpd; 82 deferred *def = NULL, *tmpd;
83 for(uint8_t opt = 2; opt < argc; ++opt) { 83 for(uint8_t opt = 2; opt < argc; ++opt) {
84 if (argv[opt][0] == '-') { 84 if (argv[opt][0] == '-') {
85 FILE * address_log;
85 switch (argv[opt][1]) 86 switch (argv[opt][1])
86 { 87 {
87 case 'l': 88 case 'l':
88 labels = 1; 89 labels = 1;
89 break; 90 break;
91 addr = 1; 92 addr = 1;
92 break; 93 break;
93 case 'o': 94 case 'o':
94 only = 1; 95 only = 1;
95 break; 96 break;
97 case 'f':
98 opt++;
99 if (opt >= argc) {
100 fputs("-f must be followed by a filename\n", stderr);
101 exit(1);
102 }
103 address_log = fopen(argv[opt], "r");
104 if (!address_log) {
105 fprintf(stderr, "Failed to open %s for reading\n", argv[opt]);
106 exit(1);
107 }
108 while (fgets(disbuf, sizeof(disbuf), address_log)) {
109 if (disbuf[0]) {
110 uint32_t address = strtol(disbuf, NULL, 16);
111 if (address) {
112 def = defer(address, def);
113 reference(address);
114 }
115 }
116 }
96 } 117 }
97 } else { 118 } else {
98 uint32_t address = strtol(argv[opt], NULL, 16); 119 uint32_t address = strtol(argv[opt], NULL, 16);
99 def = defer(address, def); 120 def = defer(address, def);
100 reference(address); 121 reference(address);