mieki256's diary



2019/05/01(水) [n年前の日記]

#1 [windows] ビデオカードのDCHドライバーとやらでハマった

メインPCの Windows10 x64 を、1803 から 1809 (Windows 10 October 2018 Update) にアップデートしたのはいいけれど。GeForce Driver が Windows Update 経由でインストールされて、なんだか気持ち悪いなと。自分で任意のバージョンをDLして、インストールしたい。

NVIDIA の公式サイトから GeForce Driver をDLしてインストールしようとしたものの、インストーラを実行後、環境をチェックした直後に、インストールできないとメッセージが表示されて止まってしまう。

さてはゴミでも残っているのかと思って、コントロールパネル経由で関連するプログラムをアンインストールしたり、DDU(DIsplay Driver Uninstaller) で痕跡を削除してみたものの、効果は無く。Windows10 を再起動すると、また Windows Update 経由でドライバがインストールされてしまって、その状態ではドライバのインストーラが、また先に進まない状態になる。

色々検索してみたところ、どうも Windows10 1809 からドライバの種類が変わっているという話があって。標準(Standard)とは別に、DCH なる版のドライバがあるようで。

自分の使ってる、NVIDIA制GPU搭載のビデオカード、MSI GeForce GTX 1060 AERO ITX 6G OC が、標準版のドライバを要求するのか、DCH版を要求するのかは、NVIDIAコントロールパネル → 左下の「システム情報」で確認できるらしい。確認したところ、「ドライバー タイプ : DCH」と表示されていた。つまり、標準版のドライバではなく、DCH版をDLしてインストールしないといけないようで。

NVIDIAのサイトから DCH版をDLして実行してみたところ、あっさりとインストール処理が進んでくれた。こんな罠があったとは…。

ところで、DCH って何の略なんだか。ググってみてもそれすら分からない。

MSIのサイトでも情報が載ってた。 :

_NVIDIA ドライバの更新方法 - エムエスアイコンピュータージャパン

ノートPC用の情報で、2019/03/22 に書かれたページだけど。標準版をインストールできない時はDCH版を試してみてくれ、と書いてあった。

自分が使っているビデオカードは、MSI製なので、MSIのこの情報に該当する製品なのだろう…。

DCHとは。 :

_New (RTX) NVIDIA "Standard" or DCH" (Declarative, Componentized, Hardware Support Apps) - EVGA Forums

DCH = Declarative, Componentized, Hardware Support Apps、らしい。何が何だかわからないけど、そういう略なのだな。

#2 [windows] 標準 SATA AHCIコントローラーにビックリマークがつくようになった

Windows10 x64 を 1803 から 1809 にしたら、デバイスマネージャでエラーが表示されるようになった。

win10_1809_dev_error_ss.png

ドライバーファイルの詳細を確認したら、C:\WINDOWS\system32\DRIVERS\storahci.sys だった。ファイルバージョンは、10.0.17763.168。

環境は、M/B : Intel DH67BL。H67チップセットを使ってるM/B。

Intel RST をインストールしてある環境だからエラーが起きるのだろうかと思って、コントロールパネル経由でアンインストールしてみたけれど、再起動しても、上に表示されてる、「Intel(R) Desktop/Workstation/Server Express Chipset SATA AHCI Controller」は消えてくれなかった。ちなみに、件のドライバは、C:\WINDOWS\system32\DRIVERS\iaStorA.sys で、バージョンは 12.9.0.1001 だった。

一応 Windows10 が起動して、ファイルアクセスもできているように見えるけど、これは放置しておいても構わない問題なのだろうか…?

#3 [pc] 外付けHDDケースのファームウェアを更新してみた

親父さん用PCのSSD内容をバックアップするために、部屋の中から、外付けHDDケース、玄人志向 GW3.5AA-SUP3/MB を発掘。USB3.0で接続できる、3.5インチHDD対応のケースだけど…。ちなみに、中には、既に Western Digital Caviar Green WD20EZRX-00DC0B0 が入れてあった。2016/04/28頃に入れたっぽい。

関連情報をググってみたところ、どうやらこのHDDケースは、Windows10 で使うと不具合があるようで。連続してアクセスすると転送が止まってしまうとか、エラーが出て中身が飛ぶとか、そんな話が。

_玄人志向 GW3.5AA-SUP3/MB HDDケースのファームウェアを更新 | Pearun のブログ - 楽天ブログ
_価格.com - 『Windows10とファームウェアアップデート』 玄人志向 GW3.5AA-SUP3/MB サーロイン素敵さんのレビュー
_玄人志向 GW3.5AA-SUP3/MB
_外付けUSB HDDケースのファームウェア更新 - Still Laughin'

外付けHDDケース内のチップに対して、ファームウェアを更新すると改善する場合がある、とのことで。Amazonのレビューを眺めると、最近入手できる個体も、Windows10 とは相性の悪いファームウェアが入ってるとかなんとか…。

一応自分も、ファームウェアを更新してみた。
kuroutoshikou_gw35aa_firm_ss01.png

kuroutoshikou_gw35aa_firm_ss02.png

これで更新されたのだろう。たぶん。

#4 [pc] 無線LANが切れると妹から苦情が出てきた

今日の午後になって、無線LANがガンガン切れると、妹から苦情が。

ルータのログを確認してみたけれど、たしかにブチブチと切れている。謎。とりあえずルータを再起動。

妹の機材は接続が切れないようになったけど、今度は親父さん用PCの無線LAN子機、ELECOM WDC-433DU2HBK が繋がらない。

ドライバのアンインストール・再インストールをしてみたけど改善せず。そういえば、最終版のドライバにしたら接続できなくなることが多くなったことをふと思い出して、古いドライバを入れなおしてみたところ、ようやく繋がってくれた。しかし今までは、最終版ドライバでも一応繋がっていたのだけどな。おかしいなあ。

#5 [windows] 親父さん用PCのWindows10を1809にアップデート

親父さん用PCのWindows10 x64 を 1803 から 1809 にアップデートしようとしたらエラーが表示されてしまって先に進まなかったのだけど。EaseUS Partition Master free版を使って、Cドライブの前に位置する、システム予約パーティションのサイズを、50MB から 640MB ほどに大きくしたら、アップデート処理が進んでアップデートが完了した、とメモ。

作業をする前に、一応、EaseUs Todo Backup free版で、Cドライブのパーティションを外付けHDDにバックアップ。Cドライブが 240GB の SSD だったせいか、1時間もかからずにバックアップが取れた。

その後、EaseUS Partition Master free版 で、まずは Cドライブの前方に、640MB程度の空きパーティションを作成。その後、システム予約パーティションを、先ほど確保した空きパーティション分、サイズを拡大。SSDのせいか、体感で10分もかからずに作業が終わった。

Windows10 1809 へのアップデートは、ダウンロードのほうが時間がかかった。アップデート自体は、体感で30分もかからなかった気がする。これも SSD のおかげだろうか。

2019/05/02(木) [n年前の日記]

#1 [zatta] 親父さんがREGZA用のHDDを購入

階下の REGZA で録画した番組が、結構頻繁に一部壊れていると、親父さんから報告が。天気が悪いわけでもないのにBS放送の映像が壊れるので、おそらくHDDが怪しいのではないか、新しいHDDを買ったほうがいいのかもしれない、と話していたら、親父さんが早速ヨドバシに注文して、今日の午前中届いた、とメモ。

購入したHDDは以下。

_BUFFALO HD-LDS3.0U3-BA (USB3.0接続、3TB)

ルートフォルダに、見守り合図 for AV なるフォルダが入っていて、S.M.A.R.T.情報を見ながら、結果を動作LEDに反映してくれるらしい。オレンジ色に光ったら壊れかけている表示、なのだとか。ただ、REGZA に繋いだら、どうせ REGZA がフォーマットしてしまうだろうから、件のソフトは消滅してしまいそうな気がする。

2019/05/03追記。 :

初期不良が怖いので、一応チェックをした。親父さん用PCにUSB3.0で接続して、 _EaseUS Partition Master Free 版 を使ってサーフェイステストを行った。20:00頃から始めて、03:00頃に終わった。

自分は結果画面を見ていないけれど、親父さんが確認したところ、グラフは全部青だか緑だかで、不良セクタは0だった、とのこと。

2019/06/24追記。 :

コメント欄で、「ソフト名にリンクを張ってほしい」と連絡があったのでリンクを追加しておきました。

この記事へのツッコミ

Re: 親父さんがREGZA用のHDDを購入 by イーザス    2019/05/09 11:04
mieki256様

お世話になっております。
イーザスソフトウェアでございます。

突然のコメント、失礼致しました。

御ブログ上で弊社の製品をご紹介頂きまして感謝しています。

この記事を拝読した後、ちょっとお願いしたいことがございますが、宜しいでしょうか?

より詳しい内容をお読みになりたい読者様のために、記事内の製品名EaseUS Partition Master Freeへその公式ページをアンカーテキストにてご追加頂けませんでしょうか?

https://jp.easeus.com/partition-manager-software/free.html

お忙しい中お手数をお掛けまして大変恐縮でございますが、ご検討頂けば幸いに存じます。

どうぞよろしくお願い致します。

2019/05/03(金) [n年前の日記]

#1 [zatta] REGZA用のUSBハブを購入

REGZA 37Z9000 に外付けHDDを増設するために、親父さんがUSBハブをヤマダ電機で買ってきた。

_BUFFALO BSH4A11BK (USB2.0、4ポート、セルフパワー)

REGZAへのHDD追加の方法は、リモコンの「設定メニュー」ボタン → レグザリンク設定 → USBハードディスク → 登録。

2019/05/04() [n年前の日記]

#1 [pc] KM-BASIC 0.8.3の動作確認をしてみたり

作者様から修正版が公開されたことを連絡していただけたので動作確認をしてみたり。KM-BASIC 0.8.2 では、LIST を実行するとREM文が妙な表示になっていたけれど、0.8.3 では…。

kmbasic083_rem_ss.png

バッチリ正常に表示されました。対応ありがとうございます。感謝します。

また、以前、動作確認に使った各プログラムも正常に動作しました。と一応メモしておくのです。

_apicheck_20190424.zip
_mieki256's diary - KM-BASIC 0.8.2の動作確認をしてみたり

#2 [nitijyou] 部屋の温度が30度

気づいたら部屋の温度が30度になっていた。先日まで、昼でも15度とかそんな感じだったのに…。日によって気温の変化が激し過ぎる…。

2019/05/05() [n年前の日記]

#1 [pc] 昔のBASIC関係は何も残ってないのだな

たまたま、Tiny BASIC なる単語をどこかで目にして、なんだかちょっと気になってBASIC関係のページをググって眺めていたり。

なんでも大昔、アメリカでレトロPCがチラホラ出始めた時代に、「おーい、みんなー、BASICを作ってみようぜ!」的ブームがホビーユーザの間で発生していた時期があるそうで。その際、えてして作られたのが、Tiny BASIC なるものらしく。

そんなブームが発生していたということは、作り方その他について、ある程度情報が公開されていたのかな、そうじゃないと各人が好き勝手に実装できないだろう…と想像して探してみているわけだけど。関連情報が全く見つからず。

まあ、インターネットどころかパソコン通信も存在してない時代に、印刷物経由でそういうやり取りをしていたらしいので、この状況は仕方ないのかもしれない。当時のアレコレが、今のインターネット上には全くアップロードされていない、ということだろうけど…。

そのあたりの時代から少し後になると、日本のメーカも、次から次へと色んなマイコン(パソコン)を開発・発売して、それぞれのPC上で、互換性の類なんてほとんど気にせず実装されたBASICが動いてたわけだけど。

つまりは当時、あの時代のレベルのBASICなら実装できてしまう人達が、日本国内にもそれなりに居たはずだから、先人達が様々な知見を既に蓄えているはず…なのだけど、これがまたググってみても当時のノウハウが全く見つからず。まあ、企業内で作っていたソフトウェアだから、こういうテクニックを使っていた等を未だに迂闊に書けないのかもしれないけれど…。

