Togetter/min.tを安心してお使い頂くためのガイドラインを公開しました。

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

ハドソンのアセンブラ&リンカas/lkとファミコンのメガROMとMMCの話
69
じぇみに @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
残りを読む(15)

コメント

pman(ふつう風5.9) @pman4416 2014年12月16日
初代スーパーマリオもメインルーチンはVBLANK割り込みの中に書かれてるようなので、コナミが特殊だったというわけでもないのかも
0
nekosencho @Neko_Sencho 2014年12月17日
うわあ、開発したくねえw
1
ぉざせぃ @hijirhy 2014年12月18日
ディスクの奴はカセットに比べて絵がショボい感じだったのはそういう理由だったのか。
0
岩崎啓眞@スマホゲーム屋+α @snapwith 2014年12月18日
追記すると、任天堂の四人打ち麻雀は多分256-128。飛田さんが「4人打ち麻雀の裏技でリセットした時にパレットの初期化の関係で一瞬裏バンクの文字セットが表示されてHUDSON SOFTの部分がM.TOBITAになるようにしてあるんですよ」と言っていたので、間違いないと思う。
1
岩崎啓眞@スマホゲーム屋+α @snapwith 2014年12月18日
知らない人のためにさらに追記。任天堂から発売された「四人打ち麻雀」の中身は当時ハドソンからあちこちのPC用に発売されていた「ジャン狂」の移植で、もともとはハドソンで発売する予定で制作されたが、任天堂から発売させて欲しいとの話で、タイトルが「四人打ち麻雀」になって発売された。
3
岩崎啓眞@スマホゲーム屋+α @snapwith 2014年12月20日
知らない人が多そうな予感がしたので、もちょっと追記。『さよならハドソン』で書いたけれど、ハドソンはもともとはCP/M上で動くSorcimの 1パスアセンブラ ACT-65 を使っていた。これは遅いうえに1パスなのでバイナリ生成に難があり、かつメガロム対応が厳しかったが、ほとんどこれしかなかったので、使われていたらしい。もしかしたら広野さんが使っていたのもコレだったのかも知れない。
2
じぇみに @jeminilog 2014年12月20日
snapwith それはたいがいの人が知らない気がします。
2
いっちゃん @icchan_s 2014年12月20日
今思えば、ファミマガにゲームの容量として、いくつ+いくつって表記されていたのは、プログラム用とグラフィック用だったのか…
0
ぉざせぃ @hijirhy 2014年12月22日
書き出しの「コンパイルでは」ってアセンブラの話だから所謂プログラミング用語のコンパイルだと思って読んでいたが、ソフトウェアハウスの名前だと今頃気づいた。
0
ぉざせぃ @hijirhy 2014年12月22日
しかし社名が「コンパイル」なのに使ってたアセンブラがハドソン製というのもなかなか面白い話だな。
1
じぇみに @jeminilog 2017年6月7日
最近「スーパーマリオは256-256ではなく256-64では?」という指摘があり、ググるとそっちの方が圧倒的なので、どうも私の勘違いらしい。訂正しておきます。(なんかで実験できりゃいいんだけど)
0
FX-702P @fx702p 2017年6月8日
デコではもともと業務用で6502を使っていたためか、ファミコンでもあまり聞いたことないそのアセンブラを使ってた記憶がある。
0