/var/log/hdk.log

2018 年 10 月中旬


10 (水)

%1 旧体育の日

1964 年の東京オリンピックの開会日。2020 年からは体育の日はスポーツの日となり、2020 年だけは二度目の東京オリンピックの開会日となる 7 月 24 日がスポーツの日になるんだそうだ。 へぇ。 もうあと 1 年 9 か月ちょっとじゃないか...

耳のほうはきょうはよさそう。 症状からすると蝸牛型メニエール病というのが近そうだよなー。 まぁそれ用の薬を処方されているわけだし。 調べると頸椎の異常でもめまいというのはあるらしいが、現状めまいというより軽い立ちくらみ的なものしかないからなー。 耳詰まりは特に首の動きと連動している感じもしないし。 なお、キーンというような耳鳴りは物心ついた時からずっとあるのでよくわからないんだけど、耳鳴りが変化しているような気はする。

メニエール病というと、先月解散したタッキー & 翼の今井翼はメニエール病で療養中とされている。 正直言って耳詰まりの症状だけでもなかなかつらいものがあるのだが、めまいが強ければ日常生活にも影響大きいだろうなぁ。

イソソルビド内用液は本当に利尿作用が強くて、連続睡眠時間にダイレクトに響く。 夜飲んで寝ると 2〜4 時台のどこかでトイレに起きるのである。 飲まなければ 5〜6 時台。

2018/10/10 のコメントを読む・書く


11 (木)

%1

1 本早いバスに乗れる時間だったので乗ってみたところ、工事による片側交互通行が 3 か所だったかな、工事により交互通行ではないものの狭くなっているところが 1 か所、車いすのお客様の乗降が 1 回ずつ、支払いに時間が掛かるお客様が約 1 名、とまぁなんだかスムーズでない日だった。 まぁ工事は始まったばかりの時間だろうから、次のバスに乗っていたらもっと遅れていたのだろうけど。 人見街道の工事はきついなぁ、結構交通量多いからなぁ。

%2 DOSBox-X のタイマー調査

DOSBox-X の動作スピードが変なのはタイマー割り込みのせいではないかな、という予想により、タイマー割り込みの頻度をチェックするクソプログラムを用意した。x86 用の gcc で DOS 用の .COM 形式のバイナリーを作る。-O0 前提でむちゃくちゃ雑な書き方をしているので、良い子は真似しないでね。

/* gcc -m32 -nostdlib -nostdinc -Wl,--oformat=binary,-Ttext,0x100 -fno-PIE a.c */
asm(".code16gcc;call _start;retw");
asm("int8:incw %cs:int8count;.byte 0xea;int8orig:.space 4");
asm("int8count: .space 2;timercallback:iretw");
extern char int8[],timercallback[]; extern unsigned short int8count;
_start(){
  asm("push %%es;int $0x21;mov %%bx,int8orig;mov %%es,int8orig+2;pop %%es"
      ::"a"(0x3508)); asm("int $0x21"::"a"(0x2508),"d"(int8));
  asm("int $0x1c"::"a"(0x200),"c"(500),"b"(timercallback));
  unsigned short cc=~0,dd,c,d,i,prevcount=int8count;
  for(i=0;i<10;i++){
    do asm("int $0x21":"=c"(c),"=d"(d):"a"(0x2c00));
    while(cc==c&&dd==(d&=0xff00));
    unsigned short count=int8count,diff=count-prevcount;
    char buf[6]={'0'+(diff/100)%10,'0'+(diff/10)%10,buf[2]='0'+(diff/1)%10,
      '\r','\n','$'}; asm("int $0x21"::"a"(0x900),"d"(buf));
    prevcount=count,cc=c,dd=d;
  }
  asm("push %%ds;lds int8orig,%%dx;int $0x21;pop %%ds"::"a"(0x2508));
}

