Created
April 27, 2017 19:40
-
-
Save cauefcr/125571de9f387ad759635b301d47cbcf to your computer and use it in GitHub Desktop.
divide o arquivo binário gerado pelo mips-assembler em 4 aquivos com 8 bits, de modo que o hades possa ler tais arquivo, por padrão funciona com ROMs de 1KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/python3 | |
import sys | |
# utilização: | |
# chmod +x divider.py | |
# ./divider.py nome_do_arquivo_com_o_binario nome_do_arquivo_saida | |
# ou "python3 divider.py" etc | |
def main(args): | |
if len(args) > 2: | |
f = open(args[1],'r') | |
txt = f.read().split() # quebra em linhas o binário fornecido pelo mips-assembler | |
f.close() | |
# abre quatro arquivos com o nome fornecido no segundo argumento, que serão os arquivos .rom do hades | |
output = [open(args[2]+'1.rom','w'),open(args[2]+'2.rom','w'),open(args[2]+'3.rom','w'),open(args[2]+'4.rom','w')] | |
cont = 0 # contador de endereço, usado no formato do hades | |
for line in txt: | |
for i in range(4): | |
cont_hx = str(hex(cont))[2:] # transforma em hexadecimal o endereço, ignora o '0x' do começo | |
for j in range(4-len(cont_hx)): # coloca os '0's de começo no endereço | |
output[i].write('0') | |
output[i].write(cont_hx+':') | |
num_hex = str(hex(int(line[8*i:8*(i+1)],2)))[2:] # pega a localização correta da string, transforma pra hex e ignora o '0x' | |
for j in range(2-len(num_hex)): # coloca os '0's do começo do valor, se necessário | |
output[i].write('0') | |
output[i].write(num_hex) | |
output[i].write('\n') | |
cont += 1 | |
for rest in range(cont,1024): # preenche o resto da memória, com 'X's | |
cont_hx = str(hex(rest))[2:] | |
for i in range(4): | |
for j in range(4-len(cont_hx)): | |
output[i].write('0') | |
output[i].write(cont_hx + ':XX\n') | |
for o in output: | |
o.close() | |
else: | |
print("Número errado de argumentos\nUtilize-o como ./divider.py <arquivo_entrada> <arquivo_saida>") | |
if __name__ == '__main__': | |
main(sys.argv) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment