ファミコンメガロムの開発とPCエンジンのアセンブラ

ハドソンのアセンブラ&リンカas/lkとファミコンのメガROMとMMCの話
71
じぇみに @jeminilog

ああ、余談。コンパイルではIR80とかいうアセンブラを使ってて、これ本来Z80用なんだけど、マクロ機能が強力だったので他のCPU用のアセンブラをでっちあげる事が出来たのです。

2014-12-15 21:49:54
じぇみに @jeminilog

さすがに16bit以上のCPUは無理だけど。定数が扱えないから。それにあくまで64KBのメモリ空間が前提なので、メガロムを直接扱えないのね。分割してどうにか辻褄合わせるしかなかった。(Z80用のメガロム対応のアセンブラって結局当時あったの?)

2014-12-15 21:50:01
じぇみに @jeminilog

他にないので最初はそれで6502のアセンブルをしてた。いや純正の6502のアセンブラもあったんだけど1パスアセンブラなのよ。リンクできないの。私そっちを使ってたんだけど、微妙に不便。IRも一種のスクリプトみたいな感じでアセンブルするから速度が遅い。

2014-12-15 21:50:08
じぇみに @jeminilog

ところが! 実は本来は6502用じゃない、ある機材用のアセンブラが設定変更すると6502用に流用できる事が判りまして! しかもメガロムにも余裕で対応! 具体的に言っていいのかどうか判らないのでボカすけど、あれは真剣に助かりました!

2014-12-15 21:50:15
じぇみに @jeminilog

それ作った所に足を向けて寝られないソフトハウスはいくつもあるかもしれない。そんな思い出。

2014-12-15 21:50:24
じぇみに @jeminilog

@fujitanozomu 需要はあったはずですからねえ。6502アセンブラはきっと貴重。

2014-12-16 01:07:31
岩崎啓眞@スマホゲーム屋+α @snapwith

@jeminilog それはハドソン版のASのことですねwwww ハドソン版のASは飛田さんが元はファミコン用に書いたもので、それをPCエンジン用に修正したわけですが「公式の開発キット」には、ファミコン用のオプションが含まれていませんw

2014-12-16 13:13:32
岩崎啓眞@スマホゲーム屋+α @snapwith

当時を知らない人のために説明すると、当時ハドソンのエースプログラマの1人だった飛田さんがファミコン用にアセンブラとリンカを一から作る。それがasとlk。これは後にPCエンジン用に改修される。やはり名前は変わらない。(続く

2014-12-16 13:15:53
岩崎啓眞@スマホゲーム屋+α @snapwith

このときハドソンはPCエンジンが主力なので、ファミコン、すなわち65c02モードがサブの扱いになり「ファミコンモード」でアセンブル&リンクすることになった。つまりハドソンの社内のASとLKは「ファミコンとPCエンジンの両方に使えた」。(続

2014-12-16 13:17:32
岩崎啓眞@スマホゲーム屋+α @snapwith

ところが、サードパーティにNECから渡されるキットが「ファミコンでも使えます」では困るので、NECから渡される公式バージョンはファミコンモードが潰してある。なので、as/lkは「ファミコンも開発できるハドソン版」と「PCエンジンしか開発できない公式版」があったわけだ。(続

2014-12-16 13:19:07
じぇみに @jeminilog

@snapwith そうでしたか!あれは真剣に役に立ちました。なんせ元がメガロム前提なので、「同じ物理アドレスのプログラムが同時に存在できる」とか「物理アドレスと論理アドレスが別」とか、その機能が有るとないとで開発効率にめっぽうな差が!

2014-12-16 13:19:15
岩崎啓眞@スマホゲーム屋+α @snapwith

そして当時ハドソンに合宿にくるようなサードパーティにハドソンが渡していたのは、ハドソン版だったので、コンパイルが持っていた版はファミコンにも対応していたわけであるw もちろんメガロム対応、MMC対応だ。という25年前のトリビアであったw(終

2014-12-16 13:20:45
岩崎啓眞@スマホゲーム屋+α @snapwith

そしてこういう話を書くと、僕はファミコン版の初代桃鉄を作っていた時、MMCのバグを発見して任天堂に電話して、対策を聞いてブチ切れていた25年前の飛田さんを思い出すのであるw いや、まああんなこと言われたらブチ切れるよねw

2014-12-16 13:22:05
じぇみに @jeminilog

@snapwith MMC1の話だとすると、うちでは石丸君の編みだした、ROMの各バンク先頭に数値を書いておいて、ためしにバンク切り替えて正しい数値が見えたら正解、間違ってたら正しくなるまでやり直すっていう力技を聞いていますが、その辺りでしょうか?

2014-12-16 13:25:29
岩崎啓眞@スマホゲーム屋+α @snapwith

@jeminilog まさにソレです。飛田さんはブチキレてましたw

2014-12-16 13:25:58
岩崎啓眞@スマホゲーム屋+α @snapwith

飛田さんがブチキレてのは88年だから26年前か・・・w 思えば遠くへきたもんだw

2014-12-16 13:26:52
じぇみに @jeminilog

@snapwith バンク数値をシリアルにしたのはいいけど、書き込み中にNMIで割り込まれるのを想定してなかったみたいですね。それ以後任天堂のメガROMで、数値のシリアル書き込みは2度と使われる事はなかったという・・・(完)

2014-12-16 13:29:28
岩崎啓眞@スマホゲーム屋+α @snapwith

@jeminilog そして初代ゲームボーイではデータの消える通信が登場するわけですよw

2014-12-16 13:31:28
じぇみに @jeminilog

@snapwith あれはもう最初はどーしてやろうかと(どうにかしたけど通信速度がだいぶ落ちた)

2014-12-16 13:34:12
岩崎啓眞@スマホゲーム屋+α @snapwith

@jeminilog 僕はボンバーボーイをゲームデザインするとき、全く知らず脳天気にリアルタイムバトルを入れて、本当に心の底から後悔しましたwww

2014-12-16 13:34:54
じぇみに @jeminilog

@snapwith こないだの、最終的に表示じゃなくて通信基準でシンクロさせたっていう、あれですか。

2014-12-16 13:36:26
じぇみに @jeminilog

@snapwith あのハード、通信するのにとんちが必要でしたね。任天堂ではどうやってたのやら。

2014-12-16 13:39:03
じぇみに @jeminilog

さっきの会話の補足。ゲームボーイの通信に関しては2月くらいにもやってるので省略しといて、メガロムの話。MMCってのは任天堂の純正のメガロムの規格で、1、3、5とかがある。2や4は社内のみで使って外には出してない模様。(ファミコンウォーズが2だっけかな)

2014-12-16 17:27:41
じぇみに @jeminilog

ただこれが任天堂最初のメガロムって訳じゃなくて、UN-ROMってのがあった。1メガのROM(単位はbitなので128KB)と64KのRAM(同じく8KB)を組み合わせてある。後にROMが2メガのUM-ROMも出たそうだ。

2014-12-16 17:27:49
じぇみに @jeminilog

そもそもファミコンはメガロム登場前には64-64、128-64、256-64があった。前の数値がプログラム部、後ろの数値が画像部。ファミコンはもともと画面に出てくる各種キャラクタは固定(ROM)のみで、プログラムとこみでカートリッジに載せてる仕様だった。

2014-12-16 17:27:58