22-Aug-2021
[GP2009Nおぼえがき]

久々にGP2009N(POCSAGページャ)遊びをしようとして、Pager Setting User Guide 0810にあるProgrammer_x64x32.zip(Programming adapter use Pagerid Chip)を動かそうとして詰まったのでメモ。

添付のドライバをインストールしようとしてもどうにもならないので、Silicon LabsのInterface Direct Access DriversのUSBXpress Dev Kit(USBXpress_Install.exe)をダウンロードしてインストール(要ユーザ登録)。GP2009NプログラミングケーブルがUSBXpress Deviceとして認識されればok。

これでGP2012.exeを起動すれば、READ(F4)/WRITE(F6)が実行可能になっているはずです。

ここからが本題。Retekess T128が安い(これを書いている時点だと\5000の物が\4200で、\300割引クーポンの適用が行える上に今月末まで送料が無料になっている)ので、これってもしかしてPOCSAGページャとして使えるのではないか…と睨んだ以上は試してみるのが礼儀なのかなと。

箱を開けてちょろっと触った感触では、何となく別物な気がします。手元にあるのがGP2009NなのでGP2009Wとの比較ではないのですが…メニュー構成は全く異なっており、USB microBコネクタを装備するためGP2009Nのケーブル(miniB)も使えません。

回答については期待せず、とりあえず販売元へ質問は投げてみましたが…分からないままにしておくのも面白くないので、とりあえず分解してみます。

tp1014360.jpg tp1014361.jpg tp1014362.jpg tp1014364.jpg tp1014365.jpg

トイドローンなんかに使われていそうな802035 3.7V 400mAhなバッテリーに、MEGAWIN MA82G5B32AD32(High-Performance 1T 8051 core, 1.8〜5.5V, periphery with ADC series, 32kbyte, LQFP, 32pin)、MICREL MICRF211 AYQS他色々…ということで、MICRF211がOOK/ASKなレシーバという時点でT128はPOCSAGに対応する可能性は低いと判断しました。54.25kg(18:50)

15-Aug-2021
[OpenWrt予備機材の用意?]

OpenWrtのHardwaredataを見ていると、12-Mar-2018に購入したLinksprite pcDuinoに対応している(しかもディスクイメージまである)ので、これを使って非常用のルーターを用意することにしました。pcDuino自体にはLANポートが一つしかありませんが、何かに使おうと思って以前入手していたNintendo Wii向けのUSB-LANアダプタでこれを補います。

面倒なので今回はuciも使い、IPv4が通る程度の設定に留めます。すみませんが動作確認はまだ行っていないので、この手順で動作するかは怪しいです。

USB-UARTケーブルの接続(しょっちゅう忘れるのでメモ)
pcDuino Hookup GuideのSerial Debuggingにあるように、左側にUSBポート/右側にLANとHDMIをおいた場合はRX/GND/TXの順、信号レベルは3.3Vなので注意
ディスクイメージの書き込み
これを書いている時点だとzcat openwrt-19.07.8-sunxi-cortexa8-sun4i-a10-pcduino-squashfs-sdcard.img.gz | dd of=/dev/sdbをLinux上で、メディアは1GBでもおつりがくる
起動とパスワードの設定
enterキーを叩いてシェルを起動し、passwdで設定
作業用のeth0設定(1)
/etc/configにあるdhcp, firewallはそれぞれdhcp.bak, firewall.bakにリネームして無効化し、/etc/config/networkにあるoption type 'bridge'の削除とoption ipaddrを適当なstatic IPアドレスに変更し(これは一時的なもの、後で直します)、rebootで再起動
作業用のeth0設定(2)
このままでは外へ出られないのでip route add default via <既に稼働しているルータのIPアドレス> dev eth0でルートを設定し、echo "nameserver 8.8.8.8" > /tmp/resolv.conf.autoで仮のDNSを設定(/etc/resolv.conf→/tmp/resolv.conf→/tmp/resolv.conf.autoとなっている)
必要なパッケージの取得
opkg update; opkg install diffutils kmod-usb-net-asix
USB-LANのアダプタの確認
USB-LANアダプタを接続し、ip addr show
firewallの設定
OpenWrt化したEdgeRouter LITE-3の/etc/config/firewallを使う
DHCPの設定
LANケーブルを外した後に/etc/configにあるdhcp.bakをdhcpに戻し、uci set dhcp.@dnsmasq[0].domain=<ドメイン名>; uci set.dhcp.lan.startとlimitを適宜設定; uci set dhcp.lan.dhcp_option=6,8.8.8.8,8.8.4,4; uci commit
eth1の設定(WANポートとして使用する)
uci set network.wan=interface; uci set network.wan.ifname=eth1; uci set network.wan.proto=dhcp; uci set network.wan6=interface; uci set network.wan6.ifname=eth1; uci set network.wan6.proto=dhcpv6; uci commit
eth0の復帰(LANポートとして使用する)
uci set nework.lan.ipaddr=<このルータが使用するIPアドレス>; uci set network.globals.ula_prefix=<ULA prefix>; uci commit

