独自規格PCのエミュレータを作っています

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
taka
記事: 34
登録日時: 10年前
住所: 三重県

独自規格PCのエミュレータを作っています

#1

投稿記事 by taka » 10年前

OSを作ってきてPC/ATのレジスタの少なさにびっくりしたので独自のPC規格(DSC-100)を作り
そのエミュレータを制作しています。
ですが余りにも遅すぎるので誰か速くする方法を教えてください。
ソースは
http://www1.axfc.net/u/3163798
です。

(1)やりたいこと
・一瞬で画面全フィル(16色で)
・Windows並みのOSが作れる実用的な早さ

(2)出来たらしたいこと
・アセンブラの作成

お願いします。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 独自規格PCのエミュレータを作っています

#2

投稿記事 by みけCAT » 10年前

col.cppの49行目、DrawPixelが遅いようですね。
描画命令をDrawPixelしか使用しないのでしたら、わざわざDXライブラリを使用せずにWindows APIを用いてプログラムを作成し、
SetDIBits関数またはStretchDIBits関数を利用して描画するのがいいと思います。
(後者なら直接デバイスコンテキストに描画できて簡単)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

taka
記事: 34
登録日時: 10年前
住所: 三重県

Re: 独自規格PCのエミュレータを作っています

#3

投稿記事 by taka » 10年前

じゃあちょっとWindowsAPIでのプログラムの組み方教えてくれませんか?
メッセージボックスすら出したことないので・・・

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 独自規格PCのエミュレータを作っています

#4

投稿記事 by softya(ソフト屋) » 10年前

こことかが参考になると思います。
「標準 Windows API」
http://wisdom.sakura.ne.jp/system/winapi/win32/

DIB を使ってピクセル単位で処理しましょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: 独自規格PCのエミュレータを作っています

#5

投稿記事 by ISLe » 10年前

つい先日、他のトピックに投稿したコードが参考になるのでは?
WindowsAPI GetPixelについて

ベタな配列で持ったピクセル情報をウィンドウに表示するサンプルコードです。

拡縮を行わないならSetDIBitsToDeviceを使ったほうが高速かもしれません。

taka
記事: 34
登録日時: 10年前
住所: 三重県

Re: 独自規格PCのエミュレータを作っています

#6

投稿記事 by taka » 10年前

すみません、どうにもわかりませんでした・・・
SDLの方が簡単ならそちらを使いたいですし、
誰か共同でグラフィック部分を作ってくれる方がいるならその方と協力したいです。
どちらもダメならCPU部分だけ作って終わりにしたいと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 独自規格PCのエミュレータを作っています

#7

投稿記事 by softya(ソフト屋) » 10年前

そこを作ることを楽しめなかったら、せっかくのPCエミュレータが勿体無いと思いますが。

SDLのピクセル操作はこんなかんじみたいですが、試したことないので遅いか早いかは分かりません。
「SDL」
http://www.me.tokushima-u.ac.jp/~miw/wa ... 6/7/7.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 独自規格PCのエミュレータを作っています

#8

投稿記事 by みけCAT » 10年前

taka さんが書きました:誰か共同でグラフィック部分を作ってくれる方がいるならその方と協力したいです。
適当に作ってみました。
まずはこれを使用してCPUの開発を行い、CPUの開発が一段落したらUIの開発を行うのがいいと思います。
添付ファイル
DSC-100_ui.zip
表示とファイル読み込みの部分を改造したプログラム
(43.93 KiB) ダウンロード数: 112 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

taka
記事: 34
登録日時: 10年前
住所: 三重県

Re: 独自規格PCのエミュレータを作っています

#9

投稿記事 by taka » 10年前

みけCATさんありがとうございます!
SDL版がダメだったのでこのまま使ってもいいですか?(リリース版に)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 独自規格PCのエミュレータを作っています

#10

投稿記事 by みけCAT » 10年前

taka さんが書きました:SDL版がダメだったのでこのまま使ってもいいですか?(リリース版に)
いいですよ。
改造もご自由に。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

taka
記事: 34
登録日時: 10年前
住所: 三重県

Re: 独自規格PCのエミュレータを作っています

#11

投稿記事 by taka » 10年前

みけCATさんありがとうございます!
CPUの開発に行き詰ったらまた質問させていただきます!
今回の質問はこれで解決にさせていただきます!
みけCATさん、softyaさん、ISLeさん、ありがとうございました!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 独自規格PCのエミュレータを作っています

#12

投稿記事 by softya(ソフト屋) » 10年前

taka さんが書きました:みけCATさんありがとうございます!
CPUの開発に行き詰ったらまた質問させていただきます!
今回の質問はこれで解決にさせていただきます!
みけCATさん、softyaさん、ISLeさん、ありがとうございました!
そういえば、どうSDLがダメだったのか教えて下さい。
掲示板的にダメ理由も情報を残したいのです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

taka
記事: 34
登録日時: 10年前
住所: 三重県

Re: 独自規格PCのエミュレータを作っています

#13

投稿記事 by taka » 10年前

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
にある設定なのでそこを変えればビルド可能かと思います。
添付ファイル
DSC-100_sdl.zip
VC10用のプロジェクトです(SDL版)
(1.53 MiB) ダウンロード数: 123 回

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 独自規格PCのエミュレータを作っています

#14

投稿記事 by softya(ソフト屋) » 10年前

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の中で何をしているかは調べていませんが、これ以外の方法じゃないと無理ってことですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ARCS

Re: 独自規格PCのエミュレータを作っています

#15

投稿記事 by ARCS » 10年前

1命令実行ごとに画面の更新処理をしているってのも遅い原因の1つです。

みけCATさんのコードでは、タイマーで17ms毎に画面の更新を行うようになっているため、この問題は改善されています。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: 独自規格PCのエミュレータを作っています

#16

投稿記事 by ISLe » 10年前

SDLの名誉のために書いておくと、わたしは過去にSDLでアーケードゲーム等のエミュレータもどきを作ったことがあります。
仕事で作ったのを個人的な趣味でLinuxに移植したものですが。
ちゃんと作れば問題ありません。

閉鎖

“C言語何でも質問掲示板” へ戻る