我已经构建了一个简单的单板计算机,并且正在尝试学习 6809 汇编语言。我有一些简单的事情正在运行,例如通过 6850 ACIA 进行 Echo。我正在尝试打印一个字符串并且被卡住了。
该字符串在 ROM 中并以空零终止。我加载 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