Help us understand the problem. What is going on with this article?

6502アセンブル/逆アセンブル

More than 1 year has passed since last update.

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付けてくれたらいいのに‥。

fuzzball
つい出来心で。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away