diff code_part1/OSTC_code_asm_part1/strings.inc @ 97:dc349e4264bb

Cleanup CF for bad 15bits value display Cleanup old printf prototype New strings macro
author JeanDo
date Sun, 12 Dec 2010 01:13:48 +0100
parents
children 6a94f96e9cea
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/strings.inc	Sun Dec 12 01:13:48 2010 +0100
@@ -0,0 +1,145 @@
+;=============================================================================
+;
+;    File strings.inc
+;
+;    Implementation code various string functions.
+;
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+;
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+;
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+;
+;    Copyright (c) 2010, JD Gascuel.
+;=============================================================================
+; HISTORY
+;  2010-12-02 : [jDG] Creation...
+;
+; RATIONALS for STRCAT / STRCPY / STRCAT_PRINT / STRCPY_PRINT:
+;  * Gain PROM space: each time a string operation is done, we have a bunch
+;    of lines in the style:
+;           movlw   '+'
+;           movwf   POSTINC2
+;           movlw   '/'
+;           movwf   POSTINC2
+;           movlw   '-'
+;           movwf   POSTINC2
+;           movlw   ':'
+;           movwf   POSTINC2
+;           call    word_processor
+;    which takes 20 bytes of PROM space (eg. 4 + chars/4). Whereas :
+;           STRCAT_PRINT  "+/-:"
+;    takes just 10 bytes (4 + chars + 1, even rounded up).
+;
+;    Note that the other common sequence :
+;           OUTPUTTEXT  .113
+;    does compile in (6 bytes per call), plus (1 + chars, even rouded up)
+;    once it the whole code. Also, it is slower to execute, because it have
+;    to roll through the string table.
+;
+; RATIONALS for a formating variant... not yet done... 
+;  * Embeding formatting commands into the string allows even mode compact
+;    sequence.
+;    Possible commandes:
+;           \xF0    output_8            ; arg in hi, and move lo to hi,
+;           \xF1    output_9            ; so we can have two 8bits concertion
+;           \xF2    output_99           ; in a single sequence...
+;           \xF3    output_99x
+;           \xF4    output_16           ; arg in hi:lo
+;           \xF5    output_16dp 1
+;           \xF6    output_16dp 2
+;           \xF7    output_16dp 3
+;           ....
+;    Usage:
+;           movff       apnoe_min, hi
+;           movff       apnoe_sec, lo
+;           FORMAT_PRINT "Time: \xF3:\xF3"
+;
+;  * Cons: code redeability is poor: reader have to remember exactly what
+;    each cryptic hexa code is doing...
+;    No-macro-syntax:
+;           call    format_print_block
+;           DB  "Time: ", FORMAT_99x, ':', FORMAT_99x, 0
+;    is denitively more secure in that respect...
+
+;=============================================================================
+; Copy a short embebed string at start of the string buffer (letter)
+; Input:    (nothing)
+; Output:   chars are copied into letter, starting at the beginning.
+;           FSR2 point to the first unused char (the NULL termination).
+;           
+; Trashed:  WREG, TBLPTR, TABLAT, PRODL
+; Note:     This are all bank-safe call.
+;
+STRCPY  macro   string
+        call    strcpy_block
+        DB  string, 0
+        endm
+
+;=============================================================================
+; A variant of STRCPY that appends chars to the current FSR2 pointer.
+; Input/Output/Trashed : see STRCPY.
+STRCAT  macro   string
+        call    strcat_block
+        DB  string, 0
+        endm
+
+;=============================================================================
+; A variant of STRCPY that send the string to the word processor afterwards.
+; Input/Output: see STRCPY.
+; Trashed: See STRCPY + word_processor. In particular, switch RAM to Bank1 
+;
+STRCPY_PRINT    macro string
+        call    strcpy_block_print
+        DB  string, 0
+        endm
+
+; Trashed: See STRCPY + word_processor. In particular, switch RAM to Bank1 
+STRCAT_PRINT    macro string
+        call    strcat_block_print
+        DB  string, 0
+        endm
+
+;=============================================================================
+; A shortcut for the macros WIN_TOP + WIN_LEFT + WIN_FONT + WIN_INVERT.
+; The idea is to replace a 4x6=24 bytes sequence by a more compact 6bytes one.
+;
+; Trashed: TBLPTR, TABLAT, WREG.
+; Note:    This are all bank-safe call.
+
+WIN_SMALL macro x, y
+        call    start_small_block
+        DB      x, y
+        endm
+
+WIN_SMALL_INVERT macro x, y
+        call    start_small_invert_block
+        DB      x, y
+        endm
+
+WIN_MEDIUM   macro   x, y
+        call    start_medium_block
+        DB      x, y
+        endm
+
+WIN_MEDIUM_INVERT   macro   x, y
+        call    start_medium_invert_block
+        DB      x, y
+        endm
+
+WIN_LARGE   macro   x, y
+        call    start_large_block
+        DB      x, y
+        endm
+
+WIN_LARGE_INVERT   macro   x, y
+        call    start_large_invert_block
+        DB      x, y
+        endm