Fixed to draw mouse cursor. The syscons driver for PC98 uses different
attributes from i386. Submitted by: chi@bd.mbn.or.jp (Chiharu Shibata) MFC after: 3 days
This commit is contained in:
parent
e237860a3c
commit
9cc62fb3d8
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=87886
@ -37,7 +37,12 @@
|
||||
|
||||
/* Monochrome attributes for foreground text */
|
||||
|
||||
#ifdef PC98
|
||||
/* PC-98 attributes for foreground text */
|
||||
#define FG_UNDERLINE 0x08
|
||||
#else
|
||||
#define FG_UNDERLINE 0x01
|
||||
#endif
|
||||
#define FG_INTENSE 0x08
|
||||
|
||||
/* Monochrome attributes for text background */
|
||||
|
@ -37,7 +37,12 @@
|
||||
|
||||
/* Monochrome attributes for foreground text */
|
||||
|
||||
#ifdef PC98
|
||||
/* PC-98 attributes for foreground text */
|
||||
#define FG_UNDERLINE 0x08
|
||||
#else
|
||||
#define FG_UNDERLINE 0x01
|
||||
#endif
|
||||
#define FG_INTENSE 0x08
|
||||
|
||||
/* Monochrome attributes for text background */
|
||||
|
@ -120,8 +120,8 @@ gdc_txtdraw(scr_stat *scp, int from, int count, int flip)
|
||||
p = sc_vtb_pointer(&scp->scr, from);
|
||||
for (; count-- > 0; ++from) {
|
||||
c = sc_vtb_getc(&scp->vtb, from);
|
||||
a = sc_vtb_geta(&scp->vtb, from) ^ 0x4;
|
||||
sc_vtb_putchar(&scp->scr, p, c, a);
|
||||
a = sc_vtb_geta(&scp->vtb, from) ^ 0x0800;
|
||||
p = sc_vtb_putchar(&scp->scr, p, c, a);
|
||||
}
|
||||
} else {
|
||||
sc_vtb_copy(&scp->vtb, from, &scp->scr, from, count);
|
||||
@ -164,7 +164,7 @@ draw_txtmouse(scr_stat *scp, int x, int y)
|
||||
at = (y/scp->font_size - scp->yoff)*scp->xsize + x/8 - scp->xoff;
|
||||
sc_vtb_putc(&scp->scr, at,
|
||||
sc_vtb_getc(&scp->scr, at),
|
||||
sc_vtb_geta(&scp->scr, at) ^ 0x4);
|
||||
sc_vtb_geta(&scp->vtb, at) ^ 0x0800);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -83,11 +83,7 @@ static u_int8_t ibmpc_to_pc98[256] = {
|
||||
0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
|
||||
0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
|
||||
};
|
||||
#if 0
|
||||
#define at2pc98(attr) ((attr) | ibmpc_to_pc98[(unsigned)(attr) >> 8])
|
||||
#else
|
||||
#define at2pc98(attr) ibmpc_to_pc98[(unsigned)(attr) >> 8]
|
||||
#endif
|
||||
|
||||
void
|
||||
sc_vtb_init(sc_vtb_t *vtb, int type, int cols, int rows, void *buf, int wait)
|
||||
@ -173,9 +169,9 @@ sc_vtb_geta(sc_vtb_t *vtb, int at)
|
||||
vm_offset_t p = vtb_pointer(vtb, at);
|
||||
|
||||
if (vtb->vtb_type == VTB_FRAMEBUFFER)
|
||||
return (readw(p + ATTR_OFFSET_FB) & 0x00ff);
|
||||
return (readw(p + ATTR_OFFSET_FB) & 0xff00);
|
||||
else
|
||||
return (*(u_int16_t *)(p + attr_offset(vtb)) & 0x00ff);
|
||||
return (*(u_int16_t *)(p + attr_offset(vtb)) & 0xff00);
|
||||
}
|
||||
|
||||
__inline static void
|
||||
|
@ -120,8 +120,8 @@ gdc_txtdraw(scr_stat *scp, int from, int count, int flip)
|
||||
p = sc_vtb_pointer(&scp->scr, from);
|
||||
for (; count-- > 0; ++from) {
|
||||
c = sc_vtb_getc(&scp->vtb, from);
|
||||
a = sc_vtb_geta(&scp->vtb, from) ^ 0x4;
|
||||
sc_vtb_putchar(&scp->scr, p, c, a);
|
||||
a = sc_vtb_geta(&scp->vtb, from) ^ 0x0800;
|
||||
p = sc_vtb_putchar(&scp->scr, p, c, a);
|
||||
}
|
||||
} else {
|
||||
sc_vtb_copy(&scp->vtb, from, &scp->scr, from, count);
|
||||
@ -164,7 +164,7 @@ draw_txtmouse(scr_stat *scp, int x, int y)
|
||||
at = (y/scp->font_size - scp->yoff)*scp->xsize + x/8 - scp->xoff;
|
||||
sc_vtb_putc(&scp->scr, at,
|
||||
sc_vtb_getc(&scp->scr, at),
|
||||
sc_vtb_geta(&scp->scr, at) ^ 0x4);
|
||||
sc_vtb_geta(&scp->vtb, at) ^ 0x0800);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -83,11 +83,7 @@ static u_int8_t ibmpc_to_pc98[256] = {
|
||||
0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
|
||||
0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
|
||||
};
|
||||
#if 0
|
||||
#define at2pc98(attr) ((attr) | ibmpc_to_pc98[(unsigned)(attr) >> 8])
|
||||
#else
|
||||
#define at2pc98(attr) ibmpc_to_pc98[(unsigned)(attr) >> 8]
|
||||
#endif
|
||||
|
||||
void
|
||||
sc_vtb_init(sc_vtb_t *vtb, int type, int cols, int rows, void *buf, int wait)
|
||||
@ -173,9 +169,9 @@ sc_vtb_geta(sc_vtb_t *vtb, int at)
|
||||
vm_offset_t p = vtb_pointer(vtb, at);
|
||||
|
||||
if (vtb->vtb_type == VTB_FRAMEBUFFER)
|
||||
return (readw(p + ATTR_OFFSET_FB) & 0x00ff);
|
||||
return (readw(p + ATTR_OFFSET_FB) & 0xff00);
|
||||
else
|
||||
return (*(u_int16_t *)(p + attr_offset(vtb)) & 0x00ff);
|
||||
return (*(u_int16_t *)(p + attr_offset(vtb)) & 0xff00);
|
||||
}
|
||||
|
||||
__inline static void
|
||||
|
Loading…
Reference in New Issue
Block a user