6551acia.asm
来自「6502bios,关于6502的sbc,有lcd,time,irq,模块」· 汇编 代码 · 共 48 行
ASM
48 行
; 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 + =
减小字号Ctrl + -
显示快捷键?