KM-Z80 web ver 0.9
2013年6月18日
HTML5 canvasを用いたMZ-80K 互換エミュレーター、KM-Z80 web の、ver0.9を公開。
以前公開したバージョンは、PC上では動作するものの、ハードウェアキーが無くソフトウェアキーだけを用いている多くのMobile環境では、キー入力を受け付けることが出来なかった。
そういった環境でもソフトウェアキーを表示させれば、キー入力を受け付けるだろうと、Twitter上でyasuho68kさんに手伝って頂いてうまく行くかどうか調べた結果、どうやら駄目だということに。キーの入力は、JavaScriptでonkeydownとonkeyupの2つのイベントをトラックしているが、ソフトキーからの入力では、これらのイベントは発生しないらしい。
他方で、ZK-80 webの方は、Mobile環境で動作確認済み。ここで使ったのと同じテクニックを、KM-Z80 webにも使えばよいだろうと言うことで、そのように。要するに、ソフトウェアキーをJavaScriptで実装してしまおうというのものだ。MZ-80Kのキーボードは16x5のサイズなので、1キーを20x20の大きさにすれば、320ピクセルで構成されているディスプレイと横幅がぴたり合う。しかも、一つ一つのキーの印字も、ディスプレイで用いているフォントを用いることが出来、ちょうど良い大きさで綺麗に仕上がった。
このソフトウェアキーを実装したことで、別の改善点も。私はUSキーボードを用いていて、それ用にキーの割り当てをしてあったのだが、Twitter上でair_variableさんから、JISキーボードでは「=」が入力できないとのご指摘が。なるほど、これは考えておかないといけなかったと思ったが、ソフトウェアキーを実装したことで、そういった場合でもすべての文字の入力に対応することが出来た。
これで、Mobile環境でも実行できるようになったし、MZ-80Kのすべてのキー入力(カナや絵も含む)も出来るようになったので、ほぼ完成と言ったところ。
KM-Z80 web ver 0.9 の実行は、こちらから。
以前公開したバージョンは、PC上では動作するものの、ハードウェアキーが無くソフトウェアキーだけを用いている多くのMobile環境では、キー入力を受け付けることが出来なかった。
そういった環境でもソフトウェアキーを表示させれば、キー入力を受け付けるだろうと、Twitter上でyasuho68kさんに手伝って頂いてうまく行くかどうか調べた結果、どうやら駄目だということに。キーの入力は、JavaScriptでonkeydownとonkeyupの2つのイベントをトラックしているが、ソフトキーからの入力では、これらのイベントは発生しないらしい。
他方で、ZK-80 webの方は、Mobile環境で動作確認済み。ここで使ったのと同じテクニックを、KM-Z80 webにも使えばよいだろうと言うことで、そのように。要するに、ソフトウェアキーをJavaScriptで実装してしまおうというのものだ。MZ-80Kのキーボードは16x5のサイズなので、1キーを20x20の大きさにすれば、320ピクセルで構成されているディスプレイと横幅がぴたり合う。しかも、一つ一つのキーの印字も、ディスプレイで用いているフォントを用いることが出来、ちょうど良い大きさで綺麗に仕上がった。
このソフトウェアキーを実装したことで、別の改善点も。私はUSキーボードを用いていて、それ用にキーの割り当てをしてあったのだが、Twitter上でair_variableさんから、JISキーボードでは「=」が入力できないとのご指摘が。なるほど、これは考えておかないといけなかったと思ったが、ソフトウェアキーを実装したことで、そういった場合でもすべての文字の入力に対応することが出来た。
これで、Mobile環境でも実行できるようになったし、MZ-80Kのすべてのキー入力(カナや絵も含む)も出来るようになったので、ほぼ完成と言ったところ。
KM-Z80 web ver 0.9 の実行は、こちらから。
コメント
ぽむ (2013年7月23日 05:03:30)
どこに書けばいいのかわからないのでとりあえずここに。
SFC miniは64bitOSの場合、SysWOW64以下のcscript.exe/wscript.exeでしか動かないので明記して欲しいです。
あとインストーラはスクリプトを管理者権限で起動するのは面倒な手順がいるので
Set sh=CreateObject("Shell.Application")
sh.ShellExecute "regsvr32","FULL-PATH\sfcminii.dll","","runas"
といったようにrunasで管理者権限を取得するようにして欲しいです。
SFC miniは64bitOSの場合、SysWOW64以下のcscript.exe/wscript.exeでしか動かないので明記して欲しいです。
あとインストーラはスクリプトを管理者権限で起動するのは面倒な手順がいるので
Set sh=CreateObject("Shell.Application")
sh.ShellExecute "regsvr32","FULL-PATH\sfcminii.dll","","runas"
といったようにrunasで管理者権限を取得するようにして欲しいです。
Katsumi (2013年7月23日 14:26:17)
ぽむさん、こんにちは。
SFC miniは、32 bitのアプリケーションなので、64 bit環境で利用するには制限があります。なお、SUPPONというツールを使えば、64 bit環境でも若干使いやすくなるかも知れません。
http://sourceforge.jp/projects/sfcmini/
あと、インストーラーに関するご指摘ですが、SFC miniのバージョンはいくつですか?ver 1.01をお使いでしたら、一度ver 1.05bをお試し下さい(上のリンク先でダウンロードできます)。
SFC miniは、32 bitのアプリケーションなので、64 bit環境で利用するには制限があります。なお、SUPPONというツールを使えば、64 bit環境でも若干使いやすくなるかも知れません。
http://sourceforge.jp/projects/sfcmini/
あと、インストーラーに関するご指摘ですが、SFC miniのバージョンはいくつですか?ver 1.01をお使いでしたら、一度ver 1.05bをお試し下さい(上のリンク先でダウンロードできます)。
けん (2014年4月10日 23:35:06)
ぽむさん はじめまして。
SFC mini の64bitではまってしまい、やっとここにたどりつきました。
これまでずっと地図ソフトとVB間の連絡にSFC miniを使ってきました。
で、64bit対応にせまられ、SFC miniのCreateObjectが出来なくて悩んでおります。
SysWOW64以下のcscript.exe/wscript.exeでしか動かないようですが、どうコーディングすればいいのか、悩んでいます。
どうか、お知恵を拝借できないでしょうか?
以下、VBSのソースです。
(32nitでは快調に動作しています)
Sub Cmd_OnLoad()
Set objApp = CreateObject("Pcm.App")
Set objDoc = objApp.GetCurrentPcmDoc
Set objPrj = objDoc.GetProject
Set objLyr = objPrj.SearchLayer("ルート")
'宣言
set FindWindowA=CreateObject("SfcMini.DynaCall")
FindWindowA.Declare "user32","FindWindowA"
'宣言
set SendMessageA=CreateObject("SfcMini.DynaCall")
SendMessageA.Declare "user32","SendMessageA"
Const WM_COPYDATA = &H4A
'COPYDATASTRUCT構造体
Set pt=CreateObject("SfcMini.Structure")
pt _
"dwData","Long", _
"cbData","Long", _
"lpData","String", _
"frData","Long"
以下、省略
で、 set FindWindowA=CreateObject("SfcMini.DynaCall")
のところで、エラーになっているようです。
よろしくお願いします。
SFC mini の64bitではまってしまい、やっとここにたどりつきました。
これまでずっと地図ソフトとVB間の連絡にSFC miniを使ってきました。
で、64bit対応にせまられ、SFC miniのCreateObjectが出来なくて悩んでおります。
SysWOW64以下のcscript.exe/wscript.exeでしか動かないようですが、どうコーディングすればいいのか、悩んでいます。
どうか、お知恵を拝借できないでしょうか?
以下、VBSのソースです。
(32nitでは快調に動作しています)
Sub Cmd_OnLoad()
Set objApp = CreateObject("Pcm.App")
Set objDoc = objApp.GetCurrentPcmDoc
Set objPrj = objDoc.GetProject
Set objLyr = objPrj.SearchLayer("ルート")
'宣言
set FindWindowA=CreateObject("SfcMini.DynaCall")
FindWindowA.Declare "user32","FindWindowA"
'宣言
set SendMessageA=CreateObject("SfcMini.DynaCall")
SendMessageA.Declare "user32","SendMessageA"
Const WM_COPYDATA = &H4A
'COPYDATASTRUCT構造体
Set pt=CreateObject("SfcMini.Structure")
pt _
"dwData","Long", _
"cbData","Long", _
"lpData","String", _
"frData","Long"
以下、省略
で、 set FindWindowA=CreateObject("SfcMini.DynaCall")
のところで、エラーになっているようです。
よろしくお願いします。