1: /*
2: * Guitar-ZyX(tm)::MasterControlProgram - portable guitar F/X controller
3: * Copyright (C) 2009 Douglas McClendon
4: *
5: * This program is free software: you can redistribute it and/or modify
6: * it under the terms of the GNU General Public License as published by
7: * the Free Software Foundation, version 3 of the License.
8: *
9: * This program is distributed in the hope that it will be useful,
10: * but WITHOUT ANY WARRANTY; without even the implied warranty of
11: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12: * GNU General Public License for more details.
13: *
14: * You should have received a copy of the GNU General Public License
15: * along with this program. If not, see <http://www.gnu.org/licenses/>.
16: */
17: /*
18: #############################################################################
19: #############################################################################
20: ##
21: ## gzmcpc::modes: some source file
22: ##
23: #############################################################################
24: ##
25: ## Copyright 2008-2009 Douglas McClendon <dmc AT filteredperception DOT org>
26: ##
27: #############################################################################
28: #############################################################################
29: #
30: */
31:
32:
33:
34:
35: #include <nds.h>
36:
37: #include "mcp.h"
38:
39: #include "modes.h"
40:
41: #include "mode__intro__main.h"
42: #include "mode__intro__credits.h"
43: #include "mode__main_menu.h"
44: #include "mode__get_update.h"
45: #include "mode__ssid__input.h"
46: #include "mode__tpw__jam.h"
47:
48:
49:
50:
51: mode_def modes[MODE_NUM_MODES] = {
52: {
53: mode__intro__main___init,
54: mode__intro__main___top_renderer,
55: mode__intro__main___bot_renderer,
56: mode__intro__main___input_handler,
57: mode__intro__main___idle,
58: mode__intro__main___exit,
59: },
60: {
61: mode__intro__credits___init,
62: mode__intro__credits___top_renderer,
63: mode__intro__credits___bot_renderer,
64: mode__intro__credits___input_handler,
65: mode__intro__credits___idle,
66: mode__intro__credits___exit,
67: },
68: {
69: mode__main_menu___init,
70: mode__main_menu___top_renderer,
71: mode__main_menu___bot_renderer,
72: mode__main_menu___input_handler,
73: mode__main_menu___idle,
74: mode__main_menu___exit,
75: },
76: {
77: mode__get_update___init,
78: mode__get_update___top_renderer,
79: mode__get_update___bot_renderer,
80: mode__get_update___input_handler,
81: mode__get_update___idle,
82: mode__get_update___exit,
83: },
84: {
85: mode__ssid__input___init,
86: mode__ssid__input___top_renderer,
87: mode__ssid__input___bot_renderer,
88: mode__ssid__input___input_handler,
89: mode__ssid__input___idle,
90: mode__ssid__input___exit,
91: },
92: {
93: mode__tpw__jam___init,
94: mode__tpw__jam___top_renderer,
95: mode__tpw__jam___bot_renderer,
96: mode__tpw__jam___input_handler,
97: mode__tpw__jam___idle,
98: mode__tpw__jam___exit,
99: },
100: };
101:
102: time_val mode_start = {0, 0};
103:
104: long mode_ms = 0;
105: long exit_mode_ms = 0;
106:
107: gzmcp_mode last_mode = MODE_NUM_MODES;
108:
109: gzmcp_mode mode = MODE_NUM_MODES;
110:
111:
112: #ifdef FMODE
113: gzmcp_mode next_mode = FMODE;
114: gzmcp_mode new_mode = FMODE;
115: #else
116: gzmcp_mode next_mode = MODE_INTRO__MAIN;
117: gzmcp_mode new_mode = MODE_INTRO__MAIN;
118: #endif
119:
120:
121:
122:
123: void system_xmode_new(gzmcp_mode mcp_mode) {
124: // mode transitions cannot happen once started
125: if (mode == next_mode) {
126: next_mode = mcp_mode;
127: exit_mode_ms = mode_ms;
128: }
129: }
130:
131:
132: void system_xmode_reinit(void) {
133:
134: int i;
135:
136: //
137: // note, the following memory clearing might be good practice
138: // (better with dmafill perhaps), but hasn't yet proven
139: // to improve anything.
140: //
141:
142: // experiment: clear memory banks
143: // 256 * 256 * 2 = 128k
144: for (i = 0 ; i < 256 * 256 ; i++) {
145: VRAM_A[i] = (u16)0;
146: }
147:
148: // 128k
149: for (i = 0 ; i < 256 * 256 ; i++) {
150: VRAM_C[i] = (u16)0;
151: }
152:
153: // 32k
154: for (i = 0 ; i < 64 * 256 ; i++) {
155: VRAM_H[i] = (u16)0;
156: }
157:
158: // 16k
159: for (i = 0 ; i < 32 * 256 ; i++) {
160: VRAM_I[i] = (u16)0;
161: }
162:
163: videoBgDisableSub(0);
164: videoBgDisableSub(1);
165: videoBgDisableSub(2);
166: videoBgDisableSub(3);
167: videoBgDisable(0);
168: videoBgDisable(1);
169: videoBgDisable(2);
170: videoBgDisable(3);
171:
172: BG_PALETTE[255] = RGB15(0, 0, 0);
173: BG_PALETTE_SUB[255] = RGB15(0, 0, 0);
174:
175: swiWaitForVBlank();
176:
177: // set main screen to be on the top lcd display
178: lcdMainOnTop();
179:
180: // init screens to non-blending
181: REG_BLDCNT = BLEND_NONE;
182: REG_BLDCNT_SUB = BLEND_NONE;
183:
184: // default to fully faded to black
185: mcp_set_blend(MCP_MAIN_SCREEN, MCP_MAX_BLEND_LEVEL);
186: mcp_set_blend(MCP_SUB_SCREEN, MCP_MAX_BLEND_LEVEL);
187:
188: }
189:
190:
191: void system_xmode_real(void) {
192: new_mode = next_mode;
193: }
194:
195: