You make no mention of what language it is or which assembler/compliler/editor or compositor it is for. I am assuming it is 'C':
#define just forces a text substitution where the pre-processor finds it. The '#defined' first parameter is expanded to the second and subsequent parameters.
1: substitutes the text "Y X.2" when you use M1
2: makes M2 equal to the long number 20000000
3: Makes M3(your value) expand to a pointer to the unsigned char cast to a pointer to (your value) address.
4: Makes M4(first value, second value) into whatever F1(first value),constant pointer to (second value) means. F1 must itself be defined somewhere else.
5: Same as 4 except this time the pointer is to rom and probably at a high address. It would be device dependant.
Second 5: A strange one but I assume M6 expands to 't' being the new typedef name and 'n' becoming a new int with name 'n'.
In short, the define is expanded so keyword are retained but parameters passed between ( and ) are substituted for their equivalent names within the definition.