Thursday, 31 January 2019

6847 VDG

Motorola の Graphics chip です。1981年の自作機に使った奴です。TVにColor 表示できる極めて便利なChip。

  Character ROM 内蔵
  256x192 graphics mode
  64x64 4 color mode

NEC PC6001に使われたものらしい。マニュアル見ると外部CGも使えるとある。でも、それはなしでした。

この部分、自分で回路書かなかったかも。二人でやってたので。で、

  cycle steel でないのに、なんで表示できているのか少し不思議

だった気が。どうも、

  CPUと平行に繋げて、CPUが使ってない時にデータを転送する

方式だったらしい。そのアドレス空間にアクセスしてないなら干渉しないからな。おそらくバッファで分離してたはず。

実家には回路図があるはずだが...

line と circle を書くルーチンは作って、プリンタにscreen dumpを撮ることができたらしい。

もっとも、かなり遅くて、それでゲームとかする気にはならなかったんだけど。Block崩しはPC8001一回作ったし。

CPUとの干渉を気にしないならちらつきは出るけど、そこそこのspeedで書けました。 Double buffer も頑張れば可能ではあったんだよな。

のちに出た「毎画面全部書き直し」とかとかは無理な時代ですね。

卒論で実験装置につないでグラフ書くぐらいはやってました。GAMEで。それやったら、PC9801でやってといわれてADボード作る羽目に。

http://web.mit.edu/6.115/www/document/mc6847.pdf

Wednesday, 30 January 2019

nuXmv

Automaton の授業の〆は、nuXmv というモデル検査システムで。元は、CMU の SMVなはずです。

マニュアルから読み始めたんですが...

  あぁ、だめ。これは...

というわけなので、Tutorial から。でも、いかんせん、80年代からのシステムだから...

  構文が古くさい

VHDLっぽい? あと、Tutorial は SMV のままなので、nuXmv になって何が良くなったのかわからないという問題が...

MODULE main
VAR
state : {a, b};
ASSIGN
init(state) := a;
next(state) := {a, b};
SPEC AG state=a
SPEC EG state=a
SPEC AF state=a
SPEC EF state=a
SPEC A [ state=a U state=b ]
SPEC E [ state=a U state=b ]

とかで、SPEC どうなるとかやってました。CTL ややこしい。

Tuesday, 29 January 2019

平凡社世界大百科

なんか96年ぐらいにCROMで出たんですが、結構、よい値段だったですが、

  初版は安い

ってのがあって。その当時はお金持ちだったので買いました。しかし、

  Windows 95なUIが最低

なんと、50音ボタンパネルで入力という。なにそれ。それでも、Libretto に入れて使ったりしてました。 仮想CDROMみたいにして使います。

その後、ソニーのEPWINGとかのCROM辞書が結構出た。それでいろいろ解析されたのですが、

  世界大百科の初版は解析されず

Jamming/Logophie でも第二版から。その辺を Twitter で愚痴ってたら、

  こっちでできるんじゃないですか?
  http://ebstudio.info/home/encytk.html

という指摘が。でも、あんまり期待してなかったんですが、太田純氏だ! 当時、この世界大百科の解析は fj 上で議論されていて、割と
進んでいたんですが、そこからたぶん地下に潜ったのではないかと。解析終わっていたとは知らなかった。

ソースはVC++6.0用なんですが、

  特に問題なく compile 完了

すげ〜 2003年のページなのに。iconv とか入っているので、ちゃんとメンテされてるみたい。

画像とかWindowsで動くようにするにはいろいろ大変なようですが...

僕は「文字が表示されれば良い。外字は諦める」でいいかなと。そうすると、

  テキストに変換して、キーワードでソート、Perlの二分探索で表示

でできます。そういうのを既に二つくらい持ってる。変換してみると218MBですが、

  今のMBPなら、on memory で楽勝にsort可能

もっとも、Unixのsortだと死にますが。Perl のsortで問題なし。時間も数分もかからない。素晴らしい。