なんというか、あの当時のBASICに関しては、バイナリだけは実機を持っているユーザの手元に残ってるけど、ソースも無いし、作り方も分からない、みたいな状態になってるなと…。失われた古代文明というか。

まあ、今から再実装したところで、一体誰が何に使うんだよ、と言われそうだけど。しかし、当時は結構苦労して作っただろうに、何一つ知見が残ってないなんて、なんだかもったいない話だなと。

2019/05/06(月) [n年前の日記]

#1 [prog] C言語のfgetsについて少し調べていたり

C言語で1行入力はどうやるのかをすっかり忘れていたので調べ直したり。一般的には gets() を使うんだっけか…?

_gets関数|危険性と代替関数【gets_s/fgets/scanfによる代替処理】 | MaryCore
_C言語講座:gets( )とscanf( )の問題点の解決
_[迷信] gets は単純に fgets に置き換えられる | 株式会社きじねこ
_[迷信] fflush で入力バッファをクリア | 株式会社きじねこ
_標準入力から安全に文字列を受け取る方法いろいろ - Qiita

gets() を使うとバッファをオーバーしちゃった時が怖いので、fgets() を使うといいよ、ということになっているっぽい。しかし、fgets() も、それはそれで別の問題が出てくるよ、ということらしい。

MinGWのgccを使って動作確認。 :

Windows10 x64 上に MinGW をインストールしてある環境なので、gcc を使って各サンプルをコンパイルして動作確認。
gcc hello.c -o hello
これで hello.exe が出来上がった。

#2 [anime] 「発表全マクロス大投票」を視聴

NHK-BSで放送されてたソレを録画していたので視聴。

見ていて思ったのは…。
何より、あの方の出演に心底驚いた。この手の企画にはどうせ出てくれないよな、絶対無理だろう、残念だな、でも仕方ないよなと、一視聴者としては最初から諦めていた部分もあったのだけど…。カメラの前に立ってくれただけでも只々感謝というか。しかもわざわざアメリカから…。これはもう、ありがとうございます、としか言いようがない…。 *1
*1: それはそれとして。歌声を聞いて、若干失礼ながら正直なところ「ああ…やっぱり…」とも。しかし逆にそのことで、例えばアニソンをずっと歌い続けて、昔と変わらぬ声を今でも聴かせてくれている歌手の方々が、一体どれだけ日々の鍛錬、あるいは体調管理等を欠かしていないのか、今更ながら再認識させられたりもして。声質は天から与えられたモノとしても、保つためには努力が必要で、ジャンル等は一切関係なく、たとえそれが何であっても、おそらくは愚直なまでに続けていくことが、そのままそっくり力になっていくのだろうなと…。考えてみたら、マクロスシリーズ自体がそうなのだな。途中でアレな作品がチラホラあった気がしないでもないけど、それでもずっと今まで続けてきたからこそ、こんな番組を作ってもらえる日が来たわけで。「継続は力なり」と言うけれど、本当にその通りなのだなと…。てなことを思ったけれど、気になってググってみたら、今回のソレは過去に無理なボイトレで喉を傷めてしまった故ということらしく。なるほど…。続けることは大事だけれど、かといって無理を続けてしまってはいかんのじゃよ、ということでもあるのかしらん。それぞれが、自分に合っている続け方を探していかないといかんのだろうなあ…。

2019/05/07(火) [n年前の日記]

#1 [pc] MZTファイルのヘッダ情報を確認するツールを書いてみたり

MZ-80K/700等のエミュレータでは、カセットテープに入ったプログラムのイメージを模した、MZTファイルという形式が使われるのだけど。その MZTファイルのヘッダ情報を確認するツールを Python を使って書いてみたり。

_mieki256/pymztinfo

動作確認環境は、Windows10 1809 x64 + Python 2.7.16。

Pythonスクリプトだけではなく、py2exe で exe化したファイルも一応置いておいた。

使い方は以下。
python pymztinfo.py MZT_FILE

or

pymztinfo.exe MZT_FILE

以下のような出力になる。
> pymztinfo.exe S-BASIC_1Z007B.MZT
Input file : S-BASIC_1Z007B.MZT
0x00     : File mode = 0x01 (Binary)
0x01-0x11: Filename  =  S-BASIC
0x12-0x13: File size    = 0x6C80 (27776)
0x14-0x15: Load Address = 0x1200
0x16-0x17: Exec Address = 0x7E0F
0x18-0x3F: 11 30 11 CD 09 00 CD 15
           00 00 00 00 00 00 00 00
           00 00 00 00 00 00 00 00
           00 00 00 00 00 00 00 00
           00 00 00 00 00 00 00 00
0x40-0x43: Patch Enable
Adrs=0x1221 , Size=0x0C (12) , Data (Hex)=ED F4 03 ED F4 04 ED F4 01 ED F4 02
body length: 0x6C80 (27776)

MZTファイルのフォーマット仕様をメモ。 :

あちこちのページを眺めて把握した範囲で、一応、MZTファイルのフォーマット仕様をメモ。

  • 0x00 - 0x7F : ヘッダ部分。
  • 0x80 - : 実データ

ヘッダ部分の内容は以下。
0x00ファイルの種類。アトリビュート。
0x01 - 0x11ファイル名。0x0Dが終端文字。残りは0x20 でパディングされる。
0x12 - 0x13実データのサイズ
0x14 - 0x15ロード・格納アドレス
0x16 - 0x17実行開始アドレス
0x18 - 0x3F謎データ。FD使用時に絡んだデータが入ってるらしい?
0x40 - 0x43ファイルにパッチを当てる場合、'PAT:' が入ってる。
0x44 - 0x7Fパッチデータ
0x80 -実データ

ファイルの種類については、どうやら以下が決まってるように見えた。
0x01バイナリ
0x02BASICのプログラム。SP-5030 / Hu-BASIC等
0x05BASICのプログラム。MZ-700 S-BASIC
0xC8CMU-800用のデータ

パッチデータ1つ分のフォーマットは以下。
2 byteパッチを当てるアドレス値。0xFFFFが入ってたらパッチデータは終了。
1 byetパッチのサイズ
N byteサイズ分、パッチデータが並ぶ。
パッチの個数分、このデータ列が並ぶ。アドレス値に 0xFFFF が入っていたら、そこでパッチは終了。

参考ページ。 :

不明点。 :

0x18 - 0x3F に入ってるデータの意味が分からない。.mztファイルを作成するツールに、各BASIC用のヘッダファイルが同梱されていたりするのだけれど、中を覗くと、該当部分には、たしかに何かが入ってる。しかし、どういう意味のデータが入っているのか、記述したページが見つからず。

ファイルの種類(アトリビュート)に入ってる、0x02 と 0x05 の使い分けが、ちょっと自信がない。手元の .mzt をいくつか確認した感じでは、SP-5030 / Hu-BASIC用のプログラムには 0x02 が、MZ-700用S-BASIC用のプログラムには 0x05 が入っていたけれど、本当にその分類でいいのだろうか…?

テープのイメージファイルとしては、.mzt 以外にも .mzf というファイルが存在するのだけれど。.mzf は、先頭に 'mz20' の文字列が入ってるという情報を見かけたものの、Web上で公開されていた各種 .mzf を入手して中を覗いてみたところ、そういう文字列が入ってるファイルは見当たらなかった。拡張子が .mzf でも、フォーマットが異なるものが存在している、ということだろうか…。

#2 [prog] z88dkでMZ-700用のプログラムを作ってみたり

以前、Z80用のバイナリを作ってくれるCコンパイラ、SDCC を使って、MZ-700用のプログラムを作れるのか確認したことがあるのだけど。

_mieki256's diary - Z80用のバイナリを生成できるCコンパイラ SDCCを試用

ググってみたら、z88dk なるCコンパイラでも、MZ-80K/700用のバイナリが作れるらしいと知り、試用してみたり。環境は Windows10 x64 1809 + MZ700WIN 0.56。

インストール。 :

公式サイトのリンクを辿って、sourceforge から、z88dk-win32-1.99C.zip を入手。

_z88dk
_Z88 Development Kit - Browse Files at SourceForge.net
_Nightly CVS snapshots and win32 builds of z88dk

一般的には Nightly builds 版、z88dk-win32-latest.zip を入手して使う場合が多いらしいけど…。今回は、バージョンがついてる版を選択してみた。

解凍して、任意のフォルダに置く。

環境変数を設定。
  • PATH に、z88dkインストールフォルダ\bin、を追加。
  • 環境変数 Z80_OZFILES を新規作成して、z88dkインストールフォルダ\lib、を指定。
  • 環境変数 ZCCCFG を新規作成して、z88dkインストールフォルダ\lib\Config、を指定。

以下の解説ページが参考になった。ありがたや。

_MSX用クロス開発のすすめ(z88dk) - 仮想と現実

コンパイル。 :

C言語のソースを書いて、コンパイル。例えば、hello.c をコンパイルして、MZ-80K/700用のバイナリを作るなら、以下の指定になる。
zcc +mz -lm -o hello -create-app hello.c
  • +mz : MZ-80K/700用をターゲットにする。
  • -lm : 謎。
  • -o xxxxx : 出力ファイル名
  • -create-app : アプリ作成
この指定で、いきなり .mzt が出力される。

_Platform Sharp MZ - z88dk/z88dk Wiki
_platform:sharpmz [z88dk]

しかし、-lm の意味が分からない…。zcc --help をしてみたけど…。-l -m を指定してるということなのかな…。

※ 2019/05/08追記。-lm オプションは、「Link in the generic Z80 maths library」だそうで。数学ライブラリをリンクしてくれるのだろう。たぶん。

_Tool zcc - z88dk/z88dk Wiki

結果。 :

Hello World はコンパイルできたし、動いてくれた。

#include <stdio.h>

int main(void) {
  printf("\n-- HELLO WORLD --\n");
}

しかし、 _先日 SDCC で試したソース は、コンパイルはできたけど動かない。画面が真っ暗なまま。ただ、何故か、unsigned char のポインタを char のポインタにすると動く。
#include <stdio.h>

#define DISPADRS 0xd000
#define ATTRADRS 0xd800

int main(void)
{
  for (int c = 0; c <= 255; c++)
  {
    char d = c;
    for (int y = 0; y < 25; y++)
    {
      int x = 30;
      char *p;
      char *q;
      p = (void *)(DISPADRS + y * 40 + x);
      q = (void *)(ATTRADRS + y * 40 + x);
      while (x < 40)
      {
        *p++ = d;    // display code
        *q++ = 0x40; // attrib
        x++;
      }
      d++;
    }
  }
  return 0;
}

/*
int init(void)
{
  return 0;
}
*/

最新版にしたら動いた。 :

Nightly builds版の z88dk-win32-latest.zip を入手して使ってみたところ、unsigned char のポインタを記述しても動くようになった。1.99c 版はそのあたりにバグがあった、ということだろうか…。

#include <stdio.h>

#define DISPADRS 0xd000
#define ATTRADRS 0xd800

int main(void)
{
  for (int c = 0; c <= 255; c++)
  {
    unsigned char d = c;
    for (int y = 0; y < 25; y++)
    {
      int x = 30;
      unsigned char *p;
      unsigned char *q;
      p = (unsigned char *)(DISPADRS + y * 40 + x);
      q = (unsigned char *)(ATTRADRS + y * 40 + x);
      while (x < 40)
      {
        *p++ = d;    // display code
        *q++ = 0x40; // attrib
        x++;
      }
      d++;
    }
  }
  return 0;
}

/*
int init(void)
{
  return 0;
}
*/

参考ページ。 :


2019/05/08(水) [n年前の日記]

#1 [windows][prog] CP/Mエミュレータを試用

Tiny BASIC についてググっていたら、CP/M上で動作する Tiny BASIC が存在すると知り。

ということは、CP/Mエミュレータを導入すれば、Tiny BASIC なるものがどんな動作をするのかが確認できるのかなと思ったので試用してみたり。環境は、Windows10 1809 x64。

