Sketch examples of scrolling text on 8x8 LED matrix w/ MAX72xx

You do have a buffer, in a[].

My approach is to maintain the buffer and always starts at column 0 and finish at column 7 of that buffer. Your approach is is to start with a column, and then wrap around back to it.

My approach involves a lot of data moving around, but is otherwise more flexible - coding a combination move is fairly easy. Your approach involves no data movement, but can be tough to code complex movements.

As to how your code work, think of it having two pieces:

  1. Remember the start column in your image buffer (a[] in this case), in col_start;
  2. for each frame, display columns from col_start to 7; and then display columns from 0 to col_start - 1;
  3. advance col_start.