我在纯DOS下写过显存,不难,首先设置分辨率,然后写颜色寄存器,建调色板,最后直接
写数据,DOS下显存是分页的,必须不断的算是否要换页。下面是我写的代码,供参考。
设置分辨率的代码
void set_mode ( int m )
{ union REGS i, o ;
i.x.ax = 0x4f02 ;
i.x.bx = m ;
int86 ( 16, &i, &o ) ;
}
换页代码
void set_page ( int bank_number ) /* change the current page to Blank_number */
{ union REGS i, o ;
i.x.ax = 0x4F05 ;
i.x.bx = 0 ;
i.x.dx = bank_number ;
int86 ( 16, &i, &o ) ;
}
画点代码
void put_256pixel( int x, int y, unsigned char color )
{
static unsigned short curr_vesa_seg = 0xffff ;
unsigned short vesa_seg,vesa_offset ;
unsigned long seg_size = 0xffff + 1L ;
unsigned long offset ;
offset = ( ( unsigned long ) y * ( unsigned long ) 800 + ( unsigned long ) x ) ;
vesa_seg = offset / seg_size ;
vesa_offset = offset % seg_size ;
if ( vesa_seg != curr_vesa_seg )
{ set_page ( vesa_seg ) ;
curr_vesa_seg = vesa_seg ;
}
pokeb ( 0xa000, ( unsigned ) vesa_offset, color ) ;
}