goo blog サービス終了のお知らせ 

まったり アイマス2

アイドルマスター2 超ライトユーザーのプレイ日記

4643. プログラミングへ、続き^13

2024年11月30日 | 日記

 PascomMini PC-8001 (すでに発売終了後の方)の機械語からのキーボード入力と画面出力の呼び出しは、当然ながらPC-8001の解析本の通りでした。
 11バイトのお試しプログラムを作って動かしてみました。この程度ならN-BASICのDATA文に置いて、POKE文でメモリに書いてUSRn()で実行、で試せます。
 ついでながら、PC-8001のVRAM構成も検討しました。いわゆるアトリビュートの使い方です。これは実際に試さないと分からない部分があるように思いました。具体的な手順は、無事に88SR miniが出た時に書くことになると思います。

 で、とりあえずの障害は無くなったと見なして、東大版tiny BASICとマイクロPLANの解析に移るために、自宅の複合プリンタのスキャナで該当ページを取り込みました。
 なぜか、プリンタの付属ユーティリティを使うと勝手にpdf化されます。優秀なのですが、親切すぎて失敗した場合のフォローにまずまず手間がかかり、要するに有料のpdfソフトでないと修復できません。偶然に私は持っていたから助かりましたが、どこかに無料のがあるのかな。

 とにかく電子書籍化には成功しました。こんなに真剣に見たのは初めてです。前回、つまり40年前にはとにかく動作させることで精一杯で、中身までよく見ていなかったと思います。今回はこれの件で眺めていたので、詳細を詰める感じとなります。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

4642. プログラミングへ、続き^12

2024年11月29日 | 日記

 その小型のC言語の資料、ポケコンのC言語のマニュアルはすぐに出てきました。おそらく今回の私の試み用の資料は揃った感じがします。明日はPC-8001のキーボード入力と画面出力をアセンブラで使う方法のお試しと、東大版tiny BASICとマイクロPLANの中身の解析開始です。私の意欲が続く間に何らかのアウトプットを得たいです。
 当時とは開発系の環境が全く違っていて、楽と言えば楽です。

 PasocomMini PC-8001の発売直後に、ファンがゲームを作ろうとして、しかしあっという間にPC-8001の24KBのメモリを使い果たしてしまい、BASICでは速度がまあまあなので機械語化、と当時のマニアの動きを追従していたのが印象的です。ですから、当時のゲーム作成者がいかに優れていたか、ということ。

 専門職が応用に使うためのBASICでの科学技術計算の組み方の本も多く出ていて、パソコンの購入層で言うとこちらの方が堅実でしょう。その数冊が残っているので、時間ができて意欲が残っていたら分析したいと思います。

 PC-9801はIBM PC系と同様に、大型機やスーパーミニコンの成果を次々と取り入れて行きました。Z80はどちらかというと組み込み系で、我が国のゲーム機はこちらの構成だったと思います。例えば、日立のSHマイコンなどがZ80の後続と言えば後続でしょう。
 不思議なことにSHマイコンのPC-8801相当などは出たのかもしれませんが、主流にはなりませんでした。同じ立場のARMは組み込み系からパソコン的な応用に進出していますが、それはずっと後のこと。我が国ではSHの後続のマイコンは今も生産されていて、組み込み用途に専念しているように見えます。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

4641. プログラミングへ、続き^11

2024年11月28日 | 日記

 行番号BASICのネイティブコンパイラ化はZ80ではやや無理があるような気がしてきました。8086のセグメントみたいに、何らかの形で仮想メモリ化できるCPUでないと厳しそうです。なので、普通にインタプリタで続行することにします。TSS風に3タスク程度の同時進行ができたら目標達成ですが、どこまでできるか。

 Z80のネイティブコンパイラはC言語風が無難な感じで、しかし参考にしたい資料が直ぐには出てこないので、今度の土日にまたもや書庫の山を崩してみる予定です。

 これらは今のWindowsやUNIXの動作するマシンでやっても、ほとんど意味は無いと思います。ただ、両者とも使える感じがしたのは80286以降ですから、どの程度の可能性があったのかの確認に終わりそうです。

 欲しいのはディスプレイとキーボードと仮想フロッピーのあるラズパイ・ピコのようなもので、1年ほど前に部品の物色をしていて頓挫しているものです。88SR miniが来春に出るとのニュースで、そちらでの可能性を知るのもありかな、と考えています。

 まあとにかく、ソフト面での考察が進んだのは私にとっては収穫で、PasocomMini PC-8001は十分に役立ったと思います。買って良かったです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

