Using symbolic modulation we transmit symbols not bits.
A general RDS carrier with the different symbols is shown here:
The carrier can be split into 4 possible symbols each of 48 cycles of the 57KHz carrier duration giving rise to 288 samples at a 342KHz sample rate. There are 4 possible amplitude formats with each having a 0 or π phase.
Since the DAC is set for 8 bit operation and the CPU uses 16bits these symbols are stored in 4 arrays of 288 words, so each word has the 0 and π version of each symbol. This is an example of symbol pair array:
// A local P0_P1 copy static word _P0_P1[SYMBOL_SIZE] = { 0x8080, 0x7F83, 0x7C86, 0x8080, 0x8876, 0x8B74, 0x8080, 0x7191, 0x6E93, 0x8080, 0x9668, 0x9866, // 00 11 0x8080, 0x629F, 0x61A1, 0x8080, 0xA45B, 0xA658, 0x8080, 0x56AC, 0x53AF, 0x8080, 0xB14D, 0xB34B, // 12 23 0x8080, 0x49B9, 0x47BB, 0x8080, 0xBD41, 0xBF3F, 0x8080, 0x3EC4, 0x3BC7, 0x8080, 0xC836, 0xCA34, // 24 35 0x8080, 0x32CF, 0x31D1, 0x8080, 0xD22C, 0xD42B, 0x8080, 0x2AD8, 0x28DA, 0x8080, 0xDA24, 0xDC22, // 36 47 0x8080, 0x22E0, 0x20E1, 0x8080, 0xE11D, 0xE21C, 0x8080, 0x1CE6, 0x1BE6, 0x8080, 0xE618, 0xE717, // 48 59 0x8080, 0x18EA, 0x17EB, 0x8080, 0xEA14, 0xEB13, 0x8080, 0x15ED, 0x14ED, 0x8080, 0xEC13, 0xEC13, // 60 71 0x8080, 0x14ED, 0x14ED, 0x8080, 0xEC13, 0xEB13, 0x8080, 0x15ED, 0x16EC, 0x8080, 0xE915, 0xE816, // 72 83 0x8080, 0x19E9, 0x1AE8, 0x8080, 0xE51A, 0xE41A, 0x8080, 0x1EE4, 0x1FE3, 0x8080, 0xE01F, 0xDE20, // 84 95 0x8080, 0x24DE, 0x26DC, 0x8080, 0xD826, 0xD628, 0x8080, 0x2CD6, 0x2ED4, 0x8080, 0xD02E, 0xCE31, // 96 107 0x8080, 0x35CD, 0x38CA, 0x8080, 0xC639, 0xC23C, 0x8080, 0x40C1, 0x43BF, 0x8080, 0xBA45, 0xB747, // 108 119 0x8080, 0x4DB5, 0x4FB3, 0x8080, 0xAD51, 0xAA54, 0x8080, 0x5AA8, 0x5CA5, 0x8080, 0xA05F, 0x9E61, // 120 131 0x8080, 0x679A, 0x6A98, 0x8080, 0x926D, 0x8F6F, 0x8080, 0x758C, 0x788A, 0x8080, 0x847A, 0x817D, // 132 143 0x8080, 0x837F, 0x867C, 0x8080, 0x7688, 0x748B, 0x8080, 0x9171, 0x936E, 0x8080, 0x6896, 0x6698, // 144 155 0x8080, 0xA062, 0xA161, 0x8080, 0x5AA4, 0x58A6, 0x8080, 0xAD55, 0xAF53, 0x8080, 0x4DB2, 0x4BB3, // 156 167 0x8080, 0xBA48, 0xBB47, 0x8080, 0x40BE, 0x3FBF, 0x8080, 0xC53D, 0xC73B, 0x8080, 0x35C9, 0x34CA, // 168 179 0x8080, 0xD032, 0xD131, 0x8080, 0x2CD3, 0x2BD4, 0x8080, 0xD929, 0xDA28, 0x8080, 0x23DB, 0x22DC, // 180 191 0x8080, 0xE121, 0xE120, 0x8080, 0x1CE2, 0x1CE2, 0x8080, 0xE71B, 0xE71B, 0x8080, 0x17E7, 0x17E7, // 192 203 0x8080, 0xEB17, 0xEB17, 0x8080, 0x13EB, 0x13EB, 0x8080, 0xEE14, 0xED14, 0x8080, 0x12ED, 0x13EC, // 204 215 0x8080, 0xEE13, 0xED14, 0x8080, 0x12ED, 0x13EB, 0x8080, 0xEE14, 0xEC16, 0x8080, 0x14EA, 0x16E8, // 216 227 0x8080, 0xEA18, 0xE81A, 0x8080, 0x19E6, 0x1AE4, 0x8080, 0xE51D, 0xE31F, 0x8080, 0x1EE1, 0x20DE, // 228 239 0x8080, 0xDF23, 0xDC26, 0x8080, 0x26D9, 0x28D6, 0x8080, 0xD62C, 0xD42E, 0x8080, 0x2ED0, 0x31CE, // 240 251 0x8080, 0xCD35, 0xCA38, 0x8080, 0x39C6, 0x3CC2, 0x8080, 0xC140, 0xBF43, 0x8080, 0x45BA, 0x47B7, // 252 263 0x8080, 0xB54D, 0xB34F, 0x8080, 0x51AD, 0x54AA, 0x8080, 0xA85A, 0xA55C, 0x8080, 0x5FA0, 0x619E, // 264 275 0x8080, 0x9A67, 0x986A, 0x8080, 0x6D92, 0x6F8F, 0x8080, 0x8C75, 0x8A78, 0x8080, 0x7A84, 0x7D81 // 276 287 };