// Alternate version that sets the value first #define OUTW2(port, val) __asm { \ mov ax, val; \ mov dx, port; \ out dx, ax; \ } void pascal egc_start_copy(void) { egc_on(); OUTW2(EGC_ACTIVEPLANEREG, 0xFFF0); OUTW2(EGC_READPLANEREG, 0x00FF); // EGC_COMPAREREAD | EGC_WS_PATREG | EGC_RL_MEMREAD OUTW2(EGC_MODE_ROP_REG, 0x3100); OUTW2(EGC_MASKREG, 0xFFFF); OUTW2(EGC_ADDRRESSREG, 0); OUTW2(EGC_BITLENGTHREG, 0xF); } void egc_copy_rect_1_to_0(int x, int y, int w, int h) { register int x_end = x; register int x_floor = x_end; int row; int col; int row_p; int bits; int p; x_end += w; x_floor &= 0xFFF0; row_p = VRAM_OFFSET(x_floor, y); egc_start_copy(); for(row = 0; row < h; row++) { for(col = x_floor, p = row_p; col < x_end; p += 2, col += 16) { graph_accesspage(1); bits = *(int*)(VRAM_PLANE_B + p); graph_accesspage(0); *(int*)(VRAM_PLANE_B + p) = bits; } row_p += 640 / 8; } egc_off(); }