X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=vgasrc%2Fvgafb.c;h=b93373821a01f1f249b48134b8d4b118b230d998;hb=83047be58ee787b2f3651f6b40e08d54371ecd3a;hp=85e4ab3e9fbc6d26479625c04c517de3036992c4;hpb=b93739776593eb470bd18ce8f8b028054cee0e3d;p=seabios.git diff --git a/vgasrc/vgafb.c b/vgasrc/vgafb.c index 85e4ab3..b933738 100644 --- a/vgasrc/vgafb.c +++ b/vgasrc/vgafb.c @@ -75,7 +75,7 @@ scroll_cga(struct vgamode_s *vmode_g, int nblines, int attr , struct cursorpos ul, struct cursorpos lr) { int cheight = GET_GLOBAL(vmode_g->cheight) / 2; - int cwidth = GET_GLOBAL(vmode_g->pixbits); + int cwidth = GET_GLOBAL(vmode_g->depth); int stride = GET_BDA(video_cols) * cwidth; void *src_far, *dest_far; if (nblines >= 0) { @@ -139,10 +139,8 @@ scroll_text(struct vgamode_s *vmode_g, int nblines, int attr { int cheight = 1; int cwidth = 2; - u16 nbrows = GET_BDA(video_rows) + 1; - u16 nbcols = GET_BDA(video_cols); - int stride = nbcols * cwidth; - void *src_far, *dest_far = (void*)SCREEN_MEM_START(nbcols, nbrows, ul.page); + int stride = GET_BDA(video_cols) * cwidth; + void *src_far, *dest_far = (void*)(GET_BDA(video_pagesize) * ul.page); if (nblines >= 0) { dest_far += ul.y * cheight * stride + ul.x * cwidth; src_far = dest_far + nblines * cheight * stride; @@ -176,18 +174,17 @@ vgafb_scroll(int nblines, int attr, struct cursorpos ul, struct cursorpos lr) // FIXME gfx mode not complete switch (GET_GLOBAL(vmode_g->memmodel)) { - case CTEXT: - case MTEXT: + case MM_TEXT: scroll_text(vmode_g, nblines, attr, ul, lr); break; - case PLANAR4: - case PLANAR1: + case MM_PLANAR: scroll_pl4(vmode_g, nblines, attr, ul, lr); break; - case CGA: + case MM_CGA: scroll_cga(vmode_g, nblines, attr, ul, lr); break; - case LINEAR8: + case MM_DIRECT: + case MM_PACKED: scroll_lin(vmode_g, nblines, attr, ul, lr); break; } @@ -254,7 +251,7 @@ write_gfx_char_cga(struct vgamode_s *vmode_g return; u8 *fdata_g = vgafont8; - u8 bpp = GET_GLOBAL(vmode_g->pixbits); + u8 bpp = GET_GLOBAL(vmode_g->depth); u16 addr = (cp.x * bpp) + cp.y * 320; u16 src = ca.car * 8; u8 i; @@ -331,12 +328,9 @@ static void write_text_char(struct vgamode_s *vmode_g , struct cursorpos cp, struct carattr ca) { - // Get the dimensions - u16 nbrows = GET_BDA(video_rows) + 1; - u16 nbcols = GET_BDA(video_cols); - // Compute the address - void *address_far = (void*)(SCREEN_MEM_START(nbcols, nbrows, cp.page) + u16 nbcols = GET_BDA(video_cols); + void *address_far = (void*)(GET_BDA(video_pagesize) * cp.page + (cp.x + cp.y * nbcols) * 2); if (ca.use_attr) { @@ -357,18 +351,17 @@ vgafb_write_char(struct cursorpos cp, struct carattr ca) // FIXME gfx mode not complete switch (GET_GLOBAL(vmode_g->memmodel)) { - case CTEXT: - case MTEXT: + case MM_TEXT: write_text_char(vmode_g, cp, ca); break; - case PLANAR4: - case PLANAR1: + case MM_PLANAR: write_gfx_char_pl4(vmode_g, cp, ca); break; - case CGA: + case MM_CGA: write_gfx_char_cga(vmode_g, cp, ca); break; - case LINEAR8: + case MM_DIRECT: + case MM_PACKED: write_gfx_char_lin(vmode_g, cp, ca); break; } @@ -382,18 +375,15 @@ vgafb_read_char(struct cursorpos cp) if (!vmode_g) goto fail; - if (!(GET_GLOBAL(vmode_g->memmodel) & TEXT)) { + if (GET_GLOBAL(vmode_g->memmodel) != MM_TEXT) { // FIXME gfx mode dprintf(1, "Read char in graphics mode\n"); goto fail; } - // Get the dimensions - u16 nbrows = GET_BDA(video_rows) + 1; - u16 nbcols = GET_BDA(video_cols); - // Compute the address - u16 *address_far = (void*)(SCREEN_MEM_START(nbcols, nbrows, cp.page) + u16 nbcols = GET_BDA(video_cols); + u16 *address_far = (void*)(GET_BDA(video_pagesize) * cp.page + (cp.x + cp.y * nbcols) * 2); u16 v = GET_FARVAR(GET_GLOBAL(vmode_g->sstart), *address_far); struct carattr ca = {v, v>>8, 0}; @@ -416,13 +406,10 @@ vgafb_write_pixel(u8 color, u16 x, u16 y) struct vgamode_s *vmode_g = find_vga_entry(GET_BDA(video_mode)); if (!vmode_g) return; - if (GET_GLOBAL(vmode_g->memmodel) & TEXT) - return; u8 *addr_far, mask, attr, data; switch (GET_GLOBAL(vmode_g->memmodel)) { - case PLANAR4: - case PLANAR1: + case MM_PLANAR: addr_far = (void*)(x / 8 + y * GET_BDA(video_cols)); mask = 0x80 >> (x & 0x07); stdvga_grdc_write(0x08, mask); @@ -435,15 +422,15 @@ vgafb_write_pixel(u8 color, u16 x, u16 y) stdvga_grdc_write(0x05, 0x00); stdvga_grdc_write(0x03, 0x00); break; - case CGA: - if (GET_GLOBAL(vmode_g->pixbits) == 2) + case MM_CGA: + if (GET_GLOBAL(vmode_g->depth) == 2) addr_far = (void*)((x >> 2) + (y >> 1) * 80); else addr_far = (void*)((x >> 3) + (y >> 1) * 80); if (y & 1) addr_far += 0x2000; data = GET_FARVAR(SEG_CTEXT, *addr_far); - if (GET_GLOBAL(vmode_g->pixbits) == 2) { + if (GET_GLOBAL(vmode_g->depth) == 2) { attr = (color & 0x03) << ((3 - (x & 0x03)) * 2); mask = 0x03 << ((3 - (x & 0x03)) * 2); } else { @@ -458,10 +445,13 @@ vgafb_write_pixel(u8 color, u16 x, u16 y) } SET_FARVAR(SEG_CTEXT, *addr_far, data); break; - case LINEAR8: + case MM_DIRECT: + case MM_PACKED: addr_far = (void*)(x + y * (GET_BDA(video_cols) * 8)); SET_FARVAR(SEG_GRAPH, *addr_far, color); break; + case MM_TEXT: + return; } } @@ -472,13 +462,10 @@ vgafb_read_pixel(u16 x, u16 y) struct vgamode_s *vmode_g = find_vga_entry(GET_BDA(video_mode)); if (!vmode_g) return 0; - if (GET_GLOBAL(vmode_g->memmodel) & TEXT) - return 0; u8 *addr_far, mask, attr=0, data, i; switch (GET_GLOBAL(vmode_g->memmodel)) { - case PLANAR4: - case PLANAR1: + case MM_PLANAR: addr_far = (void*)(x / 8 + y * GET_BDA(video_cols)); mask = 0x80 >> (x & 0x07); attr = 0x00; @@ -489,20 +476,23 @@ vgafb_read_pixel(u16 x, u16 y) attr |= (0x01 << i); } break; - case CGA: + case MM_CGA: addr_far = (void*)((x >> 2) + (y >> 1) * 80); if (y & 1) addr_far += 0x2000; data = GET_FARVAR(SEG_CTEXT, *addr_far); - if (GET_GLOBAL(vmode_g->pixbits) == 2) + if (GET_GLOBAL(vmode_g->depth) == 2) attr = (data >> ((3 - (x & 0x03)) * 2)) & 0x03; else attr = (data >> (7 - (x & 0x07))) & 0x01; break; - case LINEAR8: + case MM_DIRECT: + case MM_PACKED: addr_far = (void*)(x + y * (GET_BDA(video_cols) * 8)); attr = GET_FARVAR(SEG_GRAPH, *addr_far); break; + case MM_TEXT: + return 0; } return attr; }