検索
<< 2023年06月 >>
1 2 3
4 5 6 7 8 9 10
18 19 20 21 22 23 24
25 26 27 28 29 30
広告
駿河屋レトロゲーム
最新記事
ブログランキング
にほんブログ村 ゲームブログ ゲーム制作へ
プロフィール
J-JSOFTさんの画像
J-JSOFT
高校時代、あれほど熱心に取り組んだMSXに触れなくなって30年余…。 MSXエミュレータとの出会いで、MSX愛が再燃中。
カテゴリーアーカイブ
ファン
QRコード

2023年06月30日

Laboratoryテーマ??6「自機に向かって飛んでくる敵弾」その?B




6_29_1.png

Laboratoryテーマ??6「自機に向かって飛んでくる敵弾」その?B、最終回です。
前回は、BASICで組んだサンプルを公開しました。
今回はBASICで組んだサンプルを基に、マシン語に組み直しました。
考え方とロジックはそのまま、マシン語化しただけです。

ただ、まったくBASICと同じだとあまり面白くないので、SPRITEとFONTを設定し、キャラクタを8×8ドットを16×16ドットに変更。
さらに、敵が弾を16発撃つようにしました。
さすがマシン語、これだけ弾出しても速度的には余裕ですね。(これでもまだウェイト負荷掛けてあります。)

BASIC部分のサンプルプログラムです。

「STSMPL.BAS」【 ダウンロード

6_29_4.png

変数表です。
昔は手書きでしたが、便利な世の中になったものです…。
6_29_5.png
因みに昔製作途中で終わった、「SPACE WARS」と言うシューティングゲームのSPRITEを流用しています。
ロジックも、そちらから必要な部分だけ抜き取り加工しています。

マシン語のサンプルです。
起動すると、STSMPL.BINを作成します。

「BINSET.BAS」【 ダウンロード

6_29_3.png

「マシン語の割り算」の8ビットで計算しきれず、「マシン語の割り算(16ビット版)」に変更した時に、処理速度が遅くなると書きましたが、これだけ弾出してても、特に処理速度的な問題はなさそうです。
今回の主な用途はシューティングゲーム等の弾道計算用なので、弾幕シューティングでもない限り弾道計算がそこまで頻発することもないので、大して問題にならないと思います。
(MSXではSPRITEの制限(横4個(MSX2は8個)以上でチラつく、同時表示32個まで(走査線割込み使えば対応可ですが))の為、弾幕シューティング自体を私は見たことがない…。)

因みに、ここまでできれば、4方向弾、8方向弾、16方向弾はすぐできます。
6_29_2.png
簡単なのでちょっと撃ってみた。


では、前回記事で書いた通り、ここで一旦Laboratoryは中断して3DダンジョンRPGの制作に専念します。 (2023年6月26日記事参照「 開発案件広げすぎ… 」)

再開後は、Laboratoryテーマ??7「水平ライン4枚(MSX2は8枚)を超えてSPRITEを表示させたい」です。
MSXのSPRITEの弱点に、同一水平ライン上に4枚(MSX2は8枚)以上並ぶと、それ以上のSPRITEが表示されなくなると言った仕様があります。
その対処方法として、市販ゲームではキャラクタをチラつかせて、完全に見えなくなるのを防いでいます。
このテーマは、そのやり方です。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年06月29日

Laboratoryテーマ??5「16ビットアドレス値の10進数表示」




6_30_1.png

さて、今回はLaboratoryテーマ??5「16ビットアドレス値の10進数表示」です。
16ビットアドレス(HLレジスタ)の16進数値を10進数値に変換して、指定の座標に5桁表示するサブルーチンです。

5桁表示の後ろに「00」を表示し、7桁にしてスコア表示していました。
色々なロジックがあると思いますが、私のやり方は単純に10,000の桁から10,000を引いて、引けた数をカウント、次に1,000の桁…とする単純なロジックです。
最大ループ数は10,000の桁=6、1,000の桁=9、100の桁=9、10の桁=9の計33回となります。
他にも、 HRAさん 紹介の2分法ロジックもありますが(最大値の半分ずつ引いていくロジック(10,000の桁なら6が最大の為、半分の30,000を引く))、プログラムが長くなるので私はこちらを使っていました。
それに、毎回最大ループする訳はないし、例えば表示する値が11,111の場合、断然こちらのロジックの方が早いです。
まぁ、一長一短ですね。

