How to detect text mode or graphics mode on boot loader?

0

I want to detect which mode I just using now with BIOS intXX when running bootloader I wrote. How to detect now is text mode or graphics mode? Which interrupt function I should use? Thank you~


I didn't figure out why when I run int 10 ,the value of AL doesn't change.

   (0) Breakpoint 1, 0x00007c00 in ?? ()
  Next at t=12943079
   (0) [0x00007c00] 0000:7c00 (unk. ctxt): mov ah, 0x0f              ; b40f
  <bochs:3> reg
  eax: 0x0000aa55 43605
  ecx: 0x00090000 589824
  edx: 0x00000000 0
  ebx: 0x00000000 0
  esp: 0x0000ffd6 65494
  ebp: 0x00000000 0
  esi: 0x000e476c 935788
  edi: 0x0000ffac 65452
  eip: 0x00007c00
  eflags 0x00000082: id vip vif ac vm rf nt IOPL=0 of df if tf SF zf af pf cf
  <bochs:4> n
  Next at t=12943080
   (0) [0x00007c02] 0000:7c02 (unk. ctxt): mov al, 0xaa              ; b0aa
  <bochs:5> reg
  eax: 0x00000f55 3925
  ecx: 0x00090000 589824
  edx: 0x00000000 0
  ebx: 0x00000000 0
  esp: 0x0000ffd6 65494
  ebp: 0x00000000 0
  esi: 0x000e476c 935788
  edi: 0x0000ffac 65452
  eip: 0x00007c02
  eflags 0x00000082: id vip vif ac vm rf nt IOPL=0 of df if tf SF zf af pf cf
  <bochs:6> n
  Next at t=12943081
   (0) [0x00007c04] 0000:7c04 (unk. ctxt): int 0x0a                  ; cd0a
  <bochs:7> reg
  eax: 0x00000faa 4010
  ecx: 0x00090000 589824
  edx: 0x00000000 0
  ebx: 0x00000000 0
  esp: 0x0000ffd6 65494
  ebp: 0x00000000 0
  esi: 0x000e476c 935788
  edi: 0x0000ffac 65452
  eip: 0x00007c04
  eflags 0x00000082: id vip vif ac vm rf nt IOPL=0 of df if tf SF zf af pf cf
  <bochs:8> n
  Next at t=12943083
   (0) [0x00007c06] 0000:7c06 (unk. ctxt): mov dl, al                ; 88c2
  <bochs:9> reg
  eax: 0x00000faa 4010
  ecx: 0x00090000 589824
  edx: 0x00000000 0
  ebx: 0x00000000 0
  esp: 0x0000ffd6 65494
  ebp: 0x00000000 0
  esi: 0x000e476c 935788
  edi: 0x0000ffac 65452
  eip: 0x00007c06
  eflags 0x00000082: id vip vif ac vm rf nt IOPL=0 of df if tf SF zf af pf cf
  <bochs:10>
interrupt
bootloader
bios
asked on Stack Overflow Nov 21, 2011 by sam • edited Nov 23, 2011 by sam

1 Answer

1
INT10, F 
AH = 0F
on return:
AL = mode currently set(page mode)
BH = current display page
Page mode:
        AL = 00  40x25 B/W text (CGA,EGA,MCGA,VGA)
       = 01  40x25 16 color text (CGA,EGA,MCGA,VGA)
       = 02  80x25 16 shades of gray text (CGA,EGA,MCGA,VGA)
       = 03  80x25 16 color text (CGA,EGA,MCGA,VGA)
       = 04  320x200 4 color graphics (CGA,EGA,MCGA,VGA)
       = 05  320x200 4 color graphics (CGA,EGA,MCGA,VGA)
       = 06  640x200 B/W graphics (CGA,EGA,MCGA,VGA)
       = 07  80x25 Monochrome text (MDA,HERC,EGA,VGA)
       = 08  160x200 16 color graphics (PCjr)
       = 09  320x200 16 color graphics (PCjr)
       = 0A  640x200 4 color graphics (PCjr)
       = 0B  Reserved (EGA BIOS function 11)
       = 0C  Reserved (EGA BIOS function 11)
       = 0D  320x200 16 color graphics (EGA,VGA)
       = 0E  640x200 16 color graphics (EGA,VGA)
       = 0F  640x350 Monochrome graphics (EGA,VGA)
       = 10  640x350 16 color graphics (EGA or VGA with 128K)
         640x350 4 color graphics (64K EGA)
       = 11  640x480 B/W graphics (MCGA,VGA)
       = 12  640x480 16 color graphics (VGA)
       = 13  320x200 256 color graphics (MCGA,VGA)
       = 8x  EGA, MCGA or VGA ignore bit 7, see below
       = 9x  EGA, MCGA or VGA ignore bit 7, see below
answered on Stack Overflow Nov 22, 2011 by jerry.rongzq • edited Nov 22, 2011 by The_Fox

User contributions licensed under CC BY-SA 3.0