CP/M というのは、大昔の 8bit CPU (Intel 8080, Zilog Z80等)を使ってたPC上で動作するOS、という説明でいいのだろうか。

_CP/M - Wikipedia

雰囲気としては、MS-DOS の 8bit版みたいなもので、開発会社は違うけど MS-DOS の先輩、とでも思っておけばいいのかな。どうなんだろう。

ちなみに、CP/M や CP/M用プログラムは、Web上で結構色々公開されている状態らしい。

_The Unofficial CP/M Web Site
_Commercial CP/M Software Archive

CP/M Player と CP/M program EXEcutor を試用。 :

ググったところ、以下の CP/Mエミュレータを見かけた。

_CP/M Player for Win32 謎WIPページ
_CP/M program EXEcutor for Win32の詳細情報 : Vector

どちらも、解凍すると cpm.exe という実行ファイルが入っている。以下のように打つと、CP/M用のプログラムを動かせる模様。
cpm.exe CP/M_APPLI_FILE

とりあえず、今回は…。
  • CP/M Player for Win32 は、Windows 2000/XP/Vista/7 Console版を使用。
  • CP/M program EXEcutor for Win32 は、cpm32_04.zip、2012.04.30版を使用。
  • 動作確認には、CP/M用の Microsoft BASIC を使用。

Microsoft BASIC の動かし方については、以下が参考になった。ありがたや。

_CP/Mに夢中♪

Microsoft BASIC は、以下から入手。Mbasic.com というのがソレらしい。

_CP/M Programming Languages and Tools

動かしてみる。
cpm Mbasic.com

cpm_emu_ss01.png

CP/M Player、CP/M program EXEcutor、どちらでも同じように動作した。

Microsoft BASIC を終了するときは、system と打てばいいらしい。

YAZE-AG を試した。 :

YAZE-AG という CP/Mエミュレータも試したり。今現在の最新版は、2.40.5、なのかな。たぶん。

_YAZE-AG - Yet Another Z80 Emulator by AG (V 2.40.5 / V 2.30.3)
_YAZE-AG - Yet Another Z80 Emulator by AG V 2.40.5 / V 2.30.3 (Windows binaries)
_ソフトウェアー基礎コース (Tiny BASIC Lesson 1:Z80 エミュレーター YAZE)
_ソフトウェアー基礎コース (Tiny BASIC Lesson 2: CP/M によるコンパイル・アセンブル)
_CP/M - tanamの日記

Windowsの場合、各環境に合わせてヨサゲな版を入手すればいいらしい。自分のPCは、CPU が Core i5-2500 なので、今回は以下を入手。
yaze-ag-2.40.5_windowsbinaries_with_keytranslation_x86_64Bit_intel_core2duo_i3_i5.exe

昔は Cygwin のインストールが必要だったらしいけど、今現在の版は cygwin1.dll その他が同梱されているので、上記のファイルだけDLしてインストールすれば動く模様。

デスクトップに YAZE-AG-2.40.5 というショートカットファイルができるのでクリック。ウインドウ (mintty) が開いて起動する。デフォルトでは、起動直後に色々メッセージを表示するので、何かのキーを叩いて先に進んでいくとそのうち入力待ちになる。

とりあえず、ここでも Microsoft BASIC を動かしてみる。インストールフォルダ\bin\disksort\ が、CP/M上のCドライブ扱いになってるらしいので…。Windows上で Mbasic.com を該当フォルダにコピー。カレントドライブを C: にしてから、Mbasic.com を実行。
C:
Mbasic

cpm_emu_ss02.png

動いてくれた。

Microsoft BASIC の終了は、system と入力。YAZE-AG の終了は、sys と打ってから quit。

標準では CP/M 3.1 が動くらしいけど、各種開発をしたい場合は、CP/M 2.2 を使ったほうがいいらしいので…。YAZA-AG のショートカットファイルをコピーして、プロパティを開いて、リンク先を以下のような記述にすれば CP/M 2.2 が動くようになる。のかな。たぶん。
インストールフォルダ\bin\mintty.exe --config .\.minttyrc --exec .\yaze_bin.exe -l -1 -b yaze.boot
要は、yaze_bin.exe の後ろに、「-l -1 -b yaze.boot」を追加するのだと思う。おそらく。たぶん。

#2 [zatta] 日記をアップロード

2019/04/26 を最後にアップロードしてなかったのでアップロード。

2019/05/09(木) [n年前の日記]

#1 [pc][windows] Hotmailが受信できない

ふと、自宅サーバのメールアドレスから、 Hotmail のメールアドレス宛てにメールを送信したのに、Hotmail側で受信できないことに気が付いた。なんでや。 Hotmail から送ることはできても、Hotmail で受け取ることができないとは…。

ググってみたところ、Hotmail の迷惑メール対策が強過ぎて何かがおかしくなってるのか、Hotmail でメールが受信できない事例が結構あるようで。なんだかな。

#2 [prog][mz] SP-5030のBASICリストの格納フォーマットを調べたり

MZ-80K/1200等で使われる BASIC、SP-5030 が、BASICのソースリストをどんなフォーマットでバイナリとして格納するのかが気になったので少し調べたり。

とりあえず、Windows10 1809 x64 + MZ700WIN 0.56 + SP-5030 上で、簡単なソースを打ち込んで、.mzt に保存。その .mzt をバイナリエディタで開いて確認。

sp5030_bas_ss01.png

sp5030_bas_ss02.png

なんだかうっすら見えてきた。こういう感じかな。

sp5030_bas_ss03.png

最初の1行目を眺めてみる。

sp5030_bas_ss04.png

ちなみに、Z80 はリトルエンディアンなので…。例えば、0x1234 という 2 byte値があったら、「34 12」の並びで格納される。

マルチステートメントを使った場合はどうなるのだろう。

sp5030_bas_ss05.png

sp5030_bas_ss06.png


中間コードについては、以下のページが参考になりそう。

_mz-80K SP-5030 (旧バージョン) - Enri's Home PAGE (mz-80K)

2019/05/10(金) [n年前の日記]

#1 [z80][prog] Altair 8800 simulator を試用

Altair 8800 simulator は、レトロPC、Altair 8800 をDOS窓上で動かせるエミュレータ。CP/M を動かせるらしいので試用してみたり。環境は Windows10 1809 x64。

以下のページが参考になった。ありがたや。

_懐かしいCP/MをSIMHシミュレータで実行 | ある計算機屋さんの手帳
_懐かしのワードマスターをCP/Mシミュレータで使う | ある計算機屋さんの手帳
_CP/Mシミュレータで懐かしのインテル8080アセンブラを使う | ある計算機屋さんの手帳
_Altair 8800 simulatorの使い方メモ
_[CP/M] altair 8800 CP/Mシミュレータ | My_blog 手作りで楽しむ

インストール手順。 :

以下から、altairz80.zip と cpm2.zip を入手。

_Altair Introduction

解凍して、任意のディレクトリに両方を移動。
  • altairz80.zip : Altair 8800 のエミュレータ
  • cpm2.zip : CP/M 2.2 のバイナリが入ったディスクイメージ群

実行の仕方。 :

  1. 先ほど作成したディレクトリをカレントディレクトリにしてDOS窓を起動。
  2. altairz80.exe を実行。sim> が表示されてコマンド待ちになる。
  3. do cpm2 と打つと、CP/M 2.2 が起動する。
もしくは、altairz80.exe cpm2 で、いきなり CP/M を起動できるらしい。

do cpm2 で起動した直後は、以下のようなドライブ構成になっている。
  • A: cpm2.dsk (FD)
  • B: app.dsk (FD)
  • I: i.dsk (HDD)
  • J: appleiicpm.dsk (HDD)
A - H が FDD、I と J が HDDらしい。

  • dir で、ファイル一覧を表示。
  • CP/M起動中に Ctrl + E で中断。シミュレータのコマンド待ちに移行。
  • go で中断状態から再開。
  • halt で、CP/Mを終了。シミュレータのコマンド待ちに戻る。
  • quit で、シミュレータを終了。

ということで、起動することが確認できた。

Aドライブに、Microsoft BASIC も入ってた。CP/M上で、mbasic と打てば起動する。

2019/05/11() [n年前の日記]

#1 [zatta] Arduinoについて調べてたり

Arduino は、マイコンと基板とソフトウェアが揃った開発環境。という説明でいいのだろうか。

_Arduino - Wikipedia

なんだか種類がたくさんあるようだけど、以下のサイトが勉強になった。

_Arduino
_Arduino Pro Mini
_(Arduino) Pro Micro

Pro Mini + 書き込み装置か、Pro Micro がヨサゲなのだろうか…。

#2 [nitijyou] 部屋が暑い

部屋の温度が31度。暑い。先日までファンヒーターをつけていたぐらいに寒かったのに…。

2019/05/12() [n年前の日記]

#1 [ubuntu][love2d][pyxel] IdeaPad S10-2 の Ubuntu 16.04 を 18.04 にアップグレードした

手元のネットブック機、Lenovo IdeaPad S10-2 にインストールしてあった、Ubuntu (Lubuntu) 16.04 LTS を、18.04 LTS にアップグレードした。

ちなみに、IdeaPad S10-2 は、大昔の Intel Atom (N270) が載ってる機種なので、64bit には未対応。Ubuntu は、32bit版しかインストールできない。そして、Ubuntu 17.10 から、32bit版のインストーラ自体が配布されなくなっているという状況。はたしてアップグレードできるのか…。

_第522回 Ubuntu 18.04 LTSの32ビットサポート事情とネットブック:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社

アップグレードの手順は以下。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo reboot
sudo do-release-upgrade

一応、アップグレードはできたように見える。

ssh利用時のログインメッセージ。 :

他のPCからsshでログインした際、Ubuntu 14.04 LTS が云々、というメッセージが表示されて首を捻った。何か古い設定ファイルが残ってそうだな…。

Ubuntu 18.04 LTS x64 をクリーンインストールした他の環境と比較してみたところ、今回アップグレードした環境には /etc/motd というファイルが存在していて、そのファイルの中に Ubuntu 14.04 LTS 云々を表示する内容が書いてあった。

クリーンインストールした環境には該当ファイルが無かったので、試しに sudo rm /etc/motd でファイルを削除してみたところ、ログインメッセージが正常(?)な内容になってくれた。

他にも、/etc/update-motd.d/ 以下に、/run/motd.dynamic を生成するための設定ファイルが複数あるので、余分なファイルは削除しておいた。

動作確認しようとしたものの。 :

せっかくアップグレードしたのだから、何かを動かして動作確認しようと思ったものの。
  • love2d は、インストールして実行してもウインドウすら出てこない。
  • Python3 + pyxel は、glfw がインポートエラーを出してコケる。
まあ、どちらも 64bit環境、もしくは今時のハードウェアスペックを想定しているのだろうなと…。

love2d のインストール。 :

一応それぞれのインストール方法をメモ。

love2d は、公式サイトの、「Ubuntu PPA」というリンクをクリックすればインストール方法が書いてある。

_LoVE - Free 2D Game Engine
_love-stable : Bart van Strien

sudo add-apt-repository ppa:bartbes/love-stable
sudo apt-get update
sudo apt install love

これでインストール自体はできた。動かないけど。

Python3 + pyxel のインストール。 :

Python3 + pyxel も、公式サイトの記述通りに作業すれば、インストール自体はできる。

_pyxel/README.ja.md at master - kitao/pyxel

sudo apt install python3 python3-pip libglfw3 libportaudio2

sudo pip3 install pyxel
  or
sudo pip3 install --no-cache-dir --ignore-installed pyxel