実家ではテクニカルデータブックやら何やらの資料があったので、BIOS の使い方などどうってことなくてアセンブリ言語でゴリゴリ書いたものだが、基本的に日本語の資料しかないため今となっては web で探すには IBM PC よりつらいものがある。 まぁそんなことはいい。PC-98 ではどうも、INT 8H は通常はおよそ 100Hz に設定されているものの使われておらず、INT 1CH でタイマーを設定すると使われるらしい。IBM PC でも INT 1CH がタイマーに関連しているので頭が混乱してくる。 そしていろいろ遊んだ気がするけどこの INT 1CH は RTC 以外には使ったことがなかったかも知れない。

で、頻度を見たかったのに INT 1CH のインターフェイスは一発だけのインターバルタイマーなので、タイマー割り込み INT 8H をフックした上でインターバルタイマーを設定してやることにした。 インターバルタイマーを 5 秒に、表示は 10 秒程度行うようにしたところ、インターバルタイマーが起動したらやはりタイマー割り込みは停止するようだ。 で、頻度は 100Hz, だいたい合ってた。 ウーン... Vsync のほうかなぁ? それにしてはバレーボールなんかちゃんと動くからなぁ... アクションゲームは Vsync ベースで動くのがほとんどだと思うんだけど...

2018/10/11 のコメントを読む・書く


12 (金)

%1 きんようび

テレビでやってた映画『斉木楠雄のΨ難』。2017 年の邦画。 「Ψ難」は災難と読む。 「おっふ」って何なんだよw あまりにもくだらなすぎておもしろかった。 ドンキやら何やら実在する固有名詞がほいほい出てくるが、まぁとにかく何から何までギャグ仕様である。 なお美少女役は橋本環奈である。

%2 発電機

そういえば先月発電機の話を少し書いたんだけど、いろいろと謎は解けた。 やはりインバーターを使うものとそうでないのがあって、インバーターでないのはエンジンの回転数を一定に、要するに 60Hz なら 3600rpm あたりで回して、出力負荷に応じてスロットル開度を自動調整する。 インバーターであれば回転数は変動してよく、低負荷であればアイドリング、高負荷であればそれなりに高回転となる。 負荷の変化に対応できる理屈はよくわかっていないが、実は急激な変化には対応できないのではないかというのが自分の予想である。

.− TODAY'S REMARK − 今日の必ずトクする一言

このサイトの人がいくつものジャンク発電機を手に入れ修復した記事を載せていて、その辺の話が書かれている。 おもしろいのは 2 ストロークエンジンの発電機の排気ガスがそんなに臭くなく煙も少ないという話。 何となく 2 ストロークエンジンと言われると、古い原付なんかで今でもたまに見かける排気ガスの臭いやつ、そう、燃え切っていない燃料とオイルのにおいはディーゼルの比じゃないくらいな気もするが、なんかあの印象が強い。 でもインバーターでない発電機なら常時一定の回転数を目指して運転されるわけだから、原付に比べればだいぶ効率のいい設計にできるのかも知れない。 潤滑関係も理想的だろうし。

2018/10/12 のコメントを読む・書く


13 (土)

%1 どようび

バイクのエンジンオイル交換。 だいたい 10 か月で交換している。 使い方的にはシビアコンディションにはほど遠く、今回は鈴鹿にも行ったけどギリギリ 3,000km 行ってない程度。 ふと思い立って電話して、今日は午後にできるけど時間が掛かります〜というので、じゃあ預けて後で取りに行きますねと言って、持っていったら、「今なら 30 分くらいでできますよ〜」って、あれ!? まぁでも預けて小一時間後に取りに行った。 なかなかね、自分みたいな近所組はひょいひょいと行けてしまうが、八王子とか山梨とか、遠くから来る人達は時間も読めないだろうから、予定が狂ってしまうことはあるんだろうなぁ。 都心のほうは店もいくつかあって恵まれているけど、多摩地区以西の中央道方面はかなり広範囲がここだろうしな。

