ニャオニャオ21世紀

レトロゲーム(MSX、PCエンジン、セガサターン)と、MSXぽいアプリ開発と、最新ゲーム(PS4、SWITCH)、身体(身体意識など)、ライフハックほか雑記を綴っています

MSXマシン語入門(Z80 アセンブラ・機械語) 勉強レポート 第12回 BIOSを使う

 

BIOS!よく聞きます。

詳しい意味は最近知りました;

マシン語では必要になってくるというか、使うととても便利なもの

だそうです。

 

MSXのROMには、BASICインタープリタとBIOSが入っています。

 

BASICインタープリタは、BASICプログラムを翻訳しMSXで動くように

するもの。(BASICは、いちいち翻訳しているから遅い)

 

BIOSは、画面に文字を出したり、キーボードが押されているか調べたり、

様々な仕事を実行します。

 

そのBIOSルーチンをコールしてやれば、音を出したり、文字を画面に出したり

できるそうです。

マシン語なんて、とても単純な命令しかないし、どうやってゲームをつくるの

だろう?とても大変ではないんだろうか?と

不思議でしたが、BIOSルーチンを利用していたんですね!

 

勉強リポートが、アセンブラの命令文が LD しかやっていない状態で、

BASICの中でマシン語を使うってことをやり始めて大丈夫か?と

思われたかもしれません。

 

BASICゲームに使うマシン語は、とても簡単なBIOSルーチンが中心なのです!

 

もちろん他の命令文も使いますが、それほど難しくないようです。

 

BIOSの使い方

BIOSルーチンは、決められたアドレスをコールするだけで使用できます。

 

例えば、

CALL  00C0H

とすれば、ビープ音がでます!

おお、簡単!

 

そんな単純なものだけではなくて、

 

画面に文字(1文字のみ)を表示するは

CALL  00A2H

です。

その時、どんな文字を表示できるのか?ですが、

Aレジスタに入っているキャラクターコードを表示します。

 

だいたいがこんな感じみたいで、いくつかのレジスタに入っている値を

利用して、ある機能を実現しているようです。

返り値がある場合は、結果が、あるレジスタに入れられたりします。

 

だからとりあえず簡単なものは、LDでレジスタに値をいれることができれば、

BIOSルーチンは使うことができるのです!

 

BASICゲームでマシン語を使う場合に一番使いたいBIOSルーチンは、

 

1.VRAMからメモリへブロック転送する

2.メモリからVRAMへブロック転送する

 

です。

 

これができるとスクロールとか、画面をぱっと表示することができるはずです。

 

とりあえずはこれができるのが一番の目標です。

マシン語の中でも、BIOSを使うのは簡単そうです。

はやく、実装したい〜。

 

今日のところはここまでにしておきます。

では〜。

 

駿河屋

中古MSXハードMSX本体 V-20

MSX1。

Canon製。メモリが64kバイトもあります。

スポンサーリンク

 

 

 

www.nyaonyao21.com

MSXマシン語入門(Z80 アセンブラ・機械語) 勉強レポート 第11回  引数を渡す

MSXマシン語勉強レポート 第11回は、

引数を使って、BASICからマシン語のプログラムに値を渡します。

 

使うのはUSR関数の引数です。

 

USR関数に引数をつけてマシン語をコール

         ⬇︎ 

HLレジスタに入っているアドレスの2バイト先に、引数として渡した数が入る

 

む?よくわからないなぁ?

引数がメモリのどこかに入るんですね。

それがどこか?

HLレジスタの値->(アドレスが入っているですね)

そのアドレス +  2バイト先(2バイト先と3バイト先に) 

 

なぜHLが示すアドレスの値をそのまま使わないのかなぁ。怒!

 

                                                               メモリ

HLレジスタ(アドレス) ーーーー>|  0          |     1     |      2     |     3      |

                                                              | HLのアドレス |            |      値が入る       |

 

2バイト先には、その引数の値(整数)の  下位8ビット

その次のアドレスの、3バイト先には、その引数の値(整数)の 上位8ビットが

入るそうです。

 

マシン語の方でHLの値を+2してやって、そのアドレスに入っている値を、

どこかのレジスタにいれてやって使えばいいんですね!

 

サンプルでは、

INC   HL

INC   HL

LD    C  ,  (HL)

ってやっています。

 

ちなみにINCって、インクリメントの意味で、1増やすってことです。

マシン語の命令は、LDしかやっていませんでしたね。

近いうちに他の命令もやらないといけないなぁ。

 

この引数渡しも、一度理解すれば簡単ですね。

この引数渡しを何に使うかですが、

例えば画面をスクロールさせたい時に、

メモリ内のマップデータをVRAMに転送する時に必要です。

(マップデータが入っている、最初のアドレスをマシン語に送ってやる)

 

MSX FANにもこの引数渡しが書いてありました。

 

中古ゲーム雑誌MSX・FAN 1991年6月号 

<駿河屋>

(この号にメモリからVRAMへのブロック転送が書かれていて、そこに出てくる)

 

でも今日やった本と少しちがうような?

USR関数の引数は、

メモリのアドレス &HF7F8

に入っているとあります。はて?

どちらが正しいのか?

実際にやってみないとわからないですねぇ;

 

こういうの困るな〜。

 

試行錯誤しながらやっていきます!

では〜。

 

 中古MSXハードMSX2本体 FS-A1F(黒)

      <駿河屋>

 

 

www.nyaonyao21.com

 

          

PS4 北斗が如くの体験版をプレー!面白い、コレ!!

PS4の北斗が如くの体験版をプレーしました。

まず最初にアクションシーンのプレーから。

最近のPS4のアクションゲームはあまりやらないのですけど、

面白いですねー。

特に秘孔を突くのとか、百裂拳のようなラッシュとか。

 

ゲームを進めていけば、どんどん北斗の拳の技がだせるようになるみたいです。

 

北斗の拳といえば、直撃世代なのです。

よくみんな、あべしとか言ってましたねw

技も出し合っていました。

 

私はといえば、まぁそれなりに見ていた感じですかね。

主にテレビを楽しみにしていました。

 

このゲームは、北斗の拳の世界観が体験できます。

世は世紀末!!

それだけでも非常に楽しい。

 

体験版では、シンとの戦いまで収録です。

それと、ストーリーモード。

 

北斗の拳だけあって、人が爆発します。うーん。

でもマイルドなのも選べるみたいで、まぁ安心かな。

最近はグロいの苦手で。

 

龍が如くとのコラボということで、システムは龍が如くなのでしょうか。

やったことないんですよねー。

興味はあるのですが、設定がね、ちょっと。

 

f:id:nyaonyaokun:20180307130908j:plain

f:id:nyaonyaokun:20180307131145j:plain

 

グラフィックも非常にかっこいい!

声優さんなのですが、昔のテレビ版とは違うのかなぁ?

どうなんだろう?

違うような気がします。

でも雰囲気は出ていて、違和感はなし!

 

f:id:nyaonyaokun:20180307131448j:plain

 

久しぶりに最新のゲームで買ってもいいなぁと思えるゲームでした。

世界はどのくらいの広さなんだろうか?

一つの街だけなんでしょうか?

広いといいなぁ〜。

 

スポンサーリンク

 

 

あ、でも先にWiiのバーチャルコンソールを買わないといけないから、

それらが落ち着いたら買おうと思います。

 

 

北斗が如く - PS4
北斗が如く - PS4
posted with amazlet at 18.03.07
セガゲームス (2018-03-08)
売り上げランキング: 2

MSXマシン語入門(Z80 アセンブラ・機械語) 勉強レポート  第10回 BASICの中からマシン語を呼び出す

今日は、MSX BASICの中から、マシン語を呼び出す方法を勉強しました。

前回のページはこちらです。

www.nyaonyao21.com

 

 

最近はWebMSXで動かす、BASICで書かれたゲームの記事を

書いていますが、

 

www.nyaonyao21.com

 

処理が遅く、マシン語の必要性を感じてきたので

また、マシン語の勉強を再開したいと思っていました。

 

今までマシン語の勉強に使っていた本では最後の方のページになりますが

問題ないと思います。

 

BASICからマシン語を呼び出す場合は

マシン語はサブルーチンになるそうです。

メインルーチンはBASICですね。

 

マシン語は、メモリに直接数字(マシン語の命令とか)を

入れておいて実行されるものですが、

どうやってメモリにマシン語をいれるかというと

2種類あるそうです。

 

1.POKE文(BASICの命令)を使う。

 

POKE &HD000,&H89

などと書きます。

POKE メモリのアドレス、入れたい値

です。

 

2.カセットテープにセーブしたデータや

 プログラムをBLOAD命令でロードする。

(DISKは書いてませんでした;)

 

BLOAD "ファイル名"

で呼び込むそうです。

お、カセットテープの市販のゲームで使っていました、これ!

そのときはどんなふうだったかな?

bload"cas:",r

