diff options
384 files changed, 649 insertions, 43226 deletions
diff --git a/.gitignore b/.gitignore index aa35be45f5..14ae9bcff7 100644 --- a/.gitignore +++ b/.gitignore @@ -100,7 +100,6 @@ __pycache__ # /tools/ /tools/bdf2bmp -/tools/sh2d /tools/scramble /tools/generate_rocklatin /tools/descramble @@ -109,7 +108,6 @@ __pycache__ /tools/codepages /tools/rdf2binary /tools/mkboot -/tools/player_unifont /tools/uclpack /tools/ipod_fw /tools/wavtrim diff --git a/apps/SOURCES b/apps/SOURCES index 107431d464..bf01dbcac4 100644 --- a/apps/SOURCES +++ b/apps/SOURCES @@ -75,9 +75,6 @@ iap/iap-lingo7.c #endif #endif screen_access.c -#ifdef HAVE_BUTTONBAR -gui/buttonbar.c -#endif #ifdef HAVE_LCD_BITMAP gui/icon.c #endif @@ -208,12 +205,6 @@ keymaps/keymap-h1x0_h3x0.c || (CONFIG_KEYPAD == IPOD_3G_PAD) \ || (CONFIG_KEYPAD == IPOD_1G2G_PAD)) keymaps/keymap-ipod.c -#elif CONFIG_KEYPAD == RECORDER_PAD -keymaps/keymap-recorder.c -#elif CONFIG_KEYPAD == ONDIO_PAD -keymaps/keymap-ondio.c -#elif CONFIG_KEYPAD == PLAYER_PAD -keymaps/keymap-player.c #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD keymaps/keymap-x5.c #elif CONFIG_KEYPAD == IAUDIO_M3_PAD diff --git a/apps/debug_menu.c b/apps/debug_menu.c index bc272e2a85..8913558e6c 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c @@ -1004,16 +1004,7 @@ static bool view_battery(void) lcd_putsf(0, 2, "External: %d.%03d V", y / 1000, y % 1000); #endif #if CONFIG_CHARGING -#if defined ARCHOS_RECORDER - lcd_putsf(0, 3, "Chgr: %s %s", - charger_inserted() ? "present" : "absent", - charger_enabled() ? "on" : "off"); - lcd_putsf(0, 5, "short delta: %d", short_delta); - lcd_putsf(0, 6, "long delta: %d", long_delta); - lcd_puts(0, 7, power_message); - lcd_putsf(0, 8, "USB Inserted: %s", - usb_inserted() ? "yes" : "no"); -#elif defined IPOD_NANO || defined IPOD_VIDEO +#if defined IPOD_NANO || defined IPOD_VIDEO int usb_pwr = (GPIOL_INPUT_VAL & 0x10)?true:false; int ext_pwr = (GPIOL_INPUT_VAL & 0x08)?false:true; int dock = (GPIOA_INPUT_VAL & 0x10)?true:false; @@ -1181,18 +1172,6 @@ static bool view_battery(void) case 3: /* remaining time estimation: */ -#ifdef ARCHOS_RECORDER - lcd_putsf(0, 0, "charge_state: %d", charge_state); - - lcd_putsf(0, 1, "Cycle time: %d m", powermgmt_last_cycle_startstop_min); - - lcd_putsf(0, 2, "Lvl@cyc st: %d%%", powermgmt_last_cycle_level); - - lcd_putsf(0, 3, "P=%2d I=%2d", pid_p, pid_i); - - lcd_putsf(0, 4, "Trickle sec: %d/60", trickle_sec); -#endif /* ARCHOS_RECORDER */ - #if (CONFIG_BATTERY_MEASURE & VOLTAGE_MEASURE) lcd_putsf(0, 5, "Last PwrHist: %d.%03dV", power_history[0] / 1000, @@ -1903,30 +1882,7 @@ static bool dbg_tagcache_info(void) } #endif -#if CONFIG_CPU == SH7034 -static bool dbg_save_roms(void) -{ - int fd; - int oldmode = system_memory_guard(MEMGUARD_NONE); - - fd = creat("/internal_rom_0000-FFFF.bin", 0666); - if(fd >= 0) - { - write(fd, (void *)0, 0x10000); - close(fd); - } - - fd = creat("/internal_rom_2000000-203FFFF.bin", 0666); - if(fd >= 0) - { - write(fd, (void *)0x2000000, 0x40000); - close(fd); - } - - system_memory_guard(oldmode); - return false; -} -#elif defined CPU_COLDFIRE +#if defined CPU_COLDFIRE static bool dbg_save_roms(void) { int fd; @@ -2091,11 +2047,6 @@ static int radio_callback(int btn, struct gui_synclist *lists) simplelist_addline( "sd_set: %d Hz", lv24020lp_get(LV24020LP_SD_SET) ); #endif /* LV24020LP */ -#if (CONFIG_TUNER & S1A0903X01) - simplelist_addline( - "Samsung regs: %08X", s1a0903x01_get(RADIO_ALL)); - /* This one doesn't return dynamic data atm */ -#endif /* S1A0903X01 */ #if (CONFIG_TUNER & TEA5767) struct tea5767_dbg_info nfo; tea5767_dbg_info(&nfo); @@ -2218,7 +2169,7 @@ static bool dbg_metadatalog(void) return false; } -#if CONFIG_CPU == SH7034 || defined(CPU_COLDFIRE) +#if defined(CPU_COLDFIRE) static bool dbg_set_memory_guard(void) { static const struct opt_items names[MAXMEMGUARD] = { @@ -2233,7 +2184,7 @@ static bool dbg_set_memory_guard(void) return false; } -#endif /* CONFIG_CPU == SH7034 || defined(CPU_COLDFIRE) */ +#endif /* defined(CPU_COLDFIRE) */ #if defined(HAVE_EEPROM) && !defined(HAVE_EEPROM_SETTINGS) static bool dbg_write_eeprom(void) @@ -2589,13 +2540,13 @@ static const struct { unsigned char *desc; /* string or ID */ bool (*function) (void); /* return true if USB was connected */ } menuitems[] = { -#if CONFIG_CPU == SH7034 || defined(CPU_COLDFIRE) || \ +#if defined(CPU_COLDFIRE) || \ (defined(CPU_PP) && !(CONFIG_STORAGE & STORAGE_SD)) || \ CONFIG_CPU == IMX31L || defined(CPU_TCC780X) || CONFIG_CPU == AS3525v2 || \ CONFIG_CPU == AS3525 || CONFIG_CPU == RK27XX { "Dump ROM contents", dbg_save_roms }, #endif -#if CONFIG_CPU == SH7034 || defined(CPU_COLDFIRE) || defined(CPU_PP) \ +#if defined(CPU_COLDFIRE) || defined(CPU_PP) \ || CONFIG_CPU == S3C2440 || CONFIG_CPU == IMX31L || CONFIG_CPU == AS3525 \ || CONFIG_CPU == DM320 || defined(CPU_S5L870X) || CONFIG_CPU == AS3525v2 \ || CONFIG_CPU == RK27XX @@ -2616,7 +2567,7 @@ static const struct { #if defined(IRIVER_H100_SERIES) && !defined(SIMULATOR) { "S/PDIF analyzer", dbg_spdif }, #endif -#if CONFIG_CPU == SH7034 || defined(CPU_COLDFIRE) +#if defined(CPU_COLDFIRE) { "Catch mem accesses", dbg_set_memory_guard }, #endif { "View OS stacks", dbg_os }, diff --git a/apps/features.txt b/apps/features.txt index 2e487943fe..7b50b4026c 100644 --- a/apps/features.txt +++ b/apps/features.txt @@ -80,14 +80,6 @@ lcd_invert lcd_sleep #endif -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -masf -#endif - -#if (CONFIG_CODEC == MAS3507D) -masd -#endif - #if defined(HAVE_MORSE_INPUT) morse_input #endif @@ -115,13 +107,6 @@ radio_remote #endif #endif -#if (CONFIG_KEYPAD == RECORDER_PAD) -recorder_pad -#if defined(CONFIG_TUNER) -radio_screen_button_bar -#endif -#endif - #if defined(HAVE_RECORDING) recording #if CONFIG_CODEC == SWCODEC @@ -158,10 +143,6 @@ rtc serial_port #endif -#if defined(ARCHOS_RECORDER) || defined(ARCHOS_PLAYER) -soft_shutdown -#endif - #if defined(HAVE_SPDIF_POWER) spdif_power #endif diff --git a/apps/gui/buttonbar.c b/apps/gui/buttonbar.c deleted file mode 100644 index 48ef6d0994..0000000000 --- a/apps/gui/buttonbar.c +++ /dev/null @@ -1,131 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) Linus Nielsen Feltzing (2002) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ -/* -2005 Kevin Ferrare : - - Multi screen support - - Rewrote a lot of code to avoid global vars and make it accept eventually - more that 3 buttons on the bar (just the prototype of gui_buttonbar_set - and the constant BUTTONBAR_MAX_BUTTONS to modify) -2008 Jonathan Gordon - - redone to use viewports, items will NOT scroll in their vp. - Bar is always drawn at the bottom of the screen. This may be changed later. - Callers need to remember to adjust their viewports to not be overwitten -*/ -#include "config.h" -#include "buttonbar.h" -#include "viewport.h" -#include "lcd.h" -#include "font.h" -#include "string-extra.h" -#include "settings.h" - -static struct viewport bb_vp[NB_SCREENS]; -void gui_buttonbar_init(struct gui_buttonbar * buttonbar) -{ - gui_buttonbar_unset(buttonbar); - FOR_NB_SCREENS(i) - { - viewport_set_defaults(&bb_vp[i], i); - bb_vp[i].font = FONT_SYSFIXED; - bb_vp[i].y = screens[i].lcdheight - BUTTONBAR_HEIGHT; - bb_vp[i].height = BUTTONBAR_HEIGHT; - bb_vp[i].drawmode = DRMODE_COMPLEMENT; - } -} - -void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar, - struct screen * display) -{ - buttonbar->display = display; -} - -static void gui_buttonbar_draw_button(struct gui_buttonbar * buttonbar, int num) -{ - int button_width; - int fh, fw; - struct screen * display = buttonbar->display; - struct viewport vp = bb_vp[display->screen_type]; - - button_width = display->lcdwidth/BUTTONBAR_MAX_BUTTONS; - vp.width = button_width-1; - vp.x = button_width * num; - display->set_viewport(&vp); - display->fill_viewport(); - if(buttonbar->caption[num][0] != 0) - { - display->getstringsize(buttonbar->caption[num], &fw, &fh); - display->putsxy((button_width - fw)/2, - (vp.height-fh)/2, buttonbar->caption[num]); - } - display->set_viewport(NULL); -} - -void gui_buttonbar_set(struct gui_buttonbar * buttonbar, - const char *caption1, - const char *caption2, - const char *caption3) -{ - gui_buttonbar_unset(buttonbar); - if(caption1) - { - strlcpy(buttonbar->caption[0], caption1, BUTTONBAR_CAPTION_LENGTH); - } - if(caption2) - { - strlcpy(buttonbar->caption[1], caption2, BUTTONBAR_CAPTION_LENGTH); - } - if(caption3) - { - strlcpy(buttonbar->caption[2], caption3, BUTTONBAR_CAPTION_LENGTH); - } -} - -void gui_buttonbar_unset(struct gui_buttonbar * buttonbar) -{ - int i; - for(i = 0;i < BUTTONBAR_MAX_BUTTONS;i++) - buttonbar->caption[i][0] = 0; -} - -void gui_buttonbar_draw(struct gui_buttonbar * buttonbar) -{ - struct screen * display = buttonbar->display; - if(!global_settings.buttonbar || !gui_buttonbar_isset(buttonbar)) - return; - int i; - display->set_viewport(&bb_vp[display->screen_type]); - display->clear_viewport(); - for(i = 0;i < BUTTONBAR_MAX_BUTTONS;i++) - gui_buttonbar_draw_button(buttonbar, i); - display->set_viewport(&bb_vp[display->screen_type]); - display->update_viewport(); - display->set_viewport(NULL); -} - -bool gui_buttonbar_isset(struct gui_buttonbar * buttonbar) -{ - /* If all buttons are unset, the button bar is considered disabled */ - int i; - for(i = 0;i < BUTTONBAR_MAX_BUTTONS;i++) - if(buttonbar->caption[i][0] != 0) - return true; - return false; -} diff --git a/apps/gui/buttonbar.h b/apps/gui/buttonbar.h deleted file mode 100644 index 884e3132bf..0000000000 --- a/apps/gui/buttonbar.h +++ /dev/null @@ -1,85 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2005 by Kevin Ferrare - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -#ifndef _GUI_BUTTONBAR_H_ -#define _GUI_BUTTONBAR_H_ -#include "config.h" -#include "button.h" -#include "screen_access.h" - - -#ifdef HAVE_BUTTONBAR -#define BUTTONBAR_HEIGHT 8 -#define BUTTONBAR_MAX_BUTTONS 3 -#define BUTTONBAR_CAPTION_LENGTH 8 - - -struct gui_buttonbar -{ - char caption[BUTTONBAR_MAX_BUTTONS][BUTTONBAR_CAPTION_LENGTH]; - struct screen * display; -}; - -/* - * Initializes the buttonbar - * - buttonbar : the buttonbar - */ -extern void gui_buttonbar_init(struct gui_buttonbar * buttonbar); - -/* - * Attach the buttonbar to a screen - * - buttonbar : the buttonbar - * - display : the display to attach the buttonbar - */ -extern void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar, - struct screen * display); - -/* - * Set the caption of the items of the buttonbar - * - buttonbar : the buttonbar - * - caption1,2,3 : the first, second and thirds items of the bar - */ -extern void gui_buttonbar_set(struct gui_buttonbar * buttonbar, - const char *caption1, - const char *caption2, - const char *caption3); - -/* - * Disable the buttonbar - * - buttonbar : the buttonbar - */ -extern void gui_buttonbar_unset(struct gui_buttonbar * buttonbar); - -/* - * Draw the buttonbar on it's attached screen - * - buttonbar : the buttonbar - */ -extern void gui_buttonbar_draw(struct gui_buttonbar * buttonbar); - -/* - * Returns true if the buttonbar has something to display, false otherwise - * - buttonbar : the buttonbar - */ -extern bool gui_buttonbar_isset(struct gui_buttonbar * buttonbar); -#else -#define BUTTONBAR_HEIGHT 0 -#endif -#endif /* _GUI_BUTTONBAR_H_ */ diff --git a/apps/gui/list.c b/apps/gui/list.c index 425cab9a0f..8533f93275 100644 --- a/apps/gui/list.c +++ b/apps/gui/list.c @@ -553,10 +553,6 @@ void gui_synclist_set_viewport_defaults(struct viewport *vp, enum screen_type screen) { viewport_set_defaults(vp, screen); -#ifdef HAVE_BUTTONBAR - if (screens[screen].has_buttonbar) - vp->height -= BUTTONBAR_HEIGHT; -#endif } #ifdef HAVE_LCD_COLOR diff --git a/apps/gui/option_select.h b/apps/gui/option_select.h index 4ccc15a14e..7ca9a4ebbb 100644 --- a/apps/gui/option_select.h +++ b/apps/gui/option_select.h @@ -25,9 +25,8 @@ #include "screen_access.h" #include "settings.h" -#if defined (HAVE_SCROLLWHEEL) || \ - (CONFIG_KEYPAD == PLAYER_PAD) -/* Define this if your target makes sense to have +#if defined (HAVE_SCROLLWHEEL) +/* Define this if your target makes sense to have smaller values at the top of the list increasing down the list */ #define ASCENDING_INT_SETTINGS #endif diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index 1cff83eb9a..75c3203066 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c @@ -126,7 +126,7 @@ char* get_dir(char* buf, int buf_size, const char* path, int level) return buf; } -#if (CONFIG_CODEC != MAS3507D) && defined (HAVE_PITCHCONTROL) +#if defined (HAVE_PITCHCONTROL) /* A helper to determine the enum value for pitch/speed. When there are two choices (i.e. boolean), return 1 if the value is @@ -1452,7 +1452,7 @@ const char *get_token_value(struct gui_wps *gwps, } #endif /* (CONFIG_CODEC == SWCODEC) */ -#if (CONFIG_CODEC != MAS3507D) && defined (HAVE_PITCHCONTROL) +#if defined (HAVE_PITCHCONTROL) case SKIN_TOKEN_SOUND_PITCH: { int32_t pitch = sound_get_pitch(); diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c index 194954c1d2..fad3255cdb 100644 --- a/apps/gui/viewport.c +++ b/apps/gui/viewport.c @@ -262,13 +262,6 @@ void viewportmanager_init() #ifdef HAVE_LCD_BITMAP void viewportmanager_theme_changed(const int which) { -#ifdef HAVE_BUTTONBAR - if (which & THEME_BUTTONBAR) - { /* don't handle further, the custom ui viewport ignores the buttonbar, - * as does viewport_set_defaults(), since only lists use it*/ - screens[SCREEN_MAIN].has_buttonbar = global_settings.buttonbar; - } -#endif if (which & THEME_LANGUAGE) { } diff --git a/apps/gui/wps.c b/apps/gui/wps.c index c27c434d12..a930edaded 100644 --- a/apps/gui/wps.c +++ b/apps/gui/wps.c @@ -355,10 +355,6 @@ bool ffwd_rew(int button) if (!skin_get_global_state()->paused) audio_pause(); #endif -#if CONFIG_KEYPAD == PLAYER_PAD - FOR_NB_SCREENS(i) - skin_get_gwps(WPS, i)->display->scroll_stop(); -#endif if (direction > 0) status_set_ffmode(STATUS_FASTFORWARD); else diff --git a/apps/keymaps/keymap-ondio.c b/apps/keymaps/keymap-ondio.c deleted file mode 100644 index 3a6f667601..0000000000 --- a/apps/keymaps/keymap-ondio.c +++ /dev/null @@ -1,252 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 Jonathan Gordon - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -/* * - * Button Code Definitions for archos ondio fm/sp targets - */ - -#include "config.h" -#include "action.h" -#include "button.h" -#include "settings.h" - -/* CONTEXT_CUSTOM's used in this file... - -CONTEXT_CUSTOM|CONTEXT_TREE = the standard list/tree defines (without directions) - - -*/ - -static const struct button_mapping button_context_standard[] = { - { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, - { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - - { ACTION_STD_CONTEXT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT }, - { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, - { ACTION_STD_MENU, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, - { ACTION_STD_CANCEL, BUTTON_OFF, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; - -static const struct button_mapping button_context_wps[] = { - { ACTION_WPS_PLAY, BUTTON_OFF|BUTTON_REL, BUTTON_OFF }, - { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, - { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, - { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, - { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, - { ACTION_WPS_STOP, BUTTON_OFF|BUTTON_REPEAT, BUTTON_OFF }, - { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_BROWSE, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, - { ACTION_WPS_CONTEXT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, - /* { ACTION_WPS_MENU, BUTTON_NONE, BUTTON_NONE }, we can't have that */ - { ACTION_STD_KEYLOCK, BUTTON_MENU|BUTTON_DOWN, BUTTON_NONE }, - /* { ACTION_WPS_VIEW_PLAYLIST,BUTTON_NONE, BUTTON_NONE }, can't have this either */ - - LAST_ITEM_IN_LIST -}; - -static const struct button_mapping button_context_settings[] = { - { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE }, - { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; - -static const struct button_mapping button_context_tree[] = { - { ACTION_TREE_WPS, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, - { ACTION_TREE_STOP, BUTTON_OFF, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_listtree */ - -static const struct button_mapping button_context_tree_scroll_lr[] = { - { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, - { ACTION_TREE_PGLEFT, BUTTON_MENU|BUTTON_LEFT, BUTTON_NONE }, - { ACTION_TREE_ROOT_INIT, BUTTON_MENU|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_MENU|BUTTON_LEFT }, - { ACTION_TREE_PGLEFT, BUTTON_MENU|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, - { ACTION_TREE_PGRIGHT, BUTTON_MENU|BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_TREE_PGRIGHT, BUTTON_MENU|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), -}; - -static const struct button_mapping button_context_yesno[] = { - { ACTION_YESNO_ACCEPT, BUTTON_RIGHT, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; - -static const struct button_mapping button_context_bmark[] = { - { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_BMS_DELETE, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), -}; /* button_context_settings_bmark */ - -static const struct button_mapping button_context_pitchscreen[] = { - { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE }, - { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, - { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, - { ACTION_PS_TOGGLE_MODE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, - { ACTION_PS_RESET, BUTTON_MENU, BUTTON_NONE }, - { ACTION_PS_EXIT, BUTTON_OFF, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_pitchscreen */ - -#ifdef HAVE_RECORDING -static const struct button_mapping button_context_rectrigger[] = { - { ACTION_STD_OK, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_RECSCREEN) -}; -static const struct button_mapping button_context_recscreen[] = { - { ACTION_REC_PAUSE, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, - { ACTION_SETTINGS_INC, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, - { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_recscreen */ -#endif /* HAVE_RECORDING */ - -static const struct button_mapping button_context_keyboard[] = { - { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_SELECT, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, - { ACTION_KBD_DONE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_ABORT, BUTTON_OFF, BUTTON_NONE }, - { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE }, - { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; /* button_context_keyboard */ - -static const struct button_mapping button_context_morse_input[] = { - { ACTION_KBD_CURSOR_LEFT, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_KBD_CURSOR_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_CURSOR_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_KBD_CURSOR_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_BACKSPACE, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, - { ACTION_KBD_DONE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_ABORT, BUTTON_OFF, BUTTON_NONE }, - { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_SELECT, BUTTON_UP, BUTTON_NONE }, - { ACTION_KBD_MORSE_SELECT, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; /* button_context_morse_input */ - -#if CONFIG_TUNER -static const struct button_mapping button_context_radio[] = { - { ACTION_FM_MENU, BUTTON_MENU | BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_FM_RECORD_DBLPRE, BUTTON_MENU, BUTTON_NONE}, - { ACTION_FM_RECORD, BUTTON_MENU | BUTTON_REL, BUTTON_NONE }, - { ACTION_FM_STOP, BUTTON_OFF | BUTTON_REPEAT, BUTTON_OFF }, - { ACTION_FM_EXIT, BUTTON_OFF | BUTTON_REL, BUTTON_OFF }, - { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - -#ifndef HAS_BUTTON_HOLD - { ACTION_STD_KEYLOCK, BUTTON_MENU|BUTTON_DOWN, BUTTON_NONE }, -#endif - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) - -}; -#endif - -const struct button_mapping* get_context_mapping( int context ) -{ - switch( context ) - { - case CONTEXT_STD: - return button_context_standard; - - case CONTEXT_WPS: - return button_context_wps; - - case CONTEXT_SETTINGS: - return button_context_settings; - - case CONTEXT_YESNOSCREEN: - return button_context_yesno; - - case CONTEXT_BOOKMARKSCREEN: - return button_context_bmark; - case CONTEXT_PITCHSCREEN: - return button_context_pitchscreen; - case CONTEXT_TREE: - case CONTEXT_MAINMENU: - if (global_settings.hold_lr_for_scroll_in_list) - return button_context_tree_scroll_lr; - /* else fall through to CUSTOM|CONTEXT_TREE */ - case CONTEXT_CUSTOM|CONTEXT_TREE: - return button_context_tree; -#ifdef HAVE_RECORDING - case CONTEXT_RECSCREEN: - return button_context_recscreen; - case CONTEXT_SETTINGS_RECTRIGGER: - return button_context_rectrigger; -#endif - case CONTEXT_KEYBOARD: - return button_context_keyboard; - case CONTEXT_MORSE_INPUT: - return button_context_morse_input; -#if CONFIG_TUNER - case CONTEXT_FM: - return button_context_radio; -#endif - case CONTEXT_LIST: - default: - return button_context_standard; - } -} diff --git a/apps/keymaps/keymap-player.c b/apps/keymaps/keymap-player.c deleted file mode 100644 index bcfb4869df..0000000000 --- a/apps/keymaps/keymap-player.c +++ /dev/null @@ -1,165 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 Jonathan Gordon - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -/* * - * Button Code Definitions for archos player targets - * - */ - -#include "config.h" -#include "action.h" -#include "button.h" - -static const struct button_mapping button_context_standard[] = { - { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - - { ACTION_STD_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, - { ACTION_STD_CANCEL, BUTTON_STOP, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_ON, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, - { ACTION_STD_MENU, BUTTON_MENU, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; - -static const struct button_mapping button_context_wps[] = { - { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, - { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, - { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, - { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, - { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, - { ACTION_WPS_STOP, BUTTON_STOP, BUTTON_NONE }, - - { ACTION_WPS_VOLDOWN, BUTTON_MENU|BUTTON_LEFT, BUTTON_NONE }, - { ACTION_WPS_VOLDOWN, BUTTON_MENU|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_MENU|BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_MENU|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - - { ACTION_WPS_BROWSE, BUTTON_ON|BUTTON_REL, BUTTON_ON }, - { ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, - { ACTION_WPS_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, - { ACTION_STD_KEYLOCK, BUTTON_MENU|BUTTON_STOP, BUTTON_NONE }, - { ACTION_WPS_HOTKEY, BUTTON_MENU|BUTTON_ON, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; - -static const struct button_mapping button_context_settings[] = { - { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; - -static const struct button_mapping button_context_tree[] = { - { ACTION_TREE_WPS, BUTTON_ON, BUTTON_NONE }, - { ACTION_TREE_HOTKEY, BUTTON_MENU|BUTTON_ON, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_listtree */ - -static const struct button_mapping button_context_yesno[] = { - { ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_settings_yesno */ - -static const struct button_mapping button_context_bmark[] = { - { ACTION_NONE, BUTTON_ON, BUTTON_NONE }, - { ACTION_BMS_DELETE, BUTTON_PLAY|BUTTON_ON, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), -}; /* button_context_settings_bmark */ - -/***************************************************************************** - * Remote control mappings - *****************************************************************************/ - -static const struct button_mapping remote_button_context_standard[] = { - { ACTION_STD_PREV, BUTTON_RC_LEFT, BUTTON_NONE }, - { ACTION_STD_NEXT, BUTTON_RC_RIGHT, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_RC_STOP, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_RC_PLAY, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; - -static const struct button_mapping remote_button_context_wps[] = { - { ACTION_WPS_PLAY, BUTTON_RC_PLAY, BUTTON_NONE }, - { ACTION_WPS_SKIPNEXT, BUTTON_RC_RIGHT, BUTTON_NONE }, - { ACTION_WPS_SKIPPREV, BUTTON_RC_LEFT, BUTTON_NONE }, - { ACTION_WPS_STOP, BUTTON_RC_STOP, BUTTON_NONE }, - - { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; - - -static const struct button_mapping* get_context_mapping_remote( int context ) -{ - context ^= CONTEXT_REMOTE; - - switch (context) - { - case CONTEXT_WPS: - return remote_button_context_wps; - - default: - return remote_button_context_standard; - } -} - -const struct button_mapping* get_context_mapping( int context ) -{ - if (context&CONTEXT_REMOTE) - return get_context_mapping_remote(context); - - switch (context) - { - case CONTEXT_WPS: - return button_context_wps; - - case CONTEXT_SETTINGS: - return button_context_settings; - - case CONTEXT_YESNOSCREEN: - return button_context_yesno; - - case CONTEXT_TREE: - case CONTEXT_MAINMENU: - return button_context_tree; - case CONTEXT_BOOKMARKSCREEN: - return button_context_bmark; - case CONTEXT_STD: - case CONTEXT_LIST: - default: - return button_context_standard; - } -} diff --git a/apps/keymaps/keymap-recorder.c b/apps/keymaps/keymap-recorder.c deleted file mode 100644 index da3b5b525e..0000000000 --- a/apps/keymaps/keymap-recorder.c +++ /dev/null @@ -1,312 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 Antoine Cellerier <dionoea @t videolan d.t org> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -/* * - * Button Code Definitions for archos recorder target - * - * \TODO handle F3 - */ - -#include "config.h" -#include "action.h" -#include "button.h" -#include "settings.h" - -/* CONTEXT_CUSTOM's used in this file... - -CONTEXT_CUSTOM|1 = the standard list/tree defines (without directions) - - -*/ - -static const struct button_mapping button_context_standard[] = { - { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, - { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - - { ACTION_STD_OK, BUTTON_ON, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT }, - - { ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, - { ACTION_STD_MENU, BUTTON_F1, BUTTON_NONE }, - { ACTION_STD_QUICKSCREEN, BUTTON_F2, BUTTON_NONE }, - { ACTION_STD_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, - { ACTION_STD_CANCEL, BUTTON_OFF, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_F3, BUTTON_F3, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; - -static const struct button_mapping button_context_wps[] = { - { ACTION_NONE, BUTTON_ON, BUTTON_NONE }, - { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, - { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, - { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, - { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, - { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, - { ACTION_WPS_STOP, BUTTON_OFF|BUTTON_REL, BUTTON_OFF }, - { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_MENU, BUTTON_F1|BUTTON_REL, BUTTON_F1 }, - { ACTION_WPS_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, - { ACTION_WPS_QUICKSCREEN, BUTTON_F2|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_HOTKEY, BUTTON_F2|BUTTON_REL, BUTTON_F2 }, - { ACTION_WPS_BROWSE, BUTTON_ON|BUTTON_REL, BUTTON_ON }, - { ACTION_WPS_ID3SCREEN, BUTTON_F1|BUTTON_ON, BUTTON_NONE }, - { ACTION_WPS_PITCHSCREEN, BUTTON_ON|BUTTON_UP, BUTTON_ON }, - { ACTION_WPS_PITCHSCREEN, BUTTON_ON|BUTTON_DOWN, BUTTON_ON }, - { ACTION_STD_KEYLOCK, BUTTON_F1|BUTTON_DOWN, BUTTON_NONE }, - { ACTION_F3, BUTTON_F3, BUTTON_NONE }, - { ACTION_WPS_ABSETB_NEXTDIR, BUTTON_ON|BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_WPS_ABSETA_PREVDIR, BUTTON_ON|BUTTON_LEFT, BUTTON_NONE }, - { ACTION_WPS_ABRESET, BUTTON_ON|BUTTON_OFF, BUTTON_ON }, - - - LAST_ITEM_IN_LIST -}; - -static const struct button_mapping button_context_settings[] = { - { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE }, - { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; - -static const struct button_mapping button_context_tree[] = { - { ACTION_TREE_WPS, BUTTON_ON|BUTTON_REL, BUTTON_ON }, - { ACTION_TREE_STOP, BUTTON_OFF, BUTTON_NONE }, - { ACTION_TREE_HOTKEY, BUTTON_F2|BUTTON_REL, BUTTON_F2 }, - { ACTION_NONE, BUTTON_ON, BUTTON_NONE }, - { ACTION_LISTTREE_PGUP, BUTTON_ON|BUTTON_UP, BUTTON_NONE }, - { ACTION_LISTTREE_PGUP, BUTTON_ON|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_LISTTREE_PGDOWN, BUTTON_ON|BUTTON_DOWN, BUTTON_NONE }, - { ACTION_LISTTREE_PGDOWN, BUTTON_ON|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_listtree */ - - -static const struct button_mapping button_context_tree_scroll_lr[] = { - { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, - { ACTION_TREE_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT }, - { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, - { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|1), -}; - -static const struct button_mapping button_context_yesno[] = { - { ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; -static const struct button_mapping button_context_quickscreen[] = { - { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, - { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_PLAY, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_quickscreen */ - -static const struct button_mapping button_context_pitchscreen[] = { - { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE }, - { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, - { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, - { ACTION_PS_TOGGLE_MODE, BUTTON_F1, BUTTON_NONE }, - { ACTION_PS_RESET, BUTTON_ON, BUTTON_NONE }, - { ACTION_PS_EXIT, BUTTON_OFF, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_pitchcreen */ - -static const struct button_mapping button_context_recscreen[] = { - { ACTION_REC_PAUSE, BUTTON_PLAY, BUTTON_NONE }, - { ACTION_REC_F2, BUTTON_F2, BUTTON_NONE }, - { ACTION_REC_F3, BUTTON_F3, BUTTON_NONE }, - { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_recscreen */ - -static const struct button_mapping button_context_keyboard[] = { - { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_CURSOR_LEFT, BUTTON_ON|BUTTON_LEFT, BUTTON_NONE }, - { ACTION_KBD_CURSOR_LEFT, BUTTON_ON|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_CURSOR_RIGHT, BUTTON_ON|BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_KBD_CURSOR_RIGHT, BUTTON_ON|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_SELECT, BUTTON_PLAY, BUTTON_NONE }, - { ACTION_KBD_PAGE_FLIP, BUTTON_F1, BUTTON_NONE }, - { ACTION_KBD_DONE, BUTTON_F2, BUTTON_NONE }, - { ACTION_KBD_ABORT, BUTTON_OFF, BUTTON_NONE }, - { ACTION_KBD_BACKSPACE, BUTTON_F3, BUTTON_NONE }, - { ACTION_KBD_BACKSPACE, BUTTON_F3|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE }, - { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_MORSE_SELECT, BUTTON_PLAY|BUTTON_REL, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; /* button_context_keyboard */ - -static const struct button_mapping button_context_bmark[] = { - { ACTION_NONE, BUTTON_ON, BUTTON_NONE }, - { ACTION_BMS_DELETE, BUTTON_PLAY|BUTTON_ON, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), - -}; /* button_context_settings_bmark */ - -static const struct button_mapping button_context_radio[] = { - { ACTION_FM_MENU, BUTTON_F1, BUTTON_NONE }, - { ACTION_FM_PRESET, BUTTON_F2|BUTTON_REL, BUTTON_F2 }, - { ACTION_FM_RECORD, BUTTON_F3, BUTTON_NONE }, - { ACTION_FM_FREEZE, BUTTON_PLAY, BUTTON_NONE }, - { ACTION_FM_STOP, BUTTON_OFF, BUTTON_NONE }, - { ACTION_FM_MODE, BUTTON_ON | BUTTON_REPEAT, BUTTON_ON }, - { ACTION_FM_EXIT, BUTTON_ON | BUTTON_REL, BUTTON_ON }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) - -}; - -#if BUTTON_REMOTE != 0 -/***************************************************************************** - * Remote control mappings - *****************************************************************************/ - -static const struct button_mapping remote_button_context_standard[] = { - { ACTION_STD_PREV, BUTTON_RC_LEFT, BUTTON_NONE }, - { ACTION_STD_NEXT, BUTTON_RC_RIGHT, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_RC_STOP, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_RC_PLAY, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; - -static const struct button_mapping remote_button_context_wps[] = { - { ACTION_WPS_PLAY, BUTTON_RC_PLAY, BUTTON_NONE }, - { ACTION_WPS_SKIPNEXT, BUTTON_RC_RIGHT, BUTTON_NONE }, - { ACTION_WPS_SKIPPREV, BUTTON_RC_LEFT, BUTTON_NONE }, - { ACTION_WPS_STOP, BUTTON_RC_STOP, BUTTON_NONE }, - - { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; - - -static const struct button_mapping* get_context_mapping_remote( int context ) -{ - context ^= CONTEXT_REMOTE; - - switch (context) - { - case CONTEXT_WPS: - return remote_button_context_wps; - - default: - return remote_button_context_standard; - } -} -#endif /* BUTTON_REMOTE != 0 */ - -const struct button_mapping* get_context_mapping( int context ) -{ -#if BUTTON_REMOTE != 0 - if (context&CONTEXT_REMOTE) - return get_context_mapping_remote(context); -#endif - - switch( context ) - { - case CONTEXT_WPS: - return button_context_wps; - case CONTEXT_SETTINGS_TIME: - case CONTEXT_SETTINGS: - return button_context_settings; - - case CONTEXT_YESNOSCREEN: - return button_context_yesno; - - case CONTEXT_PITCHSCREEN: - return button_context_pitchscreen; - case CONTEXT_BOOKMARKSCREEN: - return button_context_bmark; - case CONTEXT_TREE: - case CONTEXT_MAINMENU: - if (global_settings.hold_lr_for_scroll_in_list) - return button_context_tree_scroll_lr; - /* else fall through to CUSTOM|1 */ - case CONTEXT_CUSTOM|1: - return button_context_tree; - - case CONTEXT_QUICKSCREEN: - return button_context_quickscreen; - - case CONTEXT_RECSCREEN: - case CONTEXT_SETTINGS_RECTRIGGER: - return button_context_recscreen; - case CONTEXT_KEYBOARD: - case CONTEXT_MORSE_INPUT: - return button_context_keyboard; - case CONTEXT_FM: - return button_context_radio; - - case CONTEXT_STD: - case CONTEXT_LIST: - default: - return button_context_standard; - } -} diff --git a/apps/lang/english.lang b/apps/lang/english.lang index bc27a9fb4c..11770606a1 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -52,13 +52,6 @@ # The target names used are picked from the configure script and are set in the # MODELNAME variable in the root makefile. Currently, they are: # Target Target string -# Archos -# Player/Studio archosplayer -# Recorder archosrecorder -# FM Recorder archosfmrecorder -# Recorder V2 archosrecorderv2 -# Ondio SP archosondiosp -# Ondio FM archosondiofm # iriver # H100/H110/H115 iriverh100 # H120/H140 iriverh120 @@ -333,7 +326,6 @@ iriverh100,iriverh120,iriverh300: "NAVI = Yes" ipod*,iaudiox5,iaudiom5,gigabeat*,sansae200*,sansac200*,iriverh10,iriverh10_5gb,mrobe100,sansaclip*,sansafuze*,sansaconnect: "SELECT = Yes" mrobe500: "PLAY, POWER, or top-right = Yes" - archosplayer: "(PLAY/STOP)" vibe500: "OK = Yes" creativezen*: "Select = Yes" </source> @@ -343,7 +335,6 @@ iriverh100,iriverh120,iriverh300: "NAVI = Yes" ipod*,iaudiox5,iaudiom5,gigabeat*,sansae200*,sansac200*,iriverh10,iriverh10_5gb,mrobe100,sansaclip*,sansafuze*,sansaconnect: "SELECT = Yes" mrobe500: "PLAY, POWER, or top-right = Yes" - archosplayer: "(PLAY/STOP)" vibe500: "OK = Yes" creativezen*: "Select = Yes" </dest> @@ -357,15 +348,12 @@ user: core <source> *: "Any Other = No" - archosplayer: none </source> <dest> *: "Any Other = No" - archosplayer: none </dest> <voice> *: "" - archosplayer: none </voice> </phrase> <phrase> @@ -1273,159 +1261,6 @@ </voice> </phrase> <phrase> - id: LANG_LOUDNESS - desc: in sound_settings - user: core - <source> - *: none - masf: "Loudness" - </source> - <dest> - *: none - masf: "Loudness" - </dest> - <voice> - *: none - masf: "Loudness" - </voice> -</phrase> -<phrase> - id: LANG_AUTOVOL - desc: in sound_settings - user: core - <source> - *: none - masf: "Auto Volume" - </source> - <dest> - *: none - masf: "Auto Volume" - </dest> - <voice> - *: none - masf: "Auto Volume" - </voice> -</phrase> -<phrase> - id: LANG_DECAY - desc: in sound_settings - user: core - <source> - *: none - masf: "AV Decay Time" - </source> - <dest> - *: none - masf: "AV Decay Time" - </dest> - <voice> - *: none - masf: "" - </voice> -</phrase> -<phrase> - id: LANG_SUPERBASS - desc: in sound settings - user: core - <source> - *: none - masf: "Super Bass" - </source> - <dest> - *: none - masf: "Super Bass" - </dest> - <voice> - *: none - masf: "Super Bass" - </voice> -</phrase> -<phrase> - id: LANG_MDB_ENABLE - desc: in sound settings - user: core - <source> - *: none - masf: "MDB Enable" - </source> - <dest> - *: none - masf: "MDB Enable" - </dest> - <voice> - *: none - masf: "MDB Enable" - </voice> -</phrase> -<phrase> - id: LANG_MDB_STRENGTH - desc: in sound settings - user: core - <source> - *: none - masf: "MDB Strength" - </source> - <dest> - *: none - masf: "MDB Strength" - </dest> - <voice> - *: none - masf: "MDB Strength" - </voice> -</phrase> -<phrase> - id: LANG_MDB_HARMONICS - desc: in sound settings - user: core - <source> - *: none - masf: "MDB Harmonics" - </source> - <dest> - *: none - masf: "MDB Harmonics" - </dest> - <voice> - *: none - masf: "MDB Harmonics" - </voice> -</phrase> -<phrase> - id: LANG_MDB_CENTER - desc: in sound settings - user: core - <source> - *: none - masf: "MDB Centre Frequency" - </source> - <dest> - *: none - masf: "MDB Centre Frequency" - </dest> - <voice> - *: none - masf: "MDB Centre Frequency" - </voice> -</phrase> -<phrase> - id: LANG_MDB_SHAPE - desc: in sound settings - user: core - <source> - *: none - masf: "MDB Shape" - </source> - <dest> - *: none - masf: "MDB Shape" - </dest> - <voice> - *: none - masf: "MDB Shape" - </voice> -</phrase> -<phrase> id: LANG_GENERAL_SETTINGS desc: in the main menu user: core @@ -2322,7 +2157,6 @@ iaudiox5,iaudiom5,gigabeat*,mrobe100,samsungyh*: "Building database... %d found (LEFT to return)" iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)" gogearsa9200: "Building database... %d found (REW to return)" - archosplayer: "Building DB %d found" </source> <dest> *: "Building database... %d found (OFF to return)" @@ -2331,7 +2165,6 @@ iaudiox5,iaudiom5,gigabeat*,mrobe100,samsungyh*: "Building database... %d found (LEFT to return)" iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)" gogearsa9200: "Building database... %d found (REW to return)" - archosplayer: "Building DB %d found" </dest> <voice> *: "entries found for database" @@ -3263,23 +3096,6 @@ </voice> </phrase> <phrase> - id: LANG_BUTTON_BAR - desc: in settings menu - user: core - <source> - *: none - recorder_pad: "Button Bar" - </source> - <dest> - *: none - recorder_pad: "Button Bar" - </dest> - <voice> - *: none - recorder_pad: "Button Bar" - </voice> -</phrase> -<phrase> id: LANG_VOLUME_DISPLAY desc: Volume type title user: core @@ -3353,15 +3169,12 @@ user: core <source> *: "Peak Meter" - masd: none </source> <dest> *: "Peak Meter" - masd: none </dest> <voice> *: "Peak Meter" - masd: none </voice> </phrase> <phrase> @@ -3370,15 +3183,12 @@ user: core <source> *: "Clip Hold Time" - masd: none </source> <dest> *: "Clip Hold Time" - masd: none </dest> <voice> *: "Clip Hold Time" - masd: none </voice> </phrase> <phrase> @@ -3387,15 +3197,12 @@ user: core <source> *: "Peak Hold Time" - masd: none </source> <dest> *: "Peak Hold Time" - masd: none </dest> <voice> *: "Peak Hold Time" - masd: none </voice> </phrase> <phrase> @@ -3404,15 +3211,12 @@ user: core <source> *: "Eternal" - masd: none </source> <dest> *: "Eternal" - masd: none </dest> <voice> *: "Eternal" - masd: none </voice> </phrase> <phrase> @@ -3421,15 +3225,12 @@ user: core <source> *: "Peak Release" - masd: none </source> <dest> *: "Peak Release" - masd: none </dest> <voice> *: "Peak Release" - masd: none </voice> </phrase> <phrase> @@ -3438,15 +3239,12 @@ user: core <source> *: "Scale" - masd: none </source> <dest> *: "Scale" - masd: none </dest> <voice> *: "Scale" - masd: none </voice> </phrase> <phrase> @@ -3455,15 +3253,12 @@ user: core <source> *: "Logarithmic (dB)" - masd: none </source> <dest> *: "Logarithmic (dB)" - masd: none </dest> <voice> *: "Logarithmic decibel" - masd: none </voice> </phrase> <phrase> @@ -3472,15 +3267,12 @@ user: core <source> *: "Linear (%)" - masd: none </source> <dest> *: "Linear (%)" - masd: none </dest> <voice> *: "Linear percent" - masd: none </voice> </phrase> <phrase> @@ -3489,15 +3281,12 @@ user: core <source> *: "Minimum Of Range" - masd: none </source> <dest> *: "Minimum Of Range" - masd: none </dest> <voice> *: "Minimum Of Range" - masd: none </voice> </phrase> <phrase> @@ -3506,15 +3295,12 @@ user: core <source> *: "Maximum Of Range" - masd: none </source> <dest> *: "Maximum Of Range" - masd: none </dest> <voice> *: "Maximum Of Range" - masd: none </voice> </phrase> <phrase> @@ -5123,57 +4909,6 @@ </voice> </phrase> <phrase> - id: LANG_BUTTONBAR_MENU - desc: in button bar - user: core - <source> - *: none - radio_screen_button_bar: "Menu" - </source> - <dest> - *: none - radio_screen_button_bar: "Menu" - </dest> - <voice> - *: none - radio_screen_button_bar: "" - </voice> -</phrase> -<phrase> - id: LANG_FM_BUTTONBAR_EXIT - desc: in radio screen - user: core - <source> - *: none - radio_screen_button_bar: "Exit" - </source> - <dest> - *: none - radio_screen_button_bar: "Exit" - </dest> - <voice> - *: none - radio_screen_button_bar: "" - </voice> -</phrase> -<phrase> - id: LANG_FM_BUTTONBAR_ACTION - desc: in radio screen - user: core - <source> - *: none - radio_screen_button_bar: "Action" - </source> - <dest> - *: none - radio_screen_button_bar: "Action" - </dest> - <voice> - *: none - radio_screen_button_bar: "" - </voice> -</phrase> -<phrase> id: LANG_PRESET desc: in button bar and radio screen / menu user: core @@ -5191,40 +4926,6 @@ </voice> </phrase> <phrase> - id: LANG_FM_BUTTONBAR_ADD - desc: in radio screen - user: core - <source> - *: none - radio_screen_button_bar: "Add" - </source> - <dest> - *: none - radio_screen_button_bar: "Add" - </dest> - <voice> - *: none - radio_screen_button_bar: "" - </voice> -</phrase> -<phrase> - id: LANG_FM_BUTTONBAR_RECORD - desc: in radio screen - user: core - <source> - *: none - radio_screen_button_bar: "Record" - </source> - <dest> - *: none - radio_screen_button_bar: "Record" - </dest> - <voice> - *: none - radio_screen_button_bar: "" - </voice> -</phrase> -<phrase> id: LANG_FM_MONO_MODE desc: in radio screen user: core @@ -5777,15 +5478,15 @@ user: core <source> *: none - recording,archosplayer: "Line In" + recording: "Line In" </source> <dest> *: none - recording,archosplayer: "Line In" + recording: "Line In" </dest> <voice> *: none - recording,archosplayer: "Line In" + recording: "Line In" </voice> </phrase> <phrase> @@ -6577,23 +6278,6 @@ </voice> </phrase> <phrase> - id: LANG_SHUTDOWN - desc: in main menu - user: core - <source> - *: none - soft_shutdown: "Shut down" - </source> - <dest> - *: none - soft_shutdown: "Shut down" - </dest> - <voice> - *: none - soft_shutdown: "Shut down" - </voice> -</phrase> -<phrase> id: LANG_ROCKBOX_INFO desc: displayed topmost on the info screen and in the info menu user: core @@ -6613,11 +6297,9 @@ user: core <source> *: "Buffer:" - archosplayer: "Buf:" </source> <dest> *: "Buffer:" - archosplayer: "Buf:" </dest> <voice> *: "Buffer size" @@ -6629,12 +6311,12 @@ user: core <source> *: "Battery: %d%% %dh %dm" - archosplayer,archosrecorder,archosfmrecorder,archosrecorderv2,archosondio*,iriverifp7xx: "%d%% %dh %dm" + iriverifp7xx: "%d%% %dh %dm" iriverh10,ipodmini1g,ipodmini2g: "Batt: %d%% %dh %dm" </source> <dest> *: "Battery: %d%% %dh %dm" - archosplayer,archosrecorder,archosfmrecorder,archosrecorderv2,archosondio*,iriverifp7xx: "%d%% %dh %dm" + iriverifp7xx: "%d%% %dh %dm" iriverh10,ipodmini1g,ipodmini2g: "Batt: %d%% %dh %dm" </dest> <voice> @@ -6688,28 +6370,25 @@ </phrase> <phrase> id: LANG_DISK_NAME_MMC - desc: in info menu; name for external disk with multivolume (Ondio; keep short!) + desc: in info menu; name for external disk with multivolume (keep short!) user: core <source> *: none multivolume: "HD1" sansae200*,sansac200*,sansafuze*,sansaclipplus: "mSD:" xduoox3: "mSD2:" - archosondio*: "MMC:" </source> <dest> *: none multivolume: "HD1" sansae200*,sansac200*,sansafuze*,sansaclipplus: "MSD:" xduoox3: "mSD2:" - archosondio*: "MMC:" </dest> <voice> *: none multivolume: "H D 1" sansae200*,sansac200*,sansafuze*,sansaclipplus: "micro S D" xduoox3: "micro S D 2" - archosondio*: "M M C" </voice> </phrase> <phrase> @@ -7806,11 +7485,9 @@ user: core <source> *: "End of Song List" - archosplayer: "End of List" </source> <dest> *: "End of Song List" - archosplayer: "End of List" </dest> <voice> *: "End of Song List" @@ -8063,40 +7740,6 @@ </voice> </phrase> <phrase> - id: LANG_CONFIRM_SHUTDOWN - desc: in shutdown screen - user: core - <source> - *: none - soft_shutdown: "Press OFF to shut down" - </source> - <dest> - *: none - soft_shutdown: "Press OFF to shut down" - </dest> - <voice> - *: none - soft_shutdown: "" - </voice> -</phrase> -<phrase> - id: LANG_REMOVE_MMC - desc: before acknowledging usb in case an MMC is inserted (Ondio) - user: core - <source> - *: none - archosondio*: "Please remove inserted MMC" - </source> - <dest> - *: none - archosondio*: "Please remove inserted MMC" - </dest> - <voice> - *: none - archosondio*: "Please remove multimedia card" - </voice> -</phrase> -<phrase> id: LANG_BOOT_CHANGED desc: File browser discovered the boot file was changed user: core @@ -8126,11 +7769,11 @@ </phrase> <phrase> id: LANG_OFF_ABORT - desc: Used on archosrecorder models + desc: Used on many models user: core <source> *: "OFF to abort" - archosplayer,iriverh100,iriverh120,iriverh300: "STOP to abort" + iriverh100,iriverh120,iriverh300: "STOP to abort" ipod*: "PLAY/PAUSE to abort" iaudiox5,iaudiom5: "Long PLAY to abort" iriverh10,iriverh10_5gb,sansae200*,sansac200*,vibe500: "PREV to abort" @@ -8140,7 +7783,7 @@ </source> <dest> *: "OFF to abort" - archosplayer,iriverh100,iriverh120,iriverh300: "STOP to abort" + iriverh100,iriverh120,iriverh300: "STOP to abort" ipod*: "PLAY/PAUSE to abort" iaudiox5,iaudiom5: "Long PLAY to abort" iriverh10,iriverh10_5gb,sansae200*,sansac200*,vibe500: "PREV to abort" @@ -8210,7 +7853,7 @@ </phrase> <phrase> id: LANG_PLUGIN_WRONG_MODEL - desc: The plugin is not compatible with the archos model trying to run it + desc: The plugin is not compatible with the player model trying to run it user: core <source> *: "Incompatible model" @@ -8324,23 +7967,6 @@ </voice> </phrase> <phrase> - id: LANG_BATTERY_TOPOFF_CHARGE - desc: in info display, shows that top off charge is running Only for V1 archosrecorder - user: core - <source> - *: none - archosrecorder: "Battery: Top-Off Chg" - </source> - <dest> - *: none - archosrecorder: "Battery: Top-Off Chg" - </dest> - <voice> - *: none - archosrecorder: "Top off charge" - </voice> -</phrase> -<phrase> id: LANG_BATTERY_TRICKLE_CHARGE desc: in info display, shows that trickle charge is running user: core @@ -9804,57 +9430,6 @@ </voice> </phrase> <phrase> - id: LANG_SYSFONT_DIRBROWSE_F1 - desc: in dir browser, F1 button bar text - user: core - <source> - *: none - recorder_pad: "Menu" - </source> - <dest> - *: none - recorder_pad: "Menu" - </dest> - <voice> - *: none - recorder_pad: "" - </voice> -</phrase> -<phrase> - id: LANG_SYSFONT_DIRBROWSE_F2 - desc: in dir browser, F2 button bar text - user: core - <source> - *: none - recorder_pad: "Option" - </source> - <dest> - *: none - recorder_pad: "Option" - </dest> - <voice> - *: none - recorder_pad: "" - </voice> -</phrase> -<phrase> - id: LANG_SYSFONT_DIRBROWSE_F3 - desc: in dir browser, F3 button bar text - user: core - <source> - *: none - recorder_pad: "LCD" - </source> - <dest> - *: none - recorder_pad: "LCD" - </dest> - <voice> - *: none - recorder_pad: "" - </voice> -</phrase> -<phrase> id: LANG_SYSFONT_CHANNEL_STEREO desc: in sound_settings user: core @@ -16531,4 +16106,4 @@ id: VOICE_BAT_BENCH_KEYS *: none lcd_bitmap: "Show album and artist at the bottom" </voice> -</phrase>
\ No newline at end of file +</phrase> diff --git a/apps/main.c b/apps/main.c index 208dced923..fe15675c69 100644 --- a/apps/main.c +++ b/apps/main.c @@ -418,10 +418,6 @@ static void init(void) { int rc; bool mounted = false; -#if CONFIG_CHARGING && (CONFIG_CPU == SH7034) - /* if nobody initialized ATA before, I consider this a cold start */ - bool coldstart = (PACR2 & 0x4000) != 0; /* starting from Flash */ -#endif system_init(); core_allocator_init(); @@ -528,24 +524,6 @@ static void init(void) viewportmanager_init(); CHART("<viewportmanager_init"); -#if CONFIG_CHARGING && (CONFIG_CPU == SH7034) - /* charger_inserted() can't be used here because power_thread() - hasn't checked power_input_status() yet */ - if (coldstart && (power_input_status() & POWER_INPUT_MAIN_CHARGER) - && !global_settings.car_adapter_mode -#ifdef ATA_POWER_PLAYERSTYLE - && !ide_powered() /* relies on probing result from bootloader */ -#endif - ) - { - rc = charging_screen(); /* display a "charging" screen */ - if (rc == 1) /* charger removed */ - power_off(); - /* "On" pressed or USB connected: proceed */ - show_logo(); /* again, to provide better visual feedback */ - } -#endif - CHART(">storage_init"); rc = storage_init(); CHART("<storage_init"); diff --git a/apps/menu.c b/apps/menu.c index c1af044374..97af181267 100644 --- a/apps/menu.c +++ b/apps/menu.c @@ -60,7 +60,6 @@ /* gui api */ #include "list.h" -#include "buttonbar.h" #define MAX_MENUS 8 /* used to allow for dynamic menus */ @@ -376,12 +375,6 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, int stack_top = 0; bool in_stringlist, done = false; struct viewport *vps = NULL; -#ifdef HAVE_BUTTONBAR - struct gui_buttonbar buttonbar; - gui_buttonbar_init(&buttonbar); - gui_buttonbar_set_display(&buttonbar, &(screens[SCREEN_MAIN]) ); - gui_buttonbar_set(&buttonbar, "<<<", "", ""); -#endif menu_callback_type menu_callback = NULL; /* if hide_theme is true, assume parent has been fixed before passed into @@ -394,23 +387,10 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, gui_synclist_draw(&lists); gui_synclist_speak_item(&lists); -#ifdef HAVE_BUTTONBAR - if (!hide_theme) - { - gui_buttonbar_set(&buttonbar, "<<<", "", ""); - gui_buttonbar_draw(&buttonbar); - } -#endif while (!done) { int new_audio_status; redraw_lists = false; - if (!hide_theme) - { -#ifdef HAVE_BUTTONBAR - gui_buttonbar_draw(&buttonbar); -#endif - } #if CONFIG_CODEC == SWCODEC keyclick_set_callback(gui_synclist_keyclick_callback, &lists); #endif @@ -590,13 +570,6 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, int type = (menu->flags&MENU_TYPE_MASK); /* entering an item that may not be a list, so stop scrolling */ gui_synclist_scroll_stop(&lists); -#ifdef HAVE_BUTTONBAR - if (!hide_theme) - { - gui_buttonbar_unset(&buttonbar); - gui_buttonbar_draw(&buttonbar); - } -#endif selected = get_menu_selection(gui_synclist_get_sel_pos(&lists), menu); if (type == MT_MENU) temp = menu->submenus[selected]; @@ -700,13 +673,6 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, done = true; break; } -#ifdef HAVE_BUTTONBAR - if (!hide_theme) - { - gui_buttonbar_set(&buttonbar, "<<<", "", ""); - gui_buttonbar_draw(&buttonbar); - } -#endif } else { diff --git a/apps/menus/main_menu.c b/apps/menus/main_menu.c index ee60b37497..7f94571226 100644 --- a/apps/menus/main_menu.c +++ b/apps/menus/main_menu.c @@ -264,21 +264,10 @@ static const char* info_getname(int selected_item, void *data, return str(LANG_BATTERY_CHARGE); else #elif CONFIG_CHARGING >= CHARGING_MONITOR -#ifdef ARCHOS_RECORDER - /* Report the particular algorithm state */ - if (charge_state == CHARGING) - return str(LANG_BATTERY_CHARGE); - else if (charge_state == TOPOFF) - return str(LANG_BATTERY_TOPOFF_CHARGE); - else if (charge_state == TRICKLE) - return str(LANG_BATTERY_TRICKLE_CHARGE); - else -#else /* !ARCHOS_RECORDER */ /* Go by what power management reports */ if (charging_state()) return str(LANG_BATTERY_CHARGE); else -#endif /* ARCHOS_RECORDER */ #endif /* CONFIG_CHARGING = */ if (battery_level() >= 0) snprintf(buffer, buffer_len, str(LANG_BATTERY_TIME), @@ -394,24 +383,6 @@ static int info_speak_item(int selected_item, void * data) } else #elif CONFIG_CHARGING >= CHARGING_MONITOR -#ifdef ARCHOS_RECORDER - /* Report the particular algorithm state */ - if (charge_state == CHARGING) - { - talk_id(LANG_BATTERY_CHARGE, true); - if (battery_level() >= 0) - talk_value(battery_level(), UNIT_PERCENT, true); - } - else if (charge_state == TOPOFF) - talk_id(LANG_BATTERY_TOPOFF_CHARGE, true); - else if (charge_state == TRICKLE) - { - talk_id(LANG_BATTERY_TRICKLE_CHARGE, true); - if (battery_level() >= 0) - talk_value(battery_level(), UNIT_PERCENT, true); - } - else -#else /* !ARCHOS_RECORDER */ /* Go by what power management reports */ if (charging_state()) { @@ -420,7 +391,6 @@ static int info_speak_item(int selected_item, void * data) talk_value(battery_level(), UNIT_PERCENT, true); } else -#endif /* ARCHOS_RECORDER */ #endif /* CONFIG_CHARGING = */ if (battery_level() >= 0) { diff --git a/apps/menus/recording_menu.c b/apps/menus/recording_menu.c index 21c6cff5fb..0f24420a63 100644 --- a/apps/menus/recording_menu.c +++ b/apps/menus/recording_menu.c @@ -117,20 +117,6 @@ static void make_options_from_indexes(const struct opt_items *src_names, static int recfrequency_func(void) { -#if CONFIG_CODEC == MAS3587F - static const struct opt_items names[6] = { - { "44.1kHz", TALK_ID(44, UNIT_KHZ) }, - { "48kHz", TALK_ID(48, UNIT_KHZ) }, - { "32kHz", TALK_ID(32, UNIT_KHZ) }, - { "22.05kHz", TALK_ID(22, UNIT_KHZ) }, - { "24kHz", TALK_ID(24, UNIT_KHZ) }, - { "16kHz", TALK_ID(16, UNIT_KHZ) } - }; - return set_option(str(LANG_FREQUENCY), - &global_settings.rec_frequency, INT, - names, 6, NULL ); -#endif /* CONFIG_CODEC == MAS3587F */ - #if CONFIG_CODEC == SWCODEC static const struct opt_items names[REC_NUM_FREQ] = { REC_HAVE_96_([REC_FREQ_96] = { "96kHz", TALK_ID(96, UNIT_KHZ) },) @@ -221,11 +207,6 @@ static int recchannels_func(void) [CHN_MODE_STEREO] = { STR(LANG_CHANNEL_STEREO) }, [CHN_MODE_MONO] = { STR(LANG_CHANNEL_MONO) } }; -#if CONFIG_CODEC == MAS3587F - return set_option(str(LANG_CHANNELS), - &global_settings.rec_channels, INT, - names, CHN_NUM_MODES, NULL ); -#endif /* CONFIG_CODEC == MAS3587F */ #if CONFIG_CODEC == SWCODEC struct opt_items opts[CHN_NUM_MODES]; @@ -329,10 +310,6 @@ static int recmenu_callback(int action, } return action; } -#if CONFIG_CODEC == MAS3587F -MENUITEM_SETTING(rec_quality, &global_settings.rec_quality, NULL); -MENUITEM_SETTING(rec_editable, &global_settings.rec_editable, NULL); -#endif MENUITEM_SETTING(rec_split_type, &global_settings.rec_split_type, NULL); MENUITEM_SETTING(rec_split_method, &global_settings.rec_split_method, NULL); @@ -626,9 +603,6 @@ MENUITEM_FUNCTION(save_recpresets_item, 0, ID2P(LANG_SAVE_SETTINGS), MAKE_MENU(recording_settings_menu, ID2P(LANG_RECORDING_SETTINGS), NULL, Icon_Recording, -#if CONFIG_CODEC == MAS3587F - &rec_quality, -#endif #if CONFIG_CODEC == SWCODEC &recformat, &enc_global_config_menu_item, #endif @@ -637,9 +611,6 @@ MAKE_MENU(recording_settings_menu, ID2P(LANG_RECORDING_SETTINGS), #if CONFIG_CODEC == SWCODEC &recmonomode, #endif -#if CONFIG_CODEC == MAS3587F - &rec_editable, -#endif &filesplitoptionsmenu, &rec_prerecord_time, &clear_rec_directory_item, diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c index 2a08ab0a4e..2957b0635c 100644 --- a/apps/menus/settings_menu.c +++ b/apps/menus/settings_menu.c @@ -339,27 +339,6 @@ MAKE_MENU(keyclick_menu, ID2P(LANG_KEYCLICK), 0, Icon_NOICON, #endif #endif - -#if CONFIG_CODEC == MAS3507D -void dac_line_in(bool enable); -static int linein_callback(int action, - const struct menu_item_ex *this_item, - struct gui_synclist *this_list) -{ - (void)this_item; - (void)this_list; - switch (action) - { - case ACTION_EXIT_MENUITEM: /* on exit */ -#ifndef SIMULATOR - dac_line_in(global_settings.line_in); -#endif - break; - } - return action; -} -MENUITEM_SETTING(line_in, &global_settings.line_in, linein_callback); -#endif #if CONFIG_CHARGING MENUITEM_SETTING(car_adapter_mode, &global_settings.car_adapter_mode, NULL); MENUITEM_SETTING(car_adapter_mode_delay, &global_settings.car_adapter_mode_delay, NULL); @@ -440,9 +419,6 @@ MAKE_MENU(system_menu, ID2P(LANG_SYSTEM), #ifdef HAVE_MORSE_INPUT &morse_input, #endif -#if CONFIG_CODEC == MAS3507D - &line_in, -#endif #if CONFIG_CHARGING &car_adapter_mode_menu, #endif diff --git a/apps/menus/sound_menu.c b/apps/menus/sound_menu.c index f39d980a35..ee966ac62a 100644 --- a/apps/menus/sound_menu.c +++ b/apps/menus/sound_menu.c @@ -218,17 +218,6 @@ static int timestretch_callback(int action, &compressor_knee, &compressor_attack, &compressor_release); #endif -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - MENUITEM_SETTING(loudness, &global_settings.loudness, NULL); - MENUITEM_SETTING(avc, &global_settings.avc, NULL); - MENUITEM_SETTING(superbass, &global_settings.superbass, NULL); - MENUITEM_SETTING(mdb_enable, &global_settings.mdb_enable, NULL); - MENUITEM_SETTING(mdb_strength, &global_settings.mdb_strength, NULL); - MENUITEM_SETTING(mdb_harmonics, &global_settings.mdb_harmonics, NULL); - MENUITEM_SETTING(mdb_center, &global_settings.mdb_center, NULL); - MENUITEM_SETTING(mdb_shape, &global_settings.mdb_shape, NULL); -#endif - #ifdef HAVE_SPEAKER MENUITEM_SETTING(speaker_mode, &global_settings.speaker_mode, NULL); #endif @@ -272,10 +261,6 @@ MAKE_MENU(sound_settings, ID2P(LANG_SOUND_SETTINGS), NULL, Icon_Audio, #endif ,&compressor_menu #endif -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - ,&loudness,&avc,&superbass,&mdb_enable,&mdb_strength - ,&mdb_harmonics,&mdb_center,&mdb_shape -#endif #ifdef HAVE_SPEAKER ,&speaker_mode #endif diff --git a/apps/menus/theme_menu.c b/apps/menus/theme_menu.c index 10d1291daa..138a2f928a 100644 --- a/apps/menus/theme_menu.c +++ b/apps/menus/theme_menu.c @@ -198,22 +198,6 @@ static int statusbar_callback(int action, return statusbar_callback_ex(action, this_item, SCREEN_MAIN); } -#ifdef HAVE_BUTTONBAR -static int buttonbar_callback(int action, - const struct menu_item_ex *this_item, - struct gui_synclist *this_list) -{ - (void)this_item; - (void)this_list; - switch (action) - { - case ACTION_EXIT_MENUITEM: - viewportmanager_theme_changed(THEME_BUTTONBAR); - break; - } - return ACTION_REDRAW; -} -#endif MENUITEM_SETTING(scrollbar_item, &global_settings.scrollbar, NULL); MENUITEM_SETTING(scrollbar_width, &global_settings.scrollbar_width, NULL); MENUITEM_SETTING(statusbar, &global_settings.statusbar, @@ -222,9 +206,6 @@ MENUITEM_SETTING(statusbar, &global_settings.statusbar, MENUITEM_SETTING(remote_statusbar, &global_settings.remote_statusbar, statusbar_callback_remote); #endif -#ifdef HAVE_BUTTONBAR -MENUITEM_SETTING(buttonbar, &global_settings.buttonbar, buttonbar_callback); -#endif MENUITEM_SETTING(volume_type, &global_settings.volume_type, NULL); MENUITEM_SETTING(battery_display, &global_settings.battery_display, NULL); MAKE_MENU(bars_menu, ID2P(LANG_BARS_MENU), 0, Icon_NOICON, @@ -232,9 +213,6 @@ MAKE_MENU(bars_menu, ID2P(LANG_BARS_MENU), 0, Icon_NOICON, #ifdef HAVE_REMOTE_LCD &remote_statusbar, #endif -#if CONFIG_KEYPAD == RECORDER_PAD - &buttonbar, -#endif &volume_type #if (CONFIG_BATTERY_MEASURE != 0) , &battery_display diff --git a/apps/menus/time_menu.c b/apps/menus/time_menu.c index 811996ca40..6ebf005ffd 100644 --- a/apps/menus/time_menu.c +++ b/apps/menus/time_menu.c @@ -264,12 +264,6 @@ int time_screen(void* ignored) FOR_NB_SCREENS(i) { viewport_set_defaults(&clock_vps[i], i); -#ifdef HAVE_BUTTONBAR - if (global_settings.buttonbar) - { - clock_vps[i].height -= BUTTONBAR_HEIGHT; - } -#endif nb_lines = viewport_get_nb_lines(&clock_vps[i]); gui_synclist_set_viewport_defaults(&menu[i], i); diff --git a/apps/misc.c b/apps/misc.c index 9a9e428268..2e3292dba5 100644 --- a/apps/misc.c +++ b/apps/misc.c @@ -436,17 +436,6 @@ bool list_stop_handler(void) } } #if CONFIG_CHARGING -#if (CONFIG_KEYPAD == RECORDER_PAD) && !defined(HAVE_SW_POWEROFF) - else - { - if (charger_inserted()) - charging_splash(); - else - shutdown_screen(); /* won't return if shutdown actually happens */ - - ret = true; /* screen is dirty, caller needs to refresh */ - } -#endif #ifndef HAVE_POWEROFF_WHILE_CHARGING { static long last_off = 0; @@ -595,10 +584,6 @@ long default_event_handler_ex(long event, void (*callback)(void *), void *parame case SYS_USB_CONNECTED: if (callback != NULL) callback(parameter); -#if (CONFIG_STORAGE & STORAGE_MMC) && (defined(ARCHOS_ONDIOSP) || defined(ARCHOS_ONDIOFM)) - if (!mmc_touched() || - (mmc_remove_request() == SYS_HOTSWAP_EXTRACTED)) -#endif { system_flush(); #ifdef BOOTFILE diff --git a/apps/mpeg.c b/apps/mpeg.c index d3e0e5c137..e04c227cb1 100644 --- a/apps/mpeg.c +++ b/apps/mpeg.c @@ -46,7 +46,6 @@ #include "settings.h" #ifndef SIMULATOR #include "i2c.h" -#include "mas35xx.h" #include "system.h" #include "usb.h" #include "file.h" @@ -81,14 +80,6 @@ extern unsigned long mas_version_code; #endif -#if CONFIG_CODEC == MAS3587F -extern enum /* from mp3_playback.c */ -{ - MPEG_DECODER, - MPEG_ENCODER -} mpeg_mode; -#endif /* CONFIG_CODEC == MAS3587F */ - #define MPEG_PLAY 1 #define MPEG_STOP 2 #define MPEG_PAUSE 3 @@ -184,61 +175,6 @@ struct audio_resume_info unsigned long offset; }; -#if CONFIG_CODEC == MAS3587F -static char recording_filename[MAX_PATH]; /* argument to thread */ -static char delayed_filename[MAX_PATH]; /* internal copy of above */ - -static char xing_buffer[MAX_XING_HEADER_SIZE]; - -static bool init_recording_done; -static bool init_playback_done; -static bool prerecording; /* True if prerecording is enabled */ -static bool is_prerecording; /* True if we are prerecording */ -static bool is_recording; /* We are recording */ - -static enum { - NOT_SAVING = 0, /* reasons to save data, sorted by importance */ - BUFFER_FULL, - NEW_FILE, - STOP_RECORDING -} saving_status; - -static int rec_frequency_index; /* For create_xing_header() calls */ -static int rec_version_index; /* For create_xing_header() calls */ - -struct prerecord_info { - int mempos; - unsigned long framecount; -}; - -static struct prerecord_info prerecord_buffer[MPEG_MAX_PRERECORD_SECONDS]; -static int prerecord_index; /* Current index in the prerecord buffer */ -static int prerecording_max_seconds; /* Max number of seconds to store */ -static int prerecord_count; /* Number of seconds in the prerecord buffer */ -static int prerecord_timeout; /* The tick count of the next prerecord data - store */ - -static unsigned long record_start_time; /* Value of current_tick when recording - was started */ -static unsigned long pause_start_time; /* Value of current_tick when pause was - started */ -static unsigned long last_rec_time; -static unsigned long num_rec_bytes; -static unsigned long last_rec_bytes; -static unsigned long frame_count_start; -static unsigned long frame_count_end; -static unsigned long saved_header = 0; - -/* Shadow MAS registers */ -unsigned long shadow_encoder_control = 0; -#endif /* CONFIG_CODEC == MAS3587F */ - -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -unsigned long shadow_io_control_main = 0; -unsigned long shadow_soft_mute = 0; -unsigned shadow_codec_reg0; -#endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ - #ifdef HAVE_RECORDING static const unsigned char empty_id3_header[] = { @@ -253,18 +189,6 @@ static int get_playable_space(void); static int get_unswapped_space(void); #endif /* !SIMULATOR */ -#if (CONFIG_CODEC == MAS3587F) && !defined(SIMULATOR) -static void init_recording(void); -static void prepend_header(void); -static void update_header(void); -static void start_prerecording(void); -static void start_recording(void); -static void stop_recording(void); -static int get_unsaved_space(void); -static void pause_recording(void); -static void resume_recording(void); -#endif /* (CONFIG_CODEC == MAS3587F) && !defined(SIMULATOR) */ - static void audio_reset_buffer_noalloc(void* buf, size_t bufsize); static void audio_reset_buffer(void); @@ -540,12 +464,6 @@ static int shrink_callback(int handle, unsigned hints, void* start, size_t old_s size_t wanted_size = (hints & BUFLIB_SHRINK_SIZE_MASK); ssize_t size = (ssize_t)old_size - wanted_size; -#if !defined(SIMULATOR) && (CONFIG_CODEC == MAS3587F) - /* FIXME: Cannot give the buffer during recording yet */ - if (is_recording) - return BUFLIB_CB_CANNOT_SHRINK; -#endif - /* keep at least 256K for the buffering */ if ((size - extradata_size) < AUDIO_BUFFER_RESERVE) { @@ -677,9 +595,6 @@ void audio_get_debugdata(struct audio_debug *dbgdata) dbgdata->last_dma_chunk_size = last_dma_chunk_size; -#if CONFIG_CPU == SH7034 - dbgdata->dma_on = (SCR0 & 0x80) != 0; -#endif dbgdata->playing = playing; dbgdata->play_pending = play_pending; dbgdata->is_playing = is_playing; @@ -758,108 +673,6 @@ static int get_unswapped_space(void) return space; } -#if CONFIG_CODEC == MAS3587F -static int get_unsaved_space(void) -{ - int space = audiobuf_write - audiobuf_read; - if (space < 0) - space += audiobuflen; - return space; -} - -static void drain_dma_buffer(void) -{ - while (PBDRH & 0x40) - { - xor_b(0x08, &PADRH); - - while (PBDRH & 0x80); - - xor_b(0x08, &PADRH); - - while (!(PBDRH & 0x80)); - } -} - -#ifdef DEBUG -static long timing_info_index = 0; -static long timing_info[1024]; -#endif /* DEBUG */ - -void rec_tick (void) __attribute__ ((section (".icode"))); -void rec_tick(void) -{ - int i; - int delay; - char data; - - if(is_recording && (PBDRH & 0x40)) - { -#ifdef DEBUG - timing_info[timing_info_index++] = current_tick; - TCNT2 = 0; -#endif /* DEBUG */ - /* Note: Although this loop is run in interrupt context, further - * optimisation will do no good. The MAS would then deliver bad - * frames occasionally, as observed in extended experiments. */ - i = 0; - while (PBDRH & 0x40) /* We try to read as long as EOD is high */ - { - xor_b(0x08, &PADRH); /* Set PR active, independent of polarity */ - - delay = 100; - while (PBDRH & 0x80) /* Wait until /RTW becomes active */ - { - if (--delay <= 0) /* Bail out if we have to wait too long */ - { /* i.e. the MAS doesn't want to talk to us */ - xor_b(0x08, &PADRH); /* Set PR inactive */ - goto transfer_end; /* and get out of here */ - } - } - - data = *(unsigned char *)0x04000000; /* read data byte */ - - xor_b(0x08, &PADRH); /* Set PR inactive */ - - mpeg_audiobuf[audiobuf_write++] = data; - - if (audiobuf_write >= audiobuflen) - audiobuf_write = 0; - - i++; - } - transfer_end: - -#ifdef DEBUG - timing_info[timing_info_index++] = TCNT2 + (i << 16); - timing_info_index &= 0x3ff; -#endif /* DEBUG */ - - num_rec_bytes += i; - - if(is_prerecording) - { - if(TIME_AFTER(current_tick, prerecord_timeout)) - { - prerecord_timeout = current_tick + HZ; - queue_post(&mpeg_queue, MPEG_PRERECORDING_TICK, 0); - } - } - else - { - /* Signal to save the data if we are running out of buffer - space */ - if (audiobuflen - get_unsaved_space() < MPEG_RECORDING_LOW_WATER - && saving_status == NOT_SAVING) - { - saving_status = BUFFER_FULL; - queue_post(&mpeg_queue, MPEG_SAVE_DATA, 0); - } - } - } -} -#endif /* CONFIG_CODEC == MAS3587F */ - void playback_tick(void) { struct trackdata *ptd = get_trackdata(0); @@ -1158,11 +971,6 @@ static void track_change(void) { DEBUGF("Track change\n"); -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - /* Reset the AVC */ - sound_set_avc(-1); -#endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ - if (num_tracks_in_memory() > 0) { remove_current_tag(); @@ -1293,13 +1101,6 @@ static void mpeg_thread(void) int amount_to_read; int t1, t2; unsigned long start_elapsed, start_offset; -#if CONFIG_CODEC == MAS3587F - int amount_to_save; - int save_endpos = 0; - int rc; - int level; - long offset; -#endif /* CONFIG_CODEC == MAS3587F */ is_playing = false; play_pending = false; @@ -1308,10 +1109,6 @@ static void mpeg_thread(void) while(1) { -#if CONFIG_CODEC == MAS3587F - if(mpeg_mode == MPEG_DECODER) - { -#endif /* CONFIG_CODEC == MAS3587F */ yield(); /* Swap if necessary, and don't block on the queue_wait() */ @@ -1836,321 +1633,11 @@ static void mpeg_thread(void) break; #endif /* !USB_NONE */ -#if CONFIG_CODEC == MAS3587F - case MPEG_INIT_RECORDING: - init_recording(); - init_recording_done = true; - break; -#endif /* CONFIG_CODEC == MAS3587F */ - case SYS_TIMEOUT: if (playing) playlist_update_resume_info(audio_current_track()); break; } -#if CONFIG_CODEC == MAS3587F - } - else - { - queue_wait(&mpeg_queue, &ev); - switch(ev.id) - { - case MPEG_RECORD: - if (is_prerecording) - { - int startpos; - - /* Go back prerecord_count seconds in the buffer */ - startpos = prerecord_index - prerecord_count; - if(startpos < 0) - startpos += prerecording_max_seconds; - - /* Read the position data from the prerecord buffer */ - frame_count_start = prerecord_buffer[startpos].framecount; - startpos = prerecord_buffer[startpos].mempos; - - DEBUGF("Start looking at address %x (%x)\n", - mpeg_audiobuf+startpos, startpos); - - saved_header = mpeg_get_last_header(); - - mem_find_next_frame(startpos, &offset, 1800, - saved_header, mpeg_audiobuf, - audiobuflen); - - audiobuf_read = startpos + offset; - if(audiobuf_read >= audiobuflen) - audiobuf_read -= audiobuflen; - - DEBUGF("New audiobuf_read address: %x (%x)\n", - mpeg_audiobuf+audiobuf_read, audiobuf_read); - - level = disable_irq_save(); - num_rec_bytes = get_unsaved_space(); - restore_irq(level); - } - else - { - frame_count_start = 0; - num_rec_bytes = 0; - audiobuf_read = MPEG_RESERVED_HEADER_SPACE; - audiobuf_write = MPEG_RESERVED_HEADER_SPACE; - } - - prepend_header(); - DEBUGF("Recording...\n"); - start_recording(); - - /* Wait until at least one frame is encoded and get the - frame header, for later use by the Xing header - generation */ - sleep(HZ/5); - saved_header = mpeg_get_last_header(); - - /* delayed until buffer is saved, don't open yet */ - strcpy(delayed_filename, recording_filename); - mpeg_file = -1; - - break; - - case MPEG_STOP: - DEBUGF("MPEG_STOP\n"); - - stop_recording(); - - /* Save the remaining data in the buffer */ - save_endpos = audiobuf_write; - saving_status = STOP_RECORDING; - queue_post(&mpeg_queue, MPEG_SAVE_DATA, 0); - break; - - case MPEG_STOP_DONE: - DEBUGF("MPEG_STOP_DONE\n"); - - if (mpeg_file >= 0) - close(mpeg_file); - mpeg_file = -1; - - update_header(); -#ifdef DEBUG1 - { - int i; - for(i = 0;i < 512;i++) - { - DEBUGF("%d - %d us (%d bytes)\n", - timing_info[i*2], - (timing_info[i*2+1] & 0xffff) * - 10000 / 13824, - timing_info[i*2+1] >> 16); - } - } -#endif /* DEBUG1 */ - - if (prerecording) - { - start_prerecording(); - } - mpeg_stop_done = true; - break; - - case MPEG_NEW_FILE: - /* Bail out when a more important save is happening */ - if (saving_status > NEW_FILE) - break; - - /* Make sure we have at least one complete frame - in the buffer. If we haven't recorded a single - frame within 200ms, the MAS is probably not recording - anything, and we bail out. */ - amount_to_save = get_unsaved_space(); - if (amount_to_save < 1800) - { - sleep(HZ/5); - amount_to_save = get_unsaved_space(); - } - - mas_readmem(MAS_BANK_D0, MAS_D0_MPEG_FRAME_COUNT, - &frame_count_end, 1); - - last_rec_time = current_tick - record_start_time; - record_start_time = current_tick; - if (paused) - pause_start_time = record_start_time; - - /* capture all values at one point */ - level = disable_irq_save(); - save_endpos = audiobuf_write; - last_rec_bytes = num_rec_bytes; - num_rec_bytes = 0; - restore_irq(level); - - if (amount_to_save >= 1800) - { - /* Now find a frame boundary to split at */ - save_endpos -= 1800; - if (save_endpos < 0) - save_endpos += audiobuflen; - - rc = mem_find_next_frame(save_endpos, &offset, 1800, - saved_header, mpeg_audiobuf, - audiobuflen); - if (!rc) /* No header found, save whole buffer */ - offset = 1800; - - save_endpos += offset; - if (save_endpos >= audiobuflen) - save_endpos -= audiobuflen; - - last_rec_bytes += offset - 1800; - level = disable_irq_save(); - num_rec_bytes += 1800 - offset; - restore_irq(level); - } - - saving_status = NEW_FILE; - queue_post(&mpeg_queue, MPEG_SAVE_DATA, 0); - break; - - case MPEG_SAVE_DATA: - if (saving_status == BUFFER_FULL) - save_endpos = audiobuf_write; - - if (mpeg_file < 0) /* delayed file open */ - { - mpeg_file = open(delayed_filename, O_WRONLY|O_CREAT, 0666); - - if (mpeg_file < 0) - panicf("recfile: %d", mpeg_file); - } - - amount_to_save = save_endpos - audiobuf_read; - if (amount_to_save < 0) - amount_to_save += audiobuflen; - - amount_to_save = MIN(amount_to_save, - audiobuflen - audiobuf_read); -#if (CONFIG_STORAGE & STORAGE_MMC) - /* MMC is slow, so don't save too large chunks at once */ - amount_to_save = MIN(0x40000, amount_to_save); -#elif MEMORYSIZE == 8 - amount_to_save = MIN(0x100000, amount_to_save); -#endif - rc = write(mpeg_file, mpeg_audiobuf + audiobuf_read, - amount_to_save); - if (rc < 0) - { - if (errno == ENOSPC) - { - mpeg_errno = AUDIOERR_DISK_FULL; - stop_recording(); - queue_post(&mpeg_queue, MPEG_STOP_DONE, 0); - /* will close the file */ - break; - } - else - panicf("rec wrt: %d", rc); - } - - audiobuf_read += amount_to_save; - if (audiobuf_read >= audiobuflen) - audiobuf_read = 0; - - if (audiobuf_read == save_endpos) /* all saved */ - { - switch (saving_status) - { - case BUFFER_FULL: - rc = fsync(mpeg_file); - if (rc < 0) - panicf("rec fls: %d", rc); - storage_sleep(); - break; - - case NEW_FILE: - /* Close the current file */ - rc = close(mpeg_file); - if (rc < 0) - panicf("rec cls: %d", rc); - mpeg_file = -1; - update_header(); - storage_sleep(); - - /* copy new filename */ - strcpy(delayed_filename, recording_filename); - prepend_header(); - frame_count_start = frame_count_end; - break; - - case STOP_RECORDING: - queue_post(&mpeg_queue, MPEG_STOP_DONE, 0); - /* will close the file */ - break; - - default: - break; - } - saving_status = NOT_SAVING; - } - else /* tell ourselves to save the next chunk */ - queue_post(&mpeg_queue, MPEG_SAVE_DATA, 0); - - break; - - case MPEG_PRERECORDING_TICK: - if(!is_prerecording) - break; - - /* Store the write pointer every second */ - prerecord_buffer[prerecord_index].mempos = audiobuf_write; - mas_readmem(MAS_BANK_D0, MAS_D0_MPEG_FRAME_COUNT, - &prerecord_buffer[prerecord_index].framecount, 1); - - /* Wrap if necessary */ - if(++prerecord_index == prerecording_max_seconds) - prerecord_index = 0; - - /* Update the number of seconds recorded */ - if(prerecord_count < prerecording_max_seconds) - prerecord_count++; - break; - - case MPEG_INIT_PLAYBACK: - /* Stop the prerecording */ - stop_recording(); - reset_mp3_buffer(); - mp3_play_init(); - init_playback_done = true; - break; - - case MPEG_PAUSE_RECORDING: - pause_recording(); - break; - - case MPEG_RESUME_RECORDING: - resume_recording(); - break; - - case SYS_USB_CONNECTED: - /* We can safely go to USB mode if no recording - is taking place */ - if((!is_recording || is_prerecording) && mpeg_stop_done) - { - /* Even if we aren't recording, we still call this - function, to put the MAS in monitoring mode, - to save power. */ - stop_recording(); - - /* Tell the USB thread that we are safe */ - DEBUGF("mpeg_thread got SYS_USB_CONNECTED\n"); - usb_acknowledge(SYS_USB_CONNECTED_ACK); - - /* Wait until the USB cable is extracted again */ - usb_wait_for_disconnect(&mpeg_queue); - } - break; - } - } -#endif /* CONFIG_CODEC == MAS3587F */ } } #endif /* !SIMULATOR */ @@ -2195,557 +1682,6 @@ struct mp3entry* audio_next_track(void) #endif /* !SIMULATOR */ } -#if CONFIG_CODEC == MAS3587F -#ifndef SIMULATOR -void audio_init_playback(void) -{ - init_playback_done = false; - queue_post(&mpeg_queue, MPEG_INIT_PLAYBACK, 0); - - while(!init_playback_done) - sleep(1); -} - - -/**************************************************************************** - * Recording functions - ***************************************************************************/ -void audio_init_recording(void) -{ - init_recording_done = false; - queue_post(&mpeg_queue, MPEG_INIT_RECORDING, 0); - - while(!init_recording_done) - sleep(1); -} - -static void init_recording(void) -{ - unsigned long val; - int rc; - - /* Disable IRQ6 */ - IPRB &= 0xff0f; - - stop_playing(); - is_playing = false; - paused = false; - - /* Init the recording variables */ - is_recording = false; - is_prerecording = false; - - /* Have to grab the audio buffer in case voice had it */ - audio_reset_buffer(); - - mpeg_stop_done = true; - - mas_reset(); - - /* Enable the audio CODEC and the DSP core, max analog voltage range */ - rc = mas_direct_config_write(MAS_CONTROL, 0x8c00); - if(rc < 0) - panicf("mas_ctrl_w: %d", rc); - - /* Stop the current application */ - val = 0; - mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); - do - { - mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); - } while(val); - - /* Perform black magic as described by the data sheet */ - if((mas_version_code & 0x0fff) == 0x0102) - { - DEBUGF("Performing MAS black magic for B2 version\n"); - mas_writereg(0xa3, 0x98); - mas_writereg(0x94, 0xfffff); - val = 0; - mas_writemem(MAS_BANK_D1, 0, &val, 1); - mas_writereg(0xa3, 0x90); - } - - /* Enable A/D Converters */ - shadow_codec_reg0 = 0xcccd; - mas_codec_writereg(0x0, shadow_codec_reg0); - - /* Copy left channel to right (mono mode) */ - mas_codec_writereg(8, 0x8000); - - /* ADC scale 0%, DSP scale 100% - We use the DSP output for monitoring, because it works with all - sources including S/PDIF */ - mas_codec_writereg(6, 0x0000); - mas_codec_writereg(7, 0x4000); - - /* No mute */ - shadow_soft_mute = 0; - mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute, 1); - -#ifdef HAVE_SPDIF_OUT - val = 0x09; /* Disable SDO and SDI, low impedance S/PDIF outputs */ -#else - val = 0x2d; /* Disable SDO and SDI, disable S/PDIF output */ -#endif - mas_writemem(MAS_BANK_D0, MAS_D0_INTERFACE_CONTROL, &val, 1); - - /* Set Demand mode, monitoring OFF and validate all settings */ - shadow_io_control_main = 0x125; - mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); - - /* Start the encoder application */ - val = 0x40; - mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); - do - { - mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); - } while(!(val & 0x40)); - - /* We have started the recording application with monitoring OFF. - This is because we want to record at least one frame to fill the DMA - buffer, because the silly MAS will not negate EOD until at least one - DMA transfer has taken place. - Now let's wait for some data to be encoded. */ - sleep(HZ/5); - - /* Now set it to Monitoring mode as default, saves power */ - shadow_io_control_main = 0x525; - mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); - - /* Wait until the DSP has accepted the settings */ - do - { - mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); - } while(val & 1); - - drain_dma_buffer(); - mpeg_mode = MPEG_ENCODER; - - DEBUGF("MAS Recording application started\n"); - - /* At this point, all settings are the reset MAS defaults, next thing is to - call mpeg_set_recording_options(). */ -} - -void audio_record(const char *filename) -{ - mpeg_errno = 0; - - strlcpy(recording_filename, filename, MAX_PATH); - - queue_post(&mpeg_queue, MPEG_RECORD, 0); -} - -void audio_pause_recording(void) -{ - queue_post(&mpeg_queue, MPEG_PAUSE_RECORDING, 0); -} - -void audio_resume_recording(void) -{ - queue_post(&mpeg_queue, MPEG_RESUME_RECORDING, 0); -} - -static void prepend_header(void) -{ - int startpos; - unsigned i; - - /* Make room for header */ - audiobuf_read -= MPEG_RESERVED_HEADER_SPACE; - if(audiobuf_read < 0) - { - /* Clear the bottom half */ - memset(mpeg_audiobuf, 0, audiobuf_read + MPEG_RESERVED_HEADER_SPACE); - - /* And the top half */ - audiobuf_read += audiobuflen; - memset(mpeg_audiobuf + audiobuf_read, 0, audiobuflen - audiobuf_read); - } - else - { - memset(mpeg_audiobuf + audiobuf_read, 0, MPEG_RESERVED_HEADER_SPACE); - } - /* Copy the empty ID3 header */ - startpos = audiobuf_read; - for(i = 0; i < sizeof(empty_id3_header); i++) - { - mpeg_audiobuf[startpos++] = empty_id3_header[i]; - if(startpos == audiobuflen) - startpos = 0; - } -} - -static void update_header(void) -{ - int fd, framelen; - unsigned long frames; - - if (last_rec_bytes > 0) - { - /* Create the Xing header */ - fd = open(delayed_filename, O_RDWR); - if (fd < 0) - panicf("rec upd: %d (%s)", fd, recording_filename); - - frames = frame_count_end - frame_count_start; - /* If the number of recorded frames has reached 0x7ffff, - we can no longer trust it */ - if (frame_count_end == 0x7ffff) - frames = 0; - - /* saved_header is saved right before stopping the MAS */ - framelen = create_xing_header(fd, 0, last_rec_bytes, xing_buffer, - frames, last_rec_time * (1000/HZ), - saved_header, NULL, false, - mpeg_audiobuf, audiobuflen); - - lseek(fd, MPEG_RESERVED_HEADER_SPACE - framelen, SEEK_SET); - write(fd, xing_buffer, framelen); - close(fd); - } -} - -static void start_prerecording(void) -{ - unsigned long val; - - DEBUGF("Starting prerecording\n"); - - prerecord_index = 0; - prerecord_count = 0; - prerecord_timeout = current_tick + HZ; - memset(prerecord_buffer, 0, sizeof(prerecord_buffer)); - reset_mp3_buffer(); - - is_prerecording = true; - - /* Stop monitoring and start the encoder */ - shadow_io_control_main &= ~(1 << 10); - mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); - DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); - - /* Wait until the DSP has accepted the settings */ - do - { - mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); - } while(val & 1); - - is_recording = true; - saving_status = NOT_SAVING; - - demand_irq_enable(true); -} - -static void start_recording(void) -{ - unsigned long val; - - if(is_prerecording) - { - /* This will make the IRQ handler start recording - for real, i.e send MPEG_SAVE_DATA messages when - the buffer is full */ - is_prerecording = false; - } - else - { - /* If prerecording is off, we need to stop the monitoring - and start the encoder */ - shadow_io_control_main &= ~(1 << 10); - mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); - DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); - - /* Wait until the DSP has accepted the settings */ - do - { - mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); - } while(val & 1); - } - - is_recording = true; - saving_status = NOT_SAVING; - paused = false; - - /* Store the current time */ - if(prerecording) - record_start_time = current_tick - prerecord_count * HZ; - else - record_start_time = current_tick; - - pause_start_time = 0; - - demand_irq_enable(true); -} - -static void pause_recording(void) -{ - pause_start_time = current_tick; - - /* Set the pause bit */ - shadow_soft_mute |= 2; - mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute, 1); - - paused = true; -} - -static void resume_recording(void) -{ - paused = false; - - /* Clear the pause bit */ - shadow_soft_mute &= ~2; - mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute, 1); - - /* Compensate for the time we have been paused */ - if(pause_start_time) - { - record_start_time = - current_tick - (pause_start_time - record_start_time); - pause_start_time = 0; - } -} - -static void stop_recording(void) -{ - unsigned long val; - - /* Let it finish the last frame */ - if(!paused) - pause_recording(); - sleep(HZ/5); - - demand_irq_enable(false); - - is_recording = false; - is_prerecording = false; - - last_rec_bytes = num_rec_bytes; - mas_readmem(MAS_BANK_D0, MAS_D0_MPEG_FRAME_COUNT, &frame_count_end, 1); - last_rec_time = current_tick - record_start_time; - - /* Start monitoring */ - shadow_io_control_main |= (1 << 10); - mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); - DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); - - /* Wait until the DSP has accepted the settings */ - do - { - mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); - } while(val & 1); - - resume_recording(); -} - -void audio_set_recording_options(struct audio_recording_options *options) -{ - bool is_mpeg1; - - is_mpeg1 = (options->rec_frequency < 3); - - rec_version_index = is_mpeg1?3:2; - rec_frequency_index = options->rec_frequency % 3; - - shadow_encoder_control = (options->rec_quality << 17) | - (rec_frequency_index << 10) | - ((is_mpeg1?1:0) << 9) | - (((options->rec_channels * 2 + 1) & 3) << 6) | - (1 << 5) /* MS-stereo */ | - (1 << 2) /* Is an original */; - mas_writemem(MAS_BANK_D0, MAS_D0_ENCODER_CONTROL, &shadow_encoder_control,1); - - DEBUGF("mas_writemem(MAS_BANK_D0, ENCODER_CONTROL, %x)\n", shadow_encoder_control); - -#if CONFIG_TUNER & S1A0903X01 - /* Store the (unpitched) MAS PLL frequency. Used for avoiding FM - interference with the Samsung tuner. */ - if (rec_frequency_index) - mas_store_pllfreq(24576000); - else - mas_store_pllfreq(22579000); -#endif - - shadow_soft_mute = options->rec_editable?4:0; - mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute,1); - - DEBUGF("mas_writemem(MAS_BANK_D0, SOFT_MUTE, %x)\n", shadow_soft_mute); - - shadow_io_control_main = ((1 << 10) | /* Monitoring ON */ - ((options->rec_source < 2)?1:2) << 8) | /* Input select */ - (1 << 5) | /* SDO strobe invert */ - ((is_mpeg1?0:1) << 3) | - (1 << 2) | /* Inverted SIBC clock signal */ - 1; /* Validate */ - mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main,1); - - DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); - - if(options->rec_source == AUDIO_SRC_MIC) - { - /* Copy left channel to right (mono mode) */ - mas_codec_writereg(8, 0x8000); - } - else - { - /* Stereo input mode */ - mas_codec_writereg(8, 0); - } - - prerecording_max_seconds = options->rec_prerecord_time; - if(prerecording_max_seconds) - { - prerecording = true; - start_prerecording(); - } - else - { - prerecording = false; - is_prerecording = false; - is_recording = false; - } -} - -/* If use_mic is true, the left gain is used */ -void audio_set_recording_gain(int left, int right, int type) -{ - /* Enable both left and right A/D */ - shadow_codec_reg0 = (left << 12) | - (right << 8) | - (left << 4) | - (type==AUDIO_GAIN_MIC?0x0008:0) | /* Connect left A/D to mic */ - 0x0007; - mas_codec_writereg(0x0, shadow_codec_reg0); -} - -/* try to make some kind of beep, also in recording mode */ -void audio_beep(int duration) -{ - long starttick = current_tick; - do - { /* toggle bit 0 of codec register 0, toggling the DAC off & on. - * While this is still audible even without an external signal, - * it doesn't affect the (pre-)recording. */ - mas_codec_writereg(0, shadow_codec_reg0 ^ 1); - mas_codec_writereg(0, shadow_codec_reg0); - yield(); - } - while (current_tick - starttick < duration); -} - -void audio_new_file(const char *filename) -{ - mpeg_errno = 0; - - strlcpy(recording_filename, filename, MAX_PATH); - - queue_post(&mpeg_queue, MPEG_NEW_FILE, 0); -} - -unsigned long audio_recorded_time(void) -{ - if(is_prerecording) - return prerecord_count * HZ; - - if(is_recording) - { - if(paused) - return pause_start_time - record_start_time; - else - return current_tick - record_start_time; - } - - return 0; -} - -unsigned long audio_num_recorded_bytes(void) -{ - int num_bytes; - int index; - - if(is_recording) - { - if(is_prerecording) - { - index = prerecord_index - prerecord_count; - if(index < 0) - index += prerecording_max_seconds; - - num_bytes = audiobuf_write - prerecord_buffer[index].mempos; - if(num_bytes < 0) - num_bytes += audiobuflen; - - return num_bytes; - } - else - return num_rec_bytes; - } - else - return 0; -} - -#else /* SIMULATOR */ - -/* dummies coming up */ - -void audio_init_playback(void) -{ - /* a dummy */ -} -unsigned long audio_recorded_time(void) -{ - /* a dummy */ - return 0; -} -void audio_beep(int duration) -{ - /* a dummy */ - (void)duration; -} -void audio_pause_recording(void) -{ - /* a dummy */ -} -void audio_resume_recording(void) -{ - /* a dummy */ -} -unsigned long audio_num_recorded_bytes(void) -{ - /* a dummy */ - return 0; -} -void audio_record(const char *filename) -{ - /* a dummy */ - (void)filename; -} -void audio_new_file(const char *filename) -{ - /* a dummy */ - (void)filename; -} - -void audio_set_recording_gain(int left, int right, int type) -{ - /* a dummy */ - (void)left; - (void)right; - (void)type; -} -void audio_init_recording(void) -{ - /* a dummy */ -} -void audio_set_recording_options(struct audio_recording_options *options) -{ - /* a dummy */ - (void)options; -} -#endif /* SIMULATOR */ -#endif /* CONFIG_CODEC == MAS3587F */ - size_t audio_buffer_size(void) { if (audiobuf_handle > 0) @@ -2977,14 +1913,6 @@ int audio_status(void) if(paused) ret |= AUDIO_STATUS_PAUSE; -#if (CONFIG_CODEC == MAS3587F) && !defined(SIMULATOR) - if(is_recording && !is_prerecording) - ret |= AUDIO_STATUS_RECORD; - - if(is_prerecording) - ret |= AUDIO_STATUS_PRERECORD; -#endif /* CONFIG_CODEC == MAS3587F */ - if(mpeg_errno) ret |= AUDIO_STATUS_ERROR; @@ -3039,13 +1967,6 @@ void audio_init(void) memset(trackdata, 0, sizeof(trackdata)); -#if (CONFIG_CODEC == MAS3587F) && !defined(SIMULATOR) - if (HW_MASK & PR_ACTIVE_HIGH) - and_b(~0x08, &PADRH); - else - or_b(0x08, &PADRH); -#endif /* CONFIG_CODEC == MAS3587F */ - #ifdef DEBUG #ifndef SIMULATOR dbg_timer_start(); diff --git a/apps/plugin.c b/apps/plugin.c index 4293d861f9..959232ddb7 100644 --- a/apps/plugin.c +++ b/apps/plugin.c @@ -318,13 +318,9 @@ static const struct plugin_api rockbox_api = { viewport_set_fullscreen, #endif +#ifdef HAVE_BACKLIGHT /* lcd backlight */ - /* The backlight_* functions must be present in the API regardless whether - * HAVE_BACKLIGHT is defined or not. The reason is that the stock Ondio has - * no backlight but can be modded to have backlight (it's prepared on the - * PCB). This makes backlight an all-target feature API wise, and keeps API - * compatible between stock and modded Ondio. - * For OLED targets like the Sansa Clip, the backlight_* functions control + /* For OLED targets like the Sansa Clip, the backlight_* functions control * the display enable, which has essentially the same effect. */ is_backlight_on, backlight_on, @@ -346,6 +342,7 @@ static const struct plugin_api rockbox_api = { remote_backlight_set_timeout_plugged, #endif #endif /* HAVE_REMOTE_LCD */ +#endif /* HAVE_BACKLIGHT */ /* list */ gui_synclist_init, @@ -615,8 +612,7 @@ static const struct plugin_api rockbox_api = { #ifdef AUDIOHW_HAVE_EQ sound_enum_hw_eq_band_setting, #endif -#if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \ - (CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHCONTROL) +#if ((CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHCONTROL) sound_set_pitch, #endif #if (CONFIG_PLATFORM & PLATFORM_NATIVE) @@ -684,13 +680,6 @@ static const struct plugin_api rockbox_api = { keyclick_click, #endif /* CONFIG_CODEC == SWCODEC */ -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - peak_meter_scale_value, - peak_meter_set_use_dbfs, - peak_meter_get_use_dbfs, -#endif - - /* metadata */ get_metadata, mp3info, @@ -742,21 +731,6 @@ static const struct plugin_api rockbox_api = { mpeg_get_last_header, #endif -#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC) - /* MAS communication */ - mas_readmem, - mas_writemem, - mas_readreg, - mas_writereg, -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - mas_codec_writereg, - mas_codec_readreg, - i2c_begin, - i2c_end, - i2c_write, -#endif -#endif /* !SIMULATOR && CONFIG_CODEC != SWCODEC */ - /* menu */ root_menu_get_options, do_menu, diff --git a/apps/plugin.h b/apps/plugin.h index acaee27687..ecc662cb7f 100644 --- a/apps/plugin.h +++ b/apps/plugin.h @@ -88,8 +88,6 @@ void* plugin_get_buffer(size_t *buffer_size); #ifdef HAVE_RECORDING #include "recording.h" #endif -#else -#include "mas35xx.h" #endif /* CONFIG_CODEC == SWCODEC */ #include "settings.h" #include "timer.h" @@ -355,13 +353,9 @@ struct plugin_api { const enum screen_type screen); #endif +#ifdef HAVE_BACKLIGHT /* lcd backlight */ - /* The backlight_* functions must be present in the API regardless whether - * HAVE_BACKLIGHT is defined or not. The reason is that the stock Ondio has - * no backlight but can be modded to have backlight (it's prepared on the - * PCB). This makes backlight an all-target feature API wise, and keeps API - * compatible between stock and modded Ondio. - * For OLED targets like the Sansa Clip, the backlight_* functions control + /* For OLED targets like the Sansa Clip, the backlight_* functions control * the display enable, which has essentially the same effect. */ bool (*is_backlight_on)(bool ignore_always_off); void (*backlight_on)(void); @@ -383,6 +377,7 @@ struct plugin_api { void (*remote_backlight_set_timeout_plugged)(int index); #endif #endif /* HAVE_REMOTE_LCD */ +#endif /* HAVE_BACKLIGHT */ /* list */ void (*gui_synclist_init)(struct gui_synclist * lists, @@ -689,8 +684,7 @@ struct plugin_api { int (*sound_enum_hw_eq_band_setting)(unsigned int band, unsigned int band_setting); #endif /* AUDIOHW_HAVE_EQ */ -#if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \ - (CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHCONTROL) +#if ((CONFIG_CODEC == SWCODEC) && defined (HAVE_PITCHCONTROL)) void (*sound_set_pitch)(int32_t pitch); #endif #if (CONFIG_PLATFORM & PLATFORM_NATIVE) @@ -771,13 +765,6 @@ struct plugin_api { void (*keyclick_click)(bool rawbutton, int action); #endif /* CONFIG_CODEC == SWCODEC */ -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - unsigned short (*peak_meter_scale_value)(unsigned short val, - int meterwidth); - void (*peak_meter_set_use_dbfs)(bool use); - bool (*peak_meter_get_use_dbfs)(void); -#endif - /* metadata */ bool (*get_metadata)(struct mp3entry* id3, int fd, const char* trackname); bool (*mp3info)(struct mp3entry *entry, const char *filename); @@ -845,21 +832,6 @@ struct plugin_api { unsigned long (*mpeg_get_last_header)(void); #endif - /* MAS communication */ -#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC) - int (*mas_readmem)(int bank, int addr, unsigned long* dest, int len); - int (*mas_writemem)(int bank, int addr, const unsigned long* src, int len); - int (*mas_readreg)(int reg); - int (*mas_writereg)(int reg, unsigned int val); -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - int (*mas_codec_writereg)(int reg, unsigned int val); - int (*mas_codec_readreg)(int reg); - void (*i2c_begin)(void); - void (*i2c_end)(void); - int (*i2c_write)(int address, const unsigned char* buf, int count ); -#endif -#endif /* !SIMULATOR && CONFIG_CODEC != SWCODEC */ - /* menu */ struct menu_table *(*root_menu_get_options)(int *nb_options); int (*do_menu)(const struct menu_item_ex *menu, int *start_selected, diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES index 9e153a3c96..197f58ef5c 100644 --- a/apps/plugins/SOURCES +++ b/apps/plugins/SOURCES @@ -86,7 +86,7 @@ wolf3d.c #if PLUGIN_BUFFER_SIZE <= 0x20000 && defined(HAVE_LCD_BITMAP) -#if CONFIG_KEYPAD != ONDIO_PAD && CONFIG_KEYPAD != SANSA_M200_PAD \ +#if CONFIG_KEYPAD != SANSA_M200_PAD \ && CONFIG_KEYPAD != HM60X_PAD /* not enough buttons for rockboy */ rockboy.c @@ -106,44 +106,16 @@ pictureflow.c splitedit.c #endif -#if CONFIG_LCD == LCD_SSD1815 -video.c -#endif - #endif /* HWCODEC */ - -#if defined(ARCHOS_PLAYER) || defined(ARCHOS_RECORDER) || \ - defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) -alpine_cdc.c -#endif - -#if defined(ARCHOS_PLAYER) || defined(ARCHOS_RECORDER) || \ - defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) || \ - defined(ARCHOS_ONDIOFM) || defined(ARCHOS_ONDIOSP) -firmware_flash.c -#endif - #if defined(IRIVER_H100_SERIES) iriver_flash.c #endif -#if (CONFIG_CPU == SH7034) -rockbox_flash.c -#endif /* CONFIG_CPU */ - #if defined(IPOD_NANO2G) crypt_firmware.c #endif -#if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)) -wavplay.c -#endif - -#if (CONFIG_CODEC == MAS3587F) -wavrecord.c -#endif - #endif /* PLATFORM_NATIVE */ metronome.c @@ -217,11 +189,6 @@ rocklife.c #endif /* HAVE_LCD_BITMAP */ -#ifdef HAVE_LCD_CHARCELLS /* Archos Player model only */ -euroconverter.c -nim.c -#endif /* HAVE_LCD_CHARCELLS */ - #if LCD_DEPTH > 1 /* non-mono bitmap targets */ matrix.c diff --git a/apps/plugins/SUBDIRS b/apps/plugins/SUBDIRS index ecface0e40..5fd2d433c7 100644 --- a/apps/plugins/SUBDIRS +++ b/apps/plugins/SUBDIRS @@ -24,8 +24,7 @@ sdl puzzles #endif -#if (CONFIG_KEYPAD != ONDIO_PAD) /* not enough buttons */ \ - && (CONFIG_KEYPAD != SANSA_M200_PAD) /* not enough buttons */ \ +#if (CONFIG_KEYPAD != SANSA_M200_PAD) /* not enough buttons */ \ && (CONFIG_KEYPAD != HM60X_PAD) /* not enough buttons */ \ && (LCD_PIXELFORMAT != HORIZONTAL_PACKING) /* TODO */ \ && (LCD_PIXELFORMAT != VERTICAL_INTERLEAVED) /* TODO */ \ @@ -48,11 +47,7 @@ imageviewer sudoku reversi goban - -/* setjmp/longjmp are not implemented on sh */ -#if (CONFIG_CPU != SH7034) frotz -#endif #ifndef OLYMPUS_MROBE_500 #if PLUGIN_BUFFER_SIZE > 0x40000 || PLUGIN_BUFFER_SIZE <= 0x20000 /* overlay */ diff --git a/apps/plugins/alpine_cdc.c b/apps/plugins/alpine_cdc.c deleted file mode 100644 index 93d9418f65..0000000000 --- a/apps/plugins/alpine_cdc.c +++ /dev/null @@ -1,1195 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * - * Copyright (C) 2003-2005 Jörg Hohensohn - * - * Alpine CD changer Project - * This is a feasibility study for Archos emulating an Alpine M-Bus CD changer. - * - * Currently it will do seeks and change tracks, but nothing like disks. - * The debug version shows a dump of the M-Bus communication on screen. - * - * Usage: Start plugin, it will stay in the background and do the emulation. - * You need to make an adapter with an 8-pin DIN plug for the radio at one end - * and a 4-ring 3.5 mm plug for the Archos headphone jack at the other. - * The Archos remote pin connects to the M-Bus, audio as usual. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -#include "plugin.h" - -#ifdef HAVE_LCD_CHARCELLS /* player model */ -#define LINES 2 -#define COLUMNS 11 -#else /* recorder models */ -#define LINES 8 -#define COLUMNS 32 /* can't really tell for proportional font */ -#endif - -/****************** imports ******************/ - -#include "sh7034.h" -#include "system.h" - -/****************** constants ******************/ - -/* measured bit time on the M-Bus is 3.075 ms = 325.2 Hz */ -#define MBUS_BAUDRATE 3252 /* make it 10 * bittime */ -#define MBUS_STEP_FREQ (MBUS_BAUDRATE/2) /* 5 steps per bit */ -#define MBUS_BIT_FREQ (MBUS_BAUDRATE/10) /* the true bit frequency again */ - -#define MBUS_MAX_SIZE 16 /* maximum length of an M-Bus packet, incl. checksum */ -#define MBUS_RCV_QUEUESIZE 4 /* how many packets can be queued by receiver */ - -#define ERI1 (*((volatile unsigned long*)0x090001A0)) /* RX error */ -#define RXI1 (*((volatile unsigned long*)0x090001A4)) /* RX */ - -#define PB10 0x0400 - -/* receive status */ -#define RX_BUSY 0 /* reception in progress */ -#define RX_RECEIVED 1 /* valid data available */ -#define RX_FRAMING 2 /* frame error */ -#define RX_OVERRUN 3 /* receiver overrun */ -#define RX_PARITY 4 /* parity error */ -#define RX_SYMBOL 5 /* invalid bit timing */ -#define RX_OVERFLOW 6 /* buffer full */ -#define RX_OVERLAP 7 /* receive interrupt while transmitting */ - -/* timer operation mode */ -#define TM_OFF 0 /* not in use */ -#define TM_TRANSMIT 1 /* periodic timer to transmit */ -#define TM_RX_TIMEOUT 2 /* single shot for receive timeout */ - -/* emulation play state */ -#define EMU_IDLE 0 -#define EMU_PREPARING 1 -#define EMU_STOPPED 2 -#define EMU_PAUSED 3 -#define EMU_PLAYING 4 -#define EMU_SPINUP 5 -#define EMU_FF 6 -#define EMU_FR 7 - - -/****************** prototypes ******************/ - -void timer_init(unsigned hz, unsigned to); /* setup static timer registers and values */ -void timer_set_mode(int mode); /* define for what the timer should be used right now */ -void timer4_isr(void); /* IMIA4 ISR */ - -void transmit_isr(void); /* 2nd level ISR for M-Bus transmission */ - -void uart_init(unsigned baudrate); /* UART setup */ -void uart_rx_isr(void) __attribute__((interrupt_handler)); /* RXI1 ISR */ -void uart_err_isr(void) __attribute__((interrupt_handler)); /* ERI1 ISR */ -void receive_timeout_isr(void); /* 2nd level ISR for receiver timeout */ - -void mbus_init(void); /* prepare the M-Bus layer */ -int mbus_send(unsigned char* p_msg, int digits); /* packet send */ -int mbus_receive(unsigned char* p_msg, unsigned bufsize, int timeout); /* packet receive */ - -unsigned char calc_checksum(unsigned char* p_msg, int digits); /* make M-Bus checksum */ -bool bit_test(unsigned char* buf, unsigned bit); /* test one bit of M-Bus packet */ -void bit_set(unsigned char* buf, unsigned bit, bool val); /* set/clear one bit of M-Bus packet */ - -void print_scroll(char* string); /* implements a scrolling screen */ -void dump_packet(char* dest, int dst_size, char* src, int n); /* convert packet to ASCII */ - -void emu_init(void); /* init changer emulation */ -void emu_process_packet(unsigned char* mbus_msg, int msg_size); /* feed a received radio packet */ -void emu_tick(void); /* for regular actions of the emulator */ - -int get_playtime(void); /* return the current track time in seconds */ -int get_tracklength(void); /* return the total length of the current track */ -void set_track(int selected); -int get_track(void); /* return the track number */ -void set_play(void); /* start or resume playback */ -void set_pause(void); /* pause playback */ -void set_stop(void); /* stop playback */ -void set_position(int seconds); /* seek */ -void get_playmsg(void); /* update the play message with Rockbox info */ -void get_diskmsg(void); /* update the disk status message with Rockbox info */ - -void sound_neutral(void); /* set to everything flat and 0 dB volume */ -void sound_normal(void); /* return to user settings */ - -void thread(void); /* the thread running it all */ -int main(const void* parameter); /* main loop */ -enum plugin_status plugin_start(const void* parameter); /* entry */ - - -/****************** data types ******************/ - -/* one entry in the receive queue */ -typedef struct -{ - unsigned char buf[MBUS_MAX_SIZE]; /* message buffer */ - unsigned size; /* length of data in the buffer */ - unsigned error; /* error code from reception */ -} t_rcv_queue_entry; - - -/****************** globals ******************/ - - -/* information owned by the timer transmit ISR */ -struct -{ - unsigned char send_buf[MBUS_MAX_SIZE]; /* M-Bus message */ - unsigned send_size; /* current length of data in the buffer */ - unsigned index; /* index for which byte to send */ - unsigned byte; /* which byte to send */ - unsigned bitmask; /* which bit to send */ - unsigned step; /* where in the pulse are we */ - bool bit; /* currently sent bit */ - bool collision; /* set if a collision happened */ - bool busy; /* flag if in transmission */ -} gSendIRQ; - - -/* information owned by the UART receive ISR */ -struct -{ - t_rcv_queue_entry queue[MBUS_RCV_QUEUESIZE]; /* M-Bus message queue */ - unsigned buf_read; /* readout maintained by the user application */ - unsigned buf_write; /* writing maintained by ISR */ - bool overflow; /* indicate queue overflow */ - unsigned byte; /* currently assembled byte */ - unsigned bit; /* which bit to receive */ -} gRcvIRQ; - - -/* information owned by the timer */ -struct -{ - unsigned mode; /* off, transmit, receive timout */ - unsigned transmit; /* value for transmit */ - unsigned timeout; /* value for receive timeout */ -} gTimer; - - -/* information owned by the changer emulation */ -struct -{ - unsigned char playmsg[15]; /* current play state msg */ - unsigned char changemsg[11]; /* changing message */ - unsigned char diskmsg[12]; /* disk status message */ - long poll_interval; /* call the emu each n ticks */ - int time; /* seconds within the song */ - int set_state; /* the desired state to change into */ -} gEmu; - - -/* communication to the worker thread */ -struct -{ - bool foreground; /* set as long as we're owning the UI */ - bool exiting; /* signal to the thread that we want to exit */ - unsigned int thread; /* worker thread id */ -} gTread; - - -/****************** implementation ******************/ - - -/* setup static timer registers and values */ -void timer_init(unsigned hz, unsigned to) -{ - rb->memset(&gTimer, 0, sizeof(gTimer)); - - gTimer.transmit = TIMER_FREQ / hz; /* time for bit transitions */ - gTimer.timeout = TIMER_FREQ / to; /* time for receive timeout */ -} - - -/* define for what the timer should be used right now */ -void timer_set_mode(int mode) -{ - TCNT4 = 0; /* start counting at 0 */ - gTimer.mode = mode; /* store the mode */ - - if (mode == TM_RX_TIMEOUT) - { - rb->timer_register(1, NULL, gTimer.timeout, timer4_isr IF_COP(, CPU)); - IPRD = (IPRD & 0xFF0F) | 11 << 4; /* interrupt priority */ - } - else if (mode == TM_TRANSMIT) - { - rb->timer_register(1, NULL, gTimer.transmit, timer4_isr IF_COP(, CPU)); - IPRD = (IPRD & 0xFF0F) | 14 << 4; /* interrupt priority */ - } - else - { - rb->timer_unregister(); - } -} - - -void timer4_isr(void) /* IMIA4 */ -{ - switch (gTimer.mode) - { /* distribute the interrupt */ - case TM_TRANSMIT: - transmit_isr(); - break; - case TM_RX_TIMEOUT: - receive_timeout_isr(); - rb->timer_unregister(); /* single shot */ - break; - default: - timer_set_mode(TM_OFF); /* spurious interrupt */ - } /* switch */ -} - - -/* About Alpine M-Bus - * ------------------ - * - * The protocol uses a single wire in half duplex mode. - * A bit like I2C, this wire is either pulled low or left floating high. - * Bit time is ~3 ms, a "zero" is coded as ~0.6 ms low, a "one" as ~1.8 ms low. - * Nice to view in a 0.6 ms grid: - * - * 0 0.6 1.2 1.8 2.4 3.0 - * | | | | | | - * __ ___________________ - * \____/ \ "zero" bit - * __ _________ - * \______________/ \ "one" bit - * - * So I send out the data in a timer interrupt spawned to 0.6 ms. - * In phases where the line is floating high, I can check for collisions. - * (happens if the other side driving it low, too.) - * - * Data is transmitted in multiples of 4 bit, to ease BCD representation. - */ - - -/* 2nd level ISR for M-Bus transmission */ -void transmit_isr(void) -{ - bool exit = false; - - TSR4 &= ~0x01; /* clear the interrupt */ - - switch(gSendIRQ.step++) - { - case 0: - and_b(~0x04, &PBDRH); /* low (read-modify-write access may have changed it while it was input) */ - or_b(0x04, &PBIORH); /* drive low (output) */ - break; - case 1: /* 0.6 ms */ - if (!gSendIRQ.bit) /* sending "zero"? */ - and_b(~0x04, &PBIORH); /* float (input) */ - break; - case 2: /* 1.2 ms */ - if (!gSendIRQ.bit && ((PBDR & PB10) == 0)) - gSendIRQ.collision = true; - break; - case 3: /* 1.8 ms */ - if (gSendIRQ.bit) /* sending "one"? */ - and_b(~0x04, &PBIORH); /* float (input) */ - else if ((PBDR & PB10) == 0) - gSendIRQ.collision = true; - break; - case 4: /* 2.4 ms */ - if ((PBDR & PB10) == 0) - gSendIRQ.collision = true; - - /* prepare next round */ - gSendIRQ.step = 0; - gSendIRQ.bitmask >>= 1; - if (gSendIRQ.bitmask) - { /* new bit */ - gSendIRQ.bit = (gSendIRQ.byte & gSendIRQ.bitmask) != 0; - } - else - { /* new byte */ - if (++gSendIRQ.index < gSendIRQ.send_size) - { - gSendIRQ.bitmask = 0x08; - gSendIRQ.byte = gSendIRQ.send_buf[gSendIRQ.index]; - gSendIRQ.bit = (gSendIRQ.byte & gSendIRQ.bitmask) != 0; - } - else - exit = true; /* done */ - } - break; - } - - if (exit || gSendIRQ.collision) - { /* stop transmission */ - or_b(0x20, PBCR1_ADDR+1); /* RxD1 again for PB10 */ - timer_set_mode(TM_OFF); /* stop the timer */ - gSendIRQ.busy = false; /* do this last, to avoid race conditions */ - } -} - - -/* For receiving, I use the "normal" serial RX feature of the CPU, - * so we can receive within an interrupt, no line polling necessary. - * Luckily, the M-Bus bit always starts with a falling edge and ends with a high, - * this matches with the start bit and the stop bit of a serial transmission. - * The baudrate is set such that the M-Bus bit time (ca. 3ms) matches - * the serial reception time of one byte, so we receive one byte per - * M-Bus bit. - * Start bit, 8 data bits and stop bit (total=10) nicely fall into the 5 - * phases like above: - * - * 0 0.6 1.2 1.8 2.4 3.0 ms - * | | | | | | time - * __ _______________________________ - * \_______/ \ "zero" bit - * __ _______________ - * \_______________________/ \ "one" bit - * - * | | | | | | | | | | | serial sampling interval - * Start 0 1 2 3 4 5 6 7 Stop bit (LSB first!) - * - * By looking at the bit pattern in the serial byte we can distinguish - * the short low from the longer low, tell "zero" and "one" apart. - * So we receive 0xFE for a "zero", 0xE0 for a "one". - * It may be necessary to treat the bits next to transitions as don't care, - * in case the timing is not so accurate. - * Bits are always sent "back-to-back", so I detect the packet end by timeout. - */ - - -void uart_init(unsigned baudrate) -{ - RXI1 = (unsigned long)uart_rx_isr; /* install ISR */ - ERI1 = (unsigned long)uart_err_isr; /* install ISR */ - - SCR1 = 0x00; /* disable everything; select async mode with SCK pin as I/O */ - SMR1 = 0x00; /* async, 8N1, NoMultiProc, sysclock/1 */ - BRR1 = ((FREQ/(32*baudrate))-1); - - IPRE = (IPRE & ~0xf000) | 0xc000; /* interrupt on level 12 */ - - rb->sleep(1); /* hardware needs to settle for at least one bit interval */ - - and_b(~(SCI_RDRF | SCI_ORER | SCI_FER | SCI_PER), &SSR1); /* clear any receiver flag */ - or_b(SCI_RE | SCI_RIE , &SCR1); /* enable the receiver with interrupt */ -} - - -void uart_rx_isr(void) /* RXI1 */ -{ - unsigned char data; - t_rcv_queue_entry* p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_write]; /* short cut */ - - data = RDR1; /* get data */ - - and_b(~SCI_RDRF, &SSR1); /* clear data received flag */ - - if (gTimer.mode == TM_TRANSMIT) - p_entry->error = RX_OVERLAP; /* oops, we're also transmitting, stop */ - else - timer_set_mode(TM_RX_TIMEOUT); /* (re)spawn timeout */ - - if (p_entry->error != RX_BUSY) - return; - - if ((data & ~0x00) == 0xFE) /* 01111111 in line order (reverse) */ - { /* "zero" received */ - gRcvIRQ.byte <<= 1; - } - else if ((data & ~0x00) == 0xE0) /* 00000111 in line order (reverse) */ - { /* "one" received */ - gRcvIRQ.byte = gRcvIRQ.byte << 1 | 0x01; - } - else - { /* unrecognized pulse */ - p_entry->error = RX_SYMBOL; - } - - if (p_entry->error == RX_BUSY) - { - if (++gRcvIRQ.bit >= 4) - { /* byte completed */ - if (p_entry->size >= sizeof(p_entry->buf)) - { - p_entry->error = RX_OVERFLOW; /* buffer full */ - } - else - { - p_entry->buf[p_entry->size] = gRcvIRQ.byte; - gRcvIRQ.byte = 0; - gRcvIRQ.bit = 0; - p_entry->size++; - } - } - } -} - - -void uart_err_isr(void) /* ERI1 */ -{ - t_rcv_queue_entry* p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_write]; /* short cut */ - - if (p_entry->error == RX_BUSY) - { /* terminate reception in case of error */ - if (SSR1 & SCI_FER) - p_entry->error = RX_FRAMING; - else if (SSR1 & SCI_ORER) - p_entry->error = RX_OVERRUN; - else if (SSR1 & SCI_PER) - p_entry->error = RX_PARITY; - } - - /* clear any receiver flag */ - and_b(~(SCI_RDRF | SCI_ORER | SCI_FER | SCI_PER), &SSR1); -} - - -/* 2nd level ISR for receiver timeout, this finalizes reception */ -void receive_timeout_isr(void) -{ - t_rcv_queue_entry* p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_write]; /* short cut */ - - timer_set_mode(TM_OFF); /* single shot */ - - if (p_entry->error == RX_BUSY) /* everthing OK so far? */ - p_entry->error = RX_RECEIVED; /* end with valid data */ - - /* move to next queue entry */ - gRcvIRQ.buf_write++; - if (gRcvIRQ.buf_write >= MBUS_RCV_QUEUESIZE) - gRcvIRQ.buf_write = 0; - p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_write]; - - if (gRcvIRQ.buf_write == gRcvIRQ.buf_read) - { /* queue overflow */ - gRcvIRQ.overflow = true; - /* what can I do? Continueing overwrites the oldest. */ - } - - gRcvIRQ.byte = 0; - gRcvIRQ.bit = 0; - p_entry->size = 0; - p_entry->error = RX_BUSY; /* enable receive on new entry */ -} - - -/* generate the checksum */ -unsigned char calc_checksum(unsigned char* p_msg, int digits) -{ - int chk = 0; - int i; - - for (i=0; i<digits; i++) - { - chk ^= p_msg[i]; - } - chk = (chk+1) % 16; - - return chk; -} - - -/****************** high-level M-Bus functions ******************/ - -void mbus_init(void) -{ - /* init the send object */ - rb->memset(&gSendIRQ, 0, sizeof(gSendIRQ)); - timer_init(MBUS_STEP_FREQ, (MBUS_BIT_FREQ*10)/15); /* setup frequency and timeout (1.5 bit) */ - - /* init receiver */ - rb->memset(&gRcvIRQ, 0, sizeof(gRcvIRQ)); - uart_init(MBUS_BAUDRATE); -} - - -/* send out a number of BCD digits (one per byte) with M-Bus protocol */ -int mbus_send(unsigned char* p_msg, int digits) -{ - /* wait for previous transmit/receive to end */ - while(gTimer.mode != TM_OFF) /* wait for "free line" */ - rb->sleep(1); - - /* fill in our part */ - rb->memcpy(gSendIRQ.send_buf, p_msg, digits); - - /* add checksum */ - gSendIRQ.send_buf[digits] = calc_checksum(p_msg, digits); - digits++; - - /* debug dump, to be removed */ - if (gTread.foreground) - { - char buf[MBUS_MAX_SIZE+1]; - dump_packet(buf, sizeof(buf), gSendIRQ.send_buf, digits); - /*print_scroll(buf); */ - } - - gSendIRQ.send_size = digits; - - /* prepare everything so the ISR can start right away */ - gSendIRQ.index = 0; - gSendIRQ.byte = gSendIRQ.send_buf[0]; - gSendIRQ.bitmask = 0x08; - gSendIRQ.step = 0; - gSendIRQ.bit = (gSendIRQ.byte & gSendIRQ.bitmask) != 0; - gSendIRQ.collision = false; - gSendIRQ.busy = true; - - /* last chance to wait for a new detected receive to end */ - while(gTimer.mode != TM_OFF) /* wait for "free line" */ - rb->sleep(1); - - and_b(~0x30, PBCR1_ADDR+1); /* GPIO for PB10 */ - timer_set_mode(TM_TRANSMIT); /* run */ - - /* make the call blocking until sent out */ - rb->sleep(digits*4*HZ/MBUS_BIT_FREQ); /* should take this long */ - - while(gSendIRQ.busy) /* poll in case it lasts longer */ - rb->sleep(1); /* (should not happen) */ - - /* debug output, to be removed */ - if (gTread.foreground) - { - if (gSendIRQ.collision) - print_scroll("collision"); - } - - return gSendIRQ.collision; -} - - -/* returns the size of message copy, 0 if timed out, negative on error */ -int mbus_receive(unsigned char* p_msg, unsigned bufsize, int timeout) -{ - int retval = 0; - - do - { - if (gRcvIRQ.buf_read != gRcvIRQ.buf_write) - { /* something in the queue */ - t_rcv_queue_entry* p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_read]; /* short cut */ - - if (p_entry->error == RX_RECEIVED) - { /* seems valid */ - rb->memcpy(p_msg, p_entry->buf, MIN(p_entry->size, bufsize)); - retval = p_entry->size; /* return message size */ - } - else - { /* an error occured */ - retval = - p_entry->error; /* return negative number */ - } - - /* next queue readout position */ - gRcvIRQ.buf_read++; - if (gRcvIRQ.buf_read >= MBUS_RCV_QUEUESIZE) - gRcvIRQ.buf_read = 0; - - return retval; /* exit */ - } - - if (timeout != 0 || gTimer.mode != TM_OFF) /* also carry on if reception in progress */ - { - if (timeout != -1 && timeout != 0) /* if not infinite or expired */ - timeout--; - - rb->sleep(1); /* wait a while */ - } - - } while (timeout != 0 || gTimer.mode != TM_OFF); - - return 0; /* timeout */ -} - - -/****************** MMI helper fuctions ******************/ - - -void print_scroll(char* string) -{ - static char screen[LINES][COLUMNS+1]; /* visible strings */ - static unsigned pos = 0; /* next print position */ - static unsigned screentop = 0; /* for scrolling */ - - if (!gTread.foreground) - return; /* just to protect careless callers */ - - if (pos >= LINES) - { /* need to scroll first */ - int i; - rb->lcd_clear_display(); - screentop++; - for (i=0; i<LINES-1; i++) - rb->lcd_puts(0, i, screen[(i+screentop) % LINES]); - - pos = LINES-1; - } - - /* no strncpy avail. */ - rb->snprintf(screen[(pos+screentop) % LINES], sizeof(screen[0]), "%s", string); - - rb->lcd_puts(0, pos, screen[(pos+screentop) % LINES]); - rb->lcd_update(); - pos++; -} - - -void dump_packet(char* dest, int dst_size, char* src, int n) -{ - int i; - int len = MIN(dst_size-1, n); - - for (i=0; i<len; i++) - { /* convert to hex digits */ - dest[i] = src[i] < 10 ? '0' + src[i] : 'A' + src[i] - 10; - } - dest[i] = '\0'; /* zero terminate string */ -} - - -/****************** CD changer emulation ******************/ - -bool bit_test(unsigned char* buf, unsigned bit) -{ - return (buf[bit>>2] & BIT_N(bit&3)) != 0; -} - - -void bit_set(unsigned char* buf, unsigned bit, bool val) -{ - if (val) - buf[bit>>2] |= BIT_N(bit&3); - else - buf[bit>>2] &= ~BIT_N(bit&3); -} - - -void emu_init(void) -{ - rb->memset(&gEmu, 0, sizeof(gEmu)); - - gEmu.poll_interval = HZ; - - /* init the play message to 990000000000000 */ - gEmu.playmsg[0] = gEmu.playmsg[1] = 0x9; - - /* init the changing message to 9B900000001 */ - gEmu.changemsg[0] = gEmu.changemsg[2] = 0x9; - gEmu.changemsg[1] = 0xB; - gEmu.changemsg[10] = 0x1; - - /* init the disk status message to 9C1019999990 */ - rb->memset(&gEmu.diskmsg, 0x9, sizeof(gEmu.diskmsg)); - gEmu.diskmsg[1] = 0xC; - gEmu.diskmsg[2] = gEmu.diskmsg[4] = 0x1; - gEmu.diskmsg[3] = gEmu.diskmsg[11] = 0x0; -} - -/* feed a radio command into the emulator */ -void emu_process_packet(unsigned char* mbus_msg, int msg_size) -{ - bool playmsg_dirty = false; - bool diskmsg_dirty = false; - - if (msg_size == 2 && mbus_msg[0] == 1 && mbus_msg[1] == 8) - { /* 18: ping */ - mbus_send("\x09\x08", 2); /* 98: ping OK */ - } - else if (msg_size == 5 && mbus_msg[0] == 1 && mbus_msg[1] == 1 && mbus_msg[2] == 1) - { /* set play state */ - if (bit_test(mbus_msg, 16)) - { - if (gEmu.set_state == EMU_FF || gEmu.set_state == EMU_FR) /* was seeking? */ - { /* seek to final position */ - set_position(gEmu.time); - } - else if (gEmu.set_state != EMU_PLAYING && gEmu.set_state != EMU_PAUSED) - { /* was not playing yet, better send disk message */ - diskmsg_dirty = true; - } - set_play(); - gEmu.set_state = EMU_PLAYING; - playmsg_dirty = true; - } - - if (bit_test(mbus_msg, 17)) - { - gEmu.set_state = EMU_PAUSED; - playmsg_dirty = true; - set_pause(); - } - - if (bit_test(mbus_msg, 14)) - { - gEmu.set_state = EMU_STOPPED; - playmsg_dirty = true; - set_stop(); - } - - if (bit_test(mbus_msg, 18)) - { - gEmu.set_state = EMU_FF; - playmsg_dirty = true; - set_pause(); - } - - if (bit_test(mbus_msg, 19)) - { - gEmu.set_state = EMU_FR; - playmsg_dirty = true; - set_pause(); - } - - if (bit_test(mbus_msg, 12)) /* scan stop */ - { - bit_set(gEmu.playmsg, 51, false); - playmsg_dirty = true; - } - - if (gEmu.set_state == EMU_FF || gEmu.set_state == EMU_FR) - gEmu.poll_interval = HZ/4; /* faster refresh */ - else - gEmu.poll_interval = HZ; - } - else if (msg_size == 8 && mbus_msg[0] == 1 && mbus_msg[1] == 1 && mbus_msg[2] == 4) - { /* set program mode */ - gEmu.playmsg[11] = mbus_msg[3]; /* copy repeat, random, intro */ - gEmu.playmsg[12] = mbus_msg[4]; /* ToDo */ - playmsg_dirty = true; - } - else if (msg_size ==8 && mbus_msg[0] == 1 && mbus_msg[1] == 1 && mbus_msg[2] == 3) - { /* changing */ - gEmu.time = 0; /* reset playtime */ - playmsg_dirty = true; - if (mbus_msg[3] == 0) - { /* changing track */ - if (mbus_msg[4] == 0xA && mbus_msg[5] == 0x3) - { /* next random */ - gEmu.playmsg[3] = rb->rand() % 10; /* ToDo */ - gEmu.playmsg[4] = rb->rand() % 10; - } - else if (mbus_msg[4] == 0xB && mbus_msg[5] == 0x3) - { /* previous random */ - gEmu.playmsg[3] = rb->rand() % 10; /* ToDo */ - gEmu.playmsg[4] = rb->rand() % 10; - } - else - { /* normal track select */ - set_track(mbus_msg[4]*10 + mbus_msg[5]); - } - } - else - { /* changing disk */ - diskmsg_dirty = true; - gEmu.changemsg[3] = mbus_msg[3]; /* copy disk */ - gEmu.diskmsg[2] = mbus_msg[3]; - gEmu.changemsg[7] = gEmu.playmsg[11]; /* copy flags from status */ - gEmu.changemsg[8] = gEmu.playmsg[12]; - /*gEmu.playmsg[3] = 0; */ /* reset to track 1 */ - /*gEmu.playmsg[4] = 1; */ - mbus_send(gEmu.changemsg, sizeof(gEmu.changemsg)); - } - } - else - { /* if in doubt, send Ack */ - mbus_send("\x09\x0F\x00\x00\x00\x00\x00", 7); - } - - if (playmsg_dirty) - { - rb->yield(); /* give the audio thread a chance to process */ - get_playmsg(); /* force update */ - mbus_send(gEmu.playmsg, sizeof(gEmu.playmsg)); - } - - if (diskmsg_dirty) - { - get_diskmsg(); /* force update */ - mbus_send(gEmu.diskmsg, sizeof(gEmu.diskmsg)); - } -} - - -/* called each second in case the emulator has something to do */ -void emu_tick(void) -{ - get_playmsg(); /* force update */ - if (bit_test(gEmu.playmsg, 56)) /* play bit */ - { - unsigned remain; /* helper as we walk down the digits */ - - switch(gEmu.set_state) - { - case EMU_FF: - gEmu.time += 10; - case EMU_FR: - gEmu.time -= 5; - - if (gEmu.time < 0) - gEmu.time = 0; - else if (gEmu.time > get_tracklength()) - gEmu.time = get_tracklength(); - - /* convert value to MM:SS */ - remain = (unsigned)gEmu.time; - gEmu.playmsg[7] = remain / (10*60); - remain -= gEmu.playmsg[7] * (10*60); - gEmu.playmsg[8] = remain / 60; - remain -= gEmu.playmsg[8] * 60; - gEmu.playmsg[9] = remain / 10; - remain -= gEmu.playmsg[9] * 10; - gEmu.playmsg[10] = remain; - } - - mbus_send(gEmu.playmsg, sizeof(gEmu.playmsg)); - } -} - - -/****************** communication with Rockbox playback ******************/ - - -/* update the play message with Rockbox info */ -void get_playmsg(void) -{ - int track, time; - - if (gEmu.set_state != EMU_FF && gEmu.set_state != EMU_FR) - { - switch(rb->audio_status()) - { - case AUDIO_STATUS_PLAY: - print_scroll("AudioStat Play"); - if (gEmu.set_state == EMU_FF || gEmu.set_state == EMU_FR) - gEmu.playmsg[2] = gEmu.set_state; /* set FF/FR */ - else - gEmu.playmsg[2] = EMU_PLAYING; /* set normal play */ - - bit_set(gEmu.playmsg, 56, true); /* set play */ - bit_set(gEmu.playmsg, 57, false); /* clear pause */ - bit_set(gEmu.playmsg, 59, false); /* clear stop */ - break; - - case AUDIO_STATUS_PLAY | AUDIO_STATUS_PAUSE: - print_scroll("AudioStat Pause"); - gEmu.playmsg[2] = EMU_PAUSED; - bit_set(gEmu.playmsg, 56, false); /* clear play */ - bit_set(gEmu.playmsg, 57, true); /* set pause */ - bit_set(gEmu.playmsg, 59, false); /* clear stop */ - break; - - default: - print_scroll("AudioStat 0"); - gEmu.playmsg[2] = EMU_STOPPED; - bit_set(gEmu.playmsg, 56, false); /* clear play */ - bit_set(gEmu.playmsg, 57, false); /* clear pause */ - bit_set(gEmu.playmsg, 59, true); /* set stop */ - break; - } - - /* convert value to MM:SS */ - time = get_playtime(); - gEmu.time = time; /* copy it */ - gEmu.playmsg[7] = time / (10*60); - time -= gEmu.playmsg[7] * (10*60); - gEmu.playmsg[8] = time / 60; - time -= gEmu.playmsg[8] * 60; - gEmu.playmsg[9] = time / 10; - time -= gEmu.playmsg[9] * 10; - gEmu.playmsg[10] = time; - } - else /* FF/FR */ - { - gEmu.playmsg[2] = gEmu.set_state; /* in FF/FR, report that instead */ - } - - track = get_track(); - gEmu.playmsg[3] = track / 10; - gEmu.playmsg[4] = track % 10; -} - -/* update the disk status message with Rockbox info */ -void get_diskmsg(void) -{ - int tracks = rb->playlist_amount(); - if (tracks > 99) - tracks = 99; - gEmu.diskmsg[5] = tracks / 10; - gEmu.diskmsg[6] = tracks % 10; -} - -/* return the current track time in seconds */ -int get_playtime(void) -{ - struct mp3entry* p_mp3entry; - - p_mp3entry = rb->audio_current_track(); - if (p_mp3entry == NULL) - return 0; - - return p_mp3entry->elapsed / 1000; -} - -/* return the total length of the current track */ -int get_tracklength(void) -{ - struct mp3entry* p_mp3entry; - - p_mp3entry = rb->audio_current_track(); - if (p_mp3entry == NULL) - return 0; - - return p_mp3entry->length / 1000; -} - -/* change to a new track */ -void set_track(int selected) -{ - if (selected > get_track()) - { - print_scroll("audio_next"); - rb->audio_next(); - } - else if (selected < get_track()) - { - print_scroll("audio_prev"); - rb->audio_prev(); - } -} - -/* return the track number */ -int get_track(void) -{ - struct mp3entry* p_mp3entry; - - p_mp3entry = rb->audio_current_track(); - if (p_mp3entry == NULL) - return 0; - - return p_mp3entry->index + 1; /* track numbers start with 1 */ -} - -/* start or resume playback */ -void set_play(void) -{ - if (rb->audio_status() == AUDIO_STATUS_PLAY) - return; - - if (rb->audio_status() == (AUDIO_STATUS_PLAY | AUDIO_STATUS_PAUSE)) - { - print_scroll("audio_resume"); - rb->audio_resume(); - } - else - { - print_scroll("audio_play(0, 0)"); - rb->audio_play(0, 0); - } -} - -/* pause playback */ -void set_pause(void) -{ - if (rb->audio_status() == AUDIO_STATUS_PLAY) - { - print_scroll("audio_pause"); - rb->audio_pause(); - } -} - -/* stop playback */ -void set_stop(void) -{ - if (rb->audio_status() & AUDIO_STATUS_PLAY) - { - print_scroll("audio_stop"); - rb->audio_stop(); - } -} - -/* seek */ -void set_position(int seconds) -{ - if (rb->audio_status() & AUDIO_STATUS_PLAY) - { - print_scroll("audio_ff_rewind"); - rb->audio_ff_rewind(seconds * 1000); - } -} - -/****************** main thread + helper ******************/ - -/* set to everything flat and 0 dB volume */ -void sound_neutral(void) -{ /* neutral sound settings */ - rb->sound_set(SOUND_BASS, 0); - rb->sound_set(SOUND_TREBLE, 0); - rb->sound_set(SOUND_BALANCE, 0); - rb->sound_set(SOUND_VOLUME, 0); -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - rb->sound_set(SOUND_LOUDNESS, 0); - rb->sound_set(SOUND_SUPERBASS, 0); - rb->sound_set(SOUND_AVC, 0); -#endif -} - -/* return to user settings */ -void sound_normal(void) -{ /* restore sound settings */ - rb->sound_set(SOUND_BASS, rb->global_settings->bass); - rb->sound_set(SOUND_TREBLE, rb->global_settings->treble); - rb->sound_set(SOUND_BALANCE, rb->global_settings->balance); - rb->sound_set(SOUND_VOLUME, rb->global_settings->volume); -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - rb->sound_set(SOUND_LOUDNESS, rb->global_settings->loudness); - rb->sound_set(SOUND_SUPERBASS, rb->global_settings->superbass); - rb->sound_set(SOUND_AVC, rb->global_settings->avc); -#endif -} - -/* the thread running it all */ -void thread(void) -{ - int msg_size; - unsigned char mbus_msg[MBUS_MAX_SIZE]; - char buf[32]; - bool connected = false; - long last_tick = *rb->current_tick; /* for 1 sec tick */ - - do - { - msg_size = mbus_receive(mbus_msg, sizeof(mbus_msg), 1); - if (msg_size > 0) - { /* received something */ - if(gTread.foreground) - { - dump_packet(buf, sizeof(buf), mbus_msg, msg_size); - /*print_scroll(buf); */ - } - if (msg_size > 2 && mbus_msg[0] == 1 - && mbus_msg[msg_size-1] == calc_checksum(mbus_msg, msg_size-1)) - { /* sanity and checksum OK */ - if (!connected) - { /* with the first received packet: */ - sound_neutral(); /* set to flat and 0dB volume */ - connected = true; - } - emu_process_packet(mbus_msg, msg_size-1); /* pass without chksum */ - } - else if(gTread.foreground) - { /* not OK */ - print_scroll("bad packet"); - } - } - else if (msg_size < 0 && gTread.foreground) - { /* error */ - rb->snprintf(buf, sizeof(buf), "rcv error %d", msg_size); - print_scroll(buf); - } - - if (*rb->current_tick - last_tick >= gEmu.poll_interval) - { /* call the emulation regulary */ - emu_tick(); - last_tick += gEmu.poll_interval; - } - - } while (!gTread.exiting); -} - -/* callback to end the TSR plugin, called before a new one gets loaded */ -static bool exit_tsr(bool reenter) -{ - if (reenter) - return false; /* dont let it start again */ - gTread.exiting = true; /* tell the thread to end */ - rb->thread_wait(gTread.thread); /* wait until it did */ - - uart_init(BAUDRATE); /* return to standard baudrate */ - IPRE = (IPRE & ~0xF000); /* UART interrupt off */ - timer_set_mode(TM_OFF); /* timer interrupt off */ - - sound_normal(); /* restore sound settings */ - return true; -} - -/****************** main ******************/ - - -int main(const void* parameter) -{ - (void)parameter; -#ifdef DEBUG - int button; -#endif - size_t buf_size; - ssize_t stacksize; - void* stack; - - mbus_init(); /* init the M-Bus layer */ - emu_init(); /* init emulator */ - - rb->splash(HZ/5, "Alpine CDC"); /* be quick on autostart */ - -#ifdef DEBUG - print_scroll("Alpine M-Bus Test"); - print_scroll("any key to TSR"); -#endif - - /* init the worker thread */ - stack = rb->plugin_get_buffer(&buf_size); /* use the rest as stack */ - stacksize = buf_size; - stack = (void*)(((unsigned int)stack + 100) & ~3); /* a bit away, 32 bit align */ - stacksize = (stacksize - 100) & ~3; - if (stacksize < DEFAULT_STACK_SIZE) - { - rb->splash(HZ*2, "Out of memory"); - return -1; - } - - rb->memset(&gTread, 0, sizeof(gTread)); - gTread.foreground = true; - gTread.thread = rb->create_thread(thread, stack, stacksize, 0, "CDC" - IF_PRIO(, PRIORITY_BACKGROUND) - IF_COP(, CPU)); - -#ifdef DEBUG - do - { - button = rb->button_get(true); - } while (button & BUTTON_REL); -#endif - - gTread.foreground = false; /* we're in the background now */ - rb->plugin_tsr(exit_tsr); /* stay resident */ - -#ifdef DEBUG - return rb->default_event_handler(button); -#else - return 0; -#endif -} - - -/***************** Plugin Entry Point *****************/ - - -enum plugin_status plugin_start(const void* parameter) -{ - /* now go ahead and have fun! */ - return (main(parameter)==0) ? PLUGIN_OK : PLUGIN_ERROR; -} diff --git a/apps/plugins/battery_bench.c b/apps/plugins/battery_bench.c index f24ad579e8..37046af05b 100644 --- a/apps/plugins/battery_bench.c +++ b/apps/plugins/battery_bench.c @@ -30,41 +30,12 @@ #define EV_EXIT 1337 -/* seems to work with 1300, but who knows... */ +/* seems to work with 1300, but who knows... */ #define THREAD_STACK_SIZE DEFAULT_STACK_SIZE + 0x200 -#if CONFIG_KEYPAD == RECORDER_PAD - -#define BATTERY_ON BUTTON_PLAY -#define BATTERY_OFF BUTTON_OFF -#define BATTERY_ON_TXT "PLAY - start" -#define BATTERY_OFF_TXT "OFF" - -#if BUTTON_REMOTE != 0 -#define BATTERY_RC_ON BUTTON_RC_PLAY -#define BATTERY_RC_OFF BUTTON_RC_STOP -#endif - -#elif CONFIG_KEYPAD == ONDIO_PAD - -#define BATTERY_ON BUTTON_RIGHT -#define BATTERY_OFF BUTTON_OFF -#define BATTERY_ON_TXT "RIGHT - start" -#define BATTERY_OFF_TXT "OFF" - -#elif CONFIG_KEYPAD == PLAYER_PAD - -#define BATTERY_ON BUTTON_PLAY -#define BATTERY_OFF BUTTON_STOP -#define BATTERY_ON_TXT "PLAY - start" -#define BATTERY_OFF_TXT "STOP" - -#define BATTERY_RC_ON BUTTON_RC_PLAY -#define BATTERY_RC_OFF BUTTON_RC_STOP - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) - + #define BATTERY_ON BUTTON_ON #define BATTERY_RC_ON BUTTON_RC_ON diff --git a/apps/plugins/beatbox/beatbox.c b/apps/plugins/beatbox/beatbox.c index 914533151e..e7d3225c8b 100644 --- a/apps/plugins/beatbox/beatbox.c +++ b/apps/plugins/beatbox/beatbox.c @@ -28,19 +28,7 @@ /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define BTN_QUIT BUTTON_OFF -#define BTN_RIGHT BUTTON_RIGHT -#define BTN_UP BUTTON_UP -#define BTN_DOWN BUTTON_DOWN - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define BTN_QUIT BUTTON_OFF -#define BTN_RIGHT BUTTON_RIGHT -#define BTN_UP BUTTON_UP -#define BTN_DOWN BUTTON_DOWN - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) #define BTN_QUIT BUTTON_OFF #define BTN_RIGHT BUTTON_RIGHT #define BTN_UP BUTTON_UP diff --git a/apps/plugins/blackjack.c b/apps/plugins/blackjack.c index d685de9617..93b577462b 100644 --- a/apps/plugins/blackjack.c +++ b/apps/plugins/blackjack.c @@ -42,37 +42,7 @@ enum { BJ_END, }; -#if CONFIG_KEYPAD == RECORDER_PAD -#define BJACK_SELECT_NAME "PLAY" -#define BJACK_STAY_NAME "F1" -#define BJACK_QUIT_NAME "OFF" -#define BJACK_DOUBLE_NAME "F2" -#define BJACK_SELECT BUTTON_PLAY -#define BJACK_QUIT BUTTON_OFF -#define BJACK_MAX (BUTTON_ON|BUTTON_UP) -#define BJACK_MIN (BUTTON_ON|BUTTON_DOWN) -#define BJACK_STAY BUTTON_F1 -#define BJACK_DOUBLEDOWN BUTTON_F2 -#define BJACK_UP BUTTON_UP -#define BJACK_DOWN BUTTON_DOWN -#define BJACK_RIGHT BUTTON_RIGHT -#define BJACK_LEFT BUTTON_LEFT - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define BJACK_SELECT_NAME "MENU" -#define BJACK_STAY_NAME "RIGHT" -#define BJACK_QUIT_NAME "OFF" -#define BJACK_DOUBLE_NAME "UP" -#define BJACK_SELECT BUTTON_MENU -#define BJACK_QUIT BUTTON_OFF -#define BJACK_STAY BUTTON_RIGHT -#define BJACK_DOUBLEDOWN BUTTON_UP -#define BJACK_UP BUTTON_UP -#define BJACK_DOWN BUTTON_DOWN -#define BJACK_RIGHT BUTTON_RIGHT -#define BJACK_LEFT BUTTON_LEFT - -#elif CONFIG_KEYPAD == IRIVER_H10_PAD +#if CONFIG_KEYPAD == IRIVER_H10_PAD #define BJACK_SELECT_NAME "PLAY" #define BJACK_STAY_NAME ">>|" #define BJACK_QUIT_NAME "POWER" diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c index 182ba4f040..dd46f98b8e 100644 --- a/apps/plugins/brickmania.c +++ b/apps/plugins/brickmania.c @@ -61,23 +61,6 @@ #define DOWN BUTTON_DOWN #define RC_QUIT BUTTON_RC_STOP -#elif CONFIG_KEYPAD == ONDIO_PAD -#define CONTINUE_TEXT "MENU To Continue" -#define QUIT BUTTON_OFF -#define LEFT BUTTON_LEFT -#define RIGHT BUTTON_RIGHT -#define SELECT BUTTON_MENU -#define UP BUTTON_UP -#define DOWN BUTTON_DOWN - -#elif CONFIG_KEYPAD == RECORDER_PAD -#define QUIT BUTTON_OFF -#define LEFT BUTTON_LEFT -#define RIGHT BUTTON_RIGHT -#define SELECT BUTTON_PLAY -#define UP BUTTON_UP -#define DOWN BUTTON_DOWN - #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ (CONFIG_KEYPAD == IPOD_3G_PAD) || \ (CONFIG_KEYPAD == IPOD_1G2G_PAD) @@ -1461,9 +1444,7 @@ static int brickmania_help(void) "< & >:", #endif "Moves", "the", "paddle", "", -#if CONFIG_KEYPAD == ONDIO_PAD - "MENU:", -#elif (CONFIG_KEYPAD == RECORDER_PAD) || (CONFIG_KEYPAD == IAUDIO_M3_PAD) +#if (CONFIG_KEYPAD == IAUDIO_M3_PAD) "PLAY:", #elif CONFIG_KEYPAD == IRIVER_H300_PAD "NAVI:", @@ -1484,9 +1465,7 @@ static int brickmania_help(void) (CONFIG_KEYPAD == SANSA_FUZE_PAD) "MENU:", #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) || \ - (CONFIG_KEYPAD == ONDIO_PAD) || \ - (CONFIG_KEYPAD == RECORDER_PAD) + (CONFIG_KEYPAD == IRIVER_H300_PAD) "STOP:", #else "POWER:", diff --git a/apps/plugins/bubbles.c b/apps/plugins/bubbles.c index 2d163d8bc9..50de10fa23 100644 --- a/apps/plugins/bubbles.c +++ b/apps/plugins/bubbles.c @@ -84,7 +84,6 @@ enum { /* these are better off shooting with up */ #if (CONFIG_KEYPAD == SAMSUNG_YH820_PAD) \ || (CONFIG_KEYPAD == SAMSUNG_YH92X_PAD) \ - || (CONFIG_KEYPAD == ONDIO_PAD) \ || (CONFIG_KEYPAD == IRIVER_H10_PAD) #define SHOOT_WITH_UP #endif diff --git a/apps/plugins/calculator.c b/apps/plugins/calculator.c index d3cf57536d..ac5a6ed7cd 100644 --- a/apps/plugins/calculator.c +++ b/apps/plugins/calculator.c @@ -110,29 +110,8 @@ F3: equal to "=" #endif /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define CALCULATOR_LEFT BUTTON_LEFT -#define CALCULATOR_RIGHT BUTTON_RIGHT -#define CALCULATOR_UP BUTTON_UP -#define CALCULATOR_DOWN BUTTON_DOWN -#define CALCULATOR_QUIT BUTTON_OFF -#define CALCULATOR_INPUT BUTTON_PLAY -#define CALCULATOR_CALC BUTTON_F3 -#define CALCULATOR_OPERATORS BUTTON_F2 -#define CALCULATOR_CLEAR BUTTON_F1 - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define CALCULATOR_LEFT BUTTON_LEFT -#define CALCULATOR_RIGHT BUTTON_RIGHT -#define CALCULATOR_UP BUTTON_UP -#define CALCULATOR_DOWN BUTTON_DOWN -#define CALCULATOR_QUIT BUTTON_OFF -#define CALCULATOR_INPUT_CALC_PRE BUTTON_MENU -#define CALCULATOR_INPUT (BUTTON_MENU | BUTTON_REL) -#define CALCULATOR_CALC (BUTTON_MENU | BUTTON_REPEAT) - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define CALCULATOR_LEFT BUTTON_LEFT #define CALCULATOR_RIGHT BUTTON_RIGHT #define CALCULATOR_UP BUTTON_UP diff --git a/apps/plugins/calendar.c b/apps/plugins/calendar.c index 11a37191af..7e2472ffc9 100644 --- a/apps/plugins/calendar.c +++ b/apps/plugins/calendar.c @@ -25,30 +25,8 @@ #include "lib/playback_control.h" #include "lib/configfile.h" - - -#if CONFIG_KEYPAD == RECORDER_PAD -#define CALENDAR_QUIT BUTTON_OFF -#define CALENDAR_SELECT BUTTON_PLAY -#define CALENDAR_NEXT_WEEK BUTTON_DOWN -#define CALENDAR_PREV_WEEK BUTTON_UP -#define CALENDAR_NEXT_DAY BUTTON_RIGHT -#define CALENDAR_PREV_DAY BUTTON_LEFT -#define CALENDAR_NEXT_MONTH (BUTTON_ON|BUTTON_DOWN) -#define CALENDAR_PREV_MONTH (BUTTON_ON|BUTTON_UP) - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define CALENDAR_QUIT BUTTON_OFF -#define CALENDAR_SELECT (BUTTON_MENU|BUTTON_REL) -#define CALENDAR_NEXT_WEEK BUTTON_DOWN -#define CALENDAR_PREV_WEEK BUTTON_UP -#define CALENDAR_NEXT_DAY BUTTON_RIGHT -#define CALENDAR_PREV_DAY BUTTON_LEFT -#define CALENDAR_NEXT_MONTH (BUTTON_MENU|BUTTON_DOWN) -#define CALENDAR_PREV_MONTH (BUTTON_MENU|BUTTON_UP) - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define CALENDAR_QUIT BUTTON_OFF #define CALENDAR_SELECT BUTTON_SELECT #define CALENDAR_NEXT_WEEK BUTTON_DOWN diff --git a/apps/plugins/chessbox/chessbox_pgn.h b/apps/plugins/chessbox/chessbox_pgn.h index 9c7693305c..ab0adbb706 100644 --- a/apps/plugins/chessbox/chessbox_pgn.h +++ b/apps/plugins/chessbox/chessbox_pgn.h @@ -84,38 +84,6 @@ #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT) #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT) -#elif CONFIG_KEYPAD == RECORDER_PAD -#define CB_SELECT BUTTON_PLAY -#define CB_UP BUTTON_UP -#define CB_DOWN BUTTON_DOWN -#define CB_LEFT BUTTON_LEFT -#define CB_RIGHT BUTTON_RIGHT -#define CB_PLAY BUTTON_ON -#define CB_LEVEL BUTTON_F1 -#define CB_RESTART BUTTON_F3 -#define CB_MENU BUTTON_OFF -#define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT) -#define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT) -#define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT) -#define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT) - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define CB_SELECT_PRE BUTTON_MENU -#define CB_SELECT (BUTTON_MENU|BUTTON_REL) -#define CB_UP BUTTON_UP -#define CB_DOWN BUTTON_DOWN -#define CB_LEFT BUTTON_LEFT -#define CB_RIGHT BUTTON_RIGHT -#define CB_PLAY_PRE BUTTON_MENU -#define CB_PLAY (BUTTON_MENU|BUTTON_REPEAT) -#define CB_LEVEL (BUTTON_MENU|BUTTON_OFF) -#define CB_RESTART (BUTTON_MENU|BUTTON_LEFT) -#define CB_MENU BUTTON_OFF -#define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT) -#define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT) -#define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT) -#define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT) - #elif (CONFIG_KEYPAD == GIGABEAT_PAD) #define CB_SELECT BUTTON_SELECT #define CB_UP BUTTON_UP diff --git a/apps/plugins/chessclock.c b/apps/plugins/chessclock.c index ba8fea4935..6b2d436679 100644 --- a/apps/plugins/chessclock.c +++ b/apps/plugins/chessclock.c @@ -24,40 +24,7 @@ /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define CHC_QUIT BUTTON_OFF -#define CHC_STARTSTOP BUTTON_PLAY -#define CHC_RESET BUTTON_LEFT -#define CHC_MENU BUTTON_F1 -#define CHC_SETTINGS_INC BUTTON_UP -#define CHC_SETTINGS_DEC BUTTON_DOWN -#define CHC_SETTINGS_OK BUTTON_PLAY -#define CHC_SETTINGS_OK2 BUTTON_LEFT -#define CHC_SETTINGS_CANCEL BUTTON_OFF - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define CHC_QUIT BUTTON_OFF -#define CHC_STARTSTOP BUTTON_RIGHT -#define CHC_RESET BUTTON_LEFT -#define CHC_MENU BUTTON_MENU -#define CHC_SETTINGS_INC BUTTON_UP -#define CHC_SETTINGS_DEC BUTTON_DOWN -#define CHC_SETTINGS_OK BUTTON_RIGHT -#define CHC_SETTINGS_OK2 BUTTON_LEFT -#define CHC_SETTINGS_CANCEL BUTTON_MENU - -#elif CONFIG_KEYPAD == PLAYER_PAD -#define CHC_QUIT BUTTON_ON -#define CHC_STARTSTOP BUTTON_PLAY -#define CHC_RESET BUTTON_STOP -#define CHC_MENU BUTTON_MENU -#define CHC_SETTINGS_INC BUTTON_RIGHT -#define CHC_SETTINGS_DEC BUTTON_LEFT -#define CHC_SETTINGS_OK BUTTON_PLAY -#define CHC_SETTINGS_CANCEL BUTTON_STOP -#define CHC_SETTINGS_CANCEL2 BUTTON_MENU - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define CHC_QUIT BUTTON_SELECT #define CHC_STARTSTOP BUTTON_ON diff --git a/apps/plugins/chip8.c b/apps/plugins/chip8.c index 8645893820..f861d19caa 100644 --- a/apps/plugins/chip8.c +++ b/apps/plugins/chip8.c @@ -944,28 +944,8 @@ STATIC void chip8 (void) #endif /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD /* only 9 out of 16 chip8 buttons */ -#define CHIP8_OFF BUTTON_OFF -#define CHIP8_KEY1 BUTTON_F1 -#define CHIP8_KEY2 BUTTON_UP -#define CHIP8_KEY3 BUTTON_F3 -#define CHIP8_KEY4 BUTTON_LEFT -#define CHIP8_KEY5 BUTTON_PLAY -#define CHIP8_KEY6 BUTTON_RIGHT -#define CHIP8_KEY7 BUTTON_F2 -#define CHIP8_KEY8 BUTTON_DOWN -#define CHIP8_KEY9 BUTTON_ON - -#elif CONFIG_KEYPAD == ONDIO_PAD /* even more limited */ -#define CHIP8_OFF BUTTON_OFF -#define CHIP8_KEY2 BUTTON_UP -#define CHIP8_KEY4 BUTTON_LEFT -#define CHIP8_KEY5 BUTTON_MENU -#define CHIP8_KEY6 BUTTON_RIGHT -#define CHIP8_KEY8 BUTTON_DOWN - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define CHIP8_OFF BUTTON_OFF #define CHIP8_KEY2 BUTTON_UP #define CHIP8_KEY4 BUTTON_LEFT diff --git a/apps/plugins/chopper.c b/apps/plugins/chopper.c index a206192974..f42801f10f 100644 --- a/apps/plugins/chopper.c +++ b/apps/plugins/chopper.c @@ -86,17 +86,6 @@ Still To do: #define ACTION BUTTON_SELECT #define ACTIONTEXT "SELECT" -#elif CONFIG_KEYPAD == RECORDER_PAD -#define QUIT BUTTON_OFF -#define ACTION BUTTON_PLAY -#define ACTIONTEXT "PLAY" - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define QUIT BUTTON_OFF -#define ACTION BUTTON_UP -#define ACTION2 BUTTON_MENU -#define ACTIONTEXT "UP" - #elif CONFIG_KEYPAD == GIGABEAT_S_PAD \ || CONFIG_KEYPAD == SAMSUNG_YPR0_PAD #define QUIT BUTTON_BACK diff --git a/apps/plugins/credits.c b/apps/plugins/credits.c index d766d45cfd..6e993b5468 100644 --- a/apps/plugins/credits.c +++ b/apps/plugins/credits.c @@ -132,11 +132,8 @@ static int update_rowpos(int action, int cur_pos, int rows_per_screen, int tot_r static void roll_credits(void) { /* to do: use target defines iso keypads to set animation timings */ -#if (CONFIG_KEYPAD == RECORDER_PAD) - #define PAUSE_TIME 1.2 - #define ANIM_SPEED 35 -#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ - (CONFIG_KEYPAD == IPOD_1G2G_PAD) +#if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ + (CONFIG_KEYPAD == IPOD_1G2G_PAD) #define PAUSE_TIME 0 #define ANIM_SPEED 100 #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) diff --git a/apps/plugins/cube.c b/apps/plugins/cube.c index 0f51e44e5c..4cd314a035 100644 --- a/apps/plugins/cube.c +++ b/apps/plugins/cube.c @@ -37,39 +37,7 @@ #define DISP_TIME 30 /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define CUBE_QUIT BUTTON_OFF -#define CUBE_NEXT BUTTON_RIGHT -#define CUBE_PREV BUTTON_LEFT -#define CUBE_INC BUTTON_UP -#define CUBE_DEC BUTTON_DOWN -#define CUBE_MODE BUTTON_F1 -#define CUBE_PAUSE BUTTON_PLAY -#define CUBE_HIGHSPEED BUTTON_ON - -#elif CONFIG_KEYPAD == PLAYER_PAD -#define CUBE_QUIT BUTTON_STOP -#define CUBE_INC BUTTON_RIGHT -#define CUBE_DEC BUTTON_LEFT -#define CUBE_NEXT (BUTTON_ON | BUTTON_RIGHT) -#define CUBE_PREV (BUTTON_ON | BUTTON_LEFT) -#define CUBE_MODE BUTTON_MENU -#define CUBE_PAUSE BUTTON_PLAY -#define CUBE_HIGHSPEED_PRE BUTTON_ON -#define CUBE_HIGHSPEED (BUTTON_ON | BUTTON_REL) - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define CUBE_QUIT BUTTON_OFF -#define CUBE_NEXT BUTTON_RIGHT -#define CUBE_PREV BUTTON_LEFT -#define CUBE_INC BUTTON_UP -#define CUBE_DEC BUTTON_DOWN -#define CUBE_MODE_PRE BUTTON_MENU -#define CUBE_MODE (BUTTON_MENU | BUTTON_REL) -#define CUBE_PAUSE (BUTTON_MENU | BUTTON_LEFT) -#define CUBE_HIGHSPEED (BUTTON_MENU | BUTTON_RIGHT) - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define CUBE_QUIT BUTTON_OFF #define CUBE_NEXT BUTTON_RIGHT diff --git a/apps/plugins/euroconverter.c b/apps/plugins/euroconverter.c deleted file mode 100644 index d7aa61f806..0000000000 --- a/apps/plugins/euroconverter.c +++ /dev/null @@ -1,599 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2003 Pierre Delore - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ -#include "plugin.h" -#include "lib/configfile.h" -#include "lib/pluginlib_exit.h" - -/* Euro converter for the player */ -/* -Use: -+ : Digit +1 -- : Digit -1 -PLAY : Next digit -STOP : Prev digit -ON : RESET -ON+PLAY : Swap Euro<>Home -MENU : Display the Menu - Currency -> Allows to choose the currency - Exit-> Exit the plugin - -Notes: -I don't use float. -I use signed long long (64 bits). -A value have 5 digits after the . (123.45 = 12345000) - -To do: -- The Irish currency needs 6 digits after the . to have sufficient precision on big number -*/ - - - -/* Name and path of the config file*/ -static const char cfg_filename[] = "euroconverter.cfg"; -#define CFGFILE_VERSION 0 /* Current config file version */ -#define CFGFILE_MINVERSION 0 /* Minimum config file version to accept */ - -/* typedef for simplifying usage of long long type */ -typedef long long int longlong_t; - -/*Pattern for the converter*/ -static unsigned char pattern_euro[]={0x07, 0x08, 0x1E, 0x10, 0x1E, 0x08, 0x07}; /* € */ -static unsigned char pattern_home[]={0x04, 0x0A, 0x11, 0x1F, 0x11, 0x11, 0x1F}; /* Home icon*/ - -/* 1 euro = ... (remenber 5 digits after the .)*/ -static int currency[12]={ - 655957, /*FRF France*/ - 195583, /*DEM Germany*/ - 1376030, /*ATS Austria*/ - 4033990, /*BEF Belgium*/ - 16638600, /*ESP Spain*/ - 594573, /*FIM Finland*/ - 78756, /*IEP Ireland*/ - 193627000, /*ITL Italy*/ - 4033990, /*LUF Luxemburg*/ - 220371, /*NLG Netherlands*/ - 20048200, /*PTE Portugal*/ - 34075100, /*GRD Greece*/ - }; - -/* Number of digit of the currency (for the display) */ -static int nb_digit[12]={ - 2, /*FRF France*/ - 2, /*DEM Germany*/ - 2, /*ATS Austria*/ - 2, /*BEF Belgium*/ - 0, /*ESP Spain*/ - 2, /*FIM Finland*/ - 2, /*IEP Ireland*/ - 0, /*ITL Italy*/ - 2, /*LUF Luxemburg*/ - 2, /*NLG Netherlands*/ - 0, /*PTE Portugal*/ - 0 /*GRD Greece*/ - }; - -/* max euro to have home currency */ -static longlong_t max_euro[12]={ - 99999999000LL, /*FRF France 999 999.99 */ - 99999999000LL, /*DEM Germany 999 999.99 */ - 99999999000LL, /*ATS Austria 999 999.99 */ - 99999999000LL, /*BEF Belgium 999 999.99 */ - 99999999000LL, /*ESP Spain 99 999 999 */ - 99999999000LL, /*FIM Finland 999 999.99 */ - 99999999000LL, /*IEP Ireland 999 999.99 */ - 51645690000LL, /*ITL Italy 999 999 999 */ - 99999999000LL, /*LUF Luxemburg 999 999.99 */ - 99999999000LL, /*NLG Netherlands 999 999.99 */ - 99999999000LL, /*PTE Portugal 99 999 999 */ - 29347028000LL /*GRD Greece 99 999 999 */ - }; - -/* max home to have euro currency */ -/* 92233720300000 Limitation due to the max capacity of long long (2^63)*/ -static longlong_t max_curr[12]={ - 99999999000LL, /*FRF France 152449.02 */ - 99999999000LL, /*DEM Germany 511291.88 */ - 99999999000LL, /*ATS Austria 72672.83 */ - 99999999000LL, /*BEF Belgium 24789.35 */ - 92233720300000LL,/*ESP Spain 5543358.23 */ - 99999999000LL, /*FIM Finland 168187.92 */ - 9999999900LL, /*IEP Ireland 1269744.51 exact value=1269738.07 */ - 92233720300000LL,/*ITL Italy 476347.41 */ - 99999999000LL, /*LUF Luxemburg 24789.35 */ - 99999999000LL, /*NLG Netherlands 453780.21 */ - 92233720300000LL,/*PTE Portugal 4600598.57 */ - 92233720300000LL /*GRD Greece 2706777.69 */ - }; - -static unsigned char *abbrev_str[12] = { - "...FRF...", /*France*/ - "...DEM...", /*Germany*/ - "...ATS...", /*Austria*/ - "...BEF...", /*Belgium*/ - "...ESP...", /*Spain*/ - "...FIM...", /*Finland*/ - "...IEP...", /*Ireland*/ - "...ITL...", /*Italy*/ - "...LUF...", /*Luxemburg*/ - "...NLG...", /*Netherlands*/ - "...PTE...", /*Portugal*/ - "...GRD..." /*Greece*/ - }; - - -static unsigned long heuro,hhome; /*Handles for the new patterns*/ - -static char *currency_str[12] = { - "France", - "Germany", - "Austria", - "Belgium", - "Spain", - "Finland", - "Ireland", - "Italy", - "Luxemburg", - "Netherlands", - "Portugal", - "Greece" -}; - - -static int country; /*Country selected*/ -static int cur_pos; /*Cursor position*/ -static longlong_t inc; - -/* Persistent settings */ -static struct configdata config[] = { - { TYPE_ENUM, 0, 12, { .int_p = &country }, "country", currency_str } -}; - - -/* 64bits*64 bits with 5 digits after the . */ -static longlong_t mymul(longlong_t a, longlong_t b) -{ - return((a*b)/100000LL); -} - - -/* 64bits/64 bits with 5 digits after the . */ -static longlong_t mydiv(longlong_t a, longlong_t b) -{ - return((a*100000LL)/b); -} - - -/* 123.45=12345000 split => i=123 f=45000*/ -static void split(longlong_t v, longlong_t* i, longlong_t* f) -{ - longlong_t t; - - t=v/100000LL; - (*i)=t; - (*f)=(v-(t*100000LL)); -} - - -/* result=10^n */ -static longlong_t pow10(int n) -{ - int i; - longlong_t r; - - r=1; - for (i=0;i<n;i++) - r=r*10LL; - return(r); -} - - -/* round the i.f at n digit after the . */ -static void round(longlong_t* i, longlong_t* f, int n) -{ - - longlong_t m; - int add=0; - - m=(int)pow10(5-n-1); - if (((*f)/m)%10>=5) - add=1; - if (n>0) - { - (*f)=((*f)/(int)pow10(5-n))+add; - if ((*f)==100LL) - { - (*i)+=1; - (*f)=0; - } - } - else - { - (*i)+=add; - (*f)=0; - } -} - - -/* Display the imput and the result - pos: false : first line - : true : second line -*/ -static void display(longlong_t euro, longlong_t home, bool pos) -{ - longlong_t i,f; - unsigned char str[20]; - unsigned char s1[20]; - unsigned char s2[20]; - - if (pos) - { /*Edit the second line*/ - rb->strcpy(s1," %6d.%02d"); - if (nb_digit[country]==2) - rb->strcpy(s2,"\xee\x84\x90%06d.%02d"); - else - rb->strcpy(s2,"\xee\x84\x90%09d"); - } - else - { - rb->strcpy(s1,"\xee\x84\x90%06d.%02d"); - if (nb_digit[country]==2) - rb->strcpy(s2," %6d.%02d"); - else - rb->strcpy(s2," %9d"); - } - - rb->lcd_remove_cursor(); - /*First line*/ - rb->lcd_putc(0,0,heuro); - split(euro,&i,&f); - if (pos) - round(&i,&f,2); - rb->snprintf(str,sizeof(str),s1,(int)i,(int)f); - - if (!pos) - { - rb->lcd_puts(1,0,str); - rb->lcd_put_cursor(10-cur_pos,0,0x5F); - } - else - rb->lcd_puts_scroll(1,0,str); - - /*Second line*/ - rb->lcd_putc(0,1,hhome); - split(home,&i,&f); - if (!pos) - round(&i,&f,nb_digit[country]); - rb->snprintf(str,sizeof(str),s2,(int)i,(int)f); - if (pos) - { - rb->lcd_puts(1,1,str); - rb->lcd_put_cursor(10-cur_pos,1,0x5F); - } - else - rb->lcd_puts_scroll(1,1,str); - - rb->lcd_update(); -} - - -/* Show country Abbreviation */ -static void show_abbrev(void) -{ - rb->splash(HZ*3/4,abbrev_str[country]); -} - - -/* Save the config to disk */ -static void save_config(void) -{ - configfile_save(cfg_filename, config, 1, CFGFILE_VERSION); -} - - -/* Load the config from disk */ -static void load_config(void) -{ - configfile_load(cfg_filename, config, 1, CFGFILE_MINVERSION); -} - - -/*Currency choice*/ -static void currency_menu(void) -{ - int c=country; - - rb->lcd_clear_display(); - while (true) - { - rb->lcd_puts(0,0,"Currency:"); - rb->lcd_puts(0,1,currency_str[c]); - rb->lcd_update(); - switch (rb->button_get(true)) - { - case BUTTON_RIGHT|BUTTON_REL: - c++; - if (c>11) - c=0; - break; - case BUTTON_LEFT|BUTTON_REL: - c--; - if (c<0) - c=11; - break; - case BUTTON_PLAY|BUTTON_REL: - country=c; - save_config(); - return; - break; - case BUTTON_STOP|BUTTON_REL: - return; - } - } -} - - -/* Display the choice menu. */ -static int euro_menu(void) -{ - int c=0; - - - while (true) - { - rb->lcd_clear_display(); - rb->lcd_puts(0,0," Currency"); - rb->lcd_puts(0,1," Exit"); - rb->lcd_putc(0,c,0xe110); - rb->lcd_update(); - - switch (rb->button_get(true)) - { - case BUTTON_RIGHT|BUTTON_REL: - c=1; - break; - case BUTTON_LEFT|BUTTON_REL: - c=0; - break; - case BUTTON_PLAY|BUTTON_REL: - if (c==0) - currency_menu(); - else - return 1; - break; - case BUTTON_STOP|BUTTON_REL: - return 0; - } - } -} - - -/* Call when the program end */ -static void euro_exit(void) -{ - //Restore the old pattern (i don't find another way to do this. An idea?) - rb->lcd_unlock_pattern(heuro); - rb->lcd_unlock_pattern(hhome); - - //Clear the screen - rb->lcd_clear_display(); - rb->lcd_update(); -} - - -/* this is the plugin entry point */ -enum plugin_status plugin_start(const void* parameter) -{ - bool end, pos; - longlong_t e,h,old_e,old_h; - int button; - - /* if you don't use the parameter, you can do like - this to avoid the compiler warning about it */ - (void)parameter; - atexit(euro_exit); - - /*Get the pattern handle*/ - heuro=rb->lcd_get_locked_pattern(); - hhome=rb->lcd_get_locked_pattern(); - rb->lcd_define_pattern(heuro, pattern_euro); - rb->lcd_define_pattern(hhome, pattern_home); - - h=0; - e=0; - end=false; - pos=false; - country=0; - cur_pos=3; - inc=100000; - - load_config(); - - /*Empty the event queue*/ - rb->button_clear_queue(); - - display(e,h,false); - show_abbrev(); - display(e,h,false); - - /*Main loop*/ - while(end!=true) - { - button = rb->button_get(true); - switch (button) - { - case BUTTON_MENU|BUTTON_REL: - switch (euro_menu()) - { - case 1: - end=true; - break; - } - if (!pos) - { - if (e>max_euro[country]) - e=0; - cur_pos=3; - } - else - { - if (h>max_curr[country]) - h=0; - if (nb_digit[country]==2) - cur_pos=3; - else - cur_pos=0; - } - - display(e,h,pos); - break; - - case BUTTON_ON | BUTTON_PLAY: - pos=!pos; - - case BUTTON_ON | BUTTON_REL: - e=0; - h=0; - if (!pos) - { - cur_pos=3; - inc=100000; - } - else - { - inc=100000; - if (nb_digit[country]==2) - cur_pos=3; - else - cur_pos=0; - } - show_abbrev(); - break; - - case BUTTON_STOP|BUTTON_REL: - cur_pos--; - if (!pos) - { - if (cur_pos<0) - cur_pos=0; - if (cur_pos==2) - cur_pos=1; - if (cur_pos>2) - inc=pow10(3+cur_pos-1); - else - inc=pow10(3+cur_pos); - } - else - { - if (cur_pos<0) - cur_pos=0; - if (nb_digit[country]==2) - { - if (cur_pos==2) - cur_pos=1; - if (cur_pos>2) - inc=pow10(3+cur_pos-1); - else - inc=pow10(3+cur_pos); - } - else - inc=pow10(5+cur_pos); - - } - break; - - case BUTTON_PLAY|BUTTON_REL: - cur_pos++; - if (!pos) - { - if (cur_pos>8) - cur_pos=8; - if (cur_pos==2) - cur_pos=3; - if (cur_pos>2) - inc=pow10(3+cur_pos-1); - else - inc=pow10(3+cur_pos); - } - else - { - if (cur_pos>8) - cur_pos=8; - if (nb_digit[country]==2) - { - if (cur_pos==2) - cur_pos=3; - if (cur_pos>2) - inc=pow10(3+cur_pos-1); - else - inc=pow10(3+cur_pos); - } - else - inc=pow10(5+cur_pos); - } - break; - - case BUTTON_LEFT|BUTTON_REL: - case BUTTON_LEFT|BUTTON_REPEAT: - if (!pos) - { - e-=inc; - if (e<0) - e=0; - } - else - { - h-=inc; - if (h<0) - h=0; - } - break; - - case BUTTON_RIGHT|BUTTON_REL: - case BUTTON_RIGHT|BUTTON_REPEAT: - old_e=e; - old_h=h; - if (!pos) - { - e+=inc; - if (e>max_euro[country]) - e=old_e; - } - else - { - h+=inc; - if (h>max_curr[country]) - h=old_h; - } - break; - - default: - exit_on_usb(button); - break; - } - /*Display*/ - if (!pos) /*Euro>home*/ - h=mymul(e,currency[country]); - else /*Home>euro*/ - e=mydiv(h,currency[country]); - display(e,h,pos); - } - return PLUGIN_OK; -} diff --git a/apps/plugins/firmware_flash.c b/apps/plugins/firmware_flash.c deleted file mode 100644 index 36b8873a8c..0000000000 --- a/apps/plugins/firmware_flash.c +++ /dev/null @@ -1,1033 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Plugin for reprogramming the whole Flash ROM chip with a new content. -* !!! DON'T MESS WITH THIS CODE UNLESS YOU'RE ABSOLUTELY SURE WHAT YOU DO !!! -* -* Copyright (C) 2003 Jörg Hohensohn [IDC]Dragon -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 -* of the License, or (at your option) any later version. -* -* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -* KIND, either express or implied. -* -****************************************************************************/ -#include "plugin.h" - -/* define DUMMY if you only want to "play" with the UI, does no harm */ -/* #define DUMMY */ - -#ifndef UINT8 -#define UINT8 unsigned char -#endif - -#ifndef UINT16 -#define UINT16 unsigned short -#endif - -#ifndef UINT32 -#define UINT32 unsigned long -#endif - -/* platform IDs as I have used them in my firmware templates */ -#define ID_RECORDER 0 -#define ID_FM 1 -#define ID_PLAYER 2 -#define ID_REC_V2 3 -#define ID_ONDIO_FM 4 -#define ID_ONDIO_SP 5 - -/* Here I have to check for ARCHOS_* defines in source code, which is - generally strongly discouraged. But here I'm not checking for a certain - feature, I'm checking for the model itself. */ -#if defined(ARCHOS_PLAYER) -#define FILE_TYPE "player" -#define KEEP VERSION_ADR /* keep the firmware version */ -#define PLATFORM_ID ID_PLAYER -#elif defined(ARCHOS_RECORDER) -#define FILE_TYPE "rec" -#define KEEP MASK_ADR /* keep the mask value */ -#define PLATFORM_ID ID_RECORDER -#elif defined(ARCHOS_RECORDERV2) -#define FILE_TYPE "v2" -#define KEEP MASK_ADR /* keep the mask value */ -#define PLATFORM_ID ID_REC_V2 -#elif defined(ARCHOS_FMRECORDER) -#define FILE_TYPE "fm" -#define KEEP MASK_ADR /* keep the mask value */ -#define PLATFORM_ID ID_FM -#elif defined(ARCHOS_ONDIOFM) -#define FILE_TYPE "ondiofm" -#define KEEP MASK_ADR /* keep the mask value */ -#define PLATFORM_ID ID_ONDIO_FM -#elif defined(ARCHOS_ONDIOSP) -#define FILE_TYPE "ondiosp" -#define KEEP MASK_ADR /* keep the mask value */ -#define PLATFORM_ID ID_ONDIO_SP -#else -#error this platform is not (yet) flashable -#endif - - - -#if CONFIG_KEYPAD == ONDIO_PAD /* limited keypad */ -#define KEY1 BUTTON_LEFT -#define KEY2 BUTTON_UP -#define KEY3 BUTTON_RIGHT -#define KEYNAME1 "[Left]" -#define KEYNAME2 "[Up]" -#define KEYNAME3 "[Right]" -#else /* recorder keypad */ -#define KEY1 BUTTON_F1 -#define KEY2 BUTTON_F2 -#define KEY3 BUTTON_F3 -#define KEYNAME1 "[F1]" -#define KEYNAME2 "[F2]" -#define KEYNAME3 "[F3]" -#endif - -/* result of the CheckFirmwareFile() function */ -typedef enum -{ - eOK = 0, - eFileNotFound, /* errors from here on */ - eTooBig, - eTooSmall, - eReadErr, - eBadContent, - eCrcErr, - eBadPlatform, -} tCheckResult; - -/* result of the CheckBootROM() function */ -typedef enum -{ - eBootROM, /* the supported boot ROM(s) */ - eUnknown, /* unknown boot ROM */ - eROMless, /* flash mapped to zero */ -} tCheckROM; - -typedef struct -{ - UINT8 manufacturer; - UINT8 id; - int size; - char name[32]; -} tFlashInfo; - -#define MASK_ADR 0xFC /* position of hardware mask value in Flash */ -#define VERSION_ADR 0xFE /* position of firmware version value in Flash */ -#define PLATFORM_ADR 0xFB /* position of my platform ID value in Flash */ -#define SEC_SIZE 4096 /* size of one flash sector */ -static UINT8* sector; /* better not place this on the stack... */ -static volatile UINT8* FB = (UINT8*)0x02000000; /* Flash base address */ - - -/***************** Flash Functions *****************/ - - -/* read the manufacturer and device ID */ -bool ReadID(volatile UINT8* pBase, UINT8* pManufacturerID, UINT8* pDeviceID) -{ - UINT8 not_manu, not_id; /* read values before switching to ID mode */ - UINT8 manu, id; /* read values when in ID mode */ - - pBase = (UINT8*)((UINT32)pBase & 0xFFF80000); /* down to 512k align */ - - /* read the normal content */ - not_manu = pBase[0]; /* should be 'A' (0x41) and 'R' (0x52) */ - not_id = pBase[1]; /* from the "ARCH" marker */ - - pBase[0x5555] = 0xAA; /* enter command mode */ - pBase[0x2AAA] = 0x55; - pBase[0x5555] = 0x90; /* ID command */ - rb->sleep(HZ/50); /* Atmel wants 20ms pause here */ - - manu = pBase[0]; - id = pBase[1]; - - pBase[0] = 0xF0; /* reset flash (back to normal read mode) */ - rb->sleep(HZ/50); /* Atmel wants 20ms pause here */ - - /* I assume success if the obtained values are different from - the normal flash content. This is not perfectly bulletproof, they - could theoretically be the same by chance, causing us to fail. */ - if (not_manu != manu || not_id != id) /* a value has changed */ - { - *pManufacturerID = manu; /* return the results */ - *pDeviceID = id; - return true; /* success */ - } - return false; /* fail */ -} - - -/* erase the sector which contains the given address */ -bool EraseSector(volatile UINT8* pAddr) -{ -#ifdef DUMMY - (void)pAddr; /* prevents warning */ - return true; -#else - volatile UINT8* pBase = (UINT8*)((UINT32)pAddr & 0xFFF80000); /* round down to 512k align */ - unsigned timeout = 43000; /* the timeout loop should be no less than 25ms */ - - pBase[0x5555] = 0xAA; /* enter command mode */ - pBase[0x2AAA] = 0x55; - pBase[0x5555] = 0x80; /* erase command */ - pBase[0x5555] = 0xAA; /* enter command mode */ - pBase[0x2AAA] = 0x55; - *pAddr = 0x30; /* erase the sector */ - - /* I counted 7 instructions for this loop -> min. 0.58 us per round */ - /* Plus memory waitstates it will be much more, gives margin */ - while (*pAddr != 0xFF && --timeout); /* poll for erased */ - - return (timeout != 0); -#endif -} - - -/* address must be in an erased location */ -static inline bool ProgramByte(volatile UINT8* pAddr, UINT8 data) -{ -#ifdef DUMMY - (void)pAddr; /* prevents warnings */ - (void)data; - return true; -#else - unsigned timeout = 35; /* the timeout loop should be no less than 20us */ - - if (~*pAddr & data) /* just a safety feature, not really necessary */ - return false; /* can't set any bit from 0 to 1 */ - - FB[0x5555] = 0xAA; /* enter command mode */ - FB[0x2AAA] = 0x55; - FB[0x5555] = 0xA0; /* byte program command */ - - *pAddr = data; - - /* I counted 7 instructions for this loop -> min. 0.58 us per round */ - /* Plus memory waitstates it will be much more, gives margin */ - while (*pAddr != data && --timeout); /* poll for programmed */ - - return (timeout != 0); -#endif -} - - -/* this returns true if supported and fills the info struct */ -bool GetFlashInfo(tFlashInfo* pInfo) -{ - rb->memset(pInfo, 0, sizeof(tFlashInfo)); - - if (!ReadID(FB, &pInfo->manufacturer, &pInfo->id)) - return false; - - if (pInfo->manufacturer == 0xBF) /* SST */ - { - if (pInfo->id == 0xD6) - { - pInfo->size = 256* 1024; /* 256k */ - rb->strcpy(pInfo->name, "SST39VF020"); - return true; - } - else if (pInfo->id == 0xD7) - { - pInfo->size = 512* 1024; /* 512k */ - rb->strcpy(pInfo->name, "SST39VF040"); - return true; - } - else - return false; - } - return false; -} - -/*********** Firmware File Functions + helpers ************/ - -/* test if the version number is consistent with the platform */ -bool CheckPlatform(int platform_id, UINT16 version) -{ - if (version == 200) - { /* for my very first firmwares, I foolishly changed it to 200 */ - return (platform_id == ID_RECORDER || platform_id == ID_FM); - } - else if (version == 123) - { /* it can be a FM or V2 recorder */ - return (platform_id == ID_FM || platform_id == ID_REC_V2); - } - else if (version == 132) - { /* newer Ondio, and seen on a V2 recorder */ - return (platform_id == ID_ONDIO_SP || platform_id == ID_ONDIO_FM - || platform_id == ID_REC_V2); - } - else if (version == 104) - { /* classic Ondio128 */ - return (platform_id == ID_ONDIO_FM); - } - else if (version >= 115 && version <= 129) - { /* the range of Recorders seen so far */ - return (platform_id == ID_RECORDER); - } - else if (version == 0 || (version >= 300 && version <= 508)) - { /* for very old players, I've seen zero */ - return (platform_id == ID_PLAYER); - } - - return false; /* unknown */ -} - - -tCheckResult CheckFirmwareFile(char* filename, int chipsize, bool is_romless) -{ - int i; - int fd; - int fileleft; /* size info, how many left for reading */ - int fileread = 0; /* total size as read from the file */ - int read_now; /* how many to read for this sector */ - int got_now; /* how many gotten for this sector */ - unsigned crc32 = 0xFFFFFFFF; /* CCITT init value */ - unsigned file_crc; /* CRC value read from file */ - bool has_crc; - - fd = rb->open(filename, O_RDONLY); - if (fd < 0) - return eFileNotFound; - - fileleft = rb->filesize(fd); - if (fileleft > chipsize) - { - rb->close(fd); - return eTooBig; - } - else if (fileleft < 20000) /* give it some reasonable lower limit */ - { - rb->close(fd); - return eTooSmall; - } - - if (fileleft == 256*1024) - { /* original dumped firmware file has no CRC nor platform ID */ - has_crc = false; - } - else - { - has_crc = true; - fileleft -= sizeof(unsigned); /* exclude the last 4 bytes */ - } - - /* do some sanity checks */ - - got_now = rb->read(fd, sector, SEC_SIZE); /* read first sector */ - fileread += got_now; - fileleft -= got_now; - if (got_now != SEC_SIZE) - { - rb->close(fd); - return eReadErr; - } - - /* version number in file plausible with this hardware? */ - if (!CheckPlatform(PLATFORM_ID, *(UINT16*)(sector + VERSION_ADR))) - { - rb->close(fd); - return eBadPlatform; - } - - if (has_crc) - { - crc32 = rb->crc_32(sector, SEC_SIZE, crc32); /* checksum */ - - /* in addition to the CRC, my files also have a platform ID */ - if (sector[PLATFORM_ADR] != PLATFORM_ID) /* for our hardware? */ - { - rb->close(fd); - return eBadPlatform; - } - } - - if (is_romless) - { /* in this case, there is not much we can check */ - if (*(UINT32*)sector != 0x00000200) /* reset vector */ - { - rb->close(fd); - return eBadContent; - } - } - else - { - /* compare some bytes which have to be identical */ - if (*(UINT32*)sector != 0x41524348) /* "ARCH" */ - { - rb->close(fd); - return eBadContent; - } - - for (i = 0x30; i<MASK_ADR-2; i++) /* leave two bytes for me */ - { - if (sector[i] != FB[i]) - { - rb->close(fd); - return eBadContent; - } - } - } - - /* check if we can read the whole file, and do checksum */ - do - { - read_now = MIN(SEC_SIZE, fileleft); - got_now = rb->read(fd, sector, read_now); - fileread += got_now; - fileleft -= got_now; - - if (read_now != got_now) - { - rb->close(fd); - return eReadErr; - } - - if (has_crc) - { - crc32 = rb->crc_32(sector, got_now, crc32); /* checksum */ - } - } while (fileleft); - - if (has_crc) - { - got_now = rb->read(fd, &file_crc, sizeof(file_crc)); - if (got_now != sizeof(file_crc)) - { - rb->close(fd); - return eReadErr; - } - } - - /* must be EOF now */ - got_now = rb->read(fd, sector, SEC_SIZE); - rb->close(fd); - if (got_now != 0) - return eReadErr; - - if (has_crc && file_crc != crc32) - return eCrcErr; - - return eOK; -} - - -/* returns the # of failures, 0 on success */ -unsigned ProgramFirmwareFile(char* filename, int chipsize) -{ - int i, j; - int fd; - int read = SEC_SIZE; /* how many for this sector */ - UINT16 keep = *(UINT16*)(FB + KEEP); /* we must keep this! */ - unsigned failures = 0; - - fd = rb->open(filename, O_RDONLY); - if (fd < 0) - return false; - - for (i=0; i<chipsize; i+=SEC_SIZE) - { - if (!EraseSector(FB + i)) - { - /* nothing we can do, let the programming count the errors */ - } - - if (read == SEC_SIZE) /* not EOF yet */ - { - read = rb->read(fd, sector, SEC_SIZE); - if (i==0) - { /* put original value back in */ - *(UINT16*)(sector + KEEP) = keep; - } - - for (j=0; j<read; j++) - { - if (!ProgramByte(FB + i + j, sector[j])) - { - failures++; - } - } - } - } - - rb->close(fd); - - return failures; -} - - -/* returns the # of failures, 0 on success */ -unsigned VerifyFirmwareFile(char* filename) -{ - int i=0, j; - int fd; - int read = SEC_SIZE; /* how many for this sector */ - unsigned failures = 0; - - fd = rb->open(filename, O_RDONLY); - if (fd < 0) - return false; - - do - { - read = rb->read(fd, sector, SEC_SIZE); - - for (j=0; j<read; j++) - { - /* position of keep value is no error */ - if (FB[i] != sector[j] && i != KEEP && i != (KEEP+1)) - { - failures++; - } - i++; - } - } - while (read == SEC_SIZE); - - rb->close(fd); - - return failures; -} - - -/***************** Support Functions *****************/ - -/* check if we have "normal" boot ROM or flash mirrored to zero */ -tCheckROM CheckBootROM(void) -{ - unsigned boot_crc; - unsigned* pFlash = (unsigned*)FB; - unsigned* pRom = (unsigned*)0x0; - unsigned i; - - boot_crc = rb->crc_32((unsigned char*)0x0, 64*1024, 0xFFFFFFFF); - if (boot_crc == 0x56DBA4EE /* the known boot ROM */ -#if PLATFORM_ID == ID_PLAYER - /* alternative boot ROM found in one single player so far */ - || boot_crc == 0x358099E8 -#endif - ) - return eBootROM; - - /* check if ROM is a flash mirror */ - for (i=0; i<256*1024/sizeof(unsigned); i++) - { - if (*pRom++ != *pFlash++) - { /* difference means no mirror */ - return eUnknown; - } - } - - return eROMless; -} - - -/***************** User Interface Functions *****************/ - -int WaitForButton(void) -{ - int button; - - do - { - button = rb->button_get(true); - } while (IS_SYSEVENT(button) || (button & BUTTON_REL)); - - return button; -} - -#ifdef HAVE_LCD_BITMAP -/* Recorder implementation */ - -/* helper for DoUserDialog() */ -void ShowFlashInfo(tFlashInfo* pInfo) -{ - if (!pInfo->manufacturer) - { - rb->lcd_puts(0, 0, "Flash: M=?? D=??"); - rb->lcd_puts(0, 1, "Impossible to program"); - } - else - { - rb->lcd_putsf(0, 0, "Flash: M=%02x D=%02x", - pInfo->manufacturer, pInfo->id); - - - if (pInfo->size) - { - rb->lcd_puts(0, 1, pInfo->name); - rb->lcd_putsf(0, 2, "Size: %d KB", pInfo->size / 1024); - } - else - { - rb->lcd_puts(0, 1, "Unsupported chip"); - } - - } - - rb->lcd_update(); -} - - -/* Kind of our main function, defines the application flow. */ -void DoUserDialog(char* filename) -{ - tFlashInfo FlashInfo; - char default_filename[32]; - int button; - int rc; /* generic return code */ - size_t memleft; - tCheckROM result; - bool is_romless; - - /* this can only work if Rockbox runs in DRAM, not flash ROM */ - if ((UINT8*)rb >= FB && (UINT8*)rb < FB + 4096*1024) /* 4 MB max */ - { /* we're running from flash */ - rb->splash(HZ*3, "Not from ROM"); - return; /* exit */ - } - - /* test if the user is running the correct plugin for this box */ - if (!CheckPlatform(PLATFORM_ID, *(UINT16*)(FB + VERSION_ADR))) - { - rb->splash(HZ*3, "Wrong plugin"); - return; /* exit */ - } - - /* refuse to work if the power may fail meanwhile */ - if (!rb->battery_level_safe()) - { - rb->splash(HZ*3, "Battery too low!"); - return; /* exit */ - } - - /* check boot ROM */ - result = CheckBootROM(); - if (result == eUnknown) - { /* no support for any other yet */ - rb->splash(HZ*3, "Wrong boot ROM"); - return; /* exit */ - } - is_romless = (result == eROMless); - - /* compose filename if none given */ - if (filename == NULL) - { - rb->snprintf( - default_filename, - sizeof(default_filename), - "/firmware_%s%s.bin", - FILE_TYPE, - is_romless ? "_norom" : ""); - filename = default_filename; - } - - /* "allocate" memory */ - sector = rb->plugin_get_buffer(&memleft); - if (memleft < SEC_SIZE) /* need buffer for a flash sector */ - { - rb->splash(HZ*3, "Out of memory"); - return; /* exit */ - } - - rb->lcd_setfont(FONT_SYSFIXED); - - rc = GetFlashInfo(&FlashInfo); - ShowFlashInfo(&FlashInfo); - if (FlashInfo.size == 0) /* no valid chip */ - { - rb->splash(HZ*3, "Sorry!"); - return; /* exit */ - } - - rb->lcd_puts(0, 3, "using file:"); - rb->lcd_puts_scroll(0, 4, filename); - rb->lcd_puts(0, 6, KEYNAME1 " to check file"); - rb->lcd_puts(0, 7, "other key to exit"); - rb->lcd_update(); - - button = WaitForButton(); - if (button != KEY1) - { - return; - } - - rb->lcd_clear_display(); - rb->lcd_puts(0, 0, "checking..."); - rb->lcd_update(); - - rc = CheckFirmwareFile(filename, FlashInfo.size, is_romless); - rb->lcd_puts(0, 0, "checked:"); - switch (rc) - { - case eOK: - rb->lcd_puts(0, 1, "File OK."); - break; - case eFileNotFound: - rb->lcd_puts(0, 1, "File not found."); - rb->lcd_puts(0, 2, "Put this in root:"); - rb->lcd_puts_scroll(0, 4, filename); - break; - case eTooBig: - rb->lcd_puts(0, 1, "File too big,"); - rb->lcd_puts(0, 2, "larger than chip."); - break; - case eTooSmall: - rb->lcd_puts(0, 1, "File too small."); - rb->lcd_puts(0, 2, "Incomplete?"); - break; - case eReadErr: - rb->lcd_puts(0, 1, "Read error."); - break; - case eBadContent: - rb->lcd_puts(0, 1, "File invalid."); - rb->lcd_puts(0, 2, "Sanity check fail."); - break; - case eCrcErr: - rb->lcd_puts(0, 1, "File invalid."); - rb->lcd_puts(0, 2, "CRC check failed,"); - rb->lcd_puts(0, 3, "checksum mismatch."); - break; - case eBadPlatform: - rb->lcd_puts(0, 1, "Wrong file for"); - rb->lcd_puts(0, 2, "this hardware."); - break; - default: - rb->lcd_puts(0, 1, "Check failed."); - break; - } - - if (rc == eOK) - { - rb->lcd_puts(0, 6, KEYNAME2 " to program"); - rb->lcd_puts(0, 7, "other key to exit"); - } - else - { /* error occured */ - rb->lcd_puts(0, 6, "Any key to exit"); - } - - rb->lcd_update(); - - button = WaitForButton(); - if (button != KEY2 || rc != eOK) - { - return; - } - - rb->lcd_clear_display(); - rb->lcd_puts(0, 0, "Program all Flash?"); - rb->lcd_puts(0, 1, "Are you sure?"); - rb->lcd_puts(0, 2, "If it goes wrong,"); - rb->lcd_puts(0, 3, "it kills your box!"); - rb->lcd_puts(0, 4, "See documentation."); - - rb->lcd_puts(0, 6, KEYNAME3 " to proceed"); - rb->lcd_puts(0, 7, "other key to exit"); - rb->lcd_update(); - - button = WaitForButton(); - if (button != KEY3) - { - return; - } - - rb->lcd_clear_display(); - rb->lcd_puts(0, 0, "Programming..."); - rb->lcd_update(); - - rc = ProgramFirmwareFile(filename, FlashInfo.size); - if (rc) - { /* errors */ - rb->lcd_clear_display(); - rb->lcd_puts(0, 0, "Panic:"); - rb->lcd_puts(0, 1, "Programming fail!"); - rb->lcd_putsf(0, 2, "%d errors", rc); - rb->lcd_update(); - button = WaitForButton(); - } - - rb->lcd_clear_display(); - rb->lcd_puts(0, 0, "Verifying..."); - rb->lcd_update(); - - rc = VerifyFirmwareFile(filename); - - rb->lcd_clear_display(); - if (rc == 0) - { - rb->lcd_puts(0, 0, "Verify OK."); - } - else - { - rb->lcd_puts(0, 0, "Panic:"); - rb->lcd_puts(0, 1, "Verify fail!"); - rb->lcd_putsf(0, 2, "%d errors", rc); - } - rb->lcd_puts(0, 7, "Any key to exit"); - rb->lcd_update(); - - button = WaitForButton(); -} - -#else /* HAVE_LCD_BITMAP */ -/* Player implementation */ - -/* helper for DoUserDialog() */ -void ShowFlashInfo(tFlashInfo* pInfo) -{ - char buf[32]; - - if (!pInfo->manufacturer) - { - rb->lcd_puts_scroll(0, 0, "Flash: M=? D=?"); - rb->lcd_puts_scroll(0, 1, "Impossible to program"); - rb->lcd_update(); - WaitForButton(); - } - else - { - rb->snprintf(buf, sizeof(buf), "Flash: M=%02x D=%02x", - pInfo->manufacturer, pInfo->id); - rb->lcd_puts_scroll(0, 0, buf); - - if (pInfo->size) - { - rb->snprintf(buf, sizeof(buf), "Size: %d KB", pInfo->size / 1024); - rb->lcd_puts_scroll(0, 1, buf); - rb->lcd_update(); - } - else - { - rb->lcd_puts_scroll(0, 1, "Unsupported chip"); - rb->lcd_update(); - WaitForButton(); - } - } -} - - -void DoUserDialog(char* filename) -{ - tFlashInfo FlashInfo; - char buf[32]; - char default_filename[32]; - int button; - int rc; /* generic return code */ - size_t memleft; - tCheckROM result; - bool is_romless; - - /* this can only work if Rockbox runs in DRAM, not flash ROM */ - if ((UINT8*)rb >= FB && (UINT8*)rb < FB + 4096*1024) /* 4 MB max */ - { /* we're running from flash */ - rb->splash(HZ*3, "Not from ROM"); - return; /* exit */ - } - - /* test if the user is running the correct plugin for this box */ - if (!CheckPlatform(PLATFORM_ID, *(UINT16*)(FB + VERSION_ADR))) - { - rb->splash(HZ*3, "Wrong version"); - return; /* exit */ - } - - /* refuse to work if the power may fail meanwhile */ - if (!rb->battery_level_safe()) - { - rb->splash(HZ*3, "Batt. too low!"); - return; /* exit */ - } - - /* check boot ROM */ - result = CheckBootROM(); - if (result == eUnknown) - { /* no support for any other yet */ - rb->splash(HZ*3, "Wrong boot ROM"); - return; /* exit */ - } - is_romless = (result == eROMless); - - /* compose filename if none given */ - if (filename == NULL) - { - rb->snprintf( - default_filename, - sizeof(default_filename), - "/firmware_%s%s.bin", - FILE_TYPE, - is_romless ? "_norom" : ""); - filename = default_filename; - } - - /* "allocate" memory */ - sector = rb->plugin_get_buffer(&memleft); - if (memleft < SEC_SIZE) /* need buffer for a flash sector */ - { - rb->splash(HZ*3, "Out of memory"); - return; /* exit */ - } - - rc = GetFlashInfo(&FlashInfo); - ShowFlashInfo(&FlashInfo); - - if (FlashInfo.size == 0) /* no valid chip */ - { - return; /* exit */ - } - - rb->lcd_puts_scroll(0, 0, filename); - rb->lcd_puts_scroll(0, 1, "[Menu] to check"); - rb->lcd_update(); - - button = WaitForButton(); - if (button != BUTTON_MENU) - { - return; - } - - rb->lcd_clear_display(); - rb->lcd_puts(0, 0, "Checking..."); - rb->lcd_update(); - - rc = CheckFirmwareFile(filename, FlashInfo.size, is_romless); - rb->lcd_puts(0, 0, "Checked:"); - switch (rc) - { - case eOK: - rb->lcd_puts(0, 1, "File OK."); - break; - case eFileNotFound: - rb->lcd_puts_scroll(0, 0, "File not found:"); - rb->lcd_puts_scroll(0, 1, filename); - break; - case eTooBig: - rb->lcd_puts_scroll(0, 0, "File too big,"); - rb->lcd_puts_scroll(0, 1, "larger than chip."); - break; - case eTooSmall: - rb->lcd_puts_scroll(0, 0, "File too small."); - rb->lcd_puts_scroll(0, 1, "Incomplete?"); - break; - case eReadErr: - rb->lcd_puts_scroll(0, 0, "Read error."); - break; - case eBadContent: - rb->lcd_puts_scroll(0, 0, "File invalid."); - rb->lcd_puts_scroll(0, 1, "Sanity check failed."); - break; - case eCrcErr: - rb->lcd_puts_scroll(0, 0, "File invalid."); - rb->lcd_puts_scroll(0, 1, "CRC check failed."); - break; - case eBadPlatform: - rb->lcd_puts_scroll(0, 0, "Wrong file for"); - rb->lcd_puts_scroll(0, 1, "this hardware."); - break; - default: - rb->lcd_puts_scroll(0, 0, "Check failed."); - break; - } - rb->lcd_update(); - - rb->sleep(HZ*3); - - if (rc == eOK) - { - rb->lcd_puts_scroll(0, 0, "[On] to program,"); - rb->lcd_puts_scroll(0, 1, "other key to exit."); - rb->lcd_update(); - } - else - { /* error occured */ - return; - } - - button = WaitForButton(); - - if (button != BUTTON_ON) - { - return; - } - - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Are you sure?"); - rb->lcd_puts_scroll(0, 1, "[+] to proceed."); - rb->lcd_update(); - - button = WaitForButton(); - - if (button != BUTTON_RIGHT) - { - return; - } - - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Programming..."); - rb->lcd_update(); - - rc = ProgramFirmwareFile(filename, FlashInfo.size); - - if (rc) - { /* errors */ - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Programming failed!"); - rb->snprintf(buf, sizeof(buf), "%d errors", rc); - rb->lcd_puts_scroll(0, 1, buf); - rb->lcd_update(); - WaitForButton(); - } - - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Verifying..."); - rb->lcd_update(); - - rc = VerifyFirmwareFile(filename); - - rb->lcd_clear_display(); - - if (rc == 0) - { - rb->lcd_puts_scroll(0, 0, "Verify OK."); - } - else - { - rb->snprintf(buf, sizeof(buf), "Verify failed! %d errors", rc); - rb->lcd_puts_scroll(0, 0, buf); - } - - rb->lcd_puts_scroll(0, 1, "Press any key to exit."); - rb->lcd_update(); - WaitForButton(); -} - -#endif /* not HAVE_LCD_BITMAP */ - - -/***************** Plugin Entry Point *****************/ - -enum plugin_status plugin_start(const void* parameter) -{ - int oldmode; - - /* now go ahead and have fun! */ - oldmode = rb->system_memory_guard(MEMGUARD_NONE); /*disable memory guard */ - DoUserDialog((char*) parameter); - rb->system_memory_guard(oldmode); /* re-enable memory guard */ - - return PLUGIN_OK; -} diff --git a/apps/plugins/flipit.c b/apps/plugins/flipit.c index ed288d444d..fab409cc14 100644 --- a/apps/plugins/flipit.c +++ b/apps/plugins/flipit.c @@ -23,42 +23,7 @@ /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define FLIPIT_LEFT BUTTON_LEFT -#define FLIPIT_RIGHT BUTTON_RIGHT -#define FLIPIT_UP BUTTON_UP -#define FLIPIT_DOWN BUTTON_DOWN -#define FLIPIT_QUIT BUTTON_OFF -#define FLIPIT_SHUFFLE BUTTON_F1 -#define FLIPIT_SOLVE BUTTON_F2 -#define FLIPIT_STEP_BY_STEP BUTTON_F3 -#define FLIPIT_TOGGLE BUTTON_PLAY - -#elif CONFIG_KEYPAD == PLAYER_PAD -#define FLIPIT_LEFT BUTTON_LEFT -#define FLIPIT_RIGHT BUTTON_RIGHT -#define FLIPIT_UP_PRE BUTTON_ON -#define FLIPIT_UP (BUTTON_ON | BUTTON_REL) -#define FLIPIT_DOWN BUTTON_MENU -#define FLIPIT_QUIT BUTTON_STOP -#define FLIPIT_SHUFFLE (BUTTON_ON | BUTTON_LEFT) -#define FLIPIT_SOLVE (BUTTON_ON | BUTTON_RIGHT) -#define FLIPIT_STEP_BY_STEP (BUTTON_ON | BUTTON_PLAY) -#define FLIPIT_TOGGLE BUTTON_PLAY - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define FLIPIT_LEFT BUTTON_LEFT -#define FLIPIT_RIGHT BUTTON_RIGHT -#define FLIPIT_UP BUTTON_UP -#define FLIPIT_DOWN BUTTON_DOWN -#define FLIPIT_QUIT BUTTON_OFF -#define FLIPIT_SHUFFLE (BUTTON_MENU | BUTTON_LEFT) -#define FLIPIT_SOLVE (BUTTON_MENU | BUTTON_UP) -#define FLIPIT_STEP_BY_STEP (BUTTON_MENU | BUTTON_RIGHT) -#define FLIPIT_TOGGLE_PRE BUTTON_MENU -#define FLIPIT_TOGGLE (BUTTON_MENU | BUTTON_REL) - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define FLIPIT_LEFT BUTTON_LEFT #define FLIPIT_RIGHT BUTTON_RIGHT @@ -937,20 +902,8 @@ enum plugin_status plugin_start(const void* parameter) /* print instructions */ rb->lcd_clear_display(); rb->lcd_setfont(FONT_SYSFIXED); -#if CONFIG_KEYPAD == RECORDER_PAD - rb->lcd_putsxy(2, 8, "[OFF] to stop"); - rb->lcd_putsxy(2, 18, "[PLAY] toggle"); - rb->lcd_putsxy(2, 28, "[F1] shuffle"); - rb->lcd_putsxy(2, 38, "[F2] solution"); - rb->lcd_putsxy(2, 48, "[F3] step by step"); -#elif CONFIG_KEYPAD == ONDIO_PAD - rb->lcd_putsxy(2, 8, "[OFF] to stop"); - rb->lcd_putsxy(2, 18, "[MODE] toggle"); - rb->lcd_putsxy(2, 28, "[M-LEFT] shuffle"); - rb->lcd_putsxy(2, 38, "[M-UP] solution"); - rb->lcd_putsxy(2, 48, "[M-RIGHT] step by step"); -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) rb->lcd_putsxy(2, 8, "[STOP] to stop"); rb->lcd_putsxy(2, 18, "[SELECT] toggle"); rb->lcd_putsxy(2, 28, "[MODE] shuffle"); diff --git a/apps/plugins/fractals/cpu_sh7043.h b/apps/plugins/fractals/cpu_sh7043.h deleted file mode 100644 index 0d773432a8..0000000000 --- a/apps/plugins/fractals/cpu_sh7043.h +++ /dev/null @@ -1,96 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2009 Tomer Shalev - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -#ifndef _CPU_SH7043_H -#define _CPU_SH7043_H - -inline static short muls16_asr10(short a, short b) -{ - short r; - asm ( - "muls %[a],%[b] \n" - "sts macl,%[r] \n" - "shlr8 %[r] \n" - "shlr2 %[r] \n" - : /* outputs */ - [r]"=r"(r) - : /* inputs */ - [a]"r"(a), - [b]"r"(b) - ); - return r; -} - -inline static long muls32_asr26(long a, long b) -{ - long r, t1, t2, t3; - asm ( - /* Signed 32bit * 32bit -> 64bit multiplication. - Notation: xxab * xxcd, where each letter represents 16 bits. - xx is the 64 bit sign extension. */ - "swap.w %[a],%[t1] \n" /* t1 = ba */ - "mulu %[t1],%[b] \n" /* a * d */ - "swap.w %[b],%[t3] \n" /* t3 = dc */ - "sts macl,%[t2] \n" /* t2 = a * d */ - "mulu %[t1],%[t3] \n" /* a * c */ - "sts macl,%[r] \n" /* hi = a * c */ - "mulu %[a],%[t3] \n" /* b * c */ - "clrt \n" - "sts macl,%[t3] \n" /* t3 = b * c */ - "addc %[t2],%[t3] \n" /* t3 += t2, carry -> t2 */ - "movt %[t2] \n" - "mulu %[a],%[b] \n" /* b * d */ - "mov %[t3],%[t1] \n" /* t1t3 = t2t3 << 16 */ - "xtrct %[t2],%[t1] \n" - "shll16 %[t3] \n" - "sts macl,%[t2] \n" /* lo = b * d */ - "clrt \n" /* hi.lo += t1t3 */ - "addc %[t3],%[t2] \n" - "addc %[t1],%[r] \n" - "cmp/pz %[a] \n" /* ab >= 0 ? */ - "bt 1f \n" - "sub %[b],%[r] \n" /* no: hi -= cd (sign extension of ab is -1) */ - "1: \n" - "cmp/pz %[b] \n" /* cd >= 0 ? */ - "bt 2f \n" - "sub %[a],%[r] \n" /* no: hi -= ab (sign extension of cd is -1) */ - "2: \n" - /* Shift right by 26 and return low 32 bits */ - "shll2 %[r] \n" /* hi <<= 6 */ - "shll2 %[r] \n" - "shll2 %[r] \n" - "shlr16 %[t2] \n" /* (unsigned)lo >>= 26 */ - "shlr8 %[t2] \n" - "shlr2 %[t2] \n" - "or %[t2],%[r] \n" /* combine result */ - : /* outputs */ - [r] "=&r"(r), - [t1]"=&r"(t1), - [t2]"=&r"(t2), - [t3]"=&r"(t3) - : /* inputs */ - [a] "r" (a), - [b] "r" (b) - ); - return r; -} - -#endif diff --git a/apps/plugins/fractals/fractal.h b/apps/plugins/fractals/fractal.h index c7a822c2c6..92a0b87c48 100644 --- a/apps/plugins/fractals/fractal.h +++ b/apps/plugins/fractals/fractal.h @@ -22,33 +22,7 @@ #define _FRACTAL_H /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define FRACTAL_QUIT BUTTON_OFF -#define FRACTAL_UP BUTTON_UP -#define FRACTAL_DOWN BUTTON_DOWN -#define FRACTAL_LEFT BUTTON_LEFT -#define FRACTAL_RIGHT BUTTON_RIGHT -#define FRACTAL_ZOOM_IN BUTTON_PLAY -#define FRACTAL_ZOOM_OUT BUTTON_ON -#define FRACTAL_PRECISION_INC BUTTON_F2 -#define FRACTAL_PRECISION_DEC BUTTON_F1 -#define FRACTAL_RESET BUTTON_F3 - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define FRACTAL_QUIT BUTTON_OFF -#define FRACTAL_UP BUTTON_UP -#define FRACTAL_DOWN BUTTON_DOWN -#define FRACTAL_LEFT BUTTON_LEFT -#define FRACTAL_RIGHT BUTTON_RIGHT -#define FRACTAL_ZOOM_IN_PRE BUTTON_MENU -#define FRACTAL_ZOOM_IN (BUTTON_MENU | BUTTON_REL) -#define FRACTAL_ZOOM_IN2 (BUTTON_MENU | BUTTON_UP) -#define FRACTAL_ZOOM_OUT (BUTTON_MENU | BUTTON_DOWN) -#define FRACTAL_PRECISION_INC (BUTTON_MENU | BUTTON_RIGHT) -#define FRACTAL_PRECISION_DEC (BUTTON_MENU | BUTTON_LEFT) -#define FRACTAL_RESET (BUTTON_MENU | BUTTON_OFF) - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define FRACTAL_QUIT BUTTON_OFF #define FRACTAL_UP BUTTON_UP diff --git a/apps/plugins/fractals/mandelbrot_set.h b/apps/plugins/fractals/mandelbrot_set.h index 4eeb68461b..2814d24e58 100644 --- a/apps/plugins/fractals/mandelbrot_set.h +++ b/apps/plugins/fractals/mandelbrot_set.h @@ -24,18 +24,13 @@ #include "fractal_sets.h" /* CPU stuff */ -#if CONFIG_CPU == SH7034 -#include "cpu_sh7043.h" -#elif defined CPU_COLDFIRE +#if defined CPU_COLDFIRE #include "cpu_coldfire.h" #elif defined CPU_ARM #include "cpu_arm.h" #endif -#if CONFIG_CPU == SH7034 -#define MULS16_ASR10(a, b) muls16_asr10(a, b) -#define MULS32_ASR26(a, b) muls32_asr26(a, b) -#elif defined CPU_COLDFIRE +#if defined CPU_COLDFIRE /* Needs the EMAC initialised to fractional mode w/o rounding and saturation */ #define MULS32_INIT() coldfire_set_macsr(EMAC_FRACTIONAL) #define MULS16_ASR10(a, b) muls16_asr10(a, b) diff --git a/apps/plugins/goban/goban.h b/apps/plugins/goban/goban.h index e04b4c2447..8406b540b7 100644 --- a/apps/plugins/goban/goban.h +++ b/apps/plugins/goban/goban.h @@ -297,27 +297,6 @@ #define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT /* no next var */ -#elif (CONFIG_KEYPAD == RECORDER_PAD) -#define GBN_BUTTON_UP BUTTON_UP -#define GBN_BUTTON_DOWN BUTTON_DOWN -#define GBN_BUTTON_LEFT BUTTON_LEFT -#define GBN_BUTTON_RIGHT BUTTON_RIGHT -#define GBN_BUTTON_RETREAT BUTTON_F1 -#define GBN_BUTTON_ADVANCE BUTTON_F3 -#define GBN_BUTTON_MENU BUTTON_F2 -#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL -#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT -#define GBN_BUTTON_NEXT_VAR BUTTON_ON - -#elif (CONFIG_KEYPAD == ONDIO_PAD) -#define GBN_BUTTON_UP BUTTON_UP -#define GBN_BUTTON_DOWN BUTTON_DOWN -#define GBN_BUTTON_LEFT BUTTON_LEFT -#define GBN_BUTTON_RIGHT BUTTON_RIGHT -#define GBN_BUTTON_MENU BUTTON_MENU | BUTTON_REPEAT -#define GBN_BUTTON_PLAY BUTTON_MENU | BUTTON_REL -#define GBN_BUTTON_NAV_MODE BUTTON_OFF - #elif (CONFIG_KEYPAD == SAMSUNG_YH92X_PAD) #define GBN_BUTTON_UP BUTTON_UP #define GBN_BUTTON_DOWN BUTTON_DOWN diff --git a/apps/plugins/goban/goban.make b/apps/plugins/goban/goban.make index a8b41285f0..2201dc60f4 100644 --- a/apps/plugins/goban/goban.make +++ b/apps/plugins/goban/goban.make @@ -16,15 +16,8 @@ GOBAN_OBJ := $(call c2obj, $(GOBAN_SRC)) OTHER_SRC += $(GOBAN_SRC) ifndef APP_TYPE -ifneq (,$(strip $(foreach tgt,RECORDER ONDIO,$(findstring $(tgt),$(TARGET))))) - ### lowmem targets - ROCKS += $(GOBAN_BUILDDIR)/goban.ovl - GOBAN_OUTLDS = $(GOBAN_BUILDDIR)/goban.link - GOBAN_OVLFLAGS = -T$(GOBAN_OUTLDS) -Wl,--gc-sections -Wl,-Map,$(basename $@).map -else - ### all other targets + ### all targets ROCKS += $(GOBAN_BUILDDIR)/goban.rock -endif else ### simulator ROCKS += $(GOBAN_BUILDDIR)/goban.rock diff --git a/apps/plugins/greyscale.c b/apps/plugins/greyscale.c index ae873a06ac..70507d989c 100644 --- a/apps/plugins/greyscale.c +++ b/apps/plugins/greyscale.c @@ -30,23 +30,7 @@ /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define GREYSCALE_SHIFT BUTTON_ON -#define GREYSCALE_UP BUTTON_UP -#define GREYSCALE_DOWN BUTTON_DOWN -#define GREYSCALE_LEFT BUTTON_LEFT -#define GREYSCALE_RIGHT BUTTON_RIGHT -#define GREYSCALE_OFF BUTTON_OFF - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define GREYSCALE_SHIFT BUTTON_MENU -#define GREYSCALE_UP BUTTON_UP -#define GREYSCALE_DOWN BUTTON_DOWN -#define GREYSCALE_LEFT BUTTON_LEFT -#define GREYSCALE_RIGHT BUTTON_RIGHT -#define GREYSCALE_OFF BUTTON_OFF - -#elif CONFIG_KEYPAD == IRIVER_H100_PAD +#if CONFIG_KEYPAD == IRIVER_H100_PAD #define GREYSCALE_SHIFT BUTTON_ON #define GREYSCALE_UP BUTTON_UP #define GREYSCALE_DOWN BUTTON_DOWN diff --git a/apps/plugins/imageviewer/imageviewer_button.h b/apps/plugins/imageviewer/imageviewer_button.h index dfdd39ffa4..46813d5e69 100644 --- a/apps/plugins/imageviewer/imageviewer_button.h +++ b/apps/plugins/imageviewer/imageviewer_button.h @@ -25,31 +25,8 @@ #include "plugin.h" /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define IMGVIEW_ZOOM_IN BUTTON_PLAY -#define IMGVIEW_ZOOM_OUT BUTTON_ON -#define IMGVIEW_UP BUTTON_UP -#define IMGVIEW_DOWN BUTTON_DOWN -#define IMGVIEW_LEFT BUTTON_LEFT -#define IMGVIEW_RIGHT BUTTON_RIGHT -#define IMGVIEW_NEXT BUTTON_F3 -#define IMGVIEW_PREVIOUS BUTTON_F2 -#define IMGVIEW_MENU BUTTON_OFF - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define IMGVIEW_ZOOM_PRE BUTTON_MENU -#define IMGVIEW_ZOOM_IN (BUTTON_MENU | BUTTON_REL) -#define IMGVIEW_ZOOM_OUT (BUTTON_MENU | BUTTON_DOWN) -#define IMGVIEW_UP BUTTON_UP -#define IMGVIEW_DOWN BUTTON_DOWN -#define IMGVIEW_LEFT BUTTON_LEFT -#define IMGVIEW_RIGHT BUTTON_RIGHT -#define IMGVIEW_NEXT (BUTTON_MENU | BUTTON_RIGHT) -#define IMGVIEW_PREVIOUS (BUTTON_MENU | BUTTON_LEFT) -#define IMGVIEW_MENU BUTTON_OFF - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define IMGVIEW_ZOOM_IN BUTTON_SELECT #define IMGVIEW_ZOOM_OUT BUTTON_MODE #define IMGVIEW_UP BUTTON_UP diff --git a/apps/plugins/imageviewer/jpeg/jpeg_decoder.c b/apps/plugins/imageviewer/jpeg/jpeg_decoder.c index 342b59c6a4..b014fa0ed1 100644 --- a/apps/plugins/imageviewer/jpeg/jpeg_decoder.c +++ b/apps/plugins/imageviewer/jpeg/jpeg_decoder.c @@ -39,23 +39,7 @@ INLINE unsigned range_limit(int value) { -#if CONFIG_CPU == SH7034 - unsigned tmp; - asm ( /* Note: Uses knowledge that only low byte of result is used */ - "mov #-128,%[t] \n" - "sub %[t],%[v] \n" /* value -= -128; equals value += 128; */ - "extu.b %[v],%[t] \n" - "cmp/eq %[v],%[t] \n" /* low byte == whole number ? */ - "bt 1f \n" /* yes: no overflow */ - "cmp/pz %[v] \n" /* overflow: positive? */ - "subc %[v],%[v] \n" /* %[r] now either 0 or 0xffffffff */ - "1: \n" - : /* outputs */ - [v]"+r"(value), - [t]"=&r"(tmp) - ); - return value; -#elif defined(CPU_COLDFIRE) +#if defined(CPU_COLDFIRE) asm ( /* Note: Uses knowledge that only the low byte of the result is used */ "add.l #128,%[v] \n" /* value += 128; */ "cmp.l #255,%[v] \n" /* overflow? */ diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c index cae3befb5e..f94825650f 100644 --- a/apps/plugins/jewels.c +++ b/apps/plugins/jewels.c @@ -28,27 +28,7 @@ #include "pluginbitmaps/jewels.h" /* button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define JEWELS_UP BUTTON_UP -#define JEWELS_DOWN BUTTON_DOWN -#define JEWELS_LEFT BUTTON_LEFT -#define JEWELS_RIGHT BUTTON_RIGHT -#define JEWELS_SELECT BUTTON_PLAY -#define JEWELS_CANCEL BUTTON_OFF -#define HK_SELECT "PLAY" -#define HK_CANCEL "OFF" - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define JEWELS_UP BUTTON_UP -#define JEWELS_DOWN BUTTON_DOWN -#define JEWELS_LEFT BUTTON_LEFT -#define JEWELS_RIGHT BUTTON_RIGHT -#define JEWELS_SELECT BUTTON_MENU -#define JEWELS_CANCEL BUTTON_OFF -#define HK_SELECT "MENU" -#define HK_CANCEL "OFF" - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) #define JEWELS_UP BUTTON_UP #define JEWELS_DOWN BUTTON_DOWN #define JEWELS_LEFT BUTTON_LEFT diff --git a/apps/plugins/lib/SOURCES b/apps/plugins/lib/SOURCES index 1149f35bac..82b9fba4a5 100644 --- a/apps/plugins/lib/SOURCES +++ b/apps/plugins/lib/SOURCES @@ -21,8 +21,6 @@ grey_scroll.c #ifdef CPU_COLDFIRE grey_coldfire.S -#elif CONFIG_CPU == SH7034 -grey_sh.S #endif #endif /* HAVE_LCD_BITMAP && LCD_DEPTH < 4 */ diff --git a/apps/plugins/lib/grey_core.c b/apps/plugins/lib/grey_core.c index bb6823522d..55d0684103 100644 --- a/apps/plugins/lib/grey_core.c +++ b/apps/plugins/lib/grey_core.c @@ -36,35 +36,7 @@ #ifndef SIMULATOR -#if defined ARCHOS_RECORDER /* verified */ \ - || defined ARCHOS_FMRECORDER /* should be identical */ \ - || defined ARCHOS_RECORDERV2 /* should be identical */ \ - || defined ARCHOS_ONDIOFM /* verified */ \ - || defined ARCHOS_ONDIOSP /* verified */ -/* Average measurements of a Recorder v1, an Ondio FM, a backlight-modded - * Ondio FM, and an Ondio SP. */ -static const unsigned char lcdlinear[256] = { - 5, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 29, 31, 33, 35, - 37, 39, 40, 42, 43, 45, 46, 48, 49, 50, 51, 53, 54, 55, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 68, 69, 70, 71, 71, 72, - 73, 74, 74, 75, 76, 77, 77, 78, 79, 79, 80, 80, 81, 81, 82, 82, - 83, 84, 84, 85, 86, 86, 87, 87, 88, 88, 89, 89, 90, 90, 91, 91, - 92, 92, 93, 93, 94, 94, 95, 95, 96, 96, 97, 98, 98, 99, 100, 100, -101, 101, 102, 103, 103, 104, 105, 105, 106, 106, 107, 107, 108, 108, 109, 109, -110, 110, 111, 112, 112, 113, 114, 114, 115, 115, 116, 117, 117, 118, 119, 119, -120, 120, 121, 122, 123, 123, 124, 125, 126, 126, 127, 128, 129, 129, 130, 131, -132, 132, 133, 134, 135, 135, 136, 137, 138, 138, 139, 140, 140, 141, 141, 142, -143, 144, 145, 146, 147, 147, 148, 149, 150, 151, 152, 153, 154, 154, 155, 156, -157, 158, 159, 160, 161, 161, 162, 163, 164, 165, 166, 167, 168, 168, 169, 170, -171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, -188, 189, 191, 192, 194, 195, 197, 198, 199, 200, 202, 203, 204, 205, 207, 208, -209, 210, 212, 213, 215, 216, 218, 219, 220, 221, 222, 223, 225, 226, 227, 228, -229, 230, 232, 233, 234, 235, 237, 238, 239, 240, 242, 243, 244, 246, 247, 248 -}; -/* The actual LCD scanrate varies a lot with temperature on these targets */ -#define LCD_SCANRATE 67 /* Hz */ - -#elif defined IAUDIO_M3 /* verified */ +#if defined IAUDIO_M3 /* verified */ /* Average measurements of 2 iAudio remotes connected to an M3. */ static const unsigned char lcdlinear[256] = { 5, 9, 13, 17, 21, 26, 30, 34, 38, 42, 46, 50, 54, 58, 62, 66, diff --git a/apps/plugins/lib/grey_draw.c b/apps/plugins/lib/grey_draw.c index 64dabc2fb3..298ffbe16e 100644 --- a/apps/plugins/lib/grey_draw.c +++ b/apps/plugins/lib/grey_draw.c @@ -758,8 +758,7 @@ void grey_ub_gray_bitmap_part(const unsigned char *src, int src_x, int src_y, + (~yc & _GREY_BMASK); #endif /* LCD_PIXELFORMAT */ -#if ((LCD_PIXELFORMAT == VERTICAL_PACKING) && (LCD_DEPTH == 1) && (CONFIG_CPU == SH7034)) \ - || ((LCD_PIXELFORMAT == VERTICAL_PACKING) && (LCD_DEPTH == 2) && defined(CPU_COLDFIRE)) \ +#if ((LCD_PIXELFORMAT == VERTICAL_PACKING) && (LCD_DEPTH == 2) && defined(CPU_COLDFIRE)) \ || ((LCD_PIXELFORMAT == VERTICAL_INTERLEAVED) && defined(CPU_COLDFIRE)) _grey_line1(width, dst + idx, src, _grey_info.gvalue); #else diff --git a/apps/plugins/lib/grey_sh.S b/apps/plugins/lib/grey_sh.S deleted file mode 100644 index 5714f95f8c..0000000000 --- a/apps/plugins/lib/grey_sh.S +++ /dev/null @@ -1,137 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* New greyscale framework -* SH1 assembler routines -* -* This is a generic framework to display 129 shades of grey on low-depth -* bitmap LCDs (Archos b&w, Iriver & Ipod 4-grey) within plugins. -* -* Copyright (C) 2008 Jens Arnold -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 -* of the License, or (at your option) any later version. -* -* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -* KIND, either express or implied. -* -****************************************************************************/ - -#include "config.h" -/* Plugins should not normally do this, but we need to check a macro, and - * plugin.h would confuse the assembler. */ - - .text - .global __grey_line1 - .type __grey_line1, @function - -#if (LCD_PIXELFORMAT == VERTICAL_PACKING) && (LCD_DEPTH == 1) - -/**************************************************************************** - * void _grey_line1(int width, r4 - * unsigned char *dst, r5 - * const unsigned char *src, r6 - * const unsigned char *lut); r7 - */ - -__grey_line1: - mov #1, r0 - tst r0, r6 - bt .p1_h_end - - mov.b @r6+, r0 - extu.b r0, r0 - mov.b @(r0, r7), r0 - add #-1, r4 - mov.b r0, @r5 - add #8, r5 -.p1_h_end: - - mov #2, r0 - cmp/hs r0, r4 - bf .p2_t_end - tst r0, r6 - bt .p2_h_end - - mov.w @r6+, r1 - extu.b r1, r0 - mov.b @(r0, r7), r0 - shlr8 r1 - mov.b r0, @(8, r5) - extu.b r1, r0 - mov.b @(r0, r7), r0 - add #-2, r4 - mov.b r0, @r5 - add #16, r5 -.p2_h_end: - - add #-4, r4 - cmp/pz r4 - bf .p4_end - - add r6, r4 - -.p4_loop: - mov.l @r6+, r1 - swap.w r1, r2 - extu.b r2, r0 - mov.b @(r0, r7), r0 - shlr8 r2 - mov.b r0, @(8, r5) - extu.b r2, r0 - mov.b @(r0, r7), r2 - extu.b r1, r0 - mov.b r2, @r5 - add #16, r5 - mov.b @(r0, r7), r0 - shlr8 r1 - mov.b r0, @(8, r5) - extu.b r1, r0 - mov.b @(r0, r7), r0 - cmp/hs r6, r4 - mov.b r0, @r5 - add #16, r5 - bt .p4_loop - - /* No need to correct the count, we're only testing bits from now on. */ - -.p4_end: - mov #2, r0 - tst r0, r4 - bt .p2_t_end - - mov.w @r6+, r1 - extu.b r1, r0 - mov.b @(r0, r7), r0 - shlr8 r1 - mov.b r0, @(8, r5) - extu.b r1, r0 - mov.b @(r0, r7), r0 - mov.b r0, @r5 - add #16, r5 -.p2_t_end: - - mov #1, r0 - tst r0, r4 - bt .p1_t_end - - mov.b @r6+, r0 - extu.b r0, r0 - mov.b @(r0, r7), r0 - rts - mov.b r0, @r5 -.p1_t_end: - - rts - nop - .size __grey_line1, . - __grey_line1 - -#endif diff --git a/apps/plugins/lib/helper.c b/apps/plugins/lib/helper.c index 506903e808..6eb3498791 100644 --- a/apps/plugins/lib/helper.c +++ b/apps/plugins/lib/helper.c @@ -22,20 +22,6 @@ #include "plugin.h" #include "helper.h" -#ifdef CPU_SH -/* Lookup table for using the BIT_N() macro in plugins */ -const unsigned bit_n_table[32] = { - 1LU<< 0, 1LU<< 1, 1LU<< 2, 1LU<< 3, - 1LU<< 4, 1LU<< 5, 1LU<< 6, 1LU<< 7, - 1LU<< 8, 1LU<< 9, 1LU<<10, 1LU<<11, - 1LU<<12, 1LU<<13, 1LU<<14, 1LU<<15, - 1LU<<16, 1LU<<17, 1LU<<18, 1LU<<19, - 1LU<<20, 1LU<<21, 1LU<<22, 1LU<<23, - 1LU<<24, 1LU<<25, 1LU<<26, 1LU<<27, - 1LU<<28, 1LU<<29, 1LU<<30, 1LU<<31 -}; -#endif - /* Force the backlight on */ void backlight_force_on(void) { diff --git a/apps/plugins/lib/pluginlib_actions.c b/apps/plugins/lib/pluginlib_actions.c index e5b48c2f6a..c580074d5e 100644 --- a/apps/plugins/lib/pluginlib_actions.c +++ b/apps/plugins/lib/pluginlib_actions.c @@ -51,16 +51,6 @@ const struct button_mapping pla_remote_ctx[] = { PLA_DOWN_REPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE}, { PLA_LEFT_REPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE}, { PLA_RIGHT_REPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE}, -#elif (CONFIG_KEYPAD == PLAYER_PAD) || \ - (CONFIG_KEYPAD == RECORDER_PAD) - { PLA_UP, BUTTON_RC_VOL_UP, BUTTON_NONE}, - { PLA_DOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE}, - { PLA_LEFT, BUTTON_RC_LEFT, BUTTON_NONE}, - { PLA_RIGHT, BUTTON_RC_RIGHT, BUTTON_NONE}, - { PLA_UP_REPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE}, - { PLA_DOWN_REPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE}, - { PLA_LEFT_REPEAT, BUTTON_RC_LEFT|BUTTON_REPEAT, BUTTON_NONE}, - { PLA_RIGHT_REPEAT, BUTTON_RC_RIGHT|BUTTON_REPEAT, BUTTON_NONE}, #elif (CONFIG_REMOTE_KEYPAD == MROBE_REMOTE) { PLA_UP, BUTTON_RC_PLAY, BUTTON_NONE}, { PLA_DOWN, BUTTON_RC_DOWN, BUTTON_NONE}, @@ -101,9 +91,7 @@ const struct button_mapping pla_main_ctx[] = || (CONFIG_KEYPAD == IRIVER_H300_PAD) \ || (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) \ || (CONFIG_KEYPAD == GIGABEAT_PAD) \ - || (CONFIG_KEYPAD == RECORDER_PAD) \ || (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD) \ - || (CONFIG_KEYPAD == ONDIO_PAD) \ || (CONFIG_KEYPAD == SANSA_C200_PAD) \ || (CONFIG_KEYPAD == GIGABEAT_S_PAD) \ || (CONFIG_KEYPAD == MROBE100_PAD) \ @@ -145,15 +133,6 @@ const struct button_mapping pla_main_ctx[] = { PLA_DOWN_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE }, { PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, { PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, -#elif (CONFIG_KEYPAD == PLAYER_PAD) - { PLA_UP, BUTTON_PLAY, BUTTON_NONE }, - { PLA_DOWN, BUTTON_STOP, BUTTON_NONE }, - { PLA_LEFT, BUTTON_LEFT, BUTTON_NONE }, - { PLA_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, - { PLA_UP_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE }, - { PLA_DOWN_REPEAT, BUTTON_STOP|BUTTON_REPEAT, BUTTON_NONE }, - { PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, #elif (CONFIG_KEYPAD == IRIVER_H10_PAD) { PLA_UP, BUTTON_SCROLL_UP, BUTTON_NONE }, { PLA_DOWN, BUTTON_SCROLL_DOWN, BUTTON_NONE }, @@ -339,24 +318,6 @@ const struct button_mapping pla_main_ctx[] = {PLA_SELECT, BUTTON_SELECT, BUTTON_NONE}, {PLA_SELECT_REL, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT}, {PLA_SELECT_REPEAT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE}, -#elif (CONFIG_KEYPAD == RECORDER_PAD) - {PLA_CANCEL, BUTTON_ON, BUTTON_NONE}, - {PLA_EXIT, BUTTON_OFF, BUTTON_NONE}, - {PLA_SELECT, BUTTON_PLAY, BUTTON_NONE}, - {PLA_SELECT_REL, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY}, - {PLA_SELECT_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE}, -#elif (CONFIG_KEYPAD == ONDIO_PAD) - {PLA_CANCEL, BUTTON_OFF|BUTTON_REL, BUTTON_OFF}, - {PLA_EXIT, BUTTON_OFF|BUTTON_REPEAT, BUTTON_NONE}, - {PLA_SELECT, BUTTON_MENU, BUTTON_NONE}, - {PLA_SELECT_REL, BUTTON_MENU|BUTTON_REL, BUTTON_MENU}, - {PLA_SELECT_REPEAT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE}, -#elif (CONFIG_KEYPAD == PLAYER_PAD) - {PLA_CANCEL, BUTTON_MENU|BUTTON_REL, BUTTON_MENU}, - {PLA_EXIT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE}, - {PLA_SELECT, BUTTON_ON, BUTTON_NONE}, - {PLA_SELECT_REL, BUTTON_ON|BUTTON_REL, BUTTON_ON}, - {PLA_SELECT_REPEAT, BUTTON_ON|BUTTON_REPEAT, BUTTON_NONE}, #elif (CONFIG_KEYPAD == SANSA_FUZE_PAD) {PLA_CANCEL, BUTTON_HOME|BUTTON_REL, BUTTON_HOME}, {PLA_EXIT, BUTTON_HOME|BUTTON_REPEAT, BUTTON_NONE}, diff --git a/apps/plugins/lib/xlcd_scroll.c b/apps/plugins/lib/xlcd_scroll.c index f2fc71ea47..e0fead71be 100644 --- a/apps/plugins/lib/xlcd_scroll.c +++ b/apps/plugins/lib/xlcd_scroll.c @@ -396,77 +396,7 @@ void xlcd_scroll_up(int count) { #if LCD_PIXELFORMAT == VERTICAL_PACKING -#if (CONFIG_CPU == SH7034) && (LCD_DEPTH == 1) - asm ( - "mov #0,r4 \n" /* x = 0 */ - "mova .su_shifttbl,r0 \n" /* calculate jump destination for */ - "mov.b @(r0,%[cnt]),%[cnt] \n" /* shift amount from table */ - "bra .su_cloop \n" /* skip table */ - "add r0,%[cnt] \n" - - ".align 2 \n" - ".su_shifttbl: \n" /* shift jump offset table */ - ".byte .su_shift0 - .su_shifttbl \n" - ".byte .su_shift1 - .su_shifttbl \n" - ".byte .su_shift2 - .su_shifttbl \n" - ".byte .su_shift3 - .su_shifttbl \n" - ".byte .su_shift4 - .su_shifttbl \n" - ".byte .su_shift5 - .su_shifttbl \n" - ".byte .su_shift6 - .su_shifttbl \n" - ".byte .su_shift7 - .su_shifttbl \n" - - ".su_cloop: \n" /* repeat for every column */ - "mov %[addr],r2 \n" /* get start address */ - "mov #0,r3 \n" /* current_row = 0 */ - "mov #0,r1 \n" /* fill with zero */ - - ".su_iloop: \n" /* repeat for all rows */ - "sub %[wide],r2 \n" /* address -= width */ - "mov.b @r2,r0 \n" /* get data byte */ - "shll8 r1 \n" /* old data to 2nd byte */ - "extu.b r0,r0 \n" /* extend unsigned */ - "or r1,r0 \n" /* combine old data */ - "jmp @%[cnt] \n" /* jump into shift "path" */ - "extu.b r0,r1 \n" /* store data for next round */ - - ".su_shift6: \n" /* shift right by 0..7 bits */ - "shll2 r0 \n" - "bra .su_shift0 \n" - "shlr8 r0 \n" - ".su_shift4: \n" - "shlr2 r0 \n" - ".su_shift2: \n" - "bra .su_shift0 \n" - "shlr2 r0 \n" - ".su_shift7: \n" - "shlr2 r0 \n" - ".su_shift5: \n" - "shlr2 r0 \n" - ".su_shift3: \n" - "shlr2 r0 \n" - ".su_shift1: \n" - "shlr r0 \n" - ".su_shift0: \n" - - "mov.b r0,@r2 \n" /* store data */ - "add #1,r3 \n" /* current_row++ */ - "cmp/hi r3,%[rows] \n" /* current_row < bheight - shift ? */ - "bt .su_iloop \n" - - "add #1,%[addr] \n" /* start_address++ */ - "add #1,r4 \n" /* x++ */ - "cmp/hi r4,%[wide] \n" /* x < width ? */ - "bt .su_cloop \n" - : /* outputs */ - : /* inputs */ - [addr]"r"(rb->lcd_framebuffer + blocklen * LCD_FBWIDTH), - [wide]"r"(LCD_FBWIDTH), - [rows]"r"(blocklen), - [cnt] "r"(bitcount) - : /* clobbers */ - "r0", "r1", "r2", "r3", "r4" - ); -#elif defined(CPU_COLDFIRE) && (LCD_DEPTH == 2) +#if defined(CPU_COLDFIRE) && (LCD_DEPTH == 2) asm ( "move.l %[wide],%%d3\n" /* columns = width */ @@ -590,76 +520,7 @@ void xlcd_scroll_down(int count) { #if LCD_PIXELFORMAT == VERTICAL_PACKING -#if (CONFIG_CPU == SH7034) && (LCD_DEPTH == 1) - asm ( - "mov #0,r4 \n" /* x = 0 */ - "mova .sd_shifttbl,r0 \n" /* calculate jump destination for */ - "mov.b @(r0,%[cnt]),%[cnt] \n" /* shift amount from table */ - "bra .sd_cloop \n" /* skip table */ - "add r0,%[cnt] \n" - - ".align 2 \n" - ".sd_shifttbl: \n" /* shift jump offset table */ - ".byte .sd_shift0 - .sd_shifttbl \n" - ".byte .sd_shift1 - .sd_shifttbl \n" - ".byte .sd_shift2 - .sd_shifttbl \n" - ".byte .sd_shift3 - .sd_shifttbl \n" - ".byte .sd_shift4 - .sd_shifttbl \n" - ".byte .sd_shift5 - .sd_shifttbl \n" - ".byte .sd_shift6 - .sd_shifttbl \n" - ".byte .sd_shift7 - .sd_shifttbl \n" - - ".sd_cloop: \n" /* repeat for every column */ - "mov %[addr],r2 \n" /* get start address */ - "mov #0,r3 \n" /* current_row = 0 */ - "mov #0,r1 \n" /* fill with zero */ - - ".sd_iloop: \n" /* repeat for all rows */ - "shlr8 r1 \n" /* shift right to get residue */ - "mov.b @r2,r0 \n" /* get data byte */ - "jmp @%[cnt] \n" /* jump into shift "path" */ - "extu.b r0,r0 \n" /* extend unsigned */ - - ".sd_shift6: \n" /* shift left by 0..7 bits */ - "shll8 r0 \n" - "bra .sd_shift0 \n" - "shlr2 r0 \n" - ".sd_shift4: \n" - "shll2 r0 \n" - ".sd_shift2: \n" - "bra .sd_shift0 \n" - "shll2 r0 \n" - ".sd_shift7: \n" - "shll2 r0 \n" - ".sd_shift5: \n" - "shll2 r0 \n" - ".sd_shift3: \n" - "shll2 r0 \n" - ".sd_shift1: \n" - "shll r0 \n" - ".sd_shift0: \n" - - "or r0,r1 \n" /* combine with last residue */ - "mov.b r1,@r2 \n" /* store data */ - "add %[wide],r2 \n" /* address += width */ - "add #1,r3 \n" /* current_row++ */ - "cmp/hi r3,%[rows] \n" /* current_row < bheight - shift ? */ - "bt .sd_iloop \n" - - "add #1,%[addr] \n" /* start_address++ */ - "add #1,r4 \n" /* x++ */ - "cmp/hi r4,%[wide] \n" /* x < width ? */ - "bt .sd_cloop \n" - : /* outputs */ - : /* inputs */ - [addr]"r"(rb->lcd_framebuffer + blockcount * LCD_FBWIDTH), - [wide]"r"(LCD_WIDTH), - [rows]"r"(blocklen), - [cnt] "r"(bitcount) - : /* clobbers */ - "r0", "r1", "r2", "r3", "r4" - ); -#elif defined(CPU_COLDFIRE) && (LCD_DEPTH == 2) +#if defined(CPU_COLDFIRE) && (LCD_DEPTH == 2) asm ( "move.l %[wide],%%d3\n" /* columns = width */ diff --git a/apps/plugins/lrcplayer.c b/apps/plugins/lrcplayer.c index 4ae9722ae3..eb441eab8d 100644 --- a/apps/plugins/lrcplayer.c +++ b/apps/plugins/lrcplayer.c @@ -2667,12 +2667,6 @@ static int handle_button(void) switch (button) { case ACTION_WPS_BROWSE: -#if CONFIG_KEYPAD == ONDIO_PAD - /* ondio doesn't have ACTION_WPS_MENU, - so use ACTION_WPS_BROWSE for menu */ - ret = LRC_GOTO_MENU; - break; -#endif case ACTION_WPS_STOP: save_changes(); ret = PLUGIN_OK; diff --git a/apps/plugins/lua/Makefile b/apps/plugins/lua/Makefile index 8568d79c4c..dcf2910c36 100644 --- a/apps/plugins/lua/Makefile +++ b/apps/plugins/lua/Makefile @@ -28,13 +28,8 @@ OBJS = $(patsubst %.S, $(OBJDIR)/%.o, $(OBJS2)) DIRS = . ifndef APP_TYPE -ifneq (,$(strip $(foreach tgt,RECORDER ONDIO,$(findstring $(tgt),$(TARGET))))) - LDS := archos.lds - OUTPUT = $(OUTDIR)/lua.ovl -else ## iRiver/iPod/... targets LDS := ../plugin.lds OUTPUT = $(OUTDIR)/lua.rock -endif else ## simulators OUTPUT = $(OUTDIR)/lua.rock endif diff --git a/apps/plugins/lua/lua.make b/apps/plugins/lua/lua.make index ebdef1e24e..61decb5605 100644 --- a/apps/plugins/lua/lua.make +++ b/apps/plugins/lua/lua.make @@ -23,15 +23,7 @@ LUA_INCLUDELIST := $(addprefix $(LUA_BUILDDIR)/,audio.lua blit.lua color.lua dra ifndef APP_TYPE -ifneq (,$(strip $(foreach tgt,RECORDER ONDIO,$(findstring $(tgt),$(TARGET))))) - ### lowmem targets - ROCKS += $(LUA_BUILDDIR)/lua.ovl - LUA_OUTLDS = $(LUA_BUILDDIR)/lua.link - LUA_OVLFLAGS = -T$(LUA_OUTLDS) -Wl,--gc-sections -Wl,-Map,$(basename $@).map -else - ### all other targets ROCKS += $(LUA_BUILDDIR)/lua.rock -endif else ### simulator ROCKS += $(LUA_BUILDDIR)/lua.rock diff --git a/apps/plugins/lua/rocklib.c b/apps/plugins/lua/rocklib.c index a33fdf7170..4fa989da46 100644 --- a/apps/plugins/lua/rocklib.c +++ b/apps/plugins/lua/rocklib.c @@ -39,7 +39,7 @@ * from Lua in its stack in direct order (the first argument is pushed first). To return values to Lua, * a C function just pushes them onto the stack, in direct order (the first result is pushed first), * and returns the number of results. Any other value in the stack below the results will be properly - * discarded by Lua. Like a Lua function, a C function called by Lua can also return many results. + * discarded by Lua. Like a Lua function, a C function called by Lua can also return many results. * * When porting new functions, don't forget to check rocklib_aux.pl whether it automatically creates * wrappers for the function and if so, add the function names to @forbidden_functions. This is to @@ -487,8 +487,7 @@ RB_WRAP(sound) lua_pushstring (L, rb->sound_unit(setting)); return 1; break; -#if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \ - (CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHCONTROL) +#if ((CONFIG_CODEC == SWCODEC) && defined (HAVE_PITCHCONTROL)) case SOUND_SET_PITCH: rb->sound_set_pitch(setting); return 1;/*nil*/ @@ -496,7 +495,7 @@ RB_WRAP(sound) #endif case SOUND_VAL2PHYS: value = luaL_checkint(L, 3); - result = rb->sound_val2phys(setting, value); + result = rb->sound_val2phys(setting, value); break; default: diff --git a/apps/plugins/minesweeper.c b/apps/plugins/minesweeper.c index 4e875979ab..01659dbfd2 100644 --- a/apps/plugins/minesweeper.c +++ b/apps/plugins/minesweeper.c @@ -34,31 +34,8 @@ enum minesweeper_status { }; /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -# define MINESWP_LEFT BUTTON_LEFT -# define MINESWP_RIGHT BUTTON_RIGHT -# define MINESWP_UP BUTTON_UP -# define MINESWP_DOWN BUTTON_DOWN -# define MINESWP_QUIT BUTTON_OFF -# define MINESWP_TOGGLE BUTTON_ON -# define MINESWP_TOGGLE2 BUTTON_F1 -# define MINESWP_DISCOVER BUTTON_PLAY -# define MINESWP_DISCOVER2 BUTTON_F2 -# define MINESWP_INFO BUTTON_F3 - -#elif CONFIG_KEYPAD == ONDIO_PAD -# define MINESWP_LEFT BUTTON_LEFT -# define MINESWP_RIGHT BUTTON_RIGHT -# define MINESWP_UP BUTTON_UP -# define MINESWP_DOWN BUTTON_DOWN -# define MINESWP_QUIT BUTTON_OFF -# define MINESWP_TOGGLE_PRE BUTTON_MENU -# define MINESWP_TOGGLE (BUTTON_MENU | BUTTON_REL) -# define MINESWP_DISCOVER (BUTTON_MENU | BUTTON_REPEAT) -# define MINESWP_INFO (BUTTON_MENU | BUTTON_OFF) - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) # define MINESWP_LEFT BUTTON_LEFT # define MINESWP_RIGHT BUTTON_RIGHT # define MINESWP_UP BUTTON_UP diff --git a/apps/plugins/nim.c b/apps/plugins/nim.c deleted file mode 100644 index 70cf8dcec4..0000000000 --- a/apps/plugins/nim.c +++ /dev/null @@ -1,285 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2003 Pierre Delore - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ -#include "plugin.h" -#include "lib/pluginlib_exit.h" - -/* NIM game for the player - -Rules of nim game ------------------ -There are 21 matches. -Two players (you and the cpu) alternately pick a certain number of matches and the one, -who takes the last match, loses. - - -History: -------- -V1.0 : 2003-07-22 - First release of the game -V1.1 : 2003-07-22 - I Change the patterns definition in order to have a clean code -V1.2 : 2003-07-30 - Patch from JB that change: - . the win and lose message - . the BUTTON_STOP code - . Add a test - I suppress the exit variable - I suppress or translates the comments which were in French - I put min=1 at the of the main loop ( When there are 21 matches you can decide not to - take a match. Later you are obliged to take at least one.) -*/ - - - -/*Pattern for the game*/ -static unsigned char smile[]={0x00, 0x11, 0x04, 0x04, 0x00, 0x11, 0x0E}; /* :-) */ -static unsigned char cry[] ={0x00, 0x11, 0x04, 0x04, 0x00, 0x0E, 0x11}; /* :-( */ -static unsigned char pattern3[]={0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15}; /*3 parts*/ -static unsigned char pattern2[]={0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14}; /*2 parts*/ -static unsigned char pattern1[]={0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}; /*1 part*/ - -static unsigned long hsmile,hcry,h1,h2; /*Handle for the new pattern*/ - -static bool end; /*If true game is finished*/ - -/*Display that the action it's impossible*/ -static void impossible(void) -{ - rb->lcd_puts(0,1,"Impossible!"); - rb->lcd_update(); - rb->sleep(HZ); - return; -} - -/*Display that the CPU lose :) */ -static void lose(void) -{ - rb->lcd_define_pattern(hsmile,smile); - rb->lcd_puts(0,1,"You Win!!"); - rb->lcd_putc(8,1,hsmile); - rb->lcd_update(); - end=true; - rb->sleep(HZ*2); - return; -} - - -/* Display that the CPU win :( */ -static void win(void) -{ - rb->lcd_define_pattern(hcry,cry); - rb->lcd_puts(0,1,"You Lose!!"); - rb->lcd_putc(9,1,hcry); - rb->lcd_update(); - end=true; - rb->sleep(HZ*2); - return; -} - - -/*Display the first line*/ -static void display_first_line(int x) -{ - int i; - - rb->lcd_putsf(0,0," =%d",x); - - rb->lcd_define_pattern(h1,pattern3); - for (i=0;i<x/3;i++) - rb->lcd_putc(i,0,h1); - - if (x%3==2) - { - rb->lcd_define_pattern(h2,pattern2); - rb->lcd_putc(i,0,h2); - } - if (x%3==1) - { - rb->lcd_define_pattern(h2,pattern1); - rb->lcd_putc(i,0,h2); - } -} - -/* Call when the program end */ -static void nim_exit(void) -{ - /*Restore the old pattern*/ - rb->lcd_unlock_pattern(h1); - rb->lcd_unlock_pattern(h2); - rb->lcd_unlock_pattern(hsmile); - rb->lcd_unlock_pattern(hcry); - - /*Clear the screen*/ - rb->lcd_clear_display(); - rb->lcd_update(); -} - -/* this is the plugin entry point */ -enum plugin_status plugin_start(const void* parameter) -{ - int y,z,button; - int x,v,min; - bool ok; - bool go; - atexit(nim_exit); - - /* if you don't use the parameter, you can do like - this to avoid the compiler warning about it */ - (void)parameter; - - /*Get the pattern handle*/ - h1=rb->lcd_get_locked_pattern(); - h2=rb->lcd_get_locked_pattern(); - hcry=rb->lcd_get_locked_pattern(); - hsmile=rb->lcd_get_locked_pattern(); - - - rb->splash(HZ, "NIM V1.2"); - rb->lcd_clear_display(); - - /* Main loop */ - while (1) - { - /* Init */ - x=21; - v=1; - y=1; - end=false; - min=0; - - /*Empty the event queue*/ - rb->button_clear_queue(); - - /* Game loop */ - while(end!=true) - { - do - { - ok=1; - y=1; - display_first_line(x); - - rb->lcd_putsf(0,1,"[%d..%d]?=%d",min,v,y); - rb->lcd_update(); - - go=false; - while (!go) - { - button = rb->button_get(true); - switch ( button ) - { - case BUTTON_STOP|BUTTON_REL: - go = true; - return PLUGIN_OK; - break; - - case BUTTON_PLAY|BUTTON_REL: - go=true; - break; - - case BUTTON_LEFT|BUTTON_REL: - go=false; - if (y>min) - y--; - break; - - case BUTTON_RIGHT|BUTTON_REL: - go=false; - if (y<v) - y++; - break; - - default: - exit_on_usb(button); - break; - } - display_first_line(x); - rb->lcd_putsf(0,1,"[%d..%d]?=%d",min,v,y); - rb->lcd_update(); - } - - if ( (y==0) && (x<21)) - { - impossible(); - ok=false; - } - else - { - if (y!=0) /*If y=0 and x=21 jump to CPU code */ - { - if ((y>v) || (y>x)) - { - impossible(); - ok=false; - } - if (y-x==0) - win(); - else - { - v=y*2; - x-=y; - } - } - } - } - while (ok==false); - - display_first_line(x); - - /*CPU*/ - if (x==1) - lose(); - else - if (x==2) - win(); - y=0; - if (end==false) - { - for (z=v;z>=1;z--) - { - if (x-z==1) - y=z; - } - if (y<=0) - { - for(z=v;z>=1;z--) - { - if(x-(z*3)==2) - y=z; - } - if ((y==0) && (x>14)) - y=v; - if (y==0) - y=1; - } - v=y*2; - x-=y; - rb->lcd_putsf(0,1,"I take=%d",y); - rb->lcd_update(); - rb->sleep(HZ); - } - if ((x==1)&&(!end)) - win(); - min=1; - } - } - return PLUGIN_OK; -} diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c index 97a8094e1f..8e14f26bd5 100644 --- a/apps/plugins/oscilloscope.c +++ b/apps/plugins/oscilloscope.c @@ -30,30 +30,7 @@ #include "lib/osd.h" /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define OSCILLOSCOPE_QUIT BUTTON_OFF -#define OSCILLOSCOPE_DRAWMODE BUTTON_F1 -#define OSCILLOSCOPE_ADVMODE BUTTON_F2 -#define OSCILLOSCOPE_ORIENTATION BUTTON_F3 -#define OSCILLOSCOPE_PAUSE BUTTON_PLAY -#define OSCILLOSCOPE_SPEED_UP BUTTON_RIGHT -#define OSCILLOSCOPE_SPEED_DOWN BUTTON_LEFT -#define OSCILLOSCOPE_VOL_UP BUTTON_UP -#define OSCILLOSCOPE_VOL_DOWN BUTTON_DOWN - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define OSCILLOSCOPE_QUIT BUTTON_OFF -#define OSCILLOSCOPE_DRAWMODE_PRE BUTTON_MENU -#define OSCILLOSCOPE_DRAWMODE (BUTTON_MENU | BUTTON_REL) -#define OSCILLOSCOPE_ADVMODE (BUTTON_MENU | BUTTON_RIGHT) -#define OSCILLOSCOPE_ORIENTATION (BUTTON_MENU | BUTTON_LEFT) -#define OSCILLOSCOPE_PAUSE (BUTTON_MENU | BUTTON_OFF) -#define OSCILLOSCOPE_SPEED_UP BUTTON_RIGHT -#define OSCILLOSCOPE_SPEED_DOWN BUTTON_LEFT -#define OSCILLOSCOPE_VOL_UP BUTTON_UP -#define OSCILLOSCOPE_VOL_DOWN BUTTON_DOWN - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) #define OSCILLOSCOPE_QUIT BUTTON_OFF #define OSCILLOSCOPE_DRAWMODE BUTTON_SELECT #define OSCILLOSCOPE_ADVMODE BUTTON_MODE @@ -934,9 +911,6 @@ static void get_peaks(int *left, int *right) #elif defined (SIMULATOR) *left = rand() % 0x8000; *right = rand() % 0x8000; -#elif (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - *left = rb->mas_codec_readreg(0xC); - *right = rb->mas_codec_readreg(0xD); #else *left = 0; *right = 0; diff --git a/apps/plugins/pegbox.c b/apps/plugins/pegbox.c index e000e98d33..c3d38997eb 100644 --- a/apps/plugins/pegbox.c +++ b/apps/plugins/pegbox.c @@ -43,41 +43,7 @@ #define HOLE 6 #define PLAYER 7 -#if CONFIG_KEYPAD == RECORDER_PAD -#define PEGBOX_SELECT BUTTON_ON -#define PEGBOX_QUIT BUTTON_OFF -#define PEGBOX_RESTART BUTTON_F2 -#define PEGBOX_LVL_UP BUTTON_F1 -#define PEGBOX_LVL_DOWN BUTTON_F3 -#define PEGBOX_UP BUTTON_UP -#define PEGBOX_DOWN BUTTON_DOWN -#define PEGBOX_RIGHT BUTTON_RIGHT -#define PEGBOX_LEFT BUTTON_LEFT - -#define SELECT_TEXT "ON" -#define QUIT_TEXT "OFF" -#define RESTART_TEXT "F2" -#define LVL_UP_TEXT "F1" -#define LVL_DOWN_TEXT "F3" - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define PEGBOX_SELECT BUTTON_OFF -#define PEGBOX_QUIT (BUTTON_MENU | BUTTON_LEFT) -#define PEGBOX_RESTART (BUTTON_MENU | BUTTON_RIGHT) -#define PEGBOX_LVL_UP (BUTTON_MENU | BUTTON_UP) -#define PEGBOX_LVL_DOWN (BUTTON_MENU | BUTTON_DOWN) -#define PEGBOX_UP BUTTON_UP -#define PEGBOX_DOWN BUTTON_DOWN -#define PEGBOX_RIGHT BUTTON_RIGHT -#define PEGBOX_LEFT BUTTON_LEFT - -#define SELECT_TEXT "OFF" -#define QUIT_TEXT "M+LEFT" -#define RESTART_TEXT "M+RIGHT" -#define LVL_UP_TEXT "M+UP" -#define LVL_DOWN_TEXT "M+DOWN" - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define PEGBOX_SELECT BUTTON_SELECT #define PEGBOX_QUIT BUTTON_OFF diff --git a/apps/plugins/pictureflow/pictureflow.c b/apps/plugins/pictureflow/pictureflow.c index 91174604ea..a32298f861 100644 --- a/apps/plugins/pictureflow/pictureflow.c +++ b/apps/plugins/pictureflow/pictureflow.c @@ -90,13 +90,6 @@ const struct button_mapping pf_context_album_scroll[] = {ACTION_NONE, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT}, {ACTION_NONE, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT}, #endif -#if CONFIG_KEYPAD == ONDIO_PAD - {PF_SELECT, BUTTON_UP|BUTTON_REL, BUTTON_UP}, - {PF_CONTEXT, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP}, - {ACTION_NONE, BUTTON_UP, BUTTON_NONE}, - {ACTION_NONE, BUTTON_DOWN, BUTTON_NONE}, - {ACTION_NONE, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE}, -#endif LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_PLUGIN|1) }; #endif /* !USE_CORE_PREVNEXT */ @@ -147,8 +140,7 @@ const struct button_mapping pf_context_buttons[] = {PF_QUIT, BUTTON_RC_REC, BUTTON_NONE}, #elif CONFIG_KEYPAD == MEIZU_M6SL_PAD {PF_QUIT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU}, -#elif CONFIG_KEYPAD == IRIVER_H100_PAD || CONFIG_KEYPAD == IRIVER_H300_PAD || \ - CONFIG_KEYPAD == RECORDER_PAD || CONFIG_KEYPAD == ONDIO_PAD +#elif CONFIG_KEYPAD == IRIVER_H100_PAD || CONFIG_KEYPAD == IRIVER_H300_PAD {PF_QUIT, BUTTON_OFF, BUTTON_NONE}, #elif CONFIG_KEYPAD == PBELL_VIBE500_PAD {PF_QUIT, BUTTON_REC, BUTTON_NONE}, @@ -691,13 +683,7 @@ static inline PFreal fdiv(PFreal num, PFreal den) #define fabs(a) (a < 0 ? -a : a) #define fbound(min,val,max) (fmax((min),fmin((max),(val)))) -#if CONFIG_CPU == SH7034 -/* 16*16->32 bit multiplication is a single instrcution on the SH1 */ -#define MULUQ(a, b) ((uint32_t) (((uint16_t) (a)) * ((uint16_t) (b)))) -#else #define MULUQ(a, b) ((a) * (b)) -#endif - #if 0 #define fmul(a,b) ( ((a)*(b)) >> PFREAL_SHIFT ) diff --git a/apps/plugins/pictureflow/pictureflow.make b/apps/plugins/pictureflow/pictureflow.make index 9c29f7abd9..fb606fb860 100644 --- a/apps/plugins/pictureflow/pictureflow.make +++ b/apps/plugins/pictureflow/pictureflow.make @@ -16,15 +16,7 @@ PICTUREFLOW_OBJ := $(call c2obj, $(PICTUREFLOW_SRC)) OTHER_SRC += $(PICTUREFLOW_SRC) ifndef APP_TYPE -ifneq (,$(strip $(foreach tgt,RECORDER ONDIO,$(findstring $(tgt),$(TARGET))))) - ### lowmem targets - ROCKS += $(PICTUREFLOW_OBJDIR)/pictureflow.ovl - PICTUREFLOW_OUTLDS = $(PICTUREFLOW_OBJDIR)/picutreflow.link - PICTUREFLOW_OVLFLAGS = -T$(PICTUREFLOW_OUTLDS) -Wl,--gc-sections -Wl,-Map,$(basename $@).map -else - ### all other targets ROCKS += $(PICTUREFLOW_OBJDIR)/pictureflow.rock -endif else ### simulator ROCKS += $(PICTUREFLOW_OBJDIR)/pictureflow.rock diff --git a/apps/plugins/plugin.lds b/apps/plugins/plugin.lds index 7037496be4..25ff4a461b 100644 --- a/apps/plugins/plugin.lds +++ b/apps/plugins/plugin.lds @@ -6,8 +6,6 @@ OUTPUT_FORMAT(elf32-m68k) #elif defined(CPU_ARM) OUTPUT_FORMAT(elf32-littlearm) -#elif defined(CPU_SH) -OUTPUT_FORMAT(elf32-sh) #elif defined(CPU_MIPS) OUTPUT_FORMAT(elf32-littlemips) #else diff --git a/apps/plugins/pong.c b/apps/plugins/pong.c index 1fcd018de2..fcc4c5a3b9 100644 --- a/apps/plugins/pong.c +++ b/apps/plugins/pong.c @@ -39,23 +39,7 @@ #define MOVE_STEP LCD_HEIGHT / 32 /* move pad this many steps up/down each move */ /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define PONG_QUIT BUTTON_OFF -#define PONG_PAUSE BUTTON_ON -#define PONG_LEFT_UP BUTTON_F1 -#define PONG_LEFT_DOWN BUTTON_LEFT -#define PONG_RIGHT_UP BUTTON_F3 -#define PONG_RIGHT_DOWN BUTTON_RIGHT - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define PONG_QUIT BUTTON_OFF -#define PONG_PAUSE BUTTON_RIGHT -#define PONG_LEFT_UP BUTTON_LEFT -#define PONG_LEFT_DOWN BUTTON_MENU -#define PONG_RIGHT_UP BUTTON_UP -#define PONG_RIGHT_DOWN BUTTON_DOWN - -#elif CONFIG_KEYPAD == IRIVER_H100_PAD +#if CONFIG_KEYPAD == IRIVER_H100_PAD #define PONG_QUIT BUTTON_OFF #define PONG_LEFT_UP BUTTON_UP #define PONG_LEFT_DOWN BUTTON_DOWN diff --git a/apps/plugins/reversi/reversi-gui.h b/apps/plugins/reversi/reversi-gui.h index 4ec6bcb67b..ceeabeebc8 100644 --- a/apps/plugins/reversi/reversi-gui.h +++ b/apps/plugins/reversi/reversi-gui.h @@ -27,28 +27,8 @@ #define GAME_FILE PLUGIN_GAMES_DIR "/reversi.rev" /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define REVERSI_BUTTON_QUIT BUTTON_OFF -#define REVERSI_BUTTON_UP BUTTON_UP -#define REVERSI_BUTTON_DOWN BUTTON_DOWN -#define REVERSI_BUTTON_LEFT BUTTON_LEFT -#define REVERSI_BUTTON_RIGHT BUTTON_RIGHT -#define REVERSI_BUTTON_MAKE_MOVE BUTTON_PLAY -#define REVERSI_BUTTON_MENU BUTTON_F1 - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define REVERSI_BUTTON_QUIT BUTTON_OFF -#define REVERSI_BUTTON_UP BUTTON_UP -#define REVERSI_BUTTON_DOWN BUTTON_DOWN -#define REVERSI_BUTTON_LEFT BUTTON_LEFT -#define REVERSI_BUTTON_RIGHT BUTTON_RIGHT -#define REVERSI_BUTTON_MAKE_MOVE BUTTON_MENU -#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS -#define REVERSI_BUTTON_MENU_LONGPRESS -#define REVERSI_BUTTON_MENU BUTTON_MENU - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define REVERSI_BUTTON_QUIT BUTTON_OFF #define REVERSI_BUTTON_UP BUTTON_UP #define REVERSI_BUTTON_DOWN BUTTON_DOWN diff --git a/apps/plugins/rockblox.c b/apps/plugins/rockblox.c index b6cf6e5470..1732d61277 100644 --- a/apps/plugins/rockblox.c +++ b/apps/plugins/rockblox.c @@ -58,43 +58,6 @@ #define ROCKBLOX_RC_OFF BUTTON_RC_STOP -#elif CONFIG_KEYPAD == RECORDER_PAD - -#define ROCKBLOX_OFF BUTTON_OFF -#define ROCKBLOX_ROTATE_CCW BUTTON_UP -#define ROCKBLOX_ROTATE_CW BUTTON_PLAY -#define ROCKBLOX_DOWN BUTTON_DOWN -#define ROCKBLOX_LEFT BUTTON_LEFT -#define ROCKBLOX_RIGHT BUTTON_RIGHT -#define ROCKBLOX_DROP BUTTON_ON -#define ROCKBLOX_RESTART BUTTON_F1 - -#elif CONFIG_KEYPAD == PLAYER_PAD - -#define ROCKBLOX_OFF_PRE BUTTON_STOP -#define ROCKBLOX_OFF (BUTTON_STOP|BUTTON_REL) -#define ROCKBLOX_ROTATE_CCW BUTTON_PLAY -#define ROCKBLOX_ROTATE_CW (BUTTON_ON|BUTTON_PLAY) -#define ROCKBLOX_DOWN BUTTON_MENU -#define ROCKBLOX_LEFT BUTTON_LEFT -#define ROCKBLOX_RIGHT BUTTON_RIGHT -#define ROCKBLOX_DROP_PRE BUTTON_ON -#define ROCKBLOX_DROP (BUTTON_ON|BUTTON_REL) -#define ROCKBLOX_RESTART (BUTTON_STOP|BUTTON_MENU) - -#elif CONFIG_KEYPAD == ONDIO_PAD - -#define ROCKBLOX_OFF_PRE BUTTON_OFF -#define ROCKBLOX_OFF (BUTTON_OFF|BUTTON_REL) -#define ROCKBLOX_ROTATE_CCW BUTTON_UP -#define ROCKBLOX_ROTATE_CW (BUTTON_MENU|BUTTON_UP) -#define ROCKBLOX_DOWN BUTTON_DOWN -#define ROCKBLOX_LEFT BUTTON_LEFT -#define ROCKBLOX_RIGHT BUTTON_RIGHT -#define ROCKBLOX_DROP_PRE BUTTON_MENU -#define ROCKBLOX_DROP (BUTTON_MENU|BUTTON_REL) -#define ROCKBLOX_RESTART (BUTTON_OFF|BUTTON_MENU) - #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD #define ROCKBLOX_OFF BUTTON_POWER diff --git a/apps/plugins/rockbox_flash.c b/apps/plugins/rockbox_flash.c deleted file mode 100644 index 4837b03fb5..0000000000 --- a/apps/plugins/rockbox_flash.c +++ /dev/null @@ -1,967 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Plugin for reprogramming only the second image in Flash ROM. -* !!! DON'T MESS WITH THIS CODE UNLESS YOU'RE ABSOLUTELY SURE WHAT YOU DO !!! -* -* Copyright (C) 2003 Jörg Hohensohn aka [IDC]Dragon -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 -* of the License, or (at your option) any later version. -* -* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -* KIND, either express or implied. -* -****************************************************************************/ -#include "plugin.h" - -/* define DUMMY if you only want to "play" with the UI, does no harm */ -/* #define DUMMY */ - -#define LATEST_BOOTLOADER_VERSION 3 /* update this with the bootloader */ - -#ifndef UINT8 -#define UINT8 unsigned char -#endif - -#ifndef UINT16 -#define UINT16 unsigned short -#endif - -#ifndef UINT32 -#define UINT32 unsigned long -#endif - -/* hard-coded values */ -static volatile UINT8* FB = (UINT8*)0x02000000; /* Flash base address */ -#define SECTORSIZE 4096 /* size of one flash sector */ - -#define ROCKBOX_DEST 0x09000000 -#define ROCKBOX_EXEC 0x09000200 -#define BOOT_VERS_ADR 0xFA /* position of bootloader version value in Flash */ -#define FW_VERS_ADR 0xFE /* position of firmware version value in Flash */ -#define UCL_HEADER 26 /* size of the header generated by uclpack */ - -#if CONFIG_KEYPAD == ONDIO_PAD /* limited keypad */ -#define KEY1 BUTTON_LEFT -#define KEY2 BUTTON_UP -#define KEYNAME1 "Left" -#define KEYNAME2 "Up" -#else /* recorder keypad */ -#define KEY1 BUTTON_F1 -#define KEY2 BUTTON_F2 -#define KEYNAME1 "F1" -#define KEYNAME2 "F2" -#endif - -typedef struct -{ - UINT32 destination; /* address to copy it to */ - UINT32 size; /* how many bytes of payload (to the next header) */ - UINT32 execute; /* entry point */ - UINT32 flags; /* uncompressed or compressed */ - /* end of header, now comes the payload */ -} tImageHeader; - -/* result of the CheckFirmwareFile() function */ -typedef enum -{ - eOK = 0, - eFileNotFound, /* errors from here on */ - eTooBig, - eTooSmall, - eReadErr, - eNotUCL, - eWrongAlgorithm, - eMultiBlocks, - eBadRomLink -} tCheckResult; - -typedef struct -{ - UINT8 manufacturer; - UINT8 id; - int size; - char name[32]; -} tFlashInfo; - -static UINT8* sector; /* better not place this on the stack... */ - -/***************** Flash Functions *****************/ - - -/* read the manufacturer and device ID */ -static bool ReadID(volatile UINT8* pBase, UINT8* pManufacturerID, - UINT8* pDeviceID) -{ - UINT8 not_manu, not_id; /* read values before switching to ID mode */ - UINT8 manu, id; /* read values when in ID mode */ - - pBase = (UINT8*)((UINT32)pBase & 0xFFF80000); /* round down to 512k align, - to make sure */ - - not_manu = pBase[0]; /* read the normal content */ - not_id = pBase[1]; /* should be 'A' (0x41) and 'R' (0x52) from the - "ARCH" marker */ - - pBase[0x5555] = 0xAA; /* enter command mode */ - pBase[0x2AAA] = 0x55; - pBase[0x5555] = 0x90; /* ID command */ - rb->sleep(HZ/50); /* Atmel wants 20ms pause here */ - - manu = pBase[0]; - id = pBase[1]; - - pBase[0] = 0xF0; /* reset flash (back to normal read mode) */ - rb->sleep(HZ/50); /* Atmel wants 20ms pause here */ - - /* I assume success if the obtained values are different from - the normal flash content. This is not perfectly bulletproof, they - could theoretically be the same by chance, causing us to fail. */ - if (not_manu != manu || not_id != id) /* a value has changed */ - { - *pManufacturerID = manu; /* return the results */ - *pDeviceID = id; - return true; /* success */ - } - return false; /* fail */ -} - -/* erase the sector which contains the given address */ -static bool EraseSector(volatile UINT8* pAddr) -{ -#ifdef DUMMY - (void)pAddr; /* prevents warning */ - return true; -#else - volatile UINT8* pBase = - (UINT8*)((UINT32)pAddr & 0xFFF80000); /* round down to 512k align */ - unsigned timeout = 43000; /* the timeout loop should be no less than - 25ms */ - - pBase[0x5555] = 0xAA; /* enter command mode */ - pBase[0x2AAA] = 0x55; - pBase[0x5555] = 0x80; /* erase command */ - pBase[0x5555] = 0xAA; /* enter command mode */ - pBase[0x2AAA] = 0x55; - *pAddr = 0x30; /* erase the sector */ - - /* I counted 7 instructions for this loop -> min. 0.58 us per round - Plus memory waitstates it will be much more, gives margin */ - while (*pAddr != 0xFF && --timeout); /* poll for erased */ - - return (timeout != 0); -#endif -} - -/* address must be in an erased location */ -static inline bool ProgramByte(volatile UINT8* pAddr, UINT8 data) -{ -#ifdef DUMMY - (void)pAddr; /* prevents warnings */ - (void)data; - return true; -#else - unsigned timeout = 35; /* the timeout loop should be no less than 20us */ - - if (~*pAddr & data) /* just a safety feature, not really necessary */ - return false; /* can't set any bit from 0 to 1 */ - - FB[0x5555] = 0xAA; /* enter command mode */ - FB[0x2AAA] = 0x55; - FB[0x5555] = 0xA0; /* byte program command */ - - *pAddr = data; - - /* I counted 7 instructions for this loop -> min. 0.58 us per round - Plus memory waitstates it will be much more, gives margin */ - while (*pAddr != data && --timeout); /* poll for programmed */ - - return (timeout != 0); -#endif -} - -/* this returns true if supported and fills the info struct */ -static bool GetFlashInfo(tFlashInfo* pInfo) -{ - rb->memset(pInfo, 0, sizeof(tFlashInfo)); - - if (!ReadID(FB, &pInfo->manufacturer, &pInfo->id)) - return false; - - if (pInfo->manufacturer == 0xBF) /* SST */ - { - if (pInfo->id == 0xD6) - { - pInfo->size = 256* 1024; /* 256k */ - rb->strcpy(pInfo->name, "SST39VF020"); - return true; - } - else if (pInfo->id == 0xD7) - { - pInfo->size = 512* 1024; /* 512k */ - rb->strcpy(pInfo->name, "SST39VF040"); - return true; - } - else - return false; - } - return false; -} - - -/*********** Tool Functions ************/ - -/* read a 32 bit value from memory, big endian */ -static UINT32 Read32(UINT8* pByte) -{ - UINT32 value; - - value = (UINT32)pByte[0] << 24; - value |= (UINT32)pByte[1] << 16; - value |= (UINT32)pByte[2] << 8; - value |= (UINT32)pByte[3]; - - return value; -} - -/* get the start address of the second image */ -static tImageHeader* GetSecondImage(void) -{ - tImageHeader* pImage1; - UINT32 pos = 0; /* default: not found */ - UINT32* pFlash = (UINT32*)FB; - - /* determine the first image position */ - pos = pFlash[2] + pFlash[3]; /* position + size of the bootloader - = after it */ - pos = (pos + 3) & ~3; /* be sure it's 32 bit aligned */ - pImage1 = (tImageHeader*)pos; - - if (pImage1->destination != ROCKBOX_DEST || - pImage1->execute != ROCKBOX_EXEC) - return 0; /* seems to be no Archos/Rockbox image in here */ - - if (pImage1->size != 0) - { - /* success, we have a second image */ - pos = (UINT32)pImage1 + sizeof(tImageHeader) + pImage1->size; - if (((pos + SECTORSIZE-1) & ~(SECTORSIZE-1)) != pos) - { /* not sector-aligned */ - pos = 0; /* sanity check failed */ - } - } - - return (tImageHeader*)pos; -} - -/* return bootloader version */ -static inline unsigned BootloaderVersion(void) -{ - return FB[BOOT_VERS_ADR]; -} - -/*********** Image File Functions ************/ - -/* so far, only compressed images in UCL NRV algorithm 2e supported */ -tCheckResult CheckImageFile(char* filename, int space, - tImageHeader* pHeader, UINT8* pos) -{ - int i; - int fd; - int filesize; /* size info */ - - int fileread = 0; /* total size as read from the file */ - int read; /* how many for this sector */ - - /* magic file header for compressed files */ - static const UINT8 magic[8] = { 0x00,0xe9,0x55,0x43,0x4c,0xff,0x01,0x1a }; - UINT8 ucl_header[UCL_HEADER]; - - fd = rb->open(filename, O_RDONLY); - if (fd < 0) - return eFileNotFound; - - filesize = rb->filesize(fd); - if (filesize - (int)sizeof(ucl_header) - 8 > space) - { - rb->close(fd); - return eTooBig; - } - else if (filesize < 10000) /* give it some reasonable lower limit */ - { - rb->close(fd); - return eTooSmall; - } - - /* do some sanity checks */ - - read = rb->read(fd, ucl_header, sizeof(ucl_header)); - fileread += read; - if (read != sizeof(ucl_header)) - { - rb->close(fd); - return eReadErr; - } - - /* compare the magic header */ - for (i=0; i<8; i++) - { - if (ucl_header[i] != magic[i]) - { - rb->close(fd); - return eNotUCL; - } - } - - pHeader->size = Read32(ucl_header + 22); /* compressed size */ - if (pHeader->size != filesize - sizeof(ucl_header) - 8) - { - rb->close(fd); - return eMultiBlocks; - } - - /* fill in the hardcoded defaults of the header */ - pHeader->destination = ROCKBOX_DEST; - pHeader->execute = ROCKBOX_EXEC; - - if (Read32(ucl_header + 18) > pHeader->size) /* compare with uncompressed - size */ - { /* compressed, normal case */ - pHeader->flags = 0x00000001; /* flags for UCL compressed */ - - /* check for supported algorithm */ - if (ucl_header[12] != 0x2E) - { - rb->close(fd); - return eWrongAlgorithm; - } - } - else - { /* uncompressed, either to be copied or run directly in flash */ - UINT32 reset_vector; /* image has to start with reset vector */ - - pHeader->flags = 0x00000000; /* uncompressed */ - - read = rb->read(fd, &reset_vector, sizeof(reset_vector)); - fileread += read; - if (read != sizeof(reset_vector)) - { - rb->close(fd); - return eReadErr; - } - if (reset_vector >= (UINT32)FB - && reset_vector < (UINT32)FB+512*1024) /* ROM address? */ - { - /* assume in-place, executing directly in flash */ - pHeader->destination = (UINT32)(pos + sizeof(tImageHeader)); - - /* for new RomBox, this isn't the reset vector, - but the link address, for us to check the position */ - if(pHeader->destination != reset_vector) /* compare link addr. */ - { - rb->close(fd); - return eBadRomLink; /* not matching the start address */ - } - - /* read the now following reset vector */ - read = rb->read(fd, &reset_vector, sizeof(reset_vector)); - fileread += read; - if (read != sizeof(reset_vector)) - { - rb->close(fd); - return eReadErr; - } - } - - pHeader->execute = reset_vector; - } - - /* check if we can read the whole file */ - do - { - read = rb->read(fd, sector, SECTORSIZE); - fileread += read; - } while (read == SECTORSIZE); - - rb->close(fd); - - if (fileread != filesize) - return eReadErr; - - return eOK; -} - - -/* returns the # of failures, 0 on success */ -static unsigned ProgramImageFile(char* filename, UINT8* pos, - tImageHeader* pImageHeader, - int start, int size) -{ - int i; - int fd; - int read; /* how many for this sector */ - unsigned failures = 0; - - fd = rb->open(filename, O_RDONLY); - if (fd < 0) - return false; - - /* no error checking necessary here, we checked for minimum size - already */ - rb->lseek(fd, start, SEEK_SET); /* go to start position */ - - *(tImageHeader*)sector = *pImageHeader; /* copy header into sector - buffer */ - read = rb->read(fd, sector + sizeof(tImageHeader), - SECTORSIZE - sizeof(tImageHeader)); /* payload behind */ - size -= read; - read += sizeof(tImageHeader); /* to be programmed, but not part of the - file */ - - do { - if (!EraseSector(pos)) - { - /* nothing we can do, let the programming count the errors */ - } - - for (i=0; i<read; i++) - { - if (!ProgramByte(pos + i, sector[i])) - { - failures++; - } - } - - pos += SECTORSIZE; - read = rb->read(fd, sector, (size > SECTORSIZE) ? SECTORSIZE : size); - /* payload for next sector */ - size -= read; - } while (read > 0); - - rb->close(fd); - - return failures; -} - -/* returns the # of failures, 0 on success */ -static unsigned VerifyImageFile(char* filename, UINT8* pos, - tImageHeader* pImageHeader, - int start, int size) -{ - int i; - int fd; - int read; /* how many for this sector */ - unsigned failures = 0; - - fd = rb->open(filename, O_RDONLY); - if (fd < 0) - return false; - - /* no error checking necessary here, we checked for minimum size - already */ - rb->lseek(fd, start, SEEK_SET); /* go to start position */ - - *(tImageHeader*)sector = *pImageHeader; /* copy header into sector - buffer */ - read = rb->read(fd, sector + sizeof(tImageHeader), - SECTORSIZE - sizeof(tImageHeader)); /* payload behind */ - - size -= read; - read += sizeof(tImageHeader); /* to be programmed, but not part of the - file */ - - do - { - for (i=0; i<read; i++) - { - if (pos[i] != sector[i]) - { - failures++; - } - } - - pos += SECTORSIZE; - read = rb->read(fd, sector, (size > SECTORSIZE) ? SECTORSIZE : size); - /* payload for next sector */ - size -= read; - } while (read); - - rb->close(fd); - - return failures; -} - - -/***************** User Interface Functions *****************/ - -static int WaitForButton(void) -{ - int button; - - do - { - button = rb->button_get(true); - } while (IS_SYSEVENT(button) || (button & BUTTON_REL)); - - return button; -} - -#ifdef HAVE_LCD_BITMAP -/* helper for DoUserDialog() */ -static void ShowFlashInfo(tFlashInfo* pInfo, tImageHeader* pImageHeader) -{ - char buf[32]; - - if (!pInfo->manufacturer) - { - rb->lcd_puts_scroll(0, 0, "Flash: M=?? D=??"); - } - else - { - if (pInfo->size) - { - rb->snprintf(buf, sizeof(buf), "Flash size: %d KB", - pInfo->size / 1024); - rb->lcd_puts_scroll(0, 0, buf); - } - else - { - rb->lcd_puts_scroll(0, 0, "Unsupported chip"); - } - - } - - if (pImageHeader) - { - rb->snprintf(buf, sizeof(buf), "Image at %d KB", - ((UINT8*)pImageHeader - FB) / 1024); - rb->lcd_puts_scroll(0, 1, buf); - } - else - { - rb->lcd_puts_scroll(0, 1, "No image found!"); - } -} - - -/* Kind of our main function, defines the application flow. */ -/* recorder version */ -static void DoUserDialog(char* filename) -{ - tImageHeader ImageHeader; - tFlashInfo FlashInfo; - int button; - int rc; /* generic return code */ - UINT32 space, aligned_size, true_size; - UINT8* pos; - size_t memleft; - unsigned bl_version; - bool show_greet = false; - - /* this can only work if Rockbox runs in DRAM, not flash ROM */ - if ((UINT8*)rb >= FB && (UINT8*)rb < FB + 4096*1024) /* 4 MB max */ - { /* we're running from flash */ - rb->splash(HZ*3, "Not from ROM"); - return; /* exit */ - } - - /* refuse to work if the power may fail meanwhile */ - if (!rb->battery_level_safe()) - { - rb->splash(HZ*3, "Battery too low!"); - return; /* exit */ - } - - /* "allocate" memory */ - sector = rb->plugin_get_buffer(&memleft); - if (memleft < SECTORSIZE) /* need buffer for a flash sector */ - { - rb->splash(HZ*3, "Out of memory"); - return; /* exit */ - } - - rb->lcd_setfont(FONT_SYSFIXED); - - pos = (void*)GetSecondImage(); - rc = GetFlashInfo(&FlashInfo); - - ShowFlashInfo(&FlashInfo, (void*)pos); - rb->lcd_update(); - - if (FlashInfo.size == 0) /* no valid chip */ - { - rb->splash(HZ*3, "Not flashable"); - return; /* exit */ - } - else if (pos == 0) - { - rb->splash(HZ*3, "No image"); - return; /* exit */ - } - - bl_version = BootloaderVersion(); - /* Upgrade currently not recommended for FM and V2 - recorder due to bugs in V3 BootBox. (FS#12426) */ -#if !defined(ARCHOS_FMRECORDER) && !defined(ARCHOS_RECORDERV2) - if (bl_version < LATEST_BOOTLOADER_VERSION) - { - rb->lcd_putsf(0, 0, "Bootloader V%d", bl_version); - rb->lcd_puts(0, 1, "Hint: You're not "); - rb->lcd_puts(0, 2, "using the latest "); - rb->lcd_puts(0, 3, "bootloader. "); - rb->lcd_puts(0, 4, "A full reflash is "); - rb->lcd_puts(0, 5, "recommended. "); - rb->lcd_puts(0, 6, "Press " KEYNAME1 " to ignore"); - rb->lcd_update(); - - if (WaitForButton() != KEY1) - { - return; - } - rb->lcd_clear_display(); - } -#endif - - rb->lcd_puts(0, show_greet ? 0 : 3, "Checking..."); - rb->lcd_update(); - - space = FlashInfo.size - (pos-FB + sizeof(ImageHeader)); - /* size minus start */ - - rc = CheckImageFile(filename, space, &ImageHeader, pos); - if (rc != eOK) - { - rb->lcd_clear_display(); /* make room for error message */ - show_greet = true; /* verbose */ - } - - rb->lcd_puts(0, show_greet ? 0 : 3, "Checked:"); - switch (rc) { - case eOK: - rb->lcd_puts(0, show_greet ? 0 : 4, "File OK."); - break; - case eNotUCL: - rb->lcd_puts(0, 1, "File not UCL "); - rb->lcd_puts(0, 2, "compressed."); - rb->lcd_puts(0, 3, "Use uclpack --2e"); - rb->lcd_puts(0, 4, " --10 rockbox.bin"); - break; - case eWrongAlgorithm: - rb->lcd_puts(0, 1, "Wrong algorithm"); - rb->lcd_puts(0, 2, "for compression."); - rb->lcd_puts(0, 3, "Use uclpack --2e"); - rb->lcd_puts(0, 4, " --10 rockbox.bin"); - break; - case eFileNotFound: - rb->lcd_puts(0, 1, "File not found:"); - rb->lcd_puts_scroll(0, 2, filename); - break; - case eTooBig: - rb->lcd_puts(0, 1, "File too big,"); - rb->lcd_puts(0, 2, "won't fit in chip."); - if (bl_version < LATEST_BOOTLOADER_VERSION) - { - rb->lcd_puts(0, 3, "Upgrade bootloader"); - } - break; - case eTooSmall: - rb->lcd_puts(0, 1, "File too small."); - rb->lcd_puts(0, 2, "Incomplete?"); - break; - case eReadErr: - rb->lcd_puts(0, 1, "File read error."); - break; - case eMultiBlocks: - rb->lcd_puts(0, 1, "File invalid."); - rb->lcd_puts(0, 2, "Blocksize"); - rb->lcd_puts(0, 3, " too small?"); - break; - case eBadRomLink: - rb->lcd_puts(0, 1, "Bootloader not"); - rb->lcd_puts(0, 2, "compatible with"); - rb->lcd_puts(0, 3, "RomBox. Start"); - rb->lcd_puts(0, 4, "address mismatch."); - break; - default: - rb->lcd_puts(0, 1, "Check failed."); - break; - } - - if (rc == eOK) - { /* was OK */ - rb->lcd_puts(0, 6, "[" KEYNAME2 "] to program"); - rb->lcd_puts(0, 7, "other key to exit"); - } - else - { /* error occured */ - rb->lcd_puts(0, 6, "Any key to exit"); - } - rb->lcd_update(); - - button = WaitForButton(); - if (rc != eOK || button != KEY2) - { - return; - } - - true_size = ImageHeader.size; - aligned_size = ((sizeof(tImageHeader) + true_size + SECTORSIZE-1) & - ~(SECTORSIZE-1)) - sizeof(tImageHeader); /* round up to - next flash - sector */ - ImageHeader.size = aligned_size; /* increase image size such that we reach - the next sector */ - - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Programming..."); - rb->lcd_update(); - - rc = ProgramImageFile(filename, pos, &ImageHeader, UCL_HEADER, true_size); - if (rc) - { /* errors */ - rb->lcd_clear_display(); - rb->lcd_puts(0, 0, "Error:"); - rb->lcd_puts(0, 1, "Programming fail!"); - rb->lcd_putsf(0, 2, "%d errors", rc); - rb->lcd_update(); - button = WaitForButton(); - } - - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Verifying..."); - rb->lcd_update(); - - rc = VerifyImageFile(filename, pos, &ImageHeader, UCL_HEADER, true_size); - - rb->lcd_clear_display(); - if (rc == 0) - { - rb->lcd_puts(0, 0, "Verify OK."); - } - else - { - rb->lcd_puts(0, 0, "Error:"); - rb->lcd_puts(0, 1, "Verify fail!"); - rb->lcd_putsf(0, 2, "%d errors", rc); - rb->lcd_puts(0, 3, "Use safe image"); - rb->lcd_puts(0, 4, "if booting hangs:"); - rb->lcd_puts(0, 5, "F1 during power-on"); - } - rb->lcd_puts(0, 7, "Any key to exit"); - rb->lcd_update(); - WaitForButton(); -} - -#else /* #ifdef HAVE_LCD_BITMAP */ - -/* Player version */ -static void DoUserDialog(char* filename) -{ - tImageHeader ImageHeader; - tFlashInfo FlashInfo; - static char buf[MAX_PATH]; - int button; - int rc; /* generic return code */ - UINT32 space, aligned_size, true_size; - UINT8* pos; - size_t memleft; - unsigned bl_version; - - /* this can only work if Rockbox runs in DRAM, not flash ROM */ - if ((UINT8*)rb >= FB && (UINT8*)rb < FB + 4096*1024) /* 4 MB max */ - { /* we're running from flash */ - rb->splash(HZ*3, "Not from ROM"); - return; /* exit */ - } - - /* refuse to work if the power may fail meanwhile */ - if (!rb->battery_level_safe()) - { - rb->splash(HZ*3, "Batt. too low!"); - return; /* exit */ - } - - /* "allocate" memory */ - sector = rb->plugin_get_buffer(&memleft); - if (memleft < SECTORSIZE) /* need buffer for a flash sector */ - { - rb->splash(HZ*3, "Out of memory"); - return; /* exit */ - } - - pos = (void*)GetSecondImage(); - rc = GetFlashInfo(&FlashInfo); - - if (FlashInfo.size == 0) /* no valid chip */ - { - rb->splash(HZ*3, "Not flashable"); - return; /* exit */ - } - else if (pos == 0) - { - rb->splash(HZ*3, "No image"); - return; /* exit */ - } - - bl_version = BootloaderVersion(); - if (bl_version < LATEST_BOOTLOADER_VERSION) - { - rb->lcd_puts_scroll(0, 0, "Hint: You're not using the latest bootloader. A full reflash is recommended, but not required."); - rb->lcd_puts_scroll(0, 1, "Press [Menu] to ignore"); - rb->lcd_update(); - - if (WaitForButton() != BUTTON_MENU) - { - return; - } - rb->lcd_clear_display(); - } - - rb->lcd_puts(0, 0, "Checking..."); - rb->lcd_update(); - - space = FlashInfo.size - (pos-FB + sizeof(ImageHeader)); - /* size minus start */ - - rc = CheckImageFile(filename, space, &ImageHeader, pos); - rb->lcd_puts(0, 0, "Checked:"); - switch (rc) { - case eOK: - rb->lcd_puts(0, 1, "File OK."); - rb->sleep(HZ*1); - break; - case eNotUCL: - rb->lcd_puts_scroll(0, 1, "File not UCL compressed."); - break; - case eWrongAlgorithm: - rb->lcd_puts_scroll(0, 1, "Wrong compression algorithm."); - break; - case eFileNotFound: - rb->lcd_puts_scroll(0, 1, "File not found."); - break; - case eTooBig: - if (bl_version < LATEST_BOOTLOADER_VERSION) - { - rb->lcd_puts_scroll(0, 1, "File too big, upgrade bootloader."); - } - else - { - rb->lcd_puts_scroll(0, 1, "File too big."); - } - break; - case eTooSmall: - rb->lcd_puts_scroll(0, 1, "File too small. Incomplete?"); - break; - case eReadErr: - rb->lcd_puts_scroll(0, 1, "File read error."); - break; - case eMultiBlocks: - rb->lcd_puts_scroll(0, 1, "File invalid. Blocksize too small?"); - break; - case eBadRomLink: - rb->lcd_puts_scroll(0, 1, "Bootloader not compatible with RomBox."); - break; - default: - rb->lcd_puts_scroll(0, 1, "Check failed."); - break; - } - rb->lcd_update(); - - if (rc == eOK) - { /* was OK */ - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "[ON] to program,"); - rb->lcd_puts_scroll(0, 1, "other key to exit."); - } - else - { /* error occured */ - WaitForButton(); - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Flash failed."); - rb->lcd_puts_scroll(0, 1, "Any key to exit."); - } - rb->lcd_update(); - - button = WaitForButton(); - if (rc != eOK || button != BUTTON_ON) - { - return; - } - - true_size = ImageHeader.size; - aligned_size = ((sizeof(tImageHeader) + true_size + SECTORSIZE-1) & - ~(SECTORSIZE-1)) - sizeof(tImageHeader); /* round up to - next flash - sector */ - ImageHeader.size = aligned_size; /* increase image size such that we reach - the next sector */ - - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Programming..."); - rb->lcd_update(); - - rc = ProgramImageFile(filename, pos, &ImageHeader, UCL_HEADER, true_size); - if (rc) - { /* errors */ - rb->lcd_clear_display(); - rb->snprintf(buf, sizeof(buf), "%d errors", rc); - rb->lcd_puts_scroll(0, 0, "Programming failed!"); - rb->lcd_puts_scroll(0, 1, buf); - rb->lcd_update(); - button = WaitForButton(); - } - - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Verifying..."); - rb->lcd_update(); - - rc = VerifyImageFile(filename, pos, &ImageHeader, UCL_HEADER, true_size); - - rb->lcd_clear_display(); - if (rc == 0) - { - rb->lcd_puts(0, 0, "Verify OK."); - rb->lcd_update(); - } - else - { - rb->snprintf(buf, sizeof(buf), "Verify fail! %d errors", rc); - rb->lcd_puts_scroll(0, 0, buf); - rb->lcd_puts_scroll(0, 1, "Use safe image if booting hangs: [-] during power-on"); - rb->lcd_update(); - button = WaitForButton(); - } -} - -#endif /* not HAVE_LCD_BITMAP */ - - - -/***************** Plugin Entry Point *****************/ - -enum plugin_status plugin_start(const void* parameter) -{ - int oldmode; - - if (parameter == NULL) - { - rb->splash(HZ*3, "Play .ucl file!"); - return PLUGIN_OK; - } - - /* now go ahead and have fun! */ - oldmode = rb->system_memory_guard(MEMGUARD_NONE); /*disable memory guard */ - DoUserDialog((char*) parameter); - rb->system_memory_guard(oldmode); /* re-enable memory guard */ - - return PLUGIN_OK; -} diff --git a/apps/plugins/rockboy/lcd.c b/apps/plugins/rockboy/lcd.c index e8d43f772a..143b8fdfa8 100644 --- a/apps/plugins/rockboy/lcd.c +++ b/apps/plugins/rockboy/lcd.c @@ -69,7 +69,7 @@ static void updatepatpix(void) ICODE_ATTR; static void updatepatpix(void) { int i, j; -#if ((CONFIG_CPU != SH7034) && !defined(CPU_COLDFIRE)) +#if !defined(CPU_COLDFIRE) int k, a, c; #endif byte *vram = lcd.vbank[0]; @@ -83,76 +83,7 @@ static void updatepatpix(void) patdirty[i] = 0; for (j = 0; j < 8; j++) { -#if CONFIG_CPU == SH7034 - asm volatile ( - "mov.w @%2,r1 \n" - "swap.b r1,r2 \n" - - "mov #0,r0 \n" - "shlr r1 \n" - "rotcl r0 \n" - "shlr r2 \n" - "rotcl r0 \n" - "mov.b r0,@%0 \n" - "mov.b r0,@(7,%1) \n" - "mov #0,r0 \n" - "shlr r1 \n" - "rotcl r0 \n" - "shlr r2 \n" - "rotcl r0 \n" - "mov.b r0,@(1,%0) \n" - "mov.b r0,@(6,%1) \n" - "mov #0,r0 \n" - "shlr r1 \n" - "rotcl r0 \n" - "shlr r2 \n" - "rotcl r0 \n" - "mov.b r0,@(2,%0) \n" - "mov.b r0,@(5,%1) \n" - "mov #0,r0 \n" - "shlr r1 \n" - "rotcl r0 \n" - "shlr r2 \n" - "rotcl r0 \n" - "mov.b r0,@(3,%0) \n" - "mov.b r0,@(4,%1) \n" - "mov #0,r0 \n" - "shlr r1 \n" - "rotcl r0 \n" - "shlr r2 \n" - "rotcl r0 \n" - "mov.b r0,@(4,%0) \n" - "mov.b r0,@(3,%1) \n" - "mov #0,r0 \n" - "shlr r1 \n" - "rotcl r0 \n" - "shlr r2 \n" - "rotcl r0 \n" - "mov.b r0,@(5,%0) \n" - "mov.b r0,@(2,%1) \n" - "mov #0,r0 \n" - "shlr r1 \n" - "rotcl r0 \n" - "shlr r2 \n" - "rotcl r0 \n" - "mov.b r0,@(6,%0) \n" - "mov.b r0,@(1,%1) \n" - "mov #0,r0 \n" - "shlr r1 \n" - "rotcl r0 \n" - "shlr r2 \n" - "rotcl r0 \n" - "mov.b r0,@(7,%0) \n" - "mov.b r0,@%1 \n" - : /* outputs */ - : /* inputs */ - /* %0 */ "r"(patpix[i+1024][j]), - /* %1 */ "r"(patpix[i][j]), - /* %2 */ "r"(&vram[(i<<4)|(j<<1)]) - : /* clobbers */ - "r0", "r1", "r2" - ); -#elif defined(CPU_COLDFIRE) +#if defined(CPU_COLDFIRE) asm volatile ( "move.b (%2),%%d2 \n" "move.b (1,%2),%%d1 \n" @@ -229,85 +160,7 @@ static void updatepatpix(void) patpix[i+1024][j][7-k]; #endif } -#if CONFIG_CPU == SH7034 - asm volatile ( - "mov.l @%0,r0 \n" - "mov.l @(4,%0),r1 \n" - "mov.l r0,@(56,%1) \n" - "mov.l r1,@(60,%1) \n" - "mov.l @(8,%0),r0 \n" - "mov.l @(12,%0),r1 \n" - "mov.l r0,@(48,%1) \n" - "mov.l r1,@(52,%1) \n" - "mov.l @(16,%0),r0 \n" - "mov.l @(20,%0),r1 \n" - "mov.l r0,@(40,%1) \n" - "mov.l r1,@(44,%1) \n" - "mov.l @(24,%0),r0 \n" - "mov.l @(28,%0),r1 \n" - "mov.l r0,@(32,%1) \n" - "mov.l r1,@(36,%1) \n" - "mov.l @(32,%0),r0 \n" - "mov.l @(36,%0),r1 \n" - "mov.l r0,@(24,%1) \n" - "mov.l r1,@(28,%1) \n" - "mov.l @(40,%0),r0 \n" - "mov.l @(44,%0),r1 \n" - "mov.l r0,@(16,%1) \n" - "mov.l r1,@(20,%1) \n" - "mov.l @(48,%0),r0 \n" - "mov.l @(52,%0),r1 \n" - "mov.l r0,@(8,%1) \n" - "mov.l r1,@(12,%1) \n" - "mov.l @(56,%0),r0 \n" - "mov.l @(60,%0),r1 \n" - "mov.l r0,@%1 \n" - "mov.l r1,@(4,%1) \n" - - "add %2,%0 \n" - "add %2,%1 \n" - - "mov.l @%0,r0 \n" - "mov.l @(4,%0),r1 \n" - "mov.l r0,@(56,%1) \n" - "mov.l r1,@(60,%1) \n" - "mov.l @(8,%0),r0 \n" - "mov.l @(12,%0),r1 \n" - "mov.l r0,@(48,%1) \n" - "mov.l r1,@(52,%1) \n" - "mov.l @(16,%0),r0 \n" - "mov.l @(20,%0),r1 \n" - "mov.l r0,@(40,%1) \n" - "mov.l r1,@(44,%1) \n" - "mov.l @(24,%0),r0 \n" - "mov.l @(28,%0),r1 \n" - "mov.l r0,@(32,%1) \n" - "mov.l r1,@(36,%1) \n" - "mov.l @(32,%0),r0 \n" - "mov.l @(36,%0),r1 \n" - "mov.l r0,@(24,%1) \n" - "mov.l r1,@(28,%1) \n" - "mov.l @(40,%0),r0 \n" - "mov.l @(44,%0),r1 \n" - "mov.l r0,@(16,%1) \n" - "mov.l r1,@(20,%1) \n" - "mov.l @(48,%0),r0 \n" - "mov.l @(52,%0),r1 \n" - "mov.l r0,@(8,%1) \n" - "mov.l r1,@(12,%1) \n" - "mov.l @(56,%0),r0 \n" - "mov.l @(60,%0),r1 \n" - "mov.l r0,@%1 \n" - "mov.l r1,@(4,%1) \n" - : /* outputs */ - : /* inputs */ - /* %0 */ "r"(patpix[i][0]), - /* %1 */ "r"(patpix[i+2048][0]), - /* %2 */ "r"(1024*64) - : /* clobbers */ - "r0", "r1" - ); -#elif defined(CPU_COLDFIRE) +#if defined(CPU_COLDFIRE) asm volatile ( "movem.l (%0),%%d0-%%d3 \n" "move.l %%d0,%%d4 \n" diff --git a/apps/plugins/rockboy/rockboy.c b/apps/plugins/rockboy/rockboy.c index f188dc1e24..57f0c95ea6 100644 --- a/apps/plugins/rockboy/rockboy.c +++ b/apps/plugins/rockboy/rockboy.c @@ -110,16 +110,6 @@ static void setoptions (void) options.SELECT = BUTTON_SELECT; options.MENU = BUTTON_OFF; -#elif CONFIG_KEYPAD == RECORDER_PAD - options.UP = BUTTON_UP; - options.DOWN = BUTTON_DOWN; - - options.A = BUTTON_F1; - options.B = BUTTON_F2; - options.START = BUTTON_F3; - options.SELECT = BUTTON_PLAY; - options.MENU = BUTTON_OFF; - #elif CONFIG_KEYPAD == IPOD_4G_PAD options.UP = BUTTON_MENU; options.DOWN = BUTTON_PLAY; diff --git a/apps/plugins/rockboy/sys_rockbox.c b/apps/plugins/rockboy/sys_rockbox.c index 3a1f3c6760..e27cbbe3e7 100644 --- a/apps/plugins/rockboy/sys_rockbox.c +++ b/apps/plugins/rockboy/sys_rockbox.c @@ -91,9 +91,6 @@ void ev_poll(void) if (rb->button_hold()&~holdbutton) fb.mode=(fb.mode+1)%4; holdbutton=rb->button_hold(); -#elif CONFIG_KEYPAD == RECORDER_PAD - if (pressed & BUTTON_ON) - fb.mode=(fb.mode+1)%4; #endif #ifdef HAVE_WHEEL_POSITION @@ -220,12 +217,10 @@ void ev_poll(void) #else if(pressed & options.MENU) { #endif -#if (CONFIG_KEYPAD != RECORDER_PAD) #ifdef HAVE_WHEEL_POSITION rb->wheel_send_events(true); #endif if (do_user_menu() == USER_MENU_QUIT) -#endif { die(""); cleanshut=1; @@ -300,54 +295,6 @@ void vid_update(int scanline) balance += LCD_WIDTH; if (balance > 0) { -#if (CONFIG_CPU == SH7034) && !defined(SIMULATOR) - asm volatile ( - "mov.b @%0,r0 \n" - "add %1,%0 \n" - "tst #0x02, r0 \n" /* ~bit 1 */ - "rotcr r1 \n" - "mov.b @%0,r0 \n" - "add %1,%0 \n" - "tst #0x02, r0 \n" /* ~bit 1 */ - "rotcr r1 \n" - "mov.b @%0,r0 \n" - "add %1,%0 \n" - "tst #0x02, r0 \n" /* ~bit 1 */ - "rotcr r1 \n" - "mov.b @%0,r0 \n" - "add %1,%0 \n" - "tst #0x02, r0 \n" /* ~bit 1 */ - "rotcr r1 \n" - "mov.b @%0,r0 \n" - "add %1,%0 \n" - "tst #0x02, r0 \n" /* ~bit 1 */ - "rotcr r1 \n" - "mov.b @%0,r0 \n" - "add %1,%0 \n" - "tst #0x02, r0 \n" /* ~bit 1 */ - "rotcr r1 \n" - "mov.b @%0,r0 \n" - "add %1,%0 \n" - "tst #0x02, r0 \n" /* ~bit 1 */ - "rotcr r1 \n" - "mov.b @%0,r0 \n" - "add %1,%0 \n" - "tst #0x02, r0 \n" /* ~bit 1 */ - "rotcr r1 \n" - - "shlr16 r1 \n" - "shlr8 r1 \n" - "not r1,r1 \n" /* account for negated bits */ - "mov.b r1,@%2 \n" - : /* outputs */ - : /* inputs */ - /* %0 */ "r"(scan.buf[0] + cnt), - /* %1 */ "r"(256), /* scan.buf line length */ - /* %2 */ "r"(frameb++) - : /* clobbers */ - "r0", "r1" - ); -#else register unsigned scrbyte = 0; if (scan.buf[0][cnt] & 0x02) scrbyte |= 0x01; if (scan.buf[1][cnt] & 0x02) scrbyte |= 0x02; @@ -358,7 +305,6 @@ void vid_update(int scanline) if (scan.buf[6][cnt] & 0x02) scrbyte |= 0x40; if (scan.buf[7][cnt] & 0x02) scrbyte |= 0x80; *(frameb++) = scrbyte; -#endif balance -= 160; } cnt ++; diff --git a/apps/plugins/sliding_puzzle.c b/apps/plugins/sliding_puzzle.c index ad856b8ab2..1a77eda721 100644 --- a/apps/plugins/sliding_puzzle.c +++ b/apps/plugins/sliding_puzzle.c @@ -21,26 +21,7 @@ #include "plugin.h" /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define PUZZLE_QUIT BUTTON_OFF -#define PUZZLE_LEFT BUTTON_LEFT -#define PUZZLE_RIGHT BUTTON_RIGHT -#define PUZZLE_UP BUTTON_UP -#define PUZZLE_DOWN BUTTON_DOWN -#define PUZZLE_SHUFFLE BUTTON_F1 -#define PUZZLE_PICTURE BUTTON_F2 - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define PUZZLE_QUIT BUTTON_OFF -#define PUZZLE_LEFT BUTTON_LEFT -#define PUZZLE_RIGHT BUTTON_RIGHT -#define PUZZLE_UP BUTTON_UP -#define PUZZLE_DOWN BUTTON_DOWN -#define PUZZLE_SHUFFLE_PICTURE_PRE BUTTON_MENU -#define PUZZLE_SHUFFLE (BUTTON_MENU | BUTTON_REPEAT) -#define PUZZLE_PICTURE (BUTTON_MENU | BUTTON_REL) - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define PUZZLE_QUIT BUTTON_OFF #define PUZZLE_LEFT BUTTON_LEFT @@ -853,15 +834,7 @@ enum plugin_status plugin_start( /* print instructions */ rb->lcd_clear_display(); rb->lcd_setfont(FONT_SYSFIXED); -#if CONFIG_KEYPAD == RECORDER_PAD - rb->lcd_putsxy(3, 18, "[OFF] to stop"); - rb->lcd_putsxy(3, 28, "[F1] shuffle"); - rb->lcd_putsxy(3, 38, "[F2] change pic"); -#elif CONFIG_KEYPAD == ONDIO_PAD - rb->lcd_putsxy(0, 18, "[OFF] to stop"); - rb->lcd_putsxy(0, 28, "[MODE..] shuffle"); - rb->lcd_putsxy(0, 38, "[MODE] change pic"); -#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ +#if (CONFIG_KEYPAD == IPOD_4G_PAD) || \ (CONFIG_KEYPAD == IPOD_3G_PAD) || \ (CONFIG_KEYPAD == IPOD_1G2G_PAD) rb->lcd_putsxy(0, 18, "[S-MENU] to stop"); diff --git a/apps/plugins/snake.c b/apps/plugins/snake.c index f60ddfe3de..4471cd12a6 100644 --- a/apps/plugins/snake.c +++ b/apps/plugins/snake.c @@ -41,24 +41,8 @@ dir is the current direction of the snake - 0=up, 1=right, 2=down, 3=left; /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define SNAKE_QUIT BUTTON_OFF -#define SNAKE_LEFT BUTTON_LEFT -#define SNAKE_RIGHT BUTTON_RIGHT -#define SNAKE_UP BUTTON_UP -#define SNAKE_DOWN BUTTON_DOWN -#define SNAKE_PLAYPAUSE BUTTON_PLAY - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define SNAKE_QUIT BUTTON_OFF -#define SNAKE_LEFT BUTTON_LEFT -#define SNAKE_RIGHT BUTTON_RIGHT -#define SNAKE_UP BUTTON_UP -#define SNAKE_DOWN BUTTON_DOWN -#define SNAKE_PLAYPAUSE BUTTON_MENU - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define SNAKE_QUIT BUTTON_OFF #define SNAKE_LEFT BUTTON_LEFT #define SNAKE_RIGHT BUTTON_RIGHT diff --git a/apps/plugins/snake2.c b/apps/plugins/snake2.c index dcb5b72633..bfff0bf870 100644 --- a/apps/plugins/snake2.c +++ b/apps/plugins/snake2.c @@ -150,26 +150,8 @@ Head and Tail are stored #endif /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define SNAKE2_LEFT BUTTON_LEFT -#define SNAKE2_RIGHT BUTTON_RIGHT -#define SNAKE2_UP BUTTON_UP -#define SNAKE2_DOWN BUTTON_DOWN -#define SNAKE2_QUIT BUTTON_OFF -#define SNAKE2_PLAYPAUSE BUTTON_PLAY -#define SNAKE2_PLAYPAUSE_TEXT "Play" - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define SNAKE2_LEFT BUTTON_LEFT -#define SNAKE2_RIGHT BUTTON_RIGHT -#define SNAKE2_UP BUTTON_UP -#define SNAKE2_DOWN BUTTON_DOWN -#define SNAKE2_QUIT BUTTON_OFF -#define SNAKE2_PLAYPAUSE BUTTON_MENU -#define SNAKE2_PLAYPAUSE_TEXT "Menu" - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define SNAKE2_LEFT BUTTON_LEFT #define SNAKE2_RIGHT BUTTON_RIGHT #define SNAKE2_UP BUTTON_UP diff --git a/apps/plugins/sokoban.c b/apps/plugins/sokoban.c index 62812e0237..3cc1555e83 100644 --- a/apps/plugins/sokoban.c +++ b/apps/plugins/sokoban.c @@ -64,11 +64,7 @@ #endif /* size of code+bss */ -#if CONFIG_CPU == SH7034 -#define CODE_SIZE 0x3000 /* 12k */ -#else #define CODE_SIZE 0x5000 /* 20k */ -#endif #define CODE_AND_UNDO_SIZE (CODE_SIZE+0x1000) /* + 4k */ @@ -104,39 +100,8 @@ #define SOKOBAN_MOVE_MIN SOKOBAN_MOVE_DOWN /* variable button definitions */ -#if (CONFIG_KEYPAD == RECORDER_PAD) -#define SOKOBAN_LEFT BUTTON_LEFT -#define SOKOBAN_RIGHT BUTTON_RIGHT -#define SOKOBAN_UP BUTTON_UP -#define SOKOBAN_DOWN BUTTON_DOWN -#define SOKOBAN_MENU BUTTON_OFF -#define SOKOBAN_UNDO BUTTON_ON -#define SOKOBAN_REDO BUTTON_PLAY -#define SOKOBAN_LEVEL_DOWN BUTTON_F1 -#define SOKOBAN_LEVEL_REPEAT BUTTON_F2 -#define SOKOBAN_LEVEL_UP BUTTON_F3 -#define SOKOBAN_PAUSE BUTTON_PLAY -#define BUTTON_SAVE BUTTON_ON -#define BUTTON_SAVE_NAME "ON" - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define SOKOBAN_LEFT BUTTON_LEFT -#define SOKOBAN_RIGHT BUTTON_RIGHT -#define SOKOBAN_UP BUTTON_UP -#define SOKOBAN_DOWN BUTTON_DOWN -#define SOKOBAN_MENU BUTTON_OFF -#define SOKOBAN_UNDO_PRE BUTTON_MENU -#define SOKOBAN_UNDO (BUTTON_MENU | BUTTON_REL) -#define SOKOBAN_REDO (BUTTON_MENU | BUTTON_DOWN) -#define SOKOBAN_LEVEL_DOWN (BUTTON_MENU | BUTTON_LEFT) -#define SOKOBAN_LEVEL_REPEAT (BUTTON_MENU | BUTTON_UP) -#define SOKOBAN_LEVEL_UP (BUTTON_MENU | BUTTON_RIGHT) -#define SOKOBAN_PAUSE BUTTON_MENU -#define BUTTON_SAVE BUTTON_MENU -#define BUTTON_SAVE_NAME "MENU" - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define SOKOBAN_LEFT BUTTON_LEFT #define SOKOBAN_RIGHT BUTTON_RIGHT #define SOKOBAN_UP BUTTON_UP @@ -1642,22 +1607,8 @@ static int sokoban_menu(void) rb->screens[i]->clear_display(); rb->lcd_setfont(SOKOBAN_FONT); -#if (CONFIG_KEYPAD == RECORDER_PAD) - rb->lcd_putsxy(3, 6, "[OFF] Menu"); - rb->lcd_putsxy(3, 16, "[ON] Undo"); - rb->lcd_putsxy(3, 26, "[PLAY] Redo"); - rb->lcd_putsxy(3, 36, "[F1] Down a Level"); - rb->lcd_putsxy(3, 46, "[F2] Restart Level"); - rb->lcd_putsxy(3, 56, "[F3] Up a Level"); -#elif CONFIG_KEYPAD == ONDIO_PAD - rb->lcd_putsxy(3, 6, "[OFF] Menu"); - rb->lcd_putsxy(3, 16, "[MODE] Undo"); - rb->lcd_putsxy(3, 26, "[MODE+DOWN] Redo"); - rb->lcd_putsxy(3, 36, "[MODE+LEFT] Previous Level"); - rb->lcd_putsxy(3, 46, "[MODE+UP] Restart Level"); - rb->lcd_putsxy(3, 56, "[MODE+RIGHT] Up Level"); -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) rb->lcd_putsxy(3, 6, "[STOP] Menu"); rb->lcd_putsxy(3, 16, "[REC] Undo"); rb->lcd_putsxy(3, 26, "[MODE] Redo"); diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c index b830edf857..a7844fba92 100644 --- a/apps/plugins/solitaire.c +++ b/apps/plugins/solitaire.c @@ -32,51 +32,8 @@ * Key definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -# define SOL_QUIT BUTTON_OFF -# define SOL_UP BUTTON_UP -# define SOL_DOWN BUTTON_DOWN -# define SOL_LEFT BUTTON_LEFT -# define SOL_RIGHT BUTTON_RIGHT -# define SOL_MOVE BUTTON_ON -# define SOL_DRAW BUTTON_F1 -# define SOL_REM2CUR BUTTON_PLAY -# define SOL_CUR2STACK BUTTON_F2 -# define SOL_REM2STACK BUTTON_F3 -# define HK_MOVE "ON" -# define HK_DRAW "F1" -# define HK_REM2CUR "PLAY" -# define HK_CUR2STACK "F2" -# define HK_REM2STACK "F3" - -#elif CONFIG_KEYPAD == ONDIO_PAD -# define SOL_QUIT BUTTON_OFF -# define SOL_UP_PRE BUTTON_UP -# define SOL_UP (BUTTON_UP | BUTTON_REL) -# define SOL_DOWN_PRE BUTTON_DOWN -# define SOL_DOWN (BUTTON_DOWN | BUTTON_REL) -# define SOL_LEFT_PRE BUTTON_LEFT -# define SOL_LEFT (BUTTON_LEFT | BUTTON_REL) -# define SOL_RIGHT_PRE BUTTON_RIGHT -# define SOL_RIGHT (BUTTON_RIGHT | BUTTON_REL) -# define SOL_MOVE_PRE BUTTON_MENU -# define SOL_MOVE (BUTTON_MENU | BUTTON_REL) -# define SOL_DRAW_PRE BUTTON_MENU -# define SOL_DRAW (BUTTON_MENU | BUTTON_REPEAT) -# define SOL_REM2CUR_PRE BUTTON_DOWN -# define SOL_REM2CUR (BUTTON_DOWN | BUTTON_REPEAT) -# define SOL_CUR2STACK_PRE BUTTON_UP -# define SOL_CUR2STACK (BUTTON_UP | BUTTON_REPEAT) -# define SOL_REM2STACK_PRE BUTTON_RIGHT -# define SOL_REM2STACK (BUTTON_RIGHT | BUTTON_REPEAT) -# define HK_MOVE "MODE" -# define HK_DRAW "MODE.." -# define HK_REM2CUR "DOWN.." -# define HK_CUR2STACK "UP.." -# define HK_REM2STACK "RIGHT.." - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) # define SOL_QUIT BUTTON_OFF # define SOL_UP BUTTON_UP # define SOL_DOWN BUTTON_DOWN diff --git a/apps/plugins/spacerocks.c b/apps/plugins/spacerocks.c index ede67291b0..268c55ad35 100644 --- a/apps/plugins/spacerocks.c +++ b/apps/plugins/spacerocks.c @@ -28,26 +28,8 @@ /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define AST_PAUSE BUTTON_ON -#define AST_QUIT BUTTON_OFF -#define AST_THRUST BUTTON_UP -#define AST_HYPERSPACE BUTTON_DOWN -#define AST_LEFT BUTTON_LEFT -#define AST_RIGHT BUTTON_RIGHT -#define AST_FIRE BUTTON_PLAY - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define AST_PAUSE (BUTTON_MENU | BUTTON_OFF) -#define AST_QUIT BUTTON_OFF -#define AST_THRUST BUTTON_UP -#define AST_HYPERSPACE BUTTON_DOWN -#define AST_LEFT BUTTON_LEFT -#define AST_RIGHT BUTTON_RIGHT -#define AST_FIRE BUTTON_MENU - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define AST_PAUSE BUTTON_REC #define AST_QUIT BUTTON_OFF #define AST_THRUST BUTTON_UP diff --git a/apps/plugins/splitedit.c b/apps/plugins/splitedit.c index 539fc85011..b698e2e18a 100644 --- a/apps/plugins/splitedit.c +++ b/apps/plugins/splitedit.c @@ -24,27 +24,7 @@ /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define SPLITEDIT_QUIT BUTTON_OFF -#define SPLITEDIT_PLAY BUTTON_PLAY -#define SPLITEDIT_SAVE BUTTON_F1 -#define SPLITEDIT_LOOP_MODE BUTTON_F2 -#define SPLITEDIT_SCALE BUTTON_F3 -#define SPLITEDIT_SPEED50 (BUTTON_ON | BUTTON_LEFT) -#define SPLITEDIT_SPEED100 (BUTTON_ON | BUTTON_PLAY) -#define SPLITEDIT_SPEED150 (BUTTON_ON | BUTTON_RIGHT) -#define SPLITEDIT_MENU_RUN BUTTON_PLAY - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define SPLITEDIT_QUIT BUTTON_OFF -#define SPLITEDIT_PLAY_PRE BUTTON_MENU -#define SPLITEDIT_PLAY (BUTTON_MENU | BUTTON_REL) -#define SPLITEDIT_SAVE (BUTTON_MENU | BUTTON_LEFT) -#define SPLITEDIT_LOOP_MODE (BUTTON_MENU | BUTTON_UP) -#define SPLITEDIT_SCALE (BUTTON_MENU | BUTTON_RIGHT) -#define SPLITEDIT_MENU_RUN BUTTON_RIGHT - -#elif CONFIG_KEYPAD == IRIVER_H100_PAD +#if CONFIG_KEYPAD == IRIVER_H100_PAD #define SPLITEDIT_QUIT BUTTON_OFF #define SPLITEDIT_PLAY BUTTON_ON #define SPLITEDIT_SAVE BUTTON_SELECT @@ -279,12 +259,6 @@ static void update_icons(void) LCD_WIDTH/3 + LCD_WIDTH/3 / 2 - BMPWIDTH/2, LCD_HEIGHT - BMPHEIGHT, BMPWIDTH, BMPHEIGHT); -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - /* The scale icon */ - rb->lcd_mono_bitmap(SCALE_BMP[rb->peak_meter_get_use_dbfs() ? 1 : 0], - 2 *LCD_WIDTH/3 + LCD_WIDTH/3 / 2 - BMPWIDTH/2, LCD_HEIGHT - BMPHEIGHT, - BMPWIDTH, BMPHEIGHT); -#else { static int idx; if (idx < 0 || idx > 1) idx = 0; @@ -293,7 +267,6 @@ static void update_icons(void) 2 *LCD_WIDTH/3 + LCD_WIDTH/3 / 2 - BMPWIDTH/2, LCD_HEIGHT - BMPHEIGHT, BMPWIDTH, BMPHEIGHT); } -#endif rb->lcd_update_rect(0, LCD_HEIGHT - BMPHEIGHT, LCD_WIDTH, BMPHEIGHT); } @@ -961,14 +934,7 @@ static unsigned long splitedit_editor(struct mp3entry * mp3_to_split, { /* read volume info */ unsigned short volume; -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - volume = rb->mas_codec_readreg(0x0c); - volume += rb->mas_codec_readreg(0x0d); - volume = volume / 2; - volume = rb->peak_meter_scale_value(volume, OSCI_HEIGHT); -#else volume = OSCI_HEIGHT / 2; -#endif /* update osci_buffer */ if (osci_valid || lastx == x) @@ -1126,25 +1092,6 @@ static unsigned long splitedit_editor(struct mp3entry * mp3_to_split, lastx = time_to_xpos(mp3->elapsed); break; -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -#ifdef SPLITEDIT_SPEED100 - case SPLITEDIT_SPEED150: - rb->sound_set_pitch(150L*PITCH_SPEED_PRECISION); - splitedit_invalidate_osci(); - break; - - case SPLITEDIT_SPEED100: - rb->sound_set_pitch(PITCH_SPEED_100); - splitedit_invalidate_osci(); - break; - - case SPLITEDIT_SPEED50: - rb->sound_set_pitch(50L*PITCH_SPEED_PRECISION); - splitedit_invalidate_osci(); - break; -#endif -#endif - case BUTTON_LEFT: case BUTTON_LEFT | BUTTON_REPEAT: if (splitedit_get_split_x() > OSCI_X + 2) @@ -1185,9 +1132,6 @@ static unsigned long splitedit_editor(struct mp3entry * mp3_to_split, break; case SPLITEDIT_SCALE: -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - rb->peak_meter_set_use_dbfs(!rb->peak_meter_get_use_dbfs()); -#endif splitedit_invalidate_osci(); update_icons(); break; @@ -1257,12 +1201,6 @@ static unsigned long splitedit_editor(struct mp3entry * mp3_to_split, } } } -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -#ifdef SPLITEDIT_SPEED100 - rb->sound_set_pitch(1000); /* make sure to reset pitch */ -#endif -#endif - } return retval; } diff --git a/apps/plugins/star.c b/apps/plugins/star.c index 5814cc8cab..ea1d5b8bf8 100644 --- a/apps/plugins/star.c +++ b/apps/plugins/star.c @@ -57,42 +57,8 @@ #define STAR_CONTROL_BLOCK 1 /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define STAR_QUIT BUTTON_OFF -#define STAR_LEFT BUTTON_LEFT -#define STAR_RIGHT BUTTON_RIGHT -#define STAR_UP BUTTON_UP -#define STAR_DOWN BUTTON_DOWN -#define STAR_TOGGLE_CONTROL BUTTON_ON -#define STAR_TOGGLE_CONTROL2 BUTTON_PLAY -#define STAR_LEVEL_UP BUTTON_F3 -#define STAR_LEVEL_DOWN BUTTON_F1 -#define STAR_LEVEL_REPEAT BUTTON_F2 -#define STAR_TOGGLE_CONTROL_NAME "ON" -#define STAR_QUIT_NAME "OFF" -#define STAR_LEVEL_UP_NAME "F3" -#define STAR_LEVEL_DOWN_NAME "F1" -#define STAR_LEVEL_REPEAT_NAME "F2" - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define STAR_QUIT BUTTON_OFF -#define STAR_LEFT BUTTON_LEFT -#define STAR_RIGHT BUTTON_RIGHT -#define STAR_UP BUTTON_UP -#define STAR_DOWN BUTTON_DOWN -#define STAR_TOGGLE_CONTROL_PRE BUTTON_MENU -#define STAR_TOGGLE_CONTROL (BUTTON_MENU | BUTTON_REL) -#define STAR_LEVEL_UP (BUTTON_MENU | BUTTON_RIGHT) -#define STAR_LEVEL_DOWN (BUTTON_MENU | BUTTON_LEFT) -#define STAR_LEVEL_REPEAT (BUTTON_MENU | BUTTON_UP) -#define STAR_TOGGLE_CONTROL_NAME "MODE" -#define STAR_QUIT_NAME "OFF" -#define STAR_LEVEL_UP_NAME "M >" -#define STAR_LEVEL_DOWN_NAME "M <" -#define STAR_LEVEL_REPEAT_NAME "M ^" - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define STAR_QUIT BUTTON_OFF #define STAR_LEFT BUTTON_LEFT #define STAR_RIGHT BUTTON_RIGHT diff --git a/apps/plugins/starfield.c b/apps/plugins/starfield.c index 30b01b2645..dff3c4b4d1 100644 --- a/apps/plugins/starfield.c +++ b/apps/plugins/starfield.c @@ -220,23 +220,17 @@ static int plugin_main(void) rb->sleep(1); rb->lcd_clear_display(); -#if ((CONFIG_CODEC == SWCODEC) || !defined(SIMULATOR) && \ - ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F))) - +#if (CONFIG_CODEC == SWCODEC) /* This will make the stars pulse to the music */ if(pulse){ /* Get the peaks. ( Borrowed from vu_meter ) */ -#if (CONFIG_CODEC == SWCODEC) static struct pcm_peaks peaks; rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, &peaks); #define left_peak peaks.left #define right_peak peaks.right -#else - int left_peak = rb->mas_codec_readreg(0xC); - int right_peak = rb->mas_codec_readreg(0xD); -#endif + /* Devide peak data by 4098 to bring the max value down from ~32k to 8 */ left_peak = left_peak/0x1000; @@ -261,8 +255,6 @@ static int plugin_main(void) starfield.z_move = avg_peak; } /* if pulse */ -#else - (void) avg_peak; #endif starfield_move_and_draw(&starfield); diff --git a/apps/plugins/stopwatch.c b/apps/plugins/stopwatch.c index bb778c9d24..c3fa3e15dd 100644 --- a/apps/plugins/stopwatch.c +++ b/apps/plugins/stopwatch.c @@ -35,31 +35,7 @@ #define STOPWATCH_FILE PLUGIN_APPS_DATA_DIR "/stopwatch.dat" /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define STOPWATCH_QUIT BUTTON_OFF -#define STOPWATCH_START_STOP BUTTON_PLAY -#define STOPWATCH_RESET_TIMER BUTTON_LEFT -#define STOPWATCH_LAP_TIMER BUTTON_ON -#define STOPWATCH_SCROLL_UP BUTTON_UP -#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define STOPWATCH_QUIT BUTTON_OFF -#define STOPWATCH_START_STOP BUTTON_RIGHT -#define STOPWATCH_RESET_TIMER BUTTON_LEFT -#define STOPWATCH_LAP_TIMER BUTTON_MENU -#define STOPWATCH_SCROLL_UP BUTTON_UP -#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN - -#elif CONFIG_KEYPAD == PLAYER_PAD -#define STOPWATCH_QUIT BUTTON_MENU -#define STOPWATCH_START_STOP BUTTON_PLAY -#define STOPWATCH_RESET_TIMER BUTTON_STOP -#define STOPWATCH_LAP_TIMER BUTTON_ON -#define STOPWATCH_SCROLL_UP BUTTON_RIGHT -#define STOPWATCH_SCROLL_DOWN BUTTON_LEFT - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define STOPWATCH_QUIT BUTTON_OFF #define STOPWATCH_START_STOP BUTTON_SELECT diff --git a/apps/plugins/sudoku/sudoku.h b/apps/plugins/sudoku/sudoku.h index 47000b8e25..d1eca7fcd4 100644 --- a/apps/plugins/sudoku/sudoku.h +++ b/apps/plugins/sudoku/sudoku.h @@ -27,31 +27,8 @@ #define GAME_FILE PLUGIN_GAMES_DIR "/sudoku.ss" /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define SUDOKU_BUTTON_QUIT BUTTON_OFF -#define SUDOKU_BUTTON_UP BUTTON_UP -#define SUDOKU_BUTTON_DOWN BUTTON_DOWN -#define SUDOKU_BUTTON_LEFT BUTTON_LEFT -#define SUDOKU_BUTTON_RIGHT BUTTON_RIGHT -#define SUDOKU_BUTTON_TOGGLE BUTTON_PLAY -#define SUDOKU_BUTTON_MENU BUTTON_F1 -#define SUDOKU_BUTTON_POSSIBLE BUTTON_F2 - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define SUDOKU_BUTTON_QUIT BUTTON_OFF -#define SUDOKU_BUTTON_UP BUTTON_UP -#define SUDOKU_BUTTON_DOWN BUTTON_DOWN -#define SUDOKU_BUTTON_LEFT BUTTON_LEFT -#define SUDOKU_BUTTON_RIGHT BUTTON_RIGHT -#define SUDOKU_BUTTON_ALTTOGGLE (BUTTON_MENU | BUTTON_DOWN) -#define SUDOKU_BUTTON_TOGGLE_PRE BUTTON_MENU -#define SUDOKU_BUTTON_TOGGLE (BUTTON_MENU | BUTTON_REL) -#define SUDOKU_BUTTON_MENU_PRE BUTTON_MENU -#define SUDOKU_BUTTON_MENU (BUTTON_MENU | BUTTON_REPEAT) -#define SUDOKU_BUTTON_POSSIBLE (BUTTON_MENU | BUTTON_LEFT) - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define SUDOKU_BUTTON_QUIT BUTTON_OFF #define SUDOKU_BUTTON_UP BUTTON_UP #define SUDOKU_BUTTON_DOWN BUTTON_DOWN diff --git a/apps/plugins/test_scanrate.c b/apps/plugins/test_scanrate.c index b558e765c3..52d3c267e6 100644 --- a/apps/plugins/test_scanrate.c +++ b/apps/plugins/test_scanrate.c @@ -44,11 +44,7 @@ static const struct button_mapping *plugin_contexts[] = { pla_main_ctx }; #endif /*HAVE_SCROLLWHEEL*/ /* Default refresh rates in 1/10 Hz */ -#if defined ARCHOS_RECORDER || defined ARCHOS_FMRECORDER \ - || defined ARCHOS_RECORDERV2 || defined ARCHOS_ONDIOFM \ - || defined ARCHOS_ONDIOSP -#define DEFAULT_SCAN_RATE 670 -#elif defined IAUDIO_M3 +#if defined IAUDIO_M3 #define DEFAULT_SCAN_RATE 1500 #define HORIZ_SCAN /* LCD controller updates the panel sideways */ #define NEED_BOOST diff --git a/apps/plugins/text_viewer/tv_button.h b/apps/plugins/text_viewer/tv_button.h index acf7519b69..4f7634e844 100644 --- a/apps/plugins/text_viewer/tv_button.h +++ b/apps/plugins/text_viewer/tv_button.h @@ -44,46 +44,8 @@ * TV_COLUMN_RIGHT one column right */ -/* Recorder keys */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define TV_QUIT BUTTON_OFF -#define TV_SCROLL_UP BUTTON_UP -#define TV_SCROLL_DOWN BUTTON_DOWN -#define TV_SCREEN_LEFT BUTTON_LEFT -#define TV_SCREEN_RIGHT BUTTON_RIGHT -#define TV_MENU BUTTON_F1 -#define TV_AUTOSCROLL BUTTON_PLAY -#define TV_LINE_UP (BUTTON_ON | BUTTON_UP) -#define TV_LINE_DOWN (BUTTON_ON | BUTTON_DOWN) -#define TV_COLUMN_LEFT (BUTTON_ON | BUTTON_LEFT) -#define TV_COLUMN_RIGHT (BUTTON_ON | BUTTON_RIGHT) -#define TV_BOOKMARK BUTTON_F2 - -/* Ondio keys */ -#elif CONFIG_KEYPAD == ONDIO_PAD -#define TV_QUIT BUTTON_OFF -#define TV_SCROLL_UP BUTTON_UP -#define TV_SCROLL_DOWN BUTTON_DOWN -#define TV_SCREEN_LEFT BUTTON_LEFT -#define TV_SCREEN_RIGHT BUTTON_RIGHT -#define TV_MENU (BUTTON_MENU|BUTTON_REPEAT) -#define TV_AUTOSCROLL_PRE BUTTON_MENU -#define TV_AUTOSCROLL (BUTTON_MENU|BUTTON_REL) -#define TV_BOOKMARK (BUTTON_MENU|BUTTON_OFF) - -/* Player keys */ -#elif CONFIG_KEYPAD == PLAYER_PAD -#define TV_QUIT BUTTON_STOP -#define TV_SCROLL_UP BUTTON_LEFT -#define TV_SCROLL_DOWN BUTTON_RIGHT -#define TV_SCREEN_LEFT (BUTTON_ON|BUTTON_LEFT) -#define TV_SCREEN_RIGHT (BUTTON_ON|BUTTON_RIGHT) -#define TV_MENU BUTTON_MENU -#define TV_AUTOSCROLL BUTTON_PLAY -#define TV_BOOKMARK BUTTON_ON - /* iRiver H1x0 && H3x0 keys */ -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define TV_QUIT BUTTON_OFF #define TV_RC_QUIT BUTTON_RC_STOP diff --git a/apps/plugins/video.c b/apps/plugins/video.c deleted file mode 100644 index 6a66324a79..0000000000 --- a/apps/plugins/video.c +++ /dev/null @@ -1,1030 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Plugin for video playback -* Reads raw image data + audio data from a file -* !!!!!!!!!! Code Police free zone !!!!!!!!!! -* -* Copyright (C) 2003-2004 J�g Hohensohn aka [IDC]Dragon -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 -* of the License, or (at your option) any later version. -* -* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -* KIND, either express or implied. -* -****************************************************************************/ - - -/****************** imports ******************/ - -#include "plugin.h" -#include "sh7034.h" -#include "system.h" -#include "lib/helper.h" - -#ifdef HAVE_LCD_BITMAP /* and definitely not for the Player, haha */ - - - -/* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define VIDEO_STOP_SEEK BUTTON_PLAY -#define VIDEO_RESUME BUTTON_PLAY -#define VIDEO_DEBUG BUTTON_F1 -#define VIDEO_CONTRAST_DOWN BUTTON_F2 -#define VIDEO_CONTRAST_UP BUTTON_F3 - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define VIDEO_STOP_SEEK_PRE BUTTON_MENU -#define VIDEO_STOP_SEEK (BUTTON_MENU | BUTTON_REL) -#define VIDEO_RESUME BUTTON_RIGHT -#define VIDEO_CONTRAST_DOWN (BUTTON_MENU | BUTTON_DOWN) -#define VIDEO_CONTRAST_UP (BUTTON_MENU | BUTTON_UP) - -#endif -/****************** constants ******************/ - -#define SCREENSIZE (LCD_WIDTH*LCD_HEIGHT/8) /* in bytes */ -#define FPS 68 /* default fps for headerless (old video-only) file */ -#define MAX_ACC 20 /* maximum FF/FR speedup */ -#define FF_TICKS 3000; /* experimentally found nice */ - -/* trigger levels, we need about 80 kB/sec */ -#define SPINUP_INIT 5000 /* from what level on to refill, in milliseconds */ -#define SPINUP_SAFETY 700 /* how much on top of the measured spinup time */ -#define CHUNK (1024*32) /* read size */ - - -/****************** prototypes ******************/ -static void timer4_isr(void); /* IMIA4 ISR */ -int check_button(void); /* determine next relative frame */ - - -/****************** data types ******************/ - -/* plugins don't introduce headers, so structs are repeated from rvf_format.h */ - -#define HEADER_MAGIC 0x52564668 /* "RVFh" at file start */ -#define AUDIO_MAGIC 0x41756446 /* "AudF" for each audio block */ -#define FILEVERSION 100 /* 1.00 */ - -/* format type definitions */ -#define VIDEOFORMAT_NO_VIDEO 0 -#define VIDEOFORMAT_RAW 1 -#define AUDIOFORMAT_NO_AUDIO 0 -#define AUDIOFORMAT_MP3 1 -#define AUDIOFORMAT_MP3_BITSWAPPED 2 - -/* bit flags */ -#define FLAG_LOOP 0x00000001 /* loop the playback, e.g. for stills */ - -typedef struct /* contains whatever might be useful to the player */ -{ - /* general info (16 entries = 64 byte) */ - unsigned long magic; /* HEADER_MAGIC */ - unsigned long version; /* file version */ - unsigned long flags; /* combination of FLAG_xx */ - unsigned long blocksize; /* how many bytes per block (=video frame) */ - unsigned long bps_average; /* bits per second of the whole stream */ - unsigned long bps_peak; /* max. of above (audio may be VBR) */ - unsigned long resume_pos; /* file position to resume to */ - unsigned long reserved[9]; /* reserved, should be zero */ - - /* video info (16 entries = 64 byte) */ - unsigned long video_format; /* one of VIDEOFORMAT_xxx */ - unsigned long video_1st_frame; /* byte position of first video frame */ - unsigned long video_duration; /* total length of video part, in ms */ - unsigned long video_payload_size; /* total amount of video data, in bytes */ - unsigned long video_bitrate; /* derived from resolution and frame time, in bps */ - unsigned long video_frametime; /* frame interval in 11.0592 MHz clocks */ - long video_preroll; /* video is how much ahead, in 11.0592 MHz clocks */ - unsigned long video_width; /* in pixels */ - unsigned long video_height; /* in pixels */ - unsigned long video_reserved[7]; /* reserved, should be zero */ - - /* audio info (16 entries = 64 byte) */ - unsigned long audio_format; /* one of AUDIOFORMAT_xxx */ - unsigned long audio_1st_frame; /* byte position of first video frame */ - unsigned long audio_duration; /* total length of audio part, in ms */ - unsigned long audio_payload_size; /* total amount of audio data, in bytes */ - unsigned long audio_avg_bitrate; /* average audio bitrate, in bits per second */ - unsigned long audio_peak_bitrate; /* maximum bitrate */ - unsigned long audio_headersize; /* offset to payload in audio frames */ - long audio_min_associated; /* minimum offset to video frame, in bytes */ - long audio_max_associated; /* maximum offset to video frame, in bytes */ - unsigned long audio_reserved[7]; /* reserved, should be zero */ - - /* more to come... ? */ - - /* Note: padding up to 'blocksize' with zero following this header */ -} tFileHeader; - -typedef struct /* the little header for all audio blocks */ -{ - unsigned long magic; /* AUDIO_MAGIC indicates an audio block */ - unsigned char previous_block; /* previous how many blocks backwards */ - unsigned char next_block; /* next how many blocks forward */ - short associated_video; /* offset to block with corresponding video */ - unsigned short frame_start; /* offset to first frame starting in this block */ - unsigned short frame_end; /* offset to behind last frame ending in this block */ -} tAudioFrameHeader; - - - -/****************** globals ******************/ - -static char gPrint[32]; /* a global printf buffer, saves stack */ - - -/* playstate */ -static struct -{ - enum - { - paused, - playing, - } state; - bool bAudioUnderrun; - bool bVideoUnderrun; - bool bHasAudio; - bool bHasVideo; - int nTimeOSD; /* OSD should stay for this many frames */ - bool bDirtyOSD; /* OSD needs redraw */ - bool bRefilling; /* set if refilling buffer */ - bool bSeeking; - int nSeekAcc; /* accelleration value for seek */ - int nSeekPos; /* current file position for seek */ - bool bDiskSleep; /* disk is suspended */ -#if FREQ == 12000000 /* Ondio speed kludge */ - int nFrameTimeAdjusted; -#endif -} gPlay; - -/* buffer information */ -static struct -{ - ssize_t bufsize; - int granularity; /* common multiple of block and sector size */ - unsigned char* pBufStart; /* start of ring buffer */ - unsigned char* pBufEnd; /* end of ring buffer */ - int osd_ypos; - int osd_height; - - int vidcount; /* how many video blocks are known in a row */ - unsigned char* pBufFill; /* write pointer for disk, owned by main task */ - unsigned char* pReadVideo; /* video readout, maintained by timer ISR */ - unsigned char* pReadAudio; /* audio readout, maintained by demand ISR */ - bool bEOF; /* flag for end of file */ - int low_water; /* reload threshold */ - int high_water; /* end of reload threshold */ - int spinup_safety; /* safety margin when recalculating low_water */ - int nReadChunk; /* how much data for normal buffer fill */ - int nSeekChunk; /* how much data while seeking */ -} gBuf; - -/* statistics */ -static struct -{ - int minAudioAvail; - int minVideoAvail; - int nAudioUnderruns; - int nVideoUnderruns; - long minSpinup; - long maxSpinup; -} gStats; - -tFileHeader gFileHdr; /* file header */ - -/****************** implementation ******************/ - -/* tool function: return how much playable audio/video is left */ -static int Available(unsigned char* pSnapshot) -{ - if (pSnapshot <= gBuf.pBufFill) - return gBuf.pBufFill - pSnapshot; - else - return gBuf.bufsize - (pSnapshot - gBuf.pBufFill); -} - -/* debug function to draw buffer indicators */ -#ifdef VIDEO_DEBUG -static void DrawBuf(void) -{ - int ypos, fill, video, audio; - - rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); - rb->lcd_fillrect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); - rb->lcd_set_drawmode(DRMODE_SOLID); - - ypos = gBuf.osd_ypos + gBuf.osd_height/2 - 3; /* center vertically */ - - rb->lcd_hline(1, LCD_WIDTH-2, ypos + 3); - rb->lcd_vline(0, ypos, ypos + 6); - rb->lcd_vline(LCD_WIDTH-1, ypos, ypos + 6); - - /* calculate new tick positions */ - fill = 1 + ((gBuf.pBufFill - gBuf.pBufStart) * (LCD_WIDTH-2)) / gBuf.bufsize; - video = 1 + ((gBuf.pReadVideo - gBuf.pBufStart) * (LCD_WIDTH-2)) / gBuf.bufsize; - audio = 1 + ((gBuf.pReadAudio - gBuf.pBufStart) * (LCD_WIDTH-2)) / gBuf.bufsize; - - rb->lcd_drawpixel(fill, ypos + 4); - rb->lcd_drawpixel(video, ypos + 2); - rb->lcd_drawpixel(audio, ypos + 1); - - if (gPlay.state == paused) /* we have to draw ourselves */ - rb->lcd_update_rect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); - else - gPlay.bDirtyOSD = true; /* redraw it with next timer IRQ */ -} -#endif - - -/* helper function to draw a position indicator */ -static void DrawPosition(int pos, int total) -{ - int w, h; - int sec; /* estimated seconds */ - int ypos; - - rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); - rb->lcd_fillrect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); - rb->lcd_set_drawmode(DRMODE_SOLID); - - /* print the estimated position */ - sec = pos / (gFileHdr.bps_average/8); - if (sec < 100*60) /* fits into mm:ss format */ - rb->snprintf(gPrint, sizeof(gPrint), "%02d:%02dm", sec/60, sec%60); - else /* a very long clip, hh:mm format */ - rb->snprintf(gPrint, sizeof(gPrint), "%02d:%02dh", sec/3600, (sec/60)%60); - - rb->lcd_getstringsize(gPrint, &w, &h); - w++; - ypos = gBuf.osd_ypos + (gBuf.osd_height - h) / 2; - rb->lcd_putsxy(0, ypos, gPrint); - - /* draw a slider over the rest of the line */ - rb->gui_scrollbar_draw(rb->screens[SCREEN_MAIN], w, ypos, LCD_WIDTH-w, - h, total, 0, pos, HORIZONTAL); - - if (gPlay.state == paused) /* we have to draw ourselves */ - rb->lcd_update_rect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); - else /* let the display time do it */ - { - gPlay.nTimeOSD = FPS; - gPlay.bDirtyOSD = true; /* redraw it with next timer IRQ */ - } -} - -/* Put text on OSD and activate it for 1 second */ -static void osd_show_text(void) -{ - int h, ypos; - - rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); - rb->lcd_fillrect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); - rb->lcd_set_drawmode(DRMODE_SOLID); - - rb->lcd_getstringsize(gPrint, NULL, &h); - ypos = gBuf.osd_ypos + (gBuf.osd_height - h) / 2; - rb->lcd_putsxy(0, ypos, gPrint); - - if (gPlay.state == paused) /* we have to draw ourselves */ - rb->lcd_update_rect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); - else /* let the display time do it */ - { - gPlay.nTimeOSD = FPS; /* display it for 1 sec */ - gPlay.bDirtyOSD = true; /* let the refresh copy it to LCD */ - } -} - -/* helper function to change the volume by a certain amount, +/- */ -static void ChangeVolume(int delta) -{ - int minvol = rb->sound_min(SOUND_VOLUME); - int maxvol = rb->sound_max(SOUND_VOLUME); - int vol = rb->global_settings->volume + delta; - - if (vol > maxvol) vol = maxvol; - else if (vol < minvol) vol = minvol; - if (vol != rb->global_settings->volume) - { - rb->sound_set(SOUND_VOLUME, vol); - rb->global_settings->volume = vol; - - rb->snprintf(gPrint, sizeof(gPrint), "Vol: %d dB", vol); - osd_show_text(); - } -} - - -/* helper function to change the LCD contrast by a certain amount, +/- */ -static void ChangeContrast(int delta) -{ - static int mycontrast = -1; /* the "permanent" value while running */ - int contrast; /* updated value */ - - if (mycontrast == -1) - mycontrast = rb->global_settings->contrast; - - contrast = mycontrast + delta; - if (contrast > 63) contrast = 63; - else if (contrast < 5) contrast = 5; - if (contrast != mycontrast) - { - rb->lcd_set_contrast(contrast); - mycontrast = contrast; - - rb->snprintf(gPrint, sizeof(gPrint), "Contrast: %d", contrast); - osd_show_text(); - } -} - - -/* sync the video to the current audio */ -static void SyncVideo(void) -{ - tAudioFrameHeader* pAudioBuf; - - pAudioBuf = (tAudioFrameHeader*)(gBuf.pReadAudio); - if (pAudioBuf->magic == AUDIO_MAGIC) - { - gBuf.vidcount = 0; /* nothing known */ - /* sync the video position */ - gBuf.pReadVideo = gBuf.pReadAudio + - (long)pAudioBuf->associated_video * (long)gFileHdr.blocksize; - - /* handle possible wrap */ - if (gBuf.pReadVideo >= gBuf.pBufEnd) - gBuf.pReadVideo -= gBuf.bufsize; - else if (gBuf.pReadVideo < gBuf.pBufStart) - gBuf.pReadVideo += gBuf.bufsize; - } -} - - -/* timer interrupt handler to display a frame */ -static void timer4_isr(void) -{ - int available; - tAudioFrameHeader* pAudioBuf; - int height; /* height to display */ - - /* reduce height if we have OSD on */ - height = gFileHdr.video_height; - if (gPlay.nTimeOSD > 0) - { - gPlay.nTimeOSD--; - height = MIN(gBuf.osd_ypos, height); - if (gPlay.bDirtyOSD) - { - rb->lcd_update_rect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); - gPlay.bDirtyOSD = false; - } - } - - rb->lcd_blit_mono(gBuf.pReadVideo, 0, 0, - gFileHdr.video_width, height/8, gFileHdr.video_width); - - available = Available(gBuf.pReadVideo); - - /* loop to skip audio frame(s) */ - while(1) - { - /* just for the statistics */ - if (!gBuf.bEOF && available < gStats.minVideoAvail) - gStats.minVideoAvail = available; - - if (available <= (int)gFileHdr.blocksize) - { /* no data for next frame */ - - if (gBuf.bEOF && (gFileHdr.flags & FLAG_LOOP)) - { /* loop now, assuming the looped clip fits in memory */ - gBuf.pReadVideo = gBuf.pBufStart + gFileHdr.video_1st_frame; - /* FixMe: pReadVideo is incremented below */ - } - else - { - gPlay.bVideoUnderrun = true; - rb->timer_unregister(); /* disable ourselves */ - return; /* no data available */ - } - } - else /* normal advance for next time */ - { - gBuf.pReadVideo += gFileHdr.blocksize; - if (gBuf.pReadVideo >= gBuf.pBufEnd) - gBuf.pReadVideo -= gBuf.bufsize; /* wraparound */ - available -= gFileHdr.blocksize; - } - - if (!gPlay.bHasAudio) - break; /* no need to skip any audio */ - - if (gBuf.vidcount) - { - /* we know the next is a video frame */ - gBuf.vidcount--; - break; /* exit the loop */ - } - - pAudioBuf = (tAudioFrameHeader*)(gBuf.pReadVideo); - if (pAudioBuf->magic == AUDIO_MAGIC) - { /* we ran into audio, can happen after seek */ - gBuf.vidcount = pAudioBuf->next_block; - if (gBuf.vidcount) - gBuf.vidcount--; /* minus the audio block */ - } - } /* while */ -} - - -/* ISR function to get more mp3 data */ -static void GetMoreMp3(const void** start, size_t* size) -{ - int available; - int advance; - - tAudioFrameHeader* pAudioBuf = (tAudioFrameHeader*)(gBuf.pReadAudio); - - advance = pAudioBuf->next_block * gFileHdr.blocksize; - - available = Available(gBuf.pReadAudio); - - /* just for the statistics */ - if (!gBuf.bEOF && available < gStats.minAudioAvail) - gStats.minAudioAvail = available; - - if (available < advance + (int)gFileHdr.blocksize || advance == 0) - { - gPlay.bAudioUnderrun = true; - return; /* no data available */ - } - - gBuf.pReadAudio += advance; - if (gBuf.pReadAudio >= gBuf.pBufEnd) - gBuf.pReadAudio -= gBuf.bufsize; /* wraparound */ - - *start = gBuf.pReadAudio + gFileHdr.audio_headersize; - *size = gFileHdr.blocksize - gFileHdr.audio_headersize; -} - - -static int WaitForButton(void) -{ - int button; - - do - { - button = rb->button_get(true); - rb->default_event_handler(button); - } while ((button & BUTTON_REL) && button != SYS_USB_CONNECTED); - - return button; -} - - -static bool WantResume(int fd) -{ - int button; - - rb->lcd_puts(0, 0, "Resume to this"); - rb->lcd_puts(0, 1, "last position?"); - rb->lcd_puts(0, 2, "PLAY = yes"); - rb->lcd_puts(0, 3, "Any Other = no"); - rb->lcd_puts(0, 4, " (plays from start)"); - DrawPosition(gFileHdr.resume_pos, rb->filesize(fd)); - rb->lcd_update(); - - button = WaitForButton(); - return (button == VIDEO_RESUME); -} - - -static int SeekTo(int fd, int nPos) -{ - int read_now, got_now; - - if (gPlay.bHasAudio) - rb->mp3_play_stop(); /* stop audio ISR */ - if (gPlay.bHasVideo) - rb->timer_unregister(); /* stop the timer */ - - rb->lseek(fd, nPos, SEEK_SET); - - gBuf.pBufFill = gBuf.pBufStart; /* all empty */ - gBuf.pReadVideo = gBuf.pReadAudio = gBuf.pBufStart; - - read_now = gBuf.low_water - 1; /* less than low water, so loading will continue */ - read_now -= read_now % gBuf.granularity; /* round down to granularity */ - got_now = rb->read(fd, gBuf.pBufFill, read_now); - gBuf.bEOF = (read_now != got_now); - gBuf.pBufFill += got_now; - - if (nPos == 0) - { /* we seeked to the start */ - if (gPlay.bHasVideo) - gBuf.pReadVideo += gFileHdr.video_1st_frame; - - if (gPlay.bHasAudio) - gBuf.pReadAudio += gFileHdr.audio_1st_frame; - } - else - { /* we have to search for the positions */ - if (gPlay.bHasAudio) /* prepare audio playback, if contained */ - { - /* search for audio frame */ - while (((tAudioFrameHeader*)(gBuf.pReadAudio))->magic != AUDIO_MAGIC) - gBuf.pReadAudio += gFileHdr.blocksize; - - if (gPlay.bHasVideo) - SyncVideo(); /* pick the right video for that */ - } - } - - /* synchronous start */ - gPlay.state = playing; - if (gPlay.bHasAudio) - { - gPlay.bAudioUnderrun = false; - rb->mp3_play_data(gBuf.pReadAudio + gFileHdr.audio_headersize, - gFileHdr.blocksize - gFileHdr.audio_headersize, GetMoreMp3); - rb->mp3_play_pause(true); /* kickoff audio */ - } - if (gPlay.bHasVideo) - { - gPlay.bVideoUnderrun = false; - /* start display interrupt */ -#if FREQ == 12000000 /* Ondio speed kludge */ - rb->timer_register(1, NULL, gPlay.nFrameTimeAdjusted, - timer4_isr IF_COP(, CPU)); -#else - rb->timer_register(1, NULL, gFileHdr.video_frametime, - timer4_isr IF_COP(, CPU)); -#endif - } - - return 0; -} - -/* called from default_event_handler_ex() or at end of playback */ -static void Cleanup(void *fd) -{ - rb->close(*(int*)fd); /* close the file */ - - if (gPlay.bHasVideo) - rb->timer_unregister(); /* stop video ISR, now I can use the display again */ - - if (gPlay.bHasAudio) - rb->mp3_play_stop(); /* stop audio ISR */ - - /* Turn on backlight timeout (revert to settings) */ - backlight_use_settings(); - - /* restore normal contrast */ - rb->lcd_set_contrast(rb->global_settings->contrast); -} - -/* returns >0 if continue, =0 to stop, <0 to abort (USB) */ -static int PlayTick(int fd) -{ - int button; - static int lastbutton = 0; - int avail_audio = -1, avail_video = -1; - int retval = 1; - int filepos; - - /* check buffer level */ - - if (gPlay.bHasAudio) - avail_audio = Available(gBuf.pReadAudio); - if (gPlay.bHasVideo) - avail_video = Available(gBuf.pReadVideo); - - if ((gPlay.bHasAudio && avail_audio < gBuf.low_water) - || (gPlay.bHasVideo && avail_video < gBuf.low_water)) - { - gPlay.bRefilling = true; /* go to refill mode */ - } - - if ((!gPlay.bHasAudio || gPlay.bAudioUnderrun) - && (!gPlay.bHasVideo || gPlay.bVideoUnderrun) - && gBuf.bEOF) - { - if (gFileHdr.resume_pos) - { /* we played til the end, clear resume position */ - gFileHdr.resume_pos = 0; - rb->lseek(fd, 0, SEEK_SET); /* save resume position */ - rb->write(fd, &gFileHdr, sizeof(gFileHdr)); - } - Cleanup(&fd); - return 0; /* all expired */ - } - - if (!gPlay.bRefilling || gBuf.bEOF) - { /* nothing to do */ - button = rb->button_get_w_tmo(HZ/10); - } - else - { /* refill buffer */ - int read_now, got_now; - int buf_free; - long spinup; /* measure the spinup time */ - - /* how much can we reload, don't fill completely, would appear empty */ - buf_free = gBuf.bufsize - MAX(avail_audio, avail_video) - gBuf.high_water; - if (buf_free < 0) - buf_free = 0; /* just for safety */ - buf_free -= buf_free % gBuf.granularity; /* round down to granularity */ - - /* in one piece max. up to buffer end (wrap after that) */ - read_now = MIN(buf_free, gBuf.pBufEnd - gBuf.pBufFill); - - /* load piecewise, to stay responsive */ - read_now = MIN(read_now, gBuf.nReadChunk); - - if (read_now == buf_free) - gPlay.bRefilling = false; /* last piece requested */ - - spinup = *rb->current_tick; /* in case this is interesting below */ - - got_now = rb->read(fd, gBuf.pBufFill, read_now); - if (got_now != read_now || read_now == 0) - { - gBuf.bEOF = true; - gPlay.bRefilling = false; - } - - if (gPlay.bDiskSleep) /* statistics about the spinup time */ - { - spinup = *rb->current_tick - spinup; - gPlay.bDiskSleep = false; - if (spinup > gStats.maxSpinup) - gStats.maxSpinup = spinup; - if (spinup < gStats.minSpinup) - gStats.minSpinup = spinup; - - /* recalculate the low water mark from real measurements */ - gBuf.low_water = (gStats.maxSpinup + gBuf.spinup_safety) - * gFileHdr.bps_peak / 8 / HZ; - } - - if (!gPlay.bRefilling -#ifdef HAVE_DISK_STORAGE - && rb->global_settings->disk_spindown < 20 /* condition for test only */ -#endif - ) - { - rb->storage_sleep(); /* no point in leaving the disk run til timeout */ - gPlay.bDiskSleep = true; - } - - gBuf.pBufFill += got_now; - if (gBuf.pBufFill >= gBuf.pBufEnd) - gBuf.pBufFill = gBuf.pBufStart; /* wrap */ - - rb->yield(); /* have mercy with the other threads */ - button = rb->button_get(false); - } - - /* check keypresses */ - - if (button != BUTTON_NONE) - { - filepos = rb->lseek(fd, 0, SEEK_CUR); - - if (gPlay.bHasVideo) /* video position is more accurate */ - filepos -= Available(gBuf.pReadVideo); /* take video position */ - else - filepos -= Available(gBuf.pReadAudio); /* else audio */ - - switch (button) { /* set exit conditions */ - case BUTTON_OFF: - if (gFileHdr.magic == HEADER_MAGIC /* only if file has header */ - && !(gFileHdr.flags & FLAG_LOOP)) /* not for stills */ - { - gFileHdr.resume_pos = filepos; - rb->lseek(fd, 0, SEEK_SET); /* save resume position */ - rb->write(fd, &gFileHdr, sizeof(gFileHdr)); - } - Cleanup(&fd); - retval = 0; /* signal "stopped" to caller */ - break; - case VIDEO_STOP_SEEK: -#ifdef VIDEO_STOP_SEEK_PRE - if (lastbutton != VIDEO_STOP_SEEK_PRE) - break; -#endif - if (gPlay.bSeeking) - { - gPlay.bSeeking = false; - gPlay.state = playing; - SeekTo(fd, gPlay.nSeekPos); - } - else if (gPlay.state == playing) - { - gPlay.state = paused; - if (gPlay.bHasAudio) - rb->mp3_play_pause(false); /* pause audio */ - if (gPlay.bHasVideo) - rb->timer_unregister(); /* stop the timer */ - } - else if (gPlay.state == paused) - { - gPlay.state = playing; - if (gPlay.bHasAudio) - { - if (gPlay.bHasVideo) - SyncVideo(); - rb->mp3_play_pause(true); /* play audio */ - } - if (gPlay.bHasVideo) - { /* start the video */ -#if FREQ == 12000000 /* Ondio speed kludge */ - rb->timer_register(1, NULL, - gPlay.nFrameTimeAdjusted, timer4_isr); -#else - rb->timer_register(1, NULL, - gFileHdr.video_frametime, timer4_isr); -#endif - } - } - break; - case BUTTON_UP: - case BUTTON_UP | BUTTON_REPEAT: - if (gPlay.bHasAudio) - ChangeVolume(1); - break; - case BUTTON_DOWN: - case BUTTON_DOWN | BUTTON_REPEAT: - if (gPlay.bHasAudio) - ChangeVolume(-1); - break; - case BUTTON_LEFT: - case BUTTON_LEFT | BUTTON_REPEAT: - if (!gPlay.bSeeking) /* prepare seek */ - { - gPlay.nSeekPos = filepos; - gPlay.bSeeking = true; - gPlay.nSeekAcc = 0; - } - else if (gPlay.nSeekAcc > 0) /* other direction, stop sliding */ - gPlay.nSeekAcc = 0; - else - gPlay.nSeekAcc--; - break; - case BUTTON_RIGHT: - case BUTTON_RIGHT | BUTTON_REPEAT: - if (!gPlay.bSeeking) /* prepare seek */ - { - gPlay.nSeekPos = filepos; - gPlay.bSeeking = true; - gPlay.nSeekAcc = 0; - } - else if (gPlay.nSeekAcc < 0) /* other direction, stop sliding */ - gPlay.nSeekAcc = 0; - else - gPlay.nSeekAcc++; - break; -#ifdef VIDEO_DEBUG - case VIDEO_DEBUG: /* debug key */ - case VIDEO_DEBUG | BUTTON_REPEAT: - DrawBuf(); /* show buffer status */ - gPlay.nTimeOSD = FPS/2; - gPlay.bDirtyOSD = true; - break; -#endif - case VIDEO_CONTRAST_DOWN: /* contrast down */ - case VIDEO_CONTRAST_DOWN | BUTTON_REPEAT: - if (gPlay.bHasVideo) - ChangeContrast(-1); - break; - case VIDEO_CONTRAST_UP: /* contrast up */ - case VIDEO_CONTRAST_UP | BUTTON_REPEAT: - if (gPlay.bHasVideo) - ChangeContrast(1); - break; - default: - if (rb->default_event_handler_ex(button, Cleanup, &fd) - == SYS_USB_CONNECTED) - retval = -1; /* signal "aborted" to caller */ - break; - } - - lastbutton = button; - } /* if (button != BUTTON_NONE) */ - - - /* handle seeking */ - - if (gPlay.bSeeking) /* seeking? */ - { - if (gPlay.nSeekAcc < -MAX_ACC) - gPlay.nSeekAcc = -MAX_ACC; - else if (gPlay.nSeekAcc > MAX_ACC) - gPlay.nSeekAcc = MAX_ACC; - - gPlay.nSeekPos += gPlay.nSeekAcc * gBuf.nSeekChunk; - if (gPlay.nSeekPos < 0) - gPlay.nSeekPos = 0; - if (gPlay.nSeekPos > rb->filesize(fd) - gBuf.granularity) - { - gPlay.nSeekPos = rb->filesize(fd); - gPlay.nSeekPos -= gPlay.nSeekPos % gBuf.granularity; - } - DrawPosition(gPlay.nSeekPos, rb->filesize(fd)); - } - - - /* check + recover underruns */ - - if ((gPlay.bAudioUnderrun || gPlay.bVideoUnderrun) && !gBuf.bEOF) - { - gBuf.spinup_safety += HZ/2; /* add extra spinup time for the future */ - filepos = rb->lseek(fd, 0, SEEK_CUR); - - if (gPlay.bHasVideo && gPlay.bVideoUnderrun) - { - gStats.nVideoUnderruns++; - filepos -= Available(gBuf.pReadVideo); /* take video position */ - SeekTo(fd, filepos); - } - else if (gPlay.bHasAudio && gPlay.bAudioUnderrun) - { - gStats.nAudioUnderruns++; - filepos -= Available(gBuf.pReadAudio); /* else audio */ - SeekTo(fd, filepos); - } - } - - return retval; -} - - -static int main(char* filename) -{ - int file_size; - int fd; /* file descriptor handle */ - int read_now, got_now; - int button = 0; - int retval; - - /* try to open the file */ - fd = rb->open(filename, O_RDWR); - if (fd < 0) - return PLUGIN_ERROR; - file_size = rb->filesize(fd); - - /* reset pitch value to ensure synchronous playback */ - rb->sound_set_pitch(PITCH_SPEED_100); - - /* init statistics */ - rb->memset(&gStats, 0, sizeof(gStats)); - gStats.minAudioAvail = gStats.minVideoAvail = INT_MAX; - gStats.minSpinup = INT_MAX; - - /* init playback state */ - rb->memset(&gPlay, 0, sizeof(gPlay)); - - /* init buffer */ - rb->memset(&gBuf, 0, sizeof(gBuf)); - gBuf.pBufStart = rb->plugin_get_audio_buffer((size_t *)&gBuf.bufsize); - /*gBuf.bufsize = 1700*1024; // test, like 2MB version!!!! */ - gBuf.pBufFill = gBuf.pBufStart; /* all empty */ - - /* init OSD */ - rb->lcd_getstringsize("X", NULL, &retval); - gBuf.osd_height = (retval + 7) & ~7; - gBuf.osd_ypos = LCD_HEIGHT - gBuf.osd_height; - - /* load file header */ - read_now = sizeof(gFileHdr); - got_now = rb->read(fd, &gFileHdr, read_now); - rb->lseek(fd, 0, SEEK_SET); /* rewind to restart sector-aligned */ - if (got_now != read_now) - { - rb->close(fd); - return (PLUGIN_ERROR); - } - - /* check header */ - if (gFileHdr.magic != HEADER_MAGIC) - { /* old file, use default info */ - rb->memset(&gFileHdr, 0, sizeof(gFileHdr)); - gFileHdr.blocksize = SCREENSIZE; - if (file_size < SCREENSIZE * FPS) /* less than a second */ - gFileHdr.flags |= FLAG_LOOP; - gFileHdr.video_format = VIDEOFORMAT_RAW; - gFileHdr.video_width = LCD_WIDTH; - gFileHdr.video_height = LCD_HEIGHT; - gFileHdr.video_frametime = 11059200 / FPS; - gFileHdr.bps_peak = gFileHdr.bps_average = LCD_WIDTH * LCD_HEIGHT * FPS; - } - -#if FREQ == 12000000 /* Ondio speed kludge, 625 / 576 == 12000000 / 11059200 */ - gPlay.nFrameTimeAdjusted = (gFileHdr.video_frametime * 625) / 576; -#endif - - /* continue buffer init: align the end, calc low water, read sizes */ - gBuf.granularity = gFileHdr.blocksize; - while (gBuf.granularity % 512) /* common multiple of sector size */ - gBuf.granularity *= 2; - gBuf.bufsize -= gBuf.bufsize % gBuf.granularity; /* round down */ - gBuf.pBufEnd = gBuf.pBufStart + gBuf.bufsize; - gBuf.low_water = SPINUP_INIT * gFileHdr.bps_peak / 8000; - gBuf.spinup_safety = SPINUP_SAFETY * HZ / 1000; /* in time ticks */ - if (gFileHdr.audio_min_associated < 0) - gBuf.high_water = 0 - gFileHdr.audio_min_associated; - else - gBuf.high_water = 1; /* never fill buffer completely, would appear empty */ - gBuf.nReadChunk = (CHUNK + gBuf.granularity - 1); /* round up */ - gBuf.nReadChunk -= gBuf.nReadChunk % gBuf.granularity;/* and align */ - gBuf.nSeekChunk = rb->filesize(fd) / FF_TICKS; - gBuf.nSeekChunk += gBuf.granularity - 1; /* round up */ - gBuf.nSeekChunk -= gBuf.nSeekChunk % gBuf.granularity; /* and align */ - - /* prepare video playback, if contained */ - if (gFileHdr.video_format == VIDEOFORMAT_RAW) - { - gPlay.bHasVideo = true; - /* Turn off backlight timeout */ - backlight_ignore_timeout(); - } - - /* prepare audio playback, if contained */ - if (gFileHdr.audio_format == AUDIOFORMAT_MP3_BITSWAPPED) - { - gPlay.bHasAudio = true; - } - - /* start playback by seeking to zero or resume position */ - if (gFileHdr.resume_pos && WantResume(fd)) /* ask the user */ - SeekTo(fd, gFileHdr.resume_pos); - else - SeekTo(fd, 0); - - /* all that's left to do is keep the buffer full */ - do /* the main loop */ - { - retval = PlayTick(fd); - } while (retval > 0); - - if (retval < 0) /* aborted? */ - { - return PLUGIN_USB_CONNECTED; - } - -#ifndef DEBUG /* for release compilations, only display the stats in case of error */ - if (gStats.nAudioUnderruns || gStats.nVideoUnderruns) -#endif - { - /* display statistics */ - rb->lcd_clear_display(); - rb->snprintf(gPrint, sizeof(gPrint), "%d Audio Underruns", gStats.nAudioUnderruns); - rb->lcd_puts(0, 0, gPrint); - rb->snprintf(gPrint, sizeof(gPrint), "%d Video Underruns", gStats.nVideoUnderruns); - rb->lcd_puts(0, 1, gPrint); - rb->snprintf(gPrint, sizeof(gPrint), "%d MinAudio bytes", gStats.minAudioAvail); - rb->lcd_puts(0, 2, gPrint); - rb->snprintf(gPrint, sizeof(gPrint), "%d MinVideo bytes", gStats.minVideoAvail); - rb->lcd_puts(0, 3, gPrint); - rb->snprintf(gPrint, sizeof(gPrint), "MinSpinup %ld.%02ld", gStats.minSpinup/HZ, gStats.minSpinup%HZ); - rb->lcd_puts(0, 4, gPrint); - rb->snprintf(gPrint, sizeof(gPrint), "MaxSpinup %ld.%02ld", gStats.maxSpinup/HZ, gStats.maxSpinup%HZ); - rb->lcd_puts(0, 5, gPrint); - rb->snprintf(gPrint, sizeof(gPrint), "LowWater: %d", gBuf.low_water); - rb->lcd_puts(0, 6, gPrint); - rb->snprintf(gPrint, sizeof(gPrint), "HighWater: %d", gBuf.high_water); - rb->lcd_puts(0, 7, gPrint); - - rb->lcd_update(); - button = WaitForButton(); - } - return (button == SYS_USB_CONNECTED) ? PLUGIN_USB_CONNECTED : PLUGIN_OK; -} - - -/***************** Plugin Entry Point *****************/ - -enum plugin_status plugin_start(const void* parameter) -{ - if (parameter == NULL) - { - rb->splash(HZ*2, "Play .rvf file!"); - return PLUGIN_ERROR; - } - - /* now go ahead and have fun! */ - return main((char*) parameter); -} - -#endif /* #ifdef HAVE_LCD_BITMAP */ - diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c index af6bd6f397..a4d639ede6 100644 --- a/apps/plugins/vu_meter.c +++ b/apps/plugins/vu_meter.c @@ -24,32 +24,8 @@ /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define VUMETER_QUIT BUTTON_OFF -#define VUMETER_HELP BUTTON_ON -#define VUMETER_MENU BUTTON_F1 -#define VUMETER_UP BUTTON_UP -#define VUMETER_DOWN BUTTON_DOWN -#define LABEL_HELP "ON" -#define LABEL_QUIT "OFF" -#define LABEL_MENU "F1" -#define LABEL_VOLUME "UP/DOWN" - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define VUMETER_QUIT BUTTON_OFF -#define VUMETER_HELP_PRE BUTTON_MENU -#define VUMETER_HELP (BUTTON_MENU | BUTTON_REL) -#define VUMETER_MENU_PRE BUTTON_MENU -#define VUMETER_MENU (BUTTON_MENU | BUTTON_REPEAT) -#define VUMETER_UP BUTTON_UP -#define VUMETER_DOWN BUTTON_DOWN -#define LABEL_HELP "MODE" -#define LABEL_QUIT "OFF" -#define LABEL_MENU "MODE.." -#define LABEL_VOLUME "UP/DOWN" - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define VUMETER_QUIT BUTTON_OFF #define VUMETER_HELP BUTTON_ON #define VUMETER_MENU BUTTON_SELECT @@ -804,10 +780,7 @@ static void draw_digital_minimeters(void) { static void analog_meter(void) { -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - int left_peak = rb->mas_codec_readreg(0xC); - int right_peak = rb->mas_codec_readreg(0xD); -#elif (CONFIG_CODEC == SWCODEC) +#if (CONFIG_CODEC == SWCODEC) static struct pcm_peaks peaks; rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, &peaks); @@ -864,10 +837,7 @@ static void analog_meter(void) { } static void digital_meter(void) { -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - int left_peak = rb->mas_codec_readreg(0xC); - int right_peak = rb->mas_codec_readreg(0xD); -#elif (CONFIG_CODEC == SWCODEC) +#if (CONFIG_CODEC == SWCODEC) static struct pcm_peaks peaks; rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, &peaks); diff --git a/apps/plugins/wavplay.c b/apps/plugins/wavplay.c deleted file mode 100644 index 073af31280..0000000000 --- a/apps/plugins/wavplay.c +++ /dev/null @@ -1,3676 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 Jörg Hohensohn - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ -#include "plugin.h" - - - -/************ Start of MAS pcm codec, raw i2c blocks ************/ - -// address 04640 count 30 (126 bytes) -static const unsigned char maspcm_array1[] = { - 0xe0, 0x00, 0x00, 0x1e, 0x06, 0x40, - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x25, // 00000025 - 0x00, 0x00, 0x00, 0x04, // 00000004 - 0x00, 0x00, 0x48, 0x00, // 00004800 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xFF, 0xFF, // 0000FFFF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x82, 0x00, // 00008200 - 0x00, 0x00, 0x00, 0x0A, // 0000000A - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x03, 0x18, // 00000318 - 0x00, 0x00, 0x03, 0x18, // 00000318 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0x03, 0x18, // 00000318 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x03, 0x00, // 00000300 -}; -// address 04674 count 81 (330 bytes) -static const unsigned char maspcm_array2[] = { - 0xe0, 0x00, 0x00, 0x51, 0x06, 0x74, - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x02, // 00000002 - 0x00, 0x00, 0x00, 0x60, // 00000060 - 0x00, 0x00, 0x00, 0x60, // 00000060 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0xC0, 0x00, // 0000C000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x1E, // 0000001E - 0x00, 0x00, 0x42, 0x11, // 00004211 - 0x00, 0x00, 0x58, 0x33, // 00005833 - 0x00, 0x00, 0x00, 0x02, // 00000002 - 0x00, 0x00, 0x00, 0x40, // 00000040 - 0x00, 0x00, 0x00, 0x40, // 00000040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x01, 0x20, 0x01, // 00012001 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x29, // 00000029 - 0x00, 0x00, 0x30, 0xC3, // 000030C3 - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x02, // 00000002 - 0x00, 0x00, 0x00, 0x40, // 00000040 - 0x00, 0x00, 0x00, 0x40, // 00000040 - 0x00, 0x00, 0x02, 0x00, // 00000200 - 0x00, 0x01, 0x20, 0x00, // 00012000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x2D, // 0000002D - 0x00, 0x00, 0x2C, 0x86, // 00002C86 - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x01, // 00000001 - 0x00, 0x00, 0x00, 0x30, // 00000030 - 0x00, 0x00, 0x00, 0x30, // 00000030 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x01, 0x80, 0x00, // 00018000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x3C, // 0000003C - 0x00, 0x00, 0x21, 0x93, // 00002193 - 0x00, 0x00, 0x58, 0x33, // 00005833 - 0x00, 0x00, 0x00, 0x01, // 00000001 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x40, 0x01, // 00024001 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x52, // 00000052 - 0x00, 0x00, 0x18, 0xAD, // 000018AD - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x01, // 00000001 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x02, 0x00, // 00000200 - 0x00, 0x02, 0x40, 0x00, // 00024000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x5A, // 0000005A - 0x00, 0x00, 0x16, 0x81, // 00001681 - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x18, // 00000018 - 0x00, 0x00, 0x00, 0x18, // 00000018 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x03, 0x00, 0x00, // 00030000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x78, // 00000078 - 0x00, 0x00, 0x10, 0xED, // 000010ED - 0x00, 0x00, 0x58, 0x33, // 00005833 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x10, // 00000010 - 0x00, 0x00, 0x00, 0x10, // 00000010 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x04, 0x80, 0x03, // 00048003 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0xA5, // 000000A5 - 0x00, 0x00, 0x0C, 0x56, // 00000C56 - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x10, // 00000010 - 0x00, 0x00, 0x00, 0x10, // 00000010 - 0x00, 0x00, 0x02, 0x00, // 00000200 - 0x00, 0x04, 0x80, 0x00, // 00048000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0xB4, // 000000B4 - 0x00, 0x00, 0x0B, 0x51, // 00000B51 -}; -// address 04661 count 19 (82 bytes) -static const unsigned char maspcm_array3[] = { - 0xe0, 0x00, 0x00, 0x13, 0x06, 0x61, - 0x00, 0x00, 0x01, 0x25, // 00000125 - 0x00, 0x00, 0x00, 0x05, // 00000005 - 0x00, 0x00, 0x48, 0x00, // 00004800 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x82, 0x00, // 00008200 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 -}; -// address 046E4 count 16 (70 bytes) -static const unsigned char maspcm_array4[] = { - 0xe0, 0x00, 0x00, 0x10, 0x06, 0xe4, - 0x00, 0x00, 0x06, 0x74, // 00000674 - 0x00, 0x00, 0x06, 0x7D, // 0000067D - 0x00, 0x00, 0x06, 0x86, // 00000686 - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x00, 0x06, 0x8F, // 0000068F - 0x00, 0x00, 0x06, 0x98, // 00000698 - 0x00, 0x00, 0x06, 0xA1, // 000006A1 - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x00, 0x06, 0xAA, // 000006AA - 0x00, 0x00, 0x06, 0xB3, // 000006B3 - 0x00, 0x00, 0x06, 0xBC, // 000006BC - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF -}; -// address 04700 count 18 (78 byte) -static const unsigned char maspcm_array5[] = { - 0xe0, 0x00, 0x00, 0x12, 0x07, 0x00, - 0x00, 0x00, 0x06, 0xBC, // 000006BC - 0x00, 0x00, 0x00, 0x0A, // 0000000A - 0x00, 0x00, 0x06, 0x74, // 00000674 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x06, 0x7D, // 0000067D - 0x00, 0x00, 0x00, 0x01, // 00000001 - 0x00, 0x00, 0x06, 0x86, // 00000686 - 0x00, 0x00, 0x00, 0x02, // 00000002 - 0x00, 0x00, 0x06, 0x8F, // 0000068F - 0x00, 0x00, 0x00, 0x04, // 00000004 - 0x00, 0x00, 0x06, 0x98, // 00000698 - 0x00, 0x00, 0x00, 0x05, // 00000005 - 0x00, 0x00, 0x06, 0xA1, // 000006A1 - 0x00, 0x00, 0x00, 0x06, // 00000006 - 0x00, 0x00, 0x06, 0xAA, // 000006AA - 0x00, 0x00, 0x00, 0x08, // 00000008 - 0x00, 0x00, 0x06, 0xB3, // 000006B3 - 0x00, 0x00, 0x00, 0x09, // 00000009 -}; -// address 06600 count 63 (258 bytes) -static const unsigned char maspcm_array6[] = { - 0xf0, 0x00, 0x00, 0x3f, 0x06, 0x00, - 0x00, 0x00, 0x0B, 0xAD, // 00000BAD - 0x00, 0x00, 0x10, 0x00, // 00001000 - 0x00, 0x00, 0x20, 0x00, // 00002000 - 0x00, 0x00, 0x30, 0x00, // 00003000 - 0x00, 0x00, 0x40, 0x00, // 00004000 - 0x00, 0x00, 0x50, 0x00, // 00005000 - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x70, 0x00, // 00007000 - 0x00, 0x00, 0x80, 0x00, // 00008000 - 0x00, 0x00, 0x90, 0x00, // 00009000 - 0x00, 0x00, 0xA0, 0x00, // 0000A000 - 0x00, 0x00, 0xB0, 0x00, // 0000B000 - 0x00, 0x00, 0xC0, 0x00, // 0000C000 - 0x00, 0x00, 0xD0, 0x00, // 0000D000 - 0x00, 0x00, 0xE0, 0x00, // 0000E000 - 0x00, 0x00, 0xF0, 0x00, // 0000F000 - 0x00, 0x01, 0x00, 0x00, // 00010000 - 0x00, 0x01, 0x10, 0x00, // 00011000 - 0x00, 0x01, 0x20, 0x00, // 00012000 - 0x00, 0x01, 0x30, 0x00, // 00013000 - 0x00, 0x01, 0x40, 0x00, // 00014000 - 0x00, 0x01, 0x50, 0x00, // 00015000 - 0x00, 0x01, 0x60, 0x00, // 00016000 - 0x00, 0x01, 0x70, 0x00, // 00017000 - 0x00, 0x01, 0x80, 0x00, // 00018000 - 0x00, 0x01, 0x90, 0x00, // 00019000 - 0x00, 0x01, 0xA0, 0x00, // 0001A000 - 0x00, 0x01, 0xB0, 0x00, // 0001B000 - 0x00, 0x01, 0xC0, 0x00, // 0001C000 - 0x00, 0x01, 0xD0, 0x00, // 0001D000 - 0x00, 0x01, 0xE0, 0x00, // 0001E000 - 0x00, 0x01, 0xF0, 0x00, // 0001F000 - 0x00, 0x02, 0x00, 0x00, // 00020000 - 0x00, 0x02, 0x10, 0x00, // 00021000 - 0x00, 0x02, 0x20, 0x00, // 00022000 - 0x00, 0x02, 0x30, 0x00, // 00023000 - 0x00, 0x02, 0x40, 0x00, // 00024000 - 0x00, 0x00, 0x05, 0xFF, // 000005FF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0x05, 0xFF, // 000005FF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x0C, // 0000000C -}; -// address 06640 count 12 (54 bytes) -static const unsigned char maspcm_array7[] = { - 0xf0, 0x00, 0x00, 0x0c, 0x06, 0x40, - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 -}; -// address 06660 count 28 (118 bytes) -static const unsigned char maspcm_array8[] = { - 0xf0, 0x00, 0x00, 0x1c, 0x06, 0x60, - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 -}; -// address 04800 count 1668 (6678 bytes) -static const unsigned char maspcm_array9[] = { - 0xe0, 0x00, 0x06, 0x84, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x47, 0xC0, // 000747C0 - 0x00, 0x07, 0x04, 0x00, // 00070400 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xC0, 0x6B, // 0006C06B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x90, // 00070690 - 0x00, 0x07, 0x4C, 0x07, // 00074C07 - 0x00, 0x07, 0x0F, 0xFF, // 00070FFF - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x06, 0x80, 0x1D, // 0006801D - 0x00, 0x06, 0x80, 0x1F, // 0006801F - 0x00, 0x06, 0x80, 0x21, // 00068021 - 0x00, 0x06, 0x80, 0x23, // 00068023 - 0x00, 0x06, 0x84, 0x1D, // 0006841D - 0x00, 0x06, 0x84, 0x1F, // 0006841F - 0x00, 0x06, 0x84, 0x21, // 00068421 - 0x00, 0x06, 0x84, 0x23, // 00068423 - 0x00, 0x06, 0x88, 0x17, // 00068817 - 0x00, 0x06, 0x8C, 0x17, // 00068C17 - 0x00, 0x06, 0xD0, 0x6D, // 0006D06D - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x57, // 00071E57 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x90, // 00070690 - 0x00, 0x07, 0x4C, 0x07, // 00074C07 - 0x00, 0x07, 0x0F, 0xFF, // 00070FFF - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x06, 0x80, 0x1D, // 0006801D - 0x00, 0x06, 0x80, 0x1F, // 0006801F - 0x00, 0x06, 0x80, 0x21, // 00068021 - 0x00, 0x06, 0x80, 0x23, // 00068023 - 0x00, 0x06, 0x84, 0x1D, // 0006841D - 0x00, 0x06, 0x84, 0x1F, // 0006841F - 0x00, 0x06, 0x84, 0x21, // 00068421 - 0x00, 0x06, 0x84, 0x23, // 00068423 - 0x00, 0x06, 0x88, 0x17, // 00068817 - 0x00, 0x06, 0x8C, 0x17, // 00068C17 - 0x00, 0x06, 0xD0, 0x6D, // 0006D06D - 0x00, 0x06, 0x98, 0x1E, // 0006981E - 0x00, 0x04, 0x05, 0x08, // 00040508 - 0x00, 0x04, 0x0D, 0x08, // 00040D08 - 0x00, 0x04, 0x15, 0x08, // 00041508 - 0x00, 0x04, 0x1D, 0x08, // 00041D08 - 0x00, 0x04, 0x25, 0x08, // 00042508 - 0x00, 0x04, 0x2D, 0x08, // 00042D08 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3C, 0x30, // 00073C30 - 0x00, 0x06, 0x80, 0x3B, // 0006803B - 0x00, 0x06, 0x88, 0x5B, // 0006885B - 0x00, 0x06, 0x94, 0x3B, // 0006943B - 0x00, 0x06, 0x9C, 0x43, // 00069C43 - 0x00, 0x06, 0xA0, 0x53, // 0006A053 - 0x00, 0x06, 0xA8, 0x4B, // 0006A84B - 0x00, 0x06, 0xB4, 0x53, // 0006B453 - 0x00, 0x06, 0xBC, 0x06, // 0006BC06 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x07, 0x36, 0x63, // 00073663 - 0x00, 0x02, 0x12, 0x57, // 00021257 - 0x00, 0x07, 0x6C, 0x18, // 00076C18 - 0x00, 0x07, 0x2C, 0x00, // 00072C00 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3C, 0x45, // 00073C45 - 0x00, 0x06, 0xB0, 0x20, // 0006B020 - 0x00, 0x04, 0x36, 0x00, // 00043600 - 0x00, 0x02, 0x12, 0x46, // 00021246 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3C, 0x4C, // 00073C4C - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x66, // 00070666 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x7F, // 0006947F - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x07, 0x88, 0x04, // 00078804 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x0B, 0x49, 0x7F, // 000B497F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x04, 0x14, 0x00, // 00041400 - 0x00, 0x0A, 0xC1, 0xC2, // 000AC1C2 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x10, 0x70, // 00021070 - 0x00, 0x0A, 0xD2, 0x7E, // 000AD27E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x90, 0x04, // 00079004 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xC2, 0xC1, // 000AC2C1 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x02, 0x10, 0x85, // 00021085 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x00, 0x6D, // 0006006D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x41, // 00080041 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xC0, 0x6D, // 0006C06D - 0x00, 0x02, 0x3F, 0xCC, // 00023FCC - 0x00, 0x07, 0x6C, 0x04, // 00076C04 - 0x00, 0x07, 0x2C, 0x7E, // 00072C7E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x10, 0x54, // 00021054 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0x80, 0x74, // 00098074 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1F, 0x00, // 00071F00 - 0x00, 0x08, 0x80, 0x42, // 00088042 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x11, 0x51, // 00021151 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0A, 0xC2, 0xC3, // 000AC2C3 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0x80, 0x78, // 00098078 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x42, // 00088042 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x11, 0x51, // 00021151 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0F, 0x00, // 00070F00 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x66, // 00070666 - 0x00, 0x07, 0x56, 0x00, // 00075600 - 0x00, 0x07, 0x14, 0x03, // 00071403 - 0x00, 0x06, 0x8C, 0x3B, // 00068C3B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x07, 0x90, 0x04, // 00079004 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2F, 0x00, // 00072F00 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x00, // 00070400 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x06, 0xAC, 0x05, // 0006AC05 - 0x00, 0x01, 0x41, 0x00, // 00014100 - 0x00, 0x06, 0x84, 0x1C, // 0006841C - 0x00, 0x07, 0x8C, 0x0C, // 00078C0C - 0x00, 0x07, 0x8C, 0x0C, // 00078C0C - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1C, 0x90, // 00071C90 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x17, 0x00, // 00071700 - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x07, 0x25, 0xFF, // 000725FF - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x00, // 00072C00 - 0x00, 0x06, 0x9C, 0x25, // 00069C25 - 0x00, 0x06, 0x98, 0x2D, // 0006982D - 0x00, 0x06, 0x94, 0x3C, // 0006943C - 0x00, 0x06, 0xA4, 0x16, // 0006A416 - 0x00, 0x06, 0xA0, 0x16, // 0006A016 - 0x00, 0x06, 0x8C, 0x3B, // 00068C3B - 0x00, 0x06, 0xAC, 0x24, // 0006AC24 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0F, 0x00, // 00070F00 - 0x00, 0x0B, 0x52, 0x6F, // 000B526F - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1E, 0x90, // 00071E90 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x1E, // 0006881E - 0x00, 0x06, 0x90, 0x15, // 00069015 - 0x00, 0x06, 0x98, 0x1F, // 0006981F - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x84, 0x6F, // 0006846F - 0x00, 0x06, 0x84, 0x70, // 00068470 - 0x00, 0x04, 0x05, 0x10, // 00040510 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x07, 0x36, 0x63, // 00073663 - 0x00, 0x02, 0x12, 0x57, // 00021257 - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x04, 0x2C, 0x08, // 00042C08 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3C, 0xD2, // 00073CD2 - 0x00, 0x06, 0xB0, 0x22, // 0006B022 - 0x00, 0x04, 0x37, 0x08, // 00043708 - 0x00, 0x04, 0x14, 0x20, // 00041420 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x07, 0x66, 0x00, // 00076600 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x5C, 0x80, // 00075C80 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3D, 0x00, // 00073D00 - 0x00, 0x0A, 0xC8, 0xC4, // 000AC8C4 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x36, 0xC4, // 000836C4 - 0x00, 0x0A, 0xC8, 0xC3, // 000AC8C3 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x12, 0x41, // 00081241 - 0x00, 0x0A, 0xC8, 0xC7, // 000AC8C7 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x02, 0x12, 0x46, // 00021246 - 0x00, 0x09, 0x92, 0x51, // 00099251 - 0x00, 0x08, 0x36, 0xC2, // 000836C2 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3C, 0xEA, // 00073CEA - 0x00, 0x06, 0xAC, 0x6D, // 0006AC6D - 0x00, 0x06, 0xAC, 0x6C, // 0006AC6C - 0x00, 0x0B, 0x7F, 0x7F, // 000B7F7F - 0x00, 0x09, 0xB6, 0x7D, // 0009B67D - 0x00, 0x0A, 0x3F, 0x53, // 000A3F53 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x0A, 0xF6, 0x43, // 000AF643 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1F, 0x18, // 00071F18 - 0x00, 0x07, 0x6C, 0x04, // 00076C04 - 0x00, 0x07, 0x2C, 0x00, // 00072C00 - 0x00, 0x04, 0x0C, 0x08, // 00040C08 - 0x00, 0x08, 0xB6, 0x41, // 0008B641 - 0x00, 0x0A, 0x09, 0xC6, // 000A09C6 - 0x00, 0x08, 0x8F, 0xC1, // 00088FC1 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x09, 0x25, // 000C0925 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x00, // 00070400 - 0x00, 0x06, 0x98, 0x53, // 00069853 - 0x00, 0x06, 0x90, 0x2C, // 0006902C - 0x00, 0x06, 0xA4, 0x24, // 0006A424 - 0x00, 0x06, 0x80, 0x53, // 00068053 - 0x00, 0x06, 0x88, 0x54, // 00068854 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x06, 0x14, 0x6F, // 0006146F - 0x00, 0x06, 0x00, 0x52, // 00060052 - 0x00, 0x08, 0x12, 0x41, // 00081241 - 0x00, 0x06, 0x1C, 0x70, // 00061C70 - 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 - 0x00, 0x02, 0x9F, 0x38, // 00029F38 - 0x00, 0x0A, 0x09, 0x74, // 000A0974 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xC9, 0x43, // 000AC943 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0xA1, 0x42, // 0008A142 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x08, 0x1B, 0x41, // 00081B41 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x6F, // 0006946F - 0x00, 0x06, 0x9C, 0x70, // 00069C70 - 0x00, 0x06, 0x00, 0x6D, // 0006006D - 0x00, 0x02, 0x3F, 0xCC, // 00023FCC - 0x00, 0x0B, 0x00, 0x41, // 000B0041 - 0x00, 0x07, 0x6C, 0x04, // 00076C04 - 0x00, 0x07, 0x2D, 0x1E, // 00072D1E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x6D, // 0006806D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x04, 0x24, // 00060424 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x61, // 00071661 - 0x00, 0x08, 0x8C, 0x80, // 00088C80 - 0x00, 0x02, 0x89, 0x10, // 00028910 - 0x00, 0x02, 0x11, 0x03, // 00021103 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x90, 0x22, // 00069022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x07, 0x54, 0x0C, // 0007540C - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x0A, 0xD8, 0x7E, // 000AD87E - 0x00, 0x0A, 0xC8, 0x41, // 000AC841 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0A, 0xC8, 0xC2, // 000AC8C2 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x10, 0x08, // 00021008 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x98, 0x07, // 00079807 - 0x00, 0x06, 0x04, 0x6F, // 0006046F - 0x00, 0x06, 0x0C, 0x70, // 00060C70 - 0x00, 0x0A, 0x10, 0x7D, // 000A107D - 0x00, 0x08, 0x90, 0xC2, // 000890C2 - 0x00, 0x08, 0x99, 0xC2, // 000899C2 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x10, 0xC2, // 000210C2 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x6B, // 00070E6B - 0x00, 0x0B, 0x52, 0x50, // 000B5250 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x1C, // 0006881C - 0x00, 0x0A, 0xCC, 0x82, // 000ACC82 - 0x00, 0x04, 0x1D, 0x88, // 00041D88 - 0x00, 0x04, 0x1D, 0x00, // 00041D00 - 0x00, 0x08, 0x09, 0xC3, // 000809C3 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x88, 0x04, // 00078804 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x90, // 00070690 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0F, 0x00, // 00070F00 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x17, 0x18, // 00071718 - 0x00, 0x06, 0x80, 0x1F, // 0006801F - 0x00, 0x06, 0x8C, 0x3B, // 00068C3B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x53, // 00069053 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x65, // 00070E65 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x07, 0x26, 0x68, // 00072668 - 0x00, 0x06, 0x88, 0x20, // 00068820 - 0x00, 0x07, 0x90, 0x06, // 00079006 - 0x00, 0x06, 0x94, 0x7F, // 0006947F - 0x00, 0x06, 0xA0, 0x22, // 0006A022 - 0x00, 0x07, 0x90, 0x07, // 00079007 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x6B, // 00070E6B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x20, // 00068820 - 0x00, 0x04, 0x0E, 0x00, // 00040E00 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x40, // 00071C40 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x0A, 0xD1, 0xC3, // 000AD1C3 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x6A, // 0006806A - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x20, // 00071C20 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x0A, 0xD1, 0xC3, // 000AD1C3 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x6C, // 0006806C - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x10, // 00071C10 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x0A, 0xD1, 0xC3, // 000AD1C3 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x76, // 00068076 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x67, // 00071E67 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0xE4, // 000706E4 - 0x00, 0x0A, 0xD1, 0x4F, // 000AD14F - 0x00, 0x08, 0x10, 0xC2, // 000810C2 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x1C, // 0006981C - 0x00, 0x07, 0x90, 0x04, // 00079004 - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x04, 0x14, 0x00, // 00041400 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x22, // 00069022 - 0x00, 0x04, 0x2F, 0x08, // 00042F08 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0F, 0x00, // 00070F00 - 0x00, 0x07, 0x54, 0x08, // 00075408 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x0A, 0xCC, 0x81, // 000ACC81 - 0x00, 0x08, 0x92, 0xC1, // 000892C1 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x11, 0xBD, // 000211BD - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x02, 0x12, 0x57, // 00021257 - 0x00, 0x07, 0x36, 0x63, // 00073663 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3D, 0xA4, // 00073DA4 - 0x00, 0x06, 0xB0, 0x20, // 0006B020 - 0x00, 0x04, 0x36, 0x08, // 00043608 - 0x00, 0x04, 0x17, 0x08, // 00041708 - 0x00, 0x04, 0x06, 0x00, // 00040600 - 0x00, 0x07, 0x66, 0x00, // 00076600 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x5C, 0x80, // 00075C80 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3D, 0x00, // 00073D00 - 0x00, 0x0A, 0xC8, 0xC4, // 000AC8C4 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x36, 0xC4, // 000836C4 - 0x00, 0x0A, 0xC8, 0xC3, // 000AC8C3 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x12, 0x41, // 00081241 - 0x00, 0x0A, 0xC8, 0xC7, // 000AC8C7 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x12, 0x46, // 00021246 - 0x00, 0x09, 0x92, 0x51, // 00099251 - 0x00, 0x08, 0x36, 0xC2, // 000836C2 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3D, 0xBF, // 00073DBF - 0x00, 0x06, 0xAC, 0x6D, // 0006AC6D - 0x00, 0x06, 0xAC, 0x6C, // 0006AC6C - 0x00, 0x04, 0x06, 0x08, // 00040608 - 0x00, 0x04, 0x07, 0x08, // 00040708 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x62, // 00070E62 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x2D, // 0007142D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x1C, // 0006881C - 0x00, 0x04, 0x0C, 0x00, // 00040C00 - 0x00, 0x0A, 0xD2, 0xC1, // 000AD2C1 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x4F, // 0006904F - 0x00, 0x06, 0x94, 0x77, // 00069477 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x39, // 00070639 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x61, // 00070E61 - 0x00, 0x07, 0x54, 0x12, // 00075412 - 0x00, 0x07, 0x14, 0x30, // 00071430 - 0x00, 0x06, 0x84, 0x1C, // 0006841C - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x06, 0x88, 0x1C, // 0006881C - 0x00, 0x04, 0x0C, 0x00, // 00040C00 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x04, 0x37, 0x08, // 00043708 - 0x00, 0x09, 0xAC, 0x7F, // 0009AC7F - 0x00, 0x0A, 0xC1, 0x50, // 000AC150 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0A, 0x24, 0x7F, // 000A247F - 0x00, 0x0A, 0xC9, 0xC2, // 000AC9C2 - 0x00, 0x08, 0x0B, 0xC1, // 00080BC1 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0xA4, 0x00, // 0007A400 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x07, 0x8C, 0x00, // 00078C00 - 0x00, 0x07, 0xAC, 0x00, // 0007AC00 - 0x00, 0x04, 0xA8, 0x00, // 0004A800 - 0x00, 0x07, 0xB4, 0x00, // 0007B400 - 0x00, 0x06, 0x84, 0x45, // 00068445 - 0x00, 0x06, 0x84, 0x46, // 00068446 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x40, // 00071640 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x26, 0x90, // 00072690 - 0x00, 0x0B, 0x49, 0x75, // 000B4975 - 0x00, 0x06, 0x94, 0x1E, // 0006941E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA4, 0x1F, // 0006A41F - 0x00, 0x06, 0x8C, 0x15, // 00068C15 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6A, // 0007066A - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x17, 0x08, // 00041708 - 0x00, 0x04, 0x1F, 0x08, // 00041F08 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x04, 0x2F, 0x08, // 00042F08 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x06, 0xA4, 0x65, // 0006A465 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x84, 0x0D, // 0007840D - 0x00, 0x07, 0x8C, 0x5D, // 00078C5D - 0x00, 0x06, 0xAC, 0x79, // 0006AC79 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6C, // 0007066C - 0x00, 0x0B, 0x76, 0x41, // 000B7641 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0C, 0x0B, 0x0D, // 000C0B0D - 0x00, 0x0C, 0x13, 0x0D, // 000C130D - 0x00, 0x0C, 0x1B, 0x0D, // 000C1B0D - 0x00, 0x0C, 0x23, 0x0D, // 000C230D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB4, 0x6A, // 0006B46A - 0x00, 0x06, 0x8C, 0x66, // 00068C66 - 0x00, 0x06, 0x94, 0x67, // 00069467 - 0x00, 0x06, 0x9C, 0x68, // 00069C68 - 0x00, 0x06, 0xA4, 0x69, // 0006A469 - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x07, 0x27, 0x12, // 00072712 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x03, 0x00, // 00040300 - 0x00, 0x04, 0x0B, 0x00, // 00040B00 - 0x00, 0x04, 0x13, 0x00, // 00041300 - 0x00, 0x04, 0x1B, 0x00, // 00041B00 - 0x00, 0x06, 0xA0, 0x22, // 0006A022 - 0x00, 0x07, 0x80, 0x0F, // 0007800F - 0x00, 0x07, 0x88, 0x0F, // 0007880F - 0x00, 0x07, 0x90, 0x0F, // 0007900F - 0x00, 0x07, 0x98, 0x07, // 00079807 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x0A, 0xC4, 0x81, // 000AC481 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0x80, 0x74, // 00098074 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x66, // 00071E66 - 0x00, 0x07, 0x64, 0x04, // 00076404 - 0x00, 0x07, 0x24, 0x08, // 00072408 - 0x00, 0x08, 0x88, 0x41, // 00088841 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x12, 0x8F, // 0002128F - 0x00, 0x07, 0x56, 0x00, // 00075600 - 0x00, 0x07, 0x14, 0x01, // 00071401 - 0x00, 0x06, 0xA0, 0x08, // 0006A008 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x20, // 00069820 - 0x00, 0x07, 0x90, 0x06, // 00079006 - 0x00, 0x08, 0x98, 0x42, // 00089842 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x18, 0x00, // 00021800 - 0x00, 0x07, 0x56, 0x00, // 00075600 - 0x00, 0x07, 0x14, 0x02, // 00071402 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x90, 0x06, // 00079006 - 0x00, 0x02, 0x10, 0x54, // 00021054 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x64, 0x68, // 000B6468 - 0x00, 0x0A, 0xBE, 0xC4, // 000ABEC4 - 0x00, 0x09, 0xA4, 0x46, // 0009A446 - 0x00, 0x0B, 0x7F, 0xC7, // 000B7FC7 - 0x00, 0x06, 0xB8, 0x0F, // 0006B80F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA4, 0x05, // 0006A405 - 0x00, 0x06, 0xBC, 0x0D, // 0006BC0D - 0x00, 0x01, 0x41, 0x00, // 00014100 - 0x00, 0x06, 0xAC, 0x0F, // 0006AC0F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x06, 0xB4, 0x0D, // 0006B40D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xBD, 0x4A, // 0009BD4A - 0x00, 0x09, 0xB6, 0x7C, // 0009B67C - 0x00, 0x0A, 0xE4, 0x40, // 000AE440 - 0x00, 0x06, 0xB8, 0x0F, // 0006B80F - 0x00, 0x07, 0x6F, 0xFF, // 00076FFF - 0x00, 0x07, 0x2F, 0xFF, // 00072FFF - 0x00, 0x01, 0x03, 0xA6, // 000103A6 - 0x00, 0x0A, 0x2D, 0x7C, // 000A2D7C - 0x00, 0x09, 0xA4, 0x41, // 0009A441 - 0x00, 0x09, 0xBF, 0x41, // 0009BF41 - 0x00, 0x08, 0xE4, 0xC5, // 0008E4C5 - 0x00, 0x09, 0x1E, 0xC4, // 00091EC4 - 0x00, 0x02, 0x87, 0x10, // 00028710 - 0x00, 0x0A, 0xE3, 0xC3, // 000AE3C3 - 0x00, 0x08, 0xBF, 0xC5, // 0008BFC5 - 0x00, 0x07, 0x75, 0xD9, // 000775D9 - 0x00, 0x07, 0x36, 0x23, // 00073623 - 0x00, 0x09, 0xA7, 0x40, // 0009A740 - 0x00, 0x07, 0x6D, 0x14, // 00076D14 - 0x00, 0x0C, 0x36, 0x27, // 000C3627 - 0x00, 0x07, 0x2F, 0x2C, // 00072F2C - 0x00, 0x0B, 0x7D, 0x75, // 000B7D75 - 0x00, 0x08, 0xAD, 0xC4, // 0008ADC4 - 0x00, 0x00, 0xC7, 0x87, // 0000C787 - 0x00, 0x0A, 0x6E, 0xC6, // 000A6EC6 - 0x00, 0x09, 0xA4, 0x44, // 0009A444 - 0x00, 0x08, 0xAD, 0x41, // 0008AD41 - 0x00, 0x09, 0xA4, 0xC5, // 0009A4C5 - 0x00, 0x09, 0xAD, 0x43, // 0009AD43 - 0x00, 0x09, 0xB4, 0x6D, // 0009B46D - 0x00, 0x09, 0xA4, 0x49, // 0009A449 - 0x00, 0x0A, 0xF6, 0x7F, // 000AF67F - 0x00, 0x0A, 0x24, 0x77, // 000A2477 - 0x00, 0x02, 0x86, 0x30, // 00028630 - 0x00, 0x08, 0x36, 0x41, // 00083641 - 0x00, 0x08, 0xBE, 0x48, // 0008BE48 - 0x00, 0x02, 0x87, 0x18, // 00028718 - 0x00, 0x09, 0xA4, 0x49, // 0009A449 - 0x00, 0x08, 0xB6, 0x41, // 0008B641 - 0x00, 0x09, 0xA4, 0x77, // 0009A477 - 0x00, 0x0B, 0x7F, 0x74, // 000B7F74 - 0x00, 0x08, 0xB6, 0x44, // 0008B644 - 0x00, 0x02, 0x9E, 0x20, // 00029E20 - 0x00, 0x0B, 0x5B, 0x41, // 000B5B41 - 0x00, 0x08, 0x36, 0x41, // 00083641 - 0x00, 0x09, 0x9B, 0x53, // 00099B53 - 0x00, 0x08, 0x24, 0xC3, // 000824C3 - 0x00, 0x08, 0xB6, 0x41, // 0008B641 - 0x00, 0x00, 0xC7, 0x87, // 0000C787 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x09, 0xB6, 0x4F, // 0009B64F - 0x00, 0x08, 0x35, 0xC6, // 000835C6 - 0x00, 0x0B, 0x3F, 0xC7, // 000B3FC7 - 0x00, 0x0A, 0xEC, 0xC4, // 000AECC4 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0D, 0x00, // 00070D00 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x69, // 00071E69 - 0x00, 0x0B, 0x64, 0x7F, // 000B647F - 0x00, 0x06, 0x90, 0x78, // 00069078 - 0x00, 0x0B, 0x6D, 0x7E, // 000B6D7E - 0x00, 0x06, 0x98, 0x22, // 00069822 - 0x00, 0x0A, 0xDF, 0x84, // 000ADF84 - 0x00, 0x0A, 0xDF, 0x85, // 000ADF85 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x77, // 00069877 - 0x00, 0x06, 0x98, 0x7A, // 0006987A - 0x00, 0x06, 0xB8, 0x68, // 0006B868 - 0x00, 0x06, 0xB8, 0x69, // 0006B869 - 0x00, 0x06, 0xB8, 0x6F, // 0006B86F - 0x00, 0x06, 0xB8, 0x70, // 0006B870 - 0x00, 0x06, 0xB8, 0x71, // 0006B871 - 0x00, 0x06, 0xB8, 0x72, // 0006B872 - 0x00, 0x06, 0xB8, 0x73, // 0006B873 - 0x00, 0x06, 0xB8, 0x74, // 0006B874 - 0x00, 0x06, 0xB8, 0x75, // 0006B875 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x28, 0x6A, // 0006286A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA8, 0x61, // 0006A861 - 0x00, 0x07, 0x65, 0x5D, // 0007655D - 0x00, 0x07, 0x24, 0x10, // 00072410 - 0x00, 0x06, 0x30, 0x6C, // 0006306C - 0x00, 0x07, 0x6D, 0x59, // 00076D59 - 0x00, 0x07, 0x2C, 0x50, // 00072C50 - 0x00, 0x08, 0xB6, 0x40, // 0008B640 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x07, 0x65, 0x05, // 00076505 - 0x00, 0x07, 0x25, 0x70, // 00072570 - 0x00, 0x07, 0x6D, 0x15, // 00076D15 - 0x00, 0x07, 0x2D, 0x60, // 00072D60 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA0, 0x66, // 0006A066 - 0x00, 0x06, 0xA8, 0x67, // 0006A867 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x20, // 00071C20 - 0x00, 0x07, 0x7C, 0x01, // 00077C01 - 0x00, 0x07, 0x3D, 0xFF, // 00073DFF - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x00, // 00070E00 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x07, 0x35, 0xFF, // 000735FF - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x26, 0x98, // 00072698 - 0x00, 0x07, 0x6C, 0x01, // 00076C01 - 0x00, 0x07, 0x2C, 0x90, // 00072C90 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x90, // 00070490 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x06, 0x98, 0x15, // 00069815 - 0x00, 0x06, 0xB8, 0x16, // 0006B816 - 0x00, 0x06, 0xB4, 0x14, // 0006B414 - 0x00, 0x06, 0x88, 0x28, // 00068828 - 0x00, 0x06, 0x88, 0x22, // 00068822 - 0x00, 0x06, 0x90, 0x2E, // 0006902E - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x06, 0x90, 0x20, // 00069020 - 0x00, 0x06, 0x9C, 0x1C, // 00069C1C - 0x00, 0x06, 0xB4, 0x26, // 0006B426 - 0x00, 0x06, 0xB4, 0x24, // 0006B424 - 0x00, 0x06, 0xB4, 0x2E, // 0006B42E - 0x00, 0x06, 0xA0, 0x29, // 0006A029 - 0x00, 0x06, 0xA8, 0x1D, // 0006A81D - 0x00, 0x06, 0xA8, 0x21, // 0006A821 - 0x00, 0x06, 0xA8, 0x2F, // 0006A82F - 0x00, 0x06, 0x84, 0x1D, // 0006841D - 0x00, 0x08, 0x3F, 0x41, // 00083F41 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x01, 0x01, 0x21, // 00010121 - 0x00, 0x06, 0xB8, 0x6E, // 0006B86E - 0x00, 0x07, 0xA8, 0x0F, // 0007A80F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x38, 0x78, // 00063878 - 0x00, 0x07, 0x44, 0x05, // 00074405 - 0x00, 0x07, 0x05, 0x89, // 00070589 - 0x00, 0x07, 0x4C, 0x05, // 00074C05 - 0x00, 0x07, 0x0D, 0x4B, // 00070D4B - 0x00, 0x07, 0x54, 0x05, // 00075405 - 0x00, 0x07, 0x15, 0x59, // 00071559 - 0x00, 0x07, 0x5C, 0x05, // 00075C05 - 0x00, 0x07, 0x1D, 0xBD, // 00071DBD - 0x00, 0x08, 0xBF, 0x40, // 0008BF40 - 0x00, 0x02, 0x9F, 0x40, // 00029F40 - 0x00, 0x07, 0x44, 0x05, // 00074405 - 0x00, 0x07, 0x04, 0xC8, // 000704C8 - 0x00, 0x07, 0x4C, 0x05, // 00074C05 - 0x00, 0x07, 0x0C, 0xEE, // 00070CEE - 0x00, 0x07, 0x54, 0x05, // 00075405 - 0x00, 0x07, 0x14, 0xF8, // 000714F8 - 0x00, 0x07, 0x5C, 0x05, // 00075C05 - 0x00, 0x07, 0x1D, 0x16, // 00071D16 - 0x00, 0x06, 0x80, 0x09, // 00068009 - 0x00, 0x06, 0x88, 0x0D, // 0006880D - 0x00, 0x06, 0x90, 0x0C, // 0006900C - 0x00, 0x06, 0x98, 0x0B, // 0006980B - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x27, 0x20, // 00072720 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x3F, 0x00, // 00043F00 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x0A, 0xFF, 0x44, // 000AFF44 - 0x00, 0x06, 0xA0, 0x5B, // 0006A05B - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x27, 0x00, // 00072700 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x10, // 00071C10 - 0x00, 0x08, 0x80, 0x40, // 00088040 - 0x00, 0x06, 0xA0, 0x5B, // 0006A05B - 0x00, 0x02, 0x9E, 0x20, // 00029E20 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x64, 0x04, // 00076404 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x1C, 0x30, // 00071C30 - 0x00, 0x08, 0x24, 0xC7, // 000824C7 - 0x00, 0x06, 0x88, 0x4B, // 0006884B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x9C, 0x06, // 00069C06 - 0x00, 0x06, 0xA0, 0x5B, // 0006A05B - 0x00, 0x06, 0xA4, 0x76, // 0006A476 - 0x00, 0x06, 0x28, 0x77, // 00062877 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x40, // 00071640 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x90, // 00072490 - 0x00, 0x0B, 0x49, 0x7D, // 000B497D - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6C, // 0007066C - 0x00, 0x06, 0x90, 0x1E, // 0006901E - 0x00, 0x06, 0xA0, 0x1F, // 0006A01F - 0x00, 0x06, 0x88, 0x14, // 00068814 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x17, 0x08, // 00041708 - 0x00, 0x04, 0x1F, 0x08, // 00041F08 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x08, 0xAD, 0x40, // 0008AD40 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x07, 0x88, 0x0D, // 0007880D - 0x00, 0x07, 0x90, 0x0D, // 0007900D - 0x00, 0x07, 0x98, 0x0D, // 0007980D - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xC1, 0x05, // 0000C105 - 0x00, 0x07, 0x44, 0x04, // 00074404 - 0x00, 0x07, 0x07, 0x43, // 00070743 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x06, 0x38, 0x61, // 00063861 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0xBF, 0x40, // 0008BF40 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x13, 0x6E, // 0002136E - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x20, // 00071420 - 0x00, 0x06, 0x18, 0x1C, // 0006181C - 0x00, 0x09, 0x12, 0xC0, // 000912C0 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x10, 0x6E, // 0006106E - 0x00, 0x08, 0x9B, 0x44, // 00089B44 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x1B, 0xC2, // 00081BC2 - 0x00, 0x07, 0x45, 0x5D, // 0007455D - 0x00, 0x07, 0x04, 0x10, // 00070410 - 0x00, 0x07, 0x4D, 0x59, // 00074D59 - 0x00, 0x07, 0x0C, 0x50, // 00070C50 - 0x00, 0x06, 0x98, 0x1C, // 0006981C - 0x00, 0x00, 0xC1, 0x04, // 0000C104 - 0x00, 0x07, 0x54, 0x04, // 00075404 - 0x00, 0x07, 0x17, 0x60, // 00071760 - 0x00, 0x09, 0x80, 0x48, // 00098048 - 0x00, 0x09, 0x89, 0x78, // 00098978 - 0x00, 0x08, 0x38, 0xC1, // 000838C1 - 0x00, 0x06, 0x90, 0x0F, // 0006900F - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x65, // 00071665 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x22, // 00069022 - 0x00, 0x07, 0x88, 0x03, // 00078803 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x69, // 00068869 - 0x00, 0x06, 0x88, 0x61, // 00068861 - 0x00, 0x06, 0x08, 0x6F, // 0006086F - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x08, 0x89, 0x41, // 00088941 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x13, 0x8B, // 0002138B - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x88, 0x42, // 00088842 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0xC1, 0x01, // 0000C101 - 0x00, 0x07, 0x44, 0x04, // 00074404 - 0x00, 0x07, 0x07, 0x7F, // 0007077F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x6F, // 0006906F - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x06, 0x10, 0x66, // 00061066 - 0x00, 0x08, 0x90, 0xC2, // 000890C2 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x16, 0x14, // 00021614 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x10, 0x67, // 00061067 - 0x00, 0x08, 0x91, 0xC2, // 000891C2 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x16, 0x14, // 00021614 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x10, 0x76, // 00061076 - 0x00, 0x06, 0x08, 0x7A, // 0006087A - 0x00, 0x0A, 0x00, 0xC2, // 000A00C2 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x20, // 00071420 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x90, 0xC2, // 000890C2 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x0C, 0x26, // 00060C26 - 0x00, 0x06, 0x14, 0x1C, // 0006141C - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x00, // 00071E00 - 0x00, 0x08, 0x89, 0xC2, // 000889C2 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x09, 0xC3, // 000809C3 - 0x00, 0x06, 0x24, 0x24, // 00062424 - 0x00, 0x09, 0x22, 0xC4, // 000922C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x24, 0xC3, // 000824C3 - 0x00, 0x09, 0x29, 0xC4, // 000929C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x0C, 0x40, // 00080C40 - 0x00, 0x06, 0x24, 0x2E, // 0006242E - 0x00, 0x09, 0x22, 0xC4, // 000922C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x24, 0xC3, // 000824C3 - 0x00, 0x09, 0x29, 0xC4, // 000929C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x0C, 0x40, // 00080C40 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x20, // 00072C20 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x89, 0xC5, // 000889C5 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x6D, 0x70, // 000B6D70 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x04, 0xB8, 0x0D, // 0004B80D - 0x00, 0x06, 0xA8, 0x79, // 0006A879 - 0x00, 0x09, 0xBF, 0x7C, // 0009BF7C - 0x00, 0x00, 0xC1, 0x01, // 0000C101 - 0x00, 0x07, 0x44, 0x04, // 00074404 - 0x00, 0x07, 0x07, 0xC5, // 000707C5 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x06, 0x18, 0x76, // 00061876 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x08, 0x29, 0x40, // 00082940 - 0x00, 0x08, 0x08, 0x40, // 00080840 - 0x00, 0x0C, 0x31, 0x08, // 000C3108 - 0x00, 0x0E, 0x31, 0x09, // 000E3109 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x10, 0x73, // 00061073 - 0x00, 0x0C, 0x01, 0x08, // 000C0108 - 0x00, 0x0E, 0x01, 0x09, // 000E0109 - 0x00, 0x0A, 0xF6, 0x7C, // 000AF67C - 0x00, 0x09, 0xA7, 0x7F, // 0009A77F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x36, 0x42, // 00083642 - 0x00, 0x0A, 0xC0, 0x7C, // 000AC07C - 0x00, 0x09, 0xBF, 0x7F, // 0009BF7F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x00, 0x42, // 00080042 - 0x00, 0x06, 0x20, 0x79, // 00062079 - 0x00, 0x08, 0x12, 0x42, // 00081242 - 0x00, 0x08, 0xA4, 0x41, // 0008A441 - 0x00, 0x07, 0xF4, 0x0C, // 0007F40C - 0x00, 0x07, 0xC4, 0x0C, // 0007C40C - 0x00, 0x02, 0x9F, 0x50, // 00029F50 - 0x00, 0x06, 0x90, 0x73, // 00069073 - 0x00, 0x06, 0xA0, 0x79, // 0006A079 - 0x00, 0x08, 0x9B, 0x41, // 00089B41 - 0x00, 0x02, 0x87, 0x20, // 00028720 - 0x00, 0x08, 0x0D, 0x40, // 00080D40 - 0x00, 0x08, 0x05, 0x40, // 00080540 - 0x00, 0x02, 0x13, 0xCB, // 000213CB - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x02, 0x13, 0xBE, // 000213BE - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x00, 0x74, // 00060074 - 0x00, 0x06, 0x0C, 0x1C, // 00060C1C - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x14, 0x80, // 00071480 - 0x00, 0x08, 0x80, 0x40, // 00088040 - 0x00, 0x02, 0x9E, 0x48, // 00029E48 - 0x00, 0x08, 0x91, 0xC2, // 000891C2 - 0x00, 0x02, 0x89, 0x38, // 00028938 - 0x00, 0x02, 0x15, 0xDB, // 000215DB - 0x00, 0x07, 0x44, 0x04, // 00074404 - 0x00, 0x07, 0x07, 0xF8, // 000707F8 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0E, // 0006800E - 0x00, 0x02, 0x16, 0x52, // 00021652 - 0x00, 0x07, 0x4C, 0x04, // 00074C04 - 0x00, 0x07, 0x0F, 0xFF, // 00070FFF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x06, 0x00, 0x69, // 00060069 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x65, // 00070E65 - 0x00, 0x08, 0x00, 0x41, // 00080041 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x20, // 00071420 - 0x00, 0x06, 0x18, 0x76, // 00061876 - 0x00, 0x0A, 0x12, 0xC3, // 000A12C3 - 0x00, 0x06, 0x88, 0x22, // 00068822 - 0x00, 0x08, 0x92, 0x41, // 00089241 - 0x00, 0x0A, 0xC0, 0xC2, // 000AC0C2 - 0x00, 0x04, 0x0F, 0x00, // 00040F00 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x09, 0x41, // 00080941 - 0x00, 0x06, 0x00, 0x6A, // 0006006A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x69, // 00068069 - 0x00, 0x07, 0x88, 0x07, // 00078807 - 0x00, 0x06, 0x80, 0x6F, // 0006806F - 0x00, 0x00, 0xC1, 0x03, // 0000C103 - 0x00, 0x07, 0x44, 0x05, // 00074405 - 0x00, 0x07, 0x04, 0x1B, // 0007041B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x06, 0x04, 0x26, // 00060426 - 0x00, 0x06, 0x28, 0x7A, // 0006287A - 0x00, 0x06, 0x38, 0x7A, // 0006387A - 0x00, 0x06, 0x0C, 0x1C, // 00060C1C - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x06, 0x18, 0x70, // 00061870 - 0x00, 0x08, 0x80, 0xC1, // 000880C1 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x07, 0x74, 0x00, // 00077400 - 0x00, 0x07, 0x34, 0x40, // 00073440 - 0x00, 0x06, 0x08, 0x74, // 00060874 - 0x00, 0x08, 0xA5, 0x41, // 0008A541 - 0x00, 0x02, 0x9E, 0x30, // 00029E30 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x08, 0xA0, 0xC6, // 0008A0C6 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x02, 0x81, 0x80, // 00028180 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x70, // 00029F70 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x21, // 00072421 - 0x00, 0x08, 0x93, 0xC0, // 000893C0 - 0x00, 0x06, 0x80, 0x70, // 00068070 - 0x00, 0x06, 0xA8, 0x7A, // 0006A87A - 0x00, 0x08, 0x94, 0xC2, // 000894C2 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x16, 0x11, // 00021611 - 0x00, 0x07, 0x44, 0x05, // 00074405 - 0x00, 0x07, 0x04, 0x40, // 00070440 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x01, // 00070C01 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x81, 0x10, // 00028110 - 0x00, 0x02, 0x14, 0xAC, // 000214AC - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x80, 0x07, // 00078007 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xC7, 0x81, // 000AC781 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x14, 0xC1, // 000214C1 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x69, // 00070669 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x01, // 00070C01 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6C, // 0007066C - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x06, 0x10, 0x7A, // 0006107A - 0x00, 0x06, 0x18, 0x77, // 00061877 - 0x00, 0x04, 0x25, 0x08, // 00042508 - 0x00, 0x04, 0x2D, 0x08, // 00042D08 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0x3D, 0x08, // 00043D08 - 0x00, 0x0A, 0xCF, 0x81, // 000ACF81 - 0x00, 0x02, 0x9F, 0x70, // 00029F70 - 0x00, 0x06, 0x0C, 0x6A, // 00060C6A - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9E, 0x50, // 00029E50 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9F, 0x30, // 00029F30 - 0x00, 0x0B, 0x49, 0x41, // 000B4941 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x06, 0x0C, 0x65, // 00060C65 - 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F - 0x00, 0x02, 0x81, 0x70, // 00028170 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x06, 0x0C, 0x6A, // 00060C6A - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9F, 0x50, // 00029F50 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9F, 0x30, // 00029F30 - 0x00, 0x0B, 0x49, 0x41, // 000B4941 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x04, 0x2F, 0x08, // 00042F08 - 0x00, 0x04, 0x37, 0x08, // 00043708 - 0x00, 0x04, 0x3F, 0x08, // 00043F08 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x06, 0x0C, 0x65, // 00060C65 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x06, 0x04, 0x6A, // 0006046A - 0x00, 0x06, 0x14, 0x65, // 00061465 - 0x00, 0x09, 0x00, 0xC2, // 000900C2 - 0x00, 0x08, 0x11, 0x41, // 00081141 - 0x00, 0x02, 0x9F, 0x18, // 00029F18 - 0x00, 0x08, 0x10, 0x41, // 00081041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x08, 0x40, // 00080840 - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x07, 0xA8, 0x0D, // 0007A80D - 0x00, 0x07, 0xB0, 0x0D, // 0007B00D - 0x00, 0x06, 0x8C, 0x6A, // 00068C6A - 0x00, 0x07, 0xB8, 0x0D, // 0007B80D - 0x00, 0x06, 0x98, 0x77, // 00069877 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x69, // 00070669 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x02, // 00070C02 - 0x00, 0x06, 0x10, 0x7A, // 0006107A - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xC3, 0x81, // 000AC381 - 0x00, 0x02, 0x9F, 0x58, // 00029F58 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9E, 0x40, // 00029E40 - 0x00, 0x0B, 0x52, 0x7E, // 000B527E - 0x00, 0x02, 0x16, 0x2E, // 0002162E - 0x00, 0x07, 0x44, 0x05, // 00074405 - 0x00, 0x07, 0x04, 0xAC, // 000704AC - 0x00, 0x06, 0x90, 0x7A, // 0006907A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x02, 0x81, 0x18, // 00028118 - 0x00, 0x08, 0x9A, 0x42, // 00089A42 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x7A, // 0006907A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x00, 0x6D, // 0006006D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xC0, 0x6D, // 0006C06D - 0x00, 0x02, 0x3F, 0xCC, // 00023FCC - 0x00, 0x07, 0x6C, 0x05, // 00076C05 - 0x00, 0x07, 0x2C, 0xBA, // 00072CBA - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x13, 0x3B, // 0002133B - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xC1, 0x80, // 0000C180 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x10, 0x68, // 00061068 - 0x00, 0x04, 0x04, 0x08, // 00040408 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x14, 0xDD, // 000214DD - 0x00, 0x06, 0x28, 0x6C, // 0006286C - 0x00, 0x04, 0x0C, 0x08, // 00040C08 - 0x00, 0x07, 0x64, 0x3F, // 0007643F - 0x00, 0x07, 0x27, 0xFF, // 000727FF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xA4, 0x44, // 0009A444 - 0x00, 0x04, 0x14, 0x00, // 00041400 - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x0A, 0xD2, 0xC4, // 000AD2C4 - 0x00, 0x09, 0x80, 0x48, // 00098048 - 0x00, 0x09, 0xB1, 0x78, // 0009B178 - 0x00, 0x08, 0x00, 0xC6, // 000800C6 - 0x00, 0x09, 0x89, 0x48, // 00098948 - 0x00, 0x09, 0xB2, 0x78, // 0009B278 - 0x00, 0x08, 0x09, 0xC6, // 000809C6 - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x08, 0xAD, 0x40, // 0008AD40 - 0x00, 0x02, 0x9F, 0x30, // 00029F30 - 0x00, 0x09, 0x90, 0x48, // 00099048 - 0x00, 0x09, 0xB0, 0x78, // 0009B078 - 0x00, 0x08, 0x02, 0xC6, // 000802C6 - 0x00, 0x09, 0x91, 0x48, // 00099148 - 0x00, 0x09, 0xB1, 0x78, // 0009B178 - 0x00, 0x08, 0x0A, 0xC6, // 00080AC6 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x18, 0x68, // 00061868 - 0x00, 0x06, 0x00, 0x1C, // 0006001C - 0x00, 0x09, 0x9B, 0x7D, // 00099B7D - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x06, 0x08, 0x20, // 00060820 - 0x00, 0x06, 0x10, 0x6E, // 0006106E - 0x00, 0x08, 0x81, 0xC0, // 000881C0 - 0x00, 0x09, 0x03, 0xC0, // 000903C0 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x01, 0x0A, 0x20, // 00010A20 - 0x00, 0x0B, 0x49, 0x7F, // 000B497F - 0x00, 0x04, 0x14, 0x00, // 00041400 - 0x00, 0x0B, 0x76, 0x78, // 000B7678 - 0x00, 0x09, 0x92, 0x48, // 00099248 - 0x00, 0x09, 0x89, 0x48, // 00098948 - 0x00, 0x09, 0x9A, 0x68, // 00099A68 - 0x00, 0x08, 0x09, 0xC3, // 000809C3 - 0x00, 0x08, 0x9F, 0xC1, // 00089FC1 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x06, 0xB0, 0x68, // 0006B068 - 0x00, 0x09, 0x92, 0x48, // 00099248 - 0x00, 0x09, 0x89, 0x48, // 00098948 - 0x00, 0x09, 0x9A, 0x68, // 00099A68 - 0x00, 0x08, 0x09, 0xC3, // 000809C3 - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x04, 0x14, 0x08, // 00041408 - 0x00, 0x08, 0x9F, 0xC1, // 00089FC1 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x06, 0xB0, 0x68, // 0006B068 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x30, 0x71, // 00063071 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x08, 0xB6, 0x40, // 0008B640 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x15, 0x31, // 00021531 - 0x00, 0x06, 0x18, 0x7A, // 0006187A - 0x00, 0x06, 0x30, 0x72, // 00063072 - 0x00, 0x07, 0x06, 0x00, // 00070600 - 0x00, 0x06, 0x08, 0x28, // 00060828 - 0x00, 0x08, 0x38, 0x41, // 00083841 - 0x00, 0x08, 0x90, 0xC1, // 000890C1 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x07, 0x54, 0x03, // 00075403 - 0x00, 0x07, 0x17, 0xF0, // 000717F0 - 0x00, 0x06, 0xB8, 0x22, // 0006B822 - 0x00, 0x01, 0x04, 0x90, // 00010490 - 0x00, 0x09, 0x92, 0x48, // 00099248 - 0x00, 0x0A, 0xE7, 0x8A, // 000AE78A - 0x00, 0x0A, 0xEF, 0x8A, // 000AEF8A - 0x00, 0x08, 0x36, 0x41, // 00083641 - 0x00, 0x09, 0xAD, 0x78, // 0009AD78 - 0x00, 0x08, 0x24, 0xC5, // 000824C5 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB0, 0x72, // 0006B072 - 0x00, 0x07, 0xE0, 0x0E, // 0007E00E - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x06, 0xB0, 0x71, // 0006B071 - 0x00, 0x06, 0x08, 0x20, // 00060820 - 0x00, 0x06, 0x00, 0x1C, // 0006001C - 0x00, 0x06, 0x10, 0x6E, // 0006106E - 0x00, 0x08, 0x81, 0xC0, // 000881C0 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1D, 0xE8, // 00071DE8 - 0x00, 0x0B, 0x76, 0x7F, // 000B767F - 0x00, 0x08, 0x93, 0xC0, // 000893C0 - 0x00, 0x02, 0x88, 0x08, // 00028808 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x05, 0x38, // 00070538 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB0, 0x71, // 0006B071 - 0x00, 0x06, 0xB8, 0x28, // 0006B828 - 0x00, 0x06, 0x80, 0x4B, // 0006804B - 0x00, 0x06, 0x00, 0x1C, // 0006001C - 0x00, 0x06, 0x08, 0x20, // 00060820 - 0x00, 0x06, 0x10, 0x6E, // 0006106E - 0x00, 0x08, 0x81, 0xC0, // 000881C0 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x06, 0x18, 0x68, // 00061868 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x0A, 0x10, 0x44, // 000A1044 - 0x00, 0x0A, 0x20, 0x42, // 000A2042 - 0x00, 0x08, 0x12, 0xC4, // 000812C4 - 0x00, 0x09, 0x03, 0xC2, // 000903C2 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0x00, 0x7C, // 000A007C - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x20, // 00070420 - 0x00, 0x07, 0x54, 0x05, // 00075405 - 0x00, 0x07, 0x15, 0x7C, // 0007157C - 0x00, 0x0B, 0x49, 0x41, // 000B4941 - 0x00, 0x0B, 0x64, 0x7F, // 000B647F - 0x00, 0x0B, 0x5B, 0x78, // 000B5B78 - 0x00, 0x09, 0xA4, 0x7C, // 0009A47C - 0x00, 0x06, 0x90, 0x0A, // 0006900A - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x09, 0x94, 0x83, // 00099483 - 0x00, 0x08, 0x36, 0x41, // 00083641 - 0x00, 0x09, 0x89, 0x41, // 00098941 - 0x00, 0x09, 0x92, 0x41, // 00099241 - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x09, 0xC4, // 000809C4 - 0x00, 0x01, 0x04, 0x13, // 00010413 - 0x00, 0x08, 0xAF, 0xC1, // 0008AFC1 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x00, 0xC1, 0x82, // 0000C182 - 0x00, 0x08, 0x36, 0x41, // 00083641 - 0x00, 0x09, 0x89, 0x41, // 00098941 - 0x00, 0x09, 0x92, 0x41, // 00099241 - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x09, 0xC4, // 000809C4 - 0x00, 0x08, 0xAF, 0xC1, // 0008AFC1 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x00, 0xC1, 0x82, // 0000C182 - 0x00, 0x04, 0x2C, 0x08, // 00042C08 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x15, 0x62, // 00021562 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x08, 0xAE, 0x54, // 0008AE54 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB0, 0x68, // 0006B068 - 0x00, 0x04, 0x34, 0x08, // 00043408 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x10, 0x68, // 00061068 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x82, 0x47, // 00088247 - 0x00, 0x02, 0x88, 0x08, // 00028808 - 0x00, 0x02, 0x15, 0x96, // 00021596 - 0x00, 0x0B, 0x64, 0x41, // 000B6441 - 0x00, 0x08, 0x9A, 0x54, // 00089A54 - 0x00, 0x09, 0xA4, 0x78, // 0009A478 - 0x00, 0x0A, 0xEC, 0x8C, // 000AEC8C - 0x00, 0x0A, 0xE4, 0x7F, // 000AE47F - 0x00, 0x0A, 0xF4, 0x84, // 000AF484 - 0x00, 0x0A, 0xF4, 0x8C, // 000AF48C - 0x00, 0x0A, 0xCC, 0x84, // 000ACC84 - 0x00, 0x07, 0x64, 0x3F, // 0007643F - 0x00, 0x07, 0x27, 0xFF, // 000727FF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xA4, 0x44, // 0009A444 - 0x00, 0x09, 0x85, 0xC2, // 000985C2 - 0x00, 0x09, 0x86, 0xC3, // 000986C3 - 0x00, 0x08, 0x00, 0xC0, // 000800C0 - 0x00, 0x08, 0x12, 0x50, // 00081250 - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x08, 0x9A, 0x54, // 00089A54 - 0x00, 0x02, 0x87, 0x18, // 00028718 - 0x00, 0x08, 0x92, 0x54, // 00089254 - 0x00, 0x08, 0x2E, 0x40, // 00082E40 - 0x00, 0x08, 0x31, 0x40, // 00083140 - 0x00, 0x08, 0x9A, 0x54, // 00089A54 - 0x00, 0x09, 0x8D, 0xC2, // 00098DC2 - 0x00, 0x09, 0x8E, 0xC3, // 00098EC3 - 0x00, 0x08, 0x09, 0xC1, // 000809C1 - 0x00, 0x08, 0x12, 0x50, // 00081250 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x08, 0x9A, 0x54, // 00089A54 - 0x00, 0x02, 0x87, 0x08, // 00028708 - 0x00, 0x08, 0x92, 0x54, // 00089254 - 0x00, 0x06, 0x28, 0x6C, // 0006286C - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x06, 0x90, 0x68, // 00069068 - 0x00, 0x08, 0xAD, 0x40, // 0008AD40 - 0x00, 0x02, 0x9F, 0x30, // 00029F30 - 0x00, 0x09, 0x90, 0x48, // 00099048 - 0x00, 0x09, 0xB0, 0x78, // 0009B078 - 0x00, 0x08, 0x02, 0xC6, // 000802C6 - 0x00, 0x09, 0x91, 0x48, // 00099148 - 0x00, 0x09, 0xB1, 0x78, // 0009B178 - 0x00, 0x08, 0x0A, 0xC6, // 00080AC6 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x02, 0x81, 0x18, // 00028118 - 0x00, 0x07, 0x7C, 0x01, // 00077C01 - 0x00, 0x07, 0x3C, 0xC0, // 00073CC0 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x07, 0x35, 0x60, // 00073560 - 0x00, 0x06, 0x20, 0x2E, // 0006202E - 0x00, 0x06, 0x18, 0x1C, // 0006181C - 0x00, 0x06, 0x10, 0x6E, // 0006106E - 0x00, 0x06, 0x00, 0x75, // 00060075 - 0x00, 0x06, 0x08, 0x7A, // 0006087A - 0x00, 0x06, 0xA0, 0x20, // 0006A020 - 0x00, 0x08, 0x9C, 0xC3, // 00089CC3 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x1B, 0xC2, // 00081BC2 - 0x00, 0x09, 0x16, 0xC3, // 000916C3 - 0x00, 0x02, 0x89, 0x10, // 00028910 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x30, // 00070430 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9E, 0x20, // 00029E20 - 0x00, 0x08, 0x97, 0xC3, // 000897C3 - 0x00, 0x02, 0x89, 0x10, // 00028910 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x70, // 00070470 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x7F, // 0006987F - 0x00, 0x06, 0x84, 0x06, // 00068406 - 0x00, 0x06, 0x80, 0x75, // 00068075 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x15, 0xFC, // 000215FC - 0x00, 0x07, 0x4C, 0x05, // 00074C05 - 0x00, 0x07, 0x0D, 0xE2, // 00070DE2 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x32, // 00070E32 - 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x8C, 0x22, // 00068C22 - 0x00, 0x06, 0x5C, 0x14, // 00065C14 - 0x00, 0x06, 0xA8, 0x74, // 0006A874 - 0x00, 0x06, 0x5C, 0x24, // 00065C24 - 0x00, 0x06, 0x5C, 0x26, // 00065C26 - 0x00, 0x06, 0x5C, 0x2E, // 00065C2E - 0x00, 0x06, 0x5C, 0x25, // 00065C25 - 0x00, 0x06, 0x5C, 0x27, // 00065C27 - 0x00, 0x06, 0x5C, 0x2F, // 00065C2F - 0x00, 0x06, 0x5C, 0x44, // 00065C44 - 0x00, 0x04, 0x80, 0x03, // 00048003 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xC1, 0x06, // 0000C106 - 0x00, 0x06, 0x84, 0x74, // 00068474 - 0x00, 0x06, 0x84, 0x43, // 00068443 - 0x00, 0x06, 0x5C, 0x3C, // 00065C3C - 0x00, 0x06, 0x5C, 0x3B, // 00065C3B - 0x00, 0x06, 0x5C, 0x54, // 00065C54 - 0x00, 0x06, 0x5C, 0x53, // 00065C53 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x25, // 00070E25 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA8, 0x74, // 0006A874 - 0x00, 0x06, 0x8C, 0x22, // 00068C22 - 0x00, 0x06, 0x5C, 0x14, // 00065C14 - 0x00, 0x06, 0x5C, 0x24, // 00065C24 - 0x00, 0x06, 0x5C, 0x26, // 00065C26 - 0x00, 0x06, 0x5C, 0x2E, // 00065C2E - 0x00, 0x06, 0x5C, 0x25, // 00065C25 - 0x00, 0x06, 0x5C, 0x27, // 00065C27 - 0x00, 0x06, 0x5C, 0x2F, // 00065C2F - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x06, 0x5C, 0x44, // 00065C44 - 0x00, 0x06, 0x5C, 0x43, // 00065C43 - 0x00, 0x06, 0x5C, 0x3C, // 00065C3C - 0x00, 0x06, 0x5C, 0x3B, // 00065C3B - 0x00, 0x06, 0x5C, 0x54, // 00065C54 - 0x00, 0x06, 0x5C, 0x53, // 00065C53 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x02, // 00071C02 - 0x00, 0x02, 0x81, 0x10, // 00028110 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x01, // 00071C01 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x65, // 00071665 - 0x00, 0x06, 0x00, 0x61, // 00060061 - 0x00, 0x06, 0x20, 0x7A, // 0006207A - 0x00, 0x07, 0x4C, 0x05, // 00074C05 - 0x00, 0x06, 0x9C, 0x7F, // 00069C7F - 0x00, 0x06, 0x90, 0x22, // 00069022 - 0x00, 0x04, 0x1F, 0x00, // 00041F00 - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x07, 0x0C, 0x14, // 00070C14 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x98, 0x1F, // 0007981F - 0x00, 0x04, 0x17, 0x00, // 00041700 - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x06, 0x00, 0x6A, // 0006006A - 0x00, 0x08, 0x12, 0x41, // 00081241 - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x61, // 00068061 - 0x00, 0x07, 0x90, 0x07, // 00079007 - 0x00, 0x06, 0x3C, 0x26, // 00063C26 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x08, 0x3F, 0x40, // 00083F40 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x06, 0x1C, 0x1C, // 00061C1C - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xBC, 0x1C, // 0006BC1C - 0x00, 0x04, 0xB0, 0x0D, // 0004B00D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xB6, 0x7C, // 0009B67C - 0x00, 0x01, 0x05, 0x10, // 00010510 - 0x00, 0x09, 0xA6, 0x7F, // 0009A67F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x00, 0x42, // 00080042 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x09, 0xB6, 0x7F, // 0009B67F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x09, 0x42, // 00080942 - 0x00, 0x07, 0x84, 0x0C, // 0007840C - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x09, 0xA6, 0x7F, // 0009A67F - 0x00, 0x07, 0x8C, 0x0C, // 00078C0C - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x30, // 00072430 - 0x00, 0x08, 0x2D, 0x41, // 00082D41 - 0x00, 0x08, 0xA4, 0xC5, // 0008A4C5 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x16, 0x35, // 00021635 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x9C, 0x1C, // 00069C1C - 0x00, 0x06, 0x04, 0x6A, // 0006046A - 0x00, 0x06, 0x08, 0x77, // 00060877 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x17, 0x12, // 00071712 - 0x00, 0x08, 0x80, 0x40, // 00088040 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x16, 0x71, // 00021671 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x02, 0x88, 0x08, // 00028808 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x06, 0x24, 0x66, // 00062466 - 0x00, 0x06, 0x2C, 0x67, // 00062C67 - 0x00, 0x06, 0x34, 0x68, // 00063468 - 0x00, 0x06, 0x3C, 0x69, // 00063C69 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0B, 0x64, 0xC4, // 000B64C4 - 0x00, 0x0B, 0x6D, 0xC5, // 000B6DC5 - 0x00, 0x0B, 0x76, 0xC6, // 000B76C6 - 0x00, 0x0B, 0x7F, 0xC7, // 000B7FC7 - 0x00, 0x08, 0x25, 0x8C, // 0008258C - 0x00, 0x08, 0x2D, 0x8D, // 00082D8D - 0x00, 0x08, 0x35, 0x8E, // 0008358E - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x08, 0x3D, 0x8F, // 00083D8F - 0x00, 0x06, 0x84, 0x6A, // 0006846A - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x07, 0xA8, 0x0D, // 0007A80D - 0x00, 0x07, 0xB0, 0x0D, // 0007B00D - 0x00, 0x07, 0xB8, 0x0D, // 0007B80D - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x06, 0x90, 0x22, // 00069022 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x04, 0x2F, 0x08, // 00042F08 - 0x00, 0x04, 0x37, 0x08, // 00043708 - 0x00, 0x04, 0x3F, 0x08, // 00043F08 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x06, 0x84, 0x6A, // 0006846A - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x07, 0xA8, 0x0D, // 0007A80D - 0x00, 0x07, 0xB0, 0x0D, // 0007B00D - 0x00, 0x07, 0xB8, 0x0D, // 0007B80D - 0x00, 0x00, 0x00, 0x00, // 00000000 -}; -// addres 06800 count 1077 (4314 bytes) -static const unsigned char maspcm_array10[] = { - 0xf0, 0x00, 0x04, 0x35, 0x08, 0x00, - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0F, 0x00, // 00070F00 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x0B, 0x5B, 0x7E, // 000B5B7E - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x0A, 0x09, 0x78, // 000A0978 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x08, 0xA1, 0x41, // 0008A141 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x5B, 0x7E, // 000B5B7E - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x07, 0x26, 0x69, // 00072669 - 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F - 0x00, 0x0B, 0x75, 0x7E, // 000B757E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA0, 0x22, // 0006A022 - 0x00, 0x0A, 0xF7, 0x86, // 000AF786 - 0x00, 0x0A, 0xEF, 0x85, // 000AEF85 - 0x00, 0x0A, 0x36, 0x7F, // 000A367F - 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F - 0x00, 0x0B, 0x64, 0x70, // 000B6470 - 0x00, 0x06, 0x98, 0x79, // 00069879 - 0x00, 0x06, 0x90, 0x78, // 00069078 - 0x00, 0x06, 0xA8, 0x77, // 0006A877 - 0x00, 0x06, 0xB0, 0x7A, // 0006B07A - 0x00, 0x06, 0xBC, 0x64, // 0006BC64 - 0x00, 0x06, 0xB8, 0x71, // 0006B871 - 0x00, 0x06, 0xB8, 0x70, // 0006B870 - 0x00, 0x06, 0xB8, 0x69, // 0006B869 - 0x00, 0x06, 0xB8, 0x7B, // 0006B87B - 0x00, 0x06, 0xB8, 0x7C, // 0006B87C - 0x00, 0x06, 0x9C, 0x6B, // 00069C6B - 0x00, 0x06, 0xBC, 0x6E, // 0006BC6E - 0x00, 0x06, 0xBC, 0x72, // 0006BC72 - 0x00, 0x06, 0xB8, 0x74, // 0006B874 - 0x00, 0x06, 0xB8, 0x7D, // 0006B87D - 0x00, 0x06, 0xBC, 0x73, // 0006BC73 - 0x00, 0x06, 0x9C, 0x7D, // 00069C7D - 0x00, 0x06, 0xBC, 0x7C, // 0006BC7C - 0x00, 0x06, 0xBC, 0x7B, // 0006BC7B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x3C, 0x65, // 00063C65 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xBF, 0x41, // 0009BF41 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xBC, 0x7A, // 0006BC7A - 0x00, 0x07, 0x7C, 0x01, // 00077C01 - 0x00, 0x07, 0x3D, 0xFF, // 00073DFF - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1C, 0x90, // 00071C90 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x07, 0x34, 0xA0, // 000734A0 - 0x00, 0x06, 0x08, 0x76, // 00060876 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x21, 0x41, // 00082141 - 0x00, 0x06, 0xB8, 0x16, // 0006B816 - 0x00, 0x06, 0x90, 0x24, // 00069024 - 0x00, 0x06, 0x90, 0x2C, // 0006902C - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x06, 0x90, 0x20, // 00069020 - 0x00, 0x06, 0x98, 0x25, // 00069825 - 0x00, 0x06, 0x98, 0x2D, // 0006982D - 0x00, 0x06, 0xB0, 0x1D, // 0006B01D - 0x00, 0x06, 0xA0, 0x10, // 0006A010 - 0x00, 0x06, 0x98, 0x21, // 00069821 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3C, 0x24, // 00073C24 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x07, 0x6C, 0x01, // 00076C01 - 0x00, 0x07, 0x2C, 0x98, // 00072C98 - 0x00, 0x06, 0xBC, 0x16, // 0006BC16 - 0x00, 0x06, 0x94, 0x2A, // 0006942A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xAC, 0x2B, // 0006AC2B - 0x00, 0x07, 0x7C, 0x01, // 00077C01 - 0x00, 0x07, 0x3D, 0xFF, // 00073DFF - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x00, // 00071E00 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x90, // 00072C90 - 0x00, 0x06, 0xBC, 0x14, // 0006BC14 - 0x00, 0x06, 0x94, 0x1C, // 0006941C - 0x00, 0x06, 0x9C, 0x26, // 00069C26 - 0x00, 0x06, 0x9C, 0x2E, // 00069C2E - 0x00, 0x06, 0xAC, 0x1D, // 0006AC1D - 0x00, 0x06, 0xAC, 0x27, // 0006AC27 - 0x00, 0x06, 0xAC, 0x2F, // 0006AC2F - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x04, // 00070C04 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x10, // 00071410 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x4B, // 0006884B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x06, // 00069406 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x62, // 00071E62 - 0x00, 0x06, 0x10, 0x78, // 00061078 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1F, 0x18, // 00071F18 - 0x00, 0x06, 0x98, 0x22, // 00069822 - 0x00, 0x08, 0x92, 0x41, // 00089241 - 0x00, 0x02, 0x9E, 0xF0, // 00029EF0 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x80, // 00072C80 - 0x00, 0x07, 0x74, 0x00, // 00077400 - 0x00, 0x07, 0x34, 0x04, // 00073404 - 0x00, 0x0A, 0xED, 0xC0, // 000AEDC0 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x1B, 0xC6, // 00081BC6 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x40, // 00072C40 - 0x00, 0x07, 0x74, 0x02, // 00077402 - 0x00, 0x07, 0x34, 0x00, // 00073400 - 0x00, 0x0A, 0xED, 0xC0, // 000AEDC0 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x1B, 0xC6, // 00081BC6 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x04, // 00072C04 - 0x00, 0x07, 0x74, 0x00, // 00077400 - 0x00, 0x07, 0x34, 0x20, // 00073420 - 0x00, 0x04, 0x17, 0x00, // 00041700 - 0x00, 0x0A, 0xED, 0xC0, // 000AEDC0 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x1B, 0xC6, // 00081BC6 - 0x00, 0x0A, 0xD2, 0x41, // 000AD241 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x27, 0x18, // 00072718 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x3B, // 0006983B - 0x00, 0x06, 0x9C, 0x75, // 00069C75 - 0x00, 0x06, 0xA0, 0x53, // 0006A053 - 0x00, 0x06, 0x28, 0x77, // 00062877 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x40, // 00071640 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x90, // 00072490 - 0x00, 0x0B, 0x49, 0x7D, // 000B497D - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6C, // 0007066C - 0x00, 0x06, 0x90, 0x1E, // 0006901E - 0x00, 0x06, 0xA0, 0x1F, // 0006A01F - 0x00, 0x06, 0x88, 0x14, // 00068814 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x17, 0x08, // 00041708 - 0x00, 0x04, 0x1F, 0x08, // 00041F08 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x08, 0xAD, 0x40, // 0008AD40 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x07, 0x88, 0x0D, // 0007880D - 0x00, 0x07, 0x90, 0x0D, // 0007900D - 0x00, 0x07, 0x98, 0x0D, // 0007980D - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x50, // 00071650 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x26, 0x90, // 00072690 - 0x00, 0x0B, 0x49, 0x7D, // 000B497D - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x70, // 00070670 - 0x00, 0x06, 0x94, 0x20, // 00069420 - 0x00, 0x06, 0xA4, 0x21, // 0006A421 - 0x00, 0x06, 0x8C, 0x15, // 00068C15 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0B, 0x52, 0x75, // 000B5275 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x07, 0x8C, 0x0E, // 00078C0E - 0x00, 0x07, 0x8C, 0x0E, // 00078C0E - 0x00, 0x07, 0x8C, 0x0E, // 00078C0E - 0x00, 0x07, 0x8C, 0x0E, // 00078C0E - 0x00, 0x06, 0x94, 0x15, // 00069415 - 0x00, 0x02, 0x1C, 0x0E, // 00021C0E - 0x00, 0x07, 0x4C, 0x06, // 00074C06 - 0x00, 0x07, 0x0C, 0xD3, // 00070CD3 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x32, // 00070E32 - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x07, 0x26, 0x70, // 00072670 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2E, 0x90, // 00072E90 - 0x00, 0x06, 0x8C, 0x22, // 00068C22 - 0x00, 0x04, 0x80, 0x4F, // 0004804F - 0x00, 0x06, 0x08, 0x78, // 00060878 - 0x00, 0x06, 0xA4, 0x24, // 0006A424 - 0x00, 0x06, 0xAC, 0x25, // 0006AC25 - 0x00, 0x06, 0x5C, 0x3C, // 00065C3C - 0x00, 0x06, 0x5C, 0x3B, // 00065C3B - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0x1D, // 0002191D - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x02, 0x3F, 0xCC, // 00023FCC - 0x00, 0x07, 0x6C, 0x06, // 00076C06 - 0x00, 0x07, 0x2C, 0xEB, // 00072CEB - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xC7, 0x82, // 000AC782 - 0x00, 0x02, 0x9E, 0x20, // 00029E20 - 0x00, 0x0A, 0xC7, 0x81, // 000AC781 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x54, 0x04, // 00075404 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x06, 0x30, 0x2C, // 0006302C - 0x00, 0x08, 0x92, 0x41, // 00089241 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x19, 0x0C, // 0002190C - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0A, 0xF6, 0x41, // 000AF641 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x18, 0xFA, // 000218FA - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x30, 0x2C, // 0006302C - 0x00, 0x08, 0x92, 0x41, // 00089241 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x19, 0x0C, // 0002190C - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0A, 0xF6, 0x41, // 000AF641 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0x03, // 00021903 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x38, 0x52, // 00063852 - 0x00, 0x06, 0x30, 0x2C, // 0006302C - 0x00, 0x09, 0xBF, 0x7A, // 0009BF7A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xFF, 0x41, // 000AFF41 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x36, 0x41, // 000B3641 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB0, 0x2C, // 0006B02C - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x18, 0xE4, // 000218E4 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x40, 0x7D, // 000B407D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x84, 0x15, // 00068415 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x16, // 0004B816 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x06, 0x27, // 000C0627 - 0x00, 0x04, 0x35, 0x18, // 00043518 - 0x00, 0x04, 0xB8, 0x1E, // 0004B81E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0E, 0x06, 0x27, // 000E0627 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x16, // 0004B816 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x0E, 0x27, // 000C0E27 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x0E, // 0004B80E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0E, 0x0E, 0x27, // 000E0E27 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x16, // 0004B816 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x16, 0x27, // 000C1627 - 0x00, 0x04, 0x35, 0x18, // 00043518 - 0x00, 0x04, 0xB8, 0x1E, // 0004B81E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0E, 0x16, 0x27, // 000E1627 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x16, // 0004B816 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x1E, 0x27, // 000C1E27 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x0E, // 0004B80E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0E, 0x1E, 0x27, // 000E1E27 - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x27, 0x12, // 00072712 - 0x00, 0x07, 0x80, 0x0D, // 0007800D - 0x00, 0x07, 0x88, 0x0D, // 0007880D - 0x00, 0x07, 0x90, 0x0D, // 0007900D - 0x00, 0x07, 0x98, 0x0D, // 0007980D - 0x00, 0x06, 0xA0, 0x22, // 0006A022 - 0x00, 0x07, 0x80, 0x0F, // 0007800F - 0x00, 0x07, 0x88, 0x0F, // 0007880F - 0x00, 0x07, 0x90, 0x0F, // 0007900F - 0x00, 0x07, 0x98, 0x07, // 00079807 - 0x00, 0x06, 0x2C, 0x79, // 00062C79 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x09, 0x0D, // 000C090D - 0x00, 0x0C, 0x11, 0x0D, // 000C110D - 0x00, 0x0C, 0x19, 0x0D, // 000C190D - 0x00, 0x0C, 0x21, 0x0D, // 000C210D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x8C, 0x66, // 00068C66 - 0x00, 0x06, 0x94, 0x67, // 00069467 - 0x00, 0x06, 0x9C, 0x68, // 00069C68 - 0x00, 0x06, 0xA4, 0x69, // 0006A469 - 0x00, 0x06, 0x00, 0x7A, // 0006007A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x40, // 00088040 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0xF8, // 000219F8 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x00, 0x24, // 00060024 - 0x00, 0x06, 0x08, 0x78, // 00060878 - 0x00, 0x06, 0x18, 0x76, // 00061876 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x08, 0x89, 0x41, // 00088941 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x06, 0x00, 0x2C, // 0006002C - 0x00, 0x06, 0x08, 0x1C, // 0006081C - 0x00, 0x08, 0x80, 0xC1, // 000880C1 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x08, 0x9B, 0x41, // 00089B41 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x09, 0x80, 0x7F, // 0009807F - 0x00, 0x06, 0x14, 0x7B, // 0006147B - 0x00, 0x06, 0x1C, 0x7A, // 00061C7A - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9F, 0x28, // 00029F28 - 0x00, 0x08, 0x98, 0xC3, // 000898C3 - 0x00, 0x02, 0x87, 0x10, // 00028710 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x7B, // 0006947B - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x12, // 00071412 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x00, // 00071E00 - 0x00, 0x08, 0xA0, 0xC2, // 0008A0C2 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x19, 0xF8, // 000219F8 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x24, 0x2A, // 0006242A - 0x00, 0x08, 0xA3, 0xC4, // 0008A3C4 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0xF8, // 000219F8 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x01, // 00071E01 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x09, // 00070409 - 0x00, 0x06, 0x08, 0x69, // 00060869 - 0x00, 0x06, 0x9C, 0x22, // 00069C22 - 0x00, 0x06, 0x10, 0x6A, // 0006106A - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0xA4, // 000219A4 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x92, 0x41, // 00089241 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0xA4, // 000219A4 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x07, 0x55, 0x5C, // 0007555C - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x5D, 0x04, // 00075D04 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x07, 0x65, 0x58, // 00076558 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x6D, 0x14, // 00076D14 - 0x00, 0x07, 0x2C, 0x00, // 00072C00 - 0x00, 0x07, 0x94, 0x0F, // 0007940F - 0x00, 0x07, 0x9C, 0x0F, // 00079C0F - 0x00, 0x07, 0xA4, 0x0F, // 0007A40F - 0x00, 0x07, 0xAC, 0x0F, // 0007AC0F - 0x00, 0x06, 0x38, 0x3A, // 0006383A - 0x00, 0x0B, 0x76, 0x7D, // 000B767D - 0x00, 0x06, 0x10, 0x6C, // 0006106C - 0x00, 0x0A, 0xFF, 0x5F, // 000AFF5F - 0x00, 0x06, 0x84, 0x05, // 00068405 - 0x00, 0x02, 0x9F, 0x18, // 00029F18 - 0x00, 0x09, 0x3F, 0x54, // 00093F54 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB4, 0x15, // 0006B415 - 0x00, 0x07, 0x77, 0xFC, // 000777FC - 0x00, 0x07, 0x34, 0x00, // 00073400 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x01, 0x4E, 0x80, // 00014E80 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0x80, 0x87, // 00098087 - 0x00, 0x09, 0x88, 0x87, // 00098887 - 0x00, 0x0C, 0x20, 0x12, // 000C2012 - 0x00, 0x0E, 0x21, 0x12, // 000E2112 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x28, 0x12, // 000C2812 - 0x00, 0x0E, 0x29, 0x12, // 000E2912 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0x84, 0x48, // 00098448 - 0x00, 0x09, 0x8D, 0x48, // 00098D48 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x09, 0xA4, 0x48, // 0009A448 - 0x00, 0x08, 0x04, 0x40, // 00080440 - 0x00, 0x09, 0xAD, 0x48, // 0009AD48 - 0x00, 0x08, 0x0D, 0x40, // 00080D40 - 0x00, 0x0A, 0xE4, 0xC6, // 000AE4C6 - 0x00, 0x0A, 0xC0, 0xC6, // 000AC0C6 - 0x00, 0x0A, 0xED, 0xC6, // 000AEDC6 - 0x00, 0x0A, 0xC9, 0xC6, // 000AC9C6 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0xE4, 0x0F, // 0007E40F - 0x00, 0x07, 0xC4, 0x0F, // 0007C40F - 0x00, 0x07, 0xEC, 0x0F, // 0007EC0F - 0x00, 0x07, 0xCC, 0x0F, // 0007CC0F - 0x00, 0x06, 0x00, 0x69, // 00060069 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x65, // 00070E65 - 0x00, 0x08, 0x00, 0x41, // 00080041 - 0x00, 0x06, 0x1C, 0x64, // 00061C64 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x39, // 00071439 - 0x00, 0x06, 0x88, 0x22, // 00068822 - 0x00, 0x04, 0x0F, 0x00, // 00040F00 - 0x00, 0x08, 0x90, 0xC2, // 000890C2 - 0x00, 0x02, 0x9E, 0x28, // 00029E28 - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x08, 0x09, 0x41, // 00080941 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x69, // 00068069 - 0x00, 0x07, 0x88, 0x07, // 00078807 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x0B, 0x76, 0x75, // 000B7675 - 0x00, 0x07, 0x0E, 0x01, // 00070E01 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x04, // 00070404 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x06, 0x80, 0x4B, // 0006804B - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x05, 0x3D, // 0007053D - 0x00, 0x06, 0xB4, 0x15, // 0006B415 - 0x00, 0x06, 0x8C, 0x2A, // 00068C2A - 0x00, 0x06, 0x94, 0x72, // 00069472 - 0x00, 0x06, 0x80, 0x4B, // 0006804B - 0x00, 0x06, 0x00, 0x24, // 00060024 - 0x00, 0x06, 0x08, 0x78, // 00060878 - 0x00, 0x06, 0x18, 0x76, // 00061876 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x08, 0x89, 0x41, // 00088941 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x06, 0x00, 0x2C, // 0006002C - 0x00, 0x06, 0x08, 0x20, // 00060820 - 0x00, 0x08, 0x80, 0xC1, // 000880C1 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x06, 0x0C, 0x26, // 00060C26 - 0x00, 0x06, 0x14, 0x1C, // 0006141C - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x00, // 00071E00 - 0x00, 0x08, 0x89, 0xC2, // 000889C2 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x09, 0xC3, // 000809C3 - 0x00, 0x06, 0x24, 0x24, // 00062424 - 0x00, 0x09, 0x22, 0xC4, // 000922C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x24, 0xC3, // 000824C3 - 0x00, 0x09, 0x29, 0xC4, // 000929C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x0C, 0x40, // 00080C40 - 0x00, 0x06, 0x24, 0x2E, // 0006242E - 0x00, 0x09, 0x22, 0xC4, // 000922C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x24, 0xC3, // 000824C3 - 0x00, 0x09, 0x29, 0xC4, // 000929C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x0C, 0x40, // 00080C40 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x20, // 00071420 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0xC2, // 000880C2 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x1A, 0x86, // 00021A86 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x89, 0xC2, // 000889C2 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x1A, 0x86, // 00021A86 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x28, 0x3A, // 0006283A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xED, 0x5F, // 000AED5F - 0x00, 0x02, 0x9F, 0x18, // 00029F18 - 0x00, 0x09, 0x2D, 0x54, // 00092D54 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x04, 0xB8, 0x0D, // 0004B80D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xBF, 0x7C, // 0009BF7C - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x01, 0x0D, 0x10, // 00010D10 - 0x00, 0x06, 0x20, 0x76, // 00062076 - 0x00, 0x09, 0x86, 0x8D, // 0009868D - 0x00, 0x09, 0x8E, 0x8D, // 00098E8D - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x08, 0x40, // 00080840 - 0x00, 0x0C, 0x31, 0x08, // 000C3108 - 0x00, 0x0E, 0x31, 0x09, // 000E3109 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x01, 0x08, // 000C0108 - 0x00, 0x0E, 0x01, 0x09, // 000E0109 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xF6, 0x7C, // 000AF67C - 0x00, 0x09, 0x9F, 0x7F, // 00099F7F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x36, 0x42, // 00083642 - 0x00, 0x0A, 0xC0, 0x7C, // 000AC07C - 0x00, 0x09, 0xBF, 0x7F, // 0009BF7F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x00, 0x42, // 00080042 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0xF4, 0x0C, // 0007F40C - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0xC4, 0x0C, // 0007C40C - 0x00, 0x02, 0x16, 0x52, // 00021652 - 0x00, 0x07, 0x4C, 0x06, // 00074C06 - 0x00, 0x07, 0x0E, 0x56, // 00070E56 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x06, 0x00, 0x7B, // 0006007B - 0x00, 0x06, 0x10, 0x74, // 00061074 - 0x00, 0x08, 0x00, 0x41, // 00080041 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x30, // 00071C30 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9E, 0x18, // 00029E18 - 0x00, 0x08, 0x88, 0xC3, // 000888C3 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x15, 0xDB, // 000215DB - 0x00, 0x07, 0x4C, 0x06, // 00074C06 - 0x00, 0x07, 0x0E, 0x66, // 00070E66 - 0x00, 0x06, 0x80, 0x7B, // 0006807B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x0E, // 0006880E - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x06, 0x08, 0x24, // 00060824 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x06, 0x08, 0x2C, // 0006082C - 0x00, 0x06, 0x34, 0x26, // 00063426 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x86, 0xC1, // 000886C1 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1F, 0x00, // 00071F00 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x08, 0xA8, 0xC3, // 0008A8C3 - 0x00, 0x02, 0x87, 0x08, // 00028708 - 0x00, 0x08, 0x80, 0xC2, // 000880C2 - 0x00, 0x06, 0x20, 0x74, // 00062074 - 0x00, 0x08, 0x28, 0xC3, // 000828C3 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x06, 0x18, 0x79, // 00061879 - 0x00, 0x06, 0x14, 0x6E, // 0006146E - 0x00, 0x08, 0xA4, 0x41, // 0008A441 - 0x00, 0x02, 0x9E, 0x20, // 00029E20 - 0x00, 0x08, 0xBB, 0x42, // 0008BB42 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F - 0x00, 0x08, 0x10, 0x40, // 00081040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x79, // 00069879 - 0x00, 0x06, 0x94, 0x6E, // 0006946E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x06, 0x08, 0x24, // 00060824 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x06, 0x08, 0x2C, // 0006082C - 0x00, 0x06, 0x00, 0x1C, // 0006001C - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x06, 0x18, 0x71, // 00061871 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x24, 0x6B, // 0006246B - 0x00, 0x08, 0xA9, 0xC0, // 0008A9C0 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x2D, 0xC2, // 00082DC2 - 0x00, 0x08, 0xB4, 0x41, // 0008B441 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x1A, 0xA5, // 00021AA5 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0xB5, 0x42, // 0008B542 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x1A, 0xA5, // 00021AA5 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x34, 0x26, // 00063426 - 0x00, 0x0A, 0xD1, 0x41, // 000AD141 - 0x00, 0x0A, 0xF6, 0x7E, // 000AF67E - 0x00, 0x08, 0x12, 0xC6, // 000812C6 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x0A, 0xC2, 0x7E, // 000AC27E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA4, 0x6B, // 0006A46B - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x25, // 00072425 - 0x00, 0x08, 0x93, 0xC5, // 000893C5 - 0x00, 0x06, 0xA8, 0x71, // 0006A871 - 0x00, 0x08, 0x9C, 0xC2, // 00089CC2 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x1B, 0x86, // 00021B86 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x06, 0x18, 0x52, // 00061852 - 0x00, 0x07, 0x54, 0x08, // 00075408 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x7C, 0x06, // 00077C06 - 0x00, 0x07, 0x3E, 0xFD, // 00073EFD - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0A, 0xC3, 0xC2, // 000AC3C2 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0xA7, // 00021BA7 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0xB8, 0x0F, // 0006B80F - 0x00, 0x06, 0x34, 0x26, // 00063426 - 0x00, 0x06, 0x3C, 0x1C, // 00063C1C - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x06, 0x18, 0x70, // 00061870 - 0x00, 0x08, 0x86, 0xC7, // 000886C7 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x25, // 00072425 - 0x00, 0x06, 0x28, 0x79, // 00062879 - 0x00, 0x08, 0x93, 0xC0, // 000893C0 - 0x00, 0x06, 0x80, 0x70, // 00068070 - 0x00, 0x08, 0x94, 0xC2, // 000894C2 - 0x00, 0x02, 0x88, 0x38, // 00028838 - 0x00, 0x08, 0xBD, 0x41, // 0008BD41 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x09, 0xAD, 0x41, // 0009AD41 - 0x00, 0x07, 0x7C, 0x06, // 00077C06 - 0x00, 0x07, 0x3E, 0xFD, // 00073EFD - 0x00, 0x02, 0x1B, 0xB0, // 00021BB0 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0xA8, 0x79, // 0006A879 - 0x00, 0x06, 0xB8, 0x0F, // 0006B80F - 0x00, 0x06, 0x14, 0x26, // 00061426 - 0x00, 0x06, 0x20, 0x7D, // 0006207D - 0x00, 0x06, 0x28, 0x7C, // 0006287C - 0x00, 0x08, 0x32, 0x60, // 00083260 - 0x00, 0x02, 0x86, 0x18, // 00028618 - 0x00, 0x08, 0x2D, 0xC4, // 00082DC4 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x0B, 0x64, 0x7F, // 000B647F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA8, 0x7C, // 0006A87C - 0x00, 0x06, 0xA0, 0x7D, // 0006A07D - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3C, 0x01, // 00073C01 - 0x00, 0x06, 0x00, 0x7C, // 0006007C - 0x00, 0x06, 0x30, 0x79, // 00063079 - 0x00, 0x08, 0xBF, 0xC0, // 0008BFC0 - 0x00, 0x02, 0x88, 0xC0, // 000288C0 - 0x00, 0x08, 0xB6, 0x41, // 0008B641 - 0x00, 0x02, 0x9E, 0xB0, // 00029EB0 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x08, 0xBA, 0xC1, // 0008BAC1 - 0x00, 0x06, 0x34, 0x6E, // 0006346E - 0x00, 0x08, 0xBF, 0xC6, // 0008BFC6 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1F, 0x00, // 00071F00 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x08, 0xAF, 0xC3, // 0008AFC3 - 0x00, 0x02, 0x87, 0x08, // 00028708 - 0x00, 0x08, 0xBF, 0xC2, // 0008BFC2 - 0x00, 0x08, 0x2F, 0xC3, // 00082FC3 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x3F, 0xC2, // 00083FC2 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x1C, 0x15, // 00021C15 - 0x00, 0x07, 0x4C, 0x06, // 00074C06 - 0x00, 0x07, 0x0E, 0xFD, // 00070EFD - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x7C, // 0006807C - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x04, 0x64, // 00060464 - 0x00, 0x06, 0x0C, 0x72, // 00060C72 - 0x00, 0x06, 0x10, 0x74, // 00061074 - 0x00, 0x08, 0x80, 0x40, // 00088040 - 0x00, 0x02, 0x9F, 0x40, // 00029F40 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x01, // 00070C01 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x81, 0x10, // 00028110 - 0x00, 0x02, 0x1B, 0x68, // 00021B68 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x80, 0x07, // 00078007 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x06, 0x14, 0x64, // 00061464 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xC7, 0x81, // 000AC781 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x64, // 00069464 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x69, // 00070669 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x02, // 00070C02 - 0x00, 0x06, 0x10, 0x7A, // 0006107A - 0x00, 0x06, 0x20, 0x1C, // 0006201C - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xC3, 0x81, // 000AC381 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x02, 0x81, 0x48, // 00028148 - 0x00, 0x08, 0x9A, 0x41, // 00089A41 - 0x00, 0x02, 0x9E, 0x38, // 00029E38 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x06, 0x08, 0x24, // 00060824 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x06, 0x08, 0x2C, // 0006082C - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x0A, 0xE1, 0x7E, // 000AE17E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x7A, // 0006907A - 0x00, 0x06, 0xA0, 0x1C, // 0006A01C - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x69, // 00070669 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x01, // 00070C01 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6C, // 0007066C - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xCF, 0x81, // 000ACF81 - 0x00, 0x06, 0x18, 0x77, // 00061877 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0B, 0x09, 0xC3, // 000B09C3 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0x68, // 00021B68 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x24, 0x6B, // 0006246B - 0x00, 0x0B, 0x1B, 0x41, // 000B1B41 - 0x00, 0x06, 0x14, 0x65, // 00061465 - 0x00, 0x06, 0x04, 0x6A, // 0006046A - 0x00, 0x08, 0x28, 0x41, // 00082841 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x82, 0xC0, // 000882C0 - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0x66, // 00021B66 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0B, 0x40, 0x41, // 000B4041 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9E, 0x28, // 00029E28 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x04, 0x2F, 0x08, // 00042F08 - 0x00, 0x04, 0x37, 0x08, // 00043708 - 0x00, 0x04, 0x3F, 0x08, // 00043F08 - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x07, 0xA8, 0x0D, // 0007A80D - 0x00, 0x07, 0xB0, 0x0D, // 0007B00D - 0x00, 0x07, 0xB8, 0x0D, // 0007B80D - 0x00, 0x06, 0x98, 0x77, // 00069877 - 0x00, 0x06, 0x84, 0x6A, // 0006846A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x00, 0x6D, // 0006006D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xC0, 0x6D, // 0006C06D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x3F, 0xCC, // 00023FCC - 0x00, 0x07, 0x6C, 0x06, // 00076C06 - 0x00, 0x07, 0x2F, 0x78, // 00072F78 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x19, 0x5B, // 0002195B - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xC1, 0x80, // 0000C180 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x00, 0x1C, // 0006001C - 0x00, 0x07, 0x6C, 0x01, // 00076C01 - 0x00, 0x07, 0x2E, 0x00, // 00072E00 - 0x00, 0x07, 0x7C, 0x01, // 00077C01 - 0x00, 0x07, 0x3E, 0x68, // 00073E68 - 0x00, 0x0A, 0xF1, 0x7E, // 000AF17E - 0x00, 0x09, 0x00, 0xC6, // 000900C6 - 0x00, 0x02, 0x88, 0x08, // 00028808 - 0x00, 0x08, 0x00, 0xC5, // 000800C5 - 0x00, 0x06, 0x2C, 0x64, // 00062C64 - 0x00, 0x0A, 0x00, 0x7F, // 000A007F - 0x00, 0x06, 0x20, 0x7A, // 0006207A - 0x00, 0x06, 0xB8, 0x22, // 0006B822 - 0x00, 0x04, 0x3F, 0x00, // 00043F00 - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x08, 0x3F, 0xC0, // 00083FC0 - 0x00, 0x08, 0xAD, 0x40, // 0008AD40 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x2C, 0x7F, // 00062C7F - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x6D, 0x6F, // 000B6D6F - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x02, 0x1A, 0xAD, // 00021AAD - 0x00, 0x06, 0xB0, 0x1C, // 0006B01C - 0x00, 0x0A, 0xFF, 0x7E, // 000AFF7E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x84, 0x72, // 00068472 - 0x00, 0x06, 0xAC, 0x7F, // 0006AC7F - 0x00, 0x07, 0xB8, 0x07, // 0007B807 - 0x00, 0x06, 0x10, 0x2C, // 0006102C - 0x00, 0x0B, 0x64, 0x6D, // 000B646D - 0x00, 0x0A, 0xD2, 0x7E, // 000AD27E - 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x81, 0x20, // 00028120 - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x06, 0x90, 0x20, // 00069020 - 0x00, 0x06, 0x9C, 0x7B, // 00069C7B - 0x00, 0x0B, 0x64, 0x6E, // 000B646E - 0x00, 0x06, 0x34, 0x6D, // 0006346D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA4, 0x7F, // 0006A47F - 0x00, 0x06, 0xB4, 0x0F, // 0006B40F - 0x00, 0x06, 0xB4, 0x6C, // 0006B46C - 0x00, 0x0B, 0x76, 0x7F, // 000B767F - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x08, 0x3F, 0x40, // 00083F40 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x06, 0xB4, 0x6B, // 0006B46B - 0x00, 0x04, 0xB0, 0x0D, // 0004B00D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xB6, 0x7C, // 0009B67C - 0x00, 0x01, 0x05, 0x10, // 00010510 - 0x00, 0x09, 0xA6, 0x7F, // 0009A67F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x00, 0x42, // 00080042 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x09, 0xB6, 0x7F, // 0009B67F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x3F, 0x42, // 00083F42 - 0x00, 0x07, 0x84, 0x0C, // 0007840C - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x09, 0xA6, 0x7F, // 0009A67F - 0x00, 0x07, 0xBC, 0x0C, // 0007BC0C - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x30, // 00072430 - 0x00, 0x08, 0x2D, 0x41, // 00082D41 - 0x00, 0x08, 0xA4, 0xC5, // 0008A4C5 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x1B, 0xBE, // 00021BBE - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3F, 0x18, // 00073F18 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x06, 0x10, 0x24, // 00061024 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x9F, 0x18, // 00029F18 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3C, 0x00, // 00073C00 - 0x00, 0x06, 0x10, 0x2C, // 0006102C - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xD2, 0x7E, // 000AD27E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F - 0x00, 0x06, 0x04, 0x64, // 00060464 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x00, 0xDE, 0x87, // 0000DE87 - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x06, 0x90, 0x20, // 00069020 - 0x00, 0x06, 0x9C, 0x62, // 00069C62 - 0x00, 0x06, 0x9C, 0x6E, // 00069C6E - 0x00, 0x06, 0x9C, 0x63, // 00069C63 - 0x00, 0x06, 0xAC, 0x7D, // 0006AC7D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x04, 0x73, // 00060473 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x00, // 00071E00 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x08, 0x12, 0x42, // 00081242 - 0x00, 0x09, 0x1B, 0xC2, // 00091BC2 - 0x00, 0x02, 0x87, 0x08, // 00028708 - 0x00, 0x08, 0x92, 0xC3, // 000892C3 - 0x00, 0x06, 0x84, 0x73, // 00068473 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x27, 0x00, // 00072700 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3C, 0x00, // 00073C00 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F - 0x00, 0x06, 0xA4, 0x05, // 0006A405 - 0x00, 0x01, 0x41, 0x80, // 00014180 - 0x00, 0x06, 0xB8, 0x22, // 0006B822 - 0x00, 0x07, 0x98, 0x0F, // 0007980F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x98, 0x0F, // 0007980F - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x06, 0x9C, 0x62, // 00069C62 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x9C, 0x63, // 00069C63 - 0x00, 0x06, 0x9C, 0x6E, // 00069C6E - 0x00, 0x06, 0xAC, 0x7D, // 0006AC7D - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x84, 0x62, // 00068462 - 0x00, 0x06, 0x84, 0x63, // 00068463 - 0x00, 0x06, 0x04, 0x62, // 00060462 - 0x00, 0x06, 0x1C, 0x63, // 00061C63 - 0x00, 0x0A, 0x0F, 0x41, // 000A0F41 - 0x00, 0x08, 0x97, 0xC0, // 000897C0 - 0x00, 0x08, 0x1B, 0xC2, // 00081BC2 - 0x00, 0x0A, 0x12, 0x47, // 000A1247 - 0x00, 0x07, 0x65, 0x00, // 00076500 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x6D, 0x00, // 00076D00 - 0x00, 0x07, 0x2C, 0x00, // 00072C00 - 0x00, 0x07, 0x75, 0x00, // 00077500 - 0x00, 0x07, 0x34, 0x00, // 00073400 - 0x00, 0x0C, 0x12, 0x25, // 000C1225 - 0x00, 0x0E, 0x11, 0x24, // 000E1124 - 0x00, 0x0E, 0x13, 0x26, // 000E1326 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x04, 0x6C, // 0006046C - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x09, 0x12, 0xC0, // 000912C0 - 0x00, 0x06, 0xBC, 0x62, // 0006BC62 - 0x00, 0x06, 0x9C, 0x63, // 00069C63 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x6C, // 0006946C - 0x00, 0x06, 0x94, 0x0F, // 0006940F - 0x00, 0x03, 0x33, 0x33, // 00033333 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 -}; - -struct i2c_block { - const unsigned char *data; - unsigned len; -}; - -static struct i2c_block maspcm[] = { - { maspcm_array1, sizeof(maspcm_array1) }, - { maspcm_array2, sizeof(maspcm_array2) }, - { maspcm_array3, sizeof(maspcm_array3) }, - { maspcm_array4, sizeof(maspcm_array4) }, - { maspcm_array5, sizeof(maspcm_array5) }, - { maspcm_array6, sizeof(maspcm_array6) }, - { maspcm_array7, sizeof(maspcm_array7) }, - { maspcm_array8, sizeof(maspcm_array8) }, - { maspcm_array9, sizeof(maspcm_array9) }, - { maspcm_array10, sizeof(maspcm_array10) }, -}; - -/************ End of MAS pcm codec ************/ - -#define WAVPLAY_QUIT BUTTON_OFF - -#define PCM_MAIN_IO_CONTROL 0x0661 -#define PCM_IF_STATUS_CONTROL 0x0662 -#define PCM_OFREQ_CONTROL 0x0663 -#define PCM_OUTPUT_CLOCK_CONF 0x0664 -#define PCM_FRAME_COUNTER 0x0665 -#define PCM_APP_RUNNING 0x0666 -#define PCM_SAMPLE_RATE_STATUS 0x0667 -#define PCM_BUFFER_ERROR_COUNTER 0x0668 -#define PCM_SOFT_MUTE 0x0669 -#define PCM_SPDIF_CHANNEL_STATUS 0x066a -#define PCM_SAMPLE_RATE 0x066b -#define PCM_VOL_OUT_LL 0x066c -#define PCM_VOL_OUT_RL 0x066d -#define PCM_VOL_OUT_LR 0x066e -#define PCM_VOL_OUT_RR 0x066f -#define PCM_VOL_IN_LL 0x0670 -#define PCM_VOL_IN_RL 0x0671 -#define PCM_VOL_IN_LR 0x0672 -#define PCM_VOL_IN_RR 0x0673 - -#define IRQ3 (*((volatile unsigned long*)0x0900010C)) -#define IRQ6 (*((volatile unsigned long*)0x09000118)) -#define DEI3 (*((volatile unsigned long*)0x09000138)) - -#define PLAY_OK 0 -#define PLAY_ERROR -1 -#define PLAY_GOT_USB 1 - -#define LOW_WATER_CHUNKSIZE (256*1024) - -/* declarations */ - -void start_demand_isr(void) __attribute__((interrupt_handler)); -void stop_demand_isr(void) __attribute__((interrupt_handler)); -void dma_end_isr(void) __attribute__((interrupt_handler)); - -/* variables */ - -static unsigned char *aud_buf; -static ssize_t aud_size; -static unsigned char *plug_buf; - -static void (*pcm_callback)(unsigned char**, int*) = NULL; -static bool playing = false; -static bool filling; -static int last_dma_chunksize; -static int aud_read = 0; -static int aud_write = 0; -static int low_water = (256*1024); - -/** i2c, MAS configuration **/ - -void i2c_random_write(int addr, int cmd, const unsigned char* data, int size) -{ - plug_buf[0] = cmd; - rb->memcpy(plug_buf+1, data, size); - - rb->i2c_begin(); - rb->i2c_write(addr, plug_buf, size+1); - rb->i2c_end(); -} - -void mas_freeze(void) -{ - static const unsigned char freeze[] = { 0x00, 0x00 }; - - /* Freeze DSP */ - i2c_random_write(MAS_ADR, MAS_DATA_WRITE, freeze, sizeof(freeze)); - /* mas_run(0); in core implementation */ - - /* stop all internal transfers */ - rb->mas_writereg(0x3b, 0x00318); /* stopdma 1 */ - rb->mas_writereg(0x43, 0x00300); /* stopdma 2 */ - rb->mas_writereg(0x4b, 0); /* stopdma 3 */ - rb->mas_writereg(0x53, 0x00318); /* stopdma 4 */ - rb->mas_writereg(0x6b, 0); /* stopdma 5 */ - rb->mas_writereg(0xbb, 0x00318); /* stopdma 6 */ - rb->mas_writereg(0xc3, 0x00300); /* stopdma 7 */ - rb->mas_writereg(0x06, 0); /* stopdma 8 */ -} - -void mas_download_pcm(void) -{ - static const unsigned char runi2s[] = { 0x10, 0x00 }; - unsigned i; - - mas_freeze(); - - // Download program to MAS memory - for ( i = 0; i < (sizeof(maspcm)/sizeof(struct i2c_block)); i++ ) - i2c_random_write(MAS_ADR, MAS_DATA_WRITE, maspcm[i].data, maspcm[i].len); - - rb->mas_writereg(0x6b, 0xc0000); /* Reconfigure data to program memory */ - - /* Start execution at D0:1000 */ - i2c_random_write(MAS_ADR, MAS_DATA_WRITE, runi2s, sizeof(runi2s)); - /* mas_run(0x1000); in core implementation */ -} - -void mas_restore(void) -{ - static const unsigned char resetdsp[] = { 0x88, 0x00 }; - static const unsigned char initdsp[] = { 0x8c, 0x00 }; - unsigned long val; - - i2c_random_write(MAS_ADR, MAS_CONTROL, resetdsp, sizeof(resetdsp)); - /* mas_direct_config_write(MAS_CONTROL, 0x8d00); in core implementation */ - rb->sleep(1); - i2c_random_write(MAS_ADR, MAS_CONTROL, initdsp, sizeof(initdsp)); - /* mas_direct_config_write(MAS_CONTROL, 0x8c00); in core implementation */ - - /* Stop the current application */ - val = 0; - rb->mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); - do - rb->mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); - while(val); - -#ifdef HAVE_SPDIF_OUT - val = 0x0009; /* Disable SDO and SDI, low impedance S/PDIF outputs */ -#else - val = 0x002d; /* Disable SDO and SDI, disable S/PDIF output */ -#endif - rb->mas_writemem(MAS_BANK_D0, MAS_D0_INTERFACE_CONTROL, &val, 1); - - val = 0x0025; /* Set Demand mode and validate all settings */ - rb->mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val, 1); - - val = 0x000c; /* Start the Layer2/3 decoder applications */ - rb->mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); - do - rb->mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); - while((val & 0x000c) != 0x000c); -} - -void pcm_channel_config(int channel_config, int stereo_width) -{ - /* default values: stereo */ - unsigned long val_ll = 0x80001; - unsigned long val_lr = 0; - unsigned long val_rl = 0; - unsigned long val_rr = 0x80001; - - switch(channel_config) - { - /* Note: cases are in different order that in firmware/sound.c - * to work around a gcc bug (jumptable creation)! */ - - /* case SOUND_CHAN_STEREO unnecessary */ - - case SOUND_CHAN_MONO: - val_ll = 0xc0001; - val_lr = 0xc0001; - val_rl = 0xc0001; - val_rr = 0xc0001; - break; - - case SOUND_CHAN_MONO_LEFT: - val_ll = 0x80001; - val_lr = 0x80001; - val_rl = 0; - val_rr = 0; - break; - - case SOUND_CHAN_MONO_RIGHT: - val_ll = 0; - val_lr = 0; - val_rl = 0x80001; - val_rr = 0x80001; - break; - - case SOUND_CHAN_KARAOKE: - val_ll = 0xc0001; - val_lr = 0x3ffff; - val_rl = 0x3ffff; - val_rr = 0xc0001; - break; - - case SOUND_CHAN_CUSTOM: - { - /* fixed point variables (matching MAS internal format) - integer part: upper 13 bits (inlcuding sign) - fractional part: lower 19 bits */ - long fp_width, fp_straight, fp_cross; - - fp_width = (stereo_width * 0x7ffff) / 100; - if (stereo_width <= 100) - { - fp_straight = - (0x7ffff + fp_width) / 2; - fp_cross = fp_straight + fp_width; - } - else - { - /* straight = - (1 + width) / (2 * width) */ - fp_straight = - (((0x7ffff + fp_width) / (fp_width >> 9)) << 9); - fp_cross = 0x7ffff + fp_straight; - } - val_ll = val_rr = fp_straight & 0xfffff; - val_lr = val_rl = fp_cross & 0xfffff; - } - break; - - } - - rb->mas_writemem(MAS_BANK_D0, PCM_VOL_OUT_LL, &val_ll, 1); /* LL */ - rb->mas_writemem(MAS_BANK_D0, PCM_VOL_OUT_LR, &val_lr, 1); /* LR */ - rb->mas_writemem(MAS_BANK_D0, PCM_VOL_OUT_RL, &val_rl, 1); /* RL */ - rb->mas_writemem(MAS_BANK_D0, PCM_VOL_OUT_RR, &val_rr, 1); /* RR */ -} - -/** Basic playback system **/ - -void start_demand_isr(void) -{ - ICR |= 0x0010; /* IRQ3 edge sensitive */ - or_b(0x80, &SCR0); -} - -void stop_demand_isr(void) -{ - and_b(~0x80, &SCR0); -} - -void dma_end_isr(void) -{ - unsigned char* start; - int size = 0; - - if (pcm_callback) - pcm_callback(&start, &size); - - if (size > 0) - { - DTCR3 = size; - SAR3 = (unsigned int) start; - } - else - { - CHCR3 &= ~0x0001; /* Disable the DMA interrupt */ - playing = false; - } - CHCR3 &= ~0x0002; /* Clear DMA interrupt */ -} - -void demand_irq_enable(bool on) -{ - int oldlevel = disable_irq_save(); - - if(on) - { - IPRA = (IPRA & 0xfff0) | 0x000b; - ICR &= ~0x0010; /* IRQ3 level sensitive */ - } - else - { - IPRA &= 0xfff0; - } - - restore_irq(oldlevel); -} - -static inline int available(void) -{ - int space = aud_write - aud_read; - if (space < 0) - space += aud_size; - - return space; -} - -void pcm_get_more(unsigned char** start, int* size) -{ - int advance; - - aud_read += last_dma_chunksize; - if (aud_read >= aud_size) - aud_read = 0; - - advance = MIN(available(), aud_size - aud_read); - advance = MIN(0x4000, advance); - - *start = aud_buf + aud_read; - *size = advance; - - last_dma_chunksize = advance; -} - -void pcm_start(void) -{ - int advance; - - advance = MIN(available(), aud_size - aud_read); - advance = MIN(0x4000, advance); - - if (!advance) - return; - - pcm_callback = pcm_get_more; - - /* init DMA */ - DAR3 = 0x5FFFEC3; |