設定に疑問があった場合はuci setの代わりにuci showで元の設定値を確認すると良いかもしれません。結局のところ、USB-LANアダプタがeth1として認識され、/etc/{network,dhcp,firewall}によりeth0, eth1のアドレスとファイヤウォールが適切に設定されていれば良いはずです。

とりあえずOpenWrt化したEdgeRouter LITE-3の設定内容とほぼ同じになっているのでおそらく動くはずなのですが…時間のある時に動作確認を行いたいところです。54.60kg(21:45)

18-Aug-2021補足:OpenWrt化したEdgeRouter→pcDuinoルーター→Windowsマシンと繋いでみましたが、一応動くようです。googleのスピードテストで測ってみた感じだと、EdgeRouterのみで240Mbps程度、pcDuinoルーターを通すと80Mbps程度になります。Allwinner A10という今となっては古い石の載ったCPUボードでこの程度の性能が出れば、非常用としては十分です。

14-Feb-2022補足:ネットワーク越しにkmod-usb-net-asix他を落としていますが、OpenWrtを書き込んだmicroSDをLinux機にマウントし、kmod-mii, kmod-usb-net, kmod-usb-net-asixをmicroSDの/root辺りに書き込み、OpenWrt起動後にopkgでインストールする方が楽かもしれません。

14-Aug-2021
[OpenWrtでNATv6を使う]

昨日の続き。NAT6 and IPv6 masqueradingの手順に従って作業。

opkg update; opkg install kmod-ipt-nat6の後に"2. Network and DHCPv6"のIPv6 by defaultとdefault IPv6 routeを行うとありますが(要するにIPv6 extrasにある手順全て)、これが何やってるんだかよく分からないのでメモしながら進めます。

Using IPv6 by default
これによりconfig globals 'globals'のoption ula_prefix 'fdXX:〜'が'ddXX:〜'になって、衝突防止のため'd'で始めているとULA prefixに書いてある…が、これは設定しない(そもそも昨日の時点でEdgeRouterの頃から使っているULA prefixを設定済みなので)
Disabling source routing
config interface 'wan6'にoption sourcefilter '0'を追加、デフォルトは1なのでこれは設定
Announcing default IPv6 route
config dhcp 'lan'にoption ra_default'1'を追加、これもデフォルト(0)と異なるため設定
Disabling GUA prefix
config interface 'lan'にoption ip6class 'local'を追加、デフォルトは制約無しのためこの設定も必要
Missing GUA prefix
uci: Invalid argumentというエラーとなり設定ファイルへの変更が行われないため、とりあえず無視(何か問題が起きたら今後対応する)

viで書き換えても、uci show network.lan.ip6classのようにして設定値を確認することが可能です。

EdgeRouterの時はnext-hopを調べて設定するという作業が必要でしたが、OpenWrtの場合はifstatus wan6やip -6 route showの結果を見るに、その必要は無さそうです。

次に"3. Firewall"の設定。

masq6の有効化、Allow-ICMPv6-Forwardの無効化スクリプトを実行すると''\''1'\'''のようにおかしな値が設定されるため、

スクリプトを使わず、viなりuciなりで設定した方が良さそうです。

この後の"Save the NAT6 firewall script"は使わないで、NAT6 simplifiedの手順に進みます。これはcloning the IPv4 setupとあるように、iptables-saveの内容をip6tables-restoreに食わせるというシンプルなものです。DNAT/SNATの設定を行っていなければ、iptables-save -t nat | ip6tables-restore -T natとでもしてテストを行ってから作業すると良いかもしれません。

指示に従い/etc/firewall.nat6を作成し、/etc/sysupgrade.confの最後に/etc/firewall.nat6の一行を追加。そして/etc/network/firewallの最後に

config include 'nat6'
        option path '/etc/firewall.nat6'
        option reload '1'

を追加します(uci越しの方が手っ取り早いし、コメントを消したりフォーマットを整えてくれるのでこちらの方が良いかもしれません)。

Providing custom DNS with DHCPを参考にして、RAで通知するDNSを/etc/config/dhcpのconfig dhcp 'lan'にlist dns '2001:4860:4860::8888'とlist dns '2001:4860:4860::8844'(DNSサーバの数だけlist dnsを記述)を追加しておしまい。

完全復旧まで2日も使ってしまいましたが、慣れてしまえばEdgeRouterよりも手早く作業が出来そうですし、OpenWrtさえ動いてしまえば色々な機材で対応できそうです。MicroTik hEX(RB750Gr3)のRouterOSはNATv6非対応らしいのですが、OpenWrt化して使えば良い訳で。

復旧させたEdgeRouter LITE-3はeth1ポートの具合が悪いので、まだ動いているうちに次の機材の調達はしておいた方が良さそうですね。RB750Gr3にするか、他に何か良いものがあればそれか…55.25kg(08:55)

13-Aug-2021
[EdgeRouter LITE-3が死んだ?]

こんな風に起動途中に止まってしまい、内蔵のUSBメモリに記録された設定内容の吸い出しを試みたところI/Oエラーが多発していました。どうやら、USBメモリが壊れたようです。

USBメモリを交換してEdgeOSの再インストールを行えば問題は解決しそうですが、ERLite3のUSBメモリを交換したによるとUSBメモリを選ぶとあり、EdgeOSをインストールするのもなかなか手間なのでまずは手元のGH-UFDMR8GX2にOpenWrtを書き込んで試してみることにしました。OpenWrtが無事起動しているのを見るに、当たりを引いたようです。

USBメモリの作成はOpenWrtのUbiquiti EdgeRouter Liteにあるように、

で行います。

OpenWrtを使うのは初めてなのですが、デフォルトではeth0がLAN(192.168.1.1/24)、eth1がWAN(DHCP,DHCPv6)なので、そのままでも使えそうに見えます。とはいえいくつかの項目については変更が必要そうなので、シリアルケーブルを使って115200bps/8N1で接続し、ネットワークへ繋げる前に…

パスワードの設定
シリアルコンソールを繋いだ状態でenterキーを叩くとシェルが起動し、パスワードが未設定である旨が表示されるのでpasswdで適宜設定
基本的な設定の所在
/etc/configにあるとThe UCI systemに書いてあるのでそこを参照、uciコマンド越しでも良いのだけどとりあえずviで/etc/config/networkや/etc/config/dhcpを直接書き換える
network: eth0(LAN)の設定 (IPv4)
config interface 'lan'→option ifname 'eth0'の後にあるoption ipaddrを適宜変更
network: ブリッジの無効化
config interface 'lan'→option ifname 'eth0'の後にあるoption type 'bridge'はコメントアウト
network: IPv6 ULA(Unique Local Address)の設定
config globals 'globals'→option ula_prefixを適宜変更
network: WANポートをeth1→eth2に変更(eth1の調子がなんとなく悪いので)
config interface 'wan'および'wan6'の、option ifname 'eth1'を'eth2'に変更
dhcp: ドメインの設定
/etc/config/dhcpにある、config dnsmasqにあるoption domainにドメインを設定
dhcp: DHCPのアドレス範囲の設定
config dhcp lanのstart〜limitを変更
dhcp: IPv6対応の確認(とりあえずDHCPv6は使わずSLAACのみ)
config dhcp lanにoption dhcpv6 disabledとoption ra server、option ra_management 0とする
dhcp: 通知するDNSサーバの設定
config dhcp lanにlist dhcp_option '6,8.8.8.8,8.8.4.4'を追加(DNSはお好みのサーバのIPアドレスを記述)、最初の6,についてはBOOTP / DHCP optionsを参照

上記の設定を行いました。あとの設定はrebootしてネットワーク接続後に行いましたが…

diffのインストール
opkg update; opkg install diffutils(参考:OpenWrt/LEDEのbusyboxでdiffが無効になってる件
LuCIの削除
opkg --autoremove remove luci(参考:How to properly remove LuCi from OpenWrt

これらは好みの問題なので無理に行う必要はありません。仕上げにポートスキャナでWAN側のポートを念のため調べてみましたが、特に開いているポートは無さそうに見えます。

NATv6についてはNAT6 and IPv6 masqueradingの手順になるのでしょうか、今日はもう作業をしたくないので後日に回します。

EdgeRouter Xを急ぎ発注しなければ駄目か?と思っていたのですが、そこまで高価なルーターでなくとも、OpenWrtの動きそうな適当なものを予備として置いておけばとりあえずは対応できそうなので一安心です。54.20kg(23:00)

15-Aug-2021補足:Windows10の挙動を見るに、DNSの問い合わせ順序はDHCPv6で得たDNSv6サーバ→DHCPで得たDNSサーバ(IPv4)→SLAACで得たDNSv6サーバになるようです。よってDNSv6サーバによる名前解決を優先させたい場合はoption dhcpv6 serverとoption ra_managemnt 1にして、SLAAC+DHCPv6構成の方が良いかもしれません(とはいえ、DNSv6サーバを優先させてもFirefox等のwebブラウザがIPv6接続を優先してくれるとは限らないのですが…)。

12-Aug-2021
[z88dk覚え書き]

OpenBSDでビルドする場合、ここにも書いてあるように

  1. CC=cc CXX=c++ CPPFLAGS=-I/usr/local/include ./build.sh
  2. CC=egcc CXX=eg++ CPPFLAGS=-I/usr/local/include ./build.sh

のどちらかとする必要があります。C++11が使えればgccだろうとclangだろうと構わないので、システムデフォルトのコンパイラがclangならa.、portsのgcc(egcc)を使う場合はb.で進めれば良いと思います。

CPPFLAGSは、sdccのビルド時にboostのヘッダを見つけられずに止まってしまうのを避ける目的で付けています。sdcc無しのビルドは試したことが無いので分かりませんが、その場合(sccz80のみ使う場合)であれば省略できるのかもしれません。

コンパイラが使えるようになったので、Party ParrotをMSXでやってみました。作ったROMイメージをWebMSXに食わせることで(WebMSXが起動します)誰でも見られるのはすごいですね…とはいえ、光過敏性てんかん等を誘発する可能性もあるかもしれないので閲覧の際はご注意を。

GitHub上のソースコードを見れば分かることですが、

ということをやっています。データは機械的に作ってしまっているので、綺麗に見せるにはもう少し調整が必要です。

作成にあたり、MSX BASIC基礎 VRAMについて、やさしく説明します!クロス開発 z88dkz88dk で作ったものを MSX の版権を心配せずに WebMSX で公開MSX Datapack wiki化計画を参考にしました。この場を借りてお礼申し上げます。55.20kg(07:10)

折角なのでMSX2対応版も作ってみました。起動時に(テンキーではない方の)"1"キーを押したままにするとMSX1モードとして動くような機能を仕込んでいますが、(原因は分からないのですが)うまくいかないことがあるようです。54.40kg(18:05)

10-Aug-2021
[大陸の覇者:散々悩んだのですが流石に今回は課金しました…★5槍がどうしても必要だと判断したので]

オクトパスの日記念ガチャでサイラス(ただし★4)、カルドナガチャは見事に★5を引き当てて、揃っていないキャラクタは

★5
ギルデロイ(槍), ハンイット(弓), ニコラ(短剣), トレサ(槍), ドロテア(槍), ティキレン(剣), リュミス(斧), グロッサム(扇), ステッド(杖), ヴァルカン(本), アデル(短剣), イデア(剣), リトゥ(短剣), ムールゥ(本), ガートルード(斧), プロメ(杖), オデット(本), プリムロゼ(扇), ユーニィ(弓), コウレン(剣)

こんな感じ。ガチャでは★4も適当に被ってくれたおかげで銀導石の欠片も適当に集まり、テレーズも★5へ昇格です。

以下、★4.5。

★5だけで見ていくと、剣(2)短剣(2)弓(2)杖(3)斧(2)扇(2)本(2)槍(1)の16人。やっとどの武器も一人は★5が居る状態になりました。属性で数えるなら風(6)闇(1)火(2)雷(2)光(3)氷(2)と風に偏っているのはいつものことで…これ、複数属性持ちのサイラスはどう計上すれば良いのでしょう(★4→★5になった時に考えれば良いですかね)。

今後実装されるであろう総力戦に対し★3★4も鍛えておかないといけないといった噂がまとめサイトで出ているようですが、だとすると今鍛えるべきは★3の八つ子で良いのかという問題が出てきます。他にも有用な★3はいますし、それよりもむしろ★4を鍛える方が戦力になる訳ですから。54.45kg(14:30)

10-Aug-2021
[z88dkを使ってみる]

とりあえずVoid Linux上で手順に従ってz88dkのビルドと、C言語化したASCIIARTベンチマークをこんな感じにコンパイル。

ソースコードはconst static宣言がエラーとなっため、constに直しています。ファイルI/Oが無ければ-lndosを追加してlibndosを使うとオブジェクトが小さくなるそうなので、単に計算して表示するだけのこのプログラムにおいてはこれを使うことにします。

-create-appオプションは省略しました(付けたとしても、MB-ZCCND.COMというすべて大文字のファイル名で、-oオプションで記述したファイル名と同じ内容のものが作られるだけなので)。得られたオブジェクトをblueMSX/MSX-DOS上で動かすとこうなりました。

t0000.png

雑に測った感じだと、MSX2のエミュレーションでlibndosの有無に関わらず4分22秒、BASIC版を動かした場合は14分07秒でした。MSXPen上でBASIC版を動かした場合も大体同じくらいの時間になり、確かにC言語/マシン語の威力は大きいと言えそうです。

折角なのでsdcc版のオブジェクトも以下の手順で作り(clibの指定により-compiler=sdccが指定されたとみなされます)、

-create-appを付けることで得られたMB-SDCC.COMをblueMSX/MSX-DOS上で実行し、簡単に実行時間を測ったところ4分00秒。

このオプションを付けても付けなくてもmb-sdcc_CODE.bin, mb-sdcc_UNASSIGNED.binが生成され、mb-sdcc_CODE.binとMB-SDCC.COMが同一であることは確認しているのですが…これらのファイルの意味についてはよく分かりません。

z88dkの使い方の詳細についてはもう少し調べる必要がありますが、パフォーマンスをあまり考えずお手軽に使うならzccのデフォルトであるsccz80を使えば良さそうです。

実は今までZ80向けにC言語で何かを書いてみたということが一度もなかったのですが、(今更気づいたのかと言われそうですが)ここまで環境が整っているのならZ80/MSX遊びに戻るのもまた一興かなという気がしています。53.80kg(04:45)

08-Aug-2021
[ASCIIART(マンデルブロ集合)ベンチマークを]

8752同等品でBASIC-52が動いたで取り上げられているASCIIART(マンデルブロ集合)ベンチマーク、大元はPorting CP/M 68K to a repurposed ADC Soneplex MPU board辺りにあるBASICのコードのようで、おそらく誰もがやっていると思うのですが自分もC言語化してみましたpastebinに置いてあるものと同じです)。

ベンチマークの大元のページにはGCC(compiler) (68k @ 12 MHz) 0:20なる記述もあり、イマドキのマイコンで動かしてみたらどうなるのか気になったのでスケッチにしてArduino UNO(ATmega328P @ 16MHz)で動かしてみました。2〜3秒程度という、もはやベンチマークと言えるのかどうか謎な領域へ突入するくらいの速さとなっています。

FS-FD1AというPanasonicが出していたMSX用FDDに付属していたフロッピーディスク、この中にはMSX-DOSとワープロ向けのJIS第二水準フォントとデモプログラムが入っています。これに加えてPIC1〜PIC4というファイルがあって、SCREEN5で表示させるとこんな画像が表示されます(流石にオリジナルのファイルを上げても現代の環境では簡単に表示できないので、PNG化しています)。

pic1.png pic2.png

pic3.png pic4.png

FS-FD1Aを入手した当時はマンデルブロー集合だのフラクタルだのといったものを知らなかったのですが、ある意味これが出会いだったのではないかと今となっては思います。このような画像が何故あのフロッピーの中に入っていたのか、今でも分からないままですけどね…54.00kg(07:15)

01-Aug-2021
[QSY]

09-Aug-2020に購入したWA21、部屋の中にワイヤーを雑に広げ、IC-7200に繋いでダイヤルをくるくる回してみたのですが…21MHz帯全域にわたってS4〜S5程度のノイズが乗っています。24MHz帯も同様で、50MHz帯となるとS7近いノイズがあり、とても運用できそうにありません。1.9MHz〜18MHz, 28MHz帯についてはこのようなノイズはありません。

7MHz/14MHz帯が悪くない感じなので、短縮ダイポールを張れればそれも良さそうではありますが…場所と費用を考えるに、21MHz向けのダイポールを詰めて28MHz帯に出るしか選択肢は無さそうです。

とりあえず、アンテナを実際に張る前に状況を確認できてよかったです(って、何故今までやっていなかったんだと突っ込まれそうなのですが)。あとは居間〜屋根裏間のケーブルが引き回せるかどうかの確認ですね。暑い季節に屋根裏に入ると生命の危険がありますので、秋以降にやることになると思いますが…53.45kg(21:55)