summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author angelosa <salese_corp_ltd@email.it>2018-03-02 04:44:32 +0100
committer angelosa <salese_corp_ltd@email.it>2018-03-02 04:47:45 +0100
commit05d7bec31303dce56209d0915d612a12857952d1 (patch)
tree3de1e8e1e074ca4123111bb06953a5f1097b28bf
parent3d09b31c84274b0b50f41bab8a11fd2e0f3abde4 (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.hxx15
-rw-r--r--src/mame/machine/model2.cpp2
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;