67 lines
1.3 KiB
Python
67 lines
1.3 KiB
Python
import sys
|
|
import os
|
|
|
|
# Parámetros equivalentes
|
|
desp = 0x2000
|
|
numBytes = 0x2000
|
|
firstByte = desp + 0x200
|
|
lastByte = desp + numBytes - 1
|
|
checksum1 = desp + 0x270
|
|
checksum2 = desp + 0x271
|
|
|
|
buffer = bytearray()
|
|
|
|
|
|
def check_parameters():
|
|
if len(sys.argv) != 2:
|
|
exe = os.path.basename(sys.argv[0])
|
|
print(f"Uso: {exe} FILE")
|
|
sys.exit(1)
|
|
return sys.argv[1]
|
|
|
|
|
|
def load_file(path):
|
|
global buffer
|
|
try:
|
|
with open(path, "rb") as f:
|
|
buffer = bytearray(f.read())
|
|
except IOError:
|
|
print(f"No se puede abrir el archivo: {path}")
|
|
sys.exit(1)
|
|
|
|
|
|
def save_file(path):
|
|
try:
|
|
with open(path, "wb") as f:
|
|
f.write(buffer)
|
|
print(f"Fichero guardado: {path}")
|
|
except IOError:
|
|
print(f"No se puede abrir el archivo: {path}")
|
|
sys.exit(1)
|
|
|
|
|
|
def calc_checksum():
|
|
total = 0
|
|
for i in range(firstByte, lastByte + 1):
|
|
if i not in (checksum1, checksum2):
|
|
total += buffer[i]
|
|
|
|
total += 3328 # Corrección del checksum
|
|
|
|
buffer[checksum1] = total % 256
|
|
buffer[checksum2] = (total >> 8) % 256
|
|
|
|
return total
|
|
|
|
|
|
def main():
|
|
filePath = check_parameters()
|
|
load_file(filePath)
|
|
save_file(filePath + ".bak")
|
|
calc_checksum()
|
|
save_file(filePath)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|