Mercurial > public > mk2
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 96:25433449bcb5 | 97:dc349e4264bb |
|---|---|
| 1 ;============================================================================= | |
| 2 ; | |
| 3 ; File strings.inc | |
| 4 ; | |
| 5 ; Implementation code various string functions. | |
| 6 ; | |
| 7 ; This program is free software: you can redistribute it and/or modify | |
| 8 ; it under the terms of the GNU General Public License as published by | |
| 9 ; the Free Software Foundation, either version 3 of the License, or | |
| 10 ; (at your option) any later version. | |
| 11 ; | |
| 12 ; This program is distributed in the hope that it will be useful, | |
| 13 ; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 15 ; GNU General Public License for more details. | |
| 16 ; | |
| 17 ; You should have received a copy of the GNU General Public License | |
| 18 ; along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 19 ; | |
| 20 ; Copyright (c) 2010, JD Gascuel. | |
| 21 ;============================================================================= | |
| 22 ; HISTORY | |
| 23 ; 2010-12-02 : [jDG] Creation... | |
| 24 ; | |
| 25 ; RATIONALS for STRCAT / STRCPY / STRCAT_PRINT / STRCPY_PRINT: | |
| 26 ; * Gain PROM space: each time a string operation is done, we have a bunch | |
| 27 ; of lines in the style: | |
| 28 ; movlw '+' | |
| 29 ; movwf POSTINC2 | |
| 30 ; movlw '/' | |
| 31 ; movwf POSTINC2 | |
| 32 ; movlw '-' | |
| 33 ; movwf POSTINC2 | |
| 34 ; movlw ':' | |
| 35 ; movwf POSTINC2 | |
| 36 ; call word_processor | |
| 37 ; which takes 20 bytes of PROM space (eg. 4 + chars/4). Whereas : | |
| 38 ; STRCAT_PRINT "+/-:" | |
| 39 ; takes just 10 bytes (4 + chars + 1, even rounded up). | |
| 40 ; | |
| 41 ; Note that the other common sequence : | |
| 42 ; OUTPUTTEXT .113 | |
| 43 ; does compile in (6 bytes per call), plus (1 + chars, even rouded up) | |
| 44 ; once it the whole code. Also, it is slower to execute, because it have | |
| 45 ; to roll through the string table. | |
| 46 ; | |
| 47 ; RATIONALS for a formating variant... not yet done... | |
| 48 ; * Embeding formatting commands into the string allows even mode compact | |
| 49 ; sequence. | |
| 50 ; Possible commandes: | |
| 51 ; \xF0 output_8 ; arg in hi, and move lo to hi, | |
| 52 ; \xF1 output_9 ; so we can have two 8bits concertion | |
| 53 ; \xF2 output_99 ; in a single sequence... | |
| 54 ; \xF3 output_99x | |
| 55 ; \xF4 output_16 ; arg in hi:lo | |
| 56 ; \xF5 output_16dp 1 | |
| 57 ; \xF6 output_16dp 2 | |
| 58 ; \xF7 output_16dp 3 | |
| 59 ; .... | |
| 60 ; Usage: | |
| 61 ; movff apnoe_min, hi | |
| 62 ; movff apnoe_sec, lo | |
| 63 ; FORMAT_PRINT "Time: \xF3:\xF3" | |
| 64 ; | |
| 65 ; * Cons: code redeability is poor: reader have to remember exactly what | |
| 66 ; each cryptic hexa code is doing... | |
| 67 ; No-macro-syntax: | |
| 68 ; call format_print_block | |
| 69 ; DB "Time: ", FORMAT_99x, ':', FORMAT_99x, 0 | |
| 70 ; is denitively more secure in that respect... | |
| 71 | |
| 72 ;============================================================================= | |
| 73 ; Copy a short embebed string at start of the string buffer (letter) | |
| 74 ; Input: (nothing) | |
| 75 ; Output: chars are copied into letter, starting at the beginning. | |
| 76 ; FSR2 point to the first unused char (the NULL termination). | |
| 77 ; | |
| 78 ; Trashed: WREG, TBLPTR, TABLAT, PRODL | |
| 79 ; Note: This are all bank-safe call. | |
| 80 ; | |
| 81 STRCPY macro string | |
| 82 call strcpy_block | |
| 83 DB string, 0 | |
| 84 endm | |
| 85 | |
| 86 ;============================================================================= | |
| 87 ; A variant of STRCPY that appends chars to the current FSR2 pointer. | |
| 88 ; Input/Output/Trashed : see STRCPY. | |
| 89 STRCAT macro string | |
| 90 call strcat_block | |
| 91 DB string, 0 | |
| 92 endm | |
| 93 | |
| 94 ;============================================================================= | |
| 95 ; A variant of STRCPY that send the string to the word processor afterwards. | |
| 96 ; Input/Output: see STRCPY. | |
| 97 ; Trashed: See STRCPY + word_processor. In particular, switch RAM to Bank1 | |
| 98 ; | |
| 99 STRCPY_PRINT macro string | |
| 100 call strcpy_block_print | |
| 101 DB string, 0 | |
| 102 endm | |
| 103 | |
| 104 ; Trashed: See STRCPY + word_processor. In particular, switch RAM to Bank1 | |
| 105 STRCAT_PRINT macro string | |
| 106 call strcat_block_print | |
| 107 DB string, 0 | |
| 108 endm | |
| 109 | |
| 110 ;============================================================================= | |
| 111 ; A shortcut for the macros WIN_TOP + WIN_LEFT + WIN_FONT + WIN_INVERT. | |
| 112 ; The idea is to replace a 4x6=24 bytes sequence by a more compact 6bytes one. | |
| 113 ; | |
| 114 ; Trashed: TBLPTR, TABLAT, WREG. | |
| 115 ; Note: This are all bank-safe call. | |
| 116 | |
| 117 WIN_SMALL macro x, y | |
| 118 call start_small_block | |
| 119 DB x, y | |
| 120 endm | |
| 121 | |
| 122 WIN_SMALL_INVERT macro x, y | |
| 123 call start_small_invert_block | |
| 124 DB x, y | |
| 125 endm | |
| 126 | |
| 127 WIN_MEDIUM macro x, y | |
| 128 call start_medium_block | |
| 129 DB x, y | |
| 130 endm | |
| 131 | |
| 132 WIN_MEDIUM_INVERT macro x, y | |
| 133 call start_medium_invert_block | |
| 134 DB x, y | |
| 135 endm | |
| 136 | |
| 137 WIN_LARGE macro x, y | |
| 138 call start_large_block | |
| 139 DB x, y | |
| 140 endm | |
| 141 | |
| 142 WIN_LARGE_INVERT macro x, y | |
| 143 call start_large_invert_block | |
| 144 DB x, y | |
| 145 endm |