しかし、サンプルがインストールできない。
mkdir hoge
cd hoge
install_pyxel_examples
$ install_pyxel_examples
Traceback (most recent call last):
  File "/usr/local/bin/install_pyxel_examples", line 7, in <module>
    from pyxel.examples import install
  File "/usr/local/lib/python3.6/dist-packages/pyxel/__init__.py", line 4, in <module>
    from . import constants  # type: ignore
  File "/usr/local/lib/python3.6/dist-packages/pyxel/constants.py", line 1, in <module>
    import glfw
  File "/usr/local/lib/python3.6/dist-packages/glfw/__init__.py", line 34, in <module>
    raise ImportError("Failed to load GLFW3 shared library.")
ImportError: Failed to load GLFW3 shared library.

python3 を起動して import glfw と打っただけでもエラーが出るので、pyglfw (glfw?) 自体に問題があるようだなと。

少し調べてみたけれど、どうやら pyglfw は Linux 64bit版のみを想定して作ってる気配も…。libglfw.so は、それぞれ以下に置いてあるのだけど。
  • Ubuntu 64bit : /usr/lib/x86_64-linux-gnu/libglfw.so
  • Ubuntu 32bit : /usr/lib/i386-linux-gnu/libglfw.so

pyglfw の library.py 内、search_paths = [ ... ] の部分でライブラリを検索するパスが列挙されているものの、64bit版のパスしか書いてない。

_pyGLFW/library.py at master - FlorianRhiem/pyGLFW

試しに、library.py を編集。
sudo vi /usr/local/lib/python3.6/dist-packages/glfw/library.py
'/usr/lib/i386-linux-gnu/', を追加してみたところ、少なくとも import glfw でエラーは出なくなった。

しかし、pyxel のサンプルを動かそうとすると、これまた違うエラーが出て何も表示されない。

そもそも pyglfw が動くのかどうか、そこからして怪しいよな…。Intel Atom N270 + Intel 945GSE Express という、古くて非力なスペックだし…。

一応、簡易ベンチマークその他は動いているけど、あくまで簡易だろうし…。
  • OpenGLの簡易ベンチマーク、globs は、一部を除いて動いた。
  • ギアを表示する例のアレ、glxgears は動いた。
  • OpenGL のサポート状況を一覧表示する glxinfo も、それらしい表示。

2019/05/13(月) [n年前の日記]

#1 [mz][python] MZシリーズのBASICをテキスト変換するPythonスクリプトを書いてたり

MZ-80K/1200の標準BASIC、SP-5030用のBASICプログラムを、テキスト出力する Pythonスクリプトを書いているところ。mztファイルを読み込んでテキストに変換、みたいな。

ちなみに、SP-5030用BASICプログラムの記録フォーマットは、 _2019/05/09の日記 にメモしてある。

S-BASICにも対応させたい。 :

SP-5030用の処理はそれらしい結果が出てくるところまで書けたけど。ついでに、MZ-700版 S-BASIC (1Z-007B) にも対応させようとしたところで悩んだり。

MZ-700版 S-BASIC の記録フォーマットは、以下のページが参考になりそう。英語版の S-BASIC が対象ではあるけれど、中間コードの一覧も、記録内容も、細かく解説してある。英語だからよくわからんところもあるけど…。

_S-BASIC 1Z-013B internals
_Overview of S-BASIC commands
_MZ-700 / MZ-800 Basic Instructions Overview

例えば、以下のソースは…。

mz700_sbasic_ss01.png

以下のような形で記録されてる。

mz700_sbasic_ss02.png

フォーマットは、SP-5030 とかなり似ているけれど、若干違う部分もあるようで。

同じ点は以下。
  • 1行分は、「行の長さ(2byte), 行番号(2byte), 内容、終了コード(1byte)」の順で並ぶ。
  • ソースコードの最終2byteが、終了コード = 0x0000 になっている。要は、行の長さが 0x0000 なら、そこでプログラムは終了、という扱いにできる。

異なる点は以下。

SP-5030 は…。
  • 行の終了コードが 0x0d。
  • コマンドの中間コードは、1byteのみ。0x80 - 0xff の範囲を取る。
  • ソース中の数値は、ASCIIコードでそのまま記述される。

S-BASIC は…。
  • 行の終了コードが 0x00。
  • コマンドの中間コードは、1byte、または 2byte。1byte分は 0x80 - 0xfd、2byte分は 0xfexx - 0xffxx の範囲を取る。
  • ソース中の数値は、数値種類コード 1byte + 数 byte のバイナリで記述される。最初からバイナリになった状態で記録されるから、実行時に ASCII から数値に変換しないで済む ―― 実行速度が稼げるらしい。

ちなみに、mztファイルを読み込んで、S-BASIC、Hu-BASIC のソースをテキスト出力してくれる、bas2txt というツールが既にあって…。

_We Love MZ-700

C言語で書かれたソースも同梱されているので、とても参考になる。ありがたや。

というか、変換結果だけ欲しければ、bas2txt を使わせてもらったほうが早いのだけど。今回は、記録フォーマットについて把握しておきたいので、自分も処理を書きつつ仕様を確認、みたいな。

S-BASICの数値に記録フォーマット。 :

MZ-700 S-BASIC は、ソース内の数値をバイナリとして記録してあるらしいのだけど。それぞれ、以下のような状態で記録されてるらしい。
  • 0x15 + 5byte : 浮動小数点数 (単精度実数)。5byte のうち、最初の 1byte が 指数部、残り4byteが仮数部。らしい。
  • 0x11 + 2byte : 16進数。ソース内で $xxxx と記述した際に使われる。0x0000 - 0xffff まで記述できる。
  • 0x0b + 2byte : 行番号。0 - 65535 まで記述できる。

mz700_sbasic_ss03.png

16進数と行番号は、種類を示す数値の後ろから 2byte 読み込むだけで済むけれど。浮動小数点数が…よく分からない…。以下で説明はされているけれど…。

_S-BASIC 1Z-013B internals

2019/05/14(火) [n年前の日記]

#1 [mz] 浮動小数点について調べてる

MZ-700 S-BASIC は、BASICソース内の数値を、5byteで収まる浮動小数点形式で記録している。テキスト出力するためには、1byteずつ読み取って、数値に変換してやらないといけない。が、どういうフォーマットで記録されているのかが分からないと変換しようがないので、そのあたりを勉強中。

例えば、C言語の場合、float (32bit = 4byte) と double (64bit = 8byte) があり、Python場合、float と言っても C言語の double 相当のようで。

MZシリーズの SP-5030, S-BASIC で使われている浮動小数点数は、40bit = 5byte。なので、C言語の float より、ちょっとだけ細かい数値を扱える、のかな。たぶん。

一般的な浮動小数点数 (IEEE 754) は、以下のようなフォーマットになっているようだけど。
(seeeeeee efffffff ffffffff ffffffff)b

s : 符号部  1 bit
e : 指数部  8 bit
f : 仮数部 23 bit
合計 32bit, 4byte

S-BASIC の浮動小数点数は、ちょっと違っていて、以下のようなフォーマットになっているっぽい。最初に指数部が来て、その後に符号、最後に仮数部が並ぶ。
(eeee eeee sfffffff ffffffff ffffffff ffffffff)b

e : 指数部  8 bit
s : 符号部  1 bit
f : 仮数部 31 bit
合計 40bit, 5byte

#2 [movie] 「アベンジャーズ/エイジ・オブ・ウルトロン」を視聴

TV放送版を録画していたので視聴。

脚本が上手い。CGが凄い。アクションも激しい。よくまあこんな映画を作れるなと…。

アイアンマンの人とハルクの人が数日かけて何かを開発している様子を、ゆっくり動くカメラワークを使って1カットで見せているあたりで、ぞっとしてしまったり。こんなカット、日本の映画ではそもそも発想しないだろうし、思いついたとしても、技術的にも予算的にもやれないよな…。単なる説明カットなのに、この凝り具合。しかも短時間でちゃんと状況が伝わるわけで効果も得られる。やるなあ…。とんでもないなあ…。

アクションシーン内で、ハルクの人にカメラを取り付けて表情を撮影してるようなカットが気になった。日本だと、バラエティ番組内で芸人さんがヘルメットにカメラをつけて表情を撮影したりするアレ。ハルクはCGなわけだけど、実際にそこに居るかのように錯覚させる手管として、その手の撮影方法で得られる映像をシミュレートした、みたいな感じなのだろうか。どうせCGなんだから嘘っぽくてもいいじゃん、などと諦めて思考停止せずに、ちょっとでもリアリティを付加できないか、お客さんをその気にさせられないかと工夫を惜しまない姿勢を感じたり。

冒頭の、1カットで長尺のアクションを繰り広げるあたりでも、CGから生身の役者に切り替わってアクションを見せて、そこからまたCGに、てなあたりで感心。昔、BTTFで、手前を横切る電信柱を境にして、ミニチュアのデロリアンと実写のデロリアンが切り替わっていたりして感心したものだけど。その手の頓智っぽいテクニックが、数え切れないほど使われているのだろうなと…。

とにかく、映像を見ているだけでもかなり楽しい。最近の映画は凄いことになってるなと…。

それにしても調べてみたら、このシリーズってもう22作も作ってるのか…。とてもじゃないけど、今から全作品を目にするのは無理だな…。

2019/05/15(水) [n年前の日記]

#1 [nitijyou] 自宅サーバ止めてました

雷が鳴ったので、17:10-19:45の間、自宅サーバ止めてました。申し訳ないです。

横殴り、かつ、雹混じりの強い雨。加えて雷…。飼い犬も怖がって、クーンクーンと鳴きながら縁側の下まで潜り込む始末…。

#2 [windows] Windows10上でプリンタが共有できず

自分のメインPCに接続されているプリンタから印刷したいと妹から要望があったけど。妹のPCから、共有されているはずのプリンタを指定して印刷しても、印刷が行われず。

先日、自分のメインPCを、Windows10 1803 から 1809 にアップデートしたので、その際に設定が初期化されてしまったのだろう…。一応、プリンタ関係の設定はざっと見直して、以前と同じ設定のように思えたのだけどなあ。

ググってみたところ、パスワード保護共有を無効にすれば、ネットワーク上の他のPCに接続されているプリンタを共有できるようになると知った。たしか前回もコレでハマった気がする。

_[Windows 10] パスワード保護共有の無効設定

しかし、設定が変更できない。無効にしても、有効に戻ってしまう。

原因は以下だった。

_[Windows 10] パスワード保護共有を『無効』に設定しても『有効』に戻ってしまう

Guestアカウントのパスワードを空欄にしないと、パスワード保護共有の有効無効を切り替えられなくなるという罠があるようで。なんだかな。

2019/05/16(木) [n年前の日記]

#1 [windows] OCRを試してたり

手持ちの書籍に列挙されてるデータをテキストデータにしたいなと思ったので、OCRの類を試してたり。

昔、ソースネクストで販売されてる、本格読取というOCRを購入したことを思い出したので、試しに使ってみたけれど、これが全然認識されず。どうやら元画像がよろしくないようだなと…。デジカメで斜めから撮影した画像だもんな…。

IrfanView も、プラグインを追加することでOCR機能が使えることを思い出したので試してみたけれど。

_mieki256's diary - IrfanViewのOCR機能を試したり

IrfanView 64bit版では OCR が使えなくて。64bit版をアンインストールして32bit版をインストールしてみたものの、OCR機能についてはUnicode がどうとかエラーが出て利用できず。結局、IrfanView の言語設定を英語にしたところ、OCR機能が使えるようになった。まだこちらのほうが、本格読取より、多少は認識してくれる。

今時は、オンラインで利用できるOCRもあると知り。

_Free Online OCR - convert PDF to Word or Image to text

試用してみたところ、そこそこイイ感じで認識してくれた。

たしか、以前の OCR については、認識処理自体は技術的に頭打ちになって、画像を認識しやすくする工夫や、誤認識した際の修正作業を楽にする方向で改良する流れになっている、と聞いた記憶があるけれど。今はAIがどうとか機械学習がどうとかが使えるらしいし…。その方向で改良された OCR は存在しないのだろうか。

2019/05/17(金) [n年前の日記]

#1 [mz] 「ADVANCED MZ-700」を眺めてる