これで、コマンドラインから検索できる百科事典が! 検索してみると、 日本語Wikipedia の残念さのない百科事典って素晴らしい。

本町通り ほんちょうどおりMain Streetアメリカの小説家シンク
レア\xa5ルイスの出世作。1920年出版。作者の故郷をモデルにし
た中西部の田舎町の因襲が戯画的に描かれている。中心人物は,
平凡な町医者と結婚したよそ者のインテリ女性キャロル。住民の
中で彼女の理解者は学校の女教師など数名にすぎず,彼らを足が
かりに町の改革に乗り出したものの,すぐに挫折する。女教師も
結婚するとたちまち平凡な主婦になってしまう...

Wikiの方はない項目も多いからなぁ。xa5 とか化けてるけど。

ついでに EBライブラリもmakeして、広辞苑と英和中辞典も sort しました。昔の dserver とか使っていた頃に戻った感じが面白いです。

Monday, 28 January 2019

フロンティア

今年はないと思ってたんですけどね。メール来てなかったし。それで、OSの採点を楽しくやってたら電話が...

  今日は授業ですが...

え〜? 聞いてないからやらないっていったんですが、許してもらえるはずもなく。

この授業英語だし、自分もそんなに最先端ってことをやってるわけでもないし... 去年のネタでも良いと思ったですが、

  教室に付いたらプロジェクタのケーブルがない。

いや、良く探せばあったかも。まぁ、でも、

  お話でもいいか〜

と言う感じで、安易な授業をしてきました。プログラムの検証と物理世界の話。この世界は巨大なオートマトンか?
あるいは、オートマトンと違うのならどこが違うのか? とか。

英語もだいぶ錆びついてるしな〜 毎日、John Kabira 聞いてた頃がましだった。日本人相手なので虚しいと言えば虚しい。

でも、大卒で英語が使えないってのもなぁ。韓国は劇的に英語力が改善したので日本でもできるはず。問題は、

  英語なり、中国語になりに commit できるか

ということだと思う。カリキュラムや教員が及び腰では学生が commit するわけない。そして、

  母国語しか話せない人たちの視野の狭さ

がね。翻訳技術が進んでも「ざっと論文に目を通す」「英語の検索結果から自分の必要なものを探し出す」みたいなものは助けてくれない。

そして、

  英語のニュース記事や Wikipedia の方が日本語の情報量よりも質量ともに優れてる

その辺をアピールするべきだったか? そのためにはプロジェクタないとだめだったか。

Sunday, 27 January 2019

Okinawa Game Jam できあがり

ホロレンズ組は結構苦戦したみたい。20の扉を開けるというゲームでしたが。開発機が一つの時には、そういうやり方があるのだが、難しいかも。

Scratch 組は2Dが多いかな。パズル的な面白さは2Dの方が出しやすい。会社で部下を帰らせる課長のゲームはアイデア的に良かった。

電車の中から脱出する2D横スクロールは、そういえばプロ4組でそういうのを作ったのがいたのを思い出しました。プロ4の方が時間がたっぷりある。

Unity は3Dになることが多いですね。物理エンジンを使って家具を動かしたりするのが楽しいらしい。

なんとなく「ゲーム作成入門」みたいになっていて少しマンネリか? 大学っぽくないってのもあるけど、

  これは、これで必要なものなのかも

自分の作りたいものの骨格を用意しておいて、当日参加してくれる人を探して作る、みたいな方が良いのかな?

今だと「プログラミングしたことありません」的な参加者もいるので、それはそれで面白いです。

-

Saturday, 26 January 2019

Game Jam Okinawa

二日でゲームを作ろうイベントです。頑張って維持できてるのは素晴らしい。

  明日の15:30くらいに工学部一号館に来ると完成したものがみれるらしい

です。

今回はサマスタから借りたPCが並んでます。ありがとうございます〜

