ページ 1 / 1
独自規格PCのエミュレータを作っています
Posted: 2014年2月05日(水) 17:02
by taka
OSを作ってきてPC/ATのレジスタの少なさにびっくりしたので独自のPC規格(DSC-100)を作り
そのエミュレータを制作しています。
ですが余りにも遅すぎるので誰か速くする方法を教えてください。
ソースは
http://www1.axfc.net/u/3163798
です。
(1)やりたいこと
・一瞬で画面全フィル(16色で)
・Windows並みのOSが作れる実用的な早さ
(2)出来たらしたいこと
・アセンブラの作成
お願いします。
Re: 独自規格PCのエミュレータを作っています
Posted: 2014年2月05日(水) 17:30
by みけCAT
col.cppの49行目、DrawPixelが遅いようですね。
描画命令をDrawPixelしか使用しないのでしたら、わざわざDXライブラリを使用せずにWindows APIを用いてプログラムを作成し、
SetDIBits関数またはStretchDIBits関数を利用して描画するのがいいと思います。
(後者なら直接デバイスコンテキストに描画できて簡単)
Re: 独自規格PCのエミュレータを作っています
Posted: 2014年2月05日(水) 19:32
by taka
じゃあちょっとWindowsAPIでのプログラムの組み方教えてくれませんか?
メッセージボックスすら出したことないので・・・
Re: 独自規格PCのエミュレータを作っています
Posted: 2014年2月06日(木) 10:19
by softya(ソフト屋)
こことかが参考になると思います。
「標準 Windows API」
http://wisdom.sakura.ne.jp/system/winapi/win32/
DIB を使ってピクセル単位で処理しましょう。
Re: 独自規格PCのエミュレータを作っています
Posted: 2014年2月06日(木) 18:52
by ISLe
つい先日、他のトピックに投稿したコードが参考になるのでは?
WindowsAPI GetPixelについて
ベタな配列で持ったピクセル情報をウィンドウに表示するサンプルコードです。
拡縮を行わないならSetDIBitsToDeviceを使ったほうが高速かもしれません。
Re: 独自規格PCのエミュレータを作っています
Posted: 2014年2月06日(木) 20:15
by taka
すみません、どうにもわかりませんでした・・・
SDLの方が簡単ならそちらを使いたいですし、
誰か共同でグラフィック部分を作ってくれる方がいるならその方と協力したいです。
どちらもダメならCPU部分だけ作って終わりにしたいと思います。
Re: 独自規格PCのエミュレータを作っています
Posted: 2014年2月06日(木) 20:29
by softya(ソフト屋)
そこを作ることを楽しめなかったら、せっかくのPCエミュレータが勿体無いと思いますが。
SDLのピクセル操作はこんなかんじみたいですが、試したことないので遅いか早いかは分かりません。
「SDL」
http://www.me.tokushima-u.ac.jp/~miw/wa ... 6/7/7.html
Re: 独自規格PCのエミュレータを作っています
Posted: 2014年2月06日(木) 22:28
by みけCAT
taka さんが書きました:誰か共同でグラフィック部分を作ってくれる方がいるならその方と協力したいです。
適当に作ってみました。
まずはこれを使用してCPUの開発を行い、CPUの開発が一段落したらUIの開発を行うのがいいと思います。
Re: 独自規格PCのエミュレータを作っています
Posted: 2014年2月07日(金) 18:58
by taka
みけCATさんありがとうございます!
SDL版がダメだったのでこのまま使ってもいいですか?(リリース版に)
Re: 独自規格PCのエミュレータを作っています
Posted: 2014年2月07日(金) 21:20
by みけCAT
taka さんが書きました:SDL版がダメだったのでこのまま使ってもいいですか?(リリース版に)
いいですよ。
改造もご自由に。
Re: 独自規格PCのエミュレータを作っています
Posted: 2014年2月08日(土) 12:09
by taka
みけCATさんありがとうございます!
CPUの開発に行き詰ったらまた質問させていただきます!
今回の質問はこれで解決にさせていただきます!
みけCATさん、softyaさん、ISLeさん、ありがとうございました!
Re: 独自規格PCのエミュレータを作っています
Posted: 2014年2月08日(土) 12:11
by softya(ソフト屋)
taka さんが書きました:みけCATさんありがとうございます!
CPUの開発に行き詰ったらまた質問させていただきます!
今回の質問はこれで解決にさせていただきます!
みけCATさん、softyaさん、ISLeさん、ありがとうございました!
そういえば、どうSDLがダメだったのか教えて下さい。
掲示板的にダメ理由も情報を残したいのです。
Re: 独自規格PCのエミュレータを作っています
Posted: 2014年2月08日(土) 12:28
by taka
softya(ソフト屋) さんが書きました:
そういえば、どうSDLがダメだったのか教えて下さい。
掲示板的にダメ理由も情報を残したいのです。
描画速度がかなり遅かったので、結局みけCATさんのものを採用しました。
ソースファイルも添付しておきます。
SDLは
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\SDL
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\SDL
にある設定なのでそこを変えればビルド可能かと思います。
Re: 独自規格PCのエミュレータを作っています
Posted: 2014年2月08日(土) 12:33
by softya(ソフト屋)
taka さんが書きました:softya(ソフト屋) さんが書きました:
そういえば、どうSDLがダメだったのか教えて下さい。
掲示板的にダメ理由も情報を残したいのです。
描画速度がかなり遅かったので、結局みけCATさんのものを採用しました。
ソースファイルも添付しておきます。
SDLは
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\SDL
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\SDL
にある設定なのでそこを変えればビルド可能かと思います。
ご協力う有難うございます。
SDLの中で何をしているかは調べていませんが、これ以外の方法じゃないと無理ってことですね。
Re: 独自規格PCのエミュレータを作っています
Posted: 2014年2月08日(土) 19:43
by ARCS
1命令実行ごとに画面の更新処理をしているってのも遅い原因の1つです。
みけCATさんのコードでは、タイマーで17ms毎に画面の更新を行うようになっているため、この問題は改善されています。
Re: 独自規格PCのエミュレータを作っています
Posted: 2014年2月08日(土) 21:40
by ISLe
SDLの名誉のために書いておくと、わたしは過去にSDLでアーケードゲーム等のエミュレータもどきを作ったことがあります。
仕事で作ったのを個人的な趣味でLinuxに移植したものですが。
ちゃんと作れば問題ありません。