mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-08-30 14:52:51 +08:00
Banking support
This commit is contained in:
+14
-1
@@ -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,9 +62,20 @@ 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++;
|
||||||
|
if (bank) {
|
||||||
|
buffer[addr + (bank-1) * 0xc000] = value;
|
||||||
|
printf("%s gives %x <- %x\n", line, addr + (bank-1) * 0xc000, value);
|
||||||
|
} else {
|
||||||
buffer[addr] = value;
|
buffer[addr] = value;
|
||||||
|
}
|
||||||
// printf("%s gives %x <- %x\n", line, 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);
|
||||||
|
|||||||
Reference in New Issue
Block a user