Mercurial > repos > blastem
comparison z80_to_x86.c @ 506:a3b48a57e847
Fix timing of certain ld and jp instructions in the Z80 core
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 27 Jan 2014 22:12:22 -0800 |
parents | b7b7a1cab44a |
children | 6b248602ab84 ea80559c67cb 6aa2a8ab9c70 |
comparison
equal
deleted
inserted
replaced
505:b7b7a1cab44a | 506:a3b48a57e847 |
---|---|
344 case Z80_REG_INDIRECT: | 344 case Z80_REG_INDIRECT: |
345 cycles = size == SZ_B ? 4 : 6; | 345 cycles = size == SZ_B ? 4 : 6; |
346 if (inst->ea_reg == Z80_IX || inst->ea_reg == Z80_IY) { | 346 if (inst->ea_reg == Z80_IX || inst->ea_reg == Z80_IY) { |
347 cycles += 4; | 347 cycles += 4; |
348 } | 348 } |
349 if (inst->reg == Z80_I || inst->ea_reg == Z80_I) { | |
350 cycles += 5; | |
351 } | |
349 break; | 352 break; |
350 case Z80_IMMED: | 353 case Z80_IMMED: |
351 cycles = size == SZ_B ? 7 : 10; | 354 cycles = size == SZ_B ? 7 : 10; |
352 break; | 355 break; |
353 case Z80_IMMED_INDIRECT: | 356 case Z80_IMMED_INDIRECT: |
354 cycles = 10; | 357 cycles = 10; |
355 break; | 358 break; |
356 case Z80_IX_DISPLACE: | 359 case Z80_IX_DISPLACE: |
357 case Z80_IY_DISPLACE: | 360 case Z80_IY_DISPLACE: |
358 cycles = 12; | 361 cycles = 16; |
359 break; | 362 break; |
360 } | 363 } |
361 if ((inst->reg >= Z80_IXL && inst->reg <= Z80_IYH) || inst->reg == Z80_IX || inst->reg == Z80_IY) { | 364 if ((inst->reg >= Z80_IXL && inst->reg <= Z80_IYH) || inst->reg == Z80_IX || inst->reg == Z80_IY) { |
362 cycles += 4; | 365 cycles += 4; |
363 } | 366 } |
1310 } | 1313 } |
1311 break; | 1314 break; |
1312 } | 1315 } |
1313 case Z80_JP: { | 1316 case Z80_JP: { |
1314 cycles = 4; | 1317 cycles = 4; |
1315 if (inst->addr_mode != Z80_REG) { | 1318 if (inst->addr_mode != Z80_REG_INDIRECT) { |
1316 cycles += 6; | 1319 cycles += 6; |
1317 } else if(inst->ea_reg == Z80_IX || inst->ea_reg == Z80_IY) { | 1320 } else if(inst->ea_reg == Z80_IX || inst->ea_reg == Z80_IY) { |
1318 cycles += 4; | 1321 cycles += 4; |
1319 } | 1322 } |
1320 dst = zcycles(dst, cycles); | 1323 dst = zcycles(dst, cycles); |