From: iLag Date: Wed, 22 Mar 2017 21:19:35 +0000 (-0700) Subject: Add support for single-line cheats and PAR codes. X-Git-Tag: v1.93~53 X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8655fd046255007513449f76cf2d9f5efd84f49e;p=picodrive.git Add support for single-line cheats and PAR codes. notaz: include required header --- diff --git a/pico/patch.c b/pico/patch.c index b961e802..40e8372c 100644 --- a/pico/patch.c +++ b/pico/patch.c @@ -22,6 +22,7 @@ */ #include "pico_int.h" +#include "memory.h" #include "patch.h" struct patch @@ -142,7 +143,7 @@ static void hex_decode(const char *code, struct patch *result) /* THIS is the function you call from the MegaDrive or whatever. This figures * out whether it's a genie or hex code, depunctuates it, and calls the proper * decoder. */ -static void decode(const char* code, struct patch* result) +void decode(const char* code, struct patch* result) { int len = strlen(code), i, j; char code_to_pass[16], *x; @@ -299,6 +300,8 @@ void PicoPatchPrepare(void) PicoPatches[i].addr &= ~1; if (PicoPatches[i].addr < Pico.romsize) PicoPatches[i].data_old = *(unsigned short *)(Pico.rom + PicoPatches[i].addr); + else + PicoPatches[i].data_old = (unsigned short) m68k_read16(PicoPatches[i].addr); if (strstr(PicoPatches[i].name, "AUTO")) PicoPatches[i].active = 1; } @@ -328,7 +331,15 @@ void PicoPatchApply(void) } else { - /* TODO? */ + if (PicoPatches[i].active) + m68k_write16(PicoPatches[i].addr,PicoPatches[i].data); + else { + // if current addr is not patched by older patch, write back original val + for (u = 0; u < i; u++) + if (PicoPatches[u].addr == addr) break; + if (u == i) + m68k_write16(PicoPatches[i].addr,PicoPatches[i].data_old); + } } } }