- stdvga_sequ_write(0x02, 0x0f);
- stdvga_grdc_write(0x05, 0x02);
- if (ca.attr & 0x80)
- stdvga_grdc_write(0x03, 0x18);
- else
- stdvga_grdc_write(0x03, 0x00);
- u8 i;
- for (i = 0; i < cheight; i++) {
- u8 *dest_far = (void*)(addr + i * nbcols);
- u8 j;
- for (j = 0; j < 8; j++) {
- u8 mask = 0x80 >> j;
- stdvga_grdc_write(0x08, mask);
- GET_FARVAR(SEG_GRAPH, *(volatile u8*)dest_far);
- if (GET_GLOBAL(fdata_g[src + i]) & mask)
- SET_FARVAR(SEG_GRAPH, *dest_far, ca.attr & 0x0f);
- else
- SET_FARVAR(SEG_GRAPH, *dest_far, 0x00);
+ int i;
+ for (i=0; i<4; i++) {
+ stdvga_planar4_plane(i);
+ u8 colors = ((ca.attr & (1<<i)) ? 0xff : 0x00);
+ int j;
+ for (j = 0; j < cheight; j++) {
+ u8 *dest_far = (void*)(addr + j * nbcols);
+ u8 pixels = colors & GET_GLOBAL(fdata_g[src + j]);
+ if (ca.attr & 0x80)
+ pixels ^= GET_FARVAR(SEG_GRAPH, *dest_far);
+ SET_FARVAR(SEG_GRAPH, *dest_far, pixels);