
| 
 | 
|  | 作者: sdf [yaojbo]  论坛用户 | 登录 | 
| char far *screen=(char far* )0xb8000000; void putchxy(int y,int x,char ch,char fc,char bc) { screen[(x*160)+(y<<1)+0]=ch; screen[(x*160)+(y<<1)+1]=(bc*16)+fc; } | 
| 地主 发表时间: 04-01-03 19:32 | 
|  | 回复: 286 [unique]  版主 | 登录 | 
| 直接写屏技术。 直接向屏幕缓冲区写入数据,现在很少用了。 | 
| B1层 发表时间: 04-01-05 09:29 | 
|  | 回复: yingzike [yingzike]  论坛用户 | 登录 | 
| 你要直接写屏干嘛,最多也只有256/2个中文。如果你想写中文的话 DOS时代的经典,可以在字符界面写中文,不过就是不能写太多 晕。 | 
| B2层 发表时间: 04-01-05 19:39 | 
|  | 回复: andromeda [andromeda]  论坛用户 | 登录 | 
| //看来这个是Dos下的东西了 //直接指向VGA的buffer //一般必须使用类型 char far * char far *screen=(char far* )0xb8000000; void putchxy(int y,int x,char ch,char fc,char bc) { //分辨率是X=160 //因为是对指针,所以可以用操作数组的方法进行 screen[(x*160)+(y<<1)+0]=ch; screen[(x*160)+(y<<1)+1]=(bc*16)+fc; } 如果是在Unix中就么如下 // // //写个大概 ..... //打开FrameBuffer //下面的代码支持Soalris/BSD/Linux char *buffer=NULL; ........ if((screen=open("/dev/fb0",O_RDONLY|O_WRONLY))<0) { perror("failed to open framebuffer device\n"); return -EFAULT; } //调用ioctl()设置属性 //映射 buffer=mmap(...) // //写屏幕 *(buffer+0)=... .... close(screen); | 
| B3层 发表时间: 04-01-06 17:39 | 
| 
 | 
20CN网络安全小组版权所有
Copyright ©    2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon   

粤ICP备05087286号