[PATCHSET 4/17] support PC-9800 against 2.5.45-ac1 (console)

Osamu Tomita (tomita@cinet.co.jp)
Thu, 07 Nov 2002 02:59:40 +0900


This is a multi-part message in MIME format.
--------------A89C99B935D7102E523E5D1B
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

This patch adds VT console support for PC-9800.
Including Japanese "Kanji" and "kana" letters support.

-- 
Osamu Tomita
--------------A89C99B935D7102E523E5D1B
Content-Type: text/plain; charset=iso-2022-jp;
 name="console.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="console.patch"

diff -urN linux/drivers/char/Makefile linux98/drivers/char/Makefile --- linux/drivers/char/Makefile Thu Oct 31 13:23:11 2002 +++ linux98/drivers/char/Makefile Thu Oct 31 15:14:04 2002 @@ -5,7 +5,11 @@ # # This file contains the font map for the default (hardware) font # +ifneq ($(CONFIG_PC9800),y) FONTMAPFILE = cp437.uni +else +FONTMAPFILE = pc9800.uni +endif obj-y += mem.o tty_io.o n_tty.o tty_ioctl.o pty.o misc.o random.o eventpoll.o @@ -14,7 +18,8 @@ export-objs := busmouse.o vt.o generic_serial.o ip2main.o \ ite_gpio.o keyboard.o misc.o nvram.o random.o rtc.o \ - selection.o sonypi.o sysrq.o tty_io.o tty_ioctl.o eventpoll.o + selection.o sonypi.o sysrq.o tty_io.o tty_ioctl.o \ + eventpoll.o upd4990a.o obj-$(CONFIG_VT) += vt_ioctl.o vc_screen.o consolemap.o consolemap_deftbl.o selection.o keyboard.o obj-$(CONFIG_HW_CONSOLE) += vt.o defkeymap.o @@ -51,6 +56,7 @@ obj-$(CONFIG_PRINTER) += lp.o obj-$(CONFIG_TIPAR) += tipar.o +obj-$(CONFIG_PC9800_OLDLP)) += lp_old98.o obj-$(CONFIG_BUSMOUSE) += busmouse.o obj-$(CONFIG_DTLK) += dtlk.o @@ -59,6 +65,7 @@ obj-$(CONFIG_SONYPI) += sonypi.o obj-$(CONFIG_ATARIMOUSE) += atarimouse.o obj-$(CONFIG_RTC) += rtc.o +obj-$(CONFIG_RTC98) += upd4990a.o obj-$(CONFIG_GEN_RTC) += genrtc.o obj-$(CONFIG_EFI_RTC) += efirtc.o ifeq ($(CONFIG_PPC),) diff -urN linux/drivers/char/console_macros.h linux98/drivers/char/console_macros.h --- linux/drivers/char/console_macros.h Sat Oct 19 13:01:17 2002 +++ linux98/drivers/char/console_macros.h Mon Oct 28 16:53:39 2002 @@ -55,6 +55,10 @@ #define s_reverse (vc_cons[currcons].d->vc_s_reverse) #define ulcolor (vc_cons[currcons].d->vc_ulcolor) #define halfcolor (vc_cons[currcons].d->vc_halfcolor) +#define def_attr (vc_cons[currcons].d->vc_def_attr) +#define ul_attr (vc_cons[currcons].d->vc_ul_attr) +#define half_attr (vc_cons[currcons].d->vc_half_attr) +#define bold_attr (vc_cons[currcons].d->vc_bold_attr) #define tab_stop (vc_cons[currcons].d->vc_tab_stop) #define palette (vc_cons[currcons].d->vc_palette) #define bell_pitch (vc_cons[currcons].d->vc_bell_pitch) @@ -64,6 +68,16 @@ #define complement_mask (vc_cons[currcons].d->vc_complement_mask) #define s_complement_mask (vc_cons[currcons].d->vc_s_complement_mask) #define hi_font_mask (vc_cons[currcons].d->vc_hi_font_mask) +#define kanji_mode (vc_cons[currcons].d->vc_kanji_mode) +#define s_kanji_mode (vc_cons[currcons].d->vc_s_kanji_mode) +#define kanji_char1 (vc_cons[currcons].d->vc_kanji_char1) +#define translate_ex (vc_cons[currcons].d->vc_translate_ex) +#define G0_charset_ex (vc_cons[currcons].d->vc_G0_charset_ex) +#define G1_charset_ex (vc_cons[currcons].d->vc_G1_charset_ex) +#define saved_G0_ex (vc_cons[currcons].d->vc_saved_G0_ex) +#define saved_G1_ex (vc_cons[currcons].d->vc_saved_G1_ex) +#define kanji_jis_mode (vc_cons[currcons].d->vc_kanji_jis_mode) +#define s_kanji_jis_mode (vc_cons[currcons].d->vc_s_kanji_jis_mode) #define vcmode (vt_cons[currcons]->vc_mode) diff -urN linux/drivers/char/console_pc9800.h linux98/drivers/char/console_pc9800.h --- linux/drivers/char/console_pc9800.h Thu Jan 1 09:00:00 1970 +++ linux98/drivers/char/console_pc9800.h Mon Oct 28 11:48:10 2002 @@ -0,0 +1,14 @@ +#ifndef __CONSOLE_PC9800_H +#define __CONSOLE_PC9800_H + +#define BLANK_ATTR 0x00E1 + +#define JIS_CODE 0x01 +#define EUC_CODE 0x00 +#define SJIS_CODE 0x02 +#define JIS_CODE_ASCII 0x00 +#define JIS_CODE_78 0x01 +#define JIS_CODE_83 0x02 +#define JIS_CODE_90 0x03 + +#endif /* __CONSOLE_PC9800_H */ diff -urN linux/drivers/char/consolemap.c linux98/drivers/char/consolemap.c --- linux/drivers/char/consolemap.c Sat Oct 19 13:02:27 2002 +++ linux98/drivers/char/consolemap.c Mon Oct 21 13:18:03 2002 @@ -22,7 +22,7 @@ #include <linux/console_struct.h> #include <linux/vt_kern.h> -static unsigned short translations[][256] = { +unsigned short translations[][256] = { /* 8-bit Latin-1 mapped to Unicode -- trivial mapping */ { 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, @@ -162,7 +162,59 @@ 0xf0e8, 0xf0e9, 0xf0ea, 0xf0eb, 0xf0ec, 0xf0ed, 0xf0ee, 0xf0ef, 0xf0f0, 0xf0f1, 0xf0f2, 0xf0f3, 0xf0f4, 0xf0f5, 0xf0f6, 0xf0f7, 0xf0f8, 0xf0f9, 0xf0fa, 0xf0fb, 0xf0fc, 0xf0fd, 0xf0fe, 0xf0ff - } + }, + /* JIS X0201 mapped to Unicode */ + /* code marked with ** is not defined in JIS X0201. + So 0x00 - 0x1f are mapped to same to Laten1, + and others are mapped to PC-9800 internal font# directry */ + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, +/* ** ** ** ** ** ** ** ** */ + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, +/* ** ** ** ** ** ** ** ** */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, +/* ** ** ** ** ** ** ** ** */ + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, +/* ** ** ** ** ** ** ** ** */ + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x00a5, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x203e, 0xf07f, +/* ** */ + 0xf080, 0xf081, 0xf082, 0xf083, 0xf084, 0xf085, 0xf086, 0xf087, +/* ** ** ** ** ** ** ** ** */ + 0xf088, 0xf089, 0xf08a, 0xf08b, 0xf08c, 0xf08d, 0xf08e, 0xf08f, +/* ** ** ** ** ** ** ** ** */ + 0xf090, 0xf091, 0xf092, 0xf093, 0xf094, 0xf095, 0xf096, 0xf097, +/* ** ** ** ** ** ** ** ** */ + 0xf098, 0xf099, 0xf09a, 0xf09b, 0xf09c, 0xf09d, 0xf09e, 0xf09f, +/* ** ** ** ** ** ** ** ** */ + 0xf0a0, 0xff61, 0xff62, 0xff63, 0xff64, 0xff65, 0xff66, 0xff67, +/* ** */ + 0xff68, 0xff69, 0xff6a, 0xff6b, 0xff6c, 0xff6d, 0xff6e, 0xff6f, + 0xff70, 0xff71, 0xff72, 0xff73, 0xff74, 0xff75, 0xff76, 0xff77, + 0xff78, 0xff79, 0xff7a, 0xff7b, 0xff7c, 0xff7d, 0xff7e, 0xff7f, + 0xff80, 0xff81, 0xff82, 0xff83, 0xff84, 0xff85, 0xff86, 0xff87, + 0xff88, 0xff89, 0xff8a, 0xff8b, 0xff8c, 0xff8d, 0xff8e, 0xff8f, + 0xff90, 0xff91, 0xff92, 0xff93, 0xff94, 0xff95, 0xff96, 0xff97, + 0xff98, 0xff99, 0xff9a, 0xff9b, 0xff9c, 0xff9d, 0xff9e, 0xff9f, + 0xf0e0, 0xf0e1, 0xf0e2, 0xf0e3, 0xf0e4, 0xf0e5, 0xf0e6, 0xf0e7, +/* ** ** ** ** ** ** ** ** */ + 0xf0e8, 0xf0e9, 0xf0ea, 0xf0eb, 0xf0ec, 0xf0ed, 0xf0ee, 0xf0ef, +/* ** ** ** ** ** ** ** ** */ + 0xf0f0, 0xf0f1, 0xf0f2, 0xf0f3, 0xf0f4, 0xf0f5, 0xf0f6, 0xf0f7, +/* ** ** ** ** ** ** ** ** */ + 0xf0f8, 0xf0f9, 0xf0fa, 0xf0fb, 0xf0fc, 0xf0fd, 0xf0fe, 0xf0ff +/* ** ** ** ** ** ** ** ** */ + }, }; /* The standard kernel character-to-font mappings are not invertible @@ -176,7 +228,7 @@ u16 **uni_pgdir[32]; unsigned long refcount; unsigned long sum; - unsigned char *inverse_translations[4]; + unsigned char *inverse_translations[5]; int readonly; }; diff -urN linux/drivers/char/pc9800.uni linux98/drivers/char/pc9800.uni --- linux/drivers/char/pc9800.uni Thu Jan 1 09:00:00 1970 +++ linux98/drivers/char/pc9800.uni Fri Aug 17 21:50:17 2001 @@ -0,0 +1,260 @@ +# +# Unicode table for PC-9800 console. +# Copyright (C) 1998,2001 Linux/98 project (project Seraphim) +# Kyoto University Microcomputer Club (KMC). +# + +# Kore ha unicode wo 98 no ROM no font ni taio saseru tame no +# map desu. + +# Characters for control codes. +# PC-9800 uses 2-char sequences while Unicode uses 3-char for some codes. +0x00 +0x01 U+2401 # SH / SOH +0x02 U+2402 # SX / SOX +0x03 U+2403 # EX / ETX +0x04 U+2404 # ET / EOT +0x05 U+2405 # EQ / ENQ +0x06 U+2406 # AK / ACK +0x07 U+2407 # BL / BEL +0x08 U+2408 # BS +0x09 U+2409 # HT +0x0a U+240a # LF +0x0b # HM / (VT) +0x0c # CL / (FF) +0x0d U+240d # CR +0x0e # SO / (SS) +0x0f U+240f # SI +0x10 U+2410 # DE / DLE +0x11 U+2411 # D1 / DC1 +0x12 U+2412 # D2 / DC2 +0x13 U+2413 # D3 / DC3 +0x14 U+2414 # D4 / DC4 +0x15 U+2415 # NK / NAK +0x16 U+2416 # SN / SYN +0x17 U+2417 # EB / ETB +0x18 U+2418 # CN / CAN +0x19 U+2419 # EM +0x1a U+241a # SB / SUB +0x1b U+241b # EC / ESC + +# arrow +0x1c U+2192 U+ffeb # right +0x1d U+2190 U+ffe9 # left +0x1e U+2191 U+ffea # up +0x1f U+2193 U+ffec # down + +# +# The ASCII range is identity-mapped, but some of the characters also +# have to act as substitutes, especially the upper-case characters. +# +0x20 U+0020 +0x21 U+0021 +# U+00a8 is Latin-1 Supplement DIAELESIS. +0x22 U+0022 U+00a8 +0x23 U+0023 +0x24 U+0024 +0x25 U+0025 +0x26 U+0026 +0x26 U+2019 # General Punctuation "RIGHT SINGLE QUOTATION MARK" +0x27 U+0027 U+2032 +0x28 U+0028 +0x29 U+0029 +0x2a U+002a +0x2b U+002b +# U+00b8 is Latin-1 Supplement CEDILLA. +0x2c U+002c U+00b8 +# U+00b8 is Latin-1 Supplement SOFT HYPHEN. +0x2d U+002d U+00ad +0x2d U+2212 # Mathematical Operators "MINUS SIGN" +0x2e U+002e +0x2f U+002f +0x2f U+2044 # General Punctuation "FRACTION SLASH" +0x2f U+2215 # Mathematical Operators "DIVISION SLASH" +0x30 U+0030 +0x31 U+0031 +0x32 U+0032 +0x33 U+0033 +0x34 U+0034 +0x35 U+0035 +0x36 U+0036 +0x37 U+0037 +0x38 U+0038 +0x39 U+0039 +0x3a U+003a +0x3a U+003a # Mathematical Operators "RATIO" +0x3b U+003b +0x3c U+003c +0x3d U+003d +0x3e U+003e +0x3f U+003f +0x40 U+0040 +0x41 U+0041 U+00c0 U+00c1 U+00c2 U+00c3 +0x42 U+0042 +# U+00a9 is Latin-1 Supplement COPYRIGHT SIGN. +0x43 U+0043 U+00a9 +0x44 U+0044 +0x45 U+0045 U+00c8 U+00ca U+00cb +0x46 U+0046 +0x47 U+0047 +0x48 U+0048 +0x49 U+0049 U+00cc U+00cd U+00ce U+00cf +0x4a U+004a +# U+212a: Letterlike Symbols "KELVIN SIGN" +0x4b U+004b U+212a +0x4c U+004c +0x4d U+004d +0x4e U+004e +0x4f U+004f U+00d2 U+00d3 U+00d4 U+00d5 +0x50 U+0050 +0x51 U+0051 +# U+00ae: Latin-1 Supplement "REGISTERED SIGN" +0x52 U+0052 U+00ae +0x53 U+0053 +0x54 U+0054 +0x55 U+0055 U+00d9 U+00da U+00db +0x56 U+0056 +0x57 U+0057 +0x58 U+0058 +0x59 U+0059 U+00dd +0x5a U+005a +0x5b U+005b +0x5c U+00a5 # Latin-1 Supplement "YEN SIGN" +0x5d U+005d +0x5e U+005e +0x5f U+005f U+f804 +0x60 U+0060 U+2035 +0x61 U+0061 U+00e3 +0x62 U+0062 +0x63 U+0063 +0x64 U+0064 +0x65 U+0065 +0x66 U+0066 +0x67 U+0067 +0x68 U+0068 +0x69 U+0069 +0x6a U+006a +0x6b U+006b +0x6c U+006c +0x6d U+006d +0x6e U+006e +0x6f U+006f U+00f5 +0x70 U+0070 +0x71 U+0071 +0x72 U+0072 +0x73 U+0073 +0x74 U+0074 +0x75 U+0075 +0x76 U+0076 +0x77 U+0077 +0x78 U+0078 U+00d7 +0x79 U+0079 U+00fd +0x7a U+007a +0x7b U+007b +# U+00a6: Latin-1 Supplement "BROKEN (VERTICAL) BAR" +0x7c U+007c U+00a6 +0x7d U+007d +0x7e U+007e + +# kuhaku +0x7f # U+2302 + +# Block Elements. +0x80 U+2581 # LOWER ONE EIGHTH BLOCK +0x81 U+2582 # LOWER ONE QUARTER BLOCK +0x82 U+2583 # LOWER THREE EIGHTHS BLOCK +0x83 U+2584 # LOWER HALF BLOCK +0x84 U+2585 # LOWER FIVE EIGHTHS BLOCK +0x85 U+2586 # LOWER THREE QUARTERS BLOCK +0x86 U+2587 # LOWER SEVEN EIGHTHS BLOCK +0x87 U+2588 # FULL BLOCK +0x88 U+258f # LEFT ONE EIGHTH BLOCK +0x89 U+258e # LEFT ONE QUARTER BLOCK +0x8a U+258d # LEFT THREE EIGHTHS BLOCK +0x8b U+258c # LEFT HALF BLOCK +0x8c U+258b # LEFT FIVE EIGHTHS BLOCK +0x8d U+258a # LEFT THREE QUARTERS BLOCK +0x8e U+2589 # LEFT SEVEN EIGHTHS BLOCK + +# Box Drawing. +0x8f U+253c +0x90 U+2534 +0x91 U+252c +0x92 U+2524 +0x93 U+251c +0x94 U+203e # General Punctuation "OVERLINE" (= "SPACING OVERSCORE") +0x95 U+2500 # Box Drawing "BOX DRAWING LIGHT HORIZONTAL" +0x96 U+2502 # Box Drawing "BOX DRAWING LIGHT VERTICAL" +0x96 U+ffe8 # Halfwidth symbol variants "HALFWIDTH FORMS LIGHT VERTICAL" +0x97 U+2595 # Block Elements "RIGHT ONE EIGHTH BLOCK" +0x98 U+250c +0x99 U+2510 +0x9a U+2514 +0x9b U+2518 + +0x9c U+256d # "BOX DRAWING LIGHT ARC DOWN AND RIGHT" +0x9d U+256e # "BOX DRAWING LIGHT ARC DOWN AND LEFT" +0x9e U+2570 # "BOX DRAWING LIGHT ARC UP AND RIGHT" +0x9f U+256f # "BOX DRAWING LIGHT ARC UP AND LEFT" + +0xa0 # another whitespace + +# Halfwidth CJK punctuation +0xa1 - 0xa4 U+ff61 - U+ff64 + +# Halfwidth Katakana variants +0xa5 - 0xdf U+ff65 - U+ff9f +0xa5 U+00b7 # Latin-1 Supplement "MIDDLE DOT" +0xdf U+00b0 # Latin-1 Supplement "DEGREE SIGN" + +# Box Drawing +0xe0 U+2550 # "BOX DRAWING DOUBLE HORIZONTAL" +0xe1 U+255e # "BOX DRAWING VERTICAL SINGLE AND RIGHT DOUBLE" +0xe2 U+256a # "BOX DRAWING VERTICAL SINGLE AND HORIZONTAL DOUBLE" +0xe3 U+2561 # "BOX DRAWING VERTICAL SINGLE AND LEFT DOUBLE" + +# Geometric Shapes +0xe4 U+25e2 # "BLACK LOWER RIGHT TRIANGLE" +0xe5 U+25e3 # "BLACK LOWER LEFT TRIANGLE" +0xe6 U+25e5 # "BLACK UPPER RIGHT TRIANGLE" +0xe7 U+25e4 # "BLACK UPPER LEFT TRIANGLE" + +# Playing card symbols +0xe8 U+2660 # "BLACK SPADE SUIT" +0xe9 U+2665 # "BLACK HEART SUIT" +0xea U+2666 # "BLACK DIAMOND SUIT" +0xeb U+2663 # "BLACK CLUB SUIT" + +# Geometric Shapes +0xec U+25cf # "BLACK CIRCLE" +0xed U+25cb U+25ef # "WHITE CIRCLE", "LARGE CIRCLE" + +# Box Drawing +0xee U+2571 # "BOX DRAWING LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT" +0xef U+2572 # "BOX DRAWING LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT" +0xf0 U+2573 # "BOX DRAWING LIGHT DIAGONAL CROSS" + +# CJK Unified Ideographs (XXX - should these be here?) +0xf1 U+5186 +0xf2 U+5e74 +0xf3 U+6708 +0xf4 U+65e5 +0xf5 U+6642 +0xf6 U+5206 +0xf7 U+79d2 + +# unassigned +0xf8 +0xf9 +0xfa +0xfb + +0xfc U+005c # "REVERSE SOLIDUS" / "BACKSLASH" +0xfc U+2216 # Mathematical Operators "SET MINUS" + +# unassigned +0xfd +0xfe +0xff + +# End of pc9800.uni diff -urN linux/drivers/char/vt.c linux98/drivers/char/vt.c --- linux/drivers/char/vt.c Thu Oct 31 09:43:39 2002 +++ linux98/drivers/char/vt.c Wed Nov 6 00:11:58 2002 @@ -108,6 +108,11 @@ #include "console_macros.h" +#ifdef CONFIG_PC9800 +#include "console_pc9800.h" +extern unsigned short translations[][256]; +#define CONFIG_KANJI +#endif const struct consw *conswitchp; @@ -143,6 +148,10 @@ static void blank_screen(unsigned long dummy); static void gotoxy(int currcons, int new_x, int new_y); static void save_cur(int currcons); +#ifdef CONFIG_KANJI +static void save_cur_kanji(int currcons); +static void restore_cur_kanji(int currcons); +#endif static void reset_terminal(int currcons, int do_clear); static void con_flush_chars(struct tty_struct *tty); static void set_vesa_blanking(unsigned long arg); @@ -203,6 +212,11 @@ static struct timer_list console_timer; /* + * Whether PC-9800 or not + */ +extern int pc98; + +/* * Low-Level Functions */ @@ -293,7 +307,7 @@ xx = nxx; yy = nyy; } for(;;) { - u16 attrib = scr_readw(p) & 0xff00; + vram_char_t attrib = scr_readw(p) & 0xff00; int startx = xx; u16 *q = p; while (xx < video_num_columns && count) { @@ -379,6 +393,8 @@ { attr = build_attr(currcons, color, intensity, blink, underline, reverse ^ decscnm); video_erase_char = (build_attr(currcons, color, 1, blink, 0, decscnm) << 8) | ' '; + if (pc98 && decscnm) + video_erase_char |= 0x0400; /* reverse */ } /* Note: inverting the screen twice should revert to the original state */ @@ -395,7 +411,7 @@ else { u16 *q = p; int cnt = count; - u16 a; + vram_char_t a; if (!can_do_color) { while (cnt--) { @@ -425,11 +441,30 @@ do_update_region(currcons, (unsigned long) p, count); } +#ifdef CONFIG_KANJI +/* can called form keyboard.c */ +void do_change_kanji_mode(int currcons, unsigned long mode) +{ + switch (mode) { + case 0: + kanji_mode = EUC_CODE; + break; + case 1: + kanji_mode = JIS_CODE; + break; + case 2: + kanji_mode = SJIS_CODE; + break; + } + kanji_char1 = 0; +} +#endif /* CONFIG_KANJI */ + /* used by selection: complement pointer position */ void complement_pos(int currcons, int offset) { static unsigned short *p; - static unsigned short old; + static vram_char_t old; static unsigned short oldx, oldy; if (p) { @@ -440,10 +475,15 @@ if (offset == -1) p = NULL; else { - unsigned short new; + vram_char_t new; p = screenpos(currcons, offset, 1); old = scr_readw(p); +#ifndef CONFIG_FB_EGC new = old ^ complement_mask; +#else + new = (old & 0xff0000ff) | ((old & 0xf000) >> 4) + | ((old & 0xf00) << 4); +#endif scr_writew(new, p); if (DO_UPDATE) { oldx = (offset >> 1) % video_num_columns; @@ -502,7 +542,7 @@ static void add_softcursor(int currcons) { - int i = scr_readw((u16 *) pos); + vram_char_t i = scr_readw((u16 *) pos); u32 type = cursor_type; if (! (type & 0x10)) return; @@ -639,7 +679,10 @@ can_do_color = 0; sw->con_init(vc_cons[currcons].d, init); if (!complement_mask) - complement_mask = can_do_color ? 0x7700 : 0x0800; + if (pc98) + complement_mask = 0x0400; + else + complement_mask = can_do_color ? 0x7700 : 0x0800; s_complement_mask = complement_mask; video_size_row = video_num_columns<<1; screenbuf_size = video_num_lines*video_size_row; @@ -671,7 +714,7 @@ visual_init(currcons, 1); if (!*vc_cons[currcons].d->vc_uni_pagedir_loc) con_set_default_unimap(currcons); - q = (long)kmalloc(screenbuf_size, GFP_KERNEL); + q = (long)kmalloc(screenbuf_size + (pc98 ? screenbuf_size : 0), GFP_KERNEL); if (!q) { kfree((char *) p); vc_cons[currcons].d = NULL; @@ -713,7 +756,7 @@ (cc == video_num_columns && ll == video_num_lines)) newscreens[currcons] = NULL; else { - unsigned short *p = (unsigned short *) kmalloc(ss, GFP_USER); + unsigned short *p = (unsigned short *)kmalloc(ss + (pc98 ? ss : 0), GFP_USER); if (!p) { for (i = first; i < currcons; i++) if (newscreens[i]) @@ -1077,6 +1120,9 @@ translate = set_translate(charset == 0 ? G0_charset : G1_charset,currcons); +#ifdef CONFIG_KANJI + translate_ex = (charset == 0 ? G0_charset_ex : G1_charset_ex); +#endif disp_ctrl = 0; toggle_meta = 0; break; @@ -1085,6 +1131,9 @@ * chars < 32 be displayed as ROM chars. */ translate = set_translate(IBMPC_MAP,currcons); +#ifdef CONFIG_KANJI + translate_ex = 0; +#endif disp_ctrl = 1; toggle_meta = 0; break; @@ -1093,6 +1142,9 @@ * high bit before displaying as ROM char. */ translate = set_translate(IBMPC_MAP,currcons); +#ifdef CONFIG_KANJI + translate_ex = 0; +#endif disp_ctrl = 1; toggle_meta = 1; break; @@ -1253,6 +1305,10 @@ /* console_sem is held */ static void setterm_command(int currcons) { + if (sw->con_setterm_command + && sw->con_setterm_command(vc_cons[currcons].d)) + return; + switch(par[0]) { case 1: /* set color for underline mode */ if (can_do_color && par[1] < 16) { @@ -1302,6 +1358,22 @@ case 14: /* set vesa powerdown interval */ vesa_off_interval = ((par[1] < 60) ? par[1] : 60) * 60 * HZ; break; +#ifdef CONFIG_KANJI + case 98: + if (par[1] < 10) /* change kanji mode */ + do_change_kanji_mode(currcons, par[1]); /* 0208 */ + else if (par[1] == 10) { /* save restore kanji mode */ + switch (par[2]) { + case 1: + save_cur_kanji(currcons); + break; + case 2: + restore_cur_kanji(currcons); + break; + } + } + break; +#endif /* CONFIG_KANJI */ } } @@ -1379,8 +1451,26 @@ need_wrap = 0; } +#ifdef CONFIG_KANJI +static void save_cur_kanji(int currcons) +{ + s_kanji_mode = kanji_mode; + s_kanji_jis_mode = kanji_jis_mode; +} + +static void restore_cur_kanji(int currcons) +{ + kanji_mode = s_kanji_mode; + kanji_jis_mode = s_kanji_jis_mode; + kanji_char1 = 0; +} +#endif + enum { ESnormal, ESesc, ESsquare, ESgetpars, ESgotpars, ESfunckey, EShash, ESsetG0, ESsetG1, ESpercent, ESignore, ESnonstd, +#ifdef CONFIG_KANJI + ESsetJIS, ESsetJIS2, +#endif ESpalette }; /* console_sem is held (except via vc_init()) */ @@ -1390,9 +1480,18 @@ bottom = video_num_lines; vc_state = ESnormal; ques = 0; +#ifndef CONFIG_KANJI translate = set_translate(LAT1_MAP,currcons); G0_charset = LAT1_MAP; G1_charset = GRAF_MAP; +#else + translate = set_translate(JP_MAP, currcons); + translate_ex = 0; + G0_charset = JP_MAP; + G0_charset_ex = 0; + G1_charset = GRAF_MAP; + G1_charset_ex = 0; +#endif charset = 0; need_wrap = 0; report_mouse = 0; @@ -1434,6 +1533,12 @@ bell_pitch = DEFAULT_BELL_PITCH; bell_duration = DEFAULT_BELL_DURATION; +#ifdef CONFIG_KANJI + kanji_mode = EUC_CODE; + kanji_char1 = 0; + kanji_jis_mode = JIS_CODE_ASCII; +#endif + gotoxy(currcons,0,0); save_cur(currcons); if (do_clear) @@ -1476,11 +1581,17 @@ case 14: charset = 1; translate = set_translate(G1_charset,currcons); +#ifdef CONFIG_KANJI + translate_ex = G1_charset_ex; +#endif disp_ctrl = 1; return; case 15: charset = 0; translate = set_translate(G0_charset,currcons); +#ifdef CONFIG_KANJI + translate_ex = G0_charset_ex; +#endif disp_ctrl = 0; return; case 24: case 26: @@ -1537,6 +1648,11 @@ case ')': vc_state = ESsetG1; return; +#ifdef CONFIG_KANJI + case '$': + vc_state = ESsetJIS; + return; +#endif case '#': vc_state = EShash; return; @@ -1786,8 +1902,25 @@ G0_charset = IBMPC_MAP; else if (c == 'K') G0_charset = USER_MAP; - if (charset == 0) +#ifdef CONFIG_KANJI + G0_charset_ex = 0; + if (c == 'J') + G0_charset = JP_MAP; + else if (c == 'I'){ + G0_charset = JP_MAP; + G0_charset_ex = 1; + } +#endif /* CONFIG_KANJI */ + if (charset == 0) { translate = set_translate(G0_charset,currcons); +#ifdef CONFIG_KANJI + translate_ex = G0_charset_ex; +#endif + } +#ifdef CONFIG_KANJI + kanji_jis_mode = JIS_CODE_ASCII; + kanji_char1 = 0; +#endif vc_state = ESnormal; return; case ESsetG1: @@ -1799,10 +1932,51 @@ G1_charset = IBMPC_MAP; else if (c == 'K') G1_charset = USER_MAP; - if (charset == 1) +#ifdef CONFIG_KANJI + G1_charset_ex = 0; + if (c == 'J') + G1_charset = JP_MAP; + else if (c == 'I') { + G1_charset = JP_MAP; + G1_charset_ex = 1; + } +#endif /* CONFIG_KANJI */ + if (charset == 1) { translate = set_translate(G1_charset,currcons); +#ifdef CONFIG_KANJI + translate_ex = G1_charset_ex; +#endif + } +#ifdef CONFIG_KANJI + kanji_jis_mode = JIS_CODE_ASCII; + kanji_char1 = 0; +#endif + vc_state = ESnormal; + return; +#ifdef CONFIG_KANJI + case ESsetJIS: + if (c == '@') + kanji_jis_mode = JIS_CODE_78; + else if (c == 'B') + kanji_jis_mode = JIS_CODE_83; + else if (c == '('){ + vc_state = ESsetJIS2; + return; + } else { + vc_state = ESnormal; + return; + } + vc_state = ESnormal; + kanji_char1 = 0; + return; + case ESsetJIS2: + if (c == 'D'){ + kanji_jis_mode = JIS_CODE_90; + kanji_char1 = 0; + } vc_state = ESnormal; return; +#endif /* CONIFG_KANJI */ default: vc_state = ESnormal; } @@ -1834,7 +2008,7 @@ } #endif - int c, tc, ok, n = 0, draw_x = -1; + int c, tc = 0, ok, n = 0, draw_x = -1; unsigned int currcons; unsigned long draw_from = 0, draw_to = 0; struct vt_struct *vt = (struct vt_struct *)tty->driver_data; @@ -1891,48 +2065,151 @@ hide_cursor(currcons); while (!tty->stopped && count) { + int realkanji = 0; + int kanjioverrun = 0; c = *buf; buf++; n++; count--; - if (utf) { - /* Combine UTF-8 into Unicode */ - /* Incomplete characters silently ignored */ - if(c > 0x7f) { - if (utf_count > 0 && (c & 0xc0) == 0x80) { - utf_char = (utf_char << 6) | (c & 0x3f); - utf_count--; - if (utf_count == 0) - tc = c = utf_char; - else continue; - } else { - if ((c & 0xe0) == 0xc0) { - utf_count = 1; - utf_char = (c & 0x1f); - } else if ((c & 0xf0) == 0xe0) { - utf_count = 2; - utf_char = (c & 0x0f); - } else if ((c & 0xf8) == 0xf0) { - utf_count = 3; - utf_char = (c & 0x07); - } else if ((c & 0xfc) == 0xf8) { - utf_count = 4; - utf_char = (c & 0x03); - } else if ((c & 0xfe) == 0xfc) { - utf_count = 5; - utf_char = (c & 0x01); - } else - utf_count = 0; - continue; - } - } else { - tc = c; - utf_count = 0; - } - } else { /* no utf */ - tc = translate[toggle_meta ? (c|0x80) : c]; - } +#ifdef CONFIG_KANJI + if (vc_state == ESnormal && !disp_ctrl) { + switch (kanji_jis_mode) { + case JIS_CODE_78: + case JIS_CODE_83: + case JIS_CODE_90: + if (utf) + break; + if (c >= 127 || c <= 0x20) { + kanji_char1 = 0; + break; + } + if (kanji_char1) { + tc = (((unsigned int)kanji_char1) << 8) | + (((unsigned int)c) & 0x007f); + kanji_char1 = 0; + realkanji = 1; + } else { + kanji_char1 = ((unsigned int)c) & 0x007f; + continue; + } + break; + case JIS_CODE_ASCII: + default: + switch (kanji_mode) { + case SJIS_CODE: + if (kanji_char1) { + if ((0x40 <= c && c <= 0x7E) || + (0x80 <= c && c <= 0xFC)) { + realkanji = 1; + /* SJIS to JIS */ + kanji_char1 <<= 1; /* 81H-9FH --> 22H-3EH */ + /* EOH-EFH --> C0H-DEH */ + c -= 0x1f; /* 40H-7EH --> 21H-5FH */ + /* 80H-9EH --> 61H-7FH */ + /* 9FH-FCH --> 80H-DDH */ + if (!(c & 0x80)) { + if (c < 0x61) + c++; + c += 0xde; + } + c &= 0xff; + c += 0xa1; + kanji_char1 += 0x1f; + tc = (kanji_char1 << 8) + c; + tc &= 0x7f7f; + kanji_char1 = 0; + } + } else { + if ((0x81 <= c && c <= 0x9f) || + (0xE0 <= c && c <= 0xEF)) { + realkanji = 1; + kanji_char1 = c; + continue; + } else if (0xA1 <= c && c <= 0xDF) { + tc = (unsigned int)translations[JP_MAP][c]; + goto hankana_skip; + } + } + break; + case EUC_CODE: + if (utf) + break; + if (c <= 0x7f) { + kanji_char1 = 0; + break; + } + if (kanji_char1) { + if (kanji_char1 == 0x8e) { /* SS2 */ + /* realkanji ha tatenai */ + tc = (unsigned int)translations[JP_MAP][c]; + kanji_char1 = 0; + goto hankana_skip; + } else { + tc = (((unsigned int)kanji_char1) << 8) | + (((unsigned int)c) & 0x007f); + kanji_char1 = 0; + realkanji = 1; + } + } else { + kanji_char1 = (unsigned int)c; + continue; + } + break; + case JIS_CODE: + /* to be supported */ + break; + } /* switch (kanji_mode) */ + } /* switch (kanji_jis_mode) */ + } /* if (vc_state == ESnormal) */ + +#endif /* CONFIG_KANJI */ + if (!realkanji) { + if (utf) { + /* Combine UTF-8 into Unicode */ + /* Incomplete characters silently ignored */ + if(c > 0x7f) { + if (utf_count > 0 && (c & 0xc0) == 0x80) { + utf_char = (utf_char << 6) | (c & 0x3f); + utf_count--; + if (utf_count == 0) + tc = c = utf_char; + else continue; + } else { + if ((c & 0xe0) == 0xc0) { + utf_count = 1; + utf_char = (c & 0x1f); + } else if ((c & 0xf0) == 0xe0) { + utf_count = 2; + utf_char = (c & 0x0f); + } else if ((c & 0xf8) == 0xf0) { + utf_count = 3; + utf_char = (c & 0x07); + } else if ((c & 0xfc) == 0xf8) { + utf_count = 4; + utf_char = (c & 0x03); + } else if ((c & 0xfe) == 0xfc) { + utf_count = 5; + utf_char = (c & 0x01); + } else + utf_count = 0; + continue; + } + } else { + tc = c; + utf_count = 0; + } + } else { /* no utf */ +#ifndef CONFIG_KANJI + tc = translate[toggle_meta ? (c|0x80) : c]; +#else + tc = translate[(toggle_meta || translate_ex) ? (c | 0x80) : c]; +#endif + } + } /* if (!realkanji) */ +#ifdef CONFIG_KANJI + hankana_skip: +#endif /* If the original code was a control character we * only allow a glyph to be displayed if the code is @@ -1949,43 +2226,71 @@ : CTRL_ACTION) >> c) & 1))) && (c != 127 || disp_ctrl) && (c != 128+27); + ok |= realkanji; if (vc_state == ESnormal && ok) { - /* Now try to find out how to display it */ - tc = conv_uni_to_pc(vc_cons[currcons].d, tc); - if ( tc == -4 ) { + if (!realkanji) { + /* Now try to find out how to display it */ + tc = conv_uni_to_pc(vc_cons[currcons].d, tc); + if ( tc == -4 ) { /* If we got -4 (not found) then see if we have defined a replacement character (U+FFFD) */ - tc = conv_uni_to_pc(vc_cons[currcons].d, 0xfffd); + tc = conv_uni_to_pc(vc_cons[currcons].d, 0xfffd); /* One reason for the -4 can be that we just did a clear_unimap(); try at least to show something. */ - if (tc == -4) - tc = c; - } else if ( tc == -3 ) { + if (tc == -4) + tc = c; + } else if ( tc == -3 ) { /* Bad hash table -- hope for the best */ - tc = c; - } - if (tc & ~charmask) - continue; /* Conversion failed */ + tc = c; + } + if (tc & ~charmask) + continue; /* Conversion failed */ + } /* !realkanji */ if (need_wrap || decim) FLUSH if (need_wrap) { cr(currcons); lf(currcons); + if (kanjioverrun) { + x++; + pos += 2; + kanjioverrun = 0; + } } if (decim) insert_char(currcons, 1); +#ifndef CONFIG_KANJI scr_writew(himask ? ((attr << 8) & ~himask) + ((tc & 0x100) ? himask : 0) + (tc & 0xff) : (attr << 8) + tc, (u16 *) pos); +#else /* CONFIG_KANJI */ + if (realkanji) { + tc = ((tc >> 8) & 0xff) | ((tc << 8) & 0xff00); + *((u16 *)pos) = (tc - 0x20) & 0xff7f; + *(pc9800_attr_offset((u16 *)pos)) = attr; + x ++; + pos += 2; + *((u16 *)pos) = (tc - 0x20) | 0x80; + *(pc9800_attr_offset((u16 *)pos)) = attr; + } else { + *((u16 *)pos) = tc & 0x00ff; + *(pc9800_attr_offset((u16 *)pos)) = attr; + } +#endif /* !CONFIG_KANJI */ if (DO_UPDATE && draw_x < 0) { draw_x = x; draw_from = pos; + if (realkanji) { + draw_x --; + draw_from -= 2; + } } +#ifndef CONFIG_KANJI if (x == video_num_columns - 1) { need_wrap = decawm; draw_to = pos+2; @@ -1993,6 +2298,16 @@ x++; draw_to = (pos+=2); } +#else /* CONFIG_KANJI */ + if (x >= video_num_columns - 1) { + need_wrap = decawm; + kanjioverrun = x - video_num_columns + 1; + draw_to = pos + 2; + } else { + x++; + draw_to = (pos += 2); + } +#endif /* !CONFIG_KANJI */ continue; } FLUSH @@ -2419,9 +2734,17 @@ vc_cons[currcons].d->vc_palette[k++] = default_grn[j] ; vc_cons[currcons].d->vc_palette[k++] = default_blu[j] ; } - def_color = 0x07; /* white */ - ulcolor = 0x0f; /* bold white */ - halfcolor = 0x08; /* grey */ + if (pc98) { + def_color = 0x07; /* white */ + def_attr = 0xE1; + ul_attr = 0x08; /* underline */ + half_attr = 0x00; /* ignore half color */ + bold_attr = 0xC1; /* yellow */ + } else { + def_color = 0x07; /* white */ + ulcolor = 0x0f; /* bold white */ + halfcolor = 0x08; /* grey */ + } init_waitqueue_head(&vt_cons[currcons]->paste_wait); reset_terminal(currcons, do_clear); } @@ -2462,7 +2785,12 @@ vt_cons[currcons] = (struct vt_struct *) alloc_bootmem(sizeof(struct vt_struct)); visual_init(currcons, 1); +#if defined CONFIG_PC9800 || defined CONFIG_FB + screenbuf + = (unsigned short *) alloc_bootmem(screenbuf_size * 2); +#else screenbuf = (unsigned short *) alloc_bootmem(screenbuf_size); +#endif kmalloced = 0; vc_init(currcons, video_num_lines, video_num_columns, currcons || !sw->con_save_screen); @@ -2955,9 +3283,12 @@ /* used by selection */ u16 screen_glyph(int currcons, int offset) { - u16 w = scr_readw(screenpos(currcons, offset, 1)); + vram_char_t w = scr_readw(screenpos(currcons, offset, 1)); u16 c = w & 0xff; + if (pc98) + return ((u16)(w >> 16) & 0xff00) | c; + if (w & hi_font_mask) c |= 0x100; return c; @@ -3019,8 +3350,10 @@ EXPORT_SYMBOL(default_red); EXPORT_SYMBOL(default_grn); EXPORT_SYMBOL(default_blu); +#ifndef CONFIG_PC9800 EXPORT_SYMBOL(video_font_height); EXPORT_SYMBOL(video_scan_lines); +#endif EXPORT_SYMBOL(vc_resize); EXPORT_SYMBOL(fg_console); EXPORT_SYMBOL(console_blank_hook); diff -urN linux/drivers/char/vt_ioctl.c linux98/drivers/char/vt_ioctl.c --- linux/drivers/char/vt_ioctl.c Sat Oct 12 13:22:14 2002 +++ linux98/drivers/char/vt_ioctl.c Sat Oct 12 14:18:52 2002 @@ -63,9 +63,11 @@ asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int on); #endif +#ifndef CONFIG_PC9800 unsigned int video_font_height; unsigned int default_font_height; unsigned int video_scan_lines; +#endif /* * these are the valid i/o ports we're allowed to change. they map all the @@ -637,6 +639,17 @@ return 0; } +#ifdef CONFIG_PC9800 + case VT_GDC_RESIZE: + { + if (!perm) + return -EPERM; +/* con_adjust_height(0);*/ + update_screen(console); + return 0; + } +#endif + case VT_SETMODE: { struct vt_mode tmp; @@ -828,7 +841,9 @@ __get_user(clin, &vtconsize->v_clin); __get_user(vcol, &vtconsize->v_vcol); __get_user(ccol, &vtconsize->v_ccol); +#ifndef CONFIG_PC9800 vlin = vlin ? vlin : video_scan_lines; +#endif if ( clin ) { if ( ll ) @@ -853,10 +868,12 @@ if ( clin > 32 ) return -EINVAL; +#ifndef CONFIG_PC9800 if ( vlin ) video_scan_lines = vlin; if ( clin ) video_font_height = clin; +#endif return vc_resize_all(ll, cc); } @@ -1024,8 +1041,10 @@ vt_cons[new_console]->vt_mode.frsig = 0; vt_cons[new_console]->vt_pid = -1; vt_cons[new_console]->vt_newvt = -1; +#ifndef CONFIG_PC9800 if (!in_interrupt()) /* Via keyboard.c:SAK() - akpm */ reset_palette(new_console) ; +#endif } /* diff -urN linux/include/linux/console.h linux98/include/linux/console.h --- linux/include/linux/console.h Sat Oct 19 13:01:51 2002 +++ linux98/include/linux/console.h Mon Oct 28 11:31:37 2002 @@ -17,6 +17,13 @@ #include <linux/types.h> #include <linux/kdev_t.h> #include <linux/spinlock.h> +#include <linux/config.h> + +#ifndef CONFIG_PC9800 +typedef __u16 vram_char_t; +#else +typedef __u32 vram_char_t; +#endif struct vc_data; struct console_font_op; @@ -32,7 +39,7 @@ void (*con_init)(struct vc_data *, int); void (*con_deinit)(struct vc_data *); void (*con_clear)(struct vc_data *, int, int, int, int); - void (*con_putc)(struct vc_data *, int, int, int); + void (*con_putc)(struct vc_data *, int, vram_char_t, int); void (*con_putcs)(struct vc_data *, const unsigned short *, int, int, int); void (*con_cursor)(struct vc_data *, int); int (*con_scroll)(struct vc_data *, int, int, int, int); @@ -48,6 +55,7 @@ void (*con_invert_region)(struct vc_data *, u16 *, int); u16 *(*con_screen_pos)(struct vc_data *, int); unsigned long (*con_getxy)(struct vc_data *, unsigned long, int *, int *); + int (*con_setterm_command)(struct vc_data *); }; extern const struct consw *conswitchp; @@ -55,6 +63,7 @@ extern const struct consw dummy_con; /* dummy console buffer */ extern const struct consw fb_con; /* frame buffer based console */ extern const struct consw vga_con; /* VGA text console */ +extern const struct consw gdc_con; /* PC-9800 GDC text console */ extern const struct consw newport_con; /* SGI Newport console */ extern const struct consw prom_con; /* SPARC PROM console */ diff -urN linux/include/linux/console_struct.h linux98/include/linux/console_struct.h --- linux/include/linux/console_struct.h Sat Oct 19 13:01:07 2002 +++ linux98/include/linux/console_struct.h Mon Oct 28 16:45:49 2002 @@ -9,6 +9,9 @@ * to achieve effects such as fast scrolling by changing the origin. */ +#include <linux/config.h> +#include <linux/console.h> + #define NPAR 16 struct vc_data { @@ -25,9 +28,15 @@ unsigned char vc_s_color; /* Saved foreground & background */ unsigned char vc_ulcolor; /* Color for underline mode */ unsigned char vc_halfcolor; /* Color for half intensity mode */ +#ifdef CONFIG_GDC_CONSOLE + unsigned char vc_def_attr; /* Default attributes */ + unsigned char vc_ul_attr; /* Attribute for underline mode */ + unsigned char vc_half_attr; /* Attribute for half intensity mode */ + unsigned char vc_bold_attr; /* Attribute for bold mode */ +#endif unsigned short vc_complement_mask; /* [#] Xor mask for mouse pointer */ unsigned short vc_hi_font_mask; /* [#] Attribute set for upper 256 chars of font or 0 if not supported */ - unsigned short vc_video_erase_char; /* Background erase character */ + vram_char_t vc_video_erase_char; /* Background erase character */ unsigned short vc_s_complement_mask; /* Saved mouse pointer mask */ unsigned int vc_x, vc_y; /* Cursor position */ unsigned int vc_top, vc_bottom; /* Scrolling region */ @@ -82,6 +91,18 @@ struct vc_data **vc_display_fg; /* [!] Ptr to var holding fg console for this display */ unsigned long vc_uni_pagedir; unsigned long *vc_uni_pagedir_loc; /* [!] Location of uni_pagedir variable for this console */ +#ifdef CONFIG_PC9800 + unsigned char vc_kanji_char1; + unsigned char vc_kanji_mode; + unsigned char vc_kanji_jis_mode; + unsigned char vc_s_kanji_mode; + unsigned char vc_s_kanji_jis_mode; + unsigned int vc_translate_ex; + unsigned char vc_G0_charset_ex; + unsigned char vc_G1_charset_ex; + unsigned char vc_saved_G0_ex; + unsigned char vc_saved_G1_ex; +#endif /* CONFIG_PC9800 */ /* additional information is in vt_kern.h */ }; @@ -105,6 +126,10 @@ #define CUR_HWMASK 0x0f #define CUR_SWMASK 0xfff0 +#ifndef CONFIG_PC9800 #define CUR_DEFAULT CUR_UNDERLINE +#else +#define CUR_DEFAULT CUR_BLOCK +#endif #define CON_IS_VISIBLE(conp) (*conp->vc_display_fg == conp) diff -urN linux/include/linux/consolemap.h linux98/include/linux/consolemap.h --- linux/include/linux/consolemap.h Sat Oct 19 13:02:34 2002 +++ linux98/include/linux/consolemap.h Mon Oct 21 14:19:31 2002 @@ -7,6 +7,7 @@ #define GRAF_MAP 1 #define IBMPC_MAP 2 #define USER_MAP 3 +#define JP_MAP 4 struct vc_data; diff -urN linux/include/linux/tty.h linux98/include/linux/tty.h --- linux/include/linux/tty.h Sat Oct 19 13:01:54 2002 +++ linux98/include/linux/tty.h Mon Oct 21 14:22:18 2002 @@ -123,6 +123,10 @@ #define VIDEO_TYPE_PMAC 0x60 /* PowerMacintosh frame buffer. */ +#define VIDEO_TYPE_98NORMAL 0xa4 /* NEC PC-9800 normal */ +#define VIDEO_TYPE_9840 0xa5 /* NEC PC-9800 normal 40 lines */ +#define VIDEO_TYPE_98HIRESO 0xa6 /* NEC PC-9800 hireso */ + /* * This character is the same as _POSIX_VDISABLE: it cannot be used as * a c_cc[] character, but indicates that a particular special character diff -urN linux/include/linux/vt.h linux98/include/linux/vt.h --- linux/include/linux/vt.h Sat Oct 19 13:02:30 2002 +++ linux98/include/linux/vt.h Mon Oct 21 14:26:03 2002 @@ -50,5 +50,6 @@ #define VT_RESIZEX 0x560A /* set kernel's idea of screensize + more */ #define VT_LOCKSWITCH 0x560B /* disallow vt switching */ #define VT_UNLOCKSWITCH 0x560C /* allow vt switching */ +#define VT_GDC_RESIZE 0x5698 #endif /* _LINUX_VT_H */ diff -urN linux/include/linux/vt_buffer.h linux98/include/linux/vt_buffer.h --- linux/include/linux/vt_buffer.h Sat Oct 19 13:02:24 2002 +++ linux98/include/linux/vt_buffer.h Mon Oct 21 14:28:40 2002 @@ -19,6 +19,10 @@ #include <asm/vga.h> #endif +#ifdef CONFIG_GDC_CONSOLE +#include <asm/gdc.h> +#endif + #ifndef VT_BUF_HAVE_RW #define scr_writew(val, addr) (*(addr) = (val)) #define scr_readw(addr) (*(addr))

--------------A89C99B935D7102E523E5D1B--

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/