を打ち込むとテープから読み込んでいました。

懐かしいですね!

 

メモリへデータを直接読み込んでいたんですね!

ちなみにマシン語のプログラムファイルを作るには、

BSAVE"CAS:PROG1",&HD000,&HD028

などとするそうです。

PROG1はファイル名

あとの16進数は&HD000〜&HD028のメモリの内容をセーブすると

いうことみたいです。

 

そのプログラムをロードするのは

BLOAD"CAS:PROG1"

でカセットテープからロードされるそうです。

 

市販のテープのゲームもBLOADのあとの ,Rをつけずにロードして

あとはメモリを覗く命令のPEEKをつかえば、

マシン語が見れたのかな?

 

へぇ〜。

市販のゲームのマシン語を覗くなんて、当時小学生だった私には

考えたこともなかったです;

そういうことやっていた人もいたのかな〜?

すごいですね!

 

マシン語プログラムのコール

 マシン語を呼び出すのは、BASICのUSR関数というのを使うそうです。

 

まず、メモリに入れたマシン語を保護しないといけないそうです。

 

メモリにはBASICの変数領域というのがとられるそうです。

BASICで変数を使うときに、値を取っておく領域だそうです。

 

その領域が勝手にとられるので、マシン語の領域を壊してしまわないように

しないといけません。

 

そのために

CLEAR文を使うそうです。

 

CLEAR 300,&HCFFF

などとします。

変数の領域をあるアドレスよりも上におけという命令だそうです。

 

マシン語の領域を壊さないために、

BASICの変数領域をどこにするか指定するわけですね!

 

ここでMSXのメモリのことが書いてありました。

           

     RAMの構成(32k,64kのMSXの場合)

(アドレス)

&H8000  -------------------------

         BASICプログラム

      マシン語とか

&HF380  --------------------------

                ワークエリア

                ---------------------------

 

32kバイト、64kバイトのMSXの場合は、

プログラムが入るアドレスが

&H8000

 

16kバイトのMSXの場合は、

アドレスが

&HC000

になるそうです。

 

ワークエリアというのは、BASIC インタプリタが動くために

使うデータを入れておく領域だそうです。

 

BASICのプログラムは上の方にはいるので、マシン語は下の方に

いれるといいそうです。(ワークエリアより上)

ふむふむ。

 

この本では&HD000 (D000H番地)

くらいからマシン語を入れていけば十分でしょうと書いてありました。

 

 

そして、いよいよマシン語の呼び出しです。

マシン語を使うには、

マシン語の開始アドレスを教えてやらなければいけません。

 

それには、

 DEF USR = &HD000

&HD000からマシン語をスタートすることを宣言

 

実際にマシン語のサブルーチンを使うときは、

A=USR(0)

とします。

0~9まで宣言できるそうです。

 

実際の使い方は,

MSX BASICでゲームを作ろうのページで紹介することが

あるかもしれません。

(勉強した本には特に詳しく書いてなかったです)

 

中古MSXハード1 chip MSX(1チップMSX)

中古MSXハードMSX2本体 FS-A1F(黒)

 

今日はこの辺りまでとします。

次回は、BASICからマシン語へ値を渡すということを勉強します。

(マシン語からBASICへ値を渡すのは難しいので、

勉強している本には書いてないそうです。)

 

面白くなってきました!

では〜。

スポンサーリンク

 

 MSXのゲームを作りたいという思いが、

こんななんちゃってMSXゲームを生み出してしまいました;

iphoneとandroidのアプリです。

簡単操作です。

 無料ですので試してみてください^^

8bit run run go

8bit run run go

  • nao21
  • ゲーム
  • 無料

 

 

play.google.com

 

www.nyaonyao21.com

 

 

 

 

www.nyaonyao21.com

 

Wiiのバーチャルコンソール終了間近!この見やすいリストを使って、まずは買うものをリストアップ!

Wiiのバーチャルコンソールのポイントは、

2018年3月27日(火曜日) 4:59まで

しか買えません!

なお10,000ポイントまでしかいれることができないそうです。

 

こちらのWikiがわかりやすいです。

www65.atwiki.jp

 

左のメニューからアーケードなどを選んで、

ランクでソートするとわかりやすいです。

 

自分が買うものをリストアップします。

まず、

 

アーケード

 オリジナルか、Wiiでしかできなもの

 

ザクソン SEGA   1982年

 

リブルラブル namco  1983年

妖怪道中記 namco  1987年

超絶倫人 ベラボーマン namco   1988年

