とわ君に独り言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ハード&修理資料■

◆※2024/1/7リンク追加◆

MSXの修理や改造に関する資料を少しずつ追記してきます■

なぐり書き後纏めて行こうと思います👍

※純正ドライブ以外はあくまで参考程度で、不確かな情報も含まれているかもしれないので責任は負いかねます🙇

 

Panasonic
・FX,WX,WSX  ※ドライブ
 YD-702D-6037D(無改造だと2HD検出無し)
・ターボR
 FD-235HF(ロットによりピン配置設定で可?)
・YD-702D-6639D(要変換基板ベルトレス)
・A1F
 YD-702J-6637J(要スリム変換基板&ケーブル)

 ※純正内蔵ドライブは裏側真ん中のネジを外してしまうとほぼ再起不能になるので、ベルト交換時絶対に外さないこと(2台程経験済み😭)

●FS-FD1A(センターマイナス9v)
 純正 D357T(ベルトレス)
 HBD-20WのOEM

SONY
・YD-702D-6639D(ベルトレス)
・FD-D357B(※34ピンの方、ベルト式、XDMK2以降)

SONY HBD-F1 ドライブ
・純正 MFD-11W-51l
・FD-235GF ピン4列 リンク
http://usbsecretbase.michikusa.jp/hbd-f1/index.html
・FD-235F 141-U
・TC-FD35M-3B(ベルトレス)

 

■SANYO■

PHC-WAVY70FD&FD2

・ポート1&2の接触不良が多いようですが、再ハンダまでせずにその付近のハンダが溶け始める程度にハンダごてで温めてあげるだけで復活しました。あくまでも簡易的修理ですが…(2台実際に確認👍)
MSXマガジン89年9月号に2ドライブ化記事

SONYドライブ
・YD-702D-6639D(ベルトレス)
・FD-D357B(※34ピンの方、ベルト式、XDMK2以降)

 

●※要確認

https://z80.msx.click/index.php?title=FDD_YEDATA

 

■以下に色々リンクを貼っておきます(問題ありましたら削除致します)■

https://w.atwiki.jp/matomerutokoro/pages/102.html

 

●ごりぽんさんのブログ↓

https://goriponsoft.hatenablog.com/archive/category/MSX

●ミケさんのHP(SANYO PHC-WAVY70FD修理)※リンクフリー↓

https://ss1.xrea.com/tmct.s1009.xrea.com/work/td-ja-7e6a02.html

 

はにはにさんのHP↓

http://hanihanisayoko.seesaa.net/category/21726926-1.html

●にがさんのHP※リンクフリー↓

http://niga2.sytes.net/indexsub.html

 

 

 


■追記修正して行きます。■

■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つ成仏出来たかな。

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

■CASIO MSX MX-10を楽しむ■〜子供達もお気に入り〜

■カシオのMSX価格破壊王MX-10で遊ぼう!■
※2023/3/13追記
 
●主な仕様●・RAM16K VRAM16K
・スロット1つ(別売KB-10装着で3スロットに拡張可)
・ACアダプタは7V/800mA(※センターマイナス)
・映像出力はRCAとRFのみ(RGB出力不可)
・音声出力はRCAピンプラグ端子のモノラル
・データレコーダ直接続不可(別売)
※基本は初代MSX仕様だが色々欠落している感じ
■別売周辺機器
・FA-32(データレコーダ接続用インターフェイス)
・KB-10(増設スロット×2&プリンタポート)

CASIOの問題児達のMSXの1つMX-10が面白くて遊んでます。(中古5000円以下位?)

●少し可愛い組合せ

7インチポータDVDに乗せたら一体感ありカワイイ❤(4:3への切替機能ないのが残念💦)

●あると便利なこともあるL型変換プラグ等色々

(電源用L型変換プラグは、家に転がっていたエレキギターエフェクター用のがピッタリ!)

(昔の取引先だったトモカ電気さんでカッコいいのみつけて装着したら、何となくスチームパンク風?)

●ハード資料情報●
◆フレキは抜差し繰返すとパターンが剥離する可能性が高い。・HRA!さん情報
◆外国の方の関連ブログ→https://retrodepot.net/?p=12593
ゲームパッド部のカーソルキー化改造・ゆうじろうさんのツイート→https://onl.la/MWxYBPF
(にがさん発案)
◆ごりぽんさんのツイート→https://onl.la/73Er71C
◆HRA!さんのMX-101ハードツィート◆
https://onl.la/GkEKrrv

●いつものように追記修整します●
※間違いがありましたら指摘して頂けると大変助かります。

