Mercurial > repos > blastem
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); |