Making「ASALT」その5

Home PC-6001mkII Program etc

 このページでは、次Verの実装過程を書いています。

Making「ASALT」 Top


2010/02/18〜25:地味に削減
 前回の更新から1ヶ月半が経とうとしているが、実はほとんど進んでいない。これまで作成したマシン語ソースを見直すも、一部処理内容を忘れている始末だ。

 これではいけない。という事で、処理の思い出しがてら、マシン語のサイズ削減に取り組んでみる。
 何度かソースを見直すと、同じ処理を何箇所かで行っていたので、一つにまとめてみる。後は、いくつか命令の置き換えを行う。
変更前変更後
HL(アトリビュートのアドレス)からキャラクタのアドレスに変換
INC H
INC H
INC H
INC H
SET 2, H
A(符号付8ビットデータ)をHL(符号付16ビットデータ)に展開
LD L, A
LD H, 00H
ADD A, A
JR NC, P_MoveUD2:
DEC H
P_MoveUD2:
LD L, A
ADD A, A
SBC A, A
LD H, A

 こうして一週間ほど地味に削減していた結果、マシン語部分が1503バイト→1447バイトと56バイト縮まった。

 そろそろ次の段階に行ってモチベーションを上げていかないとなぁ。

2010/02/27〜28:グレネードステータス
 グレネード部分の作成を始めてみる。まずはステータスから。

 スペースキーを押し続けるとステータスが00H〜06Hまでの間+01H、ステータスが01H〜07Hの時にスペースキーを離すと+10H っと。
 ステータスの状態が大まかにわかるように画面左上にステータスの値を出してみる。なんか開発中画面っぽいな。まあ開発中で間違いはないんだけど。

画面

 ところが、ステータ変更処理を進めたところでなぜかマシン語が暴走するようになった。まだプログラムワークに数バイトコピーしただけなのだが...。

 よくよくソースを見直すと、mkII自身のワークエリアを壊していた模様。mkIIのマニュアルによると、ワーク領域の開始番地はドライブ:1、ファイル数:0でF77FH。なんと、マシン語プログラムとも領域がかぶっていたよ。今までよく動いていたなあ。

 という事で、マシン語とプログラムワークの開始アドレスを少し前にずらす事にする...とりあえず現状の動きまでに戻った。

 後は、ステータスの変化部分のみを作成する。まだ画面の左上でキャラクタがクルクル変わるだけだが、脳内ではグレネードが発射されている。

2010/03/01〜03/03:グレネード表示その1
 とりあえず、グレネードの照準移動とグレネード自身の部分を実装することにする。

 前回はステータス部分の枠組みを作ったが、この状態ではまだ大まか過ぎて、描いた部分が消しきれずにゴミになったりする。という事で、時に微調整しつつステータスの変化を割り振っていく。

 色々試行錯誤した結果、現在のところ以下のように動作を割り振っている。
スペースキーON/OFF → グレネード消去 → グレネード移動/描画 を繰り返す形だ。
処理ステータス動作
スペース
キーON
00-09Hステータス:+01H、方向キーの入力無効
何もしない
スペース
キーOFF
00-0AHステータス:+10H、方向キーの入力無効
何もしない
グレネード
消去
00H何もしない(グレネード移動/描画もスキップ)
01Hグレネード照準初期化(自機から4つ分移動)
ステータス:05H
05-0AH
(02-0FH)
(02-04H, 0B-0FH は無し)
グレネード照準の消去
15-1AH
(10-1FH)
(10-14H, 1B-1FH は無し)
ステータス:+14H(1AHの場合のみ+13H)
グレネード照準位置と消去色コピー
グレネード位置初期化
グレネード照準位置の色変え
20Hグレネード照準の消去
21-2DHグレネード消去
30H-
(2EH-)
(2E-2FH は無し) 未作成
グレネード
移動/描画
05-09H
(00-09H)
(00-04H は無し)
グレネード照準移動、グレネード照準描画位置
の色退避、グレネード照準描画
0AHグレネード照準描画
20Hグレネード爆発範囲色退避(未作成)
ステータス:30H
21-2DH
(0B-2FH)
(0B-1FH, 2E-2FH は無し、20H除く)
ステータス:−01H
グレネード移動、グレネード描画位置
の色退避、グレネード描画
30-37Hグレネード爆発(未作成)、ステータス:+01H
38Hステータス:00H

 これでようやく爆発前までだがグレネードの表示ができるようになった。

画面


 あとはグレネードの爆発パターンを作らなきゃ。

2010/03/05〜03/13:グレネード表示その2
 続いて、グレネードの爆風だ。

 多少描画範囲が広くなる事と描画パターンが複数になる点は異なるが、それ以外は爆発以前の処理とそう大きくは変わらない...はずだ。

 前に途中まで作っていたマシン語ソースを元に処理を書き進める。ステータスはこんな感じになっている。
処理ステータス動作
グレネード
消去
30H何もしない
31H-37Hグレネード(爆発中)消去
グレネード
描画
20Hグレネード爆発範囲色退避、ステータス:30H
30H-36Hグレネード(爆発中)描画、ステータス:+01H
37Hステータス:00H

 ソースコピー後の修正ミス等あって多少悩んだが、これでグレネードの爆発表示までできた。

画面

 まだちょっと爆発のパターンに修正の余地があったり、まれに消しきれないゴミが残るのだが、おいおい直していく事にしよう。


その4 Making「ASALT」