【问题标题】:How to detect text mode or graphics mode on boot loader?如何在引导加载程序上检测文本模式或图形模式?
【发布时间】:2012-01-03 03:29:01
【问题描述】:

我想检测我现在在运行我编写的引导加载程序时使用的 BIOS intXX 模式。 现在如何检测是文本模式还是图形模式? 我应该使用哪个中断函数? 谢谢~


我不明白为什么当我运行 int 10 时,AL 的值没有改变。

   (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


    【解决方案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
    

    【讨论】:

    • 为什么我尝试运行int 10,AL的值没有改变?我将修改原始帖子以显示这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    相关资源
    最近更新 更多