■小技裏技その他メモ■MSX BASIC入門 ゲーム制作〜番外編〜

●2023/10/10追記※そのうち整理します。
■MSXゲーム裏技集■オマケ▽作者不明

本題
MSXの1ドットの縦横比は1:1ではなく、わずかに横が長い。

●PRINT文のみでカーソル位置を決める
・CHR$(27) "Y"CHR$(32 + y)CHR$(32 + x)

●SCREEN1を25行表示 POKE &HF3B1,25
(画面上の表示は24行だが見えない25行目が発生、24行目で改行しても画面がスクロールせずカーソルが見えない25行目になり、普段より1行だけ多くリスト表示出来る。26にするとPRINT文で24行末尾までリスト表示可)※スプライトアトリビュートテーブルに掛かっているので、「OK」の後ろにスプライトアトリビュートデータのゴミが出てしまう場合あり💦

■スプライトの衝突判定 VDP(8)AND64 が0でなければ衝突■

■スプライト非表示
・消したいスプライトのY座標を208にする
(スプライトモード2は場合は216)
・指定したスプライト以降を全て非表示にするには
Y座標を209(モード2では217)にする
※2023/10/10追記

■ワークエリア等■
●FB40hが0ならPLAY文が鳴っていない。
●システムタイマー●BASIC起動中は、FC9Ehからの2バイトが常にインクリメントして入っている。

●USRTAB(F39AH, 20)
初期値 FCERR
・USR関数のマシン語プログラム(0~9)の開始番地、機械語プログラム定義前の値はすべてエラールーチンFCERR(475AH)を指す
●CMD命令飛び先はFE0DH

●TRGFLG(F3E8H, 1)
初期値 FFH
ジョイスティックのトリガボタンの状態
0=押されている 1=押されていない
bit 0=SPACE キー
bit 4=ポート 1・A ボタン
bit 5=ポート 1・B ボタン
bit 6=ポート 2・A ボタン
bit 7=ポート 2・B ボタン

●GXPOS(FCB3H, 2)
・X座標
●GYPOS(FCB5H, 2)
・Y座標
●(F3DCH,1)CSRY
・カーソル Y 座標 一番上は 1
●(F3DDH,1)CSRX
・カーソル X 座標 一番左は 1

●(F922H,2)NAMBAS
・今のパターンネームテーブルの開始番地
●(F924H,2)CGPBAS
・今のパターンジェネレータテーブルの開始番地
●(F926H,2)PATBAS
・今のスプライトジェネレータテーブルの開始番地
●(F928H,2)ATRBAS
・今のスプライトアトリビュートテーブルの開始番地


■機種依存■

●RAM8KB機だとページ3のC000~DFFFは固定FFで埋まっており利用出来ず、E000~FFFFにRAMがある


●カラーコード0を透明色から別の色にして使う(MSX2以降)
VDP(9)=VDP(9)OR&H20
COLOR=(0,r,g,b)

PanasonicのFS-A1FXとWXとWSXは、
OUT64,8:OUT65,0と入力すると5.37Mhzモード(高速)になる。
「OUT65,154」でもOK?

●TurboRモードにチェンジDEFUSR=&H180:A=USR(0)


■BASIC内部構造関連■
●中間コード表→http://ja.linkdata.org/view/rdf1s1094i
http://ngs.no.coocan.jp/doc/wiki.cgi/datapack?page=%C3%E6%B4%D6%A5%B3%A1%BC%A5%C9%B0%EC%CD%F7%C9%BD
●TXTTAB(F676H, 2)
・BASICテキストエリアの先頭番地
●(F6C6H,2)STREND
BASIC がテキスト等で使用してるメモリ最後番地
●(FBB2H,24)LINTTB
・ラインターミナルテーブル 画面各行の情報を保存
●DOT(F6B5H, 2)
・画面に表示された、あるいは入力された最新の行番号
●F6B6
●VARPTR
・変数の入っている開始アドレス
●(FBB1H, 1)BASROM
・BASICテキストの存在場所を示す(0=RAM上、0以外=ROM上)

■スプライト■
●スプライトの衝突判定 VDP(8)AND64 が0でなければ衝突
 
■PSG関連■
●PSGの初期化BIOS
・GICINI(0090H,1)

■モニタ■
小さめのRCA(ピンプラグ)入力のモニタを安く探すなら、オクでポータブルDVDプレーヤが3000円以下で落札がお得(4:3対応機種に限る)


※度々更新します。

■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(硫化西部)さん、及びリンクフリーの方々と情報を頂いたニューファンキー小林さんに感謝致します。■
※連絡取れずリンクを貼った方々、削除が必要でしたらご連絡を頂けたら幸いです。

