並んだポスト 中目黒駅前

2010年12月17日

中目黒駅前ポスト
この微妙な距離感。

並んだポスト 高田馬場駅前

2010年9月21日

前の日記に書いた並んだポストに追加。

高田馬場駅前ポスト

SEIKO MAP-1010の内部動作

2010年9月9日

武田さんがMAP-1010エミュレータを制作した際に、私の方で実機を調査した情報を記録しておきます。

  • BUSREQは上がってこない。未使用と思われる。
  • NMIは未使用
  • CPU Clockは約0.240μs → 4.16MHz
  • INTは約16.691msの間隔で発生。垂直同期のタイミングと思われる。
  • メモリアクセス時にWAITが入る。
  • INT発生後にWAITが長い時間で発生 → 画面更新でVRAMアクセス?
  • 画面の描画状況によってWAIT信号の入り方が変化する

    IO周りはI/Oポートをほとんど使わずにメインメモリにマッピングされているようです。ハード構成の詳細は不明ですが、マニュアルやBASICのROMを元にして武田さんがあっという間にエミュレータとして実装されまして、ソースコードも公開されていますから、そちらを読んだ方が早いと思います。

    武田さんのお話によると、SEIKO MAP-1010はSANYOのPHC-25をベースにしているのではないか、とのことでした。そう言えるほどにハードウェア構成が似ていて、MAP-1010のBASIC ROMにはPHC-25にあってMAP-1010に無い周辺回路のコードが残っているそうです。これについては、私がMAP-1010のFONT ROMを吸い出した際にROMダンプを眺めていたところ、最後の方にSANYOの文字列があったので、SANYOのOEMかもしれないなと思っていました。その後、PHC-25のFONT ROMと比較したところ、同一でした。PC-6001、MAP-1010、PHC-25はハードウェア構成が似ていて、VDPには同じICが使われていますし、8×10ピクセルではフォントが似てきてしまうのですが、フォントデザインが1ドットも違わずに完全に同一ということはありえないのですね。

    ちなみに、PC-6001のフォントとMAP-1010(PHC-25)のフォントを比較したGIFアニメをアップしてみました。どっちがどっちかわかるかな!?

  • SEIKO MAP-1010のキーボード

    2010年9月9日

    MAP-1010キーボードMAP-1010キーボードコネクタ

    MAP-1010のキーボードとコネクタです。コネクタのピン数が多いです。

    SEIKO MAP-1010に関するメモ書き

    2010年5月29日

    MAP-1010の実機とマニュアルからいろいろとわかったことを書いていきます。

    SEIKO MAP-1010は、株式会社服部セイコーから発売された、SEIKOMAPファミリーCAIシステムを構成するハードの一部です。とはいっても、MAP-1010が中心となって、その他のMAPから始まる型番の周辺機器があるという構成だと考えていいと思います。具体的には、次のような周辺機器が発売されていたようです。

  • モニターCRT SEIKO MAP-1040
  • 拡張I/Oボード SEIKO MAP-1030
  • デジタイザー SEIKO MAP-1070
  • プリンター SEIKO MAP-1020
  • フロッピーディスク SEIKO MAP-1060
  • また、本体のMAP-1010ですが、PC本体を1010、セパレートタイプのキーボードを1010Kと呼ぶようです。

    拡張I/Oボードには、サウンドジェネレーター、シリアルインタフェース(RS-232C)、ジョイスティックインタフェースが備えられており、ジョイスティックとデジタイザ(MAP-1070)が接続できるようになっているようです。拡張I/Oボードにサウンドジェネレーターが内蔵されていますが、これは、MAP-1010には音源が備わっていないという事を意味します。BASICのPLAY/SOUND命令の説明文には拡張I/Oボードが必要と記述されていますので、先日のMAP-1010分解で音源ICらしきものが見あたらなかった事からも、本体には音源が搭載されていないということで間違いなさそうです。

    メモリ構成ですが、マニュアルによると、ROM 24KByte、RAMが32KByte(通常のRAM)と6KByte(ビデオ用)となっていて、RAMはトータルで38KByteということになります。先日の分解でもDRAMが32KByteでSRAMが6KByteだということがわかりましたが、これでSRAM 6KByteの使い分けがわかりました。ちなみに画面処理用ICのM5C6847P-1をICのマニュアル通りに使用すると6KByte程度のビデオメモリを必要とすることからも、間違いなさそうです。ただ、BASICでは2つのページを持てるようなので、そのあたりをどのように管理しているのかは不明です。

    キーボードはJISキー配列が57個、カーソルキーが4個、ファンクションキーが4個、テンキー部分が16個です。キーボード左側には上からESC、GRAPH、CTRL、SHIFT、右側には、DEL、RETURN、KANA、SHIFTキーがあります。KANAキーを押すとKANAランプ(LED)が点灯し、ひらがなやカタカナが入力出来るようになります。GRAPHキーを押しながらJISキーを押すと、記号を入力できます。

    BASICについては・・・あまり興味がないのですが(えー)、ざっと特徴を説明します。画面切り替えによるページは最大で2ページです。ページ数の設定ですが、PC-6001と異なり、BASIC起動時に最大ページ数を入力するのではなく、BASICのSPAGE命令によっていつでもページ数を設定する事が出来ます。ページ数1でのフリーメモリは約29000Byte、ページ数2では約23000Byteのフリーエリアとなります。
    MAP-1010にはカセットデッキが内蔵されていて、BASIC上から早送り、巻き戻し、マーカー検出による頭出し等のコントロールが可能です。もちろん、CLOADやCSAVEといった命令によるプログラムの読み込みや保存も可能です。CLOAD+RUNをまとめて実行するCRUNという命令や、画面の内容をテープに読み書きするSLOAD/SSAVEという命令もあります。
    BASICの画面モードは4種類で、PC-6001と同じようです。PC-6001と同じ画面処理ICを使っているので当然では、と思われるかも知れませんが、M5C6847P-1は細かくみていくと14種類の画面モードがあり、また、画面モードを変更するSCREEN命令の書式もPC-6001と同じですから、意図的に揃えたのではないかと思われます。
    MAP-1010にはカレンダー制御ICが組み込まれていますが、BASICから制御できるのは時分秒だけで、MAP-1010の電源を切ると時計が止まってしまう(リセットされる?)ようです。

    MAP-1010のメモリマップですが、まず、I/Oもメモリ領域に割り当てられています。7800H~7FFFHがI/O用メモリ領域ですが、その使い方はマニュアルには記載されていないのでBASIC ROMを解析するしかなさそうです。ビデオメモリ(SRAM 6KByte)は6000H~77FFHに割り当てられています。

    以上が、マニュアルから読み取れた情報です。BASICが格納されているEPROMの吸い出しは出来たので、解析すればもう少し詳しい事がわかるとは思いますけど、解析をする予定はありません。エミュレータは、いずれ武田さんが作られると思いますので、楽しみにしています(笑)。

    MAP-1010 BASIC ROM

    SEIKO MAP-1010の中身

    2010年3月17日

    MAP-1010中身

    大きな基板が2枚です。主要なLSI/ICを書き出してみました。

    • D780C-1 / 毎度おなじみZ80互換CPU
    • D2332C / 4Kbyte ROM. PC-6001と同じでフォントデータ用?
    • M58725P x 3 / SRAM 2Kbyte x 3
    • D416C x 16 / DRAM 2Kbyte x 16で32KbyteのRAM? 実際は24Kbyteという話もある。
    • M5L2764K x 3 / EPROM 8Kbyte x 3で24KbyteのROM。BASICインタプリタ? [追記]
    • M5C6847P-1 / PC-6001と同じ、VIDEO DISPLAY GENERATOR
    • D1990AC / SERIAL I/O CALENDAR & CLOCK CMOS LSI
    • TC9144P / TAPE DECK CONTROL IC
    • M51342P / Chroma Demodulator Circuit – NTSC TV Game Demodulator
    • なぜか、音源用のICが見あたりません。マニュアルとキーボードがあればもう少し詳しく調べられるのですが、残念ながら手元には本体しかないのでした。

      [追記]検索してみたところ、広告がありました。どうやらRAMは38K(32+6)のようです。

    キャロット新聞 幕の内

    2009年10月25日

    ナムコがゲームセンターで配布していた物・・・といえば「NG」ですが、私がよく通っていたゲームセンターというか、ゲームコーナーではキャロット新聞 幕の内というものを配布していました。

    キャロット新聞 幕の内
    キャロット新聞 幕の内

    Googleで”キャロット新聞”や”ナムコ 幕の内”を検索しても詳しい情報が得られませんでした。NGはいろんなところで表紙画像がUpされているんですけどね。

    この新聞、不定期刊行だったようですが、詳しいことは知りません。新聞には「中部共通版」と書かれていて、ナムコ中部事業所/名古屋の住所が記載されています。私は長野県長野市でこの新聞をもらっていましたが、記事による当時のナムコの中部事業所は石川・岐阜・長野・甲府・静岡・愛知・三重だそうで、そのエリアで配布していたのでしょうか。しかしなんで甲府?山梨じゃないのが不思議ですが、山梨の東側は関東圏だったのかな。

    ここでUpした新聞はB4サイズで裏面もあります。また、B3二つ折りのものや号外も出ていました。どうやらNG紙上で幕の内が採り上げられた事があったようですが、手元にNGがないので確認できません。

    どうでもいいですがGoogleで「ナムコ 中部事業所」を検索すると結果の2つ目にコナミが出てくるんですけどなんで?

    ピタッとeSATA/EC34はOSXで使えるか?

    2009年10月23日

    eSATA/EC34
    玄人志向から発売されているピタッとeSATA/EC34(PITAT-eSATA/EC34)はWindows Vista/XP対応と書かれていますが、一部のMacBook ProにはExpresCardスロットがあるので使えるんじゃないか?という気がしたので試してみました。

    結論を先に書くと「現時点では使えません」でした。

    テストしてみたマシンはMacBookPro 2007年モデルのOS10.6.1(Snow Leopard)です。

    製品のコントローラチップはJMicron社製のJMB360らしいので、サポートページをみてみるとOSX用のドライバが提供されていました。[ftp://driver.jmicron.com.tw/jmb36x/MAC%20OS%20X%2010.x/]
    これをインストールしようとしたところ、いきなりインストーラが落ちました。もう一度起動してみたところ、インストーラ自体は動いたのですが、途中でインストール失敗のメッセージが出ました。それでも継続するとMacの再起動を求められたので再起動後、カードを差し込んでみるとメニューバーにアイコンが表示されたのでカードを認識したようです。ただ、しばらくするとMacOSがクラッシュします(おなじみのカーテンが降りてきます)。また、そのまま電源ボタン長押しでMacを再起動しようとするとOS起動途中でクラッシュしてしまいます。カードを取り外せばOS自体は起動するようになります。

    どこに問題があるのかはわかりません。PowerBookProが世代落ちモデルだから / Snow Leopardだから(これはありえる) / ハード的に対応していない(チップメーカーはドライバを配布してるけど玄人製品だし)とか色々考えられます。

    ちなみに、PowerBookPro2008年モデル OS10.5でSATA2E2-EC34を使ったことがあるのですが、不安定でした。カード自体が不安定なのか、他のソフトとの相性なのかはわかりませんが、長時間使っているとOSがクラッシュします。一応、玄人志向の製品BBSではMacでの使用実績が報告されているのですけど、FinalCutで映像を編集してHDDを酷使しているとダメでした。

    今のところ、MacBookProのESATA ExpressCardで安定運用の実績があるのは、SonnetのTEMPO SATA Pro EXPRESS CARD/34です。高いですけどね。

    eclipseでhtml/xmlファイルを開くと斜体が読みにくい

    2009年9月20日

    設定しているフォントにもよるのだと思いますが、デフォルト設定では、ダブルクォーテーションで括られた文字列が極端に斜めったイタリックで、スラッシュやダブルクオーテーションが隣のアルファベットにめり込み、今、カーソルがどの文字の上にあるのかわかりにくいのです。なので斜体を解除です。

    メニューから…ウィンドウ→設定→Web→HTMLファイル→構文の色の指定→構文要素の属性値を選択して、斜体のチェックを外します。

    あぁすっきり。

    X68KのXDFを5inch FDに書き出す

    2009年8月18日

    X68000用のXDFイメージファイルを実機で動作させるために、XDFファイルを5インチフロッピーディスクに書き出す必要があったので、その記録です。ここでの説明は、Windows(AT互換機)からフロッピーディスクに書き出しを行う方法であって、X68000上でXDFを書き出す方法ではありません。

    とにかく事前準備が全てです。

    まず、5インチフロッピーディスクドライブを用意します。TEACのFD-55GFRがまだ比較的に入手しやすいと思います。
    FD-55GFR

    続いて、5インチフロッピーディスクドライブを接続/認識できるマザーボードを探します。マザーボードのBIOS画面でフロッピーディスクドライブの設定を[1.2M 5.25in.]に変更できるものです。ちなみに手元にあるP5Q DELUXEは3.5inch 720/1.44Mのいずれかしか選択できませんでしたので、そこそこ古いマザーボードでないと設定できないと思います。BIOSの設定画面に項目が無くてもドライバ次第でなんとかなるようですが。

    マザーボードとフロッピーディスクドライブの接続にも注意が必要です。3.5インチ用のFDDケーブルは使えません。5インチ専用のケーブルが存在するのです。
    5インチFDDケーブル
    写真の左側の形状のコネクタを持つケーブルです。古いマザーボードだと付属していることがあります。私は今年の初めに秋葉原のテクノハウス東映に新品が50円でワゴン売りされていたものを購入しましたが、ジャンク屋でも意外と売っていません。

    次に必要なのがOSです。Windows98/98SE/Meのいずれかです。この後に紹介するフロッピーディスクへの読み書きを行うソフトがNT系のOSに対応していないのです。

    最後に、ここまでで準備したマザーボードとOSで使うことの出来るCPU、メモリ、ビデオカード、HDD、CD-ROMドライブを用意します。HDDはIDE接続、ビデオカードはAGPかPCI接続で、今でもドライバが提供されているものですね。ただ、メーカー提供のドライバがなくてもWindows98の汎用ドライバ(640×480 16色)のままでもフロッピーの読み書きには影響がないので構いません。また、普段使用しているWindowsにあるXDFファイルを5インチドライブを接続したPCに持って行く、もしくはその逆を行う手段を考えておきます。USBメモリにでも入れてコピーすれば・・・といっても、Windows98に対応したUSBメモリは限られています。また、ドライバを必要とするUSBメモリを使用する場合、ドライバソフトをどうやってコピーするのかということも考慮しておきます。ドライバをネットからダウンロードすればいい・・・としても、PCをLANに接続しなければなりません。一番簡単なのは他のPCでドライバやソフトをダウンロードして、ついでにXDFファイルやXDFの書き込みソフトをCD-ROMに焼いてしまう事だと思います。

    ここまで来たらPCを組み立ててWindows98をインストールします。マザーボードのドライバとかオンボードのLANやサウンドやらのドライバもインストールしないと不明なデバイスだらけになりますが、最低限、チップセットドライバぐらいをインストールしておけば5インチドライブを使うには不明なままでも構いません(チップセットドライバすら不要かも)。

    最後にXDFの書き出しには、xFloppyを使います。XDFファイルを指定して5インチフロッピーディスクを入れてWrite Disk From Imageにチェックを入れてStartボタンを押すだけです。
    このソフトを使うと逆にフロッピーディスクをXDF化することも可能ですが、Windows98がフロッピーの内容を勝手に書き換えることがあるので要注意です。5インチディスクにライトプロテクトのシールを貼っておけば大丈夫だと思います。

    あぁそうだ、5インチフロッピーディスクの扱いですが、ディスクドライブにディスクを入れたまPCの電源を入れたり切ったりしないようにしてください。理由は忘れましたが、フロッピーディスクの扱いはそういうものだったはずです。21世紀も10年になるというこの時代に5インチフロッピーを扱う事なんて滅多にないですけどね。

    iPhoneアプリ開発 入門書

    2009年7月7日

    iPhoneアプリ開発本

    2冊買って読んでみました。正確には、最初に“ユメみるiPhone”を買ってきて、Macを前にして本に沿ってやってみたのですが、うまくいきませんでした。ハマリどころは、45ページ目のインタフェースとの接続のところで、アウトレットとラベルを接続しようにも、アウトレットが表示されなかったのです。もちろん、ヘッダファイルには記述してあるので、どこかで手順を間違えた?SDKのバージョンが3.0になって変わった?と色々悩んだのですが、原因はViewのInspectorを開いていたからです。ここで開くのは、Viewではなく、Files’s Ownerなんですが、それがわからなくて。

    Files’s Ownerの方を開く・・・ということがわかったのは、“iPhone SDKの教科書”を買ってきて読んでからでした。こちらの方が一つ一つ丁寧にどうしたらいいかが書かれているので、とてもわかりやすいです。その分、ちょっとだけ本が厚いです。それに、“ユメみるiPhone”は27ページ目にはMac上で実際にアプリを作ってみるのに対して、こちらは135ページ目までが予備知識なので途中で眠くなってしまうかもです。ただ、この予備知識は、他のアプリや開発環境に触れたことがある人向けに書かれていて、C言語とかActionScriptとかわかるけど、Objective-Cなんてわからない人向けに最低限必要な情報だけを押さえて説明しているので、さらさらっと読み流すだけで充分わかりますし、この段階でわからない人は、そもそもプログラムを組むための知識が不足しているということかと思います。

    結論的には、最初の1冊は“iPhone SDKの教科書”をお勧めします。“ユメみるiPhone”は2冊目の入門書として最適だと思いました。この2冊の序盤を読んでしまえば、あとは画面描画はどうするの?音を出すには?という、細かい機能(API)の使い方の話なので、必要なページだけを読んでもいいですし、Appleが配布している資料(日本語アリ)を見ればよさそうです。“ユメみるiPhone”はほぼ前ページカラーで3300円と若干高く、“iPhone SDKの教科書”は2800円ですし。

    それにしても、この2冊、共に帯で失敗してると思うのです。「あなたのアイディア実現方法を伝授します」って、なんか怪しいビジネス啓蒙書みたいじゃないですか。

    あと気になっている本は、“はじめてのiPhoneプログラミング”です。上記の2冊でも触れていないAPI、例えばデータの保存とか複数のビューを扱う方法について記述されているそうなので、手元にあると参考になるかなと。Appleのドキュメントでもよさそうですが、サンプルがあると理解度が格段に違いますよね。

     

    VSuite RamdiskとInternet Explorerの一時ファイル

    2009年7月1日

    VSuite Ramdiskで作成したRAMディスクを、IEの「インターネット一時ファイルのフォルダ」に設定した場合の注意点、というか、はまったメモです。

    まず前提として、IEの「インターネット一時ファイルのフォルダ」で、使用するディスク領域のサイズを小さく設定してあっても、そのサイズを超える単一のファイルにアクセスする際には、指定したサイズのファイルが作成されます。例えば、設定を10Mにしておいても、100Mぐらいの動画ファイルを開けば(観れば)、指定した保存領域を100M使うわけです。(ページを閉じたりページ移動すると、そのファイルは消えるようですが)

    ここでRamdiskの容量を10Mで作成しておいて、IEの一時ファイル領域の指定も10Mとします。この状態で10Mを超えるファイルを開こうとすると、ファイルが壊れます。ディスクがいっぱいなので。壊れない場合があるようなのですが、壊れる場合があります。それで保存できなかったというエラーメッセージでも表示されればまだ気がつくのですが、たとえば大きめのZIPファイルはエラー表示なしに途中でダウンロードが中断し、保存先にファイルが作成されてしまいますので、無事にダウンロード出来たように見えてしまいます。当然、解凍・展開はできません。
    また、ニコニコ動画では、動画の読み込み進捗バーが100%になっていても実際には読み込みされていないようで、動画再生が途中で止まったり、同じ箇所を再生し続けたり、シークバーが戻ったりするという現象が起きます。
    さらに、SmileDownloaderでYOUTUBEやニコニコ動画をローカル保存しようとすると、途中までしか再生できない動画ファイルが作成されます。

    これはram diskに限らず、一時ファイルのフォルダがあるドライブのディスク領域サイズが小さいと起こる現象です。

    私は、HDDのフラグメントを避けるためにIEの一時ファイル用にHDDのパーティションを10G程度確保した上で、インターネット一時ファイルのフォルダの容量は10M程度にしています。ネットのファイルをキャッシュする意味はないと思っているので(その分、回線に負担をかけているのですが)、1Mでもいいくらいです。ただ、仕事の都合で大きなファイルをやりとりすることがあるので、一時領域は大きめに指定しています、というか、していました。それをつい最近、VSuite Ramdisk導入時にRAM DISKのサイズを小さく20Mに指定していたので、100Mを超えるファイルをダウンロードする際にファイル破損が起きて、不具合に気がついたのです。今では500MをRAM DISKに割り当てていますが、500Mを超えるファイルのやりとりはできませんから、仕事のやりとりでは一時ファイルの領域をHDDにしてあるFireFoxを使うような使い分けが必要ですね。

    ま、そもそも私的PCと仕事PCを別けなさいという話ですね。

    サイバークリーン[Cyber Clean]

    2009年6月25日

    サイバークリーン

    サイバークリーンというクリーナーが、アキバヨドバシで390円で売っていたので試しに買ってみました。
    袋から出してみるとウェット感があってグニグニしてます。これをぎゅっとキーボードに押しつけてしばらくグニグニしてると、キーボードの奥の方まで入り込んでいってゴミをくっつけてくれます。普段からキーボードは掃除機をあてて綺麗にしているんですが、それにも関わらずゴミがとれたので効果あります。除菌・殺菌もしてくれるみたいですね。さすがに強く付着した黒い汚れまでは取れませんが、そういう汚れは別の方法でごしごしとキーボード掃除しましょう。
    ベタベタはしません。湿ってはいるのですがアルコールっぽい感じでさらさらです。ただ、レモン風な香りがついています。なので、清掃後は手を洗わないとです。

    並んだポスト

    2009年6月24日

    なんで2つ並んでいるんだろう。管轄の違い?投函される郵便物の量が多い地域だから?右に投函すると鬼太郎、左に投函するとねずみ男に届きます的なもの?

    ■本八幡
    本八幡のポスト

    ■市ヶ谷
    市ヶ谷のポスト

    ■水道橋
    水道橋のポスト

    ぐぐってみたら他にもあるようで。でも、理由はわからなかった。

    PHP統合開発環境PDT2入門 ZendDebuggerのテストが起動しないよ編

    2009年6月4日

    本の7章 ZendDebuggerのセットアップに従って設定すると、The file ‘http://localhost/pdt/dummy.php’ which is required by the Zend Debugger, could not be found. Please verify that…みたいなエラーダイアログが出てしまいました。これは、P131に書かれているdummy.phpのコピー先は、c:\dev\workspaceではなく、C:\dev\xampp\htdocsではないかなと。でもこれ、エラーが出ても気にしなくていいみたいです。

    また、dummy.phpを正しいフォルダにコピーして、続いて、Test Debuggerボタンを押してZendDebuggerの動作確認を使用とすると、私のPC環境ではApacheが落ちました。が、それもあまり気にしなくていい?みたいです。

    どうも、localhostよりも先に、このPCに割り当てられたIPアドレスでZendDebuggerに接続しようとしているようなのですが、php.iniのzend_debugger.allow_hostsで許可しているIPアドレスは、127.0.0.1だけなので、接続に失敗して、その際になぜかApacheを落としてしまうようで。こうなったら、一度、XAMPPのApacheを停止→開始して、ついでにEclipseも再起動した方がいいようです。ちょっと不安定だね。

    PHP統合開発環境 PDT2入門

    2009年6月2日


    PHP統合開発環境 PDT2入門[AA] という、初心者向けに丁寧に書かれている本を買いました。ページをめくりつつ実際にWindows上で環境構築をしてみたのですが、一カ所、はまったところがあったのでメモです。

    “2-4 Subversionのセットアップ”という章に従ってApacheにSubversionのモジュールを組み込むように設定してからApacheを再起動しようとしたのですが、Apacheが起動しませんでした。その原因なのですが、”2-1 XAMPPのセットアップ”の章では、XAMPPのインストーラ版をダウンロードするように書かれているのですけど、これにはSubverionが入っていないようです。
    XAMPのダウンロードページに開発パッケージというのがありますから、これを展開して、先にインストールしてあるXAMPPのフォルダ(この本に従うならc:\dev\xampp)に上書きすると、Subversionモジュールが組み込まれたApacheが起動するようです。

    XAV-2s

    2009年6月1日

    マイコンソフトから発売されているXAV-2sが手元にあるのですが、購入時から開封もしていない状態でした。それでつい最近、ゲーム基板のプレイ映像をハードディスクレコーダで録画してみようと思い、基板の15KHz RGB出力をXAV-2sに接続してみたのですが、その際にXAV-2sの取扱説明書を見たところ、これがまぁ、非常にマニアックな内容なのですよ。

    ゲーム基板のRGB出力は、様々な仕様があり、きっちり規格のビデオ/S端子出力とは相性がよくないものがあるのです。それらに対応するため、XAV-2sでは、このゲーム基板ではこうしなさい的な設定表が記載されているのです。普通のダウンスキャンコンバータでは「規格外の信号には対応していません」で済ませてしまうところを、あえて書く、マイコンソフトのそういうところが好きです。そのマニアックっぽい取扱説明書の対応表から引用すると、XAV-2sでは次のゲーム基板について動作確認されているようです。

    メーカー 名称
    シャープ X68000
    富士通 FM TOWNS
    各社 MSX
    ナムコ システム86
    ナムコ システム1
    ナムコ システム2
    ナムコ グロブダー
    ナムコ バラデューク
    カプコン CPシステム
    カプコン CPシステムII
    カプコン サイドアームズ
    コナミ 極上パロディウス
    コナミ ゼクセクス
    コナミ ガイアポリス
    コナミ 出たなツインビー
    コナミ エイリアンズ
    コナミ 究極戦隊ダダンダーン
    タイトー F-2システム(大)
    タイトー F-2システム(小)
    セガ システム18
    セガ システム16A
    セガ システム16B
    セガ システム32
    セガ ギャラクシーフォース
    東亜プラン V・V
    アイレム M-72システム
    アイレム R-TYPE II
    アイレム クロスブレイズ
    アイレム サンダーブラスター
    ジャレコ メガシステム
    ライジング 魔法大作戦
    セタ,サミー,ビスコ SSV
    SNK NEO・GEO

    なんという偏りっぷり。たぶん、開発部にあった基板で試してみたという話なのだと思いますが。

    もちろん、上記の基板をXAV-2sに接続してもちゃんと表示されない可能性もあると思います。ゲーム基板ってそういうものですし。取扱説明書にも、ダメな場合もありますよとは書いてありますし、明確に「コナミ社 グラディウス2」には対応していない(画面上部が極端に歪む)と記載されています。

    あと、S端子やビデオ端子接続でテレビに表示できたからといって、これがVHSやハードディスクレコーダに録画できるかというと、それはまた別問題で、映像がぶれたり、一瞬だけ画面が黒くなったりと、かなりやっかいみたいです。ゲーム画面の録画は試してみたいとは思っているのですけど、録画するほどの魅せるプレイが出来るわけではないのでした。

    PHPのrequire_once

    2009年4月28日

    PHPのrequire_once()は、このrequire_once文が書かれた箇所にファイルを読み込みます。ただし、1度だけなので、

    <?php
    require_once("a.php");
    require_once("a.php");
    ?>
    

    と記述した場合、2度目のrequire_once()ではa.phpは読み込まれません。例えば、a.phpではz.phpを読み込んでいて、b.phpでもz.phpを読み込んでいる場合、とあるスクリプトでa.phpとb.phpを読み込むと、z.phpを2度、間接的に読み込んでしまうような事態を防ぐ事ができます。
    逆に何度でも読み込むのがrequire()で、これはC言語でいうところのincludeみたいなものです。

    大抵の場合、同じファイルを2度読み込む理由はないからのだからと、何でもかんでもrequire_once()にしておけば安心だ、というもんでもありません。いや、自戒の意を込めて、以下は、つまらないバグに悩まされてしまった記録です。

    例えば、
    mysqlへアクセスするためのIDとパスワードの保存場所という記事。データベースの設定を外部ファイルにして、それをrequire_once()で読み込むという処理です。ここで、このDBへの接続部分を関数化してみます。

    function connectDB()
    {
        require_once('cfg.php');
        $dbc = mysql_connect($db['host'], $db['user'], $db['pass']);
        mysql_select_db($db['dbname']);
        return $dbc;
    }
    

    この関数を使ってDBに接続して、戻り値を使ってSQLを実行して、mysql_close()でDBへの接続を解除したとします。ここで処理が終わせずに、続けて再びSQLを実行するためにconnectDB()を呼び出すと・・・つまり、こんなソースです。

    $id = connectDB();
    mysql_query(...);
    mysql_close($id);
    $id = connectDB();
    mysql_query(...);
    mysql_close($id);
    

    レコードの更新を実行したあと、画面を更新するためにデータを取り直すというような処理ですね。これがなぜ、動かないのかというと、2度目のconnectDB()では require_once()が実行されないのです。2度目の読み込みになりますから。なので、$db変数は定義されずにDBへの接続に失敗するわけです。

    PHP的に考えたら当たり前なのですが、C言語のincludeようにプリプロセッサが外部スクリプトを展開して、その外部スクリプトはその箇所に恒久的に存在すると勘違いしてしまったのですね。つまり、関数の呼び出し毎にrequire_once()が実行されていると思っていなかったわけです。

    そんなの、mysql_connect()した段階でエラーチェックしてりゃ気がつくだろ、と思うのですが、mysql_connect()のパラメータが指定されない場合、デフォ ルト値 server = ‘localhost:3306′, username = サーバプロセスの所有ユーザ名 password = 空のパスワードで接続するらしく、
    Warning: mysql_connect() [function.mysql-connect]: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
    という警告メッセージはですのですが、戻り値は得られてしまうのです。もっともその先のmysql_select_db()の段階でエラーになって、こちらは検出できていたので、あれあれなんかおかしい、と気がついたわけです。

    ちなみにPHPではmysql_close()を呼び出さなくてもいいそうです、と、ドキュメントに書いてあります。が、ほったらかしは気持ち悪いよね。

    そこまで劣化しない証明とか

    2009年4月19日

    新規保存で劣化していくJPEG形式の画像の様子をとらえたムービーという記事を読んだのだけれど、そこまで劣化するかなと疑問。

    元の記事であるGENERATION LOSSを見ると動画と一緒にソースが添えてあって、Processingで記述してありました。名前は知ってるけど使った事はありません。私もプログラマの端くれですから、ざっと読むくらいはできるのでソースを見ていくと・・・

    float q = map(i,0,numberOfFrames,1,0);
    p.setQuality(q,true);
    

    ここ、なんか妙ですよね。map()関数がよくわからないのですけど、setQuality()はjpeg保存時の画質を決めてるところだと思うのですが、ここをこんな風に0~numberOfFrames(600-1)の間で変化させたら、画像を保存するたびに画質が変わってしまいます。

    いい機会なのでとProcessingをダウンロードしてきて試し
    てみました。

    まず最初の画像ですが、元記事の動画の最初フレームをキャプチャして使いました。

    最初のJPEG画像

    Processingに元のソースコードを流し込んで実行してしばらくすると、599枚の画像ファイルが完成するのですが、この時点ですでにファイルサイズが怪しく、徐々に小さくなっています。
    ファイル一覧

    保存を繰り返すたびにどのように劣化するのかを確かめるのであれば、ファイル保存時の品質は一定にした方がいいでしょうから、

    //float q = map(i,0,numberOfFrames,1,0);
    p.setQuality(1.0 ,true);
    

    このように固定値(ここでは1.0の最高値/PhotoShopだと画質10以上?)を設定した方がいいと思うのですね。この場合、600回保存した画像は
    固定画質で600回目の保存
    ぱっと見た感じでは劣化してません。もちろん、PhotoShopなどでヒストグラムをみると変化していますし、瞬間的に画像を切り替えると色の差異がみてとれますが。

    いやまて、もしかして、これはsetQuality()のパラメータと保存される画像の変化を確認しているのか?と思ったのですが、だとしたら、

    //PImage reference = loadImage("sky"+(i-1)+".jpg");
    PImage reference = loadImage("sky"+(1-1)+".jpg");
    

    このように、最初の画像を常に固定しないと意味がないのではないかなと。ちなみに、map()関数がなにをしているのかわからないのですが、最初の画像をいきなりmap(numberOfFrames-1,0,numberOfFrames,1,0)として保存した画像はこちら。

    画質低保存

    なんらかの画像処理ソフトで低画質保存したのと同じ結果になります、というだけの話でした。

    Papervision3Dの描画順序

    2009年4月7日

    papervison3Dを使って、単純なPlaneに接するようにCubeを描画した際に、Cubeの一部が欠けて表示されてしまいました。大きなプレーンがあって、その上に立方体が置いてあるようなイメージです。Cubeの欠け方を観察していると、Cubeの面を三角形に分割した形状で欠けが発生しています。
    推測ですが、papervison3Dは描画にZソートを用いている事と、PlaneもCubeも三角形単位で描画している事が影響しているのだと思われます。大きなPlaneの三角形の重心の位置と小さなCubeの三角形の重心の位置の前後関係かなと。

    なので、まず、単純なPlane同士の描画テストをしてみました。

    この投稿の続きを読む »