2023年4月21日金曜日

少し先の未来への布石

 z80の乗ったリアルコンピュータが欲しい。
古くていじりがいのあるものなら何でも良い。
別に高機能なんて求めてない。でも同時にメンテのことを考えるとあまりに古いものはいかにも稼働率が低そうで憂鬱。

で、msxである。とりあえずはエミュレータでお茶を濁してやがては実機を手に入れる。(ヤフオクとかでmsx2+[日本語もいじりたいし、実機ならFDDくらいないとデータの交換もできないので]を見ると3万円の相場だけどそれで電源やドライブの不具合との闘いを考えると気が重いのでためらいがち)で、こんな選択肢にも目が行くけど本当のz80じゃないことにちょっと抵抗感もある。

うだうだ考えてもしょうがない。そもそもPC外部のハードウェアcp/mエミュでもtek4010グラフィックスの機能のあるteratermでつなげばグラフィックスが出せて面白いって思ったことに加えてmsx2+ならフォントがちょっと?だけど80文字表示できて漢字ROMも搭載してるのでBASICでもちょっと遊べそうだとか思ったことが出発点なわけだからまずはエミュでも十分ということになる。表示が8bitスルーならcp/m機でもc言語やmbasicでteratermで漢字表示位できるので実機であることとかmsxであることとか本当は関係が無いとも言えたりする。

なんだかグダグダになってきたけど要するに触りたくなったのでbulueMSXをインストールしてまずは定番のasciiartをmsx-basicでやってみた。

いろいろ計測してみたんだけどこちらの環境ではget timeが正しく働いてくれない。画面上ではget timeで得た開始時の時刻と終了時の時刻の差が45秒みたいに見えるけど実測では1'25"(=85秒)くらい[CPU速度1000%=10倍設定]cpu設定等倍で実測が14'16"(=856")なので確かに10倍の時間がかかっているのだけど表示は変わらない。
ちょっとこの辺りが要解決の問題ではあるがいろいろと楽しめそうでもある。
1)グラフィックスの表示
2)MSX-DOSはFATで管理されてて実行ファイルはcp/m互換でOK
ちょっとずつ触って落としどころを探ろうと思う。


2023年4月18日火曜日

3Dは思い通りにはいかない

 3Dプロットでよくあるソースを見てちょっとTeraTermに送る例をgccで書いてcom0com経由でTeratermに表示させてみた。

陰線なしの例

割ときれいに出ている。が、しかし陰線処理を考えてやってみると

なんだ!こりゃってなる。単に送るのとか先日のマンデルブロの描画はちゃんと送れてて描画できたことからすると自分の書いた陰線処理がまずいと言うことになるので・・
やはり付け焼刃で3Dを処理するのは難しいんですね。

機会があればもう少し突っ込むけどもっとプリミティブなこともやってみたいのでちょっとteratermでのグラフィックは間が空くかも・・
ま、z80とか生々しい方からもグラフィックス出せるらしいってわかったから成果はあったとしておく。


2023年4月11日火曜日

ちょっとお化粧とベンチマーク

 昨日のteratermでmandelbrotの描画で左下に寄っていたのをx,yともtek4010の規定値のサイズとのオフセットをとって画面中央に描画されるように調整した。

本当はwindowサイズを変えられると良いのだけどそのためのエスケープシーケンスをしらないのでとりあえずということで・・・
ついでにベンチマークとしてストップウォッチで時間を計測してみた。
転送速度のオーバーヘッドを見るのに115200bpsと921600bpsで計測してみたけど手動での結果はいずれも1:03位で変わらない。
(com0comで接続しているせいなのかもしれない。)
これを8bitのcp/m実機でやったら1000倍程度の速度差としても1000分=16時間以上かかることになるので今はチャレンジする気にならない。

もう少し検証時間が速そうなモデルを比較用に探そうと思う。

teratermでmandelbrot 一応の成果

 昨日のエスケープシーケンスを含んだ出力をteratermにcom0com越しに流し込んでうまく表示されることを確認してあったのでdotを表示さえできれば描画できるmandelbrot集合を書かせてみた。

teratermのグラフィック画面は左下が(0,0)で全体が1023x779dotで構成されるので左下に640x480のサイズのmadelbrot集合を描いたことになるので正しく描画されているようだ。(上下は反転していると思うけどもともとこの範囲は上下対象なのでわからないな)

もとの描画ルーチンはこちらの「Tektronix 4010(4014) グラフィック・ターミナルへ描画」を改造して使わせていただいた。
※著作権的に問題があるようでしたらご指摘いただけるとありがたいです。

