{ > I have not seen a correct SetPixel routine for a planar 16 color mode. It > does not have to be fast or optimized, just working correctly so I can see > how it's done. Well, I found something that you can fiddle around with, it's not exactly working (well, kind of), but it shows the principle... all the Ports are right, what's going in & out is right, just the FillChar needs to be fixed up to plot only a single pixel or group thereof. } Program Try_EGA; Uses CRT; Var Scr:Byte Absolute $A000:0; Loop:Word; Procedure Mode_10; Inline($B8/$0d/$00/$CD/$10);{Intr $10, AX=$000D} Procedure Write; Begin {Write mode} Port[$03CE]:=5; Port[$03CF]:=Port[$03CF] And $FC; End; Procedure Undo_Latches; Begin If Scr=1 Then Begin End; End; Procedure Bmp(Bmp:Byte); Begin {Plane} Port[$03CE]:=8; Port[$03CF]:=Bmp; End; Procedure Color(C:Word); Begin PortW[$03CE]:=C*256; PortW[$03CE]:=$0F01; End; Procedure Show(Bm,Clr:Word); Begin Bmp(Bm); Color(Clr); Undo_Latches; FillChar(Scr,8000,$FF); Delay(1000); End; Begin Mode_10; Write; Delay(1000); Show($11,1); Show($22,2); Show($44,3); Show($88,4); Show($10,5); Show($20,6); Show($40,7); Show($80,8); Delay(1000); End. { Bmp says which pixels of any group of 8 is affected... the screen looks like this: 1234567812345678123456781234567812345678..... 1234567812345678123456781234567812345678..... 1234567812345678123456781234567812345678..... . . . Thus if you want the first & 3rd pixel green, do } Color(Green); Bmp(5); {Bits 1 & 3 set} Undo_Latches; Mem[$A000:0]:=$FF; {I think} { I dont know what Undo_Latches does, but it seems to work... BTW, I saw mention of a VESA unit you were writing, as a reward for this information.... do I qualify? I'm very interested.... }