diff options
author | 2018-03-02 04:44:32 +0100 | |
---|---|---|
committer | 2018-03-02 04:47:45 +0100 | |
commit | 05d7bec31303dce56209d0915d612a12857952d1 (patch) | |
tree | 3de1e8e1e074ca4123111bb06953a5f1097b28bf | |
parent | 3d09b31c84274b0b50f41bab8a11fd2e0f3abde4 (diff) |
sharc.cpp: added Rn = Rn FDEP Rx BY <bit6>:<len6> opcode, used by Last Bronx for a vital geometrizer function [Angelo Salese]
-rw-r--r-- | src/devices/cpu/sharc/sharcops.hxx | 15 | ||||
-rw-r--r-- | src/mame/machine/model2.cpp | 2 |
2 files changed, 14 insertions, 3 deletions
diff --git a/src/devices/cpu/sharc/sharcops.hxx b/src/devices/cpu/sharc/sharcops.hxx index 8e7a03d974e..16597aad5a5 100644 --- a/src/devices/cpu/sharc/sharcops.hxx +++ b/src/devices/cpu/sharc/sharcops.hxx @@ -550,9 +550,20 @@ void adsp21062_device::SHIFT_OPERATION_IMM(int shiftop, int data, int rn, int rx break; } - case 0x11: /* TODO */ - break; + case 0x11: /* Rn = Rn FDEP Rx BY <bit6>:<len6> */ + { + uint32_t ext = REG(rx) & MAKE_EXTRACT_MASK(0, len); + REG(rn) = ext << bit; + + SET_FLAG_SZ(REG(rn)); + if (bit+len > 32) + { + m_core->astat |= SV; + } + break; + } + case 0x12: /* FEXT Rx BY <bit6>:<len6> (Sign Extended) */ { uint32_t ext = (REG(rx) & MAKE_EXTRACT_MASK(bit, len)) >> bit; diff --git a/src/mame/machine/model2.cpp b/src/mame/machine/model2.cpp index 8a714e1b39b..5ebdea7010c 100644 --- a/src/mame/machine/model2.cpp +++ b/src/mame/machine/model2.cpp @@ -121,7 +121,7 @@ void model2_state::debug_geo_dasm_command(int ref, const std::vector<std::string util::stream_format(f, "nop"); break; // object data display - case 0x01: + case 0x01: util::stream_format(f, "object data (point:%08x header:%08x start:%08x count:%08x)",m_bufferram[ptr],m_bufferram[ptr+1],m_bufferram[ptr+2],m_bufferram[ptr+3]); ptr+=4; break; |