Apply by doing: cd /usr/src/sys patch -p0 < 014_y2k.patch --- arch/i386/isa/clock.c.orig Thu Mar 25 00:03:36 1999 +++ arch/i386/isa/clock.c Thu Dec 23 11:07:46 1999 @@ -449,7 +449,7 @@ { mc_todregs rtclk; time_t n; - int sec, min, hr, dom, mon, yr; + int sec, min, hr, dom, mon, yr, cent; int i, days = 0; int s; @@ -481,7 +481,18 @@ dom = hexdectodec(rtclk[MC_DOM]); mon = hexdectodec(rtclk[MC_MONTH]); yr = hexdectodec(rtclk[MC_YEAR]); - yr = (yr < 70) ? yr+100 : yr; + switch ( cent = hexdectodec(mc146818_read(NULL, NVRAM_CENTURY)) ) { + case 19: + /* FALLTHROUGH */ + case 20: + yr += cent * 100; + break; + + default: + (void)printf("WARNING: Your NVRAM doesn't seem to hold " + "century\n"); + yr += ((yr < 70) ? 2000 : 1900); + } n = sec + 60 * min + 3600 * hr; n += (dom - 1) * 3600 * 24; @@ -491,7 +502,7 @@ for (i = mon - 2; i >= 0; i--) days += month[i]; month[1] = 28; - for (i = 70; i < yr; i++) + for (i = 1970; i < yr; i++) days += yeartoday(i); n += days * 3600 * 24; @@ -557,7 +568,10 @@ for (j = 1970, i = yeartoday(j); n >= i; j++, i = yeartoday(j)) n -= i; - rtclk[MC_YEAR] = dectohexdec(j - 1900); + rtclk[MC_YEAR] = dectohexdec((j - 1900) % 100); + + /* update century byte */ + mc146818_write(NULL, NVRAM_CENTURY, dectohexdec(j / 100)); if (i == 366) month[1] = 29;