フォト
2021年8月
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 31        
無料ブログはココログ

« 新型コロナウイルス対策のフェイス シールドを入手しました | トップページ | Arduino IDE 1.8.13が公開されています »

2020年6月17日 (水)

MSX関連の書籍を収集中!

8ビットパソコン MSX関連の書籍を地道に収集しています。

大きめの古書店でも見つからないため、ヤフオク等の出品をチェックしています。
欲しい書籍は高騰して買えませんので、比較的安く出回っているものを落札しています。

Dscn2714

MSXが出回ったのは1983年頃からですから、30年前以上の書籍となります。
その一部ご紹介・・

当時のアイドル、松田聖子を全面に出している入門書
Dscn2716

中身を見ると当然、聖子ちゃん本人が執筆しているわけでもなく、増してやMSXを使ったりしていません。
言葉使いが「・・・なんだから。」と女の子っぽくはなっていますが。

Dscn2717_20200617092301

聖子ちゃんの書籍もそうですが、
当時のコンピュータ書籍、入門書と言えども、ほぼプログラミング解説がメインです。

Dscn2721

フロチャートや、アルゴリズムの解説なんかも記述されています。

Dscn2720

Dscn2719

MSXを含め、当時のパソコンは起動するといきなりBASIC言語の入力待ち状態ですので、
  「コンピュータの利用 = プログラミングを組んで利用する」
でした。

入門書を片手に、記載されているプログラムソースを、ちまちまと入力して
・意味は分からないけど、とりあえず、動かしてみる
・動いた挙動から、コマンドの意味と使い方を理解する
・ちょっと改造して(アレンジ)して、試行錯誤してみる
・応用してみる
みたいな感じで勉強(遊び?)していました。

トライ&ゴーに適したプログラミング言語のBASIC、コンピュータを学ぶには最適な言語でした。

プログラミングの入門・解説書としては、当時の書籍の方が充実して分かりやすい感があります。
内容的には今でも十分、プログラミングを学べます。

MSX、復活して欲しいなぁ


« 新型コロナウイルス対策のフェイス シールドを入手しました | トップページ | Arduino IDE 1.8.13が公開されています »

日記・コラム・つぶやき」カテゴリの記事

書籍・雑誌」カテゴリの記事

MSX・レトロPC」カテゴリの記事

コメント

初めまして。
ぶらぶらと検索していたら、辿り着きました。
BASICでゲームを作ってはいますが、1ステージ終了後に次のステージをディスクから読み込ませる命令文って分かりますか?
BLOAD で良いんだろうか?

ゴン太さん

BLOADで、指定したアドレスでデータを読み込むの良いと思います。

その他にMSXにはファイル操作を行うDISK BASICというコマンド群があります。
・MSX DISK-BASICの命令
http://ngs.no.coocan.jp/doc/wiki.cgi/TechHan?page=1%2E2+MSX+DISK%2DBASIC%A4%CE%CC%BF%CE%E1

指定したファイル内のデータアクセスする方式として、
シーケンシャルアクセスとランダムアクセスの2つのタイプの形式があり、どちらも
指定したファイルからデータを読み込んで変数に格納することで出来ます。

INPUT命令で、指定した変数にシーケンシャルにデータを読み込むのが簡単ですね。
書き込みはPRINT命令です。
画面への出力、入力と同じ感覚で、ファイルへの入出力が出来ます。

または、ファイルを固定長データの固まりとみなして、
ファイル内の任意の位置のデータを読み書き(ランダムアクセス)の場合は、
PUT、GETを使います。

BASICだと
10 LOAD"ファイル名",R
で良いようです。
BLOADはマシン語の命令文らしくbad file のエラーが出ました。
ファイル名の後のRは、
次の読み込み後、RUNという即実行と言う意味らしいです。
これでアドベンチャーゲームとかも作れそうです。

ゴン太さん

