とわ君に独り言2(痛)

MSXやエレキギターが好きなおっさんの戯言。妻が白血病で亡くなり、3人の子供達と暮らしてます。昔のブログ→id:TOWA0104

■雑記&更新記録■〜追記の嵐〜(古いのは削除していきます)

●2024/1/7●MSXハード&修理にリンク追加

 

■未発表記事複数数年放置中…■

●2023末まで●BASIC高速化にファイル関係追記。PLAY文記事でのVコマンドについて勘違いがありそで削除。PLAY文関連にPLAY(0)に関することを追記※PLAY文の分解能を少し超えていると感じた方法を追記(間違ってたらすんまそん)/高速化メモに2つの定数を交互に繰り返す比較的速めの方法を追記/アリスソフトリンク追加/嘘縦横スクロール資料に動画複数追加/※Z80マシン語秘伝の書リンク追記💦高速化記事のNEXTに関し訂正と追記

●5/17●1枚絵は更に迷走↓

●4/27●1枚絵迷走中💦↓

●4/20●1枚絵網掛け色々実験中↓過渡期

●4/5●1枚絵は地獄の手動網掛け開始😔

●2023/3●1枚絵現状↓

●2/23●MSX1枚絵実験描き直し中。↓

●2/17●SCREEN2の仮絵4:3でなくてボツ↓

●2/4●落札した9インチポータDVDが届いた(画質良好外部入力4:3対応で大当たり)

●1/11●MX-10用ACアダプター落札したら断線していたでござる💦トホホ

●1/9●プレステコントローラ風グリップを手作りしようとしたら、百均のスマホスタンドがピッタリだったので、これで我慢

●1/6●MX-10を修理し7インチポータDVDに乗せたら可愛い過ぎて処分中止(尊い❤)動作確認5台目完了!まだまだ沢山💦

※このブログは資料置き場のような物なので、日常の雑記はあまり増やしたくないのでこんな感じで呟くページが1つあれば無駄にコンテンツ増えずに良いかと…

■MSX-FAN 一画面プログラムの切ない思い出■〜2(痛)悪霊の神々〜

■10代の頃の投稿しなかった一画面プログラム達の成仏企画第二弾っ!■

●16×16ドット単色スプライトエディタ「キャラつく」●

・ジョイパッド十字キーで移動しボタン1でドットを置くだけっ!
ではなく、
ボタン3+方向キーでキャラの色(+左)やキャラの背景色(+右)変更や全消去(+下)も可

あぁ、こりゃ全然ダメだ…もっさりしててストレスが…
当時は良くこんなの使ってたなと思います…💦
※初期設定が16×16ドット拡大表示なので、
通常サイズにしたい時はSCREEN1,3を
SCREEN1,1にしないといけないし…

●あまりの酷さに、少しブラッシュアップ●
もっさり感を下げるため過去に調べた高速化考察も参考にしつつブラッシュアップしてみます。
高速化考察→https://onl.la/tqSxQ8U
 まず、サブルーチンが重すぎるので見直し、LとRの変数使った計算式を変数使わずVPOKEに統合
更にサブルーチンを前に持ってきて
初期設定の大半を1番最後に持って行き細かいとこも修整。
他に、ボタン1の消耗を避けるためにボタン1と3の機能を逆転。

うーん…、ほんの気持ち快適になった程度かなぁ…
これ以上は根本的な構造(文字列を変換しまくる部分)を変えないと難しそう。

(その前にREM文消しなさいよ)

もう少し短いプログラムにして、昔増やすつもりだった機能(左右反転とか)も付けたいとこなので、もし創ったら追記します。

案外面白かったので、他の大昔のプログラムのブラッシュアップやバージョンアップも良いかも。

これでまた可愛いいプログラムが1つ成仏出来たかな。

◆たまに追記修整するかもです◆

■MSX関連自己資料+α目次■自己過去資料リンク&おまけリンク&無料ゲームダウンロードリンク

MSXリンク集■→https://onl.bz/vFDejpK

■MSXゲーム裏技集■オマケ▽作者不明

アリスソフト無料ダウンロード■
http://retropc.net/alice/menu.html
■勝手移植ドラゴンクエスト3
https://q3lemon.web.fc2.com/


◆↓以下私の過去資料リンク↓◆
〜〜「MSX BASIC入門 ゲーム制作 番外編」〜〜
    (たいした内容では無いよう…)
■BASIC高速化■→https://onl.bz/eRXC6vM
■フォントの変更(建設予定地)→
■似非スクロール■→https://onl.bz/cQZycaW
■スプライトダブラー■→https://onl.bz/cPCefct
■"PLAY文"■→https://onl.bz/ghCKjGg
■小技裏技その他■→https://onl.bz/i7VWNK8

〜〜「MSX BASIC入門 ゲーム制作 本編」〜〜
■簡単準備編■→https://onl.bz/1yGgkXK
■スプライト表示■→https://onl.bz/2UFJhAx
■スプライト説明■→https://onl.bz/2bAXGMZ
■建設予定地■→

〜〜一画面プログラム関連〜〜
MSX-FAN 一画面プログラムの切ない思い出■
 →https://onl.bz/nsN2Xqg
■続編②→https://onl.la/tGhvaL1
■番外編■→https://onl.bz/YSsbRqi
■番外編②(建設予定地)→
MSX BASIC入門 ゲーム制作〜簡単準備編■
 →https://onl.bz/1yGgkXK

〜〜MSXの市販ゲーム関連〜〜
MSXジャンル別おすすめ名作ゲーム■
 →https://onl.bz/zMsHmiH
MSXミニに収録したいソフト■
 →https://onl.bz/Nh3U3fP

〜〜MSXハード関連〜〜
■MX-10■→https://onl.la/LawTA2V

〜〜雑記〜〜
MSX雑記〜追記の嵐〜■d:id:FujiiMar:20230103
■近況とコロナ禍とタワシ(タワシ関係ない)■
 →https://onl.bz/YWX23hS
■近況とコロナ禍とカカシ(カカシ関係ない)■
 →https://onl.bz/zcMish1
MSXの未来を勝手に考える■
 →https://onl.bz/i75X1bm

■ついでに昔のブログ■→id:TOWA0104
※各資料をより簡潔に修整し、リンクも極力減らし使いやすくしていきます。

■MSX資料&リンク集■MSX BASIC入門 ゲーム制作〜番外編〜

■進数変換ツール■→https://onl.la/nCBFC94

◆16&2進◆カラーコード◆カーソル◆トリガー◆
0=0000⬛ 0=透明・・ _[812] 0=スペース
1=0001⬛ 1=黒・・・ _[703] 1=ポート1A
2=0010🟩 2=緑・・・ _[654] 2=ポート2A
3=0011🟩 3=明るい緑 ・・・3=ポート1B
4=0100🟦 4=暗い青・ ・・・4=ポート2B
5=0101🟦 5=明るい青・
6=0110🟫 6=暗い赤・・
7=0111🟦 7=水色・・・
8=1000🟥 8 = 赤・・・
9=1001🟧 9 = 明るい赤・
A=1100🟨10=黄色 ・・・
B=1011🟨11=明るい黄色
C=1100🟩12=暗い緑-・・
D=1101🟪13=紫(マゼンタ)・
E=1110 ▓14=灰色・・・
F=1111⬜15=白・・・・

