; *************************************************************************** ; copyright : (C) 2025 by Martin Preuss ; email : martin@libchipcard.de ; ; *************************************************************************** ; * This file is part of the project "AqHome". * ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** ; *************************************************************************** ; code .cseg ; --------------------------------------------------------------------------- ; @routine font6x8MonoHandlerFn ; ; Handler for 6x8 Mono Fonts ; font6x8MonoHandlerFn: cpi r23, FONT_FN_RENDER breq font6x8MonoRenderCharacter rjmp FONT_GenericHandler ; @end ; --------------------------------------------------------------------------- ; @routine font6x8RenderCharacter ; @param R16 character to write ; @param R1:R0 background color ; @param R3:R2 foreground color ; @param Z pointer to font ; @param X pointer to RAM to store data to ; @param r18 char width in pixel ; @param r19 char height in pixel ; @clobbers r16, r17, r24, r25, x font6x8MonoRenderCharacter: push zl push zh adiw zh:zl, FONT_OFFS_WIDTH lpm r18, Z+ ; char width in pixels lpm r19, Z ; char height in pixels sbiw zh:zl, FONT_OFFS_WIDTH+1 rcall font6x8GetCharPosInFont ; (r16, r17, r24, r25, z) mov r25, r19 ; height in pixels font6x8MonoRenderCharacter_loop1: mov r24, r18 ; width in pixels lpm r17, Z+ font6x8MonoRenderCharacter_loop2: lsr r17 brcs font6x8MonoRenderCharacter_writeForeground st X+, r0 st X+, r1 rjmp font6x8MonoRenderCharacter_loop2end font6x8MonoRenderCharacter_writeForeground: st X+, r2 st X+, r3 font6x8MonoRenderCharacter_loop2end: dec r24 brne font6x8MonoRenderCharacter_loop2 dec r25 brne font6x8MonoRenderCharacter_loop1 pop zh pop zl ret ; @end ; --------------------------------------------------------------------------- ; @routine font6x8GetCharPosInFont (same as font8x8GetCharPosInFont!) ; @param R16 character to write ; @param Z pointer to font ; @return Z pointer to begin of char data ; @clobbers r16, r17, r24, r25, z font6x8GetCharPosInFont: mov r24, r16 adiw zh:zl, FONT_OFFS_FIRSTCHAR lpm r24, Z+ ; first char num lpm r25, Z+ ; num of chars sub r16, r24 brcs font6x8GetCharPosInFont_ret cp r16, r25 brcc font6x8GetCharPosInFont_ret mov r24, r16 clr r25 lsl r24 ; x2 rol r25 lsl r24 ; x4 rol r25 lsl r24 ; x8 rol r25 add zl, r24 adc zh, r25 font6x8GetCharPosInFont_ret: ret ; @end