ごみすて
2024.11.28
うちは、パーツの購入などで通販の利用が多い為、ダンボールの溜まる速さがおそらく一般家庭の10倍ぐらいじゃないかと。(当社比)
ざっと、45リットルのゴミ袋が1週間でいっぱいになるぐらい。
それなのに、市は月1回しか回収してくれません。一般家庭のペースに合わせているので仕方ありません。
そして、その月1回の大事な日を忘れてしまうのです。
ああっ! そういえば今日は資源物の日だった。意外と朝早くに回収が来てしまうので、気付いた時には手遅れ。
翌月へ持ち越しに。
さらにその翌月も忘れて、また積み上がり・・・とうとうドアが開かなくなりました。
そのドアが開かなくても別ルートがあるので支障はありませんが、遠回りにはなってしまう。
うちは、どっちかというと事業者になるので産廃業者に回収を頼むべきなのでしょう。しかし微妙なところです。
実際、許可を受けている業者に回収を頼んだりしていますが、それなりに費用はかかります。
ざっと、45リットルのゴミ袋が1週間でいっぱいになるぐらい。
それなのに、市は月1回しか回収してくれません。一般家庭のペースに合わせているので仕方ありません。
そして、その月1回の大事な日を忘れてしまうのです。
ああっ! そういえば今日は資源物の日だった。意外と朝早くに回収が来てしまうので、気付いた時には手遅れ。
翌月へ持ち越しに。
さらにその翌月も忘れて、また積み上がり・・・とうとうドアが開かなくなりました。
そのドアが開かなくても別ルートがあるので支障はありませんが、遠回りにはなってしまう。
うちは、どっちかというと事業者になるので産廃業者に回収を頼むべきなのでしょう。しかし微妙なところです。
実際、許可を受けている業者に回収を頼んだりしていますが、それなりに費用はかかります。
ハンドアセンブル
2024.11.27
昔、いまのような便利な開発環境は無かったから、紙にプログラムを書いて手作業でマシン語に変換していた。これをハンドアセンブルと呼んでいた。
Z80の命令表を下敷き(カードケース)に挟んで、いつも身近に置いて活用していた。8080と互換性のある命令だけなら1ページにおさまるし、十分足りる。
できればシフト命令の動きなど書いてあると便利。ややこしくて、今まで全然覚えきれなかった。
えーと、キャリーフラグを巻き込んでローテートシフトするのは何だっけ・・・ってな具合。
RLCAの動きは・・・とか。
マシン語は、自然に覚えてしまった。
特によく使う命令だけだが・・・いまでもJPとくればC3、LDIRはED B0で、LD A,nは3Eとか、OUT(E8H),AはD3 E8、HALTは76、LD B,nは06、とか。
プログラムのある番地から別の番地へ移動したい場合、
LD HL,元の番地
LD DE,先の番地
LD BC,バイト数
LDIR
RET
これを 21 00 80 11 00 90 01 00 01 ED B0 C9 と直接打ち込んだりしていた。
Z80の命令表を下敷き(カードケース)に挟んで、いつも身近に置いて活用していた。8080と互換性のある命令だけなら1ページにおさまるし、十分足りる。
できればシフト命令の動きなど書いてあると便利。ややこしくて、今まで全然覚えきれなかった。
えーと、キャリーフラグを巻き込んでローテートシフトするのは何だっけ・・・ってな具合。
RLCAの動きは・・・とか。
マシン語は、自然に覚えてしまった。
特によく使う命令だけだが・・・いまでもJPとくればC3、LDIRはED B0で、LD A,nは3Eとか、OUT(E8H),AはD3 E8、HALTは76、LD B,nは06、とか。
プログラムのある番地から別の番地へ移動したい場合、
LD HL,元の番地
LD DE,先の番地
LD BC,バイト数
LDIR
RET
これを 21 00 80 11 00 90 01 00 01 ED B0 C9 と直接打ち込んだりしていた。
マシン語を始めた時
2024.11.27
確か高校生になってからマシン語の勉強を始めた。(Z80)
図書館でMSX用のマシン語の本を借りてきて、まずは画面にAという文字を表示させてみた。
次にループを作って、これを画面いっぱいに表示させてみてBASICと比べてみたらどうか。当たり前だけどBASICより速い。一瞬で出た。こんなに速いんだ、と。
こんなところからのスタートでした。
何を作ろうという目標はなかったけど、たとえば結果が画面に出るのはわかりやすかった。
マシン語に詳しい同級生から色々指導を受けた事もある。
たとえば、グラフィック画面を白黒反転するプログラムを作れ、とか。
画面の指定した範囲を、行き先の座標を指定して移動させろ、とか。
持ち帰って考えてみて、わからなかったら翌日聞いてみて、ああ、こんなふうにすればよかったのか、と。
そもそも最初はループを作るにはどうしたらいいか、というレベル。
DJNZはわかった。
でもグラフィックだったらアドレス空間だから8bitのDJNZでは足りない。16ビットのカウントはどうしたらよいか。
LD HL,0C000H
LD BC,02000H
LOOP:
LD A,(HL)
CPL
LD (HL),A
INC HL
DEC BC
LD A,B
OR C
JR NZ,LOOP
たとえば、こんなふうに書く。
OR C とか JR NZ, なんかは最初わからなかった。
フラグというものを利用する。
たとえば計算結果がゼロになったらZフラグが立つ。
ゼロか、ゼロでないか、という判断ができる。
そのほかに、キャリーというフラグもある。
上記では、BもCもゼロになるまでループするわけだ。つまり、2000H回繰り返す。
それなら、BとCを直接ORすればいいのにという疑問が出てくるけど、そういう命令はZ80には存在しない。Aと他のレジスタとの演算になるので、Bを一旦Aに入れてからCとORして、その結果のフラグを見る。
結果ゼロでなければ(NZ:ノンゼロ) LOOPへジャンプする。
プログラムの最後もきちんとしないといけない。たとえばBASICから呼び出しているならRETにするだろう。
何らかの止める命令を入れておかないと、これ以後も命令を実行し続けてしまい暴走する。
止めて良いならHALTとか、STOP: JR STOP のようにする。
JR命令は相対アドレスのジャンプ命令で、ハンドアセンブルの時はFF FE FD FC FB FA...と逆方向にジャンプ先まで数えていた。
絶対アドレスでも良いけど、1バイト増える。もったいない。(という考え方があった)
図書館でMSX用のマシン語の本を借りてきて、まずは画面にAという文字を表示させてみた。
次にループを作って、これを画面いっぱいに表示させてみてBASICと比べてみたらどうか。当たり前だけどBASICより速い。一瞬で出た。こんなに速いんだ、と。
こんなところからのスタートでした。
何を作ろうという目標はなかったけど、たとえば結果が画面に出るのはわかりやすかった。
マシン語に詳しい同級生から色々指導を受けた事もある。
たとえば、グラフィック画面を白黒反転するプログラムを作れ、とか。
画面の指定した範囲を、行き先の座標を指定して移動させろ、とか。
持ち帰って考えてみて、わからなかったら翌日聞いてみて、ああ、こんなふうにすればよかったのか、と。
そもそも最初はループを作るにはどうしたらいいか、というレベル。
DJNZはわかった。
でもグラフィックだったらアドレス空間だから8bitのDJNZでは足りない。16ビットのカウントはどうしたらよいか。
LD HL,0C000H
LD BC,02000H
LOOP:
LD A,(HL)
CPL
LD (HL),A
INC HL
DEC BC
LD A,B
OR C
JR NZ,LOOP
たとえば、こんなふうに書く。
OR C とか JR NZ, なんかは最初わからなかった。
フラグというものを利用する。
たとえば計算結果がゼロになったらZフラグが立つ。
ゼロか、ゼロでないか、という判断ができる。
そのほかに、キャリーというフラグもある。
上記では、BもCもゼロになるまでループするわけだ。つまり、2000H回繰り返す。
それなら、BとCを直接ORすればいいのにという疑問が出てくるけど、そういう命令はZ80には存在しない。Aと他のレジスタとの演算になるので、Bを一旦Aに入れてからCとORして、その結果のフラグを見る。
結果ゼロでなければ(NZ:ノンゼロ) LOOPへジャンプする。
プログラムの最後もきちんとしないといけない。たとえばBASICから呼び出しているならRETにするだろう。
何らかの止める命令を入れておかないと、これ以後も命令を実行し続けてしまい暴走する。
止めて良いならHALTとか、STOP: JR STOP のようにする。
JR命令は相対アドレスのジャンプ命令で、ハンドアセンブルの時はFF FE FD FC FB FA...と逆方向にジャンプ先まで数えていた。
絶対アドレスでも良いけど、1バイト増える。もったいない。(という考え方があった)