This is not terribly complex, but there are some quirks you must be aware.
First of all there are 2 (or 1, depending on the perspective) types of moves in chess:
1. Queens, Bishops and Rooks move in "infinite" straight lines.
2. Pawns, Kings and Knights have cell-dependent movement.
I will explain further down how Qs, Bs and Rs can actually move like Ps, Ks and Ns, but for now imagine they are different.
In a simple matrix system the QBR movement is pretty obvious, you test diagonals and/or horizontals until you cannot move further and display the possible moves to the player, but PKN movement can be a little tricky, and this is how I implement it.
The A is the actor and the dots around are the cells of the board.
The case above represents for example how a knight moves. You can clearly see the radial symmetry happening. You can simplify the symmetry notation so it's easier to read and write like below.
In the image above you can see how we just have to flip the matrix to get the other side, and you can do it again, this time mirroring.
There is a last mirror we can do in 45 degrees and then you'll have the primordial move matrix.
Now that you can know you can get the full movement from just this simple matrix, and you can give out addresses to each cell like below.
In this notation the PKN moves would look like this: "knight: ", "king: [0, 1]" and "pawn: [0, 1, 2]". In the pawn case, the 1 and 2 would be conditional, but you can check for yourself any special or situational needs your pieces may have.
You can also expand this matrix to whichever number you want as long as you want radial symmetry. Any time you do NOT want radial symmetry you have to unfold the matrix to address your needs.
This is just a general idea that helps to visualize the movements, but I hope it helps. Feel free to continue this thread if you have any questions about it.