約 1,673,785 件
https://w.atwiki.jp/snesspec/pages/69.html
TCD (Transfer Accumulator to Direct Page Register) [アキュームレータからダイレクトページレジスタへ転送] 65816 で追加された命令。 アキュームレータとダイレクトページレジスタの間で値をやり取りする。 TCD はアキュームレータからダイレクトページレジスタ (ゼロページポインタ) へ値を転送する。 アキュームレータの 16/8 ビットの設定 (m) の状態に関わらず、 常に 16 ビットの値を転送する。 TCD の 3 文字に含まれる "C" は、アキュームレータが 16 ビット幅で参照されることを意味する (アキュームレータの下位バイトは A、上位バイトは B)。 TDC はダイレクトページレジスタからアキュームレータへ アキュームレータの 16/8 ビットの設定 (m) の状態に関わらず 16 ビットの値を転送する。 いくつかのアセンブラでは、TAD, TDA も ニーモニックとして使うことができる。 フラグ変化 n-----z- n 転送された値の最上位ビットの値 z 転送された値が 0 の時セット コード一覧 アドレッシングモード 文法 オペコード バイト数 命令サイクル Implied TCDAlias TAD 5B 1 2
https://w.atwiki.jp/snesspec/pages/130.html
Direct Page Indexed Indirect,X () 24ビットフルアドレスのうち下位16bitをダイレクトに、 インデックスとしてXレジスタを使用した内容で指定します。 上位8ビットはDBRを使用します。 例 ADC (dp,X)
https://w.atwiki.jp/snesspec/pages/225.html
MOV1 コード一覧 文法 オペコード バイト数 命令サイクル フラグ変化 内容 MOV1 C,mem,bit AA 3 4 -------C C - mem bit MOV1 mem,bit,C CA 3 6 -------- C - mem bit
https://w.atwiki.jp/snesspec/pages/6.html
アーカイブ @wikiのwikiモードでは #archive_log() と入力することで、特定のウェブページを保存しておくことができます。 詳しくはこちらをご覧ください。 =>http //www1.atwiki.jp/guide/pages/921.html#id_2d967d6e たとえば、#archive_log()と入力すると以下のように表示されます。 保存したいURLとサイト名を入力して"アーカイブログ"をクリックしてみよう サイト名 URL
https://w.atwiki.jp/sneak/pages/9.html
関連ブログ @wikiのwikiモードでは #bf(興味のある単語) と入力することで、あるキーワードに関連するブログ一覧を表示することができます 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/17_161_ja.html たとえば、#bf(ゲーム)と入力すると以下のように表示されます。 #bf
https://w.atwiki.jp/snesspec/pages/85.html
DEY (Decrement Y Index Register) [Yレジスタデクリメント] Y レジスタをデクリメント (-1) する。 16 ビットインデックスレジスタモードの時、 レジスタを 16 ビット幅で扱う。 フラグ変化 n-----z- n 結果の最上位ビットがセットされている時、セットする z 結果が 0 の時セット コード一覧 アドレッシングモード 文法 オペコード バイト数 命令サイクル Implied DEY 88 1 2
https://w.atwiki.jp/snesspec/pages/238.html
0x2101 - OBJSEL (スプライトサイズ・データ領域選択) アクセスフラグ 書バ強V?- D7 D6 D5 D4 D3 D2 D1 D0 s s s n n b b b sss スプライトサイズ 000 8x8 または 16x16 001 8x8 または 32x32 010 8x8 または 64x64 011 16x16 または 32x32 100 16x16 または 64x64 101 32x32 または 64x64 110 16x32 または 32x64 (ドキュメントに載っていない) 111 16x32 または 32x32 (ドキュメントに載っていない) nn ネーム選択 bbb ネーム基底アドレス選択 実アドレスは bbb x 0x2000 (8KB)
https://w.atwiki.jp/snesspec/pages/167.html
HiROM と LoROM の見分け方 カートリッジ情報の、 0x1C ROM チェックサムの逆数 0x1E ROM チェックサム を OR すると、結果は常に 0xFFFF になる。 (チェックサムの逆数の値は、チェックサムの値を XOR したものであることから) この性質を利用し、HiROM 、 LoROM 両方のチェックサムの値が 入っているアドレスの中身を取得し、 どちらの結果が 0xFFFF となるかを確認することで判定する。 どちらも 0xFFFF とならない場合は、ゲームタイトルの部分が 全て大文字で書かれていることから、それらのバイト列が 大文字の範囲に含まれているかを確認することでチェックすることができる。 日本語のタイトルが含まれている場合、この方法はうまくいかない。 (半角カナが書かれているためかと思われます。) カートリッジ情報の ROM 構造のバイトにも HiROM、LoROM を判定する部分が含まれているが、 これらは ROM ユーティリティによって書き換えられている可能性があるため、 判定には使用しない方が良い。 実際の ROM カートリッジでは、 HiROM・LoROM どちらの場合にも カートリッジ情報は同じ位置に書かれている。 実機で動かす場合は、下位 32K バイト、上位 32K バイト の両方の位置の ROM 構造バイトを取得し、同じ値が書かれている時は LoROM、 値が違えば HiROM という風に判定することができる。 (LoROM の場合は A15 ピンが使われないため、 上位 32K バイト ・ 下位 32K バイト がミラーリングされる) ROM タイプが取得できない場合は、ほとんどのカートリッジが LoROM であることから、 LoROM として読み込む処理を入れる。
https://w.atwiki.jp/snesspec/pages/91.html
TXY (Transfer X index register to Y index register) [XレジスタからYレジスタへ転送] レジスタ間転送命令について フラグ変化 n-----z- n 転送された値の最上位ビットの値 z 転送された値が 0 の時セット コード一覧 アドレッシングモード 文法 オペコード バイト数 命令サイクル Implied TXY 9B 1 2
https://w.atwiki.jp/snesspec/pages/156.html
SPC-700 6502 シリーズとよく似た命令セットを持つ SPC700 は、 メモリ空間は 64 キロが用途別にアドレス区分され、 アドレス 0000H ~ 00FFH を 0 ページ、 アドレス 0100H ~ 01FFH を 1 ページと呼びます。 この領域のデータについては、プログラム・ステイタス・ワード内の ダイレクト・ページ・フラグ(P)でダイレクト・ページ指定を行うと、 多様なアドレシング・モードで、かつ少ないサイクル数でデータ処理を 行うことが出来ます。 CPUにはA,X,Yの汎用レジスタ、各種フラグの集合の プログラム・ステイタス・ワード(PSW)、プログラム・カウンタ(PC)、 スタック・ポインタ(SP)があります。 Aレジスタは最も多くの命令で操作され、8ビット演算のアキュムレータになります。 16ビット演算時にはYレジスタとペアになり16ビット・アキュムレータの 下位8ビットのレジスタとなります。X,Yレジスタは汎用レジスタとしての 機能の他、各種インデックス・アドレッシング・モードの インデックス・レジスタとしての機能や2アドレス命令の ソース、ディスティネーション・アドレス・レジスタ機能など多様な操作に使用されます。 命令セットには A レジスタを中心として算術・論理演算が行われる1アドレス命令と、 ダイレクトページ内の任意のアドレスをソース・アドレスと ディスティネーション・アドレスに指定できる2アドレス命令があります。 制御用途に多様されるビット処理に対しては、アドレス 0000H ~ 1FFFH の 8Kバイトの広範囲のデータに対してブーリアン・ビット操作命令が適用できます。 さらにダイレクト・ペード内のビットに対しては、セット,リセット, ビット条件相対ジャンプが使用できます。64Kバイトの全空間のデータに対しては、 複数ビットのテスト・アンド・セット,テスト・アンド・リセット命令が用意されています。 精度を必要とするデータや、高速にデータ処理を行うため、16ビット・データを 1命令で操作できます。ダイレクト・ペード内の連続する2バイトの 16ビットデータとYレジスタとAレジスタのペアとの間で、 加算,減算,比較,転送が出来ます。 また、ダイレクト・ページ内の連続する16ビット・データのインクリメント, デクリメントも可能です。 高速データ処理と多様な形式のデータを処理するため、乗算,除算命令があります。 乗算は符号なし8ビット×8ビットで被乗算をYレジスタに、乗算をAレジスタに 格納し、結果はY,Aの16ビットアキュムレータに入ります。 除算は符号なし16ビット÷8ビットで、被除数は、Y,Aの 16ビット・アキュムレータに、除数はXレジスタに格納され、 結果の商はAレジスタに入り、余りがYレジスタに入ります。 10進データの処理には、加減算両方の結果に対し10進(加,減算)補正命令があります。 ブランチ系の命令には各種ステイタス・フラグの状態による相対ブランチ命令、 ダイレクト・ページ内の任意のビットのセット,リセット状態による ブランチ命令などがあります。また、ループ系のブランチ命令には比較ブランチ, 減算ブランチ命令がありそれぞれについて2種類のアドレシング・モードがあります。 サブルーチン・コール命令には64Kバイト内の サブルーチン・アドレス直接指定の3バイトコール命令、 特定エリアをサブルーチン・コールする2バイト・コール命令、 コール・テーブルを用いる16個の1バイト・コール命令があり、 サブルーチンの使用頻度に応じて使い分けるとバイト効率を向上することが出来ます。 レジスタ CPU 内部には各種の命令実行に必要なレジスタがあります。A レジスタ (主に 8 ビット・アキュムレータとして機能), X レジスタ, Yレジスタ (インデックス・レジスタとしても使える汎用8ビット・レジスタ), PSW(プログラム・ステータス・ワード), SP(スタック・ポインタ)等です。 これらは、8ビット・レジスタですが、PC(プログラム・カウンタ)は 16ビットで構成されています。 15-8 7-0 名前 幅 PC プログラムカウンタ 16bit A A レジスタ 8bit Y A Y, A ペア (16bitアキュームレータ) 16bit X X レジスタ 8bit Y Y レジスタ 8bit SP スタックポインタ 8bit PSW プログラムステータスワード 8bit プログラムステータスワード (PSW) PSW 7 6 5 4 3 2 1 0 N V P - H - Z C N ネガティブフラグ V オーバーフローフラグ P ダイレクトページフラグ H ハーフキャリーフラグ Z ゼロフラグ C キャリーフラグ (ビットアキュームレータ) プログラム・ステイタス・ワードは8ビットのレジスタで命令の実行結果より、セット, リセットされるフラグ類とCPUの動作を決定するフラグ類から構成されています。 リセット時には ”000-0-00”になります。 ネガティブフラグ 演算実行後、MSBの結果の値が”1”のときセットされ、”0”のときリセット されます。 条件分岐命令でテストすることが出来ます。 オーバーフローフラグ 算術演算実行後、オーバー・フロー、アンダー・フローが生じた時セットされます。 その際、Hフラグも同時に影響をうけます。 条件分岐命令でテストすることが出来ます。 ダイレクトページフラグ ダイレクト・ページ・アドレシングなど多くのアドレシング・モードが適用される ダイレクトページを指定するフラグです。”0”のときはアドレス0000h~ 00FFhの領域、”1”のときはアドレス0100h~01FFhの領域が ダイレクト・ページになります。STEP命令によってセットされ、CLRP命令 によってリセットされます。 ハーフキャリーフラグ 演算実行後、ALUのビット3からビット4へキャリーがあった時、または ボローがなかった時にセットされます。セットする命令はありませんが、CLRV 命令によってリセットされます。その際、オーバー・フロー・フラグもセット されます。 ゼロフラグ 演算実行後、結果がゼロのときにセットされ、ゼロでない時リセットされます。 16ビット演算命令でもゼロの検出が行なわれます。条件分岐命令でテストする ことが出来ます。 キャリーフラグ 演算実行後、算術論理ユニット(ALU)の再上段ビットからキャリーがあった時、 またはボローが無かった時にリセットされます。シフト、ローテイト命令でも変化 します。ブーリアンビット操作命令のビット・アキュムレータとしても機能します。 SETC命令でセットされ、CLRC命令でリセットされます。また、NOTC 命令でキャリー・フラグは反転します。 条件分岐命令でテストすることが出来ます。 プログラムカウンタ (PC) プログラム・カウンタは16ビットで構成され64Kバイトのアドレス領域を 持ちます。上位の8ビットをPCH、下位の8ビットをPCLと呼びます。 通常は、次に実行するアドレスを持っていて、フェッチした命令に必要なバイト数 だけインクリメントされます。 プログラムの途中に分岐命令があるとプログラム・カウンタには、分岐先のアドレス が格納されます。リセット(ノットPOR)入力があるとアドレスFFFFhと FFFEhにあるリセット・ベクタがそれぞれPCH、PCLに入り、分岐します。 A レジスタ 8ビットのアキュムレータとして使用されるレジスタです。 16ビット演算命令時にはYレジスタとペアで構成する16ビットアキュムレータの Lowバイト・データを保持するレジスタになります。演算命令時には乗数レジスタと なり、積のLowバイト・データが入ります。除数命令時にはYレジスタとペアで 被除数を構成し、結果の商が入ります。 X レジスタ Xレジスタは汎用のデータ・レジスタとしての役割の他にインデックス・アドレシング時の インデックス・レジスタとして機能します。また、2アドレス命令の ディスティネーション・アドレス・レジスタ、Xレジスタ間接アドレス・レジスタに 使われます。 除算命令時には除数レジスタになります。 Y レジスタ Yレジスタは汎用のデータ・レジスタとしての役割の他にインデックス・ アドレシング時のインデックス・レジスタとして機能します。また、2アドレス命令 のソース・アドレスとして使われます。 16ビット演算命令時にはAレジスタとペアで構成する16ビットアキュムレータの Highバイト・データを保持するレジスタになります。乗算命令時には被除数 レジスタになり、積のHighバイト・データが入ります。 除算命令時にはAレジスタとペアで被除数を構成し、結果の余りが入ります。 条件ジャンプ時のループ・カウンタにも使われます。 スタックポインタ スタック・ポインタは割り込みや、サブルーチン・コール、プッシュ(PUSH)、 ポップ(POP)、リターン(RET)命令時にデータをRAM上に退避したり、 RAM上から復帰するために使用されます。スタック・ポインタの示すアドレス領域は 1ページ内(アドレス0100h~01FFh)です。 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │0│0│0│0│0│0│0│1│ SPの値 │ └─┴─┴─┴─┴─┴─┴─┴─┴───────────────┘ └───────────────┴───────────────┘ ハードで設定 プログラムで設定 *サブルーチン・コール時 スタック・アドレス 動作 退避後のSPの値 SP PCH退避 SP-1 SP-1 PCL退避 SP-2 *サブルーチンからの復帰時 スタック・アドレス 動作 退避後のSPの値 SP+1 PCL退避 SP+1 SP+2 PCLH避 SP+2 Aレジスタ、Xレジスタ、Yレジスタ、PSWをスタックに退避,復帰するには PUSH,POP命令を使えます。 *PUSH A(X,Y,PSW) スタック・アドレス 動作 退避後のSPの値 SP A(X,Y,PSW)の退避 SP-1 *POP A(X,Y,PSW) スタック・アドレス 動作 退避後のSPの値 SP+1 A(X,Y,PSW)の退避 SP+1