今日は、とあるサイトで公開されていたWebMSXという大昔のコンピューターが紹介されていて遊んでいたんですが、ふとこれどうやって動いているんだろ?
とコメント欄で話題になりましたので記事にしてみました。
WebMSXとは?
以下のサイトにアクセスすると即プログラミングが実行できるというスグレモノ
MSX自体は昔々発売されていたコンピューターだそうです。フロッピーを読み出したりできるレベルの古さですw

とりあえずソース見てみる
はい、何じゃこりゃレベルですねw
文字数にして1364420文字ありましたよw 僕が書いたことのあるスクリプトで長いものでも2000ぐらいだったと思います。
使用言語
Javascriptではないということだったがソースの下にJavascriptって書いてあったのと
試しにJavascriptをオフにしてアクセスしたところ真っ白でなにも表示されなかったので、Javascriptということがわかりましたw
WebMSX – The online MSX emulator,
WMSX – The online MSX emulator,
Play MSX2+ games online in your browser,
JavascriptHTML5 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をクリックします。
このときにはユーザーがサーバーにこの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見たいにどんな入力があるかわかりません。
まとめ
ポク太郎さんのサイトに紹介されている分だけなら実際に作ってもよかったのですが、記事を読んでいたら意外にも沢山の関数がありまして
絶望したのでこの辺で今日はおしまいとしますww
難しいことを考えると疲れますねw僕のレベルではこのぐらいが限度なんでうまく思いを説明もできなければ合っているかもわかりませんw
コメント