📄 6551acia.asm
字号:
; 6551 ACIA support
; Chris Ward, 15/1/2000
_ACIA ;remember start address for code
; ACIA registers
ORG ACIA
ATXD .ds 1 ;transmit data register (write)
ARXD EQU ATXD ;receive data register (read)
ARES .ds 1 ;programmed reset (write)
ASTS EQU ARES ;status register (read)
ACMD .ds 1 ;command register (r/w)
ACTL .ds 1 ;control register (r/w)
ORG _ACIA
; *** AINIT: ACIA initialisation
; X,Y preserved
AINIT STA ARES ;reset
LDA #$09 ;set options
STA ACMD
LDA #$1E ;8-N-1, 9600 baud
STA ACTL
LDA #0
STA SERRXF ;clear 'byte received' flag
RTS
; *** TXBYTE: Transmit byte
; input: A = byte to transmit
; A,X,Y preserved
TXBYTE PHA
TXBYT1 LDA ASTS
AND #$10 ;trasmit register empty?
BEQ TXBYT1 ;no, try again
PLA
STA ATXD ;send byte
RTS
; *** RXBYTE: Waits until a byte has been received, and returns it
; (the byte is actually received by the interrupt handler)
; output: A = received byte
; X,Y preserved
RXBYTE LDA SERRXF ;check received byte flag
BEQ RXBYTE ;wait...
DEC SERRXF ;reset flag
LDA SERRX ;get byte
RTS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -