A max7219 clone is fairly simple. You need to implement two basic elements:
- a display routine that is called from a timer isr to update the matrix in the background;
- an interrupt based spi slave.
The two pieces are integrated in the main loop where the incoming data (common + data bytes) are processed.
The beauty of this approach is that the execution in the main loop is non-critical and support the full capabilities of the spi hardware.