Mình có một bài tâp về đồ hoạ có sử dụng con trỏ far như sau:
char attr = 11;
char far *vidmem = (char far *)(0xB8000000);

void border(void)
{
int i;
int f,g;
char line[] = "Line";
char col[] = "Col";
clrscr();

for(i=1; i<=23; i++)
{
write2vdu(179,attr,i,0);
write2vdu(179,attr,i,79);
}
for(i=1; i<=78; i++)
{
write2vdu(205,attr,0,i);
write2vdu(205,attr,24,i);
}
write2vdu(213,attr,0,0); /* four ends */
write2vdu(184,attr,0,79);
write2vdu(212,attr,24,0);
write2vdu(190,attr,24,79);
/* line */
for(i=1; i<=78; i++)
write2vdu(196,attr,3,i);

for(i=0; line[i]!=NULL; i++)
write2vdu(line[i],attr,2,i+4);

for(i=0;col[i]!=NULL; i++)
write2vdu(col[i],attr,2,i+16);

}


void write2vdu(char ch, char attr, int row, int col)
{
char far *v;
v = vidmem + row*160 + col*2 ;
*v = ch;
v++;
*v = attr;
}

char readvdu( int row, int col)
{
char far *v;
v = vidmem + row*160 + col*2 ;
return(*v);
}
Bạn nào biết có thể giải thích cho mình hiểu về con trỏ far dùng như thế nào?
Hàm write2vdu, hàm readvdu để làm gì?
Cái dòng này mình cũng không hiểu: v = vidmem + row*160 + col*2 ;
Cám ơn các bạn nhiều nha!