X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=vgasrc%2Fstdvga.c;h=6998cd09268090a6b33e67c76264bbd935612573;hb=34203cdf8a89c747e221005850a4558252235360;hp=e55f8fa753e6b9d103989b699d3fc450e1fd1195;hpb=5108c69c47e18244206593c0c7918711311d8ef3;p=seabios.git diff --git a/vgasrc/stdvga.c b/vgasrc/stdvga.c index e55f8fa..6998cd0 100644 --- a/vgasrc/stdvga.c +++ b/vgasrc/stdvga.c @@ -11,7 +11,6 @@ #include "biosvar.h" // GET_GLOBAL #include "util.h" // memcpy_far #include "vbe.h" // VBE_RETURN_STATUS_FAILED -#include "vgabios.h" // find_vga_entry // TODO // * replace direct in/out calls with wrapper functions @@ -527,11 +526,10 @@ static void clear_screen(struct vgamode_s *vmode_g) { switch (GET_GLOBAL(vmode_g->memmodel)) { - case CTEXT: - case MTEXT: + case MM_TEXT: memset16_far(GET_GLOBAL(vmode_g->sstart), 0, 0x0720, 32*1024); break; - case CGA: + case MM_CGA: memset16_far(GET_GLOBAL(vmode_g->sstart), 0, 0x0000, 32*1024); break; default: @@ -545,18 +543,20 @@ int stdvga_set_mode(int mode, int flags) { // find the entry in the video modes - struct vgamode_s *vmode_g = find_vga_entry(mode); + struct vgamode_s *vmode_g = stdvga_find_mode(mode); dprintf(1, "mode search %02x found %p\n", mode, vmode_g); if (!vmode_g) return VBE_RETURN_STATUS_FAILED; + struct stdvga_mode_s *stdmode_g = container_of( + vmode_g, struct stdvga_mode_s, info); // if palette loading (bit 3 of modeset ctl = 0) if (!(flags & MF_NOPALETTE)) { // Set the PEL mask - stdvga_set_pel_mask(GET_GLOBAL(vmode_g->pelmask)); + stdvga_set_pel_mask(GET_GLOBAL(stdmode_g->pelmask)); // From which palette - u8 *palette_g = GET_GLOBAL(vmode_g->dac); - u16 palsize = GET_GLOBAL(vmode_g->dacsize) / 3; + u8 *palette_g = GET_GLOBAL(stdmode_g->dac); + u16 palsize = GET_GLOBAL(stdmode_g->dacsize) / 3; // Always 256*3 values stdvga_set_dac_regs(get_global_seg(), palette_g, 0, palsize); @@ -574,7 +574,7 @@ stdvga_set_mode(int mode, int flags) inb(VGAREG_ACTL_RESET); // Set Attribute Ctl - u8 *regs = GET_GLOBAL(vmode_g->actl_regs); + u8 *regs = GET_GLOBAL(stdmode_g->actl_regs); u16 i; for (i = 0; i <= 0x13; i++) { outb(i, VGAREG_ACTL_ADDRESS); @@ -586,21 +586,21 @@ stdvga_set_mode(int mode, int flags) // Set Sequencer Ctl outb(0, VGAREG_SEQU_ADDRESS); outb(0x03, VGAREG_SEQU_DATA); - regs = GET_GLOBAL(vmode_g->sequ_regs); + regs = GET_GLOBAL(stdmode_g->sequ_regs); for (i = 1; i <= 4; i++) { outb(i, VGAREG_SEQU_ADDRESS); outb(GET_GLOBAL(regs[i - 1]), VGAREG_SEQU_DATA); } // Set Grafx Ctl - regs = GET_GLOBAL(vmode_g->grdc_regs); + regs = GET_GLOBAL(stdmode_g->grdc_regs); for (i = 0; i <= 8; i++) { outb(i, VGAREG_GRDC_ADDRESS); outb(GET_GLOBAL(regs[i]), VGAREG_GRDC_DATA); } // Set CRTC address VGA or MDA - u8 miscreg = GET_GLOBAL(vmode_g->miscreg); + u8 miscreg = GET_GLOBAL(stdmode_g->miscreg); u16 crtc_addr = VGAREG_VGA_CRTC_ADDRESS; if (!(miscreg & 1)) crtc_addr = VGAREG_MDA_CRTC_ADDRESS; @@ -608,7 +608,7 @@ stdvga_set_mode(int mode, int flags) // Disable CRTC write protection outw(0x0011, crtc_addr); // Set CRTC regs - regs = GET_GLOBAL(vmode_g->crtc_regs); + regs = GET_GLOBAL(stdmode_g->crtc_regs); for (i = 0; i <= 0x18; i++) { outb(i, crtc_addr); outb(GET_GLOBAL(regs[i]), crtc_addr + 1); @@ -627,7 +627,7 @@ stdvga_set_mode(int mode, int flags) // Write the fonts in memory u8 memmodel = GET_GLOBAL(vmode_g->memmodel); - if (memmodel & TEXT) + if (memmodel == MM_TEXT) stdvga_load_font(get_global_seg(), vgafont16, 0x100, 0, 0, 16); // Setup BDA variables @@ -641,6 +641,12 @@ stdvga_set_mode(int mode, int flags) * Misc ****************************************************************/ +void +stdvga_list_modes(u16 seg, u16 *dest, u16 *last) +{ + SET_FARVAR(seg, *dest, 0xffff); +} + void stdvga_enable_video_addressing(u8 disable) { @@ -649,7 +655,7 @@ stdvga_enable_video_addressing(u8 disable) outb(v | v2, VGAREG_WRITE_MISC_OUTPUT); } -void +int stdvga_init(void) { // switch to color mode and enable CPU access 480 lines @@ -657,4 +663,6 @@ stdvga_init(void) // more than 64k 3C4/04 outb(0x04, VGAREG_SEQU_ADDRESS); outb(0x02, VGAREG_SEQU_DATA); + + return 0; }