沖国からのScrath組、いつものUnity組、ホロレンズ組といるみたい。今回は台湾のGame Jamと中間発表もあったらしい。

Unity からの差し入れのレベルが高いのはいつも感心しているんですが、今回は、

  P-Can!

中身はパンです。結構うまい。開ける前にお湯で温めると良いらしいです。

Friday, 25 January 2019

Technics SL1301

レコードプレイヤーです。カートリッジはAudio Technica の AT 15EG。Denon もあったのだが、針をとばしてしまった。

79年の物らしく40年使ってるみたいです。池袋東武の展示品の安売りだったはず。超良い買物だった。ターンテーブルは安定して動いてます。

フルオートですが、entry は失敗するけど、return はまだ動く。

  調べると油が固まっていることが多いらしく、治る可能性がある

しかし、

  治そうとして分解すると動かなくなる可能性が高い

悩ましい所ですね。買い換えるとするとSL1200だろうけど。でも、一生これが使えるならそれがいいな。

ストロボはターンテーブルの裏でプリズムで見る方式。なので、うるくさくないデザインになってます。

何故か、オペラ座の夜が見当たらないな。実家でも探してはみたんですが、見つからず。

Simon and Garfunkle のコンパイレーションを書けたら、当時の安ものだったらしく残念な音だった... でも、

  それを当時は繰り返し聞いたんだよな

Thursday, 24 January 2019

付け届け

この季節になると、研究室OBが卒論生/修論生に付け届け送る風習があります。

今年は修論一つなのでだいぶ楽ですが、その替わり、卒論生がたくさん。まぁ、景気がいいと院進は減るものなので。

でも、ストロングゼロはどうなの? 最近の学生は飲まないし。僕も宅飲みとか大学で飲むのはやらないからなぁ。

  20代は、酒飲む以外にやることがたくさんある

からね。30代以降は酒飲むのは楽しいとは思うけど。ほどほどに。

Wednesday, 23 January 2019

モビリティなんとかの集まり (Civic Hack Night Okinawa)

ずけらんと一緒にバスの話をしてきました。

  バス乗らない人にはバスのことはわからない

沖縄のバス、乗って欲しくないだろってくらいだからな〜

まぁ、別に、ここであーだこーだいっても、どうなるものでもないですけどね。

一回、全部、リセットすれば良いのにと思いますけどね。

学生とかは乗用車乗合とかやっているので、バスはあきらめて、そっちがいいかも。

Tuesday, 22 January 2019

ウルトラマンタイマー

たぶん、浦添にダイエーがあった頃に買ったんだよな〜 ウルトラセブンもあったということはないはずです。

が、とうとう壊れた。ブザーの磁石が外れてる。ん〜 「接着剤でいいか?!」それは良かったんですが、

直しているうちに、プリント基板の印刷配線がはがれてしまった。おいおい。久しぶりにはんだごてを出してきて、ラッピングワイアの切れ端で。

なんか、少し音が小さくなったような気がするが、まぁ、いいか。iPhone のタイマー使うことの方が多いかも。

一応、円谷マークがあるのでぱちもんではないらしいです。

Monday, 21 January 2019

Buffer Overrun

ま、プロならやらんだろってわけなんですが... いかんせん、考古学的プロジェクトだからな。

  Linux で動かしてみたら、free が invalid pointer と言い張る

え〜 これは malloc した領域にポインタ経由で爆撃しているので厄介なんだよな。再現性があるので場所はだいたいわかってて、

  仮想ディスクドライバ

ディスクイメージではなく、UFSを直接見れるようにした奴ですね。思い当たる所がありすぎる。

なのだが、さっぱりわからない。GNU glibc のmalloc には mcheck ってのがあるらしいんだが、

  usleep が死んでしまう

しかも、mcheck のcheckはすり抜けて free で落ちる。使えな〜 

  mallopt - set memory allocation parameters

という man の entry があって、MALLOC_CHECK_ って環境変数が。そういえばそういうのあった。これで、
最初の free で捕まるようになりました。いや、だからさ、

  free の前のどこだよ?

MALLOC_CHECK_ で呼ばれる free_check() を使って二分法すれば良いのだが、

  何故か static

C の名前空間を汚したくないんだろうけど。そこで、glibc make して呼び出したれと思ったんですが、

  glibc ってのは特定のkernelと特定の環境でないと build できない

時代遅れのCentosですが、build できたのだが動かず。まぁ、そうだよな。でも、gdb の中からなら static でも呼べる?

というわけで、free_check() で二分法と思ったんですが...

  free_check() は実は free してしまう routine で一度しか使えない

そういうの「check」とは呼ばないから! でも、まぁ、毎回最初からやる二分法は可能だったので捕まえました。
free で二分法でもできたはずです。

捕まえてみれば、strinng copy が一文字多いだけだった。for(;i<len;i++) の後に s[i]=0 とやってしまう、うっかりパターン。
macOS は malloc の前後に guard 取ったりするので動いたりする。Linux/GNUな人たちは「Buffer overunとかやるのは馬鹿だけ」
という立場なんでしょう。まあ、その通りではある。

vargrind 使ってみるべきだったかな。

Sunday, 20 January 2019

センター試験

自分の分は無事に終わりました。この手の雑用に教員を使うのはもったいないのだが...

英語の試験は割と量が増えていて、単語選んで作文とかもあって難しくなっている感じ。もっとも来年は民間試験になるらしい。

数学は「三角関数なんて大人になったら使わない」とかいうのがあったせいか、

  三角関数出まくり

でした。行列もなくなっちゃったので、

  面白いところスキップして、つまらないところばかりやってる

気が... 三角関数と回転が、一次変換に対応して、それが長さ1の複素数でもあり、さらにeの虚数乗に対応するってのをかすりもしない。

結局、計算力と忍耐力を見てるだけみたいな問題が多かったな。一つだけ三次元とベクトルの内積みたいな問題があったかな。

物理もエネルギー軽視で力にこだわっている辺りが大学にまったく繋がらない感じ。相対論でも量子力学でも力は出てこないからなぁ。

国語は、古典で出てくる野菜の種類とかやってた。翻訳って難しいみたいなエッセイとか。文章理解とか文章構築、あるいは、

  レポートの書き方

みたいなのをやって欲しいのだが、センタ試験ではまぁ限界が。で来年は記述やらせるらしいですが、どうなることやら。

Saturday, 19 January 2019

鞄の紐がブチギレ

怪しく、ハンドル部分に結んでいたので、結んでいたところから切れてしまったようです。

他の鞄の紐があるのでそれで代用。なんだけど、微妙に開く形の金具が開いてしまう。まぁ、なんとかなるかな。

変な金具ではなくOリング使って欲しい。

Friday, 18 January 2019

青ノヴァ

なんかハレハルのお誕生日記念のノヴァらしく。18日の夜からだそうなので、

  木曜日に飲んだ帰りに

夜中の1くらいに58号線から邪魔なリンクを潰す感じで反転して引きました。まぁ、あんまり役には立ってないかも。

お昼にわざわざ Cena 氏が落としに言ったようです。ご苦労様です。

何年かぶりにlongest linkを更新しましたが、もっと長いの引きたい気もするな。まぁ、やりたいって言えば良いだけなんですが。

  南大東島送り

ですけどね。

お誕生日おめでとうございます。Cena女史とのわんこも楽しめたようでなによりです。

Thursday, 17 January 2019

Bar Teada

なんか最近いけなくて。でも、昨日は、鈴田さんがいたので、

  水曜日休みだけど、開けて〜

と頼んで開けてもらいました。

12年、お世話になっているわけですが、店主ももうそろそろ閉めるとか言ってるしな〜

入れてる舞舟の一升瓶も、まぁ、もう少しですが開けられるかどうかば微妙。でも、昨日は頑張って飲んだ方かも。