メルヘンメイズ namco 1988年

フェリオス namco 1989年

マーベルランド namco 1990年

スターブレード namco    1991年

 

NEOGEO

 特になし。

 

ファミコン

 特になし。

カセットで持っているのがほとんどだったので。

 

スーパーファミコン

 特になし。

持っていないのは、中古で、比較的安価に買えそうだったので。

 

ニンテンドー64

 特になし。

あまり思い入れがないので。

 

マスターシステム

 スーパーワンダーボーイ モンスターワールド

 北斗の拳

 

メガドライブ

 重装機兵レイノス

ストーリー・オブ・トア 光を継ぐ者

スプラッターハウス PARTII

チェルノブ

バーチャファイター2《ジェネシス版》

ボナンザブラザーズ

武者アレスタ

リスター・ザ・シューティングスター

レンタヒーロー

ワンダーボーイIII モンスターレア

 

PCエンジン

悪魔城ドラキュラX 血の輪廻

ヴォルフィード

スターパロジャー

スプリガンmark2

精霊戦士スプリガン

タイトーチェイスH.Q.

ワルキューレの伝説

ニュージーランドストーリー

 

MSX

メタルギア

メタルギア2 ソリッドスネーク

 

 

全部で30本。

1本、800円程度だとしても、24000円!

結構なお値段になってしまう。

でも中古で買うとお高いのも多いので。うーむ。

 

皆さんは何本位買われるのでしょうか?

SDカードとかもいるのかな。

 

それでは~。

 

スポンサーリンク

 

WebMSXでMSX BASICの自作ゲーム作成!第九弾。 MAPをDATA文より持ってくる。遅い^^(URLクリックで実行できます)

今日はマップをDATA文より取得します。

前回までは、LOCATE、PRINTで表していました。

かなりアナログな方法だったのですけど、

意外や意外、表示は一瞬でした。

しかし今回、マップデータを読み込みで表示したところ

かなり遅くなってしまいました^^

これぞ、BASIC!

っていうスピードです。

 

URLクリックで実行できます。

 

http://webmsx.org/?DISKA_URL=http://goods.heteml.jp/msx/move6dot (8).dsk

 

f:id:nyaonyaokun:20180304134207p:plain

 

ちなみに、右へ進むと、画面切り替えで隣のステージへいけるように

してみました。

(これから益々遅くなることを危惧して、キャラは8ドット移動です。)

 

表示をVRAMに書き込んでやっているのは、

今後、一部マシン語で使うときに、やりやすくなるように、です。

マシン語にはBIOSに、メモリのデータを一括でVRAMに移すことが

できるらしいので、期待しております!

 

そーいえば、当時、マシン語を使ったプログラムはあんまり打ち込んだ

ことがなかったので、どのくらい速くなるのか、

まったくの未知数です^^

 

今回のマップ読み込みは、圧縮的なことはしておりません

(そもそもよくわからないし)

ではソースコードを。


5 COLOR 15,5,1
10 SCREEN2:SCREEN1,2,0:DEFINTA-Z:KEYOFF
:WIDTH32:LOCATE14,4:PRINT"wait"
15 DEFUSR=&H7E:A=USR(0)
20 H2 = 1:X=112:Y=160:XX=4:YY=4:DIM A1(
20):SS=19:DIM R(16,12)
30 FOR J=0 TO 7:S$="":FOR I=1 TO32:READ
D$:S$=S$+CHR$(VAL("&H"+D$)):NEXT:SPRITE
$(J)=S$:NEXT
40 FOR K=0 TO SS:A1(K)=65+K:NEXT
41 D$="":RESTORE 1000
44 FOR K=0 TO SS
49 D$=""
50 FOR I=0 TO 7
60 READ D$,C$
70 VPOKE A1(K)*8+I,VAL("&b"+D$)
72 VPOKE &H800+A1(K)*8+I,VAL("&b"+D$)
74 VPOKE &H1000+A1(K)*8+I,VAL("&b"+D$)
90 VPOKE &H2000+A1(K)*8+I,VAL("&h"+C$)
92 VPOKE &H2800+A1(K)*8+I,VAL("&h"+C$)
94 VPOKE &H3000+A1(K)*8+I,VAL("&h"+C$)
96 NEXT
99 NEXT
100 CLS:RESTORE 3000
110 FOR I=0 TO 11:READ M$:FOR K=0 TO 15
:R(K,I)=ASC(MID$(M$,K+1,1)):NEXT:NEXT
120 FOR I=0 TO 11:FOR K=0 TO 15:IF R(K,
I)<>48THEN BX=K*2:BY=I*2:E=R(K,I):GOSUB
560:NEXT:NEXT ELSE NEXT:NEXT
170 S=STICK(0) OR STICK(1):TG=STRIG(0)
OR STRIG(1)
180 IF JF<>1 THEN XX=0
185 XA=X:YA=Y
190 IF S=3 THEN XX=6
200 IF S=7 THEN XX=-6
210 X=X+XX
220 'IF S=1 THEN Y=Y-YY

