HSP性エミュを作るスレ Part1

このエントリーをはてなブックマークに追加
>>41
そこでキレル君もなんだな。
>>42
そこで冷めた目でみている君もなんだな。
(T-T)エーン‥、40がいじめるのぉ〜
わたしだってネカマに慣れてないの、まだキャラも固まってないからしょうがないじゃない☆○(゜ο゜)oトリャっ
と、そんなことは\(^^\) (/^^)/ 置いといて〜
ホンっトにムカついてる事が2つあるの、聞いてよぉ〜
一体どこの誰よ、HSPにサブルーチンがないって布教してるのは!!
す〜っかり騙されてたじゃない! ヘルプのモジュールんとこ読んだらちゃんとあったの!!(`_´メ)
もうひとつは#defineが糞使えないのぉ〜
何よ、式の置き換えくらいできなきゃ使う意味ないじゃないの! (ノ-_-)ノ ~bSH
ただのネカマ口調に過剰反応する40はネット初心者。

ということで、レス。
「HSPにサブルーチンがないって布教してる」のはあまり聞いたこと無いです(;´Д`)
私がHSPを長く使ってるから使えて当たり前と思ってるからかもしれませんが。
#defineが糞なのはまぁ、とって付けたような仕様だからでしょうね(;´Д`)
HSP2.6は仕様を一新してもっとまともになるそうですが…まだまだ先でしょう。

「HSPが糞と思えるような処理」を作るならDLL側で作るのがいいですね。
まぁ44さんの目的はHSP製のエミュレータだから全部DLLでやるのはアレだけど(笑
マヂレスしてみる(;´Д`) さん、やさしいのね (*^。^*)ポッ♪
30もサブルーチンないって言ってるし、結構誤解してる人は多いと思うの
じゃ、今日もフル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モノを使ってみることにしたの
47デフォルトの名無しさん:02/02/08 13:06
CPUのレジスタを初期化する部分はこんな感じカナ☆

#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の恐ろしさを思い知ったわ
48デフォルトの名無しさん:02/02/08 15:51
なんかすげーな。
よくわからないが、エミュは出来たのか?
サブルーチンが無いっていうか、ローカル変数が無いんだろ?
ローカル変数を使いたかったら、ソールを分けなければならないって
話だったと思うけど。
50デフォルトの名無しさん:02/02/08 16:17
>>49
別にソース分けなくても出来るよ。
>>49
ローカル変数はモジュール単位になるね。
ローカル変数は無いと思ったほうがいい。
構造体は使えるの?
>>52
基本的にないがdupでやれないことはない。
>>47
>if op=0x00 : goto *next

if(128>op){
   if(64>op){
      if(32>op){
      }else{
      }
   }else{
   }
}else{
}
って書くのはどうだろう?
>54
ついでに、オペコードの使用頻度を使って分けるといいかも。
HSPのモジュールは物凄く遅いので、エミュレータのような速度が重要な場合は
どうしてもと言う場合を除いて、使わない方が懸命ですね。

たぶん、画像処理等を行なわない簡単な演算なら
標準命令>サブルーチン>>プラグイン>>>>>>>>>>>>モジュール
くらいで標準命令が速いかも。

コードは見難くなるけど、遅いHSPでは>>54-55は基本ですね。
それでもHSPだけではかなり無理がありますけどね。
遅いのは承知だよ。実用目的じゃなくて遊びの範疇。
58デフォルトの名無しさん:02/02/09 15:20
なんGくらいのCPUを使えば実用的になりますか?
重力は無関係です
>>51
HSPのモジュールって、他の言語におけるサブルーチンくらいの意味だから
あると思ったほうが近いのでは。
ローカル変数はあるが自動変数は無い
お昼だけど ヾ( ' - '*)おはよ♪

>>54
すっごい!! つっ、使えるわ d(>_ ・ )グッ!!
って思ったけど、ifの{}と一行分岐を混ぜるなキケンって書いてあるわね
( ̄Д ̄;)う゛っ、よーやく半分くらいオペコードの実装が終わったのに直すの?
(>_<)うぇぇーん、めんどくさいよぉー

>標準命令>サブルーチン>>プラグイン>>>>>>>>>>>>モジュール
ハーイ(^O^)/、とりあえずgosubと#deffuncのよびだし速度をくらべてみましたっ♪
結果はgosubの方がちょっと(1.5〜2倍)くらい速いカナ☆

#module〜#globalもしらべてみましたっ♪
ローカル変数ってゆーか、かってに変数の名前を変えてくれる機能みたい
たとえばAがA@m1みたいになるの
だから#moduleを使った部分からグローバル変数を使うことはムリっぽいのぉー(T-T)
6502の命令を実行するのにかかるクロック数のギモンが解けたのっ♪\(^o^)/
条件付き分岐命令とかで分岐するときとしないときでクロック数が違ってたわ
つまり、クロック数の表を作ってちゃ正確なえみれとができないっぽい‥ o(_ _o)ぽて
でも、もうおつかれだからこのまま突っ走るわ!
>>62

name@
でグローバル
そう。
m(__)m ご、ごめんなさいですぅ
いそがしくて遊んでられないですぅ
なのでしばらくすとっぷするですの
; コソーリと再開するです

sdim 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
これを実行するとinst.asってファイルがでっきまーすっ☆
でも、それみたらやる気が萎えたですぅ
どうなったんだろう?
70デフォルトの名無しさん:02/04/25 00:17
あげてみる
密かに面白そうだな。
かなり暇だったら俺もやって見たいものだ。
72デフォルトの名無しさん:02/05/18 16:20
agege
HSBは知らんがJavaでは書いたぞ。
HSBってなんすか?
HSpBoy
76デフォルトの名無しさん:02/06/09 00:25
5get
>>67
マクロなしで書いたら地獄だな。
age
gosubでもいいけど。
ていうかその方が処理速かったような。
80デフォルトの名無しさん:02/07/09 05:33
中途age
期待age
82デフォルトの名無しさん:02/07/12 02:46
HSPって何言語で作られてるんですか?
HSPでエミュレータを作ることはおもしろいことなのか?
それならJavaってたほうがイクナイ?
HSPで作ることに何か意義を見出したんじゃないのか?
HSPのエミュ(互換ソフト)を作るほうがいいな。
まずHSPの言語仕様をちゃんと定義してくれ。
87デフォルトの名無しさん:02/07/13 03:41
ytrydrty
 
90デフォルトの名無しさん:02/08/19 01:26
age
91デフォルトの名無しさん
age