summaryrefslogtreecommitdiff
path: root/firmware/target/coldfire/iaudio/m5/lcd-as-m5.S
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/coldfire/iaudio/m5/lcd-as-m5.S')
-rw-r--r--firmware/target/coldfire/iaudio/m5/lcd-as-m5.S83
1 files changed, 83 insertions, 0 deletions
diff --git a/firmware/target/coldfire/iaudio/m5/lcd-as-m5.S b/firmware/target/coldfire/iaudio/m5/lcd-as-m5.S
new file mode 100644
index 0000000000..c973dc2c40
--- /dev/null
+++ b/firmware/target/coldfire/iaudio/m5/lcd-as-m5.S
@@ -0,0 +1,83 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2007 by Jens Arnold
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#include "config.h"
21#include "cpu.h"
22
23 .section .icode,"ax",@progbits
24
25 .align 2
26 .global lcd_write_command
27 .type lcd_write_command,@function
28
29lcd_write_command:
30 move.l (4, %sp), %d0
31 move.w %d0, 0xf0008000
32 rts
33.wc_end:
34 .size lcd_write_command,.wc_end-lcd_write_command
35
36
37 .align 2
38 .global lcd_write_command_ex
39 .type lcd_write_command_ex,@function
40
41lcd_write_command_ex:
42 lea.l 0xf0008000, %a0
43
44 move.l (4, %sp), %d0 /* Command */
45 move.w %d0, (%a0)+ /* Write to LCD, set A0 = 1 */
46
47 move.l (8, %sp), %d0 /* Data */
48 cmp.l #-1, %d0 /* -1? */
49 beq.b .last
50 move.w %d0, (%a0) /* Write to LCD */
51
52 move.l (12, %sp), %d0 /* Data */
53 cmp.l #-1, %d0 /* -1? */
54 beq.b .last
55 move.w %d0, (%a0) /* Write to LCD */
56
57.last:
58 rts
59.wcex_end:
60 .size lcd_write_command_ex,.wcex_end-lcd_write_command_ex
61
62
63 .align 2
64 .global lcd_write_data
65 .type lcd_write_data,@function
66
67lcd_write_data:
68 move.l (4,%sp), %a0 /* Data pointer */
69 move.l (8,%sp), %d0 /* Length */
70
71 lea 0xf0008002, %a1
72.loop:
73 /* When running in IRAM, this loop takes 7 cycles plus the LCD write.
74 The 7 cycles are necessary to follow the LCD timing specs
75 at 140MHz */
76 move.b (%a0)+, %d1 /* 3(1/0) */
77 move.w %d1, (%a1) /* 1(0/1) */
78 subq.l #1, %d0 /* 1(0/0) */
79 nop /* 1(0/0) */
80 bne .loop /* 2(0/0) */
81 rts
82.wd_end:
83 .size lcd_write_data,.wd_end-lcd_write_data