after some thought ,

Well, I already have buffer, but 32x1 pixels in size, because the data is sent to display line by line.
But the problem is different, I can't understand why this works only per 8 bit: SCREEN32[Y+8]=CHAR2.0(Y) - if I enter any other number instead of 8, which is not multiple of 8, say 5 or 17, everything becomes garbled, while it should not. So, maybe I'm writing in array incorrectly?
i assume SCREEN32 is your 32 bit array ,
SCREEN32[Y+8] is then a complete nonsense as the only valid locations are 0 to 3

similarly wtf is char2 ? if its a byte then
CHAR2.0(Y) a valid y value can only be 0 to 7

then we have this, wtf is char1 a byte a word an array ? , a pointless snippet

char1=char1 | char2>>5
char2=char2 <<3 | char3>>2
char2=char2 | char4>>7
char3=char4<<1char4=0