近くの阿蘇という魚の定食屋さんで夕ご飯だったんですが、そっちは先代からで50年になるらしいです。すごい。

やっぱり、続けられること自体がすごいと思う。

Wednesday, 16 January 2019

授業が終わってお休みしてたら

「河野さん、懇親会は来るんですか?」

あっとと、SS研の懇親会があったのでした。学生と一緒にバスで。これが道が激混で。30分遅れ。

発表はお昼の13時。なんですが、

  午後2:40から授業

で、青年会館から旭橋まで歩いてゆいレールとタクシーで余裕で間に合いました。本当は、バス使いたいんだがバスでは間に合わない...

夜は、また、S氏から呼出が〜 酒が切れないな。

そういえば、なんか沖縄のバスの勉強会にも顔出す予定です。

Monday, 14 January 2019

理論電磁気学

砂川先生のですね。第二版でもいろいろ変えられているらしい。変分原理と保存則なんてのが第一版にはあったのか。ちょっと欲しい気がする。

これで電磁気学は勉強しましたといいたい所ですが、これ難しいんだよね。一応、一通りは目を通したはずですが。

やっぱり、ちゃんと式を追わないと。Mathematica と思わなくもないんですが、

  年間数万取るのやめて

大学でも欲しいと言っていた先生はいたんですが付いていけず。でも、

  Agda でやる

っていう手もあるかも知れない。大変そうですけど。3月にはAgdaのmeetingがあるらしい。少し Agda 読んでおくべきだな。

実家の本もいろいろ持ってきたいものはたくさんあるんですが...

  重い

です。でも、少しずつ。5次元世界の冒険の続きとか。まぁ、それは読むなら英語か。あとは古い日本のSci-fiとか。

アスキーエンサイクロペディアは、まぁ、いいかな。ちょっと拡大鏡かなんかないと読めないか。

そういえば、ライカマウントの40mmなんてのも見つけたのだった。(なんとまとまりのないblogだ...)

Sunday, 13 January 2019

プロシン最終日

朝一の座長は質問がたくさんで多ので楽でした。PEG使ったPython実装なトランスラ(構文ベースのプログラム変換器)と、SPINによる
メモリモデルの検証の話でした。

2014 のLOLAでもメモリモデルの検証の話があった。日本人の好きな分野なのかも。

TL/1 のセルフコンパイラをアスキーで見た記憶があるんですが、聞いてみたんですけど、「見たことないなあ」。うーん。記憶違いかも。

TL/1の機能的にセルフコンパイラは辛い説もあるし、MEM関数使えばなんでもできる説もあるし、

  たいしたことないから自分で書け

あぁ、まぁ、そうかなぁ。来年度のコンパイラの授業かなんかで。

いつもの五味屋でお昼にするはずです。

Saturday, 12 January 2019

プロシンの続き

Ruby のJITをCでやる話。むかし、KCL がCで書いてあったみたいな話なのですが、いくつか面白い。

  .so だとsegmentが分割されてキャッシュに悪い影響がある→複数のものを一つにまとめる
  前もって全部Cにする方式だとdispatchがさぼれるだけで速くない
  JITだと実行時の情報を使える

なるほど。今はCコンパイラ結構速いので実行時に呼び出しても良いというわけですね。ただ、

  実行時にCを呼び出すのはセキュリティ的にどうなの? → ある程度はあきらめる

ってのがあるらしいです。

足湯にも入ってみましたが、

  くそ寒い

です〜 寸暇を惜しんで温泉に入ってます。

Friday, 11 January 2019

プロシン60

例年のあれです。趣味でロマンスカーでいくわけですが...

 伊東線との連絡が絶望的にダメ

まぁ、JR的ないじわるなんでしょうけど。かつサンド食べると子供の頃に戻った気がする。

 箱根の旅館で、石森な挿絵の砂の惑星を読んでいた中学生時代

ですね。なんですが、小田原で降りた時に、

 箸を窓際に置いてきた!

