X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=mark.c;h=a5e1975498d33d3fd155267e957581d795b21907;hp=ca7152e81bdf643f76a035715a661b4de1095e74;hb=66b362fa203d0850e8dce8045adb454e354c22ce;hpb=261f8d9198c4235bcdced4403ba391553e6bd0d1 diff --git a/mark.c b/mark.c index ca7152e..a5e1975 100644 --- a/mark.c +++ b/mark.c @@ -469,8 +469,18 @@ printf("(sect[TEXT].sloc=$%X) --> ", sect[TEXT].sloc); // place to prevent a bad address at link time. :-P As // a consequence of this, the highest address we can // have here is $1FFFF8. + uint32_t diffsave = diff; diff = ((diff & 0x001FFFFF) << 11) | olBitsSave; SETBE32(dp, 0, diff); + // But we need those 3 bits, otherwise we can get in + // trouble with things like OL data that is in the cart + // space, and BOOM! So the 2nd phrase of the fixup (it + // will *always* have a 2nd phrase) has a few spare + // bits, we chuck them in there. + uint32_t p2 = GETBE32(dp, 8); + p2 &= 0x1FFFFFFF; + p2 |= (diffsave & 0x00E00000) << 8; + SETBE32(dp, 8, p2); } else // LONG relocation {