nono is OMRON LUNA-I emulator runs on NetBSD and etc. LUNA88K is still experimental support.
nono is OMRON LUNA-I emulator runs on NetBSD and etc.
Introduction
nono is OMRON LUNA-I emulator runs on NetBSD and etc. LUNA88K is still experimental support.
How to build
The followings are required for build. If you use NetBSD(pkgsrc), wxWidgets is pkgsrc/x11/wxGTK30 (Only OPTIONS:gtk2 is tested).
(NetBSD 以外でのビルドはサポートしていませんが)
Ubuntu 18.04 ではたぶん以下のパッケージが必要です。
You may need the following packages on Ubuntu 18.04
(though we won't support non-NetBSD platform).
アーカイブを展開したら以下のようにビルドします。
configure には環境変数 CC、CXX でコンパイラを指定することが出来ます。
また wx-config が標準的な名前で提供されていないために見付けられない場合には
環境変数 WX_CONFIG にパスを指定することが出来ます。
Extract the 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.
% ./configure % make depend % make % su # make install
2つの実行ファイルがインストールされます。
nono が GUI 版実行ファイル、
nono-cli がコマンドライン版です。
Two executables will be installed.
nono is GUI executable and nono-cli is
command line executable.
Command Line Option
Loads and executes host's file. If file is relative path, it is path from the current directory. If the file is gzip'd, it is automatically extracted. The supported file format (after extracting) is a.out (OMAGIC) or ELF. Actually, it only assumes bootloaders or kernels. If this option is specified at the same time as prom-image in configuration file, this option preceeds.
Specifies the VM directory/configuration file. If vmpath is a directory, make nono.cfg in that directory a configuration file. Or if vmpath is a file, make the specified file a configuration file. And in both cases, make the directory where that file is located a VM directory. If -c option is omitted, vmpath is considered as the current directory.
Boot as the fast mode. You can change this mode on GUI menu after boot, and the option only changes its initial state.
GUI Only. Specifies the initial fontsize on all sub windows. height is one of 12 or 16. The default value is 12. You can change this value on GUI menu after boot.
GUI Only. Specifies the initial main window scale in real number. You can change this scale on GUI menu after boot, but unlike this option, there are only a few preset choices (Should be improved in someday). The default value is 1.0
Shows the result of reading configuration file and parsing -V options.
Shows the version.
Use this name=value instead of name=configvalue specified in configuration file.
For developers:
Configuration
VM configuration file is nono.cfg (or the file specified by -c option) in the VM directory. Its syntax 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.
設定項目は次の通りです。
The configuration items are:
Specifies the VM type from the following. This field is mandatory.
luna | … LUNA-I | |
luna88k | … LUNA88K (experimental) |
Specifies the TCP port number that debugger listens. If 0, it will not listen. The default is 0.
Specifies the host driver of ethernet device. none, tap and bpf can be specified. If none, it doesn't make any communication with the host. tap or bpf is determined at build time for the host OS. If the host is NetBSD, OpenBSD, FreeBSD, or Linux, it's tap.
Specifies the host device name of ethernet device. If ethernet-hostdriver is tap, this field specifies the full path to the tap device.
デフォルトは auto で、この場合の動作はホスト OS ごとに異なります。
Linux なら "/dev/net/tun" を指定したのと同じです。
OpenBSD なら /dev/tap0 から /dev/tap9 まで
順番にオープンできるまで試します。
NetBSD (と FreeBSD) ならまず /dev/tap でクローニングを試み、
それが失敗すれば /dev/tap0 から /dev/tap9 までを
順番にオープンできるまで試します。
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.
Specifies status of the front panel DIPSW#1-1..#1-8 using 8 digit. "0" means DOWN and "1" means UP. The first character corresponds to #1 and 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
LUNA88K でのデフォルトは 11111111 です。
各スイッチの内容は以下のリンクを参照してください。
On LUNA88K, the default value is 11111111.
See the following link about DIPSW.
→ OpenBSD manual pages: boot_luna88k(8)
Specifies status of the front panel DIPSW#2-1..#2-8. The same syntax as luna-dipsw1 is used. The default value is 11111111.
NetBSD/luna68k のブートローダは、
DIPSW#2 が "11111111" なら自動的にカーネルをロードして実行し、
どれかでも "0" にするとプロンプトで停止するようです。
(本当は #8 だけで制御するつもりだったんじゃないかという気がします)
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)
Specifies refresh rate of all text monitor windows in Hz. It ranges from 1 to 60. The default is 20Hz. You can change this value on GUI menu after boot, but unlike this configuration value, there are only a few preset choices.
Specifies the MPU clock in MHz. The default value is 20MHz on LUNA-I, or 25MHz on LUNA88K.
Specifies the LUNA-I/LUNA88K'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. If the path is empty, internal emulated ROM will be used. The default value is empty.
実機を持っていない場合はこの値を空に (= デフォルトのままに) しておくと、
nono 内蔵のなんちゃって下位互換 ROM で起動します(現状 LUNA-I のみ)。
If you does not have the real LUNA machines,
you can boot with nono's internal downward compatible emulated ROM
if you set this field empty (or leave it as the default).
For now, it's only for LUNA-I.
LUNA-I 実機を持っている場合は
ROM ファイルを指定することで実機 ROM で起動できます。
ROM ファイルは実機の 0x41000000-0x4101ffff (128KB) を保存したものです。
今のところ 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) 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.
LUNA88K 実機の場合は 0x41000000-0x4103ffff (256KB) を保存したものです。
ただし現状サポートしていません。
For LUNA88K,
the ROM file is extracted from 0x41000000-0x4103ffff (256KB).
However, it's not supported yet.
Specifies the RAM size in MB. 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. On LUNA88K, 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.
Specifies SCSI device. N 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.
例えば、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,
write as following:
spc0-id6-image = hd,luna.img
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.
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. 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.
Try it
Tsutsui-san has provided NetBSD/luna68k 9.0 liveimage for this (Thanks as always).
Create a directory somewhere for nono (for example ~/nono/), and create subdirectory for individual VMs in it (for example ~/nono/luna).
Download imagefile from the following link, extract it and place it in the VM directory, ~/nono/luna.
http://teokurebsd.org/netbsd/liveimage/20200518-luna68k/
Create a configuration file nono.cfg in the same VM directory, ~/nono/luna, with following contents:
vmtype = luna spc0-id6-image = hd,liveimage-luna68k-raw-20200518.img
Run as nono -c ~/nono/luna. (NVRAM.DAT will be created automatically in the VM directory)
The emulated ROM Monitor will be executed. Then, only for the first time, entering the following can boot NetBSD.
この内容は NVRAM.DAT に記録されているので次回以降は直接 NetBSD が起動します。k [Enter] [Enter] d boot g x
The information you have just entered is recorded in NVRAM, so next time it boots NetBSD automatically.
Setup network
Add the following line to configuration file, nono.cfg.
次に VM ディレクトリかその親ディレクトリに nono-ifup、nono-ifdown というスクリプトを用意します。 nono は tap(4) をオープンし、 そのデバイス名を引数にこれらのスクリプトを呼びます。ethernet-hostdriver = tap
Then, prepare two scripts named nono-ifup and nono-ifdown in the VM directory or its parent directory. nono will open tap(4) and invoke these scripts with the name of the device as an argument.
例えば、NetBSD ホストで、ホストの wm0 セグメントに nono のゲスト OS を接続する場合、
For example, if you want to connect guest OS to host's wm0 segment
on NetBSD,
By default, /dev/tap is only accessible to privileged user. You need to chmod /dev/tap (without unit number) appropriately.sysinst 等で OS をアップグレードするとパーミッションが 600 に戻るのがハマりポイントです。
Create a bridge(4) interface, and add your physical interface to the bridge.
常用するなら設定ファイルに書いておきましょう。# ifconfig bridge0 create # brconfig bridge0 add wm0
If you want to use this all the time, you can put configuration file into /etc.
/etc/ifconfig.bridge0create up !/sbin/brconfig $int add wm0# /etc/rc.d/network restart
Return to non-privileged user, and create following two scripts in the VM directory or its parent directory. In addition, you need to set up sudo separately.
nono-ifup#!/bin/sh sudo /sbin/ifconfig $1 up sudo /sbin/brconfig bridge0 add $1
nono-ifdown#!/bin/sh sudo /sbin/brconfig bridge0 delete $1 sudo /sbin/ifconfig $1 down
% chmod +x nono-ifup nono-ifdown
Run nono, and open "Monitor > Host > Host Network" window from menu. It's OK if you can see "NetDriver: BSD tap" (in this case).
Changes
License
Contact us
If you find any problems, please let me know. You may write in English.
About contributes
If you provide a patch to nono, you must agree to the following conditions:
All your work are operated or distributed under the nono license.
The license may be changed in the future.
Do not exercise your author's rights.
nono uses source code with the following advertising clause.
This product includes software developed by Gordon Ross
This product includes software developed by the University of California, Lawrence Berkeley Laboratory.