From 14608eabab6fac1cf983ffbc26a89fedcb7d16c8 Mon Sep 17 00:00:00 2001 From: TimoVM Date: Thu, 11 Jun 2026 22:00:30 +0200 Subject: [PATCH] Fix issues with gen1 payload (tested on console) --- container/GB_Payloads.containerdef | 1 + source/link_handler.cpp | 2 +- tools/gb-payload-generator/include/constants/symbols.asm | 2 +- .../src/gen1specific/specificPayloadGen1.asm | 2 +- .../src/gen1universal/universalPayloadGen1.asm | 6 ++++-- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/container/GB_Payloads.containerdef b/container/GB_Payloads.containerdef index 7fee1a3..f4c0e27 100644 --- a/container/GB_Payloads.containerdef +++ b/container/GB_Payloads.containerdef @@ -1,3 +1,4 @@ tools/gb-payload-generator/build/specificPayloadGen1/specificPayloadGen1_en_r.bin +tools/gb-payload-generator/build/specificPayloadGen1/specificPayloadGen1_en_y.bin tools/gb-payload-generator/build/universalPayloadGen1/universalPayloadGen1.bin tools/gb-payload-generator/build/universalPayloadGen2/universalPayloadGen2.bin diff --git a/source/link_handler.cpp b/source/link_handler.cpp index 5a71189..dc7d6f9 100644 --- a/source/link_handler.cpp +++ b/source/link_handler.cpp @@ -624,7 +624,7 @@ void LinkConnection::load_payload(GB_PayloadsFiles payload) void LinkConnection::loadCurrGameFromChecksum() { - if (((dataOutBuffer[0] + dataOutBuffer[1]) & 0x7F) != dataOutBuffer[3]) + if (((dataOutBuffer[0] + dataOutBuffer[1]) & 0x7F) != dataOutBuffer[2]) { currROM = GB_ROM_ERROR; }; diff --git a/tools/gb-payload-generator/include/constants/symbols.asm b/tools/gb-payload-generator/include/constants/symbols.asm index 25cd0f2..88752d0 100644 --- a/tools/gb-payload-generator/include/constants/symbols.asm +++ b/tools/gb-payload-generator/include/constants/symbols.asm @@ -31,7 +31,7 @@ DEF SerialOffset_C = 0x70 DEF PACKET_SEND = 0xC6D0 DEF PACKET_RECEIVE = 0xC6DC -DEF CHECKSUMPACKET_SIZE = 7 +DEF CHECKSUMPACKET_SIZE = 4 DEF RNGSIZE_GEN2 = 0x11 DEF LINKDATASIZE_GEN2 = 0x1C2 diff --git a/tools/gb-payload-generator/src/gen1specific/specificPayloadGen1.asm b/tools/gb-payload-generator/src/gen1specific/specificPayloadGen1.asm index 56dae1c..9bbbba7 100644 --- a/tools/gb-payload-generator/src/gen1specific/specificPayloadGen1.asm +++ b/tools/gb-payload-generator/src/gen1specific/specificPayloadGen1.asm @@ -77,7 +77,7 @@ Payload: call .changeInterruptsAndCommunicate jr .searchCounter ; hl now points to 0xC6DC .changeInterruptsAndCommunicate - call 0xC68A ; leftover from the universal payload, only allow serial interrupt and call Serial_ExchangeBytes + call 0xC68E ; leftover from the universal payload, only allow serial interrupt and call Serial_ExchangeBytes ld a, IE_SERIAL | IE_TIMER | IE_VBLANK ; enable vblank interrupt so that a sound effect can play ldh [rIE], a ret diff --git a/tools/gb-payload-generator/src/gen1universal/universalPayloadGen1.asm b/tools/gb-payload-generator/src/gen1universal/universalPayloadGen1.asm index 284a5be..1465974 100644 --- a/tools/gb-payload-generator/src/gen1universal/universalPayloadGen1.asm +++ b/tools/gb-payload-generator/src/gen1universal/universalPayloadGen1.asm @@ -169,6 +169,8 @@ SerialPatchListAligned: ds 4, 0 push de ; push 0xC800 on the stack for the next ret inc a + ld a, IE_SERIAL | IE_TIMER | IE_VBLANK + ldh [rIE], a ret nz ld a, 0xC3 ld hl, Start - 1 @@ -176,6 +178,7 @@ SerialPatchListAligned: inc hl cp a, [hl] jr nz, .loopUntilJumpInit + ds 4, 0 jp hl .findPointerAndPatch ; searches for specific opcodes from a certain offset and places the resulting pointer at a specific location ; b = first opcode to search for @@ -184,7 +187,6 @@ SerialPatchListAligned: ; hl = offset to start searching from ; return destination pointer in hl, made to minimize amount of M-cycles taken ld de, .callPatchedPointer + 1 - ds 4, 0 .findPointerAndPatchLoop ld a, [hli] cp b @@ -196,10 +198,10 @@ SerialPatchListAligned: ld a, l ld [de], a inc de + ds 4, 0 ld a, h ld [de], a ret - ds 5, 0 .callSerial_ExchangeBytes ld [hl], SERIAL_PREAMBLE_BYTE ld b, 0