[新連載開始]W65C02マイコンボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
私としてはW65C02をさわるのは全く初めてです。何から何まで未経験です。さてどうなりますでしょうか。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第58回]
●JMP
JMP命令は絶対アドレスを指定する命令と間接アドレス指定の命令があります。
フラグは変化しません。
以下の命令があります。
| ニーモニック | マシン語コード | アセンブラ書式 | バイト数 | クロック数 |
| JMP a | 4C | JMP $1234 | 3 | 3 |
| JMP (a) | 6C | JMP ($1234) | 3 | 5 |
| JMP (a,x) | 7C | JMP ($1234,x) | 3 | 6 |
a (a) (a,x)はアドレッシングモードです。
aは絶対アドレスです。
,xはxの値で修飾することを示します。
()は間接アドレス指定です。
()内で指定するアドレスの値が最終的な下位アドレスになりその次のアドレスの値が最終的な上位アドレスになります。
(a)、(a,x)はJMP以外では使われません。
W65C02のアドレッシングモードは[第4回]で説明していますので適宜参照してください。
下はテストプログラム(ソースプログラム)です。
;w65c02test32 26/8/12
;
;JMP
;
org $8000
;
lda #$20;jp2
sta $10
ldy #$80
sty $11
lda #$29;jp3
sta $20
sty $21
ldx #$10
jmp jp1
;
nop
nop
nop
;
jp1:
lda #$00
sta $00
jmp ($0010);jp2
;
nop
nop
nop
;
;jp2
inc
sta $01
jmp ($0010,x);jp3
;
nop
nop
nop
;
;jp3
inc
sta $02
stp
;end
|
nopに意味はありません。
適当に入れているだけです。
W65C02アセンブラでアセンブルしました。

下はアセンブルした結果作成されたアセンブルリストです。
0000 ;w65c02test32 26/8/12 0000 ; 0000 ;JMP 0000 ; 8000 org $8000 8000 ; 8000 A920 lda #$20;jp2 8002 8510 sta $10 8004 A080 ldy #$80 8006 8411 sty $11 8008 A929 lda #$29;jp3 800A 8520 sta $20 800C 8421 sty $21 800E A210 ldx #$10 8010 4C1680 jmp jp1 8013 ; 8013 EA nop 8014 EA nop 8015 EA nop 8016 ; 8016 jp1: 8016 A900 lda #$00 8018 8500 sta $00 801A 6C1000 jmp ($0010);jp2 801D ; 801D EA nop 801E EA nop 801F EA nop 8020 ; 8020 ;jp2 8020 1A inc 8021 8501 sta $01 8023 7C1000 jmp ($0010,x);jp3 8026 ; 8026 EA nop 8027 EA nop 8028 EA nop 8029 ; 8029 ;jp3 8029 1A inc 802A 8502 sta $02 802C DB stp 802D ;end |
最初に絶対JMP命令JMP JP1を実行します。
JMP先のアドレスJP1($8016)のところで$00に00を入れます。
次の相対JMP命令JMP ($0010)は$0010、$0011に入れたアドレスへのジャンプです。
$0010、$0011にはプログラムの先頭で8020を入れてありますから$8020(JP2)へジャンプします。
ジャンプ先で$01に01を入れます。
次の相対JMP命令JMP ($0010,x)は$0010にXの値を加算したアドレスに入っているアドレス(ほんとにややこしいです)にジャンプします。
Xにはプログラムの前の方で10を入れてありますから$0020と$0021に入っているアドレスにジャンプします。
$0020、$0021にはプログラムの先頭で8029を入れてありますから$8029(JP3)へジャンプします。
ジャンプ先で$02に02を入れます。
65c02test32.binをロードして/runを実行しました。

実行した結果アドレス00に00が、アドレス01に01が、アドレス02に02が入りました。
W65C02マイコンボードの製作[第58回]
2026.8.29 upload
前へ
次へ
ホームページトップへ戻る