Mercurial > public > hwos_code
view src/strings.asm @ 569:fea63a20c1c5
language updates
author | heinrichsweikamp |
---|---|
date | Fri, 09 Feb 2018 11:22:42 +0100 |
parents | b7eb98dbd800 |
children | ca4556fb60b9 |
line wrap: on
line source
;============================================================================= ; ; File strings.asm Version 2.92 = 2.26 ; ; 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 "hwos.inc" #include "varargs.inc" extern aa_wordprocessor basic CODE ;============================================================================= ; Variants that call word_processor at the end: global strcpy_block_print strcpy_block_print: lfsr FSR2, buffer global strcat_block_print strcat_block_print: clrf PRODL,A bra strings_common ; Variants that do not call word_processor at end: global strcpy_block strcpy_block: lfsr FSR2, buffer global strcat_block strcat_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_text strcpy_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_print strcpy_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_text strcat_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_print strcat_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_tblptr text_get_tblptr: extern text_1_base movlw UPPER(text_1_base) ; Complete 12bits to 24bits address. movwf TBLPTRU movlw HIGH(text_1_base) andlw 0xF0 iorwf FSR1H,W movwf TBLPTRH movff FSR1L,TBLPTRL movff opt_language,WREG ; Get lang bz text_get_lang1 ; 0 == English dcfsnz WREG ; 1 == German bra text_get_lang2 ; Other ??? Keep language 1 ; Read 2-byte pointer to string text_get_lang1: tblrd*+ movff TABLAT,WREG tblrd*+ movff WREG,TBLPTRL movff TABLAT,TBLPTRH return ; Add correction for German table: text_get_lang2: extern text_2_base movlw LOW(text_2_base) addwf TBLPTRL movlw HIGH(text_2_base) addwfc TBLPTRH movlw UPPER(text_2_base) addwfc TBLPTRU movlw LOW(text_1_base) subwf TBLPTRL movlw HIGH(text_1_base) subwfb TBLPTRH movlw UPPER(text_1_base) subwfb TBLPTRU bra text_get_lang1 ;============================================================================= ; 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_prom strcpy_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_prom strcat_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_print strcpy_prom_print: lfsr FSR2,buffer strcat_prom_print: rcall strcat_prom goto aa_wordprocessor ;============================================================================= global start_tiny_block start_tiny_block: clrf WREG bra start_common global start_small_block start_small_block: movlw 1 bra start_common global start_std_block start_std_block: movlw 2 bra start_common global start_medium_block start_medium_block: movlw 3 bra start_common global start_large_block start_large_block: movlw 4 ; bra start_common start_common: movff WREG, win_font ; Need a bank-safe move here ! VARARGS_BEGIN VARARGS_GET8 win_leftx2 VARARGS_GET8 win_top VARARGS_END lfsr FSR2,buffer ; point to buffer here return END