箱根号はそのまま箱根湯本へ。ぐ。忘れもののところに頼んで、結局、箱根湯本まで取りにいくことに。

 そして、また連絡の悪い伊東線に乗り換え〜

というわけで、いつも通りに遅刻。

 ビスケットの400個の眼鏡の話

を聞いてます。内職でOSの採点な予定。

Wednesday, 9 January 2019

東京でエンサイクロペディアアスキーを発掘

まぁ、やっぱり寒いかなぁ。

実家で探してみたけど、やっぱりLISP09はなかったな。でも、エンサイクロペディアアスキーの3と7が。誰かの所には全部あったけど。

きっと、この7のTL/1を入力したんじゃないかな。感熱なドットプリンタのリスト。まぁ、あの頃は問題なく見えたんでしょう。今は少し辛いな。

GAMEとかBASICとかのソースも載ってるんですが、ASCIIの雑誌の範囲だと、

  TL/1 がまとも

他の人がGAMEで書いた6809アセンブラもあったんですが、機械語ルーチン併用。まぁ、そうだよな。速度的にも記述力的にも。それでも、

  本人も良くわからない

という文章が。自分で書いたのはGAME onlyだったがかなり追い切れてなくて。やっぱり、

  行番号のある言語はだめ

ってなわけですね。BASICはラベル拡張とかされたんですけどね。なのでTL/1入れたいと思ったんだろうな。もっとも

OS9頑張ればBASIC09が使えたはずです。いやLevel1 だと無理か。

TL/1 はPL/1 よりはPL/Mよりなはずだが、あまり知名度なかったか。UCSD Pascalはあったんだよな。

これやってた頃って、卒研と大学院入試があったはずなんだよな。

OS-9とTL/1 は、 さすがに時間が廻らなくなったか。M1は廻りに追いつくのとか論文読むとかProlog読むとか書くとかかつかつ。
それでもD2/D3辺りは少し時間があったはずなので、6809の機材を持ち込むぐらいはやってたみたいです。

FM11あったので OS9 からterminal accessするぐらいはやってた記憶がある。D2/D3 は少しペースダウンしてたな。

その辺でこれをやっていたら少し気分転換になったかも知れないです。

Tuesday, 8 January 2019

Ingress Red Faction

献血キャンペーンなんですが... なんか血圧の薬飲んでいてもいけるようになったらしい。しかし、

  イギリス渡航歴

の方がまだ解けてない。結局、CJDとか何も起きなかったんですけどね。20年で3万人死ぬとか言ってたくせに。

なんですが、寄付でも良いらしい。もっとも、

  もらえるのはカード一枚だけ〜

そんなんでいいのか〜 まぁでも、

  献血は献血センターがお勧めです

いろいろ置いてあるし。でも、献血センターによってはしょぼい。

Monday, 7 January 2019

8bit CPUのせこいテクニック

まぁねぇ。メモリの1byteは血の一滴な時代だったので仕方ないんですけどね。

  フラグの使いまわし。しかもbit単位。
  表の属性を0で区切って表し、線形サーチする。
  しかも、その属性数はコンパイルしてる文法の場所に依存する
  似た関数を無理に共有しフラグで動作を変える
  ラベルをケチって、bra *+3 とかを多用

そういうのが楽しい時期だったことは認めるけどさ。

  mallocがサイズしかheadに書いてなくてfree時のチェックが雑

おかげで、free にbreak pointかけて監視する羽目に。

362C: 86 01 LDA #$01
362E: 97 01 STA <$01
3630: A6 20 LDA +$00,Y
3632: BD B4 32 JSR $B432
3635: A6 00 LDA +$00,X

大域変数と局所変数のframeをXとYを使ったので、少し6809っぽいソースになりました。

Sunday, 6 January 2019

東京オリンピック記念硬貨

なんか100円玉らしいです。どうしてそういうことするかなぁ的なところが少しあるかも。いや、別に、

  記念硬貨は良い