MZ-700 関連の情報が載っている、「ADVANCED MZ-700」という書籍を眺めていたり。Hu-BASICの中間コード表が載っているので、これを参考にして mzt からBASICのソースコードをテキスト出力できないかな、と。

それはそれとして。記事の後半に、Hu-BASIC にコマンドを追加するテクニックが書いてあるのだけど、コマンド追加済みのBASICのテープを作るあたりで首を捻った。作業の流れは書いてあるけど、作業の中で使うプログラムが、一つ載ってないように見える…。記事の作成ミスだろうな…。

なんだかちょっと思い出せてきた。たしか当時も、コマンド追加済みテープを作ろうとして、しかしプログラムが載ってないから、そこで詰まってしまって作業ができなかった気がする。昭和の子供にとっては大金ともいえる、2,000円以上もする本だったのに、ちょっと酷い話だなと。

もしかすると Oh! MZ本誌に訂正情報が載っていた可能性もあるのかな。しかし、本誌はほとんど捨ててしまったから、もはや確認のしようもない…。

2019/05/18() [n年前の日記]

#1 [linux][raspberrypi] 手持ちの Linux機のメンテナンス

手持ちの各Linux機に対して、パッケージを更新。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

以下の製品・ディストリビューションに対して行った。
Raspberry Pi Zero W の処理が遅くて途方に暮れた。何時間かかっただろう…。まあ、スペックがスペックだから仕方ない…。

2019/05/19() [n年前の日記]

#1 [mz] Hu-BASICの記録フォーマットについて調べてる

Hu-BASICの記録フォーマットについて調べているところ。

#2 [anime] ライダージオウとマンホール

マンホールの蓋を大活用する絶世の美女の姿にシビレました。誰の発案なんだろう…。素晴らしい。

ひょっとすると、アベンジャーズのキャプテンアメリカへのオマージュ or パロディなのかなと思ったり。彼の盾は見ていてカッコイイのに、マンホールの蓋になると笑えてしまうのは何故。どっちも似たような形、似たような使い方なんだけどなあ。

カッコよさを追及していくとどこかで笑いに繋がったり、あるいは笑いも追及するとどこかでカッコよさに繋がったりするかもしれないと思ったりもして。おそらく中二病設定云々などはそういうところがあるような気もするわけで。

2019/05/20(月) [n年前の日記]

#1 [mz] Hu-BASICの記録フォーマットについてメモ

MZ-700用 Hu-BASICの記録フォーマットについて、 mzt をバイナリエディタで開いて眺めたり、bas2txt.c を眺めさせてもらったりして、ある程度分かってきた感じがするので、そのあたりをメモ。

数値について。 :

プログラム中に含まれている数値に関しては、色々な種類がある模様。

最初の1バイトを見ると、数値の種類が分かる。
  • 0x01 - 0x0A : 0 - 9 の数値を表す。
  • 0x0B, 0xXX, 0xXX : 行番号。2byte で示す。(GOTO xxxx, GOSUB xxxx)
  • 0x0D, 0xXX, 0xXX : 8進数。2byte で示す。(&Oxxxx)
  • 0x0E, 0xXX, 0xXX : 2進数。2byte で示す。(&Bxxxxxxxx)
  • 0x0F, 0xXX, 0xXX : 16進数。2byte で示す。(&Hxxxx)
  • 0x12, 0xXX, 0xXX : 整数。2byte で示す。 (xxxx)
  • 0x15, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX : 単精度小数点数。5byte で示す。(xxxx.xxx)
  • 0x18, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX : 倍精度小数点数。8byte で示す。

ちなみに、文字列は、ASCIIコードがそのまま並んでいるっぽい。

中間コードについて。 :

中間コードは、0x80 - 0xFD で示される群と、0xFE81 - 0xFEFF, 0xFF80 - 0xFFFF で示される群がある。一応、書籍「ADVANCED MZ-700」に書かれていた情報を、若干 _メモ してみたので、書かれている一覧表を眺めれば、ある程度は分かる…はず…。 *1

REM文について。 :

REM文は、ちょっと扱いが面倒な感じ。通常の「REM」は、「PRINT」等の中間コードと同様の扱いで読んでいけばいいけれど、REM の省略形として「'」という文字があって。この「'」が使われると、プログラム内では、自動で、マルチステートメントの区切り文字である「:」が直前に挿入される模様。

ただ、この場合の「:」は、LIST を打った際には表示されないので…。読み取っていく際に「:」が出てきたら、その直後が「'」であるかどうかを調べてみて、「'」があったら、その場合の「:」は表示しない、といった処理が必要になる模様。

ちなみに「ELSE」も「'」と同様で、直前に「:」が入るらしい。これも、読み取り中に「:」が出現、かつ、直後に「ELSE」の中間コードがあるなら、その場合の「:」も表示しない、といった処理が必要になる。

バイナリエディタで確認してみた結果。 :

各 .mzt を、バイナリエディタで開いて確認してみたソレも、一応アップロード。
  • .mzt は、最初の 0x80 byte がヘッダー情報。データ本体は、0x0080 以降に入っている。

以下のプログラムは…。
hu-basic_temp1_ss01.png

このように記録されている。
hu-basic_temp1_ss02.png
  • 水色 : 行の長さ
  • 緑色 : 行番号
  • 黄色 : 数値が入っている部分。上記の例では、整数(2byte)、及び、単精度小数点数(5byte)が記録されていることが分かる。
  • 紫 : 行の終端コード
  • 橙 : プログラム全体の終端コード

以下のプログラムは…。
hu-basic_temp2_ss01.png

このように記録されている。
hu-basic_temp2_ss02.png
  • 赤 : 行の終端コード
各数値は、最初に以下が書かれていることが分かる。
  • 行番号を示す数値は 0x0B
  • 16進数を示す数値は 0x0F
  • 2進数を示す数値は 0x0E
  • 8進数を示す数値は 0x0D

以下のプログラムは…。
hu-basic_temp3_ss01.png

このように記録されている。
hu-basic_temp3_ss02.png
  • 整数の 0 が 0x01、9 が 0x0A で記録されている。
  • 整数の 10 は、0x12, 0x000A になっている。
  • 最後のあたり、REMの省略形「'」(0x27)の前に、「:」(0x3A)が挿入されていることが分かる。LIST上では「:」なんて表示されてないけど、内部では「:」が挿入されているということ。

*1: ついでに、コマンドを増やすテクニック云々も _メモ してみましたが…問題があれば削除しますので、その時は指摘してください。

#2 [mz] S-BASICとHu-BASICのコントロールコードについて

MZ-700 の Hu-BASIC上で使われるコントロールコードについて調べていたら、どうやら SP-5030 や S-BASIC とは異なるコントロールコードが割り振られていることに気が付いたり。SP-5030 や S-BASIC のつもりでテキスト変換していたら、カーソル移動のコントロールコードがさっぱり表示されなくて、改めて調べてみて、今頃気づいた次第。一応、マニュアルのソレを _メモ してみたり。

ちなみに、MZシリーズのBASICは、PRINT で表示する文字列の中に、カーソル移動のコントールコードを埋め込むことができるので、BASICのソースリストを眺めると、背景が白黒反転した矢印だらけだったりして「何ですかコレ」感が満載のような気がします。

ctrlcode_ss01.png

どうやって入力するのかすっかり忘れてたけど、どうやら GRAPHキー(MZ700WIN なら Page Upキー)を押してからカーソルキーを押すと入力できるようで。通常の入力に戻すなら英数キー (MZ700WIN なら TABキー)。

小文字やひらがなの表示。 :

MZ-700のBASIC上で、小文字やひらがなを入力すると、BASICソース内では、ニコちゃんマークが前後に入る模様。当時は使っていたはずだけど、完全に仕様を忘れていました。

ctrlcode_ss02.png

ベタ塗りニコちゃんが、「ここから小文字・ひらがなが始まるよ」の印で、線のみニコちゃんが「ここから大文字・カタカナに切り替わるよ」という印なのかな。たぶん。

そもそも、この文字、ニコちゃんマークという呼び方でいいのだろうか…。ひょっとして、 _スマイリーフェイス と呼んだほうがいいのかな。

2019/05/21(火) [n年前の日記]

#1 [mz][python] MZ-700用BASICプログラムをテキスト出力するツールを書いてみた

MZ-700 S-BASIC、MZ-700 Hu-BASIC、及び、SP-5030用のBASICプログラムが入ってる .mzt を読み込んでテキスト出力するツールを、Python 2.7 を使って書いてみた。

_mieki256/pymztbas2txt: Convert SP-5030/S-BASIC/Hu-BASIC program to text.

動作確認環境は、Windows10 x64 1809 + Python 2.7.16 32bit。

おそらく何かしらのバグが残ってそうだけど…。手元ではそこそこ変換できてるっぽいので一応公開。

使い方。 :

使い方は以下。

--target xxxx で、対象のBASIC種類を指定する。sp5030, sbasic, hubasic が指定できる。
python pymztbas2txt.py --target sp5030 MZT_FILE
python pymztbas2txt.py --target sbasic MZT_FILE
python pymztbas2txt.py --target hubasic MZT_FILE

--jp をつけると、shift-jis (全角カタカナ)を交えた出力になる。指定無しなら、全てASCIIコードで出力する。
python pymztbas2txt.py --target hubasic --jp MZT_FILE

通常は標準出力に出力するので、ファイル保存したいときはリダイレクトを使う。
python pymztbas2txt.py --target hubasic --jp MZT_FILE > temp.txt

ヘルプ表示も可能。
python pymztinfo.py --help

ちなみに、ASCIIコード以外は、「{80}」「{FF}」といった感じで出力することにした。カーソル移動を示す文字は、「{↓}」「{←}」といった感じで、また、大文字・カタカナ、小文字・ひらがなを切り替える文字は、「{lower}」「{upper}」といった感じで出力。とにかく、「{」と「}」が出てきたら、その文字は MZ-80K/1200/700特有の、今時のフォントでは表示できない文字、ということで。

bas2txtを使ったほうが良いかも。 :

ちなみに、MZ-700 S-BASIC、Hu-BASIC 用プログラムをテキストに変換するツールとしては、C言語で書かれた bas2txt というツールが既に存在しているので、そちらを使ったほうが確実だし早いわけで。

_We Love MZ-700

ソースが大変参考になりました。ありがたや。

さておき、今回書いたツールの特徴としては…。
  • SP-5030 にも対応したつもり。
  • Python で書いてあるから改変が容易。
といったところかなと…。まあ、本来はもっと違うことをしてみたくて、その下準備として試しに書いてみた感じなのですが。

MZシリーズ特有の文字を表示できないものか。 :

今時の環境で、MZシリーズ特有の文字を表示できないものか…。専用フォントを作成してどうにか、というのは無理かな…。

2019/05/22(水) [n年前の日記]

#1 [pc] BDFフォントについて調べてる

MZ-700のBASICプログラムのリストをWindows上でそれっぽく表示できないか、と夢想したり。

表示するためには、Windows上で利用できる形式のフォントが必要になりそう。どうやって作ろうか。まずは、bitmapフォント形式として比較的メジャーと言えるBDFフォントを一旦作成して、そこからTTFフォントに変換して、という流れはどうだろうと。

そんなわけで、BDFフォントの仕様について調べていたり。

_itouh: BDFについて
_書体関係 Wiki - フォントの自作に挑戦
_bdf2ttfコマンドでBDFフォントをTTFフォントに変換する | Simple is Beautiful.
_how to use BDF fonts on Windows, convert to TTF with bdf2ttf
_bdf2bmp
_bmp2bdf
_PC-98のフォントをWindows用フォントに変換- radioc.dat

しかし、調べているうちに、割り当てる文字コードで悩んでしまった。

MZ-700 の場合、0x20 - 0x5D まではASCIIコードに沿っているけど、それ以外はめちゃくちゃな番号が割り当てられていて。

_mz-80K Display - Enri's Home PAGE (mz-80K)

半角カタカナすら、0x81 から始まるわけで。そこは 0xA1 から始まってくれないと…。