◆VRAM構成-簡易資料◆アドレス_名称_総バイト数
〜●SCREEN 1●〜〜16KB分〜〜
🟩0000-07FF🟩パターンジェネレータ----🟩800h_2048b
⬛1800-1AFF⬛パターンネーム・・_--⬛300h_768b
🟩1B00-1B7F🟩スプライトアトリビュート🟩80h_128b
⬛2000-201F⬛カラー・・・・・_-⬛20h_32b
🟩2020-203F🟩パレット・・・・_-🟩20h_32b
⬛3800-3FFF⬛スプライトジェネレータ_-⬛800h_2048b
〜●SCREEN 2●(SCREEN1.5多色刷)〜16KB分〜
🟦0000-17FF🟦パターンジェネレータ__🟦1800h_6144b
⬛1800-1AFF⬛パターンネーム______⬛300h_768b
🟦1B00-1B7F🟦スプライトアトリビュート🟦80h_128b
⬛1B80-1B9F⬛ パレット_________⬛20h_32b
🟦2000-37FF🟦カラー____________🟦1800h_6144b
⬛3800-3FFF⬛スプライトジェネレータ_⬛800h_2048b

■VRAMマップ■▽サイバラさん

べーしっ君
◆MSXべーしっ君資料◆▽up-c all さん

■エミュ■MSXPEN→https://msxpen.com/

■msx datepack wiki■💦▽にゃごすさん
■テクハン wiki■💦▽にゃごすさん
■各種資料■msx-magazine.comさん
■MSX JAPAN▉ふうせんさん

MSX-BASIC命令一覧■
◆msx datepack wiki◆▽にゃごすさん他
◆(現状COLORまで)◆msx-magazine.comさん

Z80マシン語秘伝の書■💦日高徹さん書
https://archive.org/details/Z80MachineLanguageTec/mode/1up

■Mマガ、Mファン、バッ活目次等■
◆MSXMAGAZINE記事目次◆▽
★MSXMAGAZINEPDF★💦海外

◆MSX-FAN記事目次等◆GJwiki▽
◆付録FDDB◆▽et_levinさん→https://onl.la/QN1n7LG
◆M-FANarchive◆💦→https://onl.la/Y7tNYjU
◆archive◆💦https://onl.la/paEAgxR
◆ファンダム掲載リスト◆→https://onl.la/eLHrpcP

◆バッ活目次◆→https://onl.la/b3Ww3Lc
◆バッ活目次◆▽→https://onl.la/1hE44WF

ポケットバンク ◆→https://www.msx.org/wiki/MSX_Pocket_Bank

■MSX BIOS BOOK■海外

■画像関係■
◆スプライトエディタ◆「S・S・T」「何とか庵」本名荒井さん(MSX-FAN92年9月号付録ディスク収録)

◆スプライトエディタ◆▽「Tiny Sprite」
◆スプライト&PCGエディタ◆「99x8Edit」宮内悠介さん
 →https://onl.bz/kBxfhq9
◆MSXDS◆http://msxds.msxblue.com/download-jp.html

◆ペイントツール◆「piroPAINT 9918」
(2023/4/11※ニューファンキー小林さんにTwitterで教えて頂きました。)

◆画像変換◆「ビットマップコンバータ」TINY野郎さん
◆画像変換◆「BMPtoMSX」HRAさん
◆画像変換◆「画像変換ツール集」 Mynaさん
◆画像変換◆▽海外サイト→https://onl.la/KgXRFJ7

◆旧MSX風パレット◆うにスキーさん
 →https://onl.bz/f3vJRTj

サウンド
MMLエディタ◆→http://cat2151.github.io/MML-editor/
◆PSG for WEB」◆▽Shingo Minagi さん
 →https://www.minagi.jp/playpsg/
FM音源VSTi紹介◆RykSeb(硫化西部)さん
 →http://ry.ldblog.jp/archives/6321254.html
◆PSGに関してのブログ◆→https://onl.la/fEQe2yX


■ハード■
MSX資料◆→https://onl.la/C1srag6
◆MX-10◆私のブログ→https://onl.la/LawTA2V


■自作プログラム公開■
◆自作ゲームをネットで販売する方法【ゲーム制作】◆▽ドッド工房さん

■MSXゲーム裏技集■オマケ▽作者不明


これは昔自分が作った一画面キャラエディタ画像↓

■リンクを快諾頂いた、
TINY野郎さん、HRA!さん、うにスキーさん、本名荒井さん、宮内悠介さん、ふうせんさん、Mynaさん、RykSeb(硫化西部)さん、及びリンクフリーの方々と情報を頂いたニューファンキー小林さんに感謝致します。■
※連絡取れずリンクを貼った方々、削除が必要でしたらご連絡を頂けたら幸いです。

■近況とコロナ禍とタワシ■(タワシ関係ない)

随分と更新をしていないので、何をしていたかと、作りかけのプログラムを紹介しときます。

●何をしていたか(プログラム以外で)●
・父子家庭なので、コロナ禍で子供達の世話でアップアップだった…。
(※現在、次男坊が濃厚接触者になってしまい、家族4人で自宅待機中…トホホ)
・大量の書類の申請
(ほとんど子供達の物ですが、健常者と自閉症と知的障害で全て窓口が違ったり、3人別々の学校だったりで大量にある)
書類の作成を進めている。
・百均やネット通販でキャンプ用品を揃えてあり、子供達と家キャンプ(庭ないので屋内)をしている。
ゆるキャン△を子供達と見ている。
・百均の物を使って、キャンプに使えそうなローテーブルを子供達と作っている。
・オクで1300円で落としたジャンクのエレキギターを使って、子供達用の小さなエレキギターを子供達と作っている。

って感じです。


●何をしていたか(MSXのプログラム)●
べーしっ君で縦スクシューティングゲームを創っている。
スマホアプリでキャラクターを大量に創っている。
・DSのM−01というソフトでゲーム用の曲を創っている。(BASICに組込むのがなかなか上手くいかず)
・昔々に創りかけたBASICでの簡単な3D迷路表示プログラムをいじっている。
・昔創ったキャラクタエディタをブラッシュアップしている。

と、こんな感じです。
飽きっぽいので、皆同時に進行していて、
なかなか進まないです。
更にどんどん創りたい物が増えて行き、
ゴチャゴチャになってます。

※キャラクタエディタは、昔創った物をベースにいじっていたら、肝心な部分を含む元データを削除してしまい作り直してます。
更に、配列を使った物やVRAMに直接読み書きする物等様々な方法で、量と速さがどれが効率的か複数用意して探ってます。

シューティングゲームはいくつもサンプルを創ってますが、仕様が定まらず迷走中。
(本やブログも見てますが、敵キャラの出現テーブルを詳しく解説した物ってほぼ無いですね。)

※キャラクタは100キャラ以上創ったのですが、常に追加で書いてます。

※曲創りは、2トラックのループで成立する物を創っていますが、BASICに落とし込むのが上手くいかず一旦停止中…。

※3D迷路表示は、自分の昔のプログラムを解析している段階です。


◆まぁ、そんなこんなで生きてます。◆
(更に、MSXの本体が10台を超え、ソフトが100本超えたので、元気な時にでもヤフオクで放出しようかと画策中!)
ここのブログは、日記では無く自分用又は娘用のデータベースのようにしたいので、この記事はそのうち削除するかもです。

■MSX BASIC入門 ゲーム制作②■スプライト表示をザックリ説明!