そういうの好きな人いるでしょうし。でも、

  流通させるためにばらまく

のはどうかなぁ。

1円/5円廃止とかは昔から主張しているんだけど、

  いっそ硬貨廃止

でも良いかな。もっとも、

  マネーカードを乱立させた

というあほな選択があるので、もはや何をやっても便利にならない気もします。

Saturday, 5 January 2019

TL/1 の続き

なんか楽しくデバッグしたんですが...

  生成コードが変

6800/6809が混じっているような。あぁ、そういえば...

  このコードは6800用のオリジナルのTL/1を6809に移植しようとして挫折した

ものでした。どうりで細かいコメントが入っているはずだよ。そんなことしてたんだ。なので、そのままでは動かない。

おそらく、コード生成まで6809で動くようにして、どいういうコードを生成するかを考えた辺りでやめたんじゃないかと。

まあでも、6800の上位互換なので動かすぐらいだったら。全部のステートメントをテストしようとしたら大変だけど、簡単な例題くらいなら。
このままだと、生成されるコードはダサいのだけど、 まぁ、動いたからいいかな。

Basic Master Lv3 では動いているらしいので、ちゃんとしたものはどっかにあるはず。

主なバグは10進数の入出力だった。MULの結果がAに入ると思っているコードだったり。

まぁ、これで若い頃に時間が取れなくてやり残したことはだいたいできたかな。 sbc09 TL/1 source


  OS9:tl1 tl1/test/t1.tl1

  Do 1
  2
  3
  4
  5
  6
  7
  8
  9
  10

  OS9:list tl1/test/t1.tl1
  % ** SPRITE TEST PROGRAM **
  PROC WAIT,TIME
  %--- MAIN ---
  VAR I
  BEGIN
   WRITE(1:"Do ")
   FOR I:=1 TO 10 DO [
    WRITE(1:I,CRLF)
    TIME
    ]
   WAIT
  END
  %-- PROCEDURE WAIT --
  WAIT
  VAR I,J,K
  BEGIN
   FOR I:=0 TO 1 DO [
    FOR J:=0 TO 255 DO [
     FOR K:=0 TO 255 DO []]]
  END
  %-- PROCEDURE TIME --
  TIME
  VAR I,J
  BEGIN
   FOR I:=0 TO 10 DO [
    FOR J:=0 TO 150 DO []]
  END

  380D: 9E 02     LDX     <$02
  380F: A7 00     STA     +$00,X
  3811: 86 0A     LDA     #$0A
  3813: 34 02     PSHS    A
  3815: 86 01     LDA     #$01
  3817: 97 01     STA     <$01
  3819: 9E 02     LDX     <$02
  381B: A6 00     LDA     +$00,X
  381D: BD B6 2F    JSR     $B62F
  3820: BD B6 BB    JSR     $B6BB
  3823: 86 01     LDA     #$01
  3825: BD 38 80    JSR     $3880
  3828: 35 02     PULS    A
  382A: A1 00     CMPA    +$00,X
  382C: 23 05     BLS     $3833
  382E: 6C 00     INC     +$00,X
  3830: 7E 38 13    JMP     $3813
  3833: 86 01     LDA     #$01
  3835: BD 38 3B    JSR     $383B

Friday, 4 January 2019

TL/1

TL/1 は元々は6800用に書かれた Pascal like な incore compilerで、データ型は8bit intと、その配列のみ。いさぎよい。
高速な1 pass コンパイルが売りだったようです。 Micro C も1 pass だった。

考古学的なプロジェクトなわけですが、

  単に動かすだけじゃなくて、OS9 上で動かす

というわけですが、今回は

  ソースコードがドットプリンタで出力されたリスティングのみ

でデジカメで撮って、フリーなOCR Web サービスに放り込む〜 で、8と0が入れ替わったりするわけですが、

  手書きのコメントが邪魔

