comparison gentests.py @ 608:097c172839d4

Don't use out of bounds displacements in indexed mode even if our targeted address is out of RAM range
author Michael Pavone <pavone@retrodev.com>
date Sat, 27 Dec 2014 14:50:28 -0800
parents bfbb8613efb4
children 188a60def81f
comparison
equal deleted inserted replaced
607:f838bc0aeb7c 608:097c172839d4
176 if (address & 0xFFFFFF) < 0xE00000: 176 if (address & 0xFFFFFF) < 0xE00000:
177 if (address & 0xFFFFFF) < 128: 177 if (address & 0xFFFFFF) < 128:
178 self.disp -= (address & 0xFFFFFF) 178 self.disp -= (address & 0xFFFFFF)
179 else: 179 else:
180 self.disp += 0xE00000-(address & 0xFFFFFF) 180 self.disp += 0xE00000-(address & 0xFFFFFF)
181 if self.disp > 127:
182 self.disp = 127
183 elif self.disp < -128:
184 self.disp = -128
181 address = base + index + self.disp 185 address = base + index + self.disp
182 elif (address & 0xFFFFFF) > 0xFFFFFC: 186 elif (address & 0xFFFFFF) > 0xFFFFFC:
183 self.disp -= (address & 0xFFFFFF) - 0xFFFFFC 187 self.disp -= (address & 0xFFFFFF) - 0xFFFFFC
188 if self.disp > 127:
189 self.disp = 127
190 elif self.disp < -128:
191 self.disp = -128
184 address = base + index + self.disp 192 address = base + index + self.disp
185 if size != 'b' and address & 1: 193 if size != 'b' and address & 1:
186 self.disp = self.disp ^ 1 194 self.disp = self.disp ^ 1
187 address = base + index + self.disp 195 address = base + index + self.disp
188 minv,maxv = get_size_range(size) 196 minv,maxv = get_size_range(size)