デガーベージを見る
2026.02.22
いまさらBASICなんて、と思いますが、Pythonは忘れてもMSX-BASICは身に染み込んでいるのか、いまでも覚えています。ちょっとしたテストにはピッタリです。
たいていの事はわかったような気分でしたが、未だに知らない事があります。動作を早くするための工夫は、たとえば整数型変数を使うとか色々ありますが、手っ取り早くマシン語に逃げてしまった感じがします。
BASICインタプリタ特有の現象で、知らないこともあるものです。デガーベージもそのひとつです。
ガーベッジ・コレクションという言葉のほうが知られているかも。言いたいことは同じです。
古くて新しい問題のようで、いまどきの言語でもガーベッジ・コレクションは有ります。
このプログラムで、デガーベージを体験できます。(de-garbage、ごみ捨て)
10 '
15 DEFINT A-Z:CLEAR 10000:DIM A$(200)
16 TIME=0
20 FOR I=1 TO 200
25 A$(I)=STR$(I)+"ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890#$%&()"
30 NEXT
35 T0=TIME
40 FOR I=1 TO 200
45 A$=A$(I):PRINT A$:NEXT
50 PRINT T0:PRINT TIME:END
実行すると、途中で引っ掛かり、また動いてひっかかります。
何が起きているのか。
(※引用)
文字列の連結や書き換えを行うと、書き換える前の文字列はそのままにしておいて、新しい文字列を別のメモリ・エリアに次々に書いていきます。こうして使えるメモリ・エリアが一杯になると、前に使った領域を整理して古い文字列を消し、その後にまた書いていきます。この作業を文字列のデガーベージと呼びます。
CLEAR 10000で確保した領域がいっぱいになったのをBASICインタプリタが整理する間、プログラムが止まってしまいます。
たとえば、リアルタイムで動作するプログラムでこんな現象が発生したら困りますという話。
もしCLEAR 20000にしたら引っかかることなく短時間で終わります。
解決方法が書かれていて、
(1)文字列の書き換えをできるだけ少なくする。
(2)強制的にデガーベージをさせる。たとえば待ち時間の間にPRINT FRE(A$) これはBASICの方言によって異なる。
それでも手に負えない場合の解決方法も述べられていましたが割愛します。
もしBASICでテキストエディタを自作したら、こんな問題が起きそうです。でも実際にはBASICではなくマシン語などで作り、領域は自分で管理しますね。
そういえばテキストエディタを当時(高校生の頃)作ろうとして、この本を見ていたような気がします。
文字や行を追加したら、その後の領域を後ろにずらしますね。画面に例えればスクロールです。文字を削除したら、今度はその文字の後ろの領域を前に詰める。
テキストエディタは結局自分で作ることなく、MSX-DOS2関連でKIDとかAKIDを使っていました。
※「super BASIC」(岡村迪夫著)(CQ出版社)P.114~115より。
たいていの事はわかったような気分でしたが、未だに知らない事があります。動作を早くするための工夫は、たとえば整数型変数を使うとか色々ありますが、手っ取り早くマシン語に逃げてしまった感じがします。
BASICインタプリタ特有の現象で、知らないこともあるものです。デガーベージもそのひとつです。
ガーベッジ・コレクションという言葉のほうが知られているかも。言いたいことは同じです。
古くて新しい問題のようで、いまどきの言語でもガーベッジ・コレクションは有ります。
このプログラムで、デガーベージを体験できます。(de-garbage、ごみ捨て)
10 '
15 DEFINT A-Z:CLEAR 10000:DIM A$(200)
16 TIME=0
20 FOR I=1 TO 200
25 A$(I)=STR$(I)+"ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890#$%&()"
30 NEXT
35 T0=TIME
40 FOR I=1 TO 200
45 A$=A$(I):PRINT A$:NEXT
50 PRINT T0:PRINT TIME:END
実行すると、途中で引っ掛かり、また動いてひっかかります。
何が起きているのか。
(※引用)
文字列の連結や書き換えを行うと、書き換える前の文字列はそのままにしておいて、新しい文字列を別のメモリ・エリアに次々に書いていきます。こうして使えるメモリ・エリアが一杯になると、前に使った領域を整理して古い文字列を消し、その後にまた書いていきます。この作業を文字列のデガーベージと呼びます。
CLEAR 10000で確保した領域がいっぱいになったのをBASICインタプリタが整理する間、プログラムが止まってしまいます。
たとえば、リアルタイムで動作するプログラムでこんな現象が発生したら困りますという話。
もしCLEAR 20000にしたら引っかかることなく短時間で終わります。
解決方法が書かれていて、
(1)文字列の書き換えをできるだけ少なくする。
(2)強制的にデガーベージをさせる。たとえば待ち時間の間にPRINT FRE(A$) これはBASICの方言によって異なる。
それでも手に負えない場合の解決方法も述べられていましたが割愛します。
もしBASICでテキストエディタを自作したら、こんな問題が起きそうです。でも実際にはBASICではなくマシン語などで作り、領域は自分で管理しますね。
そういえばテキストエディタを当時(高校生の頃)作ろうとして、この本を見ていたような気がします。
文字や行を追加したら、その後の領域を後ろにずらしますね。画面に例えればスクロールです。文字を削除したら、今度はその文字の後ろの領域を前に詰める。
テキストエディタは結局自分で作ることなく、MSX-DOS2関連でKIDとかAKIDを使っていました。
※「super BASIC」(岡村迪夫著)(CQ出版社)P.114~115より。
THE LINKSの解析と活用
2026.02.22
とりあえず8251のI/Oアドレスは・・・
ROMを逆アセして検索してみると、どうやらD8hとD9hのようだ。
D8hはコマンド/ステータス、D9hはデータレジスタだろう。
フックリレーの制御は、単独のI/Oアドレスは割り付けてないんじゃないか。
8251のどれかの出力ピン(汎用出力として使えるピンがある)を割り当てていそうな気がする。
たとえばRTSとかDTR、DSRピン。
テスターで追ってみるか、レジスタを操作してカチッと鳴ればそれだろう。
BASICで通信プログラムを作ったら単純に通信できんかな。
8251のレジスタを直接読み書きする。
最初に初期化して、あとはステータスを見ながら送信可能になったらデータレジスタに送信データを入れる。
ステータスを見て、受信データがあればデータレジスタを読む。たったこれだけ。
最近いじってなくて、記憶だけで書いているから間違ってるかも。
ボーレートどうなってるだろう。
ひょっとしたら・・・他との互換性をなくすため、標準的なボーレートじゃなかったりして?
でも1200bpsだったような気がするけどな。
MSM6927(1200bpsモデムIC)を使っているバージョンと、ハイブリッドICを使っているバージョンの両方がある。モデムICの規格上、やはり1200bpsと考えられる。
1200bpsなんて懐かしいなあ。社会人になってから初めて手に入れたパソコン通信の機材は、PC-98LTだった。ジャンク屋から買ったやつ。
持ち運びにあこがれていて、しかしお金が無いからそんな物を。
内蔵モデムは300/1200bpsでしかもV.25bisだっけ。誰も知らないだろうな。それでもWTERMが対応していたから助かった。WTERMのPC-98LT版が有り、V.25bisコマンドも対応していた。
ROMを逆アセして検索してみると、どうやらD8hとD9hのようだ。
D8hはコマンド/ステータス、D9hはデータレジスタだろう。
フックリレーの制御は、単独のI/Oアドレスは割り付けてないんじゃないか。
8251のどれかの出力ピン(汎用出力として使えるピンがある)を割り当てていそうな気がする。
たとえばRTSとかDTR、DSRピン。
テスターで追ってみるか、レジスタを操作してカチッと鳴ればそれだろう。
BASICで通信プログラムを作ったら単純に通信できんかな。
8251のレジスタを直接読み書きする。
最初に初期化して、あとはステータスを見ながら送信可能になったらデータレジスタに送信データを入れる。
ステータスを見て、受信データがあればデータレジスタを読む。たったこれだけ。
最近いじってなくて、記憶だけで書いているから間違ってるかも。
ボーレートどうなってるだろう。
ひょっとしたら・・・他との互換性をなくすため、標準的なボーレートじゃなかったりして?
でも1200bpsだったような気がするけどな。
MSM6927(1200bpsモデムIC)を使っているバージョンと、ハイブリッドICを使っているバージョンの両方がある。モデムICの規格上、やはり1200bpsと考えられる。
1200bpsなんて懐かしいなあ。社会人になってから初めて手に入れたパソコン通信の機材は、PC-98LTだった。ジャンク屋から買ったやつ。
持ち運びにあこがれていて、しかしお金が無いからそんな物を。
内蔵モデムは300/1200bpsでしかもV.25bisだっけ。誰も知らないだろうな。それでもWTERMが対応していたから助かった。WTERMのPC-98LT版が有り、V.25bisコマンドも対応していた。
THE LINKS
2026.02.22
以前、THE LINKSのカートリッジが懐かしくて2個も買ってしまったが、
別に実用性もなく、2個同士でEND to END通信を試してみるぐらいしか使いようがない。
早い話が、ゴミ。
でもそれは当時できなかった事だな。MSXもう1台は友達に協力してもらえばよかったけど、LINKSモデムは1個しか無かった。他に持っている奴も知らなかった。
当時でも1200bpsは遅かった。テンテンテンテン・・・と音を出しながらダウンロードしていたような記憶がある。長く待たされた記憶。
当時でも思っていたけど、THE LINKSの専用じゃなくて、一般のパソコン通信にも使えるようになっていたら良かったのに、と思う。大人の事情もあったかもしれないけど。
せっかくのモデム回路なのだから、活用したら?

ROMをどうやって吸い出すかって?
ハンダを吸い取ってROMを取り外し、ROMライターで読み込む。それをPCに送って保存する。
逆アセ時にはアドレスを4000h~とする。
そんなことしなくたって後差し・・・自分の慣れた方法でいいじゃない。
8251が載っているので、改造してRS-232Cレベルコンバータを付ければ、一般のモデムや他のRS-232Cつきのパソコンとも通信できる。(ソフトは自作の必要あり)
いまそんな事を思っても意味ないが・・・当時やらなくちゃね。でも当時はそこまでの知識がなかった。情報がなかった。いまとなっては・・・
やっぱりゴミか。
どれだけの人がTHE LINKSカートリッジを持っているだろう。
今さら、これを活用する改造ハードウェアやプログラムを作った所で自分だけの満足でしかないだろうな。
まさか、今さらこれを使えるようにするホスト側のサービスを立ち上げたりして?
添付書類の中にIDとパスワードの紙が入っているのが侘しい。もう使えないんだ。そう思うと、あれは夢か幻だったのか・・・・・・
別に実用性もなく、2個同士でEND to END通信を試してみるぐらいしか使いようがない。
早い話が、ゴミ。
でもそれは当時できなかった事だな。MSXもう1台は友達に協力してもらえばよかったけど、LINKSモデムは1個しか無かった。他に持っている奴も知らなかった。
当時でも1200bpsは遅かった。テンテンテンテン・・・と音を出しながらダウンロードしていたような記憶がある。長く待たされた記憶。
当時でも思っていたけど、THE LINKSの専用じゃなくて、一般のパソコン通信にも使えるようになっていたら良かったのに、と思う。大人の事情もあったかもしれないけど。
せっかくのモデム回路なのだから、活用したら?

ROMをどうやって吸い出すかって?
ハンダを吸い取ってROMを取り外し、ROMライターで読み込む。それをPCに送って保存する。
逆アセ時にはアドレスを4000h~とする。
そんなことしなくたって後差し・・・自分の慣れた方法でいいじゃない。
8251が載っているので、改造してRS-232Cレベルコンバータを付ければ、一般のモデムや他のRS-232Cつきのパソコンとも通信できる。(ソフトは自作の必要あり)
いまそんな事を思っても意味ないが・・・当時やらなくちゃね。でも当時はそこまでの知識がなかった。情報がなかった。いまとなっては・・・
やっぱりゴミか。
どれだけの人がTHE LINKSカートリッジを持っているだろう。
今さら、これを活用する改造ハードウェアやプログラムを作った所で自分だけの満足でしかないだろうな。
まさか、今さらこれを使えるようにするホスト側のサービスを立ち上げたりして?
添付書類の中にIDとパスワードの紙が入っているのが侘しい。もう使えないんだ。そう思うと、あれは夢か幻だったのか・・・・・・
2026.02.22 13:23
|
