What's new

How is RCP emulated?

WildNinji

New member
Hi, I am studing the n64 inners in order to understand if we can find a way to do LLE emulation somehow.
I can't understand some details in RCP emulation.
(don't fear to use tecnical terminology or details in you replies)
  • The RCP runs in parallel with the CPU. How do the two syncronize? How do the current emus simulate this parallelism?
    Mupen does something like runRSPCycles(100);
  • Is there a complete list of RSP opcodes?
    The one by anarko and the other by bpoint are wrong/outdated AFAIK.
  • How do task are submitted to the RSP?
  • The RDP is not reprogrammable, isn't it?
This is enough for now, I hope someone with the needed knowledge will find some time to answer these questions.
I'll be back in the next days with new questions :)
 
OP
W

WildNinji

New member
I found the RSP interpreter by zilmar. Reading its code is helping me to understand many details.
Too bad that the RSP source has not been updated since 2001 :(

  • How do task are submitted to the RSP?
It seems that RSP tasks are submitted via SP_{RD,WR}_LEN once SP_STATUS is cleared. So break should stop the RSP by setting some bits on SP_STATUS.
This means that everytime a gfx is shown, before sending the associated DL, the gfx ucode has be to DMA'd to IMEM. Is this correct?

  • The RDP is not reprogrammable, isn't it?
The RDP execute commands that someone (the RDP ucode?) synthetize to DMEM.
I think that RDP is started/stopped/operated via DP command registers. Is this correct?

This leaves me with two new questions
  • What are the DP span registers used for?
    I found them in anarko's n64ops#h.txt
  • Once RSP opcodes are emulated and RDP commands executed, what is left for a true LLE emulation?
 

Top