一生懸命読もうとしていたんだな。6809アセンブラ版で1615行。超コンパクト。Micro C が3696行か。

で、リストに直して、OS9 に対応する部分を付け加えて、assemble を通す所までできましたが、当然、動かないようです。

生成されるコードは当然絶対アドレスなので相対アドレスなOS9との相性は良くないのですが、

  実行されてしまえばアドレスは固定
  moduleとして実行して、ソースコードを読み込んで、その場で絶対アドレスなコードを生成
  ライブラリは実行時のアドレスを計算して生成する

という方式でいけるはずです。

これは、打ち込みミスとの戦いになりそう...

Thursday, 3 January 2019

Forth の続き

今日はしばらく Forth いじっていたんですが、

  わからなった Forth の構文がだんだん読めるようになってくる

わけなんですが...

  だんだん、人間でなくなっていくような気もする...

まぁ、Forth は魂売らないとダメ的なところは当時から言われていたんですけどね。

word tableの構造は、

2byte next entry address
1byte word len | 0x80
n byte name
exec code
... next entry

みたいになっていて、実行コードがいきなり書かれてます。byte code じゃないんだよね。code のところには、

jsr nest
code adr word1
code adr word2
unnest

みたいな感じで、最初だけ本当の実行コードが入ってる。nest のroutineが、コードを指してるポインタ(6809ではU)を実行stack(Y上にある)にセーブして、

jsr nest の次のコードを呼び出す。で、word1 で呼び出されたコードは、実行の最後に

pulu pc

で、word2 を呼び出す方式。最後に unnest がよばれると、実行stackから前のUを復帰して、そこから実行するようになってます。なるほどね。

辞書引きながら上のコードを生成するのは難しくない。でも、

  極めて技術的な感じ

はする。まぁ、それが面白いし、それが限界なのかな。

で、だんだん...

: HASH ( c-addr u #threads --- n)
\G Compute the hash function for the name c-addr u with the indicated number
\G of threads.
>R OVER C@ 1 LSHIFT OVER 1 > IF ROT CHAR+ C@ 2 LSHIFT XOR ELSE ROT DROP
THEN XOR
R> 1- AND

とか読めるようになってしまう... これはやばい。

Wednesday, 2 January 2019

Forth

一応、動かしたんですが、あまり追求してなくて。ちょっと入門PDFを見ながら。

  1 1 + .

で、1 二つがstackに積まれて、+ で計算してstackが一つ減って、. で数字を表示。日本語で「1と1を足す」というのと同じと言うやつですね。

  : add1 1 + ;

: で word を定義して、; で終わると。これで、1 add1 とできるようになる。

なんですが、

."hoge"

が動かないことを発見。いや、前も command line からは動かなかったんだけど。バグなはず。

なんか引数 stack だけではなく、return stack もあるとか書いてある。変数あるから要らない気もしますが...

あとは メモリ上でのword の積み方を見れば良い。Threaded compiler とかもあるはずです。

TL/1 は紙上のアセンブラリストは見つけました。1700行かぁ。OCRかけてもあまりうれしくならないんだよな。

http://www.exemark.com/FORTH/StartingFORTHfromForthWebsitev9_2013_12_24.pdf

Tuesday, 1 January 2019

明けましておめでとうございます

GAME09 の方もプログラム load とプログラム切り替えを加藤食堂で書いてたんですが...

  間に合わない〜

と思ったんですが、

  実は動いてました

切り替えた後に &=0 で new してやらないとだめだったのだった。

でも、朝、いろいろためしてみると

  W=11
  ?=6900+W*100

が8000にならない。なんか、(6900+W)*100を計算しているんですが... ソースを見ると確かにそうなってる。

まぁ、あの時代だからなぁ。GAME09のバグなんだと思いますが、治したバージョンを使ったのか、ソースの方にかっこを足したか...

たいした手間じゃないから治すとかと思ったが、結構、難しい.. ついでに U stack 使っているのを落としたい。