HSP性エミュを作るスレ Part1
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG0002デフォルトの名無しさん
NGNG00031
NGNG無理など言わず見守って。
0004デフォルトの名無しさん
NGNGまず邪場でつくってみれ。
それとも
#deffunc main...
:
:
*start
main
goto *start
かな?
0005デフォルトの名無しさん
NGNGまあ無理無理。
00061
NGNG↓
解析して実行
↓
フェッチに戻る
これだけだ。
簡単だ。
00071
NGNG役に立つページとかでもいいから知ってたら教えて。
00081
NGNG少し気になったんだがそのスクリプトなんだ?
0009デフォルトの名無しさん
NGNGバカかお前は
0010デフォルトの名無しさん
NGNG自分で解析しろよ。
00111
NGNG0012デフォルトの名無しさん
NGNG< >
< サムライロボット >
< 殺介〜〜! >
<  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ人从人从人从人 我輩は殺介ナリ!1をぶった切るぜ!アヒャヒャヒャ!!
_____ ____
_,,,,,,,,,,_ γ⌒ヽ ∨
((=゚Д゚=O 。( ゚∀゚)
(O(∇)ノ'’ `O| ̄^|O
(_)_) (___)__)
00131
NGNG0014デフォルトの名無しさん
NGNGまず実機を用意します。
0015デフォルトの名無しさん
NGNG君のがんばりが無駄に終わることは
君自身にもわかってるはずだ。
00161
NGNGわかりました。押入れから出してきます。
00171
NGNG出してきましたがこれからどうすればいいでしょう?
0018デフォルトの名無しさん
NGNG次に持ってるソフト名をすべて挙げる。
00191
NGNG0020デフォルトの名無しさん
NGNG家庭用ゲーム機エミュレータ in ム板
http://pc.2ch.net/tech/kako/1002/10029/1002915408.html
エミュを作りたいのですが
http://pc.2ch.net/test/read.cgi/tech/1008334719/
■エミュレータ■
http://pc.2ch.net/test/read.cgi/tech/1011011864/
0021デフォルトの名無しさん
NGNGドラクエ1:勇者の名前と初期ステータスの関連を考察する。
ドラクエ2:ローレシアの王子の名前とサマルトリアの王子、ムーンブルクの王女の名前の関連を考察する。
ドラクエ3:バックアップ電池が切れてないか調べる。
0022デフォルトの名無しさん
NGNGハードウエアのエミュレータを
それぞれ DLLにして 誰か作って貰えば出来る可能性もあるね
00231
NGNG3は見事に切れてました。1と2は少し調べてます。
久しぶりで懐かしんだり。
0024デフォルトの名無しさん
NGNGちなみに解析にはディスクシステムとファミリーベーシックが必須。
00251
NGNG逝ってきます。
0026デフォルトの名無しさん
NGNG0027デフォルトの名無しさん
NGNGつまんないよ、作ろうよぉ〜
グラフィック部分がHSPだと大変かな?
CPU部分はなんとかなるでしょ。
HSPってでかいファイル読めたっけ? ロードが一番大変かも。
0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNG分からないことは聞くから貴様ら、やさしく答えてネっ☆
HSPで256通りの分岐っするときってif elseを連発するしかないのかしら?
もっといい方法を知ってたらわたしに教えてネっ☆
0030デフォルトの名無しさん
NGNGDLL で全部作ってプログラムのディスパッチだけ HPS にしたら?
0031デフォルトの名無しさん
NGNGそしたら1が6で書いてる内容のテキストをSNESのhpiの中で見つけちゃったd(⌒o⌒)b
あんたこれ読んでNESエミュなんて作ろうなんて思い上がったわけネっ(^Q^;) あはは!
じゃ、わたしも1が考えてた方向で作ってくことにするわ。
6502のレジスタはA,P,X,Y,SとPCがあればOKっぽいと。
メモリはバンク切り替えを考えて$8000-$ffffとその他で分けた方がいいカナ?
まぁ、細かいことはまた今度ネっ!
0032デフォルトの名無しさん
NGNG最初はNesterJベースで作ってそこから少しずつHSPにしてくことにしたわ。
NNNesterJは余分な機能がいっぱいだから読みやすいNesterJベースにしたの。
CPU、メモリ、PPUの順番でHSP化してく予定よ。
貴様らっ! やさしく応援してねっ!
0033マヂレスしてみる(;´Д`)
NGNG問題はハードウェアエミュの方。タイミングとか難しそうだ。
あと、速度的に問題になるのは必至。
>>22
それはHSP製とは言えないよな(;´Д`)
>>24
確かに解析にはそれが有れば有用だけど、
ファミコンの資料ならWEBに腐るほどあるよ。
>>27
HSPでもROMイメージ程度の大きさのファイルは読めるよ。
グラフィック展開は既にプラグインが公開されているよ。
>>31=32
期待してます。
0034デフォルトの名無しさん
NGNGマヂレスうれしいわっ!! ホントに大カンゲキ(o^v^o)
グラフィック展開のhpiの名前も教えてくれたらいいこいいこしてあ・げ・る♪
そうそうNesterJのソースに資料が入ってたの、灯台下暗しってことネっ☆
じゃ、ぜーんぶNesterJにおまかせバージョンのソースから逝くわよ
#uselib "nesterJ.dll"
#func nes_init nes_init $2
#func nes_loadrom nes_loadrom $6
#func nes_run_frame nes_run_frame $2
#func nes_clean nes_clean $100
nes_init
nes_loadrom "c:\\test.nes"
*emu_loop
nes_run_frame
await 16
goto *emu_loop
0035デフォルトの名無しさん
NGNG//winmain.cppの最後に追加してDLLにコンパイルすれば完成よっ!
#include "hspdll.h"
EXPORT BOOL WINAPI nes_init(BMSCR *p1, int p2, int p3, int p4 ){
InitControlsNStuff();
NESTER_settings.Load();
main_window_handle = p1->hwnd;
g_main_instance = GetModuleHandle("nesterj.dll");
init();
assertWindowSize();
CenterWindow();
UpdateWindow(p1->hwnd);
SetFocus(p1->hwnd); return 0;
}
EXPORT BOOL WINAPI nes_loadrom(BMSCR *p1, char *file, int p3, int p4 ){
LoadROM(file);
emu->reset(); return 0;
}
EXPORT BOOL WINAPI nes_run_frame(BMSCR *p1, int p2, int p3, int p4 ){
emu->do_frame(); return 0;
}
EXPORT BOOL WINAPI nes_clean(int p1, int p2, int p3, int p4 ){
if(emu) FreeROM();
iDirectX::releaseAll(); return 0;
}
0036デフォルトの名無しさん
NGNGhpiを対応させるのがめんどくさくなったから試してないの、ゴメンねm(_ _)m
nes_init
nes_loadrom "c:\\test.nes"
*emu_loop
gosub *run_frame
await 16 : goto *emu_loop
*run_frame
nes_ppu_start ; 0 〜 239 ラインは描画するのね☆
Cycle = 113 ; 1 ラインあたりCPUは 113 サイクル動くの♪
repeat 240
gosub *cpu_exec
nes_ppu_line cnt
loop
nes_ppu_end
gosub *cpu_exec ; 240 ラインからは描画しないの☆
nes_ppu_line 240
nes_ppu_vblank_start ; ここから241 ラインVBlankが始まるのね☆
Cycle = 1 : gosub *cpu_exec
nes_cpu_IRQ ; 割り込みがかかるみたい
Cycle = 112 : gosub *cpu_exec
Cycle = 113
repeat 19 242 ; 242 〜 261 ライン ; VBlank中はCPUだけがんばるわ♪
gosub *cpu_exec
loop
nes_ppu_vblank_end
return
*cpu_exec
nes_cpu_exec Cycle
return
0037マヂレスしてみる(;´Д`)
NGNG頑張ってるようですね。
ただ、HSP側で操作できないと、HSPで作る意味が無いので、
レジスタ・RAM・ROMにアクセスできるといいな〜。
DLLでファイルを読み込むのではなくて、HSPで読込んで、DLLで実行とか。
それから33のグラフィック展開プラグインは、エミュレータ用のものではなく
ttp://www.geocities.co.jp/SiliconValley/1145/yy-chr.gif
で使われている、ROMの中の画像を覗けるプラグインです。
一応プラグインも公開されてるけど、ドキュメントがいいかげんだったり…
0038デフォルトの名無しさん
NGNGどこで手に入れたの?
0039デフォルトの名無しさん
NGNGマヂレスしてみる(;´Д`) さん情報ありがとう!
(^o^)\(^^ ) いーこいーこ♪
>38
ttp://www.zophar.net/
に色々あるからソース付きのをとにかく調べてるところなの。
NesterJも通信対戦機能とかがじゃまでわかりにくいから別のもみてるのよ。
精度よりもとにかく動くことを優先して作るって方針でいいよネっ。
やっぱりHSPメインループバージョンはバグってたわ(>0<)
だからプログラムは苦手なのよ。(T-T)くすん‥
240ラインからは描画しないっていってるのにnes_ppu_line 240なんてしてるし
241ラインくらいから始まる割り込みはIRQじゃなくてNMIだったし
キー入力処理はいってないし、APU無視してるし、画面に描画してないし‥
次は*cpu_execの部分にとりかかる予定☆
0040デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNGそれぐらい我慢できんのか雰囲気読めん糞厨が。
0042デフォルトの名無しさん
NGNGそこでキレル君もなんだな。
0043デフォルトの名無しさん
NGNGそこで冷めた目でみている君もなんだな。
0044デフォルトの名無しさん
NGNGわたしだってネカマに慣れてないの、まだキャラも固まってないからしょうがないじゃない☆○(゜ο゜)oトリャっ
と、そんなことは\(^^\) (/^^)/ 置いといて〜
ホンっトにムカついてる事が2つあるの、聞いてよぉ〜
一体どこの誰よ、HSPにサブルーチンがないって布教してるのは!!
す〜っかり騙されてたじゃない! ヘルプのモジュールんとこ読んだらちゃんとあったの!!(`_´メ)
もうひとつは#defineが糞使えないのぉ〜
何よ、式の置き換えくらいできなきゃ使う意味ないじゃないの! (ノ-_-)ノ ~bSH
0045マヂレスしてみる(;´Д`)
NGNGということで、レス。
「HSPにサブルーチンがないって布教してる」のはあまり聞いたこと無いです(;´Д`)
私がHSPを長く使ってるから使えて当たり前と思ってるからかもしれませんが。
#defineが糞なのはまぁ、とって付けたような仕様だからでしょうね(;´Д`)
HSP2.6は仕様を一新してもっとまともになるそうですが…まだまだ先でしょう。
「HSPが糞と思えるような処理」を作るならDLL側で作るのがいいですね。
まぁ44さんの目的はHSP製のエミュレータだから全部DLLでやるのはアレだけど(笑
0046デフォルトの名無しさん
NGNG30もサブルーチンないって言ってるし、結構誤解してる人は多いと思うの
じゃ、今日もフルHSPエミュを目指してがんばるわ♪
#define C_FLAG 0x01
#define Z_FLAG 0x02
#define I_FLAG 0x04
#define D_FLAG 0x08
#define B_FLAG 0x10
#define R_FLAG 0x20
#define V_FLAG 0x40
#define N_FLAG 0x80
#define NMI_VECTOR 0xfffa
#define RESET_VECTOR 0xfffc
#define IRQ_VECTOR 0xfffe
dim opecycle, 256
opecycle.0x00 = 7,6,2,8,3,3,5,5,3,2,2,2,4,4,6,6
opecycle.0x10 = 2,5,2,8,4,4,6,6,2,4,2,7,5,5,7,7
opecycle.0x20 = 6,6,2,8,3,3,5,5,4,2,2,2,4,4,6,6
opecycle.0x30 = 2,5,2,8,4,4,6,6,2,4,2,7,5,5,7,7
opecycle.0x40 = 6,6,2,8,3,3,5,5,3,2,2,2,3,4,6,6
opecycle.0x50 = 2,5,2,8,4,4,6,6,2,4,2,7,5,5,7,7
opecycle.0x60 = 6,6,2,8,3,3,5,5,4,2,2,2,5,4,6,6
opecycle.0x70 = 2,5,2,8,4,4,6,6,2,4,2,7,5,5,7,7
opecycle.0x80 = 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4
opecycle.0x90 = 2,6,2,6,4,4,4,4,2,5,2,5,5,5,5,5
opecycle.0xa0 = 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4
opecycle.0xb0 = 2,5,2,5,4,4,4,4,2,4,2,5,4,4,4,4
opecycle.0xc0 = 2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6
opecycle.0xd0 = 2,5,2,8,4,4,6,6,2,4,2,7,5,5,7,7
opecycle.0xe0 = 2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6
opecycle.0xf0 = 2,5,2,8,4,4,6,6,2,4,2,7,5,5,7,7
って、定数を書いてみました (^-^*)
CPUの命令を実行するのにかかるクロック数をopecycleにまとめてみたんだけど
この数値が参考にしたエミュごとにビミョーに違ってて (´〜`;)うーん‥
とりあえずMaratモノを使ってみることにしたの
0047デフォルトの名無しさん
NGNG#deffunc cpu_reset
A=0 : P=Z_FLAG|R_FLAG : X=0 : Y=0 : S=0xff
mem_read RESET_VECTOR : PC=stat
dup STACK, Ram.0x100
dim ZN_table,256
repeat 0x80,0x00 : ZN_table.cnt=0 : loop
repeat 0x80,0x80 : ZN_table.cnt=N_FLAG : loop
ZN_table.0 = Z_FLAG
return
CPUループHSPバージョンその1
ほっとんどhpiまかせ、nes_ からはじまる命令は全部hpiがやってるの f(^_^)
#deffunc cpu_exec
mref Cycle,0
totalcycle = 0
repeat
nes_cpu_getPC : mem_read stat : op = stat ; フェッチ♪
totalcycle += opecycle.op
nes_cpu_exec 1
if totalcycle > Cycle : break
loop
return
ここからダミーの実行ルーチンをいれて
#deffunc cpu_exec
mref Cycle,0
totalcycle = 0
repeat
nes_cpu_getPC : mem_read stat : op = stat ; フェッチ♪
if op=0x00 : goto *next
if op=0x01 : goto *next
(256通りに分岐 ながいから しょ〜りゃくっ!)
if op=0xff : goto *next
*next
totalcycle += opecycle.op
nes_cpu_exec 1
if totalcycle > Cycle : break
loop
return
って命令の分岐をいれてみたらもう L(・o・)」あんびり〜ばぼ〜☆
激遅のおっそおそになっちゃって、Ghzクラスのマシンじゃカクカク(;_;)
HSPの恐ろしさを思い知ったわ
0048デフォルトの名無しさん
NGNGよくわからないが、エミュは出来たのか?
0049デフォルトの名無しさん
NGNGローカル変数を使いたかったら、ソールを分けなければならないって
話だったと思うけど。
0050デフォルトの名無しさん
NGNG別にソース分けなくても出来るよ。
0051デフォルトの名無しさん
NGNGローカル変数はモジュール単位になるね。
ローカル変数は無いと思ったほうがいい。
0052デフォルトの名無しさん
NGNG0053デフォルトの名無しさん
NGNG基本的にないがdupでやれないことはない。
0054デフォルトの名無しさん
NGNG>if op=0x00 : goto *next
を
if(128>op){
if(64>op){
if(32>op){
}else{
}
}else{
}
}else{
}
って書くのはどうだろう?
0055デフォルトの名無しさん
NGNGついでに、オペコードの使用頻度を使って分けるといいかも。
0056マヂレスしてみる(;´Д`)
NGNGどうしてもと言う場合を除いて、使わない方が懸命ですね。
たぶん、画像処理等を行なわない簡単な演算なら
標準命令>サブルーチン>>プラグイン>>>>>>>>>>>>モジュール
くらいで標準命令が速いかも。
コードは見難くなるけど、遅いHSPでは>>54-55は基本ですね。
それでもHSPだけではかなり無理がありますけどね。
0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNGHSPのモジュールって、他の言語におけるサブルーチンくらいの意味だから
あると思ったほうが近いのでは。
0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNG>>54
すっごい!! つっ、使えるわ d(>_ ・ )グッ!!
って思ったけど、ifの{}と一行分岐を混ぜるなキケンって書いてあるわね
( ̄Д ̄;)う゛っ、よーやく半分くらいオペコードの実装が終わったのに直すの?
(>_<)うぇぇーん、めんどくさいよぉー
>標準命令>サブルーチン>>プラグイン>>>>>>>>>>>>モジュール
ハーイ(^O^)/、とりあえずgosubと#deffuncのよびだし速度をくらべてみましたっ♪
結果はgosubの方がちょっと(1.5〜2倍)くらい速いカナ☆
#module〜#globalもしらべてみましたっ♪
ローカル変数ってゆーか、かってに変数の名前を変えてくれる機能みたい
たとえばAがA@m1みたいになるの
だから#moduleを使った部分からグローバル変数を使うことはムリっぽいのぉー(T-T)
0063デフォルトの名無しさん
NGNG条件付き分岐命令とかで分岐するときとしないときでクロック数が違ってたわ
つまり、クロック数の表を作ってちゃ正確なえみれとができないっぽい‥ o(_ _o)ぽて
でも、もうおつかれだからこのまま突っ走るわ!
0064デフォルトの名無しさん
NGNGname@
でグローバル
0065デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNGいそがしくて遊んでられないですぅ
なのでしばらくすとっぷするですの
0067デフォルトの名無しさん
NGNGsdim file 100000 : sdim sp 60,9
repeat 9: i=cnt: sp.i="\t": repeat i: sp.i+=" ": loop: loop
goto main
#deffunc iew
mref a0,0 : mref a1,1 : mref a2,2 : file+=sp.a1
if a0=0: file+="if (op & "+a2+") {\n": else: file+="} else {\n"
return
*main
i=255;
repeat 2 : iew cnt,0,0x80
repeat 2 : iew cnt,1,0x40
repeat 2 : iew cnt,2,0x20
repeat 2 : iew cnt,3,0x10
repeat 2 : iew cnt,4,0x08
repeat 2 : iew cnt,5,0x04
repeat 2 : iew cnt,6,0x02
repeat 2 : iew cnt,7,0x01
file+=sp.8+"; ここに機械語 "+i+" の処理を書くです\n" : i-
loop: file+=sp.7+"}\n": loop: file+=sp.6+"}\n"
loop: file+=sp.5+"}\n": loop: file+=sp.4+"}\n"
loop: file+=sp.3+"}\n": loop: file+=sp.2+"}\n"
loop: file+=sp.1+"}\n": loop: file+=sp.0+"}\n"
strlen len, file
bsave "inst.as", file, len
0068デフォルトの名無しさん
NGNGでも、それみたらやる気が萎えたですぅ
0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNGかなり暇だったら俺もやって見たいものだ。
0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNG0074デフォルトの名無しさん
NGNG0075デフォルトの名無しさん
NGNG0076デフォルトの名無しさん
NGNG0077デフォルトの名無しさん
NGNGマクロなしで書いたら地獄だな。
0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNGていうかその方が処理速かったような。
0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNGそれならJavaってたほうがイクナイ?
0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNG0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNG0089デフォルトの名無しさん
NGNG0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています