Też z tym kombinowałem, wiadomości które udało mi się zebrać to iż, aby uzyskać tryb graficzny w PM trzeba wyjść do Real_M, ustawić (włączyć V86), lub przez porty. Zaciekawiłem się tym ostatnim rozwiązaniem oto co udało mi się odnaleźć w sieci:
http://bos.asmhackers.net/docs/vga_without_bios/docs/mode%2013h%20without%20using%20bios.htm
http://files.osdev.org/mirrors/geezer/osd/graphics/modes.c
i opis VGA:
http://wiki.osdev.org/VGA_Hardware
Na podstawie tego skombinowałem takie coś (nie formatowane, bo pisane dla testu).
unit vga;
interface
const
VGA_AC_INDEX= $3C0;
VGA_MISC_WRITE= $3C2;
VGA_SEQ_INDEX = $3C4;
VGA_DAC_READ_INDEX= $3C7;
VGA_DAC_DATA = $3C9;
VGA_MISC_READ = $3CC;
VGA_GC_INDEX = $3CE;
VGA_CRTC_INDEX= $3D4;
VGA_INSTAT_READ= $3DA;
REGM = $63;
procedure SetVga;
implementation
procedure SetVga; [public, alias: 'SetVga'];
var
aa, ii :byte;
begin
outportb(VGA_MISC_WRITE,REGM);
outportw(VGA_CRTC_INDEX,$0e11);
outportw(VGA_SEQ_INDEX,$0e04);
outportw(VGA_SEQ_INDEX,$0101);
outportw(VGA_SEQ_INDEX,$0f02);
outportw(VGA_SEQ_INDEX,$0003);
outportw(VGA_CRTC_INDEX,$5f00);
outportw(VGA_CRTC_INDEX,$4f01);
outportw(VGA_CRTC_INDEX,$5002);
outportw(VGA_CRTC_INDEX,$8203);
outportw(VGA_CRTC_INDEX,$5404);
outportw(VGA_CRTC_INDEX,$8005);
outportw(VGA_CRTC_INDEX,$2813);
outportw(VGA_CRTC_INDEX,$BF06);
outportw(VGA_CRTC_INDEX,$1F07);
outportw(VGA_CRTC_INDEX,$4109);
outportw(VGA_CRTC_INDEX,$9c10);
outportw(VGA_CRTC_INDEX,$8e11);
outportw(VGA_CRTC_INDEX,$8f12);
outportw(VGA_CRTC_INDEX,$9615);
outportw(VGA_CRTC_INDEX,$B916);
outportw(VGA_CRTC_INDEX, $0008);
outportw(VGA_CRTC_INDEX,$4014);
outportw(VGA_CRTC_INDEX,$a317);
outportw(VGA_GC_INDEX,$4005);
outportw(VGA_GC_INDEX,$0506);
outportw(VGA_GC_INDEX,$0F07);
outportw(VGA_GC_INDEX,$FF08);
For aa:=0 to 15 do
outportb(VGA_AC_INDEX,aa);
inportb(VGA_INSTAT_READ);
outportb(VGA_AC_INDEX,$10);
outportb(VGA_AC_INDEX,$41);
outportb(VGA_AC_INDEX,$11);
outportb(VGA_AC_INDEX,$00);
outportb(VGA_AC_INDEX,$12);
outportb(VGA_AC_INDEX,$0f);
outportb(VGA_AC_INDEX,$13);
outportb(VGA_AC_INDEX,$00);
outportb(VGA_AC_INDEX,$14);
outportb(VGA_AC_INDEX,$00);
inportb(VGA_INSTAT_READ);
outportb(VGA_AC_INDEX, $20);
end;
Dopisałem sobie skok do tego po wpisaniu w konsoli polecenia 'TestVGA'.
Po uruchomieniu tego w Bochsie pisze dimesions update x=640 y=400 .... bpp=8.
Natomiast w Virtual PC sprawdzałem Properties to pisze VGA , 320x200x8.
Nie mam pojęcia co jest nie tak, może Tobie uda się to opanować, jak coś proszę o kontakt.