HSP3 で マシン語変換。

コールバックでマシン語を埋め込む必要があるときの、
ダンプコードからのHSP コードへの変換プログラム。

 

 

全体的なやり方については、ちょくとさんのウェブサイトの中の、

 

マシン語コードを作成してみる

を参照してください。

 

; マシン語コード変換スクリプト 簡易。

#uselib "user32.dll"
#func CharUpper "CharUpperA" var

 

varname = "code"        ; 変数名
numline = 6                ; 1行の要素数

 

; 出力されたマシン語コードを記述
cod = {"
8B 44 24 04 83 C0 1C 80 38 40 74 11 50 8B 44 24
14 6A 00 68 43 01 00 00 FF 70 04 FF 10 33 C0 40
C2 10 00
"}

 

CharUpper cod
dim alp,4 : sets = 0 : c = 0 : s = "" : res = varname+"(0)=$"
repeat 4 : alp(cnt) = "" : loop

repeat strlen(cod)
dat = peek(cod,cnt)
if (dat<48)|(90<dat) : continue
if (dat>57)&(65>dat) : continue

poke s,c\2,dat
c++
if c\2 = 0 {
        alp((c/2)-1) = s
        s = ""
        if c=8 : c=0 : gosub *mo
    }
loop

 

if c!=0 : gosub *mo

 

res = strmid(res,0,strlen(res)-3)
if (sets\2) : res = res+", $00000000" : sets++
buf = "xdim "+varname+","+sets+"\n"+res
mesbox buf, ginfo_winx, ginfo_winy, 4
stop

 

*mo
    repeat 4 : res = res + alp(3-cnt) : loop
    repeat 4 : alp(cnt) = "" : loop
    sets++
    res = res+", "
    if (sets\numline) = 0 : res = strmid(res,0,strlen(res)-2)+"\n"+varname+"("+numline+")="
    res = res+"$"
    return

 

ちょくとさんのウェブサイトに掲載されているものと比較して、信頼性が著しく違います。
向こうはちゃんとした物ですが、こっちはとりあえずそのコードを出すだけ。
動くかどうかは動かしてみるまで分かりません。

 

強烈にアバウトな感じですが、まぁ、そんな感じで。

HSP3 で マシン語変換。」への2件のフィードバック

  1. 匿名

    #uselib “user32.dll”
    #func CharUpper “CharUpperA” var

    varname = “code” ; 変数名
    numline = 6 ; 1行の要素数

    ; 出力されたマシン語コードを記述
    cod = {”
    8B 44 24 04 83 C0 1C 80 38 40 74 11 50 8B 44 24
    14 6A 00 68 43 01 00 00 FF 70 04 FF 10 33 C0 40
    C2 10 00
    “}

    CharUpper cod
    dim alp,4 : sets = 0 : c = 0 : s = “” : res = varname+”(0)=$”
    repeat 4 : alp(cnt) = “” : loop

    repeat strlen(cod)
    dat = peek(cod,cnt)
    if (dat<48)|(9057)&(65>dat) : continue

    poke s,c\2,dat
    c++
    if c\2 = 0 {
    alp((c/2)-1) = s
    s = “”
    if c=8 : c=0 : gosub *mo
    }
    loop

    if c!=0 : gosub *mo

    res = strmid(res,0,strlen(res)-3)
    if (sets\2) : res = res+”, $00000000″ : sets++
    buf = “xdim “+varname+”,”+sets+”\n”+res
    mesbox buf, ginfo_winx, ginfo_winy, 4
    stop

    *mo
    repeat 4 : res = res + alp(3-cnt) : loop
    repeat 4 : alp(cnt) = “” : loop
    sets++
    res = res+”, ”
    if (sets\numline) = 0 : res = strmid(res,0,strlen(res)-2)+”\n”+varname+”(“+numline+”)=”
    res = res+”$”
    return

  2. big bola

    First off I want to say awesome blog! I had a quick question which I’d like to ask if you do not mind. I was curious to find out how you center yourself and clear your mind before writing. I’ve had trouble clearing my mind in getting my ideas out there. I do take pleasure in writing but it just seems like the first 10 to 15 minutes are wasted just trying to figure out how to begin. Any ideas or hints? Kudos!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください