diff options
author | B. Watson <yalhcru@gmail.com> | 2016-02-04 17:33:17 -0500 |
---|---|---|
committer | B. Watson <yalhcru@gmail.com> | 2016-02-04 17:33:17 -0500 |
commit | 3ccfe725cfd1672e04dcf5caa555ceaaf3f27159 (patch) | |
tree | bbe8c3e4651d0994f57d0cb48e30cfc196e0fc54 /console.s | |
parent | 00d78b9f401ec6f1ba0a1c900e382ec323058337 (diff) | |
download | taipan-3ccfe725cfd1672e04dcf5caa555ceaaf3f27159.tar.gz |
rewrite cspace() in asm, save a few more bytes
Diffstat (limited to 'console.s')
-rw-r--r-- | console.s | 75 |
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 |