■MSXでこんな疑似3Dゲームを夢想してみた■(誰か作ってぇ)

東京オリンピック会場地下施設に、AKIRAは本当にいなかったのか?●※2023/4/11追記あり

本題
大昔に考えていた疑似3Dダンジョンの手抜きプログラムを見ていて、
PSのバイオハザードの簡易版のようなゲームが、もしかしたら初代MSXでも出来てしまうのではないか?
とふと思いました。(そんな無茶な…)

何故簡易版なら可能かと思ったかというと、
PS1版バイオハザードは1枚絵の中をポリゴンのキャラが動いていただけだったような覚えがあったので、
画質と色数は大きく落ちたとしても、少なくとも1枚絵はMSXで表示可能だなぁと思ったのと、
ポリゴンキャラの代用をスプライトの切り替えでやってしまえば何とかなるのでは?
と考えたからでした。

さて、ここからが問題です。
もし自分で作るとしましょう。
勿論技術力が圧倒的に足りません…(ダメじゃん)
しかし、何処まで自分で出来る可能性があるかを探ってみました。

■1枚絵を用意する■
まず、1枚絵を複数パターン用意しないといけません。
初代MSX用のグラフィックソフトがとても少なく使い物になりそうに無い(何故か問答無用で初代MSXで考えてるし)
ので、MSX2以降のグラフィックソフトで1枚絵を書いてSCREEN2にどうにか変換出来ないかと色々調べていた時に、
PC用の無料ソフトで「BMPtoMSX」という物をみつけましたっ!
これならBMPファイルをSCREEN2に変換可能な上に、画力が無くとも実写や誰かに書いてもらった絵をBMPファイルで保存すれば、何とかなりそうです。

おおぉっ!流石コアなMSXユーザーの方々は凄く便利な物を用意してますね。

しかし、ここで問題が発生すると思いました…汗
データ多いし、多分1枚絵の表示がすこぶる遅い…ゲームになるのか?
簡単に思い浮かぶ解消法としては、SCREEN3まで画質を落とすとか1枚絵を全画面よりかなり小さくする事位でしょうか?
それだとクオリティかなり落ちてしまう…また汗
SCREEN2の滲みはグラディウスのようにスプライトで多少誤魔化せたとしても、更に遅くなります。
一旦置いておきます。
(絵心ないのが1番致命的…)

■キャラを用意する■
キャラやイベントはXYZ座標で管理するとして、複数のキャラを描く画力が全くない…そしてまたまた汗
問題外ですね。(努力しかないっ!)

■ムービーシーン■
ハッキリ言ってどんなに簡易的にしてもそれっぽくはならないでしょう…
※2023/4/11追記:TwitterでSCREEN3で動画を作っている方をちらほら見かけました。通常のMSXでは容量は圧縮しても厳しいとは思いますが、一応やってやれないことは無いようです。


・システムさえ出来てしまえば、バイオハザードとまでは行かなくとも、アドベンチャーゲームや簡易FF7〜9的なあれ的なそれ的なこれ的な物なら作れそうなので、いつか時間がある時でも進めてみたいです。
しかし、事情があり手元にPCさえ無いのでずっと先の事になるでしょう。
他に、レイストームアインハンダーのようなシューティングゲームも何とかならないか(ポリゴン無いから無理なので簡易的で)
とかバカな事ばかり夢想しております。

誰か作ってくれないかなぁ…
(他力本願はMSXユーザーには禁句だと思うけど)

今回は夢想しただけでした。
MSXの可能性を考えるのはとても楽しいので、色々夢想してしまいます。

※追記
超絶手抜きで一枚絵実験始めました。
また後日奮闘悶絶の様でも書いておこうと思います。

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

MSX2ロードス島戦記始めましたが、既にネット上での攻略ブログが皆無だったので、方眼紙買って来てマッピングしていて、
ブログに手書きマップ残しておこうか迷ってます。

■やはりバタバタして更新が進まない自分&娘用データベースブログですが、
その間少しづつ何をやっていたかと言うと、
去年からずっとBASICコンパイラの「MSXべーしっ君」で縦スクロールシューティングゲームを作ってます。

星の2重スクロールと自機周りの処理と4連発の自機の弾(現状弾が重なりやすいので、今後違う方法にする予定)と仮の敵出現と当たり判定まではスラスラと出来たのですが、
色々な所で問題にぶつかっていて全然進まずです。