エンジンオイル交換終わってちょっと旧ランド坂往復してみた。 ランド坂降りたところは住宅街に入って狭い道を抜けるバイクにはいい感じの抜け道があるのだが、まだ覚えられていない。 この先行き止まりってあって、マジかー転回しないとと思いながら先に進むと実は行き止まりじゃないなんて、訳がわからない。

TVer でコナンを見る時に、逆転裁判のテレビアニメがあることに気づいて見てみた。 あのゲームの世界をそのまま持ち込んでいる風なのだが、真宵ちゃんの声はすごく違和感あるなぁー。 なんかこう、頭の中で勝手に作られていたイメージがあって、それとのズレが激しいパターン、BLEACH のルキアもそうだったし、なんでだろ。

テレビでやってた映画『三度目の殺人』。2017 年の邦画。 主人公は福山雅治演ずる弁護士、役所広司演ずる被告人は強盗殺人容疑が掛けられており、殺された人の娘役が広瀬すずで片足が不自由。 主人公と同じ弁護士事務所に他に吉田鋼太郎演ずる弁護人ともう一人いて、あと主人公の父役が橋爪功で、それと検察側の人の役が市川実日子という、有名な役者がたくさんそろっている。 役所広司の表情がいい。 カメラワークがおもしろい。 物語としてはなんだか難しい。 あまり多くを語らない。 主人公は娘との関係があまり良くなく配偶者とは離縁しようとしていて、被告人は鳥を飼っていたが死なせてしまったか何かで 1 羽を除いて外に埋めて、被告人の娘も足が悪く、などいろんな設定が出てくるし、被告人が殺人を犯すシーンに、殺された人の娘も殺人を犯すシーンまでもが出てきたものの、そういった伏線は回収されず、もやもやしたまま終わった感じがする。

2018/10/13 のコメントを読む・書く


14 (日)

%1 DOSBox-X

NyaHaX'93 でビープ音の音程が高い件を調査した。 まずは DEBUG コマンドで 8253A の挙動を確認してみたが、大丈夫そう。(DEBUG コマンドは先日 Microsoft から公開された MS-DOS 2.0 のもので十分。) むしろ Neko Project 21 のほうが間違っている。BCD が無視されているっぽいし、モード 2 にしてもビープ音が鳴っているんだから明らかに変。 その辺はさすがに DOSBox 由来のコードが役に立っているのかも。

で、NyaHaX'93 を逆アセンブルして音程を設定しているコードを探す。3fdbh というのはとても検索のしやすいポート番号で、すぐに見つかる。8 ビットシフトとかなかなか無駄の多いコードだな、C で書いてあったんかな... で、怪しいポート 0042h を見つけた。 システムタイプやシステムクロックを取得するものらしいのだが、なんと DOSBox-X では ffh が出てくる。 未実装かよw そりゃあだめだw

とりあえず 8MHz を選択してみたところ、NyaHaX'93 は正常に動くようになった。 音程と速度が変だったのは単にシステムクロック判定がうまくいっていなかったためということになる。 しかし大貧民はやっぱりなんか速い気がするな。KATALITH は動かないし... ffh だとハイレゾ対応機種扱いになっているおそれもあるな。

%2 レンタルカート

藤野。 久々ワンコインデー。5 回乗ってベストタイムは 39.0 秒くらい。 驚異的な速さの 7 号車。 自分の乗り方では他と 0.9 秒くらい違う。

%3 行き帰り

車で一般道経由で藤野へ行ったのは久しぶりな気がする。 午後のんびり出発したので行きは空いていた。

問題は帰り。 空冷 354cc エンジンの旧車でやってきた人が、教習所のところまで渋滞してましたよと。 渋滞は空冷エンジンの冷却に影響があるので困るというような話をしていた。 しかしなぜ渋滞? スタッフさんに話を聞いてみると、道志みちが一部通行止めになっていると... 台風にやられて土砂崩れがあり、復旧にはかなり時間が掛かりそうな状況らしい。 初めて知った。

