たいにゃんさんのSeeNaロジックかいせつ

SeeNaロジックについてまとめました
53

SeeNaロジックについて

たいにゃん @bugnekotinyan

前かいたかもしれないけどSeenaロジック

2016-07-05 06:21:27
たいにゃん @bugnekotinyan

まず、Seenaのマップは64x64=4096なので、このなかに平均2割のブロックがあるとして800個のポリゴン処理は、当時のマシンではきついと判断して処理方法を変更。 視点からブロックにぶつかるまでサーチして、ブロックのとの距離をもとめます

2016-07-05 06:23:09
たいにゃん @bugnekotinyan

ブロックの高さはすべておなじなので、後ろのブロックが見える可能性が無いのでサーチはそこで打ちきれます 距離が求まったら、高さが計算できるので高さと面の色をテーブルに保存しておきます。 このとき、 pic.twitter.com/VLPjv7Va8V

2016-07-05 06:24:37
拡大
たいにゃん @bugnekotinyan

表示エンジン側では、テーブルをもとに、縦の長方形で塗りつぶしていくことで処理を高速化します。 基本的に同じ命令なのでループにせずに展開しとび先を変えることで多少速度を稼ぎます pic.twitter.com/iSzXOGgdT0

2016-07-05 06:26:27
拡大
たいにゃん @bugnekotinyan

このとき、バイト単位で処理できるように2つセットでしょりします。 色1で高さ11、色2で高さ7を塗るときは、 色1と透明で4回、色1と色2で7回処理することでまとめて処理します pic.twitter.com/TXH0kPRtpb

2016-07-05 06:29:31
拡大
たいにゃん @bugnekotinyan

また、マップは64x64ですがリニアにはとらず、64バイトのあとは192バイト未使用で256バイト先から続きをつかいます。 これで、HレジスタがY座標LレジスタがX座標となりシフト処理が不要になります pic.twitter.com/5cHLWmrZPj

2016-07-05 06:30:57
拡大
たいにゃん @bugnekotinyan

ブロックサーチの際は、ブロックが無いエリアはとばすわけですが、これもHLレジスタから有り無しがすぐ判断できるので 小数点以下を保持しているDEレジスタを使うことなく処理できます pic.twitter.com/qduwsDT1mB

2016-07-05 06:33:37
拡大
たいにゃん @bugnekotinyan

とはいえ、ブロックがない所をとばすのにも処理なりのクロックはかかるため、 SeeNaでは、表示物が少ないほど演算処理が重くなります。 何もない所でも透明で毎回上書きしてるので、描画処理はほとんど変わりません

2016-07-05 06:35:44
たいにゃん @bugnekotinyan

ちなみに、マップそのものの変化は少ないため、無印8801では、演算処理をDISKがわのCPUにやらせて、結果の高さと色情報のみを受け取っています。 マップと処理プログラムをおくぐらいのメモリーはあったのです。

2016-07-05 06:38:33
たいにゃん @bugnekotinyan

あと、88は1画面しかVRAMがないので、プレーン0とプレーン1を交互に使ってパレットを変更することでで書き換えが見えないようにします

2016-07-05 06:40:38
たいにゃん @bugnekotinyan

パレットを変更する関係上確か使える色は5色か6色だったきがします。 メイン画面は、青背景に、黄色と、1行おきの黄色で灰色を表現していたと思います。のこりのプレーンをつかって、ちまちましたものをだしていたかな

2016-07-05 06:43:29
たいにゃん @bugnekotinyan

それではエッチなことを研究するので、今日はこのくらいで~

2016-07-05 06:44:47
たいにゃん @bugnekotinyan

ちなみにシーナの正しい表記はSeeNaです。 Nを小文字で書く人には、 SmallTalkと書いて反撃するからね

2016-07-05 07:06:09
たいにゃん @bugnekotinyan

追記 あとサインコサインのテーブルは、 360/256度のうち、32こだけもってあとは反転とかして小数点以下の分は直線補完してたとおもうけど、512バイトぐらいだったら、持った方がよかったんじゃないかと今は思うのです そんなにメモリーぎちぎちだったのか

2016-07-05 07:15:50
たいにゃん @bugnekotinyan

マップは32x32だったような気がしてきた いい加減するな自分

2016-07-05 08:55:57

PC-8001のセミグラフィックでも実現可能?

いくた♥️なお/伊奈緒たく美/土東J42b @ikutana

@bugnekotinyan もしかして、8001のセミグラフィックとかでも実現可能?

2016-07-05 06:40:22
たいにゃん @bugnekotinyan

解像度的には実はそれほど変わらないのでいけそうなきもするけど、あの変態セミグラは強敵かと @ikutana

2016-07-05 06:41:17

プロテクトについて

たいにゃん @bugnekotinyan

SeeNaプロテクトというか簡易暗号化部分 add sub xorを使う簡単なものでしたが、diskごとにどれをつかうかとソルトの値は乱数で、 この復号部分のプログラムのバイナリ値を使って一部データを復号するので、簡単なパッチでは別diskに適用できぬくくなってたはず

2016-07-05 07:25:54
たいにゃん @bugnekotinyan

一部トラックは変則的な単密度フォーマットにしてあり、読み込もうとすると、コントローラーがハングアップする確率が高く、 これは単にコピーツールを作ってる人へのいやがらせでした ゲーム中にはもちろんそのトラックにはアクセスしません

2016-07-05 07:29:03
たいにゃん @bugnekotinyan

あと、ダミーのfatとかいれてあり、NEC純正のbackup.n88だとこぴーできて遊べるようにしてあったのも、 コピーツール作者に、散々苦労しなくてもできちゃうんだよ、ご苦労様、けけけ というメッセージでもあったのです

2016-07-05 07:32:17
wizforest @wizforest

@bugnekotinyan 質問です。 diskごとにソルトがランダムだったというのは、市販品が1つづつ、複製の際に違うものにしてあったということでしょうか?

2016-07-05 09:05:20
たいにゃん @bugnekotinyan

1枚ずつ、システムソフトでプロテクトかけましたにゃ @wizforest

2016-07-05 09:09:51