Friday 31 August 2018

学科のWebがやられました

7月末に WordPress のtop pageをrenewal した時に、どうもダメなテーマを入れてしまったのではないかと。学生は経験浅いから攻撃される前の数日に roll back とかするわけですが、だいたい、やられたのと実際の稼働には時間差があるものなので無駄ですね。適当に直しただけでは、元に戻されてしまうというオマケ付き。

東京にいる間は手だししにくかったんですが、戻ってきたので一通りみました。theme のcheckerで2個ぐらい引っかかっていて。vuls でも PHP 関係の脆弱性が。PHP/WordPress 辺りはサボるとテキメンだからなぁ。

plugin なので組織的に書き換えられてしまう。root kit の検出はできなかったので root までは突破されてないようですが。この規模の侵入は珍しい。うちで良くやられてたのは学生の放置していたサーバに入られて、DDoSとかだったんですけどね。

refererを見ていて「googleから検索した時だけ変なURLを見せる」というもので、普通にURLからアクセスするだけではバレないという仕組み。変なURLは、もちろんトロイの木馬というそういうもののようです。

まだ、復旧には時間かかりそう。

Thursday 30 August 2018

というわけで沖縄

行きは遅い便しか取れなくてキャンセル待ちで一つ早くしてもらいました。JALは一時期それができなかったんだよな。システムの関係だったらしいです。

帰りは特に急がないので。ペンギンハイウェイ観たいかなと思ったが根性と時間が合いませんでした。

明日は学科のシステムのお守りをしているはずです。いったいぜんたいどうなっているのか〜

Wednesday 29 August 2018

ダブルヘッダー

昨日は昼と夜と集まりました。楽しい時間をありがとうございました。

  昼は飲まなかった (えらい)

新宿三井ビルのシズラーですが、お昼、予約取ってなくて失敗したかなと思いましたが、

  特に問題なく、すぐ入れました

一応、平日だからな。いや、でも、そこそこ混んではいました。

シズラーはサラダバーのみと言うのが良いと思うのだが、ちょっと肉が足りないというのが罠かな。

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

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分だな。まぁ、あまり挑発しないように心がけます。

Sunday 26 August 2018

いつもの習志野

母の妹の入っている施設ですね。車で連れていってもらいました。この暑さだったので助かりました。

前回、訪問した時よりは、こちらを認識してくれたみたい。でも、急速に衰えたな。もう、あまり歩くこともないみたい。車椅子でした。

でも、それでも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

ぐらいまでやる予定です。

Friday 24 August 2018

巨神計画

なんと下巻を沖縄に忘れてしまって送ってもらったり。

巨大ロボット発掘ものです。いや、イデオンくさい。そういう話です。三部作の第一部らしく、

  まったく完結しません

イデオンだと一話までしか行ってないくらいか?

全編、インタビュー形式でしかも、

  回答者が真面目に回答しない

ので、まぁ、読みづらいですよ。水増しともいうのではないか? 既に二部は出てるみたいなので英語で読むか? 巨神計画

Thursday 23 August 2018

洗濯

実家の洗濯は

  乾燥機なしの洗濯機

まぁ、でも脱水まではやってくれるので。Ingress だと一日二回着替えたりするからな〜

ヘルパーさんも洗濯してくれるので、まぁ、特に問題なく。

二階への階段の途中に干されているので、二階から干すのが楽。部屋干しなのは良いですね。

外に出て干すだけでも暑いし。

Wednesday 22 August 2018

21日の飲み会

米国帰りのうちの学科のOGとかが参加してくれたりして楽しかったです。飲みっぷりが変わってない...

今回はそこここで獺祭島耕作を見るなぁ。ピンチをチャンスに変える的なところが素晴らしい。

新橋 正味亭尾和 でしたが「料理がおまかせ」で、最後に「カレー食べます?」みたいな。そういう面倒くさくないの超素晴らしいです。

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

Saturday 18 August 2018

お腹の調子

実家だとヘルパーさんがご飯作ってくれるんですが、これが微妙に危ない。僕はほか弁でも「他の人は全然平気なのに自分だけお腹壊す」人なので...

特に生野菜危ないんだよな。湯通しして欲しいとか思ったりしますが。キャベツの千切りとか危ないと思ったんだよな。というわけなので金曜日はお腹の調子が悪くて寒気があったので、少し熱があったかも。こういう時には、

  お風呂が意外に良い

そうなのか? まぁ、風呂入ってしばらく寝てたらだいぶ回復しました。お腹の調子が悪い時には、白湯とかで水分取って寝てるしかないんだよな。

起きたらヘルパーさんが帰ってしまっていて。夜はなんか飲みに来いと言われているのだが、母に「ご飯食べた? 」と聞くと「食べにいく? 」。おっと、ヘルパーさんには夜でけかますと言ったんだけどな。

でも、なんかお汁出てるし、なんか食べたんだろうなとは思ったんですが、仕方ないので一緒に近所の中華料理屋へ。どうせお腹の調子は悪いので、そんなに食べない。が

  ビールは頼みました

で、それから飲みに出たわけですが、帰る頃にはだいぶ良くなっていました。

  やっぱりアルコール消毒偉大だ

Thursday 16 August 2018

東京のIngress

隙間を塗って50位以内に入ったりしてました。お盆なので東京は空いてて良い感じ。事前に聞いたほどは暑くないし。

千川から水道橋までのミッションを見つけたので、それをやってみました。実家の前を通るので、そこで一時中断的な。

  小石川は緑

ってのを発見したので、たまに荒らしに行くことにしよう。実家の辺りは割と青いです。

Niantic はポケモンの方にサーバと人を割いてる感じかな。まあ、過疎ってもしつこくユーザが残るのがソシャゲだから。

ランニングで息が切れるのは嫌いなんだけど、歩くのは割と好きなので性に合ってるかも。

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/

Tuesday 14 August 2018

人のネットワーク上の知識

人のネットワークの形により、全体の知識の共有の様子が変わると言う話。

  結合度の高い集団が頑固になる
  集団の中で何は多数かを見間違えることがある

とか面白いです。田舎に新参者が行った時とか、廻りの言ってることや多数意見が間違って見えるとか、そんな
体験がある人はなんとなくわかると思うけど。

こういうのを利用している人たちもいるのだろうし、なんとなく知っていて「みんながやってるから」みたいなのを信用してない人もいるのでしょうね。

実際の状況はもっと複雑でしょうけど。

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からなので、ちょっと故障は早いか。まぁ、こんなものか。

詳細は沖縄に戻ってからかな。少し戻るのは遅くなりそうです。

Sunday 12 August 2018

カメラを止めるな

ロサ会館で観てきました。まさかの舞台挨拶があってうれしかったです。うわさを上回る面白さでした。

  ゾンビ映画嫌いなんだけど

高校時代に運動会の記録映画を撮ったのを思い出す感じ。旬のうちに観に行くものでしょう。もう一回観に行かないとな。

しばらく東京ですがおとなしくしているはずです。それほど暑くない感じ。

Thursday 9 August 2018

ガンプラ

研究室のM2がガンプラおたく(といっても彼はいろんなもののおたくなんだけど)なので、

  デンドロビウム作ろうぜ

という話をしていたんですが、今日は買いに行ってみました。が、

  普天間の島模型
  浦添の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では遅い方らしいです。

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:

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

ってのがあるようですね。

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上に再現するとかできるはずだけど... ま、あまり意味はないけど。

Friday 3 August 2018

floppy 読めた

なんのことはなく、

  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