|
@@ -405,6 +405,15 @@ unit agsdasz80;
|
|
((o.ref^.base<>NR_NO) or (o.ref^.index<>NR_NO)) and
|
|
((o.ref^.base<>NR_NO) or (o.ref^.index<>NR_NO)) and
|
|
(o.ref^.offset<>0) then
|
|
(o.ref^.offset<>0) then
|
|
begin
|
|
begin
|
|
|
|
+{$ifdef Z80_SDASZ80_LAMENESS_WORKAROUND}
|
|
|
|
+ { sdasz80 doesn't range check the offset d in the (IX+d) and
|
|
|
|
+ (IY+d) addressing modes, but instead truncates it to
|
|
|
|
+ shortint, introducing silent bugs, and prevents us from
|
|
|
|
+ catching bugs in the code generator during compilation }
|
|
|
|
+ if ((o.ref^.base<>NR_NO) or (o.ref^.index<>NR_NO)) and
|
|
|
|
+ ((o.ref^.offset<-128) or (o.ref^.offset>127)) then
|
|
|
|
+ internalerror(2020042802);
|
|
|
|
+{$endif Z80_SDASZ80_LAMENESS_WORKAROUND}
|
|
writer.AsmWrite(tostr(o.ref^.offset));
|
|
writer.AsmWrite(tostr(o.ref^.offset));
|
|
writer.AsmWrite(' (');
|
|
writer.AsmWrite(' (');
|
|
if o.ref^.base<>NR_NO then
|
|
if o.ref^.base<>NR_NO then
|