annotate d/DCPUToolBot-master/dcpu.py @ 2775:4975968b0496

<ThatOtherPerson> cp -r DCPUToolBot-master d
author HackBot
date Mon, 22 Apr 2013 16:07:09 +0000
parents 0e687eac0f29
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2765
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
1 import subprocess
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
2 import tempfile
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
3 import os
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
4 import re
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
5 import time
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
6 import threading
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
7
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
8 def link(files):
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
9 out_fd, out_fname = tempfile.mkstemp()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
10 os.fdopen(out_fd).close()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
11
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
12 process_flags = ["dtld", "-o", out_fname, "-k", "none"]
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
13 filenames = []
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
14 for file in files:
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
15 fd, fname = tempfile.mkstemp()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
16 f = os.fdopen(fd, 'wb')
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
17 f.write(file)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
18 f.close()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
19 filenames.append(fname)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
20 process_flags.append(fname)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
21
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
22 proc = subprocess.Popen(process_flags, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
23 res, err = proc.communicate()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
24
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
25 for file in filenames:
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
26 os.remove(file)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
27
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
28 final = open(out_fname)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
29 res = final.read()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
30 final.close()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
31
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
32 return (res, err)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
33
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
34 def assemble_file(code, binary=False):
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
35 code = '\n'.join(code.split('/'))
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
36 code = '\n'.join(code.split('\\'))
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
37
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
38 process_flags = ["dtasm", "-o", "-", "-"]
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
39 if binary:
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
40 process_flags.append("--binary")
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
41 process = subprocess.Popen(process_flags, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
42 results = process.communicate(code)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
43 res = results[0]
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
44 err = results[1]
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
45 return (res, err)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
46
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
47 def assemble_binary(code):
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
48
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
49 code = '///'.join(code.split('\\\\\\'))
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
50 files = code.split('///')
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
51
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
52 if len(files) > 1:
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
53 file_binaries = []
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
54 err = ""
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
55 for file in files:
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
56 assembled = assemble_file(file)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
57 if assembled[0]:
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
58 file_binaries.append(assembled[0])
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
59 if assembled[1]:
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
60 err += assembled[1]
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
61 res, link_err = link(file_binaries)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
62 err += link_err
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
63 return (res, err)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
64 else:
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
65 return assemble_file(code, True)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
66
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
67 def assemble(code):
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
68 res, err = assemble_binary(code)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
69 words = []
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
70 i = 0
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
71 while i < len(res) / 2:
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
72 byte_one = ord(res[2*i])
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
73 byte_two = ord(res[2*i+1])
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
74 print "Bytes:", byte_one, byte_two
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
75 word = "0x%04x" % ((byte_one << 8) + byte_two)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
76 words.append(word)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
77 i += 1
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
78 print "Assembly attempted"
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
79 return (words, err)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
80
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
81 def timeout(p):
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
82 if p.poll() == None:
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
83 p.kill()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
84
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
85 hex_re = re.compile("^0x[0-9a-fA-F]+")
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
86 disasm_re = re.compile("0x[0-9a-fA-F]{4} \(0x[0-9a-fA-F]{4}\): *(>>>)? *(.+)\r?\n?")
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
87 null_re = re.compile("<null>")
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
88
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
89 def disassemble(binary_str):
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
90 byte_strings = binary_str.split(",")
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
91
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
92 print byte_strings
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
93
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
94 fd, filename = tempfile.mkstemp()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
95 file = os.fdopen(fd, 'wb')
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
96
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
97 for byte in byte_strings:
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
98 byte = byte.strip()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
99 if hex_re.match(byte):
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
100 byte = int(byte, 16)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
101 else:
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
102 byte = int(byte)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
103 file.write(chr(byte >> 8))
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
104 file.write(chr(byte & 0xff))
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
105
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
106 file.close()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
107
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
108 length = hex(len(byte_strings))
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
109 print length
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
110
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
111 args = 'dtdb -c "disasm 0x0 ' + length + '" ' + filename
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
112 print args
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
113
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
114 proc = subprocess.Popen(args, stderr=subprocess.PIPE, shell=True)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
115 proc.wait()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
116
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
117 res = proc.stderr.read()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
118
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
119 matches = disasm_re.findall(res)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
120
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
121 res = []
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
122
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
123 for match in matches:
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
124 if not null_re.match(match[1]):
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
125 res.append(match[1].replace('\r', ''))
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
126
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
127 response = ' / '.join(res)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
128
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
129 os.remove(filename)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
130 return response
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
131
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
132 register_re = re.compile(r"([A-Z]{1,2}):\s*0x([\dA-F]+)")
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
133
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
134 def execute(code):
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
135 binary, err = assemble_binary(code)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
136 if err and not ("warning" in err):
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
137 return ("", err)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
138
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
139 num_words = len(binary) / 2
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
140
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
141 fd, filename = tempfile.mkstemp()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
142 file = os.fdopen(fd, 'wb')
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
143 file.write(binary)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
144 file.close()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
145
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
146 start = time.time()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
147 proc = subprocess.Popen(['dtemu', '-t', '-h', filename], stderr=subprocess.PIPE)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
148 t = threading.Timer(5, timeout, [proc])
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
149 while proc.poll() == None:
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
150 if time.time() - start > 5:
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
151 proc.kill()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
152 final = time.time() - start
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
153
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
154 err = proc.stderr.read()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
155
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
156 err_lines = err.split("\n")
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
157
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
158 for i in range(11):
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
159 err_lines.pop()
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
160
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
161 errors = "\n".join(err_lines)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
162
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
163 os.remove(filename)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
164
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
165 register_matches = register_re.findall(err)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
166
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
167 changed_registers = []
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
168
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
169 for match in register_matches:
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
170 if match[1] != "0000":
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
171 changed_registers.append(match[0] + ":0x" + match[1])
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
172 registers = ', '.join(changed_registers)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
173 ms = final * 1000
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
174 response = "[" + str(num_words) + " words][" + registers + "][%dms]" % round(ms)
0e687eac0f29 <ThatOtherPerson> mv DCPUToolBot-master d
HackBot
parents:
diff changeset
175 return (response, errors)