230 'IF S=5 THEN Y=Y+YY
240 H2=-H2:IF JF=1 THEN H2=-1
250 IF S=3 AND H2=1 THEN H=0
260 IF S=3 AND H2=-1 THEN H=4
270 IF S=7 AND H2=1 THEN H=1
280 IF S=7 AND H2=-1 THEN H=5
290 IF X<0 THEN X=0
300 IF X>240 THEN X=0:CLS:GOTO110
310 IF JF=1 THEN 340
320 IF TG=0 THEN 390
330 JF=1:JY=-16:JC=3
340 IF JC=0 THEN 370
350 IF TG=0 THEN JC=0:GOTO 370
360 JC=JC-1
370 IF JC=0 AND JY<8 THEN JY=JY+4
380 Y=Y+JY
390 X2=(X-XX)\8:Y2=Y\8:Y3=(Y-JY)\8:IF J
F=0 THEN JY=0
391 'PUTSPRITE 0,(XA,YA),7,H
392 'PUTSPRITE 1,(XA,YA),11,H+2
400 AD = &H1800+(X\8)+(Y\8)*32

410 AE=&H1800+((X+15)\8)+(Y\8)*32
420 IF XX>0 AND VPEEK(AE)>=A1(0) THEN X
=X2*8:XX=0
430 IF XX>0 AND VPEEK(AE+32)>=A1(0) THE
N X=X2*8:XX=0
440 IF XX<0 AND VPEEK(AD)>=A1(0) THEN X
=X2*8
450 IF XX<0 AND VPEEK(AD+32)>=A1(0) THE
N X=X2*8:XX=0
460 AD = &H1800+(X\8)+(Y\8)*32
470 AE=&H1800+((X+15)\8)+(Y\8)*32
480 IF JY<0 AND VPEEK(AD)>=A1(0) THEN Y
=Y3*8:JF=0:JY=0
490 IF JY<0 AND VPEEK(AE)>=A1(0)THEN Y=
Y3*8:JF=0:JY=0
500 IF JY>=0 AND VPEEK(AD+64)>=A1(0) TH
EN Y=Y2*8:JF=0:GOTO 530
510 IF JY>=0 AND VPEEK(AE+64)>=A1(0) TH
EN Y=Y2*8:JF=0:GOTO 530
520 IF JF=0 THEN JF=1:JC=0:JY=0
539 PUTSPRITE 0,(X,Y),7,H
540 PUTSPRITE 1,(X,Y),11,H+2
550 GOTO 170
560 VPOKE &H1800 + 32*BY + BX,E
570 VPOKE &H1800+ 32*BY+BX+1,E+1
580 VPOKE &H1800 + 32*(BY+1)+BX,E+2
590 VPOKE &H1800 + 32*(BY+1)+BX+1,E+3
600 RETURN
800 DATA 2E,2D,67,7E,78,7C,38,06,16,17,
0F,14,1D,07,0F,0F,F0,F8,80,00,00,00,00,
00,E0,70,70,20,50,80,80,E0
810 DATA 0F,1F,01,00,00,00,00,00,07,0E,
0E,04,0A,01,01,07,74,B4,E6,7E,1E,3E,1C,
60,68,E8,F0,28,B8,E0,F0,F0
820 DATA 10,10,18,00,01,01,01,00,00,00,
00,03,00,00,00,00,00,00,10,50,D8,F0,E0,
00,00,00,00,00,00,00,00,00
830 DATA 00,00,08,0A,1B,0F,07,00,00,00,
00,00,00,00,00,00,08,08,18,00,80,80,80,
00,00,00,00,C0,00,00,00,00
840 DATA 00,1E,5D,4B,7E,78,7C,38,06,0D,
1D,0D,16,2B,38,1E,00,E0,F8,80,00,00,00,
00,00,E0,F0,30,20,D4,3C,38
850 DATA 00,07,1F,01,00,00,00,00,00,07,
0F,0C,04,2B,3C,1C,00,78,BA,D2,7E,1E,3E,
1C,60,B0,B8,B0,68,D4,1C,78
860 DATA 00,20,20,30,00,01,01,01,00,00,
00,00,00,00,00,00,00,00,00,10,50,D8,F0,
E0,00,00,00,C0,C0,00,00,00
870 DATA 00,00,00,08,0A,1B,0F,07,00,00,
00,03,03,00,00,00,00,04,04,0C,00,80,80,
80,00,00,00,00,00,00,00,00
1000 DATA 00000100,1f
1010 DATA 00000100,15
1020 DATA 00000100,15
1030 DATA 11111111,15
1040 DATA 00100000,15
1050 DATA 00100000,15
1060 DATA 00100000,14
1070 DATA 11111111,15
1075 '
1080 DATA 00000100,1f
1090 DATA 00000100,15
1100 DATA 00000100,15
1110 DATA 11111111,15
1120 DATA 00100000,15
1130 DATA 00100000,15

1140 DATA 00100000,14
1150 DATA 11111111,15
1155 '
1160 DATA 00000000,15
1170 DATA 00000000,15
1180 DATA 00000000,15
1190 DATA 00000000,15
1200 DATA 00000000,15
1210 DATA 00000000,15
1220 DATA 00000000,15
1230 DATA 00000000,15
1235 '
1240 DATA 00000000,15
1250 DATA 00000000,15
1260 DATA 00000000,15
1270 DATA 00000000,15
1280 DATA 00000000,15
1290 DATA 00000000,15
1300 DATA 00000000,15
1310 DATA 00000000,15
1315 '
1320 DATA 00000000,ef
1330 DATA 11111111,ee
1340 DATA 01100110,1f
1350 DATA 11111111,ee
1360 DATA 01100110,1f
1370 DATA 11111111,ef
1380 DATA 10011000,5f
1390 DATA 10000000,5e
1395 '
1400 DATA 00000000,ef
1410 DATA 11111111,ee
1420 DATA 01100110,1f
1430 DATA 11111111,ee

1440 DATA 01100110,1f
1450 DATA 11111111,ef
1460 DATA 00011001,5f
1470 DATA 00000001,5e
1475 '
1480 DATA 11001000,5f
1490 DATA 11001000,5f
1500 DATA 11001000,5f
1510 DATA 11001000,5f
1520 DATA 11001000,5f
1530 DATA 11001000,5f
1540 DATA 11001000,5f
1550 DATA 11001000,5f
1555 '
1560 DATA 00010011,5e
1570 DATA 00010011,5e
1580 DATA 00010011,5e
1590 DATA 00010011,5e
1600 DATA 00010011,5e
1610 DATA 00010011,5e
1620 DATA 00010011,5e
1630 DATA 00010011,5e
1635 '
1640 DATA 11001000,5f
1650 DATA 11001000,5f
1660 DATA 11001000,5f
1670 DATA 11001000,5f
1680 DATA 11001000,5f
1690 DATA 11001000,5f
1700 DATA 11001000,5f
1710 DATA 11001000,5f
1715 '
1720 DATA 00010011,5e
1730 DATA 00010011,5e
1740 DATA 00010011,5e
1750 DATA 00010011,5e
1760 DATA 00010011,5e
1770 DATA 00010011,5e
1780 DATA 00010011,5e

1790 DATA 00010011,5e
1795 '
1800 DATA 11001000,5f
1810 DATA 11001000,5f
1820 DATA 11001000,5f
1830 DATA 11001000,5f
1840 DATA 11001000,5f
1850 DATA 11001000,5f
1860 DATA 11001000,5f
1870 DATA 11001000,5f
1875 '
1880 DATA 00010011,5e
1890 DATA 00010011,5e
1900 DATA 00010011,5e
1910 DATA 00010011,5e
1920 DATA 00010011,5e
1930 DATA 00010011,5e
1940 DATA 00010011,5e
1950 DATA 00010011,5e
1955 '
1960 DATA 00000100,1e
1970 DATA 00000100,18
1980 DATA 00000100,16
1990 DATA 11111111,15
2000 DATA 00100000,23
2010 DATA 00001000,a3
2020 DATA 01000010,c3
2030 DATA 10000010,c3
2035 '
2040 DATA 00000100,1e
2050 DATA 00000100,18
2060 DATA 00000100,16
2070 DATA 11111111,15
2080 DATA 00100000,23
2090 DATA 00001000,a3
2100 DATA 01000010,c3
2110 DATA 10000010,c3

