This is version 2 of this patch.  Version one still had a few bugs in it.

The PC console driver (PCVT) has two bugs. Display problems can result if
reverse video mode is turned on or off twice in a row. This patch also
fixes a problem with scrolling region handling that has been seen by many
users trying to use the BitchX irc client with the screen program.

Apply by doing:
       cd /usr/src
       patch -p0 < 014_pcvt.patch

And then rebuild your kernel.

Index: sys/arch/i386/isa/pcvt/pcvt_out.c
===================================================================
RCS file: /cvs/src/sys/arch/i386/isa/pcvt/pcvt_out.c,v
retrieving revision 1.21
retrieving revision 1.25
diff -u -r1.21 -r1.25
--- sys/arch/i386/isa/pcvt/pcvt_out.c   2000/04/09 20:21:30     1.21
+++ sys/arch/i386/isa/pcvt/pcvt_out.c   2000/07/05 03:10:34     1.25
@@ -1,4 +1,4 @@
-/*     $OpenBSD: pcvt_out.c,v 1.21 2000/04/09 20:21:30 aaron Exp $     */
+/*     $OpenBSD: pcvt_out.c,v 1.25 2000/07/05 03:10:34 aaron Exp $     */

/*
 * Copyright (c) 1992, 1995 Hellmuth Michaelis and Joerg Wunsch.
@@ -216,12 +216,10 @@
                       }
                       if(svsp->lnm) {
                               svsp->cur_offset -= svsp->col;
-                               svsp->cur_offset += svsp->maxcol;
                               svsp->col = 0;
                       }
-                       else {
-                               svsp->cur_offset += svsp->maxcol;
-                       }
+                       svsp->row = svsp->cur_offset / svsp->maxcol;
+                       svsp->cur_offset += svsp->maxcol;
                       check_scroll(svsp);
                       break;

@@ -358,6 +356,7 @@
                       if (svsp->lastchar && svsp->m_awm &&
                           (svsp->lastrow == svsp->row))
                       {
+                               svsp->row = svsp->cur_offset / svsp->maxcol;
                               svsp->cur_offset++;
                               svsp->col = 0;
                               svsp->lastchar = 0;
@@ -1304,7 +1303,7 @@
       {
               /* we write within scroll region */

-               if(svsp->cur_offset >= ((svsp->scrr_end + 1) * svsp->maxcol))
+               if(svsp->row == svsp->scrr_end)
               {
                       /* the following piece of code has to be protected */
                       /* from trying to switch to another virtual screen */
Index: sys/arch/i386/isa/pcvt/pcvt_vtf.c
===================================================================
RCS file: /cvs/src/sys/arch/i386/isa/pcvt/pcvt_vtf.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- sys/arch/i386/isa/pcvt/pcvt_vtf.c   2000/04/12 13:20:41     1.15
+++ sys/arch/i386/isa/pcvt/pcvt_vtf.c   2000/05/31 23:31:42     1.16
@@ -1,4 +1,4 @@
-/*     $OpenBSD: pcvt_vtf.c,v 1.15 2000/04/12 13:20:41 aaron Exp $     */
+/*     $OpenBSD: pcvt_vtf.c,v 1.16 2000/05/31 23:31:42 aaron Exp $     */

/*
 * Copyright (c) 1992, 1995 Hellmuth Michaelis and Joerg Wunsch.
@@ -182,8 +182,7 @@
                       break;

               case 7:         /* reverse */
-                       svsp->vtsgr |= VT_INVERSE;
-                       if (pcdisp) {
+                       if (pcdisp && !(svsp->vtsgr & VT_INVERSE)) {
                               if ((setcolor >> 8) == 0)
                                       setcolor = (FG_LIGHTGREY << 8);
                               setcolor = (((setcolor >> 8) & 0x88) |
@@ -191,6 +190,7 @@
                                   ((setcolor >> 8) << 4)) & 0x77)) << 8;
                               colortouched = 1;
                       }
+                       svsp->vtsgr |= VT_INVERSE;
                       break;

               case 22:        /* not bold */
@@ -218,13 +218,13 @@
                       break;

               case 27:        /* not reverse */
-                       svsp->vtsgr &= ~VT_INVERSE;
-                       if (pcdisp) {
+                       if (pcdisp && (svsp->vtsgr & VT_INVERSE)) {
                               setcolor = (((setcolor >> 8) & 0x88) |
                                   ((((setcolor >> 8) >> 4) |
                                   ((setcolor >> 8) << 4)) & 0x77)) << 8;
                               colortouched = 1;
                       }
+                       svsp->vtsgr &= ~VT_INVERSE;
                       break;

               case 30:        /* foreground colors */