mieki256's diary



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文(コメント文)なので、使わないという手もあるかもですが…。

REM文の挙動。 :

REM文の挙動について一応メモ。

以下のような感じで REM文を入れると、LIST をした際に妙な挙動になる模様。
  • REM に続く文字列が表示されない。
  • REM文の次行の冒頭が妙な表示になる。
kmbasic082_ss10_rem_fail.png

kmbasic082_ss11_rem_fail.png

ちなみに、KM-BASIC 0.6.8 で確認したところ、そちらでも同じ結果になりました。
kmbasic082_ss12_rem_fail_kmb068.png

ただ、LISTの表示がおかしくなるだけで、プログラムの実行はできるようです。

その他の命令の動作確認。 :

一応、その他の命令についても動作確認したので結果をメモ。他の命令に関しては、問題無く動いてるように見えました。

FOR - NEXT, GOSUB, IF - THEN - ELSE はOK。
kmbasic082_ss01_forgosub.png

文字列型変数もOK。
kmbasic082_ss02_str1.png

kmbasic082_ss03_str2.png

演算子もOK。
kmbasic082_ss04_op.png

DIM(配列)もOK。
kmbasic082_ss05_dim.png

SGN(), ABS(), NOT() もOK。
kmbasic082_ss06_sgn.png

INKEY() (押されたキーのアスキーコードを取得)もOK。
kmbasic082_ss07_inkey.png

INPUT$() (入力文字列+ENTERの取得)もOK。
kmbasic082_ss08_input.png

PEEK() (メモリの読み込み)、POKE (メモリへ書き込み)もOK。
kmbasic082_ss09_peekpoke.png

念のため、動作確認に使ったプログラム (.mzt) も zip にして置いておきます。

_apicheck_20190424.zip

せっかくだから少し遊んだり。 :

動作確認だけではアレなので、せっかくだから少し遊んでみたり。

KM-BASICには、メモリの読み込みと書き込みができる、PEEK, POKE文があって。
 PEEK(メモリアドレス)    : 指定メモリアドレスから1バイト読み込んで値を返す。
 POKE メモリアドレス,値  : 指定メモリアドレスに1バイトの値を書き込む。
この命令を使うと、ちょっと面白いことができる。

例えば、MZ-700 は、$D000番地からVRAMが割り当てられているので…。

_Programming MZ-700: Display

$D000 - $D3E7 の間に、何かディスプレイコードを書き込むと、画面のその位置に文字を表示することができるので、ソレを使って色々遊べる。とメモ。

例えば、以下は、画面上をキャラが行ったり来たりする例。
kmbasic082_ss14_pingpong.png

kmbasic082_ss15_pingpong.gif

以下は、キャラをカーソルキーで移動、Qキーでプログラムを終了させる例。
kmbasic082_ss16.png

kmbasic082_ss17.gif

以下で、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。

KEYASCII CODE
17
18
19
20
SPC32
Z90
X88
A65
S83
Q81

例えば _TIC-80 などは、カーソルキー, Z, X, A, S (要は、十字キー + A, B, X, Yボタン)だけでアクションゲームを作ろうとしてるノリがあるので、このくらいのキーさえ判定できればなんとかなるのではないか。

でも、MZシリーズって、同時押しを取得できるキー種類に制限があったり、したかな。どうだったかな。むしろ制限が無かったほうだったろうか。

FM-7あたりは、サブCPUがキーボードを制御してる関係で何か制限があった気もするけれど、具体的な内容をもう覚えてないや…。 *1

などと、ちょっと悩んでみたけれど、ふと気が付いた。そもそも KM-BASIC の INKEY() は一つの値しか返さないのだから、キーを同時押しされても取得できないわな…。悩む必要がなかった…。

*1: テンキーの5キーでキャラ移動を止められる、とかだっけ。それはキーを離した瞬間を取得できないから、だったかな。同時押しとは別の問題か。

この記事へのツッコミ

Re: KM-BASIC 0.8.2の動作確認をしてみたり by 名無しさん    2019/04/29 11:19
ver 0.8.3をアップロードしました。REM文に関しての挙動は、直っていると思います。また何か発見しましたら、お知らせ頂けると嬉しいです。
Re: KM-BASIC 0.8.2の動作確認をしてみたり by mieki256    2019/05/08 21:23
> ver 0.8.3をアップロードしました。

0.8.3を試したところ、REM文が正常表示されることを確認できました。
対応・修正していただき感謝します。ありがとうございます。

以上、1 日分です。

過去ログ表示

Prev - 2019/04 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project