1

私は単純なシングル ボード コンピューターを構築し、6809 アセンブリ言語を学習しようとしています。たとえば、6850 ACIA を介したエコーなど、いくつかの単純なものを実行しています。文字列を印刷しようとしていますが、立ち往生しています。

文字列は ROM にあり、null ゼロで終了します。文字列の先頭を指すように X レジスタをロードします。後で、X が指す文字を A レジスタにロードすると、X がインクリメントされます。次に、文字を ACIA に出力する前にヌル ゼロをテストします。単純なロジック アナライザをデータ バスに接続しましたが、最初の文字の代わりにゼロが表示され、文字列が終了したと見なされるため、ACIA に何も出力されないことがわかりました。コードにバグは見当たりません。ハードウェアに関連している可能性がありますが、初歩的なエラーが発生した場合に備えて、経験豊富な目が必要です。

アセンブリは次のとおりです。


*******************************EQUATES****************************************
    ***ACIA register definitions****
ACIA_control EQU $A000 ;write only
ACIA_status EQU $A000 ;read only
ACIA_data EQU $A001 ;read/write

********************************STRING CONSTANT******************************
    ORG $C000 ; ROM starts here

    ***store string to send out on serial***
    *Pseudo op FCN stores characters in sequential bytes,
    *and automatically adds null zero.
   

start_of_string
    FCN "The quick brown fox jumps over the lazy dog"

**********************************SETUP****************************************
setup

    ***reset_ACIA***
    LDA #%00000011
    STA ACIA_control

    ***set_ACIA_mode***
    ;clock/64 gives 19,200 baud with 4.9152   MHz xtal
    ;8 bits, 1 stop bit, no parity
    ;/RTS inactive (set high), TX interupt disabled, RX interupt disabled
    LDA #%01010110
    STA ACIA_control

*********************************SEND LOOP**************************************
reset_index_register
        LDX start_of_string

        ***Is ACIA ready to TX***
wait    LDA #%00000010
        ANDA ACIA_status
        BEQ wait

        ***send character***
        LDA ,X+
        BEQ end_of_string; string finished at null zero
        STA ACIA_data
        BRA wait ;next character

        ***LOOP BACK***
end_of_string
        BRA reset_index_register

*********************************VECTORS****************************************

    ***RESET***
    ORG $FFFE
    FDB setup ;Jump to programme entry
4

1 に答える 1