本題
◆娘のためのBASIC入門講座第2回っ!◆

■スプライト表示の説明■
前回最後に入力したプログラムをザックリ説明します。

10 SCREEN1,1
20 A1$=CHR$(&B11111111)
30 A2$=CHR$(&B11111111)
40 A3$=CHR$(&B11111111)
50 A4$=CHR$(&B11111111)
60 A5$=CHR$(&B11111111)
70 A6$=CHR$(&B11111111)
80 A7$=CHR$(&B11111111)
90 A8$=CHR$(&B11111111)
100 SPRITE$(0)=A1$+A2+A3+A4$+A5$+A6$+A7$+A8$
110 PUTSPRITE 0,(99,99),5,0

■↓ここからザックリ説明

●10行●(初期設定)
「SCREEN1,1」

最初に覚えた最大横32×縦24マスのSCREEN1の後に「,1」が追加されています。
この部分はスプライトの機能の設定で、
・0だと縦横8✖8ドット表示
・1だと縦横8✖8ドットの拡大表示
・2だと縦横16✖16ドット表示
・3だと縦横16✖16ドットの拡大表示になります。
今回はデータが少なく1番扱いやすい、縦8マス横8マスの四角いマス目のような物を2倍に拡大する指定をしています。
(ドットとは画面上の1番小さな1つの点で、ピクセルとも言います)

●20〜90行●
「20 A1$=CHR$(&B11111111)」
から90行までの似たような8行分

キャラクターの画像データの準備
1行横8マス(ドットと言います)で8行分の画像データを用意しています。(8✖8マスの64ドット分)

※20行の「A1$=」は、A1$という文字列を入れられる箱のような物の中に、=より後の文字データを入れる「変数」という物で、
文字を箱の中に入れる場合は、アルファベットや数字の組合せに$を付けて表記します。
(必ずアルファベットで始まり、文字数は基本2文字までです)
30〜90行は残りの箱(変数)のA2$〜A8$を登録(定義)しています。
(変動する可能性がある数値を入れる箱が変数)

●100行●(画像データを登録)
「SPRITE$(0)=A1$+A2$+A3$+A4$+A5$+A6$+A7$+A8$」
キャラクターの1行づつの画像データを1つにまとめスプライト番号0番に登録(定義)しています。

●110行●(スプライトを表示)
「PUTSPRITE 0,(99,99),5,0」
「5」の部分は色の指定で、前回説明しているので飛ばします。
・書式の決まり事は以下の通りです。

PUTSPRITE■,(■,■),■,■

こういう形だと覚えましょう。
※■は各数値や変数



■今回詳しく説明していないこと■
・&B
2進数と言う数の考え方を使う時のおまじないです。
・CHR$
文字をキャラクタ番号で表す方法の1つです。

■新しく学んだこと■
・「$」のついた文字型の変数
・「SCREEN」の2つ目の数値の意味


■まとめ■
予想以上に長くなり難しいので、今回はここまでとします。
次回こそは動かして行きましょう!

〜〜「MSX BASIC入門 ゲーム制作 本編」〜〜
■簡単準備編■→https://onl.bz/1yGgkXK
■スプライト表示■→https://onl.bz/2UFJhAx


◆時折、追記修正します◆

■MSX-FAN 一画面プログラムの切ない思い出■〜番外編〜

■今回は、去年創った子供達用の一画面プログラムをメモっときます。■※基本的に全て未完。

30年以上前に創った1画面横スクジャンプゲーのデータがご臨終していたので、代わりに新しく子供達に遊んで貰えそうな物を創ったのが始まりです。


●ジャンプマン●(縦スクジャンプゲー)

・「飛ぶ髭のおっさん」を操り、雲の上へ上へと何メートルまで行けるかだけの、終わりのないジャンプゲーです。
飛んでいるハエに当たらぬようドンドン上に行きましょう。

どうやら、ONSPRITEGOSUBは何故かたまに反応しないようで、ゲームには使いづらいです…。

※娘が、「私もゲームを創りたい」と言い始めるキッカケになりました。
(^v^)
コンパイルDS収録の「ジャンプヒーロー」が好きな娘に簡単なもどきゲーをと思い制作しました。


●ジャンプマン2●(横スクジャンプゲー)


・「飛ぶ髭のおっさん」を操り、ブロックを右へ右へと何メートルまで行けるかの、終わりのないジャンプゲーです。