4640. ちひろの誕生日

2024年11月27日 | 日記

 明日、11月28日はPS4の最新アイマスゲーム、スターリットシーズンに出てくる仮想事務員、千川ちひろ(シンデレラガールズ)の誕生日だそうです。いつものようにスターリットシーズンのPV新着欄で有志Pがお祝いのPVを上げるはずです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

4639. プログラミングへ、続き^10

2024年11月26日 | 日記

 16bit整数の掛け算/割り算に関しては、私が偶然見たプログラム断片では、8080命令では割と苦労している感じがします。1レジスタが足りなくて、自己書き換えプログラムを採用していて、あらら、の感じ。これではROM化できません。

 tiny BASICの掛け算/割り算ルーチンは機械語の量を減らすためか、掛け算は足し算をその数だけやる、などとなっていて、割り切り方がものすごいです。特に割り算は、この演算はめったに出てこないから、この感じでいい、みたいな。

 Z80で新規に採用された命令を使うと割とうまく行く感じがします。具体的に構成しないと分かりません。
 とはいえ、どこまで真剣にやるか。信号処理応用が頭にちらついて、やや複雑なことを考えています。例えば32bit整数の平方根とか、で、どこかで考察を止めないと切りが無いです。現時点でZ80でやっても何となく虚しい気がしますし。

 ネイティブコンパイラの方向はそれとして、言語としての外見を考えないといけません。B言語は、今はC言語が主流なので、似ていて異なるのでやや混乱すると思います。PASCAL系は今は全く流行していない気がします。
 とすると、BASICかC言語が母体となり、両方考えてみます。BASIC…、1行ごとのネイティブコンパイラって見たことが無いような気がします。

 やや引っかかるところがあって調べ始めて、やはり一冊の本が書けるほど話題豊富なので、どこかでまとめないといけません。もういまさら昔話ですが。とりあえず、もう少し設計を進めます。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

4638. プログラミングへ、続き^9

2024年11月25日 | 日記

 Z80機械語へのネイティブコンパイラを少し考えていて、必要な資料を調べています。

 Z80に掛け算/割り算命令は無いので、そのサブルーチン例をいくつか。と、乱数発生です。後者は簡単なゲームでの使用に耐えればOKなので高度なのは必要ありません。

 それと、基本数値データを符号付き16bitにするのは良しとして、文字列型の扱いと浮動小数点型の扱いを、実際には実装しなくても考慮しておく必要はあると考えました。浮動小数点数はライブラリ関数の呼び出しになるので箱だけ用意すれば良く、しかし文字列型はよく考えないといけません。計算機言語に型の概念が必要になったのは、むしろこちら側だと言われているようです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

4637. プログラミングへ、続き^8

2024年11月24日 | 日記

 片付けた後の本の山を見たら、そのtiny BASICをPCで動かそう、の本を見つけてしまいました。ええ、私の期待通りというか、まあそんなことだと思ったよ、の内容でした。大丈夫かな、この業界。
 今は構造化プログラミング全盛ですから、GOTOによるループ脱出に対する対応には気付かないといけないのですが。おそらく元のダートマスBASICがいかに良く考えられているか、で、当時のtiny BASICもマイクロソフトBASICも当然ながら同様です。

 なので多少のこちらのモチベーションは上がりましたが、PC-8001等の外部資料を読んでいて別のことに気付いてしまいました。いや、当時から薄々感じていましたが。

 Z80のIX/IYレジスタです。この2本はメモリ上の8bitデータを指すのにもっぱら用いられます。8080から引き継ぐHLの2連結の8bitレジスタと同様の働き、つまりメモリの間接指定のための仕掛けで、フォンノイマンマシーンをフォンノイマンマシーンたらしめる重要なものです。この仕掛けが無いと、命令のオペランド部を書き換えないとループで次のデータを処理できない訳で、何とあろうことかとあるZ80の機械語の使いこなしテクニックの本で紹介されています。こういうのはごく初期のコンピュータでしかやらないと思っていたので、いまさらちょっとショックです。

 実行中のプログラムの命令を自分自身で書き換えるなど、ちょっと考えただけでも、ものすごく怖くて、現在のCPUでは全く推奨されていません。ですから、その代用として間接指定やインデックスレジスタが用意されています。

 なのですが、Z80のIX/IYレジスタはちょっと豪華すぎるというか、データを示す際に必ずディスプレースメントと呼ばれる相対位置の1バイトを指定しなければならず、命令バイトが増えて必要クロック数が増えるので、マシン語マニアからは使いづらい命令群とされる感じで、どの解説書も存在を示すだけで解説本文にはめったに出てこず、盲腸みたいな存在になっています。レジスタが増えるのは単純に嬉しい、だけの感じ。

 現在の観点からは、つまり後知恵になりますが、これはスタック上のデータを扱うフレームポインタとしての使用を考えていたのだ、と考えられます。つまりサブルーチンの仮引数とか局所変数の場所です。サブルーチンの呼び出し時にフレームと呼ばれる小さなメモリ領域がスタック上に取られて、そこを指します。仮引数と局所変数は複数あるのが普通ですから、それぞれを指定するのにディスプレースメントが必要になる訳。おそらく、16bitをint扱いして2回使っても、HLレジスタの値を変えながらロード・ストアするよりもお得、なのだと思います。

 ところで、フレームポインタは普通は1レジスタだけが必要です。もう一本は何かというと、おそらくグローバル変数へのポインタだと思います。大域変数も複数あるのが普通ですから、ディスプレースメントが必要、ということ。
 大域変数は普通は固定番地にあるので、直接メモリ指定で良い、と一瞬思えるでしょうが、マルチタスクだとタスク切り替えの際に大域変数領域も切り替えないといけないので、このインデックスレジスタを使う方が良いかも、だと思います。

 ふむ、当時もミニコンでさえマルチタスクは応用範囲に入っていましたから、ここはぜひ用意しておこう、だったのだと私は想像します。何とも野心のあること。
 64KBのメモリでマルチタスクができるのかというと、まあ何とか出来ると思います。外付けのハードディスクは多分必要です、100MBほど。

 で、妄想に妄想を重ねてディスプレースメントを使おうとすると、いわゆるネイティブコンパイラ、つまり中間言語では無く、直接に機械語を書き出すコンパイラが必要となってしまいます。そんなコンパイラが当時あったのかというと、おそらくPL/Mと呼ばれていた開発系がそれでしょう。
 つまり、ネイティブコンパイラの可能性を少し考えています。今の時点では、資料集めは厳しそうです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

4636. プログラミングへ、続き^7

2024年11月23日 | 日記

 休日を利用して書庫の整理をしました。書庫と言っても部屋の隅に山積み状態です。
 tiny BASICをPC上で再現した本を探していて、それは見つからず。その代わりというか、当時のパソコンやBASICの本がたくさん出てきました。
 そのtiny BASICの再現本は、いきなり中間言語の文字が出てきたので、初回はそこで読書中止、昨年だったか、もう一度見る気になって見たはずですが感想は覚えていません。
 今回はfor/nextとgosub/returnの作りを見たかったのですが、3度見して3回目のがっかりになりそうなので、これ以上探すのは悪趣味と判断し、書庫は積み直して終了しました。

 私が所有していたPC-6001の本が複数出てきました。多少の解析をした本もあって、PC-8001と比べている箇所が多くて当時はやや困惑していたと思います。PC-8001は持っていなかったし、身近に使える環境も無かったです。
 冒頭近くにN60-BASICの中間言語の特徴が書かれていて、数値変数は独特の5バイト浮動小数点数だけで、整数型も倍精度浮動小数点型も無いとのこと。もう一つはGOTOなどの行番号がASCII文字そのままで入っていて、N-BASICのようにアドレスに変換されることは無い、とのこと。

 ここは読んだはずなので、そう、私の記憶の一部は間違っていなくて、それはN60-BASICの事情だったようです。N-BASICよりも時代は新しいはずですが、どうやらこちらの方がBASICの原型に近いようです。
 gotoの飛び先がアドレスに変換されないので、毎回行番号を探索して、行番号が大きな場合は同行からプログラムの下方に向かって探索が開始され、小さな場合はプログラムの冒頭から検索が開始されるそうです。よって、上方への分岐でループを作るのはあまり好ましくなく、必ずfor/nextを使うのがコツとなります。

 少し前に挙げた探索プログラムには同一ループに3箇所のエントリがあるので、つまりN60-BASICでは、

 FOR I=0 TO 1 STEP 0

 などと無限ループを書いて、その冒頭でON n GOTO ...をするのが良いスタイルとなるはずです。

 やや心配なのはその肝心のFOR/NEXTの処理内容が解析されていないことで、tiny BASICでもループチェックをしていましたから、スタック上に上方へのポインタは入っているはずだ、と思うだけです。カウンタの整数型チェックはおそらくありません。

 当時の科学技術計算用大型機にはほぼもれなく浮動小数点演算機構が入っていたでしょうから、大きなペナルティにはならないはずですが、Z80にはそんなもの入っていませんから、プログラム電卓並みというか、高速化するならさっさと機械語を使ってしまえ、ということでしょう。なので付属の入門書にも機械語の使い方が簡単に解説されています。

 …との感じの解説が当時なされていたかというと、記憶にございません。構造化プログラミングが流行したのはかなり後です。FOR/NEXTの事情はFORTRANのDO文と似ているはずで、しかしそちらの発想もなかったようですから、大型機のソフト開発部隊とマイコン組は隔絶されていたのだと思います。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

4635. 美希の誕生日

2024年11月22日 | 日記

 明日、11月23日はPS4の最新アイマスゲーム、スターリットシーズンに出てくる仮想アイドル、星井美希(オリジナル765)の誕生日だそうです。いつものようにスターリットシーズンのPV新着欄で有志Pがお祝いのPVを上げるはずです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

4634. プログラミングへ、続き^6

2024年11月21日 | 日記

 本日はPCのZ80アセンブラの出力をPasocomMini PC-8001に持って行く、PC上のC言語プログラムが完成しました。10バイトの転送に成功しただけなので、もう少し大きなプログラムが動いてから詳細を言います。まあとにかく、PC → PC80 miniの経路が確立できたので嬉しいです。

 最初からこれが出来ていれば、とは思いますが、来春発売の88SRの方を本番としておきます。そちらでこの経路が取れないのなら、かなりがっかりします。

 やりたいことはとりあえず東大版tiny BASICのアセンブラでの打ち込みと、同じMOOKに載っていたマイクロPLANの移植です。後者は中間言語に翻訳するコンパイラです。
 東大版tiny BASICに関しては、当時、別の自作Z80マシンに機械語のまま打ち込んで動作させました。が、そんなことでは簡単な改良もできませんし、中身も理解できません。今やってみて、どんな感じかを確かめるのが目的です。
 マイクロPLANは外見はALGOL/PASCAL風で、中身はB言語相当、つまりC言語のint型だけが使える感じの言語処理系です。こちらも中身の理解と、PCからの経路確立が目標となります。

 どちらも今となってはあまり役立たないので、考察だけに終わる可能性は高いです。今やるならZ80ではなく、組み込みARM等で作ってみる方が良いと思います。つまりある種の勢いが無いとやってられません。今がそのチャンスと思いました。

 とにかく、仮想PC-8001が操縦できる感じが出ないといけないので、そのままでは面白くないです。とりあえず、簡易なグラフィックが出来るように小改造したいです。

 PC-6001では16bit整数のBASICコンパイラがROMの形で売られていたと記憶しています。ICを簡単に設置できるハンドル付きソケットが正式な周辺機器として別売されていて、そこに挿します。この手のソケットは今も電子部品ショップで売られています。数が売れないのか、いささか高価です。

 C11のハンドブックは買ってしまいました。まだ詳細は読んでいません。早速役立ったのは言うまでもありません。
 Z80の復習をしないといけないので、マニュアルの命令表を印字して持ち歩いています。まあ、当時、あれだけ情熱が注がれて、今は主流とはほど遠いと思いますので、こちらはそこそこに。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

4633. プログラミングへ、続き^5

2024年11月20日 | 日記

 その書き直した方のN-BASICによるn-queensのプログラムを示します。手で打ち込んだのでは無く、PC80 mimi (PasocomMini PC-8001。来春発売予定の88SR miniではない方)のmicro SDカードからファイルを移し、PC上の自作C言語で書き出せた最初のプログラムです。かなり強引な手段ですし、説明するとなると、さまざまな当時の事情やらを延々と綴らないといけなくなりそうなので、全部省略させていただきます。ご了承のほどを。 

100 REM N-QUEENS: 241118
110 DIMB%(27):DIMC%(27)
120 J%=0:Y%=0:X%=0
200 TIME$="00:00:00"
210 M#=0:N%=8-1:REM n-1 -> N%
300 Y%=0:X%=0
400 IFC%(X%)=0THEN450
410 X%=X%+1
420 IFX%<=N%THEN400
430 IFY%=0THEN900
440 Y%=Y%-1:X%=B%(Y%):C%(X%)=0:GOTO410
450 IFY%=0THEN500
460 FORJ%=Y%-1TO0STEP-1
470 IFABS(X%-B%(J%))=Y%-J%THEN410
480 NEXTJ%
500 B%(Y%)=X%
510 IFY%>=N%THEN550
520 FORJ%=0TOY%:PRINTB%(J%);:NEXTJ%:PRINT
530 C%(X%)=1:Y%=Y%+1:X%=0:GOTO400
550 M#=M#+1:PRINTM#;":";
560 FORJ%=0TOY%:PRINTB%(J%);:NEXTJ%:PRINT
570 GOTO440
900 PRINT"end. n=";M#;" time=";TIME$

 見た瞬間に本ブログを閉じかけた方もいらっしゃるでしょうが、最初の説明は見て欲しいです。
 つまりこれはBASICのような再帰が無いプログラム言語で探索プログラムを書くとこうなる、の典型と思います。今は再帰無し言語は珍しいかもしれませんが、普通のアセンブラには再帰はありませんから、こちらが電子計算機の原風景です。あとで追加説明します。

 メインループの入り口は行400なのですが、適当に場合分けを省略しているので、ループへのエントリは行410と行440にもあります。メインループの最後は行570です。

 それよりも、現代的なプログラミング言語に慣れた方には当時風のベタ打ちBASICは奇怪に見えるかもしれません。行110にいきなり出てくるDIMB%()関数って何だ、の印象を持たれた方は今では不思議ではないです。これは分かち書きすると、

110 DIM B%(27): DIM C%(27)

 ということであり、つまり配列変数名B%とC%の宣言文であり、その要素数はどちらも28個を要求する(配列の添字は0から始まるので)、です。%は整数(16bit。-32768~+32767)の型を示します。少し下にあるM#は64bitの倍精度浮動小数点数です。解の数を計数する変数で、nが大きくなるとたちまち32767は超えてしまうので、こうしています。
 TIME$は本来は現在時刻を保持するシステム変数(文字列型)で、しかしここではストップウォッチとして使っています。行900で計算時間を表示するためです。

 配列B%が盤面で、8×8のチェス盤面(N%=7)だと8要素(B%(0)~B%(7))で十分です。というのは各行には1個のqueenしか置けないからです。盤面の左下を(0, 0)とし、各行のどの列にqueenがいるかを保持します。配列は最初には0クリアされています。
 行300でY%=0、X%=0は最初の検討位置の指示です。

 探索は座標(X%, Y%)にqueenが置けるかどうかから始まります。
 行400でいきなりチェック対象になっている配列C%は列の占拠状態を保持しています。(先行する行の)同じ列にqueenがいたら(C%(X%)>0)置けない、のチェックです。置けそう(C%(X%)=0)なら追加のチェック、行450に飛びます。

 (X%, Y%)に置けないことが分かっている行410では同じ行の次の列に検討を移します。行420では検討位置が盤面内にある場合はループの先頭、行400に戻ります。
 行430は検討位置が盤面の右外に出てしまった場合で、最下行(Y%=0)の時は可能性が尽きたことを示しますから最終報告、行900に飛びます。

 行440は検討位置を一行戻す処理です。しかし後退するということは、そこはすでに検討済みなので、次の列への検討位置の移動の行410に制御が飛びます。

 行450は斜め線上にqueenがいるかどうかの検討の前に、最下行だったら探す場所が無いので置ける場合の処理の行500に飛びます。
 行460~行480のFOR/NEXTループが斜め方向にqueenがいるかどうかのチェックです。queenが見つかったら、ただちに置けない場合の処理の行410に飛びます。ループ外へのGOTO脱出です。チェックが終了したら、次は行500の置ける場合の処理に移ります。

 行500は盤面にqueenを置いています。行510は途中の行か最上行に置けたのかのチェックで、最上行の場合はパズルの解ですから報告の行550に飛びます。
 途中の行の場合は行520で中間報告し、行530で次の行に移る準備をします。新たな場所のチェック開始なので行400に戻ります。
 最終行の場合は解の一つですから行550で結果を表示し、その行の探索は終わってしまったので一行戻す処理となりますから、行440に飛びます。

 BASICは再帰が出来ないので、途中結果を保持する必要があり、それがB%の盤面で、スタック構造になっています。スタックポインタはY%です。
 ループはいわゆる状態遷移マシンになっていて、C言語でこのアルゴリズム(再帰無し)を採用するのなら、無限ループの最初でswitch/caseで分岐し、各状態を処理する形になるでしょう。もちろんその目的のためのスタック領域とスタックポインタは確保する必要があります。

 BASICにもON n GOTO ...がありますが、状態(1~n)を示す追加の変数が必要で、冗長な感じがしたから省略していて、その代わりをするのがプログラムカウンタ自体で、そのためにループ内に飛び先が複数ある感じがします。

 ここが曖昧な方は、ぜひ状態遷移図でネット検索してみて下さい。ついでながら、CPUというのもチューリング機械では状態を保持する有限オートマトン機構に相当します。

 どうです?、PC-8001 / N-BASICでも結構、計算機科学の話題に接近できます。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

4632. プログラミングへ、続き^4

2024年11月19日 | 日記

 N-BASICによるn-queensは書き直しました。アルゴリズムを整理し直したのですが、BASICプログラムを書くこと自体はあっという間でした。さすがBASIC。プロトタイプを作ることに関してはこれ以上の計算機言語は無いと思います。LISPが匹敵しますが、画面にドットを打つにもどうしようかな、ですから今現在の私のプロジェクトに関しては厳しいです。
 文字画面が80桁25行と広めなのが快適です。当時のアマチュアは当時のアナログテレビを繋いでいましたから、40桁程度の表示がせいぜいでした。このあたりは今風の贅沢です。

 N-BASICに多少慣れてきたので、仮想カセットテープファイルに関する2つのユーティリティーを作ろうと、久しぶりにVisual Studio 2022を開いてみました。
 がしかし、私のC言語の「常識」はC99あたりで止まっていて、前回はその知識とVisual Studio 2022からのアドバイスで乗り切ったのでした。どうしようかな。簡易な文法解説書でも書店で探してみますか。

 一つはN-BASICのソースリストをPCに持ち出すことです。なにしろ仮想プリンタがないのでLLISTができません。かなり安易な手段を駆使して持ち出そうとしていて、恥ずかしいのでこれは公開できないと思います。
 もう一つはPCのZ80アセンブラの出力をPC80 miniに持って行く手段で、こちらは何かのきっかけがあれば公開できると思います。インテルHEX形式を仮想カセットテープのファイル形式に変換するものです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

4631. 中の人の誕生日

2024年11月18日 | 日記

 本日、11月18日はPS4の最新アイマスゲーム、スターリットシーズンに出てくる仮想アイドル、玲音(ライバル)の声優、茅原実里さんの誕生日だそうです。
 明日、11月19日は同アイドル、天海春香(オリジナル765)の声優、中村繪里子さんの誕生日だそうです。
 同日は同アイドル、白石紬(ミリオンライブ)の声優、南早紀さんの誕生日だそうです。

 いつものようにスターリットシーズンのPV新着欄で精鋭Pがお祝いのPVを上げるはずです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

4630. プログラミングへ、続き^3

2024年11月17日 | 日記

 この界隈では有名な8-queensと呼ばれるパズルがあります。チェスの8×8区画の盤面上にクイーンの駒8個をどれにも当たらないように配置します。クイーンは縦横斜めに何駒でも進めます。

 でこれを昨日、何も見ずにPC80 miniのN-BASICで組み始めたのは良いものの、無手勝流で組み始めたので、バグ取りに難航して半日がかりの作業になりました。わずか20行のプログラムです。
 組んでみると私のBASICのプログラミングスタイルが出ていて面白いです。

 FOR文とIF文は行の先頭から書いています。代入文が続く時は同一行で複文にします。代入文に続く文がGOTOの場合はその行の最後に追加します。
 GOTOが多くて、これがいわゆるスパゲッティプログラムになっているかどうかはフローチャートを書かないと分かりませんが、そう言っている段階で構造化プログラミングでは無い訳で、これはこれでお終い。

 遅いです。さっきから遅い遅いと言っているような気がしますが、これに関しては当時にPC-8001とほぼ同一クロックのやはりZ80でハンドアセンブラで書いたことがあって、1秒以内に全92解を得ていたと記憶しています。こちらだと10分ほど。多少の改良で速度は数割上がりましたが、劇的な変化とは言えないでしょう。

 これくらいどこかに書いてあるだろう、と思って書棚を探すと、BASICのは無くて8080のアセンブラのが出てきました。n-queensで、n=13の場合に52分かかったと書いてありました。クロック数は書いてありませんが8080Aの最高速度のようです。nが大きくなると急激に場合の数が増えるので、そのようなものなのでしょう。
 こちらのBASICプログラムの改造は簡単だったので、n-queensに対応させましたが、おそらくn=13では何日もかかると思います。

 まあですから、最初期から機械語だのアセンブラだのが話題になっていました。BASICは安全確実豪華ですが、速度は期待できません。当時としては非常に大きなプログラムが動作しますし、当時のプログラム電卓よりはかなり速いです。
 これがコントローラみたいなCPUのZ80で動いているのですから、驚異的でした。
 ちなみに、当時のミニコンの低水準FORTRANコンパイラの実行結果も決して速い印象は無かったです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

4629. プログラミングへ、続き^2

2024年11月16日 | 日記

 PC80miniのN-BASICのグラフィック表示を試していて。いやあ、当時を思い出しましたよ。楽しいです。

 とても遅いです。私はPC-6001でしたが、何か意味のある図を出すために何時間もかけていたか。PC-9801 F2でもそのままでは遅い感じがして、だから8087とFORTRANとアセンブラでグラフィックを作っていて。
 その後、DOS/VのWindows 3.1のあたりでもまだゆっくりの感じがして、速いと感じたのはWindows 7にもなってからだったか。このあたりのPCのハード・ソフトの進化には感謝感激です。

 何とかネットで集めた資料を駆使して、PC-8001 / N-BASICでのグラフィックの操縦のやり方は分かったような気がしますが、初めて体験した方には厳しいかもしれません。今は販売されていないし、今度の88SR miniはずっと操縦しやすいと思いますので、この件に関してはお預けです。
 とにかく、このグラフィックで何か作ってみます。同梱のゲームはかなりの速度で動きますから、そちらが本来の速度でしょう。
 今度の88SR miniもゲームが入っているので本来の速度感が分かると思います。

 その88SR miniには仮想漢字ROMが入っているので、飽きても簡易なデジタルサイネージとして活用できそうです。ラズパイを生で使った方が良いのはそうかもしれませんが、何となくお手軽さはあると思います。それほど高価では無いと思います。

 そう、この手のものは、ぎゃははと笑っていられる内が花です。あまりに真剣に取り組んでも空しいです。
 数項前に米国でのミニコンの大流行を取り上げました。しかしミニコンメーカーは個人宅に売る発想はなかったようで、米国でもホームコンピュータは8080以降です。翻訳されたBASIC活用法などはとても詳しくて、当時の熱気が伝わってきます。日本と同様で同時進行だった、みたいです。パソコンの動向しか知りませんが欧州もまた同様だったようです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする