@@ -162,7 +162,7 @@ def chunk_into_words(code, bytes_per_word, byteorder):
162
162
return words
163
163
164
164
165
- def decode_instruction_and_print (i ):
165
+ def decode_instruction_and_print (i , verbose = False ):
166
166
print (ubinascii .hexlify (i .to_bytes (4 , 'little' )))
167
167
168
168
try :
@@ -173,11 +173,12 @@ def decode_instruction_and_print(i):
173
173
174
174
print (name )
175
175
176
- for field , val , extra in get_instruction_fields (ins ):
177
- print (" {:10} = {:3}{}" .format (field , val , extra ))
176
+ if verbose :
177
+ for field , val , extra in get_instruction_fields (ins ):
178
+ print (" {:10} = {:3}{}" .format (field , val , extra ))
178
179
179
180
180
- def disassemble_manually (byte_sequence_string ):
181
+ def disassemble_manually (byte_sequence_string , verbose = False ):
181
182
sequence = byte_sequence_string .strip ().replace (' ' ,'' )
182
183
chars_per_instruction = 8
183
184
list = [
@@ -188,18 +189,18 @@ def disassemble_manually(byte_sequence_string):
188
189
for instruction in list :
189
190
byte_sequence = ubinascii .unhexlify (instruction .replace (' ' ,'' ))
190
191
i = int .from_bytes (byte_sequence , 'little' )
191
- decode_instruction_and_print (i )
192
+ decode_instruction_and_print (i , verbose )
192
193
193
194
194
- def disassemble_file (filename ):
195
+ def disassemble_file (filename , verbose = False ):
195
196
with open (filename , 'rb' ) as f :
196
197
data = f .read ()
197
198
198
199
code = data [12 :] # text_offset (where code starts) is always 12 for ULP binaries
199
200
words = chunk_into_words (code , bytes_per_word = 4 , byteorder = 'little' )
200
201
201
202
for i in words :
202
- decode_instruction_and_print (i )
203
+ decode_instruction_and_print (i , verbose )
203
204
204
205
205
206
def print_help ():
@@ -208,11 +209,13 @@ def print_help():
208
209
print ('Options:' )
209
210
print (' -h Show this help text' )
210
211
print (' -m <byte_sequence> Sequence of hex bytes (8 per instruction)' )
212
+ print (' -v Verbose mode. Also show instruction fields' )
211
213
print (' <filename> Path to ULP binary' )
212
214
pass
213
215
214
216
215
217
def handle_cmdline (params ):
218
+ verbose = False
216
219
filename = None
217
220
byte_sequence = None
218
221
@@ -238,6 +241,8 @@ def handle_cmdline(params):
238
241
239
242
byte_sequence = "" .join (params [:sequence_len + 1 ])
240
243
params = params [sequence_len :]
244
+ elif params [0 ] == '-v' :
245
+ verbose = True
241
246
elif params [0 ][0 ] == '-' :
242
247
# ignore unknown options for now
243
248
pass
@@ -248,9 +253,9 @@ def handle_cmdline(params):
248
253
params = params [1 :] # remove first param from list
249
254
250
255
if byte_sequence :
251
- disassemble_manually (byte_sequence )
256
+ disassemble_manually (byte_sequence , verbose )
252
257
elif filename :
253
- disassemble_file (filename )
258
+ disassemble_file (filename , verbose )
254
259
255
260
256
261
if sys .argv : # if run from cmdline
0 commit comments