たまりば

  パソコン・インターネット パソコン・インターネット  三鷹市 三鷹市

上記の広告、及び画面下部に固定表示されているオーバーレイ広告は、60日以上更新がないブログに表示されています。
新たに記事を投稿することで、広告を消すことができます。  
Post time :

ゲームボーイの電池交換に導電インク
2018年03月25日 03:01

ファミコンやゲームボーイなど昔のゲームソフトにはデータの保持にボタン電池が使われている。
(最初に知った時には驚いた。壊れなければ永遠に使えると思っていたゲームソフトにまさか寿命のある電池が入っているとは。しかもちっぽけなボタン電池。すぐにでも切れてしまいそうではないか。)
古いソフトの電池を交換する上で何が問題かといえば配線の接続方法だ。
元々はスポット溶接で留められている。これなら確実に導通がとれるだろう。しかし家庭にスポット溶接機はない。どうやって留めるか。
まっとうな方法は既にタブが溶接された電池を買うことだ。電池ホルダーを使うのもよいだろう。
しかしなぜか買う気にならない。その辺で売ってないとか割高とかの理由もあるが、たぶん専用品を使うのは負けた気がするという気持ちの問題が大きいと思う。

溶接以外の方法をいろいろ試してみるのだが、なかなかうまくいかない。溶接の素晴らしさが分かる。
リード線をテープで留めただけだと、すぐに接触不良でデータが飛ぶ。
何かしっかりとテンションを掛けられる手段がないだろうか。
リード線を熱収縮チューブで固定してテンションを掛ければどうかと試してみたが、駄目であった。しばらくしてデータが飛んだ。
また厚みでケースに微妙に収まらず、無理やり閉じたらケースが膨らんだ。(もっともこれはCR2032を使ったのが悪かった。1616にすれば大丈夫だったかもしれない)
もっとしっかりとテンションが掛かる物を考えるとクリップが思いつくが、GBソフトの狭いスペースに入るものはなかなかないだろう。
電池に直接ハンダ付けするという最終手段もあるが、アルカリ電解液の詰まった電池に高熱を与えるのは大変危険なのであまりやりたくない。またそもそも材質がハンダをはじくのであまりしっかりと付いてくれない。

そんなわけでなかなかこれといった方法が見つからなかったのだが、ふと導電インクが使えるのではないかと思い立った。
以前何かに使えるかと思って買ったものの何にも使っていなかったものだ。
「Bare Conductive Electric Paint」という名のもので、Amazonで売っている

試してみると、予想以上によい。
この種のカーボンタイプの導電インクは回路を描くには少々抵抗が大きいのだが、今回導線と電池表面の間のわずかな隙間を埋めるだけなので抵抗は無視できる。
無視できる…と思うが念のため計ってみると30Ω。思ったよりはあるな。
しかし電流はわずかなので抵抗による電圧降下は気にする必要はないだろう。計算したら1mVもないくらいだし実際計っても分からない。

そして接着力だが、結構ある。剥がそうと思って力を入れれば線を引っ張って剥がしたり爪で引っ掻いて剥がしたりはできるが、意図せず剥がれるようなことは無さそうな程度にある。
付きにくいハンダ付けよりはるかに信頼できる。

最初に試したものがこちらだ。
導電インクでGB電池接続_1個め
導線の太さで厚みが出て、熱収縮チューブのときほどではないものの微妙にケースが膨らんでしまった。
このあたりでそもそもGBソフトに使われている電池はCR2032でなくCR1616であったことに気づいたが、買いに行くのは面倒だし、うまくすれば入りそうなのでそのまま2032を使い続けることにした。
もう1点問題があり、基板上に電池を固定するために斜めにテープを張ったのだが、カートリッジの上蓋は枠が出っ張っているので閉める時引っかかってしまう。

それを踏まえて2個め。
厚みを抑えるために芯線をバラして接着することにした。カプトンテープで絶縁をとってある。
導電インクでGB電池接続_2個め1
基板にはんだ付け。カートリッジのケースに入れてみると問題なく閉まった。
導電インクでGB電池接続_2個め2
固定はカプトンテープでは上手くできず、グルーガンで留めようかと思っていたのだが、ただ閉じるだけで振ってもガタつくこと無く一応固定されているようなのでそのままにしてしまった。

1個めが2ヶ月半、2個めも1ヶ月ほど経つがどちらもデータを保持できている。  

  • 謎の色名「honeydewtab」とlegacy color valueパース手順
    2018年03月24日 12:45

    HTMLやCSSで使うために140個の色名が定義されている。個人ホームページ全盛期のHowTo本にはよく載っていたものだが思えば最近あまり見ない気がする。
    HTMLを書いていてなんでもいいからとりあえず色を付けたい時一々カラーコードを書くよりredとかblueとか書くと楽なので便利だ。(cyanmagentayellowもあるがgreenは罠だ。緑100%はlimeだ。)

    ここで、謎の色名「honeydewtab」というものがある。
    詳しくはこちらのページを読んでほしいが、かいつまんで言うと
    ・なぜか色名として「honeydewtab」が載っている本やサイトがあった
    ・何らかの色が出るが、ブラウザにより異なる
    ・著者から連絡があり間違いだったと確認された
    ということだ。

    ここで不思議なのが何らかの色は出ること。
    存在しないのならなぜ無視されるのでなく何か出るのか。どういう解釈をされているのか。
    調べていると別のサイトで様々な文字列が実験されているのを見つけた。
    ここの「coffee」で見覚えのある色があって気づいた。これは#C0FFEE色だ。英単語として読める16進数は色々あり、中でもちょうど6文字でいい感じの色が出るC0FFEEは自サイトでもよく使うお気に入りだったのである。

    すると#を付けなくとも16進数として解釈されるのか。試してみると6文字の時は16進数字以外を"0"として解釈した値と一致している。
    謎はほぼ解けたもののhoneydewtabなど6文字以外の場合の規則は分からずじまいだった。

    その後HTMLの仕様を見ていた所「legacy color value」としてパース方法が定義されているのを見つけた。
    https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#rules-for-parsing-a-legacy-colour-value
    簡単に説明すると、
    16進数字以外を'0'に置き換え、文字数が3の倍数になるよう末尾に'0'を足し、3分割。3つの要素それぞれの先頭から等しい数の'0'を、最低2桁は残して、除ける限り除く。各要素の先頭2桁を1バイトのRGBと解釈する。
    というものだ。(簡単に説明できなかった。)
    正式な簡略表記だと思っていた3桁表記(#369=#336699みたいなやつ)もlegacyだったのは意外だ。

    honeydewtabを例にパースしてみよう。
    honeydewtab
    000e0de00ab     16進数字以外は"0"に置き換える
    000e0de00ab0    3の倍数文字になるよう"0"を補う
    000e,0de0,0ab0  3等分する
     00e  de0  ab0  各部分において先頭から同数の"0"を消す
     00   de   ab   各部分の先頭2文字を取る
    #00deab         できあがり

    さて、この複雑なパース手順は何を意図したものだろうか。
    桁数が多い場合を考慮している点と、先頭2文字を取るところは、将来的に各色要素が3桁以上になった場合でも対応できるようにしつつその場合に各色8bitの環境でも適切な色を出せるように考えられているように見える。
    しかし、そう考えると3桁以上で頭が0の時は破綻する。
    例えば(000,012,0AB)という3桁の色表現があったとして、2桁に変換するなら(00,01,0A)となってほしいところだが、この手順では(00,12,AB)になる。
    してみるとこの仕様はまともに使えることを意図したものではなく、各ブラウザでまちまちだった挙動をなるべく保持しつつ矛盾のない1つの仕様にまとめたものなのではないだろうか。  

  • KanaFiveの画像を用意した(ついでにちょっと字形改良)
    2018年03月23日 00:33

    以前、KanaFiveという名の5×5ドットひらがなカタカナフォントを作った。調べてみると9年前だ。うわあ。
    最初はフォント作成サービスで仮名と一部の記号だけを作っただけであった。 → 5×5 ひらがなフォント
    次にJIS記号など大幅に増やしたものを画像として作成、仮名のみだが表示システムも作成した。 → 5×5フォント改 / JavaScriptフォント表示機
    そして最終的に多くのOSで使えるTTFフォントファイルとして作成した。記事にも書いてあるがこの際字形の改良もしている。 → 5×5ドットフォント完成版

    ありがたいことに数件使われているのを見かけた。
    以前、パーラービーズに使われたものと、
    最近micro:bitという名の5×5ドットのLEDの付いたマイコンボードがあり、これに使われているのを2件見かけた。
    こちらと、「micro:bitでひらがなを表示させてみよう
    こちらだ。

    さて、使われるのはたいへん嬉しいのだが、ひとつ気にかかることがある。
    何故か使われているのが古いものなのである。
    「何故か」というか、理由は明確で、PC上で文章を打つのに使うのでなければTTFファイルをダウンロードして文字を打つより画像から描き写す方が楽だからであろう。
    どれを使っても構わなくはあるのだが、自分としては上記の通り字形の改良をして最終版のTTFが最も優れているつもりなので、できればこれを使ってほしい。
    ということで今更ながら当該記事に最新版の画像も置くことにした。

    …のだが、困ったことに、その画像を作っている最中にも字形に気に入らないところが出てきて更に修正を加えることになってしまった。
    変更した文字は「あさでにむりるろわク」の10字、うち「あ」は結局初期のものに戻したものだ。ついでに「𛀀」「𛀁」を描いた気がしていたが描いていなかったので描いた。
    KanaFive_差分
    TTFの方も更新したいのだが、TTFを作成するにはまず今のPCにはFontForgeが入っていなかった気がするので確認して無かったら入れ、使い方を思い出し、当時散々悩まされた一部の文字が消える不具合とまた闘わなければならない。大変気が重い。
    というわけで残念ながら現在の最新版は仮名のみ画像である。仮名以外はTTF版が最新である。

    こちらにも貼っておこう。
    等倍画像と、
    KanaFive画像
    4倍の画像と、
    KanaFive画像_×4
    プログラムで使う用に置換しやすい感じのテキスト。
    ひらがな清音
    _@___
    @@@_@
    _@_@_
    @_@_@
    @@__@
    -----
    @__@_
    @___@
    @___@
    @_@_@
    _@___
    -----
    _@@__
    @@@@_
    ____@
    ____@
    _@@@_
    -----
    _@@__
    @@@@@
    ___@_
    _@@__
    @__@@
    -----
    _@___
    @@@_@
    _@___
    @@@@_
    @@__@
    -----
    _@_@_
    @@@_@
    _@_@_
    _@_@_
    @__@_
    -----
    @@@@_
    _@@@@
    ___@_
    @____
    _@@@_
    -----
    __@@_
    _@___
    @____
    _@___
    __@@_
    -----
    @__@_
    @_@@@
    @__@_
    @__@_
    @__@_
    -----
    _@@@_
    ___@_
    _____
    @____
    _@@@@
    -----
    __@__
    @@@@@
    ___@_
    @____
    _@@@@
    -----
    @____
    @____
    @____
    @___@
    _@@@_
    -----
    ___@_
    @@@@@
    _@_@_
    __@@_
    ___@_
    -----
    _@_@_
    @@@@@
    _@_@_
    _@___
    __@@_
    -----
    _@__@
    ___@_
    @@@@@
    _@___
    __@@@
    -----
    _@___
    @@@__
    _@_@@
    @____
    @_@@@
    -----
    _@___
    @@@@@
    _@@@_
    ____@
    _@@@_
    -----
    @@@@_
    ____@
    ____@
    ____@
    __@@_
    -----
    @@@@@
    ___@_
    __@__
    __@__
    ___@@
    -----
    @__@_
    @_@__
    _@___
    @____
    _@@@@
    -----
    _@___
    @@_@@
    ___@_
    _@@@@
    _@@@_
    -----
    @_@@@
    @____
    @____
    @_@__
    @__@@
    -----
    @___@
    _@@@_
    @_@_@
    @@_@@
    ___@@
    -----
    _@___
    @@@@_
    _@__@
    @@_@@
    _@_@@
    -----
    _@@@_
    @_@_@
    @_@_@
    @_@_@
    _@@__
    -----
    @__@_
    @_@@@
    @__@_
    @_@@@
    @_@@_
    -----
    @@___
    _@_@@
    @__@_
    @__@_
    _@@__
    -----
    _@@__
    _____
    __@__
    @_@_@
    @_@_@
    -----
    _____
    _@@__
    @__@_
    ____@
    _____
    -----
    @_@@@
    @__@_
    @_@@@
    @__@_
    @_@@@
    -----
    @@@@@
    _@@@_
    __@__
    @@@@_
    @@@_@
    -----
    @@___
    _@_@_
    _@@@@
    @@_@_
    @@_@_
    -----
    _@___
    @@@_@
    _@___
    @@__@
    _@@@_
    -----
    @___@
    _@@@_
    @@_@@
    @_@_@
    @@__@
    -----
    @@@__
    _@___
    @@@__
    _@__@
    __@@_
    -----
    _@__@
    @@@@_
    _@__@
    _@___
    _@___
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    @_@__
    @@@@_
    @_@_@
    @_@_@
    @_@@_
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    __@__
    __@@@
    __@__
    @@@@_
    @@@_@
    -----
    @_@@_
    @____
    @@@@_
    ____@
    @@@@_
    -----
    @___@
    @___@
    @@__@
    ____@
    __@@_
    -----
    @@@@@
    __@@_
    ____@
    @@__@
    @@@@_
    -----
    _@___
    @@@@_
    _@_@_
    @@_@_
    _@_@@
    -----
    @@@@@
    __@@_
    ____@
    @___@
    _@@@_
    -----
    _@_@_
    @@@_@
    _@__@
    @@__@
    _@_@_
    -----
    @@___
    _@@@_
    @@__@
    @@_@@
    @@_@@
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _@@@_
    ___@_
    _@@_@
    _@@@_
    @_@_@
    -----
    _@@__
    @@__@
    __@@_
    _@_@_
    _@@@@
    -----
    _@___
    _@___
    @____
    @@__@
    @_@@_
    -----
    @_@__
    @_@__
    _____
    _____
    _____
    -----
    @@___
    @@___
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    ひらがな特殊
    _____
    _@___
    @@@_@
    _@_@_
    @@@_@
    -----
    _____
    @__@_
    @___@
    @___@
    _@___
    -----
    _____
    _@@__
    @@@@_
    ____@
    _@@@_
    -----
    _____
    _@@__
    @@@@@
    __@__
    @@_@@
    -----
    _____
    _@__@
    @@@__
    _@@@@
    @@@_@
    -----
    __@_@
    _@_@_
    @@@__
    _@_@_
    @__@_
    -----
    @@@_@
    @@@@_
    __@__
    @____
    _@@@_
    -----
    __@_@
    _@___
    @____
    _@___
    __@@_
    -----
    ____@
    @__@_
    @_@@@
    @__@_
    @__@_
    -----
    @@@_@
    __@__
    _____
    @____
    _@@@_
    -----
    _@__@
    @@@@_
    __@__
    @____
    _@@@_
    -----
    @__@@
    @____
    @____
    @___@
    _@@@_
    -----
    __@_@
    @@@@_
    @_@__
    _@@__
    __@__
    -----
    @_@_@
    @@@@_
    @_@__
    @____
    _@@__
    -----
    @_@_@
    __@__
    @@@@_
    _@___
    __@@_
    -----
    _@__@
    @@@__
    _@_@@
    @____
    @_@@@
    -----
    _@__@
    @@@@_
    _@@__
    ___@_
    _@@__
    -----
    ____@
    @@@@_
    ____@
    ____@
    __@@_
    -----
    @@@@@
    ___@_
    __@_@
    __@__
    ___@_
    -----
    @___@
    @_@__
    _@___
    @____
    _@@@@
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    @@@__
    ___@_
    __@__
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    @___@
    @_@@_
    @__@_
    @_@@@
    @_@@_
    -----
    @@__@
    _@___
    @__@@
    @__@_
    _@@__
    -----
    _@@_@
    _____
    __@__
    @_@_@
    @_@_@
    -----
    ____@
    _@@__
    @__@_
    ____@
    _____
    -----
    @_@_@
    @__@_
    @_@@@
    @__@_
    @_@@@
    -----
    @__@@
    @_@@@
    @__@_
    @_@@@
    @_@@_
    -----
    @@_@@
    _@_@@
    @____
    @__@@
    _@@__
    -----
    _@_@@
    ___@@
    __@__
    @_@_@
    @_@_@
    -----
    ___@@
    ___@@
    _@@__
    @__@_
    ____@
    -----
    @_@@@
    @__@@
    @_@@_
    @__@_
    @_@@@
    -----
    _____
    _@__@
    @@@@_
    _@__@
    _@___
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    @_@__
    @@@@_
    @_@_@
    @_@_@
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    __@__
    __@@@
    @@@__
    @@@@_
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _@@_@
    @@@__
    ___@_
    ___@_
    _@@__
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _@_@_
    @@@_@
    _@__@
    @@__@
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _@___
    __@__
    ___@_
    __@__
    -----
    ___@@
    _@___
    __@__
    ___@_
    __@__
    -----
    カタカナ清音
    @@@@@
    __@_@
    __@@_
    __@__
    _@___
    -----
    ____@
    __@@_
    @@@__
    __@__
    __@__
    -----
    __@__
    @@@@@
    @___@
    ____@
    _@@@_
    -----
    _@@@_
    __@__
    __@__
    __@__
    @@@@@
    -----
    ___@_
    @@@@@
    __@@_
    _@_@_
    @__@_
    -----
    _@___
    @@@@@
    _@__@
    _@__@
    @__@@
    -----
    __@__
    @@@@@
    __@__
    @@@@@
    __@__
    -----
    _@@@@
    _@__@
    @___@
    ____@
    __@@_
    -----
    _@___
    _@@@@
    @__@_
    ___@_
    _@@__
    -----
    @@@@@
    ____@
    ____@
    ____@
    @@@@@
    -----
    _@_@_
    @@@@@
    _@_@_
    ___@_
    __@__
    -----
    @@___
    _____
    @@__@
    ___@_
    @@@__
    -----
    @@@@_
    ___@_
    __@__
    _@_@_
    @___@
    -----
    _@___
    @@@@@
    _@__@
    _@___
    __@@@
    -----
    @___@
    _@__@
    ____@
    ___@_
    _@@__
    -----
    _@@@@
    _@__@
    @_@@@
    ____@
    _@@@_
    -----
    _@@@_
    __@__
    @@@@@
    __@__
    _@___
    -----
    @_@_@
    @_@_@
    ____@
    ___@_
    _@@__
    -----
    _@@@_
    _____
    @@@@@
    __@__
    __@__
    -----
    @____
    @____
    @@@__
    @__@@
    @____
    -----
    __@__
    @@@@@
    __@__
    __@__
    _@___
    -----
    _@@@_
    _____
    _____
    _____
    @@@@@
    -----
    @@@@@
    ____@
    _@_@_
    __@__
    @@_@@
    -----
    __@__
    @@@@@
    ____@
    _@@@_
    @_@_@
    -----
    ___@_
    ___@_
    ___@_
    __@__
    _@___
    -----
    __@__
    ___@_
    @___@
    @___@
    @___@
    -----
    @____
    @@@@@
    @____
    @____
    _@@@@
    -----
    @@@@@
    ____@
    ____@
    ___@_
    _@@__
    -----
    _____
    _@___
    @_@__
    ___@_
    ____@
    -----
    __@__
    @@@@@
    __@__
    @_@_@
    @_@_@
    -----
    @@@@@
    ____@
    _@_@_
    __@__
    ___@_
    -----
    @@@@_
    _____
    _@@@_
    _____
    _@@@@
    -----
    __@__
    _@___
    @____
    @___@
    @@@@@
    -----
    ____@
    __@_@
    ___@_
    __@_@
    @@___
    -----
    @@@@_
    _@___
    @@@@_
    _@___
    __@@@
    -----
    _@___
    @@@@@
    _@__@
    _@___
    _@___
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    @@@@_
    ___@_
    ___@_
    ___@_
    @@@@@
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    @@@@@
    ____@
    _@@@@
    ____@
    @@@@@
    -----
    _@@@_
    _____
    @@@@@
    ____@
    _@@@_
    -----
    _@__@
    _@__@
    _@__@
    ____@
    __@@_
    -----
    __@__
    @_@__
    @_@_@
    @_@_@
    @_@@_
    -----
    @____
    @____
    @___@
    @__@_
    @@@__
    -----
    @@@@@
    @___@
    @___@
    @___@
    @@@@@
    -----
    @@@@@
    @___@
    ____@
    ____@
    _@@@_
    -----
    ___@_
    @@@@@
    _@_@_
    @@@@@
    ___@_
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    @@@@@
    __@_@
    __@@_
    __@__
    @@@@@
    -----
    @@@@@
    ____@
    @@@@@
    ____@
    __@@_
    -----
    @@___
    _____
    ____@
    ___@_
    @@@__
    -----
    _____
    @____
    _@@@@
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    カタカナ特殊
    _____
    @@@@@
    __@_@
    __@@_
    _@___
    -----
    _____
    ____@
    @@@@_
    __@__
    __@__
    -----
    _____
    __@__
    @@@@@
    @___@
    __@@_
    -----
    _____
    _@@@_
    __@__
    __@__
    @@@@@
    -----
    _____
    ___@_
    @@@@@
    _@_@_
    @__@_
    -----
    _@_@@
    @@@@_
    _@_@_
    _@_@_
    @__@_
    -----
    _@_@@
    @@@@_
    _@___
    @@@@_
    _@___
    -----
    ___@@
    _@@@_
    @__@_
    ___@_
    _@@__
    -----
    _@_@@
    _@@@_
    @_@__
    __@__
    _@___
    -----
    ___@@
    @@@@_
    ___@_
    ___@_
    @@@@_
    -----
    @_@_@
    @@@@_
    @_@__
    __@__
    _@___
    -----
    @@_@@
    _____
    @@__@
    ___@_
    @@@__
    -----
    ___@@
    @@@@_
    ___@_
    __@__
    @@_@_
    -----
    _@_@@
    @@@@_
    _@_@_
    _@___
    __@@_
    -----
    @__@@
    _@_@_
    ___@_
    __@__
    _@___
    -----
    ___@@
    _@@@_
    @__@_
    __@@_
    _@@__
    -----
    @@@_@
    _@___
    @@@@_
    _@___
    @____
    -----
    ___@@
    @_@__
    @_@_@
    ____@
    _@@@_
    -----
    _@@_@
    _____
    @@@@@
    __@__
    _@___
    -----
    @__@@
    @____
    @@@__
    @__@@
    @____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    @_@_@
    @_@_@
    ____@
    _@@@_
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    ___@@
    __@__
    @__@_
    @___@
    @___@
    -----
    @__@@
    @@@@_
    @____
    @____
    _@@@@
    -----
    ___@@
    @@@@_
    ___@_
    ___@_
    _@@__
    -----
    ___@@
    _@___
    @_@__
    ___@_
    ____@
    -----
    __@_@
    @@@@_
    __@__
    @_@_@
    @_@_@
    -----
    ___@@
    ___@@
    @_@__
    @__@_
    @___@
    -----
    @__@@
    @@@@@
    @____
    @____
    _@@@@
    -----
    ___@@
    @@@@@
    ___@_
    ___@_
    _@@__
    -----
    ___@@
    _@_@@
    @_@__
    ___@_
    ____@
    -----
    ___@@
    @@@@@
    __@__
    @_@_@
    @_@_@
    -----
    _____
    _@___
    @@@@@
    _@__@
    _@___
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    @@@@_
    ___@_
    ___@_
    @@@@@
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    @@@@@
    _@@@@
    ____@
    @@@@@
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    ____@
    @@@@@
    @___@
    ____@
    __@@_
    -----
    ___@@
    @@@@_
    _@_@_
    @@@@@
    ___@_
    -----
    __@_@
    @@@@@
    @___@
    ____@
    __@@_
    -----
    ___@@
    @@@@_
    _@_@_
    _@___
    @@@@@
    -----
    ___@@
    @@@@_
    ___@_
    @@@@_
    ___@_
    -----
    _____
    @@@@@
    @___@
    ____@
    __@@_
    -----
    _____
    _@___
    @@@@_
    _@_@_
    _@_@_
    -----
    _____
    _@___
    _@@@_
    @_@__
    __@__
    -----
    _____
    _@___
    __@__
    ___@_
    _____
    -----
    ___@@
    _@___
    __@__
    ___@_
    _____
    -----
    その他仮名
    _____
    _@__@
    @@@_@
    _@_@_
    @__@_
    -----
    _____
    @__@_
    @_@@@
    @__@_
    @__@_
    -----
    __@@@
    __@__
    _@_@_
    ____@
    __@@_
    -----
    _@@@_
    ___@_
    ___@_
    ___@_
    ___@_
    -----
    __@__
    @@@@@
    ____@
    ___@_
    _@@__
    -----
    @_@@_
    ____@
    @___@
    @__@_
    @_@@@
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    ___@@
    _@_@@
    @@@_@
    _@_@_
    @__@_
    -----
    _@_@@
    @@@@@
    _@@@_
    @____
    _@@@_
    -----
    __@@@
    _@_@@
    @____
    _@___
    __@@_
    -----
    ___@@
    @__@@
    @_@@_
    @__@_
    @__@_
    -----
    ___@@
    _@@@@
    ___@_
    @____
    _@@@_
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _@@@@
    _@__@
    @___@
    __@@_
    -----
    _____
    @@___
    ____@
    @@_@_
    @@@__
    -----
    _____
    @@@@@
    ___@_
    __@__
    @@_@@
    -----
    _____
    @____
    @____
    @@@@@
    @____
    -----
    _____
    @@@@@
    _@__@
    __@@_
    @@__@
    -----
    _____
    __@__
    ___@_
    @___@
    @___@
    -----
    _____
    @____
    @@@@@
    @____
    _@@@@
    -----
    _____
    @@@@@
    ____@
    ___@_
    _@@__
    -----
    _____
    _____
    _@@__
    @__@_
    ____@
    -----
    _____
    __@__
    @@@@@
    __@__
    @_@_@
    -----
    _____
    _@___
    @____
    @___@
    @@@@@
    -----
    _____
    _@@@_
    @@@@@
    ____@
    __@@_
    -----
    _____
    _@__@
    _@__@
    ____@
    ___@_
    -----
    _____
    __@__
    @_@__
    @_@_@
    @_@@_
    -----
    _____
    @____
    @___@
    @__@_
    @@@__
    -----
    _____
    @@@@@
    @___@
    @___@
    @@@@@
    -----
    _____
    ___@@
    @@@@@
    ___@_
    _@@__
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    ___@@
    _@_@@
    @@@@_
    _@_@_
    @__@_
    -----
    _@_@@
    @@@@@
    _@___
    @@@@_
    _@___
    -----
    ___@@
    _@@@@
    @__@_
    ___@_
    __@__
    -----
    ___@@
    _@_@@
    _@@@_
    @_@__
    __@__
    -----
    ___@@
    @@@@@
    ___@_
    ___@_
    @@@@_
    -----
    @__@@
    @@@@@
    @_@__
    @____
    _@@__
    -----
    ___@@
    @_@@@
    @_@_@
    ____@
    __@@_
    -----
    @__@@
    @__@@
    @@@__
    @__@@
    @____
    -----
    _____
    _____
    _____
    _____
    _____
    -----
    _____
    _____
    _____
    _____
    _____

      

  • ブログ開設10周年
    2017年12月29日 23:37

    2017/12/29で10周年らしい。管理画面TOPで教えてくれた。
    ブログ10周年
    もっとも、ここのブログサービスに決める前に他のサービスで書いていた時期が少々あり、ブログを始めたのは2007/11/27だし、このサービスで2007/12/29に書いた記事はただの文字のテストで、初めてまともな記事(というか「ここに決めました」という内容)を書いたのは2008/04/05だ。
    本当は11/27にブログ10周年って言いたかったけど忘れてたんである。

    10年かけて記事数が200くらい。平均すると18日間に1記事。
    そんなに書いてたっけと思ったが最初の頃は今よりもっと高頻度に書いてた気がする。
    これからも更新頻度はあんまり上がらないだろうなあ…。

    …まあ更新頻度はともかく、これからもたぶん自分が死ぬかブログという概念が著しく時代遅れになるまでは続けていくと思うので、今後ともよろしく。  

  • ゲームボーイの背景面とウィンドウ
    2017年12月16日 00:19


    一般的な2次元ゲーム機の画面は背景面とスプライトからできている。
    ファミコンでは背景面が1枚だけだったのに対し後年のゲーム機は複数枚の背景面を持つのが当たり前になり、多重スクロールなどの技法で差を見せつけたものだ。

    さてゲームボーイだが、これが背景面は1枚だけなのだが、特徴的な「ウィンドウ」という機能を持っていて、背景面1枚ではできないような表現が少しだけ実現できる。いわば背景面1.5枚とでもいえる面白い仕組みだ。

    背景面が2枚あると、2枚の絵を用意してそれらを重ねて動かすことができる。上の絵の透過しているところでは下の絵が見える。
    対してゲームボーイは、扱える背景面は1枚だけなのだが、その背景面の右下の一部を「ウィンドウ」の内容で置き換えたものを表示できる。

    図で示すと分かりやすいだろうか。
    例えばこのような2枚の絵があったとして、
    いらすとやの草原 いらすとやの城
    背景面が2枚あるとこういうことができる。
    2枚の背景面での合成
    一方、ウィンドウではこういうことしかできない。
    ウィンドウでの合成

    これを何に使うかというと、最も一般的な使い方は画面下部にステータス表示を出すことだ。
    ウィンドウ側に書いたステータス表示を固定したまま、画面の残りの部分を自由にスクロールすることができる。
    ファミコンで同様のことをするにはラスタースクロールが必要だが、ゲームボーイではウィンドウのおかげで画面下部に出すなら同じことを楽にできる。(ウィンドウの制限として、上部にはできない)
    例はいくらでも見つかると思うが、とりあえず「ゼルダの伝説夢をみる島」を挙げておこう。ポーズをかけるとウィンドウ部がそのまませり上がってくる独特の挙動を示す。
    ゼルダの伝説夢をみる島のウィンドウ
    この作品、恐らく1画面の*ゼルダシリーズで唯一ステータス表示が画面下部にある。ゲームボーイでは画面上部にステータスを出すことが困難だったことの証左だ。
    なお同じゲームボーイ(カラーだが)でも「ふしぎの木の実」では恐らくラスタースクロール的に頑張って画面上部に出している。
    * 2画面のゼルダでは2画面の中央あたり(下画面上部・上画面下部)だったりする

    ステータス以外にも、背景面に描いた大きな物体の下部を隠したい時に使える。
    例えばこちらは「パロディウスだ!」の猫戦艦。水面から出現するところにウィンドウが使われている。
    パロディウスだ!のウィンドウ
    ここで背景面が2枚あれば波の間を透過できたところだが、ウィンドウではできない。

    さて下に何か出すだけならラスタースクロールでもできる。
    ウィンドウでは、画面の右側にも何か出すことが可能だ。(左にはできない)
    「F1スピリット」がそのような表示を使っている。

    左右に分割するのはラスタースクロールでは不可能だ。
    ファミコンで同様の表示をしたゲームには「ロードファイター」があるが、
    これはどうやらキャラクタパターンを1ドットづつずらした8種類作ってフレームごとに書き換える荒業を使っているようだ。そのため複雑な内容は表示できない。
    これはスプライトで書かれているので、(ゲーム画面本体も含めて)複雑な内容は表示できない。


    変わった使い方としては「ポケットモンスター金・銀」の英語版。
    ポケモンSilverのウィンドウ
    一見何も変わったところは無いように見えるが8×8のグリッドを描いてみると…
    ポケモンSilverのウィンドウ_グリッド付き
    画面の左側だけ文字の配置が3pxずれている。背景が1枚なら普通には8ドットのマス目に沿ってしか文字は表示できないはずだ。
    これは右半分だけウィンドウに描画した上でずらして重ねているのだ。
    さり気ない、しかし重要な使われ方だ。

    最後に「P・マン(原題 Prehistorik Man)」を紹介しよう。

    このゲームは凄まじいゲームで、飛び跳ねるアイテムを背景面を書き換えて表示したり、パースの付いた文字が流れたり、ライン中に画面を書き換えて文字を表示したりと様々な技術が詰め込まれている。
    そんな中でウィンドウが使われているのがオープニングのこの画面。
    P・マンのウィンドウ
    主人公と木がスプライト、引かれている枠がウィンドウだ。
    下が切れているがこれはラスタースクロール的に消しているのだろう。
    ウィンドウの制限として枠が決して画面右端から離れられないのだが、その制限を感じさせないところが上手い。

    以上、ウィンドウが特徴的なゲームを挙げたが、この機能はもうちょっと面白い使い方ができそうな気がしてならない。
    巨大な敵を真っ二つにするとか、ラスタースクロールと併用して右上に行く階段とか、右半分を自由な形に隠すとか(左はスプライトでどうにかする)。
    暇があったら何か作ってみたい。

    2017/12/16訂正: 「ロードファイター」について、1ドットずらしだと記憶していたのだが、実際には単なるスプライトだと指摘をいただいた。1ドットずらしの技法はどこかで読んだ気がして、確かこのゲームだと思っていたのだが、記憶は当てにならないものである。
    2017/12/18更新: 前日と翌日の記事が投稿されていたのでリンクを張った。