_半角カナ - Wikipedia

文字の形も、ほとんどが図形ばかり。どこに割り振ればいいのやら。とりあえずは、全部外字に突っ込む、とか…。

_外字 - Wikipedia

Shift_JIS の場合は 0xF040 から、Unicode の場合は U+E000 から使ってしまっていいのかな…。

2019/05/23(木) [n年前の日記]

#1 [mz] BDFフォントっぽいものは作れたけれど

MZ-700のフォント画像っぽいものを読み込んで、BDFフォントっぽいテキスト形式で出力する Pythonスクリプトは書けた。

BDFフォントっぽい形で生成できたのはいいけれど、このデータが本当に合っているのか、そこが分からない。何かのツールで確認したい。

幸い、Ubuntu Linux 18.04 LTS なら、BDFフォントを開いて編集できる gbdfed というアプリがインストールできると知り、VMware Player 上で Ubuntu 18.04 LTS を起動して、sudo apt install gbdfed でインストール。 *1 生成したBDFを試しに開いてみて、それらしいデータができていることを確認できた。

このBDFを、TTFに変換して、Windows上でも表示できるようにしたい。

bdf2ttf を使えば、アウトラインフォントは一切含まれていないけど、ビットマップフォント部分は埋め込まれている状態の TTF に変換できるはず。試してみたり。

_koron/bdf2ttf: Convert BDF font file to TTF (embed bitmap as is, not conver to vector)

特定のフォントサイズ(6pt?)を選べば、数字や大文字が表示できるTTFは生成できた。しかし、それ以外の文字 ―― 外字領域に割り当てた文字を入力・表示する方法が分からない。

そもそも、文字コードの指定が正しくないのでは、という気もする。 _ISO 8859-1 とか、 _JIS X 0208 とか、 _ISO 10646 とか、一体どれを指定すれば、Windows10上でもそれらしく使えるのか…。

Unicode対応、つまり ISO 10646 を指定して作っておけば表示できるのだろうか。よくわからんです。
*1: Ubuntu Linux の以前のバージョンでは gbdfed が公式リポジトリから削除されたようだけど、18.04 LTS から復活していたっぽい。助かる。ありがたや。

2019/05/24(金) [n年前の日記]

#1 [nitijyou] 某所に行ってきた

電動自転車で行ってきた。詳細はGRPでメモ。

一応メモ。Windows XP上でアプリ画面が文字化けしたり、右クリックメニューの項目の一部が「????」になったり、コマンドプロンプト上でツールのヘルプを表示しても日本語表示されなかったりする症状が出た場合、の解決策。「地域と言語のオプション」 → 詳細設定タブ → 「Unicode対応でないプログラムの言語」を日本語に設定し直してOS再起動。

_ツールバーやメニューの一部が「????????」と表示される | Panasonic サポート情報 パソコン周辺機器(P3) Q&A
_アプリケーションソフトが文字化けする<Windows(R)XP>: dynabook.comサポート情報

2019/05/25() [n年前の日記]

#1 [pc] NVIDIA 3D Visionがとうとう消滅した模様

WIndows10 x64 1809 + NVIDIA GeForce GTX 1060 上で、430.64-desktop-win10-64bit-international-dch-whql.exe をインストールしたところ、3D Vision の設定項目が出てこないことに気づいたり。そういえばインストール時、インストールされる項目が、以前と比べて少なかったような…。

もっとも、3D Vision は、2019/03 の時点で「終了するわ」と発表されてたので、とうとうその時が来たのですね、という感じではあるのだけれど。

_NVIDIA,3D立体視システム「3D Vision」のサポート終了を告知。Kepler世代のノートPC向けGPUサポートも打ち切りへ - 4Gamer.net

3D立体視ができるかもしれんという理由で NVIDIA製GPU + 立体視対応ディスプレイを購入した自分としては、なんだか裏切られた気分。

それはともかく、425.31-desktop-win10-64bit-international-dch-whql.exe までなら 3D Vision も同梱されているっぽいので、425.31 をインストールし直した。

と言っても…。ここ数年、3D Vision はドライバ更新直後の動作確認時しか有効にしてなかった気もする。有効にすると、通常アプリの表示で不具合が出たりするので、基本的には無効にして使うようになってしまったし。たしか Unity で作られたアプリは立体視できなかった記憶もあるので、その手のアプリは TriDef 3D を使っちゃうし。そう考えると、無くても別に、というところも正直あるなと。

でもまあ、今まで利用できた機能が使えなくなるのは、気分的にもやもやする。自分で「使わない」ことを選択するのと、他者から「使えない状態」を強制されるのは、気分的に違うので。

雑感。 :

3D Vision に対して、個人的には…。まずは「立体視」という市場を確立することを最優先にせず、最初から「NVIDIA製GPUを経由して立体視をしたいならライセンス料を払え」と言い出しちゃったのが失敗だったのではないかと思っていたり。

今後使えるのか使えないのかも分からない段階からそういうことをしていたから、ディスプレイメーカも、「ライセンス料なんか払ってられるかよ」とNVIDIAと契約しなかったりもして。

その結果、立体視可能なスペックを持ってるディスプレイをせっかく買っても、PC利用時は立体視ができなかったし。せいぜい、TV放送されていた、左右に画面を並べた解像度の低い映像しか立体視できなくて、「立体視と言ってもこんなもんか」「ショボいですね」とユーザに思わせちゃったりして。

こんな状態で市場が確立・存続できるわけがないよなと。

つまり、NVIDIAは、金の卵を産むガチョウを早々に潰して肉にして売っていた、そんな印象があるわけで。まずはある程度市場そのものを育てないと…。まあ、TVだの、ディスプレイだのが既にあったから、全然違う市場を作るのではなく、既存の商品ジャンルの延長線上で楽に商売ができるかも、と考えていたところもあるのだろうかと邪推したりもするのですが。

そもそも立体視がアレ。 :

もっとも、仕組みからして立体視が普及せずに終わるのは必然、と言われそうでもあるなと。
  • アクティブシャッター方式は、解像度はともかく光量が落ちるし、ディスプレイ側もメガネ側もコストがかかるし。
  • 偏光フィルタ方式は、コストは安く済むけれど、縦解像度が半分になるし、やっぱり光量は落ちるし。メガネのデザインが悪くて、左右画面の分離がちゃんとできなくて、おかしな映像に見えたりもするし。
光量が落ちて色がショボくなるとか、チラつくとか、映像機器としては結構致命的だよな…。

更に、TV放送された立体視映像は、左右の画面を横方向に並べているから、偏光フィルタ方式では結果的に1/4の解像度になっちゃうのが厳しかった。フルHDの表示デバイスを使っていてもSD画質+αになるのだから、そりゃ「こんなもんか」と思われちゃうよな…。

それに、HMDの類 ―― 左右の映像が、チラつきもなく、光量も落ちず、解像度も保証された別々の映像として提示される表示デバイス ―― で立体視を体験してしまうと、アクティブシャッター方式も偏光フィルタ方式も見れたもんじゃない、と感じてしまうあたりも…。

そもそもメガネの類をかけないとTVやPC画面を見れないという時点で、一般ユーザにとっては面倒臭いわな…。まあ、その面倒臭さすら我慢できるレベルの何かしらを提示できなかったのがアレだけど。

今後はVRの機材に期待するしか…。と言ってもググってみたら、これまた厳しい。独立型を謳いながらも初期設定にスマホが必須・PCの利用不可と妙な制限を無意味につけてみたり。そもそも既存の立体視環境より数倍のコストがかかるし。また普及せずに終わりそうな気配。

ところで。偏光フィルタ方式のデメリットは解像度が落ちてしまうこと、だったけど。当時から、「4Kディスプレイなら解像度の問題は解決する」「しかし4K対応液晶は高いので商品化は現実的ではない」と言われてたわけで。しかし、今現在は、どうなのか。4Kは今でも非現実的なのか。そうではないよなと。

せっかく偏光フィルタ形式のデメリットを解決できそうな状態になってきたのに、どこのメーカも立体視から手を引いてしまったのは、どうなんだろうなと。いよいよあの方式の本領発揮、ここから挽回、と言えそうな時期に、業界の空気にまんまと支配されて、機会損失(?)になっていたりしないか。あの当時、「もっと解像度の高い液晶を低コストで入手できれば」とボヤいてたことを、皆、もう忘れたのだろうか。それとも、そんな議論すらしてなくて、「他社が出してるからウチも」的に、単なる空気で安易な製品企画を立ててたメーカが大半なのだろうか。

というか、昔は無理だったけど今ならイケそうな仕組みって他にもありそうな気も。

#2 [anime] 「ブラッククローバー」84話を視聴

凄い作画だった…。あまりに凄過ぎて、もはや何をやってるのか分からないレベル。稀にとんでもない映像が出てくる作品だなと…。素晴らしい。

2019/05/26() [n年前の日記]

#1 [cg_tools] bdfresizeというツールがあると知った

画像ファイルからBDFフォントを作成する際、フォントサイズを2〜4倍等の整数倍したBDFも欲しくて、元画像を EDGE2 で拡大・保存してから、必要なサイズ分、変換処理を繰り返していたのだけど。ググっていたら、bdfresize なるツールが存在すると知った。とメモ。

_Ubuntu Manpage: bdfresize - Resize BDF Format Font

Ubuntu Linux や Debian Linux なら、パッケージとして用意されているらしい。以下でインストールできる。
sudo apt install bdfresize

bdfresize --help と打ってみた感じでは、-f でサイズ指定ができるのかな。たぶん。
bdfresize -f 2 src.bdf

そのままだと標準出力にテキストがずらずらと表示されるので、リダイレクトでファイル保存。
bdfresize -f 2 src.bdf > dst.bdf

出力結果を眺めた感じでは、単純な拡大 ―― 最近傍補間(Nearest neighbor)で拡大した状態のBDFフォントになる模様。

このツールのおかげで、拡大画像を別途用意しなくて済むようになった。ありがたや。

拡大率に小数点数を指定した際にどうなるのか、そのあたりは確認していないけれど、おそらくガビガビした見た目になるのではなかろうか。たぶん。

というか、前述のページを眺めた感じでは、小数点数は指定できない気配。「3/2」のような指定になるらしい。

余談。 :

BDFフォントの見た目がどうなるか確認する際は、gbdfed が使える。

_Ubuntu Manpage: gbdfed - GTK-based BDF font editor

2019/05/27追記。 :

試しに、非整数倍でも拡大してみた。

bdfresize -f 3/2 src.bdf > dst.bdf
bdfresize -f 5/2 src.bdf > dst.bdf
bdfresize -f 7/2 src.bdf > dst.bdf
それぞれ、1.5、2.5、3.5倍になるはず。

出力結果を gbdfed で開いて眺めてみたけど…。一応、読める文字の形に見えるな…。読めれば、まあ、問題無いのでは…。

2019/05/27(月) [n年前の日記]

#1 [cg_tools] bdfresizeをWindows10上でビルドしてみた

BDFフォントに対して、フォントサイズを拡大してBDF生成ができる、bdfresize というツールがあることを知ったわけだけど。Linux上でしか使えないのはちょっとアレだなと。Windows上で利用できないものか。

ググってみたら、以下のページに遭遇。Cygwin上で bdfresize をビルドする手順が載っていた。

_PC-98のフォントをTrueTypeフォントに変換する - ひかえん2の日記
_Index of /efont/dist/tools/bdfresize

Cygwin でビルドできるなら、MSYS2 + MinGW32 でもビルドできたりしないかな。試してみたり。環境は Windows10 x64 1809 + MSYS2 MinGW 32-bit (32bit)。

「MSYS2 MinGW 32-bit (32bit)」のショートカットで、Mintty + bash を起動して、以下を実行。
mkdir ~/prg
cd ~/prg
wget http://openlab.ring.gr.jp/efont/dist/tools/bdfresize/bdfresize-1.5.tar.gz
tar zxvf bdfresize-1.5.tar.gz
cd bdfresize-1.5
sed -i '/*malloc();/d' charresize.c
./configure
make
make する前に sed を使って、charresize.c 内で *malloc と書いてある行を削除しないと、コンパイル時にエラーが出る模様。

