Banking support

This commit is contained in:
logicog
2025-06-24 06:06:49 +02:00
parent 178e3d2550
commit 797ae23865
+16 -3
View File
@@ -1,6 +1,6 @@
/* /*
* injector <input.bin> <patch.hex> <output.bin> * injector <input.bin> <patch.hex> <output.bin>
* e.g.: ./injector kp-9000-6hx-x.bin RTLPlayground/rwintercept.hex kp-9000-6hx-x_patched.bin * e.g.: ./injector image.bin patch.hex image_patched.bin
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@@ -12,6 +12,8 @@
unsigned char buffer[BUFFER_SIZE]; unsigned char buffer[BUFFER_SIZE];
FILE *inptr, *outptr, *patchptr; FILE *inptr, *outptr, *patchptr;
int bank = 0;
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
char * line = NULL; char * line = NULL;
@@ -60,10 +62,21 @@ int main(int argc, char **argv)
sscanf(line, "%x: %x", &addr, &value); sscanf(line, "%x: %x", &addr, &value);
if (addr < 0x4000) if (addr < 0x4000)
addr += OFFSET; addr += OFFSET;
if (addr >= 0xff00) { // A bank change
bank = value % 64;
bank = bank == 1 ? 0 : bank;
printf("Switching to bank: %d\n", bank);
continue;
}
if (addr < filesize) { if (addr < filesize) {
patches++; patches++;
buffer[addr] = value; if (bank) {
// printf("%s gives %x <- %x\n", line,addr, value); buffer[addr + (bank-1) * 0xc000] = value;
printf("%s gives %x <- %x\n", line, addr + (bank-1) * 0xc000, value);
} else {
buffer[addr] = value;
}
// printf("%s gives %x <- %x\n", line, addr, value);
} else { } else {
printf("Cannot patch: %s\n", line); printf("Cannot patch: %s\n", line);
} }