| {$h}\n";
print " | {$m}\n";
print " | {$d}\n";
@@ -1452,13 +1845,30 @@ __EOM__;
-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.
+68030 ATC (アドレス変換キャッシュ) は実際の仕様とは異なり高速化してあります。
+68030 ATC (Address Translation Cache) is differ from and faster than the real 68030.
+
+
+
+
+
+いくつか未実装の命令があります。
+キャッシュは未実装で、
+それに伴いキャッシュ制御を行う新設命令 CINV*, CPUSH* も未実装です。
+MMU、ATC はまだ怪しいです。
+FPU はある程度動作すると思いますが
+例外を起こす細かい条件は未検証のため、
+本来は例外が起きてソフトウェア (FPSP) で処理するはずのものが
+68881 相当のハードウェアエミュレーションで実行出来てしまうという
+通常あまり困らないタイプの問題は存分にあります。
+
+命令の実行サイクルについてはある程度似せているつもりですが、
+そもそも 68040 はパイプライン方式なので 68000 時代のようにサイクル数を
+正確にエミュレーションすることはおそらく不可能です。
+
+68040 は X68030 と virt-m68k でのみ選択可能です。
+NEWS に 68040 搭載モデルはなさそうなのと、
+LUNA では 68040 搭載モデルは LUNA-I ではなく LUNA-II になるからです。
@@ -1484,10 +1894,220 @@ Human68k を起動する場合はお手
+
+
+
+X68030 のグラフィック画面を一部実装しています。
+これにより NetBSD/x68k の標準設定の X サーバは起動します。
+グラフィック画面として実装しているのは 1024x1024 (16色) モードのみです。
+ビデオコントローラは、画面間プライオリティと画面オンオフを実装しており、
+テキスト画面とグラフィック画面の優先度を変更することは出来ます。
+ただし合成や半透明合成は未実装ですので実質切り替えられるだけです。
+スクロール等 CRTC の機能も未実装です。
+
+
+
+
-NEWS エミュレーションは未完成です。
-今の所 -X でカーネルを直接起動することしか出来ません。
+NEWS エミュレーションは今の所
+-X オプションでカーネルを直接起動することしか出来ません。
+PROM も NetBSD/news68k
+の起動と終了に最低限必要な程度が誤魔化してあるだけです。
+また、デバイスの配置や、デバイスが存在しないアドレスへのアクセスが
+どうなるかなどは実機確認をしていないため分かりません。
+従って、動くものは動く、程度のものでしかありません。
+というかネタです。
+
+
+
+
+
+QEMU の "virt" (架空ハードウェア仕様)の互換機wをサポートしています。
+NetBSD/virt68k が動作します。
+-X オプション (または設定の exec-file)
+でカーネルを、
+設定の exec-bootparam でルートデバイスを
+それぞれ指定してください。
+インストール時には --initrd (または設定の exec-initrd)
+で RAM ディスクイメージも指定します。
+Supports QEMU "virt" virtual hardware's compatible machine and
+it can run NetBSD/virt68k.
+You need to specify the kernel by -X option
+(or exec-file in configuration).
+If you want to install, you also need to specify the ramdisk image by
+--initrd option (or exec-initrd in configuration).
+
+
+
+
+
+virt-m68k (や NEWS) のようにシリアルコンソールしか持たない機種のために、
+メイン画面でシリアルコンソールの端末エミュレーションを実装してあります。
+hostcom-driver = cons とすることで nono のメイン画面に
+シリアルコンソールの内容が表示されます。
+カラーは現状サポートしていませんが、
+ボールド、イタリック、下線などはある程度サポートしています。
+バックログはありませんので、バックログが必要なら
+stdio 等を使ってください。
+
+
+
+
+
+usermode ネットワークでは nono 自身が
+NAT ルータ、DHCP サーバ、DNS サーバの機能を持ちます。
+ルータと DHCP サーバのアドレスはネットワークアドレス +1 (デフォルトでは 10.8.0.1)、
+DNS サーバのアドレスはネットワークアドレス +2 (デフォルトでは 10.8.0.2) です。
+IPv6 ルータのアドレスはネットワークアドレス +1 (デフォルトでは fd08::1)、
+DNS サーバのアドレスはネットワークアドレス +2 (デフォルトでは fd08::2) です。
+
+
+
+
+
+現実の Nereid はイーサネット/メモリ/USB の複合拡張ボードで、
+このうちメモリは、メインメモリの増設に使える他、
+メインメモリとして使わなかった領域をバンクメモリとして使うことも出来ます。
+nono ではこの Nereid の機能のうちイーサネット (RTL8019AS)
+とバンクメモリのみサポートします。
+メインメモリの増設機能はエミュレータでは意味がないので実装しません。また
+USB (SL811HS/T) の実装予定はありません。
+ Nereid in the real world is a combined Ethernet/memory/USB expansion board.
+Of these, the memory can be used to expand main memory,
+and areas not used for the main memory can be used as bank memory.
+nono supports only ethernet (RTL8019AS) and bank memory among
+the functions of the Nereid expansion board.
+Main memory expansion is not supported because it's meaningless on emulators.
+Also, USB (SL811HS/T) is not planned for implementation.
+
+Nereid は DIPSW6,7 によりアドレス・割り込みベクタの組を2通り指定できるため、
+2枚まで同時に運用することが出来ます。
+本来 SW6 と SW7 は (衝突さえしなければ) 任意に組み合わせることが可能ですが、
+nono では簡便のためボード #0 は SW6,7 が OFF、
+ボード #1 は SW6,7 が ON と固定しています。
+ Since Nereid can set to two different combinations of addresses and
+interrupt vectors by DIPSW,
+so up to two boards can be operated at the same time.
+Originally, SW6 and SW7 can be arbitrarily combined
+(as long as they don't collide), in nono however, for simpility,
+SW6 and SW7 are fixed to be OFF on board #0, and
+SW6 and SW7 are fixed to be ON on board #1.
+
+
+ | #0 (nereid0-*) | #1 (nereid1-*)
+ |
|---|
ベースアドレス・割り込みベクタ
Base address and interrupt vectors
+ | $ece300,$f9,$fb (SW7=OFF)
+ | $eceb00,$f8,$fa (SW7=ON)
+ | バンクメモリウィンドウ
Bank memory window
+ | $ee0000 (SW6=OFF)
+ | $ef0000 (SW6=ON)
+ |
+
+バンクメモリは、メインメモリとして使わなかった領域を使用します。
+そのため実機でもバンクメモリの容量は DIPSW のメインメモリ割り当て設定
+(SW1-5) に依存します。
+nono に関係する結論だけでいうと、
+メインメモリへの割り当てを一切行わない場合はバンクメモリは 16MB 確保でき、
+メインメモリへの割り当てをいくらかでも行うとバンクメモリは 4MB となります。
+設定の nereidN-ram-size はこの部分を指定していることになります。
+またこの容量とは独立に SW8 でバンクメモリの有効・無効を指定できますので、
+ nereidN-ram-size が 0 (以下) というのは SW8
+でバンクメモリを無効にしたことに相当します。
+ Bank memory uses memory areas not used as the main memory.
+So the bank memory size depends on the main memory settings (SW1-5).
+As a result,
+only if you don't allocate any memories to main memory,
+the bank memory can be allocated 16MB.
+Otherwise, the bank memory will be allocated 4MB.
+Thus, nereidN-ram-size specifies this value.
+Also, SW8 specifies enable/disable of the bank memory regardless of the size,
+nereidN-ram-size = 0 (or less) means disabling the bank memory.
+
+
+
+Time Synchronization on NetBSD/x68k"); ?>
+
+X68030 でゲスト OS に NetBSD/x68k を使う場合、
+nono と NetBSD/x68k を次の通りに設定すれば
+nono をフルスピード動作にしてもゲスト OS の時間がずれなくなります。
+まず nono の設定ファイルに以下を追加します。
+
+clock-sync = real
+
+ゲストの NetBSD/x68k を起動し、
+ /etc/sysctl.conf に以下の1行を追加します。
+
+kern.timecounter.hardware=clockinterrupt
+
+さらに /etc/rc.conf に
+
+ntpdate=YES
+ntpdate_hosts=ntp.nict.jp
+
+などと設定します (NTP サーバはお好みで)。
+sysctl の設定によって、ゲスト OS の時計は「この設定が有効になった時点から」
+実時間間隔を刻めますが、
+電源オンからここまでにずれた分が解決できるわけではありませんので、
+必然的に時計を合わせる必要もあるためです。
+これで再起動すると次回からはフルスピードでも実時間を刻めます。
+(再起動せずに有効にしたい場合はこの設定の後 root ユーザで
+
+/etc/rc.d/sysctl start
+/etc/rc.d/ntpdate start
+
+を実行してください)
+
+
+
+
+
+X68030 で Windrv を一応サポートしています。
+Human68k からホストのファイルシステムをアクセスする機構です。
+従来の Windrv とはホスト OS の前提が異なるため、
+既存実装からの移植ではありませんし、
+そもそも Human68k とホスト(UNIX)ファイルシステムの差異による制約も多くあります。
+これらを把握してから使用してください。
+
+- ファイル名は21文字すべて認識します。
+22文字以上(というか 18.3 形式以外)のファイル名はゲストからは見えません。
+
- ファイル名中の ASCII 以外の文字には現状対応していません。
+これらの文字を含むファイルはゲストからは見えません。
+
- マルチピリオドには対応していません。
+このようなファイルはゲストからは見えません。
+
- 大文字小文字は区別しません。
+大文字小文字だけが違う同名のファイル (例えば a.BAK と a.bak) があると、
+検索(FILES/NFILES) には現れません。
+この状況で a.Bak (大文字小文字を区別していれば違うファイル)
+を新規作成しようとすると (大文字小文字を区別しないゲスト OS からは
+a.Bak というエントリは存在しないように見えるにも関わらず)
+作成できなくしてあります。
+
- ファイルサイズが 2GB 以上のファイルはゲストからは見えません。
+
- Human68k 側の属性は A(アーカイブ)/D(ディレクトリ)/R(読み込み専用)
+のみ対応しています。
+S(システム)/H(隠しファイル)属性は保存されません。
+
- ホストのシンボリックリンクは、リンク先の
+ファイルもしくはディレクトリとして見えます。
+またリンク先が Windrv のルートパスの外側を指していても構いません。
+
- ファイルのロックには対応していません。
+
- WindrvXM.sys による拡張動作には対応していません。
+windrv 互換として動作します。
+
- TwentyOne.x は現状 +T/-C/-P/-S (いずれもデフォルト) 相当だと思います。
+TwentyOne.x が常駐していないとか、
+これ以外のオプションの時にどうなるかは把握していません。
+
- lndrv.x によるゲスト側のシンボリックリンク機能には未対応です。
+
+
+Windrv を使用する場合、まず nono
+の設定ファイルに windrv-path を設定します。
+次にゲストの Human68k の CONFIG.SYS に WINDRV.SYS (または WindrvXM.sys)
+を設定してください。
+
+
+DEVICE = \SYS\WINDRV.SYS
+
+
@@ -1529,8 +2149,8 @@ the user has specified full speed mode a
the VM is running in synchronized mode.
This will happen when any of the following occurs:
|