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
Thursday, 31 January 2019
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 ややこしい。
マニュアルから読み始めたんですが...
あぁ、だめ。これは...
というわけなので、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 とか使っていた頃に戻った感じが面白いです。
初版は安い
ってのがあって。その当時はお金持ちだったので買いました。しかし、
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 の方が日本語の情報量よりも質量ともに優れてる
その辺をアピールするべきだったか? そのためにはプロジェクタないとだめだったか。
今日は授業ですが...
え〜? 聞いてないからやらないっていったんですが、許してもらえるはずもなく。
この授業英語だし、自分もそんなに最先端ってことをやってるわけでもないし... 去年のネタでも良いと思ったですが、
教室に付いたらプロジェクタのケーブルがない。
いや、良く探せばあったかも。まぁ、でも、
お話でもいいか〜
と言う感じで、安易な授業をしてきました。プログラムの検証と物理世界の話。この世界は巨大なオートマトンか?
あるいは、オートマトンと違うのならどこが違うのか? とか。
英語もだいぶ錆びついてるしな〜 毎日、John Kabira 聞いてた頃がましだった。日本人相手なので虚しいと言えば虚しい。
でも、大卒で英語が使えないってのもなぁ。韓国は劇的に英語力が改善したので日本でもできるはず。問題は、
英語なり、中国語になりに commit できるか
ということだと思う。カリキュラムや教員が及び腰では学生が commit するわけない。そして、
母国語しか話せない人たちの視野の狭さ
がね。翻訳技術が進んでも「ざっと論文に目を通す」「英語の検索結果から自分の必要なものを探し出す」みたいなものは助けてくれない。
そして、
英語のニュース記事や Wikipedia の方が日本語の情報量よりも質量ともに優れてる
その辺をアピールするべきだったか? そのためにはプロジェクタないとだめだったか。
Sunday, 27 January 2019
Okinawa Game Jam できあがり
ホロレンズ組は結構苦戦したみたい。20の扉を開けるというゲームでしたが。開発機が一つの時には、そういうやり方があるのだが、難しいかも。
Scratch 組は2Dが多いかな。パズル的な面白さは2Dの方が出しやすい。会社で部下を帰らせる課長のゲームはアイデア的に良かった。
電車の中から脱出する2D横スクロールは、そういえばプロ4組でそういうのを作ったのがいたのを思い出しました。プロ4の方が時間がたっぷりある。
Unity は3Dになることが多いですね。物理エンジンを使って家具を動かしたりするのが楽しいらしい。
なんとなく「ゲーム作成入門」みたいになっていて少しマンネリか? 大学っぽくないってのもあるけど、
これは、これで必要なものなのかも
自分の作りたいものの骨格を用意しておいて、当日参加してくれる人を探して作る、みたいな方が良いのかな?
今だと「プログラミングしたことありません」的な参加者もいるので、それはそれで面白いです。
-
Scratch 組は2Dが多いかな。パズル的な面白さは2Dの方が出しやすい。会社で部下を帰らせる課長のゲームはアイデア的に良かった。
電車の中から脱出する2D横スクロールは、そういえばプロ4組でそういうのを作ったのがいたのを思い出しました。プロ4の方が時間がたっぷりある。
Unity は3Dになることが多いですね。物理エンジンを使って家具を動かしたりするのが楽しいらしい。
なんとなく「ゲーム作成入門」みたいになっていて少しマンネリか? 大学っぽくないってのもあるけど、
これは、これで必要なものなのかも
自分の作りたいものの骨格を用意しておいて、当日参加してくれる人を探して作る、みたいな方が良いのかな?
今だと「プログラミングしたことありません」的な参加者もいるので、それはそれで面白いです。
-
Saturday, 26 January 2019
Game Jam Okinawa
Friday, 25 January 2019
Technics SL1301
レコードプレイヤーです。カートリッジはAudio Technica の AT 15EG。Denon もあったのだが、針をとばしてしまった。
79年の物らしく40年使ってるみたいです。池袋東武の展示品の安売りだったはず。超良い買物だった。ターンテーブルは安定して動いてます。
フルオートですが、entry は失敗するけど、return はまだ動く。
調べると油が固まっていることが多いらしく、治る可能性がある
しかし、
治そうとして分解すると動かなくなる可能性が高い
悩ましい所ですね。買い換えるとするとSL1200だろうけど。でも、一生これが使えるならそれがいいな。
ストロボはターンテーブルの裏でプリズムで見る方式。なので、うるくさくないデザインになってます。
何故か、オペラ座の夜が見当たらないな。実家でも探してはみたんですが、見つからず。
Simon and Garfunkle のコンパイレーションを書けたら、当時の安ものだったらしく残念な音だった... でも、
それを当時は繰り返し聞いたんだよな
79年の物らしく40年使ってるみたいです。池袋東武の展示品の安売りだったはず。超良い買物だった。ターンテーブルは安定して動いてます。
フルオートですが、entry は失敗するけど、return はまだ動く。
調べると油が固まっていることが多いらしく、治る可能性がある
しかし、
治そうとして分解すると動かなくなる可能性が高い
悩ましい所ですね。買い換えるとするとSL1200だろうけど。でも、一生これが使えるならそれがいいな。
ストロボはターンテーブルの裏でプリズムで見る方式。なので、うるくさくないデザインになってます。
何故か、オペラ座の夜が見当たらないな。実家でも探してはみたんですが、見つからず。
Simon and Garfunkle のコンパイレーションを書けたら、当時の安ものだったらしく残念な音だった... でも、
それを当時は繰り返し聞いたんだよな
Thursday, 24 January 2019
付け届け
Wednesday, 23 January 2019
モビリティなんとかの集まり (Civic Hack Night Okinawa)
ずけらんと一緒にバスの話をしてきました。
バス乗らない人にはバスのことはわからない
沖縄のバス、乗って欲しくないだろってくらいだからな〜
まぁ、別に、ここであーだこーだいっても、どうなるものでもないですけどね。
一回、全部、リセットすれば良いのにと思いますけどね。
学生とかは乗用車乗合とかやっているので、バスはあきらめて、そっちがいいかも。
バス乗らない人にはバスのことはわからない
沖縄のバス、乗って欲しくないだろってくらいだからな〜
まぁ、別に、ここであーだこーだいっても、どうなるものでもないですけどね。
一回、全部、リセットすれば良いのにと思いますけどね。
学生とかは乗用車乗合とかやっているので、バスはあきらめて、そっちがいいかも。
Tuesday, 22 January 2019
ウルトラマンタイマー
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 使ってみるべきだったかな。
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の虚数乗に対応するってのをかすりもしない。
結局、計算力と忍耐力を見てるだけみたいな問題が多かったな。一つだけ三次元とベクトルの内積みたいな問題があったかな。
物理もエネルギー軽視で力にこだわっている辺りが大学にまったく繋がらない感じ。相対論でも量子力学でも力は出てこないからなぁ。
国語は、古典で出てくる野菜の種類とかやってた。翻訳って難しいみたいなエッセイとか。文章理解とか文章構築、あるいは、
レポートの書き方
みたいなのをやって欲しいのだが、センタ試験ではまぁ限界が。で来年は記述やらせるらしいですが、どうなることやら。
英語の試験は割と量が増えていて、単語選んで作文とかもあって難しくなっている感じ。もっとも来年は民間試験になるらしい。
数学は「三角関数なんて大人になったら使わない」とかいうのがあったせいか、
三角関数出まくり
でした。行列もなくなっちゃったので、
面白いところスキップして、つまらないところばかりやってる
気が... 三角関数と回転が、一次変換に対応して、それが長さ1の複素数でもあり、さらにeの虚数乗に対応するってのをかすりもしない。
結局、計算力と忍耐力を見てるだけみたいな問題が多かったな。一つだけ三次元とベクトルの内積みたいな問題があったかな。
物理もエネルギー軽視で力にこだわっている辺りが大学にまったく繋がらない感じ。相対論でも量子力学でも力は出てこないからなぁ。
国語は、古典で出てくる野菜の種類とかやってた。翻訳って難しいみたいなエッセイとか。文章理解とか文章構築、あるいは、
レポートの書き方
みたいなのをやって欲しいのだが、センタ試験ではまぁ限界が。で来年は記述やらせるらしいですが、どうなることやら。
Saturday, 19 January 2019
鞄の紐がブチギレ
Friday, 18 January 2019
青ノヴァ
Thursday, 17 January 2019
Bar Teada
Wednesday, 16 January 2019
授業が終わってお休みしてたら
「河野さん、懇親会は来るんですか?」
あっとと、SS研の懇親会があったのでした。学生と一緒にバスで。これが道が激混で。30分遅れ。
発表はお昼の13時。なんですが、
午後2:40から授業
で、青年会館から旭橋まで歩いてゆいレールとタクシーで余裕で間に合いました。本当は、バス使いたいんだがバスでは間に合わない...
夜は、また、S氏から呼出が〜 酒が切れないな。
そういえば、なんか沖縄のバスの勉強会にも顔出す予定です。
あっとと、SS研の懇親会があったのでした。学生と一緒にバスで。これが道が激混で。30分遅れ。
発表はお昼の13時。なんですが、
午後2:40から授業
で、青年会館から旭橋まで歩いてゆいレールとタクシーで余裕で間に合いました。本当は、バス使いたいんだがバスでは間に合わない...
夜は、また、S氏から呼出が〜 酒が切れないな。
そういえば、なんか沖縄のバスの勉強会にも顔出す予定です。
Monday, 14 January 2019
理論電磁気学
砂川先生のですね。第二版でもいろいろ変えられているらしい。変分原理と保存則なんてのが第一版にはあったのか。ちょっと欲しい気がする。
これで電磁気学は勉強しましたといいたい所ですが、これ難しいんだよね。一応、一通りは目を通したはずですが。
やっぱり、ちゃんと式を追わないと。Mathematica と思わなくもないんですが、
年間数万取るのやめて
大学でも欲しいと言っていた先生はいたんですが付いていけず。でも、
Agda でやる
っていう手もあるかも知れない。大変そうですけど。3月にはAgdaのmeetingがあるらしい。少し Agda 読んでおくべきだな。
実家の本もいろいろ持ってきたいものはたくさんあるんですが...
重い
です。でも、少しずつ。5次元世界の冒険の続きとか。まぁ、それは読むなら英語か。あとは古い日本のSci-fiとか。
アスキーエンサイクロペディアは、まぁ、いいかな。ちょっと拡大鏡かなんかないと読めないか。
そういえば、ライカマウントの40mmなんてのも見つけたのだった。(なんとまとまりのないblogだ...)
これで電磁気学は勉強しましたといいたい所ですが、これ難しいんだよね。一応、一通りは目を通したはずですが。
やっぱり、ちゃんと式を追わないと。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関数使えばなんでもできる説もあるし、
たいしたことないから自分で書け
あぁ、まぁ、そうかなぁ。来年度のコンパイラの授業かなんかで。
いつもの五味屋でお昼にするはずです。
メモリモデルの検証の話でした。
2014 のLOLAでもメモリモデルの検証の話があった。日本人の好きな分野なのかも。
TL/1 のセルフコンパイラをアスキーで見た記憶があるんですが、聞いてみたんですけど、「見たことないなあ」。うーん。記憶違いかも。
TL/1の機能的にセルフコンパイラは辛い説もあるし、MEM関数使えばなんでもできる説もあるし、
たいしたことないから自分で書け
あぁ、まぁ、そうかなぁ。来年度のコンパイラの授業かなんかで。
いつもの五味屋でお昼にするはずです。
Saturday, 12 January 2019
プロシンの続き
Ruby のJITをCでやる話。むかし、KCL がCで書いてあったみたいな話なのですが、いくつか面白い。
.so だとsegmentが分割されてキャッシュに悪い影響がある→複数のものを一つにまとめる
前もって全部Cにする方式だとdispatchがさぼれるだけで速くない
JITだと実行時の情報を使える
なるほど。今はCコンパイラ結構速いので実行時に呼び出しても良いというわけですね。ただ、
実行時にCを呼び出すのはセキュリティ的にどうなの? → ある程度はあきらめる
ってのがあるらしいです。
足湯にも入ってみましたが、
くそ寒い
です〜 寸暇を惜しんで温泉に入ってます。
.so だとsegmentが分割されてキャッシュに悪い影響がある→複数のものを一つにまとめる
前もって全部Cにする方式だとdispatchがさぼれるだけで速くない
JITだと実行時の情報を使える
なるほど。今はCコンパイラ結構速いので実行時に呼び出しても良いというわけですね。ただ、
実行時にCを呼び出すのはセキュリティ的にどうなの? → ある程度はあきらめる
ってのがあるらしいです。
足湯にも入ってみましたが、
くそ寒い
です〜 寸暇を惜しんで温泉に入ってます。
Friday, 11 January 2019
プロシン60
例年のあれです。趣味でロマンスカーでいくわけですが...
伊東線との連絡が絶望的にダメ
まぁ、JR的ないじわるなんでしょうけど。かつサンド食べると子供の頃に戻った気がする。
箱根の旅館で、石森な挿絵の砂の惑星を読んでいた中学生時代
ですね。なんですが、小田原で降りた時に、
箸を窓際に置いてきた!
箱根号はそのまま箱根湯本へ。ぐ。忘れもののところに頼んで、結局、箱根湯本まで取りにいくことに。
そして、また連絡の悪い伊東線に乗り換え〜
というわけで、いつも通りに遅刻。
ビスケットの400個の眼鏡の話
を聞いてます。内職でOSの採点な予定。
伊東線との連絡が絶望的にダメ
まぁ、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 は少しペースダウンしてたな。
その辺でこれをやっていたら少し気分転換になったかも知れないです。
実家で探してみたけど、やっぱり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
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っぽいソースになりました。
フラグの使いまわし。しかも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
東京オリンピック記念硬貨
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
生成コードが変
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として実行して、ソースコードを読み込んで、その場で絶対アドレスなコードを生成
ライブラリは実行時のアドレスを計算して生成する
という方式でいけるはずです。
これは、打ち込みミスとの戦いになりそう...
高速な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
とか読めるようになってしまう... これはやばい。
わからなった 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
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 使っているのを落としたい。
間に合わない〜
と思ったんですが、
実は動いてました
切り替えた後に &=0 で new してやらないとだめだったのだった。
でも、朝、いろいろためしてみると
W=11
?=6900+W*100
が8000にならない。なんか、(6900+W)*100を計算しているんですが... ソースを見ると確かにそうなってる。
まぁ、あの時代だからなぁ。GAME09のバグなんだと思いますが、治したバージョンを使ったのか、ソースの方にかっこを足したか...
たいした手間じゃないから治すとかと思ったが、結構、難しい.. ついでに U stack 使っているのを落としたい。
Subscribe to:
Posts (Atom)