Mercurial > repos > blastem
changeset 2478:ea37200967c7
Implement lea and pea in new 68K core
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 07 Mar 2024 00:53:11 -0800 |
parents | 2972a8e16ed2 |
children | 29baf8d5a579 |
files | cpu_dsl.py m68k.cpu |
diffstat | 2 files changed, 85 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/cpu_dsl.py Tue Mar 05 23:23:06 2024 -0800 +++ b/cpu_dsl.py Thu Mar 07 00:53:11 2024 -0800 @@ -54,6 +54,10 @@ if op == '=': if len(parts) > 2 and parts[2] in binaryOps: op = parts[2] + if op == '-': + tmp = parts[1] + parts[1] = parts[3] + parts[3] = tmp parts[0] = binaryOps[op] del parts[2] elif len(parts) > 1 and parts[1][0] in unaryOps:
--- a/m68k.cpu Tue Mar 05 23:23:06 2024 -0800 +++ b/m68k.cpu Thu Mar 07 00:53:11 2024 -0800 @@ -1737,6 +1737,87 @@ ror dregs.R 16 dregs.R update_flags NZV0C0 m68k_prefetch + +m68k_calc_ea + arg mode 16 + arg reg 16 + + switch mode + case 2 + #address reg indirect + meta ea aregs.reg + case 5 + #displacement + m68k_prefetch + sext 32 prefetch scratch1 + scratch1 += aregs.reg + meta ea scratch1 + case 6 + #index + m68k_index_word + cycles 4 + scratch1 += aregs.reg + meta ea scratch1 + case 7 + switch reg + case 0 + #absolute short + m68k_prefetch + sext 32 prefetch scratch1 + case 1 + #absoltue long + m68k_prefetch + scratch2 = prefetch << 16 + m68k_prefetch + scratch1 = scratch2 | prefetch + case 2 + #pc displacement + m68k_prefetch + sext 32 prefetch scratch1 + scratch1 += pc + scratch1 -= 2 + case 3 + #pc indexed + m68k_index_word + cycles 4 + scratch1 += pc + scratch1 -= 2 + end + meta ea scratch1 + end + +0100100001MMMRRR pea + invalid M 0 + invalid M 1 + invalid M 3 + invalid M 4 + invalid M 7 R 4 + invalid M 7 R 5 + invalid M 7 R 6 + invalid M 7 R 7 + + m68k_calc_ea M R + scratch2 = a7 - 4 + m68k_write32_lowfirst ea + a7 -= 4 + + m68k_prefetch + +0100DDD111MMMRRR lea + invalid M 0 + invalid M 1 + invalid M 3 + invalid M 4 + invalid M 7 R 4 + invalid M 7 R 5 + invalid M 7 R 6 + invalid M 7 R 7 + + m68k_calc_ea M R + aregs.D = ea + + m68k_prefetch + 0100111001110000 reset if reset_handler