私は単純なシングル ボード コンピューターを構築し、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