Hello, my name is pornanime.

DIYスーファミ用カートリッジ試作

あけましておめでとうございます。さて先月13日に注文していたSNESカートリッジの半完成基板がはるばるオハイオ州からやって来たので、大晦日に半田ごてを引っ張り出して実装しておりました。

この基板は

  • 認証用チップ(CIC)が既に実装されている
  • 市販EPROM(任天堂純正ROMとピン配置が違う)に合わせた配線がされている

ということで、買った後はROMを乗せるだけでOK。とはいえいきなり直付けする勇気はないのでICソケット経由です。

f:id:gyuque:20190101172540j:plain

まあ半田付けの腕は酷いですが……現代の米粒のような部品と比べると巨大なので、雑でも大丈夫。

f:id:gyuque:20190101172800j:plain

秋葉原・ラジ館の若松で買った8Mbits UV-EPROMです。日本橋の共立に大量にあることが分かっていたので大阪に帰ってきたら買おうかと思っていたんですが、なんと29日からもう正月休み。念のため買っておいて正解でしたね。若松通商の情報をいただいた松原社長に感謝。
新品なら消去しなくていいかな?と思ったんですがさすがに中古で、キヤノン製FAXのファームウェアっぽいものが既に入っていたのでこれで消します。

f:id:gyuque:20190101173711j:plain
f:id:gyuque:20190101173729j:plain

ROMが乗っている方が表っぽく見えてしまいますが、こちらを裏にしてスーファミのスロットにセットします。

f:id:gyuque:20190101173943j:plain

一発で動きました。先に書いた通り半田付けの難度は低いので、ぱっと見てブリッジ等がなければ、大丈夫でしょう。

しかし、実はICソケットを使うとカセットの中に収まらないことが分かっているので基板を分割してリード線で繋ぐか、あきらめて直接実装するか、ちょっと考える必要があります。

近況

デジゲー博

無事終わりました。スーファミ自体はしっかり動いたんですが、アナログテレビ跡の周波数帯に今はFM補完放送というものが流れているらしく、これがRF接続と競合して平成も終わろうかという2018年とは思えない酷い画質に。

f:id:gyuque:20181206141719j:plain

チャンネルを切り替えるとうまく映らなかったので、仕方なくこれで強行。妨害電波を集めてしまうのか、コントローラーのコードを伸ばすと画質が悪化するので、なるべく伸ばさないで!とか言いながら。
ミニスーファミの方はもちろん影響を受けず、この通り。

f:id:gyuque:20181206141845j:plain

他の写真はサイトからどうぞ。
pagam.es

ちなみにデジゲー博には間に合わなかったんですが、最後のステージ用にボスを作っています。

ボスの動きもアセンブリのハードコードなのでなかなか大変で、2週間やって半分ぐらい。たぶん完成は年末……

ベーマガ老人会

年末恒例? 松原社長(id:nicotakuya)のお宅でゲームをしながら物を食ったりする会。

気になったゲームはINSIDEかな。後述の通りSwitchを買ったので、ゼルダをある程度やったら買ってみよう。
スペランカーは、悪くないけど別に何も心に残らないな……
ダライアスはむずい。

最近のアニメ

ジョジョが別格で面白いのはともかく、吸血鬼さんが良い。あと、SAOは前作をぜんぜん見てなかったけど今期はわりと楽しんでいる。いろいろ人間が出てくるがそれらはモブみたいなもんで、キリトとユージオさえ覚えておけばなんとかなるのが良い。

Nentendo Switchを買った

いろいろありまして、買う機運に。
本体と一緒に買ったゲーム:

ゼルダ、3Dで歩き回るゲームはサルゲッチュ以来かもしれない。そして面倒になって積み中。ロックマンはいつも通りのロックマンなのでクリアした。

f:id:gyuque:20181214000837j:plain

そろそろROMカセットの製造を考えたい

工場に発注するとかは置いといて、とりあえずハンドメイドでの試作を考える。
ちょっと調べたところ、意外にもスーファミのカセットは(特殊なことをしなければ)ファミコンよりシンプルなようだ。
ファミコンの場合は本体の機能が極めて貧弱なので、ROM以外にもICを載せることがほぼ必須で、しかもプログラムとグラフィックが別のROMになるらしい。スーファミだとそこは洗練されていて、抵抗やコンデンサを除くと本当にCIC(正規品の認証用IC)とROMだけ。↓みんな大好きジーコサッカーはこんな感じ。


ではこのROMをひっぺがしてEPROMを植えればいいかというと、実は市販のEPROMと任天堂純正ROMはピンの配置が違うので、何本かリード線を引っ張りまわさないといけない。……逆に言えばそれさえすれば出来るんだけど、この地球上には最初から市販ROM用に配線してあるSNESソフト自作用基板というものが存在する。何でもあるな地球は。
M27C801 Make Your Own SNES Games Preassembled DIY PCB 3PCS | Etsy
↑ ネタ元
How to Make a SNES Reproduction Cartridge | The Poor Student Hobbyist

UV-EPROMは国内で買えるんだけど松原社長曰く「本来の値段より高い」とのこと。まあでも試作なので金は惜しまない感じでいきます。

デジゲー博にスーパーファミコン用のゲームを出展するので全力で来てください

はい、えー

前々から作っていたスーパーファミコン用のゲームが、ひとまずゲームとしての体を成して展示できる程度になったので、秋葉原UDXで展示をしようと思います。11月4日、明日です。

デジゲー博 | 同人&インディーゲームオンリー展示・即売会

これです、スペース E-11a。40年もののテレビが置いてあるので一発で分かると思います。

f:id:gyuque:20181103163438j:plain

左に本物のスーファミ+テレビ、右にミニスーファミを配置してどちらも同じものを展示しています。
テレビの方は家だと結構きれいに映るんですけどね、なんか秋葉原は謎のFMラジオが飛んでいて、それに妨害されてかなり画面が汚いです。周りに金属のものを置くと電波を集めて?しまうようでなかなかデリケートです。

f:id:gyuque:20181103163954j:plain

あとフライヤーもあります。少ないので、多分すぐ無くなります。裁断って10枚ぐらい一気にいけるのかと思ったらなんと手動のやつは最大1〜2枚で、大変で……
pagam.es

なぜ「2人用F-ZERO」ができなかったのか

はい。
ああ、近所の通り魔は捕まったそうです。これで背後を警戒しなくてよくなりますね(尚、実際は数日で忘れて背後なんか見なくなってた)



さて、なぜかヨーロッパの人達はレトロゲームが大好きなようでTwitter等でよく反応をもらう(日本人より多い)のですが、その中で Mode 7 使わないの?使ってよ、と言われて、せっかくなので全機能制覇を目指してテストプログラムを作ってみました。
Mode 7 というのはF-ZEROパイロットウィングスみたいな……と言えばもう伝わったかと思いますが、巨大な一枚絵をグリグリ回すスーファミ独特の疑似3Dのことを指しています。(尚、下に書きましたが技術的には「画面モード7」の応用例として疑似3Dがあるだけで、疑似3DのことをMode 7と呼ぶのは俗称です)

↓結果としてはこんな感じに

実は「画面モード7」自体には3D機能は無く平面の変形機能を提供するだけで、遠近法を実現するためにはラインごとの変形操作を自分でやる必要があります。なので意外と面倒。

で、これを実際ゲームに使うかというと……うーん……まあデモで一瞬使うぐらいかな。



ところで、ミニスーファミ発売記念のインタビューでこんな話がありました

そもそも『F-ZERO』って、ものすごく長い直線を、時速400キロで走りきるというゲームですけど、2人で遊べるように画面を上下に2分割にすると、同じことをやるのは絶対に無理だ、ということがわかったんですね。

――ハードの制約上、どうしてもくねくね曲がったコースにせざるを得なかったんですね。
紺野 はい。そのような密集したコースを走らせられるのは、カートくらいしかない、ということになったんです。

https://topics.nintendo.co.jp/c/article/3228ce3a-8d29-11e7-8cda-063b7ac45a6d.html

読んだときは「へー」と流していましたが自分で実装したところ理由が分かってきました。

Mode 7のBGサイズはピクセル数で言うと1024×1024固定で、これより大きくも小さくもなりません。画面サイズの256×224と比べると結構大きいように見えますが、F-ZEROのようなスピード感を出そうとすると端から端まで一瞬で到達してしまいます。上のデモだと地面に白い金網がある所がBGの端なので、1秒程度で到達しています。ということは、何も考えずにF-ZEROを作ると1周が10秒もかからず終わる詐欺みたいなゲームになってしまいます。

実際のF-ZEROではどうしているかというと、コースの一部だけをVRAMにロードして、プレイヤーの動きに合わせてストリーミングするという手段で、1024×1024より広大なコースを実装しています。

f:id:gyuque:20180602030712p:plain

当然、ロードする範囲はプレーヤーの場所と1対1なので、プレーヤーが2人に増えるとBGが2枚要ります。しかしMode 7で使えるBGは唯の1枚だけ。ということで、マリオカートではストリーミングを諦めて

f:id:gyuque:20180602031127p:plain

単にコースを1枚に詰め込むという実装で、この点だけ見るとF-ZEROより退化しています。しかしここで「カートということにして車を遅くする」というアイデアを出してきて最終的にマリオカートにしてしまうのが任天堂のデザイナーの力でしょう。

ということでまあ、プロは流石やねという話です。



ちなみにテストプログラムはgithubに上げたので試したい方はどうぞ
https://github.com/gyuque/snes-m7/releases

スーファミ開発報告20180423

なんか近所で人が刺されましてね、背後をチラチラ確認しながら歩いています。でも視力が非常に悪く夜目がきかないのであんまり意味が無い。

さて、念願のBGMと効果音が付きました
スーパーファミコンの自作ゲームにサウンドを組み込んでもらった話 | ANIMATONE


事情を知らない人に、当時小さいメーカーから出てたタイトルだよ?とか言えば騙せそうな水準にはなってるかと思います。

できたらミニスーファミ2に入れてくれない?

で、ちょっと話が前後しますが、上のBGMが付く直前に豊井さん、ninoさんと久々の開発会議。猫にタックルをかますゲームを作っている後ろから、豊井さんが飼っている本物の猫(3匹おり、名前を1、2、3と云う)の声が聞こえてくる。
出た意見↓

  • 完全に機械のUFOに魚を与えているのはおかしくないか? 生物っぽいデザインにしたい
  • アイテムを集めるゲームなんだけど、作業的に押し付けてる感じがする。 アイテムを集めるのが楽しいと思える仕掛けを入れたい → マリオみたいなコインを配置するのはどうか
  • タコの名前は? → タコでいいんじゃないかな(ええ…)



まずUFOのデザインについては多分こんな感じ↓(変わるかもしれない)
f:id:gyuque:20180423035822j:plain
次にコインについては動画にある通り。コイン自体はBGに貼ればいいんだけど、取った時のエフェクトはちょっと面倒。Twitterでスプライト置くだけでしょ?とか言われたんだけど、いやまあ、CPUが3.58MHz(ギガじゃないよ)とかの世界だから、雑には作れないんだ。
f:id:gyuque:20180423025357g:plain
タイトルは……また考えとく

さて、検討中の事項は

  • 今考えているFail(ミス)の条件はタイムアップのみだけど、即死トゲとかあった方が難度の調整にいいか?
  • 今のところコインを取らなくてもクリアできるが、なるべく集めさせたい → エンディングの条件を「コインを集めてUFOを修理する」とかにする?

こんなところか。

夏ぐらいにはCIB(Cartridge, Instructions, Box)=カセット・取説・箱をやりたいかな。

スーファミ開発近況

相変わらず牛の歩みで……

f:id:gyuque:20180409143545p:plain f:id:gyuque:20180409143552p:plain f:id:gyuque:20180409143638p:plain f:id:gyuque:20180409143719p:plain f:id:gyuque:20180409143727p:plain f:id:gyuque:20180409143734p:plain

しかしゴールには近づいております。

https://snes-taco.tumblr.com/post/172721628148/testing-sound-effects

一番のネックだったサウンドドライバ(+MMLコンパイラ)がほぼ完成。上の動画はテスト用の効果音しか入れてませんが、BGMもデータを入れれば鳴る状態になっています。
あと残った課題は……タイトル! そう、タイトルがまだなんですね。せっかく2年ぐらい?かけて作ったプログラムなのでじっくり考えようと思います。

案出し用資料
f:id:gyuque:20180409210121p:plain
f:id:gyuque:20180409210130p:plain

フランス語でタコはプルプ? なんか可愛い感じで使いたいかも。 実際発音を聞くと絶対プルプとは言ってないんだけど、まあ固有名詞なので語感優先でいいかもしれない。

スーファミゲー製作状況2018

もう2月になりそうですが今年最初なので一応、明けましておめでとうございます。去年の年始(一昨年の年末)はインフルエンザに罹ってボロボロでしたが今年は穏やかに迎えることができました。でも今年の方が流行ってるんですねえ。
さて、これまでのスーカツ(スーファミ活動)ですが……

とりあえず勢いでSFCのプログラムを作る(実機版1号)
 ↓
内容が微妙なのでWindowsでプロトタイプを作ってゲーム内容を真面目に考える
 ↓
プロトタイプと同じ内容をSFC実機で実装(実機版2号)
 ↓
グラフィックの豊井さん、サウンドのNinoさんと初めて会って打ち合わせ、いろいろ要望が出たので大きく変更することに
 ↓
プロトタイプから作り直す
 ↓
SFC実機へ移植(実機版3号)[作業中]

という経緯があり、ここまで2年ぐらい? いやあ、時間が流れるのって速い速い。そして製作は遅い。でも、流石にもうちゃぶ台返しはナシと決めていますのでこれでいきます。調整はしても変更はしない。
実機版の実装はコア部分がだいたい出来て一安心というところまできました。


パフォーマンスの話

以前にも書きましたがスーファミのCPUは初代ファミコンに毛が生えた程度で、当時でも高性能とは言い難い物なので、処理落ちを気に掛ける必要があります。ということで性能を計測したくなるわけですが、ここで走査線の位置を見るという方法があります。

スーパースローでブラウン管テレビの写り方を撮影するとどんなふうに見えるのか? - GIGAZINE

えっ、画面をカメラで……というわけではなくて、プログラムの中で走査線の位置を取得できるのでそれをメモリに書き込んでおいて、エミュレータのデバッガで見るという話です。当時のゲームは走査線を使ったトリックを実装していることが多いので、エミュレータはこのへんもしっかり再現しているわけです。

走査線のカウンタは以下のようなサイクルになっていて……

f:id:gyuque:20180129003555p:plain

0xE0 : VBLANK開始、走査線が画面の下端に到達して描画が終わる
 ↓  (この間はハード側の描画処理が休むので、VRAMに書き込めるようになる)
0xFF
 ↓ (オーバーフローして0に戻る)
0x00 : VBLANK終了、走査線が画面の上端に現れ次フレームの描画が始まる
 ↓  (この間はVRAMに書き込めないので当たり判定等のCPUだけでできる処理を行う)
0xE0 : 次のVBLANK開始、ここまでに当たり判定等の処理が終わっていないと処理落ちになる

…なので、処理が終わった時点でのカウンタ値が0xE0に迫ってきたらアルゴリズムかゲーム内容を見直さないといけないということになります。

実際に計測してみると、まず敵(ネコ)を1体も置かないときは……
f:id:gyuque:20180129005726p:plain
0x04程度。余裕ですね。続いて、3体投入すると……
f:id:gyuque:20180129005821p:plain
0x32程度。さらに、5体まで増やすと……
f:id:gyuque:20180129005901p:plain
0x4C程度。まだまだいける?と思いそうなんですが、ここで考えなければいけないのは、プレイヤーがネコに体当たりして魚を落とさせた後、ネコが魚に触れると取り返されるルールがあること。つまり、ネコ(多)-魚(多)の当たり判定という結構重い処理が入るので、5体全部が魚を落とした状態を計測。
f:id:gyuque:20180129010237p:plain
0x9C~瞬間的に0xA2ぐらい。だいぶ重くなりました。ということで余裕を見て5体がMAXという仕様にしておきました。プロトタイプ版は4体でテストプレイをしていたので、5体も出せれば目標以上ってことで。



という感じで牛歩のように、しかし確実に作っていますんで、今年こそは完成目指してやっていきましょう。
そういえば最近、ビックやらヨドバシに行くと立派なレトロゲーコーナーがあるじゃないですか。あるんですよ。といっても中古カセットは流石に無くて、互換機とか8BIT MUSIC POWERとかが置いてあるんですが、8BIT MUSIC POWERがOKってことはこれもいけそうじゃないですか。あそこに置くのを今年の目標としましょう。