--- nono/doc/index.php 2026/04/29 17:04:33 1.1.1.2
+++ nono/doc/index.php 2026/04/29 17:05:15 1.1.1.14
@@ -4,16 +4,10 @@
Licensed under nono-license.txt
-->
1)
- get_version($_SERVER['argv'][1]);
-
-function get_version($filename)
-{
- global $nono_ver;
-
- $fp = fopen($filename, "r");
+ $fp = fopen("../lib/header.h", "r");
if ($fp !== false) {
while (($buf = fgets($fp)) !== false) {
if (preg_match("/NONO_MAJOR_VER\s+\((\d+)\)/", $buf, $m)) {
@@ -31,66 +25,176 @@ function get_version($filename)
}
fclose($fp);
- $nono_ver = "${nono_major}.${nono_minor}.${nono_patch} (${nono_date})";
+ $nono_ver = "${nono_major}.${nono_minor}.${nono_patch}";
}
-}
?>
+
+
+{$h4number}. {$title}
+_EOM_;
+}
+function H4end()
+{
+ print " \n";
+}
+
+function H5($name, $title)
+{
+ global $h4number;
+ global $h5number;
+ $h5number++;
+ print <<<_EOM_
+
+
+{$h4number}.{$h5number}. {$title}
+_EOM_;
+}
+function H5end()
+{
+ print " \n";
+}
+?>
-
+ビルドには以下が必要です。
+
The followings are required for build.
+
- make (BSD make, not GNU make)
-
- C/C++ compiler which supports -std=c++14
-
- wxWidgets >= 3.0
+
- C/C++ compiler which supports -std=c++14.
+
+(For gcc, 7.4 or newer works at least.
+For clang, 7.0 - 13.0 works at least.)
+ - wxWidgets 3.0.x "stable" branch
+or 3.2.x "new stable" branch
- gettext
+
wxWidgets は NetBSD(pkgsrc) なら
-pkgsrc/x11/wxGTK30 (OPTIONS:gtk2 推奨) です。
+pkgsrc/x11/wxGTK30 (OPTIONS:gtk3 で動作確認) です。
+2022Q3 の wxGTK32 ではビルドできないようです。
If you use NetBSD(pkgsrc),
-wxWidgets is pkgsrc/x11/wxGTK30 (OPTIONS:gtk2 is recommended).
+wxWidgets is pkgsrc/x11/wxGTK30 (OPTIONS:gtk3 is tested).
+wxGTK32 in 2022Q3 doesn't seem to build for now.
+
-アーカイブを展開したら以下のようにビルドします。
+(NetBSD 以外でのビルドはサポートしていませんが)
+Ubuntu 20.04 ではたぶん以下のパッケージが必要です。
+You may need the following packages on Ubuntu 20.04
+(though we won't support non-NetBSD platform).
+
+
+-
+bmake
+build-essential
+gettext
+libbsd-dev
+libedit-dev
+libkqueue-dev
+libwxgtk3.0-gtk-dev
+zlib1g-dev
+
+
+
+nono のソースアーカイブを展開したら以下のようにビルドします。
configure には環境変数 CC、CXX でコンパイラを指定することが出来ます。
また wx-config が標準的な名前で提供されていないために見付けられない場合には
環境変数 WX_CONFIG にパスを指定することが出来ます。
-Extract the archive and build as following.
+Extract the nono's source archive and build as following.
You can specify C/C++ compiler using environment variable CC and CXX
if configure cannot find standard name suitable compiler.
Also, you can specify wx-config path using environment variable WX_CONFIG
if configure cannot find wx-config.
+
+-DNOTEST は開発者用のテストツールをビルドしないためのものです。
+With -DNOTEST, the build excludes test tools which is needed
+for developers only.
+
% ./configure
-% make depend
-% make
+% make -DNOTEST depend
+% make -DNOTEST
% su
# make install
-
-
2つの実行ファイルがインストールされます。
nono が GUI 版実行ファイル、
nono-cli がコマンドライン版です。
Two executables will be installed.
-nono is GUI executable and nono-cli is
-command line executable.
+nono is the GUI executable and nono-cli is
+the command line executable.
+
+
+How to execute"); ?>
+
-VM の設定ファイルはその VM ディレクトリ内の nono.cfg です。
-書式は
key = value 形式で1行1項目ずつです。
+
+nono の設定はいずれも以下の順序で適用されます。
+nono's configurations are always applied in the following order.
+
+
+- デフォルト値
Default value
+ - ~/.nono.cfg があればその内容
+
Contents of ~/.nono.cfg if exists
+ - VM ディレクトリ内の nono.cfg (または -c で指定したファイル)
+があればその内容
+
Contents of nono.cfg in the VM directory (or the file specified by -c option) if exists
+ - コマンドラインオプション
Command line option
+
+
+ファイルの書式はどちらも key = value 形式で1行1項目ずつです。
key と value の前後の空白は取り除かれます。
また空行と "#" で始まる行は無視します。
-知らないキーの行も無視します。
-VM configuration file is nono.cfg in the VM directory.
-Its syntax is key = value format, one per line.
+知らないキーは警告を出した上で無視します。
+同じキーが複数回現れた場合、
+上に列挙した順に後から書いたほうで上書きし、
+同じファイル内でも同様に後に書いたほうで上書きします。
+コマンドラインオプション -V 等はこれをさらに上書きします。
+コマンドラインオプションで同じキーが複数回現れた場合も後に書いたほうが上書きします。
+
+The syntax of both files is key = value format, one per line.
White spaces before and after key and value are ignored.
-And, blank lines, lines beginning with "#", and
-lines with unrecognized key are also ignored.
-
+Blank lines, lines beginning with "#" are also ignored.
+The lines with unrecognized key are ignored with a warning.
+
+If the same key appears more than once,
+the latter overwrites the former in the above order.
+If the same key appears in a file,
+the latter overwrites the former in the same manner.
+Then, command line option -V etc. overwrites it.
+If the same key appears more than once in the command line option,
+do in the same manner.
+
+
+
+vmtype を除くすべての設定項目はそれぞれデフォルト値を持っています。
+つまり少なくとも vmtype だけは設定ファイルかコマンドラインオプションで指定する必要があります。
+All configuration items except vmtype have default value.
+It means, you must specify at least only vmtype
+by configuration file or commandline option.
+
設定項目は次の通りです。
The configuration items are:
@@ -275,33 +473,126 @@ function config_item($name, $desc)
}
config_item("vmtype = string", <<<_EOM_
-VM 種別を指定します。
-今の所 string に
-指定できるのは luna (LUNA-I) だけですが、省略不可です。
-Specifies the VM type.
-For now, only luna (LUNA-I) can be specified for
-string.
+VM 種別を以下のいずれかから指定します。
+省略不可です。
+Specifies the VM type from the following.
This field is mandatory.
+
+| | luna | … LUNA-I
+ |
| luna88k | … LUNA-88K
+ |
| x68030 | … X68030 (Experimental)
+ |
| news | … NWS-1750 (Just a joke)
+ |
_EOM_
);
-config_item("debugger-port = integer", <<<_EOM_
-デバッガの TCP 待ち受けポート番号を指定します。
-0 なら待ち受けを行いません。
-デフォルトは 9999 です(適当)。
+config_item("cgrom-image = path", <<<_EOM_
+(X68030 Only)
+X68030 の外部 CGROM イメージファイルのパスを指定します。
+CGROM は 768KB です。
+path がファイル名のみなら VM ディレクトリとその親ディレクトリからこのファイル名を検索します。
+path が相対パスなら VM ディレクトリからの相対パスになります (現在のディレクトリからではありません)。
+空にすると nono 内蔵の互換 CGROM を使用します。
+デフォルトは空です。
+Specifies the X68030's external CGROM image file path.
+This CGROM is 768KB.
+If the path does not have any path delimiters,
+the VM directory and then its parent directory will be searched.
+If the path is a relative path,
+it will be path from the VM directory, not from the current directory.
+If the path is empty, nono's builtin compatible CGROM will be used.
+The default value is empty.
_EOM_
);
-config_item("ethernet-hostdriver = string", <<<_EOM_
-イーサネットデバイスのホスト側ドライバを指定します。
-none、tap、bpf が指定できます。
+config_item("clock-sync = value", <<<_EOM_
+仮想マシン内の時刻の同期方法を指定します。
+real なら実時間に同期、virtual なら仮想時間に同期します。
+デフォルトは real です。
+この機能は実験中のため将来予告なく仕様が変更になる可能性があります。
+Specifies how to synchronize the time in virtual machine.
+If real, synchronize with the real time;
+if virtual, synchronize with the virtual time.
+The default is real.
+This feature is under experimentation and may be changed in the future
+without notice.
+_EOM_
+);
+
+config_item("debugger-driver = string", <<<_EOM_
+デバッガのコンソールドライバを指定します。
+stdio、tcp、none が選択可能です。
+stdio は標準入出力を使用します。
+tcp は TCP ポートで TELNET プロトコルで待ち受けます。
none ならホスト側とは一切通信を行いません。
-tap か bpf かはホスト OS によってビルド時に決定します。
-NetBSD なら tap です。
+デフォルトは none です。
+Specifies console driver of the debugger.
+stdio, tcp, and none can be specified.
+stdio uses the standard input/output.
+tcp listens on TCP port using TELNET protocol.
+none doesn't make any communication with the host.
+The default is none.
+_EOM_
+);
+
+config_item("debugger-tcp-port = integer",
+<<<_EOM_
+デバッガのコンソールドライバが tcp の時の TCP 待ち受けポート番号を指定します。
+Specifies the TCP port number that debugger console driver listens.
+_EOM_
+);
+
+?>yesno", <<<_EOM_
+(LUNA and NEWS Only)
+機種に依存せず DIPSW を自動起動に設定するかどうか指定します。
+"yes" なら自動起動するように、
+"no" なら自動起動しないように DIPSW 設定を上書きします。
+"" (空) なら何もしません。デフォルトは "" です。
+このオプションは luna-dipsw1 や news-dipsw
+の状態が設定ファイルやコマンドラインオプションによって確定した後に
+該当のスイッチだけを変更します。
+Specifies whether to configure DIPSW to boot automatically,
+regardless of the models.
+"yes" overwrites DIPSW, to boot automatically.
+"no" overwrites DIPSW, not to boot automatically.
+"" (Empty) does nothing.
+The default value is "".
+This option only changes the appropriate switch(es)
+after the luna-dipsw1 or news-dipsw configuration
+is determined by the configuration file or command line options.
+_EOM_
+);
+
+config_item("dipsw-serial = yesno", <<<_EOM_
+(LUNA and NEWS Only)
+機種に依存せず DIPSW をシリアルコンソールを使うかどうか指定します。
+"yes" ならシリアルコンソールを使うように、
+"no" ならシリアルコンソールを使わないように DIPSW 設定を上書きします。
+"" (空) なら何もしません。デフォルトは "" です。
+luna-dipsw1 もしくは news-dipsw (機種による)
+の状態が設定ファイルやコマンドラインオプションによって確定した後に
+このオプションによって該当のスイッチだけを変更します。
+NEWS でシリアルコンソールを使わないを選択した場合、
+SW1,2,3 は OFF, OFF, ON にセットされ、
+NWB-512 モノクロコンソール(未実装) が選択されます。
+Specifies whether to configure DIPSW to use serial console,
+regardless of the models.
+"yes" overwrites DIPSW, to use serial console.
+"no" overwrites DIPSW, not to use serial console.
+"" (Empty) does nothing.
+The default value is "".
+This option only changes the appropriate switch(es)
+after the luna-dipsw1 or news-dipsw configuration
+is determined by the configuration file or command line options.
+If you choose not to use serial console on NEWS,
+SW1,2,3 will be set OFF, OFF, ON respectively,
+and NWB-512 monochrome console (not implemented) will be chosen.
_EOM_
);
config_item("ethernet-macaddr = string", <<<_EOM_
+(LUNA and NEWS only)
イーサネットデバイスの仮想マシン側の MAC アドレスを指定します。
XX:XX:XX:XX:XX:XX
形式で指定します。
@@ -310,68 +601,491 @@ config_item("ethernet-macaddr = strin
_EOM_
);
+config_item("extram-size = integer", <<<_EOM_
+
+(X68030 Only)
+拡張メモリのサイズを MB 単位で指定します。
+今の所以下だけが指定できます。
+Specifies the extended RAM size in MB.
+For now, only the following can be specified.
+
+- 0 … 拡張メモリを使用しません。デフォルトです。
+
No extended memory. It's default.
+ - 16 … TS-6BE16 互換モードで、
+アドレス $0100'0000〜$01ff'ffff の 16MB です。
+
TS-6BE16 compatible mode.
+Its address is $0100'0000〜$01ff'ffff and the size is 16MB.
+ - 128/256 … 060turbo 互換モードで、
+アドレス $1000'0000〜$17ff'ffff/$1fff'ffff の 128/256MB です。
+
060turbo compatible mode.
+Its address is $1000'0000〜$17ff'ffff/$1fff'ffff and the size is
+128 or 256MB.
+
+_EOM_
+);
+
+config_item("fast-mode = integer", <<<_EOM_
+
+起動時の動作モードを指定します。0 なら通常モード、1 なら高速モードです。
+デフォルトは 0 です。
+コマンドラインオプション -f でも高速モードへのみ指定可能です。
+
+_EOM_
+);
+
+config_item("fd-drive = integer", <<<_EOM_
+(X68030 Only)
+フロッピードライブの数を 0 から 4 で指定します。
+デフォルトは 2 です。
+Specifies the number of floppy drives from 0 to 4.
+The default is 2.
+_EOM_
+);
+
+config_item("fdN-image = path", <<<_EOM_
+(X68030 Only)
+フロッピードライブ N に起動時に挿入するディスクイメージを指定します。
+イメージパスが相対パスなら VM ディレクトリからの相対パスになります。
+起動後はメニューから操作できます。
+デフォルトは空です。
+Specifies a diskimage to be inserted to floppy drive N at startup.
+If the path is relative path, it is from the VM directory.
+You can also operate them from menu after startup.
+The default is empty.
+_EOM_
+);
+
+config_item("fpu-type = value", <<<_EOM_
+(X68030 Only)
+FPU を装着するかどうか指定しています。
+none なら FPU を装着しません。
+68881 なら FPU として 68881 を装着します。
+現状 68882 はサポートしていません。
+また none の代わりに 0、
+68881 の代わりに 1 と書くこともできます。
+デフォルトは 68881 です。
+LUNA-I はたぶん 68881 搭載モデルのみのため設定できません。
+Specifies whether to install FPU or not.
+If none, FPU is not installed.
+If 68881, 68881 FPU is installed.
+68882 is not supported yet.
+And, none can also be written as 0,
+68881 can also be written as 1.
+The default is 68881.
+This item cannot be specified on LUNA-I
+because (probably) all LUNA-I has 68881.
+_EOM_
+);
+
+config_item("hostcom-driver = string", <<<_EOM_
+シリアルポートのホスト側ドライバを指定します。
+stdio、tcp、none が選択可能です。
+stdio は標準入出力を使用します。
+tcp は TCP ポートで TELNET プロトコルで待ち受けます。
+none ならホスト側とは一切通信を行いません。
+デフォルトは none です。
+Specifies the host driver of serial port.
+stdio, tcp, and none can be specified.
+stdio uses the standard input/output.
+tcp listens on TCP port using TELNET protocol.
+none doesn't make any communication with the host.
+The default is none.
+_EOM_
+);
+
+config_item("hostcom-tcp-port = integer", <<<_EOM_
+ホストドライバが tcp の時の TCP 待ち受けポート番号を指定します。
+Specifies the TCP port number that host driver listens.
+_EOM_
+);
+
+config_item("hostcom-fallback = integer", <<<_EOM_
+hostcom-driver で指定したドライバが使用可能でなかった時、
+0 ならプロセスを終了します。1 なら none を選択して実行を継続します。
+デフォルトは 0 です。
+Specifies the behavior when the driver which is selected by
+hostcom-driver is unusable;
+terminate the process if 0,
+or continue to run using the none driver if 1.
+The default is 0.
+_EOM_
+);
+
+config_item("hostkbd-input = string", <<<_EOM_
+(LUNA and X68030 only)
+ホストキーボードの入力モードを指定します。
+char ならキャラクタ入力モード、
+jp なら日本語キーボードモードです。
+デフォルトは char です。
+詳細は VM について の章を参照してください。
+Specifies the input mode of the host keyboard.
+char means the character mode,
+jp means the Japanese keyboard mode.
+The defualt is char.
+See About VM for details.
+_EOM_
+);
+
+config_item("hostnet-driver = string", <<<_EOM_
+(LUNA and NEWS Only)
+イーサネットデバイスのホスト側ドライバを指定します。
+afpacket、bpf、tap のうち
+ホスト OS がサポートしているものと auto、none が選択可能です。
+afpacket は Linux の AF_PACKET ソケットを使用します。
+bpf は bpf(4) デバイスを使用します。
+tap は tap(4) インタフェースを使用します。
+none ならホスト側とは一切通信を行いません。
+auto ならホスト OS がサポートしているもののうち
+tap → afpacket → bpf を順に試します。
+デフォルトは auto です。
+Specifies the host driver of ethernet device.
+afpacket, bpf, and tap can be specified
+only if the host OS supports them.
+auto and none can always be specified.
+afpacket uses Linux's AF_PACKET socket,
+bpf uses bpf(4) device,
+and tap uses tap(4) interface.
+none doesn't make any communication with the host.
+If auto is specified,
+it tries tap, afpacket, and bpf in that order
+(if the host OS supports them).
+The default is auto.
+_EOM_
+);
+
+config_item("hostnet-afpacket-ifname = ifname", <<<_EOM_
+(LUNA and NEWS Only)
+ホストドライバが afpacket の時にバインドするインタフェースを1つ指定します。
+ifname が auto
+なら使用可能なインタフェースを1つ自動的に選択します。
+デフォルトは auto です。
+なお、このホストドライバではローカルホストとの通信は出来ません。
+Specifies an interface name to bind to, when the host driver is afpacket.
+If auto is specified as ifname,
+it selects an usable interface automatically.
+The default is auto.
+Note that this host driver cannot communicate with the localhost.
+_EOM_
+);
+
+config_item("hostnet-bpf-ifname = ifname", <<<_EOM_
+(LUNA and NEWS Only)
+ホストドライバが bpf の時にバインドするインタフェースを1つ指定します。
+ifname が auto
+なら使用可能なインタフェースを1つ自動的に選択します。
+デフォルトは auto です。
+なお、このホストドライバではローカルホストとの通信は出来ません。
+Specifies an interface name to bind to, when the host driver is bpf.
+If auto is specified as ifname,
+it selects an usable interface automatically.
+The default is auto.
+Note that this host driver cannot communicate with the localhost.
+_EOM_
+);
+
+config_item("hostnet-tap-devpath = path", <<<_EOM_
+(LUNA and NEWS Only)
+ホストドライバが tap の時に使用するデバイスを1つフルパスで指定します。
+デフォルトは auto で、この場合は自動的にデバイスを選択します。
+この時の探し方はホスト OS によって異なります。
+Linux なら /dev/net/tun を指定したのと同じです。
+OpenBSD なら /dev/tap0 から /dev/tap9 まで
+順番にオープンできるまで試します。
+NetBSD (と FreeBSD) ならまず /dev/tap でクローニングを試み、
+それが失敗すれば /dev/tap0 から /dev/tap9 までを
+順番にオープンできるまで試します。
+いずれの場合も VM ディレクトリかその親ディレクトリに
+nono-ifup, nono-ifdown という名前のシェルスクリプトが必要です。
+何もすることがない場合でも正常終了する空のシェルスクリプトを用意してください。
+
+Specifies a device pathname, when the host driver is tap.
+The default is auto.
+The behavior in this case depends on the host OS.
+On Linux, it's the same as /dev/net/tun.
+On OpenBSD, it will try from /dev/tap0 to /dev/tap9
+until successful.
+On NetBSD (and FreeBSD), it will try cloning by /dev/tap first.
+If that fails, then try from /dev/tap0 to /dev/tap9
+until successful.
+In all cases, you need to prepare two shell script files which names are
+nono-ifup and nono-ifdown in the VM directory or
+its parent directory.
+Even if you don't have anything to do in these scripts,
+you need to prepare empty scripts that will terminate successfully.
+_EOM_
+);
+
+config_item("hostnet-fallback = integer", <<<_EOM_
+(LUNA and NEWS Only)
+hostnet-driver で指定したドライバが使用可能でなかった時、
+0 ならプロセスを終了します。
+1 なら none を選択して実行を継続します。
+デフォルトは 0 です。
+Specifies the behavior when the driver which is selected by
+hostnet-driver is unusable;
+terminate the process if 0,
+or continue to run using the none driver if 1.
+The default is 0.
+_EOM_
+);
+
+config_item("iplrom1-image = path", <<<_EOM_
+(X68030 Only)
+X68030 の外部 IPLROM イメージファイルのパスを指定します。
+こちらは 0xfe0000..0xffffff の 128KB の部分で、IPLROM30 と呼ばれているほうです。
+path がファイル名のみなら VM ディレクトリとその親ディレクトリからこのファイル名を検索します。
+path が相対パスなら VM ディレクトリからの相対パスになります (現在のディレクトリからではありません)。
+空にすると無償配布されている IPLROM30 を使用します。
+デフォルトは空です。
+Specifies the X68030's external IPLROM image file path.
+This one contains 128KB at 0xfe0000..0xffffff and is known as IPLROM30.
+If the path does not have any path delimiters,
+the VM directory and then its parent directory will be searched.
+If the path is a relative path,
+it will be path from the VM directory, not from the current directory.
+If the path is empty, the public released IPLROM30 will be used.
+The default value is empty.
+_EOM_
+);
+
+config_item("iplrom2-image = path", <<<_EOM_
+(X68030 Only)
+X68030 の外部 IPLROM イメージファイルのパスを指定します。
+こちらは 0xfc0000..0xfdffff の 128KB の部分で、ROM30 と呼ばれているほうです。
+path がファイル名のみなら VM ディレクトリとその親ディレクトリからこのファイル名を検索します。
+path が相対パスなら VM ディレクトリからの相対パスになります (現在のディレクトリからではありません)。
+空にすると内蔵 ROM を使用します。
+内蔵 ROM は NetBSD/x68k が起動する程度の SCSI IOCS のみサポートしています。
+デフォルトは空です。
+Specifies the X68030's external IPLROM image file path.
+This one contains 128KB at 0xfc0000..0xfdffff and is known as ROM30.
+If the path does not have any path delimiters,
+the VM directory and then its parent directory will be searched.
+If the path is a relative path,
+it will be path from the VM directory, not from the current directory.
+If the path is empty, internal emulated ROM will be used.
+The ROM supports only enough SCSI IOCS to boot NetBSD/x68k.
+The default value is empty.
+_EOM_
+);
+
+config_item("keyboard-connect = integer", <<<_EOM_
+(LUNA and X68030 Only)
+起動時にキーボードを本体に接続するかどうかを指定します。
+1 なら接続し、0 なら接続しません。デフォルトは 1 です。
+起動後はメニューから変更可能です。
+Specifies whether to connect keyboard on boot.
+If 1, it is connected; if 0, it isn't connected. The default is 1.
+You can change it on GUI menu after boot.
+_EOM_
+);
+
+config_item("luna-adjust-misused-epoch = integer", <<<_EOM_
+(LUNA Only)
+LUNA で誤った RTC epoch を採用している OS 向けに RTC
+エミュレーションを補正するかどうかを
+指定します。0 なら補正をしません(実機と同じ動作)、
+1 なら補正します(現実世界と同じ動作)。
+デフォルトは 1 で、通常 1 のままで使用して問題ありません。
+
+Specifies whether nono corrects RTC emulation for OSes
+that adopts wrong RTC epoch on LUNA.
+0 means making no correction
+(this is the same behavior as the actual machine).
+1 means making correction
+(this is the same behavior as the real world).
+The default is 1. Normally, leave it 1.
+
+LUNA で採用している RTC (MK48T02) は2桁で保持している年の値が
+4 で割り切れる年をうるう年とする仕様です。
+ところが NetBSD/luna68k、OpenBSD/luna88k などはこの
+RTC の年の値を 1970年からの経過年として使用しています。
+例えば1970年はうるう年ではないため 2月28日の翌日は 3月1日ですが、
+MK48T02 的には 00年であるためうるう年と認識し 2月28日の翌日が2月29日になります。
+このように、これらの OS を使っている場合実機の
+RTC は4年のうち約2年間、1日ずれた日付を指しているようです。
+しかしながら、RTC の時刻は OS 起動時に一度読んだ後は基本的に参照しない上、
+今時必要なら NTP で時間を合わせるため、
+実機でも問題が顕在化することはまずないと思います。
+nono の場合は実機と異なり、アプリケーション実行中しか RTC が進まないため、
+補正がない場合の動作が問題になるのは
+nono を起動したまま偶数年の2月末日から日付をまたいで、
+かつ nono を起動したまま OS を再起動して NTP などで時刻修正を行わなかった時
+だけだと思います。
+このオプションはほぼ開発者向けの動作確認用です。
+_EOM_
+);
+
config_item("luna-dipsw1 = string", <<<_EOM_
+(LUNA Only)
本体前面 DIPSW#1-1..#1-8 の内容を指定します。
"0" を DOWN、"1" を UP として、
これを8つ並べた形式で、前から順に #1..#8 に対応します。
-デフォルトは 11110111 です。
-Specifies status of the front panel DIPSW#1-1..#1-8.
+Specifies status of the front panel DIPSW#1-1..#1-8 using 8 digits.
"0" means DOWN and "1" means UP.
The first character corresponds to #1 and
-the eighth character corresponds to #8.
-The default value is 11110111.
+the eighth character corresponds to #8.
+
+LUNA-I でのデフォルトは 11110111 です。
+各スイッチの内容は以下のリンクを参照してください。
+On LUNA-I, the default value is 11110111.
+See the following link about DIPSW.
+→ NetBSD/luna68k: Information
-各スイッチの内容はここ
-(NetBSD/luna68k: Information) を参照してください。
-See NetBSD/luna68k: Information about DIPSW.
+LUNA-88K でのデフォルトは 11111111 です。
+各スイッチの内容は以下のリンクを参照してください。
+On LUNA-88K, the default value is 11111111.
+See the following link about DIPSW.
+→ OpenBSD manual pages: boot_luna88k(8)
+
+自動起動するかどうかとシリアルコンソールを使うかどうかを指定したい場合は
+こちらではなく
+dipsw-autoboot、dipsw-serial
+設定を使うほうが便利です。
+If you only want to specify whether to autoboot and/or
+to use serial console,
+dipsw-autoboot, dipsw-serial
+configurations are useful.
_EOM_
);
config_item("luna-dipsw2 = string", <<<_EOM_
+(LUNA Only)
本体前面 DIPSW#2-1..#2-8 の内容を指定します。
書式は luna-dipsw1 と同じです。
デフォルトは 11111111 です。
Specifies status of the front panel DIPSW#2-1..#2-8.
The same syntax as luna-dipsw1 is used.
The default value is 11111111.
-
-すべて "1"(UP) なら
-NetBSD/luna68k のブートローダは自動的にカーネルをロードして実行し、
-どれかでも "0"(DOWN) にするとプロンプトで停止するようです。
+
+NetBSD/luna68k のブートローダは、
+DIPSW#2 が "11111111" なら自動的にカーネルをロードして実行し、
+どれかでも "0" にするとプロンプトで停止するようです。
(本当は #8 だけで制御するつもりだったんじゃないかという気がします)
-If the value is 11111111,
-NetBSD/luna68k bootloader will automatically load and execute the kernel.
+NetBSD/luna68k bootloader will automatically load and execute the kernel,
+if the DIPSW#2 is "11111111".
Otherwise, the bootloader will enter interactive mode.
(I doubt that they actually wanted to switch with only #8)
+
+_EOM_
+);
+
+config_item("luna-video-plane = integer", <<<_EOM_
+(LUNA Only)
+LUNA のビデオボードのプレーン数を 1、4、8 から指定します。
+1 ならモノクロビデオボード、
+4 なら16色 (4bpp) ビデオボード、
+8 なら 256色 (8bpp) ビデオボードです。
+デフォルトは 4 です。
+Specifies number of planes on LUNA video board.
+The valid values are 1, 4 or 8.
+1 means a monochrome video board,
+4 means 16-color (4bpp) video board,
+8 means 256-color (8bpp) video board.
+The default value is 4.
+_EOM_
+);
+
+config_item("mainview-scale = double", <<<_EOM_
+
+メインウィンドウの起動時のスケールを実数で指定します。
+コマンドラインオプション -s で上書き可能です。
+起動後はメニューから、
+プリセットされた倍率とここで指定した倍率には変更可能です。
+デフォルトは 1.0 です。
+_EOM_
+);
+
+config_item("monitor-fontsize = integer",
+<<<_EOM_
+
+テキスト系モニタとステータスパネルのフォントサイズを
+12, 16, 24 から指定します。
+コマンドラインオプション --fontsize で上書き可能です。
+起動後はメニューから変更することができます。
+デフォルトは 12 です。
-
+_EOM_
+);
+
+config_item("monitor-rate = integer", <<<_EOM_
+テキスト系モニタウィンドウの更新頻度を Hz 単位で指定します。
+1 から 60 までの間で指定でき、デフォルトは 20Hz です。
+起動後にメニューから、プリセットされた頻度
+とここで指定した頻度には変更可能です。
+Specifies refresh rate of all text monitor windows in Hz.
+It ranges from 1 to 60. The default is 20Hz.
+You can choose this value on GUI menu after boot,
+from preset rate or rate specified here.
_EOM_
);
config_item("mpu-clock = value", <<<_EOM_
MPU のクロック数を MHz 単位で指定します。
-デフォルトは 20MHz です。
-Specifies the MPU clock in MHz. The default value is 20MHz.
+デフォルトは LUNA-I なら 20MHz、LUNA-88K と X68030 なら 25MHz です。
+Specifies the MPU clock in MHz.
+The default value is 20MHz on LUNA-I, or 25MHz on LUNA-88K and X68030.
+_EOM_
+);
+
+config_item("mpu-pseudo-stop = integer", <<<_EOM_
+(LUNA-88K Only)
+m88100 にて疑似 STOP 状態を有効にするかどうかを指定します。
+0 なら無効(実機と同じ動作)、1 なら有効で、デフォルトは 1 です。
+m88100 には、m68k の STOP 命令 (割り込みが上がるまで何もせず待つ)
+に相当する命令がなく、
+大抵ビジーウェイトループで割り込みが上がるのを待つことになります。
+これは実機では (消費電力を減らす手段がないという些細な問題以外には)
+何のデメリットもないのですが、
+エミュレータで特に高速動作させている時には割り込みが上がるまで
+(例えば人間がキーを入力するまで) ホスト CPU パワーを使い潰してビジーウェイトループを実行し続けることになり、ホスト CPU があっつあつになります。
+それを防ぐための機能です。
+特徴的な命令列を検出して実現しているので、すべての状況で動作するわけではありません。
_EOM_
);
-/* luna には不要
- config_item("mpu-has-fpu", ""); */
+config_item("news-dipsw = string", <<<_EOM_
+(NEWS Only)
+DIPSW の内容を指定します。
+"0" を OFF、"1" を ON として、
+これを8つ並べた形式で、前から順に SW1..SW8 に対応します。
+デフォルトは 00001000 です。
+Specifies status of the DIPSW using 8 digits.
+"0" means OFF and "1" is ON.
+The first character corresponds to SW1 and
+the eighth character corresponds to SW8.
+The default valus is 00001000.
+
+各スイッチの内容は以下のリンクを参照してください。
+See the following link about DIPSW.
+→ NetBSD/news68k Frequently Asked Questions
+
+自動起動するかどうかとシリアルコンソールを使うかどうかを指定したい場合は
+こちらではなく
+dipsw-autoboot、dipsw-serial
+設定を使うほうが便利です。
+If you only want to specify whether to autoboot and/or
+to use serial console,
+dipsw-autoboot, dipsw-serial
+configurations are useful.
+_EOM_
+);
config_item("prom-image = path", <<<_EOM_
-外部 ROM イメージファイルのパスを指定します。
+(LUNA Only)
+LUNA-I/LUNA-88K の外部 ROM イメージファイルのパスを指定します。
path がファイル名のみなら VM ディレクトリとその親ディレクトリからこのファイル名を検索します。
path が相対パスなら VM ディレクトリからの相対パスになります (現在のディレクトリからではありません)。
空にすると内蔵 ROM を使用します。
デフォルトは空です。
-Specifies the external ROM image file path.
+Specifies the LUNA-I/LUNA-88K's external ROM image file path.
If the path does not have any path delimiters,
the VM directory and then its parent directory will be searched.
If the path is a relative path,
-it will be path from the VM directory, not from the current
-directory.
+it will be path from the VM directory, not from the current directory.
If the path is empty, internal emulated ROM will be used.
The default value is empty.
@@ -381,220 +1095,1299 @@ nono 内蔵のなんちゃって下位
you can boot with nono's internal downward compatible emulated ROM
if you set this field empty (or leave it as the default).
-実機を持っている場合は ROM ファイルを指定することで実機 ROM で起動できます。
+LUNA-I 実機を持っている場合は
+ROM ファイルを指定することで実機 ROM で起動できます。
ROM ファイルは実機の 0x41000000-0x4101ffff (128KB) を保存したものです。
-If you have the real LUNA machines,
+今のところ ROM は V4.22 (Thu Jul 27 11:45:42 1989) のみサポートしています。
+それ以外については何も分かりません。
+If you have the real LUNA-I machine,
you can boot with the real ROM spcifying the ROM file path.
-The ROM file is extracted from 0x41000000-0x4101ffff (128KB) from
-the real machine.
+The ROM file is extracted from 0x41000000-0x4101ffff (128KB) of
+the real LUNA-I machine.
+For now, only V4.22 (Thu Jul 27 11:45:42 1989) is supported.
+I have no idea about other ROMs.
+
+LUNA-88K 実機の場合は 0x41000000-0x4103ffff (256KB) を保存したものです。
+今のところ ROM は version 1.20 のみサポートしています。
+
+For LUNA-88K,
+the ROM file is extracted from 0x41000000-0x4103ffff (256KB).
+For now, only version 1.20 is supported.
_EOM_
);
-config_item("ram-size = value", <<<_EOM_
-搭載する RAM サイズを MB 単位で指定します。
-デフォルトは 16MB です。
-Specifies the RAM size in MB. The default is 16MB.
+config_item("ram-size = integer", <<<_EOM_
+搭載する RAM サイズを MB 単位で指定します。Specifies the RAM size in MB.
+
+- LUNA-I のデフォルトは 16MB です。
+16MB 未満は 4MB 単位で、
+16MB 以上は 255MB まで 1MB 単位で指定できます
+(ちなみに NetBSD/luna68k の起動には最低でも 8MB 必要です)。
+
On LUNA-I, the default is 16MB.
+If the size is less than 16MB, you can specify in 4MB unit.
+If larger, you can specify up to 255MB in 1MB unit.
+By the way, NetBSD/luna68k needs at least 8MB to boot.
+ - LUNA-88K のデフォルトは 64MB です。
+64MB 未満は 16MB 単位で、
+64MB 以上は暫定で 255MB まで 1MB 単位で指定できます。
+
On LUNA-88K, the default is 64MB.
+If the size is less than 64MB, you can specify in 16MB unit.
+If larger, you can specify up to tentative 255MB in 1MB unit.
+ - X68030 ではメイン RAM 容量を示し、デフォルトは 12MB です。
+4MB から 12MB まで 1MB 単位で指定できます。
+拡張メモリについては extram-size を参照してください。
+
On X68030, the default is 12MB.
+You can specify it in 1MB unit from 4MB to 12MB.
+See extram-size for extended memory.
+ - NWS-1750 では現状 16MB で変更できません。
+
On NWS-1750, This is 16MB fixed for now.
+
_EOM_
);
-config_item("spc0-idN-image = devtype,path", <<<_EOM_
-SCSI デバイスを指定します。N には 0 から 7 が入ります。
-ID 7 は本体が使用しますので指定しないでください。
-値はデバイス種別 devtype とイメージパス path
-を ","(カンマ) で区切って並べた形式で、
-今の所デバイス種別 devtype には "hd"(ハードディスク) のみ指定可能です。
-ディスクイメージパスが相対パスなら VM ディレクトリからの相対パスになります。
+config_item("rtc-epoch-year = integer", <<<_EOM_
+(LUNA Only)
+RTC (MK48T02) の基準年を指定します。
+デフォルトは 1970年です。
+NetBSD/luna68k、OpenBSD/luna88k はいずれも基準年を 1970年としていますので、
+デフォルトのままで構いません。
+ゲスト OS に 4.4BSD を使用する際は 1900 を指定します。
+NEWS では今の所 1900 固定で変更出来ません。
+Specifies the RTC (MK48T02) epoch year.
+The default is 1970.
+Since both NetBSD/luna68k and OpenBSD/luna88k use 1970 as epoch year,
+there is no need to touch this value.
+If you boot 4.4BSD on LUNA-I as the guest OS, specify 1900.
+On NEWS, it is fixed at 1900.
+_EOM_
+);
+
+config_item("show-statuspanel = integer", <<<_EOM_
+ステータスパネルを表示するかどうかを指定します。
+0 なら非表示、1 なら表示です。
+デフォルトは 1(表示) です。
+起動後はメニューから変更可能です。
+Specifies whether to display the status panel or not.
+If 0, it is hidden; if 1, it is shown.
+The default is 1 (show).
+You can change it on GUI menu after boot.
+_EOM_
+);
+
+config_item("spc0-idN-image = devtype[,path]", <<<_EOM_
+(LUNA and X68030 Only)
+SCSI デバイスとイメージを指定します。キーの N には 0 から 7 が入ります。
+ただし ID 7 は本体が使用しますので指定しないでください。
+値はデバイス種別 devtype とディスクイメージパス path
+を ","(カンマ) で区切って並べた形式です。
+デバイス種別 devtype は以下のいずれかです。
-Specifies SCSI device. N is 0 to 7.
+Specifies SCSI device and image. N in the key is 0 to 7.
But don't specify ID 7 because the host uses it.
The value is in a form of device type devtype and
-the image path path separated by ","(comma).
-For now, only "hd" (hard disk) can be specified for devtype.
-If the path is relative path, it is from the VM directory.
-
+the disk image path path separated by ","(comma).
+devtype can be one of the following:
+
+- hd … HD drive
+
- cd … CD-ROM drive
+
- mo … MO drive
+
-例えば、nono.cfg と同じディレクトリに置いたディスクイメージ luna.img
-を使う場合、
-LUNA では通常 ID 6 をプライマリ HDD に割り当てるのでこんな感じになります。
-For example, if you use disk image luna.img placed in the same
-directory as nono.cfg,
-since LUNA usually assigns ID 6 to the primary HDD,
+devtype が hd なら path は省略できません。
+devtype が cd か mo なら path は省略可能です。
+イメージパスが相対パスなら VM ディレクトリからの相対パスになります。
+
+If devtype is hd, path cannot be ommitted.
+If devtype is cd or mo, path can be ommitted.
+If the path is relative path, it is from the VM directory.
+
+
+例えば、nono.cfg と同じディレクトリに置いた sd0.img を
+起動 HDD ディスクイメージとして使い
+(LUNA では通常 ID 6 をプライマリ HDD に割り当てます)、
+ID 5 に同じディレクトリの install.iso をセットした CD ドライブを、
+ID 4 に起動時メディアなしの MO ドライブを接続する場合は次のようになります。
+For example, if you use a harddisk image sd0.img placed in the same
+directory as nono.cfg
+(LUNA usually assigns ID 6 to the primary HDD),
+ID 5 for CD-ROM drive that loads install.iso in the same directory,
+and ID 4 for MO drive without media on boot,
write as following:
-spc0-id6-image = hd,luna.img
+spc0-id6-image = hd,sd0.img
+spc0-id5-image = cd,install.iso
+spc0-id4-image = mo
_EOM_
);
-config_item("spc0-idN-writeprotect = integer", <<<_EOM_
-指定の SCSI デバイスへの書き込みを無視するかどうか指定します。
+config_item("spc0-idN-seektime = integer", <<<_EOM_
+(LUNA and X68030 Only)
+指定の SCSI HDD の平均シークタイムを msec 単位で指定します。
+現在のデフォルトは 0 です (S・S・D!! S・S・D!!)。
+16 程度を指定すると幾分往時に思いを馳せることが出来るかもしれませんが、
+今の所あまり安定していません。
+Specifies the average seek time of specified SCSI HDD in msec.
+Currently, the default value is 0
+(This may be something like SSD :-).
+If you specify about 16 or so, you can feel nostalgic,
+but this feature is still unstable.
+_EOM_
+);
+
+config_item("spc0-idN-writeignore = integer", <<<_EOM_
+(LUNA and X68030 Only)
+指定の SCSI HD デバイスへの書き込みをイメージに書き戻すかどうか指定します。
0 なら通常動作(書き込みを行う)です。
-1 なら書き込みコマンドは成功したように振る舞いますが実際には
-ディスクイメージに一切書き戻しません。
+1 ならディスクイメージに一切書き戻しません。
+デバイスへ書き込んだはずのデータは Copy-On-Write の要領で、
+VM ディレクトリ内の一時ファイルに書き込みます。
+この一時ファイルはアプリケーション終了時に削除します。
fsck を気にせずカーネルのデバッグとかを行いたい場合にはどうぞ。
何が起きるか意味が分からない人は指定しないでください。
デフォルトは 0 です。
-Specifies whether nono ignores writing to SCSI devices.
-0 means normal operation (writes to the devices).
-If 1 is specified,
-nono will not actually write back to the disk image
-even though the write command is succeeded.
-nono's SCSI devices acts as
-write command is successfully done but it never writes back
-to the actual disk image.
+Specifies whether nono writes a writing to SCSI HD devices back
+to the diskimage.
+0 means normal operation (writes to the diskimage).
+1 means that nono will not write to the diskimage back.
+Data that the guest wrote to the device will be written to a temporary file
+in the VM directory,
+like Copy-On-Write.
+The temporary file will be removed when the application exits.
This is useful for kernel debugging because it does not require fsck
-after the kernel hangs.
-But don't use this flag if you don't understand this paragraph.
-The default value is 0.
-
+after the kernel hangs or reboots.
+Don't use this flag if you don't understand this paragraph.
+The default value is 0.
+
+ちなみに、メディアを書き込み禁止にしたい場合はこれではなく、
+イメージファイルの書き込み権を落としてください。
+By the way, if you want to make the media write-protected,
+clear the write permission from the image file
+(instead of this setting).
+_EOM_
+);
+
+config_item("spc0-idN-writeprotect = integer", <<<_EOM_
+(LUNA and X68030 Only)
+古いオプションです。
+代わりに spc0-idN-writeignore を使ってください。
+このオプションは開発用です。
+Obsolete.
+Use spc0-idN-writeignore instead.
+This option is for developers.
_EOM_
);
+config_item("sram-sync-ramsize = integer", <<<_EOM_
+(X68030 Only)
+SRAM の RAM 容量欄を実際の RAM サイズに合わせるかどうかを指定します。
+0 なら何もしません (実機と同じ)。
+1 なら、アプリケーション起動時に
+SRAM の \$ed0008.L (RAM 容量) を ram-size の設定値で更新します。
+この更新は、
+アプリケーション起動時に SRAM マジックが正しく書かれている場合のみ行われます。
+デフォルトは 1 です。
+Specifies whether to synchronize a RAM size field in SRAM
+with real RAM size or not.
+If 0, the application will do nothing (as same as the real).
+If 1, the application updates(synchronizes)
+\$ed0008.L (RAM size) in SRAM with configuration value of ram-size.
+This update is performed once only if
+the SRAM magic string is correct at the application startup.
+The default is 1.
+_EOM_
+);
+
+config_item("xxx-news-sic-ignore = integer",
+<<<_EOM_
+(NEWS Only)
+未実装の SCSI コントローラおよび DMA
+コントローラ領域へのアクセスを無視するか指定します。
+現状 (2022/08)、NetBSD/m68k はこの領域へのバスエラーを処理できず、
+uvm_fault のパニックを起こしてしまいます。
+1 にするととりあえず si(4) へのアクセスが不調に終わって
+(他に問題がなければ) NetBSD/news68k が起動できます。
+デフォルトは 0 です。
+このオプションは暫定的なもので将来廃止される予定です。
+
+Specifies whether to ignore accesses to unimplemented
+SCSI controller and DMA controller areas.
+As of Aug. 2022, NetBSD/m68k can not handle bus errors to this area,
+and it happens uvm_fault panic.
+Specifying 1 avoids it and NetBSD/news68k can boot.
+The default value is 0.
+This option is temporary and will be discontinued in the future.
+_EOM_
+);
?>
+
+
+About VM"); ?>
-
+68030 はキャッシュが未実装です。
+これに伴い命令の所要クロック数もまだ正しくなく、
+そのためクロック測定などでは正確な値が出ません。
+また ATC (アドレス変換キャッシュ) は実際の仕様とは異なり高速化してあります。
+68030 cache is not implemented.
+Therefore, number of clock cycle is not correct.
+ATC (Address Translation Cache) is differ from and faster than the real 68030.
+
+
+
+
+
+DIPSW 設定ウィンドウでの変更はアプリケーション起動中のみ有効です。
+またここでの設定は即 VM に反映されますが、
+LUNA の場合 DIPSW の状態を
+PIO(8255) がラッチするのが概ね起動時および再起動時のみとなっています
+(厳密には PROM と XP が云々ですが)。
+
+
+Memory Dump Monitor"); ?>
+
+LUNA も X68030 もキーボードは通常日本語キーボードです
+(LUNA には英語キーボードも存在するようですが…)。
+そのため、ホストが日本語キーボードの場合とそうでない場合のために
+2つの入力モードを用意しています。
+どちらも一長一短があります。
+
LUNA and X68030 has the Japanese keyboard
+(though I ever heard there are US keyboard for LUNA...).
+So nono provides two input modes
+for Japanese keyboard users and non Japanese keyboard users.
+Both have advantages and disadvantages.
+
+JP キーボードモードは、ホストが日本語キーボードであることを前提に
+対応するキーの押下、開放をその都度 VM に入力します。
+メリットとしては動作が実機に近くなり、
+特にキーリピート(をハードウェアが行わないこと)も忠実に再現可能です。
+デメリットは ALT + TAB やアクセラレータキーでメニューを開く場合などに
+キー入力が残ることがあることです
+(キーを押した後でフォーカスが外れるとキーを離したことが
+アプリケーションに通知されないため)。
+またホストが日本語キーボードでなければ使いづらいです。
+JP keyboard mode assumes that the host uses the Japanese keyboard.
+Each time you presses and releases a key,
+nono sends the corresponding key-pressed or key-released to the VM.
+One advantage is that it's close to the real machine behavior,
+and another is that it can reproduce
+the LUNA keyboard itself does not perform a key repeat.
+On the other hand,
+one disadvantage is that key sometimes remains pressed,
+especially when you enter ALT + TAB to switch the application
+or enter accelerator key to open the menu
+(If the application loses the focus after the key is pressed,
+the application will not receive the subsequent key release).
+And another disadvantage is that
+it will be hard to use for non Japenese keyboard users.
+
+一方、キャラクタ入力モードは、ホストから入力された「文字」を
+再び LUNA/X68030 のキーコードに解釈し直して VM に入力するモードです。
+例えばゲスト OS に "@" を入力したい場合、
+US キーボードなら [SHIFT] + [2] を、
+JP キーボードなら [@] キーを押しますが、
+どちらも VM には [@] キーの押下、[@] キーの開放が連続して送られます。
+US キーボードで [SHIFT] を押したことは通知されません。
+逆に "=" を入力したい場合、
+US キーボードなら [=] キーを、
+JP キーボードなら [SHIFT] + [-] を押しますが、
+どちらも VM には
+[SHIFT]押下 → [-]押下 → [-]開放 → [SHIFT]開放のシーケンスが送られます。
+このようにホストキーボードのレイアウトによらず、
+入力したい文字が入力できるようになり、
+通常のタイピングで困ることはないと思います。
+デメリットは、通常の文字入力以外のタイピングはほぼ出来ないことです。
+[SHIFT] キーを押したままにすることや、
+文字が入力できないキーの組み合わせは入力出来ません。
+もう一つのデメリットはキーリピート(をハードウェアが行わないこと)が再現できず、
+ホスト側のキーリピートが効いてしまうことです
+(本来キーリピートが動作しない ROM やブートローダでもキーリピートが効くことは
+一般ユーザからはメリットに感じられるかも知れませんが)。
+In contrast, in the character mode, when you type a character,
+nono re-converts it into the LUNA/X68030's key code and sends it to the VM.
+For example if you want to type "@" in the guest OS,
+you would press [SHIFT] + [2] on the US keyboard or [@] on the JP keyboard.
+In both cases, the sequence of
+[@]-pressed and [@]-released will be sent to the VM.
+Note that the fact that you pressed [SHIFT] key on the US keyboard
+will not be sent to the VM.
+Another example, if you want to type "=",
+you would press [=] on the US keyboard or [SHIFT] + [-] on the JP keyboard.
+In both cases, the sequence of
+[SHIFT]-pressed, [-]-pressed, [-]-released, and [SHIFT]-released
+will be sent to the VM.
+Thus, you can type what character you want to type,
+regardless of your keyboard layout.
+Of course there are some disadvantages.
+Firstly, it's hard to type any special characters,
+for example, you can not type any key conbinations
+that don't generate a character.
+Or you can not hold [SHIFT] key pressed.
+Secondly, the key repeat works (by the host),
+even though it should not work as a correct emulation
+(Although some of you may feel it an advantage).
+
+
+
+Keycode table in the character mode"); ?>
+