aboutsummaryrefslogtreecommitdiff
path: root/console.s
diff options
context:
space:
mode:
authorB. Watson <yalhcru@gmail.com>2016-02-04 17:33:17 -0500
committerB. Watson <yalhcru@gmail.com>2016-02-04 17:33:17 -0500
commit3ccfe725cfd1672e04dcf5caa555ceaaf3f27159 (patch)
treebbe8c3e4651d0994f57d0cb48e30cfc196e0fc54 /console.s
parent00d78b9f401ec6f1ba0a1c900e382ec323058337 (diff)
downloadtaipan-3ccfe725cfd1672e04dcf5caa555ceaaf3f27159.tar.gz
rewrite cspace() in asm, save a few more bytes
Diffstat (limited to 'console.s')
-rw-r--r--console.s75
1 files changed, 75 insertions, 0 deletions
diff --git a/console.s b/console.s
new file mode 100644
index 0000000..2bbdb04
--- /dev/null
+++ b/console.s
@@ -0,0 +1,75 @@
+
+
+ .include "atari.inc"
+ .export _clrtobot, _clrtoeol, _clrtoline, _cspaces
+
+ .import mul40 ; from cc65's runtime
+ .importzp tmp3 ; ditto
+ .import bump_destptr ; these two are
+ .importzp destptr ; from draw_lorcha.s
+ .import _cspace
+
+; void clrtobot(void);
+; void clrtoeol(void);
+; void clrtoline(unsigned char line);
+
+; this stuff doesn't disturb conio's (and the OS's) idea of the
+; current cursor position. It's *way* faster than writing them in
+; C in terms of cclear() (which uses one cputc() call per blank).
+
+_clrtobot: ; same as clrtoline(24);
+ lda #24
+ bne _clrtoline
+
+_clrtoeol:
+ lda ROWCRS
+ ; fall through to _clrtoline
+
+_clrtoline:
+ sta tmp3 ; stash our arg
+ lda #0
+ sta OLDCHR ; stop conio from redrawing stuff after we clear it
+
+ ; setup destptr to start of current line, NOT
+ ; current cursor position.
+ lda ROWCRS
+ jsr mul40 ; AX = A*40 (addr of start-of-row)
+ clc
+ adc SAVMSC ; add to screen pointer
+ sta destptr
+ txa
+ adc SAVMSC+1
+ sta destptr+1
+
+ ; X = current row, Y = current column. Stop clearing a line when Y == 40,
+ ; we're done when X == 24. Apologies, the names X and Y are backwards
+ ; compared to proper Cartesian coordinates.
+ ldx ROWCRS
+ ldy COLCRS
+ lda #0
+
+clrloop:
+ sta (destptr),y ; blank a character (A == 0, screen code for a space)
+ iny
+ cpy #40
+ bne clrloop
+ ldy #0
+ inx
+ cpx tmp3
+ bcs done
+
+ jsr bump_destptr
+ lda #0
+ tay
+ beq clrloop
+
+done:
+ rts
+
+_cspaces:
+ sta tmp3
+@lp:
+ jsr _cspace
+ dec tmp3
+ bne @lp
+ rts