}
}
-static u16
-cirrus_get_crtc(void)
-{
- if (inb(VGAREG_READ_MISC_OUTPUT) & 1)
- return VGAREG_VGA_CRTC_ADDRESS;
- return VGAREG_MDA_CRTC_ADDRESS;
-}
-
static void
cirrus_switch_mode(struct cirrus_mode_s *table)
{
outw(0x1206, VGAREG_SEQU_ADDRESS);
cirrus_switch_mode_setregs(GET_GLOBAL(table->seq), VGAREG_SEQU_ADDRESS);
cirrus_switch_mode_setregs(GET_GLOBAL(table->graph), VGAREG_GRDC_ADDRESS);
- cirrus_switch_mode_setregs(GET_GLOBAL(table->crtc), cirrus_get_crtc());
+ cirrus_switch_mode_setregs(GET_GLOBAL(table->crtc), stdvga_get_crtc());
outb(0x00, VGAREG_PEL_MASK);
inb(VGAREG_PEL_MASK);
static void
cirrus_extbios_80h(struct bregs *regs)
{
- u16 crtc_addr = cirrus_get_crtc();
+ u16 crtc_addr = stdvga_get_crtc();
outb(0x27, crtc_addr);
u8 v = inb(crtc_addr + 1);
if (v == 0xa0)
static void
cirrus_extbios_82h(struct bregs *regs)
{
- u16 crtc_addr = cirrus_get_crtc();
+ u16 crtc_addr = stdvga_get_crtc();
outb(0x27, crtc_addr);
regs->al = inb(crtc_addr + 1) & 0x03;
regs->ah = 0xAF;
static void
cirrus_set_line_offset(u16 new_line_offset)
{
- u16 crtc_addr = cirrus_get_crtc();
+ u16 crtc_addr = stdvga_get_crtc();
outb(0x13, crtc_addr);
outb(new_line_offset / 8, crtc_addr + 1);
static u16
cirrus_get_line_offset(void)
{
- u16 crtc_addr = cirrus_get_crtc();
+ u16 crtc_addr = stdvga_get_crtc();
outb(0x13, crtc_addr);
u8 reg13 = inb(crtc_addr + 1);
outb(0x1b, crtc_addr);
static void
cirrus_set_start_addr(u32 addr)
{
- u16 crtc_addr = cirrus_get_crtc();
+ u16 crtc_addr = stdvga_get_crtc();
outb(0x0d, crtc_addr);
outb(addr, crtc_addr + 1);
static u32
cirrus_get_start_addr(void)
{
- u16 crtc_addr = cirrus_get_crtc();
+ u16 crtc_addr = stdvga_get_crtc();
outb(0x0c, crtc_addr);
u8 b2 = inb(crtc_addr + 1);
#include "stdvga.h" // stdvga_init
#include "ioport.h" // outb
#include "farptr.h" // SET_FARVAR
-#include "biosvar.h" // GET_BDA
-#include "vgabios.h" // VGAREG_*
+#include "biosvar.h" // GET_GLOBAL
#include "util.h" // memcpy_far
// TODO
* CRTC registers
****************************************************************/
-static u16
-get_crtc(void)
+u16
+stdvga_get_crtc(void)
{
- return GET_BDA(crtc_address);
+ if (inb(VGAREG_READ_MISC_OUTPUT) & 1)
+ return VGAREG_VGA_CRTC_ADDRESS;
+ return VGAREG_MDA_CRTC_ADDRESS;
}
void
stdvga_set_cursor_shape(u8 start, u8 end)
{
- u16 crtc_addr = get_crtc();
+ u16 crtc_addr = stdvga_get_crtc();
outb(0x0a, crtc_addr);
outb(start, crtc_addr + 1);
outb(0x0b, crtc_addr);
void
stdvga_set_active_page(u16 address)
{
- u16 crtc_addr = get_crtc();
+ u16 crtc_addr = stdvga_get_crtc();
outb(0x0c, crtc_addr);
outb((address & 0xff00) >> 8, crtc_addr + 1);
outb(0x0d, crtc_addr);
void
stdvga_set_cursor_pos(u16 address)
{
- u16 crtc_addr = get_crtc();
+ u16 crtc_addr = stdvga_get_crtc();
outb(0x0e, crtc_addr);
outb((address & 0xff00) >> 8, crtc_addr + 1);
outb(0x0f, crtc_addr);
void
stdvga_set_scan_lines(u8 lines)
{
- u16 crtc_addr = get_crtc();
+ u16 crtc_addr = stdvga_get_crtc();
outb(0x09, crtc_addr);
u8 crtc_r9 = inb(crtc_addr + 1);
crtc_r9 = (crtc_r9 & 0xe0) | (lines - 1);
u16
stdvga_get_vde(void)
{
- u16 crtc_addr = get_crtc();
+ u16 crtc_addr = stdvga_get_crtc();
outb(0x12, crtc_addr);
u16 vde = inb(crtc_addr + 1);
outb(0x07, crtc_addr);
void
stdvga_save_state(u16 seg, struct saveVideoHardware *info)
{
- u16 crtc_addr = get_crtc();
+ u16 crtc_addr = stdvga_get_crtc();
SET_FARVAR(seg, info->sequ_index, inb(VGAREG_SEQU_ADDRESS));
SET_FARVAR(seg, info->crtc_index, inb(crtc_addr));
SET_FARVAR(seg, info->grdc_index, inb(VGAREG_GRDC_ADDRESS));
void stdvga_set_text_block_specifier(u8 spec);
void stdvga_load_font(u16 seg, void *src_far, u16 count
, u16 start, u8 destflags, u8 fontsize);
+u16 stdvga_get_crtc(void);
void stdvga_set_cursor_shape(u8 start, u8 end);
void stdvga_set_active_page(u16 address);
void stdvga_set_cursor_pos(u16 address);