ソーサリアンの移植時の解析で分かった技術を解説するサイト 37
ストーリー by nagazou
解析 部門より
解析 部門より
ファルコムのPC-8801mkIISR版「ソーサリアン」をX68000シリーズ向けに移植した経験を持つPI.氏。この移植はあくまで個人の範囲内で独自に行ったものだが、同氏はその過程で得られた種々の技術を解説するページを公開している。基本的にはPC-88の内部構造やプログラミングの知識を持つ方向けの内容となっているが、解析により判明したこぼれ話、秘話なども含まれており、一般のソーサリアンファンも楽しめる内容となっている(ソーサリアン~内部解析からわかったこと~ by PI.)。
tamaco 曰く、
tamaco 曰く、
mdxで実機からコンバートしたFM音源の曲でよくお見かけしたPI.氏の記事。X68000,FM-7,PC-8801FAなどのエミュレータなどもあります。技術的に読ませる良記事
こういうのでいいんだよ (スコア:4, すばらしい洞察)
久々にスラドで読みたい記事が読めてtamacoさんに感謝。
Re:こういうのでいいんだよ (スコア:5, 参考になる)
ありがとうございます。
当時自分でもSorcerianやYS1/2辺りは結構解析していたので、あるある~って楽しく読めた記事でした。
簡単な専用ファイルシステムを使っていて、曲を示すクラスタ番号から音楽を吸い出して、Mucom88 [onitama.tv](当時はMusic LALFとか、同人版Splitと呼んでいました)で再生していました。
参考:作者の古代祐三さんの解説 [youtu.be]
ファルコムのSorcerianやYSの音楽ドライバは、厳密には古代さんのMucom88ではなく、同じデータを再生できるようファルコムの橋本さんが作ったもののようですが、Z80のインデックスレジスタIXをFM音源、IYをSSGに使用するよう、リアルタイムでコードの自己書き換えやっており、すげーコードだなと感心した覚えがあります。
知人がX1を持っておりSorcerianがOPM対応であることに気付きました。当時PC88FH+SB2ユーザーだった私は、PC88で動く専用ドライバ作成して(たしかIXレジスタを2回コールしてFM6音に対応させたんだと思う)、高校の学際で見せびらかしてた微笑ましい思い出がありました(X1版の方がPC88版に比べ音が拡張されていた)
とにかくPC88/X1の時代は面白かったですね。FDCなどサブシステムを扱う解析記事も雑誌などで豊富であり技術的好奇心を満たせるものでした。
その後のPC98では処理速度は上がりましたが、ディスクアクセスもInt1Bhばっかりで、つまらなくなりました。さらにWindows3.1/95時代以降はハードウェアを直接叩くこと自体が困難ですしね。
80年代後半はPCやアーケードゲームなども、とにかく日進月歩で技術革新が進む良い時代でした。
Re:こういうのでいいんだよ (スコア:1)
ソーサリアンの設計技術はマジですごいな
Re:こういうのでいいんだよ (スコア:1)
追加シナリオ作成したほかのソフトハウスが褒めてましたね
プラットフォームとしても練られてるそうで
Re: (スコア:0)
この頃の少ないリソースでいろいろ上手くやる工夫って、よくそこまで考えるよなぁと思いますよね。
FDDヘッドのシーク時間を考慮したデータのセクタ配置の話とか。
#ソーサリアンじゃなくてイースだっけ?
Re: (スコア:0)
>FDDヘッドのシーク時間を考慮したデータのセクタ配置
純正でキリキリ調整すると、サードパーティ製ドライブでタイミング違うので
そっちで動作させた場合逆にエライ時間がかかる、なんてことも今は昔。
リソースやりくり、デバイスの裏技駆使する箱庭感は面白かったですねぇ
中村光一氏のニュートロンでの木を蹴っ飛ばしたときの画面の揺れとか
CRTCのクロックパラメタをいじってたのかな?
ああいうのはエミュレートできるのだろうか。再現苦労すると思う。
Re: (スコア:0)
セクタサイズまで変えて大容量化してたのもあるな
2Dで400KB位にしてた
(*´ω`*)
Re: (スコア:0)
セクタサイズかもだが、ギャップ小さくして増やしたのでは?
フロッピいじるのも楽しかったですね手近なエレメカでした
ゲーム本体よりプロテクト外しが面白かったり。
# 鳴り物入り?で登場のozawaチェッカは大したことなかったなぁ
Re: (スコア:0)
2Dはセクタサイズ1KBにすると1トラックに5セクタ入って80トラックで400KB
ちな標準はセクタサイズ256Byteで1トラックに16セクタ
ギャップ削るのはやったことない
Re: (スコア:0)
Write OnceならGapいらないですよね。
ゲームには適していたかもしれません。
Re:こういうのでいいんだよ (スコア:2)
みんな、98時代しか記憶にないだろうけど、88SRは結構大変だったので。
このテクは風の伝説ザナドゥでも発揮されてたような。
Re: (スコア:0)
1980年代後半はそこのソフトハウスの技術水準も上がっていたことがそんなに憎らしいかね。
Re: (スコア:0)
当時ゲームの画面を見て「自分でマシン語で作れるか」を結構やってた。
ソーサリアンなんかは頑張ってみようとも思えいくらいのレベルだったけど、
できたものもいろいろあったし「どこのソフトハウスも…」とまでは思わないな。
Re:こういうのでいいんだよ (スコア:3, 興味深い)
どこのソフトハウスだったか忘れましたが、
新人で入ったら、3日(1日だったかな)でZ80のニーモニック覚えろ
と言われたという話があったように、アセンブラができて当たり前の時代でしたね。
私は、プロテクト外すためにZ80 のアセンブラを覚えました(てへ)
お金がなかったので、自分でアセンブラを作ったなー。
その当時はアマチュアでプログラム組んでいましたが、
自己書き換えや、ディスク側のCPU を使うとか、普通にやっていましたね。
今では通用しないプログラム技術ゆえ、こういったことは、忘れ去さられていく話なんでしょうね
Re:こういうのでいいんだよ (スコア:1)
> 自己書き換えや、ディスク側のCPU を使うとか、普通にやっていましたね。
CRTCのアンドキュメンテッドな挙動やPC8801のFDD側のCPUが使いこなせるかどうかでもソフトハウスの淘汰がありました。
またとにかくメモリがきつかったので圧縮技術でも差がついたし、BGMの乱れがないとか「できて当たり前(だが結構難しい)」のことができるところは消えていきました。
Re: (スコア:4, 興味深い)
補足。その昔、FDDは外付けだった。PC98の頃でも、3.5in FDD を外付けってのも珍しくはなかったが、
この頃は外付けFDDにマイコンをひとつ載せて(8049とか8051もあったかな)、そいつに765の面倒を見させてた
PC88世代ではすでに、FDD側もZ80にして、そこそこRAMも持たせて、
プログラムをダウンロードして自律的に実行できるようになってた
アセットをFDに詰め込むためには、セクタサイズを大きくすべく、765を直接操作するのは避けて通れない知識だった
メインZ80との間は双方8255で、8bit x3. ハンドシェイクの設計も使いこなしの範疇だった
Re: (スコア:1)
自作のゲームで8255でハンドシェイクしてとかやってたけど何かの本を丸々コピーしてたのでなんとなくしかわかってなかったなぁ。めちゃくちゃ読み込みが速くなって感動した。あとはインターリーブで高速化とかも。
Re: (スコア:0)
お前は俺じゃない
俺は、試算といっても帰ったりせず、時分秒のわかる女がいい
Re:Re: (スコア:0)
自分は88のDOS作りました
一番の目玉はFATとディレクトリはディスク側にキャッシュ、蓋開け検知してパージかな
この機能は88の他のDOSでは見たことない
ソーサリアンにディスクキャッシュが入っていてちょっと驚き
Re: (スコア:0)
今さら聞けない: その蓋開け検知は、ポーリングですか?
Re: (スコア:0)
割り込みの機能がないのでポーリングです
SubのCPUは暇なので、MainのCPUからのコマンド受信待ちループ内でやってました
チェックするだけでアクセスランプが光るので、頻度をさげています
Re:こういうのでいいんだよ (スコア:1)
まあ一度世に出ると逆アセンブルで解析されて技術を調べられたり(ファミコンもこれがなければサードパーティーという概念がなかったかも)
ソフトハウスが知り合い同士で技術教え合ったりツールをコピーさせてもらったりとか、そういう時代でしたね。
Re: (スコア:0)
ざっと思いつくだけでもキャリーラボ、テクノソフト、アルシス、ゲームアーツ、風雅システム、T&E、そういったところがあるわけだが。
1980年代には技術力のないところはかなり淘汰されてたんよ。
Re: (スコア:0)
お前、ビクター音産にも同じこといえんの?
Re:こういうのでいいんだよ (スコア:1)
読んでとても懐かしかった。
pushとpopで画面書き換えとか当時は目からうろこで感動したよ。
Re:こういうのでいいんだよ (スコア:1)
pushを1ライン分40個並べて塗りつぶし幅に応じて途中に飛び込むとか、DDA [wikipedia.org]とか、ブレゼンハムのアルゴリズム [wikipedia.org]は結局除算を引き算の繰り返しでやっていることになるので、短い直線とかでなければ先に明示的に除算したほうがいいとか、定数での乗除算の最適化とか、そういう話が雑誌によく載っていました。
Re:こういうのでいいんだよ (スコア:1)
そういう話の元ネタは、コンピュータ科学のちゃんとした教科書だったり、DDJ [wikipedia.org]やBYTE [wikipedia.org]といった洋雑誌だったりしました。
当時は大学生がアルバイトでゲームを作ることがよくありました。
Re: (スコア:0)
ブレゼンハムのアルゴリズムで線分を描く場合
for x from x0 to x1 with increment inc // 修正
if steep then plot(y,x) else plot(x,y)
// increment により描画順序が制御される
error := error - deltay
if error < 0 then
Re: (スコア:0)
> pushとpopで画面書き換えとか当時は目からうろこ
わかる。
パソ通も夢の話で、月イチのASCIIとI/O、そしてZ80入門とかしかなかった時代。
PUSH, POPってサブルーチンでのレジスタ退避以外に使う発想がなかったです。
XOR A,Aぐらいしか知らなかった。
過去の木屋氏とか古代氏のツイートとも合致する部分多し (スコア:3)
Re: (スコア:0)
というか件のページが実に古い時代の黎明期テキストサイト的フォーマットで懐かしくなった。インターネッツ考古学ページで学ぶオールドPCゲーム考古学って感じだ。
Re: (スコア:0)
2000年前後、液晶ディスプレイ利用者がこんな感じの色使いをしていたな。
ブラウン管だとどぎつい配色なんだが、当時の液晶ディスプレイ低性能だとキレイにみえるという。
リアタイで読んでた (スコア:1)
いっちょプロテクトでも外したれ(→未遂)っていって読んでいったら、
最序盤からきれいにモジュール化されてて唸った記憶がある
BGMエンジンまでは読破したかな、あのときの知見は間違いなく今でも自分の基本に近いところにある
最近の若い子なら、そういう経験は、githubでするんだろうな
Re: (スコア:0)
技術に明るい知り合いが、当時やっぱり解析してましたね。
上のソースで軽く触られてる魔法構造を教えてくれて、独自魔法とか作ってた覚えがあります。
# 魔法の飛び方、弾の形、魔法の効果、効果のある敵の種類、消費魔力ってデータだった