A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita
audio
rust
zig
deno
mpris
rockbox
mpd
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