{ For people who do not find any xsharp Near them, and who would like to test it anyway i translated some Assembler-Code (not by me) back to to TP6. I tested it on a 486/33 With multisynch and a 386/40 With an old bw/vga monitor both worked well. Anyway i cannot guarantee that it works With every pc and is healthy For every monitor, so be careful. This Listing changes to 360x480x256 modex and displays some pixels. Have fun With it ! } (*Source: VGAKIT Version 3.4 Copyright 1988,89,90 John Bridges Translated to Pascal (why?) by Michael Mrosowski *) Program ModexTest; Uses Crt,Dos; Var maxx,maxy : Word; (*Set Modex 360x480x256 *) Procedure SetModex; Const VptLen=17; Vpt : Array[1..VptLen] of Word = ($6b00 , (* horz total *) $5901 , (* horz displayed *) $5a02 , (* start horz blanking *) $8e03 , (* end horz blanking *) $5e04 , (* start h sync *) $8a05 , (* end h sync *) $0d06 , (* vertical total *) $3e07 , (* overflow *) $4009 , (* cell height *) $ea10 , (* v sync start *) $ac11 , (* v sync end and protect cr0-cr7 *) $df12 , (* vertical displayed *) $2d13 , (* offset *) $0014 , (* turn off dWord mode *) $e715 , (* v blank start *) $0616 , (* v blank end *) $e317); (* turn on Byte mode *) Var regs:Registers; i:Integer; cr11:Byte; begin maxx:=360; maxy:=480; regs.ax:=$13; (*start With standardmode 13h*) Intr($10,regs); (*hi bios!*) PortW[$3c4]:=$0604; (*alter sequencer Registers: disable chain 4*) PortW[$3c4]:=$0F02; (* set Write plane mask to all bit planes*) FillChar(Mem[$a000:0],43200,0); (* Clearscreen *) (* ((XSIZE*YSIZE)/(4 planes)) *) PortW[$3c4]:=$0100; (*synchronous reset*) Port [$3c2]:=$E7; (*misc output : use 28 Mhz dot clock*) PortW[$3c4]:=$0300; (*sequencer : restart*) Port [$3d4]:=$11; (*select Crtc register cr11*) cr11:=Port[$3d5]; Port [$3d5]:=cr11 and $7F; (*Write protect*) For i:=1 to vptlen do (*Write Crtc-Registers*) PortW[$3d4]:=Vpt[i]; end; (*Put pixel in 360x480 (no check)*) Procedure PutPixel(x,y:Word;c:Byte); begin PortW[$3c4]:=($100 shl (x and 3))+2; (*set EGA bit plane mask register*) Mem[$a000:y*(maxx shr 2) + (x shr 2)]:=c; end; Var c:Char; i,j:Integer; begin SetModex; For j:=0 to 479 do (* Nearly SVGA With your good old 256k VGA*) For i:=0 to 359 do PutPixel(i,j,(i+j) and $FF); c:=ReadKey; TextMode(LastMode); end.