5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

エミュレータの作り方

1 :Z80:2005/10/07(金) 03:21:34
Z80のエミュレーションから最終的に何かZ80マシンのエミュレータを
作りたいのですが、エミュレータはどのようにして作ればよいですか?

2 :デフォルトの名無しさん:2005/10/07(金) 03:23:36
                   ,,, -──- 、   ∩
                  ( ( ( ヽ   ヽ ( )
.              __   |ノ-、 -\ヽ  | ヽ/
.             (___)、  |  ・|・  |-|__/ /
       ____   \ \i`- 。− ′ 6) /
    /       \   \ ヽ、ヽ ̄ ̄) ノ>/
   /    ノ -、 -ヽ ヽ   \ ~ ▽▽ヽ /
   /   , -|/‘|< |-、 |     |     ノ
  ○/   ` - ●-′ |     |     |  「クソスレ立てちゃ駄目だって
.  | |  三   | 三 /     )───|     いつも言ってるでしょ!!」
  |  |  /⌒\_|/^/     /     |
  |  |━━━(t)━━、      |      |
  |   /__ ヽ |_|       i____|
.  i   l ヽ___/ノ j_)       |  | |  |
  ヽ  ` ── ′/.        |  | |  |
   ⊂二⊃⊂二⊃      ⊂二 ) ( 二⊃





3 :デフォルトの名無しさん:2005/10/07(金) 11:31:15
>>1
設計して、コードを書く

4 :デフォルトの名無しさん:2005/10/07(金) 11:33:27
ローカルルールぐらい読んでからスレを立てようぜ。

な?馬鹿ども?

5 :1:2005/10/07(金) 12:21:03
設計する以前の段階なのですが。
何をしたらいいのかさっぱり解らない感じです。
エミュレータ開発のノウハウなどはどこにあるのでしょうか?

6 :デフォルトの名無しさん:2005/10/07(金) 12:26:31
>>5
首括れば万事解決だと思われ

7 :デフォルトの名無しさん:2005/10/07(金) 12:31:59
>>6
禿同

8 :デフォルトの名無しさん:2005/10/07(金) 13:11:37
>>7
禿同

       〜Infomation〜
ここは禿同で1000を目指すスレになりました
これ以降のルール遵守をお願い申し上げます

9 :デフォルトの名無しさん:2005/10/07(金) 13:14:35
    ⊂_ヽ、
      .\\  /⌒\
         \ ( 冫、)ウンチになぁれ
          > ` ⌒ヽ
         /    へ \
        /    /   \\
        レ  ノ     ヽ_つ
        /  /         ・*.・:
       /  /|          :。 *.・
       ( ( 、           ★。:’*
       |  |、 \        。・.*・; ・
       | / \ ⌒l     ;* ・。;*★ 人・
       | |   ) /      ・ ★・ (_ );; * 。・
      ノ  )   し'        ・ * (__) * ・。・
     (_/          。*.;; ・( ・∀・ ) >>8 ★.* ’★


10 :デフォルトの名無しさん:2005/10/07(金) 14:01:22
>>5
Z80エミュレータとは具体的に何をどうするものだ?

11 :デフォルトの名無しさん:2005/10/07(金) 14:05:09
CPUをエミュレートするものだろ?

12 :デフォルトの名無しさん:2005/10/07(金) 14:10:39
>>11
01 00 20
11 30 00
CD 01 2F
C9

Z80ならばどういう動きをする?

13 :デフォルトの名無しさん:2005/10/07(金) 16:16:36
>>10-12
俺様専用単発質問スレ活性化御苦労。だが死ね。

14 :デフォルトの名無しさん:2005/10/07(金) 17:05:44
>>13
役に立たないデジタル土木の兄ちゃんこそ死ねや

15 :デフォルトの名無しさん:2005/10/07(金) 17:09:22
CPUの命令表とにらめっこしながら、一つ一つ実装
正直、あんま面白いもんでもない

16 :デフォルトの名無しさん:2005/10/07(金) 17:47:09
>>14
>役に立たないデジタル土木の兄ちゃん
のうたりん?

17 :デフォルトの名無しさん:2005/10/07(金) 18:21:20
>>12
コード表を見ずにディスアセンブル

LD BC,$2000
LD DE,$0030
CALL $2F01
RET

合ってる?

18 :デフォルトの名無しさん:2005/10/07(金) 22:08:50
>>17
合ってる

19 :わ゙かもの:2005/10/08(土) 03:40:53
>>18
それも悲しいな。人間ディスアセンブラ。カワイソス

ところでZ80ってのは16bitでビッグエンディアンなの?おもしろいね。
LDとかBCとかDEとかがさっぱりわからんが。

20 :デフォルトの名無しさん:2005/10/08(土) 09:02:40
>>19
基本的に2進数で書いてxxyyyzzzと書けるので簡単に覚えられる

21 :デフォルトの名無しさん:2005/10/08(土) 11:28:55
Z80は8ビットでリトルエンディアン

22 :デフォルトの名無しさん:2005/10/08(土) 18:06:22
CPU周りのエミュレートは想像つくが他のハードウェア周りはどうやってやるんだ?

23 :1:2005/10/08(土) 18:11:51
具体的に何をすればいいんでしょうか?

24 :デフォルトの名無しさん:2005/10/08(土) 18:24:29
>>23
ttp://www.vector.co.jp/vpack/filearea/win/util/emulate/

使える資産は利用しよう。
無駄な実装は時間の無駄。

25 :デフォルトの名無しさん:2005/10/08(土) 18:29:20
MAME は確かオープンソースだから
Z80コアのソースが手に入るかもね。

26 :デフォルトの名無しさん:2005/10/08(土) 22:51:50
>>1
いまどきZ80のエミュレーターなど作ってどうする?
「Mac上でWinのソフトを動かす」ものとか、そのくらいの志を持った
方が世に必要とされる。これもMSによって実現されているが。

27 :デフォルトの名無しさん:2005/10/08(土) 23:02:17
MS によって????

28 :デフォルトの名無しさん:2005/10/09(日) 01:24:23
>>26
狭い見識で物事を語るなや、ガキ。

29 :わ゙かもの:2005/10/09(日) 19:12:56
>>21
やべwwwバイト順序が逆になるのはリトルエンディアンでした。

>>23
おおお、ソース公開されてるZ80エミュレータありますね。

30 :デフォルトの名無しさん:2005/10/10(月) 01:21:09
>>23
まずは、Z80のアセンブラソースを追ってCPUの動きをトレースしてみろ
CPUの気持ちになるのがエミュレータのはじめだ。

一番の問題はM1ピンの動きだな。
あとインデックスレジスタ拡張命令はDD/FDを取得直後に割り込みを受け付けるぞ。


31 :1:2005/10/12(水) 19:19:36
具体的にはまず何をすればいいですか?

32 :デフォルトの名無しさん:2005/10/12(水) 19:35:54
1、Delphi6パーソナルを手に入れる。 
   無料だが、日本語版を手に入れるいもちょっと外国のサイトに行かねばならん。
   大変だとは思うが、これくらは乗り切れよ

2、byte型の配列の書き方を勉強しよう


3、後は配列をメモリに見立てて、アドレスを添字に見立てて、
  1バイト読んでは命令コード表を引いて実行してゆく

 メソッドポインタか関数ポインタの配列で分岐するといいだろう。

・・・・
これが一番早道だと思うぞ

33 :デフォルトの名無しさん:2005/10/12(水) 21:25:00
1はある程度Cができるかも知れんぞ。

34 :デフォルトの名無しさん:2005/10/13(木) 00:20:45
>>31
>>30を100回読め
ある程度プログラムが書けることが前提だ

35 :デフォルトの名無しさん:2005/10/15(土) 20:45:21
>>33 Cの方がアセンブラに近いように思えるだろうけど

CPUの挙動を勉強する意味でも、
Delphiは言語仕様としてアセンブラを内蔵してるし、
アセンブラレベルでコードを追いかける事も出来て、
C言語とそう変わらんよ

その上、VB並にGUIが作れるしね

36 :デフォルトの名無しさん:2005/10/15(土) 23:29:24
本当の本当に分かっていないと思うので
基本的なところからいくよ
CPUって言うのは演算装置、つまりは計算機だよね
計算機と言うことは、+−×÷なんかの四則演算なんかを代表として、計算するための命令があるわけですよ
Z80のCPUにはZ80の計算命令が
Widnows(というかx86CPU)にはx86CPUの計算命令があるわけですよ
でも、CPUの命令というのは、種々の都合で、CPUごとに、命令するためのマシン語というのが違うわけです
これをz80CPUの命令からx86CPUの命令に変換するのが、つまりはエミュレーター
ここまでは何となく分かったかな?



37 :36:2005/10/15(土) 23:29:54
良い事例を見つけるのが面倒くさかったので、ちょっとそこら辺から記事を探してきた
http://www.atmarkit.co.jp/fjava/rensai3/javavm01/javavm01_2.html
これは、JavaのバイトコードをCPUごとに変換する基本の考え方なんだけど
JavaVMっていうのは、「JavaVMという仮想の仕様のCPU」を考えた後
JavaVM命令>x86CPU
と変換しているわけ、記事内部のコードではこうなっているね

while (true) {
bytecode = get_next_bytecode ();
switch (bytecode.opcode) {
case xx:
// xxと等価な処理
case yy:
// yyと等価な処理
: :
}
}


38 :36:2005/10/15(土) 23:40:22
つまり、君がやらないといけないのは
1.z80のCPUの仕様を調べる
2.x86系CPUの仕様を調べる
3.z80CPUの命令と同じ意味を、x86CPUの命令を組み合わせて再現する
4.上のコードみたいなカンジでswitch分を使って命令を返還するプログラムを組む

という流れになる。
もちろん、その前に
0.アゼンブラの勉強をしてある程度、ニーモニックやマシン語に慣れておく
これが着いてくる。
1から話をするとこう言うことになる。多分分かったと思うし、その程度にかみ砕いたつもり。

一応、CPUに関して基礎的な話をするならこう言うことになる。
俺より前に、ここのスレに書き込んでいる人は、これくらいは当たり前に理解している(少なくともまともな返答をしている人は

正直な話、君のレベルから初めて、完成させようとすると、大概頓挫すると思うけど…。


39 :デフォルトの名無しさん:2005/10/16(日) 00:15:02
>>36-38
べつにx86のアセンブラは覚えんでもいいだろ
それにx86アセンブラでやるなら命令コードの分岐はテーブル使えば一発じゃん。switchなんぞ書くのあほらしい

40 :デフォルトの名無しさん:2005/10/16(日) 00:19:48
>>39 もうちっと読んでからレスしてやれよ。 switchはJAVAの記事の内容の事だろ。

俺もよくそういうレス貰うから判るんだが、本人全力で書いたのにそんなレスもらって、ヘロヘロだろうよ

41 :デフォルトの名無しさん:2005/10/16(日) 00:27:42
中途半端にASMをかじったしょーもないPGが
糞くだらん講釈を披露するスレはここですか?

42 :36:2005/10/16(日) 02:00:31
>>41
あはは、お耳が痛い…
書きながら「あー、言われるだろうなぁ…」とは思っていたのですが
正直、1さんの言動を見る限り、どーもこの次元まで議論を落としてからじゃないとダメっぽいなぁと思ったので
マジで議論できる次元の人間ではないので。ここらで退散

43 :デフォルトの名無しさん:2005/10/16(日) 02:10:53
>>40
全力で書くのは良いが俺様最高!の気分で書くから横から突込みが入るんだよ
本質的な所だけを抜き出して書くと突込みは無くなるよ

44 :デフォルトの名無しさん:2005/10/16(日) 02:20:14
>>42
> お耳が痛い…
それどころか、お前の存在自体が痛い

45 :デフォルトの名無しさん:2005/10/16(日) 11:16:16
まあまずはBrainF*ckの処理系でも書いて感じを掴んでみるこった。

+-<>,.

46 :デフォルトの名無しさん:2005/10/18(火) 13:40:23
恐らくCでz80エミュレータ書いてもz80程度の速度は充分出るだろうなぁ。

47 :デフォルトの名無しさん:2005/10/18(火) 14:30:39
Z80どころじゃないだろ

48 :デフォルトの名無しさん:2005/10/18(火) 16:07:54
>>46-47
それはC云々でなくてマシンの速度の話だろ
まあZ80なら2MHzしかでないから今のマシンじゃVBで作っても速度は出ると思うが

49 :デフォルトの名無しさん:2005/10/18(火) 16:19:42
いやさ、8086で8080エミュレータ作ったときはCP/Mがのんびり動いたもんで。

50 :49:2005/10/18(火) 16:21:44
いかん、言葉が足りていない。
8086で8080エミュレータを作ったときはアセンブラで作ったにも関わらずCP/Mがのんびり動いた。
尤も、OSそのものはCP/M86で振り替えてたから妙に速かったけど。

51 :デフォルトの名無しさん:2005/10/18(火) 20:22:20
>>49
8086対8080じゃ5MHz対2MHzだからな8080の1命令を2.5命令で処理できないと遅く感じる
テーブル駆動+レジスタ制御入れると1命令10〜20命令だと思われるので1/4〜1/10位のスピードだったんじゃね?

52 :デフォルトの名無しさん:2005/10/18(火) 20:25:21
VB製のGBエミュレータはギガヘルツマシンだと滑らかに動いてた

53 :デフォルトの名無しさん:2005/10/19(水) 04:05:36
ttp://www.geocities.co.jp/playtown/2004/gmbspecj.txt

へえ、ゲームボーイって4.19MHzなのか・・・・まあ電池の事考えるとコレくらいなんだろうな。


54 :49:2005/10/20(木) 10:35:12
>>51
体感的にはそこまで遅くなかったと思うが、V30に差し替えていたからかも知らん。
#レジスタは8086のレジスタをそのまま割り当ててたし。

55 :デフォルトの名無しさん:2005/10/24(月) 23:51:18
昔のPC(Sharp X1)のエミュレータ作りたいんだけど
使う言語(開発ツール)どれがいい?
やっぱりVisualC++じゃなきゃだめかな。
C++BuilderとDelphi持ってるんだけど(共にPro)
C++Builder製のエミュは結構見かけるけど
Delphi製のエミュってあまり無いような気が・・・

もしできたら公開します。
(多分、無理だと思うけど)

56 :デフォルトの名無しさん:2005/10/25(火) 15:50:45
もうあるお

57 :デフォルトの名無しさん:2005/10/25(火) 23:55:06
>>55
一応、期待してるぞ、X1のファンとして。
ツールはVBみたいな遅いもんでなきゃ
だいたい良いと思うよ(VBだって出来ない事は無いと思うが、
遅すぎるんじゃ?)。
あと、確かにC++Builder製のエミュはあるが
Delphi製はあまり聞かない。
誰か知ってる?

58 :デフォルトの名無しさん:2005/10/26(水) 00:34:10
>>57
コンソールなら幾つかあるんじゃね?

59 :デフォルトの名無しさん:2005/10/26(水) 23:44:46
>>55,>>57
速度的な事を考えると
どうしても、アセンブラとかVC++とかが欲しくなる。
ただ、最近はマシンの性能も上がってきてるので
遅い(といわれる)言語でも大丈夫。
作り易さ(生産性)を取るかエミュの実行スピードを取るか。
俺も応援させてもらう。

60 :デフォルトの名無しさん:2005/10/27(木) 06:28:04
Delphiのインラインアセンブラは使いやすい部類に入るから速度上の問題はないだろ
I・Oのエミュレートとかで
Cのソースを使いたくなったら BCC32を使ってobjを作れば、Delphiにリンクする事も出来るしね

61 :デフォルトの名無しさん:2005/10/27(木) 23:23:36
考えてみると、エミュのソース公開してる作者さんってえらいな〜
下手したらパクる奴も現れるだろうし・・・
俺はまだ技術的に浅いからよくソース読めないが。

ところで、このスレってエミュの作者さんとか
読んでいるんかな〜?

62 :デフォルトの名無しさん:2005/10/28(金) 02:44:49
ちょっと前のゲ製作に有名どころのエミュ作者全員集合してたな

63 :デフォルトの名無しさん:2005/10/29(土) 08:15:36
DelphiとC++Builderって使用される言語以外はあんまり変わらないって聞いた。
だけど、エミュに使われるのってC++Builderの方が多いよね。
やっぱりC使いの方が多いってことかな?

あと、アセンブラのみでできた(フルアセンブラっていうのかな、違ってたらスマン)
エミュレータってどんなのがある?

64 :デフォルトの名無しさん:2005/10/29(土) 09:26:36
エンジン部分はCで作っておけば、モバイルCPUとかで再利用し易いというのがあるんじゃない?

65 :デフォルトの名無しさん:2005/11/01(火) 07:28:57
fmsxの作者がエミュレータの作り方のドキュメント公開してた気がする。
z80と6502のコアソースも公開してた気がする。

66 :デフォルトの名無しさん:2005/11/01(火) 11:29:53
エミュレータで面倒なのは、CPUのエミュレートよりも端末のエミュレートなんだよね。
それが理由でもう十年以上作ってない。
最後に作ったのがポケステエミュかな。

67 :デフォルトの名無しさん:2005/11/01(火) 22:42:28
>>66
ポケステの発売は1999年ですが、何か。

68 :デフォルトの名無しさん:2005/11/02(水) 08:58:22
昔、ある雑誌にNESのエミュが紹介されていて
一番、サイズの小さいNESエミュというのが載ってた。
EXEのサイズが6KB位とのこと。
こんなに小さいサイズのエミュってどうやって作るの?

69 :デフォルトの名無しさん:2005/11/02(水) 15:32:42
>>63
いまどきフルアセンブラはねーだろ
CPUコアやGPUコアくらいはアセンブラ使うかもしれんが
入出力やUI周りは別の言語使うだろ
host CPUが遅いGBA用とかはアセンブラ率高いかもよ
あとDOS時代の古いエミュとか

70 :デフォルトの名無しさん:2005/11/02(水) 23:30:05
>>68
いっぱいDLL呼ぶんじゃねの

71 :デフォルトの名無しさん:2005/11/03(木) 11:25:57
>>69さんも言ってるけど
最近はフルアセンブラのエミュはあまり無いね。
昔は、遅いマシンで動かすためにそういうのもそこそこあったけど。
今のマシンは速いから、実行スピードよりも作り易さを重視してるんじゃない?
俺も素人だから詳しくはわからんけど・・・

72 :デフォルトの名無しさん:2005/11/03(木) 15:52:36
フルアセンブラのエミュについてちょっと調べてみた。

BrSMSとBrMSX。
作者はブラジル人の方らしい。それぞれマスターシステムとMSXのエミュ。
DOS上で動くらしい(多分)。

あとゲームボーイのエミュでNO$GMB。
これはDOSとWinのがあるみたい。

もっとあると思うけどとりあえず。
間違ってたらスマン。

73 :66:2005/11/04(金) 11:33:15
>>67
いや、それは作ったうちに入れてなかった。

74 :デフォルトの名無しさん:2005/11/06(日) 14:38:21
z80って何だろ? MSX?

CPUのエミュはなんとかなるだろうが、カスタムチップとかのエミュができなくて力尽きてしまうだろうな。
仕様が見れる香具師でもまともに使いこなせないのがカスタムチップだし。

75 :デフォルトの名無しさん:2005/11/07(月) 09:13:58
そこをなんとかするのが面白いというか。
動作を推測しつつ作ることもよくある話で。

76 :デフォルトの名無しさん:2005/11/07(月) 17:36:37
FM音源のエミュレータなんかは最初そうやって作られてきたんだよな

77 :デフォルトの名無しさん:2005/12/19(月) 12:00:15
64エミュのネット対戦で
4分割対戦で、自分の画面だけ拡大させるとか出来ないですかね
誰か作ってくれないかな

78 :デフォルトの名無しさん:2005/12/19(月) 12:05:23
>>77
虫眼鏡

79 :デフォルトの名無しさん:2005/12/19(月) 20:52:20
エミュってさ
このCPUではこの命令サポートしてるけどエミュ実行するCPUではサポート無いから
同じ事するにはビット演算でこうやって代用して…とかでしょ?
かなり高度ですね。
ハッカーの楽しみに載ってるような知識マスターしてないといけないんでしょ?

80 :デフォルトの名無しさん:2005/12/20(火) 07:44:40
やっぱりあれだよ
一番最初に実装するべきなのはプログラムカウンタ
そうだろ?

81 :デフォルトの名無しさん:2005/12/29(木) 00:02:06
なんでYAMEとかrewって速いの?

82 :デフォルトの名無しさん:2005/12/29(木) 00:36:19
CPUエミュレーションなんてたいした問題ではない。
命令数が多いから面倒なだけで、適当に書いてもネイティブの一桁下くらいの性能は出る。
GHzクラスのCPUぶん回してMHzクラスのCPUエミュレーションするなら余裕ありまくりだ。
大変なのはハードのエミュレーション。
たとえばスプライトひとつ動かすのに、実機なら数命令だがエミュレータだと数百〜数千命令を要する。
二桁から三桁、下手すると四桁落ちる訳だから、少々苦しい。
これがPSクラスになると、ソフトだけでは追いつかない。
このへんをどうするかでエミュレータの性能は大きく違ってくる。

83 :デフォルトの名無しさん:2005/12/29(木) 13:22:06
CPUがハードではないと思っている馬鹿が真上にいる。

84 :デフォルトの名無しさん:2005/12/29(木) 13:23:48
まぁ、周辺回路と言う意味でハードと言ってるのだろう。

85 :デフォルトの名無しさん:2005/12/29(木) 18:22:57
VRAMとかビデオカード周辺と
言う意味でのハードゲイだと
いっているのだろう。

86 :デフォルトの名無しさん:2006/01/28(土) 21:54:55
 PC9801のエミュレータはたくさんありますが、フロッピーディスクのイメ
ージ化が完璧にできるものってないですよね?
 それぞれ吸出しソフトやエミュレータごとに得意とするするコピープロテ
クトがあって、数種類を使い分けています。
 
 そこで質問なんですが、あらゆるフォーマットやコピープロテクトに対応
し、実機を使っているのと同じ感覚で使えるエミュレータは開発可能なんで
しょうか?可能だとしたら、現在のエミュレータや吸出しソフトはどこに問
題点があるのでしょうか?


87 :デフォルトの名無しさん:2006/01/28(土) 22:03:42
それはこっち

FS関連スレ
http://pc8.2ch.net/test/read.cgi/os/1137387538/

88 :デフォルトの名無しさん:2006/01/28(土) 22:11:59
オーありがとうございます。
ではそっちで同じ質問を聞いてみます。

89 :デフォルトの名無しさん:2006/02/12(日) 15:35:20
fMSX見てみたけど、作り方=コンパイル方法?
それともお約束のソースを見ろって話?

やっぱり実機の動作見ながら、同じように動くプログラム組んでAPI呼ばれたら実行するようにこつこつ実装していくぐらい?

90 :デフォルトの名無しさん:2006/02/14(火) 17:38:17
sage

91 :get ip > ****:2006/06/08(木) 01:21:55
test

92 :デフォルトの名無しさん:2006/10/08(日) 17:55:45
http://www.117.ne.jp/~show/pc8801/tech88/1000.html
エミュレータの作り方

23 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)