1 /*---------------------------------------------------------------------------*
2 Project: TwlSDK - demos - VIB - pulse_vib
3 File: char_data.c
4
5 Copyright 2008 Nintendo. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Date:: $
14 $Rev: $
15 $Author: $
16 *---------------------------------------------------------------------------*/
17 #include <char_data.h>
18
19 /*-----------------------------------------------------------------------*
20 Function prototype
21 *-----------------------------------------------------------------------*/
22
23 //--- Auto Function Prototype --- Don't comment here.
24 void dp_init(void);
25 void dp_set_pltt(s32 pltt_no);
26 void dp_flush(void);
27 void dp_write(char *str, LcdScreen scr, s32 h_pos, s32 v_pos);
28 void dp_clear_scr(LcdScreen scr);
29 void dp_clear(LcdScreen scr, s32 h_pos, s32 v_pos, u32 num);
30 void dp_write_byte(u8 num, LcdScreen scr, s32 h_pos, s32 v_pos);
31 void dp_write_dec(s32 num, LcdScreen scr, s32 h_pos, s32 v_pos);
32 void dp_write_hex(s32 num, LcdScreen scr, s32 h_pos, s32 v_pos);
33 void dp_write_byte_arr(u8 *arr, u32 length, LcdScreen scr, s32 h_pos, s32 v_pos);
34 static void BgScSet(char *Srcp, u16 *Destp, u8 PlttNo);
35 //--- End of Auto Function Prototype
36
37 /*-----------------------------------------------------------------------*
38 Variable
39 *-----------------------------------------------------------------------*/
40
41 static s32 pltt;
42 static u16 scr_buf_main[SCREEN_SIZE];
43 static u16 scr_buf_sub[SCREEN_SIZE];
44
45 /*-----------------------------------------------------------------------*
46 Global Function Definition
47 *-----------------------------------------------------------------------*/
48
dp_init(void)49 void dp_init(void)
50 {
51
52 GX_SetDispSelect(GX_DISP_SELECT_SUB_MAIN);
53
54 GX_SetBankForBG(GX_VRAM_BG_128_A);
55 GX_SetBankForSubBG(GX_VRAM_SUB_BG_128_C);
56
57 GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D);
58
59 GXS_SetGraphicsMode(GX_BGMODE_0);
60
61 G2_SetBG1Control(GX_BG_SCRSIZE_TEXT_256x256,
62 GX_BG_COLORMODE_16,
63 GX_BG_SCRBASE_0x0000, GX_BG_CHARBASE_0x04000, GX_BG_EXTPLTT_01);
64
65 G2S_SetBG1Control(GX_BG_SCRSIZE_TEXT_256x256,
66 GX_BG_COLORMODE_16,
67 GX_BG_SCRBASE_0x0000, GX_BG_CHARBASE_0x04000, GX_BG_EXTPLTT_01);
68
69 G2_SetBG1Priority(0);
70 G2S_SetBG1Priority(0);
71
72 G2_BG1Mosaic(FALSE);
73 G2S_BG1Mosaic(FALSE);
74
75 GX_LoadBG1Char(CharData_Sample, 0, sizeof(CharData_Sample));
76 GX_LoadBGPltt(PlttData_Sample, 0, sizeof(PlttData_Sample));
77
78 GXS_LoadBG1Char(CharData_Sample, 0, sizeof(CharData_Sample));
79 GXS_LoadBGPltt(PlttData_Sample, 0, sizeof(PlttData_Sample));
80
81 MI_CpuClearFast(scr_buf_main, sizeof(scr_buf_main));
82 MI_CpuClearFast(scr_buf_sub, sizeof(scr_buf_sub));
83
84 dp_flush();
85
86 GX_SetVisiblePlane(GX_PLANEMASK_BG1);
87 GXS_SetVisiblePlane(GX_PLANEMASK_BG1);
88 }
89
dp_set_pltt(s32 pltt_no)90 void dp_set_pltt(s32 pltt_no)
91 {
92 pltt = pltt_no;
93 }
94
dp_flush(void)95 void dp_flush(void)
96 {
97
98 DC_FlushRange(scr_buf_main, sizeof(scr_buf_main));
99 DC_FlushRange(scr_buf_sub, sizeof(scr_buf_sub));
100
101 GX_LoadBG1Scr(scr_buf_main, 0, sizeof(scr_buf_main));
102 GXS_LoadBG1Scr(scr_buf_sub, 0, sizeof(scr_buf_sub));
103 }
104
dp_write(char * str,LcdScreen scr,s32 h_pos,s32 v_pos)105 void dp_write(char *str, LcdScreen scr, s32 h_pos, s32 v_pos)
106 {
107
108 switch (scr)
109 {
110 case LCD_BOTTOM:
111 BgScSet(str, &scr_buf_main[32 * v_pos + h_pos], 0);
112 break;
113 case LCD_TOP:
114 BgScSet(str, &scr_buf_sub[32 * v_pos + h_pos], 0);
115 break;
116 }
117 }
118
dp_clear_scr(LcdScreen scr)119 void dp_clear_scr(LcdScreen scr)
120 {
121
122 switch (scr)
123 {
124 case LCD_BOTTOM:
125 MI_CpuClearFast(scr_buf_main, sizeof(scr_buf_main));
126 break;
127 case LCD_TOP:
128 MI_CpuClearFast(scr_buf_sub, sizeof(scr_buf_sub));
129 break;
130 }
131 }
132
dp_clear(LcdScreen scr,s32 h_pos,s32 v_pos,u32 num)133 void dp_clear(LcdScreen scr, s32 h_pos, s32 v_pos, u32 num)
134 {
135
136 switch (scr)
137 {
138 case LCD_BOTTOM:
139 MI_CpuClear8(&scr_buf_main[32 * v_pos + h_pos], num * 2);
140 break;
141 case LCD_TOP:
142 MI_CpuClear8(&scr_buf_sub[32 * v_pos + h_pos], num * 2);
143 break;
144 }
145 }
146
dp_write_byte(u8 num,LcdScreen scr,s32 h_pos,s32 v_pos)147 void dp_write_byte(u8 num, LcdScreen scr, s32 h_pos, s32 v_pos)
148 {
149
150 char str[3];
151
152 str[2] = 0;
153 str[1] = "0123456789ABCDEF"[num & 0xf];
154 str[0] = "0123456789ABCDEF"[(num >> 4) & 0xf];
155
156 switch (scr)
157 {
158 case LCD_BOTTOM:
159 BgScSet(str, &scr_buf_main[32 * v_pos + h_pos], 0);
160 break;
161 case LCD_TOP:
162 BgScSet(str, &scr_buf_sub[32 * v_pos + h_pos], 0);
163 break;
164 }
165 }
166
dp_write_dec(s32 num,LcdScreen scr,s32 h_pos,s32 v_pos)167 void dp_write_dec(s32 num, LcdScreen scr, s32 h_pos, s32 v_pos)
168 {
169
170 char buf[64];
171
172 (void)OS_SNPrintf(buf, 64, "%d", num);
173
174 dp_write(buf, scr, h_pos, v_pos);
175 }
176
dp_write_hex(s32 num,LcdScreen scr,s32 h_pos,s32 v_pos)177 void dp_write_hex(s32 num, LcdScreen scr, s32 h_pos, s32 v_pos)
178 {
179
180 char buf[64];
181
182 (void)OS_SNPrintf(buf, 64, "%x", num);
183
184 dp_write(buf, scr, h_pos, v_pos);
185 }
186
dp_write_byte_arr(u8 * arr,u32 length,LcdScreen scr,s32 h_pos,s32 v_pos)187 void dp_write_byte_arr(u8 *arr, u32 length, LcdScreen scr, s32 h_pos, s32 v_pos)
188 {
189
190 s32 i;
191 s32 pltt_temp = pltt;
192
193 for (i = 0; i < length; i++)
194 {
195 pltt = i & 1;
196 dp_write_byte(arr[i], scr, h_pos + i * 2, v_pos);
197 }
198 pltt = pltt_temp;
199 }
200
BgScSet(char * Srcp,u16 * Destp,u8 PlttNo)201 static void BgScSet(char *Srcp, u16 *Destp, u8 PlttNo)
202 {
203 PlttNo = (u8)pltt;
204
205 while (*Srcp != '\0')
206 *Destp++ = (u16)(PlttNo << 12 | *Srcp++);
207 }
208