I'm helping reverse engineer an incredibly cheap 8051 clone; it seems to show up in blobs in little Chinese audio toys like Buddha machines. What's interesting about it is that it's capable of executing code out of XRAM, and loads the bulk of its application payload from a 8-pin serial flash chip, making it trivial to reprogram.
After dumping the flash, it seems to use an extended 8051 instruction set. It's got DPTR autoincrement via a bit in SFR 86, but more interestingly, it's got what appear to be a bunch of 16-bit instructions using A5 as a prefix. The only one I can positively identify so far is A5 6x which is a 16-bit compare or subtract or xor:
CODE:2203 75 d0 00 MOV PSW,#0x0
CODE:2206 75 81 00 MOV DAT_SFR_81,#0x0 = ??
CODE:2209 75 87 02 MOV DAT_SFR_87,#0x2 = ??
CODE:220c e4 CLR A
CODE:220d 75 86 10 MOV DAT_SFR_86,#0x10 = ??
CODE:2210 90 11 00 MOV DPTR,#0x1100
CODE:2213 7a 00 MOV R2,#0x0
CODE:2215 7b 19 MOV R3,#0x19
LAB_CODE_2217 XREF[1]: CODE:2225(j)
CODE:2217 f0 MOVX @DPTR=>DAT_EXTMEM_1100,A
CODE:2218 f0 MOVX @DPTR=>DAT_EXTMEM_1100,A
CODE:2219 f0 MOVX @DPTR=>DAT_EXTMEM_1100,A
CODE:221a f0 MOVX @DPTR=>DAT_EXTMEM_1100,A
CODE:221b f0 MOVX @DPTR=>DAT_EXTMEM_1100,A
CODE:221c f0 MOVX @DPTR=>DAT_EXTMEM_1100,A
CODE:221d f0 MOVX @DPTR=>DAT_EXTMEM_1100,A
CODE:221e f0 MOVX @DPTR=>DAT_EXTMEM_1100,A
CODE:221f a8 82 MOV R0,DPL
CODE:2221 a9 83 MOV R1,DPH
CODE:2223 a5 61 CMP16 R0R1,R2R3
CODE:2225 30 d1 ef JNB DAT_BITS_d1,LAB_CODE_2217 = ??
CODE:2228 75 86 00 MOV DAT_SFR_86,#0x0 = ??
CODE:222b 02 22 00 LJMP LAB_CODE_2200
(The `CMP16` instruction is provisional. The registers are encoded in the last nibble.)
Does this look at all familiar to anyone? I'd love to know what this thing is actually called, and possibly lay my hands on a data sheet.
Thanks!