;=============================================================================;; File strings.asm;; Implementation code various string functions.;; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.;=============================================================================; HISTORY; 2010-12-02 : [jDG] Creation...;; See strings.inc for doc and public calling macros.#include "ostc3.inc"#include "varargs.inc" extern aa_wordprocessorbasic CODE;=============================================================================; Variants that call word_processor at the end: global strcpy_block_printstrcpy_block_print: lfsr FSR2, buffer global strcat_block_printstrcat_block_print: clrf PRODL,A bra strings_common; Variants that do not call word_processor at end: global strcpy_blockstrcpy_block: lfsr FSR2, buffer global strcat_blockstrcat_block: setf PRODL,A; Common part: append the string from PROM return address:strings_common: VARARGS_BEGIN rcall strcat_prom VARARGS_ALIGN VARARGS_END btfsc PRODL,0,A ; Should we print afterward ? return ; NO: then return straight away. goto aa_wordprocessor ; ELSE: print it...;=============================================================================; Copy multi-lingual text from FSR1 12bit pointers, to buffer.;; Input: FSR1 = 12bit pointer to multi-lingual text.; Output: FSR2 points to closing null byte in buffer.; Trashed: TBLPTR, TABLAT. global strcpy_textstrcpy_text: rcall text_get_tblptr bra strcpy_prom; Copy then print multi-lingual text from FSR1 12bit pointers, to buffer.;; Input: FSR1 = 12bit pointer to multi-lingual text.; Output: FSR2 points to closing null byte in buffer.; Trashed: TBLPTR, TABLAT. global strcpy_text_printstrcpy_text_print: rcall text_get_tblptr bra strcpy_prom_print; Append multi-lingual text from FSR1 12bit pointers, to buffer at FRS2.;; Input: FSR1 = 12bit pointer to multi-lingual text.; FSR2 = Current position in buffer.; Output: FSR2 points to closing null byte in buffer.; Trashed: TBLPTR, TABLAT. global strcat_textstrcat_text: rcall text_get_tblptr bra strcat_prom; Append then print multi-lingual text from FSR1 12bit pointers, to buffer at FRS2.;; Input: FSR1 = 12bit pointer to multi-lingual text.; FSR2 = Current position in buffer.; Output: FSR2 points to closing null byte in buffer.; Trashed: TBLPTR, TABLAT. global strcat_text_printstrcat_text_print: rcall text_get_tblptr bra strcat_prom_print;=============================================================================; Get pointer to multilingual texl in TBLPTR;; Input: FSR1 = 12bits of text handle.; opt_language = current language.; Output: TBLPTR = 24bits of PROM address.; global text_get_tblptrtext_get_tblptr: extern text_english_base movlw UPPER(text_english_base); Complete 12bits to 24bits address. movwf TBLPTRU movlw HIGH(text_english_base) andlw 0xF0 iorwf FSR1H,W movwf TBLPTRH movff FSR1L,TBLPTRL movff opt_language,WREG ; Get lang bz text_get_english ; 0 == English dcfsnz WREG ; 1 == German bra text_get_german dcfsnz WREG ; 2 == French bra text_get_french dcfsnz WREG ; 3 == Italian bra text_get_italian; Other ??? Keep english...; Read 2-byte pointer to stringtext_get_english: tblrd*+ movff TABLAT,WREG tblrd*+ movff WREG,TBLPTRL movff TABLAT,TBLPTRH return; Add correction for German table:text_get_german: extern text_german_base movlw LOW(text_german_base) addwf TBLPTRL movlw HIGH(text_german_base) addwfc TBLPTRH movlw UPPER(text_german_base) addwfc TBLPTRU movlw LOW(text_english_base) subwf TBLPTRL movlw HIGH(text_english_base) subwfb TBLPTRH movlw UPPER(text_english_base) subwfb TBLPTRU bra text_get_english ; Add correction for French table:text_get_french: extern text_french_base movlw LOW(text_french_base) addwf TBLPTRL movlw HIGH(text_french_base) addwfc TBLPTRH movlw UPPER(text_french_base) addwfc TBLPTRU movlw LOW(text_english_base) subwf TBLPTRL movlw HIGH(text_english_base) subwfb TBLPTRH movlw UPPER(text_english_base) subwfb TBLPTRU bra text_get_english ; Add correction for Spanish table:text_get_italian: extern text_italian_base movlw LOW(text_italian_base) addwf TBLPTRL movlw HIGH(text_italian_base) addwfc TBLPTRH movlw UPPER(text_italian_base) addwfc TBLPTRU movlw LOW(text_english_base) subwf TBLPTRL movlw HIGH(text_english_base) subwfb TBLPTRH movlw UPPER(text_english_base) subwfb TBLPTRU bra text_get_english;=============================================================================; Copy a null-terminated string from TBLPTR to buffer.;; Input: TBLPTR : string pointer into PROM.; Output: string in buffer, FSR2 pointer on the closing null byte.; global strcpy_promstrcpy_prom: lfsr FSR2,buffer; Append a null-terminated string from TBLPTR to buffer.;; Input: TBLPTR : string pointer into PROM.; FRS2 : current character position.; Output: string in buffer, FSR2 pointer on the closing null byte.; global strcat_promstrcat_prom: tblrd*+ movf TABLAT,W movwf POSTINC2 bnz strcat_prom movf POSTDEC2,W ; rewind one char in string buffer. return;=============================================================================; Variant that calls word processor right-away... global strcpy_prom_print global strcat_prom_printstrcpy_prom_print: lfsr FSR2,bufferstrcat_prom_print: rcall strcat_prom goto aa_wordprocessor;============================================================================= global start_tiny_blockstart_tiny_block: clrf WREG movff WREG, win_font ; Need a bank-safe move here ! movff WREG, win_invert bra start_common global start_tiny_invert_blockstart_tiny_invert_block: clrf WREG movff WREG, win_font ; Need a bank-safe move here ! movlw 1 movff WREG, win_invert bra start_common global start_small_blockstart_small_block: movlw 1 movff WREG, win_font ; Need a bank-safe move here ! clrf WREG movff WREG, win_invert bra start_common global start_small_invert_blockstart_small_invert_block: movlw 1 movff WREG, win_font ; Need a bank-safe move here ! movff WREG, win_invert bra start_common global start_std_blockstart_std_block: movlw 2 movff WREG, win_font ; Need a bank-safe move here ! clrf WREG movff WREG, win_invert bra start_common global start_std_invert_blockstart_std_invert_block: movlw 2 movff WREG, win_font ; Need a bank-safe move here ! movlw 1 movff WREG, win_invert bra start_common global start_medium_blockstart_medium_block: movlw 3 movff WREG, win_font ; Need a bank-safe move here ! clrf WREG movff WREG, win_invert bra start_common global start_medium_invert_blockstart_medium_invert_block: movlw 3 movff WREG, win_font ; Need a bank-safe move here ! movlw 1 movff WREG, win_invert bra start_common global start_large_blockstart_large_block: movlw 4 movff WREG, win_font ; Need a bank-safe move here ! clrf WREG movff WREG, win_invert bra start_common global start_large_invert_blockstart_large_invert_block: movlw 4 movff WREG, win_font ; Need a bank-safe move here ! movlw 1 movff WREG, win_invert bra start_commonstart_common: VARARGS_BEGIN VARARGS_GET8 win_leftx2 VARARGS_GET8 win_top VARARGS_END lfsr FSR2,buffer ; point to buffer here return END