char *oldpal, *newpal; void fadeout() { int i,ii; char *pal = (char *) malloc(64*3); char *palend = pal + 64*3; char *palptr = pal; asm { push di push es mov dx, 3C7h mov ax, 0 out dx, al mov cx, 64*3 add dx, 2 les di, palptr rep insb pop es pop di } for (ii = 0; ii < 64; ii++) { asm mov dx,3DAh l1: asm { in al,dx and al,08h jnz l1 } l2: asm { in al,dx and al,08h jz l2 } for (palptr = pal; palptr < palend; palptr++ ) if (*palptr) (*palptr)--; palptr = pal; asm { push si push ds mov dx, 3C8h sub al, al out dx, al inc dx mov cx, 64*3 lds si, palptr rep outsb pop ds pop si } } free(pal); } void set_black() { int i; oldpal = (char *) malloc(64*3); newpal = oldpal; asm { push di push es mov dx, 3C7h mov ax, 0 out dx, al mov cx, 64*3 add dx, 2 les di, newpal rep insb pop es pop di } asm mov cx, 64*3 loopit: asm { mov dx, 3c8h mov ax, cx out dx, al inc dx sub al, al out dx, al out dx, al out dx, al loop loopit } } void fadein() { char *pal = (char *) malloc(64*3); char *palend = pal + 64*3; char *palptr; int ii; if (!oldpal) set_black(); for (palptr = pal; palptr < palend; ) *(palptr++) = 0; for (ii = 0; ii < 64; ii++) { asm mov dx,3DAh l1: asm { in al,dx and al,08h jnz l1 } l2: asm { in al,dx and al,08h jz l2 } for (newpal = oldpal, palptr = pal; palptr < palend; palptr++) if (*palptr < *(newpal++)) ++(*palptr); palptr = pal; asm { push si push ds mov dx, 3C8h sub ax, ax out dx, al inc dx lds si, palptr mov cx, 64*3 rep outsb pop ds pop si } } free(pal); free(oldpal); }