2019/04/24(水) [n年前の日記]
#1 [pc] KM-BASIC 0.8.2の動作確認をしてみたり
MZ-80K/1200/700上で動作するBASIC、KM-BASIC の不具合を修正したと作者様から連絡していただけたので、KM-BASIC 0.8.2 の動作確認をしてみたり。環境は、Windows10 x64 1803 + MZ700WIN 0.56 + KM-BASIC 0.8.2。
_Katsumi (電子工作好き)さんのツイート: KM-BASIC for MZ-80K/MZ-700 ver 0.8.2を、OSDNにアップロード...
_Z80 File Downloads on Chamber Katsumi - OSDN
文字列型変数と SGN() の挙動は、修正されていることを確認できました。対応ありがとうございます。感謝します。
しかし、REM文を使うと LIST の結果がおかしくなる不具合を見つけてしまいました…。なんだか小出し(?)に見つけてしまってスミマセン…。まあ、REM文(コメント文)なので、使わないという手もあるかもですが…。
_Katsumi (電子工作好き)さんのツイート: KM-BASIC for MZ-80K/MZ-700 ver 0.8.2を、OSDNにアップロード...
_Z80 File Downloads on Chamber Katsumi - OSDN
文字列型変数と SGN() の挙動は、修正されていることを確認できました。対応ありがとうございます。感謝します。
しかし、REM文を使うと LIST の結果がおかしくなる不具合を見つけてしまいました…。なんだか小出し(?)に見つけてしまってスミマセン…。まあ、REM文(コメント文)なので、使わないという手もあるかもですが…。
◎ REM文の挙動。 :
REM文の挙動について一応メモ。
以下のような感じで REM文を入れると、LIST をした際に妙な挙動になる模様。
ちなみに、KM-BASIC 0.6.8 で確認したところ、そちらでも同じ結果になりました。
ただ、LISTの表示がおかしくなるだけで、プログラムの実行はできるようです。
以下のような感じで REM文を入れると、LIST をした際に妙な挙動になる模様。
- REM に続く文字列が表示されない。
- REM文の次行の冒頭が妙な表示になる。
ちなみに、KM-BASIC 0.6.8 で確認したところ、そちらでも同じ結果になりました。
ただ、LISTの表示がおかしくなるだけで、プログラムの実行はできるようです。
◎ その他の命令の動作確認。 :
一応、その他の命令についても動作確認したので結果をメモ。他の命令に関しては、問題無く動いてるように見えました。
FOR - NEXT, GOSUB, IF - THEN - ELSE はOK。
文字列型変数もOK。
演算子もOK。
DIM(配列)もOK。
SGN(), ABS(), NOT() もOK。
INKEY() (押されたキーのアスキーコードを取得)もOK。
INPUT$() (入力文字列+ENTERの取得)もOK。
PEEK() (メモリの読み込み)、POKE (メモリへ書き込み)もOK。
念のため、動作確認に使ったプログラム (.mzt) も zip にして置いておきます。
_apicheck_20190424.zip
FOR - NEXT, GOSUB, IF - THEN - ELSE はOK。
文字列型変数もOK。
演算子もOK。
DIM(配列)もOK。
SGN(), ABS(), NOT() もOK。
INKEY() (押されたキーのアスキーコードを取得)もOK。
INPUT$() (入力文字列+ENTERの取得)もOK。
PEEK() (メモリの読み込み)、POKE (メモリへ書き込み)もOK。
念のため、動作確認に使ったプログラム (.mzt) も zip にして置いておきます。
_apicheck_20190424.zip
◎ せっかくだから少し遊んだり。 :
動作確認だけではアレなので、せっかくだから少し遊んでみたり。
KM-BASICには、メモリの読み込みと書き込みができる、PEEK, POKE文があって。
例えば、MZ-700 は、$D000番地からVRAMが割り当てられているので…。
_Programming MZ-700: Display
$D000 - $D3E7 の間に、何かディスプレイコードを書き込むと、画面のその位置に文字を表示することができるので、ソレを使って色々遊べる。とメモ。
例えば、以下は、画面上をキャラが行ったり来たりする例。
以下は、キャラをカーソルキーで移動、Qキーでプログラムを終了させる例。
以下で、MZ-700のメモリマップその他が説明されてるので、この手のソレには参考になりそうな予感。ありがたや。
_Programming MZ-700
_Programming MZ-700: Memory
_Programming MZ-700: Keyboard
_Programming MZ-700: Sound
_Programming MZ-700: Interrupt
KM-BASICには、メモリの読み込みと書き込みができる、PEEK, POKE文があって。
PEEK(メモリアドレス) : 指定メモリアドレスから1バイト読み込んで値を返す。 POKE メモリアドレス,値 : 指定メモリアドレスに1バイトの値を書き込む。この命令を使うと、ちょっと面白いことができる。
例えば、MZ-700 は、$D000番地からVRAMが割り当てられているので…。
_Programming MZ-700: Display
$D000 - $D3E7 の間に、何かディスプレイコードを書き込むと、画面のその位置に文字を表示することができるので、ソレを使って色々遊べる。とメモ。
例えば、以下は、画面上をキャラが行ったり来たりする例。
以下は、キャラをカーソルキーで移動、Qキーでプログラムを終了させる例。
以下で、MZ-700のメモリマップその他が説明されてるので、この手のソレには参考になりそうな予感。ありがたや。
_Programming MZ-700
_Programming MZ-700: Memory
_Programming MZ-700: Keyboard
_Programming MZ-700: Sound
_Programming MZ-700: Interrupt
◎ INKEY()を利用した際の返り値をメモ。 :
KM-BASIC は、INKEY() を使うと、その時に押しているキーのアスキーコードを取得できる。どのキーを押すと何が返ってくるのか、少し調べたのでメモ。環境は MZ700WIN 0.53b。
例えば _TIC-80 などは、カーソルキー, Z, X, A, S (要は、十字キー + A, B, X, Yボタン)だけでアクションゲームを作ろうとしてるノリがあるので、このくらいのキーさえ判定できればなんとかなるのではないか。
でも、MZシリーズって、同時押しを取得できるキー種類に制限があったり、したかな。どうだったかな。むしろ制限が無かったほうだったろうか。
FM-7あたりは、サブCPUがキーボードを制御してる関係で何か制限があった気もするけれど、具体的な内容をもう覚えてないや…。 *1
などと、ちょっと悩んでみたけれど、ふと気が付いた。そもそも KM-BASIC の INKEY() は一つの値しか返さないのだから、キーを同時押しされても取得できないわな…。悩む必要がなかった…。
KEY | ASCII CODE |
---|---|
↓ | 17 |
↑ | 18 |
→ | 19 |
← | 20 |
SPC | 32 |
Z | 90 |
X | 88 |
A | 65 |
S | 83 |
Q | 81 |
例えば _TIC-80 などは、カーソルキー, Z, X, A, S (要は、十字キー + A, B, X, Yボタン)だけでアクションゲームを作ろうとしてるノリがあるので、このくらいのキーさえ判定できればなんとかなるのではないか。
でも、MZシリーズって、同時押しを取得できるキー種類に制限があったり、したかな。どうだったかな。むしろ制限が無かったほうだったろうか。
FM-7あたりは、サブCPUがキーボードを制御してる関係で何か制限があった気もするけれど、具体的な内容をもう覚えてないや…。 *1
などと、ちょっと悩んでみたけれど、ふと気が付いた。そもそも KM-BASIC の INKEY() は一つの値しか返さないのだから、キーを同時押しされても取得できないわな…。悩む必要がなかった…。
*1: テンキーの5キーでキャラ移動を止められる、とかだっけ。それはキーを離した瞬間を取得できないから、だったかな。同時押しとは別の問題か。
この記事へのツッコミ
[ ツッコミを読む(2) | ツッコむ ]
以上です。
0.8.3を試したところ、REM文が正常表示されることを確認できました。
対応・修正していただき感謝します。ありがとうございます。