From c64ff1d89d8d65c50af0a39bfba479d7aee66671 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Valor=20Mart=C3=ADnez?= Date: Fri, 21 Apr 2023 18:52:16 +0200 Subject: [PATCH] =?UTF-8?q?Versi=C3=B3n=20funcional?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 60 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 52 insertions(+), 8 deletions(-) diff --git a/main.cpp b/main.cpp index 7759445..427c840 100644 --- a/main.cpp +++ b/main.cpp @@ -7,10 +7,16 @@ using namespace std; -ifstream inputFile; string filePath = ""; vector buffer; +int desp = 0x2000; +int numBytes = 0x2000; +int firstByte = desp + 0x200; +int lastByte = desp + numBytes - 1; +int checksum1 = desp + 0x270; +int checksum2 = desp + 0x271; + void checkParameters(int argc, char *argv[]) { if (argc != 2) @@ -24,16 +30,34 @@ void checkParameters(int argc, char *argv[]) void loadFile(string s) { - inputFile.open(s, ios::binary); - if (!inputFile.good()) + ifstream inputFile(s, ios::binary); + if (inputFile.good()) + buffer.assign(istreambuf_iterator(inputFile), {}); + else { cout << "No se puede abrir el archivo: " << s << endl; exit(EXIT_FAILURE); } + inputFile.close(); +} - // Copia el stream al buffer - vector temp(std::istreambuf_iterator(inputFile), {}); - buffer = temp; +void saveFile(string s) +{ + ofstream outputFile(s, ios::binary); + if (outputFile.good()) + { + for (auto i : buffer) + { + outputFile << i; + } + cout << "Fichero guardado: " << s << endl; + } + else + { + cout << "No se puede abrir el archivo: " << s << endl; + exit(EXIT_FAILURE); + } + outputFile.close(); } void printBuffer() @@ -48,11 +72,31 @@ void printBuffer() } } +int calcChecksum() +{ + int sum = 0; + for (int i = firstByte; i <= lastByte; i++) + { + if (i != checksum1 and i != checksum2) + sum += static_cast(buffer.at(i)); + } + sum += 3328; // Corrige el checksum + buffer.at(checksum1) = sum % 256; + buffer.at(checksum2) = (sum >> 8) % 256; + return sum; +} + int main(int argc, char *argv[]) { checkParameters(argc, argv); loadFile(filePath); - printBuffer(); - cout << "Fin del programa" << endl; + int sum = calcChecksum(); + saveFile(filePath); + + cout << hex; + cout << "0x" << checksum1 << ": 0x" << static_cast(buffer.at(checksum1)) << endl; + cout << "0x" << checksum2 << ": 0x" << static_cast(buffer.at(checksum2)) << endl; + cout << "checksum (0x" << firstByte << " .. 0x" << lastByte << "): 0x" << sum << endl; + return 0; }