windows11からcom0comへ115200bpsで送っている分にはやや遅いかなって感じだがこれをcp/mの実機からteratermへ送るのは見送りたい。
(時間を考えると勘弁してって感じ)
でも楽しいので次はもう少しドット数が少ない3Dグラフなどを出して楽しんでみたい。

2023年4月10日月曜日

低きに流さるるは水のごとし

 やっぱり楽な環境を覚えるとそちらを使っちゃうって話。

cp/mでc言語を使って3Dグラフィックスをやってみようと思っているのだけど(先人がたの後追いです、はい)、いちいちcp/mの環境内でソースを直してコンパイルして実行って手順を踏むのがめんどくさくなってきた。

で、今回やろうとしているのがcp/mからコンソール(としてのteraterm)にエスケープシーケンスでtek4010形式のコードを送ってグラフィックを実現するって言うこと。で、serialポートへの出力を正規に書いても良いのだけどmsdosにせよwindowsにせよcom0comっていうダミーのソフトウェアクロスケーブルを使えばCOMnへのリダイレクトでコンソールへの出力をteratermに送ることが出来ると踏んだのでその方針で開発することにする。

com0comのインストールで署名でちょっと躓いたけどドライバーの更新で事なきを得てめでたく仮想のクロスケーブルでつながれたCOM1<->COM2を得た。で、teratermを起動して新しい接続でCOM2を監視させてwindows側のcmd窓でgccでコンパイルしたasciiartをCOM1にリダイレクトしたのが下図。

左がteratermで右のcmd窓からのCOM1へのリダイレクトでasciiartの出力を受けている様子がわかる。
まだグラフィックのエスケープシーケンスなどを送る実験が出来てないけどとりあえず次はコンソール内の文字色を変更する実験でもしてみようと思う。

相変わらずこういうことが楽しいですね。


2023年4月2日日曜日

古すぎるハードは始末に困る

 ああ、分かっていたことなのに見出しの件を自ら味わうことになるとは。

EPSONのNP11をずっと使ってなかったけど家内LANから外して所有していた。これをNASにMYSQLを入れる実験用としてLinux化しようとして手持ちのSSDに換装してインストールしようとしたらまったく上手くいかない。

そもそもインストール画面がCD食わせても見えない。
調べてみたらこちらの方が数年前に苦労されていたことの後追いをやっていたようです。

まあスペックをみても

CPU:Atom 230@1.6GHz、RAM:1GB、HDD:SATA
といった感じだしちょっと無理ぽ、なのかな。

せっかくの古代電脳ではあるけど自分の手に余るようでは困りますね。

身の程を知ったうえでnano pi neoぐらいでお茶を濁すことにしよう。
こちらも初期に比べたら値段も上がったしneo2でもないんだけど遅いCPUには発熱的に有利とかメリットがあると信じてちょっとゲットしてみようかと計画中です。サーバ化の顛末は後日。

2023年3月23日木曜日

ああ、アホかと

昨日の固定小数点のmbasicのプログラムが間違っていた。

数値の積を出すときに3bitずつシフトする計算にしていたけど5bitずつだと思う。

6:10で表現すると1は1024で2は2048になり各々32で割ると32と64になるので掛けると 2048となり正しくなる

これで求め直すと下図を得た

割と良いのでは?
プログラムはこんな風ですね。(無事debugできた)



ちょっと実機(cpm8266)で試してみよう。
結果は3分49秒で素直に浮動小数計算をしたよりもかなり遅い。
やはり乗算前に小数点を補正するためにシフトでなく割り算の命令が4行も増えたこととdevide by zeroのエラーを避けるためにその各行がifで場合分けしてるのが重くのしかかっていると思う。c言語みたく素直な符号付右シフトがあれば速くなると思うんだけど・・・

で、hitech-cでやってみた。
最初はwondows 11の上でcpmコマンドでコンパイルして実行。
ちょっといびつで上下が非対称になっているけどそれが固定小数での誤差の味と思おう。
因みにmbasicとの違いはhitech-cのintが32bitなので6:26の固定小数点で計算しているため精度がかなり違う。もちろん同じ実行ファイルなら環境が変わっても答えは同じ。
cpm8266でやってみたら。当然ながら同じ結果を得た。
実行時間は12.2秒でhitech-cで浮動小数計算を使った版の3.6倍になりました。(ただし画面は似てるけどmbasicとは非なるモノなのでそこは愛嬌で・・)

一応、それなりに満足できる結果を得たのでこの話題はとりあえず終了。
次なる遊びを考えることにする。さて次は何をするかな?

月日が経つのは・・・

 姉妹Blog共々、7月の更新を忘れてました。 ちょっと色々あって古代電脳というか手続き型のプログラミングへの熱意が薄れてこのブログをどうするか考えてしまってます。 日々、いじればまた関心も高まると思うのでちょっと冷却期間に入ります。