I don't remember, does the ClassPad have the ability to change the address used for VRAM? If so, this is the best method.
Well we were supposing that you knew the answer of this question
But actually I think that the best way to create real grayscales should be to configure the screen's DMA Controller to use 2 video buffers alternatively, instead of one; this way the switch operation will occur between each actual refresh of the screen, and this should make a nice and smooth result.
However, configuring the DMAC is impossible if we don't know its exact references and its corresponding ports on the ClassPad
When one writes something in the "VRAM" one's just actually writing in PEG's internal buffer; and the changes get visible only after the transfer from this buffer to the real video memory (where the DMAC gets the data it needs)... There is a "hidden" function to do this (which code should be known thanks to Gaumerie's work), and I suppose that we implicitely call this function during the call of EndDraw() on a currently visible PegThing.
This means that duplicating the "VRAM" is useless if we do not duplicate the real video memory and make the screen switch automatically between each plane; otherwhise for each cycle we would still have to transfert the content of the current buffer to the video memory, and this could greatly slow down the execution of the program