6502のアセンブル/逆アセンブルをしたくなって、ちょっと調べてみたらcc65が全部入りで便利だったので覚書。
cc65
6502マシン用のCコンパイラです。
今回は、Cコンパイラは使いません。
assemble
アセンブラはca65
ですが、素のバイナリを吐くためにcl65
(フロントエンド)を使います。
hoge.s
.org $800
:
ldy $50
lda skewtbl,y
sta $3d
lda sectaddr,y
beq :+
sta $27
jsr $005c
:
dec $50
bne :--
rts
skewtbl:
.byte $00,$0d,$0b,$09,$07,$05,$03,$01
.byte $0e,$0c,$0a,$08,$06,$04,$02,$0f
sectaddr:
.byte $00,$09,$00,$00,$00,$00,$00,$00
.byte $30,$31,$32,$33,$34,$00,$00,$00
-
--listing
リスティング生成 -
--target none
ターゲット指定(none=素のバイナリ)
$ cl65 --listing hoge.lst --target none -o hoge.bin hoge.s
$ hexdump -C hoge.bin
00000000 a4 50 b9 16 08 85 3d b9 26 08 f0 05 85 27 20 5c |.P....=.&....' \|
00000010 00 c6 50 d0 eb 60 00 0d 0b 09 07 05 03 01 0e 0c |..P..`..........|
00000020 0a 08 06 04 02 0f 00 09 00 00 00 00 00 00 30 31 |..............01|
00000030 32 33 34 00 00 00 |234...|
00000036
disassemble
逆アセンブラはda65です。
-
-S
スタートアドレス -
--comments
コメントレベル
$ da65 -S 0x800 --comments 4 hoge.bin
; da65 V2.17 - Git N/A
; Created: 2018-04-18 10:44:34
; Input file: hoge.bin
; Page: 1
.setcpu "6502"
; ----------------------------------------------------------------------------
L005C := $005C
L0861 := $0861
; ----------------------------------------------------------------------------
L0800: ldy $50 ; 0800 A4 50 .P
lda L0816,y ; 0802 B9 16 08 ...
sta $3D ; 0805 85 3D .=
lda L0826,y ; 0807 B9 26 08 .&.
beq L0811 ; 080A F0 05 ..
sta $27 ; 080C 85 27 .'
jsr L005C ; 080E 20 5C 00 \.
L0811: dec $50 ; 0811 C6 50 .P
bne L0800 ; 0813 D0 EB ..
rts ; 0815 60 `
; ----------------------------------------------------------------------------
L0816: brk ; 0816 00 .
ora $090B ; 0817 0D 0B 09 ...
.byte $07 ; 081A 07 .
ora $03 ; 081B 05 03 ..
ora ($0E,x) ; 081D 01 0E ..
.byte $0C ; 081F 0C .
asl a ; 0820 0A .
php ; 0821 08 .
asl $04 ; 0822 06 04 ..
.byte $02 ; 0824 02 .
.byte $0F ; 0825 0F .
L0826: brk ; 0826 00 .
ora #$00 ; 0827 09 00 ..
brk ; 0829 00 .
brk ; 082A 00 .
brk ; 082B 00 .
brk ; 082C 00 .
brk ; 082D 00 .
bmi L0861 ; 082E 30 31 01
.byte $32 ; 0830 32 2
.byte $33 ; 0831 33 3
.byte $34 ; 0832 34 4
brk ; 0833 00 .
brk ; 0834 00 .
brk ; 0835 00 .
.org
付けてくれたらいいのに‥。