16進数を10進数に変換し、尚且つ指定座標に5桁表示するのサンプルプログラムです。

「10PTSMPL.BAS」【 ダウンロード

マシン語での計算結果と、検算用にBASICで単純計算した結果を列記します。
6_30_2.png

マシン語のサンプルです。
起動すると、10PRINT.BINを作成します。

数字表示用に5個8ビット変数を利用しているので、サブルーチンとしてアドレス変更する際は、そこの変更を忘れないように気を付けてください。(&HBF90:2ヵ所)




IN

OUT



HL

表示する値

なし




B

表示するX座標(0〜31)





C

表示するY座標(0〜23)





「10PRINT.BAS」【 ダウンロード

6_30_3.png
マシン語のサブルーチンとして必要なのは&HBF00~&HBF77までです。
&HBF80~&HBF8Fは表示元値を代入してサブルーチンコールします。

では、次回はLaboratoryテーマ??6「自機に向かって飛んでくる敵弾」その?Bです。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年06月28日

Laboratoryテーマ??11「マシン語の割り算(16ビット版)」




6_28_1.png

さて、今回はLaboratoryテーマ??11「マシン語の割り算(16ビット版)」です。
前回の「マシン語の割り算」では、割られる数が8ビット(0〜255)でした。 (2023年6月22日記事参照「 Laboratoryテーマ??3「マシン語の割り算」 」)
ただ、それでは大きい値の計算が出来ないので急遽Laboratoryテーマ??11として、「マシン語の割り算(16ビット版)」をテーマに新規追加しました。 (2023年6月27日記事参照「 しまった 」)
考え方は8ビット版と同じで、「8回ループ」を「16回ループ」に変更しただけです。
それに伴い、ビットシフト(ローテイト)が1回(8bit)で良かったところ、すべて2回(16bit)になったのでロジック長くなっています。

16ビット割り算のサンプルプログラムです。

「WARISMPL.BAS」【 ダウンロード

マシン語での計算結果と、検算用にBASICで単純計算した結果を列記します。
6_28_2.png

マシン語のサンプルです。
起動すると、WARIZAN.BINを作成します。

16ビットへのロジック変更の際、レジスタペア数が足りなかったので、2個16ビット変数を利用しているので、サブルーチンとしてアドレス変更する際は、そこの変更を忘れないように気を付けてください。(&HBF4C:3ヵ所、&HBF4E:3ヵ所)
変数使わない手もありますが、煩雑になるので楽で解り易い方法を選択しました。




IN

OUT



HL

割られる数

BC




B

割る数

HL

余り



「WARIZAN.BAS」【 ダウンロード

6_28_3.png
マシン語のサブルーチンとして必要なのは&HBF00~&HBF37までです。
&HBF38~&HBF4Fは計算元値を代入してサブルーチンコールします。

では、次回はLaboratoryテーマ??5「16ビットアドレス値の10進数表示」です。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年06月27日

しまった




6_2_1.png
Laboratoryテーマ??6「自機に向かって飛んでくる敵弾」のマシン語サンプル作ってて思い出しました…。
「三平方の定理」使って弾道計算するなら、「割り算で計算結果が小数点にならないように、16ビット演算しなきゃいけない」のをすっかり忘れてました…。

