aboutsummaryrefslogtreecommitdiff
path: root/src/txbuf.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/txbuf.s')
-rw-r--r--src/txbuf.s29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/txbuf.s b/src/txbuf.s
new file mode 100644
index 0000000..4783660
--- /dev/null
+++ b/src/txbuf.s
@@ -0,0 +1,29 @@
+;; void txbuf_append_chr(char c) {
+;; tx_buf[txbuflen++] = c;
+;; }
+
+; compiles to 45 bytes. routine below is 29 bytes (~33% smaller)
+
+ tx_buf = $a200 ; MUST agree with src/rxtxbuf.h!
+
+ .import _txbuflen
+ .export _txbuf_append_chr
+ .importzp sreg ; avoid ptr1 & friends, callers may use
+
+_txbuf_append_chr:
+ tax
+ lda #<tx_buf
+ clc
+ adc _txbuflen
+ sta sreg
+ lda #>tx_buf
+ adc _txbuflen+1
+ sta sreg+1
+ ldy #0
+ txa
+ sta (sreg),y
+ inc _txbuflen
+ bne @ret
+ inc _txbuflen+1
+@ret:
+ rts