A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 129 lines 4.2 kB view raw
1/*************************************************************************** 2 * __________ __ ___. 3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___ 4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 7 * \/ \/ \/ \/ \/ 8 * $Id$ 9 * 10 * Copyright (c) 2006 Dave Chapman 11 * 12 * This program is free software; you can redistribute it and/or 13 * modify it under the terms of the GNU General Public License 14 * as published by the Free Software Foundation; either version 2 15 * of the License, or (at your option) any later version. 16 * 17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 18 * KIND, either express or implied. 19 * 20 ****************************************************************************/ 21 22#include "config.h" 23#include "pacbox.h" 24 25.syntax unified 26 27 .section .icode,"ax",%progbits 28 .global blit_display 29 30/* void blit_display(fb_data* lcd_framebuffer, unsigned char* vbuf) 31 32 next_dst=&lcd_framebuffer[YOFS*LCD_WIDTH+XOFS+ScreenHeight-1]; 33 for( y=ScreenHeight; y>0; y-- ) { 34 dst = (next_dst--); 35 for( x=ScreenWidth; x>0; x-- ) { 36 *dst = palette[*(vbuf++)]; 37 dst+=LCD_WIDTH; 38 } 39 } 40 */ 41 42#ifdef HAVE_LCD_COLOR 43#if (LCD_WIDTH >= 288) && (LCD_HEIGHT >= 224) 44 45blit_display: 46 stmdb sp!, {r4-r11, lr} 47 48 add r3, r0, #5696 49 add r3, r3, #24 @ 5720 = (2*(YOFS*LCD_WIDTH+XOFS+ScreenHeight-4)) 50 ldr r0, =palette 51 mov lr, #288 @ y = 288 52 53loop_y: mov r2, r3 @ r2 = next_dst 54 sub r3, r3, #8 @ next_dst-=4 55 56 mov ip, #224 @ x = 224 57 58/* store 2 input bytes from the next four lines in r7-r10 */ 59loop_x: 60 ldrh r8, [r1, #224] @ r8 = vbuf[224] 61 ldrh r7, [r1] @ r7 = vbuf[0] 62 add r1, r1, #448 63 ldrh r10, [r1, #224] @ r10 = vbuf[224*3] 64 ldrh r9, [r1], #2 @ r9 = vbuf[224*2] ; vbuf += 2; 65 sub r1, r1, #448 66 67 68/* Convert high bytes of r7-r10 into palette entries in r5 and r6 */ 69 mov r6, r7, lsr #8 70 mov r6, r6, lsl #1 71 ldrh r6, [r6, r0] @ r6 = palette[hi(r7]] 72 73 mov r11, r8, lsr #8 74 mov r11, r11, lsl #1 75 ldrh r11, [r11, r0] @ r11 = palette[hi(r8]] 76 77 orr r6, r11, r6, lsl #16 @ r6 = palette[hi(r8]] 78 @ | (palette[hi(r7)] << 16) 79 80 mov r5, r9, lsr #8 81 mov r5, r5, lsl #1 82 ldrh r5, [r5, r0] @ r5 = palette[hi(r9]] 83 84 mov r11, r10, lsr #8 85 mov r11, r11, lsl #1 86 ldrh r11, [r11, r0] @ r11 = palette[hi(r10)]] 87 88 orr r5, r11, r5, lsl #16 @ r5 = palette[hi(r10]] 89 @ | (palette[hi(r9)] << 16) 90 91/* Convert low bytes of r7-r10 into palette entries in r7 and r8 */ 92 and r7, r7, #0xff 93 mov r7, r7, lsl #1 94 ldrh r7, [r7, r0] 95 96 and r8, r8, #0xff 97 mov r8, r8, lsl #1 98 ldrh r8, [r8, r0] 99 100 orr r8, r8, r7, lsl #16 101 102 and r9, r9, #0xff 103 mov r9, r9, lsl #1 104 ldrh r9, [r9, r0] 105 106 and r10, r10, #0xff 107 mov r10, r10, lsl #1 108 ldrh r10, [r10, r0] 109 110 orr r7, r10, r9, lsl #16 111 112/* Now write the 8 pixels to the screen */ 113 stmia r2!, {r7, r8} 114 add r2, r2, #(LCD_WIDTH*2)-8 @ dst += LCD_WIDTH 115 116 stmia r2!, {r5, r6} 117 add r2, r2, #(LCD_WIDTH*2)-8 @ dst += LCD_WIDTH 118 119/* end of x loop */ 120 subs ip, ip, #2 @ x-=2 121 bne loop_x 122 123/* end of y loop */ 124 add r1, r1, #224*3 @ vbuf += 224*3 125 subs lr, lr, #4 @ y-=4 126 ldmpc cond=eq, regs=r4-r11 127 b loop_y 128#endif 129#endif