7月末に WordPress のtop pageをrenewal した時に、どうもダメなテーマを入れてしまったのではないかと。学生は経験浅いから攻撃される前の数日に roll back とかするわけですが、だいたい、やられたのと実際の稼働には時間差があるものなので無駄ですね。適当に直しただけでは、元に戻されてしまうというオマケ付き。
東京にいる間は手だししにくかったんですが、戻ってきたので一通りみました。theme のcheckerで2個ぐらい引っかかっていて。vuls でも PHP 関係の脆弱性が。PHP/WordPress 辺りはサボるとテキメンだからなぁ。
plugin なので組織的に書き換えられてしまう。root kit の検出はできなかったので root までは突破されてないようですが。この規模の侵入は珍しい。うちで良くやられてたのは学生の放置していたサーバに入られて、DDoSとかだったんですけどね。
refererを見ていて「googleから検索した時だけ変なURLを見せる」というもので、普通にURLからアクセスするだけではバレないという仕組み。変なURLは、もちろんトロイの木馬というそういうもののようです。
まだ、復旧には時間かかりそう。
Friday, 31 August 2018
Thursday, 30 August 2018
というわけで沖縄
行きは遅い便しか取れなくてキャンセル待ちで一つ早くしてもらいました。JALは一時期それができなかったんだよな。システムの関係だったらしいです。
帰りは特に急がないので。ペンギンハイウェイ観たいかなと思ったが根性と時間が合いませんでした。
明日は学科のシステムのお守りをしているはずです。いったいぜんたいどうなっているのか〜
帰りは特に急がないので。ペンギンハイウェイ観たいかなと思ったが根性と時間が合いませんでした。
明日は学科のシステムのお守りをしているはずです。いったいぜんたいどうなっているのか〜
Wednesday, 29 August 2018
ダブルヘッダー
昨日は昼と夜と集まりました。楽しい時間をありがとうございました。
昼は飲まなかった (えらい)
新宿三井ビルのシズラーですが、お昼、予約取ってなくて失敗したかなと思いましたが、
特に問題なく、すぐ入れました
一応、平日だからな。いや、でも、そこそこ混んではいました。
シズラーはサラダバーのみと言うのが良いと思うのだが、ちょっと肉が足りないというのが罠かな。
3時ぐらいまでいて、一旦、実家に戻って、お休みしてから、今度は銀座に。
長崎料理で「茶碗蒸しと混ぜご飯」。茶碗蒸しがでかい。バケツプリンみたい。
皿うどん
が美味しかったです。懐かしい味。
その後は「七曲署」というバーに。国産酒しか置いてないバーですか。なるほど。刑事ものの小物がたくさんあって面白かったです。
手錠とかサングラスとか
銀座の綺麗なお姉さんたちも通りでたくさんみたな。東京少し景気良い感じ?
昼は飲まなかった (えらい)
新宿三井ビルのシズラーですが、お昼、予約取ってなくて失敗したかなと思いましたが、
特に問題なく、すぐ入れました
一応、平日だからな。いや、でも、そこそこ混んではいました。
シズラーはサラダバーのみと言うのが良いと思うのだが、ちょっと肉が足りないというのが罠かな。
3時ぐらいまでいて、一旦、実家に戻って、お休みしてから、今度は銀座に。
長崎料理で「茶碗蒸しと混ぜご飯」。茶碗蒸しがでかい。バケツプリンみたい。
皿うどん
が美味しかったです。懐かしい味。
その後は「七曲署」というバーに。国産酒しか置いてないバーですか。なるほど。刑事ものの小物がたくさんあって面白かったです。
手錠とかサングラスとか
銀座の綺麗なお姉さんたちも通りでたくさんみたな。東京少し景気良い感じ?
Tuesday, 28 August 2018
Turing Machine
Automaton の続きですね。automaton にstack(つまりリスト)を二つ足して。割と簡単に掛けたんですが、
プログラムの方法がわからない
アセンブラよりもひどいからなぁ。で、ググって、1が続いているのを反対側に倍にするってのを書いてみました。しかし、
Turing Machine のdebugって結構最低
なので、一ステップずつ実行するように書き直したわけですが、ようやっと動いたら
15 step / 5 min
おいおい。なんとかならんのと思ったんですが、1 step 実行用に挟んでいたProductをはずして tail call で書いたら
15 step は瞬時
になりました。ふーん。Agdaいろいろあるな。なんですが、
ここから、Universatl turing machineはかなり遠い
らしい。Turing は構成してみせたらしいんですが、ググっても見当たらないぞ。
たぶんテープ増やして、可変長の状態記述と可変長の状態レジスタを作るんじゃないかな。まぁ、構成して見せたところでどうなるものでもないんですが。
ちなみに、普通の計算機はメモリ有限なのでTMではテープなしでシミュレーションできます。
もう少し Universality が自明なプログラミング機械とかないのかな。
このスライドが結構面白かった。
http://tinyurl.com/yc9ob6to
プログラムの方法がわからない
アセンブラよりもひどいからなぁ。で、ググって、1が続いているのを反対側に倍にするってのを書いてみました。しかし、
Turing Machine のdebugって結構最低
なので、一ステップずつ実行するように書き直したわけですが、ようやっと動いたら
15 step / 5 min
おいおい。なんとかならんのと思ったんですが、1 step 実行用に挟んでいたProductをはずして tail call で書いたら
15 step は瞬時
になりました。ふーん。Agdaいろいろあるな。なんですが、
ここから、Universatl turing machineはかなり遠い
らしい。Turing は構成してみせたらしいんですが、ググっても見当たらないぞ。
たぶんテープ増やして、可変長の状態記述と可変長の状態レジスタを作るんじゃないかな。まぁ、構成して見せたところでどうなるものでもないんですが。
ちなみに、普通の計算機はメモリ有限なのでTMではテープなしでシミュレーションできます。
もう少し Universality が自明なプログラミング機械とかないのかな。
このスライドが結構面白かった。
http://tinyurl.com/yc9ob6to
Monday, 27 August 2018
iPhone update
兄妹喧嘩で投げられてしまって。ばっちり割れたのでWebからGenius Barに予約したら銀座12:30に。
早いなと思いながら兄妹喧嘩でぼろぼろになったスーツをクリーニングに出したら「ダブル洗いですね」あ、そうですか。そこで、まさかの
名前書き間違いで書き直し
ああーっと、というわけで、Genius Bar 到着は12:40でキャンセル再予約に。くそ〜 でも、割とすぐに見てもらえました。さっさと交換。一回目。
で、そばのほげ珈琲店で設定していくわけですが、
restore は完了したが、SIMが認識しない
え、プロファイル入れれば良いんだろなんですが、ぜんぜんだめ。
東京のWifi事情の悪さは加速しているので、あきらめて、Apple store へ。
結局、すったもんだで、交換になったんですが、そこで設定していくと、
iij mineo ではないですよ? いや、iij mio ですが
mineo と mio は違う? え、何言ってるの? というわけで、
iij mio に iij mineo の profile を入れていたのが原因だったらしい
しまった。まぁ、Genius のお兄ちゃんと二人ですったもんだしてこれなので、
人って馬鹿だよな
とうわけなんですが、mio と mineo はやめて。いや、mio で検索したはずなんだけどな〜
「ま、動いて良かった」いろいろすみません。
4/30までいるので、もう一度投げられるかどうかは5分5分だな。まぁ、あまり挑発しないように心がけます。
早いなと思いながら兄妹喧嘩でぼろぼろになったスーツをクリーニングに出したら「ダブル洗いですね」あ、そうですか。そこで、まさかの
名前書き間違いで書き直し
ああーっと、というわけで、Genius Bar 到着は12:40でキャンセル再予約に。くそ〜 でも、割とすぐに見てもらえました。さっさと交換。一回目。
で、そばのほげ珈琲店で設定していくわけですが、
restore は完了したが、SIMが認識しない
え、プロファイル入れれば良いんだろなんですが、ぜんぜんだめ。
東京のWifi事情の悪さは加速しているので、あきらめて、Apple store へ。
結局、すったもんだで、交換になったんですが、そこで設定していくと、
iij mineo ではないですよ? いや、iij mio ですが
mineo と mio は違う? え、何言ってるの? というわけで、
iij mio に iij mineo の profile を入れていたのが原因だったらしい
しまった。まぁ、Genius のお兄ちゃんと二人ですったもんだしてこれなので、
人って馬鹿だよな
とうわけなんですが、mio と mineo はやめて。いや、mio で検索したはずなんだけどな〜
「ま、動いて良かった」いろいろすみません。
4/30までいるので、もう一度投げられるかどうかは5分5分だな。まぁ、あまり挑発しないように心がけます。
Sunday, 26 August 2018
いつもの習志野
母の妹の入っている施設ですね。車で連れていってもらいました。この暑さだったので助かりました。
前回、訪問した時よりは、こちらを認識してくれたみたい。でも、急速に衰えたな。もう、あまり歩くこともないみたい。車椅子でした。
でも、それでも4人姉妹だから、会いに行くのが大切だと思います。たとえ、向こうがもうわからなくなってしまっても。
一つは、その方が介護してくれる人たちに報いることになると思う。一つは自己満足だろうな。成美おばさんにはいろいろお世話になったし。
顔を見せるとちょっと涙ぐんでました。少し言葉も出ました。「おかしくない」だったかな? うまく言葉がでないのがまどろっこしいのかも。おしゃべりな人だっただけに。
前回、訪問した時よりは、こちらを認識してくれたみたい。でも、急速に衰えたな。もう、あまり歩くこともないみたい。車椅子でした。
でも、それでも4人姉妹だから、会いに行くのが大切だと思います。たとえ、向こうがもうわからなくなってしまっても。
一つは、その方が介護してくれる人たちに報いることになると思う。一つは自己満足だろうな。成美おばさんにはいろいろお世話になったし。
顔を見せるとちょっと涙ぐんでました。少し言葉も出ました。「おかしくない」だったかな? うまく言葉がでないのがまどろっこしいのかも。おしゃべりな人だっただけに。
Saturday, 25 August 2018
オートマトンの続き
subset construction かなりはまっていて、木で明示的に状態を記録していく方法で、一応、書けたんですが
まったく動く気がせず
で、すべての状態の組合せに対して次の状態の組合せを生成する関数を作れば良いんじゃないか? と思いついていて、それで書き直したら朝飯前に終わりました。
状態の組合せって、状態の集合Qからtrue/falseへの写像だから、
Q → Bool
これでいいわけね。NFAは、
record NAutomaton ( Q : Set ) ( Σ : Set )
: Set where
field
nδ : Q → Σ → List Q
sid : Q → ℕ
nstart : Q
nend : Q → Bool
なので、生成するDFAの状態遷移は
(Q → Bool) → Σ → (Q → Bool)
こんな感じ。なので、
δconv : { Q : Set } { Σ : Set } { n : ℕ } → FiniteSet Q n →
( nδ : Q → Σ → List Q ) → (Q → Bool) → Σ → (Q → Bool)
を書けば良いというわけ。Q は有限だから ℕ に対応するというのを使って、
exists N ( λ r → list2sbst N (nδ r i) q )
なんか一行で書けるのか。
なんとなく実装よりに木とかリストとか使ってしまうけど、関数で書いていく方が Agda 向きならしい。
まだ、いろいろやることありますが、だいたいこの方向でいけそう。そろそろシラバス書かないとな。
regex からの変換も書き終わった。 あとは、
regex の拡張とバックトラック
ω automaton ( 停止しないオートマトン)
CTL (computation tree logic) を使ったモデル検査
characteristic function
push/down
2 stack automaton ( = turing machine)
turing machine の停止性
P と NP
ぐらいまでやる予定です。
まったく動く気がせず
で、すべての状態の組合せに対して次の状態の組合せを生成する関数を作れば良いんじゃないか? と思いついていて、それで書き直したら朝飯前に終わりました。
状態の組合せって、状態の集合Qからtrue/falseへの写像だから、
Q → Bool
これでいいわけね。NFAは、
record NAutomaton ( Q : Set ) ( Σ : Set )
: Set where
field
nδ : Q → Σ → List Q
sid : Q → ℕ
nstart : Q
nend : Q → Bool
なので、生成するDFAの状態遷移は
(Q → Bool) → Σ → (Q → Bool)
こんな感じ。なので、
δconv : { Q : Set } { Σ : Set } { n : ℕ } → FiniteSet Q n →
( nδ : Q → Σ → List Q ) → (Q → Bool) → Σ → (Q → Bool)
を書けば良いというわけ。Q は有限だから ℕ に対応するというのを使って、
exists N ( λ r → list2sbst N (nδ r i) q )
なんか一行で書けるのか。
なんとなく実装よりに木とかリストとか使ってしまうけど、関数で書いていく方が Agda 向きならしい。
まだ、いろいろやることありますが、だいたいこの方向でいけそう。そろそろシラバス書かないとな。
regex からの変換も書き終わった。 あとは、
regex の拡張とバックトラック
ω automaton ( 停止しないオートマトン)
CTL (computation tree logic) を使ったモデル検査
characteristic function
push/down
2 stack automaton ( = turing machine)
turing machine の停止性
P と NP
ぐらいまでやる予定です。
Friday, 24 August 2018
Thursday, 23 August 2018
洗濯
実家の洗濯は
乾燥機なしの洗濯機
まぁ、でも脱水まではやってくれるので。Ingress だと一日二回着替えたりするからな〜
ヘルパーさんも洗濯してくれるので、まぁ、特に問題なく。
二階への階段の途中に干されているので、二階から干すのが楽。部屋干しなのは良いですね。
外に出て干すだけでも暑いし。
乾燥機なしの洗濯機
まぁ、でも脱水まではやってくれるので。Ingress だと一日二回着替えたりするからな〜
ヘルパーさんも洗濯してくれるので、まぁ、特に問題なく。
二階への階段の途中に干されているので、二階から干すのが楽。部屋干しなのは良いですね。
外に出て干すだけでも暑いし。
Wednesday, 22 August 2018
21日の飲み会
米国帰りのうちの学科のOGとかが参加してくれたりして楽しかったです。飲みっぷりが変わってない...
今回はそこここで獺祭島耕作を見るなぁ。ピンチをチャンスに変える的なところが素晴らしい。
新橋 正味亭尾和 でしたが「料理がおまかせ」で、最後に「カレー食べます?」みたいな。そういう面倒くさくないの超素晴らしいです。
28日も飲み会する予定なので、可能な人は教えてくれれば invite します。場所まだ決めてないけど。
https://www.facebook.com/shomitei/
今回はそこここで獺祭島耕作を見るなぁ。ピンチをチャンスに変える的なところが素晴らしい。
新橋 正味亭尾和 でしたが「料理がおまかせ」で、最後に「カレー食べます?」みたいな。そういう面倒くさくないの超素晴らしいです。
28日も飲み会する予定なので、可能な人は教えてくれれば invite します。場所まだ決めてないけど。
https://www.facebook.com/shomitei/
Tuesday, 21 August 2018
未来のミライ
学生にも何人かミライちゃんがいたような。ちょっと涙と感動はもういいよって気分だし、ポスターの絵はあんまりな二匹目のドジョウ狙いだしで、あんまり気がすすまなかったんですが、
ジルバップ見れるぞ
みたいなレスをもらったので。いや別にバブルラジカセ興味ないし。
でも予想よりは面白かった。自分も妹一人ですが、年子なので、赤ん坊の頃はそんなに憶えてないですが、まぁ、あんなものでした。人よりは子供頃のことを憶えいる方です。
父のバイクの後ろに「捕まってろ」で乗せてもらったことがある。母は激怒していたらしいけど。何にも見えませんでしたが。
特に子供に思い入れないのは、子供の頃の記憶のせいもあるな。子供の頃が楽しいとかは後から作られた記憶でしょ?
箱根の道の途中の側溝で遊んだ記憶がある。何にもないけど、楽しかったことは憶えてるな。写真とかで強化された記憶とかもあると思う。
今の子供は、自分の子供の頃の動画とかがたくさんあるから、子供の頃のことを良く憶えているようになるのかな。
ジルバップ見れるぞ
みたいなレスをもらったので。いや別にバブルラジカセ興味ないし。
でも予想よりは面白かった。自分も妹一人ですが、年子なので、赤ん坊の頃はそんなに憶えてないですが、まぁ、あんなものでした。人よりは子供頃のことを憶えいる方です。
父のバイクの後ろに「捕まってろ」で乗せてもらったことがある。母は激怒していたらしいけど。何にも見えませんでしたが。
特に子供に思い入れないのは、子供の頃の記憶のせいもあるな。子供の頃が楽しいとかは後から作られた記憶でしょ?
箱根の道の途中の側溝で遊んだ記憶がある。何にもないけど、楽しかったことは憶えてるな。写真とかで強化された記憶とかもあると思う。
今の子供は、自分の子供の頃の動画とかがたくさんあるから、子供の頃のことを良く憶えているようになるのかな。
Monday, 20 August 2018
forth
sbc09 に付いていたので。stack base の言語で、PostScript の先祖です。Moore が作ったもの。Stack base ってのは Java のbyte codeも同じ。Javaの先祖でもあるな。
compiler 込みな言語かつ、自身の書き換えが可能な「最初の reflective な言語」です。実装もcompact。天文所とかでマイクロコンピュータでの望遠鏡制御とかに使われていたらしい。
1 1 + .
が「1と1を足して表示する」。日本語と同じってわけですね。1 1 で二つ1をstackにpushして、+ でstack top に2が入り、それを . で表示します。Java のbyte codeもこんな感じ。
:でプログラムに名前を付けて、それが辞書に登録されます。この辺はPostScriptがそのままパクった。
おそるべきことにアセンブラのソースコードそのものもforthとして記述できる。
CODE KEY ( --- c)
JSR 0
CLRA
STD ,--S
NEXT
END-CODE
とかが書いてあって、これをそのままforthのcross assembblerがバイナリに変更して、forth interpreterそのものを作るってわけ。
ところが、出力コードは
JMP [,Y++]
とかの塊なので、os9用にPICにするのは不可能。なので、前田さんが言ってたように level 2 で64k 確保して動かす方式を使ってみました。
sbc09 のIO routineって、address 0 からなのな。その辺を設定して S rec format の forth kernel をloadする感じ。
実際に実行してみると、ほとんどは stack のお手玉をやってる感じでくそ遅そう。JIT compiler でもあれば。もちろん、8bit CPUでは無理ですが。
x=0f9d y=8000 u=1d55 s=7bfc a=1c b=1b cc=80 dp=00 pc=155C: BD 04 0C JSR $040C
x=0f9d y=8000 u=1d55 s=7bfa a=1c b=1b cc=80 dp=00 pc=040C: EF A3 STU ,--Y
x=0f9d y=7ffe u=1d55 s=7bfa a=1c b=1b cc=80 dp=00 pc=040E: EE E1 LDU ,S++
x=0f9d y=7ffe u=155f s=7bfc a=1c b=1b cc=80 dp=00 pc=0410: 37 80 PULU PC
x=0f9d y=7ffe u=1561 s=7bfc a=1c b=1b cc=80 dp=00 pc=14D6: BD 04 0A JSR $040A
x=0f9d y=7ffe u=1561 s=7bfa a=1c b=1b cc=80 dp=00 pc=040A: 37 80 PULU PC
x=0f9d y=7ffe u=1563 s=7bfa a=1c b=1b cc=80 dp=00 pc=07D1: EC F4 LDD [,S]
x=0f9d y=7ffe u=1563 s=7bfa a=1d b=55 cc=80 dp=00 pc=07D3: ED E4 STD ,S
x=0f9d y=7ffe u=1563 s=7bfa a=1d b=55 cc=80 dp=00 pc=07D5: 37 80 PULU PC
x=0f9d y=7ffe u=1565 s=7bfa a=1d b=55 cc=80 dp=00 pc=0523: EC E1 LDD ,S++
x=0f9d y=7ffe u=1565 s=7bfc a=1d b=55 cc=80 dp=00 pc=0525: ED A3 STD ,--Y
x=0f9d y=7ffc u=1565 s=7bfc a=1d b=55 cc=80 dp=00 pc=0527: 37 80 PULU PC
x=0f9d y=7ffc u=1567 s=7bfc a=1d b=55 cc=80 dp=00 pc=054E: 1F 40 TFR S,D
x=0f9d y=7ffc u=1567 s=7bfc a=7b b=fc cc=80 dp=00 pc=0550: ED E3 STD ,--S
入力行の処理の辺りで手間取りましたが、久しぶりにS record入力とかを書いたのが面白かった。
forthの実装は、もう少し調べてみるかな。
OS9:sbc09 ../../../examples_forth/kernel09
Welcome to Forth
sbc09 ../../../examples_forth/kernel09
Error -13 sbc09
Welcome to Forth
: OUTMATH \ Output a mathematical calculation
." We will now calculate: (2 + 3) * 5" CR
2 3 + 5 *
." This equals: " . CR ;
OK
OUTMATH
We will now calculate: (2 + 3) * 5
This equals: 25
OK
2 3 + 5 *
OK
.
25 OK
compiler 込みな言語かつ、自身の書き換えが可能な「最初の reflective な言語」です。実装もcompact。天文所とかでマイクロコンピュータでの望遠鏡制御とかに使われていたらしい。
1 1 + .
が「1と1を足して表示する」。日本語と同じってわけですね。1 1 で二つ1をstackにpushして、+ でstack top に2が入り、それを . で表示します。Java のbyte codeもこんな感じ。
:でプログラムに名前を付けて、それが辞書に登録されます。この辺はPostScriptがそのままパクった。
おそるべきことにアセンブラのソースコードそのものもforthとして記述できる。
CODE KEY ( --- c)
JSR 0
CLRA
STD ,--S
NEXT
END-CODE
とかが書いてあって、これをそのままforthのcross assembblerがバイナリに変更して、forth interpreterそのものを作るってわけ。
ところが、出力コードは
JMP [,Y++]
とかの塊なので、os9用にPICにするのは不可能。なので、前田さんが言ってたように level 2 で64k 確保して動かす方式を使ってみました。
sbc09 のIO routineって、address 0 からなのな。その辺を設定して S rec format の forth kernel をloadする感じ。
実際に実行してみると、ほとんどは stack のお手玉をやってる感じでくそ遅そう。JIT compiler でもあれば。もちろん、8bit CPUでは無理ですが。
x=0f9d y=8000 u=1d55 s=7bfc a=1c b=1b cc=80 dp=00 pc=155C: BD 04 0C JSR $040C
x=0f9d y=8000 u=1d55 s=7bfa a=1c b=1b cc=80 dp=00 pc=040C: EF A3 STU ,--Y
x=0f9d y=7ffe u=1d55 s=7bfa a=1c b=1b cc=80 dp=00 pc=040E: EE E1 LDU ,S++
x=0f9d y=7ffe u=155f s=7bfc a=1c b=1b cc=80 dp=00 pc=0410: 37 80 PULU PC
x=0f9d y=7ffe u=1561 s=7bfc a=1c b=1b cc=80 dp=00 pc=14D6: BD 04 0A JSR $040A
x=0f9d y=7ffe u=1561 s=7bfa a=1c b=1b cc=80 dp=00 pc=040A: 37 80 PULU PC
x=0f9d y=7ffe u=1563 s=7bfa a=1c b=1b cc=80 dp=00 pc=07D1: EC F4 LDD [,S]
x=0f9d y=7ffe u=1563 s=7bfa a=1d b=55 cc=80 dp=00 pc=07D3: ED E4 STD ,S
x=0f9d y=7ffe u=1563 s=7bfa a=1d b=55 cc=80 dp=00 pc=07D5: 37 80 PULU PC
x=0f9d y=7ffe u=1565 s=7bfa a=1d b=55 cc=80 dp=00 pc=0523: EC E1 LDD ,S++
x=0f9d y=7ffe u=1565 s=7bfc a=1d b=55 cc=80 dp=00 pc=0525: ED A3 STD ,--Y
x=0f9d y=7ffc u=1565 s=7bfc a=1d b=55 cc=80 dp=00 pc=0527: 37 80 PULU PC
x=0f9d y=7ffc u=1567 s=7bfc a=1d b=55 cc=80 dp=00 pc=054E: 1F 40 TFR S,D
x=0f9d y=7ffc u=1567 s=7bfc a=7b b=fc cc=80 dp=00 pc=0550: ED E3 STD ,--S
入力行の処理の辺りで手間取りましたが、久しぶりにS record入力とかを書いたのが面白かった。
forthの実装は、もう少し調べてみるかな。
OS9:sbc09 ../../../examples_forth/kernel09
Welcome to Forth
sbc09 ../../../examples_forth/kernel09
Error -13 sbc09
Welcome to Forth
: OUTMATH \ Output a mathematical calculation
." We will now calculate: (2 + 3) * 5" CR
2 3 + 5 *
." This equals: " . CR ;
OK
OUTMATH
We will now calculate: (2 + 3) * 5
This equals: 25
OK
2 3 + 5 *
OK
.
25 OK
Saturday, 18 August 2018
お腹の調子
実家だとヘルパーさんがご飯作ってくれるんですが、これが微妙に危ない。僕はほか弁でも「他の人は全然平気なのに自分だけお腹壊す」人なので...
特に生野菜危ないんだよな。湯通しして欲しいとか思ったりしますが。キャベツの千切りとか危ないと思ったんだよな。というわけなので金曜日はお腹の調子が悪くて寒気があったので、少し熱があったかも。こういう時には、
お風呂が意外に良い
そうなのか? まぁ、風呂入ってしばらく寝てたらだいぶ回復しました。お腹の調子が悪い時には、白湯とかで水分取って寝てるしかないんだよな。
起きたらヘルパーさんが帰ってしまっていて。夜はなんか飲みに来いと言われているのだが、母に「ご飯食べた? 」と聞くと「食べにいく? 」。おっと、ヘルパーさんには夜でけかますと言ったんだけどな。
でも、なんかお汁出てるし、なんか食べたんだろうなとは思ったんですが、仕方ないので一緒に近所の中華料理屋へ。どうせお腹の調子は悪いので、そんなに食べない。が
ビールは頼みました
で、それから飲みに出たわけですが、帰る頃にはだいぶ良くなっていました。
やっぱりアルコール消毒偉大だ
特に生野菜危ないんだよな。湯通しして欲しいとか思ったりしますが。キャベツの千切りとか危ないと思ったんだよな。というわけなので金曜日はお腹の調子が悪くて寒気があったので、少し熱があったかも。こういう時には、
お風呂が意外に良い
そうなのか? まぁ、風呂入ってしばらく寝てたらだいぶ回復しました。お腹の調子が悪い時には、白湯とかで水分取って寝てるしかないんだよな。
起きたらヘルパーさんが帰ってしまっていて。夜はなんか飲みに来いと言われているのだが、母に「ご飯食べた? 」と聞くと「食べにいく? 」。おっと、ヘルパーさんには夜でけかますと言ったんだけどな。
でも、なんかお汁出てるし、なんか食べたんだろうなとは思ったんですが、仕方ないので一緒に近所の中華料理屋へ。どうせお腹の調子は悪いので、そんなに食べない。が
ビールは頼みました
で、それから飲みに出たわけですが、帰る頃にはだいぶ良くなっていました。
やっぱりアルコール消毒偉大だ
Thursday, 16 August 2018
東京のIngress
Wednesday, 15 August 2018
Automaton
後期の授業用に、Automaton を Agda で書いてたりするんですが... まぁ、割と簡単に書けるんだけど、
簡単なものはな
先に進んでいくと、どうしても複雑になってしまって。
DFA
NFA
Regular Expression
εNFA
subset construction
で一通りなはずです。これだと、Agda でやるからわかりやすいってわけでもないな。まぁ、だいたいそんなものなんだけど。
εNFA は複数の状態を何もなくても渡り歩くε遷移ってのがあるんだけど、正規表現からAutomatonに変換するのにad-hocに使うものなのね。
前に書いた時には、もちろんε遷移とか使わないで書くのでそれが当然だと思っていたんですが、そうすると、かなり複雑になる。と言っても、倍は違わないんだが。
ε遷移は遷移する状態で閉包を作ってしまえば良くて、それは状態の集合なので、subset construction にはほとんど影響がないらしいです。
ただ、思ったより複雑なので、Regular Expressionが生成する文字列を変換したεNFAが受け付ける証明とかは結構でかそうだな。
http://www.cr.ie.u-ryukyu.ac.jp/hg/Members/kono/Proof/automaton/
簡単なものはな
先に進んでいくと、どうしても複雑になってしまって。
DFA
NFA
Regular Expression
εNFA
subset construction
で一通りなはずです。これだと、Agda でやるからわかりやすいってわけでもないな。まぁ、だいたいそんなものなんだけど。
εNFA は複数の状態を何もなくても渡り歩くε遷移ってのがあるんだけど、正規表現からAutomatonに変換するのにad-hocに使うものなのね。
前に書いた時には、もちろんε遷移とか使わないで書くのでそれが当然だと思っていたんですが、そうすると、かなり複雑になる。と言っても、倍は違わないんだが。
ε遷移は遷移する状態で閉包を作ってしまえば良くて、それは状態の集合なので、subset construction にはほとんど影響がないらしいです。
ただ、思ったより複雑なので、Regular Expressionが生成する文字列を変換したεNFAが受け付ける証明とかは結構でかそうだな。
http://www.cr.ie.u-ryukyu.ac.jp/hg/Members/kono/Proof/automaton/
Tuesday, 14 August 2018
人のネットワーク上の知識
人のネットワークの形により、全体の知識の共有の様子が変わると言う話。
結合度の高い集団が頑固になる
集団の中で何は多数かを見間違えることがある
とか面白いです。田舎に新参者が行った時とか、廻りの言ってることや多数意見が間違って見えるとか、そんな
体験がある人はなんとなくわかると思うけど。
こういうのを利用している人たちもいるのだろうし、なんとなく知っていて「みんながやってるから」みたいなのを信用してない人もいるのでしょうね。
実際の状況はもっと複雑でしょうけど。
https://ncase.me/crowds/ja.html
結合度の高い集団が頑固になる
集団の中で何は多数かを見間違えることがある
とか面白いです。田舎に新参者が行った時とか、廻りの言ってることや多数意見が間違って見えるとか、そんな
体験がある人はなんとなくわかると思うけど。
こういうのを利用している人たちもいるのだろうし、なんとなく知っていて「みんながやってるから」みたいなのを信用してない人もいるのでしょうね。
実際の状況はもっと複雑でしょうけど。
https://ncase.me/crowds/ja.html
Monday, 13 August 2018
QNAP disk 3
なんか、6月辺りからぴーぴー鳴くようになって。HDD側を入れ替えようとしたん3ですが....
QNAPはUSB外付けは2TBまでしか認識しない
なんだそれ。まだ、そんな問題あるのか。おかげで、QNAPに閉じて中身を吸い出せない。仕方ないので、
iMac側に 4TB HDDをつないで、そちらにコピー
QNAP側のDisk 3を入れ替えて初期化
iMac側から書き戻し
という手順で。で、発見したんですが、
iMac 側は inode が大きくなっらしく、inode をほとんど消費しない
なので、書き戻しは倍くらい速い感じでした。QNAP外付けUSBに関してはググって格闘して敗れ去っている人がいるのは見つけました。
ところが、
また、Disk 3 が外れてる
だって,コピーしたばっかりでしょ? というわけなので、QNAP側の筐体の不具合の可能性が高いかも。困ったものだな。
もっとも、こんなこともあろうかと、QNAPは別筐体を手に入れてコピーしたわけですけどね。2016からなので、ちょっと故障は早いか。まぁ、こんなものか。
詳細は沖縄に戻ってからかな。少し戻るのは遅くなりそうです。
QNAPはUSB外付けは2TBまでしか認識しない
なんだそれ。まだ、そんな問題あるのか。おかげで、QNAPに閉じて中身を吸い出せない。仕方ないので、
iMac側に 4TB HDDをつないで、そちらにコピー
QNAP側のDisk 3を入れ替えて初期化
iMac側から書き戻し
という手順で。で、発見したんですが、
iMac 側は inode が大きくなっらしく、inode をほとんど消費しない
なので、書き戻しは倍くらい速い感じでした。QNAP外付けUSBに関してはググって格闘して敗れ去っている人がいるのは見つけました。
ところが、
また、Disk 3 が外れてる
だって,コピーしたばっかりでしょ? というわけなので、QNAP側の筐体の不具合の可能性が高いかも。困ったものだな。
もっとも、こんなこともあろうかと、QNAPは別筐体を手に入れてコピーしたわけですけどね。2016からなので、ちょっと故障は早いか。まぁ、こんなものか。
詳細は沖縄に戻ってからかな。少し戻るのは遅くなりそうです。
Sunday, 12 August 2018
カメラを止めるな
ロサ会館で観てきました。まさかの舞台挨拶があってうれしかったです。うわさを上回る面白さでした。
ゾンビ映画嫌いなんだけど
高校時代に運動会の記録映画を撮ったのを思い出す感じ。旬のうちに観に行くものでしょう。もう一回観に行かないとな。
しばらく東京ですがおとなしくしているはずです。それほど暑くない感じ。
ゾンビ映画嫌いなんだけど
高校時代に運動会の記録映画を撮ったのを思い出す感じ。旬のうちに観に行くものでしょう。もう一回観に行かないとな。
しばらく東京ですがおとなしくしているはずです。それほど暑くない感じ。
Thursday, 9 August 2018
ガンプラ
研究室のM2がガンプラおたく(といっても彼はいろんなもののおたくなんだけど)なので、
デンドロビウム作ろうぜ
という話をしていたんですが、今日は買いに行ってみました。が、
普天間の島模型
浦添のYAMADA電気
漫画倉庫
と探したが見つからず。ここはAmazonしかないかな〜
東京から持って帰れる大きさではないんだよな〜
デンドロビウム作ろうぜ
という話をしていたんですが、今日は買いに行ってみました。が、
普天間の島模型
浦添のYAMADA電気
漫画倉庫
と探したが見つからず。ここはAmazonしかないかな〜
東京から持って帰れる大きさではないんだよな〜
Wednesday, 8 August 2018
Position Independent Code
技術的にはまだ生きていて、macOS はPICが採用されてます。PICの方が10%-20%遅いとか言われた時期もあるのだが、どうなのかな。macOSだと、
関数の先頭でPIC用のアドレスをPCから取得するコード(x86はPC offsetできない)
リンクするshared libraryをlinkするためのstab
みたいなのが入っていて結構重い印象。64bit時代なんだから、もっとましな技術ないのかな。Linuxの絶対番地なリンクもクソではあるんだが。
MC6809とOS9は同時に開発されたのでPIC関係の連携は素晴らしい。
1byte addressなDP(direct page)がDP registerで移動可能
定数はPC相対で取れる
大域変数はU registerで要求した分用意される(DPと同じ)
となっているので、
STA <$20
みたいなコードがそのままでPICになります。なので、
LDB $FF80
LDX #$FF09
みたいな絶対アドレス参照なものは、
LDB <$80
LEAX 9,U
とかで置き換えれば良いだけ。むしろコードは小さくなるので速度的なペナルティもない。
つまり、MC6809でPICでないのは「MC6800/8080からの移植でさぼっている」だけってことね。GAME09もbuffer関係の数ヶ所だった。
buffer end の一つあとみたいなのが入っていたので、それを考えるのがめんどくさかったのだろうな。
CMPX #buffer-1
みたいなコードだと CMPX Y とかないので面倒。いやだから、
LEAX buffer-1,U
STX <buff_1
とかしておけば、
CMPX <buf_1
とできる。でも、あの頃はメモリの1 byteは血の一滴だったからな。DP領域256byteしかないし。その辺を嫌がったのかも。
UをUser stackに使うとかするからいけなくて、Uを大域変数用に使えば楽勝だったはずです。(が、LISP09は、それだとレジスタが足りなくなるのかも)
と言いながら、os9 自体のoverheadが結構大きくて、8/16bitな real-time OSでは遅い方らしいです。
関数の先頭でPIC用のアドレスをPCから取得するコード(x86はPC offsetできない)
リンクするshared libraryをlinkするためのstab
みたいなのが入っていて結構重い印象。64bit時代なんだから、もっとましな技術ないのかな。Linuxの絶対番地なリンクもクソではあるんだが。
MC6809とOS9は同時に開発されたのでPIC関係の連携は素晴らしい。
1byte addressなDP(direct page)がDP registerで移動可能
定数はPC相対で取れる
大域変数はU registerで要求した分用意される(DPと同じ)
となっているので、
STA <$20
みたいなコードがそのままでPICになります。なので、
LDB $FF80
LDX #$FF09
みたいな絶対アドレス参照なものは、
LDB <$80
LEAX 9,U
とかで置き換えれば良いだけ。むしろコードは小さくなるので速度的なペナルティもない。
つまり、MC6809でPICでないのは「MC6800/8080からの移植でさぼっている」だけってことね。GAME09もbuffer関係の数ヶ所だった。
buffer end の一つあとみたいなのが入っていたので、それを考えるのがめんどくさかったのだろうな。
CMPX #buffer-1
みたいなコードだと CMPX Y とかないので面倒。いやだから、
LEAX buffer-1,U
STX <buff_1
とかしておけば、
CMPX <buf_1
とできる。でも、あの頃はメモリの1 byteは血の一滴だったからな。DP領域256byteしかないし。その辺を嫌がったのかも。
UをUser stackに使うとかするからいけなくて、Uを大域変数用に使えば楽勝だったはずです。(が、LISP09は、それだとレジスタが足りなくなるのかも)
と言いながら、os9 自体のoverheadが結構大きくて、8/16bitな real-time OSでは遅い方らしいです。
Tuesday, 7 August 2018
GAME09
発掘してきた GAME09 はだいたい動きました。そのまま動かすのは簡単なんだけど、
os9上で動かすでしょ?
なのだが、relocatable でないところがある。input line buffer とか stack / user stack の位置とか。
disassemblerがROLをRORと出したり、jump tableの計算を間違えてたりとか、細かい問題があって少し時間がかかりました。
GAME09はVTLの焼き直しなわけですが、
https://www.mztn.org/rvtl/rvtl.html
実行中の行番号が仮想レジスタ中にある
そもそも、A-Zの一文字の変数がメモリアドレスに決め打ち、つまり、26個のレジスタがあるような感じ。
disassemble sourceなので変数マップが良くわからなくて,その辺で少し苦労したようです。
あとはソースのload/save機構を付ければ良いだけだ。まぁ、でもやるとしてもゆっくりで。
% src/v09c -rom src/os9/os9v2.rom -v src/os9/level2
NitrOS-9/6809 Level 2 V1.0.1
Unknown Machine
(C) 2014 The NitrOS-9 Project
http://www.nitros9.org
Shell
OS9:/v0/game09
*READY
:1000 "ADDRESS=" A=? A=A,A+$40
:1010 ??=A C=0,7 " " ?$=A:C) @=C+1
:1020 / @=A+8
:1030 #=1
:
*READY
:#=1
ADDRESS=:$800
0800 00 00 00 00 00 00 00 00
0808 00 00 00 00 00 00 00 00
0810 00 00 00 00 00 00 00 00
0818 00 00 00 00 00 00 00 00
0820 00 00 00 00 00 00 00 00
0828 00 00 00 00 00 00 00 00
0830 00 00 00 00 00 00 00 00
0838 00 00 00 00 00 00 00 00
0840 00 00 00 00 00 00 00 00
ADDRESS=:$600
0600 0A 25 03 C1 10 39 1C FE
0608 39 17 FD C1 C6 3A 17 00
0610 69 9E 9C 0D 8C 26 0F DC
0618 88 10 2B FA 35 17 FE 59
0620 C6 20 E7 1F 8D 54 8D 55
0628 C1 08 27 38 C1 0D 25 F6
0630 27 12 C1 18 27 D3 E7 80
0638 9C A2 26 EA 30 1F C6 08
0640 8D 38 20 E2 0D 8C 26 0F
ADDRESS=:
?6 1000 "ADDRESS=" A=? A=A,A+$40
*READY
:\SY
OS9:
os9上で動かすでしょ?
なのだが、relocatable でないところがある。input line buffer とか stack / user stack の位置とか。
disassemblerがROLをRORと出したり、jump tableの計算を間違えてたりとか、細かい問題があって少し時間がかかりました。
GAME09はVTLの焼き直しなわけですが、
https://www.mztn.org/rvtl/rvtl.html
実行中の行番号が仮想レジスタ中にある
そもそも、A-Zの一文字の変数がメモリアドレスに決め打ち、つまり、26個のレジスタがあるような感じ。
disassemble sourceなので変数マップが良くわからなくて,その辺で少し苦労したようです。
あとはソースのload/save機構を付ければ良いだけだ。まぁ、でもやるとしてもゆっくりで。
% src/v09c -rom src/os9/os9v2.rom -v src/os9/level2
NitrOS-9/6809 Level 2 V1.0.1
Unknown Machine
(C) 2014 The NitrOS-9 Project
http://www.nitros9.org
Shell
OS9:/v0/game09
*READY
:1000 "ADDRESS=" A=? A=A,A+$40
:1010 ??=A C=0,7 " " ?$=A:C) @=C+1
:1020 / @=A+8
:1030 #=1
:
*READY
:#=1
ADDRESS=:$800
0800 00 00 00 00 00 00 00 00
0808 00 00 00 00 00 00 00 00
0810 00 00 00 00 00 00 00 00
0818 00 00 00 00 00 00 00 00
0820 00 00 00 00 00 00 00 00
0828 00 00 00 00 00 00 00 00
0830 00 00 00 00 00 00 00 00
0838 00 00 00 00 00 00 00 00
0840 00 00 00 00 00 00 00 00
ADDRESS=:$600
0600 0A 25 03 C1 10 39 1C FE
0608 39 17 FD C1 C6 3A 17 00
0610 69 9E 9C 0D 8C 26 0F DC
0618 88 10 2B FA 35 17 FE 59
0620 C6 20 E7 1F 8D 54 8D 55
0628 C1 08 27 38 C1 0D 25 F6
0630 27 12 C1 18 27 D3 E7 80
0638 9C A2 26 EA 30 1F C6 08
0640 8D 38 20 E2 0D 8C 26 0F
ADDRESS=:
?6 1000 "ADDRESS=" A=? A=A,A+$40
*READY
:\SY
OS9:
Sunday, 5 August 2018
GAME09
といわけなので、発掘したGAME09のbinaryをdisasmして、os9 のmoduleに。
と思ったら、若干、relocatable でないところがあるのか。そういえば、そんなようなことがあったような。てーげーに直して...
http://www.nitros9.org
Shell
OS9:/v0/game09
*READY
:10 "test"
prompt まではでたが、ちゃんとは動かないな。
ちなみに、GAMEを動かしたいだけなら、
https://www.mztn.org/rvtl/rvtl32.html
ってのがあるようですね。
と思ったら、若干、relocatable でないところがあるのか。そういえば、そんなようなことがあったような。てーげーに直して...
http://www.nitros9.org
Shell
OS9:/v0/game09
*READY
:10 "test"
prompt まではでたが、ちゃんとは動かないな。
ちなみに、GAMEを動かしたいだけなら、
https://www.mztn.org/rvtl/rvtl32.html
ってのがあるようですね。
Saturday, 4 August 2018
発掘できたもの
Flex9 は全滅だったんですが、
DOSを使えるようになる前にTrack/Sectorをひかえて使ってたやつ
FM8のOS9をコピったやつ
は読めました。Microware OS9のoriginalは読めず。
でも、結構変で、256byteのうち半分は重複。しかし、25sector目だけは重複しないと言う妙な読み方に。Perlで適当に治しましたが。
で、
当時のROM image (GAME09と自前のドライバ群、Ralph09 monitor)
GAMEで書いたassembler/disassembler
GAMEソース形式の拡張部分のasmソース
Flex09のbootとdriver
細かいGAME09のutility
FM8なOS9 lv1のsystem disk
辺りが取れたみたい。
Flex09のが9読めればROM imageのソースとかAssist09のソースが手に入るのだが、まぁ、仕方ないかな。
これで当時の環境をOS9上に再現するとかできるはずだけど... ま、あまり意味はないけど。
DOSを使えるようになる前にTrack/Sectorをひかえて使ってたやつ
FM8のOS9をコピったやつ
は読めました。Microware OS9のoriginalは読めず。
でも、結構変で、256byteのうち半分は重複。しかし、25sector目だけは重複しないと言う妙な読み方に。Perlで適当に治しましたが。
で、
当時のROM image (GAME09と自前のドライバ群、Ralph09 monitor)
GAMEで書いたassembler/disassembler
GAMEソース形式の拡張部分のasmソース
Flex09のbootとdriver
細かいGAME09のutility
FM8なOS9 lv1のsystem disk
辺りが取れたみたい。
Flex09のが9読めればROM imageのソースとかAssist09のソースが手に入るのだが、まぁ、仕方ないかな。
これで当時の環境をOS9上に再現するとかできるはずだけど... ま、あまり意味はないけど。
Friday, 3 August 2018
floppy 読めた
なんのことはなく、
8inch FDのdrive 2を使ったらdski$で読めました
どうもdrive 1ではだめらしい。壊してしまったかも。
dski$は片面だと3引数で、sector は1からで、cylinderは0かららしいです。
転送するのに一枚40分みたい。9600 baudでhexdumpだからな〜
8inch FDのdrive 2を使ったらdski$で読めました
どうもdrive 1ではだめらしい。壊してしまったかも。
dski$は片面だと3引数で、sector は1からで、cylinderは0かららしいです。
転送するのに一枚40分みたい。9600 baudでhexdumpだからな〜
Wednesday, 1 August 2018
N88 Basic 続き
結論的にいうと敗れ去りました。
Keyspan と特製ケーブルでN88 Basicに繋げて、
N88側では、
run "menu" からメモリスイッチで232Cを9600に設定
load "com:n81ns"
macOS 側では
nkf -c diskbios.bas| jerm -b 9600 -f none /dev/cu.KeySerial1
で、以下のプログラムをloadして実行。で、8inch floppyにアクセスして、field に読み込むまではできました。
が、値はすべてゼロ。どうも、1Sを読む方法はないみたいだな。FDC叩けばいくかも知れんが、そうなると結構めんどうな。
いや、これでも十分面倒だったし〜 (最後の999は、loadをfailさせて終了させるため)
10 '
20 ' call disk bois
30 clear ,&H7D00
40 def seg=&H7D00
50 diskbios=0
55 max=&h0
60 '
70 for adr=max to max+&h4a
80 read byte : poke adr,byte
90 next adr
100'
110'
120'
125 open "test.dat" as #1
130 field #1, 255 as d$,1 as e$
140 '; call $buf,length,mode,selen+cyl,head+sec
150 dv%=2
160 cl%=0
170 h%=0
180 s%=0
190 ax%=&H3610+dv% : ' mode
200 bx%=128 : ' length
210 cx%=0*256+cl%
220 dx%=h%*256+s%
230 call diskbios(dx%,cx%,bx%,ax%,d$)
240 print "return=",hex$(ax%)
245 ot$=""
250 for i=1 to len(d$)
260 ot$=ot$+hex$(asc(mid$(d$,i,1)))+" "
270 if (i mod 16=0) then print ot$ : ot$ = ""
290 next i
295 print ot$
300'
310 data &H8B,&H77,&H12 :' mov si, [bx+18]
320 data &H8E,&HC6 :' mov es, si
330 data &H8B,&H77,&H10 :' mov si, [bx+16]
340 data &H26,&H8B,&H14 :' mov dx, [es:si] ; head + sector
350 data &H8B,&H77,&H0E :' mov si, [bx+14]
360 data &H8E,&HC6 :' mov es, si
370 data &H8B,&H77,&H0C :' mov si, [bx+12]
380 data &H26,&H8B,&H0C :' mov cx, [es:si] ; sector len + cynlinder
390 data &H8B,&H77,&H06 :' mov si, [bx+6] ; ax
400 data &H8E,&HC6 :' mov es, si
410 data &H8B,&H77,&H04 :' mov si, [bx+4]
420 data &H26,&H8B,&H04 :' mov ax, [es:si] ; mode
430 data &H56 :' push si
440 data &H06 :' push es
450 data &H8B,&H77,&H02 :' mov si, [bx+2]
460 data &H8E,&HC6 :' mov es, si
470 data &H8B,&H37 :' mov si, [bx]
480 data &H26,&H8B,&H2C :' mov bp, [es:si] ; pointer to strincg descriptor
490 data &H8B,&H6E,&H02 :' mov bp, [bp+2] ; string offset
500 data &H8B,&H77,&H0A :' mov si, [bx+10] ; bx
510 data &H8E,&HC6 :' mov es, si
520 data &H8B,&H77,&H08 :' mov si, [bx+8]
530 data &H26,&H8B,&H1C :' mov bx, [es:si] ; length
540 data &HBE,&H60,&H00 :' mov si, 60H ; defseg &60H
550 data &H8E,&HC6 :' mov es, si
560 data &HCD,&H1B :' int 1bh
570 data &H25,&HFF,&H00 :' and ax, 0FFH
580 data &H07 :' pop es
590 data &H5E :' pop si
600 data &H26,&H89,&H04 :' mov [es:si],ax ; result
610 data &HCF :' iret
999
http://island.geocities.jp/cklouch/column/pc98bas/bios/disk.htm
Keyspan と特製ケーブルでN88 Basicに繋げて、
N88側では、
run "menu" からメモリスイッチで232Cを9600に設定
load "com:n81ns"
macOS 側では
nkf -c diskbios.bas| jerm -b 9600 -f none /dev/cu.KeySerial1
で、以下のプログラムをloadして実行。で、8inch floppyにアクセスして、field に読み込むまではできました。
が、値はすべてゼロ。どうも、1Sを読む方法はないみたいだな。FDC叩けばいくかも知れんが、そうなると結構めんどうな。
いや、これでも十分面倒だったし〜 (最後の999は、loadをfailさせて終了させるため)
10 '
20 ' call disk bois
30 clear ,&H7D00
40 def seg=&H7D00
50 diskbios=0
55 max=&h0
60 '
70 for adr=max to max+&h4a
80 read byte : poke adr,byte
90 next adr
100'
110'
120'
125 open "test.dat" as #1
130 field #1, 255 as d$,1 as e$
140 '; call $buf,length,mode,selen+cyl,head+sec
150 dv%=2
160 cl%=0
170 h%=0
180 s%=0
190 ax%=&H3610+dv% : ' mode
200 bx%=128 : ' length
210 cx%=0*256+cl%
220 dx%=h%*256+s%
230 call diskbios(dx%,cx%,bx%,ax%,d$)
240 print "return=",hex$(ax%)
245 ot$=""
250 for i=1 to len(d$)
260 ot$=ot$+hex$(asc(mid$(d$,i,1)))+" "
270 if (i mod 16=0) then print ot$ : ot$ = ""
290 next i
295 print ot$
300'
310 data &H8B,&H77,&H12 :' mov si, [bx+18]
320 data &H8E,&HC6 :' mov es, si
330 data &H8B,&H77,&H10 :' mov si, [bx+16]
340 data &H26,&H8B,&H14 :' mov dx, [es:si] ; head + sector
350 data &H8B,&H77,&H0E :' mov si, [bx+14]
360 data &H8E,&HC6 :' mov es, si
370 data &H8B,&H77,&H0C :' mov si, [bx+12]
380 data &H26,&H8B,&H0C :' mov cx, [es:si] ; sector len + cynlinder
390 data &H8B,&H77,&H06 :' mov si, [bx+6] ; ax
400 data &H8E,&HC6 :' mov es, si
410 data &H8B,&H77,&H04 :' mov si, [bx+4]
420 data &H26,&H8B,&H04 :' mov ax, [es:si] ; mode
430 data &H56 :' push si
440 data &H06 :' push es
450 data &H8B,&H77,&H02 :' mov si, [bx+2]
460 data &H8E,&HC6 :' mov es, si
470 data &H8B,&H37 :' mov si, [bx]
480 data &H26,&H8B,&H2C :' mov bp, [es:si] ; pointer to strincg descriptor
490 data &H8B,&H6E,&H02 :' mov bp, [bp+2] ; string offset
500 data &H8B,&H77,&H0A :' mov si, [bx+10] ; bx
510 data &H8E,&HC6 :' mov es, si
520 data &H8B,&H77,&H08 :' mov si, [bx+8]
530 data &H26,&H8B,&H1C :' mov bx, [es:si] ; length
540 data &HBE,&H60,&H00 :' mov si, 60H ; defseg &60H
550 data &H8E,&HC6 :' mov es, si
560 data &HCD,&H1B :' int 1bh
570 data &H25,&HFF,&H00 :' and ax, 0FFH
580 data &H07 :' pop es
590 data &H5E :' pop si
600 data &H26,&H89,&H04 :' mov [es:si],ax ; result
610 data &HCF :' iret
999
http://island.geocities.jp/cklouch/column/pc98bas/bios/disk.htm
Subscribe to:
Posts (Atom)