Skip to content

Instantly share code, notes, and snippets.

@Starefossen
Created March 4, 2013 07:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Starefossen/5080610 to your computer and use it in GitHub Desktop.
Save Starefossen/5080610 to your computer and use it in GitHub Desktop.
LENA Assembly code disassembler written in Python.
hex = [
'800000',
'8884b0',
'808806',
'808806',
'808806',
'808806',
'808806',
'808806',
'808806',
'808806',
'808806',
'8e8000',
'090000',
'111000',
'8f8000',
'c00020',
'800000',
'8f8008',
'c00040',
'800000',
'8f84b8',
'87f806',
'87f806',
'87f806',
'87f806',
'87f806',
'87f806',
'87f806',
'c00048',
'800000',
'8f8500',
'87f806',
'c00058',
'800000',
'8a0500',
'822006',
'878200',
'87fa00',
'87fa00',
'8ff808',
'c00050',
'800000',
'c00008',
'800000',
'800000',
'800000',
'800000',
'800000',
'800000',
'976800',
'800000',
'8ee808',
'a80260',
'800e82',
'800000',
'a00228',
'800000',
'a00260'
]
for j in range(len(hex)):
i = hex[j]
global str
tmp = int(i, 16)
tmp = bin(tmp)
tmp = tmp[2:]
#print i
for i in range(len(tmp), 24):
tmp = '0' + tmp
op = tmp[1:5]
r1 = tmp[5:9]
r2 = tmp[9:13]
r3 = tmp[13:17]
r4 = tmp[17:21]
fn = tmp[21:]
if (op == '0000') :
op = "R"
r1 = 'R' + str(int(r1,2)) + ' '
r2 = 'R' + str(int(r2,2)) + ' '
r3 = 'R' + str(int(r3,2))
r4 = ''
elif (op == '0001'):
op = "I"
r1 = 'R' + str(int(r1,2)) + ' '
r2 = 'R' + str(int(r2,2)) + ' '
r3 = str(int(r3+r4,2))
r4 = ''
elif (op == '1000'):
op = "DMA"
r1 = ''
r2 = ''
r3 = ''
fn = ''
if (r4 == '0100') : r4 = 'read_active'
elif (r4 == '0101') : r4 = 'read_base_addr'
elif (r4 == '0110') : r4 = 'read_horizontal_incr'
elif (r4 == '0111') : r4 = 'read_vertical_incr'
elif (r4 == '1000') : r4 = 'write_active'
elif (r4 == '1001') : r4 = 'write_base_addr'
elif (r4 == '1010') : r4 = 'write_horizontal_incr'
elif (r4 == '1011') : r4 = 'write_vertical_incr'
elif (r4 == '0001') : r4 = 'start'
elif (op == '0010') :
op = "LW"
elif (op == '0100') :
op = "JUMP"
r1 = str(int(r1+r2+r3+r4,2))
r2 = ''
r3 = ''
r4 = ''
fn = ''
elif (op == '0101') :
print(int(r1+r2+r3+r4,2))
op = "BRANCH"
r1 = str(int(r1+r2+r3+r4,2))
r2 = ''
r3 = ''
r4 = ''
fn = ''
if (fn == '000'): fn = 'add'
elif (fn == '001'): fn = 'sub'
elif (fn == '010'): fn = 'slt'
elif (fn == '011'): fn = 'and'
elif (fn == '100'): fn = 'or'
elif (fn == '101'): fn = 'eq'
elif (fn == '110'): fn = 'sll'
elif (fn == '111'): fn = 'srl'
#print (str(tmp) + ' {'+str(len(tmp))+'}')
print(str(j) + ' - ' + tmp[0:1] + ' ' + op + ' ' + r1 + r2 + r3 + r4 + ' ' + fn)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment