|
ツールでは、複数のバイナリファイルを繋げて1つのmapデータを生成するのだが、
つなげるときにサイズを検出する必要がある。しかし、basicから読もうとすると、ごくまれにバイナリ内の 1A という数値をEOFと識別してしまいinput past endで止まってしまう。確率は 1/256で発生。もちろんデータサイズを1つ増やすか減らすかすれば回避できるが、使い手にはわからない。
通常は自分がデータ生成する時点で対応すればいいだけだが、今はそういった穴もすべて塞ぎたい。しかしマシン語で組むとそれなりに手間になる。
--
ファイル名は ファイル名+拡張子だが、マシン語で読む場合は、FCB(ファイルコントロールブロック)のフォーマットに納める必要がある。例えば、
USR("SRC-E.OB")
と
実行したとき
"SRC-E   OB "
と
いうように、8文字+3文字に収める必要があり、ドットは省く必要がある。
満たない場合はスペースで埋めなくてはならない。
単純に場合分けすると
・8文字 + 3文字(SRC-E-B3.OBJ)
・8文字以下 + 3文字 (SRC-E.OBJ)
・8文字 + 3文字以下 (SRC-E-B3.DT)
・8文字以下 + 3文字以下 (SRC-E.DT)
・8文字 + 拡張子なし (SRC-E-B3 )
・8文字以下 + 拡張子なし (SRC-E )
となる。
力技で組んで、テストすれば終わることだが、アホである。
タロティカのときはどうしていたかというと、
USR("SRC-E   DT ")
とコールしていたのだが、これは、システムの都合に人間が合わせているわけで、今はこういった組み方は許せない。慣れないフォーマットはミスタッチによるエラーの原因にもなる。機械が人間に合わせるべきだ※1。
やだなーと思っていたら丁度風邪を引いてしまい、
夜中に経過したので起きてなんとなく組んでいたら非常に美しいシンプルなコードになった。
Bレジスタにはファイル名の文字数。HLにファイル名文字列の格納アドレス。
このコードでは、ファイル名の8文字以内3文字以内のチェックをしていないが、なぜなら呼び出し側で
とやっているため、ファイル名が不正だとBLOAD命令でエラーが発生する。つまりファイル名の不正はbasic側にチェックさせ、マシン語は単純にFCBフォーマットへの変換のみに専念するようしてあるのだ。また文字列が長すぎても、FCBエリアは37バイトある上に、セットしたファイル名エリアの後ろはopen後上書きされるエリアなのでオーバーしても不具合が起きないことも見越してある。
中央の JR 命令で戻しているのをなんとかしたかったが、まあここまでかなと。
-
村上春樹氏は、朝5時に起きたらすぐ執筆に入るそうだが、非常に共感できる。
小賢しい脳がねぼけていて、雑念がなくクリアーで集中できて良い。
寝ているときに脳がランダムに散歩?したせいか、
ニューロンがあっちこっちつながったままな、ふわふわとした得体の知れぬ、俗世を離れた夢見なその状態は、
クリエイティブに非常に適しているように思う。。
...
|
|
|
このページでは私の成果、発見のみ記述しております。
※1
コンビニのコピー機で「周囲5mmが写りません」が典型例だ。使う人がいちいち縮小調整させられる。作り手のたった一つの横着が、それを使う人間の数 x 使う回数分の迷惑を生むことを肝に命ずるべきである。おおげさにいえば、日本の発展に充てるはずの時間が、作り手の怠慢の尻拭いにずっと消費され続けていくのだ。
|
|