char hat 8 bit.

0x01 -> hexwert
1 -> dezimalwert
01 -> oktogonalwert (nur durch die führende null gekennzeichnet!!!)
0b00000001 -> binärwert, aber nicht von allen compilern unterstützt

IO_REG() ist ein fragment aus "früheren" zeiten der compiler. das musst du mittlerweile nicht mehr machen.

SPM sit der programmspeicher. er kann nur in datenblöcken ("pages") beschrieben werden. die größe einer solchen page ist nicht zwingend bei allen prozessoren gleich, aber ihre größe ist in "SPM_PAGESIZE" hinterlegt.
so wird sichergestellt, dass die varibale "char flash_buffer" genau "SPM_PAGESIZE" chars hat und damit die richtige größe hat.
in der variable sind dann also SPM_PAGESIZE * 8 bit gespeichert.