font.inc
changeset 38 f430b507a885
child 39 d7eac199d323
equal deleted inserted replaced
37:df0bdaf0eb08 38:f430b507a885
       
     1 ;; Basic LED matrix fonts
       
     2 ;; vim: set ft=avr:
       
     3 
       
     4 .cseg
       
     5 
       
     6 ;; Font definition
       
     7 ; Defines FONT_8x6 symbol
       
     8 .include "font.def"
       
     9 
       
    10 ; Font to use
       
    11 .set FONT_TABLE     = FONT_8x6
       
    12 .set FONT_START     = FONT_8x6_START
       
    13 .set FONT_END       = FONT_8x6_END
       
    14 .set FONT_COLS      = FONT_8x6_COLS
       
    15 .set FONT_ROWS      = FONT_8x6_ROWS     ; XXX: fixed to 8
       
    16 
       
    17 ;; Render the given ASCII char into the given buffer
       
    18 ; Input:    r16 - ASCII char code
       
    19 ;           Y   - dest buf (Wx8 column data)
       
    20 Font_Render:
       
    21     ; Test char index
       
    22 
       
    23         ; test under-range
       
    24         ldi     r17, FONT_START
       
    25         cp      r16, r17
       
    26         brlt    f_render_invalid
       
    27 
       
    28         ; test over-range
       
    29         ldi     r17, FONT_END
       
    30         cp      r17, r16
       
    31         brlt    f_render_invalid
       
    32 
       
    33     ; Locate font char
       
    34         ; compute offset in chars (r16)
       
    35         subi    r16, FONT_START
       
    36 
       
    37         ; compute offset in bytes (r1:r0)
       
    38         ldi     r17, FONT_COLS
       
    39         mul     r16, r17
       
    40 
       
    41         ; font table start offset from words
       
    42         ldi     ZL, low(FONT_TABLE * 2)
       
    43         ldi     ZH, high(FONT_TABLE * 2)
       
    44 
       
    45         ; apply offset
       
    46         add     ZL, r0
       
    47         adc     ZH, r1
       
    48 
       
    49     ; Copy column pixel data
       
    50         ; count columns
       
    51         ldi     r16, FONT_COLS
       
    52 f_render_cpy:
       
    53         
       
    54         ; copy via r17
       
    55         lpm     r17, Z+
       
    56         st      Y+, r17
       
    57 
       
    58         dec     r16
       
    59         brne    f_render_cpy
       
    60 
       
    61 f_render_invalid:
       
    62 
       
    63     ; Done
       
    64         ret
       
    65