44,8 → 44,6 |
static void vesa_setpage(int page) |
{ |
|
memset(&vesa_r, 0, sizeof(vesa_r)); |
|
vesa_r.eax=0x4f05; |
vesa_r.ebx=0; |
vesa_r.edx=page*64/vesa_granularity; |
110,7 → 108,6 |
{ |
/*void * buf; |
buf=LRMI_mem1; |
memset(&vesa_r, 0, sizeof(vesa_r)); |
vesa_r.eax=0x4f04; |
vesa_r.ebx=0; |
vesa_r.es=((long)buf)>>4; |
129,7 → 126,6 |
|
/*void * bufe |
buf=LRMI_mem1; |
memset(&vesa_r, 0, sizeof(vesa_r)); |
memcpy(buf,®s[VGA_TOTAL_REGS],vesa_regs_size); |
vesa_r.eax=0x4f04; |
vesa_r.ebx=0; |
178,7 → 174,6 |
|
vesa_data.info = LRMI_mem2 ; |
vesa_data.mode = (struct vbe_mode_info_block *)(vesa_data.info + 1); |
memset(&vesa_r, 0, sizeof(vesa_r)); |
vesa_r.eax = 0x4f01; |
vesa_r.ecx=SVGALIB_VESA[mode]; |
vesa_r.es = (unsigned int)vesa_data.mode >> 4; |
204,7 → 199,6 |
if (!vesa_modeavailable(mode)) { |
return 1; |
} |
memset(&vesa_r, 0, sizeof(vesa_r)); |
vesa_r.eax=0x4f02; |
vesa_r.ebx=SVGALIB_VESA[mode]|0x8000|(vesa_is_linear*0x4000); |
vesa_last_mode_set=vesa_r.ebx; |
239,7 → 233,6 |
+ sizeof(struct vbe_mode_info_block)); |
vesa_data.info = LRMI_mem2; |
vesa_data.mode = (struct vbe_mode_info_block *)(vesa_data.info + 1); |
memset(&vesa_r, 0, sizeof(vesa_r)); |
vesa_r.eax = 0x4f00; |
vesa_r.es = (unsigned int)vesa_data.info >> 4; |
vesa_r.ds = (unsigned int)vesa_data.info >> 4; |
256,19 → 249,17 |
/* No r/w paging */ |
static void vesa_setrdpage(int page) |
{ |
memset(&vesa_r, 0, sizeof(vesa_r)); |
vesa_r.eax=0x4f05; |
vesa_r.ebx=vesa_read_window; |
vesa_r.edx=page*64/vesa_granularity; |
__svgalib_LRMI_int(0x10,&vesa_r); |
vesa_r.eax=0x4f05; |
vesa_r.ebx=vesa_read_window; |
vesa_r.edx=page*64/vesa_granularity; |
__svgalib_LRMI_int(0x10,&vesa_r); |
} |
static void vesa_setwrpage(int page) |
{ |
memset(&vesa_r, 0, sizeof(vesa_r)); |
vesa_r.eax=0x4f05; |
vesa_r.ebx=vesa_write_window; |
vesa_r.edx=page*64/vesa_granularity; |
__svgalib_LRMI_int(0x10,&vesa_r); |
vesa_r.eax=0x4f05; |
vesa_r.ebx=vesa_write_window; |
vesa_r.edx=page*64/vesa_granularity; |
__svgalib_LRMI_int(0x10,&vesa_r); |
} |
|
|
276,8 → 267,6 |
|
static void vesa_setdisplaystart(int address) |
{ |
memset(&vesa_r, 0, sizeof(vesa_r)); |
|
vesa_r.eax=0x4f07; |
vesa_r.ebx=0; |
vesa_r.ecx=address % vesa_logical_width; |
291,8 → 280,6 |
|
static void vesa_setlogicalwidth(int width) |
{ |
memset(&vesa_r, 0, sizeof(vesa_r)); |
|
vesa_r.eax=0x4f06; |
vesa_r.ebx=0; |
vesa_r.ecx=width / vesa_bpp ; |
303,44 → 290,37 |
|
static int vesa_linear(int op, int param) |
{ |
if (op==LINEAR_ENABLE) { |
if(vesa_is_linear == 1) return vesa_linear_base; |
vesa_r.eax=0x4f02; |
vesa_r.ebx=vesa_last_mode_set|0x4000; |
__svgalib_LRMI_int(0x10,&vesa_r); |
vesa_is_linear=1; |
}; |
|
memset(&vesa_r, 0, sizeof(vesa_r)); |
|
if (op==LINEAR_ENABLE) { |
if(vesa_is_linear == 1) return vesa_linear_base; |
vesa_r.eax=0x4f02; |
vesa_r.ebx=vesa_last_mode_set|0x4000; |
__svgalib_LRMI_int(0x10,&vesa_r); |
vesa_is_linear=1; |
}; |
|
if (op==LINEAR_DISABLE){ |
vesa_r.eax=0x4f02; |
vesa_r.ebx=vesa_last_mode_set; |
__svgalib_LRMI_int(0x10,&vesa_r); |
vesa_is_linear=0; |
}; |
|
if (op==LINEAR_QUERY_BASE) {return vesa_linear_base ;} |
if (op == LINEAR_QUERY_RANGE || op == LINEAR_QUERY_GRANULARITY) return 0; /* No granularity or range. */ |
else return -1; /* Unknown function. */ |
if (op==LINEAR_DISABLE){ |
vesa_r.eax=0x4f02; |
vesa_r.ebx=vesa_last_mode_set; |
__svgalib_LRMI_int(0x10,&vesa_r); |
vesa_is_linear=0; |
}; |
if (op==LINEAR_QUERY_BASE) {return vesa_linear_base ;} |
if (op == LINEAR_QUERY_RANGE || op == LINEAR_QUERY_GRANULARITY) return 0; /* No granularity or range. */ |
else return -1; /* Unknown function. */ |
} |
|
static int vesa_match_programmable_clock(int clock) |
{ |
return clock ; |
return clock ; |
} |
|
static int vesa_map_clock(int bpp, int clock) |
{ |
return clock ; |
return clock ; |
} |
|
static int vesa_map_horizontal_crtc(int bpp, int pixelclock, int htiming) |
{ |
return htiming; |
return htiming; |
} |
|
/* Function table (exported) */ |
|
DriverSpecs __svgalib_vesa_driverspecs = |
377,7 → 357,6 |
{ |
short int *mode_list; |
int i; |
|
#if 0 |
uint8_t *m; |
int address; |
409,9 → 388,6 |
vesa_data.info = __svgalib_LRMI_alloc_real(sizeof(struct vbe_info_block) |
+ sizeof(struct vbe_mode_info_block)); |
vesa_data.mode = (struct vbe_mode_info_block *)(vesa_data.info + 1); |
|
memset(&vesa_r, 0, sizeof(vesa_r)); |
|
vesa_r.eax = 0x4f00; |
vesa_r.es = (unsigned int)vesa_data.info >> 4; |
vesa_r.ds = (unsigned int)vesa_data.info >> 4; |
435,7 → 411,6 |
mode_list = (short int *)(vesa_data.info->video_mode_list_seg * 16 + vesa_data.info->video_mode_list_off); |
|
while (*mode_list != -1) { |
|
memset(&vesa_r, 0, sizeof(vesa_r)); |
|
vesa_r.eax = 0x4f01; |
566,15 → 541,12 |
#endif |
mode_list++; |
}; |
|
/* vesa_r.eax=0x4f04; |
vesa_r.edx=0; |
vesa_r.ecx=__svgalib_VESA_savebitmap; |
vesa_r.ebx=0; |
__svgalib_LRMI_int(0x10,&vesa_r); |
vesa_regs_size=vesa_r.ebx*64; |
*/ |
|
/*vesa_r.eax=0x4f04; |
vesa_r.edx=0; |
vesa_r.ecx=__svgalib_VESA_savebitmap; |
vesa_r.ebx=0; |
__svgalib_LRMI_int(0x10,&vesa_r); |
vesa_regs_size=vesa_r.ebx*64;*/ |
__svgalib_LRMI_free_real(vesa_data.info,sizeof(struct vbe_info_block) + sizeof(struct vbe_mode_info_block)); |
|
SVGALIB_VESA[TEXT]=3; |