ch = (unsigned char)((y * colx + x) >> 15); /* find current page */
if (ch != old_page) /* only change page if different */
{
dx = ati_extreg; /* location of ATI card external register */
asm(" cli "); /* disable interrupts */
asm(" mov al,0b2h"); /* page select */
asm(dx," out dx,al"); /* ATI extended register */
asm(" inc dl");
asm(" in al,dx");
asm(" mov ah,al");
asm(" and ah,0e1h"); /* page mask */
asm(ch," or ah,ch"); /* ch = memory page desired */
asm(" mov al,0b2h"); /* page select */
asm(" dec dl");
asm(" out dx, ax");
asm(" sti "); /* enable interrupts */
old_page = ch;
}
addr = 655360 + ((y * colx + x) % 65536);
poke(addr, color); /* write direct to real video memory */