↑どうやら旧バージョンのようなので、そのうち差し替えます。
(スクロールの速さとか違うパターンが数種類あるので、どれが最終版かわからなくなってる…)
スーパーマリオ系が得意な知的障害の次男坊のために創り、思惑通りハマってくれました。(娘には不評でしたが…)
(#^^#)

慣性も無く8ドット移動で単純ですが、子供達にはそれなりに喜んで貰えました。
( ´∀`)/


■良く見ると両方共キャラが「アレ」っぽいですが、気のせいです…
悪魔でも天使であっても、「飛ぶ髭のおっさん」です…。■

◆今回のプログラムを子供達用に創ったことにより、またMSXBASICを始めるキッカケとなりましたとさ。◆


◆気まぐれに加筆修正するかもしれません◆

■"PLAY文"のMML等音に関すること■MSX BASIC入門 ゲーム制作〜番外編〜

※2023/6/22追記※すぐにMIDIサウルスに移行したのでPLAY文(MML)は超苦手…

MML■(BASICのPSG用ざっくり)
●T(テンポ,BPM,曲の速さ)32〜255
●V(ヴォリューム、音量)0〜15●L(音長)1〜64
●.(ピリオド、音階や休符の長さを3/2倍にする)
●R(休符、無音長さ指定)●O(オクターブ)1〜8
●CDEFGAB(音階)音階名の次に#や+で半音上げ−で半音下げ
●N(数値での音階直接指定)0〜96
●S(エンヴェロープ形状指定,波形)0〜15
●M(エンヴェロープ周期指定) ●X(文字変数)
●=■;(数値変数による指定)※■は数値変数名

MMLエディタ◆http://cat2151.github.io/MML-editor/

■以下資料殴り書き■

●※PLAY文が終了する時に1カウント分余計な空白が入るバグがある(FS-A1GTのみ修正されているらしい)●→http://takumi-cb.com/column_2/004.html

●BASICの分解能でまともに使えるのは、
テンポ180位で16分音符位が限界っぽい💦
(※が、Sコマンドを使うとVコマンド使えずスラーが難しいが、テンポもう少し上げてもある程度行けた…分解能の壁を少し超えられた可能性あり)

●同じ音を別々のチャンネルで鳴らすと干渉してしまうので行ってはならない。2023/6/23追記(※ポケットバンク2マイコンジュークボックスより引用)

●PSGの初期化をするBIOSアドレスは&h0090で、BASICからは「DEFUSR0=&h90:U=USR0(0)」等で呼び出せる。←※2023/6/22追記分


●Nマクロで変数を使う方法。●
(意外と忘れるのに必要な時資料がみつからないw)
10 ■=♣
20 PLAY"N=■;"
※■は変数名、♣の部分は定数や変数や計算式で0〜96の範囲の指定(10進数<16進数で速い)
※昔創った一画面ジャンプゲーで、左右に往復する雲キャラのX座標と自キャラのY座標を使い、
別々のトラックで短い1音づつを鳴らし、BGM兼効果音に使いましたが、短い音1音づつ位でならギリゲームとして成り立ちました。
SCREEN1のジャンプゲー等で8ドット移動の場合、
Y座標をNマクロに変換して鳴らすと、
ジャンプしたときに徐々に音が高くなり降りて行くと徐々に音が低くなるのでジャンプ感が出ました。(このジャンプゲーはデータがご臨終です😢)


●●PLAY文のループのズレを少しでも改善●●
・変数を使わず、直接データを指定
・変数を使う場合はプログラムの最初の方で「A$=""」などで予め変数の格納場所を確保してほんのわずかスピードアップ。
・FOR〜NEXT文でループさせず極力展開する。
・1小節位の最後の音長や休符を短めに設定し1小節が全音符にならぬよう少し短くする(説明が正しいか疑問…💦)

※「ポケットバンク2マイコンジュークボックス」からの抜粋ですが、タイミングの狂いを目立たせなくするテンポの数値が、
T32,T64,T96,T128,T192,T255
だそうです。(仕組みはわからんちん)

・データの末尾から最初に戻すような時は、
「IF PLAY(0)=0 THEN ■」等を使うより、直接ワークエリアが「0」(鳴っていない)かを「IF PEEK(&HFB40)=0 THEN ■」で確認した方が速い。(※2023/10/18検証済)

●●PLAY文で嘘ドラム音を鳴らす●●
・1トラックでエンヴェロープを使い、疑似的ドラム音を出します。(なんちゃってバスドラ&スネア音です。)

昔、ショボい(🤫し〜っ)MSXFM音源で色々工夫していた中の1つの方法で、複数の音色を重ねて別の音色として使ったり、同じ音色の高低で別の楽器と捉えたり、キック(バスドラ)の足りない低音を別の楽器の低い音を一瞬鳴らし補ったりしました。
(その時考えた方法達は、アナログシンセエミュ等への応用で後々重宝しました☺️)

はい、PLAY文に応用してみます。
短い周期の低めの音をバスドラ代わりに鳴らし、1オクターブ上位の音をスネア代わりに鳴らしてみると、ほらドラムっぽく聞こえるでしょ?
(多分、きっと、恐らく、かもしれない、だったらいいな…)

10 PLAY"T128L■S1M475"
20 PLAY"O3C O4C O3C O4C"
30 GOTO20
(■の数値は4,8,16辺りからお好みで)

はい、ショボいですが
「ドッパッ、ドッパッ」にはならなくとも、
「ポッタッ、ポッタッ」位には響きます(響いたってことで💦)まぁ、無いよりましです。
MSXのゲームで、こんな感じの音出してるの色々あった気がします。
▲エンヴェロープを使うため、音量指定の「V」マクロが使えないデメリットがあります。
※この場合、10行のPLAY文に
「:SOUND6,1:SOUND7,&B10110000」
を追加すると、ノイズが乗りもう少しだけドラムっぽくなった気がするかもしらませんw(追記)

●●音色数少ないのをやりくりする●●
・同じトラックの高低の音を別の楽器として扱う。
・トラック数少なくて成立する曲で勝負する!?
個人的には、反復する呪術的なシンセベースと単調なハンマービートに、金属音やノイズが乗るような初期のエレクトロニック・ボディミュージック(EBM)の方法論が相性良いと思いました。

●●自作ゲーム内で簡易的にBGMを鳴らす●●
・ON INTARVAL命令を使う
特定のタイミングである程度の音数を鳴らす、簡易ドライバ的なあれ的なそれ的なコレ的な?
※サンプルプログラム創りかけたら、
b.p.sさん作のBGMを鳴らす素晴らしいプログラムが公開されてました→http://bps-basic.blogspot.com/2016/04/bgm.html?m=1
(これは超オススメです)←※2023/6/22追記分
・きちんとしたドライバを自作する。(う〜んっ、無理しんどい)
・MuSICAやDM-SYSTEM2等々の既存ドライバを…。(嫌ですwなんでやねん🫲)


◆いつか、簡単な16分割のリズムボックスとかでも創ろうかなと考えてます。

BASICのゲームでPLAY文のBGMを鳴らすのは、正直かなり厳しい部分があるのですが、何とかならないかなぁと考えています。(FS-A1GT以外はPLAY文のバグがあるのせいか、かなりテンポがズレるし…)

◆オマケ資料◆
O4~O5のSOUND文16進音階データ
O4C=1AC
O4C#=194
O4D=17D
O4D#=168
O4E=153
O4F=140
O4F#=12E
O4G=11D
O4G#=10D
O4A=0FE
O4A#=0F0
O4B=0E3
O5C=0D6
O5C#=0CA
O5D=0BE
O5D#=0B4
O5E=0AA
O5F=0A0
O5F#=097
O5G=08F
O5G#=087
O5A=07F
O5A#=078
O5B=071
※O5Cであれば0D6でSOUND1,0:SOUND0,&HD6となります。

◆Nコマンド簡易対応表◆(建設中)
※※※※※※| o1|o2| o3| o4| o5| o6| o7| o8|
□□ B= |11| 23| 35| 47| 59| 71| 83| 95|
■■A♯|10| 22| 34| 46| 58| 70| 82| 94|
□□ A= | 9 | 21| 33| 45| 57| 69| 81| 93|
■■G♯| 8 | 20| 32| 44| 56| 68| 80| 92|
□□ G= | 7 | 19| 31| 43| 55| 67| 79| 91|
■■F♯| 6 | 18| 30| 42| 54| 66| 78| 90|
□□ F= | 5 | 17| 29| 41| 53| 65| 77| 89|
□□ E= | 4 | 16| 28| 40| 52| 64| 76| 88|
■■D#| 3 | 15| 27| 39| 51| 63| 75| 87|
□□ D= | 2 | 14| 26| 38| 50| 62| 74| 86|
■■C♯| 1 | 13| 25| 37| 49| 61| 73| 85|
□□ C= | -- | 12| 24| 36| 48| 60| 72| 84|
※※※※※※| o1|o2| o3| o4| o5| o6| o7| o8|

サウンドツール■
◆PSG for WEB◆▽Shingo Minagi さん
 →https://www.minagi.jp/playpsg/
FM音源VSTi紹介◆RykSeb(硫化西部)さん
 →http://ry.ldblog.jp/archives/6321254.html
◆PSGに関してのブログ◆→https://onl.la/fEQe2yX
MMLエディタ◆→http://cat2151.github.io/MML-editor/
◆MSXPLAY◆(要対応データ)→https://msxplay.com/


■小学校高学年位時に、ファミコンディスクシステムソフトの「オトッキー」でトップガンという映画の曲を耳コピで音符入力してから数十年、
シーケンサーを使うようになった現代に、またPLAY文を復習するなんてとても不思議な感じですが、やはり苦手でした💦■

■他にも思い出したりしたら、追記修正します。■

■MSX BASIC 高速化考察■MSX BASIC入門 ゲーム制作〜番外編〜

●2023/10/8※2つの数値の交互繰り返し追加●
MSXは電気羊の夢を見るのか?〜
本題(※たいした内容では無いよう)
■MSXBASIC速度アップの方法を探ります。■「TIME」変数で検証もしています。

●BASICの構造によるところ●
プログラムを1回実行すると分岐命令(GOTOなど)の飛び先行番号が実アドレスに変換されるので2回目以降は若干高速化する。(ごりぽんさんのツイートより引用)

●変数●
・変数に0代入が複数ある場合、「CLEAR」文を先に入れれば全ての変数を0に速く定義出来る。
 (※「CLEAR」文は変数の型宣言(DEFINT等)より前に置かなければいけない縛り有り)
・「DEFINTA-Z」等で変数の整数型宣言を行う(確保するメモリも削減)
 (※「RND」を使う場合は個別に「INT」を付けないと何故か遅くなる)
・よく使う変数は、早めに初期値定義(メモリ前方はアクセスが速い)
・無駄な変数を減らす
 「T=STRIG(■):IF T THEN 〜」なら、
 「IF STRIG(■) THEN 〜」に変更
 (変数Tを他で参照しない前提なら)

●計算式●0と1の繰返しは、
 A=0^A
 A=A XOR 1
 A=1-A
 A=-(A=0)
 IF A THEN A=0 ELSE A=1
の順に速い。(↑※b.p.sさんのツイートより引用)

・変数を使い違う数値を交互に繰り返す場合
 「SWAP A,B」のように予め用意しておいた数値を入れ替えた方が更に速い場合が多い。

●記述に関すること●
・「:」を使い1行により多く詰める。
・「REM」や「`」を使わない。
・変数名を短くする。(1文字が1番速い)
 例:それぞれXY値を示す変数名を、XY,EF,MN等雰囲気が似た物にしたり、方向ボタン検出の変数はSでトリガ検出の変数はTにしたり、自分で予想しやすい物にすると便利。
・扱う数値を極力速い物にする
 整数型の0〜9が1番、10〜255が2番目に使用メモリも少なく速度も速い。(※MSX-DatapackのP258参照)
 0〜9>10〜255>256〜32767の順に速い
・メインルーチンやサブルーチンをプログラム前方に置く。(メモリ前方はアクセスが速い)

●「LOCATE」や「PRINT」●
・「PRINT」文末尾に「;」を足す。
 (※文字列を接続し表示する場合「;」や「+」を使うと遅くなる。)
・「LOCATE0,0:PRINT"■";」より、カーソル位置を左上にする「PRINTCHR$(11)"■";」が速い。
・「LOCATE ■,■」のX座標が0なら「LOCATE,■」と省略。(状況によっては使えない場合あり)
・「LOCATE■,■:PRINT"■";」と「VPOKE■,■」では後者が速い。(※一文字限定)
・カーソル位置から改行を行う場合「PRINT」が速い

●アドレス指定●
※「PEEK」「POKE」「VPEEK」「VPOKE」等アドレス指定をする場合、10進数より&hで始まる16進数で指定した方が速い。
(中間コードの関係なのか?ちょっと驚き)

●スプライト●
・PUTSPRITEとVPOKEだと、VPOKE1つまでならPUTSPRITEより速い。

●IF文●
・空白を削減し詰めて記述
 「IF A>7 THEN A=0 」を「IFA>7THENA=0」に
・「IF〜THENGOTO■」(■は行番号) を「IF〜GOTO■」に省略。
・「IF〜THEN〜ELSEGOTO■」を「IF〜THEN〜ELSE■」に省略。
・変数と定数を比較する場合、定数を前にした方が速い!(2023/3/1追記※b.p.sさん検証ツイートより)
 「A<16」は「16>A」の方が速くなる。

●FOR〜TO〜NEXT●
・繰り返しの処理を展開し、「FOR〜NEXT」文を極力使わない。
・「TO」の前後の数値も、当然0〜9や10〜255の数値に収めると、僅かに速くなる
・「NEXT ■(変数名)」は、変数名を省略すると速くてメモリ節約
・「NEXT■:NEXT■」又は「NEXT■,■」は、
「NEXT:NEXT」の方が速い(■はFOR文で使われているそれぞれの変数名)2023/6/16訂正

●「GOSUB」●
・サブルーチンを極力展開
(当然サブルーチンへの往復分速くなる)
・GOSUB RETURNの行き帰りより、GOTO2回の方が速い。
・「GOSUB RETURN」で呼び出す良く使うサブルーチンは若い行に置くとアクセスがわずかに速い。

●ファイル関係●
・VRAMへのデータ書き込み
 BASIC上でVRAMデータを書き込むよりも、BSAVEされたVRAMデータファイルを読み込んだ方がデータ量が多い程速い。
・ファイルのセーブのロード時間は、ASCセーブよりBINセーブの方がかなり速い(b.p.sさんツイートより抜粋)

●一部の乗算式の展開●
 乗算より加算が速い場合がある。
 「A=A×2」は「A=A+A」とした方が速い(3倍以上は逆に遅くなる)

●各演算子等を置き換える●(※2023/4/6書きかけだった別記事より転載)
・S=STICK(0) OR STICK(1)や
 T=STRIG(0) OR STRIG(1)等の処理は、
 「OR」を「+」に置き換えると
 メモリ節約兼スピードアップ
(▲しかし両方押された時に挙動がおかしくなる)

●自キャラ8方向移動プログラムではどの方法が速いか?●
①「ON〜GOTO」を使う方法
②XYそれぞれの計算にMID$を使う方法
③IF文羅列
④1画面プログラムで多用された、論理演算子を使う方法
と、いう順に処理が速い。
(※使用状況に応じて変わる可能性有り)
※何処かのブログでON〜GOTOとMID$の比較再検証&再確認をして下さった方がいました。感謝🙏

●PLAY文●
・PLAY(0)より、PEEK(&HFB40)の方が速い。(※2023/10/18検証済)
MMLは音階指定する「O1C」や直接数値で指定する「N64」(Nコマンド)等は速度ほぼ同じ



●描画は、画面を非表示中にすると速い


★以下は全て未検証の課題★

▲割り算は「/」より「¥」が速いのは
変数の型宣言後でも意味があるのか?
▲「IF A=A<(定数や変数)AND A>(同じ定数や変数)THEN〜」を「<>」や「><」等に変更する。
例:「IF A<>(定数や変数) THEN〜」等に変更。
▲「LOCATE■,■:PRINT"■";」よりも、「PRINT"Y)●●■";」の方が速いのか?(XY座標が定数のみ)


■まとめ■
意外な結果も多く、色々検証した方が良さそうです。
検証をしていると、BASICインタープリタ内での挙動が何となく見えて来るような気がします。(えっ、しない?)
※一定条件下での検証ですが、1つの指針としての有用性はあるのではないかと思います。
(10代後半の時に、BASICで一画面シューティングゲーム作ろうとして調べた時の記憶頼りだったり、複数一度に検証しメモ取り忘れたりしたので、再検証しないといけない物もあるかも…)

※間違いがありましたらご指摘をお願い致します🙇

◆他にもあったら教えてエロい人◆

◆予告なくのんびり検証しつつ加筆修正整等します◆

■簡単な嘘縦横スクロールを考える■MSX BASIC入門 ゲーム制作〜番外編〜■

※番外編は自由課題(大した内容では無いよう…)
本題
■簡単で簡易的な手抜き嘘スクロールを考えてみました。(SCREEN1や1.5ベース)■

↑これは後半で

●縦に星が流れるような嘘縦スクロール●
・8 ドット(1文字分)嘘縦スクロール

↑残像だらけ…。
★超絶簡単!
スクロールさせたい最初の行にランダムにドット文字("・")を1つ置き、エスケープシーケンスの1行挿入、これを繰り返すだけです。(1番簡単な方法ですね。)
✖スコア表示等を画面上部にしか作れないのと、処理がやや重いのがデメリットです。

↑※PRINT文中の「;」「+」等の接続を省き、最後の「;」だけにしたのが1番速かったです。

エスケープシーケンスの1行挿入は凄く便利でアイデア沢山浮かびますよね。
(*゚∀゚)/


★★★●1ドット単位で星(ドット)を複数流れさせる嘘縦スクロール●★★★
・メインルーチン内で呼ぶのはVPOKE文2つ+αだけの単純で高速(BASICとしては)な方法。
星位は滑らかに流したくて、今回初めて考えてみました。

まず、a〜x等のフォントデータが連続している24文字を、縦1列分画面上に順番に並べて置き、そのフォントデータを全て00Hで埋めます。
(※日本語版MSX依存フォントの&H80〜等のフォントを使った方が色々と賢いのかもしれませんが…)

次に、フォントデータがVRAM上に8バイトずつ順に並んでいるのを利用し、
aのフォントデータの先頭から01H(1ドット)を書いてはアドレスを1増やして書き、一つ前のアドレスに00Hを書き込んでやります。
xのフォントデータの次まで来たらaに戻ればよいだけです。

これだけでは星1個なので、予めa〜xの順番を適当にシフトした列を複数列画面に貼っておけば、
VPOKE文2つ+αだけで最大32個の星を一斉に1ドット動かせます!
↑こんなふうに敷き詰めます。

☆メリットは、かなり速く動き星が増えても速度が変わらないことです!
応用すれば、星を2重スクロールさせたりとか海の波のようにするとか、色々出来そうです。

✖同じパターンの繰り返しになるのと、フォントデータが3段のSCREEN1.5(多色刷り)には一手間加えないと通用しないのがデメリットです。
逆に言えば、多色刷りでない方がメリットがある場合もあると思いました。


↑これは1列飛ばしにしていますが「STEP2」を削除したりすると、簡単に32列に出来ます。
(アレッ?2行の最後に誤記入あるぅ…汗汗)
※2023/9/30動画3つ追記https://twitter.com/FujiiMarr/status/1707674956967145498?t=6NbAbbHfalawfNElcIr-0A&s=19
・HRA!さんがブラッシュアップして下さいました👍
https://twitter.com/thara1129/status/1707684249648943322?t=S8oChOXmhuj_M7zZ9Tn_0A&s=19
・更にTKZさんが更に更に改良して下さいました👍
https://twitter.com/TKZ80/status/1707811322019316051?t=Sl0q9BXrnhkVH6wFRv96CQ&s=19

●星を1文字分流す嘘横スクロール。●
・8ドット(1文字分)嘘横星スクロール。
・上から下まで1文字分左にスライドさせれば良いだけなのですが、スピード的にマシン語でないと厳しいです。
(;´Д`)
横方向に32キャラ分並べて行くのですが、こちらは横方向なのでSCREEN1.5(多色刷り)でもOKです。


●星を1ドット分流す嘘横スクロール●(追記分)

比較的簡単な事だと気付きました…
&B00000001を7回2倍して8回目に元に戻しつつ隣りに移動させればいいじゃないのぉ
ビットのシフトやローテイト命令なくても掛け算割り算あるじゃないのぉ(気がつくの遅い)
※2023/9/30追記 TKZ80さんが具現化して下さいました👍
https://twitter.com/TKZ80/status/1708026890706182324?t=jlJw6JGL9dVkLVeFzwpaYg&s=19

★★★●嘘3D横スクロール●★★★(超絶手抜き版)
・3D機能のないMSXで、それっぽく3Dスクロールを見せる方法として、紙芝居(簡易アニメーション)を考えてみました。

※3コマで最低限背景が右から左に立体的に流れるっぽく見える気がします。(して下さい)

※真ん中のキャラは関係ありません。
ポーズボタンで止めて撮ったので、描画中の部分もあります。
↓動画(2023/8/15別のリンクにしました)

色々実験し、今回は縦横4✖32文字分を入れた変数を「PRINT」文で上下3コマ(パターン)分表示を行い、また最初に戻るだけですが、意外と速く動いています。
1ドットスクロールとも、1文字(8ドット)スクロールとも違う、不思議なあれ的なこれ的なそれ的な…3Dもどき効果です。
友人2人に見せたら少し驚いてました。
(手抜きなので、両端近くの1本の斜線に大きなパースの狂いがありますっ!)
☆紙芝居方式は、巧くやれば色々な効果を出せそうです。

✖3パターン分の画像データが多いのがデメリットです…。(ちょうど丸々1画面分のデータになりますかね)
※初代MSXBASICの機能の範囲内で、もっと速く表示出来そうな方法もあるので、PRINT表示より速くなるかもしれません。
( ゚д゚)ハッ!
SCREEN2でLINE文でやった方がデータ少ないか


●嘘ラスタースクロール(ぷっw)●追記分
8ドット(1文字)分ずつウネウネさせて、ラスタースクロール風にしました。

↑これが

↑こんな感じにカクカクウネウネw

SCREEN3っぽいですな…(*´∀`*)
まぁ、お遊びですw
LOCATEで表示位置をずらしてるだけですw
両端のキャラを同時に切り替えれば意外とそれっぽくなるかも?


■ほとんどBASICで使うと速度的に厳しいので、べーしっくんで使うかマシン語化するのが得策かもしれません。■

◆嘘縦横スクロールを検討していたら、大昔にDELのコントロールコードで嘘横スク出来ないか、一生懸命テストこいてダメだったホロ苦い記憶を思い出しました…。(その後MID$を使う方法に変更)◆

■他にアグレッシヴな方法考えたりしたら、追記修正行います■

■MSX BASIC入門 ゲーム制作①■簡単いきなりスプライトぉ?!

◆娘のためにBASIC入門的な物を考えてみました。◆(視覚的な物を優先し、極力飽きないようにしたいです。)
※アルファベットの入力は、準備編で多少慣れている前提です。
■エミュ■MSXPEN→https://msxpen.com/
MSX無くても上記のMSXPENで動きます。


本題ここから、すたーてぃんっ♥↓

◆コンピュータは、人間が指示をしないと何も出来ないおバカさんなので、コンピュータでも理解出来るBASICという言語で、ゲームを創れるようになりましょう!◆

■BASICの立上げ■

●さぁ、電源を入れて下さい。


↑こんな画面が出て、

↑こんな感じの文字を入力出来る画面になったら始まりです。


■画面の準備■

●まず、15色使える最大横32列✖縦24段のマス目のような画面モードにする、
「SCREEN1」(スクリーンイチと読む)という命令を使います。

「SCREEN1」(カギカッコは無しで)とキーボードで入力し、
左右逆のLのような形をしている「リターンキー」を押して下さい。(エンターキーとも言います)
命令を入力しリターンキーを押す事で、実行をさせられます。
画面には次のように出ていますか?

SCREEN1
OK

※入力した命令が問題なければ、「OK」という文字が表示されます。
決まり事から外れたことを打ち込むと、「syntax error」のような表示が出るので、間違いを探し入力し直してみましょう。


●次に、画面の色を変えてみましょう。
「COLOR」(カラー)という命令を使い、

COLOR 7,1,7

と入力し実行(リターン)してみましょう。
(数字と数字の間は「,」(カンマ)で区切ります)

文字と外枠が水色で、文字の背景が黒になっていたらOKです。

「COLOR」の後に続く3つの数字は、
左から前景色(文字の色)、背景色(文字の背景の色)、周辺色(外枠)
の3つで、各数値は0〜15のカラーコード

◆カラーコード◆
⬛0=透明・・ 🟥 8 = 赤
⬛1=黒・・・ 🟧 9 = 明るい赤
🟩2=緑・・・ 🟨10=黄色
🟩3=明るい緑 🟨11=明るい黄色
🟦4=暗い青・ 🟩12=暗い緑
🟦5=明るい青 🟪13=紫(マゼンタ)
🟫6=暗い赤・ ▓ 14=灰色
🟦7=水色・・ ⬜15=白

に対応しているので、数値を変更し色々(色なだけに?)遊んでみましょう。
(※文字と背景を同じ色にすると、字が読めなくなるので注意です。)


■行番号■

●さきほど入力した物に、行ごとに番号を付けると、
行番号の小さい順から実行し、最終行まで行くと終了する、命令のかたまりの「プログラム」になります。

10 SCREEN1
20 COLOR 7,1,7

1つの行番号を入力し終えたら、必ずリターンキーで登録をさせてから、別の段で次の行番号を入力して下さい。


■プログラムの確認■

●次に、プログラムがきちんと登録されているか確認してみます。
登録されているプログラムを表示する命令「LIST」(リスト)を入力し実行して下さい。

10 SCREEN1
20 COLOR 7,1,7

上記と同じプログラムが追加で表示されていればOKです。


■プログラムの実行■

●入力が終わったら、行番号を打たずに「RUN」(ラン)と入力し、リターンキーを押すとプログラムが実行されます。
(行番号の付いているプログラムを実行する時は必ず「RUN」を使います。)

※行番号を付けず直接実行する事と、行番号を付け登録してから実行する「プログラム」との違いに注意して下さい。


■プログラムの削除(さくじょ)■

●ここで一旦(いったん)登録したプログラムを全て消してみます。
「NEW」(ニュー)という命令を入力し実行(リターン)して下さい。

「LIST」で何も出なければ、登録したプログラムが消えています。


◆この3つは基本的な操作なので覚えましょう。
次から、ゲームに特に必要なことを覚えて行きます。◆


■キャラクター表示■

MSXのほとんどのゲームでは、キャラクターを、スプライト(SPRITE)という物で表示しているので使ってみましょう。

まず、以下のプログラムを頑張って入力してみて下さい。
(※プログラムの詳しい説明は次回以後行います。)

10 SCREEN1,1
20 A1$=CHR$(&B11111111)
30 A2$=CHR$(&B11111111)
40 A3$=CHR$(&B11111111)
50 A4$=CHR$(&B11111111)
60 A5$=CHR$(&B11111111)
70 A6$=CHR$(&B11111111)
80 A7$=CHR$(&B11111111)
90 A8$=CHR$(&B11111111)
100 SPRITE$(0)=A1$+A2+A3+A4$+A5$+A6$+A7$+A8$
110 PUTSPRITE 0,(99,99),5,0

※$(ダラー)は、Sの真ん中に|(縦棒)が入っているような記号で左上の方にあるキーです。
「$」や「&」や「(」や「)」は、SHIFTキーを押しながら押すと入力が出来ます。


●では、プログラムを実行してみましょう!
「RUN」して画面真ん中少し左上あたりに四角いキャラクタ(スプライト)が表示されたら大成功ですっ!!!


■スプライトの色の変更■

●今度はそのキャラクターの色を変えてみましょう。
110行の「5」の部分が色の指定になっているので、「COLOR」の時に出て来た0〜15の色から好きな色に変更してみましょう。
(※背景と同じ色にならないよう気をつけましょう)

◆カラーコード◆
⬛0=透明・・ 🟥 8 = 赤
⬛1=黒・・・ 🟧 9 = 明るい赤
🟩2=緑・・・ 🟨10=黄色
🟩3=明るい緑 🟨11=明るい黄色
🟦4=暗い青・ 🟩12=暗い緑
🟦5=明るい青 🟪13=紫(マゼンタ)
🟫6=暗い赤・ ▓ 14=灰色
🟦7=水色・・ ⬜15=白

実行(RUN)したら、思った通りの色になりましたか?


■デザイン変更■

●四角いキャラクターだと寂しいので、次はデザインを変えてみましょう。

20〜90行の「11111111」の部分がキャラクターのデータになっていて、
1の部分は塗り潰し表示され、0の部分は表示されない透明色になるので、
変更して好みのキャラクターを作ってみましょう。
※変更したら必ず変更した行でリターンキーを押してきちんと登録して下さい。

実行してキャラクターが表示されたら、何だかグッとゲームっぽくなったような気がしませんか?


■ひとまず、出て来た命令や書式を整理し今回はここまでとします。■

●画面の準備
・SCREEN(画面モードの変更)
・COLOR(画面の色変更)

●行番号を付けるとプログラムのかたまりになる。

●直接命令する
・LIST(プログラムを表示する)
・NEW(プログラムを消す)
・RUN(プログラムを実行する)

★以下は次回以降ザックリ説明予定★

●SCREEN1,1の2つ目の1の意味(スプライトサイズの指定)
●A1$〜A8$(変数の箱)
●「CHR$」(キャラクタコード指定)
●「SPRITE$」(スプライトの形を登録)
●「PUTSPRITE」(スプライトを表示)


以上、良く頑張りました!!!
( ´∀`)/

次回以降、スプライトをもう少し詳しく(くわしく)説明をしてから、動かして行こうと思うので、それまでにお気に入りのキャラクターを創っておいて下さいね。
( ´∀`)



















◆って、BASIC説明すんのすんげぇ難い…(汗)
字数を減らし簡潔に解りやすく説明するって、高校1年中退の私には凄く難しいです…◆

■小四の娘が理解しやすいよう読めない字を減らし、記述も訂正を繰り返し、必要のない説明をドンドン削り、簡略化し加筆修正整理します。
教える順番はゲーム制作に優先される物からで、通常のBASIC入門としては邪道だと思います。■

〜〜「MSX BASIC入門 ゲーム制作 本編」〜〜
■簡単準備編■→https://onl.bz/1yGgkXK
■スプライト説明■→https://onl.bz/2bAXGMZ


※頭の良い方に改善点を教えて頂けると助かります。

■MSX-FAN 一画面プログラムの切ない思い出■

■昔々、あるところにMSX-FANという雑誌の投稿プログラム紹介ページがあったそうな。
その中で一画面プログラムという横縦40×24内の字詰めで完結させるBASICのコーナーがあってじゃな、
わしも投稿しようとせっせと色々創っておったんじゃ。
しっかし、面倒臭くて一度も応募せんじゃった…■

ってことで、昔のFDがいくつか生きていたので、記念にココにおもひでを記しておきます。
残念ながら、処女作のエスケープシーケンスを使ったレースもどきや、横スクジャンプゲーや、マシン語で2重スクロールさせた壁をビットバイパー(ドットバイパーではない)が避けるゲーム等々複数データがご臨終してましたが、いくつかはここで成仏させてあげたいと思います。
(毎回課題を作り、何か1つ他の人と違う要素を盛り込むつもりで創ってました。)


●ディスマシンブラ機能付き簡易マシン語モニタ「よるのおともに」●
(「に」はVer2の意)

・後述するシューティングゲームもどきを創っていた時に、ハンドアセンブルに疲れ切り、
アセンブラ創ったろかー!」っと、
無謀なことを考えたものの簡単に創れる訳もなく、
たまたま何処か(確かマイコンBASICマガジンだったと…)でディスアセンブラをBASICで創った人がいるのを見掛け、
ディスアセンブラなら創れるのではないかと思ったのですが、
普通に創っても面白くないので、何かアグレッシヴな方法がないかなぁと、
ニーモニックやら何やらの表を死ぬほど見ていた時に、
コード表にある程度の規則性があると気付き、巧く活用すれば面白くなるかなと始めてみたところ、
ニーモニックに対応する必要バイト数のデータを、予想以上に短いプログラムでデータベース化出来たので、
であればマシン語モニタ(既に創っていた短いプログラムの「よるのおとも」)と合体させた一画面プログラムが出来るんでないかと色々苦しんで完成(していない…)させました。
マシン語モニタとしては必要最低限位の機能ですが、指定したアドレスの命令の必要バイト分を横に並べて表示させる(だけの)その名も「ディスマシンブラ機能!!!」を内蔵させています!
(ディスアセンブラ一歩手前の状態と言ったら良いのでしょうか?コード表片手に解析するのが少し楽になります)
今更解析するのもめんどいので、覚えている範囲で簡単に説明すると、

・アドレス指定。
・指定済みアドレスから実行。
・指定済みアドレスに直接入力。
・指定済みアドレスから8バイトダンプし、アドレス値をプラス8する。
・指定済みのアドレスの命令に必要なバイト数分のデータを横に並べ表示し、アドレス値に必要バイト分プラスする。
(各機能はカーソルキーの組み合わせで発動)

と、いう感じの機能があったような気がするようなしないような…です…汗



画面内に、ダンプやら直接入力やらディスマシンブラやらを共存して表示出来るので、デバッグするのに重宝した覚えがあります。
※何十回と必要命令バイト数データを見直してはいますが、どこか微妙に間違っている 可能性もあると思います。


↑これがディスマシンブラ機能です。

個人的には最高傑作でしたが、今創ればもちっとマシになるかと思いますが、今更なんの役にも立たないプログラムですから…。
おそらくですが、後で問題を修正しようとして一画面+1行位になったままのようで、そこで力尽きたようです。
(その後ディスアセンブラは創りませんでしたとさ…トホホ)



マシン語超最低限シューティングゲーム「KIHON(仮)」●

マシン語の一画面シューティングゲームが掲載されていた(確か450バイト位のマシン語だった)のを見て、
もっと少ないバイト数でシューティングゲームとしてギリッギリ成り立つのかを課題にして、必死に考えて挑戦したプログラムです。
(完成したら一画面に納まる程度でバージョンアップするつもりだったけど…)


↑最初の2列は、あえて切れたままの画像で…(どうせ16進データの羅列だしね)
開始アドレスがD000でないのは、プログラムを縮めるためのジャンプ命令の(JRだったかな?)関係で後からサブルーチンを前に移動したからか、データを前に置いたからだと思います。

8方向でなく左右2方向のみ移動に限定した(左右はSTICK値の0と1〜5と6〜8で分岐)り、玉は一発しか出ない自動連射だったり、乱数使わずRレジスタ(だったっけかな)を使ったり、
紙に書いたプログラムとコード表を穴が開く程見返して、更に短くする方法を閃く度ハンドアセンブルを繰り返し、200バイト近くまで減らせたと思います。
(その割にキーボードでもジョイパッドでも遊べるようにはしてます。)
敵は4機で自機に向かって来るので、一発ずつしか出ない弾で交戦して何点まで行けるかだけのゲームです。
(一応ライフ制、1000点ごとに敵の縦移動ドット数が増えて行き、音は「パンッ」という破裂音だけ出してます。)
途中から「よるのおともに」を使ってデバッグが楽になりました。

これも今ならもちっと短くもっとアグレッシヴにゲーム性を上げて創れるのではないかと思います。
(何かウェイト部分とか短く出来そうとかすぐに浮かぶし)
悲しいかな、背景枠の色設定するの忘れて、後からBASIC内で設定してたり、
REM文にせず16進データだったり、色々力尽きた感満載です。

友達や子供達には比較的好評でした。

■まとめ■
他に、MSX-FANに掲載された一画面キャラエディタに対抗心メラメラで、
機能増やした一画面プログラムの8×8や16×16のエディタも創りました…。
無いものは自分で創るDIY精神が、
MSXユーザーには根付いていましたね。

可愛いプログラム達は、これで成仏出来たかな。

■第二弾■→https://onl.bz/5Eciv4U
■番外編■→https://onl.bz/HajP4nR


◆予告なく加筆修正します。◆

■MSX BASIC入門 ゲーム制作 簡単準備編■

◆私が作ったゲームを見て、娘が「私もゲーム作りたいっ!」と言うのでBASIC入門的な何かを始めました。◆
■エミュ■MSXPEN→https://msxpen.com/
MSX無くても上記のMSXPENで動きます。

■準備の巻■
いきなりプログラムを教えるのは、乗り越えるべき壁が多過ぎるので、
まずはキーボードに慣れてもらうため、
簡単なゲームでキーの配置を覚えて貰います。

●〜その1〜●
・タイピングゲーム的なあれ的なそれ的なコレ的な…
以下の簡単なプログラムを大急ぎで作りました。
アルファベットが落ちて来るタイピングソフト的な、その名も「キーマトリックス」という安直ネーミングのゲームです。
大文字一点に集約した半覚醒なゲームです。(なんだそりゃ)



(慌てていたので、同じ命令が2回あったり色々酷いですが…)

※某1画面プログラムに慣れ過ぎているため、ゴチャゴチャしたスパゲッティプログラムですみません。

落ちてくるアルファベットを入力するゲームで、ミスタイプしたり画面最下部まで問題が流れてしまうとミスになり、5回でゲームオーバーになります。

◆娘に凄く気に入って貰え、初回で1時間近く遊んで貰えました。
( ´∀`)
一部の友人にも評判が凄く良かったので、調子に乗ってそのうち創り直すかもしれません。◆


●〜その2〜●
・2本目は、BASICでよく使う命令等の綴りを覚えるための簡単なソフトで「BASIQ」と名付けました。

表示された文を入力してリターンキー押すだけです。
これは超絶手抜きなので、もう少しゲーム性を上げて子供でも楽しめるよう改良を加えたいと思います。

◆しばらくこんなゲームっぽい物で、キーボードに慣れて貰います。◆

その後、うちにあったMSX-FANの一画面プログラムの入力をやらせてみました。
やはり、人のプログラムを入力するのはプログラムのパターンに慣れるのに1番だと思います。

今回はこんな位で、次回から本格的(なのか?)に始めます。


■まとめ■
何十年かぶりに、BASICをやったら凄く楽しかったので、しばらく色々やって行こうと思います。
安い(短い)早い(速い)美味い(巧い)
が理想ですけど、安い(短い)プログラムしか創ったことがないので、どうなることか…

〜〜「MSX BASIC入門 ゲーム制作 本編」〜〜
■スプライト表示■→https://onl.bz/2UFJhAx
■スプライト説明■→https://onl.bz/2bAXGMZ


◆予告なく追記修正します。◆