相模原市緑区で発生した崖崩れで通行止めとなった国道413号 - YouTube

藤野から山中湖方面には行けるというので、つまり山中湖方面から走ってきた人の、相模原 IC を目指す人達の迂回路が藤野、相模湖 IC なのである。 その証拠に IC までが渋滞していて相模湖駅前や高尾山 IC はほとんど渋滞していないのである。(なお、高速ではなく相模原市街地方面に向かう人達はたぶんプレジャーフォレストの前に出る道を使うと思われる。狭いけど。)

じゃあどこから帰るかな、ということで、狭い隧道からすぐの裏道に抜けることにした。 裏道も見るからに木が倒れてきているところがあって、木のトンネルになっていて通れることは通れたけどたぶんこれも台風被害なんだろうなぁ。

ま、しかし道志みちがそういう状況だと御殿場から帰る道の選択肢がひとつ減ってしまうことになるかも知れないな。3 桁とはいえ国道なので、早急に復旧工事が進められるだろうとは思うけど。

2018/10/14 のコメントを読む・書く


15 (月)

%1 DOSBox-X

ポート 0042h を適当に実装してみた。 常に固定値 0x94 を返すといういい加減きわまりない実装。 これだけで Bio 100% 系ゲームは動くようになる、というか今度は 8MHz に切り替えたらだめなわけだけど。 大貧民は相変わらずだ。 大貧民はなんだか速いのと、「平民」などの文字と Medium などの文字が重なる事象も発生している。

蟹味噌はなぜかテキスト画面が消えない。 そういえば NyaHaX'93 を含めカーソルが消えないのも多い。StormySpace は相変わらず文字が出ないがスピードは 9000 に変えたらかなりスムーズに動くようになった気がする。Studio hero の ASTRON 体験版は EGC をかなり使用しているらしく、DOSBox-X の EGC のエラーが出まくる。 ざ・騎馬戦は遅いのとマウスキャプチャーできないと操作が無理だな。

なお、マウスドライバーは MSZ という ZOBplus のフリーソフト? が騎馬戦と一緒においてあった。NEC 方式も Microsoft 方式もいけるやつ。

%2

先週火曜日を最後に明らかな閉塞感は出ていない気がするのでイソソルビド内用液は飲んでいない。 軽い違和感みたいなのは時々あるような気もするが気にしないことにする。 週末だったっけな、左耳を下にして寝ると、右耳の中で何かがぽたぽたとたれているのかと思うような、小さな音が聞こえていた。

アデホスコーワ顆粒 10% とメチコバール錠 500μg は 1 回減らして朝晩にしてみよう。

2018/10/15 のコメントを読む・書く


16 (火)

%1 DH

大貧民のプログラムを解析する。 圧縮の解き方がわからなかったので DOSBox-X まるごと core dump で中を探すと、それっぽい機械語が見つかる。 例によって 3fdb は検索しやすい。 ビープはモード選択に 76h でなく 7eh を使っている以外は普通っぽい感じ。 まぁどちらでも問題ない。 システムクロックは 0000:0501h から読んでいるらしい。 だから Bio 100% のとは違って影響を受けないソフトがあるんだ。

ビープの近くにポート 0060h を見ているループがあった。 ビット 6 を見ていて、水平帰線信号らしい。0000:054Ch を見て 31kHz 対応もしている。2483 や 3147 は完全に水平走査周波数から来ている数字だ。 垂直帰線じゃないとはなんか面倒なことをしているな。 試しにその回数を数えるプログラムを作った。

