nuclear@21: #include nuclear@21: #include nuclear@21: #include nuclear@21: #include "wvga.h" nuclear@21: #include "dpmi.h" nuclear@21: nuclear@21: /* VGA DAC registers used for palette setting in 8bpp modes */ nuclear@21: #define VGA_DAC_STATE 0x3c7 nuclear@21: #define VGA_DAC_ADDR_RD 0x3c7 nuclear@21: #define VGA_DAC_ADDR_WR 0x3c8 nuclear@21: #define VGA_DAC_DATA 0x3c9 nuclear@21: nuclear@21: static void *framebuffer; nuclear@21: nuclear@21: int set_video_mode(int mode) nuclear@21: { nuclear@21: struct dpmi_real_regs regs; nuclear@21: nuclear@21: memset(®s, 0, sizeof regs); nuclear@21: regs.eax = mode; nuclear@21: dpmi_real_int(0x10, ®s); nuclear@21: nuclear@21: if(regs.eax == 0x100) { nuclear@21: return -1; nuclear@21: } nuclear@21: nuclear@21: if(mode != 3) { nuclear@21: framebuffer = dpmi_mmap(0xa0000, 64000); nuclear@21: } else { nuclear@21: dpmi_munmap((void*)0xa0000); nuclear@21: } nuclear@21: return 0; nuclear@21: } nuclear@21: nuclear@21: void set_palette(int idx, int *col, int count) nuclear@21: { nuclear@21: int i; nuclear@21: nuclear@21: __asm { nuclear@21: mov dx, VGA_DAC_ADDR_WR nuclear@21: mov eax, idx nuclear@21: out dx, al nuclear@21: } nuclear@21: nuclear@21: for(i=0; i> 2; nuclear@21: unsigned char g = *col++ >> 2; nuclear@21: unsigned char b = *col++ >> 2; nuclear@21: nuclear@21: __asm { nuclear@21: mov dx, VGA_DAC_DATA nuclear@21: mov al, r nuclear@21: out dx, al nuclear@21: mov al, g nuclear@21: out dx, al nuclear@21: mov al, b nuclear@21: out dx, al nuclear@21: } nuclear@21: } nuclear@21: } nuclear@21: nuclear@21: void set_pal_entry(int idx, int r, int g, int b) nuclear@21: { nuclear@21: int color[3]; nuclear@21: color[0] = r; nuclear@21: color[1] = g; nuclear@21: color[2] = b; nuclear@21: nuclear@21: set_palette(idx, color, 1); nuclear@21: } nuclear@21: nuclear@21: void copy_frame(void *pixels) nuclear@21: { nuclear@21: memcpy(framebuffer, pixels, 64000); nuclear@21: } nuclear@21: nuclear@21: nuclear@21: void wait_vsync(void) nuclear@21: { nuclear@21: __asm { nuclear@21: mov dx, 0x3da nuclear@21: l1: nuclear@21: in al, dx nuclear@21: and al, 0x8 nuclear@21: jnz l1 nuclear@21: l2: nuclear@21: in al, dx nuclear@21: and al, 0x8 nuclear@21: jz l2 nuclear@21: } nuclear@21: } nuclear@38: nuclear@38: void begin_capture(int frames) nuclear@38: { nuclear@38: } nuclear@38: nuclear@38: void end_capture(void) nuclear@38: { nuclear@38: }