ゴメンナサイ、早とちりして回答してしまいました。
てっきり、プログラムとデータを分離した構造で構築し、ステージデータ(マップ等のデータ)のみを読み込んで
次ステージに進む方式と思い込んで回答してしまいました。
私の頭の思考がプログラムとデータの分離前提になっちゃってました(;´Д`)

今動いているプログラムに上書きして、次ステージ用の別プログラムを丸々読む場合は、
10 LOAD"ファイル名",R
で良いですね。

BLOADはマシン語含め、RAMまたはVRAMの指定アドレスにバイナリデータを読み込むことが出来ます。
そのデータをステージデータとして利用する方法もあります。
これも、プログラムとデータを分離するプログラム構造前提の回答でした。
ちなみにBLOADの利用は、アドベンチャーゲーム的には、
VRAMの今表示しているページとは別ページに画像を読み込んだ後、メインのページに画像を転送して、
画像を切り替えたり、簡単なアニメーション表示なんかも出来ます。

BLOADにはアニメーション表示も出来るんですね。
回答ありがとうございます。

BASICでBLOADは出来ないと言うことですかね?
RPGでいうHPやMPを持ち越すことは出来ないのでしょうか?
やはり、マシン語は分かりません。

ゴン太さん
> BASICでBLOADは出来ないと言うことですかね?

BLOAD命令はBASICのプログラム内でも、もちろん実行出来ます。
マシン語を使う必要は無いです。

【書式】
BLOAD "<ファイル名>" [ {[,R]|[,S]}[,<オフセット>] ]
バイナリデータ(マシン語プログラムを含む)や画面データを、ファイルから読み込みます。

BLOAD命令は、単にバイナリデータを指定したアドレスにロードする命令です。
LOADのように、プログラムが置き換わったりせず、
マップデータだけを、メモリ上にロードしたり出来ますね。
Sオプションを使うと、画像ファイルを読み込んで、画面に表示出来ます。

> RPGでいうHPやMPを持ち越すことは出来ないのでしょうか?

やり方は色々あると思います。
LOAD命令の場合、プログラムが置き換わって変数も初期化されるので、
プログラム間でデータを受け渡す必要がありますね。
方法としては、
①RAM領域に一時的に保存する。
②フロッピディスクに一時的に保存する。

①の場合
LOAD命令を実行する前に、POKE命令で特定のRAM領域にHP、MPの値を保存しておいて、
LOAD命令実行後にPEEK命令で、RAM領域に保存したHPとMPの値を読み込めばよいです。

②の場合
LOAD前にPRINT命令でHP、MPの値をフロッピディスク上の指定したファイルに保存し
LOAD後、INPUT命令でファイルからHP、MPの値を読み込みですね。

他にも方法があると思います。

後ほど、時間が取れ次第、サンプルプログラムを作ってみます。


ご回答ありがとうございます。
一度、違うファイルで保存する事が出来れば、
アドベンチャーゲーム風のの野球ゲームが作れるかなと思っています。
「筋書きのないドラマ」なんで得点が入ると得点が一時的に保存できれば、
攻守変わった時など表示出来るなと思うのです。

ゴン太さん

ファイルを使った、プログラム間でデータをやり取りする方法をご紹介します。

例として、変数HP、MPの値を渡します。

データを渡す側: PRG01.BAS
10 HP=1200
20 MP=300
30 'save
40 OPEN "HPMP.dat" FOR OUTPUT AS #1
50 PRINT #1,HP,MP
60 CLOSE #1
70 LOAD "PRG02.BAS",R

データを受け取る側: PRG02.BAS
10 HP=0
20 MP=0
30 'load
40 OPEN "HPMP.dat" FOR INPUT AS #1
50 INPUT #1,HP,MP
60 CLOSE #1
70 PRINT "HP:";HP;" MP:";MP

ファイル "HPMP.dat" はデータ用のファイルです。

PRG02.BASは、データ用ファイル"HPMP.dat"から値を読んで変数HP、MPに設定しています。

ご回答ありがとうございます。
早速打ち込んでみました。
主人公が死んだ後の復活までの処理としてのプログラムで感動しました。
改めてBASICで色々出来るんだなと思いました。

最近、アクションゲームを作っております。
ステージクリア毎に挿絵を入れて次のステージという具合です。
プログラムを隠す命令文はあるのでしょうか?

ゴン太さん

> 最近、アクションゲームを作っております。
いいですね~

> プログラムを隠す命令文はあるのでしょうか?
"プログラムを隠す"がどういうことなのか分かりません。
フロッピディスクでゲームを配布した場合に、プレーヤーがフロッピディスク内のプログラムを
見れないようにする感じでしょうか?

実行しているプログラムをSTOPキーで中断して、list命令でプログラムが見れちゃうのを
防ぐみたいな感じでしょうか?

>実行しているプログラムをSTOPキーで中断して、list命令でプログラムが見れちゃうのを
防ぐみたいな感じでしょうか?

そうです。
防ぐような事が出来るのでしょうか?

ゴン太さん

すぐに思いつく方法は、ON STOP GOSUB命令です。

CTRL+STOPキーを押しても、プログラムを終了を出来なくし、
LISTコマンドの実行を出来なくします。

例:
---
10 ON STOP GOSUB 5000:STOP ON
<アクションゲーム 本体>
・・・・
5000 BEEP
5010 RETURN
---

例では、CTRL+STOPキーでプログラムを終了しようとすると
5000 行のサブルーチンを実行します。
ビープ音が鳴るだけで、プログラムは中断されません。
一度、動かすとプログラムが終了出来ないの注意が必要です。

5000行の処理を、特定のキーワードを入力したらプログラム終了するなどして、
作者のみが終了方法を知っているみたいな感じも良いかもしれません。

ほかの方法としては、LISTコマンドのフックを書き換えて、
LISTを実行しても何もしないようにする方法です。

フックエリア H.LIST(FF89H) : BINTRP LIST
上記のフックを変更します。

例:
10 POKE &HFF89,&hC3:POKE &HFF8A,&hC0:POKE &HFF8B,0
<アクションゲーム 本体>
・・・・

10行を実行すると、以後LISTを実行するとビープ音が鳴るだけで何もしません。
元に戻す場合は次のコマンドを実行します。

POKE &HFF89,&hC9

次のプログラムを実行後、LISTコマンドを実行すると、リストが表示されません。
10 POKE &HFF89,&hC3:POKE &HFF8A,&hC0:POKE &HFF8B,0
20 PRINT "Hello,World"


早速の回答ありがとうございます。
それと電源をオンと同時にディスク立ち上げの命令文もあるのでしょうか?
今までの質問を参考に完成しましたら、お礼という意味も込めてディスクをお送りしたいのですが。感想などを戴けたらと思います。

ゴン太さん

MSXでは起動時にフロッピディスク内に
AUTOEXEC.BAS
というファイルがあると、それをロードして実行します。
AUTOEXEC.BASで実行したいプログラムを記述すると良いと思います。

10 RUN "MYGAME.BAS"


ありがとうございます。
後半をどう終わろうか模索中です。

度々すみません。
X68000の方も扱えますか?

ゴン太さん

X68000については、全く分からないです。

ふと思いついたゲームですが、
スプライト32個で鬼ごっこのようなゲームって重くなりますよね?

コメントを書く

(ウェブ上には掲載しません)

« 新型コロナウイルス対策のフェイス シールドを入手しました | トップページ | Arduino IDE 1.8.13が公開されています »