命令集

命令集です 自分が使いやすいように書いたのであなたが使いやすくはないと思います

まだ本格的なプログラムなんか組んだことないような初心者が作ったので間違いor説明不足などがあったら指摘してください


よく使う基本命令

命令 説明
ST* *にはA,X,Y    *に指定した値をセット
 
STA #$10
LD* *にはA,X,Y    指定したアドレスに*をセット STZは指定したアドレスに0をセットできる
 
LDA $1490
T+- +と-はA,X,Y   +に-をコピー          他にもC,D,Sもあるが基本使わないので略 値は指定しない TAX
PH* *にはA,X,Y    *の値をPUSH>>0   いろいろあるが基本使(ry                      値は指定しない PHA
PL*

*にはA,X,Y    *にPULL>>0          いろいろあるが基本使(ry                     値は指定しない

PLA
IN* *にはA,X,Y,C *の値を1増加 *にCを使うと指定したアドレスの値を1増やす   それ以外は値を指定しない ちなみに繰り上がると00になる
INC $0F48
DE* *にはA,X,Y,C *の値を1減少 *にCを使うと指定したアドレスの値を1減らす    それ以外は値を指定しない ちなみに繰り下がるとFFになる
DEC $0F48
ADC
ADC #$〇〇          (A + 指定した数)をAに代入                     使う前にCLCを実行すること(実行しないと結果の値が不安定になる)>>1
ADC $(アドレス)     (A + 指定した数)を指定したアドレスに代入 使う前にCLCを実行すること
ADC $0F48
SBC
SBC #$〇〇       (A - 指定した数)をAに代入                     使う前にSECを実行すること(実行しないと結果の値が不安定になる)>>1
SBC $(アドレス)     (A - 指定した数)を指定したアドレスに代入 使う前にSECを実行すること
SBC $0F48
CM* *にはP,X,Y PはAのことだがなぜかP 指定した値(=オペランド)といろいろ比較してフラグを操作する *がX,Yの時は#$〇〇しか使えない CMP
BEQ CM*の結果、       *=オペランドなら指定した場所に移動 or ゼロフラグが1なら指定(ry
BEQ RETURN
BNE CM*の結果、       *≠オペランドなら指定した場所に移動 or ゼロフラグが0なら指定(ry BNE RETURN
BCS CM*の結果、       *≧オペランドなら指定した場所に移動 or キャリーフラグが1なら指定(ry
BCS RETURN
BCC CM*の結果、       *<オペランドなら指定した場所に移動 or キャリーフラグが0なら指定(ry
BCC RETURN
BMI ネガティブフラグが1の時指定した場所まで移動します たぶん使わないだろう BMI NEXT
BPL ネガティブフラグが0の時指定した場所まで移動します たぶん使わないだろう BPL NEXT
BVS オーバーフローフラグが1の時指定した場所まで移動します 一生使わないだろう BVS NEXT
BVC オーバーフローフラグが0の時指定した場所まで移動します 一生使わないだろう BVC NEXT
BRA
無条件に指定した場所に移動
なお、Bシリーズはジャンプできる距離が少ないで、シャンプ距離が40行を超えたら、JSRを近くにおいてそこにジャンプしよう
ジャンプ距離少しだけだな〜って思ったらBRAを使うと容量が削減できるよ
BRA RETURN
JSR JSRは$****と$****.xだけ使える ジャンプ行数がかなりあるので、1つのプログラム内ではジャンプできない危険は殆ど無い  JSR RETURN
JSL 基本、ルーチンを呼び出すのに使う $******だけが使える JSL $01B7B3
RTS JSRで呼ばれたところに戻る スプライトやブロック等は、これがスプライト処理の終了と見ていい RTS
RTL JSLで呼ばれたとことに戻る 基本使わない 専用ルーチンを作るような人はこんなの全く参考にしないだろう RTL

>>0
PUSHはスタックの一番上に値を追加、PULLはスタックの一番上を抜き取り指定した所にセットすることです
Xに特別な値が保管してあって、Xを使いたいが変えられないときに使ったりします。
XをPUSH(PHX)し、Xを使ってから、XをPULL(PLX)します。すると予定した動作ができ、結果Xの値は変わりません。

1プログラム内でPUSHした回数だけPULLしないと必ずフリーズします。要注意。
 
>>1
AD*は繰り上がりが起きた時、00から始まります。また、キャリーフラグが1になります。その他はキャリーフラグは0になる。
SB*は繰り下がりが起きた時、FFから始まります。また、キャリーフラグが0になります。その他はキャリーフラグは1になる

余計な説明

指定した数とは、#$〇〇 または $(アドレス)の中の値 のこと

命令の$(アドレス)指定は基本、?$** ?$**** ?$****,x $****,y の3つはすべて使えます 詳しくは鬼畜王様のペーシをご覧下さい

指定した場所=ラベルと思って大丈夫です


 

論理演算

AND・・・2進数で考えたAと指定した値を各桁比較し、両方とも1だった場合のみ1、その他は0になります。通称論理積

        %11110000
 
AND  %01010101
        %01010000

*具体的な使用方法

;コントローラーのRを押している間だけ無敵(スター)になる
          STA #$10      ; 10をAにセット(Rのコントロールボタンに対応)
          AND $17        ; Rが押されているならばAが1に($17にコントロールデータが格納)
          BNE NEXT     ; CMP #$00 は必要ない Rが押されてなければ終わり
          STA #$1        ; 1をAにセット
          LDA $1490     ; スタータイマーを1にする(このフレームだけ無敵)
NEXT

 

ORA・・・2進数で考えたAと指定した値を各桁比較し、両方とも0だった場合のみ0、その他は1になります。通称論理和 あと電卓上のOR

        %11110000
ORA  %01010101
        %11110101

*具体的な使用方法 (思い浮かばねえwすいませんw)

EOR・・・2進数で考えたAと指定した値を各桁比較し、片方のみ1だった場合のみ1、その他は0になります。通称排他的論理和
 
        %11110000
EOR  %01010101
        %10100101

*具体的な使用方法

TRB・・・Aのbit反転値と指定した数の論理積(AND)を指定したアドレスに代入
$**と$****だけ使える
 
        %11110000 ;Aの値
              ↓
        %00001111 ;Aのbit反転値
AND  %01010101
        %11110101 

 

TSB・・・ORAとほとんど同じだが結果を対象アドレスに直接代入する
$**と$****だけ使える
 

TOP

3/19 とっても見づらいのでと 満足ww

3/20 適当に改良 暇つぶし程度

4/3 SB*では繰り下がった時キャリーフラグが1になると嘘をついていた すいません

inserted by FC2 system