2115 '
2120 DATA 00000100,23
2130 DATA 00100000,c3
2140 DATA 10000100,c3
2150 DATA 10010011,c3
2160 DATA 00001000,23
2170 DATA 00100100,c3
2180 DATA 10000000,c3
2190 DATA 00001000,c3
2195 '
2200 DATA 00000100,23
2210 DATA 00100000,c3
2220 DATA 10000100,c3
2230 DATA 10010011,c3
2240 DATA 00001000,23
2250 DATA 00100100,c3
2260 DATA 10000000,c3
2270 DATA 00001000,c3
2275 '
2280 DATA 00001111,35
2290 DATA 00111111,35
2300 DATA 01110111,35

2310 DATA 11111111,3c
2320 DATA 11111111,3c
2330 DATA 11111011,3c
2340 DATA 11111111,2c
2350 DATA 11011111,32
2355 '
2360 DATA 11110000,35
2370 DATA 11111100,35
2380 DATA 11111110,35
2390 DATA 10111111,3c
2400 DATA 11110111,3c
2410 DATA 11111111,2c
2420 DATA 10111110,3c
2430 DATA 11101111,22
2435 '
2440 DATA 11111110,3c
2450 DATA 01111111,2c
2460 DATA 11110111,3c
2470 DATA 11011111,2c
2480 DATA 01111111,2c
2490 DATA 01111111,25
2500 DATA 00111111,c5
2510 DATA 00011111,c5
2515 '
2520 DATA 11111011,3c
2530 DATA 11111111,2c
2540 DATA 11011111,3c
2550 DATA 11111011,2c
2560 DATA 11111110,2c
2570 DATA 11111110,25
2580 DATA 11111100,c5
2590 DATA 11111000,c5
3000 DATA 0000000000000000
3010 DATA 0000000000000000
3020 DATA 0000000000000000
3030 DATA 00000AAA00000000
3040 DATA AA000000000AAA00
3050 DATA 0000000000000000
3060 DATA 000000E000000000
3070 DATA 0000E0I000000000
3080 DATA 0000IEI000000000
3090 DATA Q0Q0III000000MMM
3100 DATA 0QQQIII0000MMMMM
3110 DATA MMMMMMMMMMMMMMMM

3115'

3120 DATA 0000000000000000
3130 DATA 0000000000000000
3140 DATA 0000000000000000
3150 DATA 0000000000Q00000
3160 DATA 0000000000Q00000
3170 DATA 000000AA00Q00000
3180 DATA 0000000000Q00000
3190 DATA 0000AA0000Q00000
3200 DATA 0000000000Q00000
3210 DATA MMM0000000Q00000
3220 DATA MMMMM00000Q00000
3230 DATA MMMMMMMMMMMMMMMM

 

スポンサーリンク

 

 

では、簡単に説明を。

100 CLS:RESTORE 3000

マップデータは3000行以降に入っています。

 

110 FOR I=0 TO 11:READ M$:FOR K=0 TO 15
:R(K,I)=ASC(MID$(M$,K+1,1)):NEXT:NEXT

 

<画面構成>

16x16ドット(2文字x2文字)を1単位としてます。

データ量を減らすためです。

 

          横:16ブロック

        |ーーーーーーーー|

縦:12ブロック |        |  

        |        |

        |ーーーーーーーー|

1ブロック(16x16)は、4文字で構成されています。

その左上の文字をDATA文に入れておきます。

    A B

              C D

で構成されていたら、AをDATA文にいれておきます。

4文字を連番で形を変えています。

 

ABCDの文字を、レンガに。

EFGHの文字を、柱の上部に。

IJKLの文字を、柱に。

MNOPの文字を、地面に。

QRSTの文字を、草に。

しております。

 

R(K,I)=ASC(MID$(M$,K+1,1))

の部分は、

R ( K , I ) は、R ( X座標、Y座標 )になります。

2次元配列の座標に、一文字ずつ入れていきます。

 

120行は、

120 FOR I=0 TO 11:FOR K=0 TO 15:IF R(K,I)<>48 THEN BX=K*2:BY=I*2:E=R(K,I):GOSUB560:NEXT:NEXT ELSE NEXT:NEXT

 

R ( X座標、Y座標 )が48(0のアスキーコード)じゃない時、

560行へ行きます。(BX、BYは2文字づつ書き換えなので、*2している)

 

 

560行はVRAMの画面構成の部分を書き換えるサブルーチンです。

560 VPOKE &H1800 + 32*BY + BX,E
570 VPOKE &H1800+ 32*BY+BX+1,E+1
580 VPOKE &H1800 + 32*(BY+1)+BX,E+2
590 VPOKE &H1800 + 32*(BY+1)+BX+1,E+3
600 RETURN

 

VRAMの&H1800から、画面の情報が入っています。

Eは、ブロックの左上のアスキーコードがはいっています。

E+1は、ブロックの右上、

E+2は、ブロックの左下、

E+3は、ブロックの右下

です。

 

 

3000行以降のDATAは、

3000行~3110行 で、スタート時のマップのデータ

3120行~3230行で、右隣のマップデータです。

 

マップの切り替えは、まだ簡易なものなので、また今度。

 

とりあえず、今後、マシン語の勉強をします。

BIOSを使うだけなので、それほど時間はかからないと思います。

(BIOSとは、初めから用意されている命令群のようなもの。速い!)

 

そろそろデータを2進数から、16進数にしないといけないですね。

見やすいけど、長すぎる;

 

ジャンプの修正もしないと…。

すこしづつやっていきます。

 

今回、かなり遅くなってしまって、ゲームとしてはなんだかなぁと

いう感じになってしまいました。

データ量を気にしなければ、以前のPRINT文の方が速いので、

そちらでやられるのもいいと思います。

 

さあ、マシン語!

楽しみすぎます〜。

 

iphoneとandroidでアプリを作りました。

MSXっぽいアプリで、横スクロールランアクションゲームです。

ボスとかはいっております。簡単操作で懐かしいを目指して作りました。

 無料です。お願いします〜〜〜^^

8bit run run go

8bit run run go

  • nao21
  • ゲーム
  • 無料

 

 

play.google.com

 

www.nyaonyao21.com

 

次のページ

www.nyaonyao21.com

 

 

スポンサーリンク

 

 

 

あなたの肩こりは、こたつトップ(こたつでのPC作業)のせいかもしれません。800円で解消しました!

最近、肩こりが酷くて、困っておりました。

何が原因かといろいろ考えて、

こたつでブログを書いたり、ゲームを作ったり

していたせいだと判明しました。

 

最初は、眼精疲労を疑いました。

確かにそれもあると思います。

でも、それは本質ではなく、一番の原因は、

こたつの上に置かれたノートPCで、キーボード作業やマウス作業だとわかりました。

 

こたつはテーブルの高さが高すぎるのです。

それで肘を高くしてしまって肩が凝るのだと思います。

30分くらいならいいのですけどねぇ〜。

 

 

それで、膝の上でキーボードを打ったり、マウスで作業できないかと考えました。

お金がないので、できるだけ安価で!これ大事!

 

そこでホームセンターにいって板を買ってきました。

大きさは60センチx20センチです。

価格は800円!

手前の角が少し丸くなっている板があったのでそれを買いました。

幸い、外付けキーボードは持っていましたので、それを利用しています。

 

f:id:nyaonyaokun:20180303153339j:plain

 

おお!

これは快適!

いいんじゃないでしょうかw

 

肩の負担が激減しました。

大きさもいい感じです。長さがある程度ないと膝の上に乗らないので。

私のキーボードはapple製品で、端がでっぱっているのでいいのですが、

物によっては滑るかもしれません。

 

あとは、肘置きも欲しいのですけどね^^

 

もう少し暖かくなってきたら、PCデスクに移動しますが、

まだ3月なので、しばらくは、これでこたつでのヌクヌク作業です^^

 

AMAZONにはこんな商品もありました。

やっていることは同じなんですが、クッションやマウスパッドが付いているようです。

 

 

イーサプライ クッションテーブル 膝上 ラップトップ ノートPC タブレット EYS-KOT01
 
おもしろいですねw
 
800円の板でも、しっかり機能しますが、
この机もなかなかいいですね。
 
これで肩こりが解消されて、ゲーム製作も、ブログも
長い時間やることが出来そうです^^
 
こたつトップで作業していて肩こりが酷い方は、キーボードの高さに
注意してみてください!
キーボードの位置を低くするか、
お尻を高くするかすれば解消できるかもしれません。
 
みなさんの肩こりが治ることを祈って!
 
では〜。
 
 
「ニャオニャオ21世紀は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」

当サイトは第三者配信の広告サービス「Google Adsense グーグルアドセンス」を利用しています。 広告配信事業者は、ユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。 Cookie(クッキー)を無効にする設定およびGoogleアドセンスに関する詳細は「広告 – ポリシーと規約 – Google」をご覧ください