WebMSXの仕様を考えてみる。プログラミング学習

今日はですね、とあるサイトで公開されていたWebMSXという大昔のコンピューターが紹介されていて遊んでいたんですが、ふとこれどうやって動いているんだろ?

と話題になりました。コメント欄でやりとりしてもいいんですが、コメント欄でやると長くなりそうですし。

せっかく書くなら記事にしたいと思ってこの記事を書くことにしましたw

友達以上彼氏未満ならぬ、コメント以上、記事未満という内容ですのであまり期待しないでくださいw

WebMSX

以下のサイトにアクセスすると即プログラミングが実行できるというスグレモノ

MSX自体は昔々発売されていたコンピューターだそうです。

この記事を読んでいる人には初めて聞く人ももしかしたらいるかもしれませんがフロッピーを読み出したりできるレベルの古さですw

WebMSX

以下のサイトには基本的なMSXの使い方や、書き方が乗っていますので目を皿のようにしてみてみてくださいw

学習一 その場で触って“変数”を理解
学習ニ 利用できる“部品”の一つ-四則演算と剰余を理解
学習三 利用できる“部品”の一つ-関数を理解
学習四 “部品”を使ってかんたんなプログラムを作る
学習五 プログラムが「命令の順番を書き記したもの」ということを実感
学習六 “順番を変える命令”の一つ-ループを理解する
学習七 “順番を変える命令”の一つ-条件分岐を理解する
学習八 プログラムを組めるようになるにはどうするべきかを理解する

とりあえずソース見てみる

はい、何じゃこりゃレベルですねw

文字数にして1364420文字ありましたよw 僕が書いたことのあるスクリプトで長いものでも2000ぐらいだったと思います。

単純に効率の悪い文を書いていて長くなったにしてもこれは凄いww

使用言語

Javascriptではないということだったがソースの下にJavascriptって書いてあったのと

試しにJavascriptをオフにしてアクセスしたところ真っ白でなにも表示されなかったので、Javascriptということがわかりましたw

WebMSX – The online MSX emulator,
WMSX – The online MSX emulator,
Play MSX2+ games online in your browser,
Javascript HTML5 MSX Emulator,
MSX.js, MSX.thml, WMSX.js, WMSX.html, WebMSX.js, WebMSX.html,
MSX-MUSIC, SCC, SCC+, FM-PAC, FM, PSG,
9918, 9938, 9958, VDP, Z80, PPI,
ROM, ROMS, Disk, Tape, Images,
BASIC, MSX-BASIC, MSX-DOS,
Touch Screen, Mobile, Tablet, Android, iPhone, iPad, iPod, iOS,
App, offline, add to home screen,

WebMSXソースより抜粋

僕なりにWebMSXの仕様考えてみた。

WebMSXはユーザーが書いたプログラムをENTERを押すとその場で実行して結果を返すという動きをしています。

他にもいろいろできるのかもしれませんが紹介されていたのはこれだけなのでこれしかわかりませんw

その場で実行して結果を返す。これは非同期通信という技術が使われているものと思われます。

最近では当たり前のように各所で使われているので気づいてない人もかなり多いと思いますが、Web上でなにか操作する通信には2種類あります。

ページ移管するかしないかです。

例えばTwitterを見ていると

赤線を引いた部分は更新をすることなく20件の新着ツイート表示と表示されていますが、そのままにしていると、20件がどんどん増えています。これが非同期通信です。

次に自分のツイート数を見たいと思ったときにのURLをクリックします。

https://twitter.com/usachannelalice?lang=ja

このときにはユーザーがサーバーにこのURL見たいと要求してサーバーがレスポンスを返しますので同期通信です。

WebMSXに関しては他のスクリプトを読み出したりはしていなかったのですが、僕がやるとしたらプログラムが入力されたらPHPを読み出してユーザーから受け取った処理をPHPに置き換えて結果を返します。

プログラムの中で動くプログラム

WebMSXはプログラムをユーザーが打ち込んで決定したら結果を返しています。

なんで、まんまなんですが、プログラム側でどのようなプログラムか認識して、結果を返すという動きをしているわけです。

言語の違いがあれどやることは同じなので、

A$=”Alice”

M1=len(A$)

PRINT A$

というA$の文字数を数えて結果を出力というプログラムを例にすると

A$=”Alice”

まず書式が正しいものか判断します。プログラムは変数の代入が来たなと認識して

正しい書式だったら、”” この間になにが書いてあるかを読み出します。

M1=len(A$)

この場合でも正しい書式かを判断します。

正しければ、変数名と関数に入っている値を読み出します。

このようにプログラムの型は決まっていますので、ユーザーが入力してくる値だけを考えればいいです。

実働しているもの

実は僕の前のブログでは独自タグという形で、テキストからプログラムを実行するというプログラムがあちこちで動いています。

ブログではレイアウトをテキストファイルに保存、表示する際には読み出して表示しています。

ファイルの中にランダム数字を呼び出す独自タグがあったとします。

こんなの→[乱]

ファイルの中身

あかさた[乱]なはまや

$rand = mt_rand(0,999);

$rand には 942とか444とか222みたいに乱数が既に入っている。

プログラムはテキストファイルを読み出す前に実行しておきます。

表示するまえに一度テキストファイルを読み込み

[乱]という文字列を$randに置き換えておきます。

既に$rand は数字に置き換わっているのでテキストファイルを読み出すとこのようになります。

ファイルの中身

あかさた942なはまや

四則演算やfor文、if文などは?

四則演算やfor文、if文は

if文ならif文が来たなと認識して、中身はPHPのif文に代入してしまえばいいと思われます。

入力された値が

c=a-b

だったらPHPで

=以降のa-bを$hogehogeに代入します

$hoge = $hogehoge;

このようにして結果を返します。

$hoge = $a – $b;でもいいのではないか?と思われそうですが

こうしないと  入力がc=a-b-a-b-a-bみたいにいろいろな入力が予想されますのでこうしますw

a*b-a+a見たいにどんな入力があるかわかりません。

ポク太郎さんのサイトに紹介されている分だけなら実際に作ってもよかったのですが、記事を読んでいたら意外にも沢山の関数がありまして

MSXで標準搭載されている関数群

絶望したのでこの辺で今日はおしまいとしますww

難しいことを考えると疲れますねw僕のレベルではこのぐらいが限度なんでうまく思いを説明もできなければ合っているかもわかりませんw

シェアする

  • このエントリーをはてなブックマークに追加

フォローする