diff src/strings.asm @ 604:ca4556fb60b9

bump to 2.99beta, work on 3.00 stable
author heinrichsweikamp
date Thu, 22 Nov 2018 19:47:26 +0100
parents b7eb98dbd800
children c40025d8e750
line wrap: on
line diff
--- a/src/strings.asm	Thu Oct 11 21:06:29 2018 +0200
+++ b/src/strings.asm	Thu Nov 22 19:47:26 2018 +0100
@@ -1,217 +1,231 @@
 ;=============================================================================
 ;
-;   File strings.asm									Version 2.92 = 2.26
+;   File strings.asm													V2.99c
 ;
 ;   Implementation code various string functions.
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
 ;=============================================================================
 ; HISTORY
-;  2010-12-02 : [jDG] Creation...
+;  2010-12-02 : [jDG] Creation
 ;
 ; See strings.inc for doc and public calling macros.
 
 #include "hwos.inc"
 #include "varargs.inc"
 
-        extern  aa_wordprocessor
+	extern	aa_wordprocessor
+
+strings		CODE
 
-basic   CODE
 ;=============================================================================
-; Variants that call word_processor at the end:
-        global  strcpy_block_print
+; Variants that call word_processor at the end
+
+	global	strcpy_block_print
 strcpy_block_print:
-        lfsr    FSR2, buffer
-        global  strcat_block_print
+	lfsr	FSR2,buffer
+	global	strcat_block_print
 strcat_block_print:
-        clrf    PRODL,A
-        bra     strings_common
+	clrf	PRODL,A
+	bra		strings_common
+
 
-; Variants that do not call word_processor at end:
-        global  strcpy_block
+; Variants that do not call word_processor at end
+
+	global	strcpy_block
 strcpy_block:
-        lfsr    FSR2, buffer
-        global  strcat_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
+	setf	PRODL,A
+
+
+; Common part: append the string from PROM return address
 
-        rcall   strcat_prom
+strings_common:
+	VARARGS_BEGIN
+		rcall	strcat_prom
+		VARARGS_ALIGN
+	VARARGS_END
 
-        VARARGS_ALIGN
-        VARARGS_END
-		
-		btfsc   PRODL,0,A               ; Should we print afterward ?
-		return                          ; NO: then return straight away.
-		goto    aa_wordprocessor        ; ELSE: print it...
+	btfsc	PRODL,0,A				; ahall we print afterwards?
+	return							; NO  - then return straight away
+	goto	aa_wordprocessor        ; YES - print it...
 
 ;=============================================================================
-; Copy multi-lingual text from FSR1 12bit pointers, to buffer.
+; Copy multi-lingual text from FSR1 12 bit pointer 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
+; Input:   FSR1 = 12 bit pointer to multi-lingual text
+; Output:  FSR2 pointing to closing null byte in buffer
+; Trashed: TBLPTR, TABLAT
+
+	global	strcpy_text
 strcpy_text:
-        rcall   text_get_tblptr
-        bra     strcpy_prom
+	rcall	text_get_tblptr
+	bra		strcpy_prom
 
-; Copy then print multi-lingual text from FSR1 12bit pointers, to buffer.
+; Copy and print multi-lingual text from FSR1 12 bit pointer 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
+; Input:   FSR1 = 12 bit pointer to multi-lingual text
+; Output:  FSR2 pointing to closing null byte in buffer
+; Trashed: TBLPTR, TABLAT
+
+	global	strcpy_text_print
 strcpy_text_print:
-        rcall   text_get_tblptr
-        bra     strcpy_prom_print
+	rcall	text_get_tblptr
+	bra		strcpy_prom_print
 
-; Append multi-lingual text from FSR1 12bit pointers, to buffer at FRS2.
+; Append multi-lingual text from FSR1 12 bit 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
+; Input:  FSR1 = 12 bit pointer to multi-lingual text
+;         FSR2 = current position in buffer
+; Output: FSR2 pointing to closing null byte in buffer
+; Trashed: TBLPTR, TABLAT
+
+	global	strcat_text
 strcat_text:
-        rcall   text_get_tblptr
-        bra     strcat_prom
+	rcall	text_get_tblptr
+	bra		strcat_prom
 
-; Append then print multi-lingual text from FSR1 12bit pointers, to buffer at FRS2.
+; Append and print multi-lingual text from FSR1 12 bit 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
+; Input:   FSR1 = 12 bit pointer to multi-lingual text
+;          FSR2 = current position in buffer
+; Output:  FSR2 pointing to closing null byte in buffer
+; Trashed: TBLPTR, TABLAT
+
+	global	strcat_text_print
 strcat_text_print:
-        rcall   text_get_tblptr
-        bra     strcat_prom_print
+	rcall	text_get_tblptr
+	bra	strcat_prom_print
 
 ;=============================================================================
-; Get pointer to multilingual texl in TBLPTR
+; Get pointer to multilingual text in TBLPTR
 ;
-; Input:  FSR1 = 12bits of text handle.
-;         opt_language = current language.
-; Output: TBLPTR = 24bits of PROM address.
-;
-        global  text_get_tblptr
+; Input:  FSR1         = 12 bit text handle
+;         opt_language = current language
+; Output: TBLPTR       = 24 bit 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
-
+	extern	text_1_base
+	movlw	UPPER(text_1_base)		; complete 12 bit address to 24 bit 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
+ IF _language_2!=none
+	movff	opt_language,WREG		; get language selection
+	bz		text_get_lang1			; 0: language 1
+	dcfsnz	WREG
+	bra		text_get_lang2			; 1: language 2
+ ENDIF
 
-; Read 2-byte pointer to string
-text_get_lang1:
-        tblrd*+
-        movff   TABLAT,WREG
-        tblrd*+
-        movff   WREG,TBLPTRL
-        movff   TABLAT,TBLPTRH
-        return
+text_get_lang1:						; read 2-byte pointer to string
+	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
+ IF _language_2!=none
+text_get_lang2:						; add offset for second language
+	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
-        
+	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
+ ENDIF
+
 ;=============================================================================
-; Copy a null-terminated string from TBLPTR to buffer.
+; 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.
+; Input:  TBLPTR : string pointer into PROM
+; Output: string in buffer, FSR2 pointing to the closing null byte
 ;
-        global  strcpy_prom
+	global	strcpy_prom
 strcpy_prom:
-        lfsr    FSR2,buffer
+	lfsr	FSR2,buffer
+	;bra	strcat_prom
 
-; Append a null-terminated string from TBLPTR to 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.
+; Input:  TBLPTR : string pointer into PROM
+;         FRS2   : current character position
+; Output: string in buffer, FSR2 pointing to the closing null byte
 ;
-        global  strcat_prom
+	global	strcat_prom
 strcat_prom:
-        tblrd*+
-        movf    TABLAT,W
-        movwf   POSTINC2
-        bnz     strcat_prom
-        movf    POSTDEC2,W               ; rewind one char in string buffer.
-        return
+	tblrd*+
+	movf	TABLAT,W
+	movwf	POSTINC2
+	bnz		strcat_prom
+	movf	POSTDEC2,W				; step back one char
+	return
 
 ;=============================================================================
 ; Variant that calls word processor right-away...
-        global  strcpy_prom_print
-        global  strcat_prom_print
 
+	global	strcpy_prom_print
+	global	strcat_prom_print
 strcpy_prom_print:
-        lfsr    FSR2,buffer
+	lfsr	FSR2,buffer
 strcat_prom_print:
-        rcall   strcat_prom
-        goto    aa_wordprocessor
+	rcall	strcat_prom
+	goto	aa_wordprocessor
 
 ;=============================================================================
 
-        global      start_tiny_block
+	global	start_tiny_block
 start_tiny_block:
-        clrf        WREG
-        bra         start_common
+	clrf	WREG
+	movff	WREG, win_font			; needs a bank-safe move here !
+	bra		start_common
 
-        global      start_small_block
+	global	start_small_block
 start_small_block:
-        movlw       1
-        bra         start_common
+	movlw	1
+	movff	WREG, win_font			; needs a bank-safe move here !
+	bra		start_common
 
-        global      start_std_block
+	global	start_std_block
 start_std_block:
-        movlw       2
-        bra         start_common
+	movlw	2
+	movff	WREG, win_font			; needs a bank-safe move here !
+	bra		start_common
 
-        global      start_medium_block
+	global	start_medium_block
 start_medium_block:
-        movlw       3
-        bra         start_common
+	movlw	3
+	movff	WREG, win_font			; needs a bank-safe move here !
+	bra		start_common
 
-        global      start_large_block
+	global	start_large_block
 start_large_block:
-        movlw       4
-;        bra         start_common
+	movlw	4
+	movff	WREG, win_font			; needs a bank-safe move here !
+	;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
+	VARARGS_BEGIN
+		VARARGS_GET8	win_leftx2
+		VARARGS_GET8	win_top
+	VARARGS_END
+	lfsr	FSR2,buffer				; point to buffer
+	return
 
-        END
\ No newline at end of file
+	END
\ No newline at end of file