论坛: 编程破解 标题: 请问大家,这个里的函数具体注解是怎么样的啊。能解释一下吗? 复制本贴地址    
作者: 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号