首页
社区
课程
招聘
[旧帖] 看雪第一求助贴,送邀请码一枚。关于8086保护模式 0.00雪花
发表于: 2016-4-10 22:29 4704

[旧帖] 看雪第一求助贴,送邀请码一枚。关于8086保护模式 0.00雪花

2016-4-10 22:29
4704
小弟对写操作系统非常感兴趣,也参考了一些关于这方面的书籍和资料,但有一个问题不解:
  进入保护模式后,不再能依赖BIOS中断了。那么这时候如果想让屏幕显示内容,就只有往显存里面写数据。但这些资料基本都只说了 字符模式,也就是向字符模式的显存地址写入字符数据,但小弟一直想实现图像模式的写入,依靠BIOS的中断可以实现VGA的图像显示。但进入了保护模式,脱离了BIOS中断,我完全就迷茫了。不知咋办,请看雪有研究过OS的前辈或知道这个问题的大神帮帮忙,来看雪第一个求助帖就问了这个问题,先谢过各位
送上刚买的邀请码:842681BA5EEDA8E9E688B5A853E57E,大神们先到先得

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (20)
雪    币: 10
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
顶一下,若有大神能帮助小弟解决这个问题,我还可以加30分甚至更多!谢谢!
2016-4-10 22:41
0
雪    币: 8201
活跃值: (2706)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
依稀记得,很久以前周明德翻过的一本保护模式的书中有代码的
2016-4-11 12:24
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
2016-4-11 17:40
0
雪    币: 10
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
石沉大海咯~~~
2016-4-12 11:52
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
你可以试试保护模式与实模式之间的切换,跟ntldr一样。比如OS读写文件还是要依靠BIOS中断的,用中断的时候切回实模式就行了。同理你也可以切换回实模式写屏幕
2016-4-12 11:58
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
尝试下模式切换试试
2016-4-12 13:29
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
请帮帮我  谢谢
2016-4-12 13:31
0
雪    币: 10
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这样做是最差的做法,代价太大,不要这种方式
2016-4-12 15:41
0
雪    币: 45
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
注册邀请码已被使用.
2016-4-12 15:46
0
雪    币: 45
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
http://gisyhy.blog.163.com/blog/static/12939034320128245712957/在保护模式下访问VGA BIOS标准功能和VESA扩展功能 - 改变  
把那30金币交出来吧,我要变会员
2016-4-12 15:52
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
来的好慢,现在才看到。
2016-4-12 15:56
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
模式切换有什么代价?这种办法是最通用的办法。。。
2016-4-13 09:28
0
雪    币: 10
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rdw
14
注册的时间很久了。来的少都忘记了帐号,从头再来。
2016-4-13 10:59
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
楼主,我来了,实模式下的中断是通过中断向量表实现的,最常用的功能性调用是int21,eax中存放dos系统的功能号,同样道理,进入保护模式之后中断调度表已经被初始化完毕,可以通过int2E中断加功能号直接调用系统服务调度表中的服务,这个和实模式下调用int21中断完成功能并没有多大差别(具体实现机制这里可以忽略),一般介绍windows内核的书里都有介绍,介绍linux内核的书就更容易找了,给我几个kx让我激活会员吧,今天刚注册了个新号
2016-6-18 00:52
0
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
楼主是要写操作系统
不是调用已有系统的功能。
2016-6-18 12:38
0
雪    币: 3
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
写操作系统;;VGA模式下的写屏代码;
; getpixel   0xa0000~0xc0000
; in:
; eax = x coordinate
; ebx = y coordinate
; ret:
; ecx = 00 RR GG BB
getpixel:
     push    eax ebx edx edi
     call    dword [GETPIXEL]
     pop     edi edx ebx eax
     ret

Vesa20_getpixel24:
; eax = x
; ebx = y
     imul    ebx, [BytesPerScanLine]    ; ebx = y * y multiplier
     lea     edi, [eax+eax*2] ; edi = x*3
     add     edi, ebx         ; edi = x*3+(y*y multiplier)
     mov     ecx, [LFB_BASE+edi]
     and     ecx, 0xffffff
     ret

Vesa20_getpixel32:
     imul    ebx, [BytesPerScanLine]    ; ebx = y * y multiplier
     lea     edi, [ebx+eax*4] ; edi = x*4+(y*y multiplier)
     mov     ecx, [LFB_BASE+edi]
     and     ecx, 0xffffff
     ret
2016-10-26 19:12
0
雪    币: 3
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
我也在找这个是Menuet32的,没在懂,解决了给我传来个,听说先解决总线显存问题,在直接写屏
2016-10-26 19:21
0
雪    币: 3
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
VESA SuperVGA BIOS v2.0+ - GET PROTECTED-MODE INTERFACE

AX = 4F0Ah
BL = 00h

Return:
AL = 4Fh if function supported
AH = status
00h successful
ES:DI -> protected-mode table (see #00087)
CX = length of table in bytes, included protected-mode code
01h failed

See Also: AX=4F00h - AX=4F05h - AX=4F07h - AX=4F09h

Format of VESA VBE 2.0 protected-mode table:

Offset  Size    Description     (Table 00087)
00h    WORD    offset (within table) of protected-mode code for Function 5
(Set Window)
02h    WORD    offset of protected-mode code for Function 7 (Set Disp Start)
04h    WORD    offset of protected-mode code for Function 9 (Set Primary
Palette)
06h    WORD    offset (within table) of list of I/O ports and memory locations
for which I/O privilege may be required in protected mode
(0000h if no list) (see #04085)
08h    var     code and optional port/memory list

Format of VESA VBE 2.0+ protected-mode port/memory list:

Offset  Size    Description     (Table 04085)
00h    WORD    I/O port number.
....
WORD    FFFFh marking end of I/O port list.
DWORD   memory region base address.
WORD    memory region limit (one less than length).
WORD    FFFFh marking end of memory region list

Note: The memory region is optional; if not present, there will be a word of FFFFh immediately following the FFFFh marking the end of the I/O port list

See Also: #00087
2016-10-27 09:05
0
雪    币: 78
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
用win32汇编调用api可以吗?
2016-10-27 17:08
0
雪    币: 3
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
楼主是要写操作系统,不是调用已有系统的功能。
win32汇编调用api那在windows下可以,这里没有写好的
上面可以在得到保护模式调用bios表,但我没试过,没找到资料
ES:DI -> protected-mode table (see #00087)
CX = length of table in bytes, included protected-mode code
这句是说把bios代码表存入一个你指定地方,在调用...
2016-10-27 22:40
0
游客
登录 | 注册 方可回帖
返回
//