From 797ae238650026d2568e30f54dd26f9be88795dd Mon Sep 17 00:00:00 2001 From: logicog Date: Tue, 24 Jun 2025 06:06:49 +0200 Subject: [PATCH] Banking support --- injector.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/injector.c b/injector.c index 669008b..b61566c 100644 --- a/injector.c +++ b/injector.c @@ -1,6 +1,6 @@ /* * injector - * 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 #include @@ -12,6 +12,8 @@ unsigned char buffer[BUFFER_SIZE]; FILE *inptr, *outptr, *patchptr; +int bank = 0; + int main(int argc, char **argv) { char * line = NULL; @@ -60,10 +62,21 @@ int main(int argc, char **argv) sscanf(line, "%x: %x", &addr, &value); if (addr < 0x4000) 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) { patches++; - buffer[addr] = value; -// printf("%s gives %x <- %x\n", line,addr, value); + if (bank) { + 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 { printf("Cannot patch: %s\n", line); }