/* gcc -m32 -nostdlib -nostdinc -Wl,--oformat=binary,-Ttext,0x100 -fno-PIE a.c */
asm(".code16gcc;call _start;retw");
in60(){unsigned char x;asm("in $0x60,%%al":"=a"(x));return x;}
_start(){
  int d,y,i,l[10];
  for(i=0;i<10;i++){
    for(y=0;;y++){
      do if((d=in60())&040)goto vsync;
      while(!(d&0100));
      do if((d=in60())&040)goto vsync;
      while(d&0100);
    }
  vsync:
    while(in60()&040);
    l[i]=y;
  }
  for(i=0;i<10;i++){ y=l[i];
    char buf[6]={'0'+(y/100)%10,'0'+(y/10)%10,buf[2]='0'+(y/1)%10,
      '\r','\n','$'}; asm("int $0x21"::"a"(0x900),"d"(buf));
  }
}

これはきっちり 400 と出る。 合っているっぽい雰囲気? いや待てよ、画面外の信号は出ないのか? テレビに出せるようなタイプのコントローラーであれば、表示部分以外にもボーダーカラーを出しているわけで、水平帰線もしていないとあんな表示はできない。 あっ、そういえば PC-98 もボーダーカラー設定できたよね。 やっぱり変か? でも T98-Next でも 400 だし、それで T98-Next は大貧民のスピードは合っていそうだから (ビープ音の音程が変わらないんだけど)、これのせいじゃなさそうか? わからん。

2018/10/16 のコメントを読む・書く


17 (水)

%1 整形外科

朝整形外科に行ってみたら、そこまで早く行ったわけでもないのに誰も並んでいないという珍しい体験。 待合室に入る時まで他に誰も来ないというのは初めてだったかも知れない。

頸椎のほうは調子は良い。 電気治療の頻度もだいぶ減らしているけど、病的な痛みは最近は全くない。 軽い違和感は時々あって自宅で低周波治療器を使うけど、それもだいぶ頻度が減った気がするし、それだけで間に合うくらいには良くなっているかも。 まぁその違和感が飲み会の後なんかに良く出るのは変わらないけど。

%2 テトリス風ゲーム

DOSBox-X で試していないゲームがあった。 中学生の時に作ったテトリス風ゲームだ。UI はそっくり市販ミニゲームのパクリなのだが、実装は C とアセンブリ言語による独自実装である。 試してみたらフツーに動いた。

C とアセンブリ言語と言うと普通はハードウェア依存の処理をアセンブリ言語で書いて残りを C で書いたと思うだろう。 あるいは性能的に厳しい部分もアセンブリ言語で書くと思うかも知れない。 実際には初めて C をまともに使ってみたプログラムであり、書きやすい方で書いたという代物である。 キー入力 (割り込み処理)、ジョイスティック (外部常駐プログラム使用)、音 (外部常駐プログラム使用)、グラフィック画面描画、Vsync 割り込み処理、はともかく、時間待ち (sleep, DOS のシステムコールをたたくだけ)、点数などの数字表示、ブロック表示、ブロック表示判定 (重なり、はみ出し判定)、行削除、行挿入、main 関数 (setjmp/longjmp 相当の処理のためのスタックポインター操作を含む) やグラフィックデータなどもアセンブリ言語で書いてある。 そして C のほうにも山盛りのグローバル変数... 我ながらひどいクオリティである。

好みだが、当時アセンブリ言語はほとんど大文字で書いている。C とリンクするところだけ小文字が入っている。 さすがに C は小文字で書いている。 確か一時期 PASM なんかで小文字で書いた頃もあったんだけど、結局大文字のほうが頭に入りやすいというか、Intel/AMD のマニュアルなんかも命令はみんな大文字だしな、未だに。 今もなんとなく Intel 表記は大文字がいい気がする。AT&T 表記は小文字で書く。

当時のコメントは潔く全部日本語だ。 アセンブリ言語のほうは割と丁寧にたくさん書いてあるが時々謎な上から目線な文が見られる。 しかしないよりは遙かにマシだ。 汚い実装なのに今見てもかなり理解できる。

2018/10/17 のコメントを読む・書く


Powered by Tomsoft Diary System 1.7.4

/var/log/hdk.log コメント一覧

トップ / 日記索引 / 日記 (2018 年 10 月中旬)

Hideki EIRAKU