I've made a comparison of the opcodes of the 8048 vs. NS405 (based on the names in mcs48.cpp and the NS405 datasheet).
You can find the table here.
I've marked where opcodes are shifted to different positions, have names similar enough to be the same and have identified a possible mislabeling.
In MAME, 8048 has the following commands vs. NS405
80 movx_a_xr0 MOVX @R0,A
81 movx_a_xr1 MOVX @R1,A
Later this is just the other way round
90 movx_xr0_a MOVX A,@R0
91 movx_xr1_a MOVX A,@R1
Of course it's possible the NS405 just swapped these opcodes, but maybe this is worth a check by someone who knows their way around the 8048 core if MAME has just assigned the wrong labels to the opcodes at the right place or if the opcodes in mcs48.cpp are actually swapped.