特に音と敵の出現テーブルで止まったままで、
・敵の出現テーブルに関する資料が殆んどない。
べーしっ君ではPLAY文が使えず、全てSOUND文になってしまうので、爆発音しか作った事がない私はほぼゼロから勉強しなければいけない。
べーしっ君固有のルールによってバグが発生しやすい。
なんて感じで止まってます。

一応出現テーブルは後回しにするとして、SOUND文で色々実験しています。
(何か掴んだらまたデータベースとして別個でブログ更新しようと思います。)
SOUND文が理解出来ればマシン語にも応用しやすいので、後々役に立つ可能性もあるかもと思うのできちんと掴んで行きたいとこです。

仮で、敵の破壊音には「パンッ」という音と「ピンッ」ていう音を重ねて出しているのですが、
「ピロリッ」というグラディウスのような音にしたいので、それっぽい音をPLAY文のMMLで作ってからSOUND文に自己変換し組み込んでみたところ、
SOUND文の処理で一瞬止まってしまい(そりゃそうだ)使い物になりませんでした…汗
ヤッパ割込みでやらんといかんのかなぁ…
将来的にはBGMも組込みたいので、やはり割込みで鳴らす簡易的なドライバ的なあれ的なそれ的な処理を考えないといけなそうです…トホホ

正直割込み処理は殆んど使った事がないので、実験が続きそうでゲッソリして来ますが、これも基本的な事なので避けては通れないですね。

あぁ、誰かレクチャーして臭い(プ〜っ)

恐らく、マシン語で作りなさいよと思われるでしょうが、この歳でハンドアセンブル地獄はどうしても嫌なので、べーしっ君で通してみます。
(製品化する気ならマシン語1択でしょうけど、そんなたいそれた事は考える訳がないので)

のんびりやってきます。

※2023/10/2動画追加↓
https://twitter.com/FujiiMarr/status/1707728476525207785?t=zez7ZhxWpjxXco9OoFuaoA&s=19

■こういう日記的な記事は後々削除する予定です。■

■スプライトダブラー手抜き代替案考察■MSX BASIC入門 ゲーム制作〜番外編〜

※2023/2/2追記※考察と言える程ではありません…。

本題
■BASICでは遅くて使えないので、スプライトダブラー以外でスプライト(以降キャラと表記)が極力消えない、又は違和感軽減出来そうな方法を考えます■

※スプライトダブラーとは、ファミコンドラクエのように、キャラの表示優先順位をコロコロ変え横方向のキャラ表示性能以上に並んでも、完全に消えたままにしないようにチラチラ表示する方法
(他にも画面上で使った物を下方で再利用する物や、コナミ式とか複数方法があったらしい)


●2つ以上のキャラを重ねて1キャラにする時に、横方向に重ならないようなデザインにする。(市販ソフトでも見かける方法)


●消えてもゲーム性が落ちないキャラの表示優先順位を下げる。
(例えば自キャラが1色で影キャラを重ねていたら、影のキャラの表示優先順位を下げる)
2枚以上スプライトを使っているキャラは、ドット数が少ない方(又は色が目立たない方)の優先順位を下げる

●チラついても違和感ないキャラを最初からチラつかせておく。
チラつかせるキャラの表示優先順位を下げておき、メインルーチン等でY座標を208にする方法を使えば簡単に複数チラチラが可能。(これも市販ソフトで見かけます。例えば弾等の動く飛び道具をチラチラ)

●なるべく4つ(MSX2以降なら8つ)以上キャラが横に重ならぬよう工夫する。
・横方向に直進するキャラを減らし、縦方向の速度を極力同じにしない。
・縦方向に同時に左右に現れ落ちてくるキャラ等はタイミングをずらし、極力被らぬようにする。

●8ドット移動でも構わないキャラにPCG(背景画)を使う。
(グラディウスシリーズが使っている方法ですよね)



他にもあったら教えて、エロい手練プログラマーさん達ぃ🙏
※2023/3追記
◆と、嘆いていたらHRA!さんが1つの方法をアップしてくれていました、BASICでは厳しいけどありがたや〜◆
https://github.com/hra1129/msx_documents/blob/main/vdp/sprite_sample/sprite.pdf

※他にも色々見落としてると思うので、引き続き考えます。
■そして、時折加筆修正します。■

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

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

●何をしていたか(プログラム以外で)●
・父子家庭なので、コロナ禍で子供達の世話でアップアップだった…。
(※現在、次男坊が濃厚接触者になってしまい、家族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で一画面シューティングゲーム作ろうとして調べた時の記憶頼りだったり、複数一度に検証しメモ取り忘れたりしたので、再検証しないといけない物もあるかも…)

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

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

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