ZealOS/src/Demo/Lectures/ScreenMemory.HC

50 lines
1.2 KiB
HolyC
Raw Normal View History

2020-02-15 20:01:48 +00:00
//This just shows how scrn memory works.
//See $LK,"::/Demo/Lectures/MiniGrLib.HC"$
U0 PlotXY(I64 x,I64 y)
{
2020-02-15 23:19:08 +00:00
//Screen bits are revd
2020-02-15 20:01:48 +00:00
LBts(text.vga_alias,y*GR_WIDTH+x^7);
}
U0 Main()
{
I64 i;
//This makes all 4 color planes active.
OutU8(VGAP_IDX,VGAR_MAP_MASK);
OutU8(VGAP_DATA,WHITE);
MemSet(text.vga_alias,0,GR_WIDTH*GR_HEIGHT/8);
OutU8(VGAP_IDX,VGAR_MAP_MASK);
OutU8(VGAP_DATA,RED);
for (i=0;i<200;i++)
PlotXY(i,i);
OutU8(VGAP_IDX,VGAR_MAP_MASK);
OutU8(VGAP_DATA,GREEN);
for (i=0;i<200;i++)
PlotXY(100,i);
OutU8(VGAP_IDX,VGAR_MAP_MASK);
OutU8(VGAP_DATA,BLUE);
for (i=0;i<200;i++)
PlotXY(200-i,i);
/*If you want a mixed color sel multiple planes
but you have to be sure the unseled planes
are zero, so sel them and make them zero.
You can't do reads on VGA memory, by the way.
That means no read-modify-writes, too.
*/
Busy(4000000);
2020-02-16 00:09:08 +00:00
//ZenithOS has a 4 plane memory duplicate of the scrn, $LK,"gr.scrn_image",A="MN:CGrGlobals"$,
2020-02-15 20:01:48 +00:00
//and only writes actual changes.See $LK,"GrUpdateVGAGraphics",A="MN:GrUpdateVGAGraphics"$().
//<CTRL-ALT-v> will flush scrn VGA cache.
VGAFlush;
}
Main;
//See $LK,"::/Demo/Lectures/GraphicsCPULoad.HC"$.