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: