社区
汇编语言
帖子详情
VESA编程问题,麻烦懒虫易水斑竹了
mailxt
2004-11-14 11:43:37
我在易水的编程网站看到了懒虫易水斑竹的实模式下高速绘图的实现一文,深感大有收获,对易水斑竹的敬仰之情如……(省略若干熟知的吹捧之词),不过在实际运用时发现4F02调用返回的物理地址是F0000000H,即使在保护模式下如果不使用分页机制的话也是无法访问的地址,更不用说在实模式下了,不知易水斑竹是如何做到的,还望易水斑竹不吝指点一二,谢谢!
...全文
103
9
打赏
收藏
VESA编程问题,麻烦懒虫易水斑竹了
我在易水的编程网站看到了懒虫易水斑竹的实模式下高速绘图的实现一文,深感大有收获,对易水斑竹的敬仰之情如……(省略若干熟知的吹捧之词),不过在实际运用时发现4F02调用返回的物理地址是F0000000H,即使在保护模式下如果不使用分页机制的话也是无法访问的地址,更不用说在实模式下了,不知易水斑竹是如何做到的,还望易水斑竹不吝指点一二,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mailxt
2004-11-16
打赏
举报
回复
果然是有,看样子是我的程序有点问题,谢谢易水斑竹啦
Areslee
2004-11-15
打赏
举报
回复
无所谓
你是用什么方法访问的?是写不了显存还是什么?
mailxt
2004-11-15
打赏
举报
回复
偶开启了呀,不过还是不行啊,有一个问题,是先开启DOS下访问4GB内存功能还是先调用VBE
Areslee
2004-11-15
打赏
举报
回复
偶不是说明了吗,要先开启DOS下访问4GB内存功能才行啊
Areslee
2004-11-15
打赏
举报
回复
CX的值太大,超出了16位表示的范围
改成4000试试先
Areslee
2004-11-15
打赏
举报
回复
应该会有显示才对
mailxt
2004-11-15
打赏
举报
回复
.386P
INCLUDE PROTECT.INC
DATA SEGMENT USE16
GDTS DESC <>
CodeSel = $ - GDTS
CodeDes DESC <0FFFFH, , , 9AH, >
DataSel = $ - GDTS
DataDes DESC <0FFFFH, , , 0CF92H, >
GDTLEN = $ - GDTS
GDTPTR PDESC <GDTLEN - 1, >
OLDMODE DB 0
VESAMSG DB 'VESA'
VBEINFO DB 512 DUP(0)
CRTINFO DB 56 DUP(0)
MINFO DB 256 DUP(0)
DATA ENDS
STACK SEGMENT STACK
DB 512 DUP(0)
STACK ENDS
CODE SEGMENT USE16
ASSUME CS:CODE, DS:DATA, SS:STACK
MAIN PROC NEAR
XOR EAX, EAX
MOV AX, DATA
MOV DS, AX
MOV ES, AX
CALL MAKE4G
MOV AH, 0FH
INT 10H
MOV [OLDMODE], AL
MOV AX, 0A000H
MOV GS, AX
MOV AX, 4F00H
MOV DI, OFFSET VBEINFO
INT 10H
CMP AX, 004FH
JNE EXIT
MOV SI, OFFSET VESAMSG
XOR CX, CX
LOOP1:
MOV BL, [SI]
CMP ES:[DI], BL
JNE EXIT
INC SI
INC DI
INC CX
CMP CX, 4
JNE LOOP1
MOV AX, 4F02H
MOV BX, 4115H
MOV DI, OFFSET CRTINFO
INT 10H
CMP AX, 4FH
JNE EXITMODE
MOV AX, 4F01H
MOV CX, 115H
MOV DI, OFFSET MINFO
INT 10H
CMP AX, 4FH
JNE EXITMODE
MOV DX, WORD PTR [MINFO + 6]
MOV EDI, DWORD PTR [MINFO + 40]
MOV CX, 240000
LOOPX:
MOV BYTE PTR FS:[EDI], 255
INC EDI
MOV BYTE PTR FS:[EDI], 0
INC EDI
MOV BYTE PTR FS:[EDI], 0
INC EDI
DEC CX
CMP CX, 0
JE PREPAREEXIT
JMP LOOPX
PREPAREEXIT:
MOV AH, 08H
INT 21H
EXITMODE:
MOV AH, 00H
MOV AL, BYTE PTR [OLDMODE]
INT 10H
EXIT:
MOV AX, 4C00H
INT 21H
MAIN ENDP
MAKE4G PROC
PUSH DS
PUSH ES
PUSHAD
PUSHFD
SHL EAX, 4
LEA EAX, [EAX + GDTS]
MOV DWORD PTR GDTPTR.BASE, EAX
XOR EAX, EAX
MOV AX, CS
SHL EAX, 4
ROL EAX, 8
MOV CodeDes.Baseh, AL
MOV AL, BYTE PTR CodeDes.Attrib
ROR EAX, 8
MOV DWORD PTR CodeDes.Basel, EAX
CLI
LGDT FWORD PTR GDTPTR
MOV EAX, CR0
OR EAX, 1
MOV CR0, EAX
JUMP16 CodeSel, <OFFSET Protect>
Protect:
MOV AX, DataSel
MOV FS, AX
MOV EAX, CR0
AND EAX, 0FFFFFFFEH
MOV CR0, EAX
JUMP16 <SEG Real>, <OFFSET Real>
Real:
STI
POPFD
POPAD
POP ES
POP DS
RET
MAKE4G ENDP
CODE ENDS
END MAIN
这只是一段小小的测试代码,先在这里谢谢易水斑竹啦:)
Areslee
2004-11-15
打赏
举报
回复
写显存的代码发上来看看
mailxt
2004-11-15
打赏
举报
回复
是写不了显存,我的测试用机是128M内存,显卡支持VESA2.0+,有8M显存,我先开启DOS下访问4GB内存功能,段选择子在FS中,4F01调用返回的物理地址是F0000000,4F02调用的模式号是4115,然后我向FS:[F0000000]写入数据,结果屏幕上没有什么反应,PS:是不是调用VESA的程序退出后,对线性抵制的映射就结束了,因为我在程序退出后用工具查看F0000000处没有任何内容。
vesa
编程
秘技一书代码
vesa
的国产资料可以,可以做为
vesa
的参考,虽然是实模式下,可能和现在的环境有所不同但还是有价值的
VESA
图形图像
编程
秘籍_GUI_中文_
VESA
_
用于了解
VESA
图形
编程
,清晰程度非常一般,但内容适合入门,且为中文版,推荐指数三颗星。
VESA
图形
编程
VESA
图形
编程
的汇编子程序库
VESA
.rar_
VESA
_
vesa
programmi_
vesa
pudn
VESA
编程
介绍
最新
vesa
svga图形图像
编程
秘技.rar
讲的是关于svga图形
编程
,用的c语言和汇编语言
汇编语言
21,458
社区成员
41,601
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章