diff options
| -rw-r--r-- | src/main.c | 4 | ||||
| -rw-r--r-- | src/txbuf.s | 29 |
2 files changed, 29 insertions, 4 deletions
@@ -29,10 +29,6 @@ char reconnect_timeout = 1; extern void ih(); // defined in intr.s -void txbuf_append_chr(char c) { - tx_buf[txbuflen++] = c; -} - void txbuf_init(void) { txbuflen = tx_buf[0] = 0; } 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 |