大量に警告が表示されたけど、一応、bdfresize.exe が出来上がった。

試しに、bdfresize.exe を他のフォルダにコピーして、DOS窓上で実行。なんだか動いてるっぽい。たぶん。

一応、ビルドできたソレを置いときます。

_bdfresize-1.5.zip

ソースファイル群を眺めたら GPL と書いてあったので、ソースその他も全部一緒に添付しておけば配布できるのではなかろうか。違うのかな。

ちなみに、VMware Player + Windows XP 上でも動作することを確認した。

2019/05/28(火) [n年前の日記]

#1 [cg_tools] BDFフォントをアウトラインフォントにしてみたい

bdf2ttf を使うことで、BDF ―― テキスト形式で書かれたビットマップフォント ―― を、ビットマップフォントを埋め込んだ状態のTTFに変換することはできたのだけど。

フォントサイズ指定に制限があるのはやはりちょっとアレだなと。どうせ元は 8x8ドットのフォントなのだから、ドット感がそのままのアウトラインフォントにできないものだろうか。

ググってみたら、FontForge を使うことで、取り込んだBDFを自動トレースしてアウトラインフォントにすることができるらしい。

_"bdf2ttfする方法。bdfresize -f 50でbdfを大きく...
_How to convert a bitmap font (.FON) into a truetype font (.TTF)? - Stack Overflow
_FontForge - An Outline Font Editor / Re: [Fontforge-users] convert BDF to TTF

Ubuntu Linux 18.04 LTS や、Windows10 x64 1809 上で、FontForge を起動して試してみたり。
  1. bdfresize を使って、かなり大きいBDFフォントを生成。bdfresize -f 64 hoge.bdf > hoge_x64.bdf とか。
  2. FontForge を起動して、「新規」を選択。
  3. エンコーディング → エンコーディング変換 → エンコーディングを指定。
  4. エレメント → フォント情報。「一般情報」で、EMの大きさ=2048、高さ=2048、深さ=0、下線の位置=0、Height=0に。
  5. ファイル → 取り込み → BDFフォントを選択。「背景として使用」にチェック。
  6. 編集 → 選択 → 出力に値するグリフ。
  7. エレメント → 自動トレース。
  8. エレメント → 座標を丸める、単純化、等々をして各文字の形をシンプルに。
  9. ヒント → ヒントを削除。
  10. メトリック → 幅を設定 → 2048 に。
  11. エレメント → フォント情報。フォント名が変わってしまっているから入力し直し。
  12. ファイル → フォントを出力。ttfを選んで保存。

たしかにアウトラインフォントっぽくなったのだけど、TTF を出力しようとすると「Self-intersecting」というメッセージが大量に出てしまう。どうやら「自己交差」という意味らしいけど…。ドット感をそのまま出した形状だと頂点が重なってしまうから自己交差と判断されてしまう模様。あまりに数が多すぎて、手作業で修正するのはちょっと厳しい。自動で修正できないものか…。まあ、一応 TTF として出力できるようだし、無視して出力しちゃおう…。

ちょっと関係ない話だけれど。Windows10 x64 1809上で、公式配布されてる FontForge 2019-04-13版を動かすと、入力欄で英文字を打っても半角カタカナになってしまう。Gtk+ のバグが、またしてもこんなところで出現するのか…。メモ帳等で文字列を打って、コピーして、FontForge の各入力欄に貼り付けをしてどうにか。

potrace使用時のオプションをメモ。 :

以下のページで、potrace使用時のオプション指定が書かれてたので引用メモ。

_How to convert a bitmap font (.FON) into a truetype font (.TTF)? - Stack Overflow

--turdsize 0 --opttolerance 0 --unit 1 --longcurve --gamma 0 --blacklevel 0 --cleartext

FontForge 上では、ファイル → 環境設定 → アプリケーション、の設定で、potrace 利用時の設定ができるので、そこに上記のオプション文字列を貼り付けて「potraceを使用」をオンに、すればいいのかな。たぶん。

potrace のオプションについては以下が参考に、なるのだろうか。英文だからちょっとよくわからん…。

_Peter Selinger: Potrace

#2 [cg_tools][python] Pythonにもbdf2ttfというパッケージがあるらしい

ググっていたら、Pythonのパッケージで、bdf2ttf というものがあるようで。

_bdf2ttf - PyPI
_keidax/bdf2ttf.py

名前からして、BDF を、いきなり TTF に変換してくれるのだろう。素晴らしい。

気になって試用してみようとしたものの。これがちょっとややこしい状態で。

まず、該当パッケージは、fontforge というPythonパッケージを必要とする。Ubuntu Linux 18.04 の場合、fontforge と一緒に、python-fontforge もインストールすれば入手はできる。

sudo apt install fontforge
sudo apt install python-fontforge

ところが、この python-fontofrge は、Python 2.7用。

そして、bdf2ttf は、Python 3.x用のパッケージで…。つまり、Python 3.x 用の fontforge が無いと bdf2ttf は使えないのだけど、Python 3.x用の fontforge なんて無いわけで。これでは試用できない…。

bdf2ttf の作者様は、どんな環境でコレを作ったのだろう…。不思議だ…。

2019/05/29(水) [n年前の日記]

#1 [mz][cg_tools][python] MZ-700風互換フォントのBDFやTTFを作成してみたり

ここ数日、Windows上でMZ-700風のフォントを表示できないかと夢想しつつ実験をしていたり。結果として、BDFフォントやTTFフォントを試しに作ってみた次第。あくまで実験。実用性は無いです。あるわけがない。とは言え、WindowsアプリでMZ-700風フォントが表示されてるの図は、ビミョーにちょっとクラクラできる気もしたりして。

_mieki256/mz700fon2bdf: Generate compatible font like MZ-700

上記ページの右上の「Clone or download」をクリックして zip をダウンロードして、解凍して、中から .ttf を取り出せば利用できるかと。

スクリーンショット。 :

以下は、メモ帳で、自作のMZ-700風互換フォント、Pet2015bdfを指定した場合。フォントサイズは12ptを指定。

ss_pet2015bdf.png

以下は、MZ-700フォントに見える感じの画像を変換した、Mz700bdf を指定した場合。

ss_mz700bdf.png

以下は、メイリオフォントを指定した場合。前述のフォントを指定しながら、 _特定の全角文字 を打てば、MZ-700風の図形文字を表示できることが分かるかなと。

ss_meiryo.png

注意点。フォント選択時、フォント名が出てこないのは仕様。

ss_fontselect.png

昨今のフォント選択ウインドウは、そのフォントを使ってフォント名も表示するのだけど。今回作った .ttf は一部のフォントサイズ(6, 12, 18, 24, 30pt)しか有効ではないので、フォント選択ウインドウ上で使ってるフォントサイズを指定されても、そんなフォントサイズは持ってないから、フォント名も表示されない状態になるわけで。

今回試したこと。 :

  • Python + Pillow(PIL)で、1文字8x8ドット、16x32個が並んだフォント一覧画像を読み込んで、BDF形式でテキスト出力してみたり。
  • BDFフォントを拡大して別のBDFを生成できる、bdfresize を使ってみたり。
  • 複数のBDFからビットマップフォント埋め込みTTFを作成できる、bdf2ttf を使ってみたり。

課題。 :

  • BDFからアウトラインフォントを作りつつ、そこにビットマップフォントを埋め込む作業の手順が把握できてない。
FontForge を利用して、アウトラインフォントに変換する作業は、昨日の作業で少し分かりかけてきたのだけれど。そこに、ビットマップフォントを埋め込めるのかどうか、まだ把握できてない状態。

ライセンスについて補足。 :

Pet2015bdfフォントの、英数字、カタカナ、ひらがら部分は、自分がドット打ちした部分なので、自由に使えるはずです。図形文字は、まだ一部、MZ-700のソレが残ってるけど…。

MZ-700フォント画像は、配布しちゃってもいいのか悪いのか分からんけど、とりあえず一緒に置いときました。まあ、気になる人は互換フォントだけ使えば済む話かと。

レトロPC、特にMZシリーズのフォントのライセンスは、何がアウトで何がセーフか、よくわからんのですよね…。詳しくは以下を。

_mieki256's diary - レトロPCのフォントの著作権って一体どうなっているんでしょうね

#2 [zatta][game] レバーとボタン

ネット上のニュースを眺めてたら、なんだか気になる話が。

_海外の大型格闘ゲーム大会にて特定のコントローラーが使用禁止に。背景にあるのは、“あいまいだったレギュレーション” | AUTOMATON

今後世間様に競技として認知させていきたいジャンルなのだから、ルールを厳格にしていくべき、という流れは妥当だろうと思いつつ。しかし、ゲームの入力機器の歴史を思い返すと、ちょっと複雑な気分になってしまうところもあるなー、と思えてきたりもして。

以下、思考メモ。おそらく件のニュースの話の本筋からずれてます。只の思考メモです。

レバーとボタンが正解とは限らない。 :

大昔のアーケードゲームって、レバーとボタンで必ず入力させる仕様ではなかったというか、ゲームのタイトル毎に入力機器の仕様が違っていたのが当たり前だったよなと…。パドル入力とか、レバー2本とか、色々あったような。そもそも、格ゲーの代表事例であるストリートファイターシリーズも、最初のヤツはボタンを叩く強さでアクションが変わる仕様だった気もする。 *1

本来、ゲームを快適に遊んでもらうためには、ゲーム内容に即した入力機器が提供されるべきで。だから昔のゲームは、タイトル毎に入力機器の仕様が違っているのもアリだったのだろうなと。ゲーム内容が違うのだもの、コントローラだって違って当然っしょ。みたいな。

だけど、商品が変わるごとに入力機器の仕様が変わる、筐体が必ず変わるとなると、店側は導入費用が高くついちゃうし、ゲームメーカも毎回入力機器の設計をし直す羽目になるからコストがかかるしで。使い回しができる筐体のほうが商売上は助かるよね、せめて基板の入出力コネクタぐらいは共通規格にしませんか、ということになって、業界で _規格 が作られて、てな歴史があったりもするわけで。

しかし、規格や筐体が決まり、入力機器もレバーとボタンで固まってきて、開発現場はコレを前提にしてどうにかせい、と強制されると、今度はゲームを作る側がちょっと困ってしまって。「このコントローラ仕様ではプレイヤーキャラに色んなアクションさせられないなあ。ボタンが足りない。どうしよう」「そうだ。レバーとボタンの組み合わせでコマンドを入力できるようにしてみたらどうだろう」と閃いて…。そうやって、いわゆる格ゲーというジャンルのフォーマットが固定するわけだけど。

汎用性を重視した入力機器仕様を強制されてしまったから、苦肉の策としてコマンド入力という仕様が盛り込まれた、と言えなくもないよなと。「お客さんに楽しくゲームを遊んでもらおう」と思ってそういう仕様にしたというより、「商売の都合でこうなってしまいました」てな側面のほうが大きい、そんな気もしてきたり。 *2 つまり、格ゲーとは縛りプレイである、とも言えそうな。

てなことを考えていくと、レバーとボタンだけで戦え、という方針は、これははたして格ゲーというジャンルの今後の発展を考えた場合に正しいのかどうか、ちょっと悩むなと。格ゲーは本当にそれでいいのか。実はもっと楽しく遊べる・盛り上がれる入力仕様があったりするのではないか。などと不安になってきちゃったりもして。

でもまあ、元々が縛りプレイだったジャンルだし、今更かも…。

厳しくするのも緩くするのもどちらもアリかも。 :

いわゆるeスポーツって、要は見ているお客さんが盛り上がればジャンルとして成立するのだろうと自分は想像しているのだけど。野球やサッカーもそうだし。であれば、観客を盛り上げるために各種ルールが設定されていくのが妥当であろうと。

となると、レバーとボタンだけで戦え、というルールは、見ているお客さんがより盛り上がることに繋がっていくのかどうか、という疑問も。どうなんだろう。

てなあたりからバカ妄想。格ゲーが元々縛りプレイであることを意識できたら、それを加速する方向に進むことだってできるかも。ジャンプ禁止とか、必殺技封印とか、片手操作とか、足で操作とか。そういうルール・部門だって作れなくもないよなと。そのほうが盛り上がるなら、という前提付きの話だけど。

逆の方向もアリかもしれず。何を使っても構わないからとにかく勝て、派手に戦え、みたいな。各人が色んなコントローラを使う中、レバーとボタンで攻略しちゃう達人が出てきて更に盛り上がったり。とか。

大昔にTV放映されていた鳥人間コンテスト等でも、ひたすら記録を伸ばすことに注力し続ける参加チームと、一発ネタで観客を笑わせるチームに二分していた記憶があるけれど。eスポーツも、そういうカテゴリ分けができたりしないか。ひたすら勝つことに注力する試合とは別に、絶対勝てるわけがないんだけど操作してる人の悪戦苦闘を眺めてるだけで観客大爆笑、みたいな何かというか…。

どこかのユーチューバーが、そういうことをしたりしないかな。eスポーツには絶対出れないぐらいに低レベルだけど、その人のプレイを見てるだけで皆が元気になれる、みたいな。「レバーとボタンしか使っちゃダメ」とeスポーツが固いことを言ってるのを尻目に、「今日はこんなトンデモ機器でプレイしてみました!」的動画をアップしてお客さんに喜んでもらうゲームプレイヤー。って既に居そうな気もする…。色んな人が居るもんな。絶対居るよな。

何にせよ、大昔のゲームの入力機器がバラバラだったように、ゲームのプレイの仕方も色々あったほうが楽しいんじゃないか、などと素朴なことを思ってしまったりもして。もちろん、その「色々」には、「あえてレバーとボタンだけ」や、「レバーとボタンにこだわらず」等々、何でも含まれていて…。

楽しくなるなら、どんなルートもアリだよな、と。

余談。 :

個人的には、eスポーツってどうなの、成立するのかね、と疑問視しているところもあって。

一般的なスポーツの場合、人間の肉体はちょこっと弄ればスペックが急激に変わるものではないので、じっくりと鍛えていかないと成果が出ないし、故に記録を伸ばすこと、残すことにも価値が生じるわけだけど。

しかし、ゲームって、開発スタッフがプログラム上の数値をちょっと弄るだけで、プレイヤーキャラのスペックが急激に変わったりするので ―― 競い合うための土台が、作り手という「神」の振る舞い次第で急変してしまうから、何かを競い合うという状況が成立しにくい気もするわけで。プレイヤーがどんなに訓練して技を磨いても、プログラマーが数値をちょっと弄ったら全部水の泡、では…。こんな不安定なネタで、記録云々という方向で競技らしく見せるのは、ちょっと無理があるんじゃないのと思っていたり。 *3 *4

だけど、観客を楽しませたほうが勝ち(みたいなもん)、と捉えれば、それならフツーに成立しそうだなと。もっとも、それはもはや競技ではないのかもしれない。プロレスのショーみたいなものになってしまうのだろうか。

こういうのって、「客を楽しませてなんぼ」で発展させるのか、「記録を残してなんぼ」で発展させるのか、どちらに進むかで定着するかどうかが違ってきたりするのかな、などと思ったりもして。どちらが残りやすいのかは分からんけれど。

てな感じのことをぼんやり思ってしまったのでメモ。只の思考メモです。オチはないです。

*1: しかしその仕様だとボタンが壊れてメンテナンスが大変だったから、ボタンを複数用意した版が作られたり、続編のスト2はデジタルなレバーとボタンで入力する仕様「のみ」になったのではなかったかしらん。
*2: もちろん、与えられた枠の中で、より楽しく遊んでもらいたいと考えた末に生まれた仕様だから、けして否定されるべきものではないはずで。
*3: 当然ながら、試合に使うソフトのバージョンは固定等、競技の土台がぶれないように工夫はするだろうけど、競技に使うソレと、市場で入手できるソレに大きな違いが発生したら、その場合どうなるのだろう、等の不安も。
*4: 肉体を使うスポーツも、ルールが改変されたらそれまでの努力が、ということがありえるから、一般的なスポーツも、eスポーツも、どちらも同じと捉えちゃうのもアリ、なのかも。

2019/05/30(木) [n年前の日記]

#1 [mz][cg_tools] FontForgeでTTFにビットマップフォントを埋め込めた

FontForge を使って ttf にビットマップフォント(.bdf)を埋め込む方法がたぶん分かった気がする。

BDFからアウトラインフォントを作成した後で、 これだけで済む模様。その状態から、ファイル → フォントの出力、を選んだら、「TTF/OTF埋め込み」を選べるようになったし、フォントサイズ(ドット単位)も複数表示されていたので、おそらくビットマップフォントを埋め込めたのではないかと判断。

以下、そうして作った MZ-700風フォント(Pet2015outline、Mz700outline)を表示してみた例。環境は Windows10 x64 1809。

pet2016font_ss01.png

それぞれ、フォントサイズで10.5ptを指定してる。BDFを埋め込んだだけのTTFでは、そんなサイズのフォントは含まれてないから表示されないけれど、この場合、アウトライン+ビットマップのTTFだから、アウトラインフォントとして表示されている。

ちなみに、6, 12, 18pt 等を選んだら、アンチエイリアスがかからずにクッキリした表示になったので、ビットマップフォントが埋め込んである状態、なのだろう…。

pet2016font_ss02.png

出来上がった TTF も一応置いときます。BDFや、FontForge用のファイル(.sfd)も同梱。

_pet2015outline_20190530.zip
_mz700outline_20190530.zip

試しに作ってはみたものの、今のところ使い道は無く。

とりあえず、BDFフォントさえ作ってしまえば、FontForge + potrace を使って、アウトライン+ビットマップのTTFを作れることは分かったので、これはこれで良しとする。自分のことだから、そのうち手順を忘れそうだけど。

#2 [neta] eスポーツで夢想

夢想というかバカ妄想。

恋愛シミュゲーでeスポーツって無理だろうか…。何を競い合うのかで悩むけど。

そこから更にバカ妄想。エロゲーでeスポーツって無理だろうか…。誰が最初に以下自粛。

後者はそのまま、漫画やラノベ等、何かしらの作品設定として使えないかな。いや、それはどうだろう。関係団体に怒られるかもしれん…。

本当に、関係団体に怒られるのだろうか。例えば、オリンピックをネタにしたエロゲーやAVを作ったら、世界的に怒られてしまうのだろうか。そんな場面はほとんど見かけない気もする。であればeスポーツも大丈夫かな。いやー、どうなんだろう。そういう作品の存在を知られてしまったら、その時点でやっぱり怒られそうな気もするな…。

それはともかく。eスポーツで扱いやすいゲームジャンルと、扱いにくいゲームジャンルがあるのだろうなと。例えばSTGなどは、プレイ時間が長目だから観客も飽きそうだし、競技にしにくいのかもしれない。

なら、プレイ時間を短くすれば、STGでもeスポーツにできるのだろうか。それってどういうSTGになるのだろう。

eスポーツに向いてなさそうなゲームジャンルをまず洗い出して、それをeスポーツ向けにアレンジする、という流れで妄想していったら、ちょっと変わった商品が作れたりしないか…。

恋愛対戦シミュレーションゲーム、てのはどうか。ナニソレ。イメージが全然浮かばない…。

舞台についても夢想。 :

eスポーツの会場で、コントローラの入力状態に合わせて複数のライトがビカビカ光ったらどうなるだろう。素早い入力をすると、ライトがパパパパッパッパパッと光る、みたいな。そういう舞台装置が既に設置されてるイベントがありそうな気もするけれど。

必殺技が出ると、会場に風が吹いたりして。技の種類によって風の吹き方や強さも変わったり。しかし、そんなに都合よく、風って出したり出さなかったりできるのかな。常時、風を出していて、向きだけを細かく調整する仕組みならどうか。どういう装置になるのやら。

キャラが床に叩きつけられると、会場全体が揺れる仕組みになってる、とか。観客が、試合展開との強い一体感を得られるだろうな。でも、そんな装置は実現可能なのだろうか。大掛かりな仕組みになるよな…。

画面内で爆発すると、会場内でもリアル爆発が起きる、とか。某爆弾男を使ってイベントを開いたら、会場のあっちこっちでドッカンドッカン。あかんわ。色々とヤバイ。

まあ、そういうことをするためには、ゲーム本体に手を入れないといかんだろうけど…。とりあえず、トリガーと種類コードだけは出力しておくから、その先で何をどう動かすかはイベントを開催する方々に任せますよ、みたいな感じになるのかな。

ゲーム本体に手を入れなくても、人力・手動でやることだってできるかも。画面をずっと凝視して、この技が出たらこのボタンを押す、みたいなことをする担当の人が居て…。いや待て。ソレって、出場者並みの動体視力と反射神経を要求されるのでは…。

リズムについて夢想。 :

コントローラの入力で、会場に設置された複数のライトが光るとなると、そこにはリズムが発生するだろうな…。そうなると、まるで音楽を演奏してるかのようなプレイスタイル、なんてものも生み出せるのかも。それはもはや、VJ に近い気もする。

コントローラの操作でライトを光らせて、VJ紛いのことをできるなら…。ゲーム画面をそのまま使ってVJっぽいことはできないものだろうか。音楽のリズムに合わせて対戦していく、みたいな感じで…。ドラムに合わせて小・小・小・大キック、音楽が盛り上がってきたところでタイミングを合わせて必殺技。いやまあ、それって音ゲーじゃないのですか、という気もしてくるけれど。

それはもう、競技じゃないのだろうな。おそらく、ライブっぽい扱いになるのだろう…。

アクションゲームにおいて、プレイヤーキャラのアクションの一つ一つには、風切り音や打撃音等のSEが割り振られているものだけど。コード、バスドラ、オケヒ、「Hey!」「Come on!」等々、それっぽい音が鳴るように切り替わるモードを盛り込んだら、別のジャンルが出てきたり。するのかな。どうかな。どうなんだろう。ちょっと脳裏に「播磨体操第一」が。

2019/05/31(金) [n年前の日記]

#1 [zatta] 人感センサ付きLEDライトを購入

電動自転車でホームセンターサンデーまで。人感センサ付きLEDライト、ムサシ RITEX GS-150を購入。税抜きで1,280円、前後だった気がする。

ウチには6個ぐらい、人感センサ付きLEDライトが設置してあるのだけど、いかんせんほとんどが古い製品だからとにかく暗くて。ただ、以前 Amazon経由で購入した、ムサシ RITEX ASL-015 だけはかなりの明るさ。単4電池 x 3本のせいか、すぐに電池が切れて電池を交換しなきゃいけないのが若干アレではあるけれど。

_LEDセンサーmini(ASL-015) センサーライト|高枝切鋏のムサシ - musashi

さておき、数日前に親父さんから、トイレ前のライトが暗いと不満が出たので、せめてそこだけも件の製品と交換してみようと今回購入してみた次第。しかし、型番が違う…。スペック面では何が違うのか…。

ググってみたら、日本語向けページには型番が無いけど、英語ページなら型番があるように見える。もしかして、海外向け製品なのかな。

_Portable Sensor Light Mini(GS-150)

乾電池を購入。 :

親父さんから乾電池を買ってきてほしいと頼まれたので、ケーズデンキで MITSUBISHIブランドの単3乾電池 x 20本、maxellブランドの単4電池 x 10本を購入。値段が安いからすぐに切れるだろうけど、一応日本メーカのブランドで売ってるから液漏れ等はしないんじゃないかと期待。

#2 [nitijyou] 親父さんの体調についてメモ

詳細はGRPでメモ。

以上、31 日分です。

過去ログ表示

Prev - 2019/05 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project