考え方を学ぶ
2025.02.21
プログラムの組み方も人それぞれの考え方が反映されます。
組織の中では、属人的ではない方が望ましいかもしれませんけど。(作った人がいなくなったら保守できない・・・では困る)
お手本や周囲の仲間からの学んだことが基本になっていると思います。
Z80を覚えたのは高校生の頃、同じクラスの友人に教わりながらマシン語でプログラムを作っていました。
結果がわかりやすいのは画面表示の操作です。見てわかります。
たとえば白黒反転(MZ-2000だから緑白か)してみるとか。逆さまにするとか。鏡像にするにはどんなふうにプログラムを作るか。
画面の一部を切り抜いて、指定した位置へ移動させるには。
スクロール(タテ、ヨコ)をするには。
最初はループの作り方も知らなかったのですが、試しながら徐々に覚えていきました。
自分なりに考えて、画像を裏返し(鏡像)にしてみようと思い付きました。
それには1バイトごとにビットをひっくり返す必要があります。
最初に考えたルーチンは恥ずかしくて見せられたもんじゃありません。
BIT命令、SET命令、RES命令を使って、ビット0が0だったら結果レジスタのビット7を0にする。1だったら1にする。こんなふうに8ビット分、くそまじめに記述しました。
でも・・・よく考えてみると、結果を入れるレジスタを最初にクリアしておけば、0は書かなくて良いのです。1だけ見て処理すれば良いことに気づき、プログラムは短くなりました。
もう、これ以上考えることはない。自分なりに考えても、これ以上シンプルにはできないはずだ。
ところが友人は、シフト命令を使ってキャリーフラグ経由で1ビットずつ移すプログラムを作りました。まさに目から鱗でした。
私は、そういう使い方を思いつかなかったからです。命令表でキャリーフラグを巻き込んでシフトする命令があるのはたぶん知っていたはずです。でも、使い方(応用)を思いつかなかった。
コピー元のレジスタを左にシフト、最上位のビットがキャリーに入る。これをコピー先のレジスタにキャリーから入れて右にシフトする。この処理を8回繰り返せば1バイトの処理が済む。
でも、世の中にはもっと他の考え方もありました。
あらかじめ、反転データのテーブルを作っておくのです。あるいは、初期化時にRAM上へ展開するのでも良いでしょう。
こうすればアドレスの計算だけで速く変換できます。その代わりメモリを食います。
さらに考えると(考えるまでもないが)そのテーブルを、きりの良いアドレスに配置すればアドレスの計算も簡単かつ速くなるわけです。
これ以上は有るかと言うと、プログラムでやれる方法は思いつきませんが、ハードウェアを使ってよいのなら特定のアドレスなりポートに書くと(配線がクロスしていて)別のアドレスかポートから反転データが得られる、というのは可能です。(あくまでも、CPUにそういう命令がない場合の話です)
組織の中では、属人的ではない方が望ましいかもしれませんけど。(作った人がいなくなったら保守できない・・・では困る)
お手本や周囲の仲間からの学んだことが基本になっていると思います。
Z80を覚えたのは高校生の頃、同じクラスの友人に教わりながらマシン語でプログラムを作っていました。
結果がわかりやすいのは画面表示の操作です。見てわかります。
たとえば白黒反転(MZ-2000だから緑白か)してみるとか。逆さまにするとか。鏡像にするにはどんなふうにプログラムを作るか。
画面の一部を切り抜いて、指定した位置へ移動させるには。
スクロール(タテ、ヨコ)をするには。
最初はループの作り方も知らなかったのですが、試しながら徐々に覚えていきました。
自分なりに考えて、画像を裏返し(鏡像)にしてみようと思い付きました。
それには1バイトごとにビットをひっくり返す必要があります。
最初に考えたルーチンは恥ずかしくて見せられたもんじゃありません。
BIT命令、SET命令、RES命令を使って、ビット0が0だったら結果レジスタのビット7を0にする。1だったら1にする。こんなふうに8ビット分、くそまじめに記述しました。
でも・・・よく考えてみると、結果を入れるレジスタを最初にクリアしておけば、0は書かなくて良いのです。1だけ見て処理すれば良いことに気づき、プログラムは短くなりました。
もう、これ以上考えることはない。自分なりに考えても、これ以上シンプルにはできないはずだ。
ところが友人は、シフト命令を使ってキャリーフラグ経由で1ビットずつ移すプログラムを作りました。まさに目から鱗でした。
私は、そういう使い方を思いつかなかったからです。命令表でキャリーフラグを巻き込んでシフトする命令があるのはたぶん知っていたはずです。でも、使い方(応用)を思いつかなかった。
コピー元のレジスタを左にシフト、最上位のビットがキャリーに入る。これをコピー先のレジスタにキャリーから入れて右にシフトする。この処理を8回繰り返せば1バイトの処理が済む。
でも、世の中にはもっと他の考え方もありました。
あらかじめ、反転データのテーブルを作っておくのです。あるいは、初期化時にRAM上へ展開するのでも良いでしょう。
こうすればアドレスの計算だけで速く変換できます。その代わりメモリを食います。
さらに考えると(考えるまでもないが)そのテーブルを、きりの良いアドレスに配置すればアドレスの計算も簡単かつ速くなるわけです。
これ以上は有るかと言うと、プログラムでやれる方法は思いつきませんが、ハードウェアを使ってよいのなら特定のアドレスなりポートに書くと(配線がクロスしていて)別のアドレスかポートから反転データが得られる、というのは可能です。(あくまでも、CPUにそういう命令がない場合の話です)
六兵衛
2025.02.21
子供の科学 (最強のうんち)
2025.02.21
小学生の好きそうな題材です。

でも、とっても大事なことです。大人にも是非読んで欲しいと思います。
私なんか、お腹のトラブルで非常に困ったときがありました。
幼い頃から下痢気味だったりして、毎朝トイレに駆け込んだりとか・・・高校生ぐらいから調子が悪かったのでした。登校中に腹痛で、学校まで耐えたりとか。最悪、近くのお宅に事情を話してトイレを使わせてもらおうかという状況。
就職してからも毎朝腹痛で、とうとう朝食を食べずに出かけるようになりました。そうすると、起きてから1~2時間後には調子が普通になり、食べても大丈夫でした。
当時、病院にも相談していました。過敏性大腸症候群だったのだろうと思います。
近年、下痢ばっかりしていたのは多分、抗生物質の影響ではないかと考えています。腸内細菌まで殺菌してしまうので、その後に悪玉が大多数を占めるとダメダメ腸内ワールドになるわけです。
抗生物質を服用していたのは、頭をぶつけて縫合した時と、抜歯した時でした。抜歯の時には先生に「お腹を壊すので飲むのをやめていいですか」と聞いたけれど、「必ず飲んで下さい」って。
怪我が直って抗生物質の服用をやめた後、整腸剤(腸内細菌を含む)を服用するなど対策しなければならなかったのでしょう。そこまで考えが至りませんでした。
やたらに腹が張って苦しい、寝られない、ガスが出そうで出ない、外出先でトイレに行きたくなるので外出しづらい、などいろいろと悩みを抱えていました。
クリーンルーム(半導体工場)で腹が痛くなった時は最悪でしたよ。ごちゃごちゃした所で、出口まで行くのも大変。着替えるのも大変。なんとか間に合いました。
ある時から、オリゴ糖と乳酸菌飲料、整腸剤(ビオスリー)を飲み続けるようにしたところ、数ヶ月たった頃だったでしょうか。お腹の調子が良くなってきたのでした。
以前はしょっちゅう下痢していたのに、ほとんどそれは無くなり、いつも絶好調。(これが普通なのだろうけど)
それでもお腹が痛くなった時は原因をよく振り返ってみて、消化の悪いものだったり、刺激物だったりするので、以後それらを避けるようにすれば良いわけです。

でも、とっても大事なことです。大人にも是非読んで欲しいと思います。
私なんか、お腹のトラブルで非常に困ったときがありました。
幼い頃から下痢気味だったりして、毎朝トイレに駆け込んだりとか・・・高校生ぐらいから調子が悪かったのでした。登校中に腹痛で、学校まで耐えたりとか。最悪、近くのお宅に事情を話してトイレを使わせてもらおうかという状況。
就職してからも毎朝腹痛で、とうとう朝食を食べずに出かけるようになりました。そうすると、起きてから1~2時間後には調子が普通になり、食べても大丈夫でした。
当時、病院にも相談していました。過敏性大腸症候群だったのだろうと思います。
近年、下痢ばっかりしていたのは多分、抗生物質の影響ではないかと考えています。腸内細菌まで殺菌してしまうので、その後に悪玉が大多数を占めるとダメダメ腸内ワールドになるわけです。
抗生物質を服用していたのは、頭をぶつけて縫合した時と、抜歯した時でした。抜歯の時には先生に「お腹を壊すので飲むのをやめていいですか」と聞いたけれど、「必ず飲んで下さい」って。
怪我が直って抗生物質の服用をやめた後、整腸剤(腸内細菌を含む)を服用するなど対策しなければならなかったのでしょう。そこまで考えが至りませんでした。
やたらに腹が張って苦しい、寝られない、ガスが出そうで出ない、外出先でトイレに行きたくなるので外出しづらい、などいろいろと悩みを抱えていました。
クリーンルーム(半導体工場)で腹が痛くなった時は最悪でしたよ。ごちゃごちゃした所で、出口まで行くのも大変。着替えるのも大変。なんとか間に合いました。
ある時から、オリゴ糖と乳酸菌飲料、整腸剤(ビオスリー)を飲み続けるようにしたところ、数ヶ月たった頃だったでしょうか。お腹の調子が良くなってきたのでした。
以前はしょっちゅう下痢していたのに、ほとんどそれは無くなり、いつも絶好調。(これが普通なのだろうけど)
それでもお腹が痛くなった時は原因をよく振り返ってみて、消化の悪いものだったり、刺激物だったりするので、以後それらを避けるようにすれば良いわけです。