マシン語部分を無理無理MSXに打ち込み、MOLITORで逆アセンブルしてみた。P6の画面表示についてはよくわからないが、マシン語ルーチンを解読してみると、ゴキベーダー降下処理をやっているものと思われる。 http://t.co/XTJNuc7P
2012-01-07 21:43:39P6もMSXも同じZ80系CPUを使ってるから、基本のニーモニックは共通だろうということで、P6のマシン語サブルーチンをMSXで解読するという無茶ができるわけで。
2012-01-07 21:45:01@psyzans 間違いなく。ブロック転送でキャラクタVRAMを転送して最上位をスペースで埋めてるだけですねw
2012-01-07 21:47:16@snapwith ご教示ありがとうございます。25年近く前のアセンブリ言語のソースを見ただけですぐ判るとは! さすがスタープログラマー!(笑)
2012-01-07 21:50:49@psyzans @snapwith ブロック転送ナツカシス。LDDRなんて文字列見たの何年ぶりだろうかw
2012-01-07 21:56:23@psyzans 古すぎて全然データがないんですが、32バイト離れてるんで、横32キャラで、$E3DFあたりが右端1キャラ分上のVRAMエンドで、LDDRで転送してるんだとw
2012-01-07 21:59:38@snapwith おおよその見当は付きましたが、こちらはP6のVRAM関連の知識が全くないため、厳密にどういう挙動をするか、掴みきれないところがあるのですw
2012-01-07 21:59:42@snapwith @psyzans 誰でも!ってそりゃ無茶な…と思いつつ、LDIRじゃなくてLDDRを使っているところがミソですね。コピー元と先の領域が重なってる時に使う命令だったっけ。
2012-01-07 22:01:01@yoshimatsuTUQ @psyzans 逆スクロールで上から下にモノが降りてくるから、下から上にコピーしないといけないので、LDDRなんですw ニコニコに動画があるので確認出来ますね。画面サイズが結構ナゾなのが唯一の問題です。$1c0ではどう考えても足りない。
2012-01-07 22:02:44@yoshimatsuTUQ @snapwith @psyzans 確かスクロールはLDIRじゃダメでLDDR使ってたな。もう20年以上前のことだから忘れちゃった・・・・・・。
2012-01-07 22:04:12@snapwith @yoshimatsuTUQ リストにCONSOLE 0,16,0,0の記述があるので、16行しか使ってないようです。つまり仰るとおりというわけです。
2012-01-07 22:06:19@snapwith @psyzans 0x1c0=448だから、32x14ですかね。うわ、小さい。P6知らないけどこんなもんでしょうか。20Hで埋めてるのも32だから合ってるはず…。
2012-01-07 22:07:00@yoshimatsuTUQ @snapwith 最下段2行に自機を表示するので、14行分スクロールさせてるみたいです。これではっきりしました。(0,0)-(32,13)に表示している内容を一段下に下げ、最上段をスペースで埋める処理ですね。皆さんご教示ありがとうございます!
2012-01-07 22:10:02TweetDeckがまともにリプライチェーン辿れなくなっているせいでブロック転送の話題が追えない…。twitter社まじで死ね。
2012-01-07 22:10:07@psyzans 16行「しか」でなくて初代P6のテキスト画面は32文字×16行っす(1文字が8×12ドットなので)
2012-01-07 22:12:40Z80のディスアセンブルコード見たら脳みそが反射的に最適化始めようとした件。20年ぐらい前に夢中になってた事にまだ身体が反応する…。
2012-01-07 22:14:02@yunyundetective ぶっちゃけLDDRもパフォーマンス悪いですよ。メモリ使っていいなら、全然速く出来る…(;´ω`)
2012-01-07 22:14:03