なぜ16ビット計算が必要なのかを、「テーマ??6「自機に向かって飛んでくる敵弾」その?@」での数字を使って説明します。 (2023年6月12日記事参照「 テーマ??6「自機に向かって飛んでくる敵弾」その?@
1移動当りの弾移動量を計算します。
Y方向 = 72(a)÷ 120(c)= 0.6
X方向 = 96(b)÷ 120(c)= 0.8

記事内のこの部分、これです。
マシン語は小数点を扱えませんので、小数点にならないよう事前に割られる数に「×100」若しくは「×10」しておく必要があります。
そのためには、8ビットだと0〜255までの値しか使用できないため、16ビットにする必要があるのです。
Y方向 = 7,200(a×100)÷ 120(c)= 60
X方向 = 9,600(b×100)÷ 120(c)= 80

「テーマ??6「自機に向かって飛んでくる敵弾」その?A」のサンプルBASICプログラムでは何も考えずに普通に×100を組み込んでいました…。 (2023年6月14日記事参照「 テーマ??6「自機に向かって飛んでくる敵弾」その?A
6_24_1.png

MSXプログラミングから離れて久しいので、8ビットの制約を忘れてました。
Windowsプログラミングだと、特に気にする必要ありませんからね…。
なんたって、マシン語で掛け算、割り算ができるし、マシン語使わなくても処理が早いので、ラジアン計算、三角関数(Sin、Cos、Tan)が普通言語で使えますからね…。

後日、16ビットの割り算サブルーチンLaboratryで公開します。

それと、実は私は自作シューティングゲームの弾道計算にこのロジックを使っていません。(おい。)
Laboratoryテーマ??9「32方向弾」の時に説明すると思いますが、処理速度と簡易性を重視した「なんちゃって弾道計算」ロジックを使っていました。
「なんちゃって」ですので、あまり人にお勧めできるものではないというのが正直なところですが。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年06月26日

開発案件広げすぎ…

4_19_1.png
最近、本業が忙しい…。

これからMSXでプログラミングを始める方(いるのか?)用に始めた「Laboratory」ですが、サンプルプログラム作りがなかなか厳しいです。
サンプルなので、適当に簡単なものを用意すればいいところを、なんか変なところに拘って制作に時間かかってしまう…。
ただでさえ会社からの帰宅時間が遅いのに、そこから更に遅くなって深夜まで制作していることも多くなってきました…。

しかも同時進行で3DダンジョンRPG制作もやっているので、一層遅れてしまう…。
うーん、一気にコンテンツ広げすぎました…。
ちょっと整理しますね。

Laboratoryはここで止めるのは切りが悪いので、テーマ??6までは進めます。
(サンプルプログラムがほぼ完成間近なので…。)
テーマ??6公開後、そこで一旦止めてゲーム制作に集中します。
(まぁ、MSXプログラミングの勘を戻すための習作として始めた3DダンジョンRPGですが、実のところLaboratoryのサンプルプログラム製作でほぼ勘は戻ってますが…。)
そしてゲーム完成後に、テーマ??7以降を再開することとしますね。

2023年06月25日

作品?H「平安京エイリアン」

次はこれ。
「平安京エイリアン」を作ってみました。
g27_t.png
■主な新テクニック
 ・復活時無敵モード実装
 ・移動方向を向く自機キャラクタを実装

前作で、やっとSPRITEを使ったのに、今作でまた使わないという…。
友人の依頼で懐かしいゲームを真似て作りました。
個人レベルの模写で、利益も得ていないけど著作権てどうなるのかな?
g27_1.png




タイトル

『 エイリアン 』

作品??

9



内容

街に現れたエイリアンを、自機を操作し穴を掘り、エイリアンが落ちたところを素早く埋めて退治して下さい。



操作方法

起動し、しばらくしてタイトルが表示されたら、十字キーでプレイヤー数を選択し、Aボタンで決定

2プレイヤーを選択すると、コントローラーの選択となりますので、それぞれのプレイヤーが使用するコントローラーのAボタンを押し、ゲーム開始

十字キーで、自機移動

Aボタンで、穴掘り

Bボタンで、穴埋め



対応機種

MSX1、MSX2、MSX2+

製作年

1988年



ダウンロード


ジャンル

アクション



ライセンス

平安京エイリアンは株式会社ハイパーウェアの登録商標です。





※ゲーム内のキャラクタ、音楽は制作当時の物です。

公開前提に製作していないため、雑誌等から流用している物もあるかも知れませんので、著作権侵害の恐れのあるものは、ご連絡をお願いします。


posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | MSX回顧録

2023年06月24日

細かく修正?E

4_19_1.png

前回修正から期間が空いたこともあり、結構な数、細かい改訂しました。

大きくは、「 ダウンロード 」に追加で新規公開したゲームやツールの記事へのリンク追加、「 Laboratory 」初回テーマメニューの公開分記事へのリンク追加。
リンク 」トップに「 ダウンロード 」同様、カテゴリメニュー追加。
リンク 」にHRAさんのホームページ追加、等々…。

それ以外は、画像の貼り直しや、記事の誤記の修正程度です。

2023年06月23日

Laboratoryテーマ??4「マシン語の平方根の求め方」




6_27_1.png

さて、今回はLaboratoryテーマ??4「マシン語の平方根の求め方」です。
マシン語での平方根の求め方の考え方とロジックは、HRAさんのホームページで詳しく解説されているのでご覧ください。

トップページから「MSX関連」—「Z80 Coding Tips」—「[2020年8月16日] Z80で平方根を求めるには?」にあります。

平方根の求め方のサンプルプログラムです。

「HEISMPL.BAS」【 ダウンロード

マシン語での計算結果と、検算用にBASICで単純計算した結果を列記します。
6_27_2.png

マシン語のサンプルです。
起動すると、HEIHOU.BINを作成します。

1個8ビット変数を利用しているので、サブルーチンとしてアドレス変更する際は、そこの変更を忘れないように気を付けてください。(&HBF87:3ヵ所)




IN

OUT



BC

平方根を求める値

A

平方根



「HEIHOU.BAS」【 ダウンロード

6_27_3.png
マシン語のサブルーチンとして必要なのは&HBF30~&HBF67までです。
&HBF68~&HBF77は計算元値を代入してサブルーチンコールします。

では、次回はLaboratoryテーマ??5「16ビットアドレス値の10進数表示」です。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年06月22日

Laboratoryテーマ??3「マシン語の割り算」




6_26_1.png

さて、今回はLaboratoryテーマ??3「マシン語の割り算」です。
マシン語での割り算の考え方とロジックは、HRAさんのホームページで詳しく解説されているのでご覧ください。

トップページから「MSX関連」—「Z80 Coding Tips」—「[2020年8月15日] Z80で除算するには?」にあります。

割り算のサンプルプログラムです。

「WARISMPL.BAS」【 ダウンロード

マシン語での計算結果と、検算用にBASICで単純計算した結果を列記します。
6_26_2.png

マシン語のサンプルです。
起動すると、WARIZAN.BINを作成します。




IN

OUT



A

割られる数

D




B

割る数

E

余り



「WARIZAN.BAS」【 ダウンロード

6_26_3.png
マシン語のサブルーチンとして必要なのは&HBF00~&HBF17までです。
&HBF18~&HBF27は計算元値を代入してサブルーチンコールします。

では、次回はLaboratoryテーマ??4「マシン語の平方根の求め方」です。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年06月21日

Laboratoryテーマ??2「マシン語の掛け算」




6_25_1.png

さて、今回はLaboratoryテーマ??2「マシン語の掛け算」です。
マシン語での掛け算の考え方とロジックは、HRAさんのホームページで詳しく解説されているのでご覧ください。

トップページから「MSX関連」—「Z80 Coding Tips」—「[2020年8月15日] Z80で乗算するには?」にあります。

掛け算のサンプルプログラムです。

「KAKESMPL.BAS」【 ダウンロード

マシン語での計算結果と、検算用にBASICで単純計算した結果を列記します。
6_25_2.png

マシン語のサンプルです。
起動すると、KAKEZAN.BINを作成します。




IN

OUT



A

掛けられる数

HL




B

掛ける数





「KAKEZAN.BAS」【 ダウンロード

6_25_3.png
マシン語のサブルーチンとして必要なのは&HBF18~&HBF2Fまでです。
&HBF30~&HBF3Fは計算元値を代入してサブルーチンコールします。

では、次回はLaboratoryテーマ??